/ Hex Artifact Content
Login

Artifact 1a9235d74d2b39c47cc8f49957eaad03a3606d35:


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 46   SQLITE_ENABLE_F
0290: 54 53 33 0a 23 20 69 6e 63 6c 75 64 65 20 22 66  TS3.# include "f
02a0: 74 73 33 2e 68 22 0a 23 65 6e 64 69 66 0a 23 69  ts3.h".#endif.#i
02b0: 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
02c0: 4c 45 5f 52 54 52 45 45 0a 23 20 69 6e 63 6c 75  LE_RTREE.# inclu
02d0: 64 65 20 22 72 74 72 65 65 2e 68 22 0a 23 65 6e  de "rtree.h".#en
02e0: 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54  dif.#ifdef SQLIT
02f0: 45 5f 45 4e 41 42 4c 45 5f 49 43 55 0a 23 20 69  E_ENABLE_ICU.# i
0300: 6e 63 6c 75 64 65 20 22 73 71 6c 69 74 65 69 63  nclude "sqliteic
0310: 75 2e 68 22 0a 23 65 6e 64 69 66 0a 23 69 66 64  u.h".#endif.#ifd
0320: 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
0330: 5f 4a 53 4f 4e 31 0a 69 6e 74 20 73 71 6c 69 74  _JSON1.int sqlit
0340: 65 33 4a 73 6f 6e 31 49 6e 69 74 28 73 71 6c 69  e3Json1Init(sqli
0350: 74 65 33 2a 29 3b 0a 23 65 6e 64 69 66 0a 23 69  te3*);.#endif.#i
0360: 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
0370: 4c 45 5f 46 54 53 35 0a 69 6e 74 20 73 71 6c 69  LE_FTS5.int sqli
0380: 74 65 33 46 74 73 35 49 6e 69 74 28 73 71 6c 69  te3Fts5Init(sqli
0390: 74 65 33 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23  te3*);.#endif..#
03a0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 41 4d  ifndef SQLITE_AM
03b0: 41 4c 47 41 4d 41 54 49 4f 4e 0a 2f 2a 20 49 4d  ALGAMATION./* IM
03c0: 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a  PLEMENTATION-OF:
03d0: 20 52 2d 34 36 36 35 36 2d 34 35 31 35 36 20 54   R-46656-45156 T
03e0: 68 65 20 73 71 6c 69 74 65 33 5f 76 65 72 73 69  he sqlite3_versi
03f0: 6f 6e 5b 5d 20 73 74 72 69 6e 67 20 63 6f 6e 73  on[] string cons
0400: 74 61 6e 74 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73  tant.** contains
0410: 20 74 68 65 20 74 65 78 74 20 6f 66 20 53 51 4c   the text of SQL
0420: 49 54 45 5f 56 45 52 53 49 4f 4e 20 6d 61 63 72  ITE_VERSION macr
0430: 6f 2e 20 0a 2a 2f 0a 63 6f 6e 73 74 20 63 68 61  o. .*/.const cha
0440: 72 20 73 71 6c 69 74 65 33 5f 76 65 72 73 69 6f  r sqlite3_versio
0450: 6e 5b 5d 20 3d 20 53 51 4c 49 54 45 5f 56 45 52  n[] = SQLITE_VER
0460: 53 49 4f 4e 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a  SION;.#endif../*
0470: 20 49 4d 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d   IMPLEMENTATION-
0480: 4f 46 3a 20 52 2d 35 33 35 33 36 2d 34 32 35 37  OF: R-53536-4257
0490: 35 20 54 68 65 20 73 71 6c 69 74 65 33 5f 6c 69  5 The sqlite3_li
04a0: 62 76 65 72 73 69 6f 6e 28 29 20 66 75 6e 63 74  bversion() funct
04b0: 69 6f 6e 20 72 65 74 75 72 6e 73 0a 2a 2a 20 61  ion returns.** a
04c0: 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
04d0: 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76  to the sqlite3_v
04e0: 65 72 73 69 6f 6e 5b 5d 20 73 74 72 69 6e 67 20  ersion[] string 
04f0: 63 6f 6e 73 74 61 6e 74 2e 20 0a 2a 2f 0a 63 6f  constant. .*/.co
0500: 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65  nst char *sqlite
0510: 33 5f 6c 69 62 76 65 72 73 69 6f 6e 28 76 6f 69  3_libversion(voi
0520: 64 29 7b 20 72 65 74 75 72 6e 20 73 71 6c 69 74  d){ return sqlit
0530: 65 33 5f 76 65 72 73 69 6f 6e 3b 20 7d 0a 0a 2f  e3_version; }../
0540: 2a 20 49 4d 50 4c 45 4d 45 4e 54 41 54 49 4f 4e  * IMPLEMENTATION
0550: 2d 4f 46 3a 20 52 2d 36 33 31 32 34 2d 33 39 33  -OF: R-63124-393
0560: 30 30 20 54 68 65 20 73 71 6c 69 74 65 33 5f 73  00 The sqlite3_s
0570: 6f 75 72 63 65 69 64 28 29 20 66 75 6e 63 74 69  ourceid() functi
0580: 6f 6e 20 72 65 74 75 72 6e 73 20 61 0a 2a 2a 20  on returns a.** 
0590: 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 73 74 72  pointer to a str
05a0: 69 6e 67 20 63 6f 6e 73 74 61 6e 74 20 77 68 6f  ing constant who
05b0: 73 65 20 76 61 6c 75 65 20 69 73 20 74 68 65 20  se value is the 
05c0: 73 61 6d 65 20 61 73 20 74 68 65 0a 2a 2a 20 53  same as the.** S
05d0: 51 4c 49 54 45 5f 53 4f 55 52 43 45 5f 49 44 20  QLITE_SOURCE_ID 
05e0: 43 20 70 72 65 70 72 6f 63 65 73 73 6f 72 20 6d  C preprocessor m
05f0: 61 63 72 6f 2e 20 0a 2a 2f 0a 63 6f 6e 73 74 20  acro. .*/.const 
0600: 63 68 61 72 20 2a 73 71 6c 69 74 65 33 5f 73 6f  char *sqlite3_so
0610: 75 72 63 65 69 64 28 76 6f 69 64 29 7b 20 72 65  urceid(void){ re
0620: 74 75 72 6e 20 53 51 4c 49 54 45 5f 53 4f 55 52  turn SQLITE_SOUR
0630: 43 45 5f 49 44 3b 20 7d 0a 0a 2f 2a 20 49 4d 50  CE_ID; }../* IMP
0640: 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20  LEMENTATION-OF: 
0650: 52 2d 33 35 32 31 30 2d 36 33 35 30 38 20 54 68  R-35210-63508 Th
0660: 65 20 73 71 6c 69 74 65 33 5f 6c 69 62 76 65 72  e sqlite3_libver
0670: 73 69 6f 6e 5f 6e 75 6d 62 65 72 28 29 20 66 75  sion_number() fu
0680: 6e 63 74 69 6f 6e 0a 2a 2a 20 72 65 74 75 72 6e  nction.** return
0690: 73 20 61 6e 20 69 6e 74 65 67 65 72 20 65 71 75  s an integer equ
06a0: 61 6c 20 74 6f 20 53 51 4c 49 54 45 5f 56 45 52  al to SQLITE_VER
06b0: 53 49 4f 4e 5f 4e 55 4d 42 45 52 2e 0a 2a 2f 0a  SION_NUMBER..*/.
06c0: 69 6e 74 20 73 71 6c 69 74 65 33 5f 6c 69 62 76  int sqlite3_libv
06d0: 65 72 73 69 6f 6e 5f 6e 75 6d 62 65 72 28 76 6f  ersion_number(vo
06e0: 69 64 29 7b 20 72 65 74 75 72 6e 20 53 51 4c 49  id){ return SQLI
06f0: 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42 45  TE_VERSION_NUMBE
0700: 52 3b 20 7d 0a 0a 2f 2a 20 49 4d 50 4c 45 4d 45  R; }../* IMPLEME
0710: 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 32 30  NTATION-OF: R-20
0720: 37 39 30 2d 31 34 30 32 35 20 54 68 65 20 73 71  790-14025 The sq
0730: 6c 69 74 65 33 5f 74 68 72 65 61 64 73 61 66 65  lite3_threadsafe
0740: 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  () function retu
0750: 72 6e 73 0a 2a 2a 20 7a 65 72 6f 20 69 66 20 61  rns.** zero if a
0760: 6e 64 20 6f 6e 6c 79 20 69 66 20 53 51 4c 69 74  nd only if SQLit
0770: 65 20 77 61 73 20 63 6f 6d 70 69 6c 65 64 20 77  e was compiled w
0780: 69 74 68 20 6d 75 74 65 78 69 6e 67 20 63 6f 64  ith mutexing cod
0790: 65 20 6f 6d 69 74 74 65 64 20 64 75 65 20 74 6f  e omitted due to
07a0: 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 54  .** the SQLITE_T
07b0: 48 52 45 41 44 53 41 46 45 20 63 6f 6d 70 69 6c  HREADSAFE compil
07c0: 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 62 65  e-time option be
07d0: 69 6e 67 20 73 65 74 20 74 6f 20 30 2e 0a 2a 2f  ing set to 0..*/
07e0: 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 74 68 72  .int sqlite3_thr
07f0: 65 61 64 73 61 66 65 28 76 6f 69 64 29 7b 20 72  eadsafe(void){ r
0800: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 54 48 52  eturn SQLITE_THR
0810: 45 41 44 53 41 46 45 3b 20 7d 0a 0a 2f 2a 0a 2a  EADSAFE; }../*.*
0820: 2a 20 57 68 65 6e 20 63 6f 6d 70 69 6c 69 6e 67  * When compiling
0830: 20 74 68 65 20 74 65 73 74 20 66 69 78 74 75 72   the test fixtur
0840: 65 20 6f 72 20 77 69 74 68 20 64 65 62 75 67 67  e or with debugg
0850: 69 6e 67 20 65 6e 61 62 6c 65 64 20 28 6f 6e 20  ing enabled (on 
0860: 57 69 6e 33 32 29 2c 0a 2a 2a 20 74 68 69 73 20  Win32),.** this 
0870: 76 61 72 69 61 62 6c 65 20 62 65 69 6e 67 20 73  variable being s
0880: 65 74 20 74 6f 20 6e 6f 6e 2d 7a 65 72 6f 20 77  et to non-zero w
0890: 69 6c 6c 20 63 61 75 73 65 20 4f 53 54 52 41 43  ill cause OSTRAC
08a0: 45 20 6d 61 63 72 6f 73 20 74 6f 20 65 6d 69 74  E macros to emit
08b0: 0a 2a 2a 20 65 78 74 72 61 20 64 69 61 67 6e 6f  .** extra diagno
08c0: 73 74 69 63 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  stic information
08d0: 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
08e0: 54 45 5f 48 41 56 45 5f 4f 53 5f 54 52 41 43 45  TE_HAVE_OS_TRACE
08f0: 0a 23 20 69 66 6e 64 65 66 20 53 51 4c 49 54 45  .# ifndef SQLITE
0900: 5f 44 45 42 55 47 5f 4f 53 5f 54 52 41 43 45 0a  _DEBUG_OS_TRACE.
0910: 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54  #   define SQLIT
0920: 45 5f 44 45 42 55 47 5f 4f 53 5f 54 52 41 43 45  E_DEBUG_OS_TRACE
0930: 20 30 0a 23 20 65 6e 64 69 66 0a 20 20 69 6e 74   0.# endif.  int
0940: 20 73 71 6c 69 74 65 33 4f 53 54 72 61 63 65 20   sqlite3OSTrace 
0950: 3d 20 53 51 4c 49 54 45 5f 44 45 42 55 47 5f 4f  = SQLITE_DEBUG_O
0960: 53 5f 54 52 41 43 45 3b 0a 23 65 6e 64 69 66 0a  S_TRACE;.#endif.
0970: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
0980: 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45 29  LITE_OMIT_TRACE)
0990: 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49   && defined(SQLI
09a0: 54 45 5f 45 4e 41 42 4c 45 5f 49 4f 54 52 41 43  TE_ENABLE_IOTRAC
09b0: 45 29 0a 2f 2a 0a 2a 2a 20 49 66 20 74 68 65 20  E)./*.** If the 
09c0: 66 6f 6c 6c 6f 77 69 6e 67 20 66 75 6e 63 74 69  following functi
09d0: 6f 6e 20 70 6f 69 6e 74 65 72 20 69 73 20 6e 6f  on pointer is no
09e0: 74 20 4e 55 4c 4c 20 61 6e 64 20 69 66 0a 2a 2a  t NULL and if.**
09f0: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 49   SQLITE_ENABLE_I
0a00: 4f 54 52 41 43 45 20 69 73 20 65 6e 61 62 6c 65  OTRACE is enable
0a10: 64 2c 20 74 68 65 6e 20 6d 65 73 73 61 67 65 73  d, then messages
0a20: 20 64 65 73 63 72 69 62 69 6e 67 0a 2a 2a 20 49   describing.** I
0a30: 2f 4f 20 61 63 74 69 76 65 20 61 72 65 20 77 72  /O active are wr
0a40: 69 74 74 65 6e 20 75 73 69 6e 67 20 74 68 69 73  itten using this
0a50: 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54 68 65 73   function.  Thes
0a60: 65 20 6d 65 73 73 61 67 65 73 0a 2a 2a 20 61 72  e messages.** ar
0a70: 65 20 69 6e 74 65 6e 64 65 64 20 66 6f 72 20 64  e intended for d
0a80: 65 62 75 67 67 69 6e 67 20 61 63 74 69 76 69 74  ebugging activit
0a90: 79 20 6f 6e 6c 79 2e 0a 2a 2f 0a 53 51 4c 49 54  y only..*/.SQLIT
0aa0: 45 5f 41 50 49 20 76 6f 69 64 20 28 53 51 4c 49  E_API void (SQLI
0ab0: 54 45 5f 43 44 45 43 4c 20 2a 73 71 6c 69 74 65  TE_CDECL *sqlite
0ac0: 33 49 6f 54 72 61 63 65 29 28 63 6f 6e 73 74 20  3IoTrace)(const 
0ad0: 63 68 61 72 2a 2c 20 2e 2e 2e 29 20 3d 20 30 3b  char*, ...) = 0;
0ae0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49  .#endif../*.** I
0af0: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
0b00: 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20  global variable 
0b10: 70 6f 69 6e 74 73 20 74 6f 20 61 20 73 74 72 69  points to a stri
0b20: 6e 67 20 77 68 69 63 68 20 69 73 20 74 68 65 0a  ng which is the.
0b30: 2a 2a 20 6e 61 6d 65 20 6f 66 20 61 20 64 69 72  ** name of a dir
0b40: 65 63 74 6f 72 79 2c 20 74 68 65 6e 20 74 68 61  ectory, then tha
0b50: 74 20 64 69 72 65 63 74 6f 72 79 20 77 69 6c 6c  t directory will
0b60: 20 62 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72   be used to stor
0b70: 65 0a 2a 2a 20 74 65 6d 70 6f 72 61 72 79 20 66  e.** temporary f
0b80: 69 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  iles..**.** See 
0b90: 61 6c 73 6f 20 74 68 65 20 22 50 52 41 47 4d 41  also the "PRAGMA
0ba0: 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65   temp_store_dire
0bb0: 63 74 6f 72 79 22 20 53 51 4c 20 63 6f 6d 6d 61  ctory" SQL comma
0bc0: 6e 64 2e 0a 2a 2f 0a 63 68 61 72 20 2a 73 71 6c  nd..*/.char *sql
0bd0: 69 74 65 33 5f 74 65 6d 70 5f 64 69 72 65 63 74  ite3_temp_direct
0be0: 6f 72 79 20 3d 20 30 3b 0a 0a 2f 2a 0a 2a 2a 20  ory = 0;../*.** 
0bf0: 49 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  If the following
0c00: 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65   global variable
0c10: 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 73 74 72   points to a str
0c20: 69 6e 67 20 77 68 69 63 68 20 69 73 20 74 68 65  ing which is the
0c30: 0a 2a 2a 20 6e 61 6d 65 20 6f 66 20 61 20 64 69  .** name of a di
0c40: 72 65 63 74 6f 72 79 2c 20 74 68 65 6e 20 74 68  rectory, then th
0c50: 61 74 20 64 69 72 65 63 74 6f 72 79 20 77 69 6c  at directory wil
0c60: 6c 20 62 65 20 75 73 65 64 20 74 6f 20 73 74 6f  l be used to sto
0c70: 72 65 0a 2a 2a 20 61 6c 6c 20 64 61 74 61 62 61  re.** all databa
0c80: 73 65 20 66 69 6c 65 73 20 73 70 65 63 69 66 69  se files specifi
0c90: 65 64 20 77 69 74 68 20 61 20 72 65 6c 61 74 69  ed with a relati
0ca0: 76 65 20 70 61 74 68 6e 61 6d 65 2e 0a 2a 2a 0a  ve pathname..**.
0cb0: 2a 2a 20 53 65 65 20 61 6c 73 6f 20 74 68 65 20  ** See also the 
0cc0: 22 50 52 41 47 4d 41 20 64 61 74 61 5f 73 74 6f  "PRAGMA data_sto
0cd0: 72 65 5f 64 69 72 65 63 74 6f 72 79 22 20 53 51  re_directory" SQ
0ce0: 4c 20 63 6f 6d 6d 61 6e 64 2e 0a 2a 2f 0a 63 68  L command..*/.ch
0cf0: 61 72 20 2a 73 71 6c 69 74 65 33 5f 64 61 74 61  ar *sqlite3_data
0d00: 5f 64 69 72 65 63 74 6f 72 79 20 3d 20 30 3b 0a  _directory = 0;.
0d10: 0a 2f 2a 0a 2a 2a 20 49 6e 69 74 69 61 6c 69 7a  ./*.** Initializ
0d20: 65 20 53 51 4c 69 74 65 2e 20 20 0a 2a 2a 0a 2a  e SQLite.  .**.*
0d30: 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 6d  * This routine m
0d40: 75 73 74 20 62 65 20 63 61 6c 6c 65 64 20 74 6f  ust be called to
0d50: 20 69 6e 69 74 69 61 6c 69 7a 65 20 74 68 65 20   initialize the 
0d60: 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
0d70: 6e 2c 0a 2a 2a 20 56 46 53 2c 20 61 6e 64 20 6d  n,.** VFS, and m
0d80: 75 74 65 78 20 73 75 62 73 79 73 74 65 6d 73 20  utex subsystems 
0d90: 70 72 69 6f 72 20 74 6f 20 64 6f 69 6e 67 20 61  prior to doing a
0da0: 6e 79 20 73 65 72 69 6f 75 73 20 77 6f 72 6b 20  ny serious work 
0db0: 77 69 74 68 0a 2a 2a 20 53 51 4c 69 74 65 2e 20  with.** SQLite. 
0dc0: 20 42 75 74 20 61 73 20 6c 6f 6e 67 20 61 73 20   But as long as 
0dd0: 79 6f 75 20 64 6f 20 6e 6f 74 20 63 6f 6d 70 69  you do not compi
0de0: 6c 65 20 77 69 74 68 20 53 51 4c 49 54 45 5f 4f  le with SQLITE_O
0df0: 4d 49 54 5f 41 55 54 4f 49 4e 49 54 0a 2a 2a 20  MIT_AUTOINIT.** 
0e00: 74 68 69 73 20 72 6f 75 74 69 6e 65 20 77 69 6c  this routine wil
0e10: 6c 20 62 65 20 63 61 6c 6c 65 64 20 61 75 74 6f  l be called auto
0e20: 6d 61 74 69 63 61 6c 6c 79 20 62 79 20 6b 65 79  matically by key
0e30: 20 72 6f 75 74 69 6e 65 73 20 73 75 63 68 20 61   routines such a
0e40: 73 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 6f 70 65  s.** sqlite3_ope
0e50: 6e 28 29 2e 20 20 0a 2a 2a 0a 2a 2a 20 54 68 69  n().  .**.** Thi
0e60: 73 20 72 6f 75 74 69 6e 65 20 69 73 20 61 20 6e  s routine is a n
0e70: 6f 2d 6f 70 20 65 78 63 65 70 74 20 6f 6e 20 69  o-op except on i
0e80: 74 73 20 76 65 72 79 20 66 69 72 73 74 20 63 61  ts very first ca
0e90: 6c 6c 20 66 6f 72 20 74 68 65 20 70 72 6f 63 65  ll for the proce
0ea0: 73 73 2c 0a 2a 2a 20 6f 72 20 66 6f 72 20 74 68  ss,.** or for th
0eb0: 65 20 66 69 72 73 74 20 63 61 6c 6c 20 61 66 74  e first call aft
0ec0: 65 72 20 61 20 63 61 6c 6c 20 74 6f 20 73 71 6c  er a call to sql
0ed0: 69 74 65 33 5f 73 68 75 74 64 6f 77 6e 2e 0a 2a  ite3_shutdown..*
0ee0: 2a 0a 2a 2a 20 54 68 65 20 66 69 72 73 74 20 74  *.** The first t
0ef0: 68 72 65 61 64 20 74 6f 20 63 61 6c 6c 20 74 68  hread to call th
0f00: 69 73 20 72 6f 75 74 69 6e 65 20 72 75 6e 73 20  is routine runs 
0f10: 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  the initializati
0f20: 6f 6e 20 74 6f 0a 2a 2a 20 63 6f 6d 70 6c 65 74  on to.** complet
0f30: 69 6f 6e 2e 20 20 49 66 20 73 75 62 73 65 71 75  ion.  If subsequ
0f40: 65 6e 74 20 74 68 72 65 61 64 73 20 63 61 6c 6c  ent threads call
0f50: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 62 65   this routine be
0f60: 66 6f 72 65 20 74 68 65 20 66 69 72 73 74 0a 2a  fore the first.*
0f70: 2a 20 74 68 72 65 61 64 20 68 61 73 20 66 69 6e  * thread has fin
0f80: 69 73 68 65 64 20 74 68 65 20 69 6e 69 74 69 61  ished the initia
0f90: 6c 69 7a 61 74 69 6f 6e 20 70 72 6f 63 65 73 73  lization process
0fa0: 2c 20 74 68 65 6e 20 74 68 65 20 73 75 62 73 65  , then the subse
0fb0: 71 75 65 6e 74 0a 2a 2a 20 74 68 72 65 61 64 73  quent.** threads
0fc0: 20 6d 75 73 74 20 62 6c 6f 63 6b 20 75 6e 74 69   must block unti
0fd0: 6c 20 74 68 65 20 66 69 72 73 74 20 74 68 72 65  l the first thre
0fe0: 61 64 20 66 69 6e 69 73 68 65 73 20 77 69 74 68  ad finishes with
0ff0: 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 61 74   the initializat
1000: 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66  ion..**.** The f
1010: 69 72 73 74 20 74 68 72 65 61 64 20 6d 69 67 68  irst thread migh
1020: 74 20 63 61 6c 6c 20 74 68 69 73 20 72 6f 75 74  t call this rout
1030: 69 6e 65 20 72 65 63 75 72 73 69 76 65 6c 79 2e  ine recursively.
1040: 20 20 52 65 63 75 72 73 69 76 65 0a 2a 2a 20 63    Recursive.** c
1050: 61 6c 6c 73 20 74 6f 20 74 68 69 73 20 72 6f 75  alls to this rou
1060: 74 69 6e 65 20 73 68 6f 75 6c 64 20 6e 6f 74 20  tine should not 
1070: 62 6c 6f 63 6b 2c 20 6f 66 20 63 6f 75 72 73 65  block, of course
1080: 2e 20 20 4f 74 68 65 72 77 69 73 65 20 74 68 65  .  Otherwise the
1090: 0a 2a 2a 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  .** initializati
10a0: 6f 6e 20 70 72 6f 63 65 73 73 20 77 6f 75 6c 64  on process would
10b0: 20 6e 65 76 65 72 20 63 6f 6d 70 6c 65 74 65 2e   never complete.
10c0: 0a 2a 2a 0a 2a 2a 20 4c 65 74 20 58 20 62 65 20  .**.** Let X be 
10d0: 74 68 65 20 66 69 72 73 74 20 74 68 72 65 61 64  the first thread
10e0: 20 74 6f 20 65 6e 74 65 72 20 74 68 69 73 20 72   to enter this r
10f0: 6f 75 74 69 6e 65 2e 20 20 4c 65 74 20 59 20 62  outine.  Let Y b
1100: 65 20 73 6f 6d 65 20 6f 74 68 65 72 0a 2a 2a 20  e some other.** 
1110: 74 68 72 65 61 64 2e 20 20 54 68 65 6e 20 77 68  thread.  Then wh
1120: 69 6c 65 20 74 68 65 20 69 6e 69 74 69 61 6c 20  ile the initial 
1130: 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68  invocation of th
1140: 69 73 20 72 6f 75 74 69 6e 65 20 62 79 20 58 20  is routine by X 
1150: 69 73 0a 2a 2a 20 69 6e 63 6f 6d 70 6c 65 74 65  is.** incomplete
1160: 2c 20 69 74 20 69 73 20 72 65 71 75 69 72 65 64  , it is required
1170: 20 74 68 61 74 3a 0a 2a 2a 0a 2a 2a 20 20 20 20   that:.**.**    
1180: 2a 20 20 43 61 6c 6c 73 20 74 6f 20 74 68 69 73  *  Calls to this
1190: 20 72 6f 75 74 69 6e 65 20 66 72 6f 6d 20 59 20   routine from Y 
11a0: 6d 75 73 74 20 62 6c 6f 63 6b 20 75 6e 74 69 6c  must block until
11b0: 20 74 68 65 20 6f 75 74 65 72 2d 6d 6f 73 74 0a   the outer-most.
11c0: 2a 2a 20 20 20 20 20 20 20 63 61 6c 6c 20 62 79  **       call by
11d0: 20 58 20 63 6f 6d 70 6c 65 74 65 73 2e 0a 2a 2a   X completes..**
11e0: 0a 2a 2a 20 20 20 20 2a 20 20 52 65 63 75 72 73  .**    *  Recurs
11f0: 69 76 65 20 63 61 6c 6c 73 20 74 6f 20 74 68 69  ive calls to thi
1200: 73 20 72 6f 75 74 69 6e 65 20 66 72 6f 6d 20 74  s routine from t
1210: 68 72 65 61 64 20 58 20 72 65 74 75 72 6e 20 69  hread X return i
1220: 6d 6d 65 64 69 61 74 65 6c 79 0a 2a 2a 20 20 20  mmediately.**   
1230: 20 20 20 20 77 69 74 68 6f 75 74 20 62 6c 6f 63      without bloc
1240: 6b 69 6e 67 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c  king..*/.int sql
1250: 69 74 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65 28  ite3_initialize(
1260: 76 6f 69 64 29 7b 0a 20 20 4d 55 54 45 58 5f 4c  void){.  MUTEX_L
1270: 4f 47 49 43 28 20 73 71 6c 69 74 65 33 5f 6d 75  OGIC( sqlite3_mu
1280: 74 65 78 20 2a 70 4d 61 73 74 65 72 3b 20 29 20  tex *pMaster; ) 
1290: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6d 61 69        /* The mai
12a0: 6e 20 73 74 61 74 69 63 20 6d 75 74 65 78 20 2a  n static mutex *
12b0: 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20 20 20 20  /.  int rc;     
12c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e0: 20 2f 2a 20 52 65 73 75 6c 74 20 63 6f 64 65 20   /* Result code 
12f0: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
1300: 5f 45 58 54 52 41 5f 49 4e 49 54 0a 20 20 69 6e  _EXTRA_INIT.  in
1310: 74 20 62 52 75 6e 45 78 74 72 61 49 6e 69 74 20  t bRunExtraInit 
1320: 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 20  = 0;            
1330: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78             /* Ex
1340: 74 72 61 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  tra initializati
1350: 6f 6e 20 6e 65 65 64 65 64 20 2a 2f 0a 23 65 6e  on needed */.#en
1360: 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
1370: 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 20 20 72 63  TE_OMIT_WSD.  rc
1380: 20 3d 20 73 71 6c 69 74 65 33 5f 77 73 64 5f 69   = sqlite3_wsd_i
1390: 6e 69 74 28 34 30 39 36 2c 20 32 34 29 3b 0a 20  nit(4096, 24);. 
13a0: 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
13b0: 4f 4b 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  OK ){.    return
13c0: 20 72 63 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a   rc;.  }.#endif.
13d0: 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 66 6f 6c  .  /* If the fol
13e0: 6c 6f 77 69 6e 67 20 61 73 73 65 72 74 28 29 20  lowing assert() 
13f0: 66 61 69 6c 73 20 6f 6e 20 73 6f 6d 65 20 6f 62  fails on some ob
1400: 73 63 75 72 65 20 70 72 6f 63 65 73 73 6f 72 2f  scure processor/
1410: 63 6f 6d 70 69 6c 65 72 0a 20 20 2a 2a 20 63 6f  compiler.  ** co
1420: 6d 62 69 6e 61 74 69 6f 6e 2c 20 74 68 65 20 77  mbination, the w
1430: 6f 72 6b 2d 61 72 6f 75 6e 64 20 69 73 20 74 6f  ork-around is to
1440: 20 73 65 74 20 74 68 65 20 63 6f 72 72 65 63 74   set the correct
1450: 20 70 6f 69 6e 74 65 72 0a 20 20 2a 2a 20 73 69   pointer.  ** si
1460: 7a 65 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69  ze at compile-ti
1470: 6d 65 20 75 73 69 6e 67 20 2d 44 53 51 4c 49 54  me using -DSQLIT
1480: 45 5f 50 54 52 53 49 5a 45 3d 6e 20 63 6f 6d 70  E_PTRSIZE=n comp
1490: 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20  ile-time option 
14a0: 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 53 51 4c  */.  assert( SQL
14b0: 49 54 45 5f 50 54 52 53 49 5a 45 3d 3d 73 69 7a  ITE_PTRSIZE==siz
14c0: 65 6f 66 28 63 68 61 72 2a 29 20 29 3b 0a 0a 20  eof(char*) );.. 
14d0: 20 2f 2a 20 49 66 20 53 51 4c 69 74 65 20 69 73   /* If SQLite is
14e0: 20 61 6c 72 65 61 64 79 20 63 6f 6d 70 6c 65 74   already complet
14f0: 65 6c 79 20 69 6e 69 74 69 61 6c 69 7a 65 64 2c  ely initialized,
1500: 20 74 68 65 6e 20 74 68 69 73 20 63 61 6c 6c 0a   then this call.
1510: 20 20 2a 2a 20 74 6f 20 73 71 6c 69 74 65 33 5f    ** to sqlite3_
1520: 69 6e 69 74 69 61 6c 69 7a 65 28 29 20 73 68 6f  initialize() sho
1530: 75 6c 64 20 62 65 20 61 20 6e 6f 2d 6f 70 2e 20  uld be a no-op. 
1540: 20 42 75 74 20 74 68 65 20 69 6e 69 74 69 61 6c   But the initial
1550: 69 7a 61 74 69 6f 6e 0a 20 20 2a 2a 20 6d 75 73  ization.  ** mus
1560: 74 20 62 65 20 63 6f 6d 70 6c 65 74 65 2e 20 20  t be complete.  
1570: 53 6f 20 69 73 49 6e 69 74 20 6d 75 73 74 20 6e  So isInit must n
1580: 6f 74 20 62 65 20 73 65 74 20 75 6e 74 69 6c 20  ot be set until 
1590: 74 68 65 20 76 65 72 79 20 65 6e 64 0a 20 20 2a  the very end.  *
15a0: 2a 20 6f 66 20 74 68 69 73 20 72 6f 75 74 69 6e  * of this routin
15b0: 65 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 73 71  e..  */.  if( sq
15c0: 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69  lite3GlobalConfi
15d0: 67 2e 69 73 49 6e 69 74 20 29 20 72 65 74 75 72  g.isInit ) retur
15e0: 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 0a 20 20  n SQLITE_OK;..  
15f0: 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65  /* Make sure the
1600: 20 6d 75 74 65 78 20 73 75 62 73 79 73 74 65 6d   mutex subsystem
1610: 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e   is initialized.
1620: 20 20 49 66 20 75 6e 61 62 6c 65 20 74 6f 20 0a    If unable to .
1630: 20 20 2a 2a 20 69 6e 69 74 69 61 6c 69 7a 65 20    ** initialize 
1640: 74 68 65 20 6d 75 74 65 78 20 73 75 62 73 79 73  the mutex subsys
1650: 74 65 6d 2c 20 72 65 74 75 72 6e 20 65 61 72 6c  tem, return earl
1660: 79 20 77 69 74 68 20 74 68 65 20 65 72 72 6f 72  y with the error
1670: 2e 0a 20 20 2a 2a 20 49 66 20 74 68 65 20 73 79  ..  ** If the sy
1680: 73 74 65 6d 20 69 73 20 73 6f 20 73 69 63 6b 20  stem is so sick 
1690: 74 68 61 74 20 77 65 20 61 72 65 20 75 6e 61 62  that we are unab
16a0: 6c 65 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20 61  le to allocate a
16b0: 20 6d 75 74 65 78 2c 0a 20 20 2a 2a 20 74 68 65   mutex,.  ** the
16c0: 72 65 20 69 73 20 6e 6f 74 20 6d 75 63 68 20 53  re is not much S
16d0: 51 4c 69 74 65 20 69 73 20 67 6f 69 6e 67 20 74  QLite is going t
16e0: 6f 20 62 65 20 61 62 6c 65 20 74 6f 20 64 6f 2e  o be able to do.
16f0: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 6d  .  **.  ** The m
1700: 75 74 65 78 20 73 75 62 73 79 73 74 65 6d 20 6d  utex subsystem m
1710: 75 73 74 20 74 61 6b 65 20 63 61 72 65 20 6f 66  ust take care of
1720: 20 73 65 72 69 61 6c 69 7a 69 6e 67 20 69 74 73   serializing its
1730: 20 6f 77 6e 0a 20 20 2a 2a 20 69 6e 69 74 69 61   own.  ** initia
1740: 6c 69 7a 61 74 69 6f 6e 2e 0a 20 20 2a 2f 0a 20  lization..  */. 
1750: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 4d 75 74   rc = sqlite3Mut
1760: 65 78 49 6e 69 74 28 29 3b 0a 20 20 69 66 28 20  exInit();.  if( 
1770: 72 63 20 29 20 72 65 74 75 72 6e 20 72 63 3b 0a  rc ) return rc;.
1780: 0a 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65  .  /* Initialize
1790: 20 74 68 65 20 6d 61 6c 6c 6f 63 28 29 20 73 79   the malloc() sy
17a0: 73 74 65 6d 20 61 6e 64 20 74 68 65 20 72 65 63  stem and the rec
17b0: 75 72 73 69 76 65 20 70 49 6e 69 74 4d 75 74 65  ursive pInitMute
17c0: 78 20 6d 75 74 65 78 2e 0a 20 20 2a 2a 20 54 68  x mutex..  ** Th
17d0: 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20  is operation is 
17e0: 70 72 6f 74 65 63 74 65 64 20 62 79 20 74 68 65  protected by the
17f0: 20 53 54 41 54 49 43 5f 4d 41 53 54 45 52 20 6d   STATIC_MASTER m
1800: 75 74 65 78 2e 20 20 4e 6f 74 65 20 74 68 61 74  utex.  Note that
1810: 0a 20 20 2a 2a 20 4d 75 74 65 78 41 6c 6c 6f 63  .  ** MutexAlloc
1820: 28 29 20 69 73 20 63 61 6c 6c 65 64 20 66 6f 72  () is called for
1830: 20 61 20 73 74 61 74 69 63 20 6d 75 74 65 78 20   a static mutex 
1840: 70 72 69 6f 72 20 74 6f 20 69 6e 69 74 69 61 6c  prior to initial
1850: 69 7a 69 6e 67 20 74 68 65 0a 20 20 2a 2a 20 6d  izing the.  ** m
1860: 61 6c 6c 6f 63 20 73 75 62 73 79 73 74 65 6d 20  alloc subsystem 
1870: 2d 20 74 68 69 73 20 69 6d 70 6c 69 65 73 20 74  - this implies t
1880: 68 61 74 20 74 68 65 20 61 6c 6c 6f 63 61 74 69  hat the allocati
1890: 6f 6e 20 6f 66 20 61 20 73 74 61 74 69 63 0a 20  on of a static. 
18a0: 20 2a 2a 20 6d 75 74 65 78 20 6d 75 73 74 20 6e   ** mutex must n
18b0: 6f 74 20 72 65 71 75 69 72 65 20 73 75 70 70 6f  ot require suppo
18c0: 72 74 20 66 72 6f 6d 20 74 68 65 20 6d 61 6c 6c  rt from the mall
18d0: 6f 63 20 73 75 62 73 79 73 74 65 6d 2e 0a 20 20  oc subsystem..  
18e0: 2a 2f 0a 20 20 4d 55 54 45 58 5f 4c 4f 47 49 43  */.  MUTEX_LOGIC
18f0: 28 20 70 4d 61 73 74 65 72 20 3d 20 73 71 6c 69  ( pMaster = sqli
1900: 74 65 33 4d 75 74 65 78 41 6c 6c 6f 63 28 53 51  te3MutexAlloc(SQ
1910: 4c 49 54 45 5f 4d 55 54 45 58 5f 53 54 41 54 49  LITE_MUTEX_STATI
1920: 43 5f 4d 41 53 54 45 52 29 3b 20 29 0a 20 20 73  C_MASTER); ).  s
1930: 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74  qlite3_mutex_ent
1940: 65 72 28 70 4d 61 73 74 65 72 29 3b 0a 20 20 69  er(pMaster);.  i
1950: 66 28 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c  f( sqlite3Global
1960: 43 6f 6e 66 69 67 2e 69 73 49 6e 69 74 20 29 7b  Config.isInit ){
1970: 0a 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c  .    assert( sql
1980: 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67  ite3GlobalConfig
1990: 2e 69 73 4d 75 74 65 78 49 6e 69 74 20 29 3b 0a  .isMutexInit );.
19a0: 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69      assert( sqli
19b0: 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e  te3GlobalConfig.
19c0: 69 73 4d 61 6c 6c 6f 63 49 6e 69 74 20 29 3b 0a  isMallocInit );.
19d0: 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65      sqlite3_mute
19e0: 78 5f 6c 65 61 76 65 28 70 4d 61 73 74 65 72 29  x_leave(pMaster)
19f0: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  ;.    return SQL
1a00: 49 54 45 5f 4f 4b 3b 0a 20 20 7d 0a 20 20 73 71  ITE_OK;.  }.  sq
1a10: 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69  lite3GlobalConfi
1a20: 67 2e 69 73 4d 75 74 65 78 49 6e 69 74 20 3d 20  g.isMutexInit = 
1a30: 31 3b 0a 20 20 69 66 28 20 21 73 71 6c 69 74 65  1;.  if( !sqlite
1a40: 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 69 73  3GlobalConfig.is
1a50: 4d 61 6c 6c 6f 63 49 6e 69 74 20 29 7b 0a 20 20  MallocInit ){.  
1a60: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 4d 61    rc = sqlite3Ma
1a70: 6c 6c 6f 63 49 6e 69 74 28 29 3b 0a 20 20 7d 0a  llocInit();.  }.
1a80: 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
1a90: 5f 4f 4b 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  _OK ){.    sqlit
1aa0: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 69  e3GlobalConfig.i
1ab0: 73 4d 61 6c 6c 6f 63 49 6e 69 74 20 3d 20 31 3b  sMallocInit = 1;
1ac0: 0a 20 20 20 20 69 66 28 20 21 73 71 6c 69 74 65  .    if( !sqlite
1ad0: 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 70 49  3GlobalConfig.pI
1ae0: 6e 69 74 4d 75 74 65 78 20 29 7b 0a 20 20 20 20  nitMutex ){.    
1af0: 20 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43    sqlite3GlobalC
1b00: 6f 6e 66 69 67 2e 70 49 6e 69 74 4d 75 74 65 78  onfig.pInitMutex
1b10: 20 3d 0a 20 20 20 20 20 20 20 20 20 20 20 73 71   =.           sq
1b20: 6c 69 74 65 33 4d 75 74 65 78 41 6c 6c 6f 63 28  lite3MutexAlloc(
1b30: 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 52 45 43  SQLITE_MUTEX_REC
1b40: 55 52 53 49 56 45 29 3b 0a 20 20 20 20 20 20 69  URSIVE);.      i
1b50: 66 28 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c  f( sqlite3Global
1b60: 43 6f 6e 66 69 67 2e 62 43 6f 72 65 4d 75 74 65  Config.bCoreMute
1b70: 78 20 26 26 20 21 73 71 6c 69 74 65 33 47 6c 6f  x && !sqlite3Glo
1b80: 62 61 6c 43 6f 6e 66 69 67 2e 70 49 6e 69 74 4d  balConfig.pInitM
1b90: 75 74 65 78 20 29 7b 0a 20 20 20 20 20 20 20 20  utex ){.        
1ba0: 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45  rc = SQLITE_NOME
1bb0: 4d 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  M;.      }.    }
1bc0: 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 3d 3d 53  .  }.  if( rc==S
1bd0: 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
1be0: 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e  sqlite3GlobalCon
1bf0: 66 69 67 2e 6e 52 65 66 49 6e 69 74 4d 75 74 65  fig.nRefInitMute
1c00: 78 2b 2b 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74  x++;.  }.  sqlit
1c10: 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 70  e3_mutex_leave(p
1c20: 4d 61 73 74 65 72 29 3b 0a 0a 20 20 2f 2a 20 49  Master);..  /* I
1c30: 66 20 72 63 20 69 73 20 6e 6f 74 20 53 51 4c 49  f rc is not SQLI
1c40: 54 45 5f 4f 4b 20 61 74 20 74 68 69 73 20 70 6f  TE_OK at this po
1c50: 69 6e 74 2c 20 74 68 65 6e 20 65 69 74 68 65 72  int, then either
1c60: 20 74 68 65 20 6d 61 6c 6c 6f 63 0a 20 20 2a 2a   the malloc.  **
1c70: 20 73 75 62 73 79 73 74 65 6d 20 63 6f 75 6c 64   subsystem could
1c80: 20 6e 6f 74 20 62 65 20 69 6e 69 74 69 61 6c 69   not be initiali
1c90: 7a 65 64 20 6f 72 20 74 68 65 20 73 79 73 74 65  zed or the syste
1ca0: 6d 20 66 61 69 6c 65 64 20 74 6f 20 61 6c 6c 6f  m failed to allo
1cb0: 63 61 74 65 0a 20 20 2a 2a 20 74 68 65 20 70 49  cate.  ** the pI
1cc0: 6e 69 74 4d 75 74 65 78 20 6d 75 74 65 78 2e 20  nitMutex mutex. 
1cd0: 52 65 74 75 72 6e 20 61 6e 20 65 72 72 6f 72 20  Return an error 
1ce0: 69 6e 20 65 69 74 68 65 72 20 63 61 73 65 2e 20  in either case. 
1cf0: 20 2a 2f 0a 20 20 69 66 28 20 72 63 21 3d 53 51   */.  if( rc!=SQ
1d00: 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72  LITE_OK ){.    r
1d10: 65 74 75 72 6e 20 72 63 3b 0a 20 20 7d 0a 0a 20  eturn rc;.  }.. 
1d20: 20 2f 2a 20 44 6f 20 74 68 65 20 72 65 73 74 20   /* Do the rest 
1d30: 6f 66 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a  of the initializ
1d40: 61 74 69 6f 6e 20 75 6e 64 65 72 20 74 68 65 20  ation under the 
1d50: 72 65 63 75 72 73 69 76 65 20 6d 75 74 65 78 20  recursive mutex 
1d60: 73 6f 0a 20 20 2a 2a 20 74 68 61 74 20 77 65 20  so.  ** that we 
1d70: 77 69 6c 6c 20 62 65 20 61 62 6c 65 20 74 6f 20  will be able to 
1d80: 68 61 6e 64 6c 65 20 72 65 63 75 72 73 69 76 65  handle recursive
1d90: 20 63 61 6c 6c 73 20 69 6e 74 6f 0a 20 20 2a 2a   calls into.  **
1da0: 20 73 71 6c 69 74 65 33 5f 69 6e 69 74 69 61 6c   sqlite3_initial
1db0: 69 7a 65 28 29 2e 20 20 54 68 65 20 72 65 63 75  ize().  The recu
1dc0: 72 73 69 76 65 20 63 61 6c 6c 73 20 6e 6f 72 6d  rsive calls norm
1dd0: 61 6c 6c 79 20 63 6f 6d 65 20 74 68 72 6f 75 67  ally come throug
1de0: 68 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 5f 6f  h.  ** sqlite3_o
1df0: 73 5f 69 6e 69 74 28 29 20 77 68 65 6e 20 69 74  s_init() when it
1e00: 20 69 6e 76 6f 6b 65 73 20 73 71 6c 69 74 65 33   invokes sqlite3
1e10: 5f 76 66 73 5f 72 65 67 69 73 74 65 72 28 29 2c  _vfs_register(),
1e20: 20 62 75 74 20 6f 74 68 65 72 0a 20 20 2a 2a 20   but other.  ** 
1e30: 72 65 63 75 72 73 69 76 65 20 63 61 6c 6c 73 20  recursive calls 
1e40: 6d 69 67 68 74 20 61 6c 73 6f 20 62 65 20 70 6f  might also be po
1e50: 73 73 69 62 6c 65 2e 0a 20 20 2a 2a 0a 20 20 2a  ssible..  **.  *
1e60: 2a 20 49 4d 50 4c 45 4d 45 4e 54 41 54 49 4f 4e  * IMPLEMENTATION
1e70: 2d 4f 46 3a 20 52 2d 30 30 31 34 30 2d 33 37 34  -OF: R-00140-374
1e80: 34 35 20 53 51 4c 69 74 65 20 61 75 74 6f 6d 61  45 SQLite automa
1e90: 74 69 63 61 6c 6c 79 20 73 65 72 69 61 6c 69 7a  tically serializ
1ea0: 65 73 20 63 61 6c 6c 73 0a 20 20 2a 2a 20 74 6f  es calls.  ** to
1eb0: 20 74 68 65 20 78 49 6e 69 74 20 6d 65 74 68 6f   the xInit metho
1ec0: 64 2c 20 73 6f 20 74 68 65 20 78 49 6e 69 74 20  d, so the xInit 
1ed0: 6d 65 74 68 6f 64 20 6e 65 65 64 20 6e 6f 74 20  method need not 
1ee0: 62 65 20 74 68 72 65 61 64 73 61 66 65 2e 0a 20  be threadsafe.. 
1ef0: 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 66 6f 6c   **.  ** The fol
1f00: 6c 6f 77 69 6e 67 20 6d 75 74 65 78 20 69 73 20  lowing mutex is 
1f10: 77 68 61 74 20 73 65 72 69 61 6c 69 7a 65 73 20  what serializes 
1f20: 61 63 63 65 73 73 20 74 6f 20 74 68 65 20 61 70  access to the ap
1f30: 70 64 65 66 20 70 63 61 63 68 65 20 78 49 6e 69  pdef pcache xIni
1f40: 74 0a 20 20 2a 2a 20 6d 65 74 68 6f 64 73 2e 20  t.  ** methods. 
1f50: 20 54 68 65 20 73 71 6c 69 74 65 33 5f 70 63 61   The sqlite3_pca
1f60: 63 68 65 5f 6d 65 74 68 6f 64 73 2e 78 49 6e 69  che_methods.xIni
1f70: 74 28 29 20 61 6c 6c 20 69 73 20 65 6d 62 65 64  t() all is embed
1f80: 64 65 64 20 69 6e 20 74 68 65 0a 20 20 2a 2a 20  ded in the.  ** 
1f90: 63 61 6c 6c 20 74 6f 20 73 71 6c 69 74 65 33 50  call to sqlite3P
1fa0: 63 61 63 68 65 49 6e 69 74 69 61 6c 69 7a 65 28  cacheInitialize(
1fb0: 29 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65  )..  */.  sqlite
1fc0: 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72 28 73 71  3_mutex_enter(sq
1fd0: 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69  lite3GlobalConfi
1fe0: 67 2e 70 49 6e 69 74 4d 75 74 65 78 29 3b 0a 20  g.pInitMutex);. 
1ff0: 20 69 66 28 20 73 71 6c 69 74 65 33 47 6c 6f 62   if( sqlite3Glob
2000: 61 6c 43 6f 6e 66 69 67 2e 69 73 49 6e 69 74 3d  alConfig.isInit=
2010: 3d 30 20 26 26 20 73 71 6c 69 74 65 33 47 6c 6f  =0 && sqlite3Glo
2020: 62 61 6c 43 6f 6e 66 69 67 2e 69 6e 50 72 6f 67  balConfig.inProg
2030: 72 65 73 73 3d 3d 30 20 29 7b 0a 20 20 20 20 46  ress==0 ){.    F
2040: 75 6e 63 44 65 66 48 61 73 68 20 2a 70 48 61 73  uncDefHash *pHas
2050: 68 20 3d 20 26 47 4c 4f 42 41 4c 28 46 75 6e 63  h = &GLOBAL(Func
2060: 44 65 66 48 61 73 68 2c 20 73 71 6c 69 74 65 33  DefHash, sqlite3
2070: 47 6c 6f 62 61 6c 46 75 6e 63 74 69 6f 6e 73 29  GlobalFunctions)
2080: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 47 6c 6f  ;.    sqlite3Glo
2090: 62 61 6c 43 6f 6e 66 69 67 2e 69 6e 50 72 6f 67  balConfig.inProg
20a0: 72 65 73 73 20 3d 20 31 3b 0a 20 20 20 20 6d 65  ress = 1;.    me
20b0: 6d 73 65 74 28 70 48 61 73 68 2c 20 30 2c 20 73  mset(pHash, 0, s
20c0: 69 7a 65 6f 66 28 73 71 6c 69 74 65 33 47 6c 6f  izeof(sqlite3Glo
20d0: 62 61 6c 46 75 6e 63 74 69 6f 6e 73 29 29 3b 0a  balFunctions));.
20e0: 20 20 20 20 73 71 6c 69 74 65 33 52 65 67 69 73      sqlite3Regis
20f0: 74 65 72 47 6c 6f 62 61 6c 46 75 6e 63 74 69 6f  terGlobalFunctio
2100: 6e 73 28 29 3b 0a 20 20 20 20 69 66 28 20 73 71  ns();.    if( sq
2110: 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69  lite3GlobalConfi
2120: 67 2e 69 73 50 43 61 63 68 65 49 6e 69 74 3d 3d  g.isPCacheInit==
2130: 30 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  0 ){.      rc = 
2140: 73 71 6c 69 74 65 33 50 63 61 63 68 65 49 6e 69  sqlite3PcacheIni
2150: 74 69 61 6c 69 7a 65 28 29 3b 0a 20 20 20 20 7d  tialize();.    }
2160: 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  .    if( rc==SQL
2170: 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
2180: 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e  sqlite3GlobalCon
2190: 66 69 67 2e 69 73 50 43 61 63 68 65 49 6e 69 74  fig.isPCacheInit
21a0: 20 3d 20 31 3b 0a 20 20 20 20 20 20 72 63 20 3d   = 1;.      rc =
21b0: 20 73 71 6c 69 74 65 33 4f 73 49 6e 69 74 28 29   sqlite3OsInit()
21c0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
21d0: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
21e0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 50 43  .      sqlite3PC
21f0: 61 63 68 65 42 75 66 66 65 72 53 65 74 75 70 28  acheBufferSetup(
2200: 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f   sqlite3GlobalCo
2210: 6e 66 69 67 2e 70 50 61 67 65 2c 20 0a 20 20 20  nfig.pPage, .   
2220: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 47 6c         sqlite3Gl
2230: 6f 62 61 6c 43 6f 6e 66 69 67 2e 73 7a 50 61 67  obalConfig.szPag
2240: 65 2c 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c  e, sqlite3Global
2250: 43 6f 6e 66 69 67 2e 6e 50 61 67 65 29 3b 0a 20  Config.nPage);. 
2260: 20 20 20 20 20 73 71 6c 69 74 65 33 47 6c 6f 62       sqlite3Glob
2270: 61 6c 43 6f 6e 66 69 67 2e 69 73 49 6e 69 74 20  alConfig.isInit 
2280: 3d 20 31 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  = 1;.#ifdef SQLI
2290: 54 45 5f 45 58 54 52 41 5f 49 4e 49 54 0a 20 20  TE_EXTRA_INIT.  
22a0: 20 20 20 20 62 52 75 6e 45 78 74 72 61 49 6e 69      bRunExtraIni
22b0: 74 20 3d 20 31 3b 0a 23 65 6e 64 69 66 0a 20 20  t = 1;.#endif.  
22c0: 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 47    }.    sqlite3G
22d0: 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 69 6e 50 72  lobalConfig.inPr
22e0: 6f 67 72 65 73 73 20 3d 20 30 3b 0a 20 20 7d 0a  ogress = 0;.  }.
22f0: 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f    sqlite3_mutex_
2300: 6c 65 61 76 65 28 73 71 6c 69 74 65 33 47 6c 6f  leave(sqlite3Glo
2310: 62 61 6c 43 6f 6e 66 69 67 2e 70 49 6e 69 74 4d  balConfig.pInitM
2320: 75 74 65 78 29 3b 0a 0a 20 20 2f 2a 20 47 6f 20  utex);..  /* Go 
2330: 62 61 63 6b 20 75 6e 64 65 72 20 74 68 65 20 73  back under the s
2340: 74 61 74 69 63 20 6d 75 74 65 78 20 61 6e 64 20  tatic mutex and 
2350: 63 6c 65 61 6e 20 75 70 20 74 68 65 20 72 65 63  clean up the rec
2360: 75 72 73 69 76 65 0a 20 20 2a 2a 20 6d 75 74 65  ursive.  ** mute
2370: 78 20 74 6f 20 70 72 65 76 65 6e 74 20 61 20 72  x to prevent a r
2380: 65 73 6f 75 72 63 65 20 6c 65 61 6b 2e 0a 20 20  esource leak..  
2390: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  */.  sqlite3_mut
23a0: 65 78 5f 65 6e 74 65 72 28 70 4d 61 73 74 65 72  ex_enter(pMaster
23b0: 29 3b 0a 20 20 73 71 6c 69 74 65 33 47 6c 6f 62  );.  sqlite3Glob
23c0: 61 6c 43 6f 6e 66 69 67 2e 6e 52 65 66 49 6e 69  alConfig.nRefIni
23d0: 74 4d 75 74 65 78 2d 2d 3b 0a 20 20 69 66 28 20  tMutex--;.  if( 
23e0: 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e  sqlite3GlobalCon
23f0: 66 69 67 2e 6e 52 65 66 49 6e 69 74 4d 75 74 65  fig.nRefInitMute
2400: 78 3c 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65  x<=0 ){.    asse
2410: 72 74 28 20 73 71 6c 69 74 65 33 47 6c 6f 62 61  rt( sqlite3Globa
2420: 6c 43 6f 6e 66 69 67 2e 6e 52 65 66 49 6e 69 74  lConfig.nRefInit
2430: 4d 75 74 65 78 3d 3d 30 20 29 3b 0a 20 20 20 20  Mutex==0 );.    
2440: 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 66 72  sqlite3_mutex_fr
2450: 65 65 28 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c  ee(sqlite3Global
2460: 43 6f 6e 66 69 67 2e 70 49 6e 69 74 4d 75 74 65  Config.pInitMute
2470: 78 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 47  x);.    sqlite3G
2480: 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 70 49 6e 69  lobalConfig.pIni
2490: 74 4d 75 74 65 78 20 3d 20 30 3b 0a 20 20 7d 0a  tMutex = 0;.  }.
24a0: 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f    sqlite3_mutex_
24b0: 6c 65 61 76 65 28 70 4d 61 73 74 65 72 29 3b 0a  leave(pMaster);.
24c0: 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  .  /* The follow
24d0: 69 6e 67 20 69 73 20 6a 75 73 74 20 61 20 73 61  ing is just a sa
24e0: 6e 69 74 79 20 63 68 65 63 6b 20 74 6f 20 6d 61  nity check to ma
24f0: 6b 65 20 73 75 72 65 20 53 51 4c 69 74 65 20 68  ke sure SQLite h
2500: 61 73 0a 20 20 2a 2a 20 62 65 65 6e 20 63 6f 6d  as.  ** been com
2510: 70 69 6c 65 64 20 63 6f 72 72 65 63 74 6c 79 2e  piled correctly.
2520: 20 20 49 74 20 69 73 20 69 6d 70 6f 72 74 61 6e    It is importan
2530: 74 20 74 6f 20 72 75 6e 20 74 68 69 73 20 63 6f  t to run this co
2540: 64 65 2c 20 62 75 74 0a 20 20 2a 2a 20 77 65 20  de, but.  ** we 
2550: 64 6f 6e 27 74 20 77 61 6e 74 20 74 6f 20 72 75  don't want to ru
2560: 6e 20 69 74 20 74 6f 6f 20 6f 66 74 65 6e 20 61  n it too often a
2570: 6e 64 20 73 6f 61 6b 20 75 70 20 43 50 55 20 63  nd soak up CPU c
2580: 79 63 6c 65 73 20 66 6f 72 20 6e 6f 0a 20 20 2a  ycles for no.  *
2590: 2a 20 72 65 61 73 6f 6e 2e 20 20 53 6f 20 77 65  * reason.  So we
25a0: 20 72 75 6e 20 69 74 20 6f 6e 63 65 20 64 75 72   run it once dur
25b0: 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  ing initializati
25c0: 6f 6e 2e 0a 20 20 2a 2f 0a 23 69 66 6e 64 65 66  on..  */.#ifndef
25d0: 20 4e 44 45 42 55 47 0a 23 69 66 6e 64 65 66 20   NDEBUG.#ifndef 
25e0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
25f0: 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 2f 2a 20  TING_POINT.  /* 
2600: 54 68 69 73 20 73 65 63 74 69 6f 6e 20 6f 66 20  This section of 
2610: 63 6f 64 65 27 73 20 6f 6e 6c 79 20 22 6f 75 74  code's only "out
2620: 70 75 74 22 20 69 73 20 76 69 61 20 61 73 73 65  put" is via asse
2630: 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 2e  rt() statements.
2640: 20 2a 2f 0a 20 20 69 66 20 28 20 72 63 3d 3d 53   */.  if ( rc==S
2650: 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
2660: 75 36 34 20 78 20 3d 20 28 28 28 75 36 34 29 31  u64 x = (((u64)1
2670: 29 3c 3c 36 33 29 2d 31 3b 0a 20 20 20 20 64 6f  )<<63)-1;.    do
2680: 75 62 6c 65 20 79 3b 0a 20 20 20 20 61 73 73 65  uble y;.    asse
2690: 72 74 28 73 69 7a 65 6f 66 28 78 29 3d 3d 38 29  rt(sizeof(x)==8)
26a0: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 73 69 7a  ;.    assert(siz
26b0: 65 6f 66 28 78 29 3d 3d 73 69 7a 65 6f 66 28 79  eof(x)==sizeof(y
26c0: 29 29 3b 0a 20 20 20 20 6d 65 6d 63 70 79 28 26  ));.    memcpy(&
26d0: 79 2c 20 26 78 2c 20 38 29 3b 0a 20 20 20 20 61  y, &x, 8);.    a
26e0: 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 49 73  ssert( sqlite3Is
26f0: 4e 61 4e 28 79 29 20 29 3b 0a 20 20 7d 0a 23 65  NaN(y) );.  }.#e
2700: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 20 20 2f  ndif.#endif..  /
2710: 2a 20 44 6f 20 65 78 74 72 61 20 69 6e 69 74 69  * Do extra initi
2720: 61 6c 69 7a 61 74 69 6f 6e 20 73 74 65 70 73 20  alization steps 
2730: 72 65 71 75 65 73 74 65 64 20 62 79 20 74 68 65  requested by the
2740: 20 53 51 4c 49 54 45 5f 45 58 54 52 41 5f 49 4e   SQLITE_EXTRA_IN
2750: 49 54 0a 20 20 2a 2a 20 63 6f 6d 70 69 6c 65 2d  IT.  ** compile-
2760: 74 69 6d 65 20 6f 70 74 69 6f 6e 2e 0a 20 20 2a  time option..  *
2770: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
2780: 45 58 54 52 41 5f 49 4e 49 54 0a 20 20 69 66 28  EXTRA_INIT.  if(
2790: 20 62 52 75 6e 45 78 74 72 61 49 6e 69 74 20 29   bRunExtraInit )
27a0: 7b 0a 20 20 20 20 69 6e 74 20 53 51 4c 49 54 45  {.    int SQLITE
27b0: 5f 45 58 54 52 41 5f 49 4e 49 54 28 63 6f 6e 73  _EXTRA_INIT(cons
27c0: 74 20 63 68 61 72 2a 29 3b 0a 20 20 20 20 72 63  t char*);.    rc
27d0: 20 3d 20 53 51 4c 49 54 45 5f 45 58 54 52 41 5f   = SQLITE_EXTRA_
27e0: 49 4e 49 54 28 30 29 3b 0a 20 20 7d 0a 23 65 6e  INIT(0);.  }.#en
27f0: 64 69 66 0a 0a 20 20 72 65 74 75 72 6e 20 72 63  dif..  return rc
2800: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 6e 64 6f 20  ;.}../*.** Undo 
2810: 74 68 65 20 65 66 66 65 63 74 73 20 6f 66 20 73  the effects of s
2820: 71 6c 69 74 65 33 5f 69 6e 69 74 69 61 6c 69 7a  qlite3_initializ
2830: 65 28 29 2e 20 20 4d 75 73 74 20 6e 6f 74 20 62  e().  Must not b
2840: 65 20 63 61 6c 6c 65 64 20 77 68 69 6c 65 0a 2a  e called while.*
2850: 2a 20 74 68 65 72 65 20 61 72 65 20 6f 75 74 73  * there are outs
2860: 74 61 6e 64 69 6e 67 20 64 61 74 61 62 61 73 65  tanding database
2870: 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 6f 72 20   connections or 
2880: 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
2890: 6e 73 20 6f 72 0a 2a 2a 20 77 68 69 6c 65 20 61  ns or.** while a
28a0: 6e 79 20 70 61 72 74 20 6f 66 20 53 51 4c 69 74  ny part of SQLit
28b0: 65 20 69 73 20 6f 74 68 65 72 77 69 73 65 20 69  e is otherwise i
28c0: 6e 20 75 73 65 20 69 6e 20 61 6e 79 20 74 68 72  n use in any thr
28d0: 65 61 64 2e 20 20 54 68 69 73 0a 2a 2a 20 72 6f  ead.  This.** ro
28e0: 75 74 69 6e 65 20 69 73 20 6e 6f 74 20 74 68 72  utine is not thr
28f0: 65 61 64 73 61 66 65 2e 20 20 42 75 74 20 69 74  eadsafe.  But it
2900: 20 69 73 20 73 61 66 65 20 74 6f 20 69 6e 76 6f   is safe to invo
2910: 6b 65 20 74 68 69 73 20 72 6f 75 74 69 6e 65 0a  ke this routine.
2920: 2a 2a 20 6f 6e 20 77 68 65 6e 20 53 51 4c 69 74  ** on when SQLit
2930: 65 20 69 73 20 61 6c 72 65 61 64 79 20 73 68 75  e is already shu
2940: 74 20 64 6f 77 6e 2e 20 20 49 66 20 53 51 4c 69  t down.  If SQLi
2950: 74 65 20 69 73 20 61 6c 72 65 61 64 79 20 73 68  te is already sh
2960: 75 74 20 64 6f 77 6e 0a 2a 2a 20 77 68 65 6e 20  ut down.** when 
2970: 74 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20  this routine is 
2980: 69 6e 76 6f 6b 65 64 2c 20 74 68 65 6e 20 74 68  invoked, then th
2990: 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20 61 20  is routine is a 
29a0: 68 61 72 6d 6c 65 73 73 20 6e 6f 2d 6f 70 2e 0a  harmless no-op..
29b0: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 73  */.int sqlite3_s
29c0: 68 75 74 64 6f 77 6e 28 76 6f 69 64 29 7b 0a 23  hutdown(void){.#
29d0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  ifdef SQLITE_OMI
29e0: 54 5f 57 53 44 0a 20 20 69 6e 74 20 72 63 20 3d  T_WSD.  int rc =
29f0: 20 73 71 6c 69 74 65 33 5f 77 73 64 5f 69 6e 69   sqlite3_wsd_ini
2a00: 74 28 34 30 39 36 2c 20 32 34 29 3b 0a 20 20 69  t(4096, 24);.  i
2a10: 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
2a20: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 72   ){.    return r
2a30: 63 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20  c;.  }.#endif.. 
2a40: 20 69 66 28 20 73 71 6c 69 74 65 33 47 6c 6f 62   if( sqlite3Glob
2a50: 61 6c 43 6f 6e 66 69 67 2e 69 73 49 6e 69 74 20  alConfig.isInit 
2a60: 29 7b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ){.#ifdef SQLITE
2a70: 5f 45 58 54 52 41 5f 53 48 55 54 44 4f 57 4e 0a  _EXTRA_SHUTDOWN.
2a80: 20 20 20 20 76 6f 69 64 20 53 51 4c 49 54 45 5f      void SQLITE_
2a90: 45 58 54 52 41 5f 53 48 55 54 44 4f 57 4e 28 76  EXTRA_SHUTDOWN(v
2aa0: 6f 69 64 29 3b 0a 20 20 20 20 53 51 4c 49 54 45  oid);.    SQLITE
2ab0: 5f 45 58 54 52 41 5f 53 48 55 54 44 4f 57 4e 28  _EXTRA_SHUTDOWN(
2ac0: 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 73 71  );.#endif.    sq
2ad0: 6c 69 74 65 33 5f 6f 73 5f 65 6e 64 28 29 3b 0a  lite3_os_end();.
2ae0: 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73 65      sqlite3_rese
2af0: 74 5f 61 75 74 6f 5f 65 78 74 65 6e 73 69 6f 6e  t_auto_extension
2b00: 28 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 47  ();.    sqlite3G
2b10: 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 69 73 49 6e  lobalConfig.isIn
2b20: 69 74 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66  it = 0;.  }.  if
2b30: 28 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43  ( sqlite3GlobalC
2b40: 6f 6e 66 69 67 2e 69 73 50 43 61 63 68 65 49 6e  onfig.isPCacheIn
2b50: 69 74 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  it ){.    sqlite
2b60: 33 50 63 61 63 68 65 53 68 75 74 64 6f 77 6e 28  3PcacheShutdown(
2b70: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 47 6c  );.    sqlite3Gl
2b80: 6f 62 61 6c 43 6f 6e 66 69 67 2e 69 73 50 43 61  obalConfig.isPCa
2b90: 63 68 65 49 6e 69 74 20 3d 20 30 3b 0a 20 20 7d  cheInit = 0;.  }
2ba0: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 47 6c  .  if( sqlite3Gl
2bb0: 6f 62 61 6c 43 6f 6e 66 69 67 2e 69 73 4d 61 6c  obalConfig.isMal
2bc0: 6c 6f 63 49 6e 69 74 20 29 7b 0a 20 20 20 20 73  locInit ){.    s
2bd0: 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 45 6e 64 28  qlite3MallocEnd(
2be0: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 47 6c  );.    sqlite3Gl
2bf0: 6f 62 61 6c 43 6f 6e 66 69 67 2e 69 73 4d 61 6c  obalConfig.isMal
2c00: 6c 6f 63 49 6e 69 74 20 3d 20 30 3b 0a 0a 23 69  locInit = 0;..#i
2c10: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2c20: 54 5f 53 48 55 54 44 4f 57 4e 5f 44 49 52 45 43  T_SHUTDOWN_DIREC
2c30: 54 4f 52 49 45 53 0a 20 20 20 20 2f 2a 20 54 68  TORIES.    /* Th
2c40: 65 20 68 65 61 70 20 73 75 62 73 79 73 74 65 6d  e heap subsystem
2c50: 20 68 61 73 20 6e 6f 77 20 62 65 65 6e 20 73 68   has now been sh
2c60: 75 74 64 6f 77 6e 20 61 6e 64 20 74 68 65 73 65  utdown and these
2c70: 20 76 61 6c 75 65 73 20 61 72 65 20 73 75 70 70   values are supp
2c80: 6f 73 65 64 0a 20 20 20 20 2a 2a 20 74 6f 20 62  osed.    ** to b
2c90: 65 20 4e 55 4c 4c 20 6f 72 20 70 6f 69 6e 74 20  e NULL or point 
2ca0: 74 6f 20 6d 65 6d 6f 72 79 20 74 68 61 74 20 77  to memory that w
2cb0: 61 73 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d  as obtained from
2cc0: 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28   sqlite3_malloc(
2cd0: 29 2c 0a 20 20 20 20 2a 2a 20 77 68 69 63 68 20  ),.    ** which 
2ce0: 77 6f 75 6c 64 20 72 65 6c 79 20 6f 6e 20 74 68  would rely on th
2cf0: 61 74 20 68 65 61 70 20 73 75 62 73 79 73 74 65  at heap subsyste
2d00: 6d 3b 20 74 68 65 72 65 66 6f 72 65 2c 20 6d 61  m; therefore, ma
2d10: 6b 65 20 73 75 72 65 20 74 68 65 73 65 0a 20 20  ke sure these.  
2d20: 20 20 2a 2a 20 76 61 6c 75 65 73 20 63 61 6e 6e    ** values cann
2d30: 6f 74 20 72 65 66 65 72 20 74 6f 20 68 65 61 70  ot refer to heap
2d40: 20 6d 65 6d 6f 72 79 20 74 68 61 74 20 77 61 73   memory that was
2d50: 20 6a 75 73 74 20 69 6e 76 61 6c 69 64 61 74 65   just invalidate
2d60: 64 20 77 68 65 6e 20 74 68 65 0a 20 20 20 20 2a  d when the.    *
2d70: 2a 20 68 65 61 70 20 73 75 62 73 79 73 74 65 6d  * heap subsystem
2d80: 20 77 61 73 20 73 68 75 74 64 6f 77 6e 2e 20 20   was shutdown.  
2d90: 54 68 69 73 20 69 73 20 6f 6e 6c 79 20 64 6f 6e  This is only don
2da0: 65 20 69 66 20 74 68 65 20 63 75 72 72 65 6e 74  e if the current
2db0: 20 63 61 6c 6c 20 74 6f 0a 20 20 20 20 2a 2a 20   call to.    ** 
2dc0: 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 72 65  this function re
2dd0: 73 75 6c 74 65 64 20 69 6e 20 74 68 65 20 68 65  sulted in the he
2de0: 61 70 20 73 75 62 73 79 73 74 65 6d 20 61 63 74  ap subsystem act
2df0: 75 61 6c 6c 79 20 62 65 69 6e 67 20 73 68 75 74  ually being shut
2e00: 64 6f 77 6e 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  down..    */.   
2e10: 20 73 71 6c 69 74 65 33 5f 64 61 74 61 5f 64 69   sqlite3_data_di
2e20: 72 65 63 74 6f 72 79 20 3d 20 30 3b 0a 20 20 20  rectory = 0;.   
2e30: 20 73 71 6c 69 74 65 33 5f 74 65 6d 70 5f 64 69   sqlite3_temp_di
2e40: 72 65 63 74 6f 72 79 20 3d 20 30 3b 0a 23 65 6e  rectory = 0;.#en
2e50: 64 69 66 0a 20 20 7d 0a 20 20 69 66 28 20 73 71  dif.  }.  if( sq
2e60: 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69  lite3GlobalConfi
2e70: 67 2e 69 73 4d 75 74 65 78 49 6e 69 74 20 29 7b  g.isMutexInit ){
2e80: 0a 20 20 20 20 73 71 6c 69 74 65 33 4d 75 74 65  .    sqlite3Mute
2e90: 78 45 6e 64 28 29 3b 0a 20 20 20 20 73 71 6c 69  xEnd();.    sqli
2ea0: 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e  te3GlobalConfig.
2eb0: 69 73 4d 75 74 65 78 49 6e 69 74 20 3d 20 30 3b  isMutexInit = 0;
2ec0: 0a 20 20 7d 0a 0a 20 20 72 65 74 75 72 6e 20 53  .  }..  return S
2ed0: 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  QLITE_OK;.}../*.
2ee0: 2a 2a 20 54 68 69 73 20 41 50 49 20 61 6c 6c 6f  ** This API allo
2ef0: 77 73 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 20  ws applications 
2f00: 74 6f 20 6d 6f 64 69 66 79 20 74 68 65 20 67 6c  to modify the gl
2f10: 6f 62 61 6c 20 63 6f 6e 66 69 67 75 72 61 74 69  obal configurati
2f20: 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 53 51 4c  on of.** the SQL
2f30: 69 74 65 20 6c 69 62 72 61 72 79 20 61 74 20 72  ite library at r
2f40: 75 6e 2d 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 54  un-time..**.** T
2f50: 68 69 73 20 72 6f 75 74 69 6e 65 20 73 68 6f 75  his routine shou
2f60: 6c 64 20 6f 6e 6c 79 20 62 65 20 63 61 6c 6c 65  ld only be calle
2f70: 64 20 77 68 65 6e 20 74 68 65 72 65 20 61 72 65  d when there are
2f80: 20 6e 6f 20 6f 75 74 73 74 61 6e 64 69 6e 67 0a   no outstanding.
2f90: 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  ** database conn
2fa0: 65 63 74 69 6f 6e 73 20 6f 72 20 6d 65 6d 6f 72  ections or memor
2fb0: 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2e 20 20  y allocations.  
2fc0: 54 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20  This routine is 
2fd0: 6e 6f 74 0a 2a 2a 20 74 68 72 65 61 64 73 61 66  not.** threadsaf
2fe0: 65 2e 20 20 46 61 69 6c 75 72 65 20 74 6f 20 68  e.  Failure to h
2ff0: 65 65 64 20 74 68 65 73 65 20 77 61 72 6e 69 6e  eed these warnin
3000: 67 73 20 63 61 6e 20 6c 65 61 64 20 74 6f 20 75  gs can lead to u
3010: 6e 70 72 65 64 69 63 74 61 62 6c 65 0a 2a 2a 20  npredictable.** 
3020: 62 65 68 61 76 69 6f 72 2e 0a 2a 2f 0a 69 6e 74  behavior..*/.int
3030: 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 28   sqlite3_config(
3040: 69 6e 74 20 6f 70 2c 20 2e 2e 2e 29 7b 0a 20 20  int op, ...){.  
3050: 76 61 5f 6c 69 73 74 20 61 70 3b 0a 20 20 69 6e  va_list ap;.  in
3060: 74 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b  t rc = SQLITE_OK
3070: 3b 0a 0a 20 20 2f 2a 20 73 71 6c 69 74 65 33 5f  ;..  /* sqlite3_
3080: 63 6f 6e 66 69 67 28 29 20 73 68 61 6c 6c 20 72  config() shall r
3090: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53  eturn SQLITE_MIS
30a0: 55 53 45 20 69 66 20 69 74 20 69 73 20 69 6e 76  USE if it is inv
30b0: 6f 6b 65 64 20 77 68 69 6c 65 0a 20 20 2a 2a 20  oked while.  ** 
30c0: 74 68 65 20 53 51 4c 69 74 65 20 6c 69 62 72 61  the SQLite libra
30d0: 72 79 20 69 73 20 69 6e 20 75 73 65 2e 20 2a 2f  ry is in use. */
30e0: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 47 6c  .  if( sqlite3Gl
30f0: 6f 62 61 6c 43 6f 6e 66 69 67 2e 69 73 49 6e 69  obalConfig.isIni
3100: 74 20 29 20 72 65 74 75 72 6e 20 53 51 4c 49 54  t ) return SQLIT
3110: 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54 3b 0a 0a  E_MISUSE_BKPT;..
3120: 20 20 76 61 5f 73 74 61 72 74 28 61 70 2c 20 6f    va_start(ap, o
3130: 70 29 3b 0a 20 20 73 77 69 74 63 68 28 20 6f 70  p);.  switch( op
3140: 20 29 7b 0a 0a 20 20 20 20 2f 2a 20 4d 75 74 65   ){..    /* Mute
3150: 78 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  x configuration 
3160: 6f 70 74 69 6f 6e 73 20 61 72 65 20 6f 6e 6c 79  options are only
3170: 20 61 76 61 69 6c 61 62 6c 65 20 69 6e 20 61 20   available in a 
3180: 74 68 72 65 61 64 73 61 66 65 0a 20 20 20 20 2a  threadsafe.    *
3190: 2a 20 63 6f 6d 70 69 6c 65 2e 0a 20 20 20 20 2a  * compile..    *
31a0: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
31b0: 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45 29  LITE_THREADSAFE)
31c0: 20 26 26 20 53 51 4c 49 54 45 5f 54 48 52 45 41   && SQLITE_THREA
31d0: 44 53 41 46 45 3e 30 20 20 2f 2a 20 49 4d 50 3a  DSAFE>0  /* IMP:
31e0: 20 52 2d 35 34 34 36 36 2d 34 36 37 35 36 20 2a   R-54466-46756 *
31f0: 2f 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  /.    case SQLIT
3200: 45 5f 43 4f 4e 46 49 47 5f 53 49 4e 47 4c 45 54  E_CONFIG_SINGLET
3210: 48 52 45 41 44 3a 20 7b 0a 20 20 20 20 20 20 2f  HREAD: {.      /
3220: 2a 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52  * EVIDENCE-OF: R
3230: 2d 30 32 37 34 38 2d 31 39 30 39 36 20 54 68 69  -02748-19096 Thi
3240: 73 20 6f 70 74 69 6f 6e 20 73 65 74 73 20 74 68  s option sets th
3250: 65 20 74 68 72 65 61 64 69 6e 67 20 6d 6f 64 65  e threading mode
3260: 20 74 6f 0a 20 20 20 20 20 20 2a 2a 20 53 69 6e   to.      ** Sin
3270: 67 6c 65 2d 74 68 72 65 61 64 2e 20 2a 2f 0a 20  gle-thread. */. 
3280: 20 20 20 20 20 73 71 6c 69 74 65 33 47 6c 6f 62       sqlite3Glob
3290: 61 6c 43 6f 6e 66 69 67 2e 62 43 6f 72 65 4d 75  alConfig.bCoreMu
32a0: 74 65 78 20 3d 20 30 3b 20 20 2f 2a 20 44 69 73  tex = 0;  /* Dis
32b0: 61 62 6c 65 20 6d 75 74 65 78 20 6f 6e 20 63 6f  able mutex on co
32c0: 72 65 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69  re */.      sqli
32d0: 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e  te3GlobalConfig.
32e0: 62 46 75 6c 6c 4d 75 74 65 78 20 3d 20 30 3b 20  bFullMutex = 0; 
32f0: 20 2f 2a 20 44 69 73 61 62 6c 65 20 6d 75 74 65   /* Disable mute
3300: 78 20 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 73  x on connections
3310: 20 2a 2f 0a 20 20 20 20 20 20 62 72 65 61 6b 3b   */.      break;
3320: 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 23 69  .    }.#endif.#i
3330: 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
3340: 5f 54 48 52 45 41 44 53 41 46 45 29 20 26 26 20  _THREADSAFE) && 
3350: 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46  SQLITE_THREADSAF
3360: 45 3e 30 20 2f 2a 20 49 4d 50 3a 20 52 2d 32 30  E>0 /* IMP: R-20
3370: 35 32 30 2d 35 34 30 38 36 20 2a 2f 0a 20 20 20  520-54086 */.   
3380: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 43 4f 4e   case SQLITE_CON
3390: 46 49 47 5f 4d 55 4c 54 49 54 48 52 45 41 44 3a  FIG_MULTITHREAD:
33a0: 20 7b 0a 20 20 20 20 20 20 2f 2a 20 45 56 49 44   {.      /* EVID
33b0: 45 4e 43 45 2d 4f 46 3a 20 52 2d 31 34 33 37 34  ENCE-OF: R-14374
33c0: 2d 34 32 34 36 38 20 54 68 69 73 20 6f 70 74 69  -42468 This opti
33d0: 6f 6e 20 73 65 74 73 20 74 68 65 20 74 68 72 65  on sets the thre
33e0: 61 64 69 6e 67 20 6d 6f 64 65 20 74 6f 0a 20 20  ading mode to.  
33f0: 20 20 20 20 2a 2a 20 4d 75 6c 74 69 2d 74 68 72      ** Multi-thr
3400: 65 61 64 2e 20 2a 2f 0a 20 20 20 20 20 20 73 71  ead. */.      sq
3410: 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69  lite3GlobalConfi
3420: 67 2e 62 43 6f 72 65 4d 75 74 65 78 20 3d 20 31  g.bCoreMutex = 1
3430: 3b 20 20 2f 2a 20 45 6e 61 62 6c 65 20 6d 75 74  ;  /* Enable mut
3440: 65 78 20 6f 6e 20 63 6f 72 65 20 2a 2f 0a 20 20  ex on core */.  
3450: 20 20 20 20 73 71 6c 69 74 65 33 47 6c 6f 62 61      sqlite3Globa
3460: 6c 43 6f 6e 66 69 67 2e 62 46 75 6c 6c 4d 75 74  lConfig.bFullMut
3470: 65 78 20 3d 20 30 3b 20 20 2f 2a 20 44 69 73 61  ex = 0;  /* Disa
3480: 62 6c 65 20 6d 75 74 65 78 20 6f 6e 20 63 6f 6e  ble mutex on con
3490: 6e 65 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 20 20  nections */.    
34a0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 23    break;.    }.#
34b0: 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65  endif.#if define
34c0: 64 28 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53  d(SQLITE_THREADS
34d0: 41 46 45 29 20 26 26 20 53 51 4c 49 54 45 5f 54  AFE) && SQLITE_T
34e0: 48 52 45 41 44 53 41 46 45 3e 30 20 2f 2a 20 49  HREADSAFE>0 /* I
34f0: 4d 50 3a 20 52 2d 35 39 35 39 33 2d 32 31 38 31  MP: R-59593-2181
3500: 30 20 2a 2f 0a 20 20 20 20 63 61 73 65 20 53 51  0 */.    case SQ
3510: 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 53 45 52 49  LITE_CONFIG_SERI
3520: 41 4c 49 5a 45 44 3a 20 7b 0a 20 20 20 20 20 20  ALIZED: {.      
3530: 2f 2a 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20  /* EVIDENCE-OF: 
3540: 52 2d 34 31 32 32 30 2d 35 31 38 30 30 20 54 68  R-41220-51800 Th
3550: 69 73 20 6f 70 74 69 6f 6e 20 73 65 74 73 20 74  is option sets t
3560: 68 65 20 74 68 72 65 61 64 69 6e 67 20 6d 6f 64  he threading mod
3570: 65 20 74 6f 0a 20 20 20 20 20 20 2a 2a 20 53 65  e to.      ** Se
3580: 72 69 61 6c 69 7a 65 64 2e 20 2a 2f 0a 20 20 20  rialized. */.   
3590: 20 20 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c     sqlite3Global
35a0: 43 6f 6e 66 69 67 2e 62 43 6f 72 65 4d 75 74 65  Config.bCoreMute
35b0: 78 20 3d 20 31 3b 20 20 2f 2a 20 45 6e 61 62 6c  x = 1;  /* Enabl
35c0: 65 20 6d 75 74 65 78 20 6f 6e 20 63 6f 72 65 20  e mutex on core 
35d0: 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  */.      sqlite3
35e0: 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 62 46 75  GlobalConfig.bFu
35f0: 6c 6c 4d 75 74 65 78 20 3d 20 31 3b 20 20 2f 2a  llMutex = 1;  /*
3600: 20 45 6e 61 62 6c 65 20 6d 75 74 65 78 20 6f 6e   Enable mutex on
3610: 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 2a 2f 0a   connections */.
3620: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
3630: 20 7d 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65   }.#endif.#if de
3640: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 48 52  fined(SQLITE_THR
3650: 45 41 44 53 41 46 45 29 20 26 26 20 53 51 4c 49  EADSAFE) && SQLI
3660: 54 45 5f 54 48 52 45 41 44 53 41 46 45 3e 30 20  TE_THREADSAFE>0 
3670: 2f 2a 20 49 4d 50 3a 20 52 2d 36 33 36 36 36 2d  /* IMP: R-63666-
3680: 34 38 37 35 35 20 2a 2f 0a 20 20 20 20 63 61 73  48755 */.    cas
3690: 65 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f  e SQLITE_CONFIG_
36a0: 4d 55 54 45 58 3a 20 7b 0a 20 20 20 20 20 20 2f  MUTEX: {.      /
36b0: 2a 20 53 70 65 63 69 66 79 20 61 6e 20 61 6c 74  * Specify an alt
36c0: 65 72 6e 61 74 69 76 65 20 6d 75 74 65 78 20 69  ernative mutex i
36d0: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f  mplementation */
36e0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 47 6c  .      sqlite3Gl
36f0: 6f 62 61 6c 43 6f 6e 66 69 67 2e 6d 75 74 65 78  obalConfig.mutex
3700: 20 3d 20 2a 76 61 5f 61 72 67 28 61 70 2c 20 73   = *va_arg(ap, s
3710: 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74  qlite3_mutex_met
3720: 68 6f 64 73 2a 29 3b 0a 20 20 20 20 20 20 62 72  hods*);.      br
3730: 65 61 6b 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69  eak;.    }.#endi
3740: 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  f.#if defined(SQ
3750: 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45 29  LITE_THREADSAFE)
3760: 20 26 26 20 53 51 4c 49 54 45 5f 54 48 52 45 41   && SQLITE_THREA
3770: 44 53 41 46 45 3e 30 20 2f 2a 20 49 4d 50 3a 20  DSAFE>0 /* IMP: 
3780: 52 2d 31 34 34 35 30 2d 33 37 35 39 37 20 2a 2f  R-14450-37597 */
3790: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
37a0: 5f 43 4f 4e 46 49 47 5f 47 45 54 4d 55 54 45 58  _CONFIG_GETMUTEX
37b0: 3a 20 7b 0a 20 20 20 20 20 20 2f 2a 20 52 65 74  : {.      /* Ret
37c0: 72 69 65 76 65 20 74 68 65 20 63 75 72 72 65 6e  rieve the curren
37d0: 74 20 6d 75 74 65 78 20 69 6d 70 6c 65 6d 65 6e  t mutex implemen
37e0: 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 20 20  tation */.      
37f0: 2a 76 61 5f 61 72 67 28 61 70 2c 20 73 71 6c 69  *va_arg(ap, sqli
3800: 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64  te3_mutex_method
3810: 73 2a 29 20 3d 20 73 71 6c 69 74 65 33 47 6c 6f  s*) = sqlite3Glo
3820: 62 61 6c 43 6f 6e 66 69 67 2e 6d 75 74 65 78 3b  balConfig.mutex;
3830: 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
3840: 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20    }.#endif..    
3850: 63 61 73 65 20 53 51 4c 49 54 45 5f 43 4f 4e 46  case SQLITE_CONF
3860: 49 47 5f 4d 41 4c 4c 4f 43 3a 20 7b 0a 20 20 20  IG_MALLOC: {.   
3870: 20 20 20 2f 2a 20 45 56 49 44 45 4e 43 45 2d 4f     /* EVIDENCE-O
3880: 46 3a 20 52 2d 35 35 35 39 34 2d 32 31 30 33 30  F: R-55594-21030
3890: 20 54 68 65 20 53 51 4c 49 54 45 5f 43 4f 4e 46   The SQLITE_CONF
38a0: 49 47 5f 4d 41 4c 4c 4f 43 20 6f 70 74 69 6f 6e  IG_MALLOC option
38b0: 20 74 61 6b 65 73 20 61 0a 20 20 20 20 20 20 2a   takes a.      *
38c0: 2a 20 73 69 6e 67 6c 65 20 61 72 67 75 6d 65 6e  * single argumen
38d0: 74 20 77 68 69 63 68 20 69 73 20 61 20 70 6f 69  t which is a poi
38e0: 6e 74 65 72 20 74 6f 20 61 6e 20 69 6e 73 74 61  nter to an insta
38f0: 6e 63 65 20 6f 66 20 74 68 65 0a 20 20 20 20 20  nce of the.     
3900: 20 2a 2a 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f   ** sqlite3_mem_
3910: 6d 65 74 68 6f 64 73 20 73 74 72 75 63 74 75 72  methods structur
3920: 65 2e 20 54 68 65 20 61 72 67 75 6d 65 6e 74 20  e. The argument 
3930: 73 70 65 63 69 66 69 65 73 20 61 6c 74 65 72 6e  specifies altern
3940: 61 74 69 76 65 0a 20 20 20 20 20 20 2a 2a 20 6c  ative.      ** l
3950: 6f 77 2d 6c 65 76 65 6c 20 6d 65 6d 6f 72 79 20  ow-level memory 
3960: 61 6c 6c 6f 63 61 74 69 6f 6e 20 72 6f 75 74 69  allocation routi
3970: 6e 65 73 20 74 6f 20 62 65 20 75 73 65 64 20 69  nes to be used i
3980: 6e 20 70 6c 61 63 65 20 6f 66 20 74 68 65 20 6d  n place of the m
3990: 65 6d 6f 72 79 0a 20 20 20 20 20 20 2a 2a 20 61  emory.      ** a
39a0: 6c 6c 6f 63 61 74 69 6f 6e 20 72 6f 75 74 69 6e  llocation routin
39b0: 65 73 20 62 75 69 6c 74 20 69 6e 74 6f 20 53 51  es built into SQ
39c0: 4c 69 74 65 2e 20 2a 2f 0a 20 20 20 20 20 20 73  Lite. */.      s
39d0: 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66  qlite3GlobalConf
39e0: 69 67 2e 6d 20 3d 20 2a 76 61 5f 61 72 67 28 61  ig.m = *va_arg(a
39f0: 70 2c 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d  p, sqlite3_mem_m
3a00: 65 74 68 6f 64 73 2a 29 3b 0a 20 20 20 20 20 20  ethods*);.      
3a10: 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20  break;.    }.   
3a20: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 43 4f 4e   case SQLITE_CON
3a30: 46 49 47 5f 47 45 54 4d 41 4c 4c 4f 43 3a 20 7b  FIG_GETMALLOC: {
3a40: 0a 20 20 20 20 20 20 2f 2a 20 45 56 49 44 45 4e  .      /* EVIDEN
3a50: 43 45 2d 4f 46 3a 20 52 2d 35 31 32 31 33 2d 34  CE-OF: R-51213-4
3a60: 36 34 31 34 20 54 68 65 20 53 51 4c 49 54 45 5f  6414 The SQLITE_
3a70: 43 4f 4e 46 49 47 5f 47 45 54 4d 41 4c 4c 4f 43  CONFIG_GETMALLOC
3a80: 20 6f 70 74 69 6f 6e 20 74 61 6b 65 73 20 61 0a   option takes a.
3a90: 20 20 20 20 20 20 2a 2a 20 73 69 6e 67 6c 65 20        ** single 
3aa0: 61 72 67 75 6d 65 6e 74 20 77 68 69 63 68 20 69  argument which i
3ab0: 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
3ac0: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
3ad0: 65 0a 20 20 20 20 20 20 2a 2a 20 73 71 6c 69 74  e.      ** sqlit
3ae0: 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 73  e3_mem_methods s
3af0: 74 72 75 63 74 75 72 65 2e 20 54 68 65 20 73 71  tructure. The sq
3b00: 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64  lite3_mem_method
3b10: 73 20 73 74 72 75 63 74 75 72 65 20 69 73 0a 20  s structure is. 
3b20: 20 20 20 20 20 2a 2a 20 66 69 6c 6c 65 64 20 77       ** filled w
3b30: 69 74 68 20 74 68 65 20 63 75 72 72 65 6e 74 6c  ith the currentl
3b40: 79 20 64 65 66 69 6e 65 64 20 6d 65 6d 6f 72 79  y defined memory
3b50: 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 72 6f 75 74   allocation rout
3b60: 69 6e 65 73 2e 20 2a 2f 0a 20 20 20 20 20 20 69  ines. */.      i
3b70: 66 28 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c  f( sqlite3Global
3b80: 43 6f 6e 66 69 67 2e 6d 2e 78 4d 61 6c 6c 6f 63  Config.m.xMalloc
3b90: 3d 3d 30 20 29 20 73 71 6c 69 74 65 33 4d 65 6d  ==0 ) sqlite3Mem
3ba0: 53 65 74 44 65 66 61 75 6c 74 28 29 3b 0a 20 20  SetDefault();.  
3bb0: 20 20 20 20 2a 76 61 5f 61 72 67 28 61 70 2c 20      *va_arg(ap, 
3bc0: 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68  sqlite3_mem_meth
3bd0: 6f 64 73 2a 29 20 3d 20 73 71 6c 69 74 65 33 47  ods*) = sqlite3G
3be0: 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 6d 3b 0a 20  lobalConfig.m;. 
3bf0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
3c00: 7d 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  }.    case SQLIT
3c10: 45 5f 43 4f 4e 46 49 47 5f 4d 45 4d 53 54 41 54  E_CONFIG_MEMSTAT
3c20: 55 53 3a 20 7b 0a 20 20 20 20 20 20 2f 2a 20 45  US: {.      /* E
3c30: 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 36 31  VIDENCE-OF: R-61
3c40: 32 37 35 2d 33 35 31 35 37 20 54 68 65 20 53 51  275-35157 The SQ
3c50: 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4d 45 4d 53  LITE_CONFIG_MEMS
3c60: 54 41 54 55 53 20 6f 70 74 69 6f 6e 20 74 61 6b  TATUS option tak
3c70: 65 73 0a 20 20 20 20 20 20 2a 2a 20 73 69 6e 67  es.      ** sing
3c80: 6c 65 20 61 72 67 75 6d 65 6e 74 20 6f 66 20 74  le argument of t
3c90: 79 70 65 20 69 6e 74 2c 20 69 6e 74 65 72 70 72  ype int, interpr
3ca0: 65 74 65 64 20 61 73 20 61 20 62 6f 6f 6c 65 61  eted as a boolea
3cb0: 6e 2c 20 77 68 69 63 68 20 65 6e 61 62 6c 65 73  n, which enables
3cc0: 0a 20 20 20 20 20 20 2a 2a 20 6f 72 20 64 69 73  .      ** or dis
3cd0: 61 62 6c 65 73 20 74 68 65 20 63 6f 6c 6c 65 63  ables the collec
3ce0: 74 69 6f 6e 20 6f 66 20 6d 65 6d 6f 72 79 20 61  tion of memory a
3cf0: 6c 6c 6f 63 61 74 69 6f 6e 20 73 74 61 74 69 73  llocation statis
3d00: 74 69 63 73 2e 20 2a 2f 0a 20 20 20 20 20 20 73  tics. */.      s
3d10: 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66  qlite3GlobalConf
3d20: 69 67 2e 62 4d 65 6d 73 74 61 74 20 3d 20 76 61  ig.bMemstat = va
3d30: 5f 61 72 67 28 61 70 2c 20 69 6e 74 29 3b 0a 20  _arg(ap, int);. 
3d40: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
3d50: 7d 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  }.    case SQLIT
3d60: 45 5f 43 4f 4e 46 49 47 5f 53 43 52 41 54 43 48  E_CONFIG_SCRATCH
3d70: 3a 20 7b 0a 20 20 20 20 20 20 2f 2a 20 45 56 49  : {.      /* EVI
3d80: 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 30 38 34 30  DENCE-OF: R-0840
3d90: 34 2d 36 30 38 38 37 20 54 68 65 72 65 20 61 72  4-60887 There ar
3da0: 65 20 74 68 72 65 65 20 61 72 67 75 6d 65 6e 74  e three argument
3db0: 73 20 74 6f 0a 20 20 20 20 20 20 2a 2a 20 53 51  s to.      ** SQ
3dc0: 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 53 43 52 41  LITE_CONFIG_SCRA
3dd0: 54 43 48 3a 20 41 20 70 6f 69 6e 74 65 72 20 61  TCH: A pointer a
3de0: 6e 20 38 2d 62 79 74 65 20 61 6c 69 67 6e 65 64  n 8-byte aligned
3df0: 20 6d 65 6d 6f 72 79 20 62 75 66 66 65 72 20 66   memory buffer f
3e00: 72 6f 6d 0a 20 20 20 20 20 20 2a 2a 20 77 68 69  rom.      ** whi
3e10: 63 68 20 74 68 65 20 73 63 72 61 74 63 68 20 61  ch the scratch a
3e20: 6c 6c 6f 63 61 74 69 6f 6e 73 20 77 69 6c 6c 20  llocations will 
3e30: 62 65 20 64 72 61 77 6e 2c 20 74 68 65 20 73 69  be drawn, the si
3e40: 7a 65 20 6f 66 20 65 61 63 68 20 73 63 72 61 74  ze of each scrat
3e50: 63 68 0a 20 20 20 20 20 20 2a 2a 20 61 6c 6c 6f  ch.      ** allo
3e60: 63 61 74 69 6f 6e 20 28 73 7a 29 2c 20 61 6e 64  cation (sz), and
3e70: 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d   the maximum num
3e80: 62 65 72 20 6f 66 20 73 63 72 61 74 63 68 20 61  ber of scratch a
3e90: 6c 6c 6f 63 61 74 69 6f 6e 73 20 28 4e 29 2e 20  llocations (N). 
3ea0: 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  */.      sqlite3
3eb0: 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 70 53 63  GlobalConfig.pSc
3ec0: 72 61 74 63 68 20 3d 20 76 61 5f 61 72 67 28 61  ratch = va_arg(a
3ed0: 70 2c 20 76 6f 69 64 2a 29 3b 0a 20 20 20 20 20  p, void*);.     
3ee0: 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f   sqlite3GlobalCo
3ef0: 6e 66 69 67 2e 73 7a 53 63 72 61 74 63 68 20 3d  nfig.szScratch =
3f00: 20 76 61 5f 61 72 67 28 61 70 2c 20 69 6e 74 29   va_arg(ap, int)
3f10: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 47  ;.      sqlite3G
3f20: 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 6e 53 63 72  lobalConfig.nScr
3f30: 61 74 63 68 20 3d 20 76 61 5f 61 72 67 28 61 70  atch = va_arg(ap
3f40: 2c 20 69 6e 74 29 3b 0a 20 20 20 20 20 20 62 72  , int);.      br
3f50: 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 63  eak;.    }.    c
3f60: 61 73 65 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49  ase SQLITE_CONFI
3f70: 47 5f 50 41 47 45 43 41 43 48 45 3a 20 7b 0a 20  G_PAGECACHE: {. 
3f80: 20 20 20 20 20 2f 2a 20 45 56 49 44 45 4e 43 45       /* EVIDENCE
3f90: 2d 4f 46 3a 20 52 2d 33 31 34 30 38 2d 34 30 35  -OF: R-31408-405
3fa0: 31 30 20 54 68 65 72 65 20 61 72 65 20 74 68 72  10 There are thr
3fb0: 65 65 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 0a  ee arguments to.
3fc0: 20 20 20 20 20 20 2a 2a 20 53 51 4c 49 54 45 5f        ** SQLITE_
3fd0: 43 4f 4e 46 49 47 5f 50 41 47 45 43 41 43 48 45  CONFIG_PAGECACHE
3fe0: 3a 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 38  : A pointer to 8
3ff0: 2d 62 79 74 65 20 61 6c 69 67 6e 65 64 20 6d 65  -byte aligned me
4000: 6d 6f 72 79 2c 20 74 68 65 20 73 69 7a 65 0a 20  mory, the size. 
4010: 20 20 20 20 20 2a 2a 20 6f 66 20 65 61 63 68 20       ** of each 
4020: 70 61 67 65 20 62 75 66 66 65 72 20 28 73 7a 29  page buffer (sz)
4030: 2c 20 61 6e 64 20 74 68 65 20 6e 75 6d 62 65 72  , and the number
4040: 20 6f 66 20 70 61 67 65 73 20 28 4e 29 2e 20 2a   of pages (N). *
4050: 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 47  /.      sqlite3G
4060: 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 70 50 61 67  lobalConfig.pPag
4070: 65 20 3d 20 76 61 5f 61 72 67 28 61 70 2c 20 76  e = va_arg(ap, v
4080: 6f 69 64 2a 29 3b 0a 20 20 20 20 20 20 73 71 6c  oid*);.      sql
4090: 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67  ite3GlobalConfig
40a0: 2e 73 7a 50 61 67 65 20 3d 20 76 61 5f 61 72 67  .szPage = va_arg
40b0: 28 61 70 2c 20 69 6e 74 29 3b 0a 20 20 20 20 20  (ap, int);.     
40c0: 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f   sqlite3GlobalCo
40d0: 6e 66 69 67 2e 6e 50 61 67 65 20 3d 20 76 61 5f  nfig.nPage = va_
40e0: 61 72 67 28 61 70 2c 20 69 6e 74 29 3b 0a 20 20  arg(ap, int);.  
40f0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
4100: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
4110: 5f 43 4f 4e 46 49 47 5f 50 43 41 43 48 45 5f 48  _CONFIG_PCACHE_H
4120: 44 52 53 5a 3a 20 7b 0a 20 20 20 20 20 20 2f 2a  DRSZ: {.      /*
4130: 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d   EVIDENCE-OF: R-
4140: 33 39 31 30 30 2d 32 37 33 31 37 20 54 68 65 20  39100-27317 The 
4150: 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 50 43  SQLITE_CONFIG_PC
4160: 41 43 48 45 5f 48 44 52 53 5a 20 6f 70 74 69 6f  ACHE_HDRSZ optio
4170: 6e 20 74 61 6b 65 73 0a 20 20 20 20 20 20 2a 2a  n takes.      **
4180: 20 61 20 73 69 6e 67 6c 65 20 70 61 72 61 6d 65   a single parame
4190: 74 65 72 20 77 68 69 63 68 20 69 73 20 61 20 70  ter which is a p
41a0: 6f 69 6e 74 65 72 20 74 6f 20 61 6e 20 69 6e 74  ointer to an int
41b0: 65 67 65 72 20 61 6e 64 20 77 72 69 74 65 73 20  eger and writes 
41c0: 69 6e 74 6f 0a 20 20 20 20 20 20 2a 2a 20 74 68  into.      ** th
41d0: 61 74 20 69 6e 74 65 67 65 72 20 74 68 65 20 6e  at integer the n
41e0: 75 6d 62 65 72 20 6f 66 20 65 78 74 72 61 20 62  umber of extra b
41f0: 79 74 65 73 20 70 65 72 20 70 61 67 65 20 72 65  ytes per page re
4200: 71 75 69 72 65 64 20 66 6f 72 20 65 61 63 68 20  quired for each 
4210: 70 61 67 65 0a 20 20 20 20 20 20 2a 2a 20 69 6e  page.      ** in
4220: 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 50   SQLITE_CONFIG_P
4230: 41 47 45 43 41 43 48 45 2e 20 2a 2f 0a 20 20 20  AGECACHE. */.   
4240: 20 20 20 2a 76 61 5f 61 72 67 28 61 70 2c 20 69     *va_arg(ap, i
4250: 6e 74 2a 29 20 3d 20 0a 20 20 20 20 20 20 20 20  nt*) = .        
4260: 20 20 73 71 6c 69 74 65 33 48 65 61 64 65 72 53    sqlite3HeaderS
4270: 69 7a 65 42 74 72 65 65 28 29 20 2b 0a 20 20 20  izeBtree() +.   
4280: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 48 65         sqlite3He
4290: 61 64 65 72 53 69 7a 65 50 63 61 63 68 65 28 29  aderSizePcache()
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 31 28 29 3b 0a 20 20 20 20 20 20 62  ache1();.      b
42d0: 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  reak;.    }..   
42e0: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 43 4f 4e   case SQLITE_CON
42f0: 46 49 47 5f 50 43 41 43 48 45 3a 20 7b 0a 20 20  FIG_PCACHE: {.  
4300: 20 20 20 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a      /* no-op */.
4310: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
4320: 20 7d 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49   }.    case SQLI
4330: 54 45 5f 43 4f 4e 46 49 47 5f 47 45 54 50 43 41  TE_CONFIG_GETPCA
4340: 43 48 45 3a 20 7b 0a 20 20 20 20 20 20 2f 2a 20  CHE: {.      /* 
4350: 6e 6f 77 20 61 6e 20 65 72 72 6f 72 20 2a 2f 0a  now an error */.
4360: 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
4370: 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 20 20 62  E_ERROR;.      b
4380: 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  reak;.    }..   
4390: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 43 4f 4e   case SQLITE_CON
43a0: 46 49 47 5f 50 43 41 43 48 45 32 3a 20 7b 0a 20  FIG_PCACHE2: {. 
43b0: 20 20 20 20 20 2f 2a 20 45 56 49 44 45 4e 43 45       /* EVIDENCE
43c0: 2d 4f 46 3a 20 52 2d 36 33 33 32 35 2d 34 38 33  -OF: R-63325-483
43d0: 37 38 20 54 68 65 20 53 51 4c 49 54 45 5f 43 4f  78 The SQLITE_CO
43e0: 4e 46 49 47 5f 50 43 41 43 48 45 32 20 6f 70 74  NFIG_PCACHE2 opt
43f0: 69 6f 6e 20 74 61 6b 65 73 20 61 0a 20 20 20 20  ion takes a.    
4400: 20 20 2a 2a 20 73 69 6e 67 6c 65 20 61 72 67 75    ** single argu
4410: 6d 65 6e 74 20 77 68 69 63 68 20 69 73 20 61 20  ment which is a 
4420: 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e 20 73 71  pointer to an sq
4430: 6c 69 74 65 33 5f 70 63 61 63 68 65 5f 6d 65 74  lite3_pcache_met
4440: 68 6f 64 73 32 0a 20 20 20 20 20 20 2a 2a 20 6f  hods2.      ** o
4450: 62 6a 65 63 74 2e 20 54 68 69 73 20 6f 62 6a 65  bject. This obje
4460: 63 74 20 73 70 65 63 69 66 69 65 73 20 74 68 65  ct specifies the
4470: 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20 61 20   interface to a 
4480: 63 75 73 74 6f 6d 20 70 61 67 65 20 63 61 63 68  custom page cach
4490: 65 0a 20 20 20 20 20 20 2a 2a 20 69 6d 70 6c 65  e.      ** imple
44a0: 6d 65 6e 74 61 74 69 6f 6e 2e 20 2a 2f 0a 20 20  mentation. */.  
44b0: 20 20 20 20 73 71 6c 69 74 65 33 47 6c 6f 62 61      sqlite3Globa
44c0: 6c 43 6f 6e 66 69 67 2e 70 63 61 63 68 65 32 20  lConfig.pcache2 
44d0: 3d 20 2a 76 61 5f 61 72 67 28 61 70 2c 20 73 71  = *va_arg(ap, sq
44e0: 6c 69 74 65 33 5f 70 63 61 63 68 65 5f 6d 65 74  lite3_pcache_met
44f0: 68 6f 64 73 32 2a 29 3b 0a 20 20 20 20 20 20 62  hods2*);.      b
4500: 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20  reak;.    }.    
4510: 63 61 73 65 20 53 51 4c 49 54 45 5f 43 4f 4e 46  case SQLITE_CONF
4520: 49 47 5f 47 45 54 50 43 41 43 48 45 32 3a 20 7b  IG_GETPCACHE2: {
4530: 0a 20 20 20 20 20 20 2f 2a 20 45 56 49 44 45 4e  .      /* EVIDEN
4540: 43 45 2d 4f 46 3a 20 52 2d 32 32 30 33 35 2d 34  CE-OF: R-22035-4
4550: 36 31 38 32 20 54 68 65 20 53 51 4c 49 54 45 5f  6182 The SQLITE_
4560: 43 4f 4e 46 49 47 5f 47 45 54 50 43 41 43 48 45  CONFIG_GETPCACHE
4570: 32 20 6f 70 74 69 6f 6e 20 74 61 6b 65 73 20 61  2 option takes a
4580: 0a 20 20 20 20 20 20 2a 2a 20 73 69 6e 67 6c 65  .      ** single
4590: 20 61 72 67 75 6d 65 6e 74 20 77 68 69 63 68 20   argument which 
45a0: 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
45b0: 61 6e 20 73 71 6c 69 74 65 33 5f 70 63 61 63 68  an sqlite3_pcach
45c0: 65 5f 6d 65 74 68 6f 64 73 32 0a 20 20 20 20 20  e_methods2.     
45d0: 20 2a 2a 20 6f 62 6a 65 63 74 2e 20 53 51 4c 69   ** object. SQLi
45e0: 74 65 20 63 6f 70 69 65 73 20 6f 66 20 74 68 65  te copies of the
45f0: 20 63 75 72 72 65 6e 74 20 70 61 67 65 20 63 61   current page ca
4600: 63 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  che implementati
4610: 6f 6e 20 69 6e 74 6f 0a 20 20 20 20 20 20 2a 2a  on into.      **
4620: 20 74 68 61 74 20 6f 62 6a 65 63 74 2e 20 2a 2f   that object. */
4630: 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74  .      if( sqlit
4640: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 70  e3GlobalConfig.p
4650: 63 61 63 68 65 32 2e 78 49 6e 69 74 3d 3d 30 20  cache2.xInit==0 
4660: 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ){.        sqlit
4670: 65 33 50 43 61 63 68 65 53 65 74 44 65 66 61 75  e3PCacheSetDefau
4680: 6c 74 28 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  lt();.      }.  
4690: 20 20 20 20 2a 76 61 5f 61 72 67 28 61 70 2c 20      *va_arg(ap, 
46a0: 73 71 6c 69 74 65 33 5f 70 63 61 63 68 65 5f 6d  sqlite3_pcache_m
46b0: 65 74 68 6f 64 73 32 2a 29 20 3d 20 73 71 6c 69  ethods2*) = sqli
46c0: 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e  te3GlobalConfig.
46d0: 70 63 61 63 68 65 32 3b 0a 20 20 20 20 20 20 62  pcache2;.      b
46e0: 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 0a 2f 2a 20  reak;.    }../* 
46f0: 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 30  EVIDENCE-OF: R-0
4700: 36 36 32 36 2d 31 32 39 31 31 20 54 68 65 20 53  6626-12911 The S
4710: 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 48 45 41  QLITE_CONFIG_HEA
4720: 50 20 6f 70 74 69 6f 6e 20 69 73 20 6f 6e 6c 79  P option is only
4730: 0a 2a 2a 20 61 76 61 69 6c 61 62 6c 65 20 69 66  .** available if
4740: 20 53 51 4c 69 74 65 20 69 73 20 63 6f 6d 70 69   SQLite is compi
4750: 6c 65 64 20 77 69 74 68 20 65 69 74 68 65 72 20  led with either 
4760: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45  SQLITE_ENABLE_ME
4770: 4d 53 59 53 33 20 6f 72 0a 2a 2a 20 53 51 4c 49  MSYS3 or.** SQLI
4780: 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53  TE_ENABLE_MEMSYS
4790: 35 20 61 6e 64 20 72 65 74 75 72 6e 73 20 53 51  5 and returns SQ
47a0: 4c 49 54 45 5f 45 52 52 4f 52 20 69 66 20 69 6e  LITE_ERROR if in
47b0: 76 6f 6b 65 64 20 6f 74 68 65 72 77 69 73 65 2e  voked otherwise.
47c0: 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28   */.#if defined(
47d0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45  SQLITE_ENABLE_ME
47e0: 4d 53 59 53 33 29 20 7c 7c 20 64 65 66 69 6e 65  MSYS3) || define
47f0: 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
4800: 4d 45 4d 53 59 53 35 29 0a 20 20 20 20 63 61 73  MEMSYS5).    cas
4810: 65 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f  e SQLITE_CONFIG_
4820: 48 45 41 50 3a 20 7b 0a 20 20 20 20 20 20 2f 2a  HEAP: {.      /*
4830: 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d   EVIDENCE-OF: R-
4840: 31 39 38 35 34 2d 34 32 31 32 36 20 54 68 65 72  19854-42126 Ther
4850: 65 20 61 72 65 20 74 68 72 65 65 20 61 72 67 75  e are three argu
4860: 6d 65 6e 74 73 20 74 6f 0a 20 20 20 20 20 20 2a  ments to.      *
4870: 2a 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f  * SQLITE_CONFIG_
4880: 48 45 41 50 3a 20 41 6e 20 38 2d 62 79 74 65 20  HEAP: An 8-byte 
4890: 61 6c 69 67 6e 65 64 20 70 6f 69 6e 74 65 72 20  aligned pointer 
48a0: 74 6f 20 74 68 65 20 6d 65 6d 6f 72 79 2c 20 74  to the memory, t
48b0: 68 65 0a 20 20 20 20 20 20 2a 2a 20 6e 75 6d 62  he.      ** numb
48c0: 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20 74  er of bytes in t
48d0: 68 65 20 6d 65 6d 6f 72 79 20 62 75 66 66 65 72  he memory buffer
48e0: 2c 20 61 6e 64 20 74 68 65 20 6d 69 6e 69 6d 75  , and the minimu
48f0: 6d 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73 69 7a  m allocation siz
4900: 65 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  e..      */.    
4910: 20 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43    sqlite3GlobalC
4920: 6f 6e 66 69 67 2e 70 48 65 61 70 20 3d 20 76 61  onfig.pHeap = va
4930: 5f 61 72 67 28 61 70 2c 20 76 6f 69 64 2a 29 3b  _arg(ap, void*);
4940: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 47 6c  .      sqlite3Gl
4950: 6f 62 61 6c 43 6f 6e 66 69 67 2e 6e 48 65 61 70  obalConfig.nHeap
4960: 20 3d 20 76 61 5f 61 72 67 28 61 70 2c 20 69 6e   = va_arg(ap, in
4970: 74 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  t);.      sqlite
4980: 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 6d 6e  3GlobalConfig.mn
4990: 52 65 71 20 3d 20 76 61 5f 61 72 67 28 61 70 2c  Req = va_arg(ap,
49a0: 20 69 6e 74 29 3b 0a 0a 20 20 20 20 20 20 69 66   int);..      if
49b0: 28 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43  ( sqlite3GlobalC
49c0: 6f 6e 66 69 67 2e 6d 6e 52 65 71 3c 31 20 29 7b  onfig.mnReq<1 ){
49d0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
49e0: 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 6d 6e 52  GlobalConfig.mnR
49f0: 65 71 20 3d 20 31 3b 0a 20 20 20 20 20 20 7d 65  eq = 1;.      }e
4a00: 6c 73 65 20 69 66 28 20 73 71 6c 69 74 65 33 47  lse if( sqlite3G
4a10: 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 6d 6e 52 65  lobalConfig.mnRe
4a20: 71 3e 28 31 3c 3c 31 32 29 20 29 7b 0a 20 20 20  q>(1<<12) ){.   
4a30: 20 20 20 20 20 2f 2a 20 63 61 70 20 6d 69 6e 20       /* cap min 
4a40: 72 65 71 75 65 73 74 20 73 69 7a 65 20 61 74 20  request size at 
4a50: 32 5e 31 32 20 2a 2f 0a 20 20 20 20 20 20 20 20  2^12 */.        
4a60: 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e  sqlite3GlobalCon
4a70: 66 69 67 2e 6d 6e 52 65 71 20 3d 20 28 31 3c 3c  fig.mnReq = (1<<
4a80: 31 32 29 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20  12);.      }..  
4a90: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 47      if( sqlite3G
4aa0: 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 70 48 65 61  lobalConfig.pHea
4ab0: 70 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  p==0 ){.        
4ac0: 2f 2a 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20  /* EVIDENCE-OF: 
4ad0: 52 2d 34 39 39 32 30 2d 36 30 31 38 39 20 49 66  R-49920-60189 If
4ae0: 20 74 68 65 20 66 69 72 73 74 20 70 6f 69 6e 74   the first point
4af0: 65 72 20 28 74 68 65 20 6d 65 6d 6f 72 79 20 70  er (the memory p
4b00: 6f 69 6e 74 65 72 29 0a 20 20 20 20 20 20 20 20  ointer).        
4b10: 2a 2a 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 6e  ** is NULL, then
4b20: 20 53 51 4c 69 74 65 20 72 65 76 65 72 74 73 20   SQLite reverts 
4b30: 74 6f 20 75 73 69 6e 67 20 69 74 73 20 64 65 66  to using its def
4b40: 61 75 6c 74 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  ault memory allo
4b50: 63 61 74 6f 72 0a 20 20 20 20 20 20 20 20 2a 2a  cator.        **
4b60: 20 28 74 68 65 20 73 79 73 74 65 6d 20 6d 61 6c   (the system mal
4b70: 6c 6f 63 28 29 20 69 6d 70 6c 65 6d 65 6e 74 61  loc() implementa
4b80: 74 69 6f 6e 29 2c 20 75 6e 64 6f 69 6e 67 20 61  tion), undoing a
4b90: 6e 79 20 70 72 69 6f 72 20 69 6e 76 6f 63 61 74  ny prior invocat
4ba0: 69 6f 6e 20 6f 66 0a 20 20 20 20 20 20 20 20 2a  ion of.        *
4bb0: 2a 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f  * SQLITE_CONFIG_
4bc0: 4d 41 4c 4c 4f 43 2e 0a 20 20 20 20 20 20 20 20  MALLOC..        
4bd0: 2a 2a 0a 20 20 20 20 20 20 20 20 2a 2a 20 53 65  **.        ** Se
4be0: 74 74 69 6e 67 20 73 71 6c 69 74 65 33 47 6c 6f  tting sqlite3Glo
4bf0: 62 61 6c 43 6f 6e 66 69 67 2e 6d 20 74 6f 20 61  balConfig.m to a
4c00: 6c 6c 20 7a 65 72 6f 73 20 77 69 6c 6c 20 63 61  ll zeros will ca
4c10: 75 73 65 20 6d 61 6c 6c 6f 63 20 74 6f 0a 20 20  use malloc to.  
4c20: 20 20 20 20 20 20 2a 2a 20 72 65 76 65 72 74 20        ** revert 
4c30: 74 6f 20 69 74 73 20 64 65 66 61 75 6c 74 20 69  to its default i
4c40: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 77 68  mplementation wh
4c50: 65 6e 20 73 71 6c 69 74 65 33 5f 69 6e 69 74 69  en sqlite3_initi
4c60: 61 6c 69 7a 65 28 29 20 69 73 20 72 75 6e 0a 20  alize() is run. 
4c70: 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20         */.      
4c80: 20 20 6d 65 6d 73 65 74 28 26 73 71 6c 69 74 65    memset(&sqlite
4c90: 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 6d 2c  3GlobalConfig.m,
4ca0: 20 30 2c 20 73 69 7a 65 6f 66 28 73 71 6c 69 74   0, sizeof(sqlit
4cb0: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 6d  e3GlobalConfig.m
4cc0: 29 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  ));.      }else{
4cd0: 0a 20 20 20 20 20 20 20 20 2f 2a 20 45 56 49 44  .        /* EVID
4ce0: 45 4e 43 45 2d 4f 46 3a 20 52 2d 36 31 30 30 36  ENCE-OF: R-61006
4cf0: 2d 30 38 39 31 38 20 49 66 20 74 68 65 20 6d 65  -08918 If the me
4d00: 6d 6f 72 79 20 70 6f 69 6e 74 65 72 20 69 73 20  mory pointer is 
4d10: 6e 6f 74 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68  not NULL then th
4d20: 65 0a 20 20 20 20 20 20 20 20 2a 2a 20 61 6c 74  e.        ** alt
4d30: 65 72 6e 61 74 69 76 65 20 6d 65 6d 6f 72 79 20  ernative memory 
4d40: 61 6c 6c 6f 63 61 74 6f 72 20 69 73 20 65 6e 67  allocator is eng
4d50: 61 67 65 64 20 74 6f 20 68 61 6e 64 6c 65 20 61  aged to handle a
4d60: 6c 6c 20 6f 66 20 53 51 4c 69 74 65 73 0a 20 20  ll of SQLites.  
4d70: 20 20 20 20 20 20 2a 2a 20 6d 65 6d 6f 72 79 20        ** memory 
4d80: 61 6c 6c 6f 63 61 74 69 6f 6e 20 6e 65 65 64 73  allocation needs
4d90: 2e 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  . */.#ifdef SQLI
4da0: 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53  TE_ENABLE_MEMSYS
4db0: 33 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  3.        sqlite
4dc0: 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 6d 20  3GlobalConfig.m 
4dd0: 3d 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65 74  = *sqlite3MemGet
4de0: 4d 65 6d 73 79 73 33 28 29 3b 0a 23 65 6e 64 69  Memsys3();.#endi
4df0: 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  f.#ifdef SQLITE_
4e00: 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 35 0a 20  ENABLE_MEMSYS5. 
4e10: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 47 6c         sqlite3Gl
4e20: 6f 62 61 6c 43 6f 6e 66 69 67 2e 6d 20 3d 20 2a  obalConfig.m = *
4e30: 73 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d  sqlite3MemGetMem
4e40: 73 79 73 35 28 29 3b 0a 23 65 6e 64 69 66 0a 20  sys5();.#endif. 
4e50: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 62 72 65       }.      bre
4e60: 61 6b 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66  ak;.    }.#endif
4e70: 0a 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ..    case SQLIT
4e80: 45 5f 43 4f 4e 46 49 47 5f 4c 4f 4f 4b 41 53 49  E_CONFIG_LOOKASI
4e90: 44 45 3a 20 7b 0a 20 20 20 20 20 20 73 71 6c 69  DE: {.      sqli
4ea0: 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e  te3GlobalConfig.
4eb0: 73 7a 4c 6f 6f 6b 61 73 69 64 65 20 3d 20 76 61  szLookaside = va
4ec0: 5f 61 72 67 28 61 70 2c 20 69 6e 74 29 3b 0a 20  _arg(ap, int);. 
4ed0: 20 20 20 20 20 73 71 6c 69 74 65 33 47 6c 6f 62       sqlite3Glob
4ee0: 61 6c 43 6f 6e 66 69 67 2e 6e 4c 6f 6f 6b 61 73  alConfig.nLookas
4ef0: 69 64 65 20 3d 20 76 61 5f 61 72 67 28 61 70 2c  ide = va_arg(ap,
4f00: 20 69 6e 74 29 3b 0a 20 20 20 20 20 20 62 72 65   int);.      bre
4f10: 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 0a 20  ak;.    }.    . 
4f20: 20 20 20 2f 2a 20 52 65 63 6f 72 64 20 61 20 70     /* Record a p
4f30: 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 6c 6f  ointer to the lo
4f40: 67 67 65 72 20 66 75 6e 63 74 69 6f 6e 20 61 6e  gger function an
4f50: 64 20 69 74 73 20 66 69 72 73 74 20 61 72 67 75  d its first argu
4f60: 6d 65 6e 74 2e 0a 20 20 20 20 2a 2a 20 54 68 65  ment..    ** The
4f70: 20 64 65 66 61 75 6c 74 20 69 73 20 4e 55 4c 4c   default is NULL
4f80: 2e 20 20 4c 6f 67 67 69 6e 67 20 69 73 20 64 69  .  Logging is di
4f90: 73 61 62 6c 65 64 20 69 66 20 74 68 65 20 66 75  sabled if the fu
4fa0: 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 69  nction pointer i
4fb0: 73 0a 20 20 20 20 2a 2a 20 4e 55 4c 4c 2e 0a 20  s.    ** NULL.. 
4fc0: 20 20 20 2a 2f 0a 20 20 20 20 63 61 73 65 20 53     */.    case S
4fd0: 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4c 4f 47  QLITE_CONFIG_LOG
4fe0: 3a 20 7b 0a 20 20 20 20 20 20 2f 2a 20 4d 53 56  : {.      /* MSV
4ff0: 43 20 69 73 20 70 69 63 6b 79 20 61 62 6f 75 74  C is picky about
5000: 20 70 75 6c 6c 69 6e 67 20 66 75 6e 63 20 70 74   pulling func pt
5010: 72 73 20 66 72 6f 6d 20 76 61 20 6c 69 73 74 73  rs from va lists
5020: 2e 0a 20 20 20 20 20 20 2a 2a 20 68 74 74 70 3a  ..      ** http:
5030: 2f 2f 73 75 70 70 6f 72 74 2e 6d 69 63 72 6f 73  //support.micros
5040: 6f 66 74 2e 63 6f 6d 2f 6b 62 2f 34 37 39 36 31  oft.com/kb/47961
5050: 0a 20 20 20 20 20 20 2a 2a 20 73 71 6c 69 74 65  .      ** sqlite
5060: 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78 4c  3GlobalConfig.xL
5070: 6f 67 20 3d 20 76 61 5f 61 72 67 28 61 70 2c 20  og = va_arg(ap, 
5080: 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 2c 69 6e  void(*)(void*,in
5090: 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 29 3b  t,const char*));
50a0: 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
50b0: 74 79 70 65 64 65 66 20 76 6f 69 64 28 2a 4c 4f  typedef void(*LO
50c0: 47 46 55 4e 43 5f 74 29 28 76 6f 69 64 2a 2c 69  GFUNC_t)(void*,i
50d0: 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  nt,const char*);
50e0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 47 6c  .      sqlite3Gl
50f0: 6f 62 61 6c 43 6f 6e 66 69 67 2e 78 4c 6f 67 20  obalConfig.xLog 
5100: 3d 20 76 61 5f 61 72 67 28 61 70 2c 20 4c 4f 47  = va_arg(ap, LOG
5110: 46 55 4e 43 5f 74 29 3b 0a 20 20 20 20 20 20 73  FUNC_t);.      s
5120: 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66  qlite3GlobalConf
5130: 69 67 2e 70 4c 6f 67 41 72 67 20 3d 20 76 61 5f  ig.pLogArg = va_
5140: 61 72 67 28 61 70 2c 20 76 6f 69 64 2a 29 3b 0a  arg(ap, void*);.
5150: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
5160: 20 7d 0a 0a 20 20 20 20 2f 2a 20 45 56 49 44 45   }..    /* EVIDE
5170: 4e 43 45 2d 4f 46 3a 20 52 2d 35 35 35 34 38 2d  NCE-OF: R-55548-
5180: 33 33 38 31 37 20 54 68 65 20 63 6f 6d 70 69 6c  33817 The compil
5190: 65 2d 74 69 6d 65 20 73 65 74 74 69 6e 67 20 66  e-time setting f
51a0: 6f 72 20 55 52 49 20 66 69 6c 65 6e 61 6d 65 73  or URI filenames
51b0: 0a 20 20 20 20 2a 2a 20 63 61 6e 20 62 65 20 63  .    ** can be c
51c0: 68 61 6e 67 65 64 20 61 74 20 73 74 61 72 74 2d  hanged at start-
51d0: 74 69 6d 65 20 75 73 69 6e 67 20 74 68 65 0a 20  time using the. 
51e0: 20 20 20 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6f     ** sqlite3_co
51f0: 6e 66 69 67 28 53 51 4c 49 54 45 5f 43 4f 4e 46  nfig(SQLITE_CONF
5200: 49 47 5f 55 52 49 2c 31 29 20 6f 72 0a 20 20 20  IG_URI,1) or.   
5210: 20 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66   ** sqlite3_conf
5220: 69 67 28 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47  ig(SQLITE_CONFIG
5230: 5f 55 52 49 2c 30 29 20 63 6f 6e 66 69 67 75 72  _URI,0) configur
5240: 61 74 69 6f 6e 20 63 61 6c 6c 73 2e 0a 20 20 20  ation calls..   
5250: 20 2a 2f 0a 20 20 20 20 63 61 73 65 20 53 51 4c   */.    case SQL
5260: 49 54 45 5f 43 4f 4e 46 49 47 5f 55 52 49 3a 20  ITE_CONFIG_URI: 
5270: 7b 0a 20 20 20 20 20 20 2f 2a 20 45 56 49 44 45  {.      /* EVIDE
5280: 4e 43 45 2d 4f 46 3a 20 52 2d 32 35 34 35 31 2d  NCE-OF: R-25451-
5290: 36 31 31 32 35 20 54 68 65 20 53 51 4c 49 54 45  61125 The SQLITE
52a0: 5f 43 4f 4e 46 49 47 5f 55 52 49 20 6f 70 74 69  _CONFIG_URI opti
52b0: 6f 6e 20 74 61 6b 65 73 20 61 20 73 69 6e 67 6c  on takes a singl
52c0: 65 0a 20 20 20 20 20 20 2a 2a 20 61 72 67 75 6d  e.      ** argum
52d0: 65 6e 74 20 6f 66 20 74 79 70 65 20 69 6e 74 2e  ent of type int.
52e0: 20 49 66 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68   If non-zero, th
52f0: 65 6e 20 55 52 49 20 68 61 6e 64 6c 69 6e 67 20  en URI handling 
5300: 69 73 20 67 6c 6f 62 61 6c 6c 79 0a 20 20 20 20  is globally.    
5310: 20 20 2a 2a 20 65 6e 61 62 6c 65 64 2e 20 49 66    ** enabled. If
5320: 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 20 69   the parameter i
5330: 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20 55 52 49  s zero, then URI
5340: 20 68 61 6e 64 6c 69 6e 67 20 69 73 20 67 6c 6f   handling is glo
5350: 62 61 6c 6c 79 0a 20 20 20 20 20 20 2a 2a 20 64  bally.      ** d
5360: 69 73 61 62 6c 65 64 2e 20 2a 2f 0a 20 20 20 20  isabled. */.    
5370: 20 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43    sqlite3GlobalC
5380: 6f 6e 66 69 67 2e 62 4f 70 65 6e 55 72 69 20 3d  onfig.bOpenUri =
5390: 20 76 61 5f 61 72 67 28 61 70 2c 20 69 6e 74 29   va_arg(ap, int)
53a0: 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;.      break;. 
53b0: 20 20 20 7d 0a 0a 20 20 20 20 63 61 73 65 20 53     }..    case S
53c0: 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 43 4f 56  QLITE_CONFIG_COV
53d0: 45 52 49 4e 47 5f 49 4e 44 45 58 5f 53 43 41 4e  ERING_INDEX_SCAN
53e0: 3a 20 7b 0a 20 20 20 20 20 20 2f 2a 20 45 56 49  : {.      /* EVI
53f0: 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 33 36 35 39  DENCE-OF: R-3659
5400: 32 2d 30 32 37 37 32 20 54 68 65 20 53 51 4c 49  2-02772 The SQLI
5410: 54 45 5f 43 4f 4e 46 49 47 5f 43 4f 56 45 52 49  TE_CONFIG_COVERI
5420: 4e 47 5f 49 4e 44 45 58 5f 53 43 41 4e 0a 20 20  NG_INDEX_SCAN.  
5430: 20 20 20 20 2a 2a 20 6f 70 74 69 6f 6e 20 74 61      ** option ta
5440: 6b 65 73 20 61 20 73 69 6e 67 6c 65 20 69 6e 74  kes a single int
5450: 65 67 65 72 20 61 72 67 75 6d 65 6e 74 20 77 68  eger argument wh
5460: 69 63 68 20 69 73 20 69 6e 74 65 72 70 72 65 74  ich is interpret
5470: 65 64 20 61 73 20 61 0a 20 20 20 20 20 20 2a 2a  ed as a.      **
5480: 20 62 6f 6f 6c 65 61 6e 20 69 6e 20 6f 72 64 65   boolean in orde
5490: 72 20 74 6f 20 65 6e 61 62 6c 65 20 6f 72 20 64  r to enable or d
54a0: 69 73 61 62 6c 65 20 74 68 65 20 75 73 65 20 6f  isable the use o
54b0: 66 20 63 6f 76 65 72 69 6e 67 20 69 6e 64 69 63  f covering indic
54c0: 65 73 20 66 6f 72 0a 20 20 20 20 20 20 2a 2a 20  es for.      ** 
54d0: 66 75 6c 6c 20 74 61 62 6c 65 20 73 63 61 6e 73  full table scans
54e0: 20 69 6e 20 74 68 65 20 71 75 65 72 79 20 6f 70   in the query op
54f0: 74 69 6d 69 7a 65 72 2e 20 2a 2f 0a 20 20 20 20  timizer. */.    
5500: 20 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43    sqlite3GlobalC
5510: 6f 6e 66 69 67 2e 62 55 73 65 43 69 73 20 3d 20  onfig.bUseCis = 
5520: 76 61 5f 61 72 67 28 61 70 2c 20 69 6e 74 29 3b  va_arg(ap, int);
5530: 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
5540: 20 20 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49    }..#ifdef SQLI
5550: 54 45 5f 45 4e 41 42 4c 45 5f 53 51 4c 4c 4f 47  TE_ENABLE_SQLLOG
5560: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
5570: 5f 43 4f 4e 46 49 47 5f 53 51 4c 4c 4f 47 3a 20  _CONFIG_SQLLOG: 
5580: 7b 0a 20 20 20 20 20 20 74 79 70 65 64 65 66 20  {.      typedef 
5590: 76 6f 69 64 28 2a 53 51 4c 4c 4f 47 46 55 4e 43  void(*SQLLOGFUNC
55a0: 5f 74 29 28 76 6f 69 64 2a 2c 20 73 71 6c 69 74  _t)(void*, sqlit
55b0: 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  e3*, const char*
55c0: 2c 20 69 6e 74 29 3b 0a 20 20 20 20 20 20 73 71  , int);.      sq
55d0: 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69  lite3GlobalConfi
55e0: 67 2e 78 53 71 6c 6c 6f 67 20 3d 20 76 61 5f 61  g.xSqllog = va_a
55f0: 72 67 28 61 70 2c 20 53 51 4c 4c 4f 47 46 55 4e  rg(ap, SQLLOGFUN
5600: 43 5f 74 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  C_t);.      sqli
5610: 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e  te3GlobalConfig.
5620: 70 53 71 6c 6c 6f 67 41 72 67 20 3d 20 76 61 5f  pSqllogArg = va_
5630: 61 72 67 28 61 70 2c 20 76 6f 69 64 20 2a 29 3b  arg(ap, void *);
5640: 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
5650: 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20    }.#endif..    
5660: 63 61 73 65 20 53 51 4c 49 54 45 5f 43 4f 4e 46  case SQLITE_CONF
5670: 49 47 5f 4d 4d 41 50 5f 53 49 5a 45 3a 20 7b 0a  IG_MMAP_SIZE: {.
5680: 20 20 20 20 20 20 2f 2a 20 45 56 49 44 45 4e 43        /* EVIDENC
5690: 45 2d 4f 46 3a 20 52 2d 35 38 30 36 33 2d 33 38  E-OF: R-58063-38
56a0: 32 35 38 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49  258 SQLITE_CONFI
56b0: 47 5f 4d 4d 41 50 5f 53 49 5a 45 20 74 61 6b 65  G_MMAP_SIZE take
56c0: 73 20 74 77 6f 20 36 34 2d 62 69 74 0a 20 20 20  s two 64-bit.   
56d0: 20 20 20 2a 2a 20 69 6e 74 65 67 65 72 20 28 73     ** integer (s
56e0: 71 6c 69 74 65 33 5f 69 6e 74 36 34 29 20 76 61  qlite3_int64) va
56f0: 6c 75 65 73 20 74 68 61 74 20 61 72 65 20 74 68  lues that are th
5700: 65 20 64 65 66 61 75 6c 74 20 6d 6d 61 70 20 73  e default mmap s
5710: 69 7a 65 20 6c 69 6d 69 74 0a 20 20 20 20 20 20  ize limit.      
5720: 2a 2a 20 28 74 68 65 20 64 65 66 61 75 6c 74 20  ** (the default 
5730: 73 65 74 74 69 6e 67 20 66 6f 72 20 50 52 41 47  setting for PRAG
5740: 4d 41 20 6d 6d 61 70 5f 73 69 7a 65 29 20 61 6e  MA mmap_size) an
5750: 64 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 61 6c  d the maximum al
5760: 6c 6f 77 65 64 0a 20 20 20 20 20 20 2a 2a 20 6d  lowed.      ** m
5770: 6d 61 70 20 73 69 7a 65 20 6c 69 6d 69 74 2e 20  map size limit. 
5780: 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  */.      sqlite3
5790: 5f 69 6e 74 36 34 20 73 7a 4d 6d 61 70 20 3d 20  _int64 szMmap = 
57a0: 76 61 5f 61 72 67 28 61 70 2c 20 73 71 6c 69 74  va_arg(ap, sqlit
57b0: 65 33 5f 69 6e 74 36 34 29 3b 0a 20 20 20 20 20  e3_int64);.     
57c0: 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 6d   sqlite3_int64 m
57d0: 78 4d 6d 61 70 20 3d 20 76 61 5f 61 72 67 28 61  xMmap = va_arg(a
57e0: 70 2c 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34  p, sqlite3_int64
57f0: 29 3b 0a 20 20 20 20 20 20 2f 2a 20 45 56 49 44  );.      /* EVID
5800: 45 4e 43 45 2d 4f 46 3a 20 52 2d 35 33 33 36 37  ENCE-OF: R-53367
5810: 2d 34 33 31 39 30 20 49 66 20 65 69 74 68 65 72  -43190 If either
5820: 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 69   argument to thi
5830: 73 20 6f 70 74 69 6f 6e 20 69 73 0a 20 20 20 20  s option is.    
5840: 20 20 2a 2a 20 6e 65 67 61 74 69 76 65 2c 20 74    ** negative, t
5850: 68 65 6e 20 74 68 61 74 20 61 72 67 75 6d 65 6e  hen that argumen
5860: 74 20 69 73 20 63 68 61 6e 67 65 64 20 74 6f 20  t is changed to 
5870: 69 74 73 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  its compile-time
5880: 20 64 65 66 61 75 6c 74 2e 0a 20 20 20 20 20 20   default..      
5890: 2a 2a 0a 20 20 20 20 20 20 2a 2a 20 45 56 49 44  **.      ** EVID
58a0: 45 4e 43 45 2d 4f 46 3a 20 52 2d 33 34 39 39 33  ENCE-OF: R-34993
58b0: 2d 34 35 30 33 31 20 54 68 65 20 6d 61 78 69 6d  -45031 The maxim
58c0: 75 6d 20 61 6c 6c 6f 77 65 64 20 6d 6d 61 70 20  um allowed mmap 
58d0: 73 69 7a 65 20 77 69 6c 6c 20 62 65 0a 20 20 20  size will be.   
58e0: 20 20 20 2a 2a 20 73 69 6c 65 6e 74 6c 79 20 74     ** silently t
58f0: 72 75 6e 63 61 74 65 64 20 69 66 20 6e 65 63 65  runcated if nece
5900: 73 73 61 72 79 20 73 6f 20 74 68 61 74 20 69 74  ssary so that it
5910: 20 64 6f 65 73 20 6e 6f 74 20 65 78 63 65 65 64   does not exceed
5920: 20 74 68 65 0a 20 20 20 20 20 20 2a 2a 20 63 6f   the.      ** co
5930: 6d 70 69 6c 65 2d 74 69 6d 65 20 6d 61 78 69 6d  mpile-time maxim
5940: 75 6d 20 6d 6d 61 70 20 73 69 7a 65 20 73 65 74  um mmap size set
5950: 20 62 79 20 74 68 65 20 53 51 4c 49 54 45 5f 4d   by the SQLITE_M
5960: 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 20 20 20  AX_MMAP_SIZE.   
5970: 20 20 20 2a 2a 20 63 6f 6d 70 69 6c 65 2d 74 69     ** compile-ti
5980: 6d 65 20 6f 70 74 69 6f 6e 2e 0a 20 20 20 20 20  me option..     
5990: 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 6d 78   */.      if( mx
59a0: 4d 6d 61 70 3c 30 20 7c 7c 20 6d 78 4d 6d 61 70  Mmap<0 || mxMmap
59b0: 3e 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50  >SQLITE_MAX_MMAP
59c0: 5f 53 49 5a 45 20 29 7b 0a 20 20 20 20 20 20 20  _SIZE ){.       
59d0: 20 6d 78 4d 6d 61 70 20 3d 20 53 51 4c 49 54 45   mxMmap = SQLITE
59e0: 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 3b 0a  _MAX_MMAP_SIZE;.
59f0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
5a00: 28 20 73 7a 4d 6d 61 70 3c 30 20 29 20 73 7a 4d  ( szMmap<0 ) szM
5a10: 6d 61 70 20 3d 20 53 51 4c 49 54 45 5f 44 45 46  map = SQLITE_DEF
5a20: 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 3b 0a  AULT_MMAP_SIZE;.
5a30: 20 20 20 20 20 20 69 66 28 20 73 7a 4d 6d 61 70        if( szMmap
5a40: 3e 6d 78 4d 6d 61 70 29 20 73 7a 4d 6d 61 70 20  >mxMmap) szMmap 
5a50: 3d 20 6d 78 4d 6d 61 70 3b 0a 20 20 20 20 20 20  = mxMmap;.      
5a60: 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e  sqlite3GlobalCon
5a70: 66 69 67 2e 6d 78 4d 6d 61 70 20 3d 20 6d 78 4d  fig.mxMmap = mxM
5a80: 6d 61 70 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  map;.      sqlit
5a90: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 73  e3GlobalConfig.s
5aa0: 7a 4d 6d 61 70 20 3d 20 73 7a 4d 6d 61 70 3b 0a  zMmap = szMmap;.
5ab0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
5ac0: 20 7d 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 4f   }..#if SQLITE_O
5ad0: 53 5f 57 49 4e 20 26 26 20 64 65 66 69 6e 65 64  S_WIN && defined
5ae0: 28 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41  (SQLITE_WIN32_MA
5af0: 4c 4c 4f 43 29 20 2f 2a 20 49 4d 50 3a 20 52 2d  LLOC) /* IMP: R-
5b00: 30 34 37 38 30 2d 35 35 38 31 35 20 2a 2f 0a 20  04780-55815 */. 
5b10: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 43     case SQLITE_C
5b20: 4f 4e 46 49 47 5f 57 49 4e 33 32 5f 48 45 41 50  ONFIG_WIN32_HEAP
5b30: 53 49 5a 45 3a 20 7b 0a 20 20 20 20 20 20 2f 2a  SIZE: {.      /*
5b40: 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d   EVIDENCE-OF: R-
5b50: 33 34 39 32 36 2d 30 33 33 36 30 20 53 51 4c 49  34926-03360 SQLI
5b60: 54 45 5f 43 4f 4e 46 49 47 5f 57 49 4e 33 32 5f  TE_CONFIG_WIN32_
5b70: 48 45 41 50 53 49 5a 45 20 74 61 6b 65 73 20 61  HEAPSIZE takes a
5b80: 20 33 32 2d 62 69 74 0a 20 20 20 20 20 20 2a 2a   32-bit.      **
5b90: 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65   unsigned intege
5ba0: 72 20 76 61 6c 75 65 20 74 68 61 74 20 73 70 65  r value that spe
5bb0: 63 69 66 69 65 73 20 74 68 65 20 6d 61 78 69 6d  cifies the maxim
5bc0: 75 6d 20 73 69 7a 65 20 6f 66 20 74 68 65 20 63  um size of the c
5bd0: 72 65 61 74 65 64 0a 20 20 20 20 20 20 2a 2a 20  reated.      ** 
5be0: 68 65 61 70 2e 20 2a 2f 0a 20 20 20 20 20 20 73  heap. */.      s
5bf0: 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66  qlite3GlobalConf
5c00: 69 67 2e 6e 48 65 61 70 20 3d 20 76 61 5f 61 72  ig.nHeap = va_ar
5c10: 67 28 61 70 2c 20 69 6e 74 29 3b 0a 20 20 20 20  g(ap, int);.    
5c20: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 23    break;.    }.#
5c30: 65 6e 64 69 66 0a 0a 20 20 20 20 63 61 73 65 20  endif..    case 
5c40: 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 50 4d  SQLITE_CONFIG_PM
5c50: 41 53 5a 3a 20 7b 0a 20 20 20 20 20 20 73 71 6c  ASZ: {.      sql
5c60: 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67  ite3GlobalConfig
5c70: 2e 73 7a 50 6d 61 20 3d 20 76 61 5f 61 72 67 28  .szPma = va_arg(
5c80: 61 70 2c 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  ap, unsigned int
5c90: 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  );.      break;.
5ca0: 20 20 20 20 7d 0a 0a 20 20 20 20 64 65 66 61 75      }..    defau
5cb0: 6c 74 3a 20 7b 0a 20 20 20 20 20 20 72 63 20 3d  lt: {.      rc =
5cc0: 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20   SQLITE_ERROR;. 
5cd0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
5ce0: 7d 0a 20 20 7d 0a 20 20 76 61 5f 65 6e 64 28 61  }.  }.  va_end(a
5cf0: 70 29 3b 0a 20 20 72 65 74 75 72 6e 20 72 63 3b  p);.  return rc;
5d00: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 53 65 74 20 75 70  .}../*.** Set up
5d10: 20 74 68 65 20 6c 6f 6f 6b 61 73 69 64 65 20 62   the lookaside b
5d20: 75 66 66 65 72 73 20 66 6f 72 20 61 20 64 61 74  uffers for a dat
5d30: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
5d40: 2e 0a 2a 2a 20 52 65 74 75 72 6e 20 53 51 4c 49  ..** Return SQLI
5d50: 54 45 5f 4f 4b 20 6f 6e 20 73 75 63 63 65 73 73  TE_OK on success
5d60: 2e 20 20 0a 2a 2a 20 49 66 20 6c 6f 6f 6b 61 73  .  .** If lookas
5d70: 69 64 65 20 69 73 20 61 6c 72 65 61 64 79 20 61  ide is already a
5d80: 63 74 69 76 65 2c 20 72 65 74 75 72 6e 20 53 51  ctive, return SQ
5d90: 4c 49 54 45 5f 42 55 53 59 2e 0a 2a 2a 0a 2a 2a  LITE_BUSY..**.**
5da0: 20 54 68 65 20 73 7a 20 70 61 72 61 6d 65 74 65   The sz paramete
5db0: 72 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20  r is the number 
5dc0: 6f 66 20 62 79 74 65 73 20 69 6e 20 65 61 63 68  of bytes in each
5dd0: 20 6c 6f 6f 6b 61 73 69 64 65 20 73 6c 6f 74 2e   lookaside slot.
5de0: 0a 2a 2a 20 54 68 65 20 63 6e 74 20 70 61 72 61  .** The cnt para
5df0: 6d 65 74 65 72 20 69 73 20 74 68 65 20 6e 75 6d  meter is the num
5e00: 62 65 72 20 6f 66 20 73 6c 6f 74 73 2e 20 20 49  ber of slots.  I
5e10: 66 20 70 53 74 61 72 74 20 69 73 20 4e 55 4c 4c  f pStart is NULL
5e20: 20 74 68 65 0a 2a 2a 20 73 70 61 63 65 20 66 6f   the.** space fo
5e30: 72 20 74 68 65 20 6c 6f 6f 6b 61 73 69 64 65 20  r the lookaside 
5e40: 6d 65 6d 6f 72 79 20 69 73 20 6f 62 74 61 69 6e  memory is obtain
5e50: 65 64 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 5f  ed from sqlite3_
5e60: 6d 61 6c 6c 6f 63 28 29 2e 0a 2a 2a 20 49 66 20  malloc()..** If 
5e70: 70 53 74 61 72 74 20 69 73 20 6e 6f 74 20 4e 55  pStart is not NU
5e80: 4c 4c 20 74 68 65 6e 20 69 74 20 69 73 20 73 7a  LL then it is sz
5e90: 2a 63 6e 74 20 62 79 74 65 73 20 6f 66 20 6d 65  *cnt bytes of me
5ea0: 6d 6f 72 79 20 74 6f 20 75 73 65 20 66 6f 72 0a  mory to use for.
5eb0: 2a 2a 20 74 68 65 20 6c 6f 6f 6b 61 73 69 64 65  ** the lookaside
5ec0: 20 6d 65 6d 6f 72 79 2e 0a 2a 2f 0a 73 74 61 74   memory..*/.stat
5ed0: 69 63 20 69 6e 74 20 73 65 74 75 70 4c 6f 6f 6b  ic int setupLook
5ee0: 61 73 69 64 65 28 73 71 6c 69 74 65 33 20 2a 64  aside(sqlite3 *d
5ef0: 62 2c 20 76 6f 69 64 20 2a 70 42 75 66 2c 20 69  b, void *pBuf, i
5f00: 6e 74 20 73 7a 2c 20 69 6e 74 20 63 6e 74 29 7b  nt sz, int cnt){
5f10: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
5f20: 4f 4d 49 54 5f 4c 4f 4f 4b 41 53 49 44 45 0a 20  OMIT_LOOKASIDE. 
5f30: 20 76 6f 69 64 20 2a 70 53 74 61 72 74 3b 0a 20   void *pStart;. 
5f40: 20 69 66 28 20 64 62 2d 3e 6c 6f 6f 6b 61 73 69   if( db->lookasi
5f50: 64 65 2e 6e 4f 75 74 20 29 7b 0a 20 20 20 20 72  de.nOut ){.    r
5f60: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 42 55 53  eturn SQLITE_BUS
5f70: 59 3b 0a 20 20 7d 0a 20 20 2f 2a 20 46 72 65 65  Y;.  }.  /* Free
5f80: 20 61 6e 79 20 65 78 69 73 74 69 6e 67 20 6c 6f   any existing lo
5f90: 6f 6b 61 73 69 64 65 20 62 75 66 66 65 72 20 66  okaside buffer f
5fa0: 6f 72 20 74 68 69 73 20 68 61 6e 64 6c 65 20 62  or this handle b
5fb0: 65 66 6f 72 65 0a 20 20 2a 2a 20 61 6c 6c 6f 63  efore.  ** alloc
5fc0: 61 74 69 6e 67 20 61 20 6e 65 77 20 6f 6e 65 20  ating a new one 
5fd0: 73 6f 20 77 65 20 64 6f 6e 27 74 20 68 61 76 65  so we don't have
5fe0: 20 74 6f 20 68 61 76 65 20 73 70 61 63 65 20 66   to have space f
5ff0: 6f 72 20 0a 20 20 2a 2a 20 62 6f 74 68 20 61 74  or .  ** both at
6000: 20 74 68 65 20 73 61 6d 65 20 74 69 6d 65 2e 0a   the same time..
6010: 20 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e 6c    */.  if( db->l
6020: 6f 6f 6b 61 73 69 64 65 2e 62 4d 61 6c 6c 6f 63  ookaside.bMalloc
6030: 65 64 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  ed ){.    sqlite
6040: 33 5f 66 72 65 65 28 64 62 2d 3e 6c 6f 6f 6b 61  3_free(db->looka
6050: 73 69 64 65 2e 70 53 74 61 72 74 29 3b 0a 20 20  side.pStart);.  
6060: 7d 0a 20 20 2f 2a 20 54 68 65 20 73 69 7a 65 20  }.  /* The size 
6070: 6f 66 20 61 20 6c 6f 6f 6b 61 73 69 64 65 20 73  of a lookaside s
6080: 6c 6f 74 20 61 66 74 65 72 20 52 4f 55 4e 44 44  lot after ROUNDD
6090: 4f 57 4e 38 20 6e 65 65 64 73 20 74 6f 20 62 65  OWN8 needs to be
60a0: 20 6c 61 72 67 65 72 0a 20 20 2a 2a 20 74 68 61   larger.  ** tha
60b0: 6e 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 62  n a pointer to b
60c0: 65 20 75 73 65 66 75 6c 2e 0a 20 20 2a 2f 0a 20  e useful..  */. 
60d0: 20 73 7a 20 3d 20 52 4f 55 4e 44 44 4f 57 4e 38   sz = ROUNDDOWN8
60e0: 28 73 7a 29 3b 20 20 2f 2a 20 49 4d 50 3a 20 52  (sz);  /* IMP: R
60f0: 2d 33 33 30 33 38 2d 30 39 33 38 32 20 2a 2f 0a  -33038-09382 */.
6100: 20 20 69 66 28 20 73 7a 3c 3d 28 69 6e 74 29 73    if( sz<=(int)s
6110: 69 7a 65 6f 66 28 4c 6f 6f 6b 61 73 69 64 65 53  izeof(LookasideS
6120: 6c 6f 74 2a 29 20 29 20 73 7a 20 3d 20 30 3b 0a  lot*) ) sz = 0;.
6130: 20 20 69 66 28 20 63 6e 74 3c 30 20 29 20 63 6e    if( cnt<0 ) cn
6140: 74 20 3d 20 30 3b 0a 20 20 69 66 28 20 73 7a 3d  t = 0;.  if( sz=
6150: 3d 30 20 7c 7c 20 63 6e 74 3d 3d 30 20 29 7b 0a  =0 || cnt==0 ){.
6160: 20 20 20 20 73 7a 20 3d 20 30 3b 0a 20 20 20 20      sz = 0;.    
6170: 70 53 74 61 72 74 20 3d 20 30 3b 0a 20 20 7d 65  pStart = 0;.  }e
6180: 6c 73 65 20 69 66 28 20 70 42 75 66 3d 3d 30 20  lse if( pBuf==0 
6190: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 42 65  ){.    sqlite3Be
61a0: 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28  ginBenignMalloc(
61b0: 29 3b 0a 20 20 20 20 70 53 74 61 72 74 20 3d 20  );.    pStart = 
61c0: 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 28 20 73  sqlite3Malloc( s
61d0: 7a 2a 63 6e 74 20 29 3b 20 20 2f 2a 20 49 4d 50  z*cnt );  /* IMP
61e0: 3a 20 52 2d 36 31 39 34 39 2d 33 35 37 32 37 20  : R-61949-35727 
61f0: 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 45 6e  */.    sqlite3En
6200: 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b  dBenignMalloc();
6210: 0a 20 20 20 20 69 66 28 20 70 53 74 61 72 74 20  .    if( pStart 
6220: 29 20 63 6e 74 20 3d 20 73 71 6c 69 74 65 33 4d  ) cnt = sqlite3M
6230: 61 6c 6c 6f 63 53 69 7a 65 28 70 53 74 61 72 74  allocSize(pStart
6240: 29 2f 73 7a 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  )/sz;.  }else{. 
6250: 20 20 20 70 53 74 61 72 74 20 3d 20 70 42 75 66     pStart = pBuf
6260: 3b 0a 20 20 7d 0a 20 20 64 62 2d 3e 6c 6f 6f 6b  ;.  }.  db->look
6270: 61 73 69 64 65 2e 70 53 74 61 72 74 20 3d 20 70  aside.pStart = p
6280: 53 74 61 72 74 3b 0a 20 20 64 62 2d 3e 6c 6f 6f  Start;.  db->loo
6290: 6b 61 73 69 64 65 2e 70 46 72 65 65 20 3d 20 30  kaside.pFree = 0
62a0: 3b 0a 20 20 64 62 2d 3e 6c 6f 6f 6b 61 73 69 64  ;.  db->lookasid
62b0: 65 2e 73 7a 20 3d 20 28 75 31 36 29 73 7a 3b 0a  e.sz = (u16)sz;.
62c0: 20 20 69 66 28 20 70 53 74 61 72 74 20 29 7b 0a    if( pStart ){.
62d0: 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 4c      int i;.    L
62e0: 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 2a 70 3b  ookasideSlot *p;
62f0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 73 7a 20  .    assert( sz 
6300: 3e 20 28 69 6e 74 29 73 69 7a 65 6f 66 28 4c 6f  > (int)sizeof(Lo
6310: 6f 6b 61 73 69 64 65 53 6c 6f 74 2a 29 20 29 3b  okasideSlot*) );
6320: 0a 20 20 20 20 70 20 3d 20 28 4c 6f 6f 6b 61 73  .    p = (Lookas
6330: 69 64 65 53 6c 6f 74 2a 29 70 53 74 61 72 74 3b  ideSlot*)pStart;
6340: 0a 20 20 20 20 66 6f 72 28 69 3d 63 6e 74 2d 31  .    for(i=cnt-1
6350: 3b 20 69 3e 3d 30 3b 20 69 2d 2d 29 7b 0a 20 20  ; i>=0; i--){.  
6360: 20 20 20 20 70 2d 3e 70 4e 65 78 74 20 3d 20 64      p->pNext = d
6370: 62 2d 3e 6c 6f 6f 6b 61 73 69 64 65 2e 70 46 72  b->lookaside.pFr
6380: 65 65 3b 0a 20 20 20 20 20 20 64 62 2d 3e 6c 6f  ee;.      db->lo
6390: 6f 6b 61 73 69 64 65 2e 70 46 72 65 65 20 3d 20  okaside.pFree = 
63a0: 70 3b 0a 20 20 20 20 20 20 70 20 3d 20 28 4c 6f  p;.      p = (Lo
63b0: 6f 6b 61 73 69 64 65 53 6c 6f 74 2a 29 26 28 28  okasideSlot*)&((
63c0: 75 38 2a 29 70 29 5b 73 7a 5d 3b 0a 20 20 20 20  u8*)p)[sz];.    
63d0: 7d 0a 20 20 20 20 64 62 2d 3e 6c 6f 6f 6b 61 73  }.    db->lookas
63e0: 69 64 65 2e 70 45 6e 64 20 3d 20 70 3b 0a 20 20  ide.pEnd = p;.  
63f0: 20 20 64 62 2d 3e 6c 6f 6f 6b 61 73 69 64 65 2e    db->lookaside.
6400: 62 45 6e 61 62 6c 65 64 20 3d 20 31 3b 0a 20 20  bEnabled = 1;.  
6410: 20 20 64 62 2d 3e 6c 6f 6f 6b 61 73 69 64 65 2e    db->lookaside.
6420: 62 4d 61 6c 6c 6f 63 65 64 20 3d 20 70 42 75 66  bMalloced = pBuf
6430: 3d 3d 30 20 3f 31 3a 30 3b 0a 20 20 7d 65 6c 73  ==0 ?1:0;.  }els
6440: 65 7b 0a 20 20 20 20 64 62 2d 3e 6c 6f 6f 6b 61  e{.    db->looka
6450: 73 69 64 65 2e 70 53 74 61 72 74 20 3d 20 64 62  side.pStart = db
6460: 3b 0a 20 20 20 20 64 62 2d 3e 6c 6f 6f 6b 61 73  ;.    db->lookas
6470: 69 64 65 2e 70 45 6e 64 20 3d 20 64 62 3b 0a 20  ide.pEnd = db;. 
6480: 20 20 20 64 62 2d 3e 6c 6f 6f 6b 61 73 69 64 65     db->lookaside
6490: 2e 62 45 6e 61 62 6c 65 64 20 3d 20 30 3b 0a 20  .bEnabled = 0;. 
64a0: 20 20 20 64 62 2d 3e 6c 6f 6f 6b 61 73 69 64 65     db->lookaside
64b0: 2e 62 4d 61 6c 6c 6f 63 65 64 20 3d 20 30 3b 0a  .bMalloced = 0;.
64c0: 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51    }.#endif /* SQ
64d0: 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f 4f 4b 41 53  LITE_OMIT_LOOKAS
64e0: 49 44 45 20 2a 2f 0a 20 20 72 65 74 75 72 6e 20  IDE */.  return 
64f0: 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  SQLITE_OK;.}../*
6500: 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6d  .** Return the m
6510: 75 74 65 78 20 61 73 73 6f 63 69 61 74 65 64 20  utex associated 
6520: 77 69 74 68 20 61 20 64 61 74 61 62 61 73 65 20  with a database 
6530: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0a 2a 2f 0a 73  connection..*/.s
6540: 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 73 71  qlite3_mutex *sq
6550: 6c 69 74 65 33 5f 64 62 5f 6d 75 74 65 78 28 73  lite3_db_mutex(s
6560: 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a 23 69 66  qlite3 *db){.#if
6570: 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
6580: 45 5f 41 50 49 5f 41 52 4d 4f 52 0a 20 20 69 66  E_API_ARMOR.  if
6590: 28 20 21 73 71 6c 69 74 65 33 53 61 66 65 74 79  ( !sqlite3Safety
65a0: 43 68 65 63 6b 4f 6b 28 64 62 29 20 29 7b 0a 20  CheckOk(db) ){. 
65b0: 20 20 20 28 76 6f 69 64 29 53 51 4c 49 54 45 5f     (void)SQLITE_
65c0: 4d 49 53 55 53 45 5f 42 4b 50 54 3b 0a 20 20 20  MISUSE_BKPT;.   
65d0: 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 23   return 0;.  }.#
65e0: 65 6e 64 69 66 0a 20 20 72 65 74 75 72 6e 20 64  endif.  return d
65f0: 62 2d 3e 6d 75 74 65 78 3b 0a 7d 0a 0a 2f 2a 0a  b->mutex;.}../*.
6600: 2a 2a 20 46 72 65 65 20 75 70 20 61 73 20 6d 75  ** Free up as mu
6610: 63 68 20 6d 65 6d 6f 72 79 20 61 73 20 77 65 20  ch memory as we 
6620: 63 61 6e 20 66 72 6f 6d 20 74 68 65 20 67 69 76  can from the giv
6630: 65 6e 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63  en database.** c
6640: 6f 6e 6e 65 63 74 69 6f 6e 2e 0a 2a 2f 0a 69 6e  onnection..*/.in
6650: 74 20 73 71 6c 69 74 65 33 5f 64 62 5f 72 65 6c  t sqlite3_db_rel
6660: 65 61 73 65 5f 6d 65 6d 6f 72 79 28 73 71 6c 69  ease_memory(sqli
6670: 74 65 33 20 2a 64 62 29 7b 0a 20 20 69 6e 74 20  te3 *db){.  int 
6680: 69 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  i;..#ifdef SQLIT
6690: 45 5f 45 4e 41 42 4c 45 5f 41 50 49 5f 41 52 4d  E_ENABLE_API_ARM
66a0: 4f 52 0a 20 20 69 66 28 20 21 73 71 6c 69 74 65  OR.  if( !sqlite
66b0: 33 53 61 66 65 74 79 43 68 65 63 6b 4f 6b 28 64  3SafetyCheckOk(d
66c0: 62 29 20 29 20 72 65 74 75 72 6e 20 53 51 4c 49  b) ) return SQLI
66d0: 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54 3b 0a  TE_MISUSE_BKPT;.
66e0: 23 65 6e 64 69 66 0a 20 20 73 71 6c 69 74 65 33  #endif.  sqlite3
66f0: 5f 6d 75 74 65 78 5f 65 6e 74 65 72 28 64 62 2d  _mutex_enter(db-
6700: 3e 6d 75 74 65 78 29 3b 0a 20 20 73 71 6c 69 74  >mutex);.  sqlit
6710: 65 33 42 74 72 65 65 45 6e 74 65 72 41 6c 6c 28  e3BtreeEnterAll(
6720: 64 62 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20  db);.  for(i=0; 
6730: 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b  i<db->nDb; i++){
6740: 0a 20 20 20 20 42 74 72 65 65 20 2a 70 42 74 20  .    Btree *pBt 
6750: 3d 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74  = db->aDb[i].pBt
6760: 3b 0a 20 20 20 20 69 66 28 20 70 42 74 20 29 7b  ;.    if( pBt ){
6770: 0a 20 20 20 20 20 20 50 61 67 65 72 20 2a 70 50  .      Pager *pP
6780: 61 67 65 72 20 3d 20 73 71 6c 69 74 65 33 42 74  ager = sqlite3Bt
6790: 72 65 65 50 61 67 65 72 28 70 42 74 29 3b 0a 20  reePager(pBt);. 
67a0: 20 20 20 20 20 73 71 6c 69 74 65 33 50 61 67 65       sqlite3Page
67b0: 72 53 68 72 69 6e 6b 28 70 50 61 67 65 72 29 3b  rShrink(pPager);
67c0: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 73 71 6c  .    }.  }.  sql
67d0: 69 74 65 33 42 74 72 65 65 4c 65 61 76 65 41 6c  ite3BtreeLeaveAl
67e0: 6c 28 64 62 29 3b 0a 20 20 73 71 6c 69 74 65 33  l(db);.  sqlite3
67f0: 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 64 62 2d  _mutex_leave(db-
6800: 3e 6d 75 74 65 78 29 3b 0a 20 20 72 65 74 75 72  >mutex);.  retur
6810: 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a  n SQLITE_OK;.}..
6820: 2f 2a 0a 2a 2a 20 43 6f 6e 66 69 67 75 72 61 74  /*.** Configurat
6830: 69 6f 6e 20 73 65 74 74 69 6e 67 73 20 66 6f 72  ion settings for
6840: 20 61 6e 20 69 6e 64 69 76 69 64 75 61 6c 20 64   an individual d
6850: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
6860: 6f 6e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  on.*/.int sqlite
6870: 33 5f 64 62 5f 63 6f 6e 66 69 67 28 73 71 6c 69  3_db_config(sqli
6880: 74 65 33 20 2a 64 62 2c 20 69 6e 74 20 6f 70 2c  te3 *db, int op,
6890: 20 2e 2e 2e 29 7b 0a 20 20 76 61 5f 6c 69 73 74   ...){.  va_list
68a0: 20 61 70 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20   ap;.  int rc;. 
68b0: 20 76 61 5f 73 74 61 72 74 28 61 70 2c 20 6f 70   va_start(ap, op
68c0: 29 3b 0a 20 20 73 77 69 74 63 68 28 20 6f 70 20  );.  switch( op 
68d0: 29 7b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  ){.    case SQLI
68e0: 54 45 5f 44 42 43 4f 4e 46 49 47 5f 4c 4f 4f 4b  TE_DBCONFIG_LOOK
68f0: 41 53 49 44 45 3a 20 7b 0a 20 20 20 20 20 20 76  ASIDE: {.      v
6900: 6f 69 64 20 2a 70 42 75 66 20 3d 20 76 61 5f 61  oid *pBuf = va_a
6910: 72 67 28 61 70 2c 20 76 6f 69 64 2a 29 3b 20 2f  rg(ap, void*); /
6920: 2a 20 49 4d 50 3a 20 52 2d 32 36 38 33 35 2d 31  * IMP: R-26835-1
6930: 30 39 36 34 20 2a 2f 0a 20 20 20 20 20 20 69 6e  0964 */.      in
6940: 74 20 73 7a 20 3d 20 76 61 5f 61 72 67 28 61 70  t sz = va_arg(ap
6950: 2c 20 69 6e 74 29 3b 20 20 20 20 20 20 20 2f 2a  , int);       /*
6960: 20 49 4d 50 3a 20 52 2d 34 37 38 37 31 2d 32 35   IMP: R-47871-25
6970: 39 39 34 20 2a 2f 0a 20 20 20 20 20 20 69 6e 74  994 */.      int
6980: 20 63 6e 74 20 3d 20 76 61 5f 61 72 67 28 61 70   cnt = va_arg(ap
6990: 2c 20 69 6e 74 29 3b 20 20 20 20 20 20 2f 2a 20  , int);      /* 
69a0: 49 4d 50 3a 20 52 2d 30 34 34 36 30 2d 35 33 33  IMP: R-04460-533
69b0: 38 36 20 2a 2f 0a 20 20 20 20 20 20 72 63 20 3d  86 */.      rc =
69c0: 20 73 65 74 75 70 4c 6f 6f 6b 61 73 69 64 65 28   setupLookaside(
69d0: 64 62 2c 20 70 42 75 66 2c 20 73 7a 2c 20 63 6e  db, pBuf, sz, cn
69e0: 74 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b  t);.      break;
69f0: 0a 20 20 20 20 7d 0a 20 20 20 20 64 65 66 61 75  .    }.    defau
6a00: 6c 74 3a 20 7b 0a 20 20 20 20 20 20 73 74 61 74  lt: {.      stat
6a10: 69 63 20 63 6f 6e 73 74 20 73 74 72 75 63 74 20  ic const struct 
6a20: 7b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6f 70  {.        int op
6a30: 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6f 70  ;      /* The op
6a40: 63 6f 64 65 20 2a 2f 0a 20 20 20 20 20 20 20 20  code */.        
6a50: 75 33 32 20 6d 61 73 6b 3b 20 20 20 20 2f 2a 20  u32 mask;    /* 
6a60: 4d 61 73 6b 20 6f 66 20 74 68 65 20 62 69 74 20  Mask of the bit 
6a70: 69 6e 20 73 71 6c 69 74 65 33 2e 66 6c 61 67 73  in sqlite3.flags
6a80: 20 74 6f 20 73 65 74 2f 63 6c 65 61 72 20 2a 2f   to set/clear */
6a90: 0a 20 20 20 20 20 20 7d 20 61 46 6c 61 67 4f 70  .      } aFlagOp
6aa0: 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 20 20 7b  [] = {.        {
6ab0: 20 53 51 4c 49 54 45 5f 44 42 43 4f 4e 46 49 47   SQLITE_DBCONFIG
6ac0: 5f 45 4e 41 42 4c 45 5f 46 4b 45 59 2c 20 20 20  _ENABLE_FKEY,   
6ad0: 20 53 51 4c 49 54 45 5f 46 6f 72 65 69 67 6e 4b   SQLITE_ForeignK
6ae0: 65 79 73 20 20 20 20 7d 2c 0a 20 20 20 20 20 20  eys    },.      
6af0: 20 20 7b 20 53 51 4c 49 54 45 5f 44 42 43 4f 4e    { SQLITE_DBCON
6b00: 46 49 47 5f 45 4e 41 42 4c 45 5f 54 52 49 47 47  FIG_ENABLE_TRIGG
6b10: 45 52 2c 20 53 51 4c 49 54 45 5f 45 6e 61 62 6c  ER, SQLITE_Enabl
6b20: 65 54 72 69 67 67 65 72 20 20 7d 2c 0a 20 20 20  eTrigger  },.   
6b30: 20 20 20 7d 3b 0a 20 20 20 20 20 20 75 6e 73 69     };.      unsi
6b40: 67 6e 65 64 20 69 6e 74 20 69 3b 0a 20 20 20 20  gned int i;.    
6b50: 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52    rc = SQLITE_ER
6b60: 52 4f 52 3b 20 2f 2a 20 49 4d 50 3a 20 52 2d 34  ROR; /* IMP: R-4
6b70: 32 37 39 30 2d 32 33 33 37 32 20 2a 2f 0a 20 20  2790-23372 */.  
6b80: 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 41      for(i=0; i<A
6b90: 72 72 61 79 53 69 7a 65 28 61 46 6c 61 67 4f 70  rraySize(aFlagOp
6ba0: 29 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20  ); i++){.       
6bb0: 20 69 66 28 20 61 46 6c 61 67 4f 70 5b 69 5d 2e   if( aFlagOp[i].
6bc0: 6f 70 3d 3d 6f 70 20 29 7b 0a 20 20 20 20 20 20  op==op ){.      
6bd0: 20 20 20 20 69 6e 74 20 6f 6e 6f 66 66 20 3d 20      int onoff = 
6be0: 76 61 5f 61 72 67 28 61 70 2c 20 69 6e 74 29 3b  va_arg(ap, int);
6bf0: 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 2a  .          int *
6c00: 70 52 65 73 20 3d 20 76 61 5f 61 72 67 28 61 70  pRes = va_arg(ap
6c10: 2c 20 69 6e 74 2a 29 3b 0a 20 20 20 20 20 20 20  , int*);.       
6c20: 20 20 20 69 6e 74 20 6f 6c 64 46 6c 61 67 73 20     int oldFlags 
6c30: 3d 20 64 62 2d 3e 66 6c 61 67 73 3b 0a 20 20 20  = db->flags;.   
6c40: 20 20 20 20 20 20 20 69 66 28 20 6f 6e 6f 66 66         if( onoff
6c50: 3e 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  >0 ){.          
6c60: 20 20 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 61    db->flags |= a
6c70: 46 6c 61 67 4f 70 5b 69 5d 2e 6d 61 73 6b 3b 0a  FlagOp[i].mask;.
6c80: 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 20            }else 
6c90: 69 66 28 20 6f 6e 6f 66 66 3d 3d 30 20 29 7b 0a  if( onoff==0 ){.
6ca0: 20 20 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e              db->
6cb0: 66 6c 61 67 73 20 26 3d 20 7e 61 46 6c 61 67 4f  flags &= ~aFlagO
6cc0: 70 5b 69 5d 2e 6d 61 73 6b 3b 0a 20 20 20 20 20  p[i].mask;.     
6cd0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
6ce0: 20 69 66 28 20 6f 6c 64 46 6c 61 67 73 21 3d 64   if( oldFlags!=d
6cf0: 62 2d 3e 66 6c 61 67 73 20 29 7b 0a 20 20 20 20  b->flags ){.    
6d00: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 45          sqlite3E
6d10: 78 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61  xpirePreparedSta
6d20: 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 20  tements(db);.   
6d30: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
6d40: 20 20 20 69 66 28 20 70 52 65 73 20 29 7b 0a 20     if( pRes ){. 
6d50: 20 20 20 20 20 20 20 20 20 20 20 2a 70 52 65 73             *pRes
6d60: 20 3d 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20   = (db->flags & 
6d70: 61 46 6c 61 67 4f 70 5b 69 5d 2e 6d 61 73 6b 29  aFlagOp[i].mask)
6d80: 21 3d 30 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  !=0;.          }
6d90: 0a 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20  .          rc = 
6da0: 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 20  SQLITE_OK;.     
6db0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
6dc0: 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
6dd0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
6de0: 0a 20 20 7d 0a 20 20 76 61 5f 65 6e 64 28 61 70  .  }.  va_end(ap
6df0: 29 3b 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a  );.  return rc;.
6e00: 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e  }.../*.** Return
6e10: 20 74 72 75 65 20 69 66 20 74 68 65 20 62 75 66   true if the buf
6e20: 66 65 72 20 7a 5b 30 2e 2e 6e 2d 31 5d 20 63 6f  fer z[0..n-1] co
6e30: 6e 74 61 69 6e 73 20 61 6c 6c 20 73 70 61 63 65  ntains all space
6e40: 73 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  s..*/.static int
6e50: 20 61 6c 6c 53 70 61 63 65 73 28 63 6f 6e 73 74   allSpaces(const
6e60: 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20 6e 29   char *z, int n)
6e70: 7b 0a 20 20 77 68 69 6c 65 28 20 6e 3e 30 20 26  {.  while( n>0 &
6e80: 26 20 7a 5b 6e 2d 31 5d 3d 3d 27 20 27 20 29 7b  & z[n-1]==' ' ){
6e90: 20 6e 2d 2d 3b 20 7d 0a 20 20 72 65 74 75 72 6e   n--; }.  return
6ea0: 20 6e 3d 3d 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20   n==0;.}../*.** 
6eb0: 54 68 69 73 20 69 73 20 74 68 65 20 64 65 66 61  This is the defa
6ec0: 75 6c 74 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75  ult collating fu
6ed0: 6e 63 74 69 6f 6e 20 6e 61 6d 65 64 20 22 42 49  nction named "BI
6ee0: 4e 41 52 59 22 20 77 68 69 63 68 20 69 73 20 61  NARY" which is a
6ef0: 6c 77 61 79 73 0a 2a 2a 20 61 76 61 69 6c 61 62  lways.** availab
6f00: 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  le..**.** If the
6f10: 20 70 61 64 46 6c 61 67 20 61 72 67 75 6d 65 6e   padFlag argumen
6f20: 74 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 20 74 68  t is not NULL th
6f30: 65 6e 20 73 70 61 63 65 20 70 61 64 64 69 6e 67  en space padding
6f40: 20 61 74 20 74 68 65 20 65 6e 64 0a 2a 2a 20 6f   at the end.** o
6f50: 66 20 73 74 72 69 6e 67 73 20 69 73 20 69 67 6e  f strings is ign
6f60: 6f 72 65 64 2e 20 20 54 68 69 73 20 69 6d 70 6c  ored.  This impl
6f70: 65 6d 65 6e 74 73 20 74 68 65 20 52 54 52 49 4d  ements the RTRIM
6f80: 20 63 6f 6c 6c 61 74 69 6f 6e 2e 0a 2a 2f 0a 73   collation..*/.s
6f90: 74 61 74 69 63 20 69 6e 74 20 62 69 6e 43 6f 6c  tatic int binCol
6fa0: 6c 46 75 6e 63 28 0a 20 20 76 6f 69 64 20 2a 70  lFunc(.  void *p
6fb0: 61 64 46 6c 61 67 2c 0a 20 20 69 6e 74 20 6e 4b  adFlag,.  int nK
6fc0: 65 79 31 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20  ey1, const void 
6fd0: 2a 70 4b 65 79 31 2c 0a 20 20 69 6e 74 20 6e 4b  *pKey1,.  int nK
6fe0: 65 79 32 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20  ey2, const void 
6ff0: 2a 70 4b 65 79 32 0a 29 7b 0a 20 20 69 6e 74 20  *pKey2.){.  int 
7000: 72 63 2c 20 6e 3b 0a 20 20 6e 20 3d 20 6e 4b 65  rc, n;.  n = nKe
7010: 79 31 3c 6e 4b 65 79 32 20 3f 20 6e 4b 65 79 31  y1<nKey2 ? nKey1
7020: 20 3a 20 6e 4b 65 79 32 3b 0a 20 20 2f 2a 20 45   : nKey2;.  /* E
7030: 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 36 35  VIDENCE-OF: R-65
7040: 30 33 33 2d 32 38 34 34 39 20 54 68 65 20 62 75  033-28449 The bu
7050: 69 6c 74 2d 69 6e 20 42 49 4e 41 52 59 20 63 6f  ilt-in BINARY co
7060: 6c 6c 61 74 69 6f 6e 20 63 6f 6d 70 61 72 65 73  llation compares
7070: 0a 20 20 2a 2a 20 73 74 72 69 6e 67 73 20 62 79  .  ** strings by
7080: 74 65 20 62 79 20 62 79 74 65 20 75 73 69 6e 67  te by byte using
7090: 20 74 68 65 20 6d 65 6d 63 6d 70 28 29 20 66 75   the memcmp() fu
70a0: 6e 63 74 69 6f 6e 20 66 72 6f 6d 20 74 68 65 20  nction from the 
70b0: 73 74 61 6e 64 61 72 64 20 43 0a 20 20 2a 2a 20  standard C.  ** 
70c0: 6c 69 62 72 61 72 79 2e 20 2a 2f 0a 20 20 72 63  library. */.  rc
70d0: 20 3d 20 6d 65 6d 63 6d 70 28 70 4b 65 79 31 2c   = memcmp(pKey1,
70e0: 20 70 4b 65 79 32 2c 20 6e 29 3b 0a 20 20 69 66   pKey2, n);.  if
70f0: 28 20 72 63 3d 3d 30 20 29 7b 0a 20 20 20 20 69  ( rc==0 ){.    i
7100: 66 28 20 70 61 64 46 6c 61 67 0a 20 20 20 20 20  f( padFlag.     
7110: 26 26 20 61 6c 6c 53 70 61 63 65 73 28 28 28 63  && allSpaces(((c
7120: 68 61 72 2a 29 70 4b 65 79 31 29 2b 6e 2c 20 6e  har*)pKey1)+n, n
7130: 4b 65 79 31 2d 6e 29 0a 20 20 20 20 20 26 26 20  Key1-n).     && 
7140: 61 6c 6c 53 70 61 63 65 73 28 28 28 63 68 61 72  allSpaces(((char
7150: 2a 29 70 4b 65 79 32 29 2b 6e 2c 20 6e 4b 65 79  *)pKey2)+n, nKey
7160: 32 2d 6e 29 0a 20 20 20 20 29 7b 0a 20 20 20 20  2-n).    ){.    
7170: 20 20 2f 2a 20 45 56 49 44 45 4e 43 45 2d 4f 46    /* EVIDENCE-OF
7180: 3a 20 52 2d 33 31 36 32 34 2d 32 34 37 33 37 20  : R-31624-24737 
7190: 52 54 52 49 4d 20 69 73 20 6c 69 6b 65 20 42 49  RTRIM is like BI
71a0: 4e 41 52 59 20 65 78 63 65 70 74 20 74 68 61 74  NARY except that
71b0: 20 65 78 74 72 61 0a 20 20 20 20 20 20 2a 2a 20   extra.      ** 
71c0: 73 70 61 63 65 73 20 61 74 20 74 68 65 20 65 6e  spaces at the en
71d0: 64 20 6f 66 20 65 69 74 68 65 72 20 73 74 72 69  d of either stri
71e0: 6e 67 20 64 6f 20 6e 6f 74 20 63 68 61 6e 67 65  ng do not change
71f0: 20 74 68 65 20 72 65 73 75 6c 74 2e 20 49 6e 20   the result. In 
7200: 6f 74 68 65 72 0a 20 20 20 20 20 20 2a 2a 20 77  other.      ** w
7210: 6f 72 64 73 2c 20 73 74 72 69 6e 67 73 20 77 69  ords, strings wi
7220: 6c 6c 20 63 6f 6d 70 61 72 65 20 65 71 75 61 6c  ll compare equal
7230: 20 74 6f 20 6f 6e 65 20 61 6e 6f 74 68 65 72 20   to one another 
7240: 61 73 20 6c 6f 6e 67 20 61 73 20 74 68 65 79 0a  as long as they.
7250: 20 20 20 20 20 20 2a 2a 20 64 69 66 66 65 72 20        ** differ 
7260: 6f 6e 6c 79 20 69 6e 20 74 68 65 20 6e 75 6d 62  only in the numb
7270: 65 72 20 6f 66 20 73 70 61 63 65 73 20 61 74 20  er of spaces at 
7280: 74 68 65 20 65 6e 64 2e 0a 20 20 20 20 20 20 2a  the end..      *
7290: 2f 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  /.    }else{.   
72a0: 20 20 20 72 63 20 3d 20 6e 4b 65 79 31 20 2d 20     rc = nKey1 - 
72b0: 6e 4b 65 79 32 3b 0a 20 20 20 20 7d 0a 20 20 7d  nKey2;.    }.  }
72c0: 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a  .  return rc;.}.
72d0: 0a 2f 2a 0a 2a 2a 20 41 6e 6f 74 68 65 72 20 62  ./*.** Another b
72e0: 75 69 6c 74 2d 69 6e 20 63 6f 6c 6c 61 74 69 6e  uilt-in collatin
72f0: 67 20 73 65 71 75 65 6e 63 65 3a 20 4e 4f 43 41  g sequence: NOCA
7300: 53 45 2e 20 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  SE. .**.** This 
7310: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
7320: 63 65 20 69 73 20 69 6e 74 65 6e 64 65 64 20 74  ce is intended t
7330: 6f 20 62 65 20 75 73 65 64 20 66 6f 72 20 22 63  o be used for "c
7340: 61 73 65 20 69 6e 64 65 70 65 6e 64 65 6e 74 0a  ase independent.
7350: 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 22 2e 20  ** comparison". 
7360: 53 51 4c 69 74 65 27 73 20 6b 6e 6f 77 6c 65 64  SQLite's knowled
7370: 67 65 20 6f 66 20 75 70 70 65 72 20 61 6e 64 20  ge of upper and 
7380: 6c 6f 77 65 72 20 63 61 73 65 20 65 71 75 69 76  lower case equiv
7390: 61 6c 65 6e 74 73 0a 2a 2a 20 65 78 74 65 6e 64  alents.** extend
73a0: 73 20 6f 6e 6c 79 20 74 6f 20 74 68 65 20 32 36  s only to the 26
73b0: 20 63 68 61 72 61 63 74 65 72 73 20 75 73 65 64   characters used
73c0: 20 69 6e 20 74 68 65 20 45 6e 67 6c 69 73 68 20   in the English 
73d0: 6c 61 6e 67 75 61 67 65 2e 0a 2a 2a 0a 2a 2a 20  language..**.** 
73e0: 41 74 20 74 68 65 20 6d 6f 6d 65 6e 74 20 74 68  At the moment th
73f0: 65 72 65 20 69 73 20 6f 6e 6c 79 20 61 20 55 54  ere is only a UT
7400: 46 2d 38 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  F-8 implementati
7410: 6f 6e 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  on..*/.static in
7420: 74 20 6e 6f 63 61 73 65 43 6f 6c 6c 61 74 69 6e  t nocaseCollatin
7430: 67 46 75 6e 63 28 0a 20 20 76 6f 69 64 20 2a 4e  gFunc(.  void *N
7440: 6f 74 55 73 65 64 2c 0a 20 20 69 6e 74 20 6e 4b  otUsed,.  int nK
7450: 65 79 31 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20  ey1, const void 
7460: 2a 70 4b 65 79 31 2c 0a 20 20 69 6e 74 20 6e 4b  *pKey1,.  int nK
7470: 65 79 32 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20  ey2, const void 
7480: 2a 70 4b 65 79 32 0a 29 7b 0a 20 20 69 6e 74 20  *pKey2.){.  int 
7490: 72 20 3d 20 73 71 6c 69 74 65 33 53 74 72 4e 49  r = sqlite3StrNI
74a0: 43 6d 70 28 0a 20 20 20 20 20 20 28 63 6f 6e 73  Cmp(.      (cons
74b0: 74 20 63 68 61 72 20 2a 29 70 4b 65 79 31 2c 20  t char *)pKey1, 
74c0: 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 70 4b  (const char *)pK
74d0: 65 79 32 2c 20 28 6e 4b 65 79 31 3c 6e 4b 65 79  ey2, (nKey1<nKey
74e0: 32 29 3f 6e 4b 65 79 31 3a 6e 4b 65 79 32 29 3b  2)?nKey1:nKey2);
74f0: 0a 20 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45  .  UNUSED_PARAME
7500: 54 45 52 28 4e 6f 74 55 73 65 64 29 3b 0a 20 20  TER(NotUsed);.  
7510: 69 66 28 20 30 3d 3d 72 20 29 7b 0a 20 20 20 20  if( 0==r ){.    
7520: 72 20 3d 20 6e 4b 65 79 31 2d 6e 4b 65 79 32 3b  r = nKey1-nKey2;
7530: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 72 3b  .  }.  return r;
7540: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e  .}../*.** Return
7550: 20 74 68 65 20 52 4f 57 49 44 20 6f 66 20 74 68   the ROWID of th
7560: 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 69 6e  e most recent in
7570: 73 65 72 74 0a 2a 2f 0a 73 71 6c 69 74 65 5f 69  sert.*/.sqlite_i
7580: 6e 74 36 34 20 73 71 6c 69 74 65 33 5f 6c 61 73  nt64 sqlite3_las
7590: 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 73  t_insert_rowid(s
75a0: 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a 23 69 66  qlite3 *db){.#if
75b0: 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
75c0: 45 5f 41 50 49 5f 41 52 4d 4f 52 0a 20 20 69 66  E_API_ARMOR.  if
75d0: 28 20 21 73 71 6c 69 74 65 33 53 61 66 65 74 79  ( !sqlite3Safety
75e0: 43 68 65 63 6b 4f 6b 28 64 62 29 20 29 7b 0a 20  CheckOk(db) ){. 
75f0: 20 20 20 28 76 6f 69 64 29 53 51 4c 49 54 45 5f     (void)SQLITE_
7600: 4d 49 53 55 53 45 5f 42 4b 50 54 3b 0a 20 20 20  MISUSE_BKPT;.   
7610: 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 23   return 0;.  }.#
7620: 65 6e 64 69 66 0a 20 20 72 65 74 75 72 6e 20 64  endif.  return d
7630: 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 7d 0a  b->lastRowid;.}.
7640: 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68  ./*.** Return th
7650: 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 68 61 6e  e number of chan
7660: 67 65 73 20 69 6e 20 74 68 65 20 6d 6f 73 74 20  ges in the most 
7670: 72 65 63 65 6e 74 20 63 61 6c 6c 20 74 6f 20 73  recent call to s
7680: 71 6c 69 74 65 33 5f 65 78 65 63 28 29 2e 0a 2a  qlite3_exec()..*
7690: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 63 68  /.int sqlite3_ch
76a0: 61 6e 67 65 73 28 73 71 6c 69 74 65 33 20 2a 64  anges(sqlite3 *d
76b0: 62 29 7b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  b){.#ifdef SQLIT
76c0: 45 5f 45 4e 41 42 4c 45 5f 41 50 49 5f 41 52 4d  E_ENABLE_API_ARM
76d0: 4f 52 0a 20 20 69 66 28 20 21 73 71 6c 69 74 65  OR.  if( !sqlite
76e0: 33 53 61 66 65 74 79 43 68 65 63 6b 4f 6b 28 64  3SafetyCheckOk(d
76f0: 62 29 20 29 7b 0a 20 20 20 20 28 76 6f 69 64 29  b) ){.    (void)
7700: 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b  SQLITE_MISUSE_BK
7710: 50 54 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 30  PT;.    return 0
7720: 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 72  ;.  }.#endif.  r
7730: 65 74 75 72 6e 20 64 62 2d 3e 6e 43 68 61 6e 67  eturn db->nChang
7740: 65 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75  e;.}../*.** Retu
7750: 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  rn the number of
7760: 20 63 68 61 6e 67 65 73 20 73 69 6e 63 65 20 74   changes since t
7770: 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64  he database hand
7780: 6c 65 20 77 61 73 20 6f 70 65 6e 65 64 2e 0a 2a  le was opened..*
7790: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 74 6f  /.int sqlite3_to
77a0: 74 61 6c 5f 63 68 61 6e 67 65 73 28 73 71 6c 69  tal_changes(sqli
77b0: 74 65 33 20 2a 64 62 29 7b 0a 23 69 66 64 65 66  te3 *db){.#ifdef
77c0: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41   SQLITE_ENABLE_A
77d0: 50 49 5f 41 52 4d 4f 52 0a 20 20 69 66 28 20 21  PI_ARMOR.  if( !
77e0: 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65  sqlite3SafetyChe
77f0: 63 6b 4f 6b 28 64 62 29 20 29 7b 0a 20 20 20 20  ckOk(db) ){.    
7800: 28 76 6f 69 64 29 53 51 4c 49 54 45 5f 4d 49 53  (void)SQLITE_MIS
7810: 55 53 45 5f 42 4b 50 54 3b 0a 20 20 20 20 72 65  USE_BKPT;.    re
7820: 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 23 65 6e 64  turn 0;.  }.#end
7830: 69 66 0a 20 20 72 65 74 75 72 6e 20 64 62 2d 3e  if.  return db->
7840: 6e 54 6f 74 61 6c 43 68 61 6e 67 65 3b 0a 7d 0a  nTotalChange;.}.
7850: 0a 2f 2a 0a 2a 2a 20 43 6c 6f 73 65 20 61 6c 6c  ./*.** Close all
7860: 20 6f 70 65 6e 20 73 61 76 65 70 6f 69 6e 74 73   open savepoints
7870: 2e 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20  . This function 
7880: 6f 6e 6c 79 20 6d 61 6e 69 70 75 6c 61 74 65 73  only manipulates
7890: 20 66 69 65 6c 64 73 20 6f 66 20 74 68 65 0a 2a   fields of the.*
78a0: 2a 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c  * database handl
78b0: 65 20 6f 62 6a 65 63 74 2c 20 69 74 20 64 6f 65  e object, it doe
78c0: 73 20 6e 6f 74 20 63 6c 6f 73 65 20 61 6e 79 20  s not close any 
78d0: 73 61 76 65 70 6f 69 6e 74 73 20 74 68 61 74 20  savepoints that 
78e0: 6d 61 79 20 62 65 20 6f 70 65 6e 0a 2a 2a 20 61  may be open.** a
78f0: 74 20 74 68 65 20 62 2d 74 72 65 65 2f 70 61 67  t the b-tree/pag
7900: 65 72 20 6c 65 76 65 6c 2e 0a 2a 2f 0a 76 6f 69  er level..*/.voi
7910: 64 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 53 61  d sqlite3CloseSa
7920: 76 65 70 6f 69 6e 74 73 28 73 71 6c 69 74 65 33  vepoints(sqlite3
7930: 20 2a 64 62 29 7b 0a 20 20 77 68 69 6c 65 28 20   *db){.  while( 
7940: 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 29  db->pSavepoint )
7950: 7b 0a 20 20 20 20 53 61 76 65 70 6f 69 6e 74 20  {.    Savepoint 
7960: 2a 70 54 6d 70 20 3d 20 64 62 2d 3e 70 53 61 76  *pTmp = db->pSav
7970: 65 70 6f 69 6e 74 3b 0a 20 20 20 20 64 62 2d 3e  epoint;.    db->
7980: 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 54 6d  pSavepoint = pTm
7990: 70 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20 73 71  p->pNext;.    sq
79a0: 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
79b0: 70 54 6d 70 29 3b 0a 20 20 7d 0a 20 20 64 62 2d  pTmp);.  }.  db-
79c0: 3e 6e 53 61 76 65 70 6f 69 6e 74 20 3d 20 30 3b  >nSavepoint = 0;
79d0: 0a 20 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e  .  db->nStatemen
79e0: 74 20 3d 20 30 3b 0a 20 20 64 62 2d 3e 69 73 54  t = 0;.  db->isT
79f0: 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f  ransactionSavepo
7a00: 69 6e 74 20 3d 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a  int = 0;.}../*.*
7a10: 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 64 65 73  * Invoke the des
7a20: 74 72 75 63 74 6f 72 20 66 75 6e 63 74 69 6f 6e  tructor function
7a30: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
7a40: 20 46 75 6e 63 44 65 66 20 70 2c 20 69 66 20 61   FuncDef p, if a
7a50: 6e 79 2e 20 45 78 63 65 70 74 2c 0a 2a 2a 20 69  ny. Except,.** i
7a60: 66 20 74 68 69 73 20 69 73 20 6e 6f 74 20 74 68  f this is not th
7a70: 65 20 6c 61 73 74 20 63 6f 70 79 20 6f 66 20 74  e last copy of t
7a80: 68 65 20 66 75 6e 63 74 69 6f 6e 2c 20 64 6f 20  he function, do 
7a90: 6e 6f 74 20 69 6e 76 6f 6b 65 20 69 74 2e 20 4d  not invoke it. M
7aa0: 75 6c 74 69 70 6c 65 0a 2a 2a 20 63 6f 70 69 65  ultiple.** copie
7ab0: 73 20 6f 66 20 61 20 73 69 6e 67 6c 65 20 66 75  s of a single fu
7ac0: 6e 63 74 69 6f 6e 20 61 72 65 20 63 72 65 61 74  nction are creat
7ad0: 65 64 20 77 68 65 6e 20 63 72 65 61 74 65 5f 66  ed when create_f
7ae0: 75 6e 63 74 69 6f 6e 28 29 20 69 73 20 63 61 6c  unction() is cal
7af0: 6c 65 64 0a 2a 2a 20 77 69 74 68 20 53 51 4c 49  led.** with SQLI
7b00: 54 45 5f 41 4e 59 20 61 73 20 74 68 65 20 65 6e  TE_ANY as the en
7b10: 63 6f 64 69 6e 67 2e 0a 2a 2f 0a 73 74 61 74 69  coding..*/.stati
7b20: 63 20 76 6f 69 64 20 66 75 6e 63 74 69 6f 6e 44  c void functionD
7b30: 65 73 74 72 6f 79 28 73 71 6c 69 74 65 33 20 2a  estroy(sqlite3 *
7b40: 64 62 2c 20 46 75 6e 63 44 65 66 20 2a 70 29 7b  db, FuncDef *p){
7b50: 0a 20 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f  .  FuncDestructo
7b60: 72 20 2a 70 44 65 73 74 72 75 63 74 6f 72 20 3d  r *pDestructor =
7b70: 20 70 2d 3e 70 44 65 73 74 72 75 63 74 6f 72 3b   p->pDestructor;
7b80: 0a 20 20 69 66 28 20 70 44 65 73 74 72 75 63 74  .  if( pDestruct
7b90: 6f 72 20 29 7b 0a 20 20 20 20 70 44 65 73 74 72  or ){.    pDestr
7ba0: 75 63 74 6f 72 2d 3e 6e 52 65 66 2d 2d 3b 0a 20  uctor->nRef--;. 
7bb0: 20 20 20 69 66 28 20 70 44 65 73 74 72 75 63 74     if( pDestruct
7bc0: 6f 72 2d 3e 6e 52 65 66 3d 3d 30 20 29 7b 0a 20  or->nRef==0 ){. 
7bd0: 20 20 20 20 20 70 44 65 73 74 72 75 63 74 6f 72       pDestructor
7be0: 2d 3e 78 44 65 73 74 72 6f 79 28 70 44 65 73 74  ->xDestroy(pDest
7bf0: 72 75 63 74 6f 72 2d 3e 70 55 73 65 72 44 61 74  ructor->pUserDat
7c00: 61 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  a);.      sqlite
7c10: 33 44 62 46 72 65 65 28 64 62 2c 20 70 44 65 73  3DbFree(db, pDes
7c20: 74 72 75 63 74 6f 72 29 3b 0a 20 20 20 20 7d 0a  tructor);.    }.
7c30: 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 44 69 73    }.}../*.** Dis
7c40: 63 6f 6e 6e 65 63 74 20 61 6c 6c 20 73 71 6c 69  connect all sqli
7c50: 74 65 33 5f 76 74 61 62 20 6f 62 6a 65 63 74 73  te3_vtab objects
7c60: 20 74 68 61 74 20 62 65 6c 6f 6e 67 20 74 6f 20   that belong to 
7c70: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
7c80: 69 6f 6e 0a 2a 2a 20 64 62 2e 20 54 68 69 73 20  ion.** db. This 
7c90: 69 73 20 63 61 6c 6c 65 64 20 77 68 65 6e 20 64  is called when d
7ca0: 62 20 69 73 20 62 65 69 6e 67 20 63 6c 6f 73 65  b is being close
7cb0: 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69  d..*/.static voi
7cc0: 64 20 64 69 73 63 6f 6e 6e 65 63 74 41 6c 6c 56  d disconnectAllV
7cd0: 74 61 62 28 73 71 6c 69 74 65 33 20 2a 64 62 29  tab(sqlite3 *db)
7ce0: 7b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  {.#ifndef SQLITE
7cf0: 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
7d00: 4c 45 0a 20 20 69 6e 74 20 69 3b 0a 20 20 48 61  LE.  int i;.  Ha
7d10: 73 68 45 6c 65 6d 20 2a 70 3b 0a 20 20 73 71 6c  shElem *p;.  sql
7d20: 69 74 65 33 42 74 72 65 65 45 6e 74 65 72 41 6c  ite3BtreeEnterAl
7d30: 6c 28 64 62 29 3b 0a 20 20 66 6f 72 28 69 3d 30  l(db);.  for(i=0
7d40: 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b  ; i<db->nDb; i++
7d50: 29 7b 0a 20 20 20 20 53 63 68 65 6d 61 20 2a 70  ){.    Schema *p
7d60: 53 63 68 65 6d 61 20 3d 20 64 62 2d 3e 61 44 62  Schema = db->aDb
7d70: 5b 69 5d 2e 70 53 63 68 65 6d 61 3b 0a 20 20 20  [i].pSchema;.   
7d80: 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 69 5d 2e   if( db->aDb[i].
7d90: 70 53 63 68 65 6d 61 20 29 7b 0a 20 20 20 20 20  pSchema ){.     
7da0: 20 66 6f 72 28 70 3d 73 71 6c 69 74 65 48 61 73   for(p=sqliteHas
7db0: 68 46 69 72 73 74 28 26 70 53 63 68 65 6d 61 2d  hFirst(&pSchema-
7dc0: 3e 74 62 6c 48 61 73 68 29 3b 20 70 3b 20 70 3d  >tblHash); p; p=
7dd0: 73 71 6c 69 74 65 48 61 73 68 4e 65 78 74 28 70  sqliteHashNext(p
7de0: 29 29 7b 0a 20 20 20 20 20 20 20 20 54 61 62 6c  )){.        Tabl
7df0: 65 20 2a 70 54 61 62 20 3d 20 28 54 61 62 6c 65  e *pTab = (Table
7e00: 20 2a 29 73 71 6c 69 74 65 48 61 73 68 44 61 74   *)sqliteHashDat
7e10: 61 28 70 29 3b 0a 20 20 20 20 20 20 20 20 69 66  a(p);.        if
7e20: 28 20 49 73 56 69 72 74 75 61 6c 28 70 54 61 62  ( IsVirtual(pTab
7e30: 29 20 29 20 73 71 6c 69 74 65 33 56 74 61 62 44  ) ) sqlite3VtabD
7e40: 69 73 63 6f 6e 6e 65 63 74 28 64 62 2c 20 70 54  isconnect(db, pT
7e50: 61 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ab);.      }.   
7e60: 20 7d 0a 20 20 7d 0a 20 20 66 6f 72 28 70 3d 73   }.  }.  for(p=s
7e70: 71 6c 69 74 65 48 61 73 68 46 69 72 73 74 28 26  qliteHashFirst(&
7e80: 64 62 2d 3e 61 4d 6f 64 75 6c 65 29 3b 20 70 3b  db->aModule); p;
7e90: 20 70 3d 73 71 6c 69 74 65 48 61 73 68 4e 65 78   p=sqliteHashNex
7ea0: 74 28 70 29 29 7b 0a 20 20 20 20 4d 6f 64 75 6c  t(p)){.    Modul
7eb0: 65 20 2a 70 4d 6f 64 20 3d 20 28 4d 6f 64 75 6c  e *pMod = (Modul
7ec0: 65 20 2a 29 73 71 6c 69 74 65 48 61 73 68 44 61  e *)sqliteHashDa
7ed0: 74 61 28 70 29 3b 0a 20 20 20 20 69 66 28 20 70  ta(p);.    if( p
7ee0: 4d 6f 64 2d 3e 70 45 70 6f 54 61 62 20 29 7b 0a  Mod->pEpoTab ){.
7ef0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 74 61        sqlite3Vta
7f00: 62 44 69 73 63 6f 6e 6e 65 63 74 28 64 62 2c 20  bDisconnect(db, 
7f10: 70 4d 6f 64 2d 3e 70 45 70 6f 54 61 62 29 3b 0a  pMod->pEpoTab);.
7f20: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 73 71 6c 69      }.  }.  sqli
7f30: 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73  te3VtabUnlockLis
7f40: 74 28 64 62 29 3b 0a 20 20 73 71 6c 69 74 65 33  t(db);.  sqlite3
7f50: 42 74 72 65 65 4c 65 61 76 65 41 6c 6c 28 64 62  BtreeLeaveAll(db
7f60: 29 3b 0a 23 65 6c 73 65 0a 20 20 55 4e 55 53 45  );.#else.  UNUSE
7f70: 44 5f 50 41 52 41 4d 45 54 45 52 28 64 62 29 3b  D_PARAMETER(db);
7f80: 0a 23 65 6e 64 69 66 0a 7d 0a 0a 2f 2a 0a 2a 2a  .#endif.}../*.**
7f90: 20 52 65 74 75 72 6e 20 54 52 55 45 20 69 66 20   Return TRUE if 
7fa0: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
7fb0: 69 6f 6e 20 64 62 20 68 61 73 20 75 6e 66 69 6e  ion db has unfin
7fc0: 61 6c 69 7a 65 64 20 70 72 65 70 61 72 65 64 0a  alized prepared.
7fd0: 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73 20 6f 72  ** statements or
7fe0: 20 75 6e 66 69 6e 69 73 68 65 64 20 73 71 6c 69   unfinished sqli
7ff0: 74 65 33 5f 62 61 63 6b 75 70 20 6f 62 6a 65 63  te3_backup objec
8000: 74 73 2e 20 20 0a 2a 2f 0a 73 74 61 74 69 63 20  ts.  .*/.static 
8010: 69 6e 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 49 73  int connectionIs
8020: 42 75 73 79 28 73 71 6c 69 74 65 33 20 2a 64 62  Busy(sqlite3 *db
8030: 29 7b 0a 20 20 69 6e 74 20 6a 3b 0a 20 20 61 73  ){.  int j;.  as
8040: 73 65 72 74 28 20 73 71 6c 69 74 65 33 5f 6d 75  sert( sqlite3_mu
8050: 74 65 78 5f 68 65 6c 64 28 64 62 2d 3e 6d 75 74  tex_held(db->mut
8060: 65 78 29 20 29 3b 0a 20 20 69 66 28 20 64 62 2d  ex) );.  if( db-
8070: 3e 70 56 64 62 65 20 29 20 72 65 74 75 72 6e 20  >pVdbe ) return 
8080: 31 3b 0a 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c  1;.  for(j=0; j<
8090: 64 62 2d 3e 6e 44 62 3b 20 6a 2b 2b 29 7b 0a 20  db->nDb; j++){. 
80a0: 20 20 20 42 74 72 65 65 20 2a 70 42 74 20 3d 20     Btree *pBt = 
80b0: 64 62 2d 3e 61 44 62 5b 6a 5d 2e 70 42 74 3b 0a  db->aDb[j].pBt;.
80c0: 20 20 20 20 69 66 28 20 70 42 74 20 26 26 20 73      if( pBt && s
80d0: 71 6c 69 74 65 33 42 74 72 65 65 49 73 49 6e 42  qlite3BtreeIsInB
80e0: 61 63 6b 75 70 28 70 42 74 29 20 29 20 72 65 74  ackup(pBt) ) ret
80f0: 75 72 6e 20 31 3b 0a 20 20 7d 0a 20 20 72 65 74  urn 1;.  }.  ret
8100: 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  urn 0;.}../*.** 
8110: 43 6c 6f 73 65 20 61 6e 20 65 78 69 73 74 69 6e  Close an existin
8120: 67 20 53 51 4c 69 74 65 20 64 61 74 61 62 61 73  g SQLite databas
8130: 65 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  e.*/.static int 
8140: 73 71 6c 69 74 65 33 43 6c 6f 73 65 28 73 71 6c  sqlite3Close(sql
8150: 69 74 65 33 20 2a 64 62 2c 20 69 6e 74 20 66 6f  ite3 *db, int fo
8160: 72 63 65 5a 6f 6d 62 69 65 29 7b 0a 20 20 69 66  rceZombie){.  if
8170: 28 20 21 64 62 20 29 7b 0a 20 20 20 20 2f 2a 20  ( !db ){.    /* 
8180: 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 36  EVIDENCE-OF: R-6
8190: 33 32 35 37 2d 31 31 37 34 30 20 43 61 6c 6c 69  3257-11740 Calli
81a0: 6e 67 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65  ng sqlite3_close
81b0: 28 29 20 6f 72 0a 20 20 20 20 2a 2a 20 73 71 6c  () or.    ** sql
81c0: 69 74 65 33 5f 63 6c 6f 73 65 5f 76 32 28 29 20  ite3_close_v2() 
81d0: 77 69 74 68 20 61 20 4e 55 4c 4c 20 70 6f 69 6e  with a NULL poin
81e0: 74 65 72 20 61 72 67 75 6d 65 6e 74 20 69 73 20  ter argument is 
81f0: 61 20 68 61 72 6d 6c 65 73 73 20 6e 6f 2d 6f 70  a harmless no-op
8200: 2e 20 2a 2f 0a 20 20 20 20 72 65 74 75 72 6e 20  . */.    return 
8210: 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 7d 0a 20  SQLITE_OK;.  }. 
8220: 20 69 66 28 20 21 73 71 6c 69 74 65 33 53 61 66   if( !sqlite3Saf
8230: 65 74 79 43 68 65 63 6b 53 69 63 6b 4f 72 4f 6b  etyCheckSickOrOk
8240: 28 64 62 29 20 29 7b 0a 20 20 20 20 72 65 74 75  (db) ){.    retu
8250: 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45  rn SQLITE_MISUSE
8260: 5f 42 4b 50 54 3b 0a 20 20 7d 0a 20 20 73 71 6c  _BKPT;.  }.  sql
8270: 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72  ite3_mutex_enter
8280: 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 0a 20 20  (db->mutex);..  
8290: 2f 2a 20 46 6f 72 63 65 20 78 44 69 73 63 6f 6e  /* Force xDiscon
82a0: 6e 65 63 74 20 63 61 6c 6c 73 20 6f 6e 20 61 6c  nect calls on al
82b0: 6c 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73  l virtual tables
82c0: 20 2a 2f 0a 20 20 64 69 73 63 6f 6e 6e 65 63 74   */.  disconnect
82d0: 41 6c 6c 56 74 61 62 28 64 62 29 3b 0a 0a 20 20  AllVtab(db);..  
82e0: 2f 2a 20 49 66 20 61 20 74 72 61 6e 73 61 63 74  /* If a transact
82f0: 69 6f 6e 20 69 73 20 6f 70 65 6e 2c 20 74 68 65  ion is open, the
8300: 20 64 69 73 63 6f 6e 6e 65 63 74 41 6c 6c 56 74   disconnectAllVt
8310: 61 62 28 29 20 63 61 6c 6c 20 61 62 6f 76 65 0a  ab() call above.
8320: 20 20 2a 2a 20 77 69 6c 6c 20 6e 6f 74 20 68 61    ** will not ha
8330: 76 65 20 63 61 6c 6c 65 64 20 74 68 65 20 78 44  ve called the xD
8340: 69 73 63 6f 6e 6e 65 63 74 28 29 20 6d 65 74 68  isconnect() meth
8350: 6f 64 20 6f 6e 20 61 6e 79 20 76 69 72 74 75 61  od on any virtua
8360: 6c 0a 20 20 2a 2a 20 74 61 62 6c 65 73 20 69 6e  l.  ** tables in
8370: 20 74 68 65 20 64 62 2d 3e 61 56 54 72 61 6e 73   the db->aVTrans
8380: 5b 5d 20 61 72 72 61 79 2e 20 54 68 65 20 66 6f  [] array. The fo
8390: 6c 6c 6f 77 69 6e 67 20 73 71 6c 69 74 65 33 56  llowing sqlite3V
83a0: 74 61 62 52 6f 6c 6c 62 61 63 6b 28 29 0a 20 20  tabRollback().  
83b0: 2a 2a 20 63 61 6c 6c 20 77 69 6c 6c 20 64 6f 20  ** call will do 
83c0: 73 6f 2e 20 57 65 20 6e 65 65 64 20 74 6f 20 64  so. We need to d
83d0: 6f 20 74 68 69 73 20 62 65 66 6f 72 65 20 74 68  o this before th
83e0: 65 20 63 68 65 63 6b 20 66 6f 72 20 61 63 74 69  e check for acti
83f0: 76 65 0a 20 20 2a 2a 20 53 51 4c 20 73 74 61 74  ve.  ** SQL stat
8400: 65 6d 65 6e 74 73 20 62 65 6c 6f 77 2c 20 61 73  ements below, as
8410: 20 74 68 65 20 76 2d 74 61 62 6c 65 20 69 6d 70   the v-table imp
8420: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6d 61 79 20  lementation may 
8430: 62 65 20 73 74 6f 72 69 6e 67 0a 20 20 2a 2a 20  be storing.  ** 
8440: 73 6f 6d 65 20 70 72 65 70 61 72 65 64 20 73 74  some prepared st
8450: 61 74 65 6d 65 6e 74 73 20 69 6e 74 65 72 6e 61  atements interna
8460: 6c 6c 79 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69  lly..  */.  sqli
8470: 74 65 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28  te3VtabRollback(
8480: 64 62 29 3b 0a 0a 20 20 2f 2a 20 4c 65 67 61 63  db);..  /* Legac
8490: 79 20 62 65 68 61 76 69 6f 72 20 28 73 71 6c 69  y behavior (sqli
84a0: 74 65 33 5f 63 6c 6f 73 65 28 29 20 62 65 68 61  te3_close() beha
84b0: 76 69 6f 72 29 20 69 73 20 74 6f 20 72 65 74 75  vior) is to retu
84c0: 72 6e 0a 20 20 2a 2a 20 53 51 4c 49 54 45 5f 42  rn.  ** SQLITE_B
84d0: 55 53 59 20 69 66 20 74 68 65 20 63 6f 6e 6e 65  USY if the conne
84e0: 63 74 69 6f 6e 20 63 61 6e 20 6e 6f 74 20 62 65  ction can not be
84f0: 20 63 6c 6f 73 65 64 20 69 6d 6d 65 64 69 61 74   closed immediat
8500: 65 6c 79 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20  ely..  */.  if( 
8510: 21 66 6f 72 63 65 5a 6f 6d 62 69 65 20 26 26 20  !forceZombie && 
8520: 63 6f 6e 6e 65 63 74 69 6f 6e 49 73 42 75 73 79  connectionIsBusy
8530: 28 64 62 29 20 29 7b 0a 20 20 20 20 73 71 6c 69  (db) ){.    sqli
8540: 74 65 33 45 72 72 6f 72 57 69 74 68 4d 73 67 28  te3ErrorWithMsg(
8550: 64 62 2c 20 53 51 4c 49 54 45 5f 42 55 53 59 2c  db, SQLITE_BUSY,
8560: 20 22 75 6e 61 62 6c 65 20 74 6f 20 63 6c 6f 73   "unable to clos
8570: 65 20 64 75 65 20 74 6f 20 75 6e 66 69 6e 61 6c  e due to unfinal
8580: 69 7a 65 64 20 22 0a 20 20 20 20 20 20 20 22 73  ized ".       "s
8590: 74 61 74 65 6d 65 6e 74 73 20 6f 72 20 75 6e 66  tatements or unf
85a0: 69 6e 69 73 68 65 64 20 62 61 63 6b 75 70 73 22  inished backups"
85b0: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6d  );.    sqlite3_m
85c0: 75 74 65 78 5f 6c 65 61 76 65 28 64 62 2d 3e 6d  utex_leave(db->m
85d0: 75 74 65 78 29 3b 0a 20 20 20 20 72 65 74 75 72  utex);.    retur
85e0: 6e 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20  n SQLITE_BUSY;. 
85f0: 20 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54   }..#ifdef SQLIT
8600: 45 5f 45 4e 41 42 4c 45 5f 53 51 4c 4c 4f 47 0a  E_ENABLE_SQLLOG.
8610: 20 20 69 66 28 20 73 71 6c 69 74 65 33 47 6c 6f    if( sqlite3Glo
8620: 62 61 6c 43 6f 6e 66 69 67 2e 78 53 71 6c 6c 6f  balConfig.xSqllo
8630: 67 20 29 7b 0a 20 20 20 20 2f 2a 20 43 6c 6f 73  g ){.    /* Clos
8640: 69 6e 67 20 74 68 65 20 68 61 6e 64 6c 65 2e 20  ing the handle. 
8650: 46 6f 75 72 74 68 20 70 61 72 61 6d 65 74 65 72  Fourth parameter
8660: 20 69 73 20 70 61 73 73 65 64 20 74 68 65 20 76   is passed the v
8670: 61 6c 75 65 20 32 2e 20 2a 2f 0a 20 20 20 20 73  alue 2. */.    s
8680: 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66  qlite3GlobalConf
8690: 69 67 2e 78 53 71 6c 6c 6f 67 28 73 71 6c 69 74  ig.xSqllog(sqlit
86a0: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 70  e3GlobalConfig.p
86b0: 53 71 6c 6c 6f 67 41 72 67 2c 20 64 62 2c 20 30  SqllogArg, db, 0
86c0: 2c 20 32 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  , 2);.  }.#endif
86d0: 0a 0a 20 20 2f 2a 20 43 6f 6e 76 65 72 74 20 74  ..  /* Convert t
86e0: 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 6e  he connection in
86f0: 74 6f 20 61 20 7a 6f 6d 62 69 65 20 61 6e 64 20  to a zombie and 
8700: 74 68 65 6e 20 63 6c 6f 73 65 20 69 74 2e 0a 20  then close it.. 
8710: 20 2a 2f 0a 20 20 64 62 2d 3e 6d 61 67 69 63 20   */.  db->magic 
8720: 3d 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 5a  = SQLITE_MAGIC_Z
8730: 4f 4d 42 49 45 3b 0a 20 20 73 71 6c 69 74 65 33  OMBIE;.  sqlite3
8740: 4c 65 61 76 65 4d 75 74 65 78 41 6e 64 43 6c 6f  LeaveMutexAndClo
8750: 73 65 5a 6f 6d 62 69 65 28 64 62 29 3b 0a 20 20  seZombie(db);.  
8760: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
8770: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 77 6f 20 76  ;.}../*.** Two v
8780: 61 72 69 61 74 69 6f 6e 73 20 6f 6e 20 74 68 65  ariations on the
8790: 20 70 75 62 6c 69 63 20 69 6e 74 65 72 66 61 63   public interfac
87a0: 65 20 66 6f 72 20 63 6c 6f 73 69 6e 67 20 61 20  e for closing a 
87b0: 64 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e  database.** conn
87c0: 65 63 74 69 6f 6e 2e 20 54 68 65 20 73 71 6c 69  ection. The sqli
87d0: 74 65 33 5f 63 6c 6f 73 65 28 29 20 76 65 72 73  te3_close() vers
87e0: 69 6f 6e 20 72 65 74 75 72 6e 73 20 53 51 4c 49  ion returns SQLI
87f0: 54 45 5f 42 55 53 59 20 61 6e 64 0a 2a 2a 20 6c  TE_BUSY and.** l
8800: 65 61 76 65 73 20 74 68 65 20 63 6f 6e 6e 65 63  eaves the connec
8810: 74 69 6f 6e 20 6f 70 74 69 6f 6e 20 69 66 20 74  tion option if t
8820: 68 65 72 65 20 61 72 65 20 75 6e 66 69 6e 61 6c  here are unfinal
8830: 69 7a 65 64 20 70 72 65 70 61 72 65 64 0a 2a 2a  ized prepared.**
8840: 20 73 74 61 74 65 6d 65 6e 74 73 20 6f 72 20 75   statements or u
8850: 6e 66 69 6e 69 73 68 65 64 20 73 71 6c 69 74 65  nfinished sqlite
8860: 33 5f 62 61 63 6b 75 70 73 2e 20 20 54 68 65 20  3_backups.  The 
8870: 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 5f 76 32  sqlite3_close_v2
8880: 28 29 0a 2a 2a 20 76 65 72 73 69 6f 6e 20 66 6f  ().** version fo
8890: 72 63 65 73 20 74 68 65 20 63 6f 6e 6e 65 63 74  rces the connect
88a0: 69 6f 6e 20 74 6f 20 62 65 63 6f 6d 65 20 61 20  ion to become a 
88b0: 7a 6f 6d 62 69 65 20 69 66 20 74 68 65 72 65 20  zombie if there 
88c0: 61 72 65 0a 2a 2a 20 75 6e 63 6c 6f 73 65 64 20  are.** unclosed 
88d0: 72 65 73 6f 75 72 63 65 73 2c 20 61 6e 64 20 61  resources, and a
88e0: 72 72 61 6e 67 65 73 20 66 6f 72 20 64 65 61 6c  rranges for deal
88f0: 6c 6f 63 61 74 69 6f 6e 20 77 68 65 6e 20 74 68  location when th
8900: 65 20 6c 61 73 74 0a 2a 2a 20 70 72 65 70 61 72  e last.** prepar
8910: 65 20 73 74 61 74 65 6d 65 6e 74 20 6f 72 20 73  e statement or s
8920: 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 20 63 6c  qlite3_backup cl
8930: 6f 73 65 73 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c  oses..*/.int sql
8940: 69 74 65 33 5f 63 6c 6f 73 65 28 73 71 6c 69 74  ite3_close(sqlit
8950: 65 33 20 2a 64 62 29 7b 20 72 65 74 75 72 6e 20  e3 *db){ return 
8960: 73 71 6c 69 74 65 33 43 6c 6f 73 65 28 64 62 2c  sqlite3Close(db,
8970: 30 29 3b 20 7d 0a 69 6e 74 20 73 71 6c 69 74 65  0); }.int sqlite
8980: 33 5f 63 6c 6f 73 65 5f 76 32 28 73 71 6c 69 74  3_close_v2(sqlit
8990: 65 33 20 2a 64 62 29 7b 20 72 65 74 75 72 6e 20  e3 *db){ return 
89a0: 73 71 6c 69 74 65 33 43 6c 6f 73 65 28 64 62 2c  sqlite3Close(db,
89b0: 31 29 3b 20 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 43 6c  1); }.../*.** Cl
89c0: 6f 73 65 20 74 68 65 20 6d 75 74 65 78 20 6f 6e  ose the mutex on
89d0: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
89e0: 74 69 6f 6e 20 64 62 2e 0a 2a 2a 0a 2a 2a 20 46  tion db..**.** F
89f0: 75 72 74 68 65 72 6d 6f 72 65 2c 20 69 66 20 64  urthermore, if d
8a00: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
8a10: 6f 6e 20 64 62 20 69 73 20 61 20 7a 6f 6d 62 69  on db is a zombi
8a20: 65 20 28 6d 65 61 6e 69 6e 67 20 74 68 61 74 20  e (meaning that 
8a30: 74 68 65 72 65 0a 2a 2a 20 68 61 73 20 62 65 65  there.** has bee
8a40: 6e 20 61 20 70 72 69 6f 72 20 63 61 6c 6c 20 74  n a prior call t
8a50: 6f 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28  o sqlite3_close(
8a60: 64 62 29 20 6f 72 20 73 71 6c 69 74 65 33 5f 63  db) or sqlite3_c
8a70: 6c 6f 73 65 5f 76 32 28 64 62 29 29 20 61 6e 64  lose_v2(db)) and
8a80: 0a 2a 2a 20 65 76 65 72 79 20 73 71 6c 69 74 65  .** every sqlite
8a90: 33 5f 73 74 6d 74 20 68 61 73 20 6e 6f 77 20 62  3_stmt has now b
8aa0: 65 65 6e 20 66 69 6e 61 6c 69 7a 65 64 20 61 6e  een finalized an
8ab0: 64 20 65 76 65 72 79 20 73 71 6c 69 74 65 33 5f  d every sqlite3_
8ac0: 62 61 63 6b 75 70 20 68 61 73 0a 2a 2a 20 66 69  backup has.** fi
8ad0: 6e 69 73 68 65 64 2c 20 74 68 65 6e 20 66 72 65  nished, then fre
8ae0: 65 20 61 6c 6c 20 72 65 73 6f 75 72 63 65 73 2e  e all resources.
8af0: 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  .*/.void sqlite3
8b00: 4c 65 61 76 65 4d 75 74 65 78 41 6e 64 43 6c 6f  LeaveMutexAndClo
8b10: 73 65 5a 6f 6d 62 69 65 28 73 71 6c 69 74 65 33  seZombie(sqlite3
8b20: 20 2a 64 62 29 7b 0a 20 20 48 61 73 68 45 6c 65   *db){.  HashEle
8b30: 6d 20 2a 69 3b 20 20 20 20 20 20 20 20 20 20 20  m *i;           
8b40: 20 20 20 20 20 20 20 20 20 2f 2a 20 48 61 73 68           /* Hash
8b50: 20 74 61 62 6c 65 20 69 74 65 72 61 74 6f 72 20   table iterator 
8b60: 2a 2f 0a 20 20 69 6e 74 20 6a 3b 0a 0a 20 20 2f  */.  int j;..  /
8b70: 2a 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6f  * If there are o
8b80: 75 74 73 74 61 6e 64 69 6e 67 20 73 71 6c 69 74  utstanding sqlit
8b90: 65 33 5f 73 74 6d 74 20 6f 72 20 73 71 6c 69 74  e3_stmt or sqlit
8ba0: 65 33 5f 62 61 63 6b 75 70 20 6f 62 6a 65 63 74  e3_backup object
8bb0: 73 0a 20 20 2a 2a 20 6f 72 20 69 66 20 74 68 65  s.  ** or if the
8bc0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 73 20   connection has 
8bd0: 6e 6f 74 20 79 65 74 20 62 65 65 6e 20 63 6c 6f  not yet been clo
8be0: 73 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63  sed by sqlite3_c
8bf0: 6c 6f 73 65 5f 76 32 28 29 2c 0a 20 20 2a 2a 20  lose_v2(),.  ** 
8c00: 74 68 65 6e 20 6a 75 73 74 20 6c 65 61 76 65 20  then just leave 
8c10: 74 68 65 20 6d 75 74 65 78 20 61 6e 64 20 72 65  the mutex and re
8c20: 74 75 72 6e 2e 0a 20 20 2a 2f 0a 20 20 69 66 28  turn..  */.  if(
8c30: 20 64 62 2d 3e 6d 61 67 69 63 21 3d 53 51 4c 49   db->magic!=SQLI
8c40: 54 45 5f 4d 41 47 49 43 5f 5a 4f 4d 42 49 45 20  TE_MAGIC_ZOMBIE 
8c50: 7c 7c 20 63 6f 6e 6e 65 63 74 69 6f 6e 49 73 42  || connectionIsB
8c60: 75 73 79 28 64 62 29 20 29 7b 0a 20 20 20 20 73  usy(db) ){.    s
8c70: 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61  qlite3_mutex_lea
8c80: 76 65 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20  ve(db->mutex);. 
8c90: 20 20 20 72 65 74 75 72 6e 3b 0a 20 20 7d 0a 0a     return;.  }..
8ca0: 20 20 2f 2a 20 49 66 20 77 65 20 72 65 61 63 68    /* If we reach
8cb0: 20 74 68 69 73 20 70 6f 69 6e 74 2c 20 69 74 20   this point, it 
8cc0: 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 64  means that the d
8cd0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
8ce0: 6f 6e 20 68 61 73 0a 20 20 2a 2a 20 63 6c 6f 73  on has.  ** clos
8cf0: 65 64 20 61 6c 6c 20 73 71 6c 69 74 65 33 5f 73  ed all sqlite3_s
8d00: 74 6d 74 20 61 6e 64 20 73 71 6c 69 74 65 33 5f  tmt and sqlite3_
8d10: 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 73 20 61  backup objects a
8d20: 6e 64 20 68 61 73 20 62 65 65 6e 0a 20 20 2a 2a  nd has been.  **
8d30: 20 70 61 73 73 65 64 20 74 6f 20 73 71 6c 69 74   passed to sqlit
8d40: 65 33 5f 63 6c 6f 73 65 20 28 6d 65 61 6e 69 6e  e3_close (meanin
8d50: 67 20 74 68 61 74 20 69 74 20 69 73 20 61 20 7a  g that it is a z
8d60: 6f 6d 62 69 65 29 2e 20 20 54 68 65 72 65 66 6f  ombie).  Therefo
8d70: 72 65 2c 0a 20 20 2a 2a 20 67 6f 20 61 68 65 61  re,.  ** go ahea
8d80: 64 20 61 6e 64 20 66 72 65 65 20 61 6c 6c 20 72  d and free all r
8d90: 65 73 6f 75 72 63 65 73 2e 0a 20 20 2a 2f 0a 0a  esources..  */..
8da0: 20 20 2f 2a 20 49 66 20 61 20 74 72 61 6e 73 61    /* If a transa
8db0: 63 74 69 6f 6e 20 69 73 20 6f 70 65 6e 2c 20 72  ction is open, r
8dc0: 6f 6c 6c 20 69 74 20 62 61 63 6b 2e 20 54 68 69  oll it back. Thi
8dd0: 73 20 61 6c 73 6f 20 65 6e 73 75 72 65 73 20 74  s also ensures t
8de0: 68 61 74 20 69 66 0a 20 20 2a 2a 20 61 6e 79 20  hat if.  ** any 
8df0: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 73  database schemas
8e00: 20 68 61 76 65 20 62 65 65 6e 20 6d 6f 64 69 66   have been modif
8e10: 69 65 64 20 62 79 20 61 6e 20 75 6e 63 6f 6d 6d  ied by an uncomm
8e20: 69 74 74 65 64 20 74 72 61 6e 73 61 63 74 69 6f  itted transactio
8e30: 6e 0a 20 20 2a 2a 20 74 68 65 79 20 61 72 65 20  n.  ** they are 
8e40: 72 65 73 65 74 2e 20 41 6e 64 20 74 68 61 74 20  reset. And that 
8e50: 74 68 65 20 72 65 71 75 69 72 65 64 20 62 2d 74  the required b-t
8e60: 72 65 65 20 6d 75 74 65 78 20 69 73 20 68 65 6c  ree mutex is hel
8e70: 64 20 74 6f 20 6d 61 6b 65 0a 20 20 2a 2a 20 74  d to make.  ** t
8e80: 68 65 20 70 61 67 65 72 20 72 6f 6c 6c 62 61 63  he pager rollbac
8e90: 6b 20 61 6e 64 20 73 63 68 65 6d 61 20 72 65 73  k and schema res
8ea0: 65 74 20 61 6e 20 61 74 6f 6d 69 63 20 6f 70 65  et an atomic ope
8eb0: 72 61 74 69 6f 6e 2e 20 2a 2f 0a 20 20 73 71 6c  ration. */.  sql
8ec0: 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28  ite3RollbackAll(
8ed0: 64 62 2c 20 53 51 4c 49 54 45 5f 4f 4b 29 3b 0a  db, SQLITE_OK);.
8ee0: 0a 20 20 2f 2a 20 46 72 65 65 20 61 6e 79 20 6f  .  /* Free any o
8ef0: 75 74 73 74 61 6e 64 69 6e 67 20 53 61 76 65 70  utstanding Savep
8f00: 6f 69 6e 74 20 73 74 72 75 63 74 75 72 65 73 2e  oint structures.
8f10: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 43 6c 6f   */.  sqlite3Clo
8f20: 73 65 53 61 76 65 70 6f 69 6e 74 73 28 64 62 29  seSavepoints(db)
8f30: 3b 0a 0a 20 20 2f 2a 20 43 6c 6f 73 65 20 61 6c  ;..  /* Close al
8f40: 6c 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  l database conne
8f50: 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 66 6f 72 28  ctions */.  for(
8f60: 6a 3d 30 3b 20 6a 3c 64 62 2d 3e 6e 44 62 3b 20  j=0; j<db->nDb; 
8f70: 6a 2b 2b 29 7b 0a 20 20 20 20 73 74 72 75 63 74  j++){.    struct
8f80: 20 44 62 20 2a 70 44 62 20 3d 20 26 64 62 2d 3e   Db *pDb = &db->
8f90: 61 44 62 5b 6a 5d 3b 0a 20 20 20 20 69 66 28 20  aDb[j];.    if( 
8fa0: 70 44 62 2d 3e 70 42 74 20 29 7b 0a 20 20 20 20  pDb->pBt ){.    
8fb0: 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c    sqlite3BtreeCl
8fc0: 6f 73 65 28 70 44 62 2d 3e 70 42 74 29 3b 0a 20  ose(pDb->pBt);. 
8fd0: 20 20 20 20 20 70 44 62 2d 3e 70 42 74 20 3d 20       pDb->pBt = 
8fe0: 30 3b 0a 20 20 20 20 20 20 69 66 28 20 6a 21 3d  0;.      if( j!=
8ff0: 31 20 29 7b 0a 20 20 20 20 20 20 20 20 70 44 62  1 ){.        pDb
9000: 2d 3e 70 53 63 68 65 6d 61 20 3d 20 30 3b 0a 20  ->pSchema = 0;. 
9010: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
9020: 0a 20 20 2f 2a 20 43 6c 65 61 72 20 74 68 65 20  .  /* Clear the 
9030: 54 45 4d 50 20 73 63 68 65 6d 61 20 73 65 70 61  TEMP schema sepa
9040: 72 61 74 65 6c 79 20 61 6e 64 20 6c 61 73 74 20  rately and last 
9050: 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e 61 44 62  */.  if( db->aDb
9060: 5b 31 5d 2e 70 53 63 68 65 6d 61 20 29 7b 0a 20  [1].pSchema ){. 
9070: 20 20 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61     sqlite3Schema
9080: 43 6c 65 61 72 28 64 62 2d 3e 61 44 62 5b 31 5d  Clear(db->aDb[1]
9090: 2e 70 53 63 68 65 6d 61 29 3b 0a 20 20 7d 0a 20  .pSchema);.  }. 
90a0: 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f   sqlite3VtabUnlo
90b0: 63 6b 4c 69 73 74 28 64 62 29 3b 0a 0a 20 20 2f  ckList(db);..  /
90c0: 2a 20 46 72 65 65 20 75 70 20 74 68 65 20 61 72  * Free up the ar
90d0: 72 61 79 20 6f 66 20 61 75 78 69 6c 69 61 72 79  ray of auxiliary
90e0: 20 64 61 74 61 62 61 73 65 73 20 2a 2f 0a 20 20   databases */.  
90f0: 73 71 6c 69 74 65 33 43 6f 6c 6c 61 70 73 65 44  sqlite3CollapseD
9100: 61 74 61 62 61 73 65 41 72 72 61 79 28 64 62 29  atabaseArray(db)
9110: 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e  ;.  assert( db->
9120: 6e 44 62 3c 3d 32 20 29 3b 0a 20 20 61 73 73 65  nDb<=2 );.  asse
9130: 72 74 28 20 64 62 2d 3e 61 44 62 3d 3d 64 62 2d  rt( db->aDb==db-
9140: 3e 61 44 62 53 74 61 74 69 63 20 29 3b 0a 0a 20  >aDbStatic );.. 
9150: 20 2f 2a 20 54 65 6c 6c 20 74 68 65 20 63 6f 64   /* Tell the cod
9160: 65 20 69 6e 20 6e 6f 74 69 66 79 2e 63 20 74 68  e in notify.c th
9170: 61 74 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f  at the connectio
9180: 6e 20 6e 6f 20 6c 6f 6e 67 65 72 20 68 6f 6c 64  n no longer hold
9190: 73 20 61 6e 79 0a 20 20 2a 2a 20 6c 6f 63 6b 73  s any.  ** locks
91a0: 20 61 6e 64 20 64 6f 65 73 20 6e 6f 74 20 72 65   and does not re
91b0: 71 75 69 72 65 20 61 6e 79 20 66 75 72 74 68 65  quire any furthe
91c0: 72 20 75 6e 6c 6f 63 6b 2d 6e 6f 74 69 66 79 20  r unlock-notify 
91d0: 63 61 6c 6c 62 61 63 6b 73 2e 0a 20 20 2a 2f 0a  callbacks..  */.
91e0: 20 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74    sqlite3Connect
91f0: 69 6f 6e 43 6c 6f 73 65 64 28 64 62 29 3b 0a 0a  ionClosed(db);..
9200: 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 41 72 72    for(j=0; j<Arr
9210: 61 79 53 69 7a 65 28 64 62 2d 3e 61 46 75 6e 63  aySize(db->aFunc
9220: 2e 61 29 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 46  .a); j++){.    F
9230: 75 6e 63 44 65 66 20 2a 70 4e 65 78 74 2c 20 2a  uncDef *pNext, *
9240: 70 48 61 73 68 2c 20 2a 70 3b 0a 20 20 20 20 66  pHash, *p;.    f
9250: 6f 72 28 70 3d 64 62 2d 3e 61 46 75 6e 63 2e 61  or(p=db->aFunc.a
9260: 5b 6a 5d 3b 20 70 3b 20 70 3d 70 48 61 73 68 29  [j]; p; p=pHash)
9270: 7b 0a 20 20 20 20 20 20 70 48 61 73 68 20 3d 20  {.      pHash = 
9280: 70 2d 3e 70 48 61 73 68 3b 0a 20 20 20 20 20 20  p->pHash;.      
9290: 77 68 69 6c 65 28 20 70 20 29 7b 0a 20 20 20 20  while( p ){.    
92a0: 20 20 20 20 66 75 6e 63 74 69 6f 6e 44 65 73 74      functionDest
92b0: 72 6f 79 28 64 62 2c 20 70 29 3b 0a 20 20 20 20  roy(db, p);.    
92c0: 20 20 20 20 70 4e 65 78 74 20 3d 20 70 2d 3e 70      pNext = p->p
92d0: 4e 65 78 74 3b 0a 20 20 20 20 20 20 20 20 73 71  Next;.        sq
92e0: 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
92f0: 70 29 3b 0a 20 20 20 20 20 20 20 20 70 20 3d 20  p);.        p = 
9300: 70 4e 65 78 74 3b 0a 20 20 20 20 20 20 7d 0a 20  pNext;.      }. 
9310: 20 20 20 7d 0a 20 20 7d 0a 20 20 66 6f 72 28 69     }.  }.  for(i
9320: 3d 73 71 6c 69 74 65 48 61 73 68 46 69 72 73 74  =sqliteHashFirst
9330: 28 26 64 62 2d 3e 61 43 6f 6c 6c 53 65 71 29 3b  (&db->aCollSeq);
9340: 20 69 3b 20 69 3d 73 71 6c 69 74 65 48 61 73 68   i; i=sqliteHash
9350: 4e 65 78 74 28 69 29 29 7b 0a 20 20 20 20 43 6f  Next(i)){.    Co
9360: 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c 20 3d 20 28  llSeq *pColl = (
9370: 43 6f 6c 6c 53 65 71 20 2a 29 73 71 6c 69 74 65  CollSeq *)sqlite
9380: 48 61 73 68 44 61 74 61 28 69 29 3b 0a 20 20 20  HashData(i);.   
9390: 20 2f 2a 20 49 6e 76 6f 6b 65 20 61 6e 79 20 64   /* Invoke any d
93a0: 65 73 74 72 75 63 74 6f 72 73 20 72 65 67 69 73  estructors regis
93b0: 74 65 72 65 64 20 66 6f 72 20 63 6f 6c 6c 61 74  tered for collat
93c0: 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 75 73 65  ion sequence use
93d0: 72 20 64 61 74 61 2e 20 2a 2f 0a 20 20 20 20 66  r data. */.    f
93e0: 6f 72 28 6a 3d 30 3b 20 6a 3c 33 3b 20 6a 2b 2b  or(j=0; j<3; j++
93f0: 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70 43 6f  ){.      if( pCo
9400: 6c 6c 5b 6a 5d 2e 78 44 65 6c 20 29 7b 0a 20 20  ll[j].xDel ){.  
9410: 20 20 20 20 20 20 70 43 6f 6c 6c 5b 6a 5d 2e 78        pColl[j].x
9420: 44 65 6c 28 70 43 6f 6c 6c 5b 6a 5d 2e 70 55 73  Del(pColl[j].pUs
9430: 65 72 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  er);.      }.   
9440: 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 44 62   }.    sqlite3Db
9450: 46 72 65 65 28 64 62 2c 20 70 43 6f 6c 6c 29 3b  Free(db, pColl);
9460: 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 48 61  .  }.  sqlite3Ha
9470: 73 68 43 6c 65 61 72 28 26 64 62 2d 3e 61 43 6f  shClear(&db->aCo
9480: 6c 6c 53 65 71 29 3b 0a 23 69 66 6e 64 65 66 20  llSeq);.#ifndef 
9490: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
94a0: 55 41 4c 54 41 42 4c 45 0a 20 20 66 6f 72 28 69  UALTABLE.  for(i
94b0: 3d 73 71 6c 69 74 65 48 61 73 68 46 69 72 73 74  =sqliteHashFirst
94c0: 28 26 64 62 2d 3e 61 4d 6f 64 75 6c 65 29 3b 20  (&db->aModule); 
94d0: 69 3b 20 69 3d 73 71 6c 69 74 65 48 61 73 68 4e  i; i=sqliteHashN
94e0: 65 78 74 28 69 29 29 7b 0a 20 20 20 20 4d 6f 64  ext(i)){.    Mod
94f0: 75 6c 65 20 2a 70 4d 6f 64 20 3d 20 28 4d 6f 64  ule *pMod = (Mod
9500: 75 6c 65 20 2a 29 73 71 6c 69 74 65 48 61 73 68  ule *)sqliteHash
9510: 44 61 74 61 28 69 29 3b 0a 20 20 20 20 69 66 28  Data(i);.    if(
9520: 20 70 4d 6f 64 2d 3e 78 44 65 73 74 72 6f 79 20   pMod->xDestroy 
9530: 29 7b 0a 20 20 20 20 20 20 70 4d 6f 64 2d 3e 78  ){.      pMod->x
9540: 44 65 73 74 72 6f 79 28 70 4d 6f 64 2d 3e 70 41  Destroy(pMod->pA
9550: 75 78 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73  ux);.    }.    s
9560: 71 6c 69 74 65 33 56 74 61 62 45 70 6f 6e 79 6d  qlite3VtabEponym
9570: 6f 75 73 54 61 62 6c 65 43 6c 65 61 72 28 64 62  ousTableClear(db
9580: 2c 20 70 4d 6f 64 29 3b 0a 20 20 20 20 73 71 6c  , pMod);.    sql
9590: 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70  ite3DbFree(db, p
95a0: 4d 6f 64 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69  Mod);.  }.  sqli
95b0: 74 65 33 48 61 73 68 43 6c 65 61 72 28 26 64 62  te3HashClear(&db
95c0: 2d 3e 61 4d 6f 64 75 6c 65 29 3b 0a 23 65 6e 64  ->aModule);.#end
95d0: 69 66 0a 0a 20 20 73 71 6c 69 74 65 33 45 72 72  if..  sqlite3Err
95e0: 6f 72 28 64 62 2c 20 53 51 4c 49 54 45 5f 4f 4b  or(db, SQLITE_OK
95f0: 29 3b 20 2f 2a 20 44 65 61 6c 6c 6f 63 61 74 65  ); /* Deallocate
9600: 73 20 61 6e 79 20 63 61 63 68 65 64 20 65 72 72  s any cached err
9610: 6f 72 20 73 74 72 69 6e 67 73 2e 20 2a 2f 0a 20  or strings. */. 
9620: 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72 65   sqlite3ValueFre
9630: 65 28 64 62 2d 3e 70 45 72 72 29 3b 0a 20 20 73  e(db->pErr);.  s
9640: 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74 65 6e  qlite3CloseExten
9650: 73 69 6f 6e 73 28 64 62 29 3b 0a 23 69 66 20 53  sions(db);.#if S
9660: 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45  QLITE_USER_AUTHE
9670: 4e 54 49 43 41 54 49 4f 4e 0a 20 20 73 71 6c 69  NTICATION.  sqli
9680: 74 65 33 5f 66 72 65 65 28 64 62 2d 3e 61 75 74  te3_free(db->aut
9690: 68 2e 7a 41 75 74 68 55 73 65 72 29 3b 0a 20 20  h.zAuthUser);.  
96a0: 73 71 6c 69 74 65 33 5f 66 72 65 65 28 64 62 2d  sqlite3_free(db-
96b0: 3e 61 75 74 68 2e 7a 41 75 74 68 50 57 29 3b 0a  >auth.zAuthPW);.
96c0: 23 65 6e 64 69 66 0a 0a 20 20 64 62 2d 3e 6d 61  #endif..  db->ma
96d0: 67 69 63 20 3d 20 53 51 4c 49 54 45 5f 4d 41 47  gic = SQLITE_MAG
96e0: 49 43 5f 45 52 52 4f 52 3b 0a 0a 20 20 2f 2a 20  IC_ERROR;..  /* 
96f0: 54 68 65 20 74 65 6d 70 2d 64 61 74 61 62 61 73  The temp-databas
9700: 65 20 73 63 68 65 6d 61 20 69 73 20 61 6c 6c 6f  e schema is allo
9710: 63 61 74 65 64 20 64 69 66 66 65 72 65 6e 74 6c  cated differentl
9720: 79 20 66 72 6f 6d 20 74 68 65 20 6f 74 68 65 72  y from the other
9730: 20 73 63 68 65 6d 61 0a 20 20 2a 2a 20 6f 62 6a   schema.  ** obj
9740: 65 63 74 73 20 28 75 73 69 6e 67 20 73 71 6c 69  ects (using sqli
9750: 74 65 4d 61 6c 6c 6f 63 28 29 20 64 69 72 65 63  teMalloc() direc
9760: 74 6c 79 2c 20 69 6e 73 74 65 61 64 20 6f 66 20  tly, instead of 
9770: 73 71 6c 69 74 65 33 42 74 72 65 65 53 63 68 65  sqlite3BtreeSche
9780: 6d 61 28 29 29 2e 0a 20 20 2a 2a 20 53 6f 20 69  ma())..  ** So i
9790: 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 66 72  t needs to be fr
97a0: 65 65 64 20 68 65 72 65 2e 20 54 6f 64 6f 3a 20  eed here. Todo: 
97b0: 57 68 79 20 6e 6f 74 20 72 6f 6c 6c 20 74 68 65  Why not roll the
97c0: 20 74 65 6d 70 20 73 63 68 65 6d 61 20 69 6e 74   temp schema int
97d0: 6f 0a 20 20 2a 2a 20 74 68 65 20 73 61 6d 65 20  o.  ** the same 
97e0: 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 28 29 20 61  sqliteMalloc() a
97f0: 73 20 74 68 65 20 6f 6e 65 20 74 68 61 74 20 61  s the one that a
9800: 6c 6c 6f 63 61 74 65 73 20 74 68 65 20 64 61 74  llocates the dat
9810: 61 62 61 73 65 20 0a 20 20 2a 2a 20 73 74 72 75  abase .  ** stru
9820: 63 74 75 72 65 3f 0a 20 20 2a 2f 0a 20 20 73 71  cture?.  */.  sq
9830: 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
9840: 64 62 2d 3e 61 44 62 5b 31 5d 2e 70 53 63 68 65  db->aDb[1].pSche
9850: 6d 61 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d  ma);.  sqlite3_m
9860: 75 74 65 78 5f 6c 65 61 76 65 28 64 62 2d 3e 6d  utex_leave(db->m
9870: 75 74 65 78 29 3b 0a 20 20 64 62 2d 3e 6d 61 67  utex);.  db->mag
9880: 69 63 20 3d 20 53 51 4c 49 54 45 5f 4d 41 47 49  ic = SQLITE_MAGI
9890: 43 5f 43 4c 4f 53 45 44 3b 0a 20 20 73 71 6c 69  C_CLOSED;.  sqli
98a0: 74 65 33 5f 6d 75 74 65 78 5f 66 72 65 65 28 64  te3_mutex_free(d
98b0: 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 61 73 73  b->mutex);.  ass
98c0: 65 72 74 28 20 64 62 2d 3e 6c 6f 6f 6b 61 73 69  ert( db->lookasi
98d0: 64 65 2e 6e 4f 75 74 3d 3d 30 20 29 3b 20 20 2f  de.nOut==0 );  /
98e0: 2a 20 46 61 69 6c 73 20 6f 6e 20 61 20 6c 6f 6f  * Fails on a loo
98f0: 6b 61 73 69 64 65 20 6d 65 6d 6f 72 79 20 6c 65  kaside memory le
9900: 61 6b 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e  ak */.  if( db->
9910: 6c 6f 6f 6b 61 73 69 64 65 2e 62 4d 61 6c 6c 6f  lookaside.bMallo
9920: 63 65 64 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ced ){.    sqlit
9930: 65 33 5f 66 72 65 65 28 64 62 2d 3e 6c 6f 6f 6b  e3_free(db->look
9940: 61 73 69 64 65 2e 70 53 74 61 72 74 29 3b 0a 20  aside.pStart);. 
9950: 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65   }.  sqlite3_fre
9960: 65 28 64 62 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  e(db);.}../*.** 
9970: 52 6f 6c 6c 62 61 63 6b 20 61 6c 6c 20 64 61 74  Rollback all dat
9980: 61 62 61 73 65 20 66 69 6c 65 73 2e 20 20 49 66  abase files.  If
9990: 20 74 72 69 70 43 6f 64 65 20 69 73 20 6e 6f 74   tripCode is not
99a0: 20 53 51 4c 49 54 45 5f 4f 4b 2c 20 74 68 65 6e   SQLITE_OK, then
99b0: 0a 2a 2a 20 61 6e 79 20 77 72 69 74 65 20 63 75  .** any write cu
99c0: 72 73 6f 72 73 20 61 72 65 20 69 6e 76 61 6c 69  rsors are invali
99d0: 64 61 74 65 64 20 28 22 74 72 69 70 70 65 64 22  dated ("tripped"
99e0: 20 2d 20 61 73 20 69 6e 20 22 74 72 69 70 70 69   - as in "trippi
99f0: 6e 67 20 61 20 63 69 72 63 75 69 74 0a 2a 2a 20  ng a circuit.** 
9a00: 62 72 65 61 6b 65 72 22 29 20 61 6e 64 20 6d 61  breaker") and ma
9a10: 64 65 20 74 6f 20 72 65 74 75 72 6e 20 74 72 69  de to return tri
9a20: 70 43 6f 64 65 20 69 66 20 74 68 65 72 65 20 61  pCode if there a
9a30: 72 65 20 61 6e 79 20 66 75 72 74 68 65 72 0a 2a  re any further.*
9a40: 2a 20 61 74 74 65 6d 70 74 73 20 74 6f 20 75 73  * attempts to us
9a50: 65 20 74 68 61 74 20 63 75 72 73 6f 72 2e 20 20  e that cursor.  
9a60: 52 65 61 64 20 63 75 72 73 6f 72 73 20 72 65 6d  Read cursors rem
9a70: 61 69 6e 20 6f 70 65 6e 20 61 6e 64 20 76 61 6c  ain open and val
9a80: 69 64 0a 2a 2a 20 62 75 74 20 61 72 65 20 22 73  id.** but are "s
9a90: 61 76 65 64 22 20 69 6e 20 63 61 73 65 20 74 68  aved" in case th
9aa0: 65 20 74 61 62 6c 65 20 70 61 67 65 73 20 61 72  e table pages ar
9ab0: 65 20 6d 6f 76 65 64 20 61 72 6f 75 6e 64 2e 0a  e moved around..
9ac0: 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  */.void sqlite3R
9ad0: 6f 6c 6c 62 61 63 6b 41 6c 6c 28 73 71 6c 69 74  ollbackAll(sqlit
9ae0: 65 33 20 2a 64 62 2c 20 69 6e 74 20 74 72 69 70  e3 *db, int trip
9af0: 43 6f 64 65 29 7b 0a 20 20 69 6e 74 20 69 3b 0a  Code){.  int i;.
9b00: 20 20 69 6e 74 20 69 6e 54 72 61 6e 73 20 3d 20    int inTrans = 
9b10: 30 3b 0a 20 20 69 6e 74 20 73 63 68 65 6d 61 43  0;.  int schemaC
9b20: 68 61 6e 67 65 3b 0a 20 20 61 73 73 65 72 74 28  hange;.  assert(
9b30: 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 68   sqlite3_mutex_h
9b40: 65 6c 64 28 64 62 2d 3e 6d 75 74 65 78 29 20 29  eld(db->mutex) )
9b50: 3b 0a 20 20 73 71 6c 69 74 65 33 42 65 67 69 6e  ;.  sqlite3Begin
9b60: 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a  BenignMalloc();.
9b70: 0a 20 20 2f 2a 20 4f 62 74 61 69 6e 20 61 6c 6c  .  /* Obtain all
9b80: 20 62 2d 74 72 65 65 20 6d 75 74 65 78 65 73 20   b-tree mutexes 
9b90: 62 65 66 6f 72 65 20 6d 61 6b 69 6e 67 20 61 6e  before making an
9ba0: 79 20 63 61 6c 6c 73 20 74 6f 20 42 74 72 65 65  y calls to Btree
9bb0: 52 6f 6c 6c 62 61 63 6b 28 29 2e 20 0a 20 20 2a  Rollback(). .  *
9bc0: 2a 20 54 68 69 73 20 69 73 20 69 6d 70 6f 72 74  * This is import
9bd0: 61 6e 74 20 69 6e 20 63 61 73 65 20 74 68 65 20  ant in case the 
9be0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 62 65 69 6e  transaction bein
9bf0: 67 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20 68 61  g rolled back ha
9c00: 73 0a 20 20 2a 2a 20 6d 6f 64 69 66 69 65 64 20  s.  ** modified 
9c10: 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
9c20: 65 6d 61 2e 20 49 66 20 74 68 65 20 62 2d 74 72  ema. If the b-tr
9c30: 65 65 20 6d 75 74 65 78 65 73 20 61 72 65 20 6e  ee mutexes are n
9c40: 6f 74 20 74 61 6b 65 6e 0a 20 20 2a 2a 20 68 65  ot taken.  ** he
9c50: 72 65 2c 20 74 68 65 6e 20 61 6e 6f 74 68 65 72  re, then another
9c60: 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 63 6f   shared-cache co
9c70: 6e 6e 65 63 74 69 6f 6e 20 6d 69 67 68 74 20 73  nnection might s
9c80: 6e 65 61 6b 20 69 6e 20 62 65 74 77 65 65 6e 0a  neak in between.
9c90: 20 20 2a 2a 20 74 68 65 20 64 61 74 61 62 61 73    ** the databas
9ca0: 65 20 72 6f 6c 6c 62 61 63 6b 20 61 6e 64 20 73  e rollback and s
9cb0: 63 68 65 6d 61 20 72 65 73 65 74 2c 20 77 68 69  chema reset, whi
9cc0: 63 68 20 63 61 6e 20 63 61 75 73 65 20 66 61 6c  ch can cause fal
9cd0: 73 65 0a 20 20 2a 2a 20 63 6f 72 72 75 70 74 69  se.  ** corrupti
9ce0: 6f 6e 20 72 65 70 6f 72 74 73 20 69 6e 20 73 6f  on reports in so
9cf0: 6d 65 20 63 61 73 65 73 2e 20 20 2a 2f 0a 20 20  me cases.  */.  
9d00: 73 71 6c 69 74 65 33 42 74 72 65 65 45 6e 74 65  sqlite3BtreeEnte
9d10: 72 41 6c 6c 28 64 62 29 3b 0a 20 20 73 63 68 65  rAll(db);.  sche
9d20: 6d 61 43 68 61 6e 67 65 20 3d 20 28 64 62 2d 3e  maChange = (db->
9d30: 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 49  flags & SQLITE_I
9d40: 6e 74 65 72 6e 43 68 61 6e 67 65 73 29 21 3d 30  nternChanges)!=0
9d50: 20 26 26 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73   && db->init.bus
9d60: 79 3d 3d 30 3b 0a 0a 20 20 66 6f 72 28 69 3d 30  y==0;..  for(i=0
9d70: 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b  ; i<db->nDb; i++
9d80: 29 7b 0a 20 20 20 20 42 74 72 65 65 20 2a 70 20  ){.    Btree *p 
9d90: 3d 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74  = db->aDb[i].pBt
9da0: 3b 0a 20 20 20 20 69 66 28 20 70 20 29 7b 0a 20  ;.    if( p ){. 
9db0: 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33       if( sqlite3
9dc0: 42 74 72 65 65 49 73 49 6e 54 72 61 6e 73 28 70  BtreeIsInTrans(p
9dd0: 29 20 29 7b 0a 20 20 20 20 20 20 20 20 69 6e 54  ) ){.        inT
9de0: 72 61 6e 73 20 3d 20 31 3b 0a 20 20 20 20 20 20  rans = 1;.      
9df0: 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 42  }.      sqlite3B
9e00: 74 72 65 65 52 6f 6c 6c 62 61 63 6b 28 70 2c 20  treeRollback(p, 
9e10: 74 72 69 70 43 6f 64 65 2c 20 21 73 63 68 65 6d  tripCode, !schem
9e20: 61 43 68 61 6e 67 65 29 3b 0a 20 20 20 20 7d 0a  aChange);.    }.
9e30: 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 56 74 61    }.  sqlite3Vta
9e40: 62 52 6f 6c 6c 62 61 63 6b 28 64 62 29 3b 0a 20  bRollback(db);. 
9e50: 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67   sqlite3EndBenig
9e60: 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 0a 20 20 69 66  nMalloc();..  if
9e70: 28 20 28 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c  ( (db->flags&SQL
9e80: 49 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65  ITE_InternChange
9e90: 73 29 21 3d 30 20 26 26 20 64 62 2d 3e 69 6e 69  s)!=0 && db->ini
9ea0: 74 2e 62 75 73 79 3d 3d 30 20 29 7b 0a 20 20 20  t.busy==0 ){.   
9eb0: 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72   sqlite3ExpirePr
9ec0: 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73  eparedStatements
9ed0: 28 64 62 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  (db);.    sqlite
9ee0: 33 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73  3ResetAllSchemas
9ef0: 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 64 62 29  OfConnection(db)
9f00: 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 42  ;.  }.  sqlite3B
9f10: 74 72 65 65 4c 65 61 76 65 41 6c 6c 28 64 62 29  treeLeaveAll(db)
9f20: 3b 0a 0a 20 20 2f 2a 20 41 6e 79 20 64 65 66 65  ;..  /* Any defe
9f30: 72 72 65 64 20 63 6f 6e 73 74 72 61 69 6e 74 20  rred constraint 
9f40: 76 69 6f 6c 61 74 69 6f 6e 73 20 68 61 76 65 20  violations have 
9f50: 6e 6f 77 20 62 65 65 6e 20 72 65 73 6f 6c 76 65  now been resolve
9f60: 64 2e 20 2a 2f 0a 20 20 64 62 2d 3e 6e 44 65 66  d. */.  db->nDef
9f70: 65 72 72 65 64 43 6f 6e 73 20 3d 20 30 3b 0a 20  erredCons = 0;. 
9f80: 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d   db->nDeferredIm
9f90: 6d 43 6f 6e 73 20 3d 20 30 3b 0a 20 20 64 62 2d  mCons = 0;.  db-
9fa0: 3e 66 6c 61 67 73 20 26 3d 20 7e 53 51 4c 49 54  >flags &= ~SQLIT
9fb0: 45 5f 44 65 66 65 72 46 4b 73 3b 0a 0a 20 20 2f  E_DeferFKs;..  /
9fc0: 2a 20 49 66 20 6f 6e 65 20 68 61 73 20 62 65 65  * If one has bee
9fd0: 6e 20 63 6f 6e 66 69 67 75 72 65 64 2c 20 69 6e  n configured, in
9fe0: 76 6f 6b 65 20 74 68 65 20 72 6f 6c 6c 62 61 63  voke the rollbac
9ff0: 6b 2d 68 6f 6f 6b 20 63 61 6c 6c 62 61 63 6b 20  k-hook callback 
a000: 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e 78 52 6f  */.  if( db->xRo
a010: 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 20 26  llbackCallback &
a020: 26 20 28 69 6e 54 72 61 6e 73 20 7c 7c 20 21 64  & (inTrans || !d
a030: 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 29 20 29  b->autoCommit) )
a040: 7b 0a 20 20 20 20 64 62 2d 3e 78 52 6f 6c 6c 62  {.    db->xRollb
a050: 61 63 6b 43 61 6c 6c 62 61 63 6b 28 64 62 2d 3e  ackCallback(db->
a060: 70 52 6f 6c 6c 62 61 63 6b 41 72 67 29 3b 0a 20  pRollbackArg);. 
a070: 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75   }.}../*.** Retu
a080: 72 6e 20 61 20 73 74 61 74 69 63 20 73 74 72 69  rn a static stri
a090: 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  ng containing th
a0a0: 65 20 6e 61 6d 65 20 63 6f 72 72 65 73 70 6f 6e  e name correspon
a0b0: 64 69 6e 67 20 74 6f 20 74 68 65 20 65 72 72 6f  ding to the erro
a0c0: 72 20 63 6f 64 65 0a 2a 2a 20 73 70 65 63 69 66  r code.** specif
a0d0: 69 65 64 20 69 6e 20 74 68 65 20 61 72 67 75 6d  ied in the argum
a0e0: 65 6e 74 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69  ent..*/.#if defi
a0f0: 6e 65 64 28 53 51 4c 49 54 45 5f 4e 45 45 44 5f  ned(SQLITE_NEED_
a100: 45 52 52 5f 4e 41 4d 45 29 0a 63 6f 6e 73 74 20  ERR_NAME).const 
a110: 63 68 61 72 20 2a 73 71 6c 69 74 65 33 45 72 72  char *sqlite3Err
a120: 4e 61 6d 65 28 69 6e 74 20 72 63 29 7b 0a 20 20  Name(int rc){.  
a130: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d  const char *zNam
a140: 65 20 3d 20 30 3b 0a 20 20 69 6e 74 20 69 2c 20  e = 0;.  int i, 
a150: 6f 72 69 67 52 63 20 3d 20 72 63 3b 0a 20 20 66  origRc = rc;.  f
a160: 6f 72 28 69 3d 30 3b 20 69 3c 32 20 26 26 20 7a  or(i=0; i<2 && z
a170: 4e 61 6d 65 3d 3d 30 3b 20 69 2b 2b 2c 20 72 63  Name==0; i++, rc
a180: 20 26 3d 20 30 78 66 66 29 7b 0a 20 20 20 20 73   &= 0xff){.    s
a190: 77 69 74 63 68 28 20 72 63 20 29 7b 0a 20 20 20  witch( rc ){.   
a1a0: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 4f     case SQLITE_O
a1b0: 4b 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  K:              
a1c0: 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49     zName = "SQLI
a1d0: 54 45 5f 4f 4b 22 3b 20 20 20 20 20 20 20 20 20  TE_OK";         
a1e0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
a1f0: 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
a200: 45 52 52 4f 52 3a 20 20 20 20 20 20 20 20 20 20  ERROR:          
a210: 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c      zName = "SQL
a220: 49 54 45 5f 45 52 52 4f 52 22 3b 20 20 20 20 20  ITE_ERROR";     
a230: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
a240: 20 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45       case SQLITE
a250: 5f 49 4e 54 45 52 4e 41 4c 3a 20 20 20 20 20 20  _INTERNAL:      
a260: 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51       zName = "SQ
a270: 4c 49 54 45 5f 49 4e 54 45 52 4e 41 4c 22 3b 20  LITE_INTERNAL"; 
a280: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
a290: 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 49 54        case SQLIT
a2a0: 45 5f 50 45 52 4d 3a 20 20 20 20 20 20 20 20 20  E_PERM:         
a2b0: 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53        zName = "S
a2c0: 51 4c 49 54 45 5f 50 45 52 4d 22 3b 20 20 20 20  QLITE_PERM";    
a2d0: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
a2e0: 0a 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 49  .      case SQLI
a2f0: 54 45 5f 41 42 4f 52 54 3a 20 20 20 20 20 20 20  TE_ABORT:       
a300: 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22         zName = "
a310: 53 51 4c 49 54 45 5f 41 42 4f 52 54 22 3b 20 20  SQLITE_ABORT";  
a320: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
a330: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 53 51 4c  ;.      case SQL
a340: 49 54 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42 41  ITE_ABORT_ROLLBA
a350: 43 4b 3a 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20  CK:     zName = 
a360: 22 53 51 4c 49 54 45 5f 41 42 4f 52 54 5f 52 4f  "SQLITE_ABORT_RO
a370: 4c 4c 42 41 43 4b 22 3b 20 20 20 20 62 72 65 61  LLBACK";    brea
a380: 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 53 51  k;.      case SQ
a390: 4c 49 54 45 5f 42 55 53 59 3a 20 20 20 20 20 20  LITE_BUSY:      
a3a0: 20 20 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d           zName =
a3b0: 20 22 53 51 4c 49 54 45 5f 42 55 53 59 22 3b 20   "SQLITE_BUSY"; 
a3c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65               bre
a3d0: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 53  ak;.      case S
a3e0: 51 4c 49 54 45 5f 42 55 53 59 5f 52 45 43 4f 56  QLITE_BUSY_RECOV
a3f0: 45 52 59 3a 20 20 20 20 20 20 7a 4e 61 6d 65 20  ERY:      zName 
a400: 3d 20 22 53 51 4c 49 54 45 5f 42 55 53 59 5f 52  = "SQLITE_BUSY_R
a410: 45 43 4f 56 45 52 59 22 3b 20 20 20 20 20 62 72  ECOVERY";     br
a420: 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20  eak;.      case 
a430: 53 51 4c 49 54 45 5f 42 55 53 59 5f 53 4e 41 50  SQLITE_BUSY_SNAP
a440: 53 48 4f 54 3a 20 20 20 20 20 20 7a 4e 61 6d 65  SHOT:      zName
a450: 20 3d 20 22 53 51 4c 49 54 45 5f 42 55 53 59 5f   = "SQLITE_BUSY_
a460: 53 4e 41 50 53 48 4f 54 22 3b 20 20 20 20 20 62  SNAPSHOT";     b
a470: 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65  reak;.      case
a480: 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 3a 20   SQLITE_LOCKED: 
a490: 20 20 20 20 20 20 20 20 20 20 20 20 7a 4e 61 6d              zNam
a4a0: 65 20 3d 20 22 53 51 4c 49 54 45 5f 4c 4f 43 4b  e = "SQLITE_LOCK
a4b0: 45 44 22 3b 20 20 20 20 20 20 20 20 20 20 20 20  ED";            
a4c0: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73  break;.      cas
a4d0: 65 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 5f  e SQLITE_LOCKED_
a4e0: 53 48 41 52 45 44 43 41 43 48 45 3a 20 7a 4e 61  SHAREDCACHE: zNa
a4f0: 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 4c 4f 43  me = "SQLITE_LOC
a500: 4b 45 44 5f 53 48 41 52 45 44 43 41 43 48 45 22  KED_SHAREDCACHE"
a510: 3b 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61  ;break;.      ca
a520: 73 65 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3a  se SQLITE_NOMEM:
a530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7a 4e                zN
a540: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 4e 4f  ame = "SQLITE_NO
a550: 4d 45 4d 22 3b 20 20 20 20 20 20 20 20 20 20 20  MEM";           
a560: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63    break;.      c
a570: 61 73 65 20 53 51 4c 49 54 45 5f 52 45 41 44 4f  ase SQLITE_READO
a580: 4e 4c 59 3a 20 20 20 20 20 20 20 20 20 20 20 7a  NLY:           z
a590: 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 52  Name = "SQLITE_R
a5a0: 45 41 44 4f 4e 4c 59 22 3b 20 20 20 20 20 20 20  EADONLY";       
a5b0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
a5c0: 63 61 73 65 20 53 51 4c 49 54 45 5f 52 45 41 44  case SQLITE_READ
a5d0: 4f 4e 4c 59 5f 52 45 43 4f 56 45 52 59 3a 20 20  ONLY_RECOVERY:  
a5e0: 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f  zName = "SQLITE_
a5f0: 52 45 41 44 4f 4e 4c 59 5f 52 45 43 4f 56 45 52  READONLY_RECOVER
a600: 59 22 3b 20 62 72 65 61 6b 3b 0a 20 20 20 20 20  Y"; break;.     
a610: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 52 45 41   case SQLITE_REA
a620: 44 4f 4e 4c 59 5f 43 41 4e 54 4c 4f 43 4b 3a 20  DONLY_CANTLOCK: 
a630: 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45   zName = "SQLITE
a640: 5f 52 45 41 44 4f 4e 4c 59 5f 43 41 4e 54 4c 4f  _READONLY_CANTLO
a650: 43 4b 22 3b 20 62 72 65 61 6b 3b 0a 20 20 20 20  CK"; break;.    
a660: 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 52 45    case SQLITE_RE
a670: 41 44 4f 4e 4c 59 5f 52 4f 4c 4c 42 41 43 4b 3a  ADONLY_ROLLBACK:
a680: 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54    zName = "SQLIT
a690: 45 5f 52 45 41 44 4f 4e 4c 59 5f 52 4f 4c 4c 42  E_READONLY_ROLLB
a6a0: 41 43 4b 22 3b 20 62 72 65 61 6b 3b 0a 20 20 20  ACK"; break;.   
a6b0: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 52     case SQLITE_R
a6c0: 45 41 44 4f 4e 4c 59 5f 44 42 4d 4f 56 45 44 3a  EADONLY_DBMOVED:
a6d0: 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49     zName = "SQLI
a6e0: 54 45 5f 52 45 41 44 4f 4e 4c 59 5f 44 42 4d 4f  TE_READONLY_DBMO
a6f0: 56 45 44 22 3b 20 20 62 72 65 61 6b 3b 0a 20 20  VED";  break;.  
a700: 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
a710: 49 4e 54 45 52 52 55 50 54 3a 20 20 20 20 20 20  INTERRUPT:      
a720: 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c      zName = "SQL
a730: 49 54 45 5f 49 4e 54 45 52 52 55 50 54 22 3b 20  ITE_INTERRUPT"; 
a740: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
a750: 20 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45       case SQLITE
a760: 5f 49 4f 45 52 52 3a 20 20 20 20 20 20 20 20 20  _IOERR:         
a770: 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51       zName = "SQ
a780: 4c 49 54 45 5f 49 4f 45 52 52 22 3b 20 20 20 20  LITE_IOERR";    
a790: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
a7a0: 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 49 54        case SQLIT
a7b0: 45 5f 49 4f 45 52 52 5f 52 45 41 44 3a 20 20 20  E_IOERR_READ:   
a7c0: 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53        zName = "S
a7d0: 51 4c 49 54 45 5f 49 4f 45 52 52 5f 52 45 41 44  QLITE_IOERR_READ
a7e0: 22 3b 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b  ";        break;
a7f0: 0a 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 49  .      case SQLI
a800: 54 45 5f 49 4f 45 52 52 5f 53 48 4f 52 54 5f 52  TE_IOERR_SHORT_R
a810: 45 41 44 3a 20 20 20 7a 4e 61 6d 65 20 3d 20 22  EAD:   zName = "
a820: 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 53 48 4f  SQLITE_IOERR_SHO
a830: 52 54 5f 52 45 41 44 22 3b 20 20 62 72 65 61 6b  RT_READ";  break
a840: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 53 51 4c  ;.      case SQL
a850: 49 54 45 5f 49 4f 45 52 52 5f 57 52 49 54 45 3a  ITE_IOERR_WRITE:
a860: 20 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20          zName = 
a870: 22 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 57 52  "SQLITE_IOERR_WR
a880: 49 54 45 22 3b 20 20 20 20 20 20 20 62 72 65 61  ITE";       brea
a890: 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 53 51  k;.      case SQ
a8a0: 4c 49 54 45 5f 49 4f 45 52 52 5f 46 53 59 4e 43  LITE_IOERR_FSYNC
a8b0: 3a 20 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d  :        zName =
a8c0: 20 22 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 46   "SQLITE_IOERR_F
a8d0: 53 59 4e 43 22 3b 20 20 20 20 20 20 20 62 72 65  SYNC";       bre
a8e0: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 53  ak;.      case S
a8f0: 51 4c 49 54 45 5f 49 4f 45 52 52 5f 44 49 52 5f  QLITE_IOERR_DIR_
a900: 46 53 59 4e 43 3a 20 20 20 20 7a 4e 61 6d 65 20  FSYNC:    zName 
a910: 3d 20 22 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f  = "SQLITE_IOERR_
a920: 44 49 52 5f 46 53 59 4e 43 22 3b 20 20 20 62 72  DIR_FSYNC";   br
a930: 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20  eak;.      case 
a940: 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 54 52 55  SQLITE_IOERR_TRU
a950: 4e 43 41 54 45 3a 20 20 20 20 20 7a 4e 61 6d 65  NCATE:     zName
a960: 20 3d 20 22 53 51 4c 49 54 45 5f 49 4f 45 52 52   = "SQLITE_IOERR
a970: 5f 54 52 55 4e 43 41 54 45 22 3b 20 20 20 20 62  _TRUNCATE";    b
a980: 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65  reak;.      case
a990: 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 46 53   SQLITE_IOERR_FS
a9a0: 54 41 54 3a 20 20 20 20 20 20 20 20 7a 4e 61 6d  TAT:        zNam
a9b0: 65 20 3d 20 22 53 51 4c 49 54 45 5f 49 4f 45 52  e = "SQLITE_IOER
a9c0: 52 5f 46 53 54 41 54 22 3b 20 20 20 20 20 20 20  R_FSTAT";       
a9d0: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73  break;.      cas
a9e0: 65 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 55  e SQLITE_IOERR_U
a9f0: 4e 4c 4f 43 4b 3a 20 20 20 20 20 20 20 7a 4e 61  NLOCK:       zNa
aa00: 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 49 4f 45  me = "SQLITE_IOE
aa10: 52 52 5f 55 4e 4c 4f 43 4b 22 3b 20 20 20 20 20  RR_UNLOCK";     
aa20: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
aa30: 73 65 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f  se SQLITE_IOERR_
aa40: 52 44 4c 4f 43 4b 3a 20 20 20 20 20 20 20 7a 4e  RDLOCK:       zN
aa50: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 49 4f  ame = "SQLITE_IO
aa60: 45 52 52 5f 52 44 4c 4f 43 4b 22 3b 20 20 20 20  ERR_RDLOCK";    
aa70: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63    break;.      c
aa80: 61 73 65 20 53 51 4c 49 54 45 5f 49 4f 45 52 52  ase SQLITE_IOERR
aa90: 5f 44 45 4c 45 54 45 3a 20 20 20 20 20 20 20 7a  _DELETE:       z
aaa0: 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 49  Name = "SQLITE_I
aab0: 4f 45 52 52 5f 44 45 4c 45 54 45 22 3b 20 20 20  OERR_DELETE";   
aac0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
aad0: 63 61 73 65 20 53 51 4c 49 54 45 5f 49 4f 45 52  case SQLITE_IOER
aae0: 52 5f 4e 4f 4d 45 4d 3a 20 20 20 20 20 20 20 20  R_NOMEM:        
aaf0: 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f  zName = "SQLITE_
ab00: 49 4f 45 52 52 5f 4e 4f 4d 45 4d 22 3b 20 20 20  IOERR_NOMEM";   
ab10: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
ab20: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 49 4f 45   case SQLITE_IOE
ab30: 52 52 5f 41 43 43 45 53 53 3a 20 20 20 20 20 20  RR_ACCESS:      
ab40: 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45   zName = "SQLITE
ab50: 5f 49 4f 45 52 52 5f 41 43 43 45 53 53 22 3b 20  _IOERR_ACCESS"; 
ab60: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
ab70: 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 49 4f    case SQLITE_IO
ab80: 45 52 52 5f 43 48 45 43 4b 52 45 53 45 52 56 45  ERR_CHECKRESERVE
ab90: 44 4c 4f 43 4b 3a 0a 20 20 20 20 20 20 20 20 20  DLOCK:.         
aba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
abb0: 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22         zName = "
abc0: 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 43 48 45  SQLITE_IOERR_CHE
abd0: 43 4b 52 45 53 45 52 56 45 44 4c 4f 43 4b 22 3b  CKRESERVEDLOCK";
abe0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
abf0: 73 65 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f  se SQLITE_IOERR_
ac00: 4c 4f 43 4b 3a 20 20 20 20 20 20 20 20 20 7a 4e  LOCK:         zN
ac10: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 49 4f  ame = "SQLITE_IO
ac20: 45 52 52 5f 4c 4f 43 4b 22 3b 20 20 20 20 20 20  ERR_LOCK";      
ac30: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63    break;.      c
ac40: 61 73 65 20 53 51 4c 49 54 45 5f 49 4f 45 52 52  ase SQLITE_IOERR
ac50: 5f 43 4c 4f 53 45 3a 20 20 20 20 20 20 20 20 7a  _CLOSE:        z
ac60: 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 49  Name = "SQLITE_I
ac70: 4f 45 52 52 5f 43 4c 4f 53 45 22 3b 20 20 20 20  OERR_CLOSE";    
ac80: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
ac90: 63 61 73 65 20 53 51 4c 49 54 45 5f 49 4f 45 52  case SQLITE_IOER
aca0: 52 5f 44 49 52 5f 43 4c 4f 53 45 3a 20 20 20 20  R_DIR_CLOSE:    
acb0: 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f  zName = "SQLITE_
acc0: 49 4f 45 52 52 5f 44 49 52 5f 43 4c 4f 53 45 22  IOERR_DIR_CLOSE"
acd0: 3b 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20  ;   break;.     
ace0: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 49 4f 45   case SQLITE_IOE
acf0: 52 52 5f 53 48 4d 4f 50 45 4e 3a 20 20 20 20 20  RR_SHMOPEN:     
ad00: 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45   zName = "SQLITE
ad10: 5f 49 4f 45 52 52 5f 53 48 4d 4f 50 45 4e 22 3b  _IOERR_SHMOPEN";
ad20: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
ad30: 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 49 4f    case SQLITE_IO
ad40: 45 52 52 5f 53 48 4d 53 49 5a 45 3a 20 20 20 20  ERR_SHMSIZE:    
ad50: 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54    zName = "SQLIT
ad60: 45 5f 49 4f 45 52 52 5f 53 48 4d 53 49 5a 45 22  E_IOERR_SHMSIZE"
ad70: 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20  ;     break;.   
ad80: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 49     case SQLITE_I
ad90: 4f 45 52 52 5f 53 48 4d 4c 4f 43 4b 3a 20 20 20  OERR_SHMLOCK:   
ada0: 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49     zName = "SQLI
adb0: 54 45 5f 49 4f 45 52 52 5f 53 48 4d 4c 4f 43 4b  TE_IOERR_SHMLOCK
adc0: 22 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  ";     break;.  
add0: 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
ade0: 49 4f 45 52 52 5f 53 48 4d 4d 41 50 3a 20 20 20  IOERR_SHMMAP:   
adf0: 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c      zName = "SQL
ae00: 49 54 45 5f 49 4f 45 52 52 5f 53 48 4d 4d 41 50  ITE_IOERR_SHMMAP
ae10: 22 3b 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ";      break;. 
ae20: 20 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45       case SQLITE
ae30: 5f 49 4f 45 52 52 5f 53 45 45 4b 3a 20 20 20 20  _IOERR_SEEK:    
ae40: 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51       zName = "SQ
ae50: 4c 49 54 45 5f 49 4f 45 52 52 5f 53 45 45 4b 22  LITE_IOERR_SEEK"
ae60: 3b 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  ;        break;.
ae70: 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 49 54        case SQLIT
ae80: 45 5f 49 4f 45 52 52 5f 44 45 4c 45 54 45 5f 4e  E_IOERR_DELETE_N
ae90: 4f 45 4e 54 3a 20 7a 4e 61 6d 65 20 3d 20 22 53  OENT: zName = "S
aea0: 51 4c 49 54 45 5f 49 4f 45 52 52 5f 44 45 4c 45  QLITE_IOERR_DELE
aeb0: 54 45 5f 4e 4f 45 4e 54 22 3b 62 72 65 61 6b 3b  TE_NOENT";break;
aec0: 0a 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 49  .      case SQLI
aed0: 54 45 5f 49 4f 45 52 52 5f 4d 4d 41 50 3a 20 20  TE_IOERR_MMAP:  
aee0: 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22         zName = "
aef0: 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4d 4d 41  SQLITE_IOERR_MMA
af00: 50 22 3b 20 20 20 20 20 20 20 20 62 72 65 61 6b  P";        break
af10: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 53 51 4c  ;.      case SQL
af20: 49 54 45 5f 49 4f 45 52 52 5f 47 45 54 54 45 4d  ITE_IOERR_GETTEM
af30: 50 50 41 54 48 3a 20 20 7a 4e 61 6d 65 20 3d 20  PPATH:  zName = 
af40: 22 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 47 45  "SQLITE_IOERR_GE
af50: 54 54 45 4d 50 50 41 54 48 22 3b 20 62 72 65 61  TTEMPPATH"; brea
af60: 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 53 51  k;.      case SQ
af70: 4c 49 54 45 5f 49 4f 45 52 52 5f 43 4f 4e 56 50  LITE_IOERR_CONVP
af80: 41 54 48 3a 20 20 20 20 20 7a 4e 61 6d 65 20 3d  ATH:     zName =
af90: 20 22 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 43   "SQLITE_IOERR_C
afa0: 4f 4e 56 50 41 54 48 22 3b 20 20 20 20 62 72 65  ONVPATH";    bre
afb0: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 53  ak;.      case S
afc0: 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 3a 20 20  QLITE_CORRUPT:  
afd0: 20 20 20 20 20 20 20 20 20 20 7a 4e 61 6d 65 20            zName 
afe0: 3d 20 22 53 51 4c 49 54 45 5f 43 4f 52 52 55 50  = "SQLITE_CORRUP
aff0: 54 22 3b 20 20 20 20 20 20 20 20 20 20 20 62 72  T";           br
b000: 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20  eak;.      case 
b010: 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 56  SQLITE_CORRUPT_V
b020: 54 41 42 3a 20 20 20 20 20 20 20 7a 4e 61 6d 65  TAB:       zName
b030: 20 3d 20 22 53 51 4c 49 54 45 5f 43 4f 52 52 55   = "SQLITE_CORRU
b040: 50 54 5f 56 54 41 42 22 3b 20 20 20 20 20 20 62  PT_VTAB";      b
b050: 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65  reak;.      case
b060: 20 53 51 4c 49 54 45 5f 4e 4f 54 46 4f 55 4e 44   SQLITE_NOTFOUND
b070: 3a 20 20 20 20 20 20 20 20 20 20 20 7a 4e 61 6d  :           zNam
b080: 65 20 3d 20 22 53 51 4c 49 54 45 5f 4e 4f 54 46  e = "SQLITE_NOTF
b090: 4f 55 4e 44 22 3b 20 20 20 20 20 20 20 20 20 20  OUND";          
b0a0: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73  break;.      cas
b0b0: 65 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3a 20 20  e SQLITE_FULL:  
b0c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7a 4e 61               zNa
b0d0: 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 46 55 4c  me = "SQLITE_FUL
b0e0: 4c 22 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  L";             
b0f0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
b100: 73 65 20 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50  se SQLITE_CANTOP
b110: 45 4e 3a 20 20 20 20 20 20 20 20 20 20 20 7a 4e  EN:           zN
b120: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 43 41  ame = "SQLITE_CA
b130: 4e 54 4f 50 45 4e 22 3b 20 20 20 20 20 20 20 20  NTOPEN";        
b140: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63    break;.      c
b150: 61 73 65 20 53 51 4c 49 54 45 5f 43 41 4e 54 4f  ase SQLITE_CANTO
b160: 50 45 4e 5f 4e 4f 54 45 4d 50 44 49 52 3a 20 7a  PEN_NOTEMPDIR: z
b170: 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 43  Name = "SQLITE_C
b180: 41 4e 54 4f 50 45 4e 5f 4e 4f 54 45 4d 50 44 49  ANTOPEN_NOTEMPDI
b190: 52 22 3b 62 72 65 61 6b 3b 0a 20 20 20 20 20 20  R";break;.      
b1a0: 63 61 73 65 20 53 51 4c 49 54 45 5f 43 41 4e 54  case SQLITE_CANT
b1b0: 4f 50 45 4e 5f 49 53 44 49 52 3a 20 20 20 20 20  OPEN_ISDIR:     
b1c0: 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f  zName = "SQLITE_
b1d0: 43 41 4e 54 4f 50 45 4e 5f 49 53 44 49 52 22 3b  CANTOPEN_ISDIR";
b1e0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
b1f0: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 43 41 4e   case SQLITE_CAN
b200: 54 4f 50 45 4e 5f 46 55 4c 4c 50 41 54 48 3a 20  TOPEN_FULLPATH: 
b210: 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45   zName = "SQLITE
b220: 5f 43 41 4e 54 4f 50 45 4e 5f 46 55 4c 4c 50 41  _CANTOPEN_FULLPA
b230: 54 48 22 3b 20 62 72 65 61 6b 3b 0a 20 20 20 20  TH"; break;.    
b240: 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 43 41    case SQLITE_CA
b250: 4e 54 4f 50 45 4e 5f 43 4f 4e 56 50 41 54 48 3a  NTOPEN_CONVPATH:
b260: 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54    zName = "SQLIT
b270: 45 5f 43 41 4e 54 4f 50 45 4e 5f 43 4f 4e 56 50  E_CANTOPEN_CONVP
b280: 41 54 48 22 3b 20 62 72 65 61 6b 3b 0a 20 20 20  ATH"; break;.   
b290: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 50     case SQLITE_P
b2a0: 52 4f 54 4f 43 4f 4c 3a 20 20 20 20 20 20 20 20  ROTOCOL:        
b2b0: 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49     zName = "SQLI
b2c0: 54 45 5f 50 52 4f 54 4f 43 4f 4c 22 3b 20 20 20  TE_PROTOCOL";   
b2d0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
b2e0: 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
b2f0: 45 4d 50 54 59 3a 20 20 20 20 20 20 20 20 20 20  EMPTY:          
b300: 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c      zName = "SQL
b310: 49 54 45 5f 45 4d 50 54 59 22 3b 20 20 20 20 20  ITE_EMPTY";     
b320: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
b330: 20 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45       case SQLITE
b340: 5f 53 43 48 45 4d 41 3a 20 20 20 20 20 20 20 20  _SCHEMA:        
b350: 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51       zName = "SQ
b360: 4c 49 54 45 5f 53 43 48 45 4d 41 22 3b 20 20 20  LITE_SCHEMA";   
b370: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
b380: 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 49 54        case SQLIT
b390: 45 5f 54 4f 4f 42 49 47 3a 20 20 20 20 20 20 20  E_TOOBIG:       
b3a0: 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53        zName = "S
b3b0: 51 4c 49 54 45 5f 54 4f 4f 42 49 47 22 3b 20 20  QLITE_TOOBIG";  
b3c0: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
b3d0: 0a 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 49  .      case SQLI
b3e0: 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 3a 20 20  TE_CONSTRAINT:  
b3f0: 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22         zName = "
b400: 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e  SQLITE_CONSTRAIN
b410: 54 22 3b 20 20 20 20 20 20 20 20 62 72 65 61 6b  T";        break
b420: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 53 51 4c  ;.      case SQL
b430: 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 5f 55  ITE_CONSTRAINT_U
b440: 4e 49 51 55 45 3a 20 20 7a 4e 61 6d 65 20 3d 20  NIQUE:  zName = 
b450: 22 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49  "SQLITE_CONSTRAI
b460: 4e 54 5f 55 4e 49 51 55 45 22 3b 20 62 72 65 61  NT_UNIQUE"; brea
b470: 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 53 51  k;.      case SQ
b480: 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 5f  LITE_CONSTRAINT_
b490: 54 52 49 47 47 45 52 3a 20 7a 4e 61 6d 65 20 3d  TRIGGER: zName =
b4a0: 20 22 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41   "SQLITE_CONSTRA
b4b0: 49 4e 54 5f 54 52 49 47 47 45 52 22 3b 62 72 65  INT_TRIGGER";bre
b4c0: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 53  ak;.      case S
b4d0: 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54  QLITE_CONSTRAINT
b4e0: 5f 46 4f 52 45 49 47 4e 4b 45 59 3a 0a 20 20 20  _FOREIGNKEY:.   
b4f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b500: 20 20 20 20 20 20 20 20 20 20 20 20 20 7a 4e 61               zNa
b510: 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 43 4f 4e  me = "SQLITE_CON
b520: 53 54 52 41 49 4e 54 5f 46 4f 52 45 49 47 4e 4b  STRAINT_FOREIGNK
b530: 45 59 22 3b 20 20 20 62 72 65 61 6b 3b 0a 20 20  EY";   break;.  
b540: 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
b550: 43 4f 4e 53 54 52 41 49 4e 54 5f 43 48 45 43 4b  CONSTRAINT_CHECK
b560: 3a 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c  :   zName = "SQL
b570: 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 5f 43  ITE_CONSTRAINT_C
b580: 48 45 43 4b 22 3b 20 20 62 72 65 61 6b 3b 0a 20  HECK";  break;. 
b590: 20 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45       case SQLITE
b5a0: 5f 43 4f 4e 53 54 52 41 49 4e 54 5f 50 52 49 4d  _CONSTRAINT_PRIM
b5b0: 41 52 59 4b 45 59 3a 0a 20 20 20 20 20 20 20 20  ARYKEY:.        
b5c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b5d0: 20 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20          zName = 
b5e0: 22 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49  "SQLITE_CONSTRAI
b5f0: 4e 54 5f 50 52 49 4d 41 52 59 4b 45 59 22 3b 20  NT_PRIMARYKEY"; 
b600: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63    break;.      c
b610: 61 73 65 20 53 51 4c 49 54 45 5f 43 4f 4e 53 54  ase SQLITE_CONST
b620: 52 41 49 4e 54 5f 4e 4f 54 4e 55 4c 4c 3a 20 7a  RAINT_NOTNULL: z
b630: 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 43  Name = "SQLITE_C
b640: 4f 4e 53 54 52 41 49 4e 54 5f 4e 4f 54 4e 55 4c  ONSTRAINT_NOTNUL
b650: 4c 22 3b 62 72 65 61 6b 3b 0a 20 20 20 20 20 20  L";break;.      
b660: 63 61 73 65 20 53 51 4c 49 54 45 5f 43 4f 4e 53  case SQLITE_CONS
b670: 54 52 41 49 4e 54 5f 43 4f 4d 4d 49 54 48 4f 4f  TRAINT_COMMITHOO
b680: 4b 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  K:.             
b690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b6a0: 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49     zName = "SQLI
b6b0: 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 5f 43 4f  TE_CONSTRAINT_CO
b6c0: 4d 4d 49 54 48 4f 4f 4b 22 3b 20 20 20 62 72 65  MMITHOOK";   bre
b6d0: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 53  ak;.      case S
b6e0: 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54  QLITE_CONSTRAINT
b6f0: 5f 56 54 41 42 3a 20 20 20 20 7a 4e 61 6d 65 20  _VTAB:    zName 
b700: 3d 20 22 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52  = "SQLITE_CONSTR
b710: 41 49 4e 54 5f 56 54 41 42 22 3b 20 20 20 62 72  AINT_VTAB";   br
b720: 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20  eak;.      case 
b730: 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e  SQLITE_CONSTRAIN
b740: 54 5f 46 55 4e 43 54 49 4f 4e 3a 0a 20 20 20 20  T_FUNCTION:.    
b750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b760: 20 20 20 20 20 20 20 20 20 20 20 20 7a 4e 61 6d              zNam
b770: 65 20 3d 20 22 53 51 4c 49 54 45 5f 43 4f 4e 53  e = "SQLITE_CONS
b780: 54 52 41 49 4e 54 5f 46 55 4e 43 54 49 4f 4e 22  TRAINT_FUNCTION"
b790: 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20  ;     break;.   
b7a0: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 43     case SQLITE_C
b7b0: 4f 4e 53 54 52 41 49 4e 54 5f 52 4f 57 49 44 3a  ONSTRAINT_ROWID:
b7c0: 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49     zName = "SQLI
b7d0: 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 5f 52 4f  TE_CONSTRAINT_RO
b7e0: 57 49 44 22 3b 20 20 62 72 65 61 6b 3b 0a 20 20  WID";  break;.  
b7f0: 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
b800: 4d 49 53 4d 41 54 43 48 3a 20 20 20 20 20 20 20  MISMATCH:       
b810: 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c      zName = "SQL
b820: 49 54 45 5f 4d 49 53 4d 41 54 43 48 22 3b 20 20  ITE_MISMATCH";  
b830: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
b840: 20 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45       case SQLITE
b850: 5f 4d 49 53 55 53 45 3a 20 20 20 20 20 20 20 20  _MISUSE:        
b860: 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51       zName = "SQ
b870: 4c 49 54 45 5f 4d 49 53 55 53 45 22 3b 20 20 20  LITE_MISUSE";   
b880: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
b890: 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 49 54        case SQLIT
b8a0: 45 5f 4e 4f 4c 46 53 3a 20 20 20 20 20 20 20 20  E_NOLFS:        
b8b0: 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53        zName = "S
b8c0: 51 4c 49 54 45 5f 4e 4f 4c 46 53 22 3b 20 20 20  QLITE_NOLFS";   
b8d0: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
b8e0: 0a 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 49  .      case SQLI
b8f0: 54 45 5f 41 55 54 48 3a 20 20 20 20 20 20 20 20  TE_AUTH:        
b900: 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22         zName = "
b910: 53 51 4c 49 54 45 5f 41 55 54 48 22 3b 20 20 20  SQLITE_AUTH";   
b920: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
b930: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 53 51 4c  ;.      case SQL
b940: 49 54 45 5f 46 4f 52 4d 41 54 3a 20 20 20 20 20  ITE_FORMAT:     
b950: 20 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20          zName = 
b960: 22 53 51 4c 49 54 45 5f 46 4f 52 4d 41 54 22 3b  "SQLITE_FORMAT";
b970: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
b980: 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 53 51  k;.      case SQ
b990: 4c 49 54 45 5f 52 41 4e 47 45 3a 20 20 20 20 20  LITE_RANGE:     
b9a0: 20 20 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d           zName =
b9b0: 20 22 53 51 4c 49 54 45 5f 52 41 4e 47 45 22 3b   "SQLITE_RANGE";
b9c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65               bre
b9d0: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 53  ak;.      case S
b9e0: 51 4c 49 54 45 5f 4e 4f 54 41 44 42 3a 20 20 20  QLITE_NOTADB:   
b9f0: 20 20 20 20 20 20 20 20 20 20 7a 4e 61 6d 65 20            zName 
ba00: 3d 20 22 53 51 4c 49 54 45 5f 4e 4f 54 41 44 42  = "SQLITE_NOTADB
ba10: 22 3b 20 20 20 20 20 20 20 20 20 20 20 20 62 72  ";            br
ba20: 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20  eak;.      case 
ba30: 53 51 4c 49 54 45 5f 52 4f 57 3a 20 20 20 20 20  SQLITE_ROW:     
ba40: 20 20 20 20 20 20 20 20 20 20 20 7a 4e 61 6d 65             zName
ba50: 20 3d 20 22 53 51 4c 49 54 45 5f 52 4f 57 22 3b   = "SQLITE_ROW";
ba60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
ba70: 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65  reak;.      case
ba80: 20 53 51 4c 49 54 45 5f 4e 4f 54 49 43 45 3a 20   SQLITE_NOTICE: 
ba90: 20 20 20 20 20 20 20 20 20 20 20 20 7a 4e 61 6d              zNam
baa0: 65 20 3d 20 22 53 51 4c 49 54 45 5f 4e 4f 54 49  e = "SQLITE_NOTI
bab0: 43 45 22 3b 20 20 20 20 20 20 20 20 20 20 20 20  CE";            
bac0: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73  break;.      cas
bad0: 65 20 53 51 4c 49 54 45 5f 4e 4f 54 49 43 45 5f  e SQLITE_NOTICE_
bae0: 52 45 43 4f 56 45 52 5f 57 41 4c 3a 20 7a 4e 61  RECOVER_WAL: zNa
baf0: 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 4e 4f 54  me = "SQLITE_NOT
bb00: 49 43 45 5f 52 45 43 4f 56 45 52 5f 57 41 4c 22  ICE_RECOVER_WAL"
bb10: 3b 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61  ;break;.      ca
bb20: 73 65 20 53 51 4c 49 54 45 5f 4e 4f 54 49 43 45  se SQLITE_NOTICE
bb30: 5f 52 45 43 4f 56 45 52 5f 52 4f 4c 4c 42 41 43  _RECOVER_ROLLBAC
bb40: 4b 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  K:.             
bb50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bb60: 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49     zName = "SQLI
bb70: 54 45 5f 4e 4f 54 49 43 45 5f 52 45 43 4f 56 45  TE_NOTICE_RECOVE
bb80: 52 5f 52 4f 4c 4c 42 41 43 4b 22 3b 20 62 72 65  R_ROLLBACK"; bre
bb90: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 53  ak;.      case S
bba0: 51 4c 49 54 45 5f 57 41 52 4e 49 4e 47 3a 20 20  QLITE_WARNING:  
bbb0: 20 20 20 20 20 20 20 20 20 20 7a 4e 61 6d 65 20            zName 
bbc0: 3d 20 22 53 51 4c 49 54 45 5f 57 41 52 4e 49 4e  = "SQLITE_WARNIN
bbd0: 47 22 3b 20 20 20 20 20 20 20 20 20 20 20 62 72  G";           br
bbe0: 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20  eak;.      case 
bbf0: 53 51 4c 49 54 45 5f 57 41 52 4e 49 4e 47 5f 41  SQLITE_WARNING_A
bc00: 55 54 4f 49 4e 44 45 58 3a 20 20 7a 4e 61 6d 65  UTOINDEX:  zName
bc10: 20 3d 20 22 53 51 4c 49 54 45 5f 57 41 52 4e 49   = "SQLITE_WARNI
bc20: 4e 47 5f 41 55 54 4f 49 4e 44 45 58 22 3b 20 62  NG_AUTOINDEX"; b
bc30: 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65  reak;.      case
bc40: 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3a 20 20 20   SQLITE_DONE:   
bc50: 20 20 20 20 20 20 20 20 20 20 20 20 7a 4e 61 6d              zNam
bc60: 65 20 3d 20 22 53 51 4c 49 54 45 5f 44 4f 4e 45  e = "SQLITE_DONE
bc70: 22 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ";              
bc80: 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d  break;.    }.  }
bc90: 0a 20 20 69 66 28 20 7a 4e 61 6d 65 3d 3d 30 20  .  if( zName==0 
bca0: 29 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 68  ){.    static ch
bcb0: 61 72 20 7a 42 75 66 5b 35 30 5d 3b 0a 20 20 20  ar zBuf[50];.   
bcc0: 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
bcd0: 66 28 73 69 7a 65 6f 66 28 7a 42 75 66 29 2c 20  f(sizeof(zBuf), 
bce0: 7a 42 75 66 2c 20 22 53 51 4c 49 54 45 5f 55 4e  zBuf, "SQLITE_UN
bcf0: 4b 4e 4f 57 4e 28 25 64 29 22 2c 20 6f 72 69 67  KNOWN(%d)", orig
bd00: 52 63 29 3b 0a 20 20 20 20 7a 4e 61 6d 65 20 3d  Rc);.    zName =
bd10: 20 7a 42 75 66 3b 0a 20 20 7d 0a 20 20 72 65 74   zBuf;.  }.  ret
bd20: 75 72 6e 20 7a 4e 61 6d 65 3b 0a 7d 0a 23 65 6e  urn zName;.}.#en
bd30: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  dif../*.** Retur
bd40: 6e 20 61 20 73 74 61 74 69 63 20 73 74 72 69 6e  n a static strin
bd50: 67 20 74 68 61 74 20 64 65 73 63 72 69 62 65 73  g that describes
bd60: 20 74 68 65 20 6b 69 6e 64 20 6f 66 20 65 72 72   the kind of err
bd70: 6f 72 20 73 70 65 63 69 66 69 65 64 20 69 6e 20  or specified in 
bd80: 74 68 65 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 2e  the.** argument.
bd90: 0a 2a 2f 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a  .*/.const char *
bda0: 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 69 6e  sqlite3ErrStr(in
bdb0: 74 20 72 63 29 7b 0a 20 20 73 74 61 74 69 63 20  t rc){.  static 
bdc0: 63 6f 6e 73 74 20 63 68 61 72 2a 20 63 6f 6e 73  const char* cons
bdd0: 74 20 61 4d 73 67 5b 5d 20 3d 20 7b 0a 20 20 20  t aMsg[] = {.   
bde0: 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4b 20 20 20   /* SQLITE_OK   
bdf0: 20 20 20 20 20 20 20 2a 2f 20 22 6e 6f 74 20 61         */ "not a
be00: 6e 20 65 72 72 6f 72 22 2c 0a 20 20 20 20 2f 2a  n error",.    /*
be10: 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 20 20 20   SQLITE_ERROR   
be20: 20 20 20 20 2a 2f 20 22 53 51 4c 20 6c 6f 67 69      */ "SQL logi
be30: 63 20 65 72 72 6f 72 20 6f 72 20 6d 69 73 73 69  c error or missi
be40: 6e 67 20 64 61 74 61 62 61 73 65 22 2c 0a 20 20  ng database",.  
be50: 20 20 2f 2a 20 53 51 4c 49 54 45 5f 49 4e 54 45    /* SQLITE_INTE
be60: 52 4e 41 4c 20 20 20 20 2a 2f 20 30 2c 0a 20 20  RNAL    */ 0,.  
be70: 20 20 2f 2a 20 53 51 4c 49 54 45 5f 50 45 52 4d    /* SQLITE_PERM
be80: 20 20 20 20 20 20 20 20 2a 2f 20 22 61 63 63 65          */ "acce
be90: 73 73 20 70 65 72 6d 69 73 73 69 6f 6e 20 64 65  ss permission de
bea0: 6e 69 65 64 22 2c 0a 20 20 20 20 2f 2a 20 53 51  nied",.    /* SQ
beb0: 4c 49 54 45 5f 41 42 4f 52 54 20 20 20 20 20 20  LITE_ABORT      
bec0: 20 2a 2f 20 22 63 61 6c 6c 62 61 63 6b 20 72 65   */ "callback re
bed0: 71 75 65 73 74 65 64 20 71 75 65 72 79 20 61 62  quested query ab
bee0: 6f 72 74 22 2c 0a 20 20 20 20 2f 2a 20 53 51 4c  ort",.    /* SQL
bef0: 49 54 45 5f 42 55 53 59 20 20 20 20 20 20 20 20  ITE_BUSY        
bf00: 2a 2f 20 22 64 61 74 61 62 61 73 65 20 69 73 20  */ "database is 
bf10: 6c 6f 63 6b 65 64 22 2c 0a 20 20 20 20 2f 2a 20  locked",.    /* 
bf20: 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 20 20  SQLITE_LOCKED   
bf30: 20 20 20 2a 2f 20 22 64 61 74 61 62 61 73 65 20     */ "database 
bf40: 74 61 62 6c 65 20 69 73 20 6c 6f 63 6b 65 64 22  table is locked"
bf50: 2c 0a 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f  ,.    /* SQLITE_
bf60: 4e 4f 4d 45 4d 20 20 20 20 20 20 20 2a 2f 20 22  NOMEM       */ "
bf70: 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 22 2c 0a  out of memory",.
bf80: 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 52 45      /* SQLITE_RE
bf90: 41 44 4f 4e 4c 59 20 20 20 20 2a 2f 20 22 61 74  ADONLY    */ "at
bfa0: 74 65 6d 70 74 20 74 6f 20 77 72 69 74 65 20 61  tempt to write a
bfb0: 20 72 65 61 64 6f 6e 6c 79 20 64 61 74 61 62 61   readonly databa
bfc0: 73 65 22 2c 0a 20 20 20 20 2f 2a 20 53 51 4c 49  se",.    /* SQLI
bfd0: 54 45 5f 49 4e 54 45 52 52 55 50 54 20 20 20 2a  TE_INTERRUPT   *
bfe0: 2f 20 22 69 6e 74 65 72 72 75 70 74 65 64 22 2c  / "interrupted",
bff0: 0a 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 49  .    /* SQLITE_I
c000: 4f 45 52 52 20 20 20 20 20 20 20 2a 2f 20 22 64  OERR       */ "d
c010: 69 73 6b 20 49 2f 4f 20 65 72 72 6f 72 22 2c 0a  isk I/O error",.
c020: 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 43 4f      /* SQLITE_CO
c030: 52 52 55 50 54 20 20 20 20 20 2a 2f 20 22 64 61  RRUPT     */ "da
c040: 74 61 62 61 73 65 20 64 69 73 6b 20 69 6d 61 67  tabase disk imag
c050: 65 20 69 73 20 6d 61 6c 66 6f 72 6d 65 64 22 2c  e is malformed",
c060: 0a 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 4e  .    /* SQLITE_N
c070: 4f 54 46 4f 55 4e 44 20 20 20 20 2a 2f 20 22 75  OTFOUND    */ "u
c080: 6e 6b 6e 6f 77 6e 20 6f 70 65 72 61 74 69 6f 6e  nknown operation
c090: 22 2c 0a 20 20 20 20 2f 2a 20 53 51 4c 49 54 45  ",.    /* SQLITE
c0a0: 5f 46 55 4c 4c 20 20 20 20 20 20 20 20 2a 2f 20  _FULL        */ 
c0b0: 22 64 61 74 61 62 61 73 65 20 6f 72 20 64 69 73  "database or dis
c0c0: 6b 20 69 73 20 66 75 6c 6c 22 2c 0a 20 20 20 20  k is full",.    
c0d0: 2f 2a 20 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50  /* SQLITE_CANTOP
c0e0: 45 4e 20 20 20 20 2a 2f 20 22 75 6e 61 62 6c 65  EN    */ "unable
c0f0: 20 74 6f 20 6f 70 65 6e 20 64 61 74 61 62 61 73   to open databas
c100: 65 20 66 69 6c 65 22 2c 0a 20 20 20 20 2f 2a 20  e file",.    /* 
c110: 53 51 4c 49 54 45 5f 50 52 4f 54 4f 43 4f 4c 20  SQLITE_PROTOCOL 
c120: 20 20 20 2a 2f 20 22 6c 6f 63 6b 69 6e 67 20 70     */ "locking p
c130: 72 6f 74 6f 63 6f 6c 22 2c 0a 20 20 20 20 2f 2a  rotocol",.    /*
c140: 20 53 51 4c 49 54 45 5f 45 4d 50 54 59 20 20 20   SQLITE_EMPTY   
c150: 20 20 20 20 2a 2f 20 22 74 61 62 6c 65 20 63 6f      */ "table co
c160: 6e 74 61 69 6e 73 20 6e 6f 20 64 61 74 61 22 2c  ntains no data",
c170: 0a 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 53  .    /* SQLITE_S
c180: 43 48 45 4d 41 20 20 20 20 20 20 2a 2f 20 22 64  CHEMA      */ "d
c190: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 68  atabase schema h
c1a0: 61 73 20 63 68 61 6e 67 65 64 22 2c 0a 20 20 20  as changed",.   
c1b0: 20 2f 2a 20 53 51 4c 49 54 45 5f 54 4f 4f 42 49   /* SQLITE_TOOBI
c1c0: 47 20 20 20 20 20 20 2a 2f 20 22 73 74 72 69 6e  G      */ "strin
c1d0: 67 20 6f 72 20 62 6c 6f 62 20 74 6f 6f 20 62 69  g or blob too bi
c1e0: 67 22 2c 0a 20 20 20 20 2f 2a 20 53 51 4c 49 54  g",.    /* SQLIT
c1f0: 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20 20 2a 2f  E_CONSTRAINT  */
c200: 20 22 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69   "constraint fai
c210: 6c 65 64 22 2c 0a 20 20 20 20 2f 2a 20 53 51 4c  led",.    /* SQL
c220: 49 54 45 5f 4d 49 53 4d 41 54 43 48 20 20 20 20  ITE_MISMATCH    
c230: 2a 2f 20 22 64 61 74 61 74 79 70 65 20 6d 69 73  */ "datatype mis
c240: 6d 61 74 63 68 22 2c 0a 20 20 20 20 2f 2a 20 53  match",.    /* S
c250: 51 4c 49 54 45 5f 4d 49 53 55 53 45 20 20 20 20  QLITE_MISUSE    
c260: 20 20 2a 2f 20 22 6c 69 62 72 61 72 79 20 72 6f    */ "library ro
c270: 75 74 69 6e 65 20 63 61 6c 6c 65 64 20 6f 75 74  utine called out
c280: 20 6f 66 20 73 65 71 75 65 6e 63 65 22 2c 0a 20   of sequence",. 
c290: 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 4e 4f 4c     /* SQLITE_NOL
c2a0: 46 53 20 20 20 20 20 20 20 2a 2f 20 22 6c 61 72  FS       */ "lar
c2b0: 67 65 20 66 69 6c 65 20 73 75 70 70 6f 72 74 20  ge file support 
c2c0: 69 73 20 64 69 73 61 62 6c 65 64 22 2c 0a 20 20  is disabled",.  
c2d0: 20 20 2f 2a 20 53 51 4c 49 54 45 5f 41 55 54 48    /* SQLITE_AUTH
c2e0: 20 20 20 20 20 20 20 20 2a 2f 20 22 61 75 74 68          */ "auth
c2f0: 6f 72 69 7a 61 74 69 6f 6e 20 64 65 6e 69 65 64  orization denied
c300: 22 2c 0a 20 20 20 20 2f 2a 20 53 51 4c 49 54 45  ",.    /* SQLITE
c310: 5f 46 4f 52 4d 41 54 20 20 20 20 20 20 2a 2f 20  _FORMAT      */ 
c320: 22 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62  "auxiliary datab
c330: 61 73 65 20 66 6f 72 6d 61 74 20 65 72 72 6f 72  ase format error
c340: 22 2c 0a 20 20 20 20 2f 2a 20 53 51 4c 49 54 45  ",.    /* SQLITE
c350: 5f 52 41 4e 47 45 20 20 20 20 20 20 20 2a 2f 20  _RANGE       */ 
c360: 22 62 69 6e 64 20 6f 72 20 63 6f 6c 75 6d 6e 20  "bind or column 
c370: 69 6e 64 65 78 20 6f 75 74 20 6f 66 20 72 61 6e  index out of ran
c380: 67 65 22 2c 0a 20 20 20 20 2f 2a 20 53 51 4c 49  ge",.    /* SQLI
c390: 54 45 5f 4e 4f 54 41 44 42 20 20 20 20 20 20 2a  TE_NOTADB      *
c3a0: 2f 20 22 66 69 6c 65 20 69 73 20 65 6e 63 72 79  / "file is encry
c3b0: 70 74 65 64 20 6f 72 20 69 73 20 6e 6f 74 20 61  pted or is not a
c3c0: 20 64 61 74 61 62 61 73 65 22 2c 0a 20 20 7d 3b   database",.  };
c3d0: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
c3e0: 45 72 72 20 3d 20 22 75 6e 6b 6e 6f 77 6e 20 65  Err = "unknown e
c3f0: 72 72 6f 72 22 3b 0a 20 20 73 77 69 74 63 68 28  rror";.  switch(
c400: 20 72 63 20 29 7b 0a 20 20 20 20 63 61 73 65 20   rc ){.    case 
c410: 53 51 4c 49 54 45 5f 41 42 4f 52 54 5f 52 4f 4c  SQLITE_ABORT_ROL
c420: 4c 42 41 43 4b 3a 20 7b 0a 20 20 20 20 20 20 7a  LBACK: {.      z
c430: 45 72 72 20 3d 20 22 61 62 6f 72 74 20 64 75 65  Err = "abort due
c440: 20 74 6f 20 52 4f 4c 4c 42 41 43 4b 22 3b 0a 20   to ROLLBACK";. 
c450: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
c460: 7d 0a 20 20 20 20 64 65 66 61 75 6c 74 3a 20 7b  }.    default: {
c470: 0a 20 20 20 20 20 20 72 63 20 26 3d 20 30 78 66  .      rc &= 0xf
c480: 66 3b 0a 20 20 20 20 20 20 69 66 28 20 41 4c 57  f;.      if( ALW
c490: 41 59 53 28 72 63 3e 3d 30 29 20 26 26 20 72 63  AYS(rc>=0) && rc
c4a0: 3c 41 72 72 61 79 53 69 7a 65 28 61 4d 73 67 29  <ArraySize(aMsg)
c4b0: 20 26 26 20 61 4d 73 67 5b 72 63 5d 21 3d 30 20   && aMsg[rc]!=0 
c4c0: 29 7b 0a 20 20 20 20 20 20 20 20 7a 45 72 72 20  ){.        zErr 
c4d0: 3d 20 61 4d 73 67 5b 72 63 5d 3b 0a 20 20 20 20  = aMsg[rc];.    
c4e0: 20 20 7d 0a 20 20 20 20 20 20 62 72 65 61 6b 3b    }.      break;
c4f0: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74  .    }.  }.  ret
c500: 75 72 6e 20 7a 45 72 72 3b 0a 7d 0a 0a 2f 2a 0a  urn zErr;.}../*.
c510: 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20  ** This routine 
c520: 69 6d 70 6c 65 6d 65 6e 74 73 20 61 20 62 75 73  implements a bus
c530: 79 20 63 61 6c 6c 62 61 63 6b 20 74 68 61 74 20  y callback that 
c540: 73 6c 65 65 70 73 20 61 6e 64 20 74 72 69 65 73  sleeps and tries
c550: 0a 2a 2a 20 61 67 61 69 6e 20 75 6e 74 69 6c 20  .** again until 
c560: 61 20 74 69 6d 65 6f 75 74 20 76 61 6c 75 65 20  a timeout value 
c570: 69 73 20 72 65 61 63 68 65 64 2e 20 20 54 68 65  is reached.  The
c580: 20 74 69 6d 65 6f 75 74 20 76 61 6c 75 65 20 69   timeout value i
c590: 73 0a 2a 2a 20 61 6e 20 69 6e 74 65 67 65 72 20  s.** an integer 
c5a0: 6e 75 6d 62 65 72 20 6f 66 20 6d 69 6c 6c 69 73  number of millis
c5b0: 65 63 6f 6e 64 73 20 70 61 73 73 65 64 20 69 6e  econds passed in
c5c0: 20 61 73 20 74 68 65 20 66 69 72 73 74 0a 2a 2a   as the first.**
c5d0: 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 73 74   argument..*/.st
c5e0: 61 74 69 63 20 69 6e 74 20 73 71 6c 69 74 65 44  atic int sqliteD
c5f0: 65 66 61 75 6c 74 42 75 73 79 43 61 6c 6c 62 61  efaultBusyCallba
c600: 63 6b 28 0a 20 76 6f 69 64 20 2a 70 74 72 2c 20  ck(. void *ptr, 
c610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c620: 20 44 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   Database connec
c630: 74 69 6f 6e 20 2a 2f 0a 20 69 6e 74 20 63 6f 75  tion */. int cou
c640: 6e 74 20 20 20 20 20 20 20 20 20 20 20 20 20 20  nt              
c650: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74    /* Number of t
c660: 69 6d 65 73 20 74 61 62 6c 65 20 68 61 73 20 62  imes table has b
c670: 65 65 6e 20 62 75 73 79 20 2a 2f 0a 29 7b 0a 23  een busy */.){.#
c680: 69 66 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e  if SQLITE_OS_WIN
c690: 20 7c 7c 20 48 41 56 45 5f 55 53 4c 45 45 50 0a   || HAVE_USLEEP.
c6a0: 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75    static const u
c6b0: 38 20 64 65 6c 61 79 73 5b 5d 20 3d 0a 20 20 20  8 delays[] =.   
c6c0: 20 20 7b 20 31 2c 20 32 2c 20 35 2c 20 31 30 2c    { 1, 2, 5, 10,
c6d0: 20 31 35 2c 20 32 30 2c 20 32 35 2c 20 32 35 2c   15, 20, 25, 25,
c6e0: 20 20 32 35 2c 20 20 35 30 2c 20 20 35 30 2c 20    25,  50,  50, 
c6f0: 31 30 30 20 7d 3b 0a 20 20 73 74 61 74 69 63 20  100 };.  static 
c700: 63 6f 6e 73 74 20 75 38 20 74 6f 74 61 6c 73 5b  const u8 totals[
c710: 5d 20 3d 0a 20 20 20 20 20 7b 20 30 2c 20 31 2c  ] =.     { 0, 1,
c720: 20 33 2c 20 20 38 2c 20 31 38 2c 20 33 33 2c 20   3,  8, 18, 33, 
c730: 35 33 2c 20 37 38 2c 20 31 30 33 2c 20 31 32 38  53, 78, 103, 128
c740: 2c 20 31 37 38 2c 20 32 32 38 20 7d 3b 0a 23 20  , 178, 228 };.# 
c750: 64 65 66 69 6e 65 20 4e 44 45 4c 41 59 20 41 72  define NDELAY Ar
c760: 72 61 79 53 69 7a 65 28 64 65 6c 61 79 73 29 0a  raySize(delays).
c770: 20 20 73 71 6c 69 74 65 33 20 2a 64 62 20 3d 20    sqlite3 *db = 
c780: 28 73 71 6c 69 74 65 33 20 2a 29 70 74 72 3b 0a  (sqlite3 *)ptr;.
c790: 20 20 69 6e 74 20 74 69 6d 65 6f 75 74 20 3d 20    int timeout = 
c7a0: 64 62 2d 3e 62 75 73 79 54 69 6d 65 6f 75 74 3b  db->busyTimeout;
c7b0: 0a 20 20 69 6e 74 20 64 65 6c 61 79 2c 20 70 72  .  int delay, pr
c7c0: 69 6f 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  ior;..  assert( 
c7d0: 63 6f 75 6e 74 3e 3d 30 20 29 3b 0a 20 20 69 66  count>=0 );.  if
c7e0: 28 20 63 6f 75 6e 74 20 3c 20 4e 44 45 4c 41 59  ( count < NDELAY
c7f0: 20 29 7b 0a 20 20 20 20 64 65 6c 61 79 20 3d 20   ){.    delay = 
c800: 64 65 6c 61 79 73 5b 63 6f 75 6e 74 5d 3b 0a 20  delays[count];. 
c810: 20 20 20 70 72 69 6f 72 20 3d 20 74 6f 74 61 6c     prior = total
c820: 73 5b 63 6f 75 6e 74 5d 3b 0a 20 20 7d 65 6c 73  s[count];.  }els
c830: 65 7b 0a 20 20 20 20 64 65 6c 61 79 20 3d 20 64  e{.    delay = d
c840: 65 6c 61 79 73 5b 4e 44 45 4c 41 59 2d 31 5d 3b  elays[NDELAY-1];
c850: 0a 20 20 20 20 70 72 69 6f 72 20 3d 20 74 6f 74  .    prior = tot
c860: 61 6c 73 5b 4e 44 45 4c 41 59 2d 31 5d 20 2b 20  als[NDELAY-1] + 
c870: 64 65 6c 61 79 2a 28 63 6f 75 6e 74 2d 28 4e 44  delay*(count-(ND
c880: 45 4c 41 59 2d 31 29 29 3b 0a 20 20 7d 0a 20 20  ELAY-1));.  }.  
c890: 69 66 28 20 70 72 69 6f 72 20 2b 20 64 65 6c 61  if( prior + dela
c8a0: 79 20 3e 20 74 69 6d 65 6f 75 74 20 29 7b 0a 20  y > timeout ){. 
c8b0: 20 20 20 64 65 6c 61 79 20 3d 20 74 69 6d 65 6f     delay = timeo
c8c0: 75 74 20 2d 20 70 72 69 6f 72 3b 0a 20 20 20 20  ut - prior;.    
c8d0: 69 66 28 20 64 65 6c 61 79 3c 3d 30 20 29 20 72  if( delay<=0 ) r
c8e0: 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20 73  eturn 0;.  }.  s
c8f0: 71 6c 69 74 65 33 4f 73 53 6c 65 65 70 28 64 62  qlite3OsSleep(db
c900: 2d 3e 70 56 66 73 2c 20 64 65 6c 61 79 2a 31 30  ->pVfs, delay*10
c910: 30 30 29 3b 0a 20 20 72 65 74 75 72 6e 20 31 3b  00);.  return 1;
c920: 0a 23 65 6c 73 65 0a 20 20 73 71 6c 69 74 65 33  .#else.  sqlite3
c930: 20 2a 64 62 20 3d 20 28 73 71 6c 69 74 65 33 20   *db = (sqlite3 
c940: 2a 29 70 74 72 3b 0a 20 20 69 6e 74 20 74 69 6d  *)ptr;.  int tim
c950: 65 6f 75 74 20 3d 20 28 28 73 71 6c 69 74 65 33  eout = ((sqlite3
c960: 20 2a 29 70 74 72 29 2d 3e 62 75 73 79 54 69 6d   *)ptr)->busyTim
c970: 65 6f 75 74 3b 0a 20 20 69 66 28 20 28 63 6f 75  eout;.  if( (cou
c980: 6e 74 2b 31 29 2a 31 30 30 30 20 3e 20 74 69 6d  nt+1)*1000 > tim
c990: 65 6f 75 74 20 29 7b 0a 20 20 20 20 72 65 74 75  eout ){.    retu
c9a0: 72 6e 20 30 3b 0a 20 20 7d 0a 20 20 73 71 6c 69  rn 0;.  }.  sqli
c9b0: 74 65 33 4f 73 53 6c 65 65 70 28 64 62 2d 3e 70  te3OsSleep(db->p
c9c0: 56 66 73 2c 20 31 30 30 30 30 30 30 29 3b 0a 20  Vfs, 1000000);. 
c9d0: 20 72 65 74 75 72 6e 20 31 3b 0a 23 65 6e 64 69   return 1;.#endi
c9e0: 66 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b  f.}../*.** Invok
c9f0: 65 20 74 68 65 20 67 69 76 65 6e 20 62 75 73 79  e the given busy
ca00: 20 68 61 6e 64 6c 65 72 2e 0a 2a 2a 0a 2a 2a 20   handler..**.** 
ca10: 54 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20  This routine is 
ca20: 63 61 6c 6c 65 64 20 77 68 65 6e 20 61 6e 20 6f  called when an o
ca30: 70 65 72 61 74 69 6f 6e 20 66 61 69 6c 65 64 20  peration failed 
ca40: 77 69 74 68 20 61 20 6c 6f 63 6b 2e 0a 2a 2a 20  with a lock..** 
ca50: 49 66 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20  If this routine 
ca60: 72 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f  returns non-zero
ca70: 2c 20 74 68 65 20 6c 6f 63 6b 20 69 73 20 72 65  , the lock is re
ca80: 74 72 69 65 64 2e 20 20 49 66 20 69 74 0a 2a 2a  tried.  If it.**
ca90: 20 72 65 74 75 72 6e 73 20 30 2c 20 74 68 65 20   returns 0, the 
caa0: 6f 70 65 72 61 74 69 6f 6e 20 61 62 6f 72 74 73  operation aborts
cab0: 20 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45 5f   with an SQLITE_
cac0: 42 55 53 59 20 65 72 72 6f 72 2e 0a 2a 2f 0a 69  BUSY error..*/.i
cad0: 6e 74 20 73 71 6c 69 74 65 33 49 6e 76 6f 6b 65  nt sqlite3Invoke
cae0: 42 75 73 79 48 61 6e 64 6c 65 72 28 42 75 73 79  BusyHandler(Busy
caf0: 48 61 6e 64 6c 65 72 20 2a 70 29 7b 0a 20 20 69  Handler *p){.  i
cb00: 6e 74 20 72 63 3b 0a 20 20 69 66 28 20 4e 45 56  nt rc;.  if( NEV
cb10: 45 52 28 70 3d 3d 30 29 20 7c 7c 20 70 2d 3e 78  ER(p==0) || p->x
cb20: 46 75 6e 63 3d 3d 30 20 7c 7c 20 70 2d 3e 6e 42  Func==0 || p->nB
cb30: 75 73 79 3c 30 20 29 20 72 65 74 75 72 6e 20 30  usy<0 ) return 0
cb40: 3b 0a 20 20 72 63 20 3d 20 70 2d 3e 78 46 75 6e  ;.  rc = p->xFun
cb50: 63 28 70 2d 3e 70 41 72 67 2c 20 70 2d 3e 6e 42  c(p->pArg, p->nB
cb60: 75 73 79 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d  usy);.  if( rc==
cb70: 30 20 29 7b 0a 20 20 20 20 70 2d 3e 6e 42 75 73  0 ){.    p->nBus
cb80: 79 20 3d 20 2d 31 3b 0a 20 20 7d 65 6c 73 65 7b  y = -1;.  }else{
cb90: 0a 20 20 20 20 70 2d 3e 6e 42 75 73 79 2b 2b 3b  .    p->nBusy++;
cba0: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 72 63  .  }.  return rc
cbb0: 3b 20 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73  ; .}../*.** This
cbc0: 20 72 6f 75 74 69 6e 65 20 73 65 74 73 20 74 68   routine sets th
cbd0: 65 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b 20  e busy callback 
cbe0: 66 6f 72 20 61 6e 20 53 71 6c 69 74 65 20 64 61  for an Sqlite da
cbf0: 74 61 62 61 73 65 20 74 6f 20 74 68 65 0a 2a 2a  tabase to the.**
cc00: 20 67 69 76 65 6e 20 63 61 6c 6c 62 61 63 6b 20   given callback 
cc10: 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 74 68  function with th
cc20: 65 20 67 69 76 65 6e 20 61 72 67 75 6d 65 6e 74  e given argument
cc30: 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
cc40: 5f 62 75 73 79 5f 68 61 6e 64 6c 65 72 28 0a 20  _busy_handler(. 
cc50: 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 0a 20 20   sqlite3 *db,.  
cc60: 69 6e 74 20 28 2a 78 42 75 73 79 29 28 76 6f 69  int (*xBusy)(voi
cc70: 64 2a 2c 69 6e 74 29 2c 0a 20 20 76 6f 69 64 20  d*,int),.  void 
cc80: 2a 70 41 72 67 0a 29 7b 0a 23 69 66 64 65 66 20  *pArg.){.#ifdef 
cc90: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41 50  SQLITE_ENABLE_AP
cca0: 49 5f 41 52 4d 4f 52 0a 20 20 69 66 28 20 21 73  I_ARMOR.  if( !s
ccb0: 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63  qlite3SafetyChec
ccc0: 6b 4f 6b 28 64 62 29 20 29 20 72 65 74 75 72 6e  kOk(db) ) return
ccd0: 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42   SQLITE_MISUSE_B
cce0: 4b 50 54 3b 0a 23 65 6e 64 69 66 0a 20 20 73 71  KPT;.#endif.  sq
ccf0: 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65  lite3_mutex_ente
cd00: 72 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20  r(db->mutex);.  
cd10: 64 62 2d 3e 62 75 73 79 48 61 6e 64 6c 65 72 2e  db->busyHandler.
cd20: 78 46 75 6e 63 20 3d 20 78 42 75 73 79 3b 0a 20  xFunc = xBusy;. 
cd30: 20 64 62 2d 3e 62 75 73 79 48 61 6e 64 6c 65 72   db->busyHandler
cd40: 2e 70 41 72 67 20 3d 20 70 41 72 67 3b 0a 20 20  .pArg = pArg;.  
cd50: 64 62 2d 3e 62 75 73 79 48 61 6e 64 6c 65 72 2e  db->busyHandler.
cd60: 6e 42 75 73 79 20 3d 20 30 3b 0a 20 20 64 62 2d  nBusy = 0;.  db-
cd70: 3e 62 75 73 79 54 69 6d 65 6f 75 74 20 3d 20 30  >busyTimeout = 0
cd80: 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  ;.  sqlite3_mute
cd90: 78 5f 6c 65 61 76 65 28 64 62 2d 3e 6d 75 74 65  x_leave(db->mute
cda0: 78 29 3b 0a 20 20 72 65 74 75 72 6e 20 53 51 4c  x);.  return SQL
cdb0: 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 23 69 66 6e 64  ITE_OK;.}..#ifnd
cdc0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ef SQLITE_OMIT_P
cdd0: 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b  ROGRESS_CALLBACK
cde0: 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74  ./*.** This rout
cdf0: 69 6e 65 20 73 65 74 73 20 74 68 65 20 70 72 6f  ine sets the pro
ce00: 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 66  gress callback f
ce10: 6f 72 20 61 6e 20 53 71 6c 69 74 65 20 64 61 74  or an Sqlite dat
ce20: 61 62 61 73 65 20 74 6f 20 74 68 65 0a 2a 2a 20  abase to the.** 
ce30: 67 69 76 65 6e 20 63 61 6c 6c 62 61 63 6b 20 66  given callback f
ce40: 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 74 68 65  unction with the
ce50: 20 67 69 76 65 6e 20 61 72 67 75 6d 65 6e 74 2e   given argument.
ce60: 20 54 68 65 20 70 72 6f 67 72 65 73 73 20 63 61   The progress ca
ce70: 6c 6c 62 61 63 6b 20 77 69 6c 6c 0a 2a 2a 20 62  llback will.** b
ce80: 65 20 69 6e 76 6f 6b 65 64 20 65 76 65 72 79 20  e invoked every 
ce90: 6e 4f 70 73 20 6f 70 63 6f 64 65 73 2e 0a 2a 2f  nOps opcodes..*/
cea0: 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 5f 70 72  .void sqlite3_pr
ceb0: 6f 67 72 65 73 73 5f 68 61 6e 64 6c 65 72 28 0a  ogress_handler(.
cec0: 20 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 0a    sqlite3 *db, .
ced0: 20 20 69 6e 74 20 6e 4f 70 73 2c 0a 20 20 69 6e    int nOps,.  in
cee0: 74 20 28 2a 78 50 72 6f 67 72 65 73 73 29 28 76  t (*xProgress)(v
cef0: 6f 69 64 2a 29 2c 20 0a 20 20 76 6f 69 64 20 2a  oid*), .  void *
cf00: 70 41 72 67 0a 29 7b 0a 23 69 66 64 65 66 20 53  pArg.){.#ifdef S
cf10: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41 50 49  QLITE_ENABLE_API
cf20: 5f 41 52 4d 4f 52 0a 20 20 69 66 28 20 21 73 71  _ARMOR.  if( !sq
cf30: 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b  lite3SafetyCheck
cf40: 4f 6b 28 64 62 29 20 29 7b 0a 20 20 20 20 28 76  Ok(db) ){.    (v
cf50: 6f 69 64 29 53 51 4c 49 54 45 5f 4d 49 53 55 53  oid)SQLITE_MISUS
cf60: 45 5f 42 4b 50 54 3b 0a 20 20 20 20 72 65 74 75  E_BKPT;.    retu
cf70: 72 6e 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20  rn;.  }.#endif. 
cf80: 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65   sqlite3_mutex_e
cf90: 6e 74 65 72 28 64 62 2d 3e 6d 75 74 65 78 29 3b  nter(db->mutex);
cfa0: 0a 20 20 69 66 28 20 6e 4f 70 73 3e 30 20 29 7b  .  if( nOps>0 ){
cfb0: 0a 20 20 20 20 64 62 2d 3e 78 50 72 6f 67 72 65  .    db->xProgre
cfc0: 73 73 20 3d 20 78 50 72 6f 67 72 65 73 73 3b 0a  ss = xProgress;.
cfd0: 20 20 20 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73      db->nProgres
cfe0: 73 4f 70 73 20 3d 20 28 75 6e 73 69 67 6e 65 64  sOps = (unsigned
cff0: 29 6e 4f 70 73 3b 0a 20 20 20 20 64 62 2d 3e 70  )nOps;.    db->p
d000: 50 72 6f 67 72 65 73 73 41 72 67 20 3d 20 70 41  ProgressArg = pA
d010: 72 67 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  rg;.  }else{.   
d020: 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 20 3d   db->xProgress =
d030: 20 30 3b 0a 20 20 20 20 64 62 2d 3e 6e 50 72 6f   0;.    db->nPro
d040: 67 72 65 73 73 4f 70 73 20 3d 20 30 3b 0a 20 20  gressOps = 0;.  
d050: 20 20 64 62 2d 3e 70 50 72 6f 67 72 65 73 73 41    db->pProgressA
d060: 72 67 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 73 71  rg = 0;.  }.  sq
d070: 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76  lite3_mutex_leav
d080: 65 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 7d 0a  e(db->mutex);.}.
d090: 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 54  #endif.../*.** T
d0a0: 68 69 73 20 72 6f 75 74 69 6e 65 20 69 6e 73 74  his routine inst
d0b0: 61 6c 6c 73 20 61 20 64 65 66 61 75 6c 74 20 62  alls a default b
d0c0: 75 73 79 20 68 61 6e 64 6c 65 72 20 74 68 61 74  usy handler that
d0d0: 20 77 61 69 74 73 20 66 6f 72 20 74 68 65 0a 2a   waits for the.*
d0e0: 2a 20 73 70 65 63 69 66 69 65 64 20 6e 75 6d 62  * specified numb
d0f0: 65 72 20 6f 66 20 6d 69 6c 6c 69 73 65 63 6f 6e  er of millisecon
d100: 64 73 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e  ds before return
d110: 69 6e 67 20 30 2e 0a 2a 2f 0a 69 6e 74 20 73 71  ing 0..*/.int sq
d120: 6c 69 74 65 33 5f 62 75 73 79 5f 74 69 6d 65 6f  lite3_busy_timeo
d130: 75 74 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  ut(sqlite3 *db, 
d140: 69 6e 74 20 6d 73 29 7b 0a 23 69 66 64 65 66 20  int ms){.#ifdef 
d150: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41 50  SQLITE_ENABLE_AP
d160: 49 5f 41 52 4d 4f 52 0a 20 20 69 66 28 20 21 73  I_ARMOR.  if( !s
d170: 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63  qlite3SafetyChec
d180: 6b 4f 6b 28 64 62 29 20 29 20 72 65 74 75 72 6e  kOk(db) ) return
d190: 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42   SQLITE_MISUSE_B
d1a0: 4b 50 54 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66  KPT;.#endif.  if
d1b0: 28 20 6d 73 3e 30 20 29 7b 0a 20 20 20 20 73 71  ( ms>0 ){.    sq
d1c0: 6c 69 74 65 33 5f 62 75 73 79 5f 68 61 6e 64 6c  lite3_busy_handl
d1d0: 65 72 28 64 62 2c 20 73 71 6c 69 74 65 44 65 66  er(db, sqliteDef
d1e0: 61 75 6c 74 42 75 73 79 43 61 6c 6c 62 61 63 6b  aultBusyCallback
d1f0: 2c 20 28 76 6f 69 64 2a 29 64 62 29 3b 0a 20 20  , (void*)db);.  
d200: 20 20 64 62 2d 3e 62 75 73 79 54 69 6d 65 6f 75    db->busyTimeou
d210: 74 20 3d 20 6d 73 3b 0a 20 20 7d 65 6c 73 65 7b  t = ms;.  }else{
d220: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 62 75 73  .    sqlite3_bus
d230: 79 5f 68 61 6e 64 6c 65 72 28 64 62 2c 20 30 2c  y_handler(db, 0,
d240: 20 30 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72   0);.  }.  retur
d250: 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a  n SQLITE_OK;.}..
d260: 2f 2a 0a 2a 2a 20 43 61 75 73 65 20 61 6e 79 20  /*.** Cause any 
d270: 70 65 6e 64 69 6e 67 20 6f 70 65 72 61 74 69 6f  pending operatio
d280: 6e 20 74 6f 20 73 74 6f 70 20 61 74 20 69 74 73  n to stop at its
d290: 20 65 61 72 6c 69 65 73 74 20 6f 70 70 6f 72 74   earliest opport
d2a0: 75 6e 69 74 79 2e 0a 2a 2f 0a 76 6f 69 64 20 73  unity..*/.void s
d2b0: 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
d2c0: 28 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a 23  (sqlite3 *db){.#
d2d0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
d2e0: 42 4c 45 5f 41 50 49 5f 41 52 4d 4f 52 0a 20 20  BLE_API_ARMOR.  
d2f0: 69 66 28 20 21 73 71 6c 69 74 65 33 53 61 66 65  if( !sqlite3Safe
d300: 74 79 43 68 65 63 6b 4f 6b 28 64 62 29 20 29 7b  tyCheckOk(db) ){
d310: 0a 20 20 20 20 28 76 6f 69 64 29 53 51 4c 49 54  .    (void)SQLIT
d320: 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54 3b 0a 20  E_MISUSE_BKPT;. 
d330: 20 20 20 72 65 74 75 72 6e 3b 0a 20 20 7d 0a 23     return;.  }.#
d340: 65 6e 64 69 66 0a 20 20 64 62 2d 3e 75 31 2e 69  endif.  db->u1.i
d350: 73 49 6e 74 65 72 72 75 70 74 65 64 20 3d 20 31  sInterrupted = 1
d360: 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73  ;.}.../*.** This
d370: 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 65 78 61   function is exa
d380: 63 74 6c 79 20 74 68 65 20 73 61 6d 65 20 61 73  ctly the same as
d390: 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f   sqlite3_create_
d3a0: 66 75 6e 63 74 69 6f 6e 28 29 2c 20 65 78 63 65  function(), exce
d3b0: 70 74 0a 2a 2a 20 74 68 61 74 20 69 74 20 69 73  pt.** that it is
d3c0: 20 64 65 73 69 67 6e 65 64 20 74 6f 20 62 65 20   designed to be 
d3d0: 63 61 6c 6c 65 64 20 62 79 20 69 6e 74 65 72 6e  called by intern
d3e0: 61 6c 20 63 6f 64 65 2e 20 54 68 65 20 64 69 66  al code. The dif
d3f0: 66 65 72 65 6e 63 65 20 69 73 0a 2a 2a 20 74 68  ference is.** th
d400: 61 74 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29  at if a malloc()
d410: 20 66 61 69 6c 73 20 69 6e 20 73 71 6c 69 74 65   fails in sqlite
d420: 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  3_create_functio
d430: 6e 28 29 2c 20 61 6e 20 65 72 72 6f 72 20 63 6f  n(), an error co
d440: 64 65 0a 2a 2a 20 69 73 20 72 65 74 75 72 6e 65  de.** is returne
d450: 64 20 61 6e 64 20 74 68 65 20 6d 61 6c 6c 6f 63  d and the malloc
d460: 46 61 69 6c 65 64 20 66 6c 61 67 20 63 6c 65 61  Failed flag clea
d470: 72 65 64 2e 20 0a 2a 2f 0a 69 6e 74 20 73 71 6c  red. .*/.int sql
d480: 69 74 65 33 43 72 65 61 74 65 46 75 6e 63 28 0a  ite3CreateFunc(.
d490: 20 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 0a 20    sqlite3 *db,. 
d4a0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 75   const char *zFu
d4b0: 6e 63 74 69 6f 6e 4e 61 6d 65 2c 0a 20 20 69 6e  nctionName,.  in
d4c0: 74 20 6e 41 72 67 2c 0a 20 20 69 6e 74 20 65 6e  t nArg,.  int en
d4d0: 63 2c 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72  c,.  void *pUser
d4e0: 44 61 74 61 2c 0a 20 20 76 6f 69 64 20 28 2a 78  Data,.  void (*x
d4f0: 46 75 6e 63 29 28 73 71 6c 69 74 65 33 5f 63 6f  Func)(sqlite3_co
d500: 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74  ntext*,int,sqlit
d510: 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 0a 20 20  e3_value **),.  
d520: 76 6f 69 64 20 28 2a 78 53 74 65 70 29 28 73 71  void (*xStep)(sq
d530: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69  lite3_context*,i
d540: 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt,sqlite3_value
d550: 20 2a 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a 78   **),.  void (*x
d560: 46 69 6e 61 6c 29 28 73 71 6c 69 74 65 33 5f 63  Final)(sqlite3_c
d570: 6f 6e 74 65 78 74 2a 29 2c 0a 20 20 46 75 6e 63  ontext*),.  Func
d580: 44 65 73 74 72 75 63 74 6f 72 20 2a 70 44 65 73  Destructor *pDes
d590: 74 72 75 63 74 6f 72 0a 29 7b 0a 20 20 46 75 6e  tructor.){.  Fun
d5a0: 63 44 65 66 20 2a 70 3b 0a 20 20 69 6e 74 20 6e  cDef *p;.  int n
d5b0: 4e 61 6d 65 3b 0a 20 20 69 6e 74 20 65 78 74 72  Name;.  int extr
d5c0: 61 46 6c 61 67 73 3b 0a 0a 20 20 61 73 73 65 72  aFlags;..  asser
d5d0: 74 28 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  t( sqlite3_mutex
d5e0: 5f 68 65 6c 64 28 64 62 2d 3e 6d 75 74 65 78 29  _held(db->mutex)
d5f0: 20 29 3b 0a 20 20 69 66 28 20 7a 46 75 6e 63 74   );.  if( zFunct
d600: 69 6f 6e 4e 61 6d 65 3d 3d 30 20 7c 7c 0a 20 20  ionName==0 ||.  
d610: 20 20 20 20 28 78 46 75 6e 63 20 26 26 20 28 78      (xFunc && (x
d620: 46 69 6e 61 6c 20 7c 7c 20 78 53 74 65 70 29 29  Final || xStep))
d630: 20 7c 7c 20 0a 20 20 20 20 20 20 28 21 78 46 75   || .      (!xFu
d640: 6e 63 20 26 26 20 28 78 46 69 6e 61 6c 20 26 26  nc && (xFinal &&
d650: 20 21 78 53 74 65 70 29 29 20 7c 7c 0a 20 20 20   !xStep)) ||.   
d660: 20 20 20 28 21 78 46 75 6e 63 20 26 26 20 28 21     (!xFunc && (!
d670: 78 46 69 6e 61 6c 20 26 26 20 78 53 74 65 70 29  xFinal && xStep)
d680: 29 20 7c 7c 0a 20 20 20 20 20 20 28 6e 41 72 67  ) ||.      (nArg
d690: 3c 2d 31 20 7c 7c 20 6e 41 72 67 3e 53 51 4c 49  <-1 || nArg>SQLI
d6a0: 54 45 5f 4d 41 58 5f 46 55 4e 43 54 49 4f 4e 5f  TE_MAX_FUNCTION_
d6b0: 41 52 47 29 20 7c 7c 0a 20 20 20 20 20 20 28 32  ARG) ||.      (2
d6c0: 35 35 3c 28 6e 4e 61 6d 65 20 3d 20 73 71 6c 69  55<(nName = sqli
d6d0: 74 65 33 53 74 72 6c 65 6e 33 30 28 20 7a 46 75  te3Strlen30( zFu
d6e0: 6e 63 74 69 6f 6e 4e 61 6d 65 29 29 29 20 29 7b  nctionName))) ){
d6f0: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
d700: 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54 3b 0a  TE_MISUSE_BKPT;.
d710: 20 20 7d 0a 0a 20 20 61 73 73 65 72 74 28 20 53    }..  assert( S
d720: 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
d730: 41 4e 54 3d 3d 53 51 4c 49 54 45 5f 44 45 54 45  ANT==SQLITE_DETE
d740: 52 4d 49 4e 49 53 54 49 43 20 29 3b 0a 20 20 65  RMINISTIC );.  e
d750: 78 74 72 61 46 6c 61 67 73 20 3d 20 65 6e 63 20  xtraFlags = enc 
d760: 26 20 20 53 51 4c 49 54 45 5f 44 45 54 45 52 4d  &  SQLITE_DETERM
d770: 49 4e 49 53 54 49 43 3b 0a 20 20 65 6e 63 20 26  INISTIC;.  enc &
d780: 3d 20 28 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45  = (SQLITE_FUNC_E
d790: 4e 43 4d 41 53 4b 7c 53 51 4c 49 54 45 5f 41 4e  NCMASK|SQLITE_AN
d7a0: 59 29 3b 0a 20 20 0a 23 69 66 6e 64 65 66 20 53  Y);.  .#ifndef S
d7b0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36  QLITE_OMIT_UTF16
d7c0: 0a 20 20 2f 2a 20 49 66 20 53 51 4c 49 54 45 5f  .  /* If SQLITE_
d7d0: 55 54 46 31 36 20 69 73 20 73 70 65 63 69 66 69  UTF16 is specifi
d7e0: 65 64 20 61 73 20 74 68 65 20 65 6e 63 6f 64 69  ed as the encodi
d7f0: 6e 67 20 74 79 70 65 2c 20 74 72 61 6e 73 66 6f  ng type, transfo
d800: 72 6d 20 74 68 69 73 0a 20 20 2a 2a 20 74 6f 20  rm this.  ** to 
d810: 6f 6e 65 20 6f 66 20 53 51 4c 49 54 45 5f 55 54  one of SQLITE_UT
d820: 46 31 36 4c 45 20 6f 72 20 53 51 4c 49 54 45 5f  F16LE or SQLITE_
d830: 55 54 46 31 36 42 45 20 75 73 69 6e 67 20 74 68  UTF16BE using th
d840: 65 0a 20 20 2a 2a 20 53 51 4c 49 54 45 5f 55 54  e.  ** SQLITE_UT
d850: 46 31 36 4e 41 54 49 56 45 20 6d 61 63 72 6f 2e  F16NATIVE macro.
d860: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 20 69 73   SQLITE_UTF16 is
d870: 20 6e 6f 74 20 75 73 65 64 20 69 6e 74 65 72 6e   not used intern
d880: 61 6c 6c 79 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  ally..  **.  ** 
d890: 49 66 20 53 51 4c 49 54 45 5f 41 4e 59 20 69 73  If SQLITE_ANY is
d8a0: 20 73 70 65 63 69 66 69 65 64 2c 20 61 64 64 20   specified, add 
d8b0: 74 68 72 65 65 20 76 65 72 73 69 6f 6e 73 20 6f  three versions o
d8c0: 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 0a 20  f the function. 
d8d0: 20 2a 2a 20 74 6f 20 74 68 65 20 68 61 73 68 20   ** to the hash 
d8e0: 74 61 62 6c 65 2e 0a 20 20 2a 2f 0a 20 20 69 66  table..  */.  if
d8f0: 28 20 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54  ( enc==SQLITE_UT
d900: 46 31 36 20 29 7b 0a 20 20 20 20 65 6e 63 20 3d  F16 ){.    enc =
d910: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54   SQLITE_UTF16NAT
d920: 49 56 45 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  IVE;.  }else if(
d930: 20 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 41 4e 59   enc==SQLITE_ANY
d940: 20 29 7b 0a 20 20 20 20 69 6e 74 20 72 63 3b 0a   ){.    int rc;.
d950: 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
d960: 43 72 65 61 74 65 46 75 6e 63 28 64 62 2c 20 7a  CreateFunc(db, z
d970: 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 2c 20 6e 41  FunctionName, nA
d980: 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c  rg, SQLITE_UTF8|
d990: 65 78 74 72 61 46 6c 61 67 73 2c 0a 20 20 20 20  extraFlags,.    
d9a0: 20 20 20 20 20 70 55 73 65 72 44 61 74 61 2c 20       pUserData, 
d9b0: 78 46 75 6e 63 2c 20 78 53 74 65 70 2c 20 78 46  xFunc, xStep, xF
d9c0: 69 6e 61 6c 2c 20 70 44 65 73 74 72 75 63 74 6f  inal, pDestructo
d9d0: 72 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d  r);.    if( rc==
d9e0: 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
d9f0: 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 43     rc = sqlite3C
da00: 72 65 61 74 65 46 75 6e 63 28 64 62 2c 20 7a 46  reateFunc(db, zF
da10: 75 6e 63 74 69 6f 6e 4e 61 6d 65 2c 20 6e 41 72  unctionName, nAr
da20: 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c  g, SQLITE_UTF16L
da30: 45 7c 65 78 74 72 61 46 6c 61 67 73 2c 0a 20 20  E|extraFlags,.  
da40: 20 20 20 20 20 20 20 20 70 55 73 65 72 44 61 74          pUserDat
da50: 61 2c 20 78 46 75 6e 63 2c 20 78 53 74 65 70 2c  a, xFunc, xStep,
da60: 20 78 46 69 6e 61 6c 2c 20 70 44 65 73 74 72 75   xFinal, pDestru
da70: 63 74 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20  ctor);.    }.   
da80: 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
da90: 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 65 74 75  OK ){.      retu
daa0: 72 6e 20 72 63 3b 0a 20 20 20 20 7d 0a 20 20 20  rn rc;.    }.   
dab0: 20 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54   enc = SQLITE_UT
dac0: 46 31 36 42 45 3b 0a 20 20 7d 0a 23 65 6c 73 65  F16BE;.  }.#else
dad0: 0a 20 20 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f  .  enc = SQLITE_
dae0: 55 54 46 38 3b 0a 23 65 6e 64 69 66 0a 20 20 0a  UTF8;.#endif.  .
daf0: 20 20 2f 2a 20 43 68 65 63 6b 20 69 66 20 61 6e    /* Check if an
db00: 20 65 78 69 73 74 69 6e 67 20 66 75 6e 63 74 69   existing functi
db10: 6f 6e 20 69 73 20 62 65 69 6e 67 20 6f 76 65 72  on is being over
db20: 72 69 64 64 65 6e 20 6f 72 20 64 65 6c 65 74 65  ridden or delete
db30: 64 2e 20 49 66 20 73 6f 2c 0a 20 20 2a 2a 20 61  d. If so,.  ** a
db40: 6e 64 20 74 68 65 72 65 20 61 72 65 20 61 63 74  nd there are act
db50: 69 76 65 20 56 4d 73 2c 20 74 68 65 6e 20 72 65  ive VMs, then re
db60: 74 75 72 6e 20 53 51 4c 49 54 45 5f 42 55 53 59  turn SQLITE_BUSY
db70: 2e 20 49 66 20 61 20 66 75 6e 63 74 69 6f 6e 0a  . If a function.
db80: 20 20 2a 2a 20 69 73 20 62 65 69 6e 67 20 6f 76    ** is being ov
db90: 65 72 72 69 64 64 65 6e 2f 64 65 6c 65 74 65 64  erridden/deleted
dba0: 20 62 75 74 20 74 68 65 72 65 20 61 72 65 20 6e   but there are n
dbb0: 6f 20 61 63 74 69 76 65 20 56 4d 73 2c 20 61 6c  o active VMs, al
dbc0: 6c 6f 77 20 74 68 65 0a 20 20 2a 2a 20 6f 70 65  low the.  ** ope
dbd0: 72 61 74 69 6f 6e 20 74 6f 20 63 6f 6e 74 69 6e  ration to contin
dbe0: 75 65 20 62 75 74 20 69 6e 76 61 6c 69 64 61 74  ue but invalidat
dbf0: 65 20 61 6c 6c 20 70 72 65 63 6f 6d 70 69 6c 65  e all precompile
dc00: 64 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 20 20  d statements..  
dc10: 2a 2f 0a 20 20 70 20 3d 20 73 71 6c 69 74 65 33  */.  p = sqlite3
dc20: 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28 64 62 2c  FindFunction(db,
dc30: 20 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 2c 20   zFunctionName, 
dc40: 6e 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 28 75 38  nName, nArg, (u8
dc50: 29 65 6e 63 2c 20 30 29 3b 0a 20 20 69 66 28 20  )enc, 0);.  if( 
dc60: 70 20 26 26 20 28 70 2d 3e 66 75 6e 63 46 6c 61  p && (p->funcFla
dc70: 67 73 20 26 20 53 51 4c 49 54 45 5f 46 55 4e 43  gs & SQLITE_FUNC
dc80: 5f 45 4e 43 4d 41 53 4b 29 3d 3d 65 6e 63 20 26  _ENCMASK)==enc &
dc90: 26 20 70 2d 3e 6e 41 72 67 3d 3d 6e 41 72 67 20  & p->nArg==nArg 
dca0: 29 7b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 6e  ){.    if( db->n
dcb0: 56 64 62 65 41 63 74 69 76 65 20 29 7b 0a 20 20  VdbeActive ){.  
dcc0: 20 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72      sqlite3Error
dcd0: 57 69 74 68 4d 73 67 28 64 62 2c 20 53 51 4c 49  WithMsg(db, SQLI
dce0: 54 45 5f 42 55 53 59 2c 20 0a 20 20 20 20 20 20  TE_BUSY, .      
dcf0: 20 20 22 75 6e 61 62 6c 65 20 74 6f 20 64 65 6c    "unable to del
dd00: 65 74 65 2f 6d 6f 64 69 66 79 20 75 73 65 72 2d  ete/modify user-
dd10: 66 75 6e 63 74 69 6f 6e 20 64 75 65 20 74 6f 20  function due to 
dd20: 61 63 74 69 76 65 20 73 74 61 74 65 6d 65 6e 74  active statement
dd30: 73 22 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  s");.      asser
dd40: 74 28 20 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61  t( !db->mallocFa
dd50: 69 6c 65 64 20 29 3b 0a 20 20 20 20 20 20 72 65  iled );.      re
dd60: 74 75 72 6e 20 53 51 4c 49 54 45 5f 42 55 53 59  turn SQLITE_BUSY
dd70: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
dd80: 20 20 20 73 71 6c 69 74 65 33 45 78 70 69 72 65     sqlite3Expire
dd90: 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e  PreparedStatemen
dda0: 74 73 28 64 62 29 3b 0a 20 20 20 20 7d 0a 20 20  ts(db);.    }.  
ddb0: 7d 0a 0a 20 20 70 20 3d 20 73 71 6c 69 74 65 33  }..  p = sqlite3
ddc0: 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28 64 62 2c  FindFunction(db,
ddd0: 20 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 2c 20   zFunctionName, 
dde0: 6e 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 28 75 38  nName, nArg, (u8
ddf0: 29 65 6e 63 2c 20 31 29 3b 0a 20 20 61 73 73 65  )enc, 1);.  asse
de00: 72 74 28 70 20 7c 7c 20 64 62 2d 3e 6d 61 6c 6c  rt(p || db->mall
de10: 6f 63 46 61 69 6c 65 64 29 3b 0a 20 20 69 66 28  ocFailed);.  if(
de20: 20 21 70 20 29 7b 0a 20 20 20 20 72 65 74 75 72   !p ){.    retur
de30: 6e 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a  n SQLITE_NOMEM;.
de40: 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 61 6e 20    }..  /* If an 
de50: 6f 6c 64 65 72 20 76 65 72 73 69 6f 6e 20 6f 66  older version of
de60: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 77 69   the function wi
de70: 74 68 20 61 20 63 6f 6e 66 69 67 75 72 65 64 20  th a configured 
de80: 64 65 73 74 72 75 63 74 6f 72 20 69 73 0a 20 20  destructor is.  
de90: 2a 2a 20 62 65 69 6e 67 20 72 65 70 6c 61 63 65  ** being replace
dea0: 64 20 69 6e 76 6f 6b 65 20 74 68 65 20 64 65 73  d invoke the des
deb0: 74 72 75 63 74 6f 72 20 66 75 6e 63 74 69 6f 6e  tructor function
dec0: 20 68 65 72 65 2e 20 2a 2f 0a 20 20 66 75 6e 63   here. */.  func
ded0: 74 69 6f 6e 44 65 73 74 72 6f 79 28 64 62 2c 20  tionDestroy(db, 
dee0: 70 29 3b 0a 0a 20 20 69 66 28 20 70 44 65 73 74  p);..  if( pDest
def0: 72 75 63 74 6f 72 20 29 7b 0a 20 20 20 20 70 44  ructor ){.    pD
df00: 65 73 74 72 75 63 74 6f 72 2d 3e 6e 52 65 66 2b  estructor->nRef+
df10: 2b 3b 0a 20 20 7d 0a 20 20 70 2d 3e 70 44 65 73  +;.  }.  p->pDes
df20: 74 72 75 63 74 6f 72 20 3d 20 70 44 65 73 74 72  tructor = pDestr
df30: 75 63 74 6f 72 3b 0a 20 20 70 2d 3e 66 75 6e 63  uctor;.  p->func
df40: 46 6c 61 67 73 20 3d 20 28 70 2d 3e 66 75 6e 63  Flags = (p->func
df50: 46 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 46  Flags & SQLITE_F
df60: 55 4e 43 5f 45 4e 43 4d 41 53 4b 29 20 7c 20 65  UNC_ENCMASK) | e
df70: 78 74 72 61 46 6c 61 67 73 3b 0a 20 20 74 65 73  xtraFlags;.  tes
df80: 74 63 61 73 65 28 20 70 2d 3e 66 75 6e 63 46 6c  tcase( p->funcFl
df90: 61 67 73 20 26 20 53 51 4c 49 54 45 5f 44 45 54  ags & SQLITE_DET
dfa0: 45 52 4d 49 4e 49 53 54 49 43 20 29 3b 0a 20 20  ERMINISTIC );.  
dfb0: 70 2d 3e 78 46 75 6e 63 20 3d 20 78 46 75 6e 63  p->xFunc = xFunc
dfc0: 3b 0a 20 20 70 2d 3e 78 53 74 65 70 20 3d 20 78  ;.  p->xStep = x
dfd0: 53 74 65 70 3b 0a 20 20 70 2d 3e 78 46 69 6e 61  Step;.  p->xFina
dfe0: 6c 69 7a 65 20 3d 20 78 46 69 6e 61 6c 3b 0a 20  lize = xFinal;. 
dff0: 20 70 2d 3e 70 55 73 65 72 44 61 74 61 20 3d 20   p->pUserData = 
e000: 70 55 73 65 72 44 61 74 61 3b 0a 20 20 70 2d 3e  pUserData;.  p->
e010: 6e 41 72 67 20 3d 20 28 75 31 36 29 6e 41 72 67  nArg = (u16)nArg
e020: 3b 0a 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54  ;.  return SQLIT
e030: 45 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43  E_OK;.}../*.** C
e040: 72 65 61 74 65 20 6e 65 77 20 75 73 65 72 20 66  reate new user f
e050: 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2f 0a 69 6e 74  unctions..*/.int
e060: 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f   sqlite3_create_
e070: 66 75 6e 63 74 69 6f 6e 28 0a 20 20 73 71 6c 69  function(.  sqli
e080: 74 65 33 20 2a 64 62 2c 0a 20 20 63 6f 6e 73 74  te3 *db,.  const
e090: 20 63 68 61 72 20 2a 7a 46 75 6e 63 2c 0a 20 20   char *zFunc,.  
e0a0: 69 6e 74 20 6e 41 72 67 2c 0a 20 20 69 6e 74 20  int nArg,.  int 
e0b0: 65 6e 63 2c 0a 20 20 76 6f 69 64 20 2a 70 2c 0a  enc,.  void *p,.
e0c0: 20 20 76 6f 69 64 20 28 2a 78 46 75 6e 63 29 28    void (*xFunc)(
e0d0: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
e0e0: 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c  ,int,sqlite3_val
e0f0: 75 65 20 2a 2a 29 2c 0a 20 20 76 6f 69 64 20 28  ue **),.  void (
e100: 2a 78 53 74 65 70 29 28 73 71 6c 69 74 65 33 5f  *xStep)(sqlite3_
e110: 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c  context*,int,sql
e120: 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 0a  ite3_value **),.
e130: 20 20 76 6f 69 64 20 28 2a 78 46 69 6e 61 6c 29    void (*xFinal)
e140: 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
e150: 2a 29 0a 29 7b 0a 20 20 72 65 74 75 72 6e 20 73  *).){.  return s
e160: 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75  qlite3_create_fu
e170: 6e 63 74 69 6f 6e 5f 76 32 28 64 62 2c 20 7a 46  nction_v2(db, zF
e180: 75 6e 63 2c 20 6e 41 72 67 2c 20 65 6e 63 2c 20  unc, nArg, enc, 
e190: 70 2c 20 78 46 75 6e 63 2c 20 78 53 74 65 70 2c  p, xFunc, xStep,
e1a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e1b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e1c0: 20 20 20 20 20 78 46 69 6e 61 6c 2c 20 30 29 3b       xFinal, 0);
e1d0: 0a 7d 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f  .}..int sqlite3_
e1e0: 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f  create_function_
e1f0: 76 32 28 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  v2(.  sqlite3 *d
e200: 62 2c 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  b,.  const char 
e210: 2a 7a 46 75 6e 63 2c 0a 20 20 69 6e 74 20 6e 41  *zFunc,.  int nA
e220: 72 67 2c 0a 20 20 69 6e 74 20 65 6e 63 2c 0a 20  rg,.  int enc,. 
e230: 20 76 6f 69 64 20 2a 70 2c 0a 20 20 76 6f 69 64   void *p,.  void
e240: 20 28 2a 78 46 75 6e 63 29 28 73 71 6c 69 74 65   (*xFunc)(sqlite
e250: 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73  3_context*,int,s
e260: 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29  qlite3_value **)
e270: 2c 0a 20 20 76 6f 69 64 20 28 2a 78 53 74 65 70  ,.  void (*xStep
e280: 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
e290: 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76  t*,int,sqlite3_v
e2a0: 61 6c 75 65 20 2a 2a 29 2c 0a 20 20 76 6f 69 64  alue **),.  void
e2b0: 20 28 2a 78 46 69 6e 61 6c 29 28 73 71 6c 69 74   (*xFinal)(sqlit
e2c0: 65 33 5f 63 6f 6e 74 65 78 74 2a 29 2c 0a 20 20  e3_context*),.  
e2d0: 76 6f 69 64 20 28 2a 78 44 65 73 74 72 6f 79 29  void (*xDestroy)
e2e0: 28 76 6f 69 64 20 2a 29 0a 29 7b 0a 20 20 69 6e  (void *).){.  in
e2f0: 74 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52  t rc = SQLITE_ER
e300: 52 4f 52 3b 0a 20 20 46 75 6e 63 44 65 73 74 72  ROR;.  FuncDestr
e310: 75 63 74 6f 72 20 2a 70 41 72 67 20 3d 20 30 3b  uctor *pArg = 0;
e320: 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
e330: 45 4e 41 42 4c 45 5f 41 50 49 5f 41 52 4d 4f 52  ENABLE_API_ARMOR
e340: 0a 20 20 69 66 28 20 21 73 71 6c 69 74 65 33 53  .  if( !sqlite3S
e350: 61 66 65 74 79 43 68 65 63 6b 4f 6b 28 64 62 29  afetyCheckOk(db)
e360: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 53   ){.    return S
e370: 51 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50  QLITE_MISUSE_BKP
e380: 54 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20  T;.  }.#endif.  
e390: 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e  sqlite3_mutex_en
e3a0: 74 65 72 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0a  ter(db->mutex);.
e3b0: 20 20 69 66 28 20 78 44 65 73 74 72 6f 79 20 29    if( xDestroy )
e3c0: 7b 0a 20 20 20 20 70 41 72 67 20 3d 20 28 46 75  {.    pArg = (Fu
e3d0: 6e 63 44 65 73 74 72 75 63 74 6f 72 20 2a 29 73  ncDestructor *)s
e3e0: 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65  qlite3DbMallocZe
e3f0: 72 6f 28 64 62 2c 20 73 69 7a 65 6f 66 28 46 75  ro(db, sizeof(Fu
e400: 6e 63 44 65 73 74 72 75 63 74 6f 72 29 29 3b 0a  ncDestructor));.
e410: 20 20 20 20 69 66 28 20 21 70 41 72 67 20 29 7b      if( !pArg ){
e420: 0a 20 20 20 20 20 20 78 44 65 73 74 72 6f 79 28  .      xDestroy(
e430: 70 29 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6f  p);.      goto o
e440: 75 74 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 41  ut;.    }.    pA
e450: 72 67 2d 3e 78 44 65 73 74 72 6f 79 20 3d 20 78  rg->xDestroy = x
e460: 44 65 73 74 72 6f 79 3b 0a 20 20 20 20 70 41 72  Destroy;.    pAr
e470: 67 2d 3e 70 55 73 65 72 44 61 74 61 20 3d 20 70  g->pUserData = p
e480: 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c  ;.  }.  rc = sql
e490: 69 74 65 33 43 72 65 61 74 65 46 75 6e 63 28 64  ite3CreateFunc(d
e4a0: 62 2c 20 7a 46 75 6e 63 2c 20 6e 41 72 67 2c 20  b, zFunc, nArg, 
e4b0: 65 6e 63 2c 20 70 2c 20 78 46 75 6e 63 2c 20 78  enc, p, xFunc, x
e4c0: 53 74 65 70 2c 20 78 46 69 6e 61 6c 2c 20 70 41  Step, xFinal, pA
e4d0: 72 67 29 3b 0a 20 20 69 66 28 20 70 41 72 67 20  rg);.  if( pArg 
e4e0: 26 26 20 70 41 72 67 2d 3e 6e 52 65 66 3d 3d 30  && pArg->nRef==0
e4f0: 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
e500: 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b  rc!=SQLITE_OK );
e510: 0a 20 20 20 20 78 44 65 73 74 72 6f 79 28 70 29  .    xDestroy(p)
e520: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 44 62 46  ;.    sqlite3DbF
e530: 72 65 65 28 64 62 2c 20 70 41 72 67 29 3b 0a 20  ree(db, pArg);. 
e540: 20 7d 0a 0a 20 6f 75 74 3a 0a 20 20 72 63 20 3d   }.. out:.  rc =
e550: 20 73 71 6c 69 74 65 33 41 70 69 45 78 69 74 28   sqlite3ApiExit(
e560: 64 62 2c 20 72 63 29 3b 0a 20 20 73 71 6c 69 74  db, rc);.  sqlit
e570: 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 64  e3_mutex_leave(d
e580: 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 72 65 74  b->mutex);.  ret
e590: 75 72 6e 20 72 63 3b 0a 7d 0a 0a 23 69 66 6e 64  urn rc;.}..#ifnd
e5a0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  ef SQLITE_OMIT_U
e5b0: 54 46 31 36 0a 69 6e 74 20 73 71 6c 69 74 65 33  TF16.int sqlite3
e5c0: 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e  _create_function
e5d0: 31 36 28 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  16(.  sqlite3 *d
e5e0: 62 2c 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20  b,.  const void 
e5f0: 2a 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 2c 0a  *zFunctionName,.
e600: 20 20 69 6e 74 20 6e 41 72 67 2c 0a 20 20 69 6e    int nArg,.  in
e610: 74 20 65 54 65 78 74 52 65 70 2c 0a 20 20 76 6f  t eTextRep,.  vo
e620: 69 64 20 2a 70 2c 0a 20 20 76 6f 69 64 20 28 2a  id *p,.  void (*
e630: 78 46 75 6e 63 29 28 73 71 6c 69 74 65 33 5f 63  xFunc)(sqlite3_c
e640: 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69  ontext*,int,sqli
e650: 74 65 33 5f 76 61 6c 75 65 2a 2a 29 2c 0a 20 20  te3_value**),.  
e660: 76 6f 69 64 20 28 2a 78 53 74 65 70 29 28 73 71  void (*xStep)(sq
e670: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69  lite3_context*,i
e680: 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt,sqlite3_value
e690: 2a 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a 78 46  **),.  void (*xF
e6a0: 69 6e 61 6c 29 28 73 71 6c 69 74 65 33 5f 63 6f  inal)(sqlite3_co
e6b0: 6e 74 65 78 74 2a 29 0a 29 7b 0a 20 20 69 6e 74  ntext*).){.  int
e6c0: 20 72 63 3b 0a 20 20 63 68 61 72 20 2a 7a 46 75   rc;.  char *zFu
e6d0: 6e 63 38 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c  nc8;..#ifdef SQL
e6e0: 49 54 45 5f 45 4e 41 42 4c 45 5f 41 50 49 5f 41  ITE_ENABLE_API_A
e6f0: 52 4d 4f 52 0a 20 20 69 66 28 20 21 73 71 6c 69  RMOR.  if( !sqli
e700: 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 4f 6b  te3SafetyCheckOk
e710: 28 64 62 29 20 7c 7c 20 7a 46 75 6e 63 74 69 6f  (db) || zFunctio
e720: 6e 4e 61 6d 65 3d 3d 30 20 29 20 72 65 74 75 72  nName==0 ) retur
e730: 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 5f  n SQLITE_MISUSE_
e740: 42 4b 50 54 3b 0a 23 65 6e 64 69 66 0a 20 20 73  BKPT;.#endif.  s
e750: 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74  qlite3_mutex_ent
e760: 65 72 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20  er(db->mutex);. 
e770: 20 61 73 73 65 72 74 28 20 21 64 62 2d 3e 6d 61   assert( !db->ma
e780: 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20  llocFailed );.  
e790: 7a 46 75 6e 63 38 20 3d 20 73 71 6c 69 74 65 33  zFunc8 = sqlite3
e7a0: 55 74 66 31 36 74 6f 38 28 64 62 2c 20 7a 46 75  Utf16to8(db, zFu
e7b0: 6e 63 74 69 6f 6e 4e 61 6d 65 2c 20 2d 31 2c 20  nctionName, -1, 
e7c0: 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49  SQLITE_UTF16NATI
e7d0: 56 45 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  VE);.  rc = sqli
e7e0: 74 65 33 43 72 65 61 74 65 46 75 6e 63 28 64 62  te3CreateFunc(db
e7f0: 2c 20 7a 46 75 6e 63 38 2c 20 6e 41 72 67 2c 20  , zFunc8, nArg, 
e800: 65 54 65 78 74 52 65 70 2c 20 70 2c 20 78 46 75  eTextRep, p, xFu
e810: 6e 63 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61  nc, xStep, xFina
e820: 6c 2c 30 29 3b 0a 20 20 73 71 6c 69 74 65 33 44  l,0);.  sqlite3D
e830: 62 46 72 65 65 28 64 62 2c 20 7a 46 75 6e 63 38  bFree(db, zFunc8
e840: 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
e850: 33 41 70 69 45 78 69 74 28 64 62 2c 20 72 63 29  3ApiExit(db, rc)
e860: 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  ;.  sqlite3_mute
e870: 78 5f 6c 65 61 76 65 28 64 62 2d 3e 6d 75 74 65  x_leave(db->mute
e880: 78 29 3b 0a 20 20 72 65 74 75 72 6e 20 72 63 3b  x);.  return rc;
e890: 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a  .}.#endif.../*.*
e8a0: 2a 20 44 65 63 6c 61 72 65 20 74 68 61 74 20 61  * Declare that a
e8b0: 20 66 75 6e 63 74 69 6f 6e 20 68 61 73 20 62 65   function has be
e8c0: 65 6e 20 6f 76 65 72 6c 6f 61 64 65 64 20 62 79  en overloaded by
e8d0: 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
e8e0: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 66  ..**.** If the f
e8f0: 75 6e 63 74 69 6f 6e 20 61 6c 72 65 61 64 79 20  unction already 
e900: 65 78 69 73 74 73 20 61 73 20 61 20 72 65 67 75  exists as a regu
e910: 6c 61 72 20 67 6c 6f 62 61 6c 20 66 75 6e 63 74  lar global funct
e920: 69 6f 6e 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 69  ion, then.** thi
e930: 73 20 72 6f 75 74 69 6e 65 20 69 73 20 61 20 6e  s routine is a n
e940: 6f 2d 6f 70 2e 20 20 49 66 20 74 68 65 20 66 75  o-op.  If the fu
e950: 6e 63 74 69 6f 6e 20 64 6f 65 73 20 6e 6f 74 20  nction does not 
e960: 65 78 69 73 74 2c 20 74 68 65 6e 20 63 72 65 61  exist, then crea
e970: 74 65 0a 2a 2a 20 61 20 6e 65 77 20 6f 6e 65 20  te.** a new one 
e980: 74 68 61 74 20 61 6c 77 61 79 73 20 74 68 72 6f  that always thro
e990: 77 73 20 61 20 72 75 6e 2d 74 69 6d 65 20 65 72  ws a run-time er
e9a0: 72 6f 72 2e 20 20 0a 2a 2a 0a 2a 2a 20 57 68 65  ror.  .**.** Whe
e9b0: 6e 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73  n virtual tables
e9c0: 20 69 6e 74 65 6e 64 20 74 6f 20 70 72 6f 76 69   intend to provi
e9d0: 64 65 20 61 6e 20 6f 76 65 72 6c 6f 61 64 65 64  de an overloaded
e9e0: 20 66 75 6e 63 74 69 6f 6e 2c 20 74 68 65 79 0a   function, they.
e9f0: 2a 2a 20 73 68 6f 75 6c 64 20 63 61 6c 6c 20 74  ** should call t
ea00: 68 69 73 20 72 6f 75 74 69 6e 65 20 74 6f 20 6d  his routine to m
ea10: 61 6b 65 20 73 75 72 65 20 74 68 65 20 67 6c 6f  ake sure the glo
ea20: 62 61 6c 20 66 75 6e 63 74 69 6f 6e 20 65 78 69  bal function exi
ea30: 73 74 73 2e 0a 2a 2a 20 41 20 67 6c 6f 62 61 6c  sts..** A global
ea40: 20 66 75 6e 63 74 69 6f 6e 20 6d 75 73 74 20 65   function must e
ea50: 78 69 73 74 20 69 6e 20 6f 72 64 65 72 20 66 6f  xist in order fo
ea60: 72 20 6e 61 6d 65 20 72 65 73 6f 6c 75 74 69 6f  r name resolutio
ea70: 6e 20 74 6f 20 77 6f 72 6b 0a 2a 2a 20 70 72 6f  n to work.** pro
ea80: 70 65 72 6c 79 2e 0a 2a 2f 0a 69 6e 74 20 73 71  perly..*/.int sq
ea90: 6c 69 74 65 33 5f 6f 76 65 72 6c 6f 61 64 5f 66  lite3_overload_f
eaa0: 75 6e 63 74 69 6f 6e 28 0a 20 20 73 71 6c 69 74  unction(.  sqlit
eab0: 65 33 20 2a 64 62 2c 0a 20 20 63 6f 6e 73 74 20  e3 *db,.  const 
eac0: 63 68 61 72 20 2a 7a 4e 61 6d 65 2c 0a 20 20 69  char *zName,.  i
ead0: 6e 74 20 6e 41 72 67 0a 29 7b 0a 20 20 69 6e 74  nt nArg.){.  int
eae0: 20 6e 4e 61 6d 65 20 3d 20 73 71 6c 69 74 65 33   nName = sqlite3
eaf0: 53 74 72 6c 65 6e 33 30 28 7a 4e 61 6d 65 29 3b  Strlen30(zName);
eb00: 0a 20 20 69 6e 74 20 72 63 20 3d 20 53 51 4c 49  .  int rc = SQLI
eb10: 54 45 5f 4f 4b 3b 0a 0a 23 69 66 64 65 66 20 53  TE_OK;..#ifdef S
eb20: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41 50 49  QLITE_ENABLE_API
eb30: 5f 41 52 4d 4f 52 0a 20 20 69 66 28 20 21 73 71  _ARMOR.  if( !sq
eb40: 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b  lite3SafetyCheck
eb50: 4f 6b 28 64 62 29 20 7c 7c 20 7a 4e 61 6d 65 3d  Ok(db) || zName=
eb60: 3d 30 20 7c 7c 20 6e 41 72 67 3c 2d 32 20 29 7b  =0 || nArg<-2 ){
eb70: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
eb80: 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54 3b 0a  TE_MISUSE_BKPT;.
eb90: 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 73 71 6c    }.#endif.  sql
eba0: 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72  ite3_mutex_enter
ebb0: 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 69  (db->mutex);.  i
ebc0: 66 28 20 73 71 6c 69 74 65 33 46 69 6e 64 46 75  f( sqlite3FindFu
ebd0: 6e 63 74 69 6f 6e 28 64 62 2c 20 7a 4e 61 6d 65  nction(db, zName
ebe0: 2c 20 6e 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 53  , nName, nArg, S
ebf0: 51 4c 49 54 45 5f 55 54 46 38 2c 20 30 29 3d 3d  QLITE_UTF8, 0)==
ec00: 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  0 ){.    rc = sq
ec10: 6c 69 74 65 33 43 72 65 61 74 65 46 75 6e 63 28  lite3CreateFunc(
ec20: 64 62 2c 20 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  db, zName, nArg,
ec30: 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 0a 20 20   SQLITE_UTF8,.  
ec40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ec50: 20 20 20 20 20 20 20 20 20 30 2c 20 73 71 6c 69           0, sqli
ec60: 74 65 33 49 6e 76 61 6c 69 64 46 75 6e 63 74 69  te3InvalidFuncti
ec70: 6f 6e 2c 20 30 2c 20 30 2c 20 30 29 3b 0a 20 20  on, 0, 0, 0);.  
ec80: 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  }.  rc = sqlite3
ec90: 41 70 69 45 78 69 74 28 64 62 2c 20 72 63 29 3b  ApiExit(db, rc);
eca0: 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  .  sqlite3_mutex
ecb0: 5f 6c 65 61 76 65 28 64 62 2d 3e 6d 75 74 65 78  _leave(db->mutex
ecc0: 29 3b 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a  );.  return rc;.
ecd0: 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  }..#ifndef SQLIT
ece0: 45 5f 4f 4d 49 54 5f 54 52 41 43 45 0a 2f 2a 0a  E_OMIT_TRACE./*.
ecf0: 2a 2a 20 52 65 67 69 73 74 65 72 20 61 20 74 72  ** Register a tr
ed00: 61 63 65 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54  ace function.  T
ed10: 68 65 20 70 41 72 67 20 66 72 6f 6d 20 74 68 65  he pArg from the
ed20: 20 70 72 65 76 69 6f 75 73 6c 79 20 72 65 67 69   previously regi
ed30: 73 74 65 72 65 64 20 74 72 61 63 65 0a 2a 2a 20  stered trace.** 
ed40: 69 73 20 72 65 74 75 72 6e 65 64 2e 20 20 0a 2a  is returned.  .*
ed50: 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 74 72 61 63  *.** A NULL trac
ed60: 65 20 66 75 6e 63 74 69 6f 6e 20 6d 65 61 6e 73  e function means
ed70: 20 74 68 61 74 20 6e 6f 20 74 72 61 63 69 6e 67   that no tracing
ed80: 20 69 73 20 65 78 65 63 75 74 65 73 2e 20 20 41   is executes.  A
ed90: 20 6e 6f 6e 2d 4e 55 4c 4c 0a 2a 2a 20 74 72 61   non-NULL.** tra
eda0: 63 65 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  ce is a pointer 
edb0: 74 6f 20 61 20 66 75 6e 63 74 69 6f 6e 20 74 68  to a function th
edc0: 61 74 20 69 73 20 69 6e 76 6f 6b 65 64 20 61 74  at is invoked at
edd0: 20 74 68 65 20 73 74 61 72 74 20 6f 66 20 65 61   the start of ea
ede0: 63 68 0a 2a 2a 20 53 51 4c 20 73 74 61 74 65 6d  ch.** SQL statem
edf0: 65 6e 74 2e 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71  ent..*/.void *sq
ee00: 6c 69 74 65 33 5f 74 72 61 63 65 28 73 71 6c 69  lite3_trace(sqli
ee10: 74 65 33 20 2a 64 62 2c 20 76 6f 69 64 20 28 2a  te3 *db, void (*
ee20: 78 54 72 61 63 65 29 28 76 6f 69 64 2a 2c 63 6f  xTrace)(void*,co
ee30: 6e 73 74 20 63 68 61 72 2a 29 2c 20 76 6f 69 64  nst char*), void
ee40: 20 2a 70 41 72 67 29 7b 0a 20 20 76 6f 69 64 20   *pArg){.  void 
ee50: 2a 70 4f 6c 64 3b 0a 0a 23 69 66 64 65 66 20 53  *pOld;..#ifdef S
ee60: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41 50 49  QLITE_ENABLE_API
ee70: 5f 41 52 4d 4f 52 0a 20 20 69 66 28 20 21 73 71  _ARMOR.  if( !sq
ee80: 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b  lite3SafetyCheck
ee90: 4f 6b 28 64 62 29 20 29 7b 0a 20 20 20 20 28 76  Ok(db) ){.    (v
eea0: 6f 69 64 29 53 51 4c 49 54 45 5f 4d 49 53 55 53  oid)SQLITE_MISUS
eeb0: 45 5f 42 4b 50 54 3b 0a 20 20 20 20 72 65 74 75  E_BKPT;.    retu
eec0: 72 6e 20 30 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  rn 0;.  }.#endif
eed0: 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  .  sqlite3_mutex
eee0: 5f 65 6e 74 65 72 28 64 62 2d 3e 6d 75 74 65 78  _enter(db->mutex
eef0: 29 3b 0a 20 20 70 4f 6c 64 20 3d 20 64 62 2d 3e  );.  pOld = db->
ef00: 70 54 72 61 63 65 41 72 67 3b 0a 20 20 64 62 2d  pTraceArg;.  db-
ef10: 3e 78 54 72 61 63 65 20 3d 20 78 54 72 61 63 65  >xTrace = xTrace
ef20: 3b 0a 20 20 64 62 2d 3e 70 54 72 61 63 65 41 72  ;.  db->pTraceAr
ef30: 67 20 3d 20 70 41 72 67 3b 0a 20 20 73 71 6c 69  g = pArg;.  sqli
ef40: 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28  te3_mutex_leave(
ef50: 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 72 65  db->mutex);.  re
ef60: 74 75 72 6e 20 70 4f 6c 64 3b 0a 7d 0a 2f 2a 0a  turn pOld;.}./*.
ef70: 2a 2a 20 52 65 67 69 73 74 65 72 20 61 20 70 72  ** Register a pr
ef80: 6f 66 69 6c 65 20 66 75 6e 63 74 69 6f 6e 2e 20  ofile function. 
ef90: 20 54 68 65 20 70 41 72 67 20 66 72 6f 6d 20 74   The pArg from t
efa0: 68 65 20 70 72 65 76 69 6f 75 73 6c 79 20 72 65  he previously re
efb0: 67 69 73 74 65 72 65 64 20 0a 2a 2a 20 70 72 6f  gistered .** pro
efc0: 66 69 6c 65 20 66 75 6e 63 74 69 6f 6e 20 69 73  file function is
efd0: 20 72 65 74 75 72 6e 65 64 2e 20 20 0a 2a 2a 0a   returned.  .**.
efe0: 2a 2a 20 41 20 4e 55 4c 4c 20 70 72 6f 66 69 6c  ** A NULL profil
eff0: 65 20 66 75 6e 63 74 69 6f 6e 20 6d 65 61 6e 73  e function means
f000: 20 74 68 61 74 20 6e 6f 20 70 72 6f 66 69 6c 69   that no profili
f010: 6e 67 20 69 73 20 65 78 65 63 75 74 65 73 2e 20  ng is executes. 
f020: 20 41 20 6e 6f 6e 2d 4e 55 4c 4c 0a 2a 2a 20 70   A non-NULL.** p
f030: 72 6f 66 69 6c 65 20 69 73 20 61 20 70 6f 69 6e  rofile is a poin
f040: 74 65 72 20 74 6f 20 61 20 66 75 6e 63 74 69 6f  ter to a functio
f050: 6e 20 74 68 61 74 20 69 73 20 69 6e 76 6f 6b 65  n that is invoke
f060: 64 20 61 74 20 74 68 65 20 63 6f 6e 63 6c 75 73  d at the conclus
f070: 69 6f 6e 20 6f 66 0a 2a 2a 20 65 61 63 68 20 53  ion of.** each S
f080: 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61  QL statement tha
f090: 74 20 69 73 20 72 75 6e 2e 0a 2a 2f 0a 76 6f 69  t is run..*/.voi
f0a0: 64 20 2a 73 71 6c 69 74 65 33 5f 70 72 6f 66 69  d *sqlite3_profi
f0b0: 6c 65 28 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  le(.  sqlite3 *d
f0c0: 62 2c 0a 20 20 76 6f 69 64 20 28 2a 78 50 72 6f  b,.  void (*xPro
f0d0: 66 69 6c 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73  file)(void*,cons
f0e0: 74 20 63 68 61 72 2a 2c 73 71 6c 69 74 65 5f 75  t char*,sqlite_u
f0f0: 69 6e 74 36 34 29 2c 0a 20 20 76 6f 69 64 20 2a  int64),.  void *
f100: 70 41 72 67 0a 29 7b 0a 20 20 76 6f 69 64 20 2a  pArg.){.  void *
f110: 70 4f 6c 64 3b 0a 0a 23 69 66 64 65 66 20 53 51  pOld;..#ifdef SQ
f120: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41 50 49 5f  LITE_ENABLE_API_
f130: 41 52 4d 4f 52 0a 20 20 69 66 28 20 21 73 71 6c  ARMOR.  if( !sql
f140: 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 4f  ite3SafetyCheckO
f150: 6b 28 64 62 29 20 29 7b 0a 20 20 20 20 28 76 6f  k(db) ){.    (vo
f160: 69 64 29 53 51 4c 49 54 45 5f 4d 49 53 55 53 45  id)SQLITE_MISUSE
f170: 5f 42 4b 50 54 3b 0a 20 20 20 20 72 65 74 75 72  _BKPT;.    retur
f180: 6e 20 30 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a  n 0;.  }.#endif.
f190: 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f    sqlite3_mutex_
f1a0: 65 6e 74 65 72 28 64 62 2d 3e 6d 75 74 65 78 29  enter(db->mutex)
f1b0: 3b 0a 20 20 70 4f 6c 64 20 3d 20 64 62 2d 3e 70  ;.  pOld = db->p
f1c0: 50 72 6f 66 69 6c 65 41 72 67 3b 0a 20 20 64 62  ProfileArg;.  db
f1d0: 2d 3e 78 50 72 6f 66 69 6c 65 20 3d 20 78 50 72  ->xProfile = xPr
f1e0: 6f 66 69 6c 65 3b 0a 20 20 64 62 2d 3e 70 50 72  ofile;.  db->pPr
f1f0: 6f 66 69 6c 65 41 72 67 20 3d 20 70 41 72 67 3b  ofileArg = pArg;
f200: 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  .  sqlite3_mutex
f210: 5f 6c 65 61 76 65 28 64 62 2d 3e 6d 75 74 65 78  _leave(db->mutex
f220: 29 3b 0a 20 20 72 65 74 75 72 6e 20 70 4f 6c 64  );.  return pOld
f230: 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
f240: 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45 20  LITE_OMIT_TRACE 
f250: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 52 65 67 69 73 74  */../*.** Regist
f260: 65 72 20 61 20 66 75 6e 63 74 69 6f 6e 20 74 6f  er a function to
f270: 20 62 65 20 69 6e 76 6f 6b 65 64 20 77 68 65 6e   be invoked when
f280: 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 63   a transaction c
f290: 6f 6d 6d 69 74 73 2e 0a 2a 2a 20 49 66 20 74 68  ommits..** If th
f2a0: 65 20 69 6e 76 6f 6b 65 64 20 66 75 6e 63 74 69  e invoked functi
f2b0: 6f 6e 20 72 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a  on returns non-z
f2c0: 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 63 6f  ero, then the co
f2d0: 6d 6d 69 74 20 62 65 63 6f 6d 65 73 20 61 0a 2a  mmit becomes a.*
f2e0: 2a 20 72 6f 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 76  * rollback..*/.v
f2f0: 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 63 6f 6d  oid *sqlite3_com
f300: 6d 69 74 5f 68 6f 6f 6b 28 0a 20 20 73 71 6c 69  mit_hook(.  sqli
f310: 74 65 33 20 2a 64 62 2c 20 20 20 20 20 20 20 20  te3 *db,        
f320: 20 20 20 20 20 20 2f 2a 20 41 74 74 61 63 68 20        /* Attach 
f330: 74 68 65 20 68 6f 6f 6b 20 74 6f 20 74 68 69 73  the hook to this
f340: 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 69   database */.  i
f350: 6e 74 20 28 2a 78 43 61 6c 6c 62 61 63 6b 29 28  nt (*xCallback)(
f360: 76 6f 69 64 2a 29 2c 20 20 2f 2a 20 46 75 6e 63  void*),  /* Func
f370: 74 69 6f 6e 20 74 6f 20 69 6e 76 6f 6b 65 20 6f  tion to invoke o
f380: 6e 20 65 61 63 68 20 63 6f 6d 6d 69 74 20 2a 2f  n each commit */
f390: 0a 20 20 76 6f 69 64 20 2a 70 41 72 67 20 20 20  .  void *pArg   
f3a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
f3b0: 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  Argument to the 
f3c0: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 29 7b 0a 20  function */.){. 
f3d0: 20 76 6f 69 64 20 2a 70 4f 6c 64 3b 0a 0a 23 69   void *pOld;..#i
f3e0: 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
f3f0: 4c 45 5f 41 50 49 5f 41 52 4d 4f 52 0a 20 20 69  LE_API_ARMOR.  i
f400: 66 28 20 21 73 71 6c 69 74 65 33 53 61 66 65 74  f( !sqlite3Safet
f410: 79 43 68 65 63 6b 4f 6b 28 64 62 29 20 29 7b 0a  yCheckOk(db) ){.
f420: 20 20 20 20 28 76 6f 69 64 29 53 51 4c 49 54 45      (void)SQLITE
f430: 5f 4d 49 53 55 53 45 5f 42 4b 50 54 3b 0a 20 20  _MISUSE_BKPT;.  
f440: 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a    return 0;.  }.
f450: 23 65 6e 64 69 66 0a 20 20 73 71 6c 69 74 65 33  #endif.  sqlite3
f460: 5f 6d 75 74 65 78 5f 65 6e 74 65 72 28 64 62 2d  _mutex_enter(db-
f470: 3e 6d 75 74 65 78 29 3b 0a 20 20 70 4f 6c 64 20  >mutex);.  pOld 
f480: 3d 20 64 62 2d 3e 70 43 6f 6d 6d 69 74 41 72 67  = db->pCommitArg
f490: 3b 0a 20 20 64 62 2d 3e 78 43 6f 6d 6d 69 74 43  ;.  db->xCommitC
f4a0: 61 6c 6c 62 61 63 6b 20 3d 20 78 43 61 6c 6c 62  allback = xCallb
f4b0: 61 63 6b 3b 0a 20 20 64 62 2d 3e 70 43 6f 6d 6d  ack;.  db->pComm
f4c0: 69 74 41 72 67 20 3d 20 70 41 72 67 3b 0a 20 20  itArg = pArg;.  
f4d0: 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65  sqlite3_mutex_le
f4e0: 61 76 65 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0a  ave(db->mutex);.
f4f0: 20 20 72 65 74 75 72 6e 20 70 4f 6c 64 3b 0a 7d    return pOld;.}
f500: 0a 0a 2f 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72  ../*.** Register
f510: 20 61 20 63 61 6c 6c 62 61 63 6b 20 74 6f 20 62   a callback to b
f520: 65 20 69 6e 76 6f 6b 65 64 20 65 61 63 68 20 74  e invoked each t
f530: 69 6d 65 20 61 20 72 6f 77 20 69 73 20 75 70 64  ime a row is upd
f540: 61 74 65 64 2c 0a 2a 2a 20 69 6e 73 65 72 74 65  ated,.** inserte
f550: 64 20 6f 72 20 64 65 6c 65 74 65 64 20 75 73 69  d or deleted usi
f560: 6e 67 20 74 68 69 73 20 64 61 74 61 62 61 73 65  ng this database
f570: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0a 2a 2f 0a   connection..*/.
f580: 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 75 70  void *sqlite3_up
f590: 64 61 74 65 5f 68 6f 6f 6b 28 0a 20 20 73 71 6c  date_hook(.  sql
f5a0: 69 74 65 33 20 2a 64 62 2c 20 20 20 20 20 20 20  ite3 *db,       
f5b0: 20 20 20 20 20 20 20 2f 2a 20 41 74 74 61 63 68         /* Attach
f5c0: 20 74 68 65 20 68 6f 6f 6b 20 74 6f 20 74 68 69   the hook to thi
f5d0: 73 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20  s database */.  
f5e0: 76 6f 69 64 20 28 2a 78 43 61 6c 6c 62 61 63 6b  void (*xCallback
f5f0: 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 68 61 72  )(void*,int,char
f600: 20 63 6f 6e 73 74 20 2a 2c 63 68 61 72 20 63 6f   const *,char co
f610: 6e 73 74 20 2a 2c 73 71 6c 69 74 65 5f 69 6e 74  nst *,sqlite_int
f620: 36 34 29 2c 0a 20 20 76 6f 69 64 20 2a 70 41 72  64),.  void *pAr
f630: 67 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g               
f640: 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20   /* Argument to 
f650: 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  the function */.
f660: 29 7b 0a 20 20 76 6f 69 64 20 2a 70 52 65 74 3b  ){.  void *pRet;
f670: 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
f680: 45 4e 41 42 4c 45 5f 41 50 49 5f 41 52 4d 4f 52  ENABLE_API_ARMOR
f690: 0a 20 20 69 66 28 20 21 73 71 6c 69 74 65 33 53  .  if( !sqlite3S
f6a0: 61 66 65 74 79 43 68 65 63 6b 4f 6b 28 64 62 29  afetyCheckOk(db)
f6b0: 20 29 7b 0a 20 20 20 20 28 76 6f 69 64 29 53 51   ){.    (void)SQ
f6c0: 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54  LITE_MISUSE_BKPT
f6d0: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a  ;.    return 0;.
f6e0: 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 73 71 6c    }.#endif.  sql
f6f0: 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72  ite3_mutex_enter
f700: 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 70  (db->mutex);.  p
f710: 52 65 74 20 3d 20 64 62 2d 3e 70 55 70 64 61 74  Ret = db->pUpdat
f720: 65 41 72 67 3b 0a 20 20 64 62 2d 3e 78 55 70 64  eArg;.  db->xUpd
f730: 61 74 65 43 61 6c 6c 62 61 63 6b 20 3d 20 78 43  ateCallback = xC
f740: 61 6c 6c 62 61 63 6b 3b 0a 20 20 64 62 2d 3e 70  allback;.  db->p
f750: 55 70 64 61 74 65 41 72 67 20 3d 20 70 41 72 67  UpdateArg = pArg
f760: 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  ;.  sqlite3_mute
f770: 78 5f 6c 65 61 76 65 28 64 62 2d 3e 6d 75 74 65  x_leave(db->mute
f780: 78 29 3b 0a 20 20 72 65 74 75 72 6e 20 70 52 65  x);.  return pRe
f790: 74 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 67 69  t;.}../*.** Regi
f7a0: 73 74 65 72 20 61 20 63 61 6c 6c 62 61 63 6b 20  ster a callback 
f7b0: 74 6f 20 62 65 20 69 6e 76 6f 6b 65 64 20 65 61  to be invoked ea
f7c0: 63 68 20 74 69 6d 65 20 61 20 74 72 61 6e 73 61  ch time a transa
f7d0: 63 74 69 6f 6e 20 69 73 20 72 6f 6c 6c 65 64 0a  ction is rolled.
f7e0: 2a 2a 20 62 61 63 6b 20 62 79 20 74 68 69 73 20  ** back by this 
f7f0: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
f800: 69 6f 6e 2e 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71  ion..*/.void *sq
f810: 6c 69 74 65 33 5f 72 6f 6c 6c 62 61 63 6b 5f 68  lite3_rollback_h
f820: 6f 6f 6b 28 0a 20 20 73 71 6c 69 74 65 33 20 2a  ook(.  sqlite3 *
f830: 64 62 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  db,             
f840: 20 2f 2a 20 41 74 74 61 63 68 20 74 68 65 20 68   /* Attach the h
f850: 6f 6f 6b 20 74 6f 20 74 68 69 73 20 64 61 74 61  ook to this data
f860: 62 61 73 65 20 2a 2f 0a 20 20 76 6f 69 64 20 28  base */.  void (
f870: 2a 78 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64  *xCallback)(void
f880: 2a 29 2c 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20  *), /* Callback 
f890: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f  function */.  vo
f8a0: 69 64 20 2a 70 41 72 67 20 20 20 20 20 20 20 20  id *pArg        
f8b0: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d          /* Argum
f8c0: 65 6e 74 20 74 6f 20 74 68 65 20 66 75 6e 63 74  ent to the funct
f8d0: 69 6f 6e 20 2a 2f 0a 29 7b 0a 20 20 76 6f 69 64  ion */.){.  void
f8e0: 20 2a 70 52 65 74 3b 0a 0a 23 69 66 64 65 66 20   *pRet;..#ifdef 
f8f0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41 50  SQLITE_ENABLE_AP
f900: 49 5f 41 52 4d 4f 52 0a 20 20 69 66 28 20 21 73  I_ARMOR.  if( !s
f910: 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63  qlite3SafetyChec
f920: 6b 4f 6b 28 64 62 29 20 29 7b 0a 20 20 20 20 28  kOk(db) ){.    (
f930: 76 6f 69 64 29 53 51 4c 49 54 45 5f 4d 49 53 55  void)SQLITE_MISU
f940: 53 45 5f 42 4b 50 54 3b 0a 20 20 20 20 72 65 74  SE_BKPT;.    ret
f950: 75 72 6e 20 30 3b 0a 20 20 7d 0a 23 65 6e 64 69  urn 0;.  }.#endi
f960: 66 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  f.  sqlite3_mute
f970: 78 5f 65 6e 74 65 72 28 64 62 2d 3e 6d 75 74 65  x_enter(db->mute
f980: 78 29 3b 0a 20 20 70 52 65 74 20 3d 20 64 62 2d  x);.  pRet = db-
f990: 3e 70 52 6f 6c 6c 62 61 63 6b 41 72 67 3b 0a 20  >pRollbackArg;. 
f9a0: 20 64 62 2d 3e 78 52 6f 6c 6c 62 61 63 6b 43 61   db->xRollbackCa
f9b0: 6c 6c 62 61 63 6b 20 3d 20 78 43 61 6c 6c 62 61  llback = xCallba
f9c0: 63 6b 3b 0a 20 20 64 62 2d 3e 70 52 6f 6c 6c 62  ck;.  db->pRollb
f9d0: 61 63 6b 41 72 67 20 3d 20 70 41 72 67 3b 0a 20  ackArg = pArg;. 
f9e0: 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c   sqlite3_mutex_l
f9f0: 65 61 76 65 28 64 62 2d 3e 6d 75 74 65 78 29 3b  eave(db->mutex);
fa00: 0a 20 20 72 65 74 75 72 6e 20 70 52 65 74 3b 0a  .  return pRet;.
fa10: 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  }..#ifndef SQLIT
fa20: 45 5f 4f 4d 49 54 5f 57 41 4c 0a 2f 2a 0a 2a 2a  E_OMIT_WAL./*.**
fa30: 20 54 68 65 20 73 71 6c 69 74 65 33 5f 77 61 6c   The sqlite3_wal
fa40: 5f 68 6f 6f 6b 28 29 20 63 61 6c 6c 62 61 63 6b  _hook() callback
fa50: 20 72 65 67 69 73 74 65 72 65 64 20 62 79 20 73   registered by s
fa60: 71 6c 69 74 65 33 5f 77 61 6c 5f 61 75 74 6f 63  qlite3_wal_autoc
fa70: 68 65 63 6b 70 6f 69 6e 74 28 29 2e 0a 2a 2a 20  heckpoint()..** 
fa80: 49 6e 76 6f 6b 65 20 73 71 6c 69 74 65 33 5f 77  Invoke sqlite3_w
fa90: 61 6c 5f 63 68 65 63 6b 70 6f 69 6e 74 20 69 66  al_checkpoint if
faa0: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 66   the number of f
fab0: 72 61 6d 65 73 20 69 6e 20 74 68 65 20 6c 6f 67  rames in the log
fac0: 20 66 69 6c 65 0a 2a 2a 20 69 73 20 67 72 65 61   file.** is grea
fad0: 74 65 72 20 74 68 61 6e 20 73 71 6c 69 74 65 33  ter than sqlite3
fae0: 2e 70 57 61 6c 41 72 67 20 63 61 73 74 20 74 6f  .pWalArg cast to
faf0: 20 61 6e 20 69 6e 74 65 67 65 72 20 28 74 68 65   an integer (the
fb00: 20 76 61 6c 75 65 20 63 6f 6e 66 69 67 75 72 65   value configure
fb10: 64 20 62 79 0a 2a 2a 20 77 61 6c 5f 61 75 74 6f  d by.** wal_auto
fb20: 63 68 65 63 6b 70 6f 69 6e 74 28 29 29 2e 0a 2a  checkpoint())..*
fb30: 2f 20 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61  / .int sqlite3Wa
fb40: 6c 44 65 66 61 75 6c 74 48 6f 6f 6b 28 0a 20 20  lDefaultHook(.  
fb50: 76 6f 69 64 20 2a 70 43 6c 69 65 6e 74 44 61 74  void *pClientDat
fb60: 61 2c 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65  a,     /* Argume
fb70: 6e 74 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20  nt */.  sqlite3 
fb80: 2a 64 62 2c 20 20 20 20 20 20 20 20 20 20 20 2f  *db,           /
fb90: 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a  * Connection */.
fba0: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44    const char *zD
fbb0: 62 2c 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61  b,       /* Data
fbc0: 62 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 46  base */.  int nF
fbd0: 72 61 6d 65 20 20 20 20 20 20 20 20 20 20 20 20  rame            
fbe0: 20 2f 2a 20 53 69 7a 65 20 6f 66 20 57 41 4c 20   /* Size of WAL 
fbf0: 2a 2f 0a 29 7b 0a 20 20 69 66 28 20 6e 46 72 61  */.){.  if( nFra
fc00: 6d 65 3e 3d 53 51 4c 49 54 45 5f 50 54 52 5f 54  me>=SQLITE_PTR_T
fc10: 4f 5f 49 4e 54 28 70 43 6c 69 65 6e 74 44 61 74  O_INT(pClientDat
fc20: 61 29 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  a) ){.    sqlite
fc30: 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c  3BeginBenignMall
fc40: 6f 63 28 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  oc();.    sqlite
fc50: 33 5f 77 61 6c 5f 63 68 65 63 6b 70 6f 69 6e 74  3_wal_checkpoint
fc60: 28 64 62 2c 20 7a 44 62 29 3b 0a 20 20 20 20 73  (db, zDb);.    s
fc70: 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d  qlite3EndBenignM
fc80: 61 6c 6c 6f 63 28 29 3b 0a 20 20 7d 0a 20 20 72  alloc();.  }.  r
fc90: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b  eturn SQLITE_OK;
fca0: 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
fcb0: 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 20 2a 2f 0a  ITE_OMIT_WAL */.
fcc0: 0a 2f 2a 0a 2a 2a 20 43 6f 6e 66 69 67 75 72 65  ./*.** Configure
fcd0: 20 61 6e 20 73 71 6c 69 74 65 33 5f 77 61 6c 5f   an sqlite3_wal_
fce0: 68 6f 6f 6b 28 29 20 63 61 6c 6c 62 61 63 6b 20  hook() callback 
fcf0: 74 6f 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  to automatically
fd00: 20 63 68 65 63 6b 70 6f 69 6e 74 0a 2a 2a 20 61   checkpoint.** a
fd10: 20 64 61 74 61 62 61 73 65 20 61 66 74 65 72 20   database after 
fd20: 63 6f 6d 6d 69 74 74 69 6e 67 20 61 20 74 72 61  committing a tra
fd30: 6e 73 61 63 74 69 6f 6e 20 69 66 20 74 68 65 72  nsaction if ther
fd40: 65 20 61 72 65 20 6e 46 72 61 6d 65 20 6f 72 0a  e are nFrame or.
fd50: 2a 2a 20 6d 6f 72 65 20 66 72 61 6d 65 73 20 69  ** more frames i
fd60: 6e 20 74 68 65 20 6c 6f 67 20 66 69 6c 65 2e 20  n the log file. 
fd70: 50 61 73 73 69 6e 67 20 7a 65 72 6f 20 6f 72 20  Passing zero or 
fd80: 61 20 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65  a negative value
fd90: 20 61 73 20 74 68 65 0a 2a 2a 20 6e 46 72 61 6d   as the.** nFram
fda0: 65 20 70 61 72 61 6d 65 74 65 72 20 64 69 73 61  e parameter disa
fdb0: 62 6c 65 73 20 61 75 74 6f 6d 61 74 69 63 20 63  bles automatic c
fdc0: 68 65 63 6b 70 6f 69 6e 74 73 20 65 6e 74 69 72  heckpoints entir
fdd0: 65 6c 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63  ely..**.** The c
fde0: 61 6c 6c 62 61 63 6b 20 72 65 67 69 73 74 65 72  allback register
fdf0: 65 64 20 62 79 20 74 68 69 73 20 66 75 6e 63 74  ed by this funct
fe00: 69 6f 6e 20 72 65 70 6c 61 63 65 73 20 61 6e 79  ion replaces any
fe10: 20 65 78 69 73 74 69 6e 67 20 63 61 6c 6c 62 61   existing callba
fe20: 63 6b 0a 2a 2a 20 72 65 67 69 73 74 65 72 65 64  ck.** registered
fe30: 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 77   using sqlite3_w
fe40: 61 6c 5f 68 6f 6f 6b 28 29 2e 20 4c 69 6b 65 77  al_hook(). Likew
fe50: 69 73 65 2c 20 72 65 67 69 73 74 65 72 69 6e 67  ise, registering
fe60: 20 61 20 63 61 6c 6c 62 61 63 6b 0a 2a 2a 20 75   a callback.** u
fe70: 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 77 61 6c  sing sqlite3_wal
fe80: 5f 68 6f 6f 6b 28 29 20 64 69 73 61 62 6c 65 73  _hook() disables
fe90: 20 74 68 65 20 61 75 74 6f 6d 61 74 69 63 20 63   the automatic c
fea0: 68 65 63 6b 70 6f 69 6e 74 20 6d 65 63 68 61 6e  heckpoint mechan
feb0: 69 73 6d 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65  ism.** configure
fec0: 64 20 62 79 20 74 68 69 73 20 66 75 6e 63 74 69  d by this functi
fed0: 6f 6e 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  on..*/.int sqlit
fee0: 65 33 5f 77 61 6c 5f 61 75 74 6f 63 68 65 63 6b  e3_wal_autocheck
fef0: 70 6f 69 6e 74 28 73 71 6c 69 74 65 33 20 2a 64  point(sqlite3 *d
ff00: 62 2c 20 69 6e 74 20 6e 46 72 61 6d 65 29 7b 0a  b, int nFrame){.
ff10: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
ff20: 49 54 5f 57 41 4c 0a 20 20 55 4e 55 53 45 44 5f  IT_WAL.  UNUSED_
ff30: 50 41 52 41 4d 45 54 45 52 28 64 62 29 3b 0a 20  PARAMETER(db);. 
ff40: 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45   UNUSED_PARAMETE
ff50: 52 28 6e 46 72 61 6d 65 29 3b 0a 23 65 6c 73 65  R(nFrame);.#else
ff60: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
ff70: 4e 41 42 4c 45 5f 41 50 49 5f 41 52 4d 4f 52 0a  NABLE_API_ARMOR.
ff80: 20 20 69 66 28 20 21 73 71 6c 69 74 65 33 53 61    if( !sqlite3Sa
ff90: 66 65 74 79 43 68 65 63 6b 4f 6b 28 64 62 29 20  fetyCheckOk(db) 
ffa0: 29 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f  ) return SQLITE_
ffb0: 4d 49 53 55 53 45 5f 42 4b 50 54 3b 0a 23 65 6e  MISUSE_BKPT;.#en
ffc0: 64 69 66 0a 20 20 69 66 28 20 6e 46 72 61 6d 65  dif.  if( nFrame
ffd0: 3e 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  >0 ){.    sqlite
ffe0: 33 5f 77 61 6c 5f 68 6f 6f 6b 28 64 62 2c 20 73  3_wal_hook(db, s
fff0: 71 6c 69 74 65 33 57 61 6c 44 65 66 61 75 6c 74  qlite3WalDefault
10000 48 6f 6f 6b 2c 20 53 51 4c 49 54 45 5f 49 4e 54  Hook, SQLITE_INT
10010 5f 54 4f 5f 50 54 52 28 6e 46 72 61 6d 65 29 29  _TO_PTR(nFrame))
10020 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73  ;.  }else{.    s
10030 71 6c 69 74 65 33 5f 77 61 6c 5f 68 6f 6f 6b 28  qlite3_wal_hook(
10040 64 62 2c 20 30 2c 20 30 29 3b 0a 20 20 7d 0a 23  db, 0, 0);.  }.#
10050 65 6e 64 69 66 0a 20 20 72 65 74 75 72 6e 20 53  endif.  return S
10060 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  QLITE_OK;.}../*.
10070 2a 2a 20 52 65 67 69 73 74 65 72 20 61 20 63 61  ** Register a ca
10080 6c 6c 62 61 63 6b 20 74 6f 20 62 65 20 69 6e 76  llback to be inv
10090 6f 6b 65 64 20 65 61 63 68 20 74 69 6d 65 20 61  oked each time a
100a0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20   transaction is 
100b0 77 72 69 74 74 65 6e 0a 2a 2a 20 69 6e 74 6f 20  written.** into 
100c0 74 68 65 20 77 72 69 74 65 2d 61 68 65 61 64 2d  the write-ahead-
100d0 6c 6f 67 20 62 79 20 74 68 69 73 20 64 61 74 61  log by this data
100e0 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  base connection.
100f0 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  .*/.void *sqlite
10100 33 5f 77 61 6c 5f 68 6f 6f 6b 28 0a 20 20 73 71  3_wal_hook(.  sq
10110 6c 69 74 65 33 20 2a 64 62 2c 20 20 20 20 20 20  lite3 *db,      
10120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
10130 20 41 74 74 61 63 68 20 74 68 65 20 68 6f 6f 6b   Attach the hook
10140 20 74 6f 20 74 68 69 73 20 64 62 20 68 61 6e 64   to this db hand
10150 6c 65 20 2a 2f 0a 20 20 69 6e 74 28 2a 78 43 61  le */.  int(*xCa
10160 6c 6c 62 61 63 6b 29 28 76 6f 69 64 20 2a 2c 20  llback)(void *, 
10170 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20  sqlite3*, const 
10180 63 68 61 72 2a 2c 20 69 6e 74 29 2c 0a 20 20 76  char*, int),.  v
10190 6f 69 64 20 2a 70 41 72 67 20 20 20 20 20 20 20  oid *pArg       
101a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
101b0 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74  * First argument
101c0 20 70 61 73 73 65 64 20 74 6f 20 78 43 61 6c 6c   passed to xCall
101d0 62 61 63 6b 28 29 20 2a 2f 0a 29 7b 0a 23 69 66  back() */.){.#if
101e0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
101f0 5f 57 41 4c 0a 20 20 76 6f 69 64 20 2a 70 52 65  _WAL.  void *pRe
10200 74 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  t;.#ifdef SQLITE
10210 5f 45 4e 41 42 4c 45 5f 41 50 49 5f 41 52 4d 4f  _ENABLE_API_ARMO
10220 52 0a 20 20 69 66 28 20 21 73 71 6c 69 74 65 33  R.  if( !sqlite3
10230 53 61 66 65 74 79 43 68 65 63 6b 4f 6b 28 64 62  SafetyCheckOk(db
10240 29 20 29 7b 0a 20 20 20 20 28 76 6f 69 64 29 53  ) ){.    (void)S
10250 51 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50  QLITE_MISUSE_BKP
10260 54 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 30 3b  T;.    return 0;
10270 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 73 71  .  }.#endif.  sq
10280 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65  lite3_mutex_ente
10290 72 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20  r(db->mutex);.  
102a0 70 52 65 74 20 3d 20 64 62 2d 3e 70 57 61 6c 41  pRet = db->pWalA
102b0 72 67 3b 0a 20 20 64 62 2d 3e 78 57 61 6c 43 61  rg;.  db->xWalCa
102c0 6c 6c 62 61 63 6b 20 3d 20 78 43 61 6c 6c 62 61  llback = xCallba
102d0 63 6b 3b 0a 20 20 64 62 2d 3e 70 57 61 6c 41 72  ck;.  db->pWalAr
102e0 67 20 3d 20 70 41 72 67 3b 0a 20 20 73 71 6c 69  g = pArg;.  sqli
102f0 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28  te3_mutex_leave(
10300 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 72 65  db->mutex);.  re
10310 74 75 72 6e 20 70 52 65 74 3b 0a 23 65 6c 73 65  turn pRet;.#else
10320 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 23 65 6e  .  return 0;.#en
10330 64 69 66 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 68 65  dif.}../*.** Che
10340 63 6b 70 6f 69 6e 74 20 64 61 74 61 62 61 73 65  ckpoint database
10350 20 7a 44 62 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c   zDb..*/.int sql
10360 69 74 65 33 5f 77 61 6c 5f 63 68 65 63 6b 70 6f  ite3_wal_checkpo
10370 69 6e 74 5f 76 32 28 0a 20 20 73 71 6c 69 74 65  int_v2(.  sqlite
10380 33 20 2a 64 62 2c 20 20 20 20 20 20 20 20 20 20  3 *db,          
10390 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74            /* Dat
103a0 61 62 61 73 65 20 68 61 6e 64 6c 65 20 2a 2f 0a  abase handle */.
103b0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44    const char *zD
103c0 62 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b,              
103d0 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 61 74 74    /* Name of att
103e0 61 63 68 65 64 20 64 61 74 61 62 61 73 65 20 28  ached database (
103f0 6f 72 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 69 6e  or NULL) */.  in
10400 74 20 65 4d 6f 64 65 2c 20 20 20 20 20 20 20 20  t eMode,        
10410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
10420 20 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49   SQLITE_CHECKPOI
10430 4e 54 5f 2a 20 76 61 6c 75 65 20 2a 2f 0a 20 20  NT_* value */.  
10440 69 6e 74 20 2a 70 6e 4c 6f 67 2c 20 20 20 20 20  int *pnLog,     
10450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10460 2f 2a 20 4f 55 54 3a 20 53 69 7a 65 20 6f 66 20  /* OUT: Size of 
10470 57 41 4c 20 6c 6f 67 20 69 6e 20 66 72 61 6d 65  WAL log in frame
10480 73 20 2a 2f 0a 20 20 69 6e 74 20 2a 70 6e 43 6b  s */.  int *pnCk
10490 70 74 20 20 20 20 20 20 20 20 20 20 20 20 20 20  pt              
104a0 20 20 20 20 20 20 20 2f 2a 20 4f 55 54 3a 20 54         /* OUT: T
104b0 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 66  otal number of f
104c0 72 61 6d 65 73 20 63 68 65 63 6b 70 6f 69 6e 74  rames checkpoint
104d0 65 64 20 2a 2f 0a 29 7b 0a 23 69 66 64 65 66 20  ed */.){.#ifdef 
104e0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a  SQLITE_OMIT_WAL.
104f0 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
10500 4f 4b 3b 0a 23 65 6c 73 65 0a 20 20 69 6e 74 20  OK;.#else.  int 
10510 72 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rc;             
10520 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
10530 65 74 75 72 6e 20 63 6f 64 65 20 2a 2f 0a 20 20  eturn code */.  
10540 69 6e 74 20 69 44 62 20 3d 20 53 51 4c 49 54 45  int iDb = SQLITE
10550 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 3b 20 20  _MAX_ATTACHED;  
10560 2f 2a 20 73 71 6c 69 74 65 33 2e 61 44 62 5b 5d  /* sqlite3.aDb[]
10570 20 69 6e 64 65 78 20 6f 66 20 64 62 20 74 6f 20   index of db to 
10580 63 68 65 63 6b 70 6f 69 6e 74 20 2a 2f 0a 0a 23  checkpoint */..#
10590 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
105a0 42 4c 45 5f 41 50 49 5f 41 52 4d 4f 52 0a 20 20  BLE_API_ARMOR.  
105b0 69 66 28 20 21 73 71 6c 69 74 65 33 53 61 66 65  if( !sqlite3Safe
105c0 74 79 43 68 65 63 6b 4f 6b 28 64 62 29 20 29 20  tyCheckOk(db) ) 
105d0 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49  return SQLITE_MI
105e0 53 55 53 45 5f 42 4b 50 54 3b 0a 23 65 6e 64 69  SUSE_BKPT;.#endi
105f0 66 0a 0a 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69  f..  /* Initiali
10600 7a 65 20 74 68 65 20 6f 75 74 70 75 74 20 76 61  ze the output va
10610 72 69 61 62 6c 65 73 20 74 6f 20 2d 31 20 69 6e  riables to -1 in
10620 20 63 61 73 65 20 61 6e 20 65 72 72 6f 72 20 6f   case an error o
10630 63 63 75 72 73 2e 20 2a 2f 0a 20 20 69 66 28 20  ccurs. */.  if( 
10640 70 6e 4c 6f 67 20 29 20 2a 70 6e 4c 6f 67 20 3d  pnLog ) *pnLog =
10650 20 2d 31 3b 0a 20 20 69 66 28 20 70 6e 43 6b 70   -1;.  if( pnCkp
10660 74 20 29 20 2a 70 6e 43 6b 70 74 20 3d 20 2d 31  t ) *pnCkpt = -1
10670 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 53 51 4c  ;..  assert( SQL
10680 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 50  ITE_CHECKPOINT_P
10690 41 53 53 49 56 45 3d 3d 30 20 29 3b 0a 20 20 61  ASSIVE==0 );.  a
106a0 73 73 65 72 74 28 20 53 51 4c 49 54 45 5f 43 48  ssert( SQLITE_CH
106b0 45 43 4b 50 4f 49 4e 54 5f 46 55 4c 4c 3d 3d 31  ECKPOINT_FULL==1
106c0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 53 51   );.  assert( SQ
106d0 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f  LITE_CHECKPOINT_
106e0 52 45 53 54 41 52 54 3d 3d 32 20 29 3b 0a 20 20  RESTART==2 );.  
106f0 61 73 73 65 72 74 28 20 53 51 4c 49 54 45 5f 43  assert( SQLITE_C
10700 48 45 43 4b 50 4f 49 4e 54 5f 54 52 55 4e 43 41  HECKPOINT_TRUNCA
10710 54 45 3d 3d 33 20 29 3b 0a 20 20 69 66 28 20 65  TE==3 );.  if( e
10720 4d 6f 64 65 3c 53 51 4c 49 54 45 5f 43 48 45 43  Mode<SQLITE_CHEC
10730 4b 50 4f 49 4e 54 5f 50 41 53 53 49 56 45 20 7c  KPOINT_PASSIVE |
10740 7c 20 65 4d 6f 64 65 3e 53 51 4c 49 54 45 5f 43  | eMode>SQLITE_C
10750 48 45 43 4b 50 4f 49 4e 54 5f 54 52 55 4e 43 41  HECKPOINT_TRUNCA
10760 54 45 20 29 7b 0a 20 20 20 20 2f 2a 20 45 56 49  TE ){.    /* EVI
10770 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 30 33 39 39  DENCE-OF: R-0399
10780 36 2d 31 32 30 38 38 20 54 68 65 20 4d 20 70 61  6-12088 The M pa
10790 72 61 6d 65 74 65 72 20 6d 75 73 74 20 62 65 20  rameter must be 
107a0 61 20 76 61 6c 69 64 20 63 68 65 63 6b 70 6f 69  a valid checkpoi
107b0 6e 74 0a 20 20 20 20 2a 2a 20 6d 6f 64 65 3a 20  nt.    ** mode: 
107c0 2a 2f 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51  */.    return SQ
107d0 4c 49 54 45 5f 4d 49 53 55 53 45 3b 0a 20 20 7d  LITE_MISUSE;.  }
107e0 0a 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  ..  sqlite3_mute
107f0 78 5f 65 6e 74 65 72 28 64 62 2d 3e 6d 75 74 65  x_enter(db->mute
10800 78 29 3b 0a 20 20 69 66 28 20 7a 44 62 20 26 26  x);.  if( zDb &&
10810 20 7a 44 62 5b 30 5d 20 29 7b 0a 20 20 20 20 69   zDb[0] ){.    i
10820 44 62 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64  Db = sqlite3Find
10830 44 62 4e 61 6d 65 28 64 62 2c 20 7a 44 62 29 3b  DbName(db, zDb);
10840 0a 20 20 7d 0a 20 20 69 66 28 20 69 44 62 3c 30  .  }.  if( iDb<0
10850 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   ){.    rc = SQL
10860 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 73  ITE_ERROR;.    s
10870 71 6c 69 74 65 33 45 72 72 6f 72 57 69 74 68 4d  qlite3ErrorWithM
10880 73 67 28 64 62 2c 20 53 51 4c 49 54 45 5f 45 52  sg(db, SQLITE_ER
10890 52 4f 52 2c 20 22 75 6e 6b 6e 6f 77 6e 20 64 61  ROR, "unknown da
108a0 74 61 62 61 73 65 3a 20 25 73 22 2c 20 7a 44 62  tabase: %s", zDb
108b0 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
108c0 64 62 2d 3e 62 75 73 79 48 61 6e 64 6c 65 72 2e  db->busyHandler.
108d0 6e 42 75 73 79 20 3d 20 30 3b 0a 20 20 20 20 72  nBusy = 0;.    r
108e0 63 20 3d 20 73 71 6c 69 74 65 33 43 68 65 63 6b  c = sqlite3Check
108f0 70 6f 69 6e 74 28 64 62 2c 20 69 44 62 2c 20 65  point(db, iDb, e
10900 4d 6f 64 65 2c 20 70 6e 4c 6f 67 2c 20 70 6e 43  Mode, pnLog, pnC
10910 6b 70 74 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  kpt);.    sqlite
10920 33 45 72 72 6f 72 28 64 62 2c 20 72 63 29 3b 0a  3Error(db, rc);.
10930 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74    }.  rc = sqlit
10940 65 33 41 70 69 45 78 69 74 28 64 62 2c 20 72 63  e3ApiExit(db, rc
10950 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  );.  sqlite3_mut
10960 65 78 5f 6c 65 61 76 65 28 64 62 2d 3e 6d 75 74  ex_leave(db->mut
10970 65 78 29 3b 0a 20 20 72 65 74 75 72 6e 20 72 63  ex);.  return rc
10980 3b 0a 23 65 6e 64 69 66 0a 7d 0a 0a 0a 2f 2a 0a  ;.#endif.}.../*.
10990 2a 2a 20 43 68 65 63 6b 70 6f 69 6e 74 20 64 61  ** Checkpoint da
109a0 74 61 62 61 73 65 20 7a 44 62 2e 20 49 66 20 7a  tabase zDb. If z
109b0 44 62 20 69 73 20 4e 55 4c 4c 2c 20 6f 72 20 69  Db is NULL, or i
109c0 66 20 74 68 65 20 62 75 66 66 65 72 20 7a 44 62  f the buffer zDb
109d0 20 70 6f 69 6e 74 73 0a 2a 2a 20 74 6f 20 63 6f   points.** to co
109e0 6e 74 61 69 6e 73 20 61 20 7a 65 72 6f 2d 6c 65  ntains a zero-le
109f0 6e 67 74 68 20 73 74 72 69 6e 67 2c 20 61 6c 6c  ngth string, all
10a00 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
10a10 73 65 73 20 61 72 65 20 0a 2a 2a 20 63 68 65 63  ses are .** chec
10a20 6b 70 6f 69 6e 74 65 64 2e 0a 2a 2f 0a 69 6e 74  kpointed..*/.int
10a30 20 73 71 6c 69 74 65 33 5f 77 61 6c 5f 63 68 65   sqlite3_wal_che
10a40 63 6b 70 6f 69 6e 74 28 73 71 6c 69 74 65 33 20  ckpoint(sqlite3 
10a50 2a 64 62 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  *db, const char 
10a60 2a 7a 44 62 29 7b 0a 20 20 2f 2a 20 45 56 49 44  *zDb){.  /* EVID
10a70 45 4e 43 45 2d 4f 46 3a 20 52 2d 34 31 36 31 33  ENCE-OF: R-41613
10a80 2d 32 30 35 35 33 20 54 68 65 20 73 71 6c 69 74  -20553 The sqlit
10a90 65 33 5f 77 61 6c 5f 63 68 65 63 6b 70 6f 69 6e  e3_wal_checkpoin
10aa0 74 28 44 2c 58 29 20 69 73 20 65 71 75 69 76 61  t(D,X) is equiva
10ab0 6c 65 6e 74 20 74 6f 0a 20 20 2a 2a 20 73 71 6c  lent to.  ** sql
10ac0 69 74 65 33 5f 77 61 6c 5f 63 68 65 63 6b 70 6f  ite3_wal_checkpo
10ad0 69 6e 74 5f 76 32 28 44 2c 58 2c 53 51 4c 49 54  int_v2(D,X,SQLIT
10ae0 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 50 41 53  E_CHECKPOINT_PAS
10af0 53 49 56 45 2c 30 2c 30 29 2e 20 2a 2f 0a 20 20  SIVE,0,0). */.  
10b00 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33 5f 77  return sqlite3_w
10b10 61 6c 5f 63 68 65 63 6b 70 6f 69 6e 74 5f 76 32  al_checkpoint_v2
10b20 28 64 62 2c 7a 44 62 2c 53 51 4c 49 54 45 5f 43  (db,zDb,SQLITE_C
10b30 48 45 43 4b 50 4f 49 4e 54 5f 50 41 53 53 49 56  HECKPOINT_PASSIV
10b40 45 2c 30 2c 30 29 3b 0a 7d 0a 0a 23 69 66 6e 64  E,0,0);.}..#ifnd
10b50 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
10b60 41 4c 0a 2f 2a 0a 2a 2a 20 52 75 6e 20 61 20 63  AL./*.** Run a c
10b70 68 65 63 6b 70 6f 69 6e 74 20 6f 6e 20 64 61 74  heckpoint on dat
10b80 61 62 61 73 65 20 69 44 62 2e 20 54 68 69 73 20  abase iDb. This 
10b90 69 73 20 61 20 6e 6f 2d 6f 70 20 69 66 20 64 61  is a no-op if da
10ba0 74 61 62 61 73 65 20 69 44 62 20 69 73 0a 2a 2a  tabase iDb is.**
10bb0 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 6f   not currently o
10bc0 70 65 6e 20 69 6e 20 57 41 4c 20 6d 6f 64 65 2e  pen in WAL mode.
10bd0 0a 2a 2a 0a 2a 2a 20 49 66 20 61 20 74 72 61 6e  .**.** If a tran
10be0 73 61 63 74 69 6f 6e 20 69 73 20 6f 70 65 6e 20  saction is open 
10bf0 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  on the database 
10c00 62 65 69 6e 67 20 63 68 65 63 6b 70 6f 69 6e 74  being checkpoint
10c10 65 64 2c 20 74 68 69 73 20 0a 2a 2a 20 66 75 6e  ed, this .** fun
10c20 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 53 51  ction returns SQ
10c30 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 61 6e 64 20  LITE_LOCKED and 
10c40 61 20 63 68 65 63 6b 70 6f 69 6e 74 20 69 73 20  a checkpoint is 
10c50 6e 6f 74 20 61 74 74 65 6d 70 74 65 64 2e 20 49  not attempted. I
10c60 66 20 0a 2a 2a 20 61 6e 20 65 72 72 6f 72 20 6f  f .** an error o
10c70 63 63 75 72 73 20 77 68 69 6c 65 20 72 75 6e 6e  ccurs while runn
10c80 69 6e 67 20 74 68 65 20 63 68 65 63 6b 70 6f 69  ing the checkpoi
10c90 6e 74 2c 20 61 6e 20 53 51 4c 69 74 65 20 65 72  nt, an SQLite er
10ca0 72 6f 72 20 63 6f 64 65 20 69 73 20 0a 2a 2a 20  ror code is .** 
10cb0 72 65 74 75 72 6e 65 64 20 28 69 2e 65 2e 20 53  returned (i.e. S
10cc0 51 4c 49 54 45 5f 49 4f 45 52 52 29 2e 20 4f 74  QLITE_IOERR). Ot
10cd0 68 65 72 77 69 73 65 2c 20 53 51 4c 49 54 45 5f  herwise, SQLITE_
10ce0 4f 4b 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d 75  OK..**.** The mu
10cf0 74 65 78 20 6f 6e 20 64 61 74 61 62 61 73 65 20  tex on database 
10d00 68 61 6e 64 6c 65 20 64 62 20 73 68 6f 75 6c 64  handle db should
10d10 20 62 65 20 68 65 6c 64 20 62 79 20 74 68 65 20   be held by the 
10d20 63 61 6c 6c 65 72 2e 20 54 68 65 20 6d 75 74 65  caller. The mute
10d30 78 0a 2a 2a 20 61 73 73 6f 63 69 61 74 65 64 20  x.** associated 
10d40 77 69 74 68 20 74 68 65 20 73 70 65 63 69 66 69  with the specifi
10d50 63 20 62 2d 74 72 65 65 20 62 65 69 6e 67 20 63  c b-tree being c
10d60 68 65 63 6b 70 6f 69 6e 74 65 64 20 69 73 20 74  heckpointed is t
10d70 61 6b 65 6e 20 62 79 0a 2a 2a 20 74 68 69 73 20  aken by.** this 
10d80 66 75 6e 63 74 69 6f 6e 20 77 68 69 6c 65 20 74  function while t
10d90 68 65 20 63 68 65 63 6b 70 6f 69 6e 74 20 69 73  he checkpoint is
10da0 20 72 75 6e 6e 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20   running..**.** 
10db0 49 66 20 69 44 62 20 69 73 20 70 61 73 73 65 64  If iDb is passed
10dc0 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41   SQLITE_MAX_ATTA
10dd0 43 48 45 44 2c 20 74 68 65 6e 20 61 6c 6c 20 61  CHED, then all a
10de0 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
10df0 73 20 61 72 65 0a 2a 2a 20 63 68 65 63 6b 70 6f  s are.** checkpo
10e00 69 6e 74 65 64 2e 20 49 66 20 61 6e 20 65 72 72  inted. If an err
10e10 6f 72 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65  or is encountere
10e20 64 20 69 74 20 69 73 20 72 65 74 75 72 6e 65 64  d it is returned
10e30 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 2d 0a 2a   immediately -.*
10e40 2a 20 6e 6f 20 61 74 74 65 6d 70 74 20 69 73 20  * no attempt is 
10e50 6d 61 64 65 20 74 6f 20 63 68 65 63 6b 70 6f 69  made to checkpoi
10e60 6e 74 20 61 6e 79 20 72 65 6d 61 69 6e 69 6e 67  nt any remaining
10e70 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2a 0a 2a   databases..**.*
10e80 2a 20 50 61 72 61 6d 65 74 65 72 20 65 4d 6f 64  * Parameter eMod
10e90 65 20 69 73 20 6f 6e 65 20 6f 66 20 53 51 4c 49  e is one of SQLI
10ea0 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 50 41  TE_CHECKPOINT_PA
10eb0 53 53 49 56 45 2c 20 46 55 4c 4c 20 6f 72 20 52  SSIVE, FULL or R
10ec0 45 53 54 41 52 54 2e 0a 2a 2f 0a 69 6e 74 20 73  ESTART..*/.int s
10ed0 71 6c 69 74 65 33 43 68 65 63 6b 70 6f 69 6e 74  qlite3Checkpoint
10ee0 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 69 6e  (sqlite3 *db, in
10ef0 74 20 69 44 62 2c 20 69 6e 74 20 65 4d 6f 64 65  t iDb, int eMode
10f00 2c 20 69 6e 74 20 2a 70 6e 4c 6f 67 2c 20 69 6e  , int *pnLog, in
10f10 74 20 2a 70 6e 43 6b 70 74 29 7b 0a 20 20 69 6e  t *pnCkpt){.  in
10f20 74 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b  t rc = SQLITE_OK
10f30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
10f40 20 52 65 74 75 72 6e 20 63 6f 64 65 20 2a 2f 0a   Return code */.
10f50 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20    int i;        
10f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10f70 20 20 2f 2a 20 55 73 65 64 20 74 6f 20 69 74 65    /* Used to ite
10f80 72 61 74 65 20 74 68 72 6f 75 67 68 20 61 74 74  rate through att
10f90 61 63 68 65 64 20 64 62 73 20 2a 2f 0a 20 20 69  ached dbs */.  i
10fa0 6e 74 20 62 42 75 73 79 20 3d 20 30 3b 20 20 20  nt bBusy = 0;   
10fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
10fc0 2a 20 54 72 75 65 20 69 66 20 53 51 4c 49 54 45  * True if SQLITE
10fd0 5f 42 55 53 59 20 68 61 73 20 62 65 65 6e 20 65  _BUSY has been e
10fe0 6e 63 6f 75 6e 74 65 72 65 64 20 2a 2f 0a 0a 20  ncountered */.. 
10ff0 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
11000 5f 6d 75 74 65 78 5f 68 65 6c 64 28 64 62 2d 3e  _mutex_held(db->
11010 6d 75 74 65 78 29 20 29 3b 0a 20 20 61 73 73 65  mutex) );.  asse
11020 72 74 28 20 21 70 6e 4c 6f 67 20 7c 7c 20 2a 70  rt( !pnLog || *p
11030 6e 4c 6f 67 3d 3d 2d 31 20 29 3b 0a 20 20 61 73  nLog==-1 );.  as
11040 73 65 72 74 28 20 21 70 6e 43 6b 70 74 20 7c 7c  sert( !pnCkpt ||
11050 20 2a 70 6e 43 6b 70 74 3d 3d 2d 31 20 29 3b 0a   *pnCkpt==-1 );.
11060 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 64 62  .  for(i=0; i<db
11070 2d 3e 6e 44 62 20 26 26 20 72 63 3d 3d 53 51 4c  ->nDb && rc==SQL
11080 49 54 45 5f 4f 4b 3b 20 69 2b 2b 29 7b 0a 20 20  ITE_OK; i++){.  
11090 20 20 69 66 28 20 69 3d 3d 69 44 62 20 7c 7c 20    if( i==iDb || 
110a0 69 44 62 3d 3d 53 51 4c 49 54 45 5f 4d 41 58 5f  iDb==SQLITE_MAX_
110b0 41 54 54 41 43 48 45 44 20 29 7b 0a 20 20 20 20  ATTACHED ){.    
110c0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
110d0 72 65 65 43 68 65 63 6b 70 6f 69 6e 74 28 64 62  reeCheckpoint(db
110e0 2d 3e 61 44 62 5b 69 5d 2e 70 42 74 2c 20 65 4d  ->aDb[i].pBt, eM
110f0 6f 64 65 2c 20 70 6e 4c 6f 67 2c 20 70 6e 43 6b  ode, pnLog, pnCk
11100 70 74 29 3b 0a 20 20 20 20 20 20 70 6e 4c 6f 67  pt);.      pnLog
11110 20 3d 20 30 3b 0a 20 20 20 20 20 20 70 6e 43 6b   = 0;.      pnCk
11120 70 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 69 66  pt = 0;.      if
11130 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53  ( rc==SQLITE_BUS
11140 59 20 29 7b 0a 20 20 20 20 20 20 20 20 62 42 75  Y ){.        bBu
11150 73 79 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  sy = 1;.        
11160 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  rc = SQLITE_OK;.
11170 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
11180 7d 0a 0a 20 20 72 65 74 75 72 6e 20 28 72 63 3d  }..  return (rc=
11190 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 62 42  =SQLITE_OK && bB
111a0 75 73 79 29 20 3f 20 53 51 4c 49 54 45 5f 42 55  usy) ? SQLITE_BU
111b0 53 59 20 3a 20 72 63 3b 0a 7d 0a 23 65 6e 64 69  SY : rc;.}.#endi
111c0 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
111d0 5f 57 41 4c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54  _WAL */../*.** T
111e0 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  his function ret
111f0 75 72 6e 73 20 74 72 75 65 20 69 66 20 6d 61 69  urns true if mai
11200 6e 2d 6d 65 6d 6f 72 79 20 73 68 6f 75 6c 64 20  n-memory should 
11210 62 65 20 75 73 65 64 20 69 6e 73 74 65 61 64 20  be used instead 
11220 6f 66 0a 2a 2a 20 61 20 74 65 6d 70 6f 72 61 72  of.** a temporar
11230 79 20 66 69 6c 65 20 66 6f 72 20 74 72 61 6e 73  y file for trans
11240 69 65 6e 74 20 70 61 67 65 72 20 66 69 6c 65 73  ient pager files
11250 20 61 6e 64 20 73 74 61 74 65 6d 65 6e 74 20 6a   and statement j
11260 6f 75 72 6e 61 6c 73 2e 0a 2a 2a 20 54 68 65 20  ournals..** The 
11270 76 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20 64  value returned d
11280 65 70 65 6e 64 73 20 6f 6e 20 74 68 65 20 76 61  epends on the va
11290 6c 75 65 20 6f 66 20 64 62 2d 3e 74 65 6d 70 5f  lue of db->temp_
112a0 73 74 6f 72 65 20 28 72 75 6e 74 69 6d 65 0a 2a  store (runtime.*
112b0 2a 20 70 61 72 61 6d 65 74 65 72 29 20 61 6e 64  * parameter) and
112c0 20 74 68 65 20 63 6f 6d 70 69 6c 65 20 74 69 6d   the compile tim
112d0 65 20 76 61 6c 75 65 20 6f 66 20 53 51 4c 49 54  e value of SQLIT
112e0 45 5f 54 45 4d 50 5f 53 54 4f 52 45 2e 20 54 68  E_TEMP_STORE. Th
112f0 65 0a 2a 2a 20 66 6f 6c 6c 6f 77 69 6e 67 20 74  e.** following t
11300 61 62 6c 65 20 64 65 73 63 72 69 62 65 73 20 74  able describes t
11310 68 65 20 72 65 6c 61 74 69 6f 6e 73 68 69 70 20  he relationship 
11320 62 65 74 77 65 65 6e 20 74 68 65 73 65 20 74 77  between these tw
11330 6f 20 76 61 6c 75 65 73 0a 2a 2a 20 61 6e 64 20  o values.** and 
11340 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 73 20 72  this functions r
11350 65 74 75 72 6e 20 76 61 6c 75 65 2e 0a 2a 2a 0a  eturn value..**.
11360 2a 2a 20 20 20 53 51 4c 49 54 45 5f 54 45 4d 50  **   SQLITE_TEMP
11370 5f 53 54 4f 52 45 20 20 20 20 20 64 62 2d 3e 74  _STORE     db->t
11380 65 6d 70 5f 73 74 6f 72 65 20 20 20 20 20 4c 6f  emp_store     Lo
11390 63 61 74 69 6f 6e 20 6f 66 20 74 65 6d 70 6f 72  cation of tempor
113a0 61 72 79 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  ary database.** 
113b0 20 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d    --------------
113c0 2d 2d 2d 20 20 20 20 20 2d 2d 2d 2d 2d 2d 2d 2d  ---     --------
113d0 2d 2d 2d 2d 2d 2d 20 20 20 20 20 2d 2d 2d 2d 2d  ------     -----
113e0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
113f0 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 2a 2a 20 20 20 30  ---------.**   0
11400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11410 20 20 20 20 20 61 6e 79 20 20 20 20 20 20 20 20       any        
11420 20 20 20 20 20 20 20 20 66 69 6c 65 20 20 20 20          file    
11430 20 20 28 72 65 74 75 72 6e 20 30 29 0a 2a 2a 20    (return 0).** 
11440 20 20 31 20 20 20 20 20 20 20 20 20 20 20 20 20    1             
11450 20 20 20 20 20 20 20 20 31 20 20 20 20 20 20 20          1       
11460 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 20             file 
11470 20 20 20 20 20 28 72 65 74 75 72 6e 20 30 29 0a       (return 0).
11480 2a 2a 20 20 20 31 20 20 20 20 20 20 20 20 20 20  **   1          
11490 20 20 20 20 20 20 20 20 20 20 20 32 20 20 20 20             2    
114a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 65                me
114b0 6d 6f 72 79 20 20 20 20 28 72 65 74 75 72 6e 20  mory    (return 
114c0 31 29 0a 2a 2a 20 20 20 31 20 20 20 20 20 20 20  1).**   1       
114d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30 20                0 
114e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
114f0 20 66 69 6c 65 20 20 20 20 20 20 28 72 65 74 75   file      (retu
11500 72 6e 20 30 29 0a 2a 2a 20 20 20 32 20 20 20 20  rn 0).**   2    
11510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11520 20 31 20 20 20 20 20 20 20 20 20 20 20 20 20 20   1              
11530 20 20 20 20 66 69 6c 65 20 20 20 20 20 20 28 72      file      (r
11540 65 74 75 72 6e 20 30 29 0a 2a 2a 20 20 20 32 20  eturn 0).**   2 
11550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11560 20 20 20 20 32 20 20 20 20 20 20 20 20 20 20 20      2           
11570 20 20 20 20 20 20 20 6d 65 6d 6f 72 79 20 20 20         memory   
11580 20 28 72 65 74 75 72 6e 20 31 29 0a 2a 2a 20 20   (return 1).**  
11590 20 32 20 20 20 20 20 20 20 20 20 20 20 20 20 20   2              
115a0 20 20 20 20 20 20 20 30 20 20 20 20 20 20 20 20         0        
115b0 20 20 20 20 20 20 20 20 20 20 6d 65 6d 6f 72 79            memory
115c0 20 20 20 20 28 72 65 74 75 72 6e 20 31 29 0a 2a      (return 1).*
115d0 2a 20 20 20 33 20 20 20 20 20 20 20 20 20 20 20  *   3           
115e0 20 20 20 20 20 20 20 20 20 20 61 6e 79 20 20 20            any   
115f0 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 65 6d               mem
11600 6f 72 79 20 20 20 20 28 72 65 74 75 72 6e 20 31  ory    (return 1
11610 29 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ).*/.int sqlite3
11620 54 65 6d 70 49 6e 4d 65 6d 6f 72 79 28 63 6f 6e  TempInMemory(con
11630 73 74 20 73 71 6c 69 74 65 33 20 2a 64 62 29 7b  st sqlite3 *db){
11640 0a 23 69 66 20 53 51 4c 49 54 45 5f 54 45 4d 50  .#if SQLITE_TEMP
11650 5f 53 54 4f 52 45 3d 3d 31 0a 20 20 72 65 74 75  _STORE==1.  retu
11660 72 6e 20 28 20 64 62 2d 3e 74 65 6d 70 5f 73 74  rn ( db->temp_st
11670 6f 72 65 3d 3d 32 20 29 3b 0a 23 65 6e 64 69 66  ore==2 );.#endif
11680 0a 23 69 66 20 53 51 4c 49 54 45 5f 54 45 4d 50  .#if SQLITE_TEMP
11690 5f 53 54 4f 52 45 3d 3d 32 0a 20 20 72 65 74 75  _STORE==2.  retu
116a0 72 6e 20 28 20 64 62 2d 3e 74 65 6d 70 5f 73 74  rn ( db->temp_st
116b0 6f 72 65 21 3d 31 20 29 3b 0a 23 65 6e 64 69 66  ore!=1 );.#endif
116c0 0a 23 69 66 20 53 51 4c 49 54 45 5f 54 45 4d 50  .#if SQLITE_TEMP
116d0 5f 53 54 4f 52 45 3d 3d 33 0a 20 20 55 4e 55 53  _STORE==3.  UNUS
116e0 45 44 5f 50 41 52 41 4d 45 54 45 52 28 64 62 29  ED_PARAMETER(db)
116f0 3b 0a 20 20 72 65 74 75 72 6e 20 31 3b 0a 23 65  ;.  return 1;.#e
11700 6e 64 69 66 0a 23 69 66 20 53 51 4c 49 54 45 5f  ndif.#if SQLITE_
11710 54 45 4d 50 5f 53 54 4f 52 45 3c 31 20 7c 7c 20  TEMP_STORE<1 || 
11720 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52  SQLITE_TEMP_STOR
11730 45 3e 33 0a 20 20 55 4e 55 53 45 44 5f 50 41 52  E>3.  UNUSED_PAR
11740 41 4d 45 54 45 52 28 64 62 29 3b 0a 20 20 72 65  AMETER(db);.  re
11750 74 75 72 6e 20 30 3b 0a 23 65 6e 64 69 66 0a 7d  turn 0;.#endif.}
11760 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 55  ../*.** Return U
11770 54 46 2d 38 20 65 6e 63 6f 64 65 64 20 45 6e 67  TF-8 encoded Eng
11780 6c 69 73 68 20 6c 61 6e 67 75 61 67 65 20 65 78  lish language ex
11790 70 6c 61 6e 61 74 69 6f 6e 20 6f 66 20 74 68 65  planation of the
117a0 20 6d 6f 73 74 20 72 65 63 65 6e 74 0a 2a 2a 20   most recent.** 
117b0 65 72 72 6f 72 2e 0a 2a 2f 0a 63 6f 6e 73 74 20  error..*/.const 
117c0 63 68 61 72 20 2a 73 71 6c 69 74 65 33 5f 65 72  char *sqlite3_er
117d0 72 6d 73 67 28 73 71 6c 69 74 65 33 20 2a 64 62  rmsg(sqlite3 *db
117e0 29 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  ){.  const char 
117f0 2a 7a 3b 0a 20 20 69 66 28 20 21 64 62 20 29 7b  *z;.  if( !db ){
11800 0a 20 20 20 20 72 65 74 75 72 6e 20 73 71 6c 69  .    return sqli
11810 74 65 33 45 72 72 53 74 72 28 53 51 4c 49 54 45  te3ErrStr(SQLITE
11820 5f 4e 4f 4d 45 4d 29 3b 0a 20 20 7d 0a 20 20 69  _NOMEM);.  }.  i
11830 66 28 20 21 73 71 6c 69 74 65 33 53 61 66 65 74  f( !sqlite3Safet
11840 79 43 68 65 63 6b 53 69 63 6b 4f 72 4f 6b 28 64  yCheckSickOrOk(d
11850 62 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  b) ){.    return
11860 20 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 53   sqlite3ErrStr(S
11870 51 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50  QLITE_MISUSE_BKP
11880 54 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65  T);.  }.  sqlite
11890 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72 28 64 62  3_mutex_enter(db
118a0 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 69 66 28 20  ->mutex);.  if( 
118b0 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
118c0 20 29 7b 0a 20 20 20 20 7a 20 3d 20 73 71 6c 69   ){.    z = sqli
118d0 74 65 33 45 72 72 53 74 72 28 53 51 4c 49 54 45  te3ErrStr(SQLITE
118e0 5f 4e 4f 4d 45 4d 29 3b 0a 20 20 7d 65 6c 73 65  _NOMEM);.  }else
118f0 7b 0a 20 20 20 20 74 65 73 74 63 61 73 65 28 20  {.    testcase( 
11900 64 62 2d 3e 70 45 72 72 3d 3d 30 20 29 3b 0a 20  db->pErr==0 );. 
11910 20 20 20 7a 20 3d 20 28 63 68 61 72 2a 29 73 71     z = (char*)sq
11920 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
11930 28 64 62 2d 3e 70 45 72 72 29 3b 0a 20 20 20 20  (db->pErr);.    
11940 61 73 73 65 72 74 28 20 21 64 62 2d 3e 6d 61 6c  assert( !db->mal
11950 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20 20  locFailed );.   
11960 20 69 66 28 20 7a 3d 3d 30 20 29 7b 0a 20 20 20   if( z==0 ){.   
11970 20 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 45 72     z = sqlite3Er
11980 72 53 74 72 28 64 62 2d 3e 65 72 72 43 6f 64 65  rStr(db->errCode
11990 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 73  );.    }.  }.  s
119a0 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61  qlite3_mutex_lea
119b0 76 65 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20  ve(db->mutex);. 
119c0 20 72 65 74 75 72 6e 20 7a 3b 0a 7d 0a 0a 23 69   return z;.}..#i
119d0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
119e0 54 5f 55 54 46 31 36 0a 2f 2a 0a 2a 2a 20 52 65  T_UTF16./*.** Re
119f0 74 75 72 6e 20 55 54 46 2d 31 36 20 65 6e 63 6f  turn UTF-16 enco
11a00 64 65 64 20 45 6e 67 6c 69 73 68 20 6c 61 6e 67  ded English lang
11a10 75 61 67 65 20 65 78 70 6c 61 6e 61 74 69 6f 6e  uage explanation
11a20 20 6f 66 20 74 68 65 20 6d 6f 73 74 20 72 65 63   of the most rec
11a30 65 6e 74 0a 2a 2a 20 65 72 72 6f 72 2e 0a 2a 2f  ent.** error..*/
11a40 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c  .const void *sql
11a50 69 74 65 33 5f 65 72 72 6d 73 67 31 36 28 73 71  ite3_errmsg16(sq
11a60 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20 20 73 74  lite3 *db){.  st
11a70 61 74 69 63 20 63 6f 6e 73 74 20 75 31 36 20 6f  atic const u16 o
11a80 75 74 4f 66 4d 65 6d 5b 5d 20 3d 20 7b 0a 20 20  utOfMem[] = {.  
11a90 20 20 27 6f 27 2c 20 27 75 27 2c 20 27 74 27 2c    'o', 'u', 't',
11aa0 20 27 20 27 2c 20 27 6f 27 2c 20 27 66 27 2c 20   ' ', 'o', 'f', 
11ab0 27 20 27 2c 20 27 6d 27 2c 20 27 65 27 2c 20 27  ' ', 'm', 'e', '
11ac0 6d 27 2c 20 27 6f 27 2c 20 27 72 27 2c 20 27 79  m', 'o', 'r', 'y
11ad0 27 2c 20 30 0a 20 20 7d 3b 0a 20 20 73 74 61 74  ', 0.  };.  stat
11ae0 69 63 20 63 6f 6e 73 74 20 75 31 36 20 6d 69 73  ic const u16 mis
11af0 75 73 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 27 6c  use[] = {.    'l
11b00 27 2c 20 27 69 27 2c 20 27 62 27 2c 20 27 72 27  ', 'i', 'b', 'r'
11b10 2c 20 27 61 27 2c 20 27 72 27 2c 20 27 79 27 2c  , 'a', 'r', 'y',
11b20 20 27 20 27 2c 20 0a 20 20 20 20 27 72 27 2c 20   ' ', .    'r', 
11b30 27 6f 27 2c 20 27 75 27 2c 20 27 74 27 2c 20 27  'o', 'u', 't', '
11b40 69 27 2c 20 27 6e 27 2c 20 27 65 27 2c 20 27 20  i', 'n', 'e', ' 
11b50 27 2c 20 0a 20 20 20 20 27 63 27 2c 20 27 61 27  ', .    'c', 'a'
11b60 2c 20 27 6c 27 2c 20 27 6c 27 2c 20 27 65 27 2c  , 'l', 'l', 'e',
11b70 20 27 64 27 2c 20 27 20 27 2c 20 0a 20 20 20 20   'd', ' ', .    
11b80 27 6f 27 2c 20 27 75 27 2c 20 27 74 27 2c 20 27  'o', 'u', 't', '
11b90 20 27 2c 20 0a 20 20 20 20 27 6f 27 2c 20 27 66   ', .    'o', 'f
11ba0 27 2c 20 27 20 27 2c 20 0a 20 20 20 20 27 73 27  ', ' ', .    's'
11bb0 2c 20 27 65 27 2c 20 27 71 27 2c 20 27 75 27 2c  , 'e', 'q', 'u',
11bc0 20 27 65 27 2c 20 27 6e 27 2c 20 27 63 27 2c 20   'e', 'n', 'c', 
11bd0 27 65 27 2c 20 30 0a 20 20 7d 3b 0a 0a 20 20 63  'e', 0.  };..  c
11be0 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 3b 0a 20 20  onst void *z;.  
11bf0 69 66 28 20 21 64 62 20 29 7b 0a 20 20 20 20 72  if( !db ){.    r
11c00 65 74 75 72 6e 20 28 76 6f 69 64 20 2a 29 6f 75  eturn (void *)ou
11c10 74 4f 66 4d 65 6d 3b 0a 20 20 7d 0a 20 20 69 66  tOfMem;.  }.  if
11c20 28 20 21 73 71 6c 69 74 65 33 53 61 66 65 74 79  ( !sqlite3Safety
11c30 43 68 65 63 6b 53 69 63 6b 4f 72 4f 6b 28 64 62  CheckSickOrOk(db
11c40 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  ) ){.    return 
11c50 28 76 6f 69 64 20 2a 29 6d 69 73 75 73 65 3b 0a  (void *)misuse;.
11c60 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75    }.  sqlite3_mu
11c70 74 65 78 5f 65 6e 74 65 72 28 64 62 2d 3e 6d 75  tex_enter(db->mu
11c80 74 65 78 29 3b 0a 20 20 69 66 28 20 64 62 2d 3e  tex);.  if( db->
11c90 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 7b 0a  mallocFailed ){.
11ca0 20 20 20 20 7a 20 3d 20 28 76 6f 69 64 20 2a 29      z = (void *)
11cb0 6f 75 74 4f 66 4d 65 6d 3b 0a 20 20 7d 65 6c 73  outOfMem;.  }els
11cc0 65 7b 0a 20 20 20 20 7a 20 3d 20 73 71 6c 69 74  e{.    z = sqlit
11cd0 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 31 36 28  e3_value_text16(
11ce0 64 62 2d 3e 70 45 72 72 29 3b 0a 20 20 20 20 69  db->pErr);.    i
11cf0 66 28 20 7a 3d 3d 30 20 29 7b 0a 20 20 20 20 20  f( z==0 ){.     
11d00 20 73 71 6c 69 74 65 33 45 72 72 6f 72 57 69 74   sqlite3ErrorWit
11d10 68 4d 73 67 28 64 62 2c 20 64 62 2d 3e 65 72 72  hMsg(db, db->err
11d20 43 6f 64 65 2c 20 73 71 6c 69 74 65 33 45 72 72  Code, sqlite3Err
11d30 53 74 72 28 64 62 2d 3e 65 72 72 43 6f 64 65 29  Str(db->errCode)
11d40 29 3b 0a 20 20 20 20 20 20 7a 20 3d 20 73 71 6c  );.      z = sql
11d50 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 31  ite3_value_text1
11d60 36 28 64 62 2d 3e 70 45 72 72 29 3b 0a 20 20 20  6(db->pErr);.   
11d70 20 7d 0a 20 20 20 20 2f 2a 20 41 20 6d 61 6c 6c   }.    /* A mall
11d80 6f 63 28 29 20 6d 61 79 20 68 61 76 65 20 66 61  oc() may have fa
11d90 69 6c 65 64 20 77 69 74 68 69 6e 20 74 68 65 20  iled within the 
11da0 63 61 6c 6c 20 74 6f 20 73 71 6c 69 74 65 33 5f  call to sqlite3_
11db0 76 61 6c 75 65 5f 74 65 78 74 31 36 28 29 0a 20  value_text16(). 
11dc0 20 20 20 2a 2a 20 61 62 6f 76 65 2e 20 49 66 20     ** above. If 
11dd0 74 68 69 73 20 69 73 20 74 68 65 20 63 61 73 65  this is the case
11de0 2c 20 74 68 65 6e 20 74 68 65 20 64 62 2d 3e 6d  , then the db->m
11df0 61 6c 6c 6f 63 46 61 69 6c 65 64 20 66 6c 61 67  allocFailed flag
11e00 20 6e 65 65 64 73 20 74 6f 0a 20 20 20 20 2a 2a   needs to.    **
11e10 20 62 65 20 63 6c 65 61 72 65 64 20 62 65 66 6f   be cleared befo
11e20 72 65 20 72 65 74 75 72 6e 69 6e 67 2e 20 44 6f  re returning. Do
11e30 20 74 68 69 73 20 64 69 72 65 63 74 6c 79 2c 20   this directly, 
11e40 69 6e 73 74 65 61 64 20 6f 66 20 76 69 61 0a 20  instead of via. 
11e50 20 20 20 2a 2a 20 73 71 6c 69 74 65 33 41 70 69     ** sqlite3Api
11e60 45 78 69 74 28 29 2c 20 74 6f 20 61 76 6f 69 64  Exit(), to avoid
11e70 20 73 65 74 74 69 6e 67 20 74 68 65 20 64 61 74   setting the dat
11e80 61 62 61 73 65 20 68 61 6e 64 6c 65 20 65 72 72  abase handle err
11e90 6f 72 20 6d 65 73 73 61 67 65 2e 0a 20 20 20 20  or message..    
11ea0 2a 2f 0a 20 20 20 20 64 62 2d 3e 6d 61 6c 6c 6f  */.    db->mallo
11eb0 63 46 61 69 6c 65 64 20 3d 20 30 3b 0a 20 20 7d  cFailed = 0;.  }
11ec0 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  .  sqlite3_mutex
11ed0 5f 6c 65 61 76 65 28 64 62 2d 3e 6d 75 74 65 78  _leave(db->mutex
11ee0 29 3b 0a 20 20 72 65 74 75 72 6e 20 7a 3b 0a 7d  );.  return z;.}
11ef0 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
11f00 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a  E_OMIT_UTF16 */.
11f10 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68  ./*.** Return th
11f20 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 65 72  e most recent er
11f30 72 6f 72 20 63 6f 64 65 20 67 65 6e 65 72 61 74  ror code generat
11f40 65 64 20 62 79 20 61 6e 20 53 51 4c 69 74 65 20  ed by an SQLite 
11f50 72 6f 75 74 69 6e 65 2e 20 49 66 20 4e 55 4c 4c  routine. If NULL
11f60 20 69 73 0a 2a 2a 20 70 61 73 73 65 64 20 74 6f   is.** passed to
11f70 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 2c 20   this function, 
11f80 77 65 20 61 73 73 75 6d 65 20 61 20 6d 61 6c 6c  we assume a mall
11f90 6f 63 28 29 20 66 61 69 6c 65 64 20 64 75 72 69  oc() failed duri
11fa0 6e 67 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 28  ng sqlite3_open(
11fb0 29 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  )..*/.int sqlite
11fc0 33 5f 65 72 72 63 6f 64 65 28 73 71 6c 69 74 65  3_errcode(sqlite
11fd0 33 20 2a 64 62 29 7b 0a 20 20 69 66 28 20 64 62  3 *db){.  if( db
11fe0 20 26 26 20 21 73 71 6c 69 74 65 33 53 61 66 65   && !sqlite3Safe
11ff0 74 79 43 68 65 63 6b 53 69 63 6b 4f 72 4f 6b 28  tyCheckSickOrOk(
12000 64 62 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72  db) ){.    retur
12010 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 5f  n SQLITE_MISUSE_
12020 42 4b 50 54 3b 0a 20 20 7d 0a 20 20 69 66 28 20  BKPT;.  }.  if( 
12030 21 64 62 20 7c 7c 20 64 62 2d 3e 6d 61 6c 6c 6f  !db || db->mallo
12040 63 46 61 69 6c 65 64 20 29 7b 0a 20 20 20 20 72  cFailed ){.    r
12050 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4e 4f 4d  eturn SQLITE_NOM
12060 45 4d 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  EM;.  }.  return
12070 20 64 62 2d 3e 65 72 72 43 6f 64 65 20 26 20 64   db->errCode & d
12080 62 2d 3e 65 72 72 4d 61 73 6b 3b 0a 7d 0a 69 6e  b->errMask;.}.in
12090 74 20 73 71 6c 69 74 65 33 5f 65 78 74 65 6e 64  t sqlite3_extend
120a0 65 64 5f 65 72 72 63 6f 64 65 28 73 71 6c 69 74  ed_errcode(sqlit
120b0 65 33 20 2a 64 62 29 7b 0a 20 20 69 66 28 20 64  e3 *db){.  if( d
120c0 62 20 26 26 20 21 73 71 6c 69 74 65 33 53 61 66  b && !sqlite3Saf
120d0 65 74 79 43 68 65 63 6b 53 69 63 6b 4f 72 4f 6b  etyCheckSickOrOk
120e0 28 64 62 29 20 29 7b 0a 20 20 20 20 72 65 74 75  (db) ){.    retu
120f0 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45  rn SQLITE_MISUSE
12100 5f 42 4b 50 54 3b 0a 20 20 7d 0a 20 20 69 66 28  _BKPT;.  }.  if(
12110 20 21 64 62 20 7c 7c 20 64 62 2d 3e 6d 61 6c 6c   !db || db->mall
12120 6f 63 46 61 69 6c 65 64 20 29 7b 0a 20 20 20 20  ocFailed ){.    
12130 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4e 4f  return SQLITE_NO
12140 4d 45 4d 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  MEM;.  }.  retur
12150 6e 20 64 62 2d 3e 65 72 72 43 6f 64 65 3b 0a 7d  n db->errCode;.}
12160 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 61  ../*.** Return a
12170 20 73 74 72 69 6e 67 20 74 68 61 74 20 64 65 73   string that des
12180 63 72 69 62 65 73 20 74 68 65 20 6b 69 6e 64 20  cribes the kind 
12190 6f 66 20 65 72 72 6f 72 20 73 70 65 63 69 66 69  of error specifi
121a0 65 64 20 69 6e 20 74 68 65 0a 2a 2a 20 61 72 67  ed in the.** arg
121b0 75 6d 65 6e 74 2e 20 20 46 6f 72 20 6e 6f 77 2c  ument.  For now,
121c0 20 74 68 69 73 20 73 69 6d 70 6c 79 20 63 61 6c   this simply cal
121d0 6c 73 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20  ls the internal 
121e0 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 29 0a  sqlite3ErrStr().
121f0 2a 2a 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a  ** function..*/.
12200 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69  const char *sqli
12210 74 65 33 5f 65 72 72 73 74 72 28 69 6e 74 20 72  te3_errstr(int r
12220 63 29 7b 0a 20 20 72 65 74 75 72 6e 20 73 71 6c  c){.  return sql
12230 69 74 65 33 45 72 72 53 74 72 28 72 63 29 3b 0a  ite3ErrStr(rc);.
12240 7d 0a 0a 2f 2a 0a 2a 2a 20 43 72 65 61 74 65 20  }../*.** Create 
12250 61 20 6e 65 77 20 63 6f 6c 6c 61 74 69 6e 67 20  a new collating 
12260 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 64 61 74  function for dat
12270 61 62 61 73 65 20 22 64 62 22 2e 20 20 54 68 65  abase "db".  The
12280 20 6e 61 6d 65 20 69 73 20 7a 4e 61 6d 65 0a 2a   name is zName.*
12290 2a 20 61 6e 64 20 74 68 65 20 65 6e 63 6f 64 69  * and the encodi
122a0 6e 67 20 69 73 20 65 6e 63 2e 0a 2a 2f 0a 73 74  ng is enc..*/.st
122b0 61 74 69 63 20 69 6e 74 20 63 72 65 61 74 65 43  atic int createC
122c0 6f 6c 6c 61 74 69 6f 6e 28 0a 20 20 73 71 6c 69  ollation(.  sqli
122d0 74 65 33 2a 20 64 62 2c 0a 20 20 63 6f 6e 73 74  te3* db,.  const
122e0 20 63 68 61 72 20 2a 7a 4e 61 6d 65 2c 20 0a 20   char *zName, . 
122f0 20 75 38 20 65 6e 63 2c 0a 20 20 76 6f 69 64 2a   u8 enc,.  void*
12300 20 70 43 74 78 2c 0a 20 20 69 6e 74 28 2a 78 43   pCtx,.  int(*xC
12310 6f 6d 70 61 72 65 29 28 76 6f 69 64 2a 2c 69 6e  ompare)(void*,in
12320 74 2c 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 69 6e  t,const void*,in
12330 74 2c 63 6f 6e 73 74 20 76 6f 69 64 2a 29 2c 0a  t,const void*),.
12340 20 20 76 6f 69 64 28 2a 78 44 65 6c 29 28 76 6f    void(*xDel)(vo
12350 69 64 2a 29 0a 29 7b 0a 20 20 43 6f 6c 6c 53 65  id*).){.  CollSe
12360 71 20 2a 70 43 6f 6c 6c 3b 0a 20 20 69 6e 74 20  q *pColl;.  int 
12370 65 6e 63 32 3b 0a 20 20 0a 20 20 61 73 73 65 72  enc2;.  .  asser
12380 74 28 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  t( sqlite3_mutex
12390 5f 68 65 6c 64 28 64 62 2d 3e 6d 75 74 65 78 29  _held(db->mutex)
123a0 20 29 3b 0a 0a 20 20 2f 2a 20 49 66 20 53 51 4c   );..  /* If SQL
123b0 49 54 45 5f 55 54 46 31 36 20 69 73 20 73 70 65  ITE_UTF16 is spe
123c0 63 69 66 69 65 64 20 61 73 20 74 68 65 20 65 6e  cified as the en
123d0 63 6f 64 69 6e 67 20 74 79 70 65 2c 20 74 72 61  coding type, tra
123e0 6e 73 66 6f 72 6d 20 74 68 69 73 0a 20 20 2a 2a  nsform this.  **
123f0 20 74 6f 20 6f 6e 65 20 6f 66 20 53 51 4c 49 54   to one of SQLIT
12400 45 5f 55 54 46 31 36 4c 45 20 6f 72 20 53 51 4c  E_UTF16LE or SQL
12410 49 54 45 5f 55 54 46 31 36 42 45 20 75 73 69 6e  ITE_UTF16BE usin
12420 67 20 74 68 65 0a 20 20 2a 2a 20 53 51 4c 49 54  g the.  ** SQLIT
12430 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20 6d 61  E_UTF16NATIVE ma
12440 63 72 6f 2e 20 53 51 4c 49 54 45 5f 55 54 46 31  cro. SQLITE_UTF1
12450 36 20 69 73 20 6e 6f 74 20 75 73 65 64 20 69 6e  6 is not used in
12460 74 65 72 6e 61 6c 6c 79 2e 0a 20 20 2a 2f 0a 20  ternally..  */. 
12470 20 65 6e 63 32 20 3d 20 65 6e 63 3b 0a 20 20 74   enc2 = enc;.  t
12480 65 73 74 63 61 73 65 28 20 65 6e 63 32 3d 3d 53  estcase( enc2==S
12490 51 4c 49 54 45 5f 55 54 46 31 36 20 29 3b 0a 20  QLITE_UTF16 );. 
124a0 20 74 65 73 74 63 61 73 65 28 20 65 6e 63 32 3d   testcase( enc2=
124b0 3d 53 51 4c 49 54 45 5f 55 54 46 31 36 5f 41 4c  =SQLITE_UTF16_AL
124c0 49 47 4e 45 44 20 29 3b 0a 20 20 69 66 28 20 65  IGNED );.  if( e
124d0 6e 63 32 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31  nc2==SQLITE_UTF1
124e0 36 20 7c 7c 20 65 6e 63 32 3d 3d 53 51 4c 49 54  6 || enc2==SQLIT
124f0 45 5f 55 54 46 31 36 5f 41 4c 49 47 4e 45 44 20  E_UTF16_ALIGNED 
12500 29 7b 0a 20 20 20 20 65 6e 63 32 20 3d 20 53 51  ){.    enc2 = SQ
12510 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45  LITE_UTF16NATIVE
12520 3b 0a 20 20 7d 0a 20 20 69 66 28 20 65 6e 63 32  ;.  }.  if( enc2
12530 3c 53 51 4c 49 54 45 5f 55 54 46 38 20 7c 7c 20  <SQLITE_UTF8 || 
12540 65 6e 63 32 3e 53 51 4c 49 54 45 5f 55 54 46 31  enc2>SQLITE_UTF1
12550 36 42 45 20 29 7b 0a 20 20 20 20 72 65 74 75 72  6BE ){.    retur
12560 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 5f  n SQLITE_MISUSE_
12570 42 4b 50 54 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  BKPT;.  }..  /* 
12580 43 68 65 63 6b 20 69 66 20 74 68 69 73 20 63 61  Check if this ca
12590 6c 6c 20 69 73 20 72 65 6d 6f 76 69 6e 67 20 6f  ll is removing o
125a0 72 20 72 65 70 6c 61 63 69 6e 67 20 61 6e 20 65  r replacing an e
125b0 78 69 73 74 69 6e 67 20 63 6f 6c 6c 61 74 69 6f  xisting collatio
125c0 6e 20 0a 20 20 2a 2a 20 73 65 71 75 65 6e 63 65  n .  ** sequence
125d0 2e 20 49 66 20 73 6f 2c 20 61 6e 64 20 74 68 65  . If so, and the
125e0 72 65 20 61 72 65 20 61 63 74 69 76 65 20 56 4d  re are active VM
125f0 73 2c 20 72 65 74 75 72 6e 20 62 75 73 79 2e 20  s, return busy. 
12600 49 66 20 74 68 65 72 65 0a 20 20 2a 2a 20 61 72  If there.  ** ar
12610 65 20 6e 6f 20 61 63 74 69 76 65 20 56 4d 73 2c  e no active VMs,
12620 20 69 6e 76 61 6c 69 64 61 74 65 20 61 6e 79 20   invalidate any 
12630 70 72 65 2d 63 6f 6d 70 69 6c 65 64 20 73 74 61  pre-compiled sta
12640 74 65 6d 65 6e 74 73 2e 0a 20 20 2a 2f 0a 20 20  tements..  */.  
12650 70 43 6f 6c 6c 20 3d 20 73 71 6c 69 74 65 33 46  pColl = sqlite3F
12660 69 6e 64 43 6f 6c 6c 53 65 71 28 64 62 2c 20 28  indCollSeq(db, (
12670 75 38 29 65 6e 63 32 2c 20 7a 4e 61 6d 65 2c 20  u8)enc2, zName, 
12680 30 29 3b 0a 20 20 69 66 28 20 70 43 6f 6c 6c 20  0);.  if( pColl 
12690 26 26 20 70 43 6f 6c 6c 2d 3e 78 43 6d 70 20 29  && pColl->xCmp )
126a0 7b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 6e 56  {.    if( db->nV
126b0 64 62 65 41 63 74 69 76 65 20 29 7b 0a 20 20 20  dbeActive ){.   
126c0 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 57     sqlite3ErrorW
126d0 69 74 68 4d 73 67 28 64 62 2c 20 53 51 4c 49 54  ithMsg(db, SQLIT
126e0 45 5f 42 55 53 59 2c 20 0a 20 20 20 20 20 20 20  E_BUSY, .       
126f0 20 22 75 6e 61 62 6c 65 20 74 6f 20 64 65 6c 65   "unable to dele
12700 74 65 2f 6d 6f 64 69 66 79 20 63 6f 6c 6c 61 74  te/modify collat
12710 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 64 75 65  ion sequence due
12720 20 74 6f 20 61 63 74 69 76 65 20 73 74 61 74 65   to active state
12730 6d 65 6e 74 73 22 29 3b 0a 20 20 20 20 20 20 72  ments");.      r
12740 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 42 55 53  eturn SQLITE_BUS
12750 59 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c  Y;.    }.    sql
12760 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61 72  ite3ExpirePrepar
12770 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62 29  edStatements(db)
12780 3b 0a 0a 20 20 20 20 2f 2a 20 49 66 20 63 6f 6c  ;..    /* If col
12790 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20  lation sequence 
127a0 70 43 6f 6c 6c 20 77 61 73 20 63 72 65 61 74 65  pColl was create
127b0 64 20 64 69 72 65 63 74 6c 79 20 62 79 20 61 20  d directly by a 
127c0 63 61 6c 6c 20 74 6f 0a 20 20 20 20 2a 2a 20 73  call to.    ** s
127d0 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63 6f  qlite3_create_co
127e0 6c 6c 61 74 69 6f 6e 2c 20 61 6e 64 20 6e 6f 74  llation, and not
127f0 20 67 65 6e 65 72 61 74 65 64 20 62 79 20 73 79   generated by sy
12800 6e 74 68 43 6f 6c 6c 53 65 71 28 29 2c 0a 20 20  nthCollSeq(),.  
12810 20 20 2a 2a 20 74 68 65 6e 20 61 6e 79 20 63 6f    ** then any co
12820 70 69 65 73 20 6d 61 64 65 20 62 79 20 73 79 6e  pies made by syn
12830 74 68 43 6f 6c 6c 53 65 71 28 29 20 6e 65 65 64  thCollSeq() need
12840 20 74 6f 20 62 65 20 69 6e 76 61 6c 69 64 61 74   to be invalidat
12850 65 64 2e 0a 20 20 20 20 2a 2a 20 41 6c 73 6f 2c  ed..    ** Also,
12860 20 63 6f 6c 6c 61 74 69 6f 6e 20 64 65 73 74 72   collation destr
12870 75 63 74 6f 72 20 2d 20 43 6f 6c 6c 53 65 71 2e  uctor - CollSeq.
12880 78 44 65 6c 28 29 20 2d 20 66 75 6e 63 74 69 6f  xDel() - functio
12890 6e 20 6d 61 79 20 6e 65 65 64 0a 20 20 20 20 2a  n may need.    *
128a0 2a 20 74 6f 20 62 65 20 63 61 6c 6c 65 64 2e 0a  * to be called..
128b0 20 20 20 20 2a 2f 20 0a 20 20 20 20 69 66 28 20      */ .    if( 
128c0 28 70 43 6f 6c 6c 2d 3e 65 6e 63 20 26 20 7e 53  (pColl->enc & ~S
128d0 51 4c 49 54 45 5f 55 54 46 31 36 5f 41 4c 49 47  QLITE_UTF16_ALIG
128e0 4e 45 44 29 3d 3d 65 6e 63 32 20 29 7b 0a 20 20  NED)==enc2 ){.  
128f0 20 20 20 20 43 6f 6c 6c 53 65 71 20 2a 61 43 6f      CollSeq *aCo
12900 6c 6c 20 3d 20 73 71 6c 69 74 65 33 48 61 73 68  ll = sqlite3Hash
12910 46 69 6e 64 28 26 64 62 2d 3e 61 43 6f 6c 6c 53  Find(&db->aCollS
12920 65 71 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 20 20  eq, zName);.    
12930 20 20 69 6e 74 20 6a 3b 0a 20 20 20 20 20 20 66    int j;.      f
12940 6f 72 28 6a 3d 30 3b 20 6a 3c 33 3b 20 6a 2b 2b  or(j=0; j<3; j++
12950 29 7b 0a 20 20 20 20 20 20 20 20 43 6f 6c 6c 53  ){.        CollS
12960 65 71 20 2a 70 20 3d 20 26 61 43 6f 6c 6c 5b 6a  eq *p = &aColl[j
12970 5d 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70  ];.        if( p
12980 2d 3e 65 6e 63 3d 3d 70 43 6f 6c 6c 2d 3e 65 6e  ->enc==pColl->en
12990 63 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69  c ){.          i
129a0 66 28 20 70 2d 3e 78 44 65 6c 20 29 7b 0a 20 20  f( p->xDel ){.  
129b0 20 20 20 20 20 20 20 20 20 20 70 2d 3e 78 44 65            p->xDe
129c0 6c 28 70 2d 3e 70 55 73 65 72 29 3b 0a 20 20 20  l(p->pUser);.   
129d0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
129e0 20 20 20 70 2d 3e 78 43 6d 70 20 3d 20 30 3b 0a     p->xCmp = 0;.
129f0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
12a00 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 70  }.    }.  }..  p
12a10 43 6f 6c 6c 20 3d 20 73 71 6c 69 74 65 33 46 69  Coll = sqlite3Fi
12a20 6e 64 43 6f 6c 6c 53 65 71 28 64 62 2c 20 28 75  ndCollSeq(db, (u
12a30 38 29 65 6e 63 32 2c 20 7a 4e 61 6d 65 2c 20 31  8)enc2, zName, 1
12a40 29 3b 0a 20 20 69 66 28 20 70 43 6f 6c 6c 3d 3d  );.  if( pColl==
12a50 30 20 29 20 72 65 74 75 72 6e 20 53 51 4c 49 54  0 ) return SQLIT
12a60 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 70 43 6f 6c 6c  E_NOMEM;.  pColl
12a70 2d 3e 78 43 6d 70 20 3d 20 78 43 6f 6d 70 61 72  ->xCmp = xCompar
12a80 65 3b 0a 20 20 70 43 6f 6c 6c 2d 3e 70 55 73 65  e;.  pColl->pUse
12a90 72 20 3d 20 70 43 74 78 3b 0a 20 20 70 43 6f 6c  r = pCtx;.  pCol
12aa0 6c 2d 3e 78 44 65 6c 20 3d 20 78 44 65 6c 3b 0a  l->xDel = xDel;.
12ab0 20 20 70 43 6f 6c 6c 2d 3e 65 6e 63 20 3d 20 28    pColl->enc = (
12ac0 75 38 29 28 65 6e 63 32 20 7c 20 28 65 6e 63 20  u8)(enc2 | (enc 
12ad0 26 20 53 51 4c 49 54 45 5f 55 54 46 31 36 5f 41  & SQLITE_UTF16_A
12ae0 4c 49 47 4e 45 44 29 29 3b 0a 20 20 73 71 6c 69  LIGNED));.  sqli
12af0 74 65 33 45 72 72 6f 72 28 64 62 2c 20 53 51 4c  te3Error(db, SQL
12b00 49 54 45 5f 4f 4b 29 3b 0a 20 20 72 65 74 75 72  ITE_OK);.  retur
12b10 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a  n SQLITE_OK;.}..
12b20 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 61 72 72 61  ./*.** This arra
12b30 79 20 64 65 66 69 6e 65 73 20 68 61 72 64 20 75  y defines hard u
12b40 70 70 65 72 20 62 6f 75 6e 64 73 20 6f 6e 20 6c  pper bounds on l
12b50 69 6d 69 74 20 76 61 6c 75 65 73 2e 20 20 54 68  imit values.  Th
12b60 65 0a 2a 2a 20 69 6e 69 74 69 61 6c 69 7a 65 72  e.** initializer
12b70 20 6d 75 73 74 20 62 65 20 6b 65 70 74 20 69 6e   must be kept in
12b80 20 73 79 6e 63 20 77 69 74 68 20 74 68 65 20 53   sync with the S
12b90 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 2a 0a 2a 2a  QLITE_LIMIT_*.**
12ba0 20 23 64 65 66 69 6e 65 73 20 69 6e 20 73 71 6c   #defines in sql
12bb0 69 74 65 33 2e 68 2e 0a 2a 2f 0a 73 74 61 74 69  ite3.h..*/.stati
12bc0 63 20 63 6f 6e 73 74 20 69 6e 74 20 61 48 61 72  c const int aHar
12bd0 64 4c 69 6d 69 74 5b 5d 20 3d 20 7b 0a 20 20 53  dLimit[] = {.  S
12be0 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48  QLITE_MAX_LENGTH
12bf0 2c 0a 20 20 53 51 4c 49 54 45 5f 4d 41 58 5f 53  ,.  SQLITE_MAX_S
12c00 51 4c 5f 4c 45 4e 47 54 48 2c 0a 20 20 53 51 4c  QL_LENGTH,.  SQL
12c10 49 54 45 5f 4d 41 58 5f 43 4f 4c 55 4d 4e 2c 0a  ITE_MAX_COLUMN,.
12c20 20 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50    SQLITE_MAX_EXP
12c30 52 5f 44 45 50 54 48 2c 0a 20 20 53 51 4c 49 54  R_DEPTH,.  SQLIT
12c40 45 5f 4d 41 58 5f 43 4f 4d 50 4f 55 4e 44 5f 53  E_MAX_COMPOUND_S
12c50 45 4c 45 43 54 2c 0a 20 20 53 51 4c 49 54 45 5f  ELECT,.  SQLITE_
12c60 4d 41 58 5f 56 44 42 45 5f 4f 50 2c 0a 20 20 53  MAX_VDBE_OP,.  S
12c70 51 4c 49 54 45 5f 4d 41 58 5f 46 55 4e 43 54 49  QLITE_MAX_FUNCTI
12c80 4f 4e 5f 41 52 47 2c 0a 20 20 53 51 4c 49 54 45  ON_ARG,.  SQLITE
12c90 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 2c 0a 20  _MAX_ATTACHED,. 
12ca0 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 49 4b 45   SQLITE_MAX_LIKE
12cb0 5f 50 41 54 54 45 52 4e 5f 4c 45 4e 47 54 48 2c  _PATTERN_LENGTH,
12cc0 0a 20 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41  .  SQLITE_MAX_VA
12cd0 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 2c 20 20  RIABLE_NUMBER,  
12ce0 20 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 33 38      /* IMP: R-38
12cf0 30 39 31 2d 33 32 33 35 32 20 2a 2f 0a 20 20 53  091-32352 */.  S
12d00 51 4c 49 54 45 5f 4d 41 58 5f 54 52 49 47 47 45  QLITE_MAX_TRIGGE
12d10 52 5f 44 45 50 54 48 2c 0a 20 20 53 51 4c 49 54  R_DEPTH,.  SQLIT
12d20 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52  E_MAX_WORKER_THR
12d30 45 41 44 53 2c 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  EADS,.};../*.** 
12d40 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20 68 61  Make sure the ha
12d50 72 64 20 6c 69 6d 69 74 73 20 61 72 65 20 73 65  rd limits are se
12d60 74 20 74 6f 20 72 65 61 73 6f 6e 61 62 6c 65 20  t to reasonable 
12d70 76 61 6c 75 65 73 0a 2a 2f 0a 23 69 66 20 53 51  values.*/.#if SQ
12d80 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 3c  LITE_MAX_LENGTH<
12d90 31 30 30 0a 23 20 65 72 72 6f 72 20 53 51 4c 49  100.# error SQLI
12da0 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 20 6d 75  TE_MAX_LENGTH mu
12db0 73 74 20 62 65 20 61 74 20 6c 65 61 73 74 20 31  st be at least 1
12dc0 30 30 0a 23 65 6e 64 69 66 0a 23 69 66 20 53 51  00.#endif.#if SQ
12dd0 4c 49 54 45 5f 4d 41 58 5f 53 51 4c 5f 4c 45 4e  LITE_MAX_SQL_LEN
12de0 47 54 48 3c 31 30 30 0a 23 20 65 72 72 6f 72 20  GTH<100.# error 
12df0 53 51 4c 49 54 45 5f 4d 41 58 5f 53 51 4c 5f 4c  SQLITE_MAX_SQL_L
12e00 45 4e 47 54 48 20 6d 75 73 74 20 62 65 20 61 74  ENGTH must be at
12e10 20 6c 65 61 73 74 20 31 30 30 0a 23 65 6e 64 69   least 100.#endi
12e20 66 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58  f.#if SQLITE_MAX
12e30 5f 53 51 4c 5f 4c 45 4e 47 54 48 3e 53 51 4c 49  _SQL_LENGTH>SQLI
12e40 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 0a 23 20  TE_MAX_LENGTH.# 
12e50 65 72 72 6f 72 20 53 51 4c 49 54 45 5f 4d 41 58  error SQLITE_MAX
12e60 5f 53 51 4c 5f 4c 45 4e 47 54 48 20 6d 75 73 74  _SQL_LENGTH must
12e70 20 6e 6f 74 20 62 65 20 67 72 65 61 74 65 72 20   not be greater 
12e80 74 68 61 6e 20 53 51 4c 49 54 45 5f 4d 41 58 5f  than SQLITE_MAX_
12e90 4c 45 4e 47 54 48 0a 23 65 6e 64 69 66 0a 23 69  LENGTH.#endif.#i
12ea0 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 43 4f 4d  f SQLITE_MAX_COM
12eb0 50 4f 55 4e 44 5f 53 45 4c 45 43 54 3c 32 0a 23  POUND_SELECT<2.#
12ec0 20 65 72 72 6f 72 20 53 51 4c 49 54 45 5f 4d 41   error SQLITE_MA
12ed0 58 5f 43 4f 4d 50 4f 55 4e 44 5f 53 45 4c 45 43  X_COMPOUND_SELEC
12ee0 54 20 6d 75 73 74 20 62 65 20 61 74 20 6c 65 61  T must be at lea
12ef0 73 74 20 32 0a 23 65 6e 64 69 66 0a 23 69 66 20  st 2.#endif.#if 
12f00 53 51 4c 49 54 45 5f 4d 41 58 5f 56 44 42 45 5f  SQLITE_MAX_VDBE_
12f10 4f 50 3c 34 30 0a 23 20 65 72 72 6f 72 20 53 51  OP<40.# error SQ
12f20 4c 49 54 45 5f 4d 41 58 5f 56 44 42 45 5f 4f 50  LITE_MAX_VDBE_OP
12f30 20 6d 75 73 74 20 62 65 20 61 74 20 6c 65 61 73   must be at leas
12f40 74 20 34 30 0a 23 65 6e 64 69 66 0a 23 69 66 20  t 40.#endif.#if 
12f50 53 51 4c 49 54 45 5f 4d 41 58 5f 46 55 4e 43 54  SQLITE_MAX_FUNCT
12f60 49 4f 4e 5f 41 52 47 3c 30 20 7c 7c 20 53 51 4c  ION_ARG<0 || SQL
12f70 49 54 45 5f 4d 41 58 5f 46 55 4e 43 54 49 4f 4e  ITE_MAX_FUNCTION
12f80 5f 41 52 47 3e 31 30 30 30 0a 23 20 65 72 72 6f  _ARG>1000.# erro
12f90 72 20 53 51 4c 49 54 45 5f 4d 41 58 5f 46 55 4e  r SQLITE_MAX_FUN
12fa0 43 54 49 4f 4e 5f 41 52 47 20 6d 75 73 74 20 62  CTION_ARG must b
12fb0 65 20 62 65 74 77 65 65 6e 20 30 20 61 6e 64 20  e between 0 and 
12fc0 31 30 30 30 0a 23 65 6e 64 69 66 0a 23 69 66 20  1000.#endif.#if 
12fd0 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43  SQLITE_MAX_ATTAC
12fe0 48 45 44 3c 30 20 7c 7c 20 53 51 4c 49 54 45 5f  HED<0 || SQLITE_
12ff0 4d 41 58 5f 41 54 54 41 43 48 45 44 3e 31 32 35  MAX_ATTACHED>125
13000 0a 23 20 65 72 72 6f 72 20 53 51 4c 49 54 45 5f  .# error SQLITE_
13010 4d 41 58 5f 41 54 54 41 43 48 45 44 20 6d 75 73  MAX_ATTACHED mus
13020 74 20 62 65 20 62 65 74 77 65 65 6e 20 30 20 61  t be between 0 a
13030 6e 64 20 31 32 35 0a 23 65 6e 64 69 66 0a 23 69  nd 125.#endif.#i
13040 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 49 4b  f SQLITE_MAX_LIK
13050 45 5f 50 41 54 54 45 52 4e 5f 4c 45 4e 47 54 48  E_PATTERN_LENGTH
13060 3c 31 0a 23 20 65 72 72 6f 72 20 53 51 4c 49 54  <1.# error SQLIT
13070 45 5f 4d 41 58 5f 4c 49 4b 45 5f 50 41 54 54 45  E_MAX_LIKE_PATTE
13080 52 4e 5f 4c 45 4e 47 54 48 20 6d 75 73 74 20 62  RN_LENGTH must b
13090 65 20 61 74 20 6c 65 61 73 74 20 31 0a 23 65 6e  e at least 1.#en
130a0 64 69 66 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d  dif.#if SQLITE_M
130b0 41 58 5f 43 4f 4c 55 4d 4e 3e 33 32 37 36 37 0a  AX_COLUMN>32767.
130c0 23 20 65 72 72 6f 72 20 53 51 4c 49 54 45 5f 4d  # error SQLITE_M
130d0 41 58 5f 43 4f 4c 55 4d 4e 20 6d 75 73 74 20 6e  AX_COLUMN must n
130e0 6f 74 20 65 78 63 65 65 64 20 33 32 37 36 37 0a  ot exceed 32767.
130f0 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49 54  #endif.#if SQLIT
13100 45 5f 4d 41 58 5f 54 52 49 47 47 45 52 5f 44 45  E_MAX_TRIGGER_DE
13110 50 54 48 3c 31 0a 23 20 65 72 72 6f 72 20 53 51  PTH<1.# error SQ
13120 4c 49 54 45 5f 4d 41 58 5f 54 52 49 47 47 45 52  LITE_MAX_TRIGGER
13130 5f 44 45 50 54 48 20 6d 75 73 74 20 62 65 20 61  _DEPTH must be a
13140 74 20 6c 65 61 73 74 20 31 0a 23 65 6e 64 69 66  t least 1.#endif
13150 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  .#if SQLITE_MAX_
13160 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 3c 30  WORKER_THREADS<0
13170 20 7c 7c 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57   || SQLITE_MAX_W
13180 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 3e 35 30  ORKER_THREADS>50
13190 0a 23 20 65 72 72 6f 72 20 53 51 4c 49 54 45 5f  .# error SQLITE_
131a0 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41  MAX_WORKER_THREA
131b0 44 53 20 6d 75 73 74 20 62 65 20 62 65 74 77 65  DS must be betwe
131c0 65 6e 20 30 20 61 6e 64 20 35 30 0a 23 65 6e 64  en 0 and 50.#end
131d0 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 43 68 61 6e 67  if.../*.** Chang
131e0 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 61  e the value of a
131f0 20 6c 69 6d 69 74 2e 20 20 52 65 70 6f 72 74 20   limit.  Report 
13200 74 68 65 20 6f 6c 64 20 76 61 6c 75 65 2e 0a 2a  the old value..*
13210 2a 20 49 66 20 61 6e 20 69 6e 76 61 6c 69 64 20  * If an invalid 
13220 6c 69 6d 69 74 20 69 6e 64 65 78 20 69 73 20 73  limit index is s
13230 75 70 70 6c 69 65 64 2c 20 72 65 70 6f 72 74 20  upplied, report 
13240 2d 31 2e 0a 2a 2a 20 4d 61 6b 65 20 6e 6f 20 63  -1..** Make no c
13250 68 61 6e 67 65 73 20 62 75 74 20 73 74 69 6c 6c  hanges but still
13260 20 72 65 70 6f 72 74 20 74 68 65 20 6f 6c 64 20   report the old 
13270 76 61 6c 75 65 20 69 66 20 74 68 65 0a 2a 2a 20  value if the.** 
13280 6e 65 77 20 6c 69 6d 69 74 20 69 73 20 6e 65 67  new limit is neg
13290 61 74 69 76 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 6e  ative..**.** A n
132a0 65 77 20 6c 6f 77 65 72 20 6c 69 6d 69 74 20 64  ew lower limit d
132b0 6f 65 73 20 6e 6f 74 20 73 68 72 69 6e 6b 20 65  oes not shrink e
132c0 78 69 73 74 69 6e 67 20 63 6f 6e 73 74 72 75 63  xisting construc
132d0 74 73 2e 0a 2a 2a 20 49 74 20 6d 65 72 65 6c 79  ts..** It merely
132e0 20 70 72 65 76 65 6e 74 73 20 6e 65 77 20 63 6f   prevents new co
132f0 6e 73 74 72 75 63 74 73 20 74 68 61 74 20 65 78  nstructs that ex
13300 63 65 65 64 20 74 68 65 20 6c 69 6d 69 74 0a 2a  ceed the limit.*
13310 2a 20 66 72 6f 6d 20 66 6f 72 6d 69 6e 67 2e 0a  * from forming..
13320 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 6c  */.int sqlite3_l
13330 69 6d 69 74 28 73 71 6c 69 74 65 33 20 2a 64 62  imit(sqlite3 *db
13340 2c 20 69 6e 74 20 6c 69 6d 69 74 49 64 2c 20 69  , int limitId, i
13350 6e 74 20 6e 65 77 4c 69 6d 69 74 29 7b 0a 20 20  nt newLimit){.  
13360 69 6e 74 20 6f 6c 64 4c 69 6d 69 74 3b 0a 0a 23  int oldLimit;..#
13370 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
13380 42 4c 45 5f 41 50 49 5f 41 52 4d 4f 52 0a 20 20  BLE_API_ARMOR.  
13390 69 66 28 20 21 73 71 6c 69 74 65 33 53 61 66 65  if( !sqlite3Safe
133a0 74 79 43 68 65 63 6b 4f 6b 28 64 62 29 20 29 7b  tyCheckOk(db) ){
133b0 0a 20 20 20 20 28 76 6f 69 64 29 53 51 4c 49 54  .    (void)SQLIT
133c0 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54 3b 0a 20  E_MISUSE_BKPT;. 
133d0 20 20 20 72 65 74 75 72 6e 20 2d 31 3b 0a 20 20     return -1;.  
133e0 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 45  }.#endif..  /* E
133f0 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 33 30  VIDENCE-OF: R-30
13400 31 38 39 2d 35 34 30 39 37 20 46 6f 72 20 65 61  189-54097 For ea
13410 63 68 20 6c 69 6d 69 74 20 63 61 74 65 67 6f 72  ch limit categor
13420 79 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4e  y SQLITE_LIMIT_N
13430 41 4d 45 0a 20 20 2a 2a 20 74 68 65 72 65 20 69  AME.  ** there i
13440 73 20 61 20 68 61 72 64 20 75 70 70 65 72 20 62  s a hard upper b
13450 6f 75 6e 64 20 73 65 74 20 61 74 20 63 6f 6d 70  ound set at comp
13460 69 6c 65 2d 74 69 6d 65 20 62 79 20 61 20 43 20  ile-time by a C 
13470 70 72 65 70 72 6f 63 65 73 73 6f 72 0a 20 20 2a  preprocessor.  *
13480 2a 20 6d 61 63 72 6f 20 63 61 6c 6c 65 64 20 53  * macro called S
13490 51 4c 49 54 45 5f 4d 41 58 5f 4e 41 4d 45 2e 20  QLITE_MAX_NAME. 
134a0 28 54 68 65 20 22 5f 4c 49 4d 49 54 5f 22 20 69  (The "_LIMIT_" i
134b0 6e 20 74 68 65 20 6e 61 6d 65 20 69 73 20 63 68  n the name is ch
134c0 61 6e 67 65 64 20 74 6f 0a 20 20 2a 2a 20 22 5f  anged to.  ** "_
134d0 4d 41 58 5f 22 2e 29 0a 20 20 2a 2f 0a 20 20 61  MAX_".).  */.  a
134e0 73 73 65 72 74 28 20 61 48 61 72 64 4c 69 6d 69  ssert( aHardLimi
134f0 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c  t[SQLITE_LIMIT_L
13500 45 4e 47 54 48 5d 3d 3d 53 51 4c 49 54 45 5f 4d  ENGTH]==SQLITE_M
13510 41 58 5f 4c 45 4e 47 54 48 20 29 3b 0a 20 20 61  AX_LENGTH );.  a
13520 73 73 65 72 74 28 20 61 48 61 72 64 4c 69 6d 69  ssert( aHardLimi
13530 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 53  t[SQLITE_LIMIT_S
13540 51 4c 5f 4c 45 4e 47 54 48 5d 3d 3d 53 51 4c 49  QL_LENGTH]==SQLI
13550 54 45 5f 4d 41 58 5f 53 51 4c 5f 4c 45 4e 47 54  TE_MAX_SQL_LENGT
13560 48 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 61  H );.  assert( a
13570 48 61 72 64 4c 69 6d 69 74 5b 53 51 4c 49 54 45  HardLimit[SQLITE
13580 5f 4c 49 4d 49 54 5f 43 4f 4c 55 4d 4e 5d 3d 3d  _LIMIT_COLUMN]==
13590 53 51 4c 49 54 45 5f 4d 41 58 5f 43 4f 4c 55 4d  SQLITE_MAX_COLUM
135a0 4e 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 61  N );.  assert( a
135b0 48 61 72 64 4c 69 6d 69 74 5b 53 51 4c 49 54 45  HardLimit[SQLITE
135c0 5f 4c 49 4d 49 54 5f 45 58 50 52 5f 44 45 50 54  _LIMIT_EXPR_DEPT
135d0 48 5d 3d 3d 53 51 4c 49 54 45 5f 4d 41 58 5f 45  H]==SQLITE_MAX_E
135e0 58 50 52 5f 44 45 50 54 48 20 29 3b 0a 20 20 61  XPR_DEPTH );.  a
135f0 73 73 65 72 74 28 20 61 48 61 72 64 4c 69 6d 69  ssert( aHardLimi
13600 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 43  t[SQLITE_LIMIT_C
13610 4f 4d 50 4f 55 4e 44 5f 53 45 4c 45 43 54 5d 3d  OMPOUND_SELECT]=
13620 3d 53 51 4c 49 54 45 5f 4d 41 58 5f 43 4f 4d 50  =SQLITE_MAX_COMP
13630 4f 55 4e 44 5f 53 45 4c 45 43 54 29 3b 0a 20 20  OUND_SELECT);.  
13640 61 73 73 65 72 74 28 20 61 48 61 72 64 4c 69 6d  assert( aHardLim
13650 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  it[SQLITE_LIMIT_
13660 56 44 42 45 5f 4f 50 5d 3d 3d 53 51 4c 49 54 45  VDBE_OP]==SQLITE
13670 5f 4d 41 58 5f 56 44 42 45 5f 4f 50 20 29 3b 0a  _MAX_VDBE_OP );.
13680 20 20 61 73 73 65 72 74 28 20 61 48 61 72 64 4c    assert( aHardL
13690 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49  imit[SQLITE_LIMI
136a0 54 5f 46 55 4e 43 54 49 4f 4e 5f 41 52 47 5d 3d  T_FUNCTION_ARG]=
136b0 3d 53 51 4c 49 54 45 5f 4d 41 58 5f 46 55 4e 43  =SQLITE_MAX_FUNC
136c0 54 49 4f 4e 5f 41 52 47 20 29 3b 0a 20 20 61 73  TION_ARG );.  as
136d0 73 65 72 74 28 20 61 48 61 72 64 4c 69 6d 69 74  sert( aHardLimit
136e0 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 41 54  [SQLITE_LIMIT_AT
136f0 54 41 43 48 45 44 5d 3d 3d 53 51 4c 49 54 45 5f  TACHED]==SQLITE_
13700 4d 41 58 5f 41 54 54 41 43 48 45 44 20 29 3b 0a  MAX_ATTACHED );.
13710 20 20 61 73 73 65 72 74 28 20 61 48 61 72 64 4c    assert( aHardL
13720 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49  imit[SQLITE_LIMI
13730 54 5f 4c 49 4b 45 5f 50 41 54 54 45 52 4e 5f 4c  T_LIKE_PATTERN_L
13740 45 4e 47 54 48 5d 3d 3d 0a 20 20 20 20 20 20 20  ENGTH]==.       
13750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13770 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4d          SQLITE_M
13780 41 58 5f 4c 49 4b 45 5f 50 41 54 54 45 52 4e 5f  AX_LIKE_PATTERN_
13790 4c 45 4e 47 54 48 20 29 3b 0a 20 20 61 73 73 65  LENGTH );.  asse
137a0 72 74 28 20 61 48 61 72 64 4c 69 6d 69 74 5b 53  rt( aHardLimit[S
137b0 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 56 41 52 49  QLITE_LIMIT_VARI
137c0 41 42 4c 45 5f 4e 55 4d 42 45 52 5d 3d 3d 53 51  ABLE_NUMBER]==SQ
137d0 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c  LITE_MAX_VARIABL
137e0 45 5f 4e 55 4d 42 45 52 29 3b 0a 20 20 61 73 73  E_NUMBER);.  ass
137f0 65 72 74 28 20 61 48 61 72 64 4c 69 6d 69 74 5b  ert( aHardLimit[
13800 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 54 52 49  SQLITE_LIMIT_TRI
13810 47 47 45 52 5f 44 45 50 54 48 5d 3d 3d 53 51 4c  GGER_DEPTH]==SQL
13820 49 54 45 5f 4d 41 58 5f 54 52 49 47 47 45 52 5f  ITE_MAX_TRIGGER_
13830 44 45 50 54 48 20 29 3b 0a 20 20 61 73 73 65 72  DEPTH );.  asser
13840 74 28 20 61 48 61 72 64 4c 69 6d 69 74 5b 53 51  t( aHardLimit[SQ
13850 4c 49 54 45 5f 4c 49 4d 49 54 5f 57 4f 52 4b 45  LITE_LIMIT_WORKE
13860 52 5f 54 48 52 45 41 44 53 5d 3d 3d 53 51 4c 49  R_THREADS]==SQLI
13870 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48  TE_MAX_WORKER_TH
13880 52 45 41 44 53 20 29 3b 0a 20 20 61 73 73 65 72  READS );.  asser
13890 74 28 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  t( SQLITE_LIMIT_
138a0 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 3d 3d  WORKER_THREADS==
138b0 28 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 2d  (SQLITE_N_LIMIT-
138c0 31 29 20 29 3b 0a 0a 0a 20 20 69 66 28 20 6c 69  1) );...  if( li
138d0 6d 69 74 49 64 3c 30 20 7c 7c 20 6c 69 6d 69 74  mitId<0 || limit
138e0 49 64 3e 3d 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d  Id>=SQLITE_N_LIM
138f0 49 54 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  IT ){.    return
13900 20 2d 31 3b 0a 20 20 7d 0a 20 20 6f 6c 64 4c 69   -1;.  }.  oldLi
13910 6d 69 74 20 3d 20 64 62 2d 3e 61 4c 69 6d 69 74  mit = db->aLimit
13920 5b 6c 69 6d 69 74 49 64 5d 3b 0a 20 20 69 66 28  [limitId];.  if(
13930 20 6e 65 77 4c 69 6d 69 74 3e 3d 30 20 29 7b 20   newLimit>=0 ){ 
13940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13950 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 35 32 34 37    /* IMP: R-5247
13960 36 2d 32 38 37 33 32 20 2a 2f 0a 20 20 20 20 69  6-28732 */.    i
13970 66 28 20 6e 65 77 4c 69 6d 69 74 3e 61 48 61 72  f( newLimit>aHar
13980 64 4c 69 6d 69 74 5b 6c 69 6d 69 74 49 64 5d 20  dLimit[limitId] 
13990 29 7b 0a 20 20 20 20 20 20 6e 65 77 4c 69 6d 69  ){.      newLimi
139a0 74 20 3d 20 61 48 61 72 64 4c 69 6d 69 74 5b 6c  t = aHardLimit[l
139b0 69 6d 69 74 49 64 5d 3b 20 20 2f 2a 20 49 4d 50  imitId];  /* IMP
139c0 3a 20 52 2d 35 31 34 36 33 2d 32 35 36 33 34 20  : R-51463-25634 
139d0 2a 2f 0a 20 20 20 20 7d 0a 20 20 20 20 64 62 2d  */.    }.    db-
139e0 3e 61 4c 69 6d 69 74 5b 6c 69 6d 69 74 49 64 5d  >aLimit[limitId]
139f0 20 3d 20 6e 65 77 4c 69 6d 69 74 3b 0a 20 20 7d   = newLimit;.  }
13a00 0a 20 20 72 65 74 75 72 6e 20 6f 6c 64 4c 69 6d  .  return oldLim
13a10 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  it;             
13a20 20 20 20 20 20 20 20 20 2f 2a 20 49 4d 50 3a 20          /* IMP: 
13a30 52 2d 35 33 33 34 31 2d 33 35 34 31 39 20 2a 2f  R-53341-35419 */
13a40 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 66  .}../*.** This f
13a50 75 6e 63 74 69 6f 6e 20 69 73 20 75 73 65 64 20  unction is used 
13a60 74 6f 20 70 61 72 73 65 20 62 6f 74 68 20 55 52  to parse both UR
13a70 49 73 20 61 6e 64 20 6e 6f 6e 2d 55 52 49 20 66  Is and non-URI f
13a80 69 6c 65 6e 61 6d 65 73 20 70 61 73 73 65 64 20  ilenames passed 
13a90 62 79 20 74 68 65 0a 2a 2a 20 75 73 65 72 20 74  by the.** user t
13aa0 6f 20 41 50 49 20 66 75 6e 63 74 69 6f 6e 73 20  o API functions 
13ab0 73 71 6c 69 74 65 33 5f 6f 70 65 6e 28 29 20 6f  sqlite3_open() o
13ac0 72 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 5f 76  r sqlite3_open_v
13ad0 32 28 29 2c 20 61 6e 64 20 66 6f 72 20 64 61 74  2(), and for dat
13ae0 61 62 61 73 65 0a 2a 2a 20 55 52 49 73 20 73 70  abase.** URIs sp
13af0 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74 20  ecified as part 
13b00 6f 66 20 41 54 54 41 43 48 20 73 74 61 74 65 6d  of ATTACH statem
13b10 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ents..**.** The 
13b20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74  first argument t
13b30 6f 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 20  o this function 
13b40 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  is the name of t
13b50 68 65 20 56 46 53 20 74 6f 20 75 73 65 20 28 6f  he VFS to use (o
13b60 72 0a 2a 2a 20 61 20 4e 55 4c 4c 20 74 6f 20 73  r.** a NULL to s
13b70 69 67 6e 69 66 79 20 74 68 65 20 64 65 66 61 75  ignify the defau
13b80 6c 74 20 56 46 53 29 20 69 66 20 74 68 65 20 55  lt VFS) if the U
13b90 52 49 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e 74  RI does not cont
13ba0 61 69 6e 20 61 20 22 76 66 73 3d 78 78 78 22 0a  ain a "vfs=xxx".
13bb0 2a 2a 20 71 75 65 72 79 20 70 61 72 61 6d 65 74  ** query paramet
13bc0 65 72 2e 20 54 68 65 20 73 65 63 6f 6e 64 20 61  er. The second a
13bd0 72 67 75 6d 65 6e 74 20 63 6f 6e 74 61 69 6e 73  rgument contains
13be0 20 74 68 65 20 55 52 49 20 28 6f 72 20 6e 6f 6e   the URI (or non
13bf0 2d 55 52 49 20 66 69 6c 65 6e 61 6d 65 29 0a 2a  -URI filename).*
13c00 2a 20 69 74 73 65 6c 66 2e 20 57 68 65 6e 20 74  * itself. When t
13c10 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  his function is 
13c20 63 61 6c 6c 65 64 20 74 68 65 20 2a 70 46 6c 61  called the *pFla
13c30 67 73 20 76 61 72 69 61 62 6c 65 20 73 68 6f 75  gs variable shou
13c40 6c 64 20 63 6f 6e 74 61 69 6e 0a 2a 2a 20 74 68  ld contain.** th
13c50 65 20 64 65 66 61 75 6c 74 20 66 6c 61 67 73 20  e default flags 
13c60 74 6f 20 6f 70 65 6e 20 74 68 65 20 64 61 74 61  to open the data
13c70 62 61 73 65 20 68 61 6e 64 6c 65 20 77 69 74 68  base handle with
13c80 2e 20 54 68 65 20 76 61 6c 75 65 20 73 74 6f 72  . The value stor
13c90 65 64 20 69 6e 0a 2a 2a 20 2a 70 46 6c 61 67 73  ed in.** *pFlags
13ca0 20 6d 61 79 20 62 65 20 75 70 64 61 74 65 64 20   may be updated 
13cb0 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e 67  before returning
13cc0 20 69 66 20 74 68 65 20 55 52 49 20 66 69 6c 65   if the URI file
13cd0 6e 61 6d 65 20 63 6f 6e 74 61 69 6e 73 20 0a 2a  name contains .*
13ce0 2a 20 22 63 61 63 68 65 3d 78 78 78 22 20 6f 72  * "cache=xxx" or
13cf0 20 22 6d 6f 64 65 3d 78 78 78 22 20 71 75 65 72   "mode=xxx" quer
13d00 79 20 70 61 72 61 6d 65 74 65 72 73 2e 0a 2a 2a  y parameters..**
13d10 0a 2a 2a 20 49 66 20 73 75 63 63 65 73 73 66 75  .** If successfu
13d20 6c 2c 20 53 51 4c 49 54 45 5f 4f 4b 20 69 73 20  l, SQLITE_OK is 
13d30 72 65 74 75 72 6e 65 64 2e 20 49 6e 20 74 68 69  returned. In thi
13d40 73 20 63 61 73 65 20 2a 70 70 56 66 73 20 69 73  s case *ppVfs is
13d50 20 73 65 74 20 74 6f 20 70 6f 69 6e 74 20 74 6f   set to point to
13d60 0a 2a 2a 20 74 68 65 20 56 46 53 20 74 68 61 74  .** the VFS that
13d70 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64 20   should be used 
13d80 74 6f 20 6f 70 65 6e 20 74 68 65 20 64 61 74 61  to open the data
13d90 62 61 73 65 20 66 69 6c 65 2e 20 2a 70 7a 46 69  base file. *pzFi
13da0 6c 65 20 69 73 20 73 65 74 20 74 6f 0a 2a 2a 20  le is set to.** 
13db0 70 6f 69 6e 74 20 74 6f 20 61 20 62 75 66 66 65  point to a buffe
13dc0 72 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  r containing the
13dd0 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 69 6c   name of the fil
13de0 65 20 74 6f 20 6f 70 65 6e 2e 20 49 74 20 69 73  e to open. It is
13df0 20 74 68 65 20 0a 2a 2a 20 72 65 73 70 6f 6e 73   the .** respons
13e00 69 62 69 6c 69 74 79 20 6f 66 20 74 68 65 20 63  ibility of the c
13e10 61 6c 6c 65 72 20 74 6f 20 65 76 65 6e 74 75 61  aller to eventua
13e20 6c 6c 79 20 63 61 6c 6c 20 73 71 6c 69 74 65 33  lly call sqlite3
13e30 5f 66 72 65 65 28 29 20 74 6f 20 72 65 6c 65 61  _free() to relea
13e40 73 65 0a 2a 2a 20 74 68 69 73 20 62 75 66 66 65  se.** this buffe
13e50 72 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 6e 20 65  r..**.** If an e
13e60 72 72 6f 72 20 6f 63 63 75 72 73 2c 20 74 68 65  rror occurs, the
13e70 6e 20 61 6e 20 53 51 4c 69 74 65 20 65 72 72 6f  n an SQLite erro
13e80 72 20 63 6f 64 65 20 69 73 20 72 65 74 75 72 6e  r code is return
13e90 65 64 20 61 6e 64 20 2a 70 7a 45 72 72 4d 73 67  ed and *pzErrMsg
13ea0 0a 2a 2a 20 6d 61 79 20 62 65 20 73 65 74 20 74  .** may be set t
13eb0 6f 20 70 6f 69 6e 74 20 74 6f 20 61 20 62 75 66  o point to a buf
13ec0 66 65 72 20 63 6f 6e 74 61 69 6e 69 6e 67 20 61  fer containing a
13ed0 6e 20 45 6e 67 6c 69 73 68 20 6c 61 6e 67 75 61  n English langua
13ee0 67 65 20 65 72 72 6f 72 20 0a 2a 2a 20 6d 65 73  ge error .** mes
13ef0 73 61 67 65 2e 20 49 74 20 69 73 20 74 68 65 20  sage. It is the 
13f00 72 65 73 70 6f 6e 73 69 62 69 6c 69 74 79 20 6f  responsibility o
13f10 66 20 74 68 65 20 63 61 6c 6c 65 72 20 74 6f 20  f the caller to 
13f20 65 76 65 6e 74 75 61 6c 6c 79 20 72 65 6c 65 61  eventually relea
13f30 73 65 0a 2a 2a 20 74 68 69 73 20 62 75 66 66 65  se.** this buffe
13f40 72 20 62 79 20 63 61 6c 6c 69 6e 67 20 73 71 6c  r by calling sql
13f50 69 74 65 33 5f 66 72 65 65 28 29 2e 0a 2a 2f 0a  ite3_free()..*/.
13f60 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73 65  int sqlite3Parse
13f70 55 72 69 28 0a 20 20 63 6f 6e 73 74 20 63 68 61  Uri(.  const cha
13f80 72 20 2a 7a 44 65 66 61 75 6c 74 56 66 73 2c 20  r *zDefaultVfs, 
13f90 20 20 20 20 20 20 20 2f 2a 20 56 46 53 20 74 6f         /* VFS to
13fa0 20 75 73 65 20 69 66 20 6e 6f 20 22 76 66 73 3d   use if no "vfs=
13fb0 78 78 78 22 20 71 75 65 72 79 20 6f 70 74 69 6f  xxx" query optio
13fc0 6e 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  n */.  const cha
13fd0 72 20 2a 7a 55 72 69 2c 20 20 20 20 20 20 20 20  r *zUri,        
13fe0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6c 2d 74 65         /* Nul-te
13ff0 72 6d 69 6e 61 74 65 64 20 55 52 49 20 74 6f 20  rminated URI to 
14000 70 61 72 73 65 20 2a 2f 0a 20 20 75 6e 73 69 67  parse */.  unsig
14010 6e 65 64 20 69 6e 74 20 2a 70 46 6c 61 67 73 2c  ned int *pFlags,
14020 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 4e             /* IN
14030 2f 4f 55 54 3a 20 53 51 4c 49 54 45 5f 4f 50 45  /OUT: SQLITE_OPE
14040 4e 5f 58 58 58 20 66 6c 61 67 73 20 2a 2f 0a 20  N_XXX flags */. 
14050 20 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 2a 70   sqlite3_vfs **p
14060 70 56 66 73 2c 20 20 20 20 20 20 20 20 20 20 20  pVfs,           
14070 20 2f 2a 20 4f 55 54 3a 20 56 46 53 20 74 6f 20   /* OUT: VFS to 
14080 75 73 65 20 2a 2f 20 0a 20 20 63 68 61 72 20 2a  use */ .  char *
14090 2a 70 7a 46 69 6c 65 2c 20 20 20 20 20 20 20 20  *pzFile,        
140a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 55 54            /* OUT
140b0 3a 20 46 69 6c 65 6e 61 6d 65 20 63 6f 6d 70 6f  : Filename compo
140c0 6e 65 6e 74 20 6f 66 20 55 52 49 20 2a 2f 0a 20  nent of URI */. 
140d0 20 63 68 61 72 20 2a 2a 70 7a 45 72 72 4d 73 67   char **pzErrMsg
140e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
140f0 20 2f 2a 20 4f 55 54 3a 20 45 72 72 6f 72 20 6d   /* OUT: Error m
14100 65 73 73 61 67 65 20 28 69 66 20 72 63 21 3d 53  essage (if rc!=S
14110 51 4c 49 54 45 5f 4f 4b 29 20 2a 2f 0a 29 7b 0a  QLITE_OK) */.){.
14120 20 20 69 6e 74 20 72 63 20 3d 20 53 51 4c 49 54    int rc = SQLIT
14130 45 5f 4f 4b 3b 0a 20 20 75 6e 73 69 67 6e 65 64  E_OK;.  unsigned
14140 20 69 6e 74 20 66 6c 61 67 73 20 3d 20 2a 70 46   int flags = *pF
14150 6c 61 67 73 3b 0a 20 20 63 6f 6e 73 74 20 63 68  lags;.  const ch
14160 61 72 20 2a 7a 56 66 73 20 3d 20 7a 44 65 66 61  ar *zVfs = zDefa
14170 75 6c 74 56 66 73 3b 0a 20 20 63 68 61 72 20 2a  ultVfs;.  char *
14180 7a 46 69 6c 65 3b 0a 20 20 63 68 61 72 20 63 3b  zFile;.  char c;
14190 0a 20 20 69 6e 74 20 6e 55 72 69 20 3d 20 73 71  .  int nUri = sq
141a0 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 55  lite3Strlen30(zU
141b0 72 69 29 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  ri);..  assert( 
141c0 2a 70 7a 45 72 72 4d 73 67 3d 3d 30 20 29 3b 0a  *pzErrMsg==0 );.
141d0 0a 20 20 69 66 28 20 28 28 66 6c 61 67 73 20 26  .  if( ((flags &
141e0 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 55 52 49   SQLITE_OPEN_URI
141f0 29 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  )             /*
14200 20 49 4d 50 3a 20 52 2d 34 38 37 32 35 2d 33 32   IMP: R-48725-32
14210 32 30 36 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  206 */.         
14220 20 20 20 7c 7c 20 73 71 6c 69 74 65 33 47 6c 6f     || sqlite3Glo
14230 62 61 6c 43 6f 6e 66 69 67 2e 62 4f 70 65 6e 55  balConfig.bOpenU
14240 72 69 29 20 2f 2a 20 49 4d 50 3a 20 52 2d 35 31  ri) /* IMP: R-51
14250 36 38 39 2d 34 36 35 34 38 20 2a 2f 0a 20 20 20  689-46548 */.   
14260 26 26 20 6e 55 72 69 3e 3d 35 20 26 26 20 6d 65  && nUri>=5 && me
14270 6d 63 6d 70 28 7a 55 72 69 2c 20 22 66 69 6c 65  mcmp(zUri, "file
14280 3a 22 2c 20 35 29 3d 3d 30 20 2f 2a 20 49 4d 50  :", 5)==0 /* IMP
14290 3a 20 52 2d 35 37 38 38 34 2d 33 37 34 39 36 20  : R-57884-37496 
142a0 2a 2f 0a 20 20 29 7b 0a 20 20 20 20 63 68 61 72  */.  ){.    char
142b0 20 2a 7a 4f 70 74 3b 0a 20 20 20 20 69 6e 74 20   *zOpt;.    int 
142c0 65 53 74 61 74 65 3b 20 20 20 20 20 20 20 20 20  eState;         
142d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72            /* Par
142e0 73 65 72 20 73 74 61 74 65 20 77 68 65 6e 20 70  ser state when p
142f0 61 72 73 69 6e 67 20 55 52 49 20 2a 2f 0a 20 20  arsing URI */.  
14300 20 20 69 6e 74 20 69 49 6e 3b 20 20 20 20 20 20    int iIn;      
14310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14320 2f 2a 20 49 6e 70 75 74 20 63 68 61 72 61 63 74  /* Input charact
14330 65 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20 20 20  er index */.    
14340 69 6e 74 20 69 4f 75 74 20 3d 20 30 3b 20 20 20  int iOut = 0;   
14350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
14360 20 4f 75 74 70 75 74 20 63 68 61 72 61 63 74 65   Output characte
14370 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20 20 20 75  r index */.    u
14380 36 34 20 6e 42 79 74 65 20 3d 20 6e 55 72 69 2b  64 nByte = nUri+
14390 32 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  2;           /* 
143a0 42 79 74 65 73 20 6f 66 20 73 70 61 63 65 20 74  Bytes of space t
143b0 6f 20 61 6c 6c 6f 63 61 74 65 20 2a 2f 0a 0a 20  o allocate */.. 
143c0 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20     /* Make sure 
143d0 74 68 65 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f  the SQLITE_OPEN_
143e0 55 52 49 20 66 6c 61 67 20 69 73 20 73 65 74 20  URI flag is set 
143f0 74 6f 20 69 6e 64 69 63 61 74 65 20 74 6f 20 74  to indicate to t
14400 68 65 20 56 46 53 20 78 4f 70 65 6e 20 0a 20 20  he VFS xOpen .  
14410 20 20 2a 2a 20 6d 65 74 68 6f 64 20 74 68 61 74    ** method that
14420 20 74 68 65 72 65 20 6d 61 79 20 62 65 20 65 78   there may be ex
14430 74 72 61 20 70 61 72 61 6d 65 74 65 72 73 20 66  tra parameters f
14440 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20 66 69 6c  ollowing the fil
14450 65 2d 6e 61 6d 65 2e 20 20 2a 2f 0a 20 20 20 20  e-name.  */.    
14460 66 6c 61 67 73 20 7c 3d 20 53 51 4c 49 54 45 5f  flags |= SQLITE_
14470 4f 50 45 4e 5f 55 52 49 3b 0a 0a 20 20 20 20 66  OPEN_URI;..    f
14480 6f 72 28 69 49 6e 3d 30 3b 20 69 49 6e 3c 6e 55  or(iIn=0; iIn<nU
14490 72 69 3b 20 69 49 6e 2b 2b 29 20 6e 42 79 74 65  ri; iIn++) nByte
144a0 20 2b 3d 20 28 7a 55 72 69 5b 69 49 6e 5d 3d 3d   += (zUri[iIn]==
144b0 27 26 27 29 3b 0a 20 20 20 20 7a 46 69 6c 65 20  '&');.    zFile 
144c0 3d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63  = sqlite3_malloc
144d0 36 34 28 6e 42 79 74 65 29 3b 0a 20 20 20 20 69  64(nByte);.    i
144e0 66 28 20 21 7a 46 69 6c 65 20 29 20 72 65 74 75  f( !zFile ) retu
144f0 72 6e 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b  rn SQLITE_NOMEM;
14500 0a 0a 20 20 20 20 69 49 6e 20 3d 20 35 3b 0a 23  ..    iIn = 5;.#
14510 69 66 64 65 66 20 53 51 4c 49 54 45 5f 41 4c 4c  ifdef SQLITE_ALL
14520 4f 57 5f 55 52 49 5f 41 55 54 48 4f 52 49 54 59  OW_URI_AUTHORITY
14530 0a 20 20 20 20 69 66 28 20 73 74 72 6e 63 6d 70  .    if( strncmp
14540 28 7a 55 72 69 2b 35 2c 20 22 2f 2f 2f 22 2c 20  (zUri+5, "///", 
14550 33 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69  3)==0 ){.      i
14560 49 6e 20 3d 20 37 3b 0a 20 20 20 20 20 20 2f 2a  In = 7;.      /*
14570 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63   The following c
14580 6f 6e 64 69 74 69 6f 6e 20 63 61 75 73 65 73 20  ondition causes 
14590 55 52 49 73 20 77 69 74 68 20 66 69 76 65 20 6c  URIs with five l
145a0 65 61 64 69 6e 67 20 2f 20 63 68 61 72 61 63 74  eading / charact
145b0 65 72 73 0a 20 20 20 20 20 20 2a 2a 20 6c 69 6b  ers.      ** lik
145c0 65 20 66 69 6c 65 3a 2f 2f 2f 2f 2f 68 6f 73 74  e file://///host
145d0 2f 70 61 74 68 20 74 6f 20 62 65 20 63 6f 6e 76  /path to be conv
145e0 65 72 74 65 64 20 69 6e 74 6f 20 55 4e 43 73 20  erted into UNCs 
145f0 6c 69 6b 65 20 2f 2f 68 6f 73 74 2f 70 61 74 68  like //host/path
14600 2e 0a 20 20 20 20 20 20 2a 2a 20 54 68 65 20 63  ..      ** The c
14610 6f 72 72 65 63 74 20 55 52 49 20 66 6f 72 20 74  orrect URI for t
14620 68 61 74 20 55 4e 43 20 68 61 73 20 6f 6e 6c 79  hat UNC has only
14630 20 74 77 6f 20 6f 72 20 66 6f 75 72 20 6c 65 61   two or four lea
14640 64 69 6e 67 20 2f 20 63 68 61 72 61 63 74 65 72  ding / character
14650 73 0a 20 20 20 20 20 20 2a 2a 20 66 69 6c 65 3a  s.      ** file:
14660 2f 2f 68 6f 73 74 2f 70 61 74 68 20 6f 72 20 66  //host/path or f
14670 69 6c 65 3a 2f 2f 2f 2f 68 6f 73 74 2f 70 61 74  ile:////host/pat
14680 68 2e 20 20 42 75 74 20 35 20 6c 65 61 64 69 6e  h.  But 5 leadin
14690 67 20 73 6c 61 73 68 65 73 20 69 73 20 61 20 0a  g slashes is a .
146a0 20 20 20 20 20 20 2a 2a 20 63 6f 6d 6d 6f 6e 20        ** common 
146b0 65 72 72 6f 72 2c 20 77 65 20 61 72 65 20 74 6f  error, we are to
146c0 6c 64 2c 20 73 6f 20 77 65 20 68 61 6e 64 6c 65  ld, so we handle
146d0 20 69 74 20 61 73 20 61 20 73 70 65 63 69 61 6c   it as a special
146e0 20 63 61 73 65 2e 20 2a 2f 0a 20 20 20 20 20 20   case. */.      
146f0 69 66 28 20 73 74 72 6e 63 6d 70 28 7a 55 72 69  if( strncmp(zUri
14700 2b 37 2c 20 22 2f 2f 2f 22 2c 20 33 29 3d 3d 30  +7, "///", 3)==0
14710 20 29 7b 20 69 49 6e 2b 2b 3b 20 7d 0a 20 20 20   ){ iIn++; }.   
14720 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 6e 63   }else if( strnc
14730 6d 70 28 7a 55 72 69 2b 35 2c 20 22 2f 2f 6c 6f  mp(zUri+5, "//lo
14740 63 61 6c 68 6f 73 74 2f 22 2c 20 31 32 29 3d 3d  calhost/", 12)==
14750 30 20 29 7b 0a 20 20 20 20 20 20 69 49 6e 20 3d  0 ){.      iIn =
14760 20 31 36 3b 0a 20 20 20 20 7d 0a 23 65 6c 73 65   16;.    }.#else
14770 0a 20 20 20 20 2f 2a 20 44 69 73 63 61 72 64 20  .    /* Discard 
14780 74 68 65 20 73 63 68 65 6d 65 20 61 6e 64 20 61  the scheme and a
14790 75 74 68 6f 72 69 74 79 20 73 65 67 6d 65 6e 74  uthority segment
147a0 73 20 6f 66 20 74 68 65 20 55 52 49 2e 20 2a 2f  s of the URI. */
147b0 0a 20 20 20 20 69 66 28 20 7a 55 72 69 5b 35 5d  .    if( zUri[5]
147c0 3d 3d 27 2f 27 20 26 26 20 7a 55 72 69 5b 36 5d  =='/' && zUri[6]
147d0 3d 3d 27 2f 27 20 29 7b 0a 20 20 20 20 20 20 69  =='/' ){.      i
147e0 49 6e 20 3d 20 37 3b 0a 20 20 20 20 20 20 77 68  In = 7;.      wh
147f0 69 6c 65 28 20 7a 55 72 69 5b 69 49 6e 5d 20 26  ile( zUri[iIn] &
14800 26 20 7a 55 72 69 5b 69 49 6e 5d 21 3d 27 2f 27  & zUri[iIn]!='/'
14810 20 29 20 69 49 6e 2b 2b 3b 0a 20 20 20 20 20 20   ) iIn++;.      
14820 69 66 28 20 69 49 6e 21 3d 37 20 26 26 20 28 69  if( iIn!=7 && (i
14830 49 6e 21 3d 31 36 20 7c 7c 20 6d 65 6d 63 6d 70  In!=16 || memcmp
14840 28 22 6c 6f 63 61 6c 68 6f 73 74 22 2c 20 26 7a  ("localhost", &z
14850 55 72 69 5b 37 5d 2c 20 39 29 29 20 29 7b 0a 20  Uri[7], 9)) ){. 
14860 20 20 20 20 20 20 20 2a 70 7a 45 72 72 4d 73 67         *pzErrMsg
14870 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e   = sqlite3_mprin
14880 74 66 28 22 69 6e 76 61 6c 69 64 20 75 72 69 20  tf("invalid uri 
14890 61 75 74 68 6f 72 69 74 79 3a 20 25 2e 2a 73 22  authority: %.*s"
148a0 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  , .            i
148b0 49 6e 2d 37 2c 20 26 7a 55 72 69 5b 37 5d 29 3b  In-7, &zUri[7]);
148c0 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51  .        rc = SQ
148d0 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20  LITE_ERROR;.    
148e0 20 20 20 20 67 6f 74 6f 20 70 61 72 73 65 5f 75      goto parse_u
148f0 72 69 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a  ri_out;.      }.
14900 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20      }.#endif..  
14910 20 20 2f 2a 20 43 6f 70 79 20 74 68 65 20 66 69    /* Copy the fi
14920 6c 65 6e 61 6d 65 20 61 6e 64 20 61 6e 79 20 71  lename and any q
14930 75 65 72 79 20 70 61 72 61 6d 65 74 65 72 73 20  uery parameters 
14940 69 6e 74 6f 20 74 68 65 20 7a 46 69 6c 65 20 62  into the zFile b
14950 75 66 66 65 72 2e 20 0a 20 20 20 20 2a 2a 20 44  uffer. .    ** D
14960 65 63 6f 64 65 20 25 48 48 20 65 73 63 61 70 65  ecode %HH escape
14970 20 63 6f 64 65 73 20 61 6c 6f 6e 67 20 74 68 65   codes along the
14980 20 77 61 79 2e 20 0a 20 20 20 20 2a 2a 0a 20 20   way. .    **.  
14990 20 20 2a 2a 20 57 69 74 68 69 6e 20 74 68 69 73    ** Within this
149a0 20 6c 6f 6f 70 2c 20 76 61 72 69 61 62 6c 65 20   loop, variable 
149b0 65 53 74 61 74 65 20 6d 61 79 20 62 65 20 73 65  eState may be se
149c0 74 20 74 6f 20 30 2c 20 31 20 6f 72 20 32 2c 20  t to 0, 1 or 2, 
149d0 64 65 70 65 6e 64 69 6e 67 0a 20 20 20 20 2a 2a  depending.    **
149e0 20 6f 6e 20 74 68 65 20 70 61 72 73 69 6e 67 20   on the parsing 
149f0 63 6f 6e 74 65 78 74 2e 20 41 73 20 66 6f 6c 6c  context. As foll
14a00 6f 77 73 3a 0a 20 20 20 20 2a 2a 0a 20 20 20 20  ows:.    **.    
14a10 2a 2a 20 20 20 30 3a 20 50 61 72 73 69 6e 67 20  **   0: Parsing 
14a20 66 69 6c 65 2d 6e 61 6d 65 2e 0a 20 20 20 20 2a  file-name..    *
14a30 2a 20 20 20 31 3a 20 50 61 72 73 69 6e 67 20 6e  *   1: Parsing n
14a40 61 6d 65 20 73 65 63 74 69 6f 6e 20 6f 66 20 61  ame section of a
14a50 20 6e 61 6d 65 3d 76 61 6c 75 65 20 71 75 65 72   name=value quer
14a60 79 20 70 61 72 61 6d 65 74 65 72 2e 0a 20 20 20  y parameter..   
14a70 20 2a 2a 20 20 20 32 3a 20 50 61 72 73 69 6e 67   **   2: Parsing
14a80 20 76 61 6c 75 65 20 73 65 63 74 69 6f 6e 20 6f   value section o
14a90 66 20 61 20 6e 61 6d 65 3d 76 61 6c 75 65 20 71  f a name=value q
14aa0 75 65 72 79 20 70 61 72 61 6d 65 74 65 72 2e 0a  uery parameter..
14ab0 20 20 20 20 2a 2f 0a 20 20 20 20 65 53 74 61 74      */.    eStat
14ac0 65 20 3d 20 30 3b 0a 20 20 20 20 77 68 69 6c 65  e = 0;.    while
14ad0 28 20 28 63 20 3d 20 7a 55 72 69 5b 69 49 6e 5d  ( (c = zUri[iIn]
14ae0 29 21 3d 30 20 26 26 20 63 21 3d 27 23 27 20 29  )!=0 && c!='#' )
14af0 7b 0a 20 20 20 20 20 20 69 49 6e 2b 2b 3b 0a 20  {.      iIn++;. 
14b00 20 20 20 20 20 69 66 28 20 63 3d 3d 27 25 27 20       if( c=='%' 
14b10 0a 20 20 20 20 20 20 20 26 26 20 73 71 6c 69 74  .       && sqlit
14b20 65 33 49 73 78 64 69 67 69 74 28 7a 55 72 69 5b  e3Isxdigit(zUri[
14b30 69 49 6e 5d 29 20 0a 20 20 20 20 20 20 20 26 26  iIn]) .       &&
14b40 20 73 71 6c 69 74 65 33 49 73 78 64 69 67 69 74   sqlite3Isxdigit
14b50 28 7a 55 72 69 5b 69 49 6e 2b 31 5d 29 20 0a 20  (zUri[iIn+1]) . 
14b60 20 20 20 20 20 29 7b 0a 20 20 20 20 20 20 20 20       ){.        
14b70 69 6e 74 20 6f 63 74 65 74 20 3d 20 28 73 71 6c  int octet = (sql
14b80 69 74 65 33 48 65 78 54 6f 49 6e 74 28 7a 55 72  ite3HexToInt(zUr
14b90 69 5b 69 49 6e 2b 2b 5d 29 20 3c 3c 20 34 29 3b  i[iIn++]) << 4);
14ba0 0a 20 20 20 20 20 20 20 20 6f 63 74 65 74 20 2b  .        octet +
14bb0 3d 20 73 71 6c 69 74 65 33 48 65 78 54 6f 49 6e  = sqlite3HexToIn
14bc0 74 28 7a 55 72 69 5b 69 49 6e 2b 2b 5d 29 3b 0a  t(zUri[iIn++]);.
14bd0 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
14be0 20 6f 63 74 65 74 3e 3d 30 20 26 26 20 6f 63 74   octet>=0 && oct
14bf0 65 74 3c 32 35 36 20 29 3b 0a 20 20 20 20 20 20  et<256 );.      
14c00 20 20 69 66 28 20 6f 63 74 65 74 3d 3d 30 20 29    if( octet==0 )
14c10 7b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  {.          /* T
14c20 68 69 73 20 62 72 61 6e 63 68 20 69 73 20 74 61  his branch is ta
14c30 6b 65 6e 20 77 68 65 6e 20 22 25 30 30 22 20 61  ken when "%00" a
14c40 70 70 65 61 72 73 20 77 69 74 68 69 6e 20 74 68  ppears within th
14c50 65 20 55 52 49 2e 20 49 6e 20 74 68 69 73 0a 20  e URI. In this. 
14c60 20 20 20 20 20 20 20 20 20 2a 2a 20 63 61 73 65           ** case
14c70 20 77 65 20 69 67 6e 6f 72 65 20 61 6c 6c 20 74   we ignore all t
14c80 65 78 74 20 69 6e 20 74 68 65 20 72 65 6d 61 69  ext in the remai
14c90 6e 64 65 72 20 6f 66 20 74 68 65 20 70 61 74 68  nder of the path
14ca0 2c 20 6e 61 6d 65 20 6f 72 0a 20 20 20 20 20 20  , name or.      
14cb0 20 20 20 20 2a 2a 20 76 61 6c 75 65 20 63 75 72      ** value cur
14cc0 72 65 6e 74 6c 79 20 62 65 69 6e 67 20 70 61 72  rently being par
14cd0 73 65 64 2e 20 53 6f 20 69 67 6e 6f 72 65 20 74  sed. So ignore t
14ce0 68 65 20 63 75 72 72 65 6e 74 20 63 68 61 72 61  he current chara
14cf0 63 74 65 72 0a 20 20 20 20 20 20 20 20 20 20 2a  cter.          *
14d00 2a 20 61 6e 64 20 73 6b 69 70 20 74 6f 20 74 68  * and skip to th
14d10 65 20 6e 65 78 74 20 22 3f 22 2c 20 22 3d 22 20  e next "?", "=" 
14d20 6f 72 20 22 26 22 2c 20 61 73 20 61 70 70 72 6f  or "&", as appro
14d30 70 72 69 61 74 65 2e 20 2a 2f 0a 20 20 20 20 20  priate. */.     
14d40 20 20 20 20 20 77 68 69 6c 65 28 20 28 63 20 3d       while( (c =
14d50 20 7a 55 72 69 5b 69 49 6e 5d 29 21 3d 30 20 26   zUri[iIn])!=0 &
14d60 26 20 63 21 3d 27 23 27 20 0a 20 20 20 20 20 20  & c!='#' .      
14d70 20 20 20 20 20 20 20 20 26 26 20 28 65 53 74 61          && (eSta
14d80 74 65 21 3d 30 20 7c 7c 20 63 21 3d 27 3f 27 29  te!=0 || c!='?')
14d90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 26  .              &
14da0 26 20 28 65 53 74 61 74 65 21 3d 31 20 7c 7c 20  & (eState!=1 || 
14db0 28 63 21 3d 27 3d 27 20 26 26 20 63 21 3d 27 26  (c!='=' && c!='&
14dc0 27 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  ')).            
14dd0 20 20 26 26 20 28 65 53 74 61 74 65 21 3d 32 20    && (eState!=2 
14de0 7c 7c 20 63 21 3d 27 26 27 29 0a 20 20 20 20 20  || c!='&').     
14df0 20 20 20 20 20 29 7b 0a 20 20 20 20 20 20 20 20       ){.        
14e00 20 20 20 20 69 49 6e 2b 2b 3b 0a 20 20 20 20 20      iIn++;.     
14e10 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
14e20 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20   continue;.     
14e30 20 20 20 7d 0a 20 20 20 20 20 20 20 20 63 20 3d     }.        c =
14e40 20 6f 63 74 65 74 3b 0a 20 20 20 20 20 20 7d 65   octet;.      }e
14e50 6c 73 65 20 69 66 28 20 65 53 74 61 74 65 3d 3d  lse if( eState==
14e60 31 20 26 26 20 28 63 3d 3d 27 26 27 20 7c 7c 20  1 && (c=='&' || 
14e70 63 3d 3d 27 3d 27 29 20 29 7b 0a 20 20 20 20 20  c=='=') ){.     
14e80 20 20 20 69 66 28 20 7a 46 69 6c 65 5b 69 4f 75     if( zFile[iOu
14e90 74 2d 31 5d 3d 3d 30 20 29 7b 0a 20 20 20 20 20  t-1]==0 ){.     
14ea0 20 20 20 20 20 2f 2a 20 41 6e 20 65 6d 70 74 79       /* An empty
14eb0 20 6f 70 74 69 6f 6e 20 6e 61 6d 65 2e 20 49 67   option name. Ig
14ec0 6e 6f 72 65 20 74 68 69 73 20 6f 70 74 69 6f 6e  nore this option
14ed0 20 61 6c 74 6f 67 65 74 68 65 72 2e 20 2a 2f 0a   altogether. */.
14ee0 20 20 20 20 20 20 20 20 20 20 77 68 69 6c 65 28            while(
14ef0 20 7a 55 72 69 5b 69 49 6e 5d 20 26 26 20 7a 55   zUri[iIn] && zU
14f00 72 69 5b 69 49 6e 5d 21 3d 27 23 27 20 26 26 20  ri[iIn]!='#' && 
14f10 7a 55 72 69 5b 69 49 6e 2d 31 5d 21 3d 27 26 27  zUri[iIn-1]!='&'
14f20 20 29 20 69 49 6e 2b 2b 3b 0a 20 20 20 20 20 20   ) iIn++;.      
14f30 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20      continue;.  
14f40 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
14f50 69 66 28 20 63 3d 3d 27 26 27 20 29 7b 0a 20 20  if( c=='&' ){.  
14f60 20 20 20 20 20 20 20 20 7a 46 69 6c 65 5b 69 4f          zFile[iO
14f70 75 74 2b 2b 5d 20 3d 20 27 5c 30 27 3b 0a 20 20  ut++] = '\0';.  
14f80 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
14f90 20 20 20 20 20 20 20 65 53 74 61 74 65 20 3d 20         eState = 
14fa0 32 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  2;.        }.   
14fb0 20 20 20 20 20 63 20 3d 20 30 3b 0a 20 20 20 20       c = 0;.    
14fc0 20 20 7d 65 6c 73 65 20 69 66 28 20 28 65 53 74    }else if( (eSt
14fd0 61 74 65 3d 3d 30 20 26 26 20 63 3d 3d 27 3f 27  ate==0 && c=='?'
14fe0 29 20 7c 7c 20 28 65 53 74 61 74 65 3d 3d 32 20  ) || (eState==2 
14ff0 26 26 20 63 3d 3d 27 26 27 29 20 29 7b 0a 20 20  && c=='&') ){.  
15000 20 20 20 20 20 20 63 20 3d 20 30 3b 0a 20 20 20        c = 0;.   
15010 20 20 20 20 20 65 53 74 61 74 65 20 3d 20 31 3b       eState = 1;
15020 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7a  .      }.      z
15030 46 69 6c 65 5b 69 4f 75 74 2b 2b 5d 20 3d 20 63  File[iOut++] = c
15040 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
15050 65 53 74 61 74 65 3d 3d 31 20 29 20 7a 46 69 6c  eState==1 ) zFil
15060 65 5b 69 4f 75 74 2b 2b 5d 20 3d 20 27 5c 30 27  e[iOut++] = '\0'
15070 3b 0a 20 20 20 20 7a 46 69 6c 65 5b 69 4f 75 74  ;.    zFile[iOut
15080 2b 2b 5d 20 3d 20 27 5c 30 27 3b 0a 20 20 20 20  ++] = '\0';.    
15090 7a 46 69 6c 65 5b 69 4f 75 74 2b 2b 5d 20 3d 20  zFile[iOut++] = 
150a0 27 5c 30 27 3b 0a 0a 20 20 20 20 2f 2a 20 43 68  '\0';..    /* Ch
150b0 65 63 6b 20 69 66 20 74 68 65 72 65 20 77 65 72  eck if there wer
150c0 65 20 61 6e 79 20 6f 70 74 69 6f 6e 73 20 73 70  e any options sp
150d0 65 63 69 66 69 65 64 20 74 68 61 74 20 73 68 6f  ecified that sho
150e0 75 6c 64 20 62 65 20 69 6e 74 65 72 70 72 65 74  uld be interpret
150f0 65 64 20 0a 20 20 20 20 2a 2a 20 68 65 72 65 2e  ed .    ** here.
15100 20 4f 70 74 69 6f 6e 73 20 74 68 61 74 20 61 72   Options that ar
15110 65 20 69 6e 74 65 72 70 72 65 74 65 64 20 68 65  e interpreted he
15120 72 65 20 69 6e 63 6c 75 64 65 20 22 76 66 73 22  re include "vfs"
15130 20 61 6e 64 20 74 68 6f 73 65 20 74 68 61 74 0a   and those that.
15140 20 20 20 20 2a 2a 20 63 6f 72 72 65 73 70 6f 6e      ** correspon
15150 64 20 74 6f 20 66 6c 61 67 73 20 74 68 61 74 20  d to flags that 
15160 6d 61 79 20 62 65 20 70 61 73 73 65 64 20 74 6f  may be passed to
15170 20 74 68 65 20 73 71 6c 69 74 65 33 5f 6f 70 65   the sqlite3_ope
15180 6e 5f 76 32 28 29 0a 20 20 20 20 2a 2a 20 6d 65  n_v2().    ** me
15190 74 68 6f 64 2e 20 2a 2f 0a 20 20 20 20 7a 4f 70  thod. */.    zOp
151a0 74 20 3d 20 26 7a 46 69 6c 65 5b 73 71 6c 69 74  t = &zFile[sqlit
151b0 65 33 53 74 72 6c 65 6e 33 30 28 7a 46 69 6c 65  e3Strlen30(zFile
151c0 29 2b 31 5d 3b 0a 20 20 20 20 77 68 69 6c 65 28  )+1];.    while(
151d0 20 7a 4f 70 74 5b 30 5d 20 29 7b 0a 20 20 20 20   zOpt[0] ){.    
151e0 20 20 69 6e 74 20 6e 4f 70 74 20 3d 20 73 71 6c    int nOpt = sql
151f0 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 4f 70  ite3Strlen30(zOp
15200 74 29 3b 0a 20 20 20 20 20 20 63 68 61 72 20 2a  t);.      char *
15210 7a 56 61 6c 20 3d 20 26 7a 4f 70 74 5b 6e 4f 70  zVal = &zOpt[nOp
15220 74 2b 31 5d 3b 0a 20 20 20 20 20 20 69 6e 74 20  t+1];.      int 
15230 6e 56 61 6c 20 3d 20 73 71 6c 69 74 65 33 53 74  nVal = sqlite3St
15240 72 6c 65 6e 33 30 28 7a 56 61 6c 29 3b 0a 0a 20  rlen30(zVal);.. 
15250 20 20 20 20 20 69 66 28 20 6e 4f 70 74 3d 3d 33       if( nOpt==3
15260 20 26 26 20 6d 65 6d 63 6d 70 28 22 76 66 73 22   && memcmp("vfs"
15270 2c 20 7a 4f 70 74 2c 20 33 29 3d 3d 30 20 29 7b  , zOpt, 3)==0 ){
15280 0a 20 20 20 20 20 20 20 20 7a 56 66 73 20 3d 20  .        zVfs = 
15290 7a 56 61 6c 3b 0a 20 20 20 20 20 20 7d 65 6c 73  zVal;.      }els
152a0 65 7b 0a 20 20 20 20 20 20 20 20 73 74 72 75 63  e{.        struc
152b0 74 20 4f 70 65 6e 4d 6f 64 65 20 7b 0a 20 20 20  t OpenMode {.   
152c0 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61         const cha
152d0 72 20 2a 7a 3b 0a 20 20 20 20 20 20 20 20 20 20  r *z;.          
152e0 69 6e 74 20 6d 6f 64 65 3b 0a 20 20 20 20 20 20  int mode;.      
152f0 20 20 7d 20 2a 61 4d 6f 64 65 20 3d 20 30 3b 0a    } *aMode = 0;.
15300 20 20 20 20 20 20 20 20 63 68 61 72 20 2a 7a 4d          char *zM
15310 6f 64 65 54 79 70 65 20 3d 20 30 3b 0a 20 20 20  odeType = 0;.   
15320 20 20 20 20 20 69 6e 74 20 6d 61 73 6b 20 3d 20       int mask = 
15330 30 3b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6c  0;.        int l
15340 69 6d 69 74 20 3d 20 30 3b 0a 0a 20 20 20 20 20  imit = 0;..     
15350 20 20 20 69 66 28 20 6e 4f 70 74 3d 3d 35 20 26     if( nOpt==5 &
15360 26 20 6d 65 6d 63 6d 70 28 22 63 61 63 68 65 22  & memcmp("cache"
15370 2c 20 7a 4f 70 74 2c 20 35 29 3d 3d 30 20 29 7b  , zOpt, 5)==0 ){
15380 0a 20 20 20 20 20 20 20 20 20 20 73 74 61 74 69  .          stati
15390 63 20 73 74 72 75 63 74 20 4f 70 65 6e 4d 6f 64  c struct OpenMod
153a0 65 20 61 43 61 63 68 65 4d 6f 64 65 5b 5d 20 3d  e aCacheMode[] =
153b0 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b   {.            {
153c0 20 22 73 68 61 72 65 64 22 2c 20 20 53 51 4c 49   "shared",  SQLI
153d0 54 45 5f 4f 50 45 4e 5f 53 48 41 52 45 44 43 41  TE_OPEN_SHAREDCA
153e0 43 48 45 20 7d 2c 0a 20 20 20 20 20 20 20 20 20  CHE },.         
153f0 20 20 20 7b 20 22 70 72 69 76 61 74 65 22 2c 20     { "private", 
15400 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 50 52 49 56  SQLITE_OPEN_PRIV
15410 41 54 45 43 41 43 48 45 20 7d 2c 0a 20 20 20 20  ATECACHE },.    
15420 20 20 20 20 20 20 20 20 7b 20 30 2c 20 30 20 7d          { 0, 0 }
15430 0a 20 20 20 20 20 20 20 20 20 20 7d 3b 0a 0a 20  .          };.. 
15440 20 20 20 20 20 20 20 20 20 6d 61 73 6b 20 3d 20           mask = 
15450 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 53 48 41 52  SQLITE_OPEN_SHAR
15460 45 44 43 41 43 48 45 7c 53 51 4c 49 54 45 5f 4f  EDCACHE|SQLITE_O
15470 50 45 4e 5f 50 52 49 56 41 54 45 43 41 43 48 45  PEN_PRIVATECACHE
15480 3b 0a 20 20 20 20 20 20 20 20 20 20 61 4d 6f 64  ;.          aMod
15490 65 20 3d 20 61 43 61 63 68 65 4d 6f 64 65 3b 0a  e = aCacheMode;.
154a0 20 20 20 20 20 20 20 20 20 20 6c 69 6d 69 74 20            limit 
154b0 3d 20 6d 61 73 6b 3b 0a 20 20 20 20 20 20 20 20  = mask;.        
154c0 20 20 7a 4d 6f 64 65 54 79 70 65 20 3d 20 22 63    zModeType = "c
154d0 61 63 68 65 22 3b 0a 20 20 20 20 20 20 20 20 7d  ache";.        }
154e0 0a 20 20 20 20 20 20 20 20 69 66 28 20 6e 4f 70  .        if( nOp
154f0 74 3d 3d 34 20 26 26 20 6d 65 6d 63 6d 70 28 22  t==4 && memcmp("
15500 6d 6f 64 65 22 2c 20 7a 4f 70 74 2c 20 34 29 3d  mode", zOpt, 4)=
15510 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  =0 ){.          
15520 73 74 61 74 69 63 20 73 74 72 75 63 74 20 4f 70  static struct Op
15530 65 6e 4d 6f 64 65 20 61 4f 70 65 6e 4d 6f 64 65  enMode aOpenMode
15540 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 20 20 20  [] = {.         
15550 20 20 20 7b 20 22 72 6f 22 2c 20 20 53 51 4c 49     { "ro",  SQLI
15560 54 45 5f 4f 50 45 4e 5f 52 45 41 44 4f 4e 4c 59  TE_OPEN_READONLY
15570 20 7d 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20   },.            
15580 7b 20 22 72 77 22 2c 20 20 53 51 4c 49 54 45 5f  { "rw",  SQLITE_
15590 4f 50 45 4e 5f 52 45 41 44 57 52 49 54 45 20 7d  OPEN_READWRITE }
155a0 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  , .            {
155b0 20 22 72 77 63 22 2c 20 53 51 4c 49 54 45 5f 4f   "rwc", SQLITE_O
155c0 50 45 4e 5f 52 45 41 44 57 52 49 54 45 20 7c 20  PEN_READWRITE | 
155d0 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 43 52 45 41  SQLITE_OPEN_CREA
155e0 54 45 20 7d 2c 0a 20 20 20 20 20 20 20 20 20 20  TE },.          
155f0 20 20 7b 20 22 6d 65 6d 6f 72 79 22 2c 20 53 51    { "memory", SQ
15600 4c 49 54 45 5f 4f 50 45 4e 5f 4d 45 4d 4f 52 59  LITE_OPEN_MEMORY
15610 20 7d 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20   },.            
15620 7b 20 30 2c 20 30 20 7d 0a 20 20 20 20 20 20 20  { 0, 0 }.       
15630 20 20 20 7d 3b 0a 0a 20 20 20 20 20 20 20 20 20     };..         
15640 20 6d 61 73 6b 20 3d 20 53 51 4c 49 54 45 5f 4f   mask = SQLITE_O
15650 50 45 4e 5f 52 45 41 44 4f 4e 4c 59 20 7c 20 53  PEN_READONLY | S
15660 51 4c 49 54 45 5f 4f 50 45 4e 5f 52 45 41 44 57  QLITE_OPEN_READW
15670 52 49 54 45 0a 20 20 20 20 20 20 20 20 20 20 20  RITE.           
15680 20 20 20 20 20 20 20 20 7c 20 53 51 4c 49 54 45          | SQLITE
15690 5f 4f 50 45 4e 5f 43 52 45 41 54 45 20 7c 20 53  _OPEN_CREATE | S
156a0 51 4c 49 54 45 5f 4f 50 45 4e 5f 4d 45 4d 4f 52  QLITE_OPEN_MEMOR
156b0 59 3b 0a 20 20 20 20 20 20 20 20 20 20 61 4d 6f  Y;.          aMo
156c0 64 65 20 3d 20 61 4f 70 65 6e 4d 6f 64 65 3b 0a  de = aOpenMode;.
156d0 20 20 20 20 20 20 20 20 20 20 6c 69 6d 69 74 20            limit 
156e0 3d 20 6d 61 73 6b 20 26 20 66 6c 61 67 73 3b 0a  = mask & flags;.
156f0 20 20 20 20 20 20 20 20 20 20 7a 4d 6f 64 65 54            zModeT
15700 79 70 65 20 3d 20 22 61 63 63 65 73 73 22 3b 0a  ype = "access";.
15710 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20          }..     
15720 20 20 20 69 66 28 20 61 4d 6f 64 65 20 29 7b 0a     if( aMode ){.
15730 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 69 3b            int i;
15740 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6d  .          int m
15750 6f 64 65 20 3d 20 30 3b 0a 20 20 20 20 20 20 20  ode = 0;.       
15760 20 20 20 66 6f 72 28 69 3d 30 3b 20 61 4d 6f 64     for(i=0; aMod
15770 65 5b 69 5d 2e 7a 3b 20 69 2b 2b 29 7b 0a 20 20  e[i].z; i++){.  
15780 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20            const 
15790 63 68 61 72 20 2a 7a 20 3d 20 61 4d 6f 64 65 5b  char *z = aMode[
157a0 69 5d 2e 7a 3b 0a 20 20 20 20 20 20 20 20 20 20  i].z;.          
157b0 20 20 69 66 28 20 6e 56 61 6c 3d 3d 73 71 6c 69    if( nVal==sqli
157c0 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 29 20 26  te3Strlen30(z) &
157d0 26 20 30 3d 3d 6d 65 6d 63 6d 70 28 7a 56 61 6c  & 0==memcmp(zVal
157e0 2c 20 7a 2c 20 6e 56 61 6c 29 20 29 7b 0a 20 20  , z, nVal) ){.  
157f0 20 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64 65              mode
15800 20 3d 20 61 4d 6f 64 65 5b 69 5d 2e 6d 6f 64 65   = aMode[i].mode
15810 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
15820 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 20  break;.         
15830 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 7d     }.          }
15840 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 6d  .          if( m
15850 6f 64 65 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  ode==0 ){.      
15860 20 20 20 20 20 20 2a 70 7a 45 72 72 4d 73 67 20        *pzErrMsg 
15870 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74  = sqlite3_mprint
15880 66 28 22 6e 6f 20 73 75 63 68 20 25 73 20 6d 6f  f("no such %s mo
15890 64 65 3a 20 25 73 22 2c 20 7a 4d 6f 64 65 54 79  de: %s", zModeTy
158a0 70 65 2c 20 7a 56 61 6c 29 3b 0a 20 20 20 20 20  pe, zVal);.     
158b0 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49         rc = SQLI
158c0 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 20 20  TE_ERROR;.      
158d0 20 20 20 20 20 20 67 6f 74 6f 20 70 61 72 73 65        goto parse
158e0 5f 75 72 69 5f 6f 75 74 3b 0a 20 20 20 20 20 20  _uri_out;.      
158f0 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
15900 69 66 28 20 28 6d 6f 64 65 20 26 20 7e 53 51 4c  if( (mode & ~SQL
15910 49 54 45 5f 4f 50 45 4e 5f 4d 45 4d 4f 52 59 29  ITE_OPEN_MEMORY)
15920 3e 6c 69 6d 69 74 20 29 7b 0a 20 20 20 20 20 20  >limit ){.      
15930 20 20 20 20 20 20 2a 70 7a 45 72 72 4d 73 67 20        *pzErrMsg 
15940 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74  = sqlite3_mprint
15950 66 28 22 25 73 20 6d 6f 64 65 20 6e 6f 74 20 61  f("%s mode not a
15960 6c 6c 6f 77 65 64 3a 20 25 73 22 2c 0a 20 20 20  llowed: %s",.   
15970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15990 20 20 20 20 20 7a 4d 6f 64 65 54 79 70 65 2c 20       zModeType, 
159a0 7a 56 61 6c 29 3b 0a 20 20 20 20 20 20 20 20 20  zVal);.         
159b0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 50     rc = SQLITE_P
159c0 45 52 4d 3b 0a 20 20 20 20 20 20 20 20 20 20 20  ERM;.           
159d0 20 67 6f 74 6f 20 70 61 72 73 65 5f 75 72 69 5f   goto parse_uri_
159e0 6f 75 74 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  out;.          }
159f0 0a 20 20 20 20 20 20 20 20 20 20 66 6c 61 67 73  .          flags
15a00 20 3d 20 28 66 6c 61 67 73 20 26 20 7e 6d 61 73   = (flags & ~mas
15a10 6b 29 20 7c 20 6d 6f 64 65 3b 0a 20 20 20 20 20  k) | mode;.     
15a20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 0a 20 20     }.      }..  
15a30 20 20 20 20 7a 4f 70 74 20 3d 20 26 7a 56 61 6c      zOpt = &zVal
15a40 5b 6e 56 61 6c 2b 31 5d 3b 0a 20 20 20 20 7d 0a  [nVal+1];.    }.
15a50 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 7a 46  .  }else{.    zF
15a60 69 6c 65 20 3d 20 73 71 6c 69 74 65 33 5f 6d 61  ile = sqlite3_ma
15a70 6c 6c 6f 63 36 34 28 6e 55 72 69 2b 32 29 3b 0a  lloc64(nUri+2);.
15a80 20 20 20 20 69 66 28 20 21 7a 46 69 6c 65 20 29      if( !zFile )
15a90 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4e   return SQLITE_N
15aa0 4f 4d 45 4d 3b 0a 20 20 20 20 6d 65 6d 63 70 79  OMEM;.    memcpy
15ab0 28 7a 46 69 6c 65 2c 20 7a 55 72 69 2c 20 6e 55  (zFile, zUri, nU
15ac0 72 69 29 3b 0a 20 20 20 20 7a 46 69 6c 65 5b 6e  ri);.    zFile[n
15ad0 55 72 69 5d 20 3d 20 27 5c 30 27 3b 0a 20 20 20  Uri] = '\0';.   
15ae0 20 7a 46 69 6c 65 5b 6e 55 72 69 2b 31 5d 20 3d   zFile[nUri+1] =
15af0 20 27 5c 30 27 3b 0a 20 20 20 20 66 6c 61 67 73   '\0';.    flags
15b00 20 26 3d 20 7e 53 51 4c 49 54 45 5f 4f 50 45 4e   &= ~SQLITE_OPEN
15b10 5f 55 52 49 3b 0a 20 20 7d 0a 0a 20 20 2a 70 70  _URI;.  }..  *pp
15b20 56 66 73 20 3d 20 73 71 6c 69 74 65 33 5f 76 66  Vfs = sqlite3_vf
15b30 73 5f 66 69 6e 64 28 7a 56 66 73 29 3b 0a 20 20  s_find(zVfs);.  
15b40 69 66 28 20 2a 70 70 56 66 73 3d 3d 30 20 29 7b  if( *ppVfs==0 ){
15b50 0a 20 20 20 20 2a 70 7a 45 72 72 4d 73 67 20 3d  .    *pzErrMsg =
15b60 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66   sqlite3_mprintf
15b70 28 22 6e 6f 20 73 75 63 68 20 76 66 73 3a 20 25  ("no such vfs: %
15b80 73 22 2c 20 7a 56 66 73 29 3b 0a 20 20 20 20 72  s", zVfs);.    r
15b90 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c = SQLITE_ERROR
15ba0 3b 0a 20 20 7d 0a 20 70 61 72 73 65 5f 75 72 69  ;.  }. parse_uri
15bb0 5f 6f 75 74 3a 0a 20 20 69 66 28 20 72 63 21 3d  _out:.  if( rc!=
15bc0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
15bd0 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 46   sqlite3_free(zF
15be0 69 6c 65 29 3b 0a 20 20 20 20 7a 46 69 6c 65 20  ile);.    zFile 
15bf0 3d 20 30 3b 0a 20 20 7d 0a 20 20 2a 70 46 6c 61  = 0;.  }.  *pFla
15c00 67 73 20 3d 20 66 6c 61 67 73 3b 0a 20 20 2a 70  gs = flags;.  *p
15c10 7a 46 69 6c 65 20 3d 20 7a 46 69 6c 65 3b 0a 20  zFile = zFile;. 
15c20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 0a   return rc;.}...
15c30 2f 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69  /*.** This routi
15c40 6e 65 20 64 6f 65 73 20 74 68 65 20 77 6f 72 6b  ne does the work
15c50 20 6f 66 20 6f 70 65 6e 69 6e 67 20 61 20 64 61   of opening a da
15c60 74 61 62 61 73 65 20 6f 6e 20 62 65 68 61 6c 66  tabase on behalf
15c70 20 6f 66 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 6f   of.** sqlite3_o
15c80 70 65 6e 28 29 20 61 6e 64 20 73 71 6c 69 74 65  pen() and sqlite
15c90 33 5f 6f 70 65 6e 31 36 28 29 2e 20 54 68 65 20  3_open16(). The 
15ca0 64 61 74 61 62 61 73 65 20 66 69 6c 65 6e 61 6d  database filenam
15cb0 65 20 22 7a 46 69 6c 65 6e 61 6d 65 22 20 20 0a  e "zFilename"  .
15cc0 2a 2a 20 69 73 20 55 54 46 2d 38 20 65 6e 63 6f  ** is UTF-8 enco
15cd0 64 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ded..*/.static i
15ce0 6e 74 20 6f 70 65 6e 44 61 74 61 62 61 73 65 28  nt openDatabase(
15cf0 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
15d00 46 69 6c 65 6e 61 6d 65 2c 20 2f 2a 20 44 61 74  Filename, /* Dat
15d10 61 62 61 73 65 20 66 69 6c 65 6e 61 6d 65 20 55  abase filename U
15d20 54 46 2d 38 20 65 6e 63 6f 64 65 64 20 2a 2f 0a  TF-8 encoded */.
15d30 20 20 73 71 6c 69 74 65 33 20 2a 2a 70 70 44 62    sqlite3 **ppDb
15d40 2c 20 20 20 20 20 20 20 20 2f 2a 20 4f 55 54 3a  ,        /* OUT:
15d50 20 52 65 74 75 72 6e 65 64 20 64 61 74 61 62 61   Returned databa
15d60 73 65 20 68 61 6e 64 6c 65 20 2a 2f 0a 20 20 75  se handle */.  u
15d70 6e 73 69 67 6e 65 64 20 69 6e 74 20 66 6c 61 67  nsigned int flag
15d80 73 2c 20 20 20 20 2f 2a 20 4f 70 65 72 61 74 69  s,    /* Operati
15d90 6f 6e 61 6c 20 66 6c 61 67 73 20 2a 2f 0a 20 20  onal flags */.  
15da0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 56 66 73  const char *zVfs
15db0 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
15dc0 66 20 74 68 65 20 56 46 53 20 74 6f 20 75 73 65  f the VFS to use
15dd0 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33   */.){.  sqlite3
15de0 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20 20 20   *db;           
15df0 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74 6f 72           /* Stor
15e00 65 20 61 6c 6c 6f 63 61 74 65 64 20 68 61 6e 64  e allocated hand
15e10 6c 65 20 68 65 72 65 20 2a 2f 0a 20 20 69 6e 74  le here */.  int
15e20 20 72 63 3b 20 20 20 20 20 20 20 20 20 20 20 20   rc;            
15e30 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
15e40 52 65 74 75 72 6e 20 63 6f 64 65 20 2a 2f 0a 20  Return code */. 
15e50 20 69 6e 74 20 69 73 54 68 72 65 61 64 73 61 66   int isThreadsaf
15e60 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
15e70 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 74 68 72   /* True for thr
15e80 65 61 64 73 61 66 65 20 63 6f 6e 6e 65 63 74 69  eadsafe connecti
15e90 6f 6e 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ons */.  char *z
15ea0 4f 70 65 6e 20 3d 20 30 3b 20 20 20 20 20 20 20  Open = 0;       
15eb0 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 6c 65           /* File
15ec0 6e 61 6d 65 20 61 72 67 75 6d 65 6e 74 20 74 6f  name argument to
15ed0 20 70 61 73 73 20 74 6f 20 42 74 72 65 65 4f 70   pass to BtreeOp
15ee0 65 6e 28 29 20 2a 2f 0a 20 20 63 68 61 72 20 2a  en() */.  char *
15ef0 7a 45 72 72 4d 73 67 20 3d 20 30 3b 20 20 20 20  zErrMsg = 0;    
15f00 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 72 72            /* Err
15f10 6f 72 20 6d 65 73 73 61 67 65 20 66 72 6f 6d 20  or message from 
15f20 73 71 6c 69 74 65 33 50 61 72 73 65 55 72 69 28  sqlite3ParseUri(
15f30 29 20 2a 2f 0a 0a 23 69 66 64 65 66 20 53 51 4c  ) */..#ifdef SQL
15f40 49 54 45 5f 45 4e 41 42 4c 45 5f 41 50 49 5f 41  ITE_ENABLE_API_A
15f50 52 4d 4f 52 0a 20 20 69 66 28 20 70 70 44 62 3d  RMOR.  if( ppDb=
15f60 3d 30 20 29 20 72 65 74 75 72 6e 20 53 51 4c 49  =0 ) return SQLI
15f70 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54 3b 0a  TE_MISUSE_BKPT;.
15f80 23 65 6e 64 69 66 0a 20 20 2a 70 70 44 62 20 3d  #endif.  *ppDb =
15f90 20 30 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   0;.#ifndef SQLI
15fa0 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 49 54  TE_OMIT_AUTOINIT
15fb0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f  .  rc = sqlite3_
15fc0 69 6e 69 74 69 61 6c 69 7a 65 28 29 3b 0a 20 20  initialize();.  
15fd0 69 66 28 20 72 63 20 29 20 72 65 74 75 72 6e 20  if( rc ) return 
15fe0 72 63 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a  rc;.#endif..  /*
15ff0 20 4f 6e 6c 79 20 61 6c 6c 6f 77 20 73 65 6e 73   Only allow sens
16000 69 62 6c 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e  ible combination
16010 73 20 6f 66 20 62 69 74 73 20 69 6e 20 74 68 65  s of bits in the
16020 20 66 6c 61 67 73 20 61 72 67 75 6d 65 6e 74 2e   flags argument.
16030 20 20 0a 20 20 2a 2a 20 54 68 72 6f 77 20 61 6e    .  ** Throw an
16040 20 65 72 72 6f 72 20 69 66 20 61 6e 79 20 6e 6f   error if any no
16050 6e 2d 73 65 6e 73 65 20 63 6f 6d 62 69 6e 61 74  n-sense combinat
16060 69 6f 6e 20 69 73 20 75 73 65 64 2e 20 20 49 66  ion is used.  If
16070 20 77 65 0a 20 20 2a 2a 20 64 6f 20 6e 6f 74 20   we.  ** do not 
16080 62 6c 6f 63 6b 20 69 6c 6c 65 67 61 6c 20 63 6f  block illegal co
16090 6d 62 69 6e 61 74 69 6f 6e 73 20 68 65 72 65 2c  mbinations here,
160a0 20 69 74 20 63 6f 75 6c 64 20 74 72 69 67 67 65   it could trigge
160b0 72 0a 20 20 2a 2a 20 61 73 73 65 72 74 28 29 20  r.  ** assert() 
160c0 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 64 65  statements in de
160d0 65 70 65 72 20 6c 61 79 65 72 73 2e 20 20 53 65  eper layers.  Se
160e0 6e 73 69 62 6c 65 20 63 6f 6d 62 69 6e 61 74 69  nsible combinati
160f0 6f 6e 73 0a 20 20 2a 2a 20 61 72 65 3a 0a 20 20  ons.  ** are:.  
16100 2a 2a 0a 20 20 2a 2a 20 20 31 3a 20 20 53 51 4c  **.  **  1:  SQL
16110 49 54 45 5f 4f 50 45 4e 5f 52 45 41 44 4f 4e 4c  ITE_OPEN_READONL
16120 59 0a 20 20 2a 2a 20 20 32 3a 20 20 53 51 4c 49  Y.  **  2:  SQLI
16130 54 45 5f 4f 50 45 4e 5f 52 45 41 44 57 52 49 54  TE_OPEN_READWRIT
16140 45 0a 20 20 2a 2a 20 20 36 3a 20 20 53 51 4c 49  E.  **  6:  SQLI
16150 54 45 5f 4f 50 45 4e 5f 52 45 41 44 57 52 49 54  TE_OPEN_READWRIT
16160 45 20 7c 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f  E | SQLITE_OPEN_
16170 43 52 45 41 54 45 0a 20 20 2a 2f 0a 20 20 61 73  CREATE.  */.  as
16180 73 65 72 74 28 20 53 51 4c 49 54 45 5f 4f 50 45  sert( SQLITE_OPE
16190 4e 5f 52 45 41 44 4f 4e 4c 59 20 20 3d 3d 20 30  N_READONLY  == 0
161a0 78 30 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28  x01 );.  assert(
161b0 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 52 45 41   SQLITE_OPEN_REA
161c0 44 57 52 49 54 45 20 3d 3d 20 30 78 30 32 20 29  DWRITE == 0x02 )
161d0 3b 0a 20 20 61 73 73 65 72 74 28 20 53 51 4c 49  ;.  assert( SQLI
161e0 54 45 5f 4f 50 45 4e 5f 43 52 45 41 54 45 20 20  TE_OPEN_CREATE  
161f0 20 20 3d 3d 20 30 78 30 34 20 29 3b 0a 20 20 74    == 0x04 );.  t
16200 65 73 74 63 61 73 65 28 20 28 31 3c 3c 28 66 6c  estcase( (1<<(fl
16210 61 67 73 26 37 29 29 3d 3d 30 78 30 32 20 29 3b  ags&7))==0x02 );
16220 20 2f 2a 20 52 45 41 44 4f 4e 4c 59 20 2a 2f 0a   /* READONLY */.
16230 20 20 74 65 73 74 63 61 73 65 28 20 28 31 3c 3c    testcase( (1<<
16240 28 66 6c 61 67 73 26 37 29 29 3d 3d 30 78 30 34  (flags&7))==0x04
16250 20 29 3b 20 2f 2a 20 52 45 41 44 57 52 49 54 45   ); /* READWRITE
16260 20 2a 2f 0a 20 20 74 65 73 74 63 61 73 65 28 20   */.  testcase( 
16270 28 31 3c 3c 28 66 6c 61 67 73 26 37 29 29 3d 3d  (1<<(flags&7))==
16280 30 78 34 30 20 29 3b 20 2f 2a 20 52 45 41 44 57  0x40 ); /* READW
16290 52 49 54 45 20 7c 20 43 52 45 41 54 45 20 2a 2f  RITE | CREATE */
162a0 0a 20 20 69 66 28 20 28 28 31 3c 3c 28 66 6c 61  .  if( ((1<<(fla
162b0 67 73 26 37 29 29 20 26 20 30 78 34 36 29 3d 3d  gs&7)) & 0x46)==
162c0 30 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  0 ){.    return 
162d0 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b  SQLITE_MISUSE_BK
162e0 50 54 3b 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 36  PT;  /* IMP: R-6
162f0 35 34 39 37 2d 34 34 35 39 34 20 2a 2f 0a 20 20  5497-44594 */.  
16300 7d 0a 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  }..  if( sqlite3
16310 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 62 43 6f  GlobalConfig.bCo
16320 72 65 4d 75 74 65 78 3d 3d 30 20 29 7b 0a 20 20  reMutex==0 ){.  
16330 20 20 69 73 54 68 72 65 61 64 73 61 66 65 20 3d    isThreadsafe =
16340 20 30 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20   0;.  }else if( 
16350 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 4f  flags & SQLITE_O
16360 50 45 4e 5f 4e 4f 4d 55 54 45 58 20 29 7b 0a 20  PEN_NOMUTEX ){. 
16370 20 20 20 69 73 54 68 72 65 61 64 73 61 66 65 20     isThreadsafe 
16380 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  = 0;.  }else if(
16390 20 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f   flags & SQLITE_
163a0 4f 50 45 4e 5f 46 55 4c 4c 4d 55 54 45 58 20 29  OPEN_FULLMUTEX )
163b0 7b 0a 20 20 20 20 69 73 54 68 72 65 61 64 73 61  {.    isThreadsa
163c0 66 65 20 3d 20 31 3b 0a 20 20 7d 65 6c 73 65 7b  fe = 1;.  }else{
163d0 0a 20 20 20 20 69 73 54 68 72 65 61 64 73 61 66  .    isThreadsaf
163e0 65 20 3d 20 73 71 6c 69 74 65 33 47 6c 6f 62 61  e = sqlite3Globa
163f0 6c 43 6f 6e 66 69 67 2e 62 46 75 6c 6c 4d 75 74  lConfig.bFullMut
16400 65 78 3b 0a 20 20 7d 0a 20 20 69 66 28 20 66 6c  ex;.  }.  if( fl
16410 61 67 73 20 26 20 53 51 4c 49 54 45 5f 4f 50 45  ags & SQLITE_OPE
16420 4e 5f 50 52 49 56 41 54 45 43 41 43 48 45 20 29  N_PRIVATECACHE )
16430 7b 0a 20 20 20 20 66 6c 61 67 73 20 26 3d 20 7e  {.    flags &= ~
16440 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 53 48 41 52  SQLITE_OPEN_SHAR
16450 45 44 43 41 43 48 45 3b 0a 20 20 7d 65 6c 73 65  EDCACHE;.  }else
16460 20 69 66 28 20 73 71 6c 69 74 65 33 47 6c 6f 62   if( sqlite3Glob
16470 61 6c 43 6f 6e 66 69 67 2e 73 68 61 72 65 64 43  alConfig.sharedC
16480 61 63 68 65 45 6e 61 62 6c 65 64 20 29 7b 0a 20  acheEnabled ){. 
16490 20 20 20 66 6c 61 67 73 20 7c 3d 20 53 51 4c 49     flags |= SQLI
164a0 54 45 5f 4f 50 45 4e 5f 53 48 41 52 45 44 43 41  TE_OPEN_SHAREDCA
164b0 43 48 45 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 52  CHE;.  }..  /* R
164c0 65 6d 6f 76 65 20 68 61 72 6d 66 75 6c 20 62 69  emove harmful bi
164d0 74 73 20 66 72 6f 6d 20 74 68 65 20 66 6c 61 67  ts from the flag
164e0 73 20 70 61 72 61 6d 65 74 65 72 0a 20 20 2a 2a  s parameter.  **
164f0 0a 20 20 2a 2a 20 54 68 65 20 53 51 4c 49 54 45  .  ** The SQLITE
16500 5f 4f 50 45 4e 5f 4e 4f 4d 55 54 45 58 20 61 6e  _OPEN_NOMUTEX an
16510 64 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 46 55  d SQLITE_OPEN_FU
16520 4c 4c 4d 55 54 45 58 20 66 6c 61 67 73 20 77 65  LLMUTEX flags we
16530 72 65 0a 20 20 2a 2a 20 64 65 61 6c 74 20 77 69  re.  ** dealt wi
16540 74 68 20 69 6e 20 74 68 65 20 70 72 65 76 69 6f  th in the previo
16550 75 73 20 63 6f 64 65 20 62 6c 6f 63 6b 2e 20 20  us code block.  
16560 42 65 73 69 64 65 73 20 74 68 65 73 65 2c 20 74  Besides these, t
16570 68 65 20 6f 6e 6c 79 0a 20 20 2a 2a 20 76 61 6c  he only.  ** val
16580 69 64 20 69 6e 70 75 74 20 66 6c 61 67 73 20 66  id input flags f
16590 6f 72 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 5f  or sqlite3_open_
165a0 76 32 28 29 20 61 72 65 20 53 51 4c 49 54 45 5f  v2() are SQLITE_
165b0 4f 50 45 4e 5f 52 45 41 44 4f 4e 4c 59 2c 0a 20  OPEN_READONLY,. 
165c0 20 2a 2a 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f   ** SQLITE_OPEN_
165d0 52 45 41 44 57 52 49 54 45 2c 20 53 51 4c 49 54  READWRITE, SQLIT
165e0 45 5f 4f 50 45 4e 5f 43 52 45 41 54 45 2c 20 53  E_OPEN_CREATE, S
165f0 51 4c 49 54 45 5f 4f 50 45 4e 5f 53 48 41 52 45  QLITE_OPEN_SHARE
16600 44 43 41 43 48 45 2c 0a 20 20 2a 2a 20 53 51 4c  DCACHE,.  ** SQL
16610 49 54 45 5f 4f 50 45 4e 5f 50 52 49 56 41 54 45  ITE_OPEN_PRIVATE
16620 43 41 43 48 45 2c 20 61 6e 64 20 73 6f 6d 65 20  CACHE, and some 
16630 72 65 73 65 72 76 65 64 20 62 69 74 73 2e 20 20  reserved bits.  
16640 53 69 6c 65 6e 74 6c 79 20 6d 61 73 6b 0a 20 20  Silently mask.  
16650 2a 2a 20 6f 66 66 20 61 6c 6c 20 6f 74 68 65 72  ** off all other
16660 20 66 6c 61 67 73 2e 0a 20 20 2a 2f 0a 20 20 66   flags..  */.  f
16670 6c 61 67 73 20 26 3d 20 20 7e 28 20 53 51 4c 49  lags &=  ~( SQLI
16680 54 45 5f 4f 50 45 4e 5f 44 45 4c 45 54 45 4f 4e  TE_OPEN_DELETEON
16690 43 4c 4f 53 45 20 7c 0a 20 20 20 20 20 20 20 20  CLOSE |.        
166a0 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50         SQLITE_OP
166b0 45 4e 5f 45 58 43 4c 55 53 49 56 45 20 7c 0a 20  EN_EXCLUSIVE |. 
166c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
166d0 4c 49 54 45 5f 4f 50 45 4e 5f 4d 41 49 4e 5f 44  LITE_OPEN_MAIN_D
166e0 42 20 7c 0a 20 20 20 20 20 20 20 20 20 20 20 20  B |.            
166f0 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 54     SQLITE_OPEN_T
16700 45 4d 50 5f 44 42 20 7c 20 0a 20 20 20 20 20 20  EMP_DB | .      
16710 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f           SQLITE_
16720 4f 50 45 4e 5f 54 52 41 4e 53 49 45 4e 54 5f 44  OPEN_TRANSIENT_D
16730 42 20 7c 20 0a 20 20 20 20 20 20 20 20 20 20 20  B | .           
16740 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f      SQLITE_OPEN_
16750 4d 41 49 4e 5f 4a 4f 55 52 4e 41 4c 20 7c 20 0a  MAIN_JOURNAL | .
16760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
16770 51 4c 49 54 45 5f 4f 50 45 4e 5f 54 45 4d 50 5f  QLITE_OPEN_TEMP_
16780 4a 4f 55 52 4e 41 4c 20 7c 20 0a 20 20 20 20 20  JOURNAL | .     
16790 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45            SQLITE
167a0 5f 4f 50 45 4e 5f 53 55 42 4a 4f 55 52 4e 41 4c  _OPEN_SUBJOURNAL
167b0 20 7c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20   | .            
167c0 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 4d     SQLITE_OPEN_M
167d0 41 53 54 45 52 5f 4a 4f 55 52 4e 41 4c 20 7c 0a  ASTER_JOURNAL |.
167e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
167f0 51 4c 49 54 45 5f 4f 50 45 4e 5f 4e 4f 4d 55 54  QLITE_OPEN_NOMUT
16800 45 58 20 7c 0a 20 20 20 20 20 20 20 20 20 20 20  EX |.           
16810 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f      SQLITE_OPEN_
16820 46 55 4c 4c 4d 55 54 45 58 20 7c 0a 20 20 20 20  FULLMUTEX |.    
16830 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54             SQLIT
16840 45 5f 4f 50 45 4e 5f 57 41 4c 0a 20 20 20 20 20  E_OPEN_WAL.     
16850 20 20 20 20 20 20 20 20 29 3b 0a 0a 20 20 2f 2a          );..  /*
16860 20 41 6c 6c 6f 63 61 74 65 20 74 68 65 20 73 71   Allocate the sq
16870 6c 69 74 65 20 64 61 74 61 20 73 74 72 75 63 74  lite data struct
16880 75 72 65 20 2a 2f 0a 20 20 64 62 20 3d 20 73 71  ure */.  db = sq
16890 6c 69 74 65 33 4d 61 6c 6c 6f 63 5a 65 72 6f 28  lite3MallocZero(
168a0 20 73 69 7a 65 6f 66 28 73 71 6c 69 74 65 33 29   sizeof(sqlite3)
168b0 20 29 3b 0a 20 20 69 66 28 20 64 62 3d 3d 30 20   );.  if( db==0 
168c0 29 20 67 6f 74 6f 20 6f 70 65 6e 64 62 5f 6f 75  ) goto opendb_ou
168d0 74 3b 0a 20 20 69 66 28 20 69 73 54 68 72 65 61  t;.  if( isThrea
168e0 64 73 61 66 65 20 29 7b 0a 20 20 20 20 64 62 2d  dsafe ){.    db-
168f0 3e 6d 75 74 65 78 20 3d 20 73 71 6c 69 74 65 33  >mutex = sqlite3
16900 4d 75 74 65 78 41 6c 6c 6f 63 28 53 51 4c 49 54  MutexAlloc(SQLIT
16910 45 5f 4d 55 54 45 58 5f 52 45 43 55 52 53 49 56  E_MUTEX_RECURSIV
16920 45 29 3b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e  E);.    if( db->
16930 6d 75 74 65 78 3d 3d 30 20 29 7b 0a 20 20 20 20  mutex==0 ){.    
16940 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 64    sqlite3_free(d
16950 62 29 3b 0a 20 20 20 20 20 20 64 62 20 3d 20 30  b);.      db = 0
16960 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 65  ;.      goto ope
16970 6e 64 62 5f 6f 75 74 3b 0a 20 20 20 20 7d 0a 20  ndb_out;.    }. 
16980 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74   }.  sqlite3_mut
16990 65 78 5f 65 6e 74 65 72 28 64 62 2d 3e 6d 75 74  ex_enter(db->mut
169a0 65 78 29 3b 0a 20 20 64 62 2d 3e 65 72 72 4d 61  ex);.  db->errMa
169b0 73 6b 20 3d 20 30 78 66 66 3b 0a 20 20 64 62 2d  sk = 0xff;.  db-
169c0 3e 6e 44 62 20 3d 20 32 3b 0a 20 20 64 62 2d 3e  >nDb = 2;.  db->
169d0 6d 61 67 69 63 20 3d 20 53 51 4c 49 54 45 5f 4d  magic = SQLITE_M
169e0 41 47 49 43 5f 42 55 53 59 3b 0a 20 20 64 62 2d  AGIC_BUSY;.  db-
169f0 3e 61 44 62 20 3d 20 64 62 2d 3e 61 44 62 53 74  >aDb = db->aDbSt
16a00 61 74 69 63 3b 0a 0a 20 20 61 73 73 65 72 74 28  atic;..  assert(
16a10 20 73 69 7a 65 6f 66 28 64 62 2d 3e 61 4c 69 6d   sizeof(db->aLim
16a20 69 74 29 3d 3d 73 69 7a 65 6f 66 28 61 48 61 72  it)==sizeof(aHar
16a30 64 4c 69 6d 69 74 29 20 29 3b 0a 20 20 6d 65 6d  dLimit) );.  mem
16a40 63 70 79 28 64 62 2d 3e 61 4c 69 6d 69 74 2c 20  cpy(db->aLimit, 
16a50 61 48 61 72 64 4c 69 6d 69 74 2c 20 73 69 7a 65  aHardLimit, size
16a60 6f 66 28 64 62 2d 3e 61 4c 69 6d 69 74 29 29 3b  of(db->aLimit));
16a70 0a 20 20 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51  .  db->aLimit[SQ
16a80 4c 49 54 45 5f 4c 49 4d 49 54 5f 57 4f 52 4b 45  LITE_LIMIT_WORKE
16a90 52 5f 54 48 52 45 41 44 53 5d 20 3d 20 53 51 4c  R_THREADS] = SQL
16aa0 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b  ITE_DEFAULT_WORK
16ab0 45 52 5f 54 48 52 45 41 44 53 3b 0a 20 20 64 62  ER_THREADS;.  db
16ac0 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 31  ->autoCommit = 1
16ad0 3b 0a 20 20 64 62 2d 3e 6e 65 78 74 41 75 74 6f  ;.  db->nextAuto
16ae0 76 61 63 20 3d 20 2d 31 3b 0a 20 20 64 62 2d 3e  vac = -1;.  db->
16af0 73 7a 4d 6d 61 70 20 3d 20 73 71 6c 69 74 65 33  szMmap = sqlite3
16b00 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 73 7a 4d  GlobalConfig.szM
16b10 6d 61 70 3b 0a 20 20 64 62 2d 3e 6e 65 78 74 50  map;.  db->nextP
16b20 61 67 65 73 69 7a 65 20 3d 20 30 3b 0a 20 20 64  agesize = 0;.  d
16b30 62 2d 3e 6e 4d 61 78 53 6f 72 74 65 72 4d 6d 61  b->nMaxSorterMma
16b40 70 20 3d 20 30 78 37 46 46 46 46 46 46 46 3b 0a  p = 0x7FFFFFFF;.
16b50 20 20 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 53    db->flags |= S
16b60 51 4c 49 54 45 5f 53 68 6f 72 74 43 6f 6c 4e 61  QLITE_ShortColNa
16b70 6d 65 73 20 7c 20 53 51 4c 49 54 45 5f 45 6e 61  mes | SQLITE_Ena
16b80 62 6c 65 54 72 69 67 67 65 72 20 7c 20 53 51 4c  bleTrigger | SQL
16b90 49 54 45 5f 43 61 63 68 65 53 70 69 6c 6c 0a 23  ITE_CacheSpill.#
16ba0 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
16bb0 54 45 5f 44 45 46 41 55 4c 54 5f 41 55 54 4f 4d  TE_DEFAULT_AUTOM
16bc0 41 54 49 43 5f 49 4e 44 45 58 29 20 7c 7c 20 53  ATIC_INDEX) || S
16bd0 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 41 55  QLITE_DEFAULT_AU
16be0 54 4f 4d 41 54 49 43 5f 49 4e 44 45 58 0a 20 20  TOMATIC_INDEX.  
16bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7c                 |
16c00 20 53 51 4c 49 54 45 5f 41 75 74 6f 49 6e 64 65   SQLITE_AutoInde
16c10 78 0a 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c  x.#endif.#if SQL
16c20 49 54 45 5f 44 45 46 41 55 4c 54 5f 43 4b 50 54  ITE_DEFAULT_CKPT
16c30 46 55 4c 4c 46 53 59 4e 43 0a 20 20 20 20 20 20  FULLFSYNC.      
16c40 20 20 20 20 20 20 20 20 20 20 20 7c 20 53 51 4c             | SQL
16c50 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46 53 79 6e  ITE_CkptFullFSyn
16c60 63 0a 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c  c.#endif.#if SQL
16c70 49 54 45 5f 44 45 46 41 55 4c 54 5f 46 49 4c 45  ITE_DEFAULT_FILE
16c80 5f 46 4f 52 4d 41 54 3c 34 0a 20 20 20 20 20 20  _FORMAT<4.      
16c90 20 20 20 20 20 20 20 20 20 20 20 7c 20 53 51 4c             | SQL
16ca0 49 54 45 5f 4c 65 67 61 63 79 46 69 6c 65 46 6d  ITE_LegacyFileFm
16cb0 74 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20  t.#endif.#ifdef 
16cc0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f  SQLITE_ENABLE_LO
16cd0 41 44 5f 45 58 54 45 4e 53 49 4f 4e 0a 20 20 20  AD_EXTENSION.   
16ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7c 20                | 
16cf0 53 51 4c 49 54 45 5f 4c 6f 61 64 45 78 74 65 6e  SQLITE_LoadExten
16d00 73 69 6f 6e 0a 23 65 6e 64 69 66 0a 23 69 66 20  sion.#endif.#if 
16d10 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 52  SQLITE_DEFAULT_R
16d20 45 43 55 52 53 49 56 45 5f 54 52 49 47 47 45 52  ECURSIVE_TRIGGER
16d30 53 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  S.              
16d40 20 20 20 7c 20 53 51 4c 49 54 45 5f 52 65 63 54     | SQLITE_RecT
16d50 72 69 67 67 65 72 73 0a 23 65 6e 64 69 66 0a 23  riggers.#endif.#
16d60 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
16d70 45 5f 44 45 46 41 55 4c 54 5f 46 4f 52 45 49 47  E_DEFAULT_FOREIG
16d80 4e 5f 4b 45 59 53 29 20 26 26 20 53 51 4c 49 54  N_KEYS) && SQLIT
16d90 45 5f 44 45 46 41 55 4c 54 5f 46 4f 52 45 49 47  E_DEFAULT_FOREIG
16da0 4e 5f 4b 45 59 53 0a 20 20 20 20 20 20 20 20 20  N_KEYS.         
16db0 20 20 20 20 20 20 20 20 7c 20 53 51 4c 49 54 45          | SQLITE
16dc0 5f 46 6f 72 65 69 67 6e 4b 65 79 73 0a 23 65 6e  _ForeignKeys.#en
16dd0 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28  dif.#if defined(
16de0 53 51 4c 49 54 45 5f 52 45 56 45 52 53 45 5f 55  SQLITE_REVERSE_U
16df0 4e 4f 52 44 45 52 45 44 5f 53 45 4c 45 43 54 53  NORDERED_SELECTS
16e00 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ).              
16e10 20 20 20 7c 20 53 51 4c 49 54 45 5f 52 65 76 65     | SQLITE_Reve
16e20 72 73 65 4f 72 64 65 72 0a 23 65 6e 64 69 66 0a  rseOrder.#endif.
16e30 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
16e40 54 45 5f 45 4e 41 42 4c 45 5f 4f 56 45 52 53 49  TE_ENABLE_OVERSI
16e50 5a 45 5f 43 45 4c 4c 5f 43 48 45 43 4b 29 0a 20  ZE_CELL_CHECK). 
16e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e70 7c 20 53 51 4c 49 54 45 5f 43 65 6c 6c 53 69 7a  | SQLITE_CellSiz
16e80 65 43 6b 0a 23 65 6e 64 69 66 0a 20 20 20 20 20  eCk.#endif.     
16e90 20 3b 0a 20 20 73 71 6c 69 74 65 33 48 61 73 68   ;.  sqlite3Hash
16ea0 49 6e 69 74 28 26 64 62 2d 3e 61 43 6f 6c 6c 53  Init(&db->aCollS
16eb0 65 71 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  eq);.#ifndef SQL
16ec0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
16ed0 54 41 42 4c 45 0a 20 20 73 71 6c 69 74 65 33 48  TABLE.  sqlite3H
16ee0 61 73 68 49 6e 69 74 28 26 64 62 2d 3e 61 4d 6f  ashInit(&db->aMo
16ef0 64 75 6c 65 29 3b 0a 23 65 6e 64 69 66 0a 0a 20  dule);.#endif.. 
16f00 20 2f 2a 20 41 64 64 20 74 68 65 20 64 65 66 61   /* Add the defa
16f10 75 6c 74 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  ult collation se
16f20 71 75 65 6e 63 65 20 42 49 4e 41 52 59 2e 20 42  quence BINARY. B
16f30 49 4e 41 52 59 20 77 6f 72 6b 73 20 66 6f 72 20  INARY works for 
16f40 62 6f 74 68 20 55 54 46 2d 38 0a 20 20 2a 2a 20  both UTF-8.  ** 
16f50 61 6e 64 20 55 54 46 2d 31 36 2c 20 73 6f 20 61  and UTF-16, so a
16f60 64 64 20 61 20 76 65 72 73 69 6f 6e 20 66 6f 72  dd a version for
16f70 20 65 61 63 68 20 74 6f 20 61 76 6f 69 64 20 61   each to avoid a
16f80 6e 79 20 75 6e 6e 65 63 65 73 73 61 72 79 0a 20  ny unnecessary. 
16f90 20 2a 2a 20 63 6f 6e 76 65 72 73 69 6f 6e 73 2e   ** conversions.
16fa0 20 54 68 65 20 6f 6e 6c 79 20 65 72 72 6f 72 20   The only error 
16fb0 74 68 61 74 20 63 61 6e 20 6f 63 63 75 72 20 68  that can occur h
16fc0 65 72 65 20 69 73 20 61 20 6d 61 6c 6c 6f 63 28  ere is a malloc(
16fd0 29 20 66 61 69 6c 75 72 65 2e 0a 20 20 2a 2a 0a  ) failure..  **.
16fe0 20 20 2a 2a 20 45 56 49 44 45 4e 43 45 2d 4f 46    ** EVIDENCE-OF
16ff0 3a 20 52 2d 35 32 37 38 36 2d 34 34 38 37 38 20  : R-52786-44878 
17000 53 51 4c 69 74 65 20 64 65 66 69 6e 65 73 20 74  SQLite defines t
17010 68 72 65 65 20 62 75 69 6c 74 2d 69 6e 20 63 6f  hree built-in co
17020 6c 6c 61 74 69 6e 67 0a 20 20 2a 2a 20 66 75 6e  llating.  ** fun
17030 63 74 69 6f 6e 73 3a 0a 20 20 2a 2f 0a 20 20 63  ctions:.  */.  c
17040 72 65 61 74 65 43 6f 6c 6c 61 74 69 6f 6e 28 64  reateCollation(d
17050 62 2c 20 22 42 49 4e 41 52 59 22 2c 20 53 51 4c  b, "BINARY", SQL
17060 49 54 45 5f 55 54 46 38 2c 20 30 2c 20 62 69 6e  ITE_UTF8, 0, bin
17070 43 6f 6c 6c 46 75 6e 63 2c 20 30 29 3b 0a 20 20  CollFunc, 0);.  
17080 63 72 65 61 74 65 43 6f 6c 6c 61 74 69 6f 6e 28  createCollation(
17090 64 62 2c 20 22 42 49 4e 41 52 59 22 2c 20 53 51  db, "BINARY", SQ
170a0 4c 49 54 45 5f 55 54 46 31 36 42 45 2c 20 30 2c  LITE_UTF16BE, 0,
170b0 20 62 69 6e 43 6f 6c 6c 46 75 6e 63 2c 20 30 29   binCollFunc, 0)
170c0 3b 0a 20 20 63 72 65 61 74 65 43 6f 6c 6c 61 74  ;.  createCollat
170d0 69 6f 6e 28 64 62 2c 20 22 42 49 4e 41 52 59 22  ion(db, "BINARY"
170e0 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45  , SQLITE_UTF16LE
170f0 2c 20 30 2c 20 62 69 6e 43 6f 6c 6c 46 75 6e 63  , 0, binCollFunc
17100 2c 20 30 29 3b 0a 20 20 63 72 65 61 74 65 43 6f  , 0);.  createCo
17110 6c 6c 61 74 69 6f 6e 28 64 62 2c 20 22 4e 4f 43  llation(db, "NOC
17120 41 53 45 22 2c 20 53 51 4c 49 54 45 5f 55 54 46  ASE", SQLITE_UTF
17130 38 2c 20 30 2c 20 6e 6f 63 61 73 65 43 6f 6c 6c  8, 0, nocaseColl
17140 61 74 69 6e 67 46 75 6e 63 2c 20 30 29 3b 0a 20  atingFunc, 0);. 
17150 20 63 72 65 61 74 65 43 6f 6c 6c 61 74 69 6f 6e   createCollation
17160 28 64 62 2c 20 22 52 54 52 49 4d 22 2c 20 53 51  (db, "RTRIM", SQ
17170 4c 49 54 45 5f 55 54 46 38 2c 20 28 76 6f 69 64  LITE_UTF8, (void
17180 2a 29 31 2c 20 62 69 6e 43 6f 6c 6c 46 75 6e 63  *)1, binCollFunc
17190 2c 20 30 29 3b 0a 20 20 69 66 28 20 64 62 2d 3e  , 0);.  if( db->
171a0 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 7b 0a  mallocFailed ){.
171b0 20 20 20 20 67 6f 74 6f 20 6f 70 65 6e 64 62 5f      goto opendb_
171c0 6f 75 74 3b 0a 20 20 7d 0a 20 20 2f 2a 20 45 56  out;.  }.  /* EV
171d0 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 30 38 33  IDENCE-OF: R-083
171e0 30 38 2d 31 37 32 32 34 20 54 68 65 20 64 65 66  08-17224 The def
171f0 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6e 67 20 66  ault collating f
17200 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6c 6c 0a  unction for all.
17210 20 20 2a 2a 20 73 74 72 69 6e 67 73 20 69 73 20    ** strings is 
17220 42 49 4e 41 52 59 2e 20 0a 20 20 2a 2f 0a 20 20  BINARY. .  */.  
17230 64 62 2d 3e 70 44 66 6c 74 43 6f 6c 6c 20 3d 20  db->pDfltColl = 
17240 73 71 6c 69 74 65 33 46 69 6e 64 43 6f 6c 6c 53  sqlite3FindCollS
17250 65 71 28 64 62 2c 20 53 51 4c 49 54 45 5f 55 54  eq(db, SQLITE_UT
17260 46 38 2c 20 22 42 49 4e 41 52 59 22 2c 20 30 29  F8, "BINARY", 0)
17270 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e  ;.  assert( db->
17280 70 44 66 6c 74 43 6f 6c 6c 21 3d 30 20 29 3b 0a  pDfltColl!=0 );.
17290 0a 20 20 2f 2a 20 50 61 72 73 65 20 74 68 65 20  .  /* Parse the 
172a0 66 69 6c 65 6e 61 6d 65 2f 55 52 49 20 61 72 67  filename/URI arg
172b0 75 6d 65 6e 74 2e 20 2a 2f 0a 20 20 64 62 2d 3e  ument. */.  db->
172c0 6f 70 65 6e 46 6c 61 67 73 20 3d 20 66 6c 61 67  openFlags = flag
172d0 73 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  s;.  rc = sqlite
172e0 33 50 61 72 73 65 55 72 69 28 7a 56 66 73 2c 20  3ParseUri(zVfs, 
172f0 7a 46 69 6c 65 6e 61 6d 65 2c 20 26 66 6c 61 67  zFilename, &flag
17300 73 2c 20 26 64 62 2d 3e 70 56 66 73 2c 20 26 7a  s, &db->pVfs, &z
17310 4f 70 65 6e 2c 20 26 7a 45 72 72 4d 73 67 29 3b  Open, &zErrMsg);
17320 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54  .  if( rc!=SQLIT
17330 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 69 66 28 20  E_OK ){.    if( 
17340 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  rc==SQLITE_NOMEM
17350 20 29 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69   ) db->mallocFai
17360 6c 65 64 20 3d 20 31 3b 0a 20 20 20 20 73 71 6c  led = 1;.    sql
17370 69 74 65 33 45 72 72 6f 72 57 69 74 68 4d 73 67  ite3ErrorWithMsg
17380 28 64 62 2c 20 72 63 2c 20 7a 45 72 72 4d 73 67  (db, rc, zErrMsg
17390 20 3f 20 22 25 73 22 20 3a 20 30 2c 20 7a 45 72   ? "%s" : 0, zEr
173a0 72 4d 73 67 29 3b 0a 20 20 20 20 73 71 6c 69 74  rMsg);.    sqlit
173b0 65 33 5f 66 72 65 65 28 7a 45 72 72 4d 73 67 29  e3_free(zErrMsg)
173c0 3b 0a 20 20 20 20 67 6f 74 6f 20 6f 70 65 6e 64  ;.    goto opend
173d0 62 5f 6f 75 74 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  b_out;.  }..  /*
173e0 20 4f 70 65 6e 20 74 68 65 20 62 61 63 6b 65 6e   Open the backen
173f0 64 20 64 61 74 61 62 61 73 65 20 64 72 69 76 65  d database drive
17400 72 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69  r */.  rc = sqli
17410 74 65 33 42 74 72 65 65 4f 70 65 6e 28 64 62 2d  te3BtreeOpen(db-
17420 3e 70 56 66 73 2c 20 7a 4f 70 65 6e 2c 20 64 62  >pVfs, zOpen, db
17430 2c 20 26 64 62 2d 3e 61 44 62 5b 30 5d 2e 70 42  , &db->aDb[0].pB
17440 74 2c 20 30 2c 0a 20 20 20 20 20 20 20 20 20 20  t, 0,.          
17450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6c                fl
17460 61 67 73 20 7c 20 53 51 4c 49 54 45 5f 4f 50 45  ags | SQLITE_OPE
17470 4e 5f 4d 41 49 4e 5f 44 42 29 3b 0a 20 20 69 66  N_MAIN_DB);.  if
17480 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
17490 29 7b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53  ){.    if( rc==S
174a0 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45  QLITE_IOERR_NOME
174b0 4d 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  M ){.      rc = 
174c0 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20  SQLITE_NOMEM;.  
174d0 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 45    }.    sqlite3E
174e0 72 72 6f 72 28 64 62 2c 20 72 63 29 3b 0a 20 20  rror(db, rc);.  
174f0 20 20 67 6f 74 6f 20 6f 70 65 6e 64 62 5f 6f 75    goto opendb_ou
17500 74 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33  t;.  }.  sqlite3
17510 42 74 72 65 65 45 6e 74 65 72 28 64 62 2d 3e 61  BtreeEnter(db->a
17520 44 62 5b 30 5d 2e 70 42 74 29 3b 0a 20 20 64 62  Db[0].pBt);.  db
17530 2d 3e 61 44 62 5b 30 5d 2e 70 53 63 68 65 6d 61  ->aDb[0].pSchema
17540 20 3d 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61   = sqlite3Schema
17550 47 65 74 28 64 62 2c 20 64 62 2d 3e 61 44 62 5b  Get(db, db->aDb[
17560 30 5d 2e 70 42 74 29 3b 0a 20 20 69 66 28 20 21  0].pBt);.  if( !
17570 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
17580 20 29 20 45 4e 43 28 64 62 29 20 3d 20 53 43 48   ) ENC(db) = SCH
17590 45 4d 41 5f 45 4e 43 28 64 62 29 3b 0a 20 20 73  EMA_ENC(db);.  s
175a0 71 6c 69 74 65 33 42 74 72 65 65 4c 65 61 76 65  qlite3BtreeLeave
175b0 28 64 62 2d 3e 61 44 62 5b 30 5d 2e 70 42 74 29  (db->aDb[0].pBt)
175c0 3b 0a 20 20 64 62 2d 3e 61 44 62 5b 31 5d 2e 70  ;.  db->aDb[1].p
175d0 53 63 68 65 6d 61 20 3d 20 73 71 6c 69 74 65 33  Schema = sqlite3
175e0 53 63 68 65 6d 61 47 65 74 28 64 62 2c 20 30 29  SchemaGet(db, 0)
175f0 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 64 65 66 61  ;..  /* The defa
17600 75 6c 74 20 73 61 66 65 74 79 5f 6c 65 76 65 6c  ult safety_level
17610 20 66 6f 72 20 74 68 65 20 6d 61 69 6e 20 64 61   for the main da
17620 74 61 62 61 73 65 20 69 73 20 27 66 75 6c 6c 27  tabase is 'full'
17630 3b 20 66 6f 72 20 74 68 65 20 74 65 6d 70 0a 20  ; for the temp. 
17640 20 2a 2a 20 64 61 74 61 62 61 73 65 20 69 74 20   ** database it 
17650 69 73 20 27 4e 4f 4e 45 27 2e 20 54 68 69 73 20  is 'NONE'. This 
17660 6d 61 74 63 68 65 73 20 74 68 65 20 70 61 67 65  matches the page
17670 72 20 6c 61 79 65 72 20 64 65 66 61 75 6c 74 73  r layer defaults
17680 2e 20 20 0a 20 20 2a 2f 0a 20 20 64 62 2d 3e 61  .  .  */.  db->a
17690 44 62 5b 30 5d 2e 7a 4e 61 6d 65 20 3d 20 22 6d  Db[0].zName = "m
176a0 61 69 6e 22 3b 0a 20 20 64 62 2d 3e 61 44 62 5b  ain";.  db->aDb[
176b0 30 5d 2e 73 61 66 65 74 79 5f 6c 65 76 65 6c 20  0].safety_level 
176c0 3d 20 33 3b 0a 20 20 64 62 2d 3e 61 44 62 5b 31  = 3;.  db->aDb[1
176d0 5d 2e 7a 4e 61 6d 65 20 3d 20 22 74 65 6d 70 22  ].zName = "temp"
176e0 3b 0a 20 20 64 62 2d 3e 61 44 62 5b 31 5d 2e 73  ;.  db->aDb[1].s
176f0 61 66 65 74 79 5f 6c 65 76 65 6c 20 3d 20 31 3b  afety_level = 1;
17700 0a 0a 20 20 64 62 2d 3e 6d 61 67 69 63 20 3d 20  ..  db->magic = 
17710 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f 50 45  SQLITE_MAGIC_OPE
17720 4e 3b 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c  N;.  if( db->mal
17730 6c 6f 63 46 61 69 6c 65 64 20 29 7b 0a 20 20 20  locFailed ){.   
17740 20 67 6f 74 6f 20 6f 70 65 6e 64 62 5f 6f 75 74   goto opendb_out
17750 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 52 65 67 69  ;.  }..  /* Regi
17760 73 74 65 72 20 61 6c 6c 20 62 75 69 6c 74 2d 69  ster all built-i
17770 6e 20 66 75 6e 63 74 69 6f 6e 73 2c 20 62 75 74  n functions, but
17780 20 64 6f 20 6e 6f 74 20 61 74 74 65 6d 70 74 20   do not attempt 
17790 74 6f 20 72 65 61 64 20 74 68 65 0a 20 20 2a 2a  to read the.  **
177a0 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
177b0 20 79 65 74 2e 20 54 68 69 73 20 69 73 20 64 65   yet. This is de
177c0 6c 61 79 65 64 20 75 6e 74 69 6c 20 74 68 65 20  layed until the 
177d0 66 69 72 73 74 20 74 69 6d 65 20 74 68 65 20 64  first time the d
177e0 61 74 61 62 61 73 65 0a 20 20 2a 2a 20 69 73 20  atabase.  ** is 
177f0 61 63 63 65 73 73 65 64 2e 0a 20 20 2a 2f 0a 20  accessed..  */. 
17800 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28 64 62   sqlite3Error(db
17810 2c 20 53 51 4c 49 54 45 5f 4f 4b 29 3b 0a 20 20  , SQLITE_OK);.  
17820 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 42  sqlite3RegisterB
17830 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 28  uiltinFunctions(
17840 64 62 29 3b 0a 0a 20 20 2f 2a 20 4c 6f 61 64 20  db);..  /* Load 
17850 61 75 74 6f 6d 61 74 69 63 20 65 78 74 65 6e 73  automatic extens
17860 69 6f 6e 73 20 2d 20 65 78 74 65 6e 73 69 6f 6e  ions - extension
17870 73 20 74 68 61 74 20 68 61 76 65 20 62 65 65 6e  s that have been
17880 20 72 65 67 69 73 74 65 72 65 64 0a 20 20 2a 2a   registered.  **
17890 20 75 73 69 6e 67 20 74 68 65 20 73 71 6c 69 74   using the sqlit
178a0 65 33 5f 61 75 74 6f 6d 61 74 69 63 5f 65 78 74  e3_automatic_ext
178b0 65 6e 73 69 6f 6e 28 29 20 41 50 49 2e 0a 20 20  ension() API..  
178c0 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  */.  rc = sqlite
178d0 33 5f 65 72 72 63 6f 64 65 28 64 62 29 3b 0a 20  3_errcode(db);. 
178e0 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
178f0 4f 4b 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  OK ){.    sqlite
17900 33 41 75 74 6f 4c 6f 61 64 45 78 74 65 6e 73 69  3AutoLoadExtensi
17910 6f 6e 73 28 64 62 29 3b 0a 20 20 20 20 72 63 20  ons(db);.    rc 
17920 3d 20 73 71 6c 69 74 65 33 5f 65 72 72 63 6f 64  = sqlite3_errcod
17930 65 28 64 62 29 3b 0a 20 20 20 20 69 66 28 20 72  e(db);.    if( r
17940 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
17950 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 65 6e 64        goto opend
17960 62 5f 6f 75 74 3b 0a 20 20 20 20 7d 0a 20 20 7d  b_out;.    }.  }
17970 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
17980 45 4e 41 42 4c 45 5f 46 54 53 31 0a 20 20 69 66  ENABLE_FTS1.  if
17990 28 20 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69  ( !db->mallocFai
179a0 6c 65 64 20 29 7b 0a 20 20 20 20 65 78 74 65 72  led ){.    exter
179b0 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 46 74 73  n int sqlite3Fts
179c0 31 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 29 3b  1Init(sqlite3*);
179d0 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
179e0 33 46 74 73 31 49 6e 69 74 28 64 62 29 3b 0a 20  3Fts1Init(db);. 
179f0 20 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65   }.#endif..#ifde
17a00 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
17a10 46 54 53 32 0a 20 20 69 66 28 20 21 64 62 2d 3e  FTS2.  if( !db->
17a20 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 26 26 20  mallocFailed && 
17a30 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
17a40 0a 20 20 20 20 65 78 74 65 72 6e 20 69 6e 74 20  .    extern int 
17a50 73 71 6c 69 74 65 33 46 74 73 32 49 6e 69 74 28  sqlite3Fts2Init(
17a60 73 71 6c 69 74 65 33 2a 29 3b 0a 20 20 20 20 72  sqlite3*);.    r
17a70 63 20 3d 20 73 71 6c 69 74 65 33 46 74 73 32 49  c = sqlite3Fts2I
17a80 6e 69 74 28 64 62 29 3b 0a 20 20 7d 0a 23 65 6e  nit(db);.  }.#en
17a90 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
17aa0 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 20 2f  TE_ENABLE_FTS3 /
17ab0 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  * automatically 
17ac0 64 65 66 69 6e 65 64 20 62 79 20 53 51 4c 49 54  defined by SQLIT
17ad0 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 20 2a 2f  E_ENABLE_FTS4 */
17ae0 0a 20 20 69 66 28 20 21 64 62 2d 3e 6d 61 6c 6c  .  if( !db->mall
17af0 6f 63 46 61 69 6c 65 64 20 26 26 20 72 63 3d 3d  ocFailed && rc==
17b00 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
17b10 20 72 63 20 3d 20 73 71 6c 69 74 65 33 46 74 73   rc = sqlite3Fts
17b20 33 49 6e 69 74 28 64 62 29 3b 0a 20 20 7d 0a 23  3Init(db);.  }.#
17b30 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
17b40 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 35  LITE_ENABLE_FTS5
17b50 0a 20 20 69 66 28 20 21 64 62 2d 3e 6d 61 6c 6c  .  if( !db->mall
17b60 6f 63 46 61 69 6c 65 64 20 26 26 20 72 63 3d 3d  ocFailed && rc==
17b70 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
17b80 20 72 63 20 3d 20 73 71 6c 69 74 65 33 46 74 73   rc = sqlite3Fts
17b90 35 49 6e 69 74 28 64 62 29 3b 0a 20 20 7d 0a 23  5Init(db);.  }.#
17ba0 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
17bb0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 49 43 55 0a  LITE_ENABLE_ICU.
17bc0 20 20 69 66 28 20 21 64 62 2d 3e 6d 61 6c 6c 6f    if( !db->mallo
17bd0 63 46 61 69 6c 65 64 20 26 26 20 72 63 3d 3d 53  cFailed && rc==S
17be0 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
17bf0 72 63 20 3d 20 73 71 6c 69 74 65 33 49 63 75 49  rc = sqlite3IcuI
17c00 6e 69 74 28 64 62 29 3b 0a 20 20 7d 0a 23 65 6e  nit(db);.  }.#en
17c10 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
17c20 54 45 5f 45 4e 41 42 4c 45 5f 52 54 52 45 45 0a  TE_ENABLE_RTREE.
17c30 20 20 69 66 28 20 21 64 62 2d 3e 6d 61 6c 6c 6f    if( !db->mallo
17c40 63 46 61 69 6c 65 64 20 26 26 20 72 63 3d 3d 53  cFailed && rc==S
17c50 51 4c 49 54 45 5f 4f 4b 29 7b 0a 20 20 20 20 72  QLITE_OK){.    r
17c60 63 20 3d 20 73 71 6c 69 74 65 33 52 74 72 65 65  c = sqlite3Rtree
17c70 49 6e 69 74 28 64 62 29 3b 0a 20 20 7d 0a 23 65  Init(db);.  }.#e
17c80 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
17c90 49 54 45 5f 45 4e 41 42 4c 45 5f 44 42 53 54 41  ITE_ENABLE_DBSTA
17ca0 54 5f 56 54 41 42 0a 20 20 69 66 28 20 21 64 62  T_VTAB.  if( !db
17cb0 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 26  ->mallocFailed &
17cc0 26 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 29  & rc==SQLITE_OK)
17cd0 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
17ce0 65 33 44 62 73 74 61 74 52 65 67 69 73 74 65 72  e3DbstatRegister
17cf0 28 64 62 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  (db);.  }.#endif
17d00 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
17d10 45 4e 41 42 4c 45 5f 4a 53 4f 4e 31 0a 20 20 69  ENABLE_JSON1.  i
17d20 66 28 20 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61  f( !db->mallocFa
17d30 69 6c 65 64 20 26 26 20 72 63 3d 3d 53 51 4c 49  iled && rc==SQLI
17d40 54 45 5f 4f 4b 29 7b 0a 20 20 20 20 72 63 20 3d  TE_OK){.    rc =
17d50 20 73 71 6c 69 74 65 33 4a 73 6f 6e 31 49 6e 69   sqlite3Json1Ini
17d60 74 28 64 62 29 3b 0a 20 20 7d 0a 23 65 6e 64 69  t(db);.  }.#endi
17d70 66 0a 0a 20 20 2f 2a 20 2d 44 53 51 4c 49 54 45  f..  /* -DSQLITE
17d80 5f 44 45 46 41 55 4c 54 5f 4c 4f 43 4b 49 4e 47  _DEFAULT_LOCKING
17d90 5f 4d 4f 44 45 3d 31 20 6d 61 6b 65 73 20 45 58  _MODE=1 makes EX
17da0 43 4c 55 53 49 56 45 20 74 68 65 20 64 65 66 61  CLUSIVE the defa
17db0 75 6c 74 20 6c 6f 63 6b 69 6e 67 0a 20 20 2a 2a  ult locking.  **
17dc0 20 6d 6f 64 65 2e 20 20 2d 44 53 51 4c 49 54 45   mode.  -DSQLITE
17dd0 5f 44 45 46 41 55 4c 54 5f 4c 4f 43 4b 49 4e 47  _DEFAULT_LOCKING
17de0 5f 4d 4f 44 45 3d 30 20 6d 61 6b 65 20 4e 4f 52  _MODE=0 make NOR
17df0 4d 41 4c 20 74 68 65 20 64 65 66 61 75 6c 74 20  MAL the default 
17e00 6c 6f 63 6b 69 6e 67 0a 20 20 2a 2a 20 6d 6f 64  locking.  ** mod
17e10 65 2e 20 20 44 6f 69 6e 67 20 6e 6f 74 68 69 6e  e.  Doing nothin
17e20 67 20 61 74 20 61 6c 6c 20 61 6c 73 6f 20 6d 61  g at all also ma
17e30 6b 65 73 20 4e 4f 52 4d 41 4c 20 74 68 65 20 64  kes NORMAL the d
17e40 65 66 61 75 6c 74 2e 0a 20 20 2a 2f 0a 23 69 66  efault..  */.#if
17e50 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55  def SQLITE_DEFAU
17e60 4c 54 5f 4c 4f 43 4b 49 4e 47 5f 4d 4f 44 45 0a  LT_LOCKING_MODE.
17e70 20 20 64 62 2d 3e 64 66 6c 74 4c 6f 63 6b 4d 6f    db->dfltLockMo
17e80 64 65 20 3d 20 53 51 4c 49 54 45 5f 44 45 46 41  de = SQLITE_DEFA
17e90 55 4c 54 5f 4c 4f 43 4b 49 4e 47 5f 4d 4f 44 45  ULT_LOCKING_MODE
17ea0 3b 0a 20 20 73 71 6c 69 74 65 33 50 61 67 65 72  ;.  sqlite3Pager
17eb0 4c 6f 63 6b 69 6e 67 4d 6f 64 65 28 73 71 6c 69  LockingMode(sqli
17ec0 74 65 33 42 74 72 65 65 50 61 67 65 72 28 64 62  te3BtreePager(db
17ed0 2d 3e 61 44 62 5b 30 5d 2e 70 42 74 29 2c 0a 20  ->aDb[0].pBt),. 
17ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ef0 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f           SQLITE_
17f00 44 45 46 41 55 4c 54 5f 4c 4f 43 4b 49 4e 47 5f  DEFAULT_LOCKING_
17f10 4d 4f 44 45 29 3b 0a 23 65 6e 64 69 66 0a 0a 20  MODE);.#endif.. 
17f20 20 69 66 28 20 72 63 20 29 20 73 71 6c 69 74 65   if( rc ) sqlite
17f30 33 45 72 72 6f 72 28 64 62 2c 20 72 63 29 3b 0a  3Error(db, rc);.
17f40 0a 20 20 2f 2a 20 45 6e 61 62 6c 65 20 74 68 65  .  /* Enable the
17f50 20 6c 6f 6f 6b 61 73 69 64 65 2d 6d 61 6c 6c 6f   lookaside-mallo
17f60 63 20 73 75 62 73 79 73 74 65 6d 20 2a 2f 0a 20  c subsystem */. 
17f70 20 73 65 74 75 70 4c 6f 6f 6b 61 73 69 64 65 28   setupLookaside(
17f80 64 62 2c 20 30 2c 20 73 71 6c 69 74 65 33 47 6c  db, 0, sqlite3Gl
17f90 6f 62 61 6c 43 6f 6e 66 69 67 2e 73 7a 4c 6f 6f  obalConfig.szLoo
17fa0 6b 61 73 69 64 65 2c 0a 20 20 20 20 20 20 20 20  kaside,.        
17fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17fc0 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e  sqlite3GlobalCon
17fd0 66 69 67 2e 6e 4c 6f 6f 6b 61 73 69 64 65 29 3b  fig.nLookaside);
17fe0 0a 0a 20 20 73 71 6c 69 74 65 33 5f 77 61 6c 5f  ..  sqlite3_wal_
17ff0 61 75 74 6f 63 68 65 63 6b 70 6f 69 6e 74 28 64  autocheckpoint(d
18000 62 2c 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  b, SQLITE_DEFAUL
18010 54 5f 57 41 4c 5f 41 55 54 4f 43 48 45 43 4b 50  T_WAL_AUTOCHECKP
18020 4f 49 4e 54 29 3b 0a 0a 6f 70 65 6e 64 62 5f 6f  OINT);..opendb_o
18030 75 74 3a 0a 20 20 73 71 6c 69 74 65 33 5f 66 72  ut:.  sqlite3_fr
18040 65 65 28 7a 4f 70 65 6e 29 3b 0a 20 20 69 66 28  ee(zOpen);.  if(
18050 20 64 62 20 29 7b 0a 20 20 20 20 61 73 73 65 72   db ){.    asser
18060 74 28 20 64 62 2d 3e 6d 75 74 65 78 21 3d 30 20  t( db->mutex!=0 
18070 7c 7c 20 69 73 54 68 72 65 61 64 73 61 66 65 3d  || isThreadsafe=
18080 3d 30 0a 20 20 20 20 20 20 20 20 20 20 20 7c 7c  =0.           ||
18090 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f   sqlite3GlobalCo
180a0 6e 66 69 67 2e 62 46 75 6c 6c 4d 75 74 65 78 3d  nfig.bFullMutex=
180b0 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  =0 );.    sqlite
180c0 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 64 62  3_mutex_leave(db
180d0 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 7d 0a 20 20  ->mutex);.  }.  
180e0 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 65 72 72  rc = sqlite3_err
180f0 63 6f 64 65 28 64 62 29 3b 0a 20 20 61 73 73 65  code(db);.  asse
18100 72 74 28 20 64 62 21 3d 30 20 7c 7c 20 72 63 3d  rt( db!=0 || rc=
18110 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 3b  =SQLITE_NOMEM );
18120 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
18130 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 73  E_NOMEM ){.    s
18140 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28 64 62 29  qlite3_close(db)
18150 3b 0a 20 20 20 20 64 62 20 3d 20 30 3b 0a 20 20  ;.    db = 0;.  
18160 7d 65 6c 73 65 20 69 66 28 20 72 63 21 3d 53 51  }else if( rc!=SQ
18170 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 64  LITE_OK ){.    d
18180 62 2d 3e 6d 61 67 69 63 20 3d 20 53 51 4c 49 54  b->magic = SQLIT
18190 45 5f 4d 41 47 49 43 5f 53 49 43 4b 3b 0a 20 20  E_MAGIC_SICK;.  
181a0 7d 0a 20 20 2a 70 70 44 62 20 3d 20 64 62 3b 0a  }.  *ppDb = db;.
181b0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
181c0 41 42 4c 45 5f 53 51 4c 4c 4f 47 0a 20 20 69 66  ABLE_SQLLOG.  if
181d0 28 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43  ( sqlite3GlobalC
181e0 6f 6e 66 69 67 2e 78 53 71 6c 6c 6f 67 20 29 7b  onfig.xSqllog ){
181f0 0a 20 20 20 20 2f 2a 20 4f 70 65 6e 69 6e 67 20  .    /* Opening 
18200 61 20 64 62 20 68 61 6e 64 6c 65 2e 20 46 6f 75  a db handle. Fou
18210 72 74 68 20 70 61 72 61 6d 65 74 65 72 20 69 73  rth parameter is
18220 20 70 61 73 73 65 64 20 30 2e 20 2a 2f 0a 20 20   passed 0. */.  
18230 20 20 76 6f 69 64 20 2a 70 41 72 67 20 3d 20 73    void *pArg = s
18240 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66  qlite3GlobalConf
18250 69 67 2e 70 53 71 6c 6c 6f 67 41 72 67 3b 0a 20  ig.pSqllogArg;. 
18260 20 20 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c     sqlite3Global
18270 43 6f 6e 66 69 67 2e 78 53 71 6c 6c 6f 67 28 70  Config.xSqllog(p
18280 41 72 67 2c 20 64 62 2c 20 7a 46 69 6c 65 6e 61  Arg, db, zFilena
18290 6d 65 2c 20 30 29 3b 0a 20 20 7d 0a 23 65 6e 64  me, 0);.  }.#end
182a0 69 66 0a 20 20 72 65 74 75 72 6e 20 72 63 20 26  if.  return rc &
182b0 20 30 78 66 66 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20   0xff;.}../*.** 
182c0 4f 70 65 6e 20 61 20 6e 65 77 20 64 61 74 61 62  Open a new datab
182d0 61 73 65 20 68 61 6e 64 6c 65 2e 0a 2a 2f 0a 69  ase handle..*/.i
182e0 6e 74 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 28  nt sqlite3_open(
182f0 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
18300 46 69 6c 65 6e 61 6d 65 2c 20 0a 20 20 73 71 6c  Filename, .  sql
18310 69 74 65 33 20 2a 2a 70 70 44 62 20 0a 29 7b 0a  ite3 **ppDb .){.
18320 20 20 72 65 74 75 72 6e 20 6f 70 65 6e 44 61 74    return openDat
18330 61 62 61 73 65 28 7a 46 69 6c 65 6e 61 6d 65 2c  abase(zFilename,
18340 20 70 70 44 62 2c 0a 20 20 20 20 20 20 20 20 20   ppDb,.         
18350 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
18360 49 54 45 5f 4f 50 45 4e 5f 52 45 41 44 57 52 49  ITE_OPEN_READWRI
18370 54 45 20 7c 20 53 51 4c 49 54 45 5f 4f 50 45 4e  TE | SQLITE_OPEN
18380 5f 43 52 45 41 54 45 2c 20 30 29 3b 0a 7d 0a 69  _CREATE, 0);.}.i
18390 6e 74 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 5f  nt sqlite3_open_
183a0 76 32 28 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  v2(.  const char
183b0 20 2a 66 69 6c 65 6e 61 6d 65 2c 20 20 20 2f 2a   *filename,   /*
183c0 20 44 61 74 61 62 61 73 65 20 66 69 6c 65 6e 61   Database filena
183d0 6d 65 20 28 55 54 46 2d 38 29 20 2a 2f 0a 20 20  me (UTF-8) */.  
183e0 73 71 6c 69 74 65 33 20 2a 2a 70 70 44 62 2c 20  sqlite3 **ppDb, 
183f0 20 20 20 20 20 20 20 20 2f 2a 20 4f 55 54 3a 20          /* OUT: 
18400 53 51 4c 69 74 65 20 64 62 20 68 61 6e 64 6c 65  SQLite db handle
18410 20 2a 2f 0a 20 20 69 6e 74 20 66 6c 61 67 73 2c   */.  int flags,
18420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
18430 20 46 6c 61 67 73 20 2a 2f 0a 20 20 63 6f 6e 73   Flags */.  cons
18440 74 20 63 68 61 72 20 2a 7a 56 66 73 20 20 20 20  t char *zVfs    
18450 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 56      /* Name of V
18460 46 53 20 6d 6f 64 75 6c 65 20 74 6f 20 75 73 65  FS module to use
18470 20 2a 2f 0a 29 7b 0a 20 20 72 65 74 75 72 6e 20   */.){.  return 
18480 6f 70 65 6e 44 61 74 61 62 61 73 65 28 66 69 6c  openDatabase(fil
18490 65 6e 61 6d 65 2c 20 70 70 44 62 2c 20 28 75 6e  ename, ppDb, (un
184a0 73 69 67 6e 65 64 20 69 6e 74 29 66 6c 61 67 73  signed int)flags
184b0 2c 20 7a 56 66 73 29 3b 0a 7d 0a 0a 23 69 66 6e  , zVfs);.}..#ifn
184c0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
184d0 55 54 46 31 36 0a 2f 2a 0a 2a 2a 20 4f 70 65 6e  UTF16./*.** Open
184e0 20 61 20 6e 65 77 20 64 61 74 61 62 61 73 65 20   a new database 
184f0 68 61 6e 64 6c 65 2e 0a 2a 2f 0a 69 6e 74 20 73  handle..*/.int s
18500 71 6c 69 74 65 33 5f 6f 70 65 6e 31 36 28 0a 20  qlite3_open16(. 
18510 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 46 69   const void *zFi
18520 6c 65 6e 61 6d 65 2c 20 0a 20 20 73 71 6c 69 74  lename, .  sqlit
18530 65 33 20 2a 2a 70 70 44 62 0a 29 7b 0a 20 20 63  e3 **ppDb.){.  c
18540 68 61 72 20 63 6f 6e 73 74 20 2a 7a 46 69 6c 65  har const *zFile
18550 6e 61 6d 65 38 3b 20 20 20 2f 2a 20 7a 46 69 6c  name8;   /* zFil
18560 65 6e 61 6d 65 20 65 6e 63 6f 64 65 64 20 69 6e  ename encoded in
18570 20 55 54 46 2d 38 20 69 6e 73 74 65 61 64 20 6f   UTF-8 instead o
18580 66 20 55 54 46 2d 31 36 20 2a 2f 0a 20 20 73 71  f UTF-16 */.  sq
18590 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61  lite3_value *pVa
185a0 6c 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 23 69  l;.  int rc;..#i
185b0 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
185c0 4c 45 5f 41 50 49 5f 41 52 4d 4f 52 0a 20 20 69  LE_API_ARMOR.  i
185d0 66 28 20 70 70 44 62 3d 3d 30 20 29 20 72 65 74  f( ppDb==0 ) ret
185e0 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53  urn SQLITE_MISUS
185f0 45 5f 42 4b 50 54 3b 0a 23 65 6e 64 69 66 0a 20  E_BKPT;.#endif. 
18600 20 2a 70 70 44 62 20 3d 20 30 3b 0a 23 69 66 6e   *ppDb = 0;.#ifn
18610 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
18620 41 55 54 4f 49 4e 49 54 0a 20 20 72 63 20 3d 20  AUTOINIT.  rc = 
18630 73 71 6c 69 74 65 33 5f 69 6e 69 74 69 61 6c 69  sqlite3_initiali
18640 7a 65 28 29 3b 0a 20 20 69 66 28 20 72 63 20 29  ze();.  if( rc )
18650 20 72 65 74 75 72 6e 20 72 63 3b 0a 23 65 6e 64   return rc;.#end
18660 69 66 0a 20 20 69 66 28 20 7a 46 69 6c 65 6e 61  if.  if( zFilena
18670 6d 65 3d 3d 30 20 29 20 7a 46 69 6c 65 6e 61 6d  me==0 ) zFilenam
18680 65 20 3d 20 22 5c 30 30 30 5c 30 30 30 22 3b 0a  e = "\000\000";.
18690 20 20 70 56 61 6c 20 3d 20 73 71 6c 69 74 65 33    pVal = sqlite3
186a0 56 61 6c 75 65 4e 65 77 28 30 29 3b 0a 20 20 73  ValueNew(0);.  s
186b0 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74 53 74  qlite3ValueSetSt
186c0 72 28 70 56 61 6c 2c 20 2d 31 2c 20 7a 46 69 6c  r(pVal, -1, zFil
186d0 65 6e 61 6d 65 2c 20 53 51 4c 49 54 45 5f 55 54  ename, SQLITE_UT
186e0 46 31 36 4e 41 54 49 56 45 2c 20 53 51 4c 49 54  F16NATIVE, SQLIT
186f0 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 7a 46 69  E_STATIC);.  zFi
18700 6c 65 6e 61 6d 65 38 20 3d 20 73 71 6c 69 74 65  lename8 = sqlite
18710 33 56 61 6c 75 65 54 65 78 74 28 70 56 61 6c 2c  3ValueText(pVal,
18720 20 53 51 4c 49 54 45 5f 55 54 46 38 29 3b 0a 20   SQLITE_UTF8);. 
18730 20 69 66 28 20 7a 46 69 6c 65 6e 61 6d 65 38 20   if( zFilename8 
18740 29 7b 0a 20 20 20 20 72 63 20 3d 20 6f 70 65 6e  ){.    rc = open
18750 44 61 74 61 62 61 73 65 28 7a 46 69 6c 65 6e 61  Database(zFilena
18760 6d 65 38 2c 20 70 70 44 62 2c 0a 20 20 20 20 20  me8, ppDb,.     
18770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18780 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 52 45 41   SQLITE_OPEN_REA
18790 44 57 52 49 54 45 20 7c 20 53 51 4c 49 54 45 5f  DWRITE | SQLITE_
187a0 4f 50 45 4e 5f 43 52 45 41 54 45 2c 20 30 29 3b  OPEN_CREATE, 0);
187b0 0a 20 20 20 20 61 73 73 65 72 74 28 20 2a 70 70  .    assert( *pp
187c0 44 62 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45  Db || rc==SQLITE
187d0 5f 4e 4f 4d 45 4d 20 29 3b 0a 20 20 20 20 69 66  _NOMEM );.    if
187e0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
187f0 26 26 20 21 44 62 48 61 73 50 72 6f 70 65 72 74  && !DbHasPropert
18800 79 28 2a 70 70 44 62 2c 20 30 2c 20 44 42 5f 53  y(*ppDb, 0, DB_S
18810 63 68 65 6d 61 4c 6f 61 64 65 64 29 20 29 7b 0a  chemaLoaded) ){.
18820 20 20 20 20 20 20 53 43 48 45 4d 41 5f 45 4e 43        SCHEMA_ENC
18830 28 2a 70 70 44 62 29 20 3d 20 45 4e 43 28 2a 70  (*ppDb) = ENC(*p
18840 70 44 62 29 20 3d 20 53 51 4c 49 54 45 5f 55 54  pDb) = SQLITE_UT
18850 46 31 36 4e 41 54 49 56 45 3b 0a 20 20 20 20 7d  F16NATIVE;.    }
18860 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 63  .  }else{.    rc
18870 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b   = SQLITE_NOMEM;
18880 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 56 61  .  }.  sqlite3Va
18890 6c 75 65 46 72 65 65 28 70 56 61 6c 29 3b 0a 0a  lueFree(pVal);..
188a0 20 20 72 65 74 75 72 6e 20 72 63 20 26 20 30 78    return rc & 0x
188b0 66 66 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ff;.}.#endif /* 
188c0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
188d0 36 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 52 65 67 69  6 */../*.** Regi
188e0 73 74 65 72 20 61 20 6e 65 77 20 63 6f 6c 6c 61  ster a new colla
188f0 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 77 69  tion sequence wi
18900 74 68 20 74 68 65 20 64 61 74 61 62 61 73 65 20  th the database 
18910 68 61 6e 64 6c 65 20 64 62 2e 0a 2a 2f 0a 69 6e  handle db..*/.in
18920 74 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  t sqlite3_create
18930 5f 63 6f 6c 6c 61 74 69 6f 6e 28 0a 20 20 73 71  _collation(.  sq
18940 6c 69 74 65 33 2a 20 64 62 2c 20 0a 20 20 63 6f  lite3* db, .  co
18950 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 2c  nst char *zName,
18960 20 0a 20 20 69 6e 74 20 65 6e 63 2c 20 0a 20 20   .  int enc, .  
18970 76 6f 69 64 2a 20 70 43 74 78 2c 0a 20 20 69 6e  void* pCtx,.  in
18980 74 28 2a 78 43 6f 6d 70 61 72 65 29 28 76 6f 69  t(*xCompare)(voi
18990 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 76 6f 69  d*,int,const voi
189a0 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 76 6f 69  d*,int,const voi
189b0 64 2a 29 0a 29 7b 0a 20 20 72 65 74 75 72 6e 20  d*).){.  return 
189c0 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63  sqlite3_create_c
189d0 6f 6c 6c 61 74 69 6f 6e 5f 76 32 28 64 62 2c 20  ollation_v2(db, 
189e0 7a 4e 61 6d 65 2c 20 65 6e 63 2c 20 70 43 74 78  zName, enc, pCtx
189f0 2c 20 78 43 6f 6d 70 61 72 65 2c 20 30 29 3b 0a  , xCompare, 0);.
18a00 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 67 69 73 74 65  }../*.** Registe
18a10 72 20 61 20 6e 65 77 20 63 6f 6c 6c 61 74 69 6f  r a new collatio
18a20 6e 20 73 65 71 75 65 6e 63 65 20 77 69 74 68 20  n sequence with 
18a30 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e  the database han
18a40 64 6c 65 20 64 62 2e 0a 2a 2f 0a 69 6e 74 20 73  dle db..*/.int s
18a50 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63 6f  qlite3_create_co
18a60 6c 6c 61 74 69 6f 6e 5f 76 32 28 0a 20 20 73 71  llation_v2(.  sq
18a70 6c 69 74 65 33 2a 20 64 62 2c 20 0a 20 20 63 6f  lite3* db, .  co
18a80 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 2c  nst char *zName,
18a90 20 0a 20 20 69 6e 74 20 65 6e 63 2c 20 0a 20 20   .  int enc, .  
18aa0 76 6f 69 64 2a 20 70 43 74 78 2c 0a 20 20 69 6e  void* pCtx,.  in
18ab0 74 28 2a 78 43 6f 6d 70 61 72 65 29 28 76 6f 69  t(*xCompare)(voi
18ac0 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 76 6f 69  d*,int,const voi
18ad0 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 76 6f 69  d*,int,const voi
18ae0 64 2a 29 2c 0a 20 20 76 6f 69 64 28 2a 78 44 65  d*),.  void(*xDe
18af0 6c 29 28 76 6f 69 64 2a 29 0a 29 7b 0a 20 20 69  l)(void*).){.  i
18b00 6e 74 20 72 63 3b 0a 0a 23 69 66 64 65 66 20 53  nt rc;..#ifdef S
18b10 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41 50 49  QLITE_ENABLE_API
18b20 5f 41 52 4d 4f 52 0a 20 20 69 66 28 20 21 73 71  _ARMOR.  if( !sq
18b30 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b  lite3SafetyCheck
18b40 4f 6b 28 64 62 29 20 7c 7c 20 7a 4e 61 6d 65 3d  Ok(db) || zName=
18b50 3d 30 20 29 20 72 65 74 75 72 6e 20 53 51 4c 49  =0 ) return SQLI
18b60 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54 3b 0a  TE_MISUSE_BKPT;.
18b70 23 65 6e 64 69 66 0a 20 20 73 71 6c 69 74 65 33  #endif.  sqlite3
18b80 5f 6d 75 74 65 78 5f 65 6e 74 65 72 28 64 62 2d  _mutex_enter(db-
18b90 3e 6d 75 74 65 78 29 3b 0a 20 20 61 73 73 65 72  >mutex);.  asser
18ba0 74 28 20 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61  t( !db->mallocFa
18bb0 69 6c 65 64 20 29 3b 0a 20 20 72 63 20 3d 20 63  iled );.  rc = c
18bc0 72 65 61 74 65 43 6f 6c 6c 61 74 69 6f 6e 28 64  reateCollation(d
18bd0 62 2c 20 7a 4e 61 6d 65 2c 20 28 75 38 29 65 6e  b, zName, (u8)en
18be0 63 2c 20 70 43 74 78 2c 20 78 43 6f 6d 70 61 72  c, pCtx, xCompar
18bf0 65 2c 20 78 44 65 6c 29 3b 0a 20 20 72 63 20 3d  e, xDel);.  rc =
18c00 20 73 71 6c 69 74 65 33 41 70 69 45 78 69 74 28   sqlite3ApiExit(
18c10 64 62 2c 20 72 63 29 3b 0a 20 20 73 71 6c 69 74  db, rc);.  sqlit
18c20 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 64  e3_mutex_leave(d
18c30 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 72 65 74  b->mutex);.  ret
18c40 75 72 6e 20 72 63 3b 0a 7d 0a 0a 23 69 66 6e 64  urn rc;.}..#ifnd
18c50 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  ef SQLITE_OMIT_U
18c60 54 46 31 36 0a 2f 2a 0a 2a 2a 20 52 65 67 69 73  TF16./*.** Regis
18c70 74 65 72 20 61 20 6e 65 77 20 63 6f 6c 6c 61 74  ter a new collat
18c80 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 77 69 74  ion sequence wit
18c90 68 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68  h the database h
18ca0 61 6e 64 6c 65 20 64 62 2e 0a 2a 2f 0a 69 6e 74  andle db..*/.int
18cb0 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f   sqlite3_create_
18cc0 63 6f 6c 6c 61 74 69 6f 6e 31 36 28 0a 20 20 73  collation16(.  s
18cd0 71 6c 69 74 65 33 2a 20 64 62 2c 20 0a 20 20 63  qlite3* db, .  c
18ce0 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 4e 61 6d 65  onst void *zName
18cf0 2c 0a 20 20 69 6e 74 20 65 6e 63 2c 20 0a 20 20  ,.  int enc, .  
18d00 76 6f 69 64 2a 20 70 43 74 78 2c 0a 20 20 69 6e  void* pCtx,.  in
18d10 74 28 2a 78 43 6f 6d 70 61 72 65 29 28 76 6f 69  t(*xCompare)(voi
18d20 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 76 6f 69  d*,int,const voi
18d30 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 76 6f 69  d*,int,const voi
18d40 64 2a 29 0a 29 7b 0a 20 20 69 6e 74 20 72 63 20  d*).){.  int rc 
18d50 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 63  = SQLITE_OK;.  c
18d60 68 61 72 20 2a 7a 4e 61 6d 65 38 3b 0a 0a 23 69  har *zName8;..#i
18d70 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
18d80 4c 45 5f 41 50 49 5f 41 52 4d 4f 52 0a 20 20 69  LE_API_ARMOR.  i
18d90 66 28 20 21 73 71 6c 69 74 65 33 53 61 66 65 74  f( !sqlite3Safet
18da0 79 43 68 65 63 6b 4f 6b 28 64 62 29 20 7c 7c 20  yCheckOk(db) || 
18db0 7a 4e 61 6d 65 3d 3d 30 20 29 20 72 65 74 75 72  zName==0 ) retur
18dc0 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 5f  n SQLITE_MISUSE_
18dd0 42 4b 50 54 3b 0a 23 65 6e 64 69 66 0a 20 20 73  BKPT;.#endif.  s
18de0 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74  qlite3_mutex_ent
18df0 65 72 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20  er(db->mutex);. 
18e00 20 61 73 73 65 72 74 28 20 21 64 62 2d 3e 6d 61   assert( !db->ma
18e10 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20  llocFailed );.  
18e20 7a 4e 61 6d 65 38 20 3d 20 73 71 6c 69 74 65 33  zName8 = sqlite3
18e30 55 74 66 31 36 74 6f 38 28 64 62 2c 20 7a 4e 61  Utf16to8(db, zNa
18e40 6d 65 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55  me, -1, SQLITE_U
18e50 54 46 31 36 4e 41 54 49 56 45 29 3b 0a 20 20 69  TF16NATIVE);.  i
18e60 66 28 20 7a 4e 61 6d 65 38 20 29 7b 0a 20 20 20  f( zName8 ){.   
18e70 20 72 63 20 3d 20 63 72 65 61 74 65 43 6f 6c 6c   rc = createColl
18e80 61 74 69 6f 6e 28 64 62 2c 20 7a 4e 61 6d 65 38  ation(db, zName8
18e90 2c 20 28 75 38 29 65 6e 63 2c 20 70 43 74 78 2c  , (u8)enc, pCtx,
18ea0 20 78 43 6f 6d 70 61 72 65 2c 20 30 29 3b 0a 20   xCompare, 0);. 
18eb0 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65     sqlite3DbFree
18ec0 28 64 62 2c 20 7a 4e 61 6d 65 38 29 3b 0a 20 20  (db, zName8);.  
18ed0 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  }.  rc = sqlite3
18ee0 41 70 69 45 78 69 74 28 64 62 2c 20 72 63 29 3b  ApiExit(db, rc);
18ef0 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  .  sqlite3_mutex
18f00 5f 6c 65 61 76 65 28 64 62 2d 3e 6d 75 74 65 78  _leave(db->mutex
18f10 29 3b 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a  );.  return rc;.
18f20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
18f30 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f  TE_OMIT_UTF16 */
18f40 0a 0a 2f 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72  ../*.** Register
18f50 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71   a collation seq
18f60 75 65 6e 63 65 20 66 61 63 74 6f 72 79 20 63 61  uence factory ca
18f70 6c 6c 62 61 63 6b 20 77 69 74 68 20 74 68 65 20  llback with the 
18f80 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 0a  database handle.
18f90 2a 2a 20 64 62 2e 20 52 65 70 6c 61 63 65 20 61  ** db. Replace a
18fa0 6e 79 20 70 72 65 76 69 6f 75 73 6c 79 20 69 6e  ny previously in
18fb0 73 74 61 6c 6c 65 64 20 63 6f 6c 6c 61 74 69 6f  stalled collatio
18fc0 6e 20 73 65 71 75 65 6e 63 65 20 66 61 63 74 6f  n sequence facto
18fd0 72 79 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  ry..*/.int sqlit
18fe0 65 33 5f 63 6f 6c 6c 61 74 69 6f 6e 5f 6e 65 65  e3_collation_nee
18ff0 64 65 64 28 0a 20 20 73 71 6c 69 74 65 33 20 2a  ded(.  sqlite3 *
19000 64 62 2c 20 0a 20 20 76 6f 69 64 20 2a 70 43 6f  db, .  void *pCo
19010 6c 6c 4e 65 65 64 65 64 41 72 67 2c 20 0a 20 20  llNeededArg, .  
19020 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65  void(*xCollNeede
19030 64 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33  d)(void*,sqlite3
19040 2a 2c 69 6e 74 20 65 54 65 78 74 52 65 70 2c 63  *,int eTextRep,c
19050 6f 6e 73 74 20 63 68 61 72 2a 29 0a 29 7b 0a 23  onst char*).){.#
19060 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
19070 42 4c 45 5f 41 50 49 5f 41 52 4d 4f 52 0a 20 20  BLE_API_ARMOR.  
19080 69 66 28 20 21 73 71 6c 69 74 65 33 53 61 66 65  if( !sqlite3Safe
19090 74 79 43 68 65 63 6b 4f 6b 28 64 62 29 20 29 20  tyCheckOk(db) ) 
190a0 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49  return SQLITE_MI
190b0 53 55 53 45 5f 42 4b 50 54 3b 0a 23 65 6e 64 69  SUSE_BKPT;.#endi
190c0 66 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  f.  sqlite3_mute
190d0 78 5f 65 6e 74 65 72 28 64 62 2d 3e 6d 75 74 65  x_enter(db->mute
190e0 78 29 3b 0a 20 20 64 62 2d 3e 78 43 6f 6c 6c 4e  x);.  db->xCollN
190f0 65 65 64 65 64 20 3d 20 78 43 6f 6c 6c 4e 65 65  eeded = xCollNee
19100 64 65 64 3b 0a 20 20 64 62 2d 3e 78 43 6f 6c 6c  ded;.  db->xColl
19110 4e 65 65 64 65 64 31 36 20 3d 20 30 3b 0a 20 20  Needed16 = 0;.  
19120 64 62 2d 3e 70 43 6f 6c 6c 4e 65 65 64 65 64 41  db->pCollNeededA
19130 72 67 20 3d 20 70 43 6f 6c 6c 4e 65 65 64 65 64  rg = pCollNeeded
19140 41 72 67 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d  Arg;.  sqlite3_m
19150 75 74 65 78 5f 6c 65 61 76 65 28 64 62 2d 3e 6d  utex_leave(db->m
19160 75 74 65 78 29 3b 0a 20 20 72 65 74 75 72 6e 20  utex);.  return 
19170 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 23 69  SQLITE_OK;.}..#i
19180 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
19190 54 5f 55 54 46 31 36 0a 2f 2a 0a 2a 2a 20 52 65  T_UTF16./*.** Re
191a0 67 69 73 74 65 72 20 61 20 63 6f 6c 6c 61 74 69  gister a collati
191b0 6f 6e 20 73 65 71 75 65 6e 63 65 20 66 61 63 74  on sequence fact
191c0 6f 72 79 20 63 61 6c 6c 62 61 63 6b 20 77 69 74  ory callback wit
191d0 68 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68  h the database h
191e0 61 6e 64 6c 65 0a 2a 2a 20 64 62 2e 20 52 65 70  andle.** db. Rep
191f0 6c 61 63 65 20 61 6e 79 20 70 72 65 76 69 6f 75  lace any previou
19200 73 6c 79 20 69 6e 73 74 61 6c 6c 65 64 20 63 6f  sly installed co
19210 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
19220 20 66 61 63 74 6f 72 79 2e 0a 2a 2f 0a 69 6e 74   factory..*/.int
19230 20 73 71 6c 69 74 65 33 5f 63 6f 6c 6c 61 74 69   sqlite3_collati
19240 6f 6e 5f 6e 65 65 64 65 64 31 36 28 0a 20 20 73  on_needed16(.  s
19250 71 6c 69 74 65 33 20 2a 64 62 2c 20 0a 20 20 76  qlite3 *db, .  v
19260 6f 69 64 20 2a 70 43 6f 6c 6c 4e 65 65 64 65 64  oid *pCollNeeded
19270 41 72 67 2c 20 0a 20 20 76 6f 69 64 28 2a 78 43  Arg, .  void(*xC
19280 6f 6c 6c 4e 65 65 64 65 64 31 36 29 28 76 6f 69  ollNeeded16)(voi
19290 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20  d*,sqlite3*,int 
192a0 65 54 65 78 74 52 65 70 2c 63 6f 6e 73 74 20 76  eTextRep,const v
192b0 6f 69 64 2a 29 0a 29 7b 0a 23 69 66 64 65 66 20  oid*).){.#ifdef 
192c0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41 50  SQLITE_ENABLE_AP
192d0 49 5f 41 52 4d 4f 52 0a 20 20 69 66 28 20 21 73  I_ARMOR.  if( !s
192e0 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63  qlite3SafetyChec
192f0 6b 4f 6b 28 64 62 29 20 29 20 72 65 74 75 72 6e  kOk(db) ) return
19300 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42   SQLITE_MISUSE_B
19310 4b 50 54 3b 0a 23 65 6e 64 69 66 0a 20 20 73 71  KPT;.#endif.  sq
19320 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65  lite3_mutex_ente
19330 72 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20  r(db->mutex);.  
19340 64 62 2d 3e 78 43 6f 6c 6c 4e 65 65 64 65 64 20  db->xCollNeeded 
19350 3d 20 30 3b 0a 20 20 64 62 2d 3e 78 43 6f 6c 6c  = 0;.  db->xColl
19360 4e 65 65 64 65 64 31 36 20 3d 20 78 43 6f 6c 6c  Needed16 = xColl
19370 4e 65 65 64 65 64 31 36 3b 0a 20 20 64 62 2d 3e  Needed16;.  db->
19380 70 43 6f 6c 6c 4e 65 65 64 65 64 41 72 67 20 3d  pCollNeededArg =
19390 20 70 43 6f 6c 6c 4e 65 65 64 65 64 41 72 67 3b   pCollNeededArg;
193a0 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  .  sqlite3_mutex
193b0 5f 6c 65 61 76 65 28 64 62 2d 3e 6d 75 74 65 78  _leave(db->mutex
193c0 29 3b 0a 20 20 72 65 74 75 72 6e 20 53 51 4c 49  );.  return SQLI
193d0 54 45 5f 4f 4b 3b 0a 7d 0a 23 65 6e 64 69 66 20  TE_OK;.}.#endif 
193e0 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  /* SQLITE_OMIT_U
193f0 54 46 31 36 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  TF16 */..#ifndef
19400 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 45 50   SQLITE_OMIT_DEP
19410 52 45 43 41 54 45 44 0a 2f 2a 0a 2a 2a 20 54 68  RECATED./*.** Th
19420 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 6e  is function is n
19430 6f 77 20 61 6e 20 61 6e 61 63 68 72 6f 6e 69 73  ow an anachronis
19440 6d 2e 20 49 74 20 75 73 65 64 20 74 6f 20 62 65  m. It used to be
19450 20 75 73 65 64 20 74 6f 20 72 65 63 6f 76 65 72   used to recover
19460 20 66 72 6f 6d 20 61 0a 2a 2a 20 6d 61 6c 6c 6f   from a.** mallo
19470 63 28 29 20 66 61 69 6c 75 72 65 2c 20 62 75 74  c() failure, but
19480 20 53 51 4c 69 74 65 20 6e 6f 77 20 64 6f 65 73   SQLite now does
19490 20 74 68 69 73 20 61 75 74 6f 6d 61 74 69 63 61   this automatica
194a0 6c 6c 79 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  lly..*/.int sqli
194b0 74 65 33 5f 67 6c 6f 62 61 6c 5f 72 65 63 6f 76  te3_global_recov
194c0 65 72 28 76 6f 69 64 29 7b 0a 20 20 72 65 74 75  er(void){.  retu
194d0 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a  rn SQLITE_OK;.}.
194e0 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 65  #endif../*.** Te
194f0 73 74 20 74 6f 20 73 65 65 20 77 68 65 74 68 65  st to see whethe
19500 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 64 61 74  r or not the dat
19510 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
19520 20 69 73 20 69 6e 20 61 75 74 6f 63 6f 6d 6d 69   is in autocommi
19530 74 0a 2a 2a 20 6d 6f 64 65 2e 20 20 52 65 74 75  t.** mode.  Retu
19540 72 6e 20 54 52 55 45 20 69 66 20 69 74 20 69 73  rn TRUE if it is
19550 20 61 6e 64 20 46 41 4c 53 45 20 69 66 20 6e 6f   and FALSE if no
19560 74 2e 20 20 41 75 74 6f 63 6f 6d 6d 69 74 20 6d  t.  Autocommit m
19570 6f 64 65 20 69 73 20 6f 6e 0a 2a 2a 20 62 79 20  ode is on.** by 
19580 64 65 66 61 75 6c 74 2e 20 20 41 75 74 6f 63 6f  default.  Autoco
19590 6d 6d 69 74 20 69 73 20 64 69 73 61 62 6c 65 64  mmit is disabled
195a0 20 62 79 20 61 20 42 45 47 49 4e 20 73 74 61 74   by a BEGIN stat
195b0 65 6d 65 6e 74 20 61 6e 64 20 72 65 65 6e 61 62  ement and reenab
195c0 6c 65 64 0a 2a 2a 20 62 79 20 74 68 65 20 6e 65  led.** by the ne
195d0 78 74 20 43 4f 4d 4d 49 54 20 6f 72 20 52 4f 4c  xt COMMIT or ROL
195e0 4c 42 41 43 4b 2e 0a 2a 2f 0a 69 6e 74 20 73 71  LBACK..*/.int sq
195f0 6c 69 74 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f  lite3_get_autoco
19600 6d 6d 69 74 28 73 71 6c 69 74 65 33 20 2a 64 62  mmit(sqlite3 *db
19610 29 7b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ){.#ifdef SQLITE
19620 5f 45 4e 41 42 4c 45 5f 41 50 49 5f 41 52 4d 4f  _ENABLE_API_ARMO
19630 52 0a 20 20 69 66 28 20 21 73 71 6c 69 74 65 33  R.  if( !sqlite3
19640 53 61 66 65 74 79 43 68 65 63 6b 4f 6b 28 64 62  SafetyCheckOk(db
19650 29 20 29 7b 0a 20 20 20 20 28 76 6f 69 64 29 53  ) ){.    (void)S
19660 51 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50  QLITE_MISUSE_BKP
19670 54 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 30 3b  T;.    return 0;
19680 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 72 65  .  }.#endif.  re
19690 74 75 72 6e 20 64 62 2d 3e 61 75 74 6f 43 6f 6d  turn db->autoCom
196a0 6d 69 74 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68  mit;.}../*.** Th
196b0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 72 6f 75 74  e following rout
196c0 69 6e 65 73 20 61 72 65 20 73 75 62 73 74 69 74  ines are substit
196d0 75 74 65 73 20 66 6f 72 20 63 6f 6e 73 74 61 6e  utes for constan
196e0 74 73 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50  ts SQLITE_CORRUP
196f0 54 2c 0a 2a 2a 20 53 51 4c 49 54 45 5f 4d 49 53  T,.** SQLITE_MIS
19700 55 53 45 2c 20 53 51 4c 49 54 45 5f 43 41 4e 54  USE, SQLITE_CANT
19710 4f 50 45 4e 2c 20 53 51 4c 49 54 45 5f 49 4f 45  OPEN, SQLITE_IOE
19720 52 52 20 61 6e 64 20 70 6f 73 73 69 62 6c 79 20  RR and possibly 
19730 6f 74 68 65 72 20 65 72 72 6f 72 0a 2a 2a 20 63  other error.** c
19740 6f 6e 73 74 61 6e 74 73 2e 20 20 54 68 65 79 20  onstants.  They 
19750 73 65 72 76 65 20 74 77 6f 20 70 75 72 70 6f 73  serve two purpos
19760 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 31 2e 20 20  es:.**.**   1.  
19770 53 65 72 76 65 20 61 73 20 61 20 63 6f 6e 76 65  Serve as a conve
19780 6e 69 65 6e 74 20 70 6c 61 63 65 20 74 6f 20 73  nient place to s
19790 65 74 20 61 20 62 72 65 61 6b 70 6f 69 6e 74 20  et a breakpoint 
197a0 69 6e 20 61 20 64 65 62 75 67 67 65 72 0a 2a 2a  in a debugger.**
197b0 20 20 20 20 20 20 20 74 6f 20 64 65 74 65 63 74         to detect
197c0 20 77 68 65 6e 20 76 65 72 73 69 6f 6e 20 65 72   when version er
197d0 72 6f 72 20 63 6f 6e 64 69 74 69 6f 6e 73 20 6f  ror conditions o
197e0 63 63 75 72 73 2e 0a 2a 2a 0a 2a 2a 20 20 20 32  ccurs..**.**   2
197f0 2e 20 20 49 6e 76 6f 6b 65 20 73 71 6c 69 74 65  .  Invoke sqlite
19800 33 5f 6c 6f 67 28 29 20 74 6f 20 70 72 6f 76 69  3_log() to provi
19810 64 65 20 74 68 65 20 73 6f 75 72 63 65 20 63 6f  de the source co
19820 64 65 20 6c 6f 63 61 74 69 6f 6e 20 77 68 65 72  de location wher
19830 65 0a 2a 2a 20 20 20 20 20 20 20 61 20 6c 6f 77  e.**       a low
19840 2d 6c 65 76 65 6c 20 65 72 72 6f 72 20 69 73 20  -level error is 
19850 66 69 72 73 74 20 64 65 74 65 63 74 65 64 2e 0a  first detected..
19860 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f  */.int sqlite3Co
19870 72 72 75 70 74 45 72 72 6f 72 28 69 6e 74 20 6c  rruptError(int l
19880 69 6e 65 6e 6f 29 7b 0a 20 20 74 65 73 74 63 61  ineno){.  testca
19890 73 65 28 20 73 71 6c 69 74 65 33 47 6c 6f 62 61  se( sqlite3Globa
198a0 6c 43 6f 6e 66 69 67 2e 78 4c 6f 67 21 3d 30 20  lConfig.xLog!=0 
198b0 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6c 6f 67  );.  sqlite3_log
198c0 28 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 2c  (SQLITE_CORRUPT,
198d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22  .              "
198e0 64 61 74 61 62 61 73 65 20 63 6f 72 72 75 70 74  database corrupt
198f0 69 6f 6e 20 61 74 20 6c 69 6e 65 20 25 64 20 6f  ion at line %d o
19900 66 20 5b 25 2e 31 30 73 5d 22 2c 0a 20 20 20 20  f [%.10s]",.    
19910 20 20 20 20 20 20 20 20 20 20 6c 69 6e 65 6e 6f            lineno
19920 2c 20 32 30 2b 73 71 6c 69 74 65 33 5f 73 6f 75  , 20+sqlite3_sou
19930 72 63 65 69 64 28 29 29 3b 0a 20 20 72 65 74 75  rceid());.  retu
19940 72 6e 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50  rn SQLITE_CORRUP
19950 54 3b 0a 7d 0a 69 6e 74 20 73 71 6c 69 74 65 33  T;.}.int sqlite3
19960 4d 69 73 75 73 65 45 72 72 6f 72 28 69 6e 74 20  MisuseError(int 
19970 6c 69 6e 65 6e 6f 29 7b 0a 20 20 74 65 73 74 63  lineno){.  testc
19980 61 73 65 28 20 73 71 6c 69 74 65 33 47 6c 6f 62  ase( sqlite3Glob
19990 61 6c 43 6f 6e 66 69 67 2e 78 4c 6f 67 21 3d 30  alConfig.xLog!=0
199a0 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6c 6f   );.  sqlite3_lo
199b0 67 28 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 2c  g(SQLITE_MISUSE,
199c0 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   .              
199d0 22 6d 69 73 75 73 65 20 61 74 20 6c 69 6e 65 20  "misuse at line 
199e0 25 64 20 6f 66 20 5b 25 2e 31 30 73 5d 22 2c 0a  %d of [%.10s]",.
199f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 69                li
19a00 6e 65 6e 6f 2c 20 32 30 2b 73 71 6c 69 74 65 33  neno, 20+sqlite3
19a10 5f 73 6f 75 72 63 65 69 64 28 29 29 3b 0a 20 20  _sourceid());.  
19a20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49  return SQLITE_MI
19a30 53 55 53 45 3b 0a 7d 0a 69 6e 74 20 73 71 6c 69  SUSE;.}.int sqli
19a40 74 65 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72  te3CantopenError
19a50 28 69 6e 74 20 6c 69 6e 65 6e 6f 29 7b 0a 20 20  (int lineno){.  
19a60 74 65 73 74 63 61 73 65 28 20 73 71 6c 69 74 65  testcase( sqlite
19a70 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78 4c  3GlobalConfig.xL
19a80 6f 67 21 3d 30 20 29 3b 0a 20 20 73 71 6c 69 74  og!=0 );.  sqlit
19a90 65 33 5f 6c 6f 67 28 53 51 4c 49 54 45 5f 43 41  e3_log(SQLITE_CA
19aa0 4e 54 4f 50 45 4e 2c 20 0a 20 20 20 20 20 20 20  NTOPEN, .       
19ab0 20 20 20 20 20 20 20 22 63 61 6e 6e 6f 74 20 6f         "cannot o
19ac0 70 65 6e 20 66 69 6c 65 20 61 74 20 6c 69 6e 65  pen file at line
19ad0 20 25 64 20 6f 66 20 5b 25 2e 31 30 73 5d 22 2c   %d of [%.10s]",
19ae0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c  .              l
19af0 69 6e 65 6e 6f 2c 20 32 30 2b 73 71 6c 69 74 65  ineno, 20+sqlite
19b00 33 5f 73 6f 75 72 63 65 69 64 28 29 29 3b 0a 20  3_sourceid());. 
19b10 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 43   return SQLITE_C
19b20 41 4e 54 4f 50 45 4e 3b 0a 7d 0a 0a 0a 23 69 66  ANTOPEN;.}...#if
19b30 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
19b40 5f 44 45 50 52 45 43 41 54 45 44 0a 2f 2a 0a 2a  _DEPRECATED./*.*
19b50 2a 20 54 68 69 73 20 69 73 20 61 20 63 6f 6e 76  * This is a conv
19b60 65 6e 69 65 6e 63 65 20 72 6f 75 74 69 6e 65 20  enience routine 
19b70 74 68 61 74 20 6d 61 6b 65 73 20 73 75 72 65 20  that makes sure 
19b80 74 68 61 74 20 61 6c 6c 20 74 68 72 65 61 64 2d  that all thread-
19b90 73 70 65 63 69 66 69 63 0a 2a 2a 20 64 61 74 61  specific.** data
19ba0 20 66 6f 72 20 74 68 69 73 20 74 68 72 65 61 64   for this thread
19bb0 20 68 61 73 20 62 65 65 6e 20 64 65 61 6c 6c 6f   has been deallo
19bc0 63 61 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c  cated..**.** SQL
19bd0 69 74 65 20 6e 6f 20 6c 6f 6e 67 65 72 20 75 73  ite no longer us
19be0 65 73 20 74 68 72 65 61 64 2d 73 70 65 63 69 66  es thread-specif
19bf0 69 63 20 64 61 74 61 20 73 6f 20 74 68 69 73 20  ic data so this 
19c00 72 6f 75 74 69 6e 65 20 69 73 20 6e 6f 77 20 61  routine is now a
19c10 0a 2a 2a 20 6e 6f 2d 6f 70 2e 20 20 49 74 20 69  .** no-op.  It i
19c20 73 20 72 65 74 61 69 6e 65 64 20 66 6f 72 20 68  s retained for h
19c30 69 73 74 6f 72 69 63 61 6c 20 63 6f 6d 70 61 74  istorical compat
19c40 69 62 69 6c 69 74 79 2e 0a 2a 2f 0a 76 6f 69 64  ibility..*/.void
19c50 20 73 71 6c 69 74 65 33 5f 74 68 72 65 61 64 5f   sqlite3_thread_
19c60 63 6c 65 61 6e 75 70 28 76 6f 69 64 29 7b 0a 7d  cleanup(void){.}
19c70 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52  .#endif../*.** R
19c80 65 74 75 72 6e 20 6d 65 74 61 20 69 6e 66 6f 72  eturn meta infor
19c90 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 61 20 73  mation about a s
19ca0 70 65 63 69 66 69 63 20 63 6f 6c 75 6d 6e 20 6f  pecific column o
19cb0 66 20 61 20 64 61 74 61 62 61 73 65 20 74 61 62  f a database tab
19cc0 6c 65 2e 0a 2a 2a 20 53 65 65 20 63 6f 6d 6d 65  le..** See comme
19cd0 6e 74 20 69 6e 20 73 71 6c 69 74 65 33 2e 68 20  nt in sqlite3.h 
19ce0 28 73 71 6c 69 74 65 2e 68 2e 69 6e 29 20 66 6f  (sqlite.h.in) fo
19cf0 72 20 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a 69 6e  r details..*/.in
19d00 74 20 73 71 6c 69 74 65 33 5f 74 61 62 6c 65 5f  t sqlite3_table_
19d10 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64 61 74 61 28  column_metadata(
19d20 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  .  sqlite3 *db, 
19d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
19d40 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e  * Connection han
19d50 64 6c 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  dle */.  const c
19d60 68 61 72 20 2a 7a 44 62 4e 61 6d 65 2c 20 20 20  har *zDbName,   
19d70 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65       /* Database
19d80 20 6e 61 6d 65 20 6f 72 20 4e 55 4c 4c 20 2a 2f   name or NULL */
19d90 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
19da0 54 61 62 6c 65 4e 61 6d 65 2c 20 20 20 20 20 2f  TableName,     /
19db0 2a 20 54 61 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a  * Table name */.
19dc0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43    const char *zC
19dd0 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 20 20 20 2f 2a  olumnName,    /*
19de0 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 20 2a 2f 0a   Column name */.
19df0 20 20 63 68 61 72 20 63 6f 6e 73 74 20 2a 2a 70    char const **p
19e00 7a 44 61 74 61 54 79 70 65 2c 20 20 20 20 2f 2a  zDataType,    /*
19e10 20 4f 55 54 50 55 54 3a 20 44 65 63 6c 61 72 65   OUTPUT: Declare
19e20 64 20 64 61 74 61 20 74 79 70 65 20 2a 2f 0a 20  d data type */. 
19e30 20 63 68 61 72 20 63 6f 6e 73 74 20 2a 2a 70 7a   char const **pz
19e40 43 6f 6c 6c 53 65 71 2c 20 20 20 20 20 2f 2a 20  CollSeq,     /* 
19e50 4f 55 54 50 55 54 3a 20 43 6f 6c 6c 61 74 69 6f  OUTPUT: Collatio
19e60 6e 20 73 65 71 75 65 6e 63 65 20 6e 61 6d 65 20  n sequence name 
19e70 2a 2f 0a 20 20 69 6e 74 20 2a 70 4e 6f 74 4e 75  */.  int *pNotNu
19e80 6c 6c 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  ll,             
19e90 20 2f 2a 20 4f 55 54 50 55 54 3a 20 54 72 75 65   /* OUTPUT: True
19ea0 20 69 66 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e   if NOT NULL con
19eb0 73 74 72 61 69 6e 74 20 65 78 69 73 74 73 20 2a  straint exists *
19ec0 2f 0a 20 20 69 6e 74 20 2a 70 50 72 69 6d 61 72  /.  int *pPrimar
19ed0 79 4b 65 79 2c 20 20 20 20 20 20 20 20 20 20 20  yKey,           
19ee0 2f 2a 20 4f 55 54 50 55 54 3a 20 54 72 75 65 20  /* OUTPUT: True 
19ef0 69 66 20 63 6f 6c 75 6d 6e 20 70 61 72 74 20 6f  if column part o
19f00 66 20 50 4b 20 2a 2f 0a 20 20 69 6e 74 20 2a 70  f PK */.  int *p
19f10 41 75 74 6f 69 6e 63 20 20 20 20 20 20 20 20 20  Autoinc         
19f20 20 20 20 20 20 20 2f 2a 20 4f 55 54 50 55 54 3a        /* OUTPUT:
19f30 20 54 72 75 65 20 69 66 20 63 6f 6c 75 6d 6e 20   True if column 
19f40 69 73 20 61 75 74 6f 2d 69 6e 63 72 65 6d 65 6e  is auto-incremen
19f50 74 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 72 63  t */.){.  int rc
19f60 3b 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 4d 73  ;.  char *zErrMs
19f70 67 20 3d 20 30 3b 0a 20 20 54 61 62 6c 65 20 2a  g = 0;.  Table *
19f80 70 54 61 62 20 3d 20 30 3b 0a 20 20 43 6f 6c 75  pTab = 0;.  Colu
19f90 6d 6e 20 2a 70 43 6f 6c 20 3d 20 30 3b 0a 20 20  mn *pCol = 0;.  
19fa0 69 6e 74 20 69 43 6f 6c 20 3d 20 30 3b 0a 20 20  int iCol = 0;.  
19fb0 63 68 61 72 20 63 6f 6e 73 74 20 2a 7a 44 61 74  char const *zDat
19fc0 61 54 79 70 65 20 3d 20 30 3b 0a 20 20 63 68 61  aType = 0;.  cha
19fd0 72 20 63 6f 6e 73 74 20 2a 7a 43 6f 6c 6c 53 65  r const *zCollSe
19fe0 71 20 3d 20 30 3b 0a 20 20 69 6e 74 20 6e 6f 74  q = 0;.  int not
19ff0 6e 75 6c 6c 20 3d 20 30 3b 0a 20 20 69 6e 74 20  null = 0;.  int 
1a000 70 72 69 6d 61 72 79 6b 65 79 20 3d 20 30 3b 0a  primarykey = 0;.
1a010 20 20 69 6e 74 20 61 75 74 6f 69 6e 63 20 3d 20    int autoinc = 
1a020 30 3b 0a 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  0;...#ifdef SQLI
1a030 54 45 5f 45 4e 41 42 4c 45 5f 41 50 49 5f 41 52  TE_ENABLE_API_AR
1a040 4d 4f 52 0a 20 20 69 66 28 20 21 73 71 6c 69 74  MOR.  if( !sqlit
1a050 65 33 53 61 66 65 74 79 43 68 65 63 6b 4f 6b 28  e3SafetyCheckOk(
1a060 64 62 29 20 7c 7c 20 7a 54 61 62 6c 65 4e 61 6d  db) || zTableNam
1a070 65 3d 3d 30 20 29 7b 0a 20 20 20 20 72 65 74 75  e==0 ){.    retu
1a080 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45  rn SQLITE_MISUSE
1a090 5f 42 4b 50 54 3b 0a 20 20 7d 0a 23 65 6e 64 69  _BKPT;.  }.#endi
1a0a0 66 0a 0a 20 20 2f 2a 20 45 6e 73 75 72 65 20 74  f..  /* Ensure t
1a0b0 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
1a0c0 6d 61 20 68 61 73 20 62 65 65 6e 20 6c 6f 61 64  ma has been load
1a0d0 65 64 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  ed */.  sqlite3_
1a0e0 6d 75 74 65 78 5f 65 6e 74 65 72 28 64 62 2d 3e  mutex_enter(db->
1a0f0 6d 75 74 65 78 29 3b 0a 20 20 73 71 6c 69 74 65  mutex);.  sqlite
1a100 33 42 74 72 65 65 45 6e 74 65 72 41 6c 6c 28 64  3BtreeEnterAll(d
1a110 62 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  b);.  rc = sqlit
1a120 65 33 49 6e 69 74 28 64 62 2c 20 26 7a 45 72 72  e3Init(db, &zErr
1a130 4d 73 67 29 3b 0a 20 20 69 66 28 20 53 51 4c 49  Msg);.  if( SQLI
1a140 54 45 5f 4f 4b 21 3d 72 63 20 29 7b 0a 20 20 20  TE_OK!=rc ){.   
1a150 20 67 6f 74 6f 20 65 72 72 6f 72 5f 6f 75 74 3b   goto error_out;
1a160 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4c 6f 63 61 74  .  }..  /* Locat
1a170 65 20 74 68 65 20 74 61 62 6c 65 20 69 6e 20 71  e the table in q
1a180 75 65 73 74 69 6f 6e 20 2a 2f 0a 20 20 70 54 61  uestion */.  pTa
1a190 62 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 54  b = sqlite3FindT
1a1a0 61 62 6c 65 28 64 62 2c 20 7a 54 61 62 6c 65 4e  able(db, zTableN
1a1b0 61 6d 65 2c 20 7a 44 62 4e 61 6d 65 29 3b 0a 20  ame, zDbName);. 
1a1c0 20 69 66 28 20 21 70 54 61 62 20 7c 7c 20 70 54   if( !pTab || pT
1a1d0 61 62 2d 3e 70 53 65 6c 65 63 74 20 29 7b 0a 20  ab->pSelect ){. 
1a1e0 20 20 20 70 54 61 62 20 3d 20 30 3b 0a 20 20 20     pTab = 0;.   
1a1f0 20 67 6f 74 6f 20 65 72 72 6f 72 5f 6f 75 74 3b   goto error_out;
1a200 0a 20 20 7d 0a 0a 20 20 2f 2a 20 46 69 6e 64 20  .  }..  /* Find 
1a210 74 68 65 20 63 6f 6c 75 6d 6e 20 66 6f 72 20 77  the column for w
1a220 68 69 63 68 20 69 6e 66 6f 20 69 73 20 72 65 71  hich info is req
1a230 75 65 73 74 65 64 20 2a 2f 0a 20 20 69 66 28 20  uested */.  if( 
1a240 7a 43 6f 6c 75 6d 6e 4e 61 6d 65 3d 3d 30 20 29  zColumnName==0 )
1a250 7b 0a 20 20 20 20 2f 2a 20 51 75 65 72 79 20 66  {.    /* Query f
1a260 6f 72 20 65 78 69 73 74 61 6e 63 65 20 6f 66 20  or existance of 
1a270 74 61 62 6c 65 20 6f 6e 6c 79 20 2a 2f 0a 20 20  table only */.  
1a280 7d 65 6c 73 65 7b 0a 20 20 20 20 66 6f 72 28 69  }else{.    for(i
1a290 43 6f 6c 3d 30 3b 20 69 43 6f 6c 3c 70 54 61 62  Col=0; iCol<pTab
1a2a0 2d 3e 6e 43 6f 6c 3b 20 69 43 6f 6c 2b 2b 29 7b  ->nCol; iCol++){
1a2b0 0a 20 20 20 20 20 20 70 43 6f 6c 20 3d 20 26 70  .      pCol = &p
1a2c0 54 61 62 2d 3e 61 43 6f 6c 5b 69 43 6f 6c 5d 3b  Tab->aCol[iCol];
1a2d0 0a 20 20 20 20 20 20 69 66 28 20 30 3d 3d 73 71  .      if( 0==sq
1a2e0 6c 69 74 65 33 53 74 72 49 43 6d 70 28 70 43 6f  lite3StrICmp(pCo
1a2f0 6c 2d 3e 7a 4e 61 6d 65 2c 20 7a 43 6f 6c 75 6d  l->zName, zColum
1a300 6e 4e 61 6d 65 29 20 29 7b 0a 20 20 20 20 20 20  nName) ){.      
1a310 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d    break;.      }
1a320 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 69  .    }.    if( i
1a330 43 6f 6c 3d 3d 70 54 61 62 2d 3e 6e 43 6f 6c 20  Col==pTab->nCol 
1a340 29 7b 0a 20 20 20 20 20 20 69 66 28 20 48 61 73  ){.      if( Has
1a350 52 6f 77 69 64 28 70 54 61 62 29 20 26 26 20 73  Rowid(pTab) && s
1a360 71 6c 69 74 65 33 49 73 52 6f 77 69 64 28 7a 43  qlite3IsRowid(zC
1a370 6f 6c 75 6d 6e 4e 61 6d 65 29 20 29 7b 0a 20 20  olumnName) ){.  
1a380 20 20 20 20 20 20 69 43 6f 6c 20 3d 20 70 54 61        iCol = pTa
1a390 62 2d 3e 69 50 4b 65 79 3b 0a 20 20 20 20 20 20  b->iPKey;.      
1a3a0 20 20 70 43 6f 6c 20 3d 20 69 43 6f 6c 3e 3d 30    pCol = iCol>=0
1a3b0 20 3f 20 26 70 54 61 62 2d 3e 61 43 6f 6c 5b 69   ? &pTab->aCol[i
1a3c0 43 6f 6c 5d 20 3a 20 30 3b 0a 20 20 20 20 20 20  Col] : 0;.      
1a3d0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70  }else{.        p
1a3e0 54 61 62 20 3d 20 30 3b 0a 20 20 20 20 20 20 20  Tab = 0;.       
1a3f0 20 67 6f 74 6f 20 65 72 72 6f 72 5f 6f 75 74 3b   goto error_out;
1a400 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
1a410 20 7d 0a 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c   }..  /* The fol
1a420 6c 6f 77 69 6e 67 20 62 6c 6f 63 6b 20 73 74 6f  lowing block sto
1a430 72 65 73 20 74 68 65 20 6d 65 74 61 20 69 6e 66  res the meta inf
1a440 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 20 77 69  ormation that wi
1a450 6c 6c 20 62 65 20 72 65 74 75 72 6e 65 64 0a 20  ll be returned. 
1a460 20 2a 2a 20 74 6f 20 74 68 65 20 63 61 6c 6c 65   ** to the calle
1a470 72 20 69 6e 20 6c 6f 63 61 6c 20 76 61 72 69 61  r in local varia
1a480 62 6c 65 73 20 7a 44 61 74 61 54 79 70 65 2c 20  bles zDataType, 
1a490 7a 43 6f 6c 6c 53 65 71 2c 20 6e 6f 74 6e 75 6c  zCollSeq, notnul
1a4a0 6c 2c 20 70 72 69 6d 61 72 79 6b 65 79 0a 20 20  l, primarykey.  
1a4b0 2a 2a 20 61 6e 64 20 61 75 74 6f 69 6e 63 2e 20  ** and autoinc. 
1a4c0 41 74 20 74 68 69 73 20 70 6f 69 6e 74 20 74 68  At this point th
1a4d0 65 72 65 20 61 72 65 20 74 77 6f 20 70 6f 73 73  ere are two poss
1a4e0 69 62 69 6c 69 74 69 65 73 3a 0a 20 20 2a 2a 20  ibilities:.  ** 
1a4f0 0a 20 20 2a 2a 20 20 20 20 20 31 2e 20 54 68 65  .  **     1. The
1a500 20 73 70 65 63 69 66 69 65 64 20 63 6f 6c 75 6d   specified colum
1a510 6e 20 6e 61 6d 65 20 77 61 73 20 72 6f 77 69 64  n name was rowid
1a520 22 2c 20 22 6f 69 64 22 20 6f 72 20 22 5f 72 6f  ", "oid" or "_ro
1a530 77 69 64 5f 22 20 0a 20 20 2a 2a 20 20 20 20 20  wid_" .  **     
1a540 20 20 20 61 6e 64 20 74 68 65 72 65 20 69 73 20     and there is 
1a550 6e 6f 20 65 78 70 6c 69 63 69 74 6c 79 20 64 65  no explicitly de
1a560 63 6c 61 72 65 64 20 49 50 4b 20 63 6f 6c 75 6d  clared IPK colum
1a570 6e 2e 20 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20  n. .  **.  **   
1a580 20 20 32 2e 20 54 68 65 20 74 61 62 6c 65 20 69    2. The table i
1a590 73 20 6e 6f 74 20 61 20 76 69 65 77 20 61 6e 64  s not a view and
1a5a0 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65   the column name
1a5b0 20 69 64 65 6e 74 69 66 69 65 64 20 61 6e 20 0a   identified an .
1a5c0 20 20 2a 2a 20 20 20 20 20 20 20 20 65 78 70 6c    **        expl
1a5d0 69 63 69 74 6c 79 20 64 65 63 6c 61 72 65 64 20  icitly declared 
1a5e0 63 6f 6c 75 6d 6e 2e 20 43 6f 70 79 20 6d 65 74  column. Copy met
1a5f0 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72  a information fr
1a600 6f 6d 20 2a 70 43 6f 6c 2e 0a 20 20 2a 2f 20 0a  om *pCol..  */ .
1a610 20 20 69 66 28 20 70 43 6f 6c 20 29 7b 0a 20 20    if( pCol ){.  
1a620 20 20 7a 44 61 74 61 54 79 70 65 20 3d 20 70 43    zDataType = pC
1a630 6f 6c 2d 3e 7a 54 79 70 65 3b 0a 20 20 20 20 7a  ol->zType;.    z
1a640 43 6f 6c 6c 53 65 71 20 3d 20 70 43 6f 6c 2d 3e  CollSeq = pCol->
1a650 7a 43 6f 6c 6c 3b 0a 20 20 20 20 6e 6f 74 6e 75  zColl;.    notnu
1a660 6c 6c 20 3d 20 70 43 6f 6c 2d 3e 6e 6f 74 4e 75  ll = pCol->notNu
1a670 6c 6c 21 3d 30 3b 0a 20 20 20 20 70 72 69 6d 61  ll!=0;.    prima
1a680 72 79 6b 65 79 20 20 3d 20 28 70 43 6f 6c 2d 3e  rykey  = (pCol->
1a690 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c  colFlags & COLFL
1a6a0 41 47 5f 50 52 49 4d 4b 45 59 29 21 3d 30 3b 0a  AG_PRIMKEY)!=0;.
1a6b0 20 20 20 20 61 75 74 6f 69 6e 63 20 3d 20 70 54      autoinc = pT
1a6c0 61 62 2d 3e 69 50 4b 65 79 3d 3d 69 43 6f 6c 20  ab->iPKey==iCol 
1a6d0 26 26 20 28 70 54 61 62 2d 3e 74 61 62 46 6c 61  && (pTab->tabFla
1a6e0 67 73 20 26 20 54 46 5f 41 75 74 6f 69 6e 63 72  gs & TF_Autoincr
1a6f0 65 6d 65 6e 74 29 21 3d 30 3b 0a 20 20 7d 65 6c  ement)!=0;.  }el
1a700 73 65 7b 0a 20 20 20 20 7a 44 61 74 61 54 79 70  se{.    zDataTyp
1a710 65 20 3d 20 22 49 4e 54 45 47 45 52 22 3b 0a 20  e = "INTEGER";. 
1a720 20 20 20 70 72 69 6d 61 72 79 6b 65 79 20 3d 20     primarykey = 
1a730 31 3b 0a 20 20 7d 0a 20 20 69 66 28 20 21 7a 43  1;.  }.  if( !zC
1a740 6f 6c 6c 53 65 71 20 29 7b 0a 20 20 20 20 7a 43  ollSeq ){.    zC
1a750 6f 6c 6c 53 65 71 20 3d 20 22 42 49 4e 41 52 59  ollSeq = "BINARY
1a760 22 3b 0a 20 20 7d 0a 0a 65 72 72 6f 72 5f 6f 75  ";.  }..error_ou
1a770 74 3a 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65  t:.  sqlite3Btre
1a780 65 4c 65 61 76 65 41 6c 6c 28 64 62 29 3b 0a 0a  eLeaveAll(db);..
1a790 20 20 2f 2a 20 57 68 65 74 68 65 72 20 74 68 65    /* Whether the
1a7a0 20 66 75 6e 63 74 69 6f 6e 20 63 61 6c 6c 20 73   function call s
1a7b0 75 63 63 65 65 64 65 64 20 6f 72 20 66 61 69 6c  ucceeded or fail
1a7c0 65 64 2c 20 73 65 74 20 74 68 65 20 6f 75 74 70  ed, set the outp
1a7d0 75 74 20 70 61 72 61 6d 65 74 65 72 73 0a 20 20  ut parameters.  
1a7e0 2a 2a 20 74 6f 20 77 68 61 74 65 76 65 72 20 74  ** to whatever t
1a7f0 68 65 69 72 20 6c 6f 63 61 6c 20 63 6f 75 6e 74  heir local count
1a800 65 72 70 61 72 74 73 20 63 6f 6e 74 61 69 6e 2e  erparts contain.
1a810 20 49 66 20 61 6e 20 65 72 72 6f 72 20 64 69 64   If an error did
1a820 20 6f 63 63 75 72 2c 0a 20 20 2a 2a 20 74 68 69   occur,.  ** thi
1a830 73 20 68 61 73 20 74 68 65 20 65 66 66 65 63 74  s has the effect
1a840 20 6f 66 20 7a 65 72 6f 69 6e 67 20 61 6c 6c 20   of zeroing all 
1a850 6f 75 74 70 75 74 20 70 61 72 61 6d 65 74 65 72  output parameter
1a860 73 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 70 7a  s..  */.  if( pz
1a870 44 61 74 61 54 79 70 65 20 29 20 2a 70 7a 44 61  DataType ) *pzDa
1a880 74 61 54 79 70 65 20 3d 20 7a 44 61 74 61 54 79  taType = zDataTy
1a890 70 65 3b 0a 20 20 69 66 28 20 70 7a 43 6f 6c 6c  pe;.  if( pzColl
1a8a0 53 65 71 20 29 20 2a 70 7a 43 6f 6c 6c 53 65 71  Seq ) *pzCollSeq
1a8b0 20 3d 20 7a 43 6f 6c 6c 53 65 71 3b 0a 20 20 69   = zCollSeq;.  i
1a8c0 66 28 20 70 4e 6f 74 4e 75 6c 6c 20 29 20 2a 70  f( pNotNull ) *p
1a8d0 4e 6f 74 4e 75 6c 6c 20 3d 20 6e 6f 74 6e 75 6c  NotNull = notnul
1a8e0 6c 3b 0a 20 20 69 66 28 20 70 50 72 69 6d 61 72  l;.  if( pPrimar
1a8f0 79 4b 65 79 20 29 20 2a 70 50 72 69 6d 61 72 79  yKey ) *pPrimary
1a900 4b 65 79 20 3d 20 70 72 69 6d 61 72 79 6b 65 79  Key = primarykey
1a910 3b 0a 20 20 69 66 28 20 70 41 75 74 6f 69 6e 63  ;.  if( pAutoinc
1a920 20 29 20 2a 70 41 75 74 6f 69 6e 63 20 3d 20 61   ) *pAutoinc = a
1a930 75 74 6f 69 6e 63 3b 0a 0a 20 20 69 66 28 20 53  utoinc;..  if( S
1a940 51 4c 49 54 45 5f 4f 4b 3d 3d 72 63 20 26 26 20  QLITE_OK==rc && 
1a950 21 70 54 61 62 20 29 7b 0a 20 20 20 20 73 71 6c  !pTab ){.    sql
1a960 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 7a  ite3DbFree(db, z
1a970 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 7a 45 72  ErrMsg);.    zEr
1a980 72 4d 73 67 20 3d 20 73 71 6c 69 74 65 33 4d 50  rMsg = sqlite3MP
1a990 72 69 6e 74 66 28 64 62 2c 20 22 6e 6f 20 73 75  rintf(db, "no su
1a9a0 63 68 20 74 61 62 6c 65 20 63 6f 6c 75 6d 6e 3a  ch table column:
1a9b0 20 25 73 2e 25 73 22 2c 20 7a 54 61 62 6c 65 4e   %s.%s", zTableN
1a9c0 61 6d 65 2c 0a 20 20 20 20 20 20 20 20 7a 43 6f  ame,.        zCo
1a9d0 6c 75 6d 6e 4e 61 6d 65 29 3b 0a 20 20 20 20 72  lumnName);.    r
1a9e0 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c = SQLITE_ERROR
1a9f0 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 45  ;.  }.  sqlite3E
1aa00 72 72 6f 72 57 69 74 68 4d 73 67 28 64 62 2c 20  rrorWithMsg(db, 
1aa10 72 63 2c 20 28 7a 45 72 72 4d 73 67 3f 22 25 73  rc, (zErrMsg?"%s
1aa20 22 3a 30 29 2c 20 7a 45 72 72 4d 73 67 29 3b 0a  ":0), zErrMsg);.
1aa30 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
1aa40 64 62 2c 20 7a 45 72 72 4d 73 67 29 3b 0a 20 20  db, zErrMsg);.  
1aa50 72 63 20 3d 20 73 71 6c 69 74 65 33 41 70 69 45  rc = sqlite3ApiE
1aa60 78 69 74 28 64 62 2c 20 72 63 29 3b 0a 20 20 73  xit(db, rc);.  s
1aa70 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61  qlite3_mutex_lea
1aa80 76 65 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20  ve(db->mutex);. 
1aa90 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f   return rc;.}../
1aaa0 2a 0a 2a 2a 20 53 6c 65 65 70 20 66 6f 72 20 61  *.** Sleep for a
1aab0 20 6c 69 74 74 6c 65 20 77 68 69 6c 65 2e 20 20   little while.  
1aac0 52 65 74 75 72 6e 20 74 68 65 20 61 6d 6f 75 6e  Return the amoun
1aad0 74 20 6f 66 20 74 69 6d 65 20 73 6c 65 70 74 2e  t of time slept.
1aae0 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f  .*/.int sqlite3_
1aaf0 73 6c 65 65 70 28 69 6e 74 20 6d 73 29 7b 0a 20  sleep(int ms){. 
1ab00 20 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 70 56   sqlite3_vfs *pV
1ab10 66 73 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20  fs;.  int rc;.  
1ab20 70 56 66 73 20 3d 20 73 71 6c 69 74 65 33 5f 76  pVfs = sqlite3_v
1ab30 66 73 5f 66 69 6e 64 28 30 29 3b 0a 20 20 69 66  fs_find(0);.  if
1ab40 28 20 70 56 66 73 3d 3d 30 20 29 20 72 65 74 75  ( pVfs==0 ) retu
1ab50 72 6e 20 30 3b 0a 0a 20 20 2f 2a 20 54 68 69 73  rn 0;..  /* This
1ab60 20 66 75 6e 63 74 69 6f 6e 20 77 6f 72 6b 73 20   function works 
1ab70 69 6e 20 6d 69 6c 6c 69 73 65 63 6f 6e 64 73 2c  in milliseconds,
1ab80 20 62 75 74 20 74 68 65 20 75 6e 64 65 72 6c 79   but the underly
1ab90 69 6e 67 20 4f 73 53 6c 65 65 70 28 29 20 0a 20  ing OsSleep() . 
1aba0 20 2a 2a 20 41 50 49 20 75 73 65 73 20 6d 69 63   ** API uses mic
1abb0 72 6f 73 65 63 6f 6e 64 73 2e 20 48 65 6e 63 65  roseconds. Hence
1abc0 20 74 68 65 20 31 30 30 30 27 73 2e 0a 20 20 2a   the 1000's..  *
1abd0 2f 0a 20 20 72 63 20 3d 20 28 73 71 6c 69 74 65  /.  rc = (sqlite
1abe0 33 4f 73 53 6c 65 65 70 28 70 56 66 73 2c 20 31  3OsSleep(pVfs, 1
1abf0 30 30 30 2a 6d 73 29 2f 31 30 30 30 29 3b 0a 20  000*ms)/1000);. 
1ac00 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f   return rc;.}../
1ac10 2a 0a 2a 2a 20 45 6e 61 62 6c 65 20 6f 72 20 64  *.** Enable or d
1ac20 69 73 61 62 6c 65 20 74 68 65 20 65 78 74 65 6e  isable the exten
1ac30 64 65 64 20 72 65 73 75 6c 74 20 63 6f 64 65 73  ded result codes
1ac40 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
1ac50 5f 65 78 74 65 6e 64 65 64 5f 72 65 73 75 6c 74  _extended_result
1ac60 5f 63 6f 64 65 73 28 73 71 6c 69 74 65 33 20 2a  _codes(sqlite3 *
1ac70 64 62 2c 20 69 6e 74 20 6f 6e 6f 66 66 29 7b 0a  db, int onoff){.
1ac80 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
1ac90 41 42 4c 45 5f 41 50 49 5f 41 52 4d 4f 52 0a 20  ABLE_API_ARMOR. 
1aca0 20 69 66 28 20 21 73 71 6c 69 74 65 33 53 61 66   if( !sqlite3Saf
1acb0 65 74 79 43 68 65 63 6b 4f 6b 28 64 62 29 20 29  etyCheckOk(db) )
1acc0 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d   return SQLITE_M
1acd0 49 53 55 53 45 5f 42 4b 50 54 3b 0a 23 65 6e 64  ISUSE_BKPT;.#end
1ace0 69 66 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  if.  sqlite3_mut
1acf0 65 78 5f 65 6e 74 65 72 28 64 62 2d 3e 6d 75 74  ex_enter(db->mut
1ad00 65 78 29 3b 0a 20 20 64 62 2d 3e 65 72 72 4d 61  ex);.  db->errMa
1ad10 73 6b 20 3d 20 6f 6e 6f 66 66 20 3f 20 30 78 66  sk = onoff ? 0xf
1ad20 66 66 66 66 66 66 66 20 3a 20 30 78 66 66 3b 0a  fffffff : 0xff;.
1ad30 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f    sqlite3_mutex_
1ad40 6c 65 61 76 65 28 64 62 2d 3e 6d 75 74 65 78 29  leave(db->mutex)
1ad50 3b 0a 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54  ;.  return SQLIT
1ad60 45 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49  E_OK;.}../*.** I
1ad70 6e 76 6f 6b 65 20 74 68 65 20 78 46 69 6c 65 43  nvoke the xFileC
1ad80 6f 6e 74 72 6f 6c 20 6d 65 74 68 6f 64 20 6f 6e  ontrol method on
1ad90 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 64 61   a particular da
1ada0 74 61 62 61 73 65 2e 0a 2a 2f 0a 69 6e 74 20 73  tabase..*/.int s
1adb0 71 6c 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e 74  qlite3_file_cont
1adc0 72 6f 6c 28 73 71 6c 69 74 65 33 20 2a 64 62 2c  rol(sqlite3 *db,
1add0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62   const char *zDb
1ade0 4e 61 6d 65 2c 20 69 6e 74 20 6f 70 2c 20 76 6f  Name, int op, vo
1adf0 69 64 20 2a 70 41 72 67 29 7b 0a 20 20 69 6e 74  id *pArg){.  int
1ae00 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52   rc = SQLITE_ERR
1ae10 4f 52 3b 0a 20 20 42 74 72 65 65 20 2a 70 42 74  OR;.  Btree *pBt
1ae20 72 65 65 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c  ree;..#ifdef SQL
1ae30 49 54 45 5f 45 4e 41 42 4c 45 5f 41 50 49 5f 41  ITE_ENABLE_API_A
1ae40 52 4d 4f 52 0a 20 20 69 66 28 20 21 73 71 6c 69  RMOR.  if( !sqli
1ae50 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 4f 6b  te3SafetyCheckOk
1ae60 28 64 62 29 20 29 20 72 65 74 75 72 6e 20 53 51  (db) ) return SQ
1ae70 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54  LITE_MISUSE_BKPT
1ae80 3b 0a 23 65 6e 64 69 66 0a 20 20 73 71 6c 69 74  ;.#endif.  sqlit
1ae90 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72 28 64  e3_mutex_enter(d
1aea0 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 70 42 74  b->mutex);.  pBt
1aeb0 72 65 65 20 3d 20 73 71 6c 69 74 65 33 44 62 4e  ree = sqlite3DbN
1aec0 61 6d 65 54 6f 42 74 72 65 65 28 64 62 2c 20 7a  ameToBtree(db, z
1aed0 44 62 4e 61 6d 65 29 3b 0a 20 20 69 66 28 20 70  DbName);.  if( p
1aee0 42 74 72 65 65 20 29 7b 0a 20 20 20 20 50 61 67  Btree ){.    Pag
1aef0 65 72 20 2a 70 50 61 67 65 72 3b 0a 20 20 20 20  er *pPager;.    
1af00 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 66 64  sqlite3_file *fd
1af10 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74 72  ;.    sqlite3Btr
1af20 65 65 45 6e 74 65 72 28 70 42 74 72 65 65 29 3b  eeEnter(pBtree);
1af30 0a 20 20 20 20 70 50 61 67 65 72 20 3d 20 73 71  .    pPager = sq
1af40 6c 69 74 65 33 42 74 72 65 65 50 61 67 65 72 28  lite3BtreePager(
1af50 70 42 74 72 65 65 29 3b 0a 20 20 20 20 61 73 73  pBtree);.    ass
1af60 65 72 74 28 20 70 50 61 67 65 72 21 3d 30 20 29  ert( pPager!=0 )
1af70 3b 0a 20 20 20 20 66 64 20 3d 20 73 71 6c 69 74  ;.    fd = sqlit
1af80 65 33 50 61 67 65 72 46 69 6c 65 28 70 50 61 67  e3PagerFile(pPag
1af90 65 72 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  er);.    assert(
1afa0 20 66 64 21 3d 30 20 29 3b 0a 20 20 20 20 69 66   fd!=0 );.    if
1afb0 28 20 6f 70 3d 3d 53 51 4c 49 54 45 5f 46 43 4e  ( op==SQLITE_FCN
1afc0 54 4c 5f 46 49 4c 45 5f 50 4f 49 4e 54 45 52 20  TL_FILE_POINTER 
1afd0 29 7b 0a 20 20 20 20 20 20 2a 28 73 71 6c 69 74  ){.      *(sqlit
1afe0 65 33 5f 66 69 6c 65 2a 2a 29 70 41 72 67 20 3d  e3_file**)pArg =
1aff0 20 66 64 3b 0a 20 20 20 20 20 20 72 63 20 3d 20   fd;.      rc = 
1b000 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 7d  SQLITE_OK;.    }
1b010 65 6c 73 65 20 69 66 28 20 66 64 2d 3e 70 4d 65  else if( fd->pMe
1b020 74 68 6f 64 73 20 29 7b 0a 20 20 20 20 20 20 72  thods ){.      r
1b030 63 20 3d 20 73 71 6c 69 74 65 33 4f 73 46 69 6c  c = sqlite3OsFil
1b040 65 43 6f 6e 74 72 6f 6c 28 66 64 2c 20 6f 70 2c  eControl(fd, op,
1b050 20 70 41 72 67 29 3b 0a 20 20 20 20 7d 65 6c 73   pArg);.    }els
1b060 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  e{.      rc = SQ
1b070 4c 49 54 45 5f 4e 4f 54 46 4f 55 4e 44 3b 0a 20  LITE_NOTFOUND;. 
1b080 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33     }.    sqlite3
1b090 42 74 72 65 65 4c 65 61 76 65 28 70 42 74 72 65  BtreeLeave(pBtre
1b0a0 65 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65  e);.  }.  sqlite
1b0b0 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 64 62  3_mutex_leave(db
1b0c0 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 72 65 74 75  ->mutex);.  retu
1b0d0 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  rn rc;.}../*.** 
1b0e0 49 6e 74 65 72 66 61 63 65 20 74 6f 20 74 68 65  Interface to the
1b0f0 20 74 65 73 74 69 6e 67 20 6c 6f 67 69 63 2e 0a   testing logic..
1b100 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 74  */.int sqlite3_t
1b110 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 69 6e 74 20  est_control(int 
1b120 6f 70 2c 20 2e 2e 2e 29 7b 0a 20 20 69 6e 74 20  op, ...){.  int 
1b130 72 63 20 3d 20 30 3b 0a 23 69 66 64 65 66 20 53  rc = 0;.#ifdef S
1b140 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54  QLITE_OMIT_BUILT
1b150 49 4e 5f 54 45 53 54 0a 20 20 55 4e 55 53 45 44  IN_TEST.  UNUSED
1b160 5f 50 41 52 41 4d 45 54 45 52 28 6f 70 29 3b 0a  _PARAMETER(op);.
1b170 23 65 6c 73 65 0a 20 20 76 61 5f 6c 69 73 74 20  #else.  va_list 
1b180 61 70 3b 0a 20 20 76 61 5f 73 74 61 72 74 28 61  ap;.  va_start(a
1b190 70 2c 20 6f 70 29 3b 0a 20 20 73 77 69 74 63 68  p, op);.  switch
1b1a0 28 20 6f 70 20 29 7b 0a 0a 20 20 20 20 2f 2a 0a  ( op ){..    /*.
1b1b0 20 20 20 20 2a 2a 20 53 61 76 65 20 74 68 65 20      ** Save the 
1b1c0 63 75 72 72 65 6e 74 20 73 74 61 74 65 20 6f 66  current state of
1b1d0 20 74 68 65 20 50 52 4e 47 2e 0a 20 20 20 20 2a   the PRNG..    *
1b1e0 2f 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  /.    case SQLIT
1b1f0 45 5f 54 45 53 54 43 54 52 4c 5f 50 52 4e 47 5f  E_TESTCTRL_PRNG_
1b200 53 41 56 45 3a 20 7b 0a 20 20 20 20 20 20 73 71  SAVE: {.      sq
1b210 6c 69 74 65 33 50 72 6e 67 53 61 76 65 53 74 61  lite3PrngSaveSta
1b220 74 65 28 29 3b 0a 20 20 20 20 20 20 62 72 65 61  te();.      brea
1b230 6b 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a  k;.    }..    /*
1b240 0a 20 20 20 20 2a 2a 20 52 65 73 74 6f 72 65 20  .    ** Restore 
1b250 74 68 65 20 73 74 61 74 65 20 6f 66 20 74 68 65  the state of the
1b260 20 50 52 4e 47 20 74 6f 20 74 68 65 20 6c 61 73   PRNG to the las
1b270 74 20 73 74 61 74 65 20 73 61 76 65 64 20 75 73  t state saved us
1b280 69 6e 67 0a 20 20 20 20 2a 2a 20 50 52 4e 47 5f  ing.    ** PRNG_
1b290 53 41 56 45 2e 20 20 49 66 20 50 52 4e 47 5f 53  SAVE.  If PRNG_S
1b2a0 41 56 45 20 68 61 73 20 6e 65 76 65 72 20 62 65  AVE has never be
1b2b0 66 6f 72 65 20 62 65 65 6e 20 63 61 6c 6c 65 64  fore been called
1b2c0 2c 20 74 68 65 6e 0a 20 20 20 20 2a 2a 20 74 68  , then.    ** th
1b2d0 69 73 20 76 65 72 62 20 61 63 74 73 20 6c 69 6b  is verb acts lik
1b2e0 65 20 50 52 4e 47 5f 52 45 53 45 54 2e 0a 20 20  e PRNG_RESET..  
1b2f0 20 20 2a 2f 0a 20 20 20 20 63 61 73 65 20 53 51    */.    case SQ
1b300 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 50 52  LITE_TESTCTRL_PR
1b310 4e 47 5f 52 45 53 54 4f 52 45 3a 20 7b 0a 20 20  NG_RESTORE: {.  
1b320 20 20 20 20 73 71 6c 69 74 65 33 50 72 6e 67 52      sqlite3PrngR
1b330 65 73 74 6f 72 65 53 74 61 74 65 28 29 3b 0a 20  estoreState();. 
1b340 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
1b350 7d 0a 0a 20 20 20 20 2f 2a 0a 20 20 20 20 2a 2a  }..    /*.    **
1b360 20 52 65 73 65 74 20 74 68 65 20 50 52 4e 47 20   Reset the PRNG 
1b370 62 61 63 6b 20 74 6f 20 69 74 73 20 75 6e 69 6e  back to its unin
1b380 69 74 69 61 6c 69 7a 65 64 20 73 74 61 74 65 2e  itialized state.
1b390 20 20 54 68 65 20 6e 65 78 74 20 63 61 6c 6c 0a    The next call.
1b3a0 20 20 20 20 2a 2a 20 74 6f 20 73 71 6c 69 74 65      ** to sqlite
1b3b0 33 5f 72 61 6e 64 6f 6d 6e 65 73 73 28 29 20 77  3_randomness() w
1b3c0 69 6c 6c 20 72 65 73 65 65 64 20 74 68 65 20 50  ill reseed the P
1b3d0 52 4e 47 20 75 73 69 6e 67 20 61 20 73 69 6e 67  RNG using a sing
1b3e0 6c 65 20 63 61 6c 6c 0a 20 20 20 20 2a 2a 20 74  le call.    ** t
1b3f0 6f 20 74 68 65 20 78 52 61 6e 64 6f 6d 6e 65 73  o the xRandomnes
1b400 73 20 6d 65 74 68 6f 64 20 6f 66 20 74 68 65 20  s method of the 
1b410 64 65 66 61 75 6c 74 20 56 46 53 2e 0a 20 20 20  default VFS..   
1b420 20 2a 2f 0a 20 20 20 20 63 61 73 65 20 53 51 4c   */.    case SQL
1b430 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 50 52 4e  ITE_TESTCTRL_PRN
1b440 47 5f 52 45 53 45 54 3a 20 7b 0a 20 20 20 20 20  G_RESET: {.     
1b450 20 73 71 6c 69 74 65 33 5f 72 61 6e 64 6f 6d 6e   sqlite3_randomn
1b460 65 73 73 28 30 2c 30 29 3b 0a 20 20 20 20 20 20  ess(0,0);.      
1b470 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 0a 20 20  break;.    }..  
1b480 20 20 2f 2a 0a 20 20 20 20 2a 2a 20 20 73 71 6c    /*.    **  sql
1b490 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f  ite3_test_contro
1b4a0 6c 28 42 49 54 56 45 43 5f 54 45 53 54 2c 20 73  l(BITVEC_TEST, s
1b4b0 69 7a 65 2c 20 70 72 6f 67 72 61 6d 29 0a 20 20  ize, program).  
1b4c0 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 52 75 6e 20    **.    ** Run 
1b4d0 61 20 74 65 73 74 20 61 67 61 69 6e 73 74 20 61  a test against a
1b4e0 20 42 69 74 76 65 63 20 6f 62 6a 65 63 74 20 6f   Bitvec object o
1b4f0 66 20 73 69 7a 65 2e 20 20 54 68 65 20 70 72 6f  f size.  The pro
1b500 67 72 61 6d 20 61 72 67 75 6d 65 6e 74 0a 20 20  gram argument.  
1b510 20 20 2a 2a 20 69 73 20 61 6e 20 61 72 72 61 79    ** is an array
1b520 20 6f 66 20 69 6e 74 65 67 65 72 73 20 74 68 61   of integers tha
1b530 74 20 64 65 66 69 6e 65 73 20 74 68 65 20 74 65  t defines the te
1b540 73 74 2e 20 20 52 65 74 75 72 6e 20 2d 31 20 6f  st.  Return -1 o
1b550 6e 20 61 0a 20 20 20 20 2a 2a 20 6d 65 6d 6f 72  n a.    ** memor
1b560 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 65 72 72  y allocation err
1b570 6f 72 2c 20 30 20 6f 6e 20 73 75 63 63 65 73 73  or, 0 on success
1b580 2c 20 6f 72 20 6e 6f 6e 2d 7a 65 72 6f 20 66 6f  , or non-zero fo
1b590 72 20 61 6e 20 65 72 72 6f 72 2e 0a 20 20 20 20  r an error..    
1b5a0 2a 2a 20 53 65 65 20 74 68 65 20 73 71 6c 69 74  ** See the sqlit
1b5b0 65 33 42 69 74 76 65 63 42 75 69 6c 74 69 6e 54  e3BitvecBuiltinT
1b5c0 65 73 74 28 29 20 66 6f 72 20 61 64 64 69 74 69  est() for additi
1b5d0 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
1b5e0 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 63 61 73  ..    */.    cas
1b5f0 65 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52  e SQLITE_TESTCTR
1b600 4c 5f 42 49 54 56 45 43 5f 54 45 53 54 3a 20 7b  L_BITVEC_TEST: {
1b610 0a 20 20 20 20 20 20 69 6e 74 20 73 7a 20 3d 20  .      int sz = 
1b620 76 61 5f 61 72 67 28 61 70 2c 20 69 6e 74 29 3b  va_arg(ap, int);
1b630 0a 20 20 20 20 20 20 69 6e 74 20 2a 61 50 72 6f  .      int *aPro
1b640 67 20 3d 20 76 61 5f 61 72 67 28 61 70 2c 20 69  g = va_arg(ap, i
1b650 6e 74 2a 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  nt*);.      rc =
1b660 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 42 75   sqlite3BitvecBu
1b670 69 6c 74 69 6e 54 65 73 74 28 73 7a 2c 20 61 50  iltinTest(sz, aP
1b680 72 6f 67 29 3b 0a 20 20 20 20 20 20 62 72 65 61  rog);.      brea
1b690 6b 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a  k;.    }..    /*
1b6a0 0a 20 20 20 20 2a 2a 20 20 73 71 6c 69 74 65 33  .    **  sqlite3
1b6b0 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 46 41  _test_control(FA
1b6c0 55 4c 54 5f 49 4e 53 54 41 4c 4c 2c 20 78 43 61  ULT_INSTALL, xCa
1b6d0 6c 6c 62 61 63 6b 29 0a 20 20 20 20 2a 2a 0a 20  llback).    **. 
1b6e0 20 20 20 2a 2a 20 41 72 72 61 6e 67 65 20 74 6f     ** Arrange to
1b6f0 20 69 6e 76 6f 6b 65 20 78 43 61 6c 6c 62 61 63   invoke xCallbac
1b700 6b 28 29 20 77 68 65 6e 65 76 65 72 20 73 71 6c  k() whenever sql
1b710 69 74 65 33 46 61 75 6c 74 53 69 6d 28 29 20 69  ite3FaultSim() i
1b720 73 20 63 61 6c 6c 65 64 2c 0a 20 20 20 20 2a 2a  s called,.    **
1b730 20 69 66 20 78 43 61 6c 6c 62 61 63 6b 20 69 73   if xCallback is
1b740 20 6e 6f 74 20 4e 55 4c 4c 2e 0a 20 20 20 20 2a   not NULL..    *
1b750 2a 0a 20 20 20 20 2a 2a 20 41 73 20 61 20 74 65  *.    ** As a te
1b760 73 74 20 6f 66 20 74 68 65 20 66 61 75 6c 74 20  st of the fault 
1b770 73 69 6d 75 6c 61 74 6f 72 20 6d 65 63 68 61 6e  simulator mechan
1b780 69 73 6d 20 69 74 73 65 6c 66 2c 20 73 71 6c 69  ism itself, sqli
1b790 74 65 33 46 61 75 6c 74 53 69 6d 28 30 29 0a 20  te3FaultSim(0). 
1b7a0 20 20 20 2a 2a 20 69 73 20 63 61 6c 6c 65 64 20     ** is called 
1b7b0 69 6d 6d 65 64 69 61 74 65 6c 79 20 61 66 74 65  immediately afte
1b7c0 72 20 69 6e 73 74 61 6c 6c 69 6e 67 20 74 68 65  r installing the
1b7d0 20 6e 65 77 20 63 61 6c 6c 62 61 63 6b 20 61 6e   new callback an
1b7e0 64 20 74 68 65 20 72 65 74 75 72 6e 0a 20 20 20  d the return.   
1b7f0 20 2a 2a 20 76 61 6c 75 65 20 66 72 6f 6d 20 73   ** value from s
1b800 71 6c 69 74 65 33 46 61 75 6c 74 53 69 6d 28 30  qlite3FaultSim(0
1b810 29 20 62 65 63 6f 6d 65 73 20 74 68 65 20 72 65  ) becomes the re
1b820 74 75 72 6e 20 66 72 6f 6d 0a 20 20 20 20 2a 2a  turn from.    **
1b830 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f   sqlite3_test_co
1b840 6e 74 72 6f 6c 28 29 2e 0a 20 20 20 20 2a 2f 0a  ntrol()..    */.
1b850 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
1b860 54 45 53 54 43 54 52 4c 5f 46 41 55 4c 54 5f 49  TESTCTRL_FAULT_I
1b870 4e 53 54 41 4c 4c 3a 20 7b 0a 20 20 20 20 20 20  NSTALL: {.      
1b880 2f 2a 20 4d 53 56 43 20 69 73 20 70 69 63 6b 79  /* MSVC is picky
1b890 20 61 62 6f 75 74 20 70 75 6c 6c 69 6e 67 20 66   about pulling f
1b8a0 75 6e 63 20 70 74 72 73 20 66 72 6f 6d 20 76 61  unc ptrs from va
1b8b0 20 6c 69 73 74 73 2e 0a 20 20 20 20 20 20 2a 2a   lists..      **
1b8c0 20 68 74 74 70 3a 2f 2f 73 75 70 70 6f 72 74 2e   http://support.
1b8d0 6d 69 63 72 6f 73 6f 66 74 2e 63 6f 6d 2f 6b 62  microsoft.com/kb
1b8e0 2f 34 37 39 36 31 0a 20 20 20 20 20 20 2a 2a 20  /47961.      ** 
1b8f0 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e  sqlite3GlobalCon
1b900 66 69 67 2e 78 54 65 73 74 43 61 6c 6c 62 61 63  fig.xTestCallbac
1b910 6b 20 3d 20 76 61 5f 61 72 67 28 61 70 2c 20 69  k = va_arg(ap, i
1b920 6e 74 28 2a 29 28 69 6e 74 29 29 3b 0a 20 20 20  nt(*)(int));.   
1b930 20 20 20 2a 2f 0a 20 20 20 20 20 20 74 79 70 65     */.      type
1b940 64 65 66 20 69 6e 74 28 2a 54 45 53 54 43 41 4c  def int(*TESTCAL
1b950 4c 42 41 43 4b 46 55 4e 43 5f 74 29 28 69 6e 74  LBACKFUNC_t)(int
1b960 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
1b970 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78 54 65  GlobalConfig.xTe
1b980 73 74 43 61 6c 6c 62 61 63 6b 20 3d 20 76 61 5f  stCallback = va_
1b990 61 72 67 28 61 70 2c 20 54 45 53 54 43 41 4c 4c  arg(ap, TESTCALL
1b9a0 42 41 43 4b 46 55 4e 43 5f 74 29 3b 0a 20 20 20  BACKFUNC_t);.   
1b9b0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 46     rc = sqlite3F
1b9c0 61 75 6c 74 53 69 6d 28 30 29 3b 0a 20 20 20 20  aultSim(0);.    
1b9d0 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 0a    break;.    }..
1b9e0 20 20 20 20 2f 2a 0a 20 20 20 20 2a 2a 20 20 73      /*.    **  s
1b9f0 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74  qlite3_test_cont
1ba00 72 6f 6c 28 42 45 4e 49 47 4e 5f 4d 41 4c 4c 4f  rol(BENIGN_MALLO
1ba10 43 5f 48 4f 4f 4b 53 2c 20 78 42 65 67 69 6e 2c  C_HOOKS, xBegin,
1ba20 20 78 45 6e 64 29 0a 20 20 20 20 2a 2a 0a 20 20   xEnd).    **.  
1ba30 20 20 2a 2a 20 52 65 67 69 73 74 65 72 20 68 6f    ** Register ho
1ba40 6f 6b 73 20 74 6f 20 63 61 6c 6c 20 74 6f 20 69  oks to call to i
1ba50 6e 64 69 63 61 74 65 20 77 68 69 63 68 20 6d 61  ndicate which ma
1ba60 6c 6c 6f 63 28 29 20 66 61 69 6c 75 72 65 73 20  lloc() failures 
1ba70 0a 20 20 20 20 2a 2a 20 61 72 65 20 62 65 6e 69  .    ** are beni
1ba80 67 6e 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 63  gn..    */.    c
1ba90 61 73 65 20 53 51 4c 49 54 45 5f 54 45 53 54 43  ase SQLITE_TESTC
1baa0 54 52 4c 5f 42 45 4e 49 47 4e 5f 4d 41 4c 4c 4f  TRL_BENIGN_MALLO
1bab0 43 5f 48 4f 4f 4b 53 3a 20 7b 0a 20 20 20 20 20  C_HOOKS: {.     
1bac0 20 74 79 70 65 64 65 66 20 76 6f 69 64 20 28 2a   typedef void (*
1bad0 76 6f 69 64 5f 66 75 6e 63 74 69 6f 6e 29 28 76  void_function)(v
1bae0 6f 69 64 29 3b 0a 20 20 20 20 20 20 76 6f 69 64  oid);.      void
1baf0 5f 66 75 6e 63 74 69 6f 6e 20 78 42 65 6e 69 67  _function xBenig
1bb00 6e 42 65 67 69 6e 3b 0a 20 20 20 20 20 20 76 6f  nBegin;.      vo
1bb10 69 64 5f 66 75 6e 63 74 69 6f 6e 20 78 42 65 6e  id_function xBen
1bb20 69 67 6e 45 6e 64 3b 0a 20 20 20 20 20 20 78 42  ignEnd;.      xB
1bb30 65 6e 69 67 6e 42 65 67 69 6e 20 3d 20 76 61 5f  enignBegin = va_
1bb40 61 72 67 28 61 70 2c 20 76 6f 69 64 5f 66 75 6e  arg(ap, void_fun
1bb50 63 74 69 6f 6e 29 3b 0a 20 20 20 20 20 20 78 42  ction);.      xB
1bb60 65 6e 69 67 6e 45 6e 64 20 3d 20 76 61 5f 61 72  enignEnd = va_ar
1bb70 67 28 61 70 2c 20 76 6f 69 64 5f 66 75 6e 63 74  g(ap, void_funct
1bb80 69 6f 6e 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  ion);.      sqli
1bb90 74 65 33 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 48  te3BenignMallocH
1bba0 6f 6f 6b 73 28 78 42 65 6e 69 67 6e 42 65 67 69  ooks(xBenignBegi
1bbb0 6e 2c 20 78 42 65 6e 69 67 6e 45 6e 64 29 3b 0a  n, xBenignEnd);.
1bbc0 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
1bbd0 20 7d 0a 0a 20 20 20 20 2f 2a 0a 20 20 20 20 2a   }..    /*.    *
1bbe0 2a 20 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f  *  sqlite3_test_
1bbf0 63 6f 6e 74 72 6f 6c 28 53 51 4c 49 54 45 5f 54  control(SQLITE_T
1bc00 45 53 54 43 54 52 4c 5f 50 45 4e 44 49 4e 47 5f  ESTCTRL_PENDING_
1bc10 42 59 54 45 2c 20 75 6e 73 69 67 6e 65 64 20 69  BYTE, unsigned i
1bc20 6e 74 20 58 29 0a 20 20 20 20 2a 2a 0a 20 20 20  nt X).    **.   
1bc30 20 2a 2a 20 53 65 74 20 74 68 65 20 50 45 4e 44   ** Set the PEND
1bc40 49 4e 47 20 62 79 74 65 20 74 6f 20 74 68 65 20  ING byte to the 
1bc50 76 61 6c 75 65 20 69 6e 20 74 68 65 20 61 72 67  value in the arg
1bc60 75 6d 65 6e 74 2c 20 69 66 20 58 3e 30 2e 0a 20  ument, if X>0.. 
1bc70 20 20 20 2a 2a 20 4d 61 6b 65 20 6e 6f 20 63 68     ** Make no ch
1bc80 61 6e 67 65 73 20 69 66 20 58 3d 3d 30 2e 20 20  anges if X==0.  
1bc90 52 65 74 75 72 6e 20 74 68 65 20 76 61 6c 75 65  Return the value
1bca0 20 6f 66 20 74 68 65 20 70 65 6e 64 69 6e 67 20   of the pending 
1bcb0 62 79 74 65 0a 20 20 20 20 2a 2a 20 61 73 20 69  byte.    ** as i
1bcc0 74 20 65 78 69 73 74 69 6e 67 20 62 65 66 6f 72  t existing befor
1bcd0 65 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 77  e this routine w
1bce0 61 73 20 63 61 6c 6c 65 64 2e 0a 20 20 20 20 2a  as called..    *
1bcf0 2a 0a 20 20 20 20 2a 2a 20 49 4d 50 4f 52 54 41  *.    ** IMPORTA
1bd00 4e 54 3a 20 20 43 68 61 6e 67 69 6e 67 20 74 68  NT:  Changing th
1bd10 65 20 50 45 4e 44 49 4e 47 20 62 79 74 65 20 66  e PENDING byte f
1bd20 72 6f 6d 20 30 78 34 30 30 30 30 30 30 30 20 72  rom 0x40000000 r
1bd30 65 73 75 6c 74 73 20 69 6e 0a 20 20 20 20 2a 2a  esults in.    **
1bd40 20 61 6e 20 69 6e 63 6f 6d 70 61 74 69 62 6c 65   an incompatible
1bd50 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 66   database file f
1bd60 6f 72 6d 61 74 2e 20 20 43 68 61 6e 67 69 6e 67  ormat.  Changing
1bd70 20 74 68 65 20 50 45 4e 44 49 4e 47 20 62 79 74   the PENDING byt
1bd80 65 0a 20 20 20 20 2a 2a 20 77 68 69 6c 65 20 61  e.    ** while a
1bd90 6e 79 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  ny database conn
1bda0 65 63 74 69 6f 6e 20 69 73 20 6f 70 65 6e 20 72  ection is open r
1bdb0 65 73 75 6c 74 73 20 69 6e 20 75 6e 64 65 66 69  esults in undefi
1bdc0 6e 65 64 20 61 6e 64 0a 20 20 20 20 2a 2a 20 64  ned and.    ** d
1bdd0 65 6c 65 74 65 72 69 6f 75 73 20 62 65 68 61 76  eleterious behav
1bde0 69 6f 72 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  ior..    */.    
1bdf0 63 61 73 65 20 53 51 4c 49 54 45 5f 54 45 53 54  case SQLITE_TEST
1be00 43 54 52 4c 5f 50 45 4e 44 49 4e 47 5f 42 59 54  CTRL_PENDING_BYT
1be10 45 3a 20 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  E: {.      rc = 
1be20 50 45 4e 44 49 4e 47 5f 42 59 54 45 3b 0a 23 69  PENDING_BYTE;.#i
1be30 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
1be40 54 5f 57 53 44 0a 20 20 20 20 20 20 7b 0a 20 20  T_WSD.      {.  
1be50 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69        unsigned i
1be60 6e 74 20 6e 65 77 56 61 6c 20 3d 20 76 61 5f 61  nt newVal = va_a
1be70 72 67 28 61 70 2c 20 75 6e 73 69 67 6e 65 64 20  rg(ap, unsigned 
1be80 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 69 66  int);.        if
1be90 28 20 6e 65 77 56 61 6c 20 29 20 73 71 6c 69 74  ( newVal ) sqlit
1bea0 65 33 50 65 6e 64 69 6e 67 42 79 74 65 20 3d 20  e3PendingByte = 
1beb0 6e 65 77 56 61 6c 3b 0a 20 20 20 20 20 20 7d 0a  newVal;.      }.
1bec0 23 65 6e 64 69 66 0a 20 20 20 20 20 20 62 72 65  #endif.      bre
1bed0 61 6b 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f  ak;.    }..    /
1bee0 2a 0a 20 20 20 20 2a 2a 20 20 73 71 6c 69 74 65  *.    **  sqlite
1bef0 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 53  3_test_control(S
1bf00 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 41  QLITE_TESTCTRL_A
1bf10 53 53 45 52 54 2c 20 69 6e 74 20 58 29 0a 20 20  SSERT, int X).  
1bf20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 54 68 69 73    **.    ** This
1bf30 20 61 63 74 69 6f 6e 20 70 72 6f 76 69 64 65 73   action provides
1bf40 20 61 20 72 75 6e 2d 74 69 6d 65 20 74 65 73 74   a run-time test
1bf50 20 74 6f 20 73 65 65 20 77 68 65 74 68 65 72 20   to see whether 
1bf60 6f 72 20 6e 6f 74 0a 20 20 20 20 2a 2a 20 61 73  or not.    ** as
1bf70 73 65 72 74 28 29 20 77 61 73 20 65 6e 61 62 6c  sert() was enabl
1bf80 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69  ed at compile-ti
1bf90 6d 65 2e 20 20 49 66 20 58 20 69 73 20 74 72 75  me.  If X is tru
1bfa0 65 20 61 6e 64 20 61 73 73 65 72 74 28 29 0a 20  e and assert(). 
1bfb0 20 20 20 2a 2a 20 69 73 20 65 6e 61 62 6c 65 64     ** is enabled
1bfc0 2c 20 74 68 65 6e 20 74 68 65 20 72 65 74 75 72  , then the retur
1bfd0 6e 20 76 61 6c 75 65 20 69 73 20 74 72 75 65 2e  n value is true.
1bfe0 20 20 49 66 20 58 20 69 73 20 74 72 75 65 20 61    If X is true a
1bff0 6e 64 0a 20 20 20 20 2a 2a 20 61 73 73 65 72 74  nd.    ** assert
1c000 28 29 20 69 73 20 64 69 73 61 62 6c 65 64 2c 20  () is disabled, 
1c010 74 68 65 6e 20 74 68 65 20 72 65 74 75 72 6e 20  then the return 
1c020 76 61 6c 75 65 20 69 73 20 7a 65 72 6f 2e 20 20  value is zero.  
1c030 49 66 20 58 20 69 73 0a 20 20 20 20 2a 2a 20 66  If X is.    ** f
1c040 61 6c 73 65 20 61 6e 64 20 61 73 73 65 72 74 28  alse and assert(
1c050 29 20 69 73 20 65 6e 61 62 6c 65 64 2c 20 74 68  ) is enabled, th
1c060 65 6e 20 74 68 65 20 61 73 73 65 72 74 69 6f 6e  en the assertion
1c070 20 66 69 72 65 73 20 61 6e 64 20 74 68 65 0a 20   fires and the. 
1c080 20 20 20 2a 2a 20 70 72 6f 63 65 73 73 20 61 62     ** process ab
1c090 6f 72 74 73 2e 20 20 49 66 20 58 20 69 73 20 66  orts.  If X is f
1c0a0 61 6c 73 65 20 61 6e 64 20 61 73 73 65 72 74 28  alse and assert(
1c0b0 29 20 69 73 20 64 69 73 61 62 6c 65 64 2c 20 74  ) is disabled, t
1c0c0 68 65 6e 20 74 68 65 0a 20 20 20 20 2a 2a 20 72  hen the.    ** r
1c0d0 65 74 75 72 6e 20 76 61 6c 75 65 20 69 73 20 7a  eturn value is z
1c0e0 65 72 6f 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  ero..    */.    
1c0f0 63 61 73 65 20 53 51 4c 49 54 45 5f 54 45 53 54  case SQLITE_TEST
1c100 43 54 52 4c 5f 41 53 53 45 52 54 3a 20 7b 0a 20  CTRL_ASSERT: {. 
1c110 20 20 20 20 20 76 6f 6c 61 74 69 6c 65 20 69 6e       volatile in
1c120 74 20 78 20 3d 20 30 3b 0a 20 20 20 20 20 20 61  t x = 0;.      a
1c130 73 73 65 72 74 28 20 28 78 20 3d 20 76 61 5f 61  ssert( (x = va_a
1c140 72 67 28 61 70 2c 69 6e 74 29 29 21 3d 30 20 29  rg(ap,int))!=0 )
1c150 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 78 3b 0a  ;.      rc = x;.
1c160 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
1c170 20 7d 0a 0a 0a 20 20 20 20 2f 2a 0a 20 20 20 20   }...    /*.    
1c180 2a 2a 20 20 73 71 6c 69 74 65 33 5f 74 65 73 74  **  sqlite3_test
1c190 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c 49 54 45 5f  _control(SQLITE_
1c1a0 54 45 53 54 43 54 52 4c 5f 41 4c 57 41 59 53 2c  TESTCTRL_ALWAYS,
1c1b0 20 69 6e 74 20 58 29 0a 20 20 20 20 2a 2a 0a 20   int X).    **. 
1c1c0 20 20 20 2a 2a 20 54 68 69 73 20 61 63 74 69 6f     ** This actio
1c1d0 6e 20 70 72 6f 76 69 64 65 73 20 61 20 72 75 6e  n provides a run
1c1e0 2d 74 69 6d 65 20 74 65 73 74 20 74 6f 20 73 65  -time test to se
1c1f0 65 20 68 6f 77 20 74 68 65 20 41 4c 57 41 59 53  e how the ALWAYS
1c200 20 61 6e 64 0a 20 20 20 20 2a 2a 20 4e 45 56 45   and.    ** NEVE
1c210 52 20 6d 61 63 72 6f 73 20 77 65 72 65 20 64 65  R macros were de
1c220 66 69 6e 65 64 20 61 74 20 63 6f 6d 70 69 6c 65  fined at compile
1c230 2d 74 69 6d 65 2e 0a 20 20 20 20 2a 2a 0a 20 20  -time..    **.  
1c240 20 20 2a 2a 20 54 68 65 20 72 65 74 75 72 6e 20    ** The return 
1c250 76 61 6c 75 65 20 69 73 20 41 4c 57 41 59 53 28  value is ALWAYS(
1c260 58 29 2e 20 20 0a 20 20 20 20 2a 2a 0a 20 20 20  X).  .    **.   
1c270 20 2a 2a 20 54 68 65 20 72 65 63 6f 6d 6d 65 6e   ** The recommen
1c280 64 65 64 20 74 65 73 74 20 69 73 20 58 3d 3d 32  ded test is X==2
1c290 2e 20 20 49 66 20 74 68 65 20 72 65 74 75 72 6e  .  If the return
1c2a0 20 76 61 6c 75 65 20 69 73 20 32 2c 20 74 68 61   value is 2, tha
1c2b0 74 20 6d 65 61 6e 73 0a 20 20 20 20 2a 2a 20 41  t means.    ** A
1c2c0 4c 57 41 59 53 28 29 20 61 6e 64 20 4e 45 56 45  LWAYS() and NEVE
1c2d0 52 28 29 20 61 72 65 20 62 6f 74 68 20 6e 6f 2d  R() are both no-
1c2e0 6f 70 20 70 61 73 73 2d 74 68 72 6f 75 67 68 20  op pass-through 
1c2f0 6d 61 63 72 6f 73 2c 20 77 68 69 63 68 20 69 73  macros, which is
1c300 20 74 68 65 0a 20 20 20 20 2a 2a 20 64 65 66 61   the.    ** defa
1c310 75 6c 74 20 73 65 74 74 69 6e 67 2e 20 20 49 66  ult setting.  If
1c320 20 74 68 65 20 72 65 74 75 72 6e 20 76 61 6c 75   the return valu
1c330 65 20 69 73 20 31 2c 20 74 68 65 6e 20 41 4c 57  e is 1, then ALW
1c340 41 59 53 28 29 20 69 73 20 65 69 74 68 65 72 0a  AYS() is either.
1c350 20 20 20 20 2a 2a 20 68 61 72 64 2d 63 6f 64 65      ** hard-code
1c360 64 20 74 6f 20 74 72 75 65 20 6f 72 20 65 6c 73  d to true or els
1c370 65 20 69 74 20 61 73 73 65 72 74 73 20 69 66 20  e it asserts if 
1c380 69 74 73 20 61 72 67 75 6d 65 6e 74 20 69 73 20  its argument is 
1c390 66 61 6c 73 65 2e 0a 20 20 20 20 2a 2a 20 54 68  false..    ** Th
1c3a0 65 20 66 69 72 73 74 20 62 65 68 61 76 69 6f 72  e first behavior
1c3b0 20 28 68 61 72 64 2d 63 6f 64 65 64 20 74 6f 20   (hard-coded to 
1c3c0 74 72 75 65 29 20 69 73 20 74 68 65 20 63 61 73  true) is the cas
1c3d0 65 20 69 66 0a 20 20 20 20 2a 2a 20 53 51 4c 49  e if.    ** SQLI
1c3e0 54 45 5f 54 45 53 54 43 54 52 4c 5f 41 53 53 45  TE_TESTCTRL_ASSE
1c3f0 52 54 20 73 68 6f 77 73 20 74 68 61 74 20 61 73  RT shows that as
1c400 73 65 72 74 28 29 20 69 73 20 64 69 73 61 62 6c  sert() is disabl
1c410 65 64 20 61 6e 64 20 74 68 65 20 73 65 63 6f 6e  ed and the secon
1c420 64 0a 20 20 20 20 2a 2a 20 62 65 68 61 76 69 6f  d.    ** behavio
1c430 72 20 28 61 73 73 65 72 74 20 69 66 20 74 68 65  r (assert if the
1c440 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 41 4c 57   argument to ALW
1c450 41 59 53 28 29 20 69 73 20 66 61 6c 73 65 29 20  AYS() is false) 
1c460 69 73 20 74 68 65 20 63 61 73 65 20 69 66 0a 20  is the case if. 
1c470 20 20 20 2a 2a 20 53 51 4c 49 54 45 5f 54 45 53     ** SQLITE_TES
1c480 54 43 54 52 4c 5f 41 53 53 45 52 54 20 73 68 6f  TCTRL_ASSERT sho
1c490 77 73 20 74 68 61 74 20 61 73 73 65 72 74 28 29  ws that assert()
1c4a0 20 69 73 20 65 6e 61 62 6c 65 64 2e 0a 20 20 20   is enabled..   
1c4b0 20 2a 2a 0a 20 20 20 20 2a 2a 20 54 68 65 20 72   **.    ** The r
1c4c0 75 6e 2d 74 69 6d 65 20 74 65 73 74 20 70 72 6f  un-time test pro
1c4d0 63 65 64 75 72 65 20 6d 69 67 68 74 20 6c 6f 6f  cedure might loo
1c4e0 6b 20 73 6f 6d 65 74 68 69 6e 67 20 6c 69 6b 65  k something like
1c4f0 20 74 68 69 73 3a 0a 20 20 20 20 2a 2a 0a 20 20   this:.    **.  
1c500 20 20 2a 2a 20 20 20 20 69 66 28 20 73 71 6c 69    **    if( sqli
1c510 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c  te3_test_control
1c520 28 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c  (SQLITE_TESTCTRL
1c530 5f 41 4c 57 41 59 53 2c 20 32 29 3d 3d 32 20 29  _ALWAYS, 2)==2 )
1c540 7b 0a 20 20 20 20 2a 2a 20 20 20 20 20 20 2f 2f  {.    **      //
1c550 20 41 4c 57 41 59 53 28 29 20 61 6e 64 20 4e 45   ALWAYS() and NE
1c560 56 45 52 28 29 20 61 72 65 20 6e 6f 2d 6f 70 20  VER() are no-op 
1c570 70 61 73 73 2d 74 68 72 6f 75 67 68 20 6d 61 63  pass-through mac
1c580 72 6f 73 0a 20 20 20 20 2a 2a 20 20 20 20 7d 65  ros.    **    }e
1c590 6c 73 65 20 69 66 28 20 73 71 6c 69 74 65 33 5f  lse if( sqlite3_
1c5a0 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c  test_control(SQL
1c5b0 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 41 53 53  ITE_TESTCTRL_ASS
1c5c0 45 52 54 2c 20 31 29 20 29 7b 0a 20 20 20 20 2a  ERT, 1) ){.    *
1c5d0 2a 20 20 20 20 20 20 2f 2f 20 41 4c 57 41 59 53  *      // ALWAYS
1c5e0 28 78 29 20 61 73 73 65 72 74 73 20 74 68 61 74  (x) asserts that
1c5f0 20 78 20 69 73 20 74 72 75 65 2e 20 4e 45 56 45   x is true. NEVE
1c600 52 28 78 29 20 61 73 73 65 72 74 73 20 78 20 69  R(x) asserts x i
1c610 73 20 66 61 6c 73 65 2e 0a 20 20 20 20 2a 2a 20  s false..    ** 
1c620 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2a 2a     }else{.    **
1c630 20 20 20 20 20 20 2f 2f 20 41 4c 57 41 59 53 28        // ALWAYS(
1c640 78 29 20 69 73 20 61 20 63 6f 6e 73 74 61 6e 74  x) is a constant
1c650 20 31 2e 20 20 4e 45 56 45 52 28 78 29 20 69 73   1.  NEVER(x) is
1c660 20 61 20 63 6f 6e 73 74 61 6e 74 20 30 2e 0a 20   a constant 0.. 
1c670 20 20 20 2a 2a 20 20 20 20 7d 0a 20 20 20 20 2a     **    }.    *
1c680 2f 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  /.    case SQLIT
1c690 45 5f 54 45 53 54 43 54 52 4c 5f 41 4c 57 41 59  E_TESTCTRL_ALWAY
1c6a0 53 3a 20 7b 0a 20 20 20 20 20 20 69 6e 74 20 78  S: {.      int x
1c6b0 20 3d 20 76 61 5f 61 72 67 28 61 70 2c 69 6e 74   = va_arg(ap,int
1c6c0 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 41 4c  );.      rc = AL
1c6d0 57 41 59 53 28 78 29 3b 0a 20 20 20 20 20 20 62  WAYS(x);.      b
1c6e0 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  reak;.    }..   
1c6f0 20 2f 2a 0a 20 20 20 20 2a 2a 20 20 20 73 71 6c   /*.    **   sql
1c700 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f  ite3_test_contro
1c710 6c 28 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52  l(SQLITE_TESTCTR
1c720 4c 5f 42 59 54 45 4f 52 44 45 52 29 3b 0a 20 20  L_BYTEORDER);.  
1c730 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 54 68 65 20    **.    ** The 
1c740 69 6e 74 65 67 65 72 20 72 65 74 75 72 6e 65 64  integer returned
1c750 20 72 65 76 65 61 6c 73 20 74 68 65 20 62 79 74   reveals the byt
1c760 65 2d 6f 72 64 65 72 20 6f 66 20 74 68 65 20 63  e-order of the c
1c770 6f 6d 70 75 74 65 72 20 6f 6e 20 77 68 69 63 68  omputer on which
1c780 0a 20 20 20 20 2a 2a 20 53 51 4c 69 74 65 20 69  .    ** SQLite i
1c790 73 20 72 75 6e 6e 69 6e 67 3a 0a 20 20 20 20 2a  s running:.    *
1c7a0 2a 0a 20 20 20 20 2a 2a 20 20 20 20 20 20 20 31  *.    **       1
1c7b0 20 20 20 20 20 62 69 67 2d 65 6e 64 69 61 6e 2c       big-endian,
1c7c0 20 20 20 20 64 65 74 65 72 6d 69 6e 65 64 20 61      determined a
1c7d0 74 20 72 75 6e 2d 74 69 6d 65 0a 20 20 20 20 2a  t run-time.    *
1c7e0 2a 20 20 20 20 20 20 31 30 20 20 20 20 20 6c 69  *      10     li
1c7f0 74 74 6c 65 2d 65 6e 64 69 61 6e 2c 20 64 65 74  ttle-endian, det
1c800 65 72 6d 69 6e 65 64 20 61 74 20 72 75 6e 2d 74  ermined at run-t
1c810 69 6d 65 0a 20 20 20 20 2a 2a 20 20 34 33 32 31  ime.    **  4321
1c820 30 31 20 20 20 20 20 62 69 67 2d 65 6e 64 69 61  01     big-endia
1c830 6e 2c 20 20 20 20 64 65 74 65 72 6d 69 6e 65 64  n,    determined
1c840 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65   at compile-time
1c850 0a 20 20 20 20 2a 2a 20 20 31 32 33 34 31 30 20  .    **  123410 
1c860 20 20 20 20 6c 69 74 74 6c 65 2d 65 6e 64 69 61      little-endia
1c870 6e 2c 20 64 65 74 65 72 6d 69 6e 65 64 20 61 74  n, determined at
1c880 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 0a 20 20   compile-time.  
1c890 20 20 2a 2f 20 0a 20 20 20 20 63 61 73 65 20 53    */ .    case S
1c8a0 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 42  QLITE_TESTCTRL_B
1c8b0 59 54 45 4f 52 44 45 52 3a 20 7b 0a 20 20 20 20  YTEORDER: {.    
1c8c0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 59    rc = SQLITE_BY
1c8d0 54 45 4f 52 44 45 52 2a 31 30 30 20 2b 20 53 51  TEORDER*100 + SQ
1c8e0 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41  LITE_LITTLEENDIA
1c8f0 4e 2a 31 30 20 2b 20 53 51 4c 49 54 45 5f 42 49  N*10 + SQLITE_BI
1c900 47 45 4e 44 49 41 4e 3b 0a 20 20 20 20 20 20 62  GENDIAN;.      b
1c910 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  reak;.    }..   
1c920 20 2f 2a 20 20 20 73 71 6c 69 74 65 33 5f 74 65   /*   sqlite3_te
1c930 73 74 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c 49 54  st_control(SQLIT
1c940 45 5f 54 45 53 54 43 54 52 4c 5f 52 45 53 45 52  E_TESTCTRL_RESER
1c950 56 45 2c 20 73 71 6c 69 74 65 33 20 2a 64 62 2c  VE, sqlite3 *db,
1c960 20 69 6e 74 20 4e 29 0a 20 20 20 20 2a 2a 0a 20   int N).    **. 
1c970 20 20 20 2a 2a 20 53 65 74 20 74 68 65 20 6e 52     ** Set the nR
1c980 65 73 65 72 76 65 20 73 69 7a 65 20 74 6f 20 4e  eserve size to N
1c990 20 66 6f 72 20 74 68 65 20 6d 61 69 6e 20 64 61   for the main da
1c9a0 74 61 62 61 73 65 20 6f 6e 20 74 68 65 20 64 61  tabase on the da
1c9b0 74 61 62 61 73 65 0a 20 20 20 20 2a 2a 20 63 6f  tabase.    ** co
1c9c0 6e 6e 65 63 74 69 6f 6e 20 64 62 2e 0a 20 20 20  nnection db..   
1c9d0 20 2a 2f 0a 20 20 20 20 63 61 73 65 20 53 51 4c   */.    case SQL
1c9e0 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 52 45 53  ITE_TESTCTRL_RES
1c9f0 45 52 56 45 3a 20 7b 0a 20 20 20 20 20 20 73 71  ERVE: {.      sq
1ca00 6c 69 74 65 33 20 2a 64 62 20 3d 20 76 61 5f 61  lite3 *db = va_a
1ca10 72 67 28 61 70 2c 20 73 71 6c 69 74 65 33 2a 29  rg(ap, sqlite3*)
1ca20 3b 0a 20 20 20 20 20 20 69 6e 74 20 78 20 3d 20  ;.      int x = 
1ca30 76 61 5f 61 72 67 28 61 70 2c 69 6e 74 29 3b 0a  va_arg(ap,int);.
1ca40 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 75        sqlite3_mu
1ca50 74 65 78 5f 65 6e 74 65 72 28 64 62 2d 3e 6d 75  tex_enter(db->mu
1ca60 74 65 78 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  tex);.      sqli
1ca70 74 65 33 42 74 72 65 65 53 65 74 50 61 67 65 53  te3BtreeSetPageS
1ca80 69 7a 65 28 64 62 2d 3e 61 44 62 5b 30 5d 2e 70  ize(db->aDb[0].p
1ca90 42 74 2c 20 30 2c 20 78 2c 20 30 29 3b 0a 20 20  Bt, 0, x, 0);.  
1caa0 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65      sqlite3_mute
1cab0 78 5f 6c 65 61 76 65 28 64 62 2d 3e 6d 75 74 65  x_leave(db->mute
1cac0 78 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b  x);.      break;
1cad0 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 20  .    }..    /*  
1cae0 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e  sqlite3_test_con
1caf0 74 72 6f 6c 28 53 51 4c 49 54 45 5f 54 45 53 54  trol(SQLITE_TEST
1cb00 43 54 52 4c 5f 4f 50 54 49 4d 49 5a 41 54 49 4f  CTRL_OPTIMIZATIO
1cb10 4e 53 2c 20 73 71 6c 69 74 65 33 20 2a 64 62 2c  NS, sqlite3 *db,
1cb20 20 69 6e 74 20 4e 29 0a 20 20 20 20 2a 2a 0a 20   int N).    **. 
1cb30 20 20 20 2a 2a 20 45 6e 61 62 6c 65 20 6f 72 20     ** Enable or 
1cb40 64 69 73 61 62 6c 65 20 76 61 72 69 6f 75 73 20  disable various 
1cb50 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 66 6f  optimizations fo
1cb60 72 20 74 65 73 74 69 6e 67 20 70 75 72 70 6f 73  r testing purpos
1cb70 65 73 2e 20 20 54 68 65 20 0a 20 20 20 20 2a 2a  es.  The .    **
1cb80 20 61 72 67 75 6d 65 6e 74 20 4e 20 69 73 20 61   argument N is a
1cb90 20 62 69 74 6d 61 73 6b 20 6f 66 20 6f 70 74 69   bitmask of opti
1cba0 6d 69 7a 61 74 69 6f 6e 73 20 74 6f 20 62 65 20  mizations to be 
1cbb0 64 69 73 61 62 6c 65 64 2e 20 20 46 6f 72 20 6e  disabled.  For n
1cbc0 6f 72 6d 61 6c 0a 20 20 20 20 2a 2a 20 6f 70 65  ormal.    ** ope
1cbd0 72 61 74 69 6f 6e 20 4e 20 73 68 6f 75 6c 64 20  ration N should 
1cbe0 62 65 20 30 2e 20 20 54 68 65 20 69 64 65 61 20  be 0.  The idea 
1cbf0 69 73 20 74 68 61 74 20 61 20 74 65 73 74 20 70  is that a test p
1cc00 72 6f 67 72 61 6d 20 28 6c 69 6b 65 20 74 68 65  rogram (like the
1cc10 0a 20 20 20 20 2a 2a 20 53 51 4c 20 4c 6f 67 69  .    ** SQL Logi
1cc20 63 20 54 65 73 74 20 6f 72 20 53 4c 54 20 74 65  c Test or SLT te
1cc30 73 74 20 6d 6f 64 75 6c 65 29 20 63 61 6e 20 72  st module) can r
1cc40 75 6e 20 74 68 65 20 73 61 6d 65 20 53 51 4c 20  un the same SQL 
1cc50 6d 75 6c 74 69 70 6c 65 20 74 69 6d 65 73 0a 20  multiple times. 
1cc60 20 20 20 2a 2a 20 77 69 74 68 20 76 61 72 69 6f     ** with vario
1cc70 75 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  us optimizations
1cc80 20 64 69 73 61 62 6c 65 64 20 74 6f 20 76 65 72   disabled to ver
1cc90 69 66 79 20 74 68 61 74 20 74 68 65 20 73 61 6d  ify that the sam
1cca0 65 20 61 6e 73 77 65 72 0a 20 20 20 20 2a 2a 20  e answer.    ** 
1ccb0 69 73 20 6f 62 74 61 69 6e 65 64 20 69 6e 20 65  is obtained in e
1ccc0 76 65 72 79 20 63 61 73 65 2e 0a 20 20 20 20 2a  very case..    *
1ccd0 2f 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  /.    case SQLIT
1cce0 45 5f 54 45 53 54 43 54 52 4c 5f 4f 50 54 49 4d  E_TESTCTRL_OPTIM
1ccf0 49 5a 41 54 49 4f 4e 53 3a 20 7b 0a 20 20 20 20  IZATIONS: {.    
1cd00 20 20 73 71 6c 69 74 65 33 20 2a 64 62 20 3d 20    sqlite3 *db = 
1cd10 76 61 5f 61 72 67 28 61 70 2c 20 73 71 6c 69 74  va_arg(ap, sqlit
1cd20 65 33 2a 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e  e3*);.      db->
1cd30 64 62 4f 70 74 46 6c 61 67 73 20 3d 20 28 75 31  dbOptFlags = (u1
1cd40 36 29 28 76 61 5f 61 72 67 28 61 70 2c 20 69 6e  6)(va_arg(ap, in
1cd50 74 29 20 26 20 30 78 66 66 66 66 29 3b 0a 20 20  t) & 0xffff);.  
1cd60 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
1cd70 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
1cd80 4e 5f 4b 45 59 57 4f 52 44 0a 20 20 20 20 2f 2a  N_KEYWORD.    /*
1cd90 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f   sqlite3_test_co
1cda0 6e 74 72 6f 6c 28 53 51 4c 49 54 45 5f 54 45 53  ntrol(SQLITE_TES
1cdb0 54 43 54 52 4c 5f 49 53 4b 45 59 57 4f 52 44 2c  TCTRL_ISKEYWORD,
1cdc0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 57 6f   const char *zWo
1cdd0 72 64 29 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a  rd).    **.    *
1cde0 2a 20 49 66 20 7a 57 6f 72 64 20 69 73 20 61 20  * If zWord is a 
1cdf0 6b 65 79 77 6f 72 64 20 72 65 63 6f 67 6e 69 7a  keyword recogniz
1ce00 65 64 20 62 79 20 74 68 65 20 70 61 72 73 65 72  ed by the parser
1ce10 2c 20 74 68 65 6e 20 72 65 74 75 72 6e 20 74 68  , then return th
1ce20 65 0a 20 20 20 20 2a 2a 20 6e 75 6d 62 65 72 20  e.    ** number 
1ce30 6f 66 20 6b 65 79 77 6f 72 64 73 2e 20 20 4f 72  of keywords.  Or
1ce40 20 69 66 20 7a 57 6f 72 64 20 69 73 20 6e 6f 74   if zWord is not
1ce50 20 61 20 6b 65 79 77 6f 72 64 2c 20 72 65 74 75   a keyword, retu
1ce60 72 6e 20 30 2e 0a 20 20 20 20 2a 2a 20 0a 20 20  rn 0..    ** .  
1ce70 20 20 2a 2a 20 54 68 69 73 20 74 65 73 74 20 66    ** This test f
1ce80 65 61 74 75 72 65 20 69 73 20 6f 6e 6c 79 20 61  eature is only a
1ce90 76 61 69 6c 61 62 6c 65 20 69 6e 20 74 68 65 20  vailable in the 
1cea0 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 20 73 69 6e  amalgamation sin
1ceb0 63 65 0a 20 20 20 20 2a 2a 20 74 68 65 20 53 51  ce.    ** the SQ
1cec0 4c 49 54 45 5f 4e 5f 4b 45 59 57 4f 52 44 20 6d  LITE_N_KEYWORD m
1ced0 61 63 72 6f 20 69 73 20 6e 6f 74 20 64 65 66 69  acro is not defi
1cee0 6e 65 64 20 69 6e 20 74 68 69 73 20 66 69 6c 65  ned in this file
1cef0 20 69 66 20 53 51 4c 69 74 65 0a 20 20 20 20 2a   if SQLite.    *
1cf00 2a 20 69 73 20 62 75 69 6c 74 20 75 73 69 6e 67  * is built using
1cf10 20 73 65 70 61 72 61 74 65 20 73 6f 75 72 63 65   separate source
1cf20 20 66 69 6c 65 73 2e 0a 20 20 20 20 2a 2f 0a 20   files..    */. 
1cf30 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 54     case SQLITE_T
1cf40 45 53 54 43 54 52 4c 5f 49 53 4b 45 59 57 4f 52  ESTCTRL_ISKEYWOR
1cf50 44 3a 20 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74  D: {.      const
1cf60 20 63 68 61 72 20 2a 7a 57 6f 72 64 20 3d 20 76   char *zWord = v
1cf70 61 5f 61 72 67 28 61 70 2c 20 63 6f 6e 73 74 20  a_arg(ap, const 
1cf80 63 68 61 72 2a 29 3b 0a 20 20 20 20 20 20 69 6e  char*);.      in
1cf90 74 20 6e 20 3d 20 73 71 6c 69 74 65 33 53 74 72  t n = sqlite3Str
1cfa0 6c 65 6e 33 30 28 7a 57 6f 72 64 29 3b 0a 20 20  len30(zWord);.  
1cfb0 20 20 20 20 72 63 20 3d 20 28 73 71 6c 69 74 65      rc = (sqlite
1cfc0 33 4b 65 79 77 6f 72 64 43 6f 64 65 28 28 75 38  3KeywordCode((u8
1cfd0 2a 29 7a 57 6f 72 64 2c 20 6e 29 21 3d 54 4b 5f  *)zWord, n)!=TK_
1cfe0 49 44 29 20 3f 20 53 51 4c 49 54 45 5f 4e 5f 4b  ID) ? SQLITE_N_K
1cff0 45 59 57 4f 52 44 20 3a 20 30 3b 0a 20 20 20 20  EYWORD : 0;.    
1d000 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 23    break;.    }.#
1d010 65 6e 64 69 66 20 0a 0a 20 20 20 20 2f 2a 20 73  endif ..    /* s
1d020 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74  qlite3_test_cont
1d030 72 6f 6c 28 53 51 4c 49 54 45 5f 54 45 53 54 43  rol(SQLITE_TESTC
1d040 54 52 4c 5f 53 43 52 41 54 43 48 4d 41 4c 4c 4f  TRL_SCRATCHMALLO
1d050 43 2c 20 73 7a 2c 20 26 70 4e 65 77 2c 20 70 46  C, sz, &pNew, pF
1d060 72 65 65 29 3b 0a 20 20 20 20 2a 2a 0a 20 20 20  ree);.    **.   
1d070 20 2a 2a 20 50 61 73 73 20 70 46 72 65 65 20 69   ** Pass pFree i
1d080 6e 74 6f 20 73 71 6c 69 74 65 33 53 63 72 61 74  nto sqlite3Scrat
1d090 63 68 46 72 65 65 28 29 2e 20 0a 20 20 20 20 2a  chFree(). .    *
1d0a0 2a 20 49 66 20 73 7a 3e 30 20 74 68 65 6e 20 61  * If sz>0 then a
1d0b0 6c 6c 6f 63 61 74 65 20 61 20 73 63 72 61 74 63  llocate a scratc
1d0c0 68 20 62 75 66 66 65 72 20 69 6e 74 6f 20 70 4e  h buffer into pN
1d0d0 65 77 2e 20 20 0a 20 20 20 20 2a 2f 0a 20 20 20  ew.  .    */.   
1d0e0 20 63 61 73 65 20 53 51 4c 49 54 45 5f 54 45 53   case SQLITE_TES
1d0f0 54 43 54 52 4c 5f 53 43 52 41 54 43 48 4d 41 4c  TCTRL_SCRATCHMAL
1d100 4c 4f 43 3a 20 7b 0a 20 20 20 20 20 20 76 6f 69  LOC: {.      voi
1d110 64 20 2a 70 46 72 65 65 2c 20 2a 2a 70 70 4e 65  d *pFree, **ppNe
1d120 77 3b 0a 20 20 20 20 20 20 69 6e 74 20 73 7a 3b  w;.      int sz;
1d130 0a 20 20 20 20 20 20 73 7a 20 3d 20 76 61 5f 61  .      sz = va_a
1d140 72 67 28 61 70 2c 20 69 6e 74 29 3b 0a 20 20 20  rg(ap, int);.   
1d150 20 20 20 70 70 4e 65 77 20 3d 20 76 61 5f 61 72     ppNew = va_ar
1d160 67 28 61 70 2c 20 76 6f 69 64 2a 2a 29 3b 0a 20  g(ap, void**);. 
1d170 20 20 20 20 20 70 46 72 65 65 20 3d 20 76 61 5f       pFree = va_
1d180 61 72 67 28 61 70 2c 20 76 6f 69 64 2a 29 3b 0a  arg(ap, void*);.
1d190 20 20 20 20 20 20 69 66 28 20 73 7a 20 29 20 2a        if( sz ) *
1d1a0 70 70 4e 65 77 20 3d 20 73 71 6c 69 74 65 33 53  ppNew = sqlite3S
1d1b0 63 72 61 74 63 68 4d 61 6c 6c 6f 63 28 73 7a 29  cratchMalloc(sz)
1d1c0 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 53  ;.      sqlite3S
1d1d0 63 72 61 74 63 68 46 72 65 65 28 70 46 72 65 65  cratchFree(pFree
1d1e0 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  );.      break;.
1d1f0 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 20 20      }..    /*   
1d200 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e  sqlite3_test_con
1d210 74 72 6f 6c 28 53 51 4c 49 54 45 5f 54 45 53 54  trol(SQLITE_TEST
1d220 43 54 52 4c 5f 4c 4f 43 41 4c 54 49 4d 45 5f 46  CTRL_LOCALTIME_F
1d230 41 55 4c 54 2c 20 69 6e 74 20 6f 6e 6f 66 66 29  AULT, int onoff)
1d240 3b 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20  ;.    **.    ** 
1d250 49 66 20 70 61 72 61 6d 65 74 65 72 20 6f 6e 6f  If parameter ono
1d260 66 66 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20  ff is non-zero, 
1d270 63 6f 6e 66 69 67 75 72 65 20 74 68 65 20 77 72  configure the wr
1d280 61 70 70 65 72 73 20 73 6f 20 74 68 61 74 20 61  appers so that a
1d290 6c 6c 0a 20 20 20 20 2a 2a 20 73 75 62 73 65 71  ll.    ** subseq
1d2a0 75 65 6e 74 20 63 61 6c 6c 73 20 74 6f 20 6c 6f  uent calls to lo
1d2b0 63 61 6c 74 69 6d 65 28 29 20 61 6e 64 20 76 61  caltime() and va
1d2c0 72 69 61 6e 74 73 20 66 61 69 6c 2e 20 49 66 20  riants fail. If 
1d2d0 6f 6e 6f 66 66 20 69 73 20 7a 65 72 6f 2c 0a 20  onoff is zero,. 
1d2e0 20 20 20 2a 2a 20 75 6e 64 6f 20 74 68 69 73 20     ** undo this 
1d2f0 73 65 74 74 69 6e 67 2e 0a 20 20 20 20 2a 2f 0a  setting..    */.
1d300 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
1d310 54 45 53 54 43 54 52 4c 5f 4c 4f 43 41 4c 54 49  TESTCTRL_LOCALTI
1d320 4d 45 5f 46 41 55 4c 54 3a 20 7b 0a 20 20 20 20  ME_FAULT: {.    
1d330 20 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43    sqlite3GlobalC
1d340 6f 6e 66 69 67 2e 62 4c 6f 63 61 6c 74 69 6d 65  onfig.bLocaltime
1d350 46 61 75 6c 74 20 3d 20 76 61 5f 61 72 67 28 61  Fault = va_arg(a
1d360 70 2c 20 69 6e 74 29 3b 0a 20 20 20 20 20 20 62  p, int);.      b
1d370 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  reak;.    }..   
1d380 20 2f 2a 20 20 20 73 71 6c 69 74 65 33 5f 74 65   /*   sqlite3_te
1d390 73 74 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c 49 54  st_control(SQLIT
1d3a0 45 5f 54 45 53 54 43 54 52 4c 5f 4e 45 56 45 52  E_TESTCTRL_NEVER
1d3b0 5f 43 4f 52 52 55 50 54 2c 20 69 6e 74 29 3b 0a  _CORRUPT, int);.
1d3c0 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 53 65      **.    ** Se
1d3d0 74 20 6f 72 20 63 6c 65 61 72 20 61 20 66 6c 61  t or clear a fla
1d3e0 67 20 74 68 61 74 20 69 6e 64 69 63 61 74 65 73  g that indicates
1d3f0 20 74 68 61 74 20 74 68 65 20 64 61 74 61 62 61   that the databa
1d400 73 65 20 66 69 6c 65 20 69 73 20 61 6c 77 61 79  se file is alway
1d410 73 20 77 65 6c 6c 2d 0a 20 20 20 20 2a 2a 20 66  s well-.    ** f
1d420 6f 72 6d 65 64 20 61 6e 64 20 6e 65 76 65 72 20  ormed and never 
1d430 63 6f 72 72 75 70 74 2e 20 20 54 68 69 73 20 66  corrupt.  This f
1d440 6c 61 67 20 69 73 20 63 6c 65 61 72 20 62 79 20  lag is clear by 
1d450 64 65 66 61 75 6c 74 2c 20 69 6e 64 69 63 61 74  default, indicat
1d460 69 6e 67 20 74 68 61 74 0a 20 20 20 20 2a 2a 20  ing that.    ** 
1d470 64 61 74 61 62 61 73 65 20 66 69 6c 65 73 20 6d  database files m
1d480 69 67 68 74 20 68 61 76 65 20 61 72 62 69 74 72  ight have arbitr
1d490 61 72 79 20 63 6f 72 72 75 70 74 69 6f 6e 2e 20  ary corruption. 
1d4a0 20 53 65 74 74 69 6e 67 20 74 68 65 20 66 6c 61   Setting the fla
1d4b0 67 20 64 75 72 69 6e 67 0a 20 20 20 20 2a 2a 20  g during.    ** 
1d4c0 74 65 73 74 69 6e 67 20 63 61 75 73 65 73 20 63  testing causes c
1d4d0 65 72 74 61 69 6e 20 61 73 73 65 72 74 28 29 20  ertain assert() 
1d4e0 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68  statements in th
1d4f0 65 20 63 6f 64 65 20 74 6f 20 62 65 20 61 63 74  e code to be act
1d500 69 76 61 74 65 64 0a 20 20 20 20 2a 2a 20 74 68  ivated.    ** th
1d510 61 74 20 64 65 6d 6f 6e 73 74 72 61 74 20 69 6e  at demonstrat in
1d520 76 61 72 69 61 6e 74 73 20 6f 6e 20 77 65 6c 6c  variants on well
1d530 2d 66 6f 72 6d 65 64 20 64 61 74 61 62 61 73 65  -formed database
1d540 20 66 69 6c 65 73 2e 0a 20 20 20 20 2a 2f 0a 20   files..    */. 
1d550 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 54     case SQLITE_T
1d560 45 53 54 43 54 52 4c 5f 4e 45 56 45 52 5f 43 4f  ESTCTRL_NEVER_CO
1d570 52 52 55 50 54 3a 20 7b 0a 20 20 20 20 20 20 73  RRUPT: {.      s
1d580 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66  qlite3GlobalConf
1d590 69 67 2e 6e 65 76 65 72 43 6f 72 72 75 70 74 20  ig.neverCorrupt 
1d5a0 3d 20 76 61 5f 61 72 67 28 61 70 2c 20 69 6e 74  = va_arg(ap, int
1d5b0 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  );.      break;.
1d5c0 20 20 20 20 7d 0a 0a 0a 20 20 20 20 2f 2a 20 20      }...    /*  
1d5d0 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f   sqlite3_test_co
1d5e0 6e 74 72 6f 6c 28 53 51 4c 49 54 45 5f 54 45 53  ntrol(SQLITE_TES
1d5f0 54 43 54 52 4c 5f 56 44 42 45 5f 43 4f 56 45 52  TCTRL_VDBE_COVER
1d600 41 47 45 2c 20 78 43 61 6c 6c 62 61 63 6b 2c 20  AGE, xCallback, 
1d610 70 74 72 29 3b 0a 20 20 20 20 2a 2a 0a 20 20 20  ptr);.    **.   
1d620 20 2a 2a 20 53 65 74 20 74 68 65 20 56 44 42 45   ** Set the VDBE
1d630 20 63 6f 76 65 72 61 67 65 20 63 61 6c 6c 62 61   coverage callba
1d640 63 6b 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 78  ck function to x
1d650 43 61 6c 6c 62 61 63 6b 20 77 69 74 68 20 63 6f  Callback with co
1d660 6e 74 65 78 74 20 0a 20 20 20 20 2a 2a 20 70 6f  ntext .    ** po
1d670 69 6e 74 65 72 20 70 74 72 2e 0a 20 20 20 20 2a  inter ptr..    *
1d680 2f 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  /.    case SQLIT
1d690 45 5f 54 45 53 54 43 54 52 4c 5f 56 44 42 45 5f  E_TESTCTRL_VDBE_
1d6a0 43 4f 56 45 52 41 47 45 3a 20 7b 0a 23 69 66 64  COVERAGE: {.#ifd
1d6b0 65 66 20 53 51 4c 49 54 45 5f 56 44 42 45 5f 43  ef SQLITE_VDBE_C
1d6c0 4f 56 45 52 41 47 45 0a 20 20 20 20 20 20 74 79  OVERAGE.      ty
1d6d0 70 65 64 65 66 20 76 6f 69 64 20 28 2a 62 72 61  pedef void (*bra
1d6e0 6e 63 68 5f 63 61 6c 6c 62 61 63 6b 29 28 76 6f  nch_callback)(vo
1d6f0 69 64 2a 2c 69 6e 74 2c 75 38 2c 75 38 29 3b 0a  id*,int,u8,u8);.
1d700 20 20 20 20 20 20 73 71 6c 69 74 65 33 47 6c 6f        sqlite3Glo
1d710 62 61 6c 43 6f 6e 66 69 67 2e 78 56 64 62 65 42  balConfig.xVdbeB
1d720 72 61 6e 63 68 20 3d 20 76 61 5f 61 72 67 28 61  ranch = va_arg(a
1d730 70 2c 62 72 61 6e 63 68 5f 63 61 6c 6c 62 61 63  p,branch_callbac
1d740 6b 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  k);.      sqlite
1d750 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 70 56  3GlobalConfig.pV
1d760 64 62 65 42 72 61 6e 63 68 41 72 67 20 3d 20 76  dbeBranchArg = v
1d770 61 5f 61 72 67 28 61 70 2c 76 6f 69 64 2a 29 3b  a_arg(ap,void*);
1d780 0a 23 65 6e 64 69 66 0a 20 20 20 20 20 20 62 72  .#endif.      br
1d790 65 61 6b 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  eak;.    }..    
1d7a0 2f 2a 20 20 20 73 71 6c 69 74 65 33 5f 74 65 73  /*   sqlite3_tes
1d7b0 74 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c 49 54 45  t_control(SQLITE
1d7c0 5f 54 45 53 54 43 54 52 4c 5f 53 4f 52 54 45 52  _TESTCTRL_SORTER
1d7d0 5f 4d 4d 41 50 2c 20 64 62 2c 20 6e 4d 61 78 29  _MMAP, db, nMax)
1d7e0 3b 20 2a 2f 0a 20 20 20 20 63 61 73 65 20 53 51  ; */.    case SQ
1d7f0 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 53 4f  LITE_TESTCTRL_SO
1d800 52 54 45 52 5f 4d 4d 41 50 3a 20 7b 0a 20 20 20  RTER_MMAP: {.   
1d810 20 20 20 73 71 6c 69 74 65 33 20 2a 64 62 20 3d     sqlite3 *db =
1d820 20 76 61 5f 61 72 67 28 61 70 2c 20 73 71 6c 69   va_arg(ap, sqli
1d830 74 65 33 2a 29 3b 0a 20 20 20 20 20 20 64 62 2d  te3*);.      db-
1d840 3e 6e 4d 61 78 53 6f 72 74 65 72 4d 6d 61 70 20  >nMaxSorterMmap 
1d850 3d 20 76 61 5f 61 72 67 28 61 70 2c 20 69 6e 74  = va_arg(ap, int
1d860 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  );.      break;.
1d870 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 20 20      }..    /*   
1d880 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e  sqlite3_test_con
1d890 74 72 6f 6c 28 53 51 4c 49 54 45 5f 54 45 53 54  trol(SQLITE_TEST
1d8a0 43 54 52 4c 5f 49 53 49 4e 49 54 29 3b 0a 20 20  CTRL_ISINIT);.  
1d8b0 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 52 65 74 75    **.    ** Retu
1d8c0 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 20 69 66 20  rn SQLITE_OK if 
1d8d0 53 51 4c 69 74 65 20 68 61 73 20 62 65 65 6e 20  SQLite has been 
1d8e0 69 6e 69 74 69 61 6c 69 7a 65 64 20 61 6e 64 20  initialized and 
1d8f0 53 51 4c 49 54 45 5f 45 52 52 4f 52 20 69 66 0a  SQLITE_ERROR if.
1d900 20 20 20 20 2a 2a 20 6e 6f 74 2e 0a 20 20 20 20      ** not..    
1d910 2a 2f 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  */.    case SQLI
1d920 54 45 5f 54 45 53 54 43 54 52 4c 5f 49 53 49 4e  TE_TESTCTRL_ISIN
1d930 49 54 3a 20 7b 0a 20 20 20 20 20 20 69 66 28 20  IT: {.      if( 
1d940 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e  sqlite3GlobalCon
1d950 66 69 67 2e 69 73 49 6e 69 74 3d 3d 30 20 29 20  fig.isInit==0 ) 
1d960 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f  rc = SQLITE_ERRO
1d970 52 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  R;.      break;.
1d980 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 20 73      }..    /*  s
1d990 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74  qlite3_test_cont
1d9a0 72 6f 6c 28 53 51 4c 49 54 45 5f 54 45 53 54 43  rol(SQLITE_TESTC
1d9b0 54 52 4c 5f 49 4d 50 4f 53 54 45 52 2c 20 64 62  TRL_IMPOSTER, db
1d9c0 2c 20 64 62 4e 61 6d 65 2c 20 6f 6e 4f 66 66 2c  , dbName, onOff,
1d9d0 20 74 6e 75 6d 29 3b 0a 20 20 20 20 2a 2a 0a 20   tnum);.    **. 
1d9e0 20 20 20 2a 2a 20 54 68 69 73 20 74 65 73 74 20     ** This test 
1d9f0 63 6f 6e 74 72 6f 6c 20 69 73 20 75 73 65 64 20  control is used 
1da00 74 6f 20 63 72 65 61 74 65 20 69 6d 70 6f 73 74  to create impost
1da10 65 72 20 74 61 62 6c 65 73 2e 20 20 22 64 62 22  er tables.  "db"
1da20 20 69 73 20 61 20 70 6f 69 6e 74 65 72 0a 20 20   is a pointer.  
1da30 20 20 2a 2a 20 74 6f 20 74 68 65 20 64 61 74 61    ** to the data
1da40 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  base connection.
1da50 20 20 64 62 4e 61 6d 65 20 69 73 20 74 68 65 20    dbName is the 
1da60 64 61 74 61 62 61 73 65 20 6e 61 6d 65 20 28 65  database name (e
1da70 78 3a 20 22 6d 61 69 6e 22 20 6f 72 0a 20 20 20  x: "main" or.   
1da80 20 2a 2a 20 22 74 65 6d 70 22 29 20 77 68 69 63   ** "temp") whic
1da90 68 20 77 69 6c 6c 20 72 65 63 65 69 76 65 20 74  h will receive t
1daa0 68 65 20 69 6d 70 6f 73 74 65 72 2e 20 20 22 6f  he imposter.  "o
1dab0 6e 4f 66 66 22 20 74 75 72 6e 73 20 69 6d 70 6f  nOff" turns impo
1dac0 73 74 65 72 20 6d 6f 64 65 20 6f 6e 0a 20 20 20  ster mode on.   
1dad0 20 2a 2a 20 6f 72 20 6f 66 66 2e 20 20 22 74 6e   ** or off.  "tn
1dae0 75 6d 22 20 69 73 20 74 68 65 20 72 6f 6f 74 20  um" is the root 
1daf0 70 61 67 65 20 6f 66 20 74 68 65 20 62 2d 74 72  page of the b-tr
1db00 65 65 20 74 6f 20 77 68 69 63 68 20 74 68 65 20  ee to which the 
1db10 69 6d 70 6f 73 74 65 72 0a 20 20 20 20 2a 2a 20  imposter.    ** 
1db20 74 61 62 6c 65 20 73 68 6f 75 6c 64 20 63 6f 6e  table should con
1db30 6e 65 63 74 2e 0a 20 20 20 20 2a 2a 0a 20 20 20  nect..    **.   
1db40 20 2a 2a 20 45 6e 61 62 6c 65 20 69 6d 70 6f 73   ** Enable impos
1db50 74 65 72 20 6d 6f 64 65 20 6f 6e 6c 79 20 77 68  ter mode only wh
1db60 65 6e 20 74 68 65 20 73 63 68 65 6d 61 20 68 61  en the schema ha
1db70 73 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20 70  s already been p
1db80 61 72 73 65 64 2e 20 20 54 68 65 6e 0a 20 20 20  arsed.  Then.   
1db90 20 2a 2a 20 72 75 6e 20 61 20 73 69 6e 67 6c 65   ** run a single
1dba0 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74   CREATE TABLE st
1dbb0 61 74 65 6d 65 6e 74 20 74 6f 20 63 6f 6e 73 74  atement to const
1dbc0 72 75 63 74 20 74 68 65 20 69 6d 70 6f 73 74 65  ruct the imposte
1dbd0 72 20 74 61 62 6c 65 20 69 6e 0a 20 20 20 20 2a  r table in.    *
1dbe0 2a 20 74 68 65 20 70 61 72 73 65 64 20 73 63 68  * the parsed sch
1dbf0 65 6d 61 2e 20 20 54 68 65 6e 20 74 75 72 6e 20  ema.  Then turn 
1dc00 69 6d 70 6f 73 74 65 72 20 6d 6f 64 65 20 62 61  imposter mode ba
1dc10 63 6b 20 6f 66 66 20 61 67 61 69 6e 2e 0a 20 20  ck off again..  
1dc20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 49 66 20 6f    **.    ** If o
1dc30 6e 4f 66 66 3d 3d 30 20 61 6e 64 20 74 6e 75 6d  nOff==0 and tnum
1dc40 3e 30 20 74 68 65 6e 20 72 65 73 65 74 20 74 68  >0 then reset th
1dc50 65 20 73 63 68 65 6d 61 20 66 6f 72 20 61 6c 6c  e schema for all
1dc60 20 64 61 74 61 62 61 73 65 73 2c 20 63 61 75 73   databases, caus
1dc70 69 6e 67 0a 20 20 20 20 2a 2a 20 74 68 65 20 73  ing.    ** the s
1dc80 63 68 65 6d 61 20 74 6f 20 62 65 20 72 65 70 61  chema to be repa
1dc90 72 73 65 64 20 74 68 65 20 6e 65 78 74 20 74 69  rsed the next ti
1dca0 6d 65 20 69 74 20 69 73 20 6e 65 65 64 65 64 2e  me it is needed.
1dcb0 20 20 54 68 69 73 20 68 61 73 20 74 68 65 0a 20    This has the. 
1dcc0 20 20 20 2a 2a 20 65 66 66 65 63 74 20 6f 66 20     ** effect of 
1dcd0 65 72 61 73 69 6e 67 20 61 6c 6c 20 69 6d 70 6f  erasing all impo
1dce0 73 74 65 72 20 74 61 62 6c 65 73 2e 0a 20 20 20  ster tables..   
1dcf0 20 2a 2f 0a 20 20 20 20 63 61 73 65 20 53 51 4c   */.    case SQL
1dd00 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 49 4d 50  ITE_TESTCTRL_IMP
1dd10 4f 53 54 45 52 3a 20 7b 0a 20 20 20 20 20 20 73  OSTER: {.      s
1dd20 71 6c 69 74 65 33 20 2a 64 62 20 3d 20 76 61 5f  qlite3 *db = va_
1dd30 61 72 67 28 61 70 2c 20 73 71 6c 69 74 65 33 2a  arg(ap, sqlite3*
1dd40 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
1dd50 5f 6d 75 74 65 78 5f 65 6e 74 65 72 28 64 62 2d  _mutex_enter(db-
1dd60 3e 6d 75 74 65 78 29 3b 0a 20 20 20 20 20 20 64  >mutex);.      d
1dd70 62 2d 3e 69 6e 69 74 2e 69 44 62 20 3d 20 73 71  b->init.iDb = sq
1dd80 6c 69 74 65 33 46 69 6e 64 44 62 4e 61 6d 65 28  lite3FindDbName(
1dd90 64 62 2c 20 76 61 5f 61 72 67 28 61 70 2c 63 6f  db, va_arg(ap,co
1dda0 6e 73 74 20 63 68 61 72 2a 29 29 3b 0a 20 20 20  nst char*));.   
1ddb0 20 20 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79     db->init.busy
1ddc0 20 3d 20 64 62 2d 3e 69 6e 69 74 2e 69 6d 70 6f   = db->init.impo
1ddd0 73 74 65 72 54 61 62 6c 65 20 3d 20 76 61 5f 61  sterTable = va_a
1dde0 72 67 28 61 70 2c 69 6e 74 29 3b 0a 20 20 20 20  rg(ap,int);.    
1ddf0 20 20 64 62 2d 3e 69 6e 69 74 2e 6e 65 77 54 6e    db->init.newTn
1de00 75 6d 20 3d 20 76 61 5f 61 72 67 28 61 70 2c 69  um = va_arg(ap,i
1de10 6e 74 29 3b 0a 20 20 20 20 20 20 69 66 28 20 64  nt);.      if( d
1de20 62 2d 3e 69 6e 69 74 2e 62 75 73 79 3d 3d 30 20  b->init.busy==0 
1de30 26 26 20 64 62 2d 3e 69 6e 69 74 2e 6e 65 77 54  && db->init.newT
1de40 6e 75 6d 3e 30 20 29 7b 0a 20 20 20 20 20 20 20  num>0 ){.       
1de50 20 73 71 6c 69 74 65 33 52 65 73 65 74 41 6c 6c   sqlite3ResetAll
1de60 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74  SchemasOfConnect
1de70 69 6f 6e 28 64 62 29 3b 0a 20 20 20 20 20 20 7d  ion(db);.      }
1de80 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 6d  .      sqlite3_m
1de90 75 74 65 78 5f 6c 65 61 76 65 28 64 62 2d 3e 6d  utex_leave(db->m
1dea0 75 74 65 78 29 3b 0a 20 20 20 20 20 20 62 72 65  utex);.      bre
1deb0 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  ak;.    }.  }.  
1dec0 76 61 5f 65 6e 64 28 61 70 29 3b 0a 23 65 6e 64  va_end(ap);.#end
1ded0 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
1dee0 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 20 2a  T_BUILTIN_TEST *
1def0 2f 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d  /.  return rc;.}
1df00 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20  ../*.** This is 
1df10 61 20 75 74 69 6c 69 74 79 20 72 6f 75 74 69 6e  a utility routin
1df20 65 2c 20 75 73 65 66 75 6c 20 74 6f 20 56 46 53  e, useful to VFS
1df30 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73   implementations
1df40 2c 20 74 68 61 74 20 63 68 65 63 6b 73 0a 2a 2a  , that checks.**
1df50 20 74 6f 20 73 65 65 20 69 66 20 61 20 64 61 74   to see if a dat
1df60 61 62 61 73 65 20 66 69 6c 65 20 77 61 73 20 61  abase file was a
1df70 20 55 52 49 20 74 68 61 74 20 63 6f 6e 74 61 69   URI that contai
1df80 6e 65 64 20 61 20 73 70 65 63 69 66 69 63 20 71  ned a specific q
1df90 75 65 72 79 20 0a 2a 2a 20 70 61 72 61 6d 65 74  uery .** paramet
1dfa0 65 72 2c 20 61 6e 64 20 69 66 20 73 6f 20 6f 62  er, and if so ob
1dfb0 74 61 69 6e 73 20 74 68 65 20 76 61 6c 75 65 20  tains the value 
1dfc0 6f 66 20 74 68 65 20 71 75 65 72 79 20 70 61 72  of the query par
1dfd0 61 6d 65 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 68  ameter..**.** Th
1dfe0 65 20 7a 46 69 6c 65 6e 61 6d 65 20 61 72 67 75  e zFilename argu
1dff0 6d 65 6e 74 20 69 73 20 74 68 65 20 66 69 6c 65  ment is the file
1e000 6e 61 6d 65 20 70 6f 69 6e 74 65 72 20 70 61 73  name pointer pas
1e010 73 65 64 20 69 6e 74 6f 20 74 68 65 20 78 4f 70  sed into the xOp
1e020 65 6e 28 29 0a 2a 2a 20 6d 65 74 68 6f 64 20 6f  en().** method o
1e030 66 20 61 20 56 46 53 20 69 6d 70 6c 65 6d 65 6e  f a VFS implemen
1e040 74 61 74 69 6f 6e 2e 20 20 54 68 65 20 7a 50 61  tation.  The zPa
1e050 72 61 6d 20 61 72 67 75 6d 65 6e 74 20 69 73 20  ram argument is 
1e060 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 0a  the name of the.
1e070 2a 2a 20 71 75 65 72 79 20 70 61 72 61 6d 65 74  ** query paramet
1e080 65 72 20 77 65 20 73 65 65 6b 2e 20 20 54 68 69  er we seek.  Thi
1e090 73 20 72 6f 75 74 69 6e 65 20 72 65 74 75 72 6e  s routine return
1e0a0 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  s the value of t
1e0b0 68 65 20 7a 50 61 72 61 6d 0a 2a 2a 20 70 61 72  he zParam.** par
1e0c0 61 6d 65 74 65 72 20 69 66 20 69 74 20 65 78 69  ameter if it exi
1e0d0 73 74 73 2e 20 20 49 66 20 74 68 65 20 70 61 72  sts.  If the par
1e0e0 61 6d 65 74 65 72 20 64 6f 65 73 20 6e 6f 74 20  ameter does not 
1e0f0 65 78 69 73 74 2c 20 74 68 69 73 20 72 6f 75 74  exist, this rout
1e100 69 6e 65 0a 2a 2a 20 72 65 74 75 72 6e 73 20 61  ine.** returns a
1e110 20 4e 55 4c 4c 20 70 6f 69 6e 74 65 72 2e 0a 2a   NULL pointer..*
1e120 2f 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71  /.const char *sq
1e130 6c 69 74 65 33 5f 75 72 69 5f 70 61 72 61 6d 65  lite3_uri_parame
1e140 74 65 72 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  ter(const char *
1e150 7a 46 69 6c 65 6e 61 6d 65 2c 20 63 6f 6e 73 74  zFilename, const
1e160 20 63 68 61 72 20 2a 7a 50 61 72 61 6d 29 7b 0a   char *zParam){.
1e170 20 20 69 66 28 20 7a 46 69 6c 65 6e 61 6d 65 3d    if( zFilename=
1e180 3d 30 20 7c 7c 20 7a 50 61 72 61 6d 3d 3d 30 20  =0 || zParam==0 
1e190 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7a 46  ) return 0;.  zF
1e1a0 69 6c 65 6e 61 6d 65 20 2b 3d 20 73 71 6c 69 74  ilename += sqlit
1e1b0 65 33 53 74 72 6c 65 6e 33 30 28 7a 46 69 6c 65  e3Strlen30(zFile
1e1c0 6e 61 6d 65 29 20 2b 20 31 3b 0a 20 20 77 68 69  name) + 1;.  whi
1e1d0 6c 65 28 20 7a 46 69 6c 65 6e 61 6d 65 5b 30 5d  le( zFilename[0]
1e1e0 20 29 7b 0a 20 20 20 20 69 6e 74 20 78 20 3d 20   ){.    int x = 
1e1f0 73 74 72 63 6d 70 28 7a 46 69 6c 65 6e 61 6d 65  strcmp(zFilename
1e200 2c 20 7a 50 61 72 61 6d 29 3b 0a 20 20 20 20 7a  , zParam);.    z
1e210 46 69 6c 65 6e 61 6d 65 20 2b 3d 20 73 71 6c 69  Filename += sqli
1e220 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 46 69 6c  te3Strlen30(zFil
1e230 65 6e 61 6d 65 29 20 2b 20 31 3b 0a 20 20 20 20  ename) + 1;.    
1e240 69 66 28 20 78 3d 3d 30 20 29 20 72 65 74 75 72  if( x==0 ) retur
1e250 6e 20 7a 46 69 6c 65 6e 61 6d 65 3b 0a 20 20 20  n zFilename;.   
1e260 20 7a 46 69 6c 65 6e 61 6d 65 20 2b 3d 20 73 71   zFilename += sq
1e270 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 46  lite3Strlen30(zF
1e280 69 6c 65 6e 61 6d 65 29 20 2b 20 31 3b 0a 20 20  ilename) + 1;.  
1e290 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a  }.  return 0;.}.
1e2a0 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 61 20  ./*.** Return a 
1e2b0 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 20 66 6f  boolean value fo
1e2c0 72 20 61 20 71 75 65 72 79 20 70 61 72 61 6d 65  r a query parame
1e2d0 74 65 72 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  ter..*/.int sqli
1e2e0 74 65 33 5f 75 72 69 5f 62 6f 6f 6c 65 61 6e 28  te3_uri_boolean(
1e2f0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 69 6c  const char *zFil
1e300 65 6e 61 6d 65 2c 20 63 6f 6e 73 74 20 63 68 61  ename, const cha
1e310 72 20 2a 7a 50 61 72 61 6d 2c 20 69 6e 74 20 62  r *zParam, int b
1e320 44 66 6c 74 29 7b 0a 20 20 63 6f 6e 73 74 20 63  Dflt){.  const c
1e330 68 61 72 20 2a 7a 20 3d 20 73 71 6c 69 74 65 33  har *z = sqlite3
1e340 5f 75 72 69 5f 70 61 72 61 6d 65 74 65 72 28 7a  _uri_parameter(z
1e350 46 69 6c 65 6e 61 6d 65 2c 20 7a 50 61 72 61 6d  Filename, zParam
1e360 29 3b 0a 20 20 62 44 66 6c 74 20 3d 20 62 44 66  );.  bDflt = bDf
1e370 6c 74 21 3d 30 3b 0a 20 20 72 65 74 75 72 6e 20  lt!=0;.  return 
1e380 7a 20 3f 20 73 71 6c 69 74 65 33 47 65 74 42 6f  z ? sqlite3GetBo
1e390 6f 6c 65 61 6e 28 7a 2c 20 62 44 66 6c 74 29 20  olean(z, bDflt) 
1e3a0 3a 20 62 44 66 6c 74 3b 0a 7d 0a 0a 2f 2a 0a 2a  : bDflt;.}../*.*
1e3b0 2a 20 52 65 74 75 72 6e 20 61 20 36 34 2d 62 69  * Return a 64-bi
1e3c0 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20  t integer value 
1e3d0 66 6f 72 20 61 20 71 75 65 72 79 20 70 61 72 61  for a query para
1e3e0 6d 65 74 65 72 2e 0a 2a 2f 0a 73 71 6c 69 74 65  meter..*/.sqlite
1e3f0 33 5f 69 6e 74 36 34 20 73 71 6c 69 74 65 33 5f  3_int64 sqlite3_
1e400 75 72 69 5f 69 6e 74 36 34 28 0a 20 20 63 6f 6e  uri_int64(.  con
1e410 73 74 20 63 68 61 72 20 2a 7a 46 69 6c 65 6e 61  st char *zFilena
1e420 6d 65 2c 20 20 20 20 2f 2a 20 46 69 6c 65 6e 61  me,    /* Filena
1e430 6d 65 20 61 73 20 70 61 73 73 65 64 20 74 6f 20  me as passed to 
1e440 78 4f 70 65 6e 20 2a 2f 0a 20 20 63 6f 6e 73 74  xOpen */.  const
1e450 20 63 68 61 72 20 2a 7a 50 61 72 61 6d 2c 20 20   char *zParam,  
1e460 20 20 20 20 20 2f 2a 20 55 52 49 20 70 61 72 61       /* URI para
1e470 6d 65 74 65 72 20 73 6f 75 67 68 74 20 2a 2f 0a  meter sought */.
1e480 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20    sqlite3_int64 
1e490 62 44 66 6c 74 20 20 20 20 20 20 20 2f 2a 20 72  bDflt       /* r
1e4a0 65 74 75 72 6e 20 69 66 20 70 61 72 61 6d 65 74  eturn if paramet
1e4b0 65 72 20 69 73 20 6d 69 73 73 69 6e 67 20 2a 2f  er is missing */
1e4c0 0a 29 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  .){.  const char
1e4d0 20 2a 7a 20 3d 20 73 71 6c 69 74 65 33 5f 75 72   *z = sqlite3_ur
1e4e0 69 5f 70 61 72 61 6d 65 74 65 72 28 7a 46 69 6c  i_parameter(zFil
1e4f0 65 6e 61 6d 65 2c 20 7a 50 61 72 61 6d 29 3b 0a  ename, zParam);.
1e500 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20    sqlite3_int64 
1e510 76 3b 0a 20 20 69 66 28 20 7a 20 26 26 20 73 71  v;.  if( z && sq
1e520 6c 69 74 65 33 44 65 63 4f 72 48 65 78 54 6f 49  lite3DecOrHexToI
1e530 36 34 28 7a 2c 20 26 76 29 3d 3d 53 51 4c 49 54  64(z, &v)==SQLIT
1e540 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 62 44 66 6c  E_OK ){.    bDfl
1e550 74 20 3d 20 76 3b 0a 20 20 7d 0a 20 20 72 65 74  t = v;.  }.  ret
1e560 75 72 6e 20 62 44 66 6c 74 3b 0a 7d 0a 0a 2f 2a  urn bDflt;.}../*
1e570 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 42  .** Return the B
1e580 74 72 65 65 20 70 6f 69 6e 74 65 72 20 69 64 65  tree pointer ide
1e590 6e 74 69 66 69 65 64 20 62 79 20 7a 44 62 4e 61  ntified by zDbNa
1e5a0 6d 65 2e 20 20 52 65 74 75 72 6e 20 4e 55 4c 4c  me.  Return NULL
1e5b0 20 69 66 20 6e 6f 74 20 66 6f 75 6e 64 2e 0a 2a   if not found..*
1e5c0 2f 0a 42 74 72 65 65 20 2a 73 71 6c 69 74 65 33  /.Btree *sqlite3
1e5d0 44 62 4e 61 6d 65 54 6f 42 74 72 65 65 28 73 71  DbNameToBtree(sq
1e5e0 6c 69 74 65 33 20 2a 64 62 2c 20 63 6f 6e 73 74  lite3 *db, const
1e5f0 20 63 68 61 72 20 2a 7a 44 62 4e 61 6d 65 29 7b   char *zDbName){
1e600 0a 20 20 69 6e 74 20 69 3b 0a 20 20 66 6f 72 28  .  int i;.  for(
1e610 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20  i=0; i<db->nDb; 
1e620 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 64 62  i++){.    if( db
1e630 2d 3e 61 44 62 5b 69 5d 2e 70 42 74 0a 20 20 20  ->aDb[i].pBt.   
1e640 20 20 26 26 20 28 7a 44 62 4e 61 6d 65 3d 3d 30    && (zDbName==0
1e650 20 7c 7c 20 73 71 6c 69 74 65 33 53 74 72 49 43   || sqlite3StrIC
1e660 6d 70 28 7a 44 62 4e 61 6d 65 2c 20 64 62 2d 3e  mp(zDbName, db->
1e670 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65 29 3d 3d 30  aDb[i].zName)==0
1e680 29 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20 72  ).    ){.      r
1e690 65 74 75 72 6e 20 64 62 2d 3e 61 44 62 5b 69 5d  eturn db->aDb[i]
1e6a0 2e 70 42 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  .pBt;.    }.  }.
1e6b0 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f    return 0;.}../
1e6c0 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20  *.** Return the 
1e6d0 66 69 6c 65 6e 61 6d 65 20 6f 66 20 74 68 65 20  filename of the 
1e6e0 64 61 74 61 62 61 73 65 20 61 73 73 6f 63 69 61  database associa
1e6f0 74 65 64 20 77 69 74 68 20 61 20 64 61 74 61 62  ted with a datab
1e700 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f  ase.** connectio
1e710 6e 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 63 68 61 72  n..*/.const char
1e720 20 2a 73 71 6c 69 74 65 33 5f 64 62 5f 66 69 6c   *sqlite3_db_fil
1e730 65 6e 61 6d 65 28 73 71 6c 69 74 65 33 20 2a 64  ename(sqlite3 *d
1e740 62 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  b, const char *z
1e750 44 62 4e 61 6d 65 29 7b 0a 20 20 42 74 72 65 65  DbName){.  Btree
1e760 20 2a 70 42 74 3b 0a 23 69 66 64 65 66 20 53 51   *pBt;.#ifdef SQ
1e770 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41 50 49 5f  LITE_ENABLE_API_
1e780 41 52 4d 4f 52 0a 20 20 69 66 28 20 21 73 71 6c  ARMOR.  if( !sql
1e790 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 4f  ite3SafetyCheckO
1e7a0 6b 28 64 62 29 20 29 7b 0a 20 20 20 20 28 76 6f  k(db) ){.    (vo
1e7b0 69 64 29 53 51 4c 49 54 45 5f 4d 49 53 55 53 45  id)SQLITE_MISUSE
1e7c0 5f 42 4b 50 54 3b 0a 20 20 20 20 72 65 74 75 72  _BKPT;.    retur
1e7d0 6e 20 30 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a  n 0;.  }.#endif.
1e7e0 20 20 70 42 74 20 3d 20 73 71 6c 69 74 65 33 44    pBt = sqlite3D
1e7f0 62 4e 61 6d 65 54 6f 42 74 72 65 65 28 64 62 2c  bNameToBtree(db,
1e800 20 7a 44 62 4e 61 6d 65 29 3b 0a 20 20 72 65 74   zDbName);.  ret
1e810 75 72 6e 20 70 42 74 20 3f 20 73 71 6c 69 74 65  urn pBt ? sqlite
1e820 33 42 74 72 65 65 47 65 74 46 69 6c 65 6e 61 6d  3BtreeGetFilenam
1e830 65 28 70 42 74 29 20 3a 20 30 3b 0a 7d 0a 0a 2f  e(pBt) : 0;.}../
1e840 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 31 20 69 66  *.** Return 1 if
1e850 20 64 61 74 61 62 61 73 65 20 69 73 20 72 65 61   database is rea
1e860 64 2d 6f 6e 6c 79 20 6f 72 20 30 20 69 66 20 72  d-only or 0 if r
1e870 65 61 64 2f 77 72 69 74 65 2e 20 20 52 65 74 75  ead/write.  Retu
1e880 72 6e 20 2d 31 20 69 66 0a 2a 2a 20 6e 6f 20 73  rn -1 if.** no s
1e890 75 63 68 20 64 61 74 61 62 61 73 65 20 65 78 69  uch database exi
1e8a0 73 74 73 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  sts..*/.int sqli
1e8b0 74 65 33 5f 64 62 5f 72 65 61 64 6f 6e 6c 79 28  te3_db_readonly(
1e8c0 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 63 6f 6e  sqlite3 *db, con
1e8d0 73 74 20 63 68 61 72 20 2a 7a 44 62 4e 61 6d 65  st char *zDbName
1e8e0 29 7b 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b  ){.  Btree *pBt;
1e8f0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
1e900 4e 41 42 4c 45 5f 41 50 49 5f 41 52 4d 4f 52 0a  NABLE_API_ARMOR.
1e910 20 20 69 66 28 20 21 73 71 6c 69 74 65 33 53 61    if( !sqlite3Sa
1e920 66 65 74 79 43 68 65 63 6b 4f 6b 28 64 62 29 20  fetyCheckOk(db) 
1e930 29 7b 0a 20 20 20 20 28 76 6f 69 64 29 53 51 4c  ){.    (void)SQL
1e940 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54 3b  ITE_MISUSE_BKPT;
1e950 0a 20 20 20 20 72 65 74 75 72 6e 20 2d 31 3b 0a  .    return -1;.
1e960 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 70 42 74    }.#endif.  pBt
1e970 20 3d 20 73 71 6c 69 74 65 33 44 62 4e 61 6d 65   = sqlite3DbName
1e980 54 6f 42 74 72 65 65 28 64 62 2c 20 7a 44 62 4e  ToBtree(db, zDbN
1e990 61 6d 65 29 3b 0a 20 20 72 65 74 75 72 6e 20 70  ame);.  return p
1e9a0 42 74 20 3f 20 73 71 6c 69 74 65 33 42 74 72 65  Bt ? sqlite3Btre
1e9b0 65 49 73 52 65 61 64 6f 6e 6c 79 28 70 42 74 29  eIsReadonly(pBt)
1e9c0 20 3a 20 2d 31 3b 0a 7d 0a                        : -1;.}.