/ Hex Artifact Content
Login

Artifact 5ea52d49432dabf9c472f549fcb6bb1b62ab54b1358218c3684ec1041a23382d:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 4d 61 69 6e 20 66  ******.** Main f
0180: 69 6c 65 20 66 6f 72 20 74 68 65 20 53 51 4c 69  ile for the SQLi
0190: 74 65 20 6c 69 62 72 61 72 79 2e 20 20 54 68 65  te library.  The
01a0: 20 72 6f 75 74 69 6e 65 73 20 69 6e 20 74 68 69   routines in thi
01b0: 73 20 66 69 6c 65 0a 2a 2a 20 69 6d 70 6c 65 6d  s file.** implem
01c0: 65 6e 74 20 74 68 65 20 70 72 6f 67 72 61 6d 6d  ent the programm
01d0: 65 72 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20  er interface to 
01e0: 74 68 65 20 6c 69 62 72 61 72 79 2e 20 20 52 6f  the library.  Ro
01f0: 75 74 69 6e 65 73 20 69 6e 0a 2a 2a 20 6f 74 68  utines in.** oth
0200: 65 72 20 66 69 6c 65 73 20 61 72 65 20 66 6f 72  er files are for
0210: 20 69 6e 74 65 72 6e 61 6c 20 75 73 65 20 62 79   internal use by
0220: 20 53 51 4c 69 74 65 20 61 6e 64 20 73 68 6f 75   SQLite and shou
0230: 6c 64 20 6e 6f 74 20 62 65 0a 2a 2a 20 61 63 63  ld not be.** acc
0240: 65 73 73 65 64 20 62 79 20 75 73 65 72 73 20 6f  essed by users o
0250: 66 20 74 68 65 20 6c 69 62 72 61 72 79 2e 0a 2a  f the library..*
0260: 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73 71 6c 69  /.#include "sqli
0270: 74 65 49 6e 74 2e 68 22 0a 0a 23 69 66 64 65 66  teInt.h"..#ifdef
0280: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
0290: 51 4c 52 52 0a 23 20 69 6e 63 6c 75 64 65 20 22  QLRR.# include "
02a0: 73 71 6c 72 72 2e 68 22 0a 23 65 6e 64 69 66 20  sqlrr.h".#endif 
02b0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
02c0: 4e 41 42 4c 45 5f 46 54 53 33 0a 23 20 69 6e 63  NABLE_FTS3.# inc
02d0: 6c 75 64 65 20 22 66 74 73 33 2e 68 22 0a 23 65  lude "fts3.h".#e
02e0: 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49  ndif.#ifdef SQLI
02f0: 54 45 5f 45 4e 41 42 4c 45 5f 52 54 52 45 45 0a  TE_ENABLE_RTREE.
0300: 23 20 69 6e 63 6c 75 64 65 20 22 72 74 72 65 65  # include "rtree
0310: 2e 68 22 0a 23 65 6e 64 69 66 0a 23 69 66 64 65  .h".#endif.#ifde
0320: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
0330: 49 43 55 0a 23 20 69 6e 63 6c 75 64 65 20 22 73  ICU.# include "s
0340: 71 6c 69 74 65 69 63 75 2e 68 22 0a 23 65 6e 64  qliteicu.h".#end
0350: 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  if.#ifdef SQLITE
0360: 5f 45 4e 41 42 4c 45 5f 4a 53 4f 4e 31 0a 69 6e  _ENABLE_JSON1.in
0370: 74 20 73 71 6c 69 74 65 33 4a 73 6f 6e 31 49 6e  t sqlite3Json1In
0380: 69 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65  it(sqlite3*);.#e
0390: 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49  ndif.#ifdef SQLI
03a0: 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 35 0a 69  TE_ENABLE_FTS5.i
03b0: 6e 74 20 73 71 6c 69 74 65 33 46 74 73 35 49 6e  nt sqlite3Fts5In
03c0: 69 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65  it(sqlite3*);.#e
03d0: 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51  ndif..#ifndef SQ
03e0: 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f  LITE_AMALGAMATIO
03f0: 4e 0a 2f 2a 20 49 4d 50 4c 45 4d 45 4e 54 41 54  N./* IMPLEMENTAT
0400: 49 4f 4e 2d 4f 46 3a 20 52 2d 34 36 36 35 36 2d  ION-OF: R-46656-
0410: 34 35 31 35 36 20 54 68 65 20 73 71 6c 69 74 65  45156 The sqlite
0420: 33 5f 76 65 72 73 69 6f 6e 5b 5d 20 73 74 72 69  3_version[] stri
0430: 6e 67 20 63 6f 6e 73 74 61 6e 74 0a 2a 2a 20 63  ng constant.** c
0440: 6f 6e 74 61 69 6e 73 20 74 68 65 20 74 65 78 74  ontains the text
0450: 20 6f 66 20 53 51 4c 49 54 45 5f 56 45 52 53 49   of SQLITE_VERSI
0460: 4f 4e 20 6d 61 63 72 6f 2e 20 0a 2a 2f 0a 63 6f  ON macro. .*/.co
0470: 6e 73 74 20 63 68 61 72 20 73 71 6c 69 74 65 33  nst char sqlite3
0480: 5f 76 65 72 73 69 6f 6e 5b 5d 20 3d 20 53 51 4c  _version[] = SQL
0490: 49 54 45 5f 56 45 52 53 49 4f 4e 3b 0a 23 65 6e  ITE_VERSION;.#en
04a0: 64 69 66 0a 0a 2f 2a 20 49 4d 50 4c 45 4d 45 4e  dif../* IMPLEMEN
04b0: 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 35 33 35  TATION-OF: R-535
04c0: 33 36 2d 34 32 35 37 35 20 54 68 65 20 73 71 6c  36-42575 The sql
04d0: 69 74 65 33 5f 6c 69 62 76 65 72 73 69 6f 6e 28  ite3_libversion(
04e0: 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
04f0: 6e 73 0a 2a 2a 20 61 20 70 6f 69 6e 74 65 72 20  ns.** a pointer 
0500: 74 6f 20 74 68 65 20 74 6f 20 74 68 65 20 73 71  to the to the sq
0510: 6c 69 74 65 33 5f 76 65 72 73 69 6f 6e 5b 5d 20  lite3_version[] 
0520: 73 74 72 69 6e 67 20 63 6f 6e 73 74 61 6e 74 2e  string constant.
0530: 20 0a 2a 2f 0a 63 6f 6e 73 74 20 63 68 61 72 20   .*/.const char 
0540: 2a 73 71 6c 69 74 65 33 5f 6c 69 62 76 65 72 73  *sqlite3_libvers
0550: 69 6f 6e 28 76 6f 69 64 29 7b 20 72 65 74 75 72  ion(void){ retur
0560: 6e 20 73 71 6c 69 74 65 33 5f 76 65 72 73 69 6f  n sqlite3_versio
0570: 6e 3b 20 7d 0a 0a 2f 2a 20 49 4d 50 4c 45 4d 45  n; }../* IMPLEME
0580: 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 36 33  NTATION-OF: R-63
0590: 31 32 34 2d 33 39 33 30 30 20 54 68 65 20 73 71  124-39300 The sq
05a0: 6c 69 74 65 33 5f 73 6f 75 72 63 65 69 64 28 29  lite3_sourceid()
05b0: 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
05c0: 73 20 61 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74  s a.** pointer t
05d0: 6f 20 61 20 73 74 72 69 6e 67 20 63 6f 6e 73 74  o a string const
05e0: 61 6e 74 20 77 68 6f 73 65 20 76 61 6c 75 65 20  ant whose value 
05f0: 69 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 74  is the same as t
0600: 68 65 0a 2a 2a 20 53 51 4c 49 54 45 5f 53 4f 55  he.** SQLITE_SOU
0610: 52 43 45 5f 49 44 20 43 20 70 72 65 70 72 6f 63  RCE_ID C preproc
0620: 65 73 73 6f 72 20 6d 61 63 72 6f 2e 20 0a 2a 2f  essor macro. .*/
0630: 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c  .const char *sql
0640: 69 74 65 33 5f 73 6f 75 72 63 65 69 64 28 76 6f  ite3_sourceid(vo
0650: 69 64 29 7b 20 72 65 74 75 72 6e 20 53 51 4c 49  id){ return SQLI
0660: 54 45 5f 53 4f 55 52 43 45 5f 49 44 3b 20 7d 0a  TE_SOURCE_ID; }.
0670: 0a 2f 2a 20 49 4d 50 4c 45 4d 45 4e 54 41 54 49  ./* IMPLEMENTATI
0680: 4f 4e 2d 4f 46 3a 20 52 2d 33 35 32 31 30 2d 36  ON-OF: R-35210-6
0690: 33 35 30 38 20 54 68 65 20 73 71 6c 69 74 65 33  3508 The sqlite3
06a0: 5f 6c 69 62 76 65 72 73 69 6f 6e 5f 6e 75 6d 62  _libversion_numb
06b0: 65 72 28 29 20 66 75 6e 63 74 69 6f 6e 0a 2a 2a  er() function.**
06c0: 20 72 65 74 75 72 6e 73 20 61 6e 20 69 6e 74 65   returns an inte
06d0: 67 65 72 20 65 71 75 61 6c 20 74 6f 20 53 51 4c  ger equal to SQL
06e0: 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42  ITE_VERSION_NUMB
06f0: 45 52 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  ER..*/.int sqlit
0700: 65 33 5f 6c 69 62 76 65 72 73 69 6f 6e 5f 6e 75  e3_libversion_nu
0710: 6d 62 65 72 28 76 6f 69 64 29 7b 20 72 65 74 75  mber(void){ retu
0720: 72 6e 20 53 51 4c 49 54 45 5f 56 45 52 53 49 4f  rn SQLITE_VERSIO
0730: 4e 5f 4e 55 4d 42 45 52 3b 20 7d 0a 0a 2f 2a 20  N_NUMBER; }../* 
0740: 49 4d 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f  IMPLEMENTATION-O
0750: 46 3a 20 52 2d 32 30 37 39 30 2d 31 34 30 32 35  F: R-20790-14025
0760: 20 54 68 65 20 73 71 6c 69 74 65 33 5f 74 68 72   The sqlite3_thr
0770: 65 61 64 73 61 66 65 28 29 20 66 75 6e 63 74 69  eadsafe() functi
0780: 6f 6e 20 72 65 74 75 72 6e 73 0a 2a 2a 20 7a 65  on returns.** ze
0790: 72 6f 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69  ro if and only i
07a0: 66 20 53 51 4c 69 74 65 20 77 61 73 20 63 6f 6d  f SQLite was com
07b0: 70 69 6c 65 64 20 77 69 74 68 20 6d 75 74 65 78  piled with mutex
07c0: 69 6e 67 20 63 6f 64 65 20 6f 6d 69 74 74 65 64  ing code omitted
07d0: 20 64 75 65 20 74 6f 0a 2a 2a 20 74 68 65 20 53   due to.** the S
07e0: 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45  QLITE_THREADSAFE
07f0: 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70   compile-time op
0800: 74 69 6f 6e 20 62 65 69 6e 67 20 73 65 74 20 74  tion being set t
0810: 6f 20 30 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  o 0..*/.int sqli
0820: 74 65 33 5f 74 68 72 65 61 64 73 61 66 65 28 76  te3_threadsafe(v
0830: 6f 69 64 29 7b 20 72 65 74 75 72 6e 20 53 51 4c  oid){ return SQL
0840: 49 54 45 5f 54 48 52 45 41 44 53 41 46 45 3b 20  ITE_THREADSAFE; 
0850: 7d 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 63 6f  }../*.** When co
0860: 6d 70 69 6c 69 6e 67 20 74 68 65 20 74 65 73 74  mpiling the test
0870: 20 66 69 78 74 75 72 65 20 6f 72 20 77 69 74 68   fixture or with
0880: 20 64 65 62 75 67 67 69 6e 67 20 65 6e 61 62 6c   debugging enabl
0890: 65 64 20 28 6f 6e 20 57 69 6e 33 32 29 2c 0a 2a  ed (on Win32),.*
08a0: 2a 20 74 68 69 73 20 76 61 72 69 61 62 6c 65 20  * this variable 
08b0: 62 65 69 6e 67 20 73 65 74 20 74 6f 20 6e 6f 6e  being set to non
08c0: 2d 7a 65 72 6f 20 77 69 6c 6c 20 63 61 75 73 65  -zero will cause
08d0: 20 4f 53 54 52 41 43 45 20 6d 61 63 72 6f 73 20   OSTRACE macros 
08e0: 74 6f 20 65 6d 69 74 0a 2a 2a 20 65 78 74 72 61  to emit.** extra
08f0: 20 64 69 61 67 6e 6f 73 74 69 63 20 69 6e 66 6f   diagnostic info
0900: 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 64  rmation..*/.#ifd
0910: 65 66 20 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f  ef SQLITE_HAVE_O
0920: 53 5f 54 52 41 43 45 0a 23 20 69 66 6e 64 65 66  S_TRACE.# ifndef
0930: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 5f 4f 53   SQLITE_DEBUG_OS
0940: 5f 54 52 41 43 45 0a 23 20 20 20 64 65 66 69 6e  _TRACE.#   defin
0950: 65 20 53 51 4c 49 54 45 5f 44 45 42 55 47 5f 4f  e SQLITE_DEBUG_O
0960: 53 5f 54 52 41 43 45 20 30 0a 23 20 65 6e 64 69  S_TRACE 0.# endi
0970: 66 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4f  f.  int sqlite3O
0980: 53 54 72 61 63 65 20 3d 20 53 51 4c 49 54 45 5f  STrace = SQLITE_
0990: 44 45 42 55 47 5f 4f 53 5f 54 52 41 43 45 3b 0a  DEBUG_OS_TRACE;.
09a0: 23 65 6e 64 69 66 0a 0a 23 69 66 20 21 64 65 66  #endif..#if !def
09b0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
09c0: 5f 54 52 41 43 45 29 20 26 26 20 64 65 66 69 6e  _TRACE) && defin
09d0: 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
09e0: 5f 49 4f 54 52 41 43 45 29 0a 2f 2a 0a 2a 2a 20  _IOTRACE)./*.** 
09f0: 49 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  If the following
0a00: 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65   function pointe
0a10: 72 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 20 61 6e  r is not NULL an
0a20: 64 20 69 66 0a 2a 2a 20 53 51 4c 49 54 45 5f 45  d if.** SQLITE_E
0a30: 4e 41 42 4c 45 5f 49 4f 54 52 41 43 45 20 69 73  NABLE_IOTRACE is
0a40: 20 65 6e 61 62 6c 65 64 2c 20 74 68 65 6e 20 6d   enabled, then m
0a50: 65 73 73 61 67 65 73 20 64 65 73 63 72 69 62 69  essages describi
0a60: 6e 67 0a 2a 2a 20 49 2f 4f 20 61 63 74 69 76 65  ng.** I/O active
0a70: 20 61 72 65 20 77 72 69 74 74 65 6e 20 75 73 69   are written usi
0a80: 6e 67 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e  ng this function
0a90: 2e 20 20 54 68 65 73 65 20 6d 65 73 73 61 67 65  .  These message
0aa0: 73 0a 2a 2a 20 61 72 65 20 69 6e 74 65 6e 64 65  s.** are intende
0ab0: 64 20 66 6f 72 20 64 65 62 75 67 67 69 6e 67 20  d for debugging 
0ac0: 61 63 74 69 76 69 74 79 20 6f 6e 6c 79 2e 0a 2a  activity only..*
0ad0: 2f 0a 53 51 4c 49 54 45 5f 41 50 49 20 76 6f 69  /.SQLITE_API voi
0ae0: 64 20 28 53 51 4c 49 54 45 5f 43 44 45 43 4c 20  d (SQLITE_CDECL 
0af0: 2a 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 29  *sqlite3IoTrace)
0b00: 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e  (const char*, ..
0b10: 2e 29 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a  .) = 0;.#endif..
0b20: 2f 2a 0a 2a 2a 20 49 66 20 74 68 65 20 66 6f 6c  /*.** If the fol
0b30: 6c 6f 77 69 6e 67 20 67 6c 6f 62 61 6c 20 76 61  lowing global va
0b40: 72 69 61 62 6c 65 20 70 6f 69 6e 74 73 20 74 6f  riable points to
0b50: 20 61 20 73 74 72 69 6e 67 20 77 68 69 63 68 20   a string which 
0b60: 69 73 20 74 68 65 0a 2a 2a 20 6e 61 6d 65 20 6f  is the.** name o
0b70: 66 20 61 20 64 69 72 65 63 74 6f 72 79 2c 20 74  f a directory, t
0b80: 68 65 6e 20 74 68 61 74 20 64 69 72 65 63 74 6f  hen that directo
0b90: 72 79 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20  ry will be used 
0ba0: 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 65 6d 70  to store.** temp
0bb0: 6f 72 61 72 79 20 66 69 6c 65 73 2e 0a 2a 2a 0a  orary files..**.
0bc0: 2a 2a 20 53 65 65 20 61 6c 73 6f 20 74 68 65 20  ** See also the 
0bd0: 22 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f  "PRAGMA temp_sto
0be0: 72 65 5f 64 69 72 65 63 74 6f 72 79 22 20 53 51  re_directory" SQ
0bf0: 4c 20 63 6f 6d 6d 61 6e 64 2e 0a 2a 2f 0a 63 68  L command..*/.ch
0c00: 61 72 20 2a 73 71 6c 69 74 65 33 5f 74 65 6d 70  ar *sqlite3_temp
0c10: 5f 64 69 72 65 63 74 6f 72 79 20 3d 20 30 3b 0a  _directory = 0;.
0c20: 0a 2f 2a 0a 2a 2a 20 49 66 20 74 68 65 20 66 6f  ./*.** If the fo
0c30: 6c 6c 6f 77 69 6e 67 20 67 6c 6f 62 61 6c 20 76  llowing global v
0c40: 61 72 69 61 62 6c 65 20 70 6f 69 6e 74 73 20 74  ariable points t
0c50: 6f 20 61 20 73 74 72 69 6e 67 20 77 68 69 63 68  o a string which
0c60: 20 69 73 20 74 68 65 0a 2a 2a 20 6e 61 6d 65 20   is the.** name 
0c70: 6f 66 20 61 20 64 69 72 65 63 74 6f 72 79 2c 20  of a directory, 
0c80: 74 68 65 6e 20 74 68 61 74 20 64 69 72 65 63 74  then that direct
0c90: 6f 72 79 20 77 69 6c 6c 20 62 65 20 75 73 65 64  ory will be used
0ca0: 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 61 6c 6c   to store.** all
0cb0: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73 20   database files 
0cc0: 73 70 65 63 69 66 69 65 64 20 77 69 74 68 20 61  specified with a
0cd0: 20 72 65 6c 61 74 69 76 65 20 70 61 74 68 6e 61   relative pathna
0ce0: 6d 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  me..**.** See al
0cf0: 73 6f 20 74 68 65 20 22 50 52 41 47 4d 41 20 64  so the "PRAGMA d
0d00: 61 74 61 5f 73 74 6f 72 65 5f 64 69 72 65 63 74  ata_store_direct
0d10: 6f 72 79 22 20 53 51 4c 20 63 6f 6d 6d 61 6e 64  ory" SQL command
0d20: 2e 0a 2a 2f 0a 63 68 61 72 20 2a 73 71 6c 69 74  ..*/.char *sqlit
0d30: 65 33 5f 64 61 74 61 5f 64 69 72 65 63 74 6f 72  e3_data_director
0d40: 79 20 3d 20 30 3b 0a 0a 2f 2a 0a 2a 2a 20 49 6e  y = 0;../*.** In
0d50: 69 74 69 61 6c 69 7a 65 20 53 51 4c 69 74 65 2e  itialize SQLite.
0d60: 20 20 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f    .**.** This ro
0d70: 75 74 69 6e 65 20 6d 75 73 74 20 62 65 20 63 61  utine must be ca
0d80: 6c 6c 65 64 20 74 6f 20 69 6e 69 74 69 61 6c 69  lled to initiali
0d90: 7a 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 61 6c  ze the memory al
0da0: 6c 6f 63 61 74 69 6f 6e 2c 0a 2a 2a 20 56 46 53  location,.** VFS
0db0: 2c 20 61 6e 64 20 6d 75 74 65 78 20 73 75 62 73  , and mutex subs
0dc0: 79 73 74 65 6d 73 20 70 72 69 6f 72 20 74 6f 20  ystems prior to 
0dd0: 64 6f 69 6e 67 20 61 6e 79 20 73 65 72 69 6f 75  doing any seriou
0de0: 73 20 77 6f 72 6b 20 77 69 74 68 0a 2a 2a 20 53  s work with.** S
0df0: 51 4c 69 74 65 2e 20 20 42 75 74 20 61 73 20 6c  QLite.  But as l
0e00: 6f 6e 67 20 61 73 20 79 6f 75 20 64 6f 20 6e 6f  ong as you do no
0e10: 74 20 63 6f 6d 70 69 6c 65 20 77 69 74 68 20 53  t compile with S
0e20: 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49  QLITE_OMIT_AUTOI
0e30: 4e 49 54 0a 2a 2a 20 74 68 69 73 20 72 6f 75 74  NIT.** this rout
0e40: 69 6e 65 20 77 69 6c 6c 20 62 65 20 63 61 6c 6c  ine will be call
0e50: 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  ed automatically
0e60: 20 62 79 20 6b 65 79 20 72 6f 75 74 69 6e 65 73   by key routines
0e70: 20 73 75 63 68 20 61 73 0a 2a 2a 20 73 71 6c 69   such as.** sqli
0e80: 74 65 33 5f 6f 70 65 6e 28 29 2e 20 20 0a 2a 2a  te3_open().  .**
0e90: 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65  .** This routine
0ea0: 20 69 73 20 61 20 6e 6f 2d 6f 70 20 65 78 63 65   is a no-op exce
0eb0: 70 74 20 6f 6e 20 69 74 73 20 76 65 72 79 20 66  pt on its very f
0ec0: 69 72 73 74 20 63 61 6c 6c 20 66 6f 72 20 74 68  irst call for th
0ed0: 65 20 70 72 6f 63 65 73 73 2c 0a 2a 2a 20 6f 72  e process,.** or
0ee0: 20 66 6f 72 20 74 68 65 20 66 69 72 73 74 20 63   for the first c
0ef0: 61 6c 6c 20 61 66 74 65 72 20 61 20 63 61 6c 6c  all after a call
0f00: 20 74 6f 20 73 71 6c 69 74 65 33 5f 73 68 75 74   to sqlite3_shut
0f10: 64 6f 77 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  down..**.** The 
0f20: 66 69 72 73 74 20 74 68 72 65 61 64 20 74 6f 20  first thread to 
0f30: 63 61 6c 6c 20 74 68 69 73 20 72 6f 75 74 69 6e  call this routin
0f40: 65 20 72 75 6e 73 20 74 68 65 20 69 6e 69 74 69  e runs the initi
0f50: 61 6c 69 7a 61 74 69 6f 6e 20 74 6f 0a 2a 2a 20  alization to.** 
0f60: 63 6f 6d 70 6c 65 74 69 6f 6e 2e 20 20 49 66 20  completion.  If 
0f70: 73 75 62 73 65 71 75 65 6e 74 20 74 68 72 65 61  subsequent threa
0f80: 64 73 20 63 61 6c 6c 20 74 68 69 73 20 72 6f 75  ds call this rou
0f90: 74 69 6e 65 20 62 65 66 6f 72 65 20 74 68 65 20  tine before the 
0fa0: 66 69 72 73 74 0a 2a 2a 20 74 68 72 65 61 64 20  first.** thread 
0fb0: 68 61 73 20 66 69 6e 69 73 68 65 64 20 74 68 65  has finished the
0fc0: 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20   initialization 
0fd0: 70 72 6f 63 65 73 73 2c 20 74 68 65 6e 20 74 68  process, then th
0fe0: 65 20 73 75 62 73 65 71 75 65 6e 74 0a 2a 2a 20  e subsequent.** 
0ff0: 74 68 72 65 61 64 73 20 6d 75 73 74 20 62 6c 6f  threads must blo
1000: 63 6b 20 75 6e 74 69 6c 20 74 68 65 20 66 69 72  ck until the fir
1010: 73 74 20 74 68 72 65 61 64 20 66 69 6e 69 73 68  st thread finish
1020: 65 73 20 77 69 74 68 20 74 68 65 20 69 6e 69 74  es with the init
1030: 69 61 6c 69 7a 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a  ialization..**.*
1040: 2a 20 54 68 65 20 66 69 72 73 74 20 74 68 72 65  * The first thre
1050: 61 64 20 6d 69 67 68 74 20 63 61 6c 6c 20 74 68  ad might call th
1060: 69 73 20 72 6f 75 74 69 6e 65 20 72 65 63 75 72  is routine recur
1070: 73 69 76 65 6c 79 2e 20 20 52 65 63 75 72 73 69  sively.  Recursi
1080: 76 65 0a 2a 2a 20 63 61 6c 6c 73 20 74 6f 20 74  ve.** calls to t
1090: 68 69 73 20 72 6f 75 74 69 6e 65 20 73 68 6f 75  his routine shou
10a0: 6c 64 20 6e 6f 74 20 62 6c 6f 63 6b 2c 20 6f 66  ld not block, of
10b0: 20 63 6f 75 72 73 65 2e 20 20 4f 74 68 65 72 77   course.  Otherw
10c0: 69 73 65 20 74 68 65 0a 2a 2a 20 69 6e 69 74 69  ise the.** initi
10d0: 61 6c 69 7a 61 74 69 6f 6e 20 70 72 6f 63 65 73  alization proces
10e0: 73 20 77 6f 75 6c 64 20 6e 65 76 65 72 20 63 6f  s would never co
10f0: 6d 70 6c 65 74 65 2e 0a 2a 2a 0a 2a 2a 20 4c 65  mplete..**.** Le
1100: 74 20 58 20 62 65 20 74 68 65 20 66 69 72 73 74  t X be the first
1110: 20 74 68 72 65 61 64 20 74 6f 20 65 6e 74 65 72   thread to enter
1120: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20 20   this routine.  
1130: 4c 65 74 20 59 20 62 65 20 73 6f 6d 65 20 6f 74  Let Y be some ot
1140: 68 65 72 0a 2a 2a 20 74 68 72 65 61 64 2e 20 20  her.** thread.  
1150: 54 68 65 6e 20 77 68 69 6c 65 20 74 68 65 20 69  Then while the i
1160: 6e 69 74 69 61 6c 20 69 6e 76 6f 63 61 74 69 6f  nitial invocatio
1170: 6e 20 6f 66 20 74 68 69 73 20 72 6f 75 74 69 6e  n of this routin
1180: 65 20 62 79 20 58 20 69 73 0a 2a 2a 20 69 6e 63  e by X is.** inc
1190: 6f 6d 70 6c 65 74 65 2c 20 69 74 20 69 73 20 72  omplete, it is r
11a0: 65 71 75 69 72 65 64 20 74 68 61 74 3a 0a 2a 2a  equired that:.**
11b0: 0a 2a 2a 20 20 20 20 2a 20 20 43 61 6c 6c 73 20  .**    *  Calls 
11c0: 74 6f 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20  to this routine 
11d0: 66 72 6f 6d 20 59 20 6d 75 73 74 20 62 6c 6f 63  from Y must bloc
11e0: 6b 20 75 6e 74 69 6c 20 74 68 65 20 6f 75 74 65  k until the oute
11f0: 72 2d 6d 6f 73 74 0a 2a 2a 20 20 20 20 20 20 20  r-most.**       
1200: 63 61 6c 6c 20 62 79 20 58 20 63 6f 6d 70 6c 65  call by X comple
1210: 74 65 73 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 2a 20  tes..**.**    * 
1220: 20 52 65 63 75 72 73 69 76 65 20 63 61 6c 6c 73   Recursive calls
1230: 20 74 6f 20 74 68 69 73 20 72 6f 75 74 69 6e 65   to this routine
1240: 20 66 72 6f 6d 20 74 68 72 65 61 64 20 58 20 72   from thread X r
1250: 65 74 75 72 6e 20 69 6d 6d 65 64 69 61 74 65 6c  eturn immediatel
1260: 79 0a 2a 2a 20 20 20 20 20 20 20 77 69 74 68 6f  y.**       witho
1270: 75 74 20 62 6c 6f 63 6b 69 6e 67 2e 0a 2a 2f 0a  ut blocking..*/.
1280: 69 6e 74 20 73 71 6c 69 74 65 33 5f 69 6e 69 74  int sqlite3_init
1290: 69 61 6c 69 7a 65 28 76 6f 69 64 29 7b 0a 20 20  ialize(void){.  
12a0: 4d 55 54 45 58 5f 4c 4f 47 49 43 28 20 73 71 6c  MUTEX_LOGIC( sql
12b0: 69 74 65 33 5f 6d 75 74 65 78 20 2a 70 4d 61 73  ite3_mutex *pMas
12c0: 74 65 72 3b 20 29 20 20 20 20 20 20 20 2f 2a 20  ter; )       /* 
12d0: 54 68 65 20 6d 61 69 6e 20 73 74 61 74 69 63 20  The main static 
12e0: 6d 75 74 65 78 20 2a 2f 0a 20 20 69 6e 74 20 72  mutex */.  int r
12f0: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
1300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1310: 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c          /* Resul
1320: 74 20 63 6f 64 65 20 2a 2f 0a 23 69 66 64 65 66  t code */.#ifdef
1330: 20 53 51 4c 49 54 45 5f 45 58 54 52 41 5f 49 4e   SQLITE_EXTRA_IN
1340: 49 54 0a 20 20 69 6e 74 20 62 52 75 6e 45 78 74  IT.  int bRunExt
1350: 72 61 49 6e 69 74 20 3d 20 30 3b 20 20 20 20 20  raInit = 0;     
1360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1370: 20 20 2f 2a 20 45 78 74 72 61 20 69 6e 69 74 69    /* Extra initi
1380: 61 6c 69 7a 61 74 69 6f 6e 20 6e 65 65 64 65 64  alization needed
1390: 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64   */.#endif..#ifd
13a0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
13b0: 53 44 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  SD.  rc = sqlite
13c0: 33 5f 77 73 64 5f 69 6e 69 74 28 34 30 39 36 2c  3_wsd_init(4096,
13d0: 20 32 34 29 3b 0a 20 20 69 66 28 20 72 63 21 3d   24);.  if( rc!=
13e0: 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
13f0: 20 72 65 74 75 72 6e 20 72 63 3b 0a 20 20 7d 0a   return rc;.  }.
1400: 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 49 66 20  #endif..  /* If 
1410: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 73  the following as
1420: 73 65 72 74 28 29 20 66 61 69 6c 73 20 6f 6e 20  sert() fails on 
1430: 73 6f 6d 65 20 6f 62 73 63 75 72 65 20 70 72 6f  some obscure pro
1440: 63 65 73 73 6f 72 2f 63 6f 6d 70 69 6c 65 72 0a  cessor/compiler.
1450: 20 20 2a 2a 20 63 6f 6d 62 69 6e 61 74 69 6f 6e    ** combination
1460: 2c 20 74 68 65 20 77 6f 72 6b 2d 61 72 6f 75 6e  , the work-aroun
1470: 64 20 69 73 20 74 6f 20 73 65 74 20 74 68 65 20  d is to set the 
1480: 63 6f 72 72 65 63 74 20 70 6f 69 6e 74 65 72 0a  correct pointer.
1490: 20 20 2a 2a 20 73 69 7a 65 20 61 74 20 63 6f 6d    ** size at com
14a0: 70 69 6c 65 2d 74 69 6d 65 20 75 73 69 6e 67 20  pile-time using 
14b0: 2d 44 53 51 4c 49 54 45 5f 50 54 52 53 49 5a 45  -DSQLITE_PTRSIZE
14c0: 3d 6e 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  =n compile-time 
14d0: 6f 70 74 69 6f 6e 20 2a 2f 0a 20 20 61 73 73 65  option */.  asse
14e0: 72 74 28 20 53 51 4c 49 54 45 5f 50 54 52 53 49  rt( SQLITE_PTRSI
14f0: 5a 45 3d 3d 73 69 7a 65 6f 66 28 63 68 61 72 2a  ZE==sizeof(char*
1500: 29 20 29 3b 0a 0a 20 20 2f 2a 20 49 66 20 53 51  ) );..  /* If SQ
1510: 4c 69 74 65 20 69 73 20 61 6c 72 65 61 64 79 20  Lite is already 
1520: 63 6f 6d 70 6c 65 74 65 6c 79 20 69 6e 69 74 69  completely initi
1530: 61 6c 69 7a 65 64 2c 20 74 68 65 6e 20 74 68 69  alized, then thi
1540: 73 20 63 61 6c 6c 0a 20 20 2a 2a 20 74 6f 20 73  s call.  ** to s
1550: 71 6c 69 74 65 33 5f 69 6e 69 74 69 61 6c 69 7a  qlite3_initializ
1560: 65 28 29 20 73 68 6f 75 6c 64 20 62 65 20 61 20  e() should be a 
1570: 6e 6f 2d 6f 70 2e 20 20 42 75 74 20 74 68 65 20  no-op.  But the 
1580: 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 0a 20  initialization. 
1590: 20 2a 2a 20 6d 75 73 74 20 62 65 20 63 6f 6d 70   ** must be comp
15a0: 6c 65 74 65 2e 20 20 53 6f 20 69 73 49 6e 69 74  lete.  So isInit
15b0: 20 6d 75 73 74 20 6e 6f 74 20 62 65 20 73 65 74   must not be set
15c0: 20 75 6e 74 69 6c 20 74 68 65 20 76 65 72 79 20   until the very 
15d0: 65 6e 64 0a 20 20 2a 2a 20 6f 66 20 74 68 69 73  end.  ** of this
15e0: 20 72 6f 75 74 69 6e 65 2e 0a 20 20 2a 2f 0a 20   routine..  */. 
15f0: 20 69 66 28 20 73 71 6c 69 74 65 33 47 6c 6f 62   if( sqlite3Glob
1600: 61 6c 43 6f 6e 66 69 67 2e 69 73 49 6e 69 74 20  alConfig.isInit 
1610: 29 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f  ) return SQLITE_
1620: 4f 4b 3b 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73  OK;..  /* Make s
1630: 75 72 65 20 74 68 65 20 6d 75 74 65 78 20 73 75  ure the mutex su
1640: 62 73 79 73 74 65 6d 20 69 73 20 69 6e 69 74 69  bsystem is initi
1650: 61 6c 69 7a 65 64 2e 20 20 49 66 20 75 6e 61 62  alized.  If unab
1660: 6c 65 20 74 6f 20 0a 20 20 2a 2a 20 69 6e 69 74  le to .  ** init
1670: 69 61 6c 69 7a 65 20 74 68 65 20 6d 75 74 65 78  ialize the mutex
1680: 20 73 75 62 73 79 73 74 65 6d 2c 20 72 65 74 75   subsystem, retu
1690: 72 6e 20 65 61 72 6c 79 20 77 69 74 68 20 74 68  rn early with th
16a0: 65 20 65 72 72 6f 72 2e 0a 20 20 2a 2a 20 49 66  e error..  ** If
16b0: 20 74 68 65 20 73 79 73 74 65 6d 20 69 73 20 73   the system is s
16c0: 6f 20 73 69 63 6b 20 74 68 61 74 20 77 65 20 61  o sick that we a
16d0: 72 65 20 75 6e 61 62 6c 65 20 74 6f 20 61 6c 6c  re unable to all
16e0: 6f 63 61 74 65 20 61 20 6d 75 74 65 78 2c 0a 20  ocate a mutex,. 
16f0: 20 2a 2a 20 74 68 65 72 65 20 69 73 20 6e 6f 74   ** there is not
1700: 20 6d 75 63 68 20 53 51 4c 69 74 65 20 69 73 20   much SQLite is 
1710: 67 6f 69 6e 67 20 74 6f 20 62 65 20 61 62 6c 65  going to be able
1720: 20 74 6f 20 64 6f 2e 0a 20 20 2a 2a 0a 20 20 2a   to do..  **.  *
1730: 2a 20 54 68 65 20 6d 75 74 65 78 20 73 75 62 73  * The mutex subs
1740: 79 73 74 65 6d 20 6d 75 73 74 20 74 61 6b 65 20  ystem must take 
1750: 63 61 72 65 20 6f 66 20 73 65 72 69 61 6c 69 7a  care of serializ
1760: 69 6e 67 20 69 74 73 20 6f 77 6e 0a 20 20 2a 2a  ing its own.  **
1770: 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 2e   initialization.
1780: 0a 20 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c  .  */.  rc = sql
1790: 69 74 65 33 4d 75 74 65 78 49 6e 69 74 28 29 3b  ite3MutexInit();
17a0: 0a 20 20 69 66 28 20 72 63 20 29 20 72 65 74 75  .  if( rc ) retu
17b0: 72 6e 20 72 63 3b 0a 0a 20 20 2f 2a 20 49 6e 69  rn rc;..  /* Ini
17c0: 74 69 61 6c 69 7a 65 20 74 68 65 20 6d 61 6c 6c  tialize the mall
17d0: 6f 63 28 29 20 73 79 73 74 65 6d 20 61 6e 64 20  oc() system and 
17e0: 74 68 65 20 72 65 63 75 72 73 69 76 65 20 70 49  the recursive pI
17f0: 6e 69 74 4d 75 74 65 78 20 6d 75 74 65 78 2e 0a  nitMutex mutex..
1800: 20 20 2a 2a 20 54 68 69 73 20 6f 70 65 72 61 74    ** This operat
1810: 69 6f 6e 20 69 73 20 70 72 6f 74 65 63 74 65 64  ion is protected
1820: 20 62 79 20 74 68 65 20 53 54 41 54 49 43 5f 4d   by the STATIC_M
1830: 41 53 54 45 52 20 6d 75 74 65 78 2e 20 20 4e 6f  ASTER mutex.  No
1840: 74 65 20 74 68 61 74 0a 20 20 2a 2a 20 4d 75 74  te that.  ** Mut
1850: 65 78 41 6c 6c 6f 63 28 29 20 69 73 20 63 61 6c  exAlloc() is cal
1860: 6c 65 64 20 66 6f 72 20 61 20 73 74 61 74 69 63  led for a static
1870: 20 6d 75 74 65 78 20 70 72 69 6f 72 20 74 6f 20   mutex prior to 
1880: 69 6e 69 74 69 61 6c 69 7a 69 6e 67 20 74 68 65  initializing the
1890: 0a 20 20 2a 2a 20 6d 61 6c 6c 6f 63 20 73 75 62  .  ** malloc sub
18a0: 73 79 73 74 65 6d 20 2d 20 74 68 69 73 20 69 6d  system - this im
18b0: 70 6c 69 65 73 20 74 68 61 74 20 74 68 65 20 61  plies that the a
18c0: 6c 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 61 20 73  llocation of a s
18d0: 74 61 74 69 63 0a 20 20 2a 2a 20 6d 75 74 65 78  tatic.  ** mutex
18e0: 20 6d 75 73 74 20 6e 6f 74 20 72 65 71 75 69 72   must not requir
18f0: 65 20 73 75 70 70 6f 72 74 20 66 72 6f 6d 20 74  e support from t
1900: 68 65 20 6d 61 6c 6c 6f 63 20 73 75 62 73 79 73  he malloc subsys
1910: 74 65 6d 2e 0a 20 20 2a 2f 0a 20 20 4d 55 54 45  tem..  */.  MUTE
1920: 58 5f 4c 4f 47 49 43 28 20 70 4d 61 73 74 65 72  X_LOGIC( pMaster
1930: 20 3d 20 73 71 6c 69 74 65 33 4d 75 74 65 78 41   = sqlite3MutexA
1940: 6c 6c 6f 63 28 53 51 4c 49 54 45 5f 4d 55 54 45  lloc(SQLITE_MUTE
1950: 58 5f 53 54 41 54 49 43 5f 4d 41 53 54 45 52 29  X_STATIC_MASTER)
1960: 3b 20 29 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75  ; ).  sqlite3_mu
1970: 74 65 78 5f 65 6e 74 65 72 28 70 4d 61 73 74 65  tex_enter(pMaste
1980: 72 29 3b 0a 20 20 73 71 6c 69 74 65 33 47 6c 6f  r);.  sqlite3Glo
1990: 62 61 6c 43 6f 6e 66 69 67 2e 69 73 4d 75 74 65  balConfig.isMute
19a0: 78 49 6e 69 74 20 3d 20 31 3b 0a 20 20 69 66 28  xInit = 1;.  if(
19b0: 20 21 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43   !sqlite3GlobalC
19c0: 6f 6e 66 69 67 2e 69 73 4d 61 6c 6c 6f 63 49 6e  onfig.isMallocIn
19d0: 69 74 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  it ){.    rc = s
19e0: 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 49 6e 69 74  qlite3MallocInit
19f0: 28 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63  ();.  }.  if( rc
1a00: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
1a10: 20 20 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c     sqlite3Global
1a20: 43 6f 6e 66 69 67 2e 69 73 4d 61 6c 6c 6f 63 49  Config.isMallocI
1a30: 6e 69 74 20 3d 20 31 3b 0a 20 20 20 20 69 66 28  nit = 1;.    if(
1a40: 20 21 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43   !sqlite3GlobalC
1a50: 6f 6e 66 69 67 2e 70 49 6e 69 74 4d 75 74 65 78  onfig.pInitMutex
1a60: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
1a70: 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 70 49  3GlobalConfig.pI
1a80: 6e 69 74 4d 75 74 65 78 20 3d 0a 20 20 20 20 20  nitMutex =.     
1a90: 20 20 20 20 20 20 73 71 6c 69 74 65 33 4d 75 74        sqlite3Mut
1aa0: 65 78 41 6c 6c 6f 63 28 53 51 4c 49 54 45 5f 4d  exAlloc(SQLITE_M
1ab0: 55 54 45 58 5f 52 45 43 55 52 53 49 56 45 29 3b  UTEX_RECURSIVE);
1ac0: 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74  .      if( sqlit
1ad0: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 62  e3GlobalConfig.b
1ae0: 43 6f 72 65 4d 75 74 65 78 20 26 26 20 21 73 71  CoreMutex && !sq
1af0: 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69  lite3GlobalConfi
1b00: 67 2e 70 49 6e 69 74 4d 75 74 65 78 20 29 7b 0a  g.pInitMutex ){.
1b10: 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c          rc = SQL
1b20: 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 3b 0a  ITE_NOMEM_BKPT;.
1b30: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
1b40: 7d 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  }.  if( rc==SQLI
1b50: 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 73 71 6c  TE_OK ){.    sql
1b60: 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67  ite3GlobalConfig
1b70: 2e 6e 52 65 66 49 6e 69 74 4d 75 74 65 78 2b 2b  .nRefInitMutex++
1b80: 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f  ;.  }.  sqlite3_
1b90: 6d 75 74 65 78 5f 6c 65 61 76 65 28 70 4d 61 73  mutex_leave(pMas
1ba0: 74 65 72 29 3b 0a 0a 20 20 2f 2a 20 49 66 20 72  ter);..  /* If r
1bb0: 63 20 69 73 20 6e 6f 74 20 53 51 4c 49 54 45 5f  c is not SQLITE_
1bc0: 4f 4b 20 61 74 20 74 68 69 73 20 70 6f 69 6e 74  OK at this point
1bd0: 2c 20 74 68 65 6e 20 65 69 74 68 65 72 20 74 68  , then either th
1be0: 65 20 6d 61 6c 6c 6f 63 0a 20 20 2a 2a 20 73 75  e malloc.  ** su
1bf0: 62 73 79 73 74 65 6d 20 63 6f 75 6c 64 20 6e 6f  bsystem could no
1c00: 74 20 62 65 20 69 6e 69 74 69 61 6c 69 7a 65 64  t be initialized
1c10: 20 6f 72 20 74 68 65 20 73 79 73 74 65 6d 20 66   or the system f
1c20: 61 69 6c 65 64 20 74 6f 20 61 6c 6c 6f 63 61 74  ailed to allocat
1c30: 65 0a 20 20 2a 2a 20 74 68 65 20 70 49 6e 69 74  e.  ** the pInit
1c40: 4d 75 74 65 78 20 6d 75 74 65 78 2e 20 52 65 74  Mutex mutex. Ret
1c50: 75 72 6e 20 61 6e 20 65 72 72 6f 72 20 69 6e 20  urn an error in 
1c60: 65 69 74 68 65 72 20 63 61 73 65 2e 20 20 2a 2f  either case.  */
1c70: 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54  .  if( rc!=SQLIT
1c80: 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 65 74 75  E_OK ){.    retu
1c90: 72 6e 20 72 63 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  rn rc;.  }..  /*
1ca0: 20 44 6f 20 74 68 65 20 72 65 73 74 20 6f 66 20   Do the rest of 
1cb0: 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  the initializati
1cc0: 6f 6e 20 75 6e 64 65 72 20 74 68 65 20 72 65 63  on under the rec
1cd0: 75 72 73 69 76 65 20 6d 75 74 65 78 20 73 6f 0a  ursive mutex so.
1ce0: 20 20 2a 2a 20 74 68 61 74 20 77 65 20 77 69 6c    ** that we wil
1cf0: 6c 20 62 65 20 61 62 6c 65 20 74 6f 20 68 61 6e  l be able to han
1d00: 64 6c 65 20 72 65 63 75 72 73 69 76 65 20 63 61  dle recursive ca
1d10: 6c 6c 73 20 69 6e 74 6f 0a 20 20 2a 2a 20 73 71  lls into.  ** sq
1d20: 6c 69 74 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65  lite3_initialize
1d30: 28 29 2e 20 20 54 68 65 20 72 65 63 75 72 73 69  ().  The recursi
1d40: 76 65 20 63 61 6c 6c 73 20 6e 6f 72 6d 61 6c 6c  ve calls normall
1d50: 79 20 63 6f 6d 65 20 74 68 72 6f 75 67 68 0a 20  y come through. 
1d60: 20 2a 2a 20 73 71 6c 69 74 65 33 5f 6f 73 5f 69   ** sqlite3_os_i
1d70: 6e 69 74 28 29 20 77 68 65 6e 20 69 74 20 69 6e  nit() when it in
1d80: 76 6f 6b 65 73 20 73 71 6c 69 74 65 33 5f 76 66  vokes sqlite3_vf
1d90: 73 5f 72 65 67 69 73 74 65 72 28 29 2c 20 62 75  s_register(), bu
1da0: 74 20 6f 74 68 65 72 0a 20 20 2a 2a 20 72 65 63  t other.  ** rec
1db0: 75 72 73 69 76 65 20 63 61 6c 6c 73 20 6d 69 67  ursive calls mig
1dc0: 68 74 20 61 6c 73 6f 20 62 65 20 70 6f 73 73 69  ht also be possi
1dd0: 62 6c 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49  ble..  **.  ** I
1de0: 4d 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46  MPLEMENTATION-OF
1df0: 3a 20 52 2d 30 30 31 34 30 2d 33 37 34 34 35 20  : R-00140-37445 
1e00: 53 51 4c 69 74 65 20 61 75 74 6f 6d 61 74 69 63  SQLite automatic
1e10: 61 6c 6c 79 20 73 65 72 69 61 6c 69 7a 65 73 20  ally serializes 
1e20: 63 61 6c 6c 73 0a 20 20 2a 2a 20 74 6f 20 74 68  calls.  ** to th
1e30: 65 20 78 49 6e 69 74 20 6d 65 74 68 6f 64 2c 20  e xInit method, 
1e40: 73 6f 20 74 68 65 20 78 49 6e 69 74 20 6d 65 74  so the xInit met
1e50: 68 6f 64 20 6e 65 65 64 20 6e 6f 74 20 62 65 20  hod need not be 
1e60: 74 68 72 65 61 64 73 61 66 65 2e 0a 20 20 2a 2a  threadsafe..  **
1e70: 0a 20 20 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  .  ** The follow
1e80: 69 6e 67 20 6d 75 74 65 78 20 69 73 20 77 68 61  ing mutex is wha
1e90: 74 20 73 65 72 69 61 6c 69 7a 65 73 20 61 63 63  t serializes acc
1ea0: 65 73 73 20 74 6f 20 74 68 65 20 61 70 70 64 65  ess to the appde
1eb0: 66 20 70 63 61 63 68 65 20 78 49 6e 69 74 0a 20  f pcache xInit. 
1ec0: 20 2a 2a 20 6d 65 74 68 6f 64 73 2e 20 20 54 68   ** methods.  Th
1ed0: 65 20 73 71 6c 69 74 65 33 5f 70 63 61 63 68 65  e sqlite3_pcache
1ee0: 5f 6d 65 74 68 6f 64 73 2e 78 49 6e 69 74 28 29  _methods.xInit()
1ef0: 20 61 6c 6c 20 69 73 20 65 6d 62 65 64 64 65 64   all is embedded
1f00: 20 69 6e 20 74 68 65 0a 20 20 2a 2a 20 63 61 6c   in the.  ** cal
1f10: 6c 20 74 6f 20 73 71 6c 69 74 65 33 50 63 61 63  l to sqlite3Pcac
1f20: 68 65 49 6e 69 74 69 61 6c 69 7a 65 28 29 2e 0a  heInitialize()..
1f30: 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d    */.  sqlite3_m
1f40: 75 74 65 78 5f 65 6e 74 65 72 28 73 71 6c 69 74  utex_enter(sqlit
1f50: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 70  e3GlobalConfig.p
1f60: 49 6e 69 74 4d 75 74 65 78 29 3b 0a 20 20 69 66  InitMutex);.  if
1f70: 28 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43  ( sqlite3GlobalC
1f80: 6f 6e 66 69 67 2e 69 73 49 6e 69 74 3d 3d 30 20  onfig.isInit==0 
1f90: 26 26 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c  && sqlite3Global
1fa0: 43 6f 6e 66 69 67 2e 69 6e 50 72 6f 67 72 65 73  Config.inProgres
1fb0: 73 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69  s==0 ){.    sqli
1fc0: 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e  te3GlobalConfig.
1fd0: 69 6e 50 72 6f 67 72 65 73 73 20 3d 20 31 3b 0a  inProgress = 1;.
1fe0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
1ff0: 41 42 4c 45 5f 53 51 4c 4c 4f 47 0a 20 20 20 20  ABLE_SQLLOG.    
2000: 7b 0a 20 20 20 20 20 20 65 78 74 65 72 6e 20 76  {.      extern v
2010: 6f 69 64 20 73 71 6c 69 74 65 33 5f 69 6e 69 74  oid sqlite3_init
2020: 5f 73 71 6c 6c 6f 67 28 76 6f 69 64 29 3b 0a 20  _sqllog(void);. 
2030: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 69 6e 69       sqlite3_ini
2040: 74 5f 73 71 6c 6c 6f 67 28 29 3b 0a 20 20 20 20  t_sqllog();.    
2050: 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 6d 65 6d  }.#endif.    mem
2060: 73 65 74 28 26 73 71 6c 69 74 65 33 42 75 69 6c  set(&sqlite3Buil
2070: 74 69 6e 46 75 6e 63 74 69 6f 6e 73 2c 20 30 2c  tinFunctions, 0,
2080: 20 73 69 7a 65 6f 66 28 73 71 6c 69 74 65 33 42   sizeof(sqlite3B
2090: 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 29  uiltinFunctions)
20a0: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 52 65  );.    sqlite3Re
20b0: 67 69 73 74 65 72 42 75 69 6c 74 69 6e 46 75 6e  gisterBuiltinFun
20c0: 63 74 69 6f 6e 73 28 29 3b 0a 20 20 20 20 69 66  ctions();.    if
20d0: 28 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43  ( sqlite3GlobalC
20e0: 6f 6e 66 69 67 2e 69 73 50 43 61 63 68 65 49 6e  onfig.isPCacheIn
20f0: 69 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72  it==0 ){.      r
2100: 63 20 3d 20 73 71 6c 69 74 65 33 50 63 61 63 68  c = sqlite3Pcach
2110: 65 49 6e 69 74 69 61 6c 69 7a 65 28 29 3b 0a 20  eInitialize();. 
2120: 20 20 20 7d 0a 20 20 20 20 69 66 28 20 72 63 3d     }.    if( rc=
2130: 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
2140: 20 20 20 20 73 71 6c 69 74 65 33 47 6c 6f 62 61      sqlite3Globa
2150: 6c 43 6f 6e 66 69 67 2e 69 73 50 43 61 63 68 65  lConfig.isPCache
2160: 49 6e 69 74 20 3d 20 31 3b 0a 20 20 20 20 20 20  Init = 1;.      
2170: 72 63 20 3d 20 73 71 6c 69 74 65 33 4f 73 49 6e  rc = sqlite3OsIn
2180: 69 74 28 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  it();.    }.    
2190: 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
21a0: 4b 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  K ){.      sqlit
21b0: 65 33 50 43 61 63 68 65 42 75 66 66 65 72 53 65  e3PCacheBufferSe
21c0: 74 75 70 28 20 73 71 6c 69 74 65 33 47 6c 6f 62  tup( sqlite3Glob
21d0: 61 6c 43 6f 6e 66 69 67 2e 70 50 61 67 65 2c 20  alConfig.pPage, 
21e0: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
21f0: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 73  e3GlobalConfig.s
2200: 7a 50 61 67 65 2c 20 73 71 6c 69 74 65 33 47 6c  zPage, sqlite3Gl
2210: 6f 62 61 6c 43 6f 6e 66 69 67 2e 6e 50 61 67 65  obalConfig.nPage
2220: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
2230: 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 69 73 49  GlobalConfig.isI
2240: 6e 69 74 20 3d 20 31 3b 0a 23 69 66 64 65 66 20  nit = 1;.#ifdef 
2250: 53 51 4c 49 54 45 5f 45 58 54 52 41 5f 49 4e 49  SQLITE_EXTRA_INI
2260: 54 0a 20 20 20 20 20 20 62 52 75 6e 45 78 74 72  T.      bRunExtr
2270: 61 49 6e 69 74 20 3d 20 31 3b 0a 23 65 6e 64 69  aInit = 1;.#endi
2280: 66 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69  f.    }.    sqli
2290: 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e  te3GlobalConfig.
22a0: 69 6e 50 72 6f 67 72 65 73 73 20 3d 20 30 3b 0a  inProgress = 0;.
22b0: 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75    }.  sqlite3_mu
22c0: 74 65 78 5f 6c 65 61 76 65 28 73 71 6c 69 74 65  tex_leave(sqlite
22d0: 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 70 49  3GlobalConfig.pI
22e0: 6e 69 74 4d 75 74 65 78 29 3b 0a 0a 20 20 2f 2a  nitMutex);..  /*
22f0: 20 47 6f 20 62 61 63 6b 20 75 6e 64 65 72 20 74   Go back under t
2300: 68 65 20 73 74 61 74 69 63 20 6d 75 74 65 78 20  he static mutex 
2310: 61 6e 64 20 63 6c 65 61 6e 20 75 70 20 74 68 65  and clean up the
2320: 20 72 65 63 75 72 73 69 76 65 0a 20 20 2a 2a 20   recursive.  ** 
2330: 6d 75 74 65 78 20 74 6f 20 70 72 65 76 65 6e 74  mutex to prevent
2340: 20 61 20 72 65 73 6f 75 72 63 65 20 6c 65 61 6b   a resource leak
2350: 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ..  */.  sqlite3
2360: 5f 6d 75 74 65 78 5f 65 6e 74 65 72 28 70 4d 61  _mutex_enter(pMa
2370: 73 74 65 72 29 3b 0a 20 20 73 71 6c 69 74 65 33  ster);.  sqlite3
2380: 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 6e 52 65  GlobalConfig.nRe
2390: 66 49 6e 69 74 4d 75 74 65 78 2d 2d 3b 0a 20 20  fInitMutex--;.  
23a0: 69 66 28 20 73 71 6c 69 74 65 33 47 6c 6f 62 61  if( sqlite3Globa
23b0: 6c 43 6f 6e 66 69 67 2e 6e 52 65 66 49 6e 69 74  lConfig.nRefInit
23c0: 4d 75 74 65 78 3c 3d 30 20 29 7b 0a 20 20 20 20  Mutex<=0 ){.    
23d0: 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 47  assert( sqlite3G
23e0: 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 6e 52 65 66  lobalConfig.nRef
23f0: 49 6e 69 74 4d 75 74 65 78 3d 3d 30 20 29 3b 0a  InitMutex==0 );.
2400: 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65      sqlite3_mute
2410: 78 5f 66 72 65 65 28 73 71 6c 69 74 65 33 47 6c  x_free(sqlite3Gl
2420: 6f 62 61 6c 43 6f 6e 66 69 67 2e 70 49 6e 69 74  obalConfig.pInit
2430: 4d 75 74 65 78 29 3b 0a 20 20 20 20 73 71 6c 69  Mutex);.    sqli
2440: 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e  te3GlobalConfig.
2450: 70 49 6e 69 74 4d 75 74 65 78 20 3d 20 30 3b 0a  pInitMutex = 0;.
2460: 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75    }.  sqlite3_mu
2470: 74 65 78 5f 6c 65 61 76 65 28 70 4d 61 73 74 65  tex_leave(pMaste
2480: 72 29 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 66 6f  r);..  /* The fo
2490: 6c 6c 6f 77 69 6e 67 20 69 73 20 6a 75 73 74 20  llowing is just 
24a0: 61 20 73 61 6e 69 74 79 20 63 68 65 63 6b 20 74  a sanity check t
24b0: 6f 20 6d 61 6b 65 20 73 75 72 65 20 53 51 4c 69  o make sure SQLi
24c0: 74 65 20 68 61 73 0a 20 20 2a 2a 20 62 65 65 6e  te has.  ** been
24d0: 20 63 6f 6d 70 69 6c 65 64 20 63 6f 72 72 65 63   compiled correc
24e0: 74 6c 79 2e 20 20 49 74 20 69 73 20 69 6d 70 6f  tly.  It is impo
24f0: 72 74 61 6e 74 20 74 6f 20 72 75 6e 20 74 68 69  rtant to run thi
2500: 73 20 63 6f 64 65 2c 20 62 75 74 0a 20 20 2a 2a  s code, but.  **
2510: 20 77 65 20 64 6f 6e 27 74 20 77 61 6e 74 20 74   we don't want t
2520: 6f 20 72 75 6e 20 69 74 20 74 6f 6f 20 6f 66 74  o run it too oft
2530: 65 6e 20 61 6e 64 20 73 6f 61 6b 20 75 70 20 43  en and soak up C
2540: 50 55 20 63 79 63 6c 65 73 20 66 6f 72 20 6e 6f  PU cycles for no
2550: 0a 20 20 2a 2a 20 72 65 61 73 6f 6e 2e 20 20 53  .  ** reason.  S
2560: 6f 20 77 65 20 72 75 6e 20 69 74 20 6f 6e 63 65  o we run it once
2570: 20 64 75 72 69 6e 67 20 69 6e 69 74 69 61 6c 69   during initiali
2580: 7a 61 74 69 6f 6e 2e 0a 20 20 2a 2f 0a 23 69 66  zation..  */.#if
2590: 6e 64 65 66 20 4e 44 45 42 55 47 0a 23 69 66 6e  ndef NDEBUG.#ifn
25a0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
25b0: 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20  FLOATING_POINT. 
25c0: 20 2f 2a 20 54 68 69 73 20 73 65 63 74 69 6f 6e   /* This section
25d0: 20 6f 66 20 63 6f 64 65 27 73 20 6f 6e 6c 79 20   of code's only 
25e0: 22 6f 75 74 70 75 74 22 20 69 73 20 76 69 61 20  "output" is via 
25f0: 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65  assert() stateme
2600: 6e 74 73 2e 20 2a 2f 0a 20 20 69 66 20 28 20 72  nts. */.  if ( r
2610: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
2620: 20 20 20 20 75 36 34 20 78 20 3d 20 28 28 28 75      u64 x = (((u
2630: 36 34 29 31 29 3c 3c 36 33 29 2d 31 3b 0a 20 20  64)1)<<63)-1;.  
2640: 20 20 64 6f 75 62 6c 65 20 79 3b 0a 20 20 20 20    double y;.    
2650: 61 73 73 65 72 74 28 73 69 7a 65 6f 66 28 78 29  assert(sizeof(x)
2660: 3d 3d 38 29 3b 0a 20 20 20 20 61 73 73 65 72 74  ==8);.    assert
2670: 28 73 69 7a 65 6f 66 28 78 29 3d 3d 73 69 7a 65  (sizeof(x)==size
2680: 6f 66 28 79 29 29 3b 0a 20 20 20 20 6d 65 6d 63  of(y));.    memc
2690: 70 79 28 26 79 2c 20 26 78 2c 20 38 29 3b 0a 20  py(&y, &x, 8);. 
26a0: 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74     assert( sqlit
26b0: 65 33 49 73 4e 61 4e 28 79 29 20 29 3b 0a 20 20  e3IsNaN(y) );.  
26c0: 7d 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  }.#endif.#endif.
26d0: 0a 20 20 2f 2a 20 44 6f 20 65 78 74 72 61 20 69  .  /* Do extra i
26e0: 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 73 74  nitialization st
26f0: 65 70 73 20 72 65 71 75 65 73 74 65 64 20 62 79  eps requested by
2700: 20 74 68 65 20 53 51 4c 49 54 45 5f 45 58 54 52   the SQLITE_EXTR
2710: 41 5f 49 4e 49 54 0a 20 20 2a 2a 20 63 6f 6d 70  A_INIT.  ** comp
2720: 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 2e  ile-time option.
2730: 0a 20 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  .  */.#ifdef SQL
2740: 49 54 45 5f 45 58 54 52 41 5f 49 4e 49 54 0a 20  ITE_EXTRA_INIT. 
2750: 20 69 66 28 20 62 52 75 6e 45 78 74 72 61 49 6e   if( bRunExtraIn
2760: 69 74 20 29 7b 0a 20 20 20 20 69 6e 74 20 53 51  it ){.    int SQ
2770: 4c 49 54 45 5f 45 58 54 52 41 5f 49 4e 49 54 28  LITE_EXTRA_INIT(
2780: 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
2790: 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 58    rc = SQLITE_EX
27a0: 54 52 41 5f 49 4e 49 54 28 30 29 3b 0a 20 20 7d  TRA_INIT(0);.  }
27b0: 0a 23 65 6e 64 69 66 0a 0a 20 20 72 65 74 75 72  .#endif..  retur
27c0: 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  n rc;.}../*.** U
27d0: 6e 64 6f 20 74 68 65 20 65 66 66 65 63 74 73 20  ndo the effects 
27e0: 6f 66 20 73 71 6c 69 74 65 33 5f 69 6e 69 74 69  of sqlite3_initi
27f0: 61 6c 69 7a 65 28 29 2e 20 20 4d 75 73 74 20 6e  alize().  Must n
2800: 6f 74 20 62 65 20 63 61 6c 6c 65 64 20 77 68 69  ot be called whi
2810: 6c 65 0a 2a 2a 20 74 68 65 72 65 20 61 72 65 20  le.** there are 
2820: 6f 75 74 73 74 61 6e 64 69 6e 67 20 64 61 74 61  outstanding data
2830: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73  base connections
2840: 20 6f 72 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63   or memory alloc
2850: 61 74 69 6f 6e 73 20 6f 72 0a 2a 2a 20 77 68 69  ations or.** whi
2860: 6c 65 20 61 6e 79 20 70 61 72 74 20 6f 66 20 53  le any part of S
2870: 51 4c 69 74 65 20 69 73 20 6f 74 68 65 72 77 69  QLite is otherwi
2880: 73 65 20 69 6e 20 75 73 65 20 69 6e 20 61 6e 79  se in use in any
2890: 20 74 68 72 65 61 64 2e 20 20 54 68 69 73 0a 2a   thread.  This.*
28a0: 2a 20 72 6f 75 74 69 6e 65 20 69 73 20 6e 6f 74  * routine is not
28b0: 20 74 68 72 65 61 64 73 61 66 65 2e 20 20 42 75   threadsafe.  Bu
28c0: 74 20 69 74 20 69 73 20 73 61 66 65 20 74 6f 20  t it is safe to 
28d0: 69 6e 76 6f 6b 65 20 74 68 69 73 20 72 6f 75 74  invoke this rout
28e0: 69 6e 65 0a 2a 2a 20 6f 6e 20 77 68 65 6e 20 53  ine.** on when S
28f0: 51 4c 69 74 65 20 69 73 20 61 6c 72 65 61 64 79  QLite is already
2900: 20 73 68 75 74 20 64 6f 77 6e 2e 20 20 49 66 20   shut down.  If 
2910: 53 51 4c 69 74 65 20 69 73 20 61 6c 72 65 61 64  SQLite is alread
2920: 79 20 73 68 75 74 20 64 6f 77 6e 0a 2a 2a 20 77  y shut down.** w
2930: 68 65 6e 20 74 68 69 73 20 72 6f 75 74 69 6e 65  hen this routine
2940: 20 69 73 20 69 6e 76 6f 6b 65 64 2c 20 74 68 65   is invoked, the
2950: 6e 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 69  n this routine i
2960: 73 20 61 20 68 61 72 6d 6c 65 73 73 20 6e 6f 2d  s a harmless no-
2970: 6f 70 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  op..*/.int sqlit
2980: 65 33 5f 73 68 75 74 64 6f 77 6e 28 76 6f 69 64  e3_shutdown(void
2990: 29 7b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ){.#ifdef SQLITE
29a0: 5f 4f 4d 49 54 5f 57 53 44 0a 20 20 69 6e 74 20  _OMIT_WSD.  int 
29b0: 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 77 73 64  rc = sqlite3_wsd
29c0: 5f 69 6e 69 74 28 34 30 39 36 2c 20 32 34 29 3b  _init(4096, 24);
29d0: 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54  .  if( rc!=SQLIT
29e0: 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 65 74 75  E_OK ){.    retu
29f0: 72 6e 20 72 63 3b 0a 20 20 7d 0a 23 65 6e 64 69  rn rc;.  }.#endi
2a00: 66 0a 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  f..  if( sqlite3
2a10: 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 69 73 49  GlobalConfig.isI
2a20: 6e 69 74 20 29 7b 0a 23 69 66 64 65 66 20 53 51  nit ){.#ifdef SQ
2a30: 4c 49 54 45 5f 45 58 54 52 41 5f 53 48 55 54 44  LITE_EXTRA_SHUTD
2a40: 4f 57 4e 0a 20 20 20 20 76 6f 69 64 20 53 51 4c  OWN.    void SQL
2a50: 49 54 45 5f 45 58 54 52 41 5f 53 48 55 54 44 4f  ITE_EXTRA_SHUTDO
2a60: 57 4e 28 76 6f 69 64 29 3b 0a 20 20 20 20 53 51  WN(void);.    SQ
2a70: 4c 49 54 45 5f 45 58 54 52 41 5f 53 48 55 54 44  LITE_EXTRA_SHUTD
2a80: 4f 57 4e 28 29 3b 0a 23 65 6e 64 69 66 0a 20 20  OWN();.#endif.  
2a90: 20 20 73 71 6c 69 74 65 33 5f 6f 73 5f 65 6e 64    sqlite3_os_end
2aa0: 28 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  ();.    sqlite3_
2ab0: 72 65 73 65 74 5f 61 75 74 6f 5f 65 78 74 65 6e  reset_auto_exten
2ac0: 73 69 6f 6e 28 29 3b 0a 20 20 20 20 73 71 6c 69  sion();.    sqli
2ad0: 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e  te3GlobalConfig.
2ae0: 69 73 49 6e 69 74 20 3d 20 30 3b 0a 20 20 7d 0a  isInit = 0;.  }.
2af0: 20 20 69 66 28 20 73 71 6c 69 74 65 33 47 6c 6f    if( sqlite3Glo
2b00: 62 61 6c 43 6f 6e 66 69 67 2e 69 73 50 43 61 63  balConfig.isPCac
2b10: 68 65 49 6e 69 74 20 29 7b 0a 20 20 20 20 73 71  heInit ){.    sq
2b20: 6c 69 74 65 33 50 63 61 63 68 65 53 68 75 74 64  lite3PcacheShutd
2b30: 6f 77 6e 28 29 3b 0a 20 20 20 20 73 71 6c 69 74  own();.    sqlit
2b40: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 69  e3GlobalConfig.i
2b50: 73 50 43 61 63 68 65 49 6e 69 74 20 3d 20 30 3b  sPCacheInit = 0;
2b60: 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74  .  }.  if( sqlit
2b70: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 69  e3GlobalConfig.i
2b80: 73 4d 61 6c 6c 6f 63 49 6e 69 74 20 29 7b 0a 20  sMallocInit ){. 
2b90: 20 20 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63     sqlite3Malloc
2ba0: 45 6e 64 28 29 3b 0a 20 20 20 20 73 71 6c 69 74  End();.    sqlit
2bb0: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 69  e3GlobalConfig.i
2bc0: 73 4d 61 6c 6c 6f 63 49 6e 69 74 20 3d 20 30 3b  sMallocInit = 0;
2bd0: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
2be0: 5f 4f 4d 49 54 5f 53 48 55 54 44 4f 57 4e 5f 44  _OMIT_SHUTDOWN_D
2bf0: 49 52 45 43 54 4f 52 49 45 53 0a 20 20 20 20 2f  IRECTORIES.    /
2c00: 2a 20 54 68 65 20 68 65 61 70 20 73 75 62 73 79  * The heap subsy
2c10: 73 74 65 6d 20 68 61 73 20 6e 6f 77 20 62 65 65  stem has now bee
2c20: 6e 20 73 68 75 74 64 6f 77 6e 20 61 6e 64 20 74  n shutdown and t
2c30: 68 65 73 65 20 76 61 6c 75 65 73 20 61 72 65 20  hese values are 
2c40: 73 75 70 70 6f 73 65 64 0a 20 20 20 20 2a 2a 20  supposed.    ** 
2c50: 74 6f 20 62 65 20 4e 55 4c 4c 20 6f 72 20 70 6f  to be NULL or po
2c60: 69 6e 74 20 74 6f 20 6d 65 6d 6f 72 79 20 74 68  int to memory th
2c70: 61 74 20 77 61 73 20 6f 62 74 61 69 6e 65 64 20  at was obtained 
2c80: 66 72 6f 6d 20 73 71 6c 69 74 65 33 5f 6d 61 6c  from sqlite3_mal
2c90: 6c 6f 63 28 29 2c 0a 20 20 20 20 2a 2a 20 77 68  loc(),.    ** wh
2ca0: 69 63 68 20 77 6f 75 6c 64 20 72 65 6c 79 20 6f  ich would rely o
2cb0: 6e 20 74 68 61 74 20 68 65 61 70 20 73 75 62 73  n that heap subs
2cc0: 79 73 74 65 6d 3b 20 74 68 65 72 65 66 6f 72 65  ystem; therefore
2cd0: 2c 20 6d 61 6b 65 20 73 75 72 65 20 74 68 65 73  , make sure thes
2ce0: 65 0a 20 20 20 20 2a 2a 20 76 61 6c 75 65 73 20  e.    ** values 
2cf0: 63 61 6e 6e 6f 74 20 72 65 66 65 72 20 74 6f 20  cannot refer to 
2d00: 68 65 61 70 20 6d 65 6d 6f 72 79 20 74 68 61 74  heap memory that
2d10: 20 77 61 73 20 6a 75 73 74 20 69 6e 76 61 6c 69   was just invali
2d20: 64 61 74 65 64 20 77 68 65 6e 20 74 68 65 0a 20  dated when the. 
2d30: 20 20 20 2a 2a 20 68 65 61 70 20 73 75 62 73 79     ** heap subsy
2d40: 73 74 65 6d 20 77 61 73 20 73 68 75 74 64 6f 77  stem was shutdow
2d50: 6e 2e 20 20 54 68 69 73 20 69 73 20 6f 6e 6c 79  n.  This is only
2d60: 20 64 6f 6e 65 20 69 66 20 74 68 65 20 63 75 72   done if the cur
2d70: 72 65 6e 74 20 63 61 6c 6c 20 74 6f 0a 20 20 20  rent call to.   
2d80: 20 2a 2a 20 74 68 69 73 20 66 75 6e 63 74 69 6f   ** this functio
2d90: 6e 20 72 65 73 75 6c 74 65 64 20 69 6e 20 74 68  n resulted in th
2da0: 65 20 68 65 61 70 20 73 75 62 73 79 73 74 65 6d  e heap subsystem
2db0: 20 61 63 74 75 61 6c 6c 79 20 62 65 69 6e 67 20   actually being 
2dc0: 73 68 75 74 64 6f 77 6e 2e 0a 20 20 20 20 2a 2f  shutdown..    */
2dd0: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 64 61 74  .    sqlite3_dat
2de0: 61 5f 64 69 72 65 63 74 6f 72 79 20 3d 20 30 3b  a_directory = 0;
2df0: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 74 65 6d  .    sqlite3_tem
2e00: 70 5f 64 69 72 65 63 74 6f 72 79 20 3d 20 30 3b  p_directory = 0;
2e10: 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20 69 66  .#endif.  }.  if
2e20: 28 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43  ( sqlite3GlobalC
2e30: 6f 6e 66 69 67 2e 69 73 4d 75 74 65 78 49 6e 69  onfig.isMutexIni
2e40: 74 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  t ){.    sqlite3
2e50: 4d 75 74 65 78 45 6e 64 28 29 3b 0a 20 20 20 20  MutexEnd();.    
2e60: 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e  sqlite3GlobalCon
2e70: 66 69 67 2e 69 73 4d 75 74 65 78 49 6e 69 74 20  fig.isMutexInit 
2e80: 3d 20 30 3b 0a 20 20 7d 0a 0a 20 20 72 65 74 75  = 0;.  }..  retu
2e90: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a  rn SQLITE_OK;.}.
2ea0: 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 41 50 49 20  ./*.** This API 
2eb0: 61 6c 6c 6f 77 73 20 61 70 70 6c 69 63 61 74 69  allows applicati
2ec0: 6f 6e 73 20 74 6f 20 6d 6f 64 69 66 79 20 74 68  ons to modify th
2ed0: 65 20 67 6c 6f 62 61 6c 20 63 6f 6e 66 69 67 75  e global configu
2ee0: 72 61 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65  ration of.** the
2ef0: 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 20   SQLite library 
2f00: 61 74 20 72 75 6e 2d 74 69 6d 65 2e 0a 2a 2a 0a  at run-time..**.
2f10: 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20  ** This routine 
2f20: 73 68 6f 75 6c 64 20 6f 6e 6c 79 20 62 65 20 63  should only be c
2f30: 61 6c 6c 65 64 20 77 68 65 6e 20 74 68 65 72 65  alled when there
2f40: 20 61 72 65 20 6e 6f 20 6f 75 74 73 74 61 6e 64   are no outstand
2f50: 69 6e 67 0a 2a 2a 20 64 61 74 61 62 61 73 65 20  ing.** database 
2f60: 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 6f 72 20 6d  connections or m
2f70: 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
2f80: 73 2e 20 20 54 68 69 73 20 72 6f 75 74 69 6e 65  s.  This routine
2f90: 20 69 73 20 6e 6f 74 0a 2a 2a 20 74 68 72 65 61   is not.** threa
2fa0: 64 73 61 66 65 2e 20 20 46 61 69 6c 75 72 65 20  dsafe.  Failure 
2fb0: 74 6f 20 68 65 65 64 20 74 68 65 73 65 20 77 61  to heed these wa
2fc0: 72 6e 69 6e 67 73 20 63 61 6e 20 6c 65 61 64 20  rnings can lead 
2fd0: 74 6f 20 75 6e 70 72 65 64 69 63 74 61 62 6c 65  to unpredictable
2fe0: 0a 2a 2a 20 62 65 68 61 76 69 6f 72 2e 0a 2a 2f  .** behavior..*/
2ff0: 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 63 6f 6e  .int sqlite3_con
3000: 66 69 67 28 69 6e 74 20 6f 70 2c 20 2e 2e 2e 29  fig(int op, ...)
3010: 7b 0a 20 20 76 61 5f 6c 69 73 74 20 61 70 3b 0a  {.  va_list ap;.
3020: 20 20 69 6e 74 20 72 63 20 3d 20 53 51 4c 49 54    int rc = SQLIT
3030: 45 5f 4f 4b 3b 0a 0a 20 20 2f 2a 20 73 71 6c 69  E_OK;..  /* sqli
3040: 74 65 33 5f 63 6f 6e 66 69 67 28 29 20 73 68 61  te3_config() sha
3050: 6c 6c 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45  ll return SQLITE
3060: 5f 4d 49 53 55 53 45 20 69 66 20 69 74 20 69 73  _MISUSE if it is
3070: 20 69 6e 76 6f 6b 65 64 20 77 68 69 6c 65 0a 20   invoked while. 
3080: 20 2a 2a 20 74 68 65 20 53 51 4c 69 74 65 20 6c   ** the SQLite l
3090: 69 62 72 61 72 79 20 69 73 20 69 6e 20 75 73 65  ibrary is in use
30a0: 2e 20 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69 74  . */.  if( sqlit
30b0: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 69  e3GlobalConfig.i
30c0: 73 49 6e 69 74 20 29 20 72 65 74 75 72 6e 20 53  sInit ) return S
30d0: 51 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50  QLITE_MISUSE_BKP
30e0: 54 3b 0a 0a 20 20 76 61 5f 73 74 61 72 74 28 61  T;..  va_start(a
30f0: 70 2c 20 6f 70 29 3b 0a 20 20 73 77 69 74 63 68  p, op);.  switch
3100: 28 20 6f 70 20 29 7b 0a 0a 20 20 20 20 2f 2a 20  ( op ){..    /* 
3110: 4d 75 74 65 78 20 63 6f 6e 66 69 67 75 72 61 74  Mutex configurat
3120: 69 6f 6e 20 6f 70 74 69 6f 6e 73 20 61 72 65 20  ion options are 
3130: 6f 6e 6c 79 20 61 76 61 69 6c 61 62 6c 65 20 69  only available i
3140: 6e 20 61 20 74 68 72 65 61 64 73 61 66 65 0a 20  n a threadsafe. 
3150: 20 20 20 2a 2a 20 63 6f 6d 70 69 6c 65 2e 0a 20     ** compile.. 
3160: 20 20 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65     */.#if define
3170: 64 28 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53  d(SQLITE_THREADS
3180: 41 46 45 29 20 26 26 20 53 51 4c 49 54 45 5f 54  AFE) && SQLITE_T
3190: 48 52 45 41 44 53 41 46 45 3e 30 20 20 2f 2a 20  HREADSAFE>0  /* 
31a0: 49 4d 50 3a 20 52 2d 35 34 34 36 36 2d 34 36 37  IMP: R-54466-467
31b0: 35 36 20 2a 2f 0a 20 20 20 20 63 61 73 65 20 53  56 */.    case S
31c0: 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 53 49 4e  QLITE_CONFIG_SIN
31d0: 47 4c 45 54 48 52 45 41 44 3a 20 7b 0a 20 20 20  GLETHREAD: {.   
31e0: 20 20 20 2f 2a 20 45 56 49 44 45 4e 43 45 2d 4f     /* EVIDENCE-O
31f0: 46 3a 20 52 2d 30 32 37 34 38 2d 31 39 30 39 36  F: R-02748-19096
3200: 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 73 65 74   This option set
3210: 73 20 74 68 65 20 74 68 72 65 61 64 69 6e 67 20  s the threading 
3220: 6d 6f 64 65 20 74 6f 0a 20 20 20 20 20 20 2a 2a  mode to.      **
3230: 20 53 69 6e 67 6c 65 2d 74 68 72 65 61 64 2e 20   Single-thread. 
3240: 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  */.      sqlite3
3250: 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 62 43 6f  GlobalConfig.bCo
3260: 72 65 4d 75 74 65 78 20 3d 20 30 3b 20 20 2f 2a  reMutex = 0;  /*
3270: 20 44 69 73 61 62 6c 65 20 6d 75 74 65 78 20 6f   Disable mutex o
3280: 6e 20 63 6f 72 65 20 2a 2f 0a 20 20 20 20 20 20  n core */.      
3290: 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e  sqlite3GlobalCon
32a0: 66 69 67 2e 62 46 75 6c 6c 4d 75 74 65 78 20 3d  fig.bFullMutex =
32b0: 20 30 3b 20 20 2f 2a 20 44 69 73 61 62 6c 65 20   0;  /* Disable 
32c0: 6d 75 74 65 78 20 6f 6e 20 63 6f 6e 6e 65 63 74  mutex on connect
32d0: 69 6f 6e 73 20 2a 2f 0a 20 20 20 20 20 20 62 72  ions */.      br
32e0: 65 61 6b 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69  eak;.    }.#endi
32f0: 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  f.#if defined(SQ
3300: 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45 29  LITE_THREADSAFE)
3310: 20 26 26 20 53 51 4c 49 54 45 5f 54 48 52 45 41   && SQLITE_THREA
3320: 44 53 41 46 45 3e 30 20 2f 2a 20 49 4d 50 3a 20  DSAFE>0 /* IMP: 
3330: 52 2d 32 30 35 32 30 2d 35 34 30 38 36 20 2a 2f  R-20520-54086 */
3340: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
3350: 5f 43 4f 4e 46 49 47 5f 4d 55 4c 54 49 54 48 52  _CONFIG_MULTITHR
3360: 45 41 44 3a 20 7b 0a 20 20 20 20 20 20 2f 2a 20  EAD: {.      /* 
3370: 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 31  EVIDENCE-OF: R-1
3380: 34 33 37 34 2d 34 32 34 36 38 20 54 68 69 73 20  4374-42468 This 
3390: 6f 70 74 69 6f 6e 20 73 65 74 73 20 74 68 65 20  option sets the 
33a0: 74 68 72 65 61 64 69 6e 67 20 6d 6f 64 65 20 74  threading mode t
33b0: 6f 0a 20 20 20 20 20 20 2a 2a 20 4d 75 6c 74 69  o.      ** Multi
33c0: 2d 74 68 72 65 61 64 2e 20 2a 2f 0a 20 20 20 20  -thread. */.    
33d0: 20 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43    sqlite3GlobalC
33e0: 6f 6e 66 69 67 2e 62 43 6f 72 65 4d 75 74 65 78  onfig.bCoreMutex
33f0: 20 3d 20 31 3b 20 20 2f 2a 20 45 6e 61 62 6c 65   = 1;  /* Enable
3400: 20 6d 75 74 65 78 20 6f 6e 20 63 6f 72 65 20 2a   mutex on core *
3410: 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 47  /.      sqlite3G
3420: 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 62 46 75 6c  lobalConfig.bFul
3430: 6c 4d 75 74 65 78 20 3d 20 30 3b 20 20 2f 2a 20  lMutex = 0;  /* 
3440: 44 69 73 61 62 6c 65 20 6d 75 74 65 78 20 6f 6e  Disable mutex on
3450: 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 2a 2f 0a   connections */.
3460: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
3470: 20 7d 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65   }.#endif.#if de
3480: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 48 52  fined(SQLITE_THR
3490: 45 41 44 53 41 46 45 29 20 26 26 20 53 51 4c 49  EADSAFE) && SQLI
34a0: 54 45 5f 54 48 52 45 41 44 53 41 46 45 3e 30 20  TE_THREADSAFE>0 
34b0: 2f 2a 20 49 4d 50 3a 20 52 2d 35 39 35 39 33 2d  /* IMP: R-59593-
34c0: 32 31 38 31 30 20 2a 2f 0a 20 20 20 20 63 61 73  21810 */.    cas
34d0: 65 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f  e SQLITE_CONFIG_
34e0: 53 45 52 49 41 4c 49 5a 45 44 3a 20 7b 0a 20 20  SERIALIZED: {.  
34f0: 20 20 20 20 2f 2a 20 45 56 49 44 45 4e 43 45 2d      /* EVIDENCE-
3500: 4f 46 3a 20 52 2d 34 31 32 32 30 2d 35 31 38 30  OF: R-41220-5180
3510: 30 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 73 65  0 This option se
3520: 74 73 20 74 68 65 20 74 68 72 65 61 64 69 6e 67  ts the threading
3530: 20 6d 6f 64 65 20 74 6f 0a 20 20 20 20 20 20 2a   mode to.      *
3540: 2a 20 53 65 72 69 61 6c 69 7a 65 64 2e 20 2a 2f  * Serialized. */
3550: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 47 6c  .      sqlite3Gl
3560: 6f 62 61 6c 43 6f 6e 66 69 67 2e 62 43 6f 72 65  obalConfig.bCore
3570: 4d 75 74 65 78 20 3d 20 31 3b 20 20 2f 2a 20 45  Mutex = 1;  /* E
3580: 6e 61 62 6c 65 20 6d 75 74 65 78 20 6f 6e 20 63  nable mutex on c
3590: 6f 72 65 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c  ore */.      sql
35a0: 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67  ite3GlobalConfig
35b0: 2e 62 46 75 6c 6c 4d 75 74 65 78 20 3d 20 31 3b  .bFullMutex = 1;
35c0: 20 20 2f 2a 20 45 6e 61 62 6c 65 20 6d 75 74 65    /* Enable mute
35d0: 78 20 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 73  x on connections
35e0: 20 2a 2f 0a 20 20 20 20 20 20 62 72 65 61 6b 3b   */.      break;
35f0: 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 23 69  .    }.#endif.#i
3600: 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
3610: 5f 54 48 52 45 41 44 53 41 46 45 29 20 26 26 20  _THREADSAFE) && 
3620: 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46  SQLITE_THREADSAF
3630: 45 3e 30 20 2f 2a 20 49 4d 50 3a 20 52 2d 36 33  E>0 /* IMP: R-63
3640: 36 36 36 2d 34 38 37 35 35 20 2a 2f 0a 20 20 20  666-48755 */.   
3650: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 43 4f 4e   case SQLITE_CON
3660: 46 49 47 5f 4d 55 54 45 58 3a 20 7b 0a 20 20 20  FIG_MUTEX: {.   
3670: 20 20 20 2f 2a 20 53 70 65 63 69 66 79 20 61 6e     /* Specify an
3680: 20 61 6c 74 65 72 6e 61 74 69 76 65 20 6d 75 74   alternative mut
3690: 65 78 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ex implementatio
36a0: 6e 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74  n */.      sqlit
36b0: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 6d  e3GlobalConfig.m
36c0: 75 74 65 78 20 3d 20 2a 76 61 5f 61 72 67 28 61  utex = *va_arg(a
36d0: 70 2c 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  p, sqlite3_mutex
36e0: 5f 6d 65 74 68 6f 64 73 2a 29 3b 0a 20 20 20 20  _methods*);.    
36f0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 23    break;.    }.#
3700: 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65  endif.#if define
3710: 64 28 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53  d(SQLITE_THREADS
3720: 41 46 45 29 20 26 26 20 53 51 4c 49 54 45 5f 54  AFE) && SQLITE_T
3730: 48 52 45 41 44 53 41 46 45 3e 30 20 2f 2a 20 49  HREADSAFE>0 /* I
3740: 4d 50 3a 20 52 2d 31 34 34 35 30 2d 33 37 35 39  MP: R-14450-3759
3750: 37 20 2a 2f 0a 20 20 20 20 63 61 73 65 20 53 51  7 */.    case SQ
3760: 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 47 45 54 4d  LITE_CONFIG_GETM
3770: 55 54 45 58 3a 20 7b 0a 20 20 20 20 20 20 2f 2a  UTEX: {.      /*
3780: 20 52 65 74 72 69 65 76 65 20 74 68 65 20 63 75   Retrieve the cu
3790: 72 72 65 6e 74 20 6d 75 74 65 78 20 69 6d 70 6c  rrent mutex impl
37a0: 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20  ementation */.  
37b0: 20 20 20 20 2a 76 61 5f 61 72 67 28 61 70 2c 20      *va_arg(ap, 
37c0: 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65  sqlite3_mutex_me
37d0: 74 68 6f 64 73 2a 29 20 3d 20 73 71 6c 69 74 65  thods*) = sqlite
37e0: 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 6d 75  3GlobalConfig.mu
37f0: 74 65 78 3b 0a 20 20 20 20 20 20 62 72 65 61 6b  tex;.      break
3800: 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a  ;.    }.#endif..
3810: 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
3820: 43 4f 4e 46 49 47 5f 4d 41 4c 4c 4f 43 3a 20 7b  CONFIG_MALLOC: {
3830: 0a 20 20 20 20 20 20 2f 2a 20 45 56 49 44 45 4e  .      /* EVIDEN
3840: 43 45 2d 4f 46 3a 20 52 2d 35 35 35 39 34 2d 32  CE-OF: R-55594-2
3850: 31 30 33 30 20 54 68 65 20 53 51 4c 49 54 45 5f  1030 The SQLITE_
3860: 43 4f 4e 46 49 47 5f 4d 41 4c 4c 4f 43 20 6f 70  CONFIG_MALLOC op
3870: 74 69 6f 6e 20 74 61 6b 65 73 20 61 0a 20 20 20  tion takes a.   
3880: 20 20 20 2a 2a 20 73 69 6e 67 6c 65 20 61 72 67     ** single arg
3890: 75 6d 65 6e 74 20 77 68 69 63 68 20 69 73 20 61  ument which is a
38a0: 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e 20 69   pointer to an i
38b0: 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 0a 20  nstance of the. 
38c0: 20 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 33 5f       ** sqlite3_
38d0: 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 73 74 72 75  mem_methods stru
38e0: 63 74 75 72 65 2e 20 54 68 65 20 61 72 67 75 6d  cture. The argum
38f0: 65 6e 74 20 73 70 65 63 69 66 69 65 73 20 61 6c  ent specifies al
3900: 74 65 72 6e 61 74 69 76 65 0a 20 20 20 20 20 20  ternative.      
3910: 2a 2a 20 6c 6f 77 2d 6c 65 76 65 6c 20 6d 65 6d  ** low-level mem
3920: 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 72  ory allocation r
3930: 6f 75 74 69 6e 65 73 20 74 6f 20 62 65 20 75 73  outines to be us
3940: 65 64 20 69 6e 20 70 6c 61 63 65 20 6f 66 20 74  ed in place of t
3950: 68 65 20 6d 65 6d 6f 72 79 0a 20 20 20 20 20 20  he memory.      
3960: 2a 2a 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 72 6f  ** allocation ro
3970: 75 74 69 6e 65 73 20 62 75 69 6c 74 20 69 6e 74  utines built int
3980: 6f 20 53 51 4c 69 74 65 2e 20 2a 2f 0a 20 20 20  o SQLite. */.   
3990: 20 20 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c     sqlite3Global
39a0: 43 6f 6e 66 69 67 2e 6d 20 3d 20 2a 76 61 5f 61  Config.m = *va_a
39b0: 72 67 28 61 70 2c 20 73 71 6c 69 74 65 33 5f 6d  rg(ap, sqlite3_m
39c0: 65 6d 5f 6d 65 74 68 6f 64 73 2a 29 3b 0a 20 20  em_methods*);.  
39d0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
39e0: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
39f0: 5f 43 4f 4e 46 49 47 5f 47 45 54 4d 41 4c 4c 4f  _CONFIG_GETMALLO
3a00: 43 3a 20 7b 0a 20 20 20 20 20 20 2f 2a 20 45 56  C: {.      /* EV
3a10: 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 35 31 32  IDENCE-OF: R-512
3a20: 31 33 2d 34 36 34 31 34 20 54 68 65 20 53 51 4c  13-46414 The SQL
3a30: 49 54 45 5f 43 4f 4e 46 49 47 5f 47 45 54 4d 41  ITE_CONFIG_GETMA
3a40: 4c 4c 4f 43 20 6f 70 74 69 6f 6e 20 74 61 6b 65  LLOC option take
3a50: 73 20 61 0a 20 20 20 20 20 20 2a 2a 20 73 69 6e  s a.      ** sin
3a60: 67 6c 65 20 61 72 67 75 6d 65 6e 74 20 77 68 69  gle argument whi
3a70: 63 68 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  ch is a pointer 
3a80: 74 6f 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  to an instance o
3a90: 66 20 74 68 65 0a 20 20 20 20 20 20 2a 2a 20 73  f the.      ** s
3aa0: 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f  qlite3_mem_metho
3ab0: 64 73 20 73 74 72 75 63 74 75 72 65 2e 20 54 68  ds structure. Th
3ac0: 65 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65  e sqlite3_mem_me
3ad0: 74 68 6f 64 73 20 73 74 72 75 63 74 75 72 65 20  thods structure 
3ae0: 69 73 0a 20 20 20 20 20 20 2a 2a 20 66 69 6c 6c  is.      ** fill
3af0: 65 64 20 77 69 74 68 20 74 68 65 20 63 75 72 72  ed with the curr
3b00: 65 6e 74 6c 79 20 64 65 66 69 6e 65 64 20 6d 65  ently defined me
3b10: 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  mory allocation 
3b20: 72 6f 75 74 69 6e 65 73 2e 20 2a 2f 0a 20 20 20  routines. */.   
3b30: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 47 6c     if( sqlite3Gl
3b40: 6f 62 61 6c 43 6f 6e 66 69 67 2e 6d 2e 78 4d 61  obalConfig.m.xMa
3b50: 6c 6c 6f 63 3d 3d 30 20 29 20 73 71 6c 69 74 65  lloc==0 ) sqlite
3b60: 33 4d 65 6d 53 65 74 44 65 66 61 75 6c 74 28 29  3MemSetDefault()
3b70: 3b 0a 20 20 20 20 20 20 2a 76 61 5f 61 72 67 28  ;.      *va_arg(
3b80: 61 70 2c 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f  ap, sqlite3_mem_
3b90: 6d 65 74 68 6f 64 73 2a 29 20 3d 20 73 71 6c 69  methods*) = sqli
3ba0: 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e  te3GlobalConfig.
3bb0: 6d 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  m;.      break;.
3bc0: 20 20 20 20 7d 0a 20 20 20 20 63 61 73 65 20 53      }.    case S
3bd0: 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4d 45 4d  QLITE_CONFIG_MEM
3be0: 53 54 41 54 55 53 3a 20 7b 0a 20 20 20 20 20 20  STATUS: {.      
3bf0: 2f 2a 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20  /* EVIDENCE-OF: 
3c00: 52 2d 36 31 32 37 35 2d 33 35 31 35 37 20 54 68  R-61275-35157 Th
3c10: 65 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f  e SQLITE_CONFIG_
3c20: 4d 45 4d 53 54 41 54 55 53 20 6f 70 74 69 6f 6e  MEMSTATUS option
3c30: 20 74 61 6b 65 73 0a 20 20 20 20 20 20 2a 2a 20   takes.      ** 
3c40: 73 69 6e 67 6c 65 20 61 72 67 75 6d 65 6e 74 20  single argument 
3c50: 6f 66 20 74 79 70 65 20 69 6e 74 2c 20 69 6e 74  of type int, int
3c60: 65 72 70 72 65 74 65 64 20 61 73 20 61 20 62 6f  erpreted as a bo
3c70: 6f 6c 65 61 6e 2c 20 77 68 69 63 68 20 65 6e 61  olean, which ena
3c80: 62 6c 65 73 0a 20 20 20 20 20 20 2a 2a 20 6f 72  bles.      ** or
3c90: 20 64 69 73 61 62 6c 65 73 20 74 68 65 20 63 6f   disables the co
3ca0: 6c 6c 65 63 74 69 6f 6e 20 6f 66 20 6d 65 6d 6f  llection of memo
3cb0: 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73 74  ry allocation st
3cc0: 61 74 69 73 74 69 63 73 2e 20 2a 2f 0a 20 20 20  atistics. */.   
3cd0: 20 20 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c     sqlite3Global
3ce0: 43 6f 6e 66 69 67 2e 62 4d 65 6d 73 74 61 74 20  Config.bMemstat 
3cf0: 3d 20 76 61 5f 61 72 67 28 61 70 2c 20 69 6e 74  = va_arg(ap, int
3d00: 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  );.      break;.
3d10: 20 20 20 20 7d 0a 20 20 20 20 63 61 73 65 20 53      }.    case S
3d20: 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 53 43 52  QLITE_CONFIG_SCR
3d30: 41 54 43 48 3a 20 7b 0a 20 20 20 20 20 20 2f 2a  ATCH: {.      /*
3d40: 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d   EVIDENCE-OF: R-
3d50: 30 38 34 30 34 2d 36 30 38 38 37 20 54 68 65 72  08404-60887 Ther
3d60: 65 20 61 72 65 20 74 68 72 65 65 20 61 72 67 75  e are three argu
3d70: 6d 65 6e 74 73 20 74 6f 0a 20 20 20 20 20 20 2a  ments to.      *
3d80: 2a 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f  * SQLITE_CONFIG_
3d90: 53 43 52 41 54 43 48 3a 20 41 20 70 6f 69 6e 74  SCRATCH: A point
3da0: 65 72 20 61 6e 20 38 2d 62 79 74 65 20 61 6c 69  er an 8-byte ali
3db0: 67 6e 65 64 20 6d 65 6d 6f 72 79 20 62 75 66 66  gned memory buff
3dc0: 65 72 20 66 72 6f 6d 0a 20 20 20 20 20 20 2a 2a  er from.      **
3dd0: 20 77 68 69 63 68 20 74 68 65 20 73 63 72 61 74   which the scrat
3de0: 63 68 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 77  ch allocations w
3df0: 69 6c 6c 20 62 65 20 64 72 61 77 6e 2c 20 74 68  ill be drawn, th
3e00: 65 20 73 69 7a 65 20 6f 66 20 65 61 63 68 20 73  e size of each s
3e10: 63 72 61 74 63 68 0a 20 20 20 20 20 20 2a 2a 20  cratch.      ** 
3e20: 61 6c 6c 6f 63 61 74 69 6f 6e 20 28 73 7a 29 2c  allocation (sz),
3e30: 20 61 6e 64 20 74 68 65 20 6d 61 78 69 6d 75 6d   and the maximum
3e40: 20 6e 75 6d 62 65 72 20 6f 66 20 73 63 72 61 74   number of scrat
3e50: 63 68 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 28  ch allocations (
3e60: 4e 29 2e 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c  N). */.      sql
3e70: 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67  ite3GlobalConfig
3e80: 2e 70 53 63 72 61 74 63 68 20 3d 20 76 61 5f 61  .pScratch = va_a
3e90: 72 67 28 61 70 2c 20 76 6f 69 64 2a 29 3b 0a 20  rg(ap, void*);. 
3ea0: 20 20 20 20 20 73 71 6c 69 74 65 33 47 6c 6f 62       sqlite3Glob
3eb0: 61 6c 43 6f 6e 66 69 67 2e 73 7a 53 63 72 61 74  alConfig.szScrat
3ec0: 63 68 20 3d 20 76 61 5f 61 72 67 28 61 70 2c 20  ch = va_arg(ap, 
3ed0: 69 6e 74 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  int);.      sqli
3ee0: 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e  te3GlobalConfig.
3ef0: 6e 53 63 72 61 74 63 68 20 3d 20 76 61 5f 61 72  nScratch = va_ar
3f00: 67 28 61 70 2c 20 69 6e 74 29 3b 0a 20 20 20 20  g(ap, int);.    
3f10: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20    break;.    }. 
3f20: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 43     case SQLITE_C
3f30: 4f 4e 46 49 47 5f 50 41 47 45 43 41 43 48 45 3a  ONFIG_PAGECACHE:
3f40: 20 7b 0a 20 20 20 20 20 20 2f 2a 20 45 56 49 44   {.      /* EVID
3f50: 45 4e 43 45 2d 4f 46 3a 20 52 2d 31 38 37 36 31  ENCE-OF: R-18761
3f60: 2d 33 36 36 30 31 20 54 68 65 72 65 20 61 72 65  -36601 There are
3f70: 20 74 68 72 65 65 20 61 72 67 75 6d 65 6e 74 73   three arguments
3f80: 20 74 6f 0a 20 20 20 20 20 20 2a 2a 20 53 51 4c   to.      ** SQL
3f90: 49 54 45 5f 43 4f 4e 46 49 47 5f 50 41 47 45 43  ITE_CONFIG_PAGEC
3fa0: 41 43 48 45 3a 20 41 20 70 6f 69 6e 74 65 72 20  ACHE: A pointer 
3fb0: 74 6f 20 38 2d 62 79 74 65 20 61 6c 69 67 6e 65  to 8-byte aligne
3fc0: 64 20 6d 65 6d 6f 72 79 20 28 70 4d 65 6d 29 2c  d memory (pMem),
3fd0: 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20 73 69  .      ** the si
3fe0: 7a 65 20 6f 66 20 65 61 63 68 20 70 61 67 65 20  ze of each page 
3ff0: 63 61 63 68 65 20 6c 69 6e 65 20 28 73 7a 29 2c  cache line (sz),
4000: 20 61 6e 64 20 74 68 65 20 6e 75 6d 62 65 72 20   and the number 
4010: 6f 66 20 63 61 63 68 65 20 6c 69 6e 65 73 0a 20  of cache lines. 
4020: 20 20 20 20 20 2a 2a 20 28 4e 29 2e 20 2a 2f 0a       ** (N). */.
4030: 20 20 20 20 20 20 73 71 6c 69 74 65 33 47 6c 6f        sqlite3Glo
4040: 62 61 6c 43 6f 6e 66 69 67 2e 70 50 61 67 65 20  balConfig.pPage 
4050: 3d 20 76 61 5f 61 72 67 28 61 70 2c 20 76 6f 69  = va_arg(ap, voi
4060: 64 2a 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  d*);.      sqlit
4070: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 73  e3GlobalConfig.s
4080: 7a 50 61 67 65 20 3d 20 76 61 5f 61 72 67 28 61  zPage = va_arg(a
4090: 70 2c 20 69 6e 74 29 3b 0a 20 20 20 20 20 20 73  p, int);.      s
40a0: 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66  qlite3GlobalConf
40b0: 69 67 2e 6e 50 61 67 65 20 3d 20 76 61 5f 61 72  ig.nPage = va_ar
40c0: 67 28 61 70 2c 20 69 6e 74 29 3b 0a 20 20 20 20  g(ap, int);.    
40d0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20    break;.    }. 
40e0: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 43     case SQLITE_C
40f0: 4f 4e 46 49 47 5f 50 43 41 43 48 45 5f 48 44 52  ONFIG_PCACHE_HDR
4100: 53 5a 3a 20 7b 0a 20 20 20 20 20 20 2f 2a 20 45  SZ: {.      /* E
4110: 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 33 39  VIDENCE-OF: R-39
4120: 31 30 30 2d 32 37 33 31 37 20 54 68 65 20 53 51  100-27317 The SQ
4130: 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 50 43 41 43  LITE_CONFIG_PCAC
4140: 48 45 5f 48 44 52 53 5a 20 6f 70 74 69 6f 6e 20  HE_HDRSZ option 
4150: 74 61 6b 65 73 0a 20 20 20 20 20 20 2a 2a 20 61  takes.      ** a
4160: 20 73 69 6e 67 6c 65 20 70 61 72 61 6d 65 74 65   single paramete
4170: 72 20 77 68 69 63 68 20 69 73 20 61 20 70 6f 69  r which is a poi
4180: 6e 74 65 72 20 74 6f 20 61 6e 20 69 6e 74 65 67  nter to an integ
4190: 65 72 20 61 6e 64 20 77 72 69 74 65 73 20 69 6e  er and writes in
41a0: 74 6f 0a 20 20 20 20 20 20 2a 2a 20 74 68 61 74  to.      ** that
41b0: 20 69 6e 74 65 67 65 72 20 74 68 65 20 6e 75 6d   integer the num
41c0: 62 65 72 20 6f 66 20 65 78 74 72 61 20 62 79 74  ber of extra byt
41d0: 65 73 20 70 65 72 20 70 61 67 65 20 72 65 71 75  es per page requ
41e0: 69 72 65 64 20 66 6f 72 20 65 61 63 68 20 70 61  ired for each pa
41f0: 67 65 0a 20 20 20 20 20 20 2a 2a 20 69 6e 20 53  ge.      ** in S
4200: 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 50 41 47  QLITE_CONFIG_PAG
4210: 45 43 41 43 48 45 2e 20 2a 2f 0a 20 20 20 20 20  ECACHE. */.     
4220: 20 2a 76 61 5f 61 72 67 28 61 70 2c 20 69 6e 74   *va_arg(ap, int
4230: 2a 29 20 3d 20 0a 20 20 20 20 20 20 20 20 20 20  *) = .          
4240: 73 71 6c 69 74 65 33 48 65 61 64 65 72 53 69 7a  sqlite3HeaderSiz
4250: 65 42 74 72 65 65 28 29 20 2b 0a 20 20 20 20 20  eBtree() +.     
4260: 20 20 20 20 20 73 71 6c 69 74 65 33 48 65 61 64       sqlite3Head
4270: 65 72 53 69 7a 65 50 63 61 63 68 65 28 29 20 2b  erSizePcache() +
4280: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
4290: 65 33 48 65 61 64 65 72 53 69 7a 65 50 63 61 63  e3HeaderSizePcac
42a0: 68 65 31 28 29 3b 0a 20 20 20 20 20 20 62 72 65  he1();.      bre
42b0: 61 6b 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 63  ak;.    }..    c
42c0: 61 73 65 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49  ase SQLITE_CONFI
42d0: 47 5f 50 43 41 43 48 45 3a 20 7b 0a 20 20 20 20  G_PCACHE: {.    
42e0: 20 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 20 20    /* no-op */.  
42f0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
4300: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
4310: 5f 43 4f 4e 46 49 47 5f 47 45 54 50 43 41 43 48  _CONFIG_GETPCACH
4320: 45 3a 20 7b 0a 20 20 20 20 20 20 2f 2a 20 6e 6f  E: {.      /* no
4330: 77 20 61 6e 20 65 72 72 6f 72 20 2a 2f 0a 20 20  w an error */.  
4340: 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
4350: 45 52 52 4f 52 3b 0a 20 20 20 20 20 20 62 72 65  ERROR;.      bre
4360: 61 6b 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 63  ak;.    }..    c
4370: 61 73 65 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49  ase SQLITE_CONFI
4380: 47 5f 50 43 41 43 48 45 32 3a 20 7b 0a 20 20 20  G_PCACHE2: {.   
4390: 20 20 20 2f 2a 20 45 56 49 44 45 4e 43 45 2d 4f     /* EVIDENCE-O
43a0: 46 3a 20 52 2d 36 33 33 32 35 2d 34 38 33 37 38  F: R-63325-48378
43b0: 20 54 68 65 20 53 51 4c 49 54 45 5f 43 4f 4e 46   The SQLITE_CONF
43c0: 49 47 5f 50 43 41 43 48 45 32 20 6f 70 74 69 6f  IG_PCACHE2 optio
43d0: 6e 20 74 61 6b 65 73 20 61 0a 20 20 20 20 20 20  n takes a.      
43e0: 2a 2a 20 73 69 6e 67 6c 65 20 61 72 67 75 6d 65  ** single argume
43f0: 6e 74 20 77 68 69 63 68 20 69 73 20 61 20 70 6f  nt which is a po
4400: 69 6e 74 65 72 20 74 6f 20 61 6e 20 73 71 6c 69  inter to an sqli
4410: 74 65 33 5f 70 63 61 63 68 65 5f 6d 65 74 68 6f  te3_pcache_metho
4420: 64 73 32 0a 20 20 20 20 20 20 2a 2a 20 6f 62 6a  ds2.      ** obj
4430: 65 63 74 2e 20 54 68 69 73 20 6f 62 6a 65 63 74  ect. This object
4440: 20 73 70 65 63 69 66 69 65 73 20 74 68 65 20 69   specifies the i
4450: 6e 74 65 72 66 61 63 65 20 74 6f 20 61 20 63 75  nterface to a cu
4460: 73 74 6f 6d 20 70 61 67 65 20 63 61 63 68 65 0a  stom page cache.
4470: 20 20 20 20 20 20 2a 2a 20 69 6d 70 6c 65 6d 65        ** impleme
4480: 6e 74 61 74 69 6f 6e 2e 20 2a 2f 0a 20 20 20 20  ntation. */.    
4490: 20 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43    sqlite3GlobalC
44a0: 6f 6e 66 69 67 2e 70 63 61 63 68 65 32 20 3d 20  onfig.pcache2 = 
44b0: 2a 76 61 5f 61 72 67 28 61 70 2c 20 73 71 6c 69  *va_arg(ap, sqli
44c0: 74 65 33 5f 70 63 61 63 68 65 5f 6d 65 74 68 6f  te3_pcache_metho
44d0: 64 73 32 2a 29 3b 0a 20 20 20 20 20 20 62 72 65  ds2*);.      bre
44e0: 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61  ak;.    }.    ca
44f0: 73 65 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47  se SQLITE_CONFIG
4500: 5f 47 45 54 50 43 41 43 48 45 32 3a 20 7b 0a 20  _GETPCACHE2: {. 
4510: 20 20 20 20 20 2f 2a 20 45 56 49 44 45 4e 43 45       /* EVIDENCE
4520: 2d 4f 46 3a 20 52 2d 32 32 30 33 35 2d 34 36 31  -OF: R-22035-461
4530: 38 32 20 54 68 65 20 53 51 4c 49 54 45 5f 43 4f  82 The SQLITE_CO
4540: 4e 46 49 47 5f 47 45 54 50 43 41 43 48 45 32 20  NFIG_GETPCACHE2 
4550: 6f 70 74 69 6f 6e 20 74 61 6b 65 73 20 61 0a 20  option takes a. 
4560: 20 20 20 20 20 2a 2a 20 73 69 6e 67 6c 65 20 61       ** single a
4570: 72 67 75 6d 65 6e 74 20 77 68 69 63 68 20 69 73  rgument which is
4580: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e   a pointer to an
4590: 20 73 71 6c 69 74 65 33 5f 70 63 61 63 68 65 5f   sqlite3_pcache_
45a0: 6d 65 74 68 6f 64 73 32 0a 20 20 20 20 20 20 2a  methods2.      *
45b0: 2a 20 6f 62 6a 65 63 74 2e 20 53 51 4c 69 74 65  * object. SQLite
45c0: 20 63 6f 70 69 65 73 20 6f 66 20 74 68 65 20 63   copies of the c
45d0: 75 72 72 65 6e 74 20 70 61 67 65 20 63 61 63 68  urrent page cach
45e0: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
45f0: 20 69 6e 74 6f 0a 20 20 20 20 20 20 2a 2a 20 74   into.      ** t
4600: 68 61 74 20 6f 62 6a 65 63 74 2e 20 2a 2f 0a 20  hat object. */. 
4610: 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33       if( sqlite3
4620: 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 70 63 61  GlobalConfig.pca
4630: 63 68 65 32 2e 78 49 6e 69 74 3d 3d 30 20 29 7b  che2.xInit==0 ){
4640: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
4650: 50 43 61 63 68 65 53 65 74 44 65 66 61 75 6c 74  PCacheSetDefault
4660: 28 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ();.      }.    
4670: 20 20 2a 76 61 5f 61 72 67 28 61 70 2c 20 73 71    *va_arg(ap, sq
4680: 6c 69 74 65 33 5f 70 63 61 63 68 65 5f 6d 65 74  lite3_pcache_met
4690: 68 6f 64 73 32 2a 29 20 3d 20 73 71 6c 69 74 65  hods2*) = sqlite
46a0: 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 70 63  3GlobalConfig.pc
46b0: 61 63 68 65 32 3b 0a 20 20 20 20 20 20 62 72 65  ache2;.      bre
46c0: 61 6b 3b 0a 20 20 20 20 7d 0a 0a 2f 2a 20 45 56  ak;.    }../* EV
46d0: 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 30 36 36  IDENCE-OF: R-066
46e0: 32 36 2d 31 32 39 31 31 20 54 68 65 20 53 51 4c  26-12911 The SQL
46f0: 49 54 45 5f 43 4f 4e 46 49 47 5f 48 45 41 50 20  ITE_CONFIG_HEAP 
4700: 6f 70 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 0a 2a  option is only.*
4710: 2a 20 61 76 61 69 6c 61 62 6c 65 20 69 66 20 53  * available if S
4720: 51 4c 69 74 65 20 69 73 20 63 6f 6d 70 69 6c 65  QLite is compile
4730: 64 20 77 69 74 68 20 65 69 74 68 65 72 20 53 51  d with either SQ
4740: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53  LITE_ENABLE_MEMS
4750: 59 53 33 20 6f 72 0a 2a 2a 20 53 51 4c 49 54 45  YS3 or.** SQLITE
4760: 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 35 20  _ENABLE_MEMSYS5 
4770: 61 6e 64 20 72 65 74 75 72 6e 73 20 53 51 4c 49  and returns SQLI
4780: 54 45 5f 45 52 52 4f 52 20 69 66 20 69 6e 76 6f  TE_ERROR if invo
4790: 6b 65 64 20 6f 74 68 65 72 77 69 73 65 2e 20 2a  ked otherwise. *
47a0: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
47b0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53  LITE_ENABLE_MEMS
47c0: 59 53 33 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  YS3) || 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 35 29 0a 20 20 20 20 63 61 73 65 20  MSYS5).    case 
47f0: 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 48 45  SQLITE_CONFIG_HE
4800: 41 50 3a 20 7b 0a 20 20 20 20 20 20 2f 2a 20 45  AP: {.      /* E
4810: 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 31 39  VIDENCE-OF: R-19
4820: 38 35 34 2d 34 32 31 32 36 20 54 68 65 72 65 20  854-42126 There 
4830: 61 72 65 20 74 68 72 65 65 20 61 72 67 75 6d 65  are three argume
4840: 6e 74 73 20 74 6f 0a 20 20 20 20 20 20 2a 2a 20  nts to.      ** 
4850: 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 48 45  SQLITE_CONFIG_HE
4860: 41 50 3a 20 41 6e 20 38 2d 62 79 74 65 20 61 6c  AP: An 8-byte al
4870: 69 67 6e 65 64 20 70 6f 69 6e 74 65 72 20 74 6f  igned pointer to
4880: 20 74 68 65 20 6d 65 6d 6f 72 79 2c 20 74 68 65   the memory, the
4890: 0a 20 20 20 20 20 20 2a 2a 20 6e 75 6d 62 65 72  .      ** number
48a0: 20 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68 65   of bytes in the
48b0: 20 6d 65 6d 6f 72 79 20 62 75 66 66 65 72 2c 20   memory buffer, 
48c0: 61 6e 64 20 74 68 65 20 6d 69 6e 69 6d 75 6d 20  and the minimum 
48d0: 61 6c 6c 6f 63 61 74 69 6f 6e 20 73 69 7a 65 2e  allocation size.
48e0: 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
48f0: 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e  sqlite3GlobalCon
4900: 66 69 67 2e 70 48 65 61 70 20 3d 20 76 61 5f 61  fig.pHeap = va_a
4910: 72 67 28 61 70 2c 20 76 6f 69 64 2a 29 3b 0a 20  rg(ap, void*);. 
4920: 20 20 20 20 20 73 71 6c 69 74 65 33 47 6c 6f 62       sqlite3Glob
4930: 61 6c 43 6f 6e 66 69 67 2e 6e 48 65 61 70 20 3d  alConfig.nHeap =
4940: 20 76 61 5f 61 72 67 28 61 70 2c 20 69 6e 74 29   va_arg(ap, int)
4950: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 47  ;.      sqlite3G
4960: 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 6d 6e 52 65  lobalConfig.mnRe
4970: 71 20 3d 20 76 61 5f 61 72 67 28 61 70 2c 20 69  q = va_arg(ap, i
4980: 6e 74 29 3b 0a 0a 20 20 20 20 20 20 69 66 28 20  nt);..      if( 
4990: 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e  sqlite3GlobalCon
49a0: 66 69 67 2e 6d 6e 52 65 71 3c 31 20 29 7b 0a 20  fig.mnReq<1 ){. 
49b0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 47 6c         sqlite3Gl
49c0: 6f 62 61 6c 43 6f 6e 66 69 67 2e 6d 6e 52 65 71  obalConfig.mnReq
49d0: 20 3d 20 31 3b 0a 20 20 20 20 20 20 7d 65 6c 73   = 1;.      }els
49e0: 65 20 69 66 28 20 73 71 6c 69 74 65 33 47 6c 6f  e if( sqlite3Glo
49f0: 62 61 6c 43 6f 6e 66 69 67 2e 6d 6e 52 65 71 3e  balConfig.mnReq>
4a00: 28 31 3c 3c 31 32 29 20 29 7b 0a 20 20 20 20 20  (1<<12) ){.     
4a10: 20 20 20 2f 2a 20 63 61 70 20 6d 69 6e 20 72 65     /* cap min re
4a20: 71 75 65 73 74 20 73 69 7a 65 20 61 74 20 32 5e  quest size at 2^
4a30: 31 32 20 2a 2f 0a 20 20 20 20 20 20 20 20 73 71  12 */.        sq
4a40: 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69  lite3GlobalConfi
4a50: 67 2e 6d 6e 52 65 71 20 3d 20 28 31 3c 3c 31 32  g.mnReq = (1<<12
4a60: 29 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20  );.      }..    
4a70: 20 20 69 66 28 20 73 71 6c 69 74 65 33 47 6c 6f    if( sqlite3Glo
4a80: 62 61 6c 43 6f 6e 66 69 67 2e 70 48 65 61 70 3d  balConfig.pHeap=
4a90: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a  =0 ){.        /*
4aa0: 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d   EVIDENCE-OF: R-
4ab0: 34 39 39 32 30 2d 36 30 31 38 39 20 49 66 20 74  49920-60189 If t
4ac0: 68 65 20 66 69 72 73 74 20 70 6f 69 6e 74 65 72  he first pointer
4ad0: 20 28 74 68 65 20 6d 65 6d 6f 72 79 20 70 6f 69   (the memory poi
4ae0: 6e 74 65 72 29 0a 20 20 20 20 20 20 20 20 2a 2a  nter).        **
4af0: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 53   is NULL, then S
4b00: 51 4c 69 74 65 20 72 65 76 65 72 74 73 20 74 6f  QLite reverts to
4b10: 20 75 73 69 6e 67 20 69 74 73 20 64 65 66 61 75   using its defau
4b20: 6c 74 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  lt memory alloca
4b30: 74 6f 72 0a 20 20 20 20 20 20 20 20 2a 2a 20 28  tor.        ** (
4b40: 74 68 65 20 73 79 73 74 65 6d 20 6d 61 6c 6c 6f  the system mallo
4b50: 63 28 29 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  c() implementati
4b60: 6f 6e 29 2c 20 75 6e 64 6f 69 6e 67 20 61 6e 79  on), undoing any
4b70: 20 70 72 69 6f 72 20 69 6e 76 6f 63 61 74 69 6f   prior invocatio
4b80: 6e 20 6f 66 0a 20 20 20 20 20 20 20 20 2a 2a 20  n of.        ** 
4b90: 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4d 41  SQLITE_CONFIG_MA
4ba0: 4c 4c 4f 43 2e 0a 20 20 20 20 20 20 20 20 2a 2a  LLOC..        **
4bb0: 0a 20 20 20 20 20 20 20 20 2a 2a 20 53 65 74 74  .        ** Sett
4bc0: 69 6e 67 20 73 71 6c 69 74 65 33 47 6c 6f 62 61  ing sqlite3Globa
4bd0: 6c 43 6f 6e 66 69 67 2e 6d 20 74 6f 20 61 6c 6c  lConfig.m to all
4be0: 20 7a 65 72 6f 73 20 77 69 6c 6c 20 63 61 75 73   zeros will caus
4bf0: 65 20 6d 61 6c 6c 6f 63 20 74 6f 0a 20 20 20 20  e malloc to.    
4c00: 20 20 20 20 2a 2a 20 72 65 76 65 72 74 20 74 6f      ** revert to
4c10: 20 69 74 73 20 64 65 66 61 75 6c 74 20 69 6d 70   its default imp
4c20: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 77 68 65 6e  lementation when
4c30: 20 73 71 6c 69 74 65 33 5f 69 6e 69 74 69 61 6c   sqlite3_initial
4c40: 69 7a 65 28 29 20 69 73 20 72 75 6e 0a 20 20 20  ize() is run.   
4c50: 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20       */.        
4c60: 6d 65 6d 73 65 74 28 26 73 71 6c 69 74 65 33 47  memset(&sqlite3G
4c70: 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 6d 2c 20 30  lobalConfig.m, 0
4c80: 2c 20 73 69 7a 65 6f 66 28 73 71 6c 69 74 65 33  , sizeof(sqlite3
4c90: 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 6d 29 29  GlobalConfig.m))
4ca0: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
4cb0: 20 20 20 20 20 20 20 2f 2a 20 45 56 49 44 45 4e         /* EVIDEN
4cc0: 43 45 2d 4f 46 3a 20 52 2d 36 31 30 30 36 2d 30  CE-OF: R-61006-0
4cd0: 38 39 31 38 20 49 66 20 74 68 65 20 6d 65 6d 6f  8918 If the memo
4ce0: 72 79 20 70 6f 69 6e 74 65 72 20 69 73 20 6e 6f  ry pointer is no
4cf0: 74 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 0a  t NULL then the.
4d00: 20 20 20 20 20 20 20 20 2a 2a 20 61 6c 74 65 72          ** alter
4d10: 6e 61 74 69 76 65 20 6d 65 6d 6f 72 79 20 61 6c  native memory al
4d20: 6c 6f 63 61 74 6f 72 20 69 73 20 65 6e 67 61 67  locator is engag
4d30: 65 64 20 74 6f 20 68 61 6e 64 6c 65 20 61 6c 6c  ed to handle all
4d40: 20 6f 66 20 53 51 4c 69 74 65 73 0a 20 20 20 20   of SQLites.    
4d50: 20 20 20 20 2a 2a 20 6d 65 6d 6f 72 79 20 61 6c      ** memory al
4d60: 6c 6f 63 61 74 69 6f 6e 20 6e 65 65 64 73 2e 20  location needs. 
4d70: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
4d80: 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 33 0a  _ENABLE_MEMSYS3.
4d90: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 47          sqlite3G
4da0: 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 6d 20 3d 20  lobalConfig.m = 
4db0: 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65  *sqlite3MemGetMe
4dc0: 6d 73 79 73 33 28 29 3b 0a 23 65 6e 64 69 66 0a  msys3();.#endif.
4dd0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
4de0: 41 42 4c 45 5f 4d 45 4d 53 59 53 35 0a 20 20 20  ABLE_MEMSYS5.   
4df0: 20 20 20 20 20 73 71 6c 69 74 65 33 47 6c 6f 62       sqlite3Glob
4e00: 61 6c 43 6f 6e 66 69 67 2e 6d 20 3d 20 2a 73 71  alConfig.m = *sq
4e10: 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79  lite3MemGetMemsy
4e20: 73 35 28 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20  s5();.#endif.   
4e30: 20 20 20 7d 0a 20 20 20 20 20 20 62 72 65 61 6b     }.      break
4e40: 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a  ;.    }.#endif..
4e50: 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
4e60: 43 4f 4e 46 49 47 5f 4c 4f 4f 4b 41 53 49 44 45  CONFIG_LOOKASIDE
4e70: 3a 20 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  : {.      sqlite
4e80: 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 73 7a  3GlobalConfig.sz
4e90: 4c 6f 6f 6b 61 73 69 64 65 20 3d 20 76 61 5f 61  Lookaside = va_a
4ea0: 72 67 28 61 70 2c 20 69 6e 74 29 3b 0a 20 20 20  rg(ap, int);.   
4eb0: 20 20 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c     sqlite3Global
4ec0: 43 6f 6e 66 69 67 2e 6e 4c 6f 6f 6b 61 73 69 64  Config.nLookasid
4ed0: 65 20 3d 20 76 61 5f 61 72 67 28 61 70 2c 20 69  e = va_arg(ap, i
4ee0: 6e 74 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b  nt);.      break
4ef0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 0a 20 20 20  ;.    }.    .   
4f00: 20 2f 2a 20 52 65 63 6f 72 64 20 61 20 70 6f 69   /* Record a poi
4f10: 6e 74 65 72 20 74 6f 20 74 68 65 20 6c 6f 67 67  nter to the logg
4f20: 65 72 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20  er function and 
4f30: 69 74 73 20 66 69 72 73 74 20 61 72 67 75 6d 65  its first argume
4f40: 6e 74 2e 0a 20 20 20 20 2a 2a 20 54 68 65 20 64  nt..    ** The d
4f50: 65 66 61 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 20  efault is NULL. 
4f60: 20 4c 6f 67 67 69 6e 67 20 69 73 20 64 69 73 61   Logging is disa
4f70: 62 6c 65 64 20 69 66 20 74 68 65 20 66 75 6e 63  bled if the func
4f80: 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 69 73 0a  tion pointer is.
4f90: 20 20 20 20 2a 2a 20 4e 55 4c 4c 2e 0a 20 20 20      ** NULL..   
4fa0: 20 2a 2f 0a 20 20 20 20 63 61 73 65 20 53 51 4c   */.    case SQL
4fb0: 49 54 45 5f 43 4f 4e 46 49 47 5f 4c 4f 47 3a 20  ITE_CONFIG_LOG: 
4fc0: 7b 0a 20 20 20 20 20 20 2f 2a 20 4d 53 56 43 20  {.      /* MSVC 
4fd0: 69 73 20 70 69 63 6b 79 20 61 62 6f 75 74 20 70  is picky about p
4fe0: 75 6c 6c 69 6e 67 20 66 75 6e 63 20 70 74 72 73  ulling func ptrs
4ff0: 20 66 72 6f 6d 20 76 61 20 6c 69 73 74 73 2e 0a   from va lists..
5000: 20 20 20 20 20 20 2a 2a 20 68 74 74 70 3a 2f 2f        ** http://
5010: 73 75 70 70 6f 72 74 2e 6d 69 63 72 6f 73 6f 66  support.microsof
5020: 74 2e 63 6f 6d 2f 6b 62 2f 34 37 39 36 31 0a 20  t.com/kb/47961. 
5030: 20 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 33 47       ** sqlite3G
5040: 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78 4c 6f 67  lobalConfig.xLog
5050: 20 3d 20 76 61 5f 61 72 67 28 61 70 2c 20 76 6f   = va_arg(ap, vo
5060: 69 64 28 2a 29 28 76 6f 69 64 2a 2c 69 6e 74 2c  id(*)(void*,int,
5070: 63 6f 6e 73 74 20 63 68 61 72 2a 29 29 3b 0a 20  const char*));. 
5080: 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 74 79       */.      ty
5090: 70 65 64 65 66 20 76 6f 69 64 28 2a 4c 4f 47 46  pedef void(*LOGF
50a0: 55 4e 43 5f 74 29 28 76 6f 69 64 2a 2c 69 6e 74  UNC_t)(void*,int
50b0: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20  ,const char*);. 
50c0: 20 20 20 20 20 73 71 6c 69 74 65 33 47 6c 6f 62       sqlite3Glob
50d0: 61 6c 43 6f 6e 66 69 67 2e 78 4c 6f 67 20 3d 20  alConfig.xLog = 
50e0: 76 61 5f 61 72 67 28 61 70 2c 20 4c 4f 47 46 55  va_arg(ap, LOGFU
50f0: 4e 43 5f 74 29 3b 0a 20 20 20 20 20 20 73 71 6c  NC_t);.      sql
5100: 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67  ite3GlobalConfig
5110: 2e 70 4c 6f 67 41 72 67 20 3d 20 76 61 5f 61 72  .pLogArg = va_ar
5120: 67 28 61 70 2c 20 76 6f 69 64 2a 29 3b 0a 20 20  g(ap, void*);.  
5130: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
5140: 0a 0a 20 20 20 20 2f 2a 20 45 56 49 44 45 4e 43  ..    /* EVIDENC
5150: 45 2d 4f 46 3a 20 52 2d 35 35 35 34 38 2d 33 33  E-OF: R-55548-33
5160: 38 31 37 20 54 68 65 20 63 6f 6d 70 69 6c 65 2d  817 The compile-
5170: 74 69 6d 65 20 73 65 74 74 69 6e 67 20 66 6f 72  time setting for
5180: 20 55 52 49 20 66 69 6c 65 6e 61 6d 65 73 0a 20   URI filenames. 
5190: 20 20 20 2a 2a 20 63 61 6e 20 62 65 20 63 68 61     ** can be cha
51a0: 6e 67 65 64 20 61 74 20 73 74 61 72 74 2d 74 69  nged at start-ti
51b0: 6d 65 20 75 73 69 6e 67 20 74 68 65 0a 20 20 20  me using the.   
51c0: 20 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66   ** sqlite3_conf
51d0: 69 67 28 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47  ig(SQLITE_CONFIG
51e0: 5f 55 52 49 2c 31 29 20 6f 72 0a 20 20 20 20 2a  _URI,1) or.    *
51f0: 2a 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67  * sqlite3_config
5200: 28 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 55  (SQLITE_CONFIG_U
5210: 52 49 2c 30 29 20 63 6f 6e 66 69 67 75 72 61 74  RI,0) configurat
5220: 69 6f 6e 20 63 61 6c 6c 73 2e 0a 20 20 20 20 2a  ion calls..    *
5230: 2f 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  /.    case SQLIT
5240: 45 5f 43 4f 4e 46 49 47 5f 55 52 49 3a 20 7b 0a  E_CONFIG_URI: {.
5250: 20 20 20 20 20 20 2f 2a 20 45 56 49 44 45 4e 43        /* EVIDENC
5260: 45 2d 4f 46 3a 20 52 2d 32 35 34 35 31 2d 36 31  E-OF: R-25451-61
5270: 31 32 35 20 54 68 65 20 53 51 4c 49 54 45 5f 43  125 The SQLITE_C
5280: 4f 4e 46 49 47 5f 55 52 49 20 6f 70 74 69 6f 6e  ONFIG_URI option
5290: 20 74 61 6b 65 73 20 61 20 73 69 6e 67 6c 65 0a   takes a single.
52a0: 20 20 20 20 20 20 2a 2a 20 61 72 67 75 6d 65 6e        ** argumen
52b0: 74 20 6f 66 20 74 79 70 65 20 69 6e 74 2e 20 49  t of type int. I
52c0: 66 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e  f non-zero, then
52d0: 20 55 52 49 20 68 61 6e 64 6c 69 6e 67 20 69 73   URI handling is
52e0: 20 67 6c 6f 62 61 6c 6c 79 0a 20 20 20 20 20 20   globally.      
52f0: 2a 2a 20 65 6e 61 62 6c 65 64 2e 20 49 66 20 74  ** enabled. If t
5300: 68 65 20 70 61 72 61 6d 65 74 65 72 20 69 73 20  he parameter is 
5310: 7a 65 72 6f 2c 20 74 68 65 6e 20 55 52 49 20 68  zero, then URI h
5320: 61 6e 64 6c 69 6e 67 20 69 73 20 67 6c 6f 62 61  andling is globa
5330: 6c 6c 79 0a 20 20 20 20 20 20 2a 2a 20 64 69 73  lly.      ** dis
5340: 61 62 6c 65 64 2e 20 2a 2f 0a 20 20 20 20 20 20  abled. */.      
5350: 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e  sqlite3GlobalCon
5360: 66 69 67 2e 62 4f 70 65 6e 55 72 69 20 3d 20 76  fig.bOpenUri = v
5370: 61 5f 61 72 67 28 61 70 2c 20 69 6e 74 29 3b 0a  a_arg(ap, int);.
5380: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
5390: 20 7d 0a 0a 20 20 20 20 63 61 73 65 20 53 51 4c   }..    case SQL
53a0: 49 54 45 5f 43 4f 4e 46 49 47 5f 43 4f 56 45 52  ITE_CONFIG_COVER
53b0: 49 4e 47 5f 49 4e 44 45 58 5f 53 43 41 4e 3a 20  ING_INDEX_SCAN: 
53c0: 7b 0a 20 20 20 20 20 20 2f 2a 20 45 56 49 44 45  {.      /* EVIDE
53d0: 4e 43 45 2d 4f 46 3a 20 52 2d 33 36 35 39 32 2d  NCE-OF: R-36592-
53e0: 30 32 37 37 32 20 54 68 65 20 53 51 4c 49 54 45  02772 The SQLITE
53f0: 5f 43 4f 4e 46 49 47 5f 43 4f 56 45 52 49 4e 47  _CONFIG_COVERING
5400: 5f 49 4e 44 45 58 5f 53 43 41 4e 0a 20 20 20 20  _INDEX_SCAN.    
5410: 20 20 2a 2a 20 6f 70 74 69 6f 6e 20 74 61 6b 65    ** option take
5420: 73 20 61 20 73 69 6e 67 6c 65 20 69 6e 74 65 67  s a single integ
5430: 65 72 20 61 72 67 75 6d 65 6e 74 20 77 68 69 63  er argument whic
5440: 68 20 69 73 20 69 6e 74 65 72 70 72 65 74 65 64  h is interpreted
5450: 20 61 73 20 61 0a 20 20 20 20 20 20 2a 2a 20 62   as a.      ** b
5460: 6f 6f 6c 65 61 6e 20 69 6e 20 6f 72 64 65 72 20  oolean in order 
5470: 74 6f 20 65 6e 61 62 6c 65 20 6f 72 20 64 69 73  to enable or dis
5480: 61 62 6c 65 20 74 68 65 20 75 73 65 20 6f 66 20  able the use of 
5490: 63 6f 76 65 72 69 6e 67 20 69 6e 64 69 63 65 73  covering indices
54a0: 20 66 6f 72 0a 20 20 20 20 20 20 2a 2a 20 66 75   for.      ** fu
54b0: 6c 6c 20 74 61 62 6c 65 20 73 63 61 6e 73 20 69  ll table scans i
54c0: 6e 20 74 68 65 20 71 75 65 72 79 20 6f 70 74 69  n the query opti
54d0: 6d 69 7a 65 72 2e 20 2a 2f 0a 20 20 20 20 20 20  mizer. */.      
54e0: 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e  sqlite3GlobalCon
54f0: 66 69 67 2e 62 55 73 65 43 69 73 20 3d 20 76 61  fig.bUseCis = va
5500: 5f 61 72 67 28 61 70 2c 20 69 6e 74 29 3b 0a 20  _arg(ap, int);. 
5510: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
5520: 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  }..#ifdef SQLITE
5530: 5f 45 4e 41 42 4c 45 5f 53 51 4c 4c 4f 47 0a 20  _ENABLE_SQLLOG. 
5540: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 43     case SQLITE_C
5550: 4f 4e 46 49 47 5f 53 51 4c 4c 4f 47 3a 20 7b 0a  ONFIG_SQLLOG: {.
5560: 20 20 20 20 20 20 74 79 70 65 64 65 66 20 76 6f        typedef vo
5570: 69 64 28 2a 53 51 4c 4c 4f 47 46 55 4e 43 5f 74  id(*SQLLOGFUNC_t
5580: 29 28 76 6f 69 64 2a 2c 20 73 71 6c 69 74 65 33  )(void*, sqlite3
5590: 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
55a0: 69 6e 74 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  int);.      sqli
55b0: 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e  te3GlobalConfig.
55c0: 78 53 71 6c 6c 6f 67 20 3d 20 76 61 5f 61 72 67  xSqllog = va_arg
55d0: 28 61 70 2c 20 53 51 4c 4c 4f 47 46 55 4e 43 5f  (ap, SQLLOGFUNC_
55e0: 74 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  t);.      sqlite
55f0: 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 70 53  3GlobalConfig.pS
5600: 71 6c 6c 6f 67 41 72 67 20 3d 20 76 61 5f 61 72  qllogArg = va_ar
5610: 67 28 61 70 2c 20 76 6f 69 64 20 2a 29 3b 0a 20  g(ap, void *);. 
5620: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
5630: 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 63 61  }.#endif..    ca
5640: 73 65 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47  se SQLITE_CONFIG
5650: 5f 4d 4d 41 50 5f 53 49 5a 45 3a 20 7b 0a 20 20  _MMAP_SIZE: {.  
5660: 20 20 20 20 2f 2a 20 45 56 49 44 45 4e 43 45 2d      /* EVIDENCE-
5670: 4f 46 3a 20 52 2d 35 38 30 36 33 2d 33 38 32 35  OF: R-58063-3825
5680: 38 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f  8 SQLITE_CONFIG_
5690: 4d 4d 41 50 5f 53 49 5a 45 20 74 61 6b 65 73 20  MMAP_SIZE takes 
56a0: 74 77 6f 20 36 34 2d 62 69 74 0a 20 20 20 20 20  two 64-bit.     
56b0: 20 2a 2a 20 69 6e 74 65 67 65 72 20 28 73 71 6c   ** integer (sql
56c0: 69 74 65 33 5f 69 6e 74 36 34 29 20 76 61 6c 75  ite3_int64) valu
56d0: 65 73 20 74 68 61 74 20 61 72 65 20 74 68 65 20  es that are the 
56e0: 64 65 66 61 75 6c 74 20 6d 6d 61 70 20 73 69 7a  default mmap siz
56f0: 65 20 6c 69 6d 69 74 0a 20 20 20 20 20 20 2a 2a  e limit.      **
5700: 20 28 74 68 65 20 64 65 66 61 75 6c 74 20 73 65   (the default se
5710: 74 74 69 6e 67 20 66 6f 72 20 50 52 41 47 4d 41  tting for PRAGMA
5720: 20 6d 6d 61 70 5f 73 69 7a 65 29 20 61 6e 64 20   mmap_size) and 
5730: 74 68 65 20 6d 61 78 69 6d 75 6d 20 61 6c 6c 6f  the maximum allo
5740: 77 65 64 0a 20 20 20 20 20 20 2a 2a 20 6d 6d 61  wed.      ** mma
5750: 70 20 73 69 7a 65 20 6c 69 6d 69 74 2e 20 2a 2f  p size limit. */
5760: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 69  .      sqlite3_i
5770: 6e 74 36 34 20 73 7a 4d 6d 61 70 20 3d 20 76 61  nt64 szMmap = va
5780: 5f 61 72 67 28 61 70 2c 20 73 71 6c 69 74 65 33  _arg(ap, sqlite3
5790: 5f 69 6e 74 36 34 29 3b 0a 20 20 20 20 20 20 73  _int64);.      s
57a0: 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 6d 78 4d  qlite3_int64 mxM
57b0: 6d 61 70 20 3d 20 76 61 5f 61 72 67 28 61 70 2c  map = va_arg(ap,
57c0: 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 29 3b   sqlite3_int64);
57d0: 0a 20 20 20 20 20 20 2f 2a 20 45 56 49 44 45 4e  .      /* EVIDEN
57e0: 43 45 2d 4f 46 3a 20 52 2d 35 33 33 36 37 2d 34  CE-OF: R-53367-4
57f0: 33 31 39 30 20 49 66 20 65 69 74 68 65 72 20 61  3190 If either a
5800: 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 69 73 20  rgument to this 
5810: 6f 70 74 69 6f 6e 20 69 73 0a 20 20 20 20 20 20  option is.      
5820: 2a 2a 20 6e 65 67 61 74 69 76 65 2c 20 74 68 65  ** negative, the
5830: 6e 20 74 68 61 74 20 61 72 67 75 6d 65 6e 74 20  n that argument 
5840: 69 73 20 63 68 61 6e 67 65 64 20 74 6f 20 69 74  is changed to it
5850: 73 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 64  s compile-time d
5860: 65 66 61 75 6c 74 2e 0a 20 20 20 20 20 20 2a 2a  efault..      **
5870: 0a 20 20 20 20 20 20 2a 2a 20 45 56 49 44 45 4e  .      ** EVIDEN
5880: 43 45 2d 4f 46 3a 20 52 2d 33 34 39 39 33 2d 34  CE-OF: R-34993-4
5890: 35 30 33 31 20 54 68 65 20 6d 61 78 69 6d 75 6d  5031 The maximum
58a0: 20 61 6c 6c 6f 77 65 64 20 6d 6d 61 70 20 73 69   allowed mmap si
58b0: 7a 65 20 77 69 6c 6c 20 62 65 0a 20 20 20 20 20  ze will be.     
58c0: 20 2a 2a 20 73 69 6c 65 6e 74 6c 79 20 74 72 75   ** silently tru
58d0: 6e 63 61 74 65 64 20 69 66 20 6e 65 63 65 73 73  ncated if necess
58e0: 61 72 79 20 73 6f 20 74 68 61 74 20 69 74 20 64  ary so that it d
58f0: 6f 65 73 20 6e 6f 74 20 65 78 63 65 65 64 20 74  oes not exceed t
5900: 68 65 0a 20 20 20 20 20 20 2a 2a 20 63 6f 6d 70  he.      ** comp
5910: 69 6c 65 2d 74 69 6d 65 20 6d 61 78 69 6d 75 6d  ile-time maximum
5920: 20 6d 6d 61 70 20 73 69 7a 65 20 73 65 74 20 62   mmap size set b
5930: 79 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 41 58  y the SQLITE_MAX
5940: 5f 4d 4d 41 50 5f 53 49 5a 45 0a 20 20 20 20 20  _MMAP_SIZE.     
5950: 20 2a 2a 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65   ** compile-time
5960: 20 6f 70 74 69 6f 6e 2e 0a 20 20 20 20 20 20 2a   option..      *
5970: 2f 0a 20 20 20 20 20 20 69 66 28 20 6d 78 4d 6d  /.      if( mxMm
5980: 61 70 3c 30 20 7c 7c 20 6d 78 4d 6d 61 70 3e 53  ap<0 || mxMmap>S
5990: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
59a0: 49 5a 45 20 29 7b 0a 20 20 20 20 20 20 20 20 6d  IZE ){.        m
59b0: 78 4d 6d 61 70 20 3d 20 53 51 4c 49 54 45 5f 4d  xMmap = SQLITE_M
59c0: 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 3b 0a 20 20  AX_MMAP_SIZE;.  
59d0: 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
59e0: 73 7a 4d 6d 61 70 3c 30 20 29 20 73 7a 4d 6d 61  szMmap<0 ) szMma
59f0: 70 20 3d 20 53 51 4c 49 54 45 5f 44 45 46 41 55  p = SQLITE_DEFAU
5a00: 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 3b 0a 20 20  LT_MMAP_SIZE;.  
5a10: 20 20 20 20 69 66 28 20 73 7a 4d 6d 61 70 3e 6d      if( szMmap>m
5a20: 78 4d 6d 61 70 29 20 73 7a 4d 6d 61 70 20 3d 20  xMmap) szMmap = 
5a30: 6d 78 4d 6d 61 70 3b 0a 20 20 20 20 20 20 73 71  mxMmap;.      sq
5a40: 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69  lite3GlobalConfi
5a50: 67 2e 6d 78 4d 6d 61 70 20 3d 20 6d 78 4d 6d 61  g.mxMmap = mxMma
5a60: 70 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  p;.      sqlite3
5a70: 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 73 7a 4d  GlobalConfig.szM
5a80: 6d 61 70 20 3d 20 73 7a 4d 6d 61 70 3b 0a 20 20  map = szMmap;.  
5a90: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
5aa0: 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 4f 53 5f  ..#if SQLITE_OS_
5ab0: 57 49 4e 20 26 26 20 64 65 66 69 6e 65 64 28 53  WIN && defined(S
5ac0: 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c  QLITE_WIN32_MALL
5ad0: 4f 43 29 20 2f 2a 20 49 4d 50 3a 20 52 2d 30 34  OC) /* IMP: R-04
5ae0: 37 38 30 2d 35 35 38 31 35 20 2a 2f 0a 20 20 20  780-55815 */.   
5af0: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 43 4f 4e   case SQLITE_CON
5b00: 46 49 47 5f 57 49 4e 33 32 5f 48 45 41 50 53 49  FIG_WIN32_HEAPSI
5b10: 5a 45 3a 20 7b 0a 20 20 20 20 20 20 2f 2a 20 45  ZE: {.      /* E
5b20: 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 33 34  VIDENCE-OF: R-34
5b30: 39 32 36 2d 30 33 33 36 30 20 53 51 4c 49 54 45  926-03360 SQLITE
5b40: 5f 43 4f 4e 46 49 47 5f 57 49 4e 33 32 5f 48 45  _CONFIG_WIN32_HE
5b50: 41 50 53 49 5a 45 20 74 61 6b 65 73 20 61 20 33  APSIZE takes a 3
5b60: 32 2d 62 69 74 0a 20 20 20 20 20 20 2a 2a 20 75  2-bit.      ** u
5b70: 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20  nsigned integer 
5b80: 76 61 6c 75 65 20 74 68 61 74 20 73 70 65 63 69  value that speci
5b90: 66 69 65 73 20 74 68 65 20 6d 61 78 69 6d 75 6d  fies the maximum
5ba0: 20 73 69 7a 65 20 6f 66 20 74 68 65 20 63 72 65   size of the cre
5bb0: 61 74 65 64 0a 20 20 20 20 20 20 2a 2a 20 68 65  ated.      ** he
5bc0: 61 70 2e 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c  ap. */.      sql
5bd0: 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67  ite3GlobalConfig
5be0: 2e 6e 48 65 61 70 20 3d 20 76 61 5f 61 72 67 28  .nHeap = va_arg(
5bf0: 61 70 2c 20 69 6e 74 29 3b 0a 20 20 20 20 20 20  ap, int);.      
5c00: 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 23 65 6e  break;.    }.#en
5c10: 64 69 66 0a 0a 20 20 20 20 63 61 73 65 20 53 51  dif..    case SQ
5c20: 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 50 4d 41 53  LITE_CONFIG_PMAS
5c30: 5a 3a 20 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  Z: {.      sqlit
5c40: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 73  e3GlobalConfig.s
5c50: 7a 50 6d 61 20 3d 20 76 61 5f 61 72 67 28 61 70  zPma = va_arg(ap
5c60: 2c 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 3b  , unsigned int);
5c70: 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
5c80: 20 20 7d 0a 0a 20 20 20 20 63 61 73 65 20 53 51    }..    case SQ
5c90: 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 53 54 4d 54  LITE_CONFIG_STMT
5ca0: 4a 52 4e 4c 5f 53 50 49 4c 4c 3a 20 7b 0a 20 20  JRNL_SPILL: {.  
5cb0: 20 20 20 20 73 71 6c 69 74 65 33 47 6c 6f 62 61      sqlite3Globa
5cc0: 6c 43 6f 6e 66 69 67 2e 6e 53 74 6d 74 53 70 69  lConfig.nStmtSpi
5cd0: 6c 6c 20 3d 20 76 61 5f 61 72 67 28 61 70 2c 20  ll = va_arg(ap, 
5ce0: 69 6e 74 29 3b 0a 20 20 20 20 20 20 62 72 65 61  int);.      brea
5cf0: 6b 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 64 65  k;.    }..    de
5d00: 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 72  fault: {.      r
5d10: 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c = SQLITE_ERROR
5d20: 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;.      break;. 
5d30: 20 20 20 7d 0a 20 20 7d 0a 20 20 76 61 5f 65 6e     }.  }.  va_en
5d40: 64 28 61 70 29 3b 0a 20 20 72 65 74 75 72 6e 20  d(ap);.  return 
5d50: 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 53 65 74  rc;.}../*.** Set
5d60: 20 75 70 20 74 68 65 20 6c 6f 6f 6b 61 73 69 64   up the lookasid
5d70: 65 20 62 75 66 66 65 72 73 20 66 6f 72 20 61 20  e buffers for a 
5d80: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
5d90: 69 6f 6e 2e 0a 2a 2a 20 52 65 74 75 72 6e 20 53  ion..** Return S
5da0: 51 4c 49 54 45 5f 4f 4b 20 6f 6e 20 73 75 63 63  QLITE_OK on succ
5db0: 65 73 73 2e 20 20 0a 2a 2a 20 49 66 20 6c 6f 6f  ess.  .** If loo
5dc0: 6b 61 73 69 64 65 20 69 73 20 61 6c 72 65 61 64  kaside is alread
5dd0: 79 20 61 63 74 69 76 65 2c 20 72 65 74 75 72 6e  y active, return
5de0: 20 53 51 4c 49 54 45 5f 42 55 53 59 2e 0a 2a 2a   SQLITE_BUSY..**
5df0: 0a 2a 2a 20 54 68 65 20 73 7a 20 70 61 72 61 6d  .** The sz param
5e00: 65 74 65 72 20 69 73 20 74 68 65 20 6e 75 6d 62  eter is the numb
5e10: 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20 65  er of bytes in e
5e20: 61 63 68 20 6c 6f 6f 6b 61 73 69 64 65 20 73 6c  ach lookaside sl
5e30: 6f 74 2e 0a 2a 2a 20 54 68 65 20 63 6e 74 20 70  ot..** The cnt p
5e40: 61 72 61 6d 65 74 65 72 20 69 73 20 74 68 65 20  arameter is the 
5e50: 6e 75 6d 62 65 72 20 6f 66 20 73 6c 6f 74 73 2e  number of slots.
5e60: 20 20 49 66 20 70 53 74 61 72 74 20 69 73 20 4e    If pStart is N
5e70: 55 4c 4c 20 74 68 65 0a 2a 2a 20 73 70 61 63 65  ULL the.** space
5e80: 20 66 6f 72 20 74 68 65 20 6c 6f 6f 6b 61 73 69   for the lookasi
5e90: 64 65 20 6d 65 6d 6f 72 79 20 69 73 20 6f 62 74  de memory is obt
5ea0: 61 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69 74  ained from sqlit
5eb0: 65 33 5f 6d 61 6c 6c 6f 63 28 29 2e 0a 2a 2a 20  e3_malloc()..** 
5ec0: 49 66 20 70 53 74 61 72 74 20 69 73 20 6e 6f 74  If pStart is not
5ed0: 20 4e 55 4c 4c 20 74 68 65 6e 20 69 74 20 69 73   NULL then it is
5ee0: 20 73 7a 2a 63 6e 74 20 62 79 74 65 73 20 6f 66   sz*cnt bytes of
5ef0: 20 6d 65 6d 6f 72 79 20 74 6f 20 75 73 65 20 66   memory to use f
5f00: 6f 72 0a 2a 2a 20 74 68 65 20 6c 6f 6f 6b 61 73  or.** the lookas
5f10: 69 64 65 20 6d 65 6d 6f 72 79 2e 0a 2a 2f 0a 73  ide memory..*/.s
5f20: 74 61 74 69 63 20 69 6e 74 20 73 65 74 75 70 4c  tatic int setupL
5f30: 6f 6f 6b 61 73 69 64 65 28 73 71 6c 69 74 65 33  ookaside(sqlite3
5f40: 20 2a 64 62 2c 20 76 6f 69 64 20 2a 70 42 75 66   *db, void *pBuf
5f50: 2c 20 69 6e 74 20 73 7a 2c 20 69 6e 74 20 63 6e  , int sz, int cn
5f60: 74 29 7b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  t){.#ifndef SQLI
5f70: 54 45 5f 4f 4d 49 54 5f 4c 4f 4f 4b 41 53 49 44  TE_OMIT_LOOKASID
5f80: 45 0a 20 20 76 6f 69 64 20 2a 70 53 74 61 72 74  E.  void *pStart
5f90: 3b 0a 20 20 69 66 28 20 64 62 2d 3e 6c 6f 6f 6b  ;.  if( db->look
5fa0: 61 73 69 64 65 2e 6e 4f 75 74 20 29 7b 0a 20 20  aside.nOut ){.  
5fb0: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
5fc0: 42 55 53 59 3b 0a 20 20 7d 0a 20 20 2f 2a 20 46  BUSY;.  }.  /* F
5fd0: 72 65 65 20 61 6e 79 20 65 78 69 73 74 69 6e 67  ree any existing
5fe0: 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66 66 65   lookaside buffe
5ff0: 72 20 66 6f 72 20 74 68 69 73 20 68 61 6e 64 6c  r for this handl
6000: 65 20 62 65 66 6f 72 65 0a 20 20 2a 2a 20 61 6c  e before.  ** al
6010: 6c 6f 63 61 74 69 6e 67 20 61 20 6e 65 77 20 6f  locating a new o
6020: 6e 65 20 73 6f 20 77 65 20 64 6f 6e 27 74 20 68  ne so we don't h
6030: 61 76 65 20 74 6f 20 68 61 76 65 20 73 70 61 63  ave to have spac
6040: 65 20 66 6f 72 20 0a 20 20 2a 2a 20 62 6f 74 68  e for .  ** both
6050: 20 61 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d   at the same tim
6060: 65 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 64 62  e..  */.  if( db
6070: 2d 3e 6c 6f 6f 6b 61 73 69 64 65 2e 62 4d 61 6c  ->lookaside.bMal
6080: 6c 6f 63 65 64 20 29 7b 0a 20 20 20 20 73 71 6c  loced ){.    sql
6090: 69 74 65 33 5f 66 72 65 65 28 64 62 2d 3e 6c 6f  ite3_free(db->lo
60a0: 6f 6b 61 73 69 64 65 2e 70 53 74 61 72 74 29 3b  okaside.pStart);
60b0: 0a 20 20 7d 0a 20 20 2f 2a 20 54 68 65 20 73 69  .  }.  /* The si
60c0: 7a 65 20 6f 66 20 61 20 6c 6f 6f 6b 61 73 69 64  ze of a lookasid
60d0: 65 20 73 6c 6f 74 20 61 66 74 65 72 20 52 4f 55  e slot after ROU
60e0: 4e 44 44 4f 57 4e 38 20 6e 65 65 64 73 20 74 6f  NDDOWN8 needs to
60f0: 20 62 65 20 6c 61 72 67 65 72 0a 20 20 2a 2a 20   be larger.  ** 
6100: 74 68 61 6e 20 61 20 70 6f 69 6e 74 65 72 20 74  than a pointer t
6110: 6f 20 62 65 20 75 73 65 66 75 6c 2e 0a 20 20 2a  o be useful..  *
6120: 2f 0a 20 20 73 7a 20 3d 20 52 4f 55 4e 44 44 4f  /.  sz = ROUNDDO
6130: 57 4e 38 28 73 7a 29 3b 20 20 2f 2a 20 49 4d 50  WN8(sz);  /* IMP
6140: 3a 20 52 2d 33 33 30 33 38 2d 30 39 33 38 32 20  : R-33038-09382 
6150: 2a 2f 0a 20 20 69 66 28 20 73 7a 3c 3d 28 69 6e  */.  if( sz<=(in
6160: 74 29 73 69 7a 65 6f 66 28 4c 6f 6f 6b 61 73 69  t)sizeof(Lookasi
6170: 64 65 53 6c 6f 74 2a 29 20 29 20 73 7a 20 3d 20  deSlot*) ) sz = 
6180: 30 3b 0a 20 20 69 66 28 20 63 6e 74 3c 30 20 29  0;.  if( cnt<0 )
6190: 20 63 6e 74 20 3d 20 30 3b 0a 20 20 69 66 28 20   cnt = 0;.  if( 
61a0: 73 7a 3d 3d 30 20 7c 7c 20 63 6e 74 3d 3d 30 20  sz==0 || cnt==0 
61b0: 29 7b 0a 20 20 20 20 73 7a 20 3d 20 30 3b 0a 20  ){.    sz = 0;. 
61c0: 20 20 20 70 53 74 61 72 74 20 3d 20 30 3b 0a 20     pStart = 0;. 
61d0: 20 7d 65 6c 73 65 20 69 66 28 20 70 42 75 66 3d   }else if( pBuf=
61e0: 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  =0 ){.    sqlite
61f0: 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c  3BeginBenignMall
6200: 6f 63 28 29 3b 0a 20 20 20 20 70 53 74 61 72 74  oc();.    pStart
6210: 20 3d 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63   = sqlite3Malloc
6220: 28 20 73 7a 2a 63 6e 74 20 29 3b 20 20 2f 2a 20  ( sz*cnt );  /* 
6230: 49 4d 50 3a 20 52 2d 36 31 39 34 39 2d 33 35 37  IMP: R-61949-357
6240: 32 37 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65  27 */.    sqlite
6250: 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  3EndBenignMalloc
6260: 28 29 3b 0a 20 20 20 20 69 66 28 20 70 53 74 61  ();.    if( pSta
6270: 72 74 20 29 20 63 6e 74 20 3d 20 73 71 6c 69 74  rt ) cnt = sqlit
6280: 65 33 4d 61 6c 6c 6f 63 53 69 7a 65 28 70 53 74  e3MallocSize(pSt
6290: 61 72 74 29 2f 73 7a 3b 0a 20 20 7d 65 6c 73 65  art)/sz;.  }else
62a0: 7b 0a 20 20 20 20 70 53 74 61 72 74 20 3d 20 70  {.    pStart = p
62b0: 42 75 66 3b 0a 20 20 7d 0a 20 20 64 62 2d 3e 6c  Buf;.  }.  db->l
62c0: 6f 6f 6b 61 73 69 64 65 2e 70 53 74 61 72 74 20  ookaside.pStart 
62d0: 3d 20 70 53 74 61 72 74 3b 0a 20 20 64 62 2d 3e  = pStart;.  db->
62e0: 6c 6f 6f 6b 61 73 69 64 65 2e 70 46 72 65 65 20  lookaside.pFree 
62f0: 3d 20 30 3b 0a 20 20 64 62 2d 3e 6c 6f 6f 6b 61  = 0;.  db->looka
6300: 73 69 64 65 2e 73 7a 20 3d 20 28 75 31 36 29 73  side.sz = (u16)s
6310: 7a 3b 0a 20 20 69 66 28 20 70 53 74 61 72 74 20  z;.  if( pStart 
6320: 29 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20  ){.    int i;.  
6330: 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20    LookasideSlot 
6340: 2a 70 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  *p;.    assert( 
6350: 73 7a 20 3e 20 28 69 6e 74 29 73 69 7a 65 6f 66  sz > (int)sizeof
6360: 28 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 2a 29  (LookasideSlot*)
6370: 20 29 3b 0a 20 20 20 20 70 20 3d 20 28 4c 6f 6f   );.    p = (Loo
6380: 6b 61 73 69 64 65 53 6c 6f 74 2a 29 70 53 74 61  kasideSlot*)pSta
6390: 72 74 3b 0a 20 20 20 20 66 6f 72 28 69 3d 63 6e  rt;.    for(i=cn
63a0: 74 2d 31 3b 20 69 3e 3d 30 3b 20 69 2d 2d 29 7b  t-1; i>=0; i--){
63b0: 0a 20 20 20 20 20 20 70 2d 3e 70 4e 65 78 74 20  .      p->pNext 
63c0: 3d 20 64 62 2d 3e 6c 6f 6f 6b 61 73 69 64 65 2e  = db->lookaside.
63d0: 70 46 72 65 65 3b 0a 20 20 20 20 20 20 64 62 2d  pFree;.      db-
63e0: 3e 6c 6f 6f 6b 61 73 69 64 65 2e 70 46 72 65 65  >lookaside.pFree
63f0: 20 3d 20 70 3b 0a 20 20 20 20 20 20 70 20 3d 20   = p;.      p = 
6400: 28 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 2a 29  (LookasideSlot*)
6410: 26 28 28 75 38 2a 29 70 29 5b 73 7a 5d 3b 0a 20  &((u8*)p)[sz];. 
6420: 20 20 20 7d 0a 20 20 20 20 64 62 2d 3e 6c 6f 6f     }.    db->loo
6430: 6b 61 73 69 64 65 2e 70 45 6e 64 20 3d 20 70 3b  kaside.pEnd = p;
6440: 0a 20 20 20 20 64 62 2d 3e 6c 6f 6f 6b 61 73 69  .    db->lookasi
6450: 64 65 2e 62 44 69 73 61 62 6c 65 20 3d 20 30 3b  de.bDisable = 0;
6460: 0a 20 20 20 20 64 62 2d 3e 6c 6f 6f 6b 61 73 69  .    db->lookasi
6470: 64 65 2e 62 4d 61 6c 6c 6f 63 65 64 20 3d 20 70  de.bMalloced = p
6480: 42 75 66 3d 3d 30 20 3f 31 3a 30 3b 0a 20 20 7d  Buf==0 ?1:0;.  }
6490: 65 6c 73 65 7b 0a 20 20 20 20 64 62 2d 3e 6c 6f  else{.    db->lo
64a0: 6f 6b 61 73 69 64 65 2e 70 53 74 61 72 74 20 3d  okaside.pStart =
64b0: 20 64 62 3b 0a 20 20 20 20 64 62 2d 3e 6c 6f 6f   db;.    db->loo
64c0: 6b 61 73 69 64 65 2e 70 45 6e 64 20 3d 20 64 62  kaside.pEnd = db
64d0: 3b 0a 20 20 20 20 64 62 2d 3e 6c 6f 6f 6b 61 73  ;.    db->lookas
64e0: 69 64 65 2e 62 44 69 73 61 62 6c 65 20 3d 20 31  ide.bDisable = 1
64f0: 3b 0a 20 20 20 20 64 62 2d 3e 6c 6f 6f 6b 61 73  ;.    db->lookas
6500: 69 64 65 2e 62 4d 61 6c 6c 6f 63 65 64 20 3d 20  ide.bMalloced = 
6510: 30 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a  0;.  }.#endif /*
6520: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f 4f   SQLITE_OMIT_LOO
6530: 4b 41 53 49 44 45 20 2a 2f 0a 20 20 72 65 74 75  KASIDE */.  retu
6540: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a  rn SQLITE_OK;.}.
6550: 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68  ./*.** Return th
6560: 65 20 6d 75 74 65 78 20 61 73 73 6f 63 69 61 74  e mutex associat
6570: 65 64 20 77 69 74 68 20 61 20 64 61 74 61 62 61  ed with a databa
6580: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0a 2a  se connection..*
6590: 2f 0a 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20  /.sqlite3_mutex 
65a0: 2a 73 71 6c 69 74 65 33 5f 64 62 5f 6d 75 74 65  *sqlite3_db_mute
65b0: 78 28 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a  x(sqlite3 *db){.
65c0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
65d0: 41 42 4c 45 5f 41 50 49 5f 41 52 4d 4f 52 0a 20  ABLE_API_ARMOR. 
65e0: 20 69 66 28 20 21 73 71 6c 69 74 65 33 53 61 66   if( !sqlite3Saf
65f0: 65 74 79 43 68 65 63 6b 4f 6b 28 64 62 29 20 29  etyCheckOk(db) )
6600: 7b 0a 20 20 20 20 28 76 6f 69 64 29 53 51 4c 49  {.    (void)SQLI
6610: 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54 3b 0a  TE_MISUSE_BKPT;.
6620: 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20      return 0;.  
6630: 7d 0a 23 65 6e 64 69 66 0a 20 20 72 65 74 75 72  }.#endif.  retur
6640: 6e 20 64 62 2d 3e 6d 75 74 65 78 3b 0a 7d 0a 0a  n db->mutex;.}..
6650: 2f 2a 0a 2a 2a 20 46 72 65 65 20 75 70 20 61 73  /*.** Free up as
6660: 20 6d 75 63 68 20 6d 65 6d 6f 72 79 20 61 73 20   much memory as 
6670: 77 65 20 63 61 6e 20 66 72 6f 6d 20 74 68 65 20  we can from the 
6680: 67 69 76 65 6e 20 64 61 74 61 62 61 73 65 0a 2a  given database.*
6690: 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0a 2a 2f  * connection..*/
66a0: 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 64 62 5f  .int sqlite3_db_
66b0: 72 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28 73  release_memory(s
66c0: 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20 20 69  qlite3 *db){.  i
66d0: 6e 74 20 69 3b 0a 0a 23 69 66 64 65 66 20 53 51  nt i;..#ifdef SQ
66e0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41 50 49 5f  LITE_ENABLE_API_
66f0: 41 52 4d 4f 52 0a 20 20 69 66 28 20 21 73 71 6c  ARMOR.  if( !sql
6700: 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 4f  ite3SafetyCheckO
6710: 6b 28 64 62 29 20 29 20 72 65 74 75 72 6e 20 53  k(db) ) return S
6720: 51 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50  QLITE_MISUSE_BKP
6730: 54 3b 0a 23 65 6e 64 69 66 0a 20 20 73 71 6c 69  T;.#endif.  sqli
6740: 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72 28  te3_mutex_enter(
6750: 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 73 71  db->mutex);.  sq
6760: 6c 69 74 65 33 42 74 72 65 65 45 6e 74 65 72 41  lite3BtreeEnterA
6770: 6c 6c 28 64 62 29 3b 0a 20 20 66 6f 72 28 69 3d  ll(db);.  for(i=
6780: 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b  0; i<db->nDb; i+
6790: 2b 29 7b 0a 20 20 20 20 42 74 72 65 65 20 2a 70  +){.    Btree *p
67a0: 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 69 5d 2e  Bt = db->aDb[i].
67b0: 70 42 74 3b 0a 20 20 20 20 69 66 28 20 70 42 74  pBt;.    if( pBt
67c0: 20 29 7b 0a 20 20 20 20 20 20 50 61 67 65 72 20   ){.      Pager 
67d0: 2a 70 50 61 67 65 72 20 3d 20 73 71 6c 69 74 65  *pPager = sqlite
67e0: 33 42 74 72 65 65 50 61 67 65 72 28 70 42 74 29  3BtreePager(pBt)
67f0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 50  ;.      sqlite3P
6800: 61 67 65 72 53 68 72 69 6e 6b 28 70 50 61 67 65  agerShrink(pPage
6810: 72 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  r);.    }.  }.  
6820: 73 71 6c 69 74 65 33 42 74 72 65 65 4c 65 61 76  sqlite3BtreeLeav
6830: 65 41 6c 6c 28 64 62 29 3b 0a 20 20 73 71 6c 69  eAll(db);.  sqli
6840: 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28  te3_mutex_leave(
6850: 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 72 65  db->mutex);.  re
6860: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  turn SQLITE_OK;.
6870: 7d 0a 0a 2f 2a 0a 2a 2a 20 46 6c 75 73 68 20 61  }../*.** Flush a
6880: 6e 79 20 64 69 72 74 79 20 70 61 67 65 73 20 69  ny dirty pages i
6890: 6e 20 74 68 65 20 70 61 67 65 72 2d 63 61 63 68  n the pager-cach
68a0: 65 20 66 6f 72 20 61 6e 79 20 61 74 74 61 63 68  e for any attach
68b0: 65 64 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 74  ed database.** t
68c0: 6f 20 64 69 73 6b 2e 0a 2a 2f 0a 69 6e 74 20 73  o disk..*/.int s
68d0: 71 6c 69 74 65 33 5f 64 62 5f 63 61 63 68 65 66  qlite3_db_cachef
68e0: 6c 75 73 68 28 73 71 6c 69 74 65 33 20 2a 64 62  lush(sqlite3 *db
68f0: 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69 6e  ){.  int i;.  in
6900: 74 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b  t rc = SQLITE_OK
6910: 3b 0a 20 20 69 6e 74 20 62 53 65 65 6e 42 75 73  ;.  int bSeenBus
6920: 79 20 3d 20 30 3b 0a 0a 23 69 66 64 65 66 20 53  y = 0;..#ifdef S
6930: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41 50 49  QLITE_ENABLE_API
6940: 5f 41 52 4d 4f 52 0a 20 20 69 66 28 20 21 73 71  _ARMOR.  if( !sq
6950: 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b  lite3SafetyCheck
6960: 4f 6b 28 64 62 29 20 29 20 72 65 74 75 72 6e 20  Ok(db) ) return 
6970: 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b  SQLITE_MISUSE_BK
6980: 50 54 3b 0a 23 65 6e 64 69 66 0a 20 20 73 71 6c  PT;.#endif.  sql
6990: 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72  ite3_mutex_enter
69a0: 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 73  (db->mutex);.  s
69b0: 71 6c 69 74 65 33 42 74 72 65 65 45 6e 74 65 72  qlite3BtreeEnter
69c0: 41 6c 6c 28 64 62 29 3b 0a 20 20 66 6f 72 28 69  All(db);.  for(i
69d0: 3d 30 3b 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  =0; rc==SQLITE_O
69e0: 4b 20 26 26 20 69 3c 64 62 2d 3e 6e 44 62 3b 20  K && i<db->nDb; 
69f0: 69 2b 2b 29 7b 0a 20 20 20 20 42 74 72 65 65 20  i++){.    Btree 
6a00: 2a 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 69  *pBt = db->aDb[i
6a10: 5d 2e 70 42 74 3b 0a 20 20 20 20 69 66 28 20 70  ].pBt;.    if( p
6a20: 42 74 20 26 26 20 73 71 6c 69 74 65 33 42 74 72  Bt && sqlite3Btr
6a30: 65 65 49 73 49 6e 54 72 61 6e 73 28 70 42 74 29  eeIsInTrans(pBt)
6a40: 20 29 7b 0a 20 20 20 20 20 20 50 61 67 65 72 20   ){.      Pager 
6a50: 2a 70 50 61 67 65 72 20 3d 20 73 71 6c 69 74 65  *pPager = sqlite
6a60: 33 42 74 72 65 65 50 61 67 65 72 28 70 42 74 29  3BtreePager(pBt)
6a70: 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  ;.      rc = sql
6a80: 69 74 65 33 50 61 67 65 72 46 6c 75 73 68 28 70  ite3PagerFlush(p
6a90: 50 61 67 65 72 29 3b 0a 20 20 20 20 20 20 69 66  Pager);.      if
6aa0: 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53  ( rc==SQLITE_BUS
6ab0: 59 20 29 7b 0a 20 20 20 20 20 20 20 20 62 53 65  Y ){.        bSe
6ac0: 65 6e 42 75 73 79 20 3d 20 31 3b 0a 20 20 20 20  enBusy = 1;.    
6ad0: 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
6ae0: 4f 4b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  OK;.      }.    
6af0: 7d 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 42  }.  }.  sqlite3B
6b00: 74 72 65 65 4c 65 61 76 65 41 6c 6c 28 64 62 29  treeLeaveAll(db)
6b10: 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  ;.  sqlite3_mute
6b20: 78 5f 6c 65 61 76 65 28 64 62 2d 3e 6d 75 74 65  x_leave(db->mute
6b30: 78 29 3b 0a 20 20 72 65 74 75 72 6e 20 28 28 72  x);.  return ((r
6b40: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20  c==SQLITE_OK && 
6b50: 62 53 65 65 6e 42 75 73 79 29 20 3f 20 53 51 4c  bSeenBusy) ? SQL
6b60: 49 54 45 5f 42 55 53 59 20 3a 20 72 63 29 3b 0a  ITE_BUSY : rc);.
6b70: 7d 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 66 69 67 75  }../*.** Configu
6b80: 72 61 74 69 6f 6e 20 73 65 74 74 69 6e 67 73 20  ration settings 
6b90: 66 6f 72 20 61 6e 20 69 6e 64 69 76 69 64 75 61  for an individua
6ba0: 6c 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  l database conne
6bb0: 63 74 69 6f 6e 0a 2a 2f 0a 69 6e 74 20 73 71 6c  ction.*/.int sql
6bc0: 69 74 65 33 5f 64 62 5f 63 6f 6e 66 69 67 28 73  ite3_db_config(s
6bd0: 71 6c 69 74 65 33 20 2a 64 62 2c 20 69 6e 74 20  qlite3 *db, int 
6be0: 6f 70 2c 20 2e 2e 2e 29 7b 0a 20 20 76 61 5f 6c  op, ...){.  va_l
6bf0: 69 73 74 20 61 70 3b 0a 20 20 69 6e 74 20 72 63  ist ap;.  int rc
6c00: 3b 0a 20 20 76 61 5f 73 74 61 72 74 28 61 70 2c  ;.  va_start(ap,
6c10: 20 6f 70 29 3b 0a 20 20 73 77 69 74 63 68 28 20   op);.  switch( 
6c20: 6f 70 20 29 7b 0a 20 20 20 20 63 61 73 65 20 53  op ){.    case S
6c30: 51 4c 49 54 45 5f 44 42 43 4f 4e 46 49 47 5f 4d  QLITE_DBCONFIG_M
6c40: 41 49 4e 44 42 4e 41 4d 45 3a 20 7b 0a 20 20 20  AINDBNAME: {.   
6c50: 20 20 20 64 62 2d 3e 61 44 62 5b 30 5d 2e 7a 44     db->aDb[0].zD
6c60: 62 53 4e 61 6d 65 20 3d 20 76 61 5f 61 72 67 28  bSName = va_arg(
6c70: 61 70 2c 63 68 61 72 2a 29 3b 0a 20 20 20 20 20  ap,char*);.     
6c80: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b   rc = SQLITE_OK;
6c90: 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
6ca0: 20 20 7d 0a 20 20 20 20 63 61 73 65 20 53 51 4c    }.    case SQL
6cb0: 49 54 45 5f 44 42 43 4f 4e 46 49 47 5f 4c 4f 4f  ITE_DBCONFIG_LOO
6cc0: 4b 41 53 49 44 45 3a 20 7b 0a 20 20 20 20 20 20  KASIDE: {.      
6cd0: 76 6f 69 64 20 2a 70 42 75 66 20 3d 20 76 61 5f  void *pBuf = va_
6ce0: 61 72 67 28 61 70 2c 20 76 6f 69 64 2a 29 3b 20  arg(ap, void*); 
6cf0: 2f 2a 20 49 4d 50 3a 20 52 2d 32 36 38 33 35 2d  /* IMP: R-26835-
6d00: 31 30 39 36 34 20 2a 2f 0a 20 20 20 20 20 20 69  10964 */.      i
6d10: 6e 74 20 73 7a 20 3d 20 76 61 5f 61 72 67 28 61  nt sz = va_arg(a
6d20: 70 2c 20 69 6e 74 29 3b 20 20 20 20 20 20 20 2f  p, int);       /
6d30: 2a 20 49 4d 50 3a 20 52 2d 34 37 38 37 31 2d 32  * IMP: R-47871-2
6d40: 35 39 39 34 20 2a 2f 0a 20 20 20 20 20 20 69 6e  5994 */.      in
6d50: 74 20 63 6e 74 20 3d 20 76 61 5f 61 72 67 28 61  t cnt = va_arg(a
6d60: 70 2c 20 69 6e 74 29 3b 20 20 20 20 20 20 2f 2a  p, int);      /*
6d70: 20 49 4d 50 3a 20 52 2d 30 34 34 36 30 2d 35 33   IMP: R-04460-53
6d80: 33 38 36 20 2a 2f 0a 20 20 20 20 20 20 72 63 20  386 */.      rc 
6d90: 3d 20 73 65 74 75 70 4c 6f 6f 6b 61 73 69 64 65  = setupLookaside
6da0: 28 64 62 2c 20 70 42 75 66 2c 20 73 7a 2c 20 63  (db, pBuf, sz, c
6db0: 6e 74 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b  nt);.      break
6dc0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 64 65 66 61  ;.    }.    defa
6dd0: 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 73 74 61  ult: {.      sta
6de0: 74 69 63 20 63 6f 6e 73 74 20 73 74 72 75 63 74  tic const struct
6df0: 20 7b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6f   {.        int o
6e00: 70 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6f  p;      /* The o
6e10: 70 63 6f 64 65 20 2a 2f 0a 20 20 20 20 20 20 20  pcode */.       
6e20: 20 75 33 32 20 6d 61 73 6b 3b 20 20 20 20 2f 2a   u32 mask;    /*
6e30: 20 4d 61 73 6b 20 6f 66 20 74 68 65 20 62 69 74   Mask of the bit
6e40: 20 69 6e 20 73 71 6c 69 74 65 33 2e 66 6c 61 67   in sqlite3.flag
6e50: 73 20 74 6f 20 73 65 74 2f 63 6c 65 61 72 20 2a  s to set/clear *
6e60: 2f 0a 20 20 20 20 20 20 7d 20 61 46 6c 61 67 4f  /.      } aFlagO
6e70: 70 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 20 20  p[] = {.        
6e80: 7b 20 53 51 4c 49 54 45 5f 44 42 43 4f 4e 46 49  { SQLITE_DBCONFI
6e90: 47 5f 45 4e 41 42 4c 45 5f 46 4b 45 59 2c 20 20  G_ENABLE_FKEY,  
6ea0: 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f           SQLITE_
6eb0: 46 6f 72 65 69 67 6e 4b 65 79 73 20 20 20 20 7d  ForeignKeys    }
6ec0: 2c 0a 20 20 20 20 20 20 20 20 7b 20 53 51 4c 49  ,.        { SQLI
6ed0: 54 45 5f 44 42 43 4f 4e 46 49 47 5f 45 4e 41 42  TE_DBCONFIG_ENAB
6ee0: 4c 45 5f 54 52 49 47 47 45 52 2c 20 20 20 20 20  LE_TRIGGER,     
6ef0: 20 20 20 53 51 4c 49 54 45 5f 45 6e 61 62 6c 65     SQLITE_Enable
6f00: 54 72 69 67 67 65 72 20 20 7d 2c 0a 20 20 20 20  Trigger  },.    
6f10: 20 20 20 20 7b 20 53 51 4c 49 54 45 5f 44 42 43      { SQLITE_DBC
6f20: 4f 4e 46 49 47 5f 45 4e 41 42 4c 45 5f 46 54 53  ONFIG_ENABLE_FTS
6f30: 33 5f 54 4f 4b 45 4e 49 5a 45 52 2c 20 53 51 4c  3_TOKENIZER, SQL
6f40: 49 54 45 5f 46 74 73 33 54 6f 6b 65 6e 69 7a 65  ITE_Fts3Tokenize
6f50: 72 20 20 7d 2c 0a 20 20 20 20 20 20 20 20 7b 20  r  },.        { 
6f60: 53 51 4c 49 54 45 5f 44 42 43 4f 4e 46 49 47 5f  SQLITE_DBCONFIG_
6f70: 45 4e 41 42 4c 45 5f 4c 4f 41 44 5f 45 58 54 45  ENABLE_LOAD_EXTE
6f80: 4e 53 49 4f 4e 2c 20 53 51 4c 49 54 45 5f 4c 6f  NSION, SQLITE_Lo
6f90: 61 64 45 78 74 65 6e 73 69 6f 6e 20 20 7d 2c 0a  adExtension  },.
6fa0: 20 20 20 20 20 20 20 20 7b 20 53 51 4c 49 54 45          { SQLITE
6fb0: 5f 44 42 43 4f 4e 46 49 47 5f 4e 4f 5f 43 4b 50  _DBCONFIG_NO_CKP
6fc0: 54 5f 4f 4e 5f 43 4c 4f 53 45 2c 20 20 20 20 20  T_ON_CLOSE,     
6fd0: 20 53 51 4c 49 54 45 5f 4e 6f 43 6b 70 74 4f 6e   SQLITE_NoCkptOn
6fe0: 43 6c 6f 73 65 20 20 7d 2c 0a 20 20 20 20 20 20  Close  },.      
6ff0: 7d 3b 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65  };.      unsigne
7000: 64 20 69 6e 74 20 69 3b 0a 20 20 20 20 20 20 72  d int i;.      r
7010: 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c = SQLITE_ERROR
7020: 3b 20 2f 2a 20 49 4d 50 3a 20 52 2d 34 32 37 39  ; /* IMP: R-4279
7030: 30 2d 32 33 33 37 32 20 2a 2f 0a 20 20 20 20 20  0-23372 */.     
7040: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 41 72 72 61   for(i=0; i<Arra
7050: 79 53 69 7a 65 28 61 46 6c 61 67 4f 70 29 3b 20  ySize(aFlagOp); 
7060: 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 69 66  i++){.        if
7070: 28 20 61 46 6c 61 67 4f 70 5b 69 5d 2e 6f 70 3d  ( aFlagOp[i].op=
7080: 3d 6f 70 20 29 7b 0a 20 20 20 20 20 20 20 20 20  =op ){.         
7090: 20 69 6e 74 20 6f 6e 6f 66 66 20 3d 20 76 61 5f   int onoff = va_
70a0: 61 72 67 28 61 70 2c 20 69 6e 74 29 3b 0a 20 20  arg(ap, int);.  
70b0: 20 20 20 20 20 20 20 20 69 6e 74 20 2a 70 52 65          int *pRe
70c0: 73 20 3d 20 76 61 5f 61 72 67 28 61 70 2c 20 69  s = va_arg(ap, i
70d0: 6e 74 2a 29 3b 0a 20 20 20 20 20 20 20 20 20 20  nt*);.          
70e0: 69 6e 74 20 6f 6c 64 46 6c 61 67 73 20 3d 20 64  int oldFlags = d
70f0: 62 2d 3e 66 6c 61 67 73 3b 0a 20 20 20 20 20 20  b->flags;.      
7100: 20 20 20 20 69 66 28 20 6f 6e 6f 66 66 3e 30 20      if( onoff>0 
7110: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 64  ){.            d
7120: 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 61 46 6c 61  b->flags |= aFla
7130: 67 4f 70 5b 69 5d 2e 6d 61 73 6b 3b 0a 20 20 20  gOp[i].mask;.   
7140: 20 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28         }else if(
7150: 20 6f 6e 6f 66 66 3d 3d 30 20 29 7b 0a 20 20 20   onoff==0 ){.   
7160: 20 20 20 20 20 20 20 20 20 64 62 2d 3e 66 6c 61           db->fla
7170: 67 73 20 26 3d 20 7e 61 46 6c 61 67 4f 70 5b 69  gs &= ~aFlagOp[i
7180: 5d 2e 6d 61 73 6b 3b 0a 20 20 20 20 20 20 20 20  ].mask;.        
7190: 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 69 66    }.          if
71a0: 28 20 6f 6c 64 46 6c 61 67 73 21 3d 64 62 2d 3e  ( oldFlags!=db->
71b0: 66 6c 61 67 73 20 29 7b 0a 20 20 20 20 20 20 20  flags ){.       
71c0: 20 20 20 20 20 73 71 6c 69 74 65 33 45 78 70 69       sqlite3Expi
71d0: 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d  rePreparedStatem
71e0: 65 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 20 20  ents(db);.      
71f0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
7200: 69 66 28 20 70 52 65 73 20 29 7b 0a 20 20 20 20  if( pRes ){.    
7210: 20 20 20 20 20 20 20 20 2a 70 52 65 73 20 3d 20          *pRes = 
7220: 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 61 46 6c  (db->flags & aFl
7230: 61 67 4f 70 5b 69 5d 2e 6d 61 73 6b 29 21 3d 30  agOp[i].mask)!=0
7240: 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
7250: 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c          rc = SQL
7260: 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20 20 20  ITE_OK;.        
7270: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20    break;.       
7280: 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20   }.      }.     
7290: 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20   break;.    }.  
72a0: 7d 0a 20 20 76 61 5f 65 6e 64 28 61 70 29 3b 0a  }.  va_end(ap);.
72b0: 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a    return rc;.}..
72c0: 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72  ./*.** Return tr
72d0: 75 65 20 69 66 20 74 68 65 20 62 75 66 66 65 72  ue if the buffer
72e0: 20 7a 5b 30 2e 2e 6e 2d 31 5d 20 63 6f 6e 74 61   z[0..n-1] conta
72f0: 69 6e 73 20 61 6c 6c 20 73 70 61 63 65 73 2e 0a  ins all spaces..
7300: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 61 6c  */.static int al
7310: 6c 53 70 61 63 65 73 28 63 6f 6e 73 74 20 63 68  lSpaces(const ch
7320: 61 72 20 2a 7a 2c 20 69 6e 74 20 6e 29 7b 0a 20  ar *z, int n){. 
7330: 20 77 68 69 6c 65 28 20 6e 3e 30 20 26 26 20 7a   while( n>0 && z
7340: 5b 6e 2d 31 5d 3d 3d 27 20 27 20 29 7b 20 6e 2d  [n-1]==' ' ){ n-
7350: 2d 3b 20 7d 0a 20 20 72 65 74 75 72 6e 20 6e 3d  -; }.  return n=
7360: 3d 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69  =0;.}../*.** Thi
7370: 73 20 69 73 20 74 68 65 20 64 65 66 61 75 6c 74  s is the default
7380: 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74   collating funct
7390: 69 6f 6e 20 6e 61 6d 65 64 20 22 42 49 4e 41 52  ion named "BINAR
73a0: 59 22 20 77 68 69 63 68 20 69 73 20 61 6c 77 61  Y" which is alwa
73b0: 79 73 0a 2a 2a 20 61 76 61 69 6c 61 62 6c 65 2e  ys.** available.
73c0: 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 70 61  .**.** If the pa
73d0: 64 46 6c 61 67 20 61 72 67 75 6d 65 6e 74 20 69  dFlag argument i
73e0: 73 20 6e 6f 74 20 4e 55 4c 4c 20 74 68 65 6e 20  s not NULL then 
73f0: 73 70 61 63 65 20 70 61 64 64 69 6e 67 20 61 74  space padding at
7400: 20 74 68 65 20 65 6e 64 0a 2a 2a 20 6f 66 20 73   the end.** of s
7410: 74 72 69 6e 67 73 20 69 73 20 69 67 6e 6f 72 65  trings is ignore
7420: 64 2e 20 20 54 68 69 73 20 69 6d 70 6c 65 6d 65  d.  This impleme
7430: 6e 74 73 20 74 68 65 20 52 54 52 49 4d 20 63 6f  nts the RTRIM co
7440: 6c 6c 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 61 74  llation..*/.stat
7450: 69 63 20 69 6e 74 20 62 69 6e 43 6f 6c 6c 46 75  ic int binCollFu
7460: 6e 63 28 0a 20 20 76 6f 69 64 20 2a 70 61 64 46  nc(.  void *padF
7470: 6c 61 67 2c 0a 20 20 69 6e 74 20 6e 4b 65 79 31  lag,.  int nKey1
7480: 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 4b  , const void *pK
7490: 65 79 31 2c 0a 20 20 69 6e 74 20 6e 4b 65 79 32  ey1,.  int nKey2
74a0: 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 4b  , const void *pK
74b0: 65 79 32 0a 29 7b 0a 20 20 69 6e 74 20 72 63 2c  ey2.){.  int rc,
74c0: 20 6e 3b 0a 20 20 6e 20 3d 20 6e 4b 65 79 31 3c   n;.  n = nKey1<
74d0: 6e 4b 65 79 32 20 3f 20 6e 4b 65 79 31 20 3a 20  nKey2 ? nKey1 : 
74e0: 6e 4b 65 79 32 3b 0a 20 20 2f 2a 20 45 56 49 44  nKey2;.  /* EVID
74f0: 45 4e 43 45 2d 4f 46 3a 20 52 2d 36 35 30 33 33  ENCE-OF: R-65033
7500: 2d 32 38 34 34 39 20 54 68 65 20 62 75 69 6c 74  -28449 The built
7510: 2d 69 6e 20 42 49 4e 41 52 59 20 63 6f 6c 6c 61  -in BINARY colla
7520: 74 69 6f 6e 20 63 6f 6d 70 61 72 65 73 0a 20 20  tion compares.  
7530: 2a 2a 20 73 74 72 69 6e 67 73 20 62 79 74 65 20  ** strings byte 
7540: 62 79 20 62 79 74 65 20 75 73 69 6e 67 20 74 68  by byte using th
7550: 65 20 6d 65 6d 63 6d 70 28 29 20 66 75 6e 63 74  e memcmp() funct
7560: 69 6f 6e 20 66 72 6f 6d 20 74 68 65 20 73 74 61  ion from the sta
7570: 6e 64 61 72 64 20 43 0a 20 20 2a 2a 20 6c 69 62  ndard C.  ** lib
7580: 72 61 72 79 2e 20 2a 2f 0a 20 20 61 73 73 65 72  rary. */.  asser
7590: 74 28 20 70 4b 65 79 31 20 26 26 20 70 4b 65 79  t( pKey1 && pKey
75a0: 32 20 29 3b 0a 20 20 72 63 20 3d 20 6d 65 6d 63  2 );.  rc = memc
75b0: 6d 70 28 70 4b 65 79 31 2c 20 70 4b 65 79 32 2c  mp(pKey1, pKey2,
75c0: 20 6e 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 30   n);.  if( rc==0
75d0: 20 29 7b 0a 20 20 20 20 69 66 28 20 70 61 64 46   ){.    if( padF
75e0: 6c 61 67 0a 20 20 20 20 20 26 26 20 61 6c 6c 53  lag.     && allS
75f0: 70 61 63 65 73 28 28 28 63 68 61 72 2a 29 70 4b  paces(((char*)pK
7600: 65 79 31 29 2b 6e 2c 20 6e 4b 65 79 31 2d 6e 29  ey1)+n, nKey1-n)
7610: 0a 20 20 20 20 20 26 26 20 61 6c 6c 53 70 61 63  .     && allSpac
7620: 65 73 28 28 28 63 68 61 72 2a 29 70 4b 65 79 32  es(((char*)pKey2
7630: 29 2b 6e 2c 20 6e 4b 65 79 32 2d 6e 29 0a 20 20  )+n, nKey2-n).  
7640: 20 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 45 56    ){.      /* EV
7650: 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 33 31 36  IDENCE-OF: R-316
7660: 32 34 2d 32 34 37 33 37 20 52 54 52 49 4d 20 69  24-24737 RTRIM i
7670: 73 20 6c 69 6b 65 20 42 49 4e 41 52 59 20 65 78  s like BINARY ex
7680: 63 65 70 74 20 74 68 61 74 20 65 78 74 72 61 0a  cept that extra.
7690: 20 20 20 20 20 20 2a 2a 20 73 70 61 63 65 73 20        ** spaces 
76a0: 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 65 69  at the end of ei
76b0: 74 68 65 72 20 73 74 72 69 6e 67 20 64 6f 20 6e  ther string do n
76c0: 6f 74 20 63 68 61 6e 67 65 20 74 68 65 20 72 65  ot change the re
76d0: 73 75 6c 74 2e 20 49 6e 20 6f 74 68 65 72 0a 20  sult. In other. 
76e0: 20 20 20 20 20 2a 2a 20 77 6f 72 64 73 2c 20 73       ** words, s
76f0: 74 72 69 6e 67 73 20 77 69 6c 6c 20 63 6f 6d 70  trings will comp
7700: 61 72 65 20 65 71 75 61 6c 20 74 6f 20 6f 6e 65  are equal to one
7710: 20 61 6e 6f 74 68 65 72 20 61 73 20 6c 6f 6e 67   another as long
7720: 20 61 73 20 74 68 65 79 0a 20 20 20 20 20 20 2a   as they.      *
7730: 2a 20 64 69 66 66 65 72 20 6f 6e 6c 79 20 69 6e  * differ only in
7740: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 73   the number of s
7750: 70 61 63 65 73 20 61 74 20 74 68 65 20 65 6e 64  paces at the end
7760: 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 7d  ..      */.    }
7770: 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d  else{.      rc =
7780: 20 6e 4b 65 79 31 20 2d 20 6e 4b 65 79 32 3b 0a   nKey1 - nKey2;.
7790: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75      }.  }.  retu
77a0: 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  rn rc;.}../*.** 
77b0: 41 6e 6f 74 68 65 72 20 62 75 69 6c 74 2d 69 6e  Another built-in
77c0: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
77d0: 6e 63 65 3a 20 4e 4f 43 41 53 45 2e 20 0a 2a 2a  nce: NOCASE. .**
77e0: 0a 2a 2a 20 54 68 69 73 20 63 6f 6c 6c 61 74 69  .** This collati
77f0: 6e 67 20 73 65 71 75 65 6e 63 65 20 69 73 20 69  ng sequence is i
7800: 6e 74 65 6e 64 65 64 20 74 6f 20 62 65 20 75 73  ntended to be us
7810: 65 64 20 66 6f 72 20 22 63 61 73 65 20 69 6e 64  ed for "case ind
7820: 65 70 65 6e 64 65 6e 74 0a 2a 2a 20 63 6f 6d 70  ependent.** comp
7830: 61 72 69 73 6f 6e 22 2e 20 53 51 4c 69 74 65 27  arison". SQLite'
7840: 73 20 6b 6e 6f 77 6c 65 64 67 65 20 6f 66 20 75  s knowledge of u
7850: 70 70 65 72 20 61 6e 64 20 6c 6f 77 65 72 20 63  pper and lower c
7860: 61 73 65 20 65 71 75 69 76 61 6c 65 6e 74 73 0a  ase equivalents.
7870: 2a 2a 20 65 78 74 65 6e 64 73 20 6f 6e 6c 79 20  ** extends only 
7880: 74 6f 20 74 68 65 20 32 36 20 63 68 61 72 61 63  to the 26 charac
7890: 74 65 72 73 20 75 73 65 64 20 69 6e 20 74 68 65  ters used in the
78a0: 20 45 6e 67 6c 69 73 68 20 6c 61 6e 67 75 61 67   English languag
78b0: 65 2e 0a 2a 2a 0a 2a 2a 20 41 74 20 74 68 65 20  e..**.** At the 
78c0: 6d 6f 6d 65 6e 74 20 74 68 65 72 65 20 69 73 20  moment there is 
78d0: 6f 6e 6c 79 20 61 20 55 54 46 2d 38 20 69 6d 70  only a UTF-8 imp
78e0: 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2f 0a  lementation..*/.
78f0: 73 74 61 74 69 63 20 69 6e 74 20 6e 6f 63 61 73  static int nocas
7900: 65 43 6f 6c 6c 61 74 69 6e 67 46 75 6e 63 28 0a  eCollatingFunc(.
7910: 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c    void *NotUsed,
7920: 0a 20 20 69 6e 74 20 6e 4b 65 79 31 2c 20 63 6f  .  int nKey1, co
7930: 6e 73 74 20 76 6f 69 64 20 2a 70 4b 65 79 31 2c  nst void *pKey1,
7940: 0a 20 20 69 6e 74 20 6e 4b 65 79 32 2c 20 63 6f  .  int nKey2, co
7950: 6e 73 74 20 76 6f 69 64 20 2a 70 4b 65 79 32 0a  nst void *pKey2.
7960: 29 7b 0a 20 20 69 6e 74 20 72 20 3d 20 73 71 6c  ){.  int r = sql
7970: 69 74 65 33 53 74 72 4e 49 43 6d 70 28 0a 20 20  ite3StrNICmp(.  
7980: 20 20 20 20 28 63 6f 6e 73 74 20 63 68 61 72 20      (const char 
7990: 2a 29 70 4b 65 79 31 2c 20 28 63 6f 6e 73 74 20  *)pKey1, (const 
79a0: 63 68 61 72 20 2a 29 70 4b 65 79 32 2c 20 28 6e  char *)pKey2, (n
79b0: 4b 65 79 31 3c 6e 4b 65 79 32 29 3f 6e 4b 65 79  Key1<nKey2)?nKey
79c0: 31 3a 6e 4b 65 79 32 29 3b 0a 20 20 55 4e 55 53  1:nKey2);.  UNUS
79d0: 45 44 5f 50 41 52 41 4d 45 54 45 52 28 4e 6f 74  ED_PARAMETER(Not
79e0: 55 73 65 64 29 3b 0a 20 20 69 66 28 20 30 3d 3d  Used);.  if( 0==
79f0: 72 20 29 7b 0a 20 20 20 20 72 20 3d 20 6e 4b 65  r ){.    r = nKe
7a00: 79 31 2d 6e 4b 65 79 32 3b 0a 20 20 7d 0a 20 20  y1-nKey2;.  }.  
7a10: 72 65 74 75 72 6e 20 72 3b 0a 7d 0a 0a 2f 2a 0a  return r;.}../*.
7a20: 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 52 4f  ** Return the RO
7a30: 57 49 44 20 6f 66 20 74 68 65 20 6d 6f 73 74 20  WID of the most 
7a40: 72 65 63 65 6e 74 20 69 6e 73 65 72 74 0a 2a 2f  recent insert.*/
7a50: 0a 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 73 71  .sqlite_int64 sq
7a60: 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72  lite3_last_inser
7a70: 74 5f 72 6f 77 69 64 28 73 71 6c 69 74 65 33 20  t_rowid(sqlite3 
7a80: 2a 64 62 29 7b 0a 23 69 66 64 65 66 20 53 51 4c  *db){.#ifdef SQL
7a90: 49 54 45 5f 45 4e 41 42 4c 45 5f 41 50 49 5f 41  ITE_ENABLE_API_A
7aa0: 52 4d 4f 52 0a 20 20 69 66 28 20 21 73 71 6c 69  RMOR.  if( !sqli
7ab0: 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 4f 6b  te3SafetyCheckOk
7ac0: 28 64 62 29 20 29 7b 0a 20 20 20 20 28 76 6f 69  (db) ){.    (voi
7ad0: 64 29 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 5f  d)SQLITE_MISUSE_
7ae0: 42 4b 50 54 3b 0a 20 20 20 20 72 65 74 75 72 6e  BKPT;.    return
7af0: 20 30 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20   0;.  }.#endif. 
7b00: 20 72 65 74 75 72 6e 20 64 62 2d 3e 6c 61 73 74   return db->last
7b10: 52 6f 77 69 64 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  Rowid;.}../*.** 
7b20: 53 65 74 20 74 68 65 20 76 61 6c 75 65 20 72 65  Set the value re
7b30: 74 75 72 6e 65 64 20 62 79 20 74 68 65 20 73 71  turned by the sq
7b40: 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72  lite3_last_inser
7b50: 74 5f 72 6f 77 69 64 28 29 20 41 50 49 20 66 75  t_rowid() API fu
7b60: 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 76 6f 69 64 20  nction..*/.void 
7b70: 73 71 6c 69 74 65 33 5f 73 65 74 5f 6c 61 73 74  sqlite3_set_last
7b80: 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 73 71  _insert_rowid(sq
7b90: 6c 69 74 65 33 20 2a 64 62 2c 20 73 71 6c 69 74  lite3 *db, sqlit
7ba0: 65 33 5f 69 6e 74 36 34 20 69 52 6f 77 69 64 29  e3_int64 iRowid)
7bb0: 7b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  {.#ifdef SQLITE_
7bc0: 45 4e 41 42 4c 45 5f 41 50 49 5f 41 52 4d 4f 52  ENABLE_API_ARMOR
7bd0: 0a 20 20 69 66 28 20 21 73 71 6c 69 74 65 33 53  .  if( !sqlite3S
7be0: 61 66 65 74 79 43 68 65 63 6b 4f 6b 28 64 62 29  afetyCheckOk(db)
7bf0: 20 29 7b 0a 20 20 20 20 28 76 6f 69 64 29 53 51   ){.    (void)SQ
7c00: 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54  LITE_MISUSE_BKPT
7c10: 3b 0a 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20  ;.    return;.  
7c20: 7d 0a 23 65 6e 64 69 66 0a 20 20 73 71 6c 69 74  }.#endif.  sqlit
7c30: 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72 28 64  e3_mutex_enter(d
7c40: 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 64 62 2d  b->mutex);.  db-
7c50: 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 69 52 6f  >lastRowid = iRo
7c60: 77 69 64 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d  wid;.  sqlite3_m
7c70: 75 74 65 78 5f 6c 65 61 76 65 28 64 62 2d 3e 6d  utex_leave(db->m
7c80: 75 74 65 78 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  utex);.}../*.** 
7c90: 52 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65  Return the numbe
7ca0: 72 20 6f 66 20 63 68 61 6e 67 65 73 20 69 6e 20  r of changes in 
7cb0: 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20  the most recent 
7cc0: 63 61 6c 6c 20 74 6f 20 73 71 6c 69 74 65 33 5f  call to sqlite3_
7cd0: 65 78 65 63 28 29 2e 0a 2a 2f 0a 69 6e 74 20 73  exec()..*/.int s
7ce0: 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28 73  qlite3_changes(s
7cf0: 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a 23 69 66  qlite3 *db){.#if
7d00: 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
7d10: 45 5f 41 50 49 5f 41 52 4d 4f 52 0a 20 20 69 66  E_API_ARMOR.  if
7d20: 28 20 21 73 71 6c 69 74 65 33 53 61 66 65 74 79  ( !sqlite3Safety
7d30: 43 68 65 63 6b 4f 6b 28 64 62 29 20 29 7b 0a 20  CheckOk(db) ){. 
7d40: 20 20 20 28 76 6f 69 64 29 53 51 4c 49 54 45 5f     (void)SQLITE_
7d50: 4d 49 53 55 53 45 5f 42 4b 50 54 3b 0a 20 20 20  MISUSE_BKPT;.   
7d60: 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 23   return 0;.  }.#
7d70: 65 6e 64 69 66 0a 20 20 72 65 74 75 72 6e 20 64  endif.  return d
7d80: 62 2d 3e 6e 43 68 61 6e 67 65 3b 0a 7d 0a 0a 2f  b->nChange;.}../
7d90: 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20  *.** Return the 
7da0: 6e 75 6d 62 65 72 20 6f 66 20 63 68 61 6e 67 65  number of change
7db0: 73 20 73 69 6e 63 65 20 74 68 65 20 64 61 74 61  s since the data
7dc0: 62 61 73 65 20 68 61 6e 64 6c 65 20 77 61 73 20  base handle was 
7dd0: 6f 70 65 6e 65 64 2e 0a 2a 2f 0a 69 6e 74 20 73  opened..*/.int s
7de0: 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68 61  qlite3_total_cha
7df0: 6e 67 65 73 28 73 71 6c 69 74 65 33 20 2a 64 62  nges(sqlite3 *db
7e00: 29 7b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ){.#ifdef SQLITE
7e10: 5f 45 4e 41 42 4c 45 5f 41 50 49 5f 41 52 4d 4f  _ENABLE_API_ARMO
7e20: 52 0a 20 20 69 66 28 20 21 73 71 6c 69 74 65 33  R.  if( !sqlite3
7e30: 53 61 66 65 74 79 43 68 65 63 6b 4f 6b 28 64 62  SafetyCheckOk(db
7e40: 29 20 29 7b 0a 20 20 20 20 28 76 6f 69 64 29 53  ) ){.    (void)S
7e50: 51 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50  QLITE_MISUSE_BKP
7e60: 54 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 30 3b  T;.    return 0;
7e70: 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 72 65  .  }.#endif.  re
7e80: 74 75 72 6e 20 64 62 2d 3e 6e 54 6f 74 61 6c 43  turn db->nTotalC
7e90: 68 61 6e 67 65 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  hange;.}../*.** 
7ea0: 43 6c 6f 73 65 20 61 6c 6c 20 6f 70 65 6e 20 73  Close all open s
7eb0: 61 76 65 70 6f 69 6e 74 73 2e 20 54 68 69 73 20  avepoints. This 
7ec0: 66 75 6e 63 74 69 6f 6e 20 6f 6e 6c 79 20 6d 61  function only ma
7ed0: 6e 69 70 75 6c 61 74 65 73 20 66 69 65 6c 64 73  nipulates fields
7ee0: 20 6f 66 20 74 68 65 0a 2a 2a 20 64 61 74 61 62   of the.** datab
7ef0: 61 73 65 20 68 61 6e 64 6c 65 20 6f 62 6a 65 63  ase handle objec
7f00: 74 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 63  t, it does not c
7f10: 6c 6f 73 65 20 61 6e 79 20 73 61 76 65 70 6f 69  lose any savepoi
7f20: 6e 74 73 20 74 68 61 74 20 6d 61 79 20 62 65 20  nts that may be 
7f30: 6f 70 65 6e 0a 2a 2a 20 61 74 20 74 68 65 20 62  open.** at the b
7f40: 2d 74 72 65 65 2f 70 61 67 65 72 20 6c 65 76 65  -tree/pager leve
7f50: 6c 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74  l..*/.void sqlit
7f60: 65 33 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74  e3CloseSavepoint
7f70: 73 28 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a  s(sqlite3 *db){.
7f80: 20 20 77 68 69 6c 65 28 20 64 62 2d 3e 70 53 61    while( db->pSa
7f90: 76 65 70 6f 69 6e 74 20 29 7b 0a 20 20 20 20 53  vepoint ){.    S
7fa0: 61 76 65 70 6f 69 6e 74 20 2a 70 54 6d 70 20 3d  avepoint *pTmp =
7fb0: 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b   db->pSavepoint;
7fc0: 0a 20 20 20 20 64 62 2d 3e 70 53 61 76 65 70 6f  .    db->pSavepo
7fd0: 69 6e 74 20 3d 20 70 54 6d 70 2d 3e 70 4e 65 78  int = pTmp->pNex
7fe0: 74 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 44 62  t;.    sqlite3Db
7ff0: 46 72 65 65 28 64 62 2c 20 70 54 6d 70 29 3b 0a  Free(db, pTmp);.
8000: 20 20 7d 0a 20 20 64 62 2d 3e 6e 53 61 76 65 70    }.  db->nSavep
8010: 6f 69 6e 74 20 3d 20 30 3b 0a 20 20 64 62 2d 3e  oint = 0;.  db->
8020: 6e 53 74 61 74 65 6d 65 6e 74 20 3d 20 30 3b 0a  nStatement = 0;.
8030: 20 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74    db->isTransact
8040: 69 6f 6e 53 61 76 65 70 6f 69 6e 74 20 3d 20 30  ionSavepoint = 0
8050: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b  ;.}../*.** Invok
8060: 65 20 74 68 65 20 64 65 73 74 72 75 63 74 6f 72  e the destructor
8070: 20 66 75 6e 63 74 69 6f 6e 20 61 73 73 6f 63 69   function associ
8080: 61 74 65 64 20 77 69 74 68 20 46 75 6e 63 44 65  ated with FuncDe
8090: 66 20 70 2c 20 69 66 20 61 6e 79 2e 20 45 78 63  f p, if any. Exc
80a0: 65 70 74 2c 0a 2a 2a 20 69 66 20 74 68 69 73 20  ept,.** if this 
80b0: 69 73 20 6e 6f 74 20 74 68 65 20 6c 61 73 74 20  is not the last 
80c0: 63 6f 70 79 20 6f 66 20 74 68 65 20 66 75 6e 63  copy of the func
80d0: 74 69 6f 6e 2c 20 64 6f 20 6e 6f 74 20 69 6e 76  tion, do not inv
80e0: 6f 6b 65 20 69 74 2e 20 4d 75 6c 74 69 70 6c 65  oke it. Multiple
80f0: 0a 2a 2a 20 63 6f 70 69 65 73 20 6f 66 20 61 20  .** copies of a 
8100: 73 69 6e 67 6c 65 20 66 75 6e 63 74 69 6f 6e 20  single function 
8110: 61 72 65 20 63 72 65 61 74 65 64 20 77 68 65 6e  are created when
8120: 20 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e   create_function
8130: 28 29 20 69 73 20 63 61 6c 6c 65 64 0a 2a 2a 20  () is called.** 
8140: 77 69 74 68 20 53 51 4c 49 54 45 5f 41 4e 59 20  with SQLITE_ANY 
8150: 61 73 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 2e  as the encoding.
8160: 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .*/.static void 
8170: 66 75 6e 63 74 69 6f 6e 44 65 73 74 72 6f 79 28  functionDestroy(
8180: 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 46 75 6e  sqlite3 *db, Fun
8190: 63 44 65 66 20 2a 70 29 7b 0a 20 20 46 75 6e 63  cDef *p){.  Func
81a0: 44 65 73 74 72 75 63 74 6f 72 20 2a 70 44 65 73  Destructor *pDes
81b0: 74 72 75 63 74 6f 72 20 3d 20 70 2d 3e 75 2e 70  tructor = p->u.p
81c0: 44 65 73 74 72 75 63 74 6f 72 3b 0a 20 20 69 66  Destructor;.  if
81d0: 28 20 70 44 65 73 74 72 75 63 74 6f 72 20 29 7b  ( pDestructor ){
81e0: 0a 20 20 20 20 70 44 65 73 74 72 75 63 74 6f 72  .    pDestructor
81f0: 2d 3e 6e 52 65 66 2d 2d 3b 0a 20 20 20 20 69 66  ->nRef--;.    if
8200: 28 20 70 44 65 73 74 72 75 63 74 6f 72 2d 3e 6e  ( pDestructor->n
8210: 52 65 66 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  Ref==0 ){.      
8220: 70 44 65 73 74 72 75 63 74 6f 72 2d 3e 78 44 65  pDestructor->xDe
8230: 73 74 72 6f 79 28 70 44 65 73 74 72 75 63 74 6f  stroy(pDestructo
8240: 72 2d 3e 70 55 73 65 72 44 61 74 61 29 3b 0a 20  r->pUserData);. 
8250: 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72       sqlite3DbFr
8260: 65 65 28 64 62 2c 20 70 44 65 73 74 72 75 63 74  ee(db, pDestruct
8270: 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d  or);.    }.  }.}
8280: 0a 0a 2f 2a 0a 2a 2a 20 44 69 73 63 6f 6e 6e 65  ../*.** Disconne
8290: 63 74 20 61 6c 6c 20 73 71 6c 69 74 65 33 5f 76  ct all sqlite3_v
82a0: 74 61 62 20 6f 62 6a 65 63 74 73 20 74 68 61 74  tab objects that
82b0: 20 62 65 6c 6f 6e 67 20 74 6f 20 64 61 74 61 62   belong to datab
82c0: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0a 2a  ase connection.*
82d0: 2a 20 64 62 2e 20 54 68 69 73 20 69 73 20 63 61  * db. This is ca
82e0: 6c 6c 65 64 20 77 68 65 6e 20 64 62 20 69 73 20  lled when db is 
82f0: 62 65 69 6e 67 20 63 6c 6f 73 65 64 2e 0a 2a 2f  being closed..*/
8300: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 64 69 73  .static void dis
8310: 63 6f 6e 6e 65 63 74 41 6c 6c 56 74 61 62 28 73  connectAllVtab(s
8320: 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a 23 69 66  qlite3 *db){.#if
8330: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
8340: 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20  _VIRTUALTABLE.  
8350: 69 6e 74 20 69 3b 0a 20 20 48 61 73 68 45 6c 65  int i;.  HashEle
8360: 6d 20 2a 70 3b 0a 20 20 73 71 6c 69 74 65 33 42  m *p;.  sqlite3B
8370: 74 72 65 65 45 6e 74 65 72 41 6c 6c 28 64 62 29  treeEnterAll(db)
8380: 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 64  ;.  for(i=0; i<d
8390: 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20 20  b->nDb; i++){.  
83a0: 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d    Schema *pSchem
83b0: 61 20 3d 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 70  a = db->aDb[i].p
83c0: 53 63 68 65 6d 61 3b 0a 20 20 20 20 69 66 28 20  Schema;.    if( 
83d0: 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 53 63 68 65  db->aDb[i].pSche
83e0: 6d 61 20 29 7b 0a 20 20 20 20 20 20 66 6f 72 28  ma ){.      for(
83f0: 70 3d 73 71 6c 69 74 65 48 61 73 68 46 69 72 73  p=sqliteHashFirs
8400: 74 28 26 70 53 63 68 65 6d 61 2d 3e 74 62 6c 48  t(&pSchema->tblH
8410: 61 73 68 29 3b 20 70 3b 20 70 3d 73 71 6c 69 74  ash); p; p=sqlit
8420: 65 48 61 73 68 4e 65 78 74 28 70 29 29 7b 0a 20  eHashNext(p)){. 
8430: 20 20 20 20 20 20 20 54 61 62 6c 65 20 2a 70 54         Table *pT
8440: 61 62 20 3d 20 28 54 61 62 6c 65 20 2a 29 73 71  ab = (Table *)sq
8450: 6c 69 74 65 48 61 73 68 44 61 74 61 28 70 29 3b  liteHashData(p);
8460: 0a 20 20 20 20 20 20 20 20 69 66 28 20 49 73 56  .        if( IsV
8470: 69 72 74 75 61 6c 28 70 54 61 62 29 20 29 20 73  irtual(pTab) ) s
8480: 71 6c 69 74 65 33 56 74 61 62 44 69 73 63 6f 6e  qlite3VtabDiscon
8490: 6e 65 63 74 28 64 62 2c 20 70 54 61 62 29 3b 0a  nect(db, pTab);.
84a0: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
84b0: 7d 0a 20 20 66 6f 72 28 70 3d 73 71 6c 69 74 65  }.  for(p=sqlite
84c0: 48 61 73 68 46 69 72 73 74 28 26 64 62 2d 3e 61  HashFirst(&db->a
84d0: 4d 6f 64 75 6c 65 29 3b 20 70 3b 20 70 3d 73 71  Module); p; p=sq
84e0: 6c 69 74 65 48 61 73 68 4e 65 78 74 28 70 29 29  liteHashNext(p))
84f0: 7b 0a 20 20 20 20 4d 6f 64 75 6c 65 20 2a 70 4d  {.    Module *pM
8500: 6f 64 20 3d 20 28 4d 6f 64 75 6c 65 20 2a 29 73  od = (Module *)s
8510: 71 6c 69 74 65 48 61 73 68 44 61 74 61 28 70 29  qliteHashData(p)
8520: 3b 0a 20 20 20 20 69 66 28 20 70 4d 6f 64 2d 3e  ;.    if( pMod->
8530: 70 45 70 6f 54 61 62 20 29 7b 0a 20 20 20 20 20  pEpoTab ){.     
8540: 20 73 71 6c 69 74 65 33 56 74 61 62 44 69 73 63   sqlite3VtabDisc
8550: 6f 6e 6e 65 63 74 28 64 62 2c 20 70 4d 6f 64 2d  onnect(db, pMod-
8560: 3e 70 45 70 6f 54 61 62 29 3b 0a 20 20 20 20 7d  >pEpoTab);.    }
8570: 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 56 74  .  }.  sqlite3Vt
8580: 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 64 62 29  abUnlockList(db)
8590: 3b 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65 65  ;.  sqlite3Btree
85a0: 4c 65 61 76 65 41 6c 6c 28 64 62 29 3b 0a 23 65  LeaveAll(db);.#e
85b0: 6c 73 65 0a 20 20 55 4e 55 53 45 44 5f 50 41 52  lse.  UNUSED_PAR
85c0: 41 4d 45 54 45 52 28 64 62 29 3b 0a 23 65 6e 64  AMETER(db);.#end
85d0: 69 66 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75  if.}../*.** Retu
85e0: 72 6e 20 54 52 55 45 20 69 66 20 64 61 74 61 62  rn TRUE if datab
85f0: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 64  ase connection d
8600: 62 20 68 61 73 20 75 6e 66 69 6e 61 6c 69 7a 65  b has unfinalize
8610: 64 20 70 72 65 70 61 72 65 64 0a 2a 2a 20 73 74  d prepared.** st
8620: 61 74 65 6d 65 6e 74 73 20 6f 72 20 75 6e 66 69  atements or unfi
8630: 6e 69 73 68 65 64 20 73 71 6c 69 74 65 33 5f 62  nished sqlite3_b
8640: 61 63 6b 75 70 20 6f 62 6a 65 63 74 73 2e 20 20  ackup objects.  
8650: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 63  .*/.static int c
8660: 6f 6e 6e 65 63 74 69 6f 6e 49 73 42 75 73 79 28  onnectionIsBusy(
8670: 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20 20  sqlite3 *db){.  
8680: 69 6e 74 20 6a 3b 0a 20 20 61 73 73 65 72 74 28  int j;.  assert(
8690: 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 68   sqlite3_mutex_h
86a0: 65 6c 64 28 64 62 2d 3e 6d 75 74 65 78 29 20 29  eld(db->mutex) )
86b0: 3b 0a 20 20 69 66 28 20 64 62 2d 3e 70 56 64 62  ;.  if( db->pVdb
86c0: 65 20 29 20 72 65 74 75 72 6e 20 31 3b 0a 20 20  e ) return 1;.  
86d0: 66 6f 72 28 6a 3d 30 3b 20 6a 3c 64 62 2d 3e 6e  for(j=0; j<db->n
86e0: 44 62 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 42 74  Db; j++){.    Bt
86f0: 72 65 65 20 2a 70 42 74 20 3d 20 64 62 2d 3e 61  ree *pBt = db->a
8700: 44 62 5b 6a 5d 2e 70 42 74 3b 0a 20 20 20 20 69  Db[j].pBt;.    i
8710: 66 28 20 70 42 74 20 26 26 20 73 71 6c 69 74 65  f( pBt && sqlite
8720: 33 42 74 72 65 65 49 73 49 6e 42 61 63 6b 75 70  3BtreeIsInBackup
8730: 28 70 42 74 29 20 29 20 72 65 74 75 72 6e 20 31  (pBt) ) return 1
8740: 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 30  ;.  }.  return 0
8750: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 6c 6f 73 65  ;.}../*.** Close
8760: 20 61 6e 20 65 78 69 73 74 69 6e 67 20 53 51 4c   an existing SQL
8770: 69 74 65 20 64 61 74 61 62 61 73 65 0a 2a 2f 0a  ite database.*/.
8780: 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c 69 74  static int sqlit
8790: 65 33 43 6c 6f 73 65 28 73 71 6c 69 74 65 33 20  e3Close(sqlite3 
87a0: 2a 64 62 2c 20 69 6e 74 20 66 6f 72 63 65 5a 6f  *db, int forceZo
87b0: 6d 62 69 65 29 7b 0a 20 20 69 66 28 20 21 64 62  mbie){.  if( !db
87c0: 20 29 7b 0a 20 20 20 20 2f 2a 20 45 56 49 44 45   ){.    /* EVIDE
87d0: 4e 43 45 2d 4f 46 3a 20 52 2d 36 33 32 35 37 2d  NCE-OF: R-63257-
87e0: 31 31 37 34 30 20 43 61 6c 6c 69 6e 67 20 73 71  11740 Calling sq
87f0: 6c 69 74 65 33 5f 63 6c 6f 73 65 28 29 20 6f 72  lite3_close() or
8800: 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 33 5f  .    ** sqlite3_
8810: 63 6c 6f 73 65 5f 76 32 28 29 20 77 69 74 68 20  close_v2() with 
8820: 61 20 4e 55 4c 4c 20 70 6f 69 6e 74 65 72 20 61  a NULL pointer a
8830: 72 67 75 6d 65 6e 74 20 69 73 20 61 20 68 61 72  rgument is a har
8840: 6d 6c 65 73 73 20 6e 6f 2d 6f 70 2e 20 2a 2f 0a  mless no-op. */.
8850: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
8860: 45 5f 4f 4b 3b 0a 20 20 7d 0a 20 20 69 66 28 20  E_OK;.  }.  if( 
8870: 21 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68  !sqlite3SafetyCh
8880: 65 63 6b 53 69 63 6b 4f 72 4f 6b 28 64 62 29 20  eckSickOrOk(db) 
8890: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51  ){.    return SQ
88a0: 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54  LITE_MISUSE_BKPT
88b0: 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f  ;.  }.  sqlite3_
88c0: 6d 75 74 65 78 5f 65 6e 74 65 72 28 64 62 2d 3e  mutex_enter(db->
88d0: 6d 75 74 65 78 29 3b 0a 20 20 69 66 28 20 64 62  mutex);.  if( db
88e0: 2d 3e 6d 54 72 61 63 65 20 26 20 53 51 4c 49 54  ->mTrace & SQLIT
88f0: 45 5f 54 52 41 43 45 5f 43 4c 4f 53 45 20 29 7b  E_TRACE_CLOSE ){
8900: 0a 20 20 20 20 64 62 2d 3e 78 54 72 61 63 65 28  .    db->xTrace(
8910: 53 51 4c 49 54 45 5f 54 52 41 43 45 5f 43 4c 4f  SQLITE_TRACE_CLO
8920: 53 45 2c 20 64 62 2d 3e 70 54 72 61 63 65 41 72  SE, db->pTraceAr
8930: 67 2c 20 64 62 2c 20 30 29 3b 0a 20 20 7d 0a 0a  g, db, 0);.  }..
8940: 20 20 2f 2a 20 46 6f 72 63 65 20 78 44 69 73 63    /* Force xDisc
8950: 6f 6e 6e 65 63 74 20 63 61 6c 6c 73 20 6f 6e 20  onnect calls on 
8960: 61 6c 6c 20 76 69 72 74 75 61 6c 20 74 61 62 6c  all virtual tabl
8970: 65 73 20 2a 2f 0a 20 20 64 69 73 63 6f 6e 6e 65  es */.  disconne
8980: 63 74 41 6c 6c 56 74 61 62 28 64 62 29 3b 0a 0a  ctAllVtab(db);..
8990: 20 20 2f 2a 20 49 66 20 61 20 74 72 61 6e 73 61    /* If a transa
89a0: 63 74 69 6f 6e 20 69 73 20 6f 70 65 6e 2c 20 74  ction is open, t
89b0: 68 65 20 64 69 73 63 6f 6e 6e 65 63 74 41 6c 6c  he disconnectAll
89c0: 56 74 61 62 28 29 20 63 61 6c 6c 20 61 62 6f 76  Vtab() call abov
89d0: 65 0a 20 20 2a 2a 20 77 69 6c 6c 20 6e 6f 74 20  e.  ** will not 
89e0: 68 61 76 65 20 63 61 6c 6c 65 64 20 74 68 65 20  have called the 
89f0: 78 44 69 73 63 6f 6e 6e 65 63 74 28 29 20 6d 65  xDisconnect() me
8a00: 74 68 6f 64 20 6f 6e 20 61 6e 79 20 76 69 72 74  thod on any virt
8a10: 75 61 6c 0a 20 20 2a 2a 20 74 61 62 6c 65 73 20  ual.  ** tables 
8a20: 69 6e 20 74 68 65 20 64 62 2d 3e 61 56 54 72 61  in the db->aVTra
8a30: 6e 73 5b 5d 20 61 72 72 61 79 2e 20 54 68 65 20  ns[] array. The 
8a40: 66 6f 6c 6c 6f 77 69 6e 67 20 73 71 6c 69 74 65  following sqlite
8a50: 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28 29 0a  3VtabRollback().
8a60: 20 20 2a 2a 20 63 61 6c 6c 20 77 69 6c 6c 20 64    ** call will d
8a70: 6f 20 73 6f 2e 20 57 65 20 6e 65 65 64 20 74 6f  o so. We need to
8a80: 20 64 6f 20 74 68 69 73 20 62 65 66 6f 72 65 20   do this before 
8a90: 74 68 65 20 63 68 65 63 6b 20 66 6f 72 20 61 63  the check for ac
8aa0: 74 69 76 65 0a 20 20 2a 2a 20 53 51 4c 20 73 74  tive.  ** SQL st
8ab0: 61 74 65 6d 65 6e 74 73 20 62 65 6c 6f 77 2c 20  atements below, 
8ac0: 61 73 20 74 68 65 20 76 2d 74 61 62 6c 65 20 69  as the v-table i
8ad0: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6d 61  mplementation ma
8ae0: 79 20 62 65 20 73 74 6f 72 69 6e 67 0a 20 20 2a  y be storing.  *
8af0: 2a 20 73 6f 6d 65 20 70 72 65 70 61 72 65 64 20  * some prepared 
8b00: 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 74 65 72  statements inter
8b10: 6e 61 6c 6c 79 2e 0a 20 20 2a 2f 0a 20 20 73 71  nally..  */.  sq
8b20: 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c 62 61 63  lite3VtabRollbac
8b30: 6b 28 64 62 29 3b 0a 0a 20 20 2f 2a 20 4c 65 67  k(db);..  /* Leg
8b40: 61 63 79 20 62 65 68 61 76 69 6f 72 20 28 73 71  acy behavior (sq
8b50: 6c 69 74 65 33 5f 63 6c 6f 73 65 28 29 20 62 65  lite3_close() be
8b60: 68 61 76 69 6f 72 29 20 69 73 20 74 6f 20 72 65  havior) is to re
8b70: 74 75 72 6e 0a 20 20 2a 2a 20 53 51 4c 49 54 45  turn.  ** SQLITE
8b80: 5f 42 55 53 59 20 69 66 20 74 68 65 20 63 6f 6e  _BUSY if the con
8b90: 6e 65 63 74 69 6f 6e 20 63 61 6e 20 6e 6f 74 20  nection can not 
8ba0: 62 65 20 63 6c 6f 73 65 64 20 69 6d 6d 65 64 69  be closed immedi
8bb0: 61 74 65 6c 79 2e 0a 20 20 2a 2f 0a 20 20 69 66  ately..  */.  if
8bc0: 28 20 21 66 6f 72 63 65 5a 6f 6d 62 69 65 20 26  ( !forceZombie &
8bd0: 26 20 63 6f 6e 6e 65 63 74 69 6f 6e 49 73 42 75  & connectionIsBu
8be0: 73 79 28 64 62 29 20 29 7b 0a 20 20 20 20 73 71  sy(db) ){.    sq
8bf0: 6c 69 74 65 33 45 72 72 6f 72 57 69 74 68 4d 73  lite3ErrorWithMs
8c00: 67 28 64 62 2c 20 53 51 4c 49 54 45 5f 42 55 53  g(db, SQLITE_BUS
8c10: 59 2c 20 22 75 6e 61 62 6c 65 20 74 6f 20 63 6c  Y, "unable to cl
8c20: 6f 73 65 20 64 75 65 20 74 6f 20 75 6e 66 69 6e  ose due to unfin
8c30: 61 6c 69 7a 65 64 20 22 0a 20 20 20 20 20 20 20  alized ".       
8c40: 22 73 74 61 74 65 6d 65 6e 74 73 20 6f 72 20 75  "statements or u
8c50: 6e 66 69 6e 69 73 68 65 64 20 62 61 63 6b 75 70  nfinished backup
8c60: 73 22 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  s");.    sqlite3
8c70: 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 64 62 2d  _mutex_leave(db-
8c80: 3e 6d 75 74 65 78 29 3b 0a 20 20 20 20 72 65 74  >mutex);.    ret
8c90: 75 72 6e 20 53 51 4c 49 54 45 5f 42 55 53 59 3b  urn SQLITE_BUSY;
8ca0: 0a 20 20 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c  .  }..#ifdef SQL
8cb0: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 51 4c 4c 4f  ITE_ENABLE_SQLLO
8cc0: 47 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 47  G.  if( sqlite3G
8cd0: 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78 53 71 6c  lobalConfig.xSql
8ce0: 6c 6f 67 20 29 7b 0a 20 20 20 20 2f 2a 20 43 6c  log ){.    /* Cl
8cf0: 6f 73 69 6e 67 20 74 68 65 20 68 61 6e 64 6c 65  osing the handle
8d00: 2e 20 46 6f 75 72 74 68 20 70 61 72 61 6d 65 74  . Fourth paramet
8d10: 65 72 20 69 73 20 70 61 73 73 65 64 20 74 68 65  er is passed the
8d20: 20 76 61 6c 75 65 20 32 2e 20 2a 2f 0a 20 20 20   value 2. */.   
8d30: 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f   sqlite3GlobalCo
8d40: 6e 66 69 67 2e 78 53 71 6c 6c 6f 67 28 73 71 6c  nfig.xSqllog(sql
8d50: 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67  ite3GlobalConfig
8d60: 2e 70 53 71 6c 6c 6f 67 41 72 67 2c 20 64 62 2c  .pSqllogArg, db,
8d70: 20 30 2c 20 32 29 3b 0a 20 20 7d 0a 23 65 6e 64   0, 2);.  }.#end
8d80: 69 66 0a 0a 20 20 2f 2a 20 43 6f 6e 76 65 72 74  if..  /* Convert
8d90: 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   the connection 
8da0: 69 6e 74 6f 20 61 20 7a 6f 6d 62 69 65 20 61 6e  into a zombie an
8db0: 64 20 74 68 65 6e 20 63 6c 6f 73 65 20 69 74 2e  d then close it.
8dc0: 0a 20 20 2a 2f 0a 20 20 64 62 2d 3e 6d 61 67 69  .  */.  db->magi
8dd0: 63 20 3d 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  c = SQLITE_MAGIC
8de0: 5f 5a 4f 4d 42 49 45 3b 0a 20 20 73 71 6c 69 74  _ZOMBIE;.  sqlit
8df0: 65 33 4c 65 61 76 65 4d 75 74 65 78 41 6e 64 43  e3LeaveMutexAndC
8e00: 6c 6f 73 65 5a 6f 6d 62 69 65 28 64 62 29 3b 0a  loseZombie(db);.
8e10: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
8e20: 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 77 6f  OK;.}../*.** Two
8e30: 20 76 61 72 69 61 74 69 6f 6e 73 20 6f 6e 20 74   variations on t
8e40: 68 65 20 70 75 62 6c 69 63 20 69 6e 74 65 72 66  he public interf
8e50: 61 63 65 20 66 6f 72 20 63 6c 6f 73 69 6e 67 20  ace for closing 
8e60: 61 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f  a database.** co
8e70: 6e 6e 65 63 74 69 6f 6e 2e 20 54 68 65 20 73 71  nnection. The sq
8e80: 6c 69 74 65 33 5f 63 6c 6f 73 65 28 29 20 76 65  lite3_close() ve
8e90: 72 73 69 6f 6e 20 72 65 74 75 72 6e 73 20 53 51  rsion returns SQ
8ea0: 4c 49 54 45 5f 42 55 53 59 20 61 6e 64 0a 2a 2a  LITE_BUSY and.**
8eb0: 20 6c 65 61 76 65 73 20 74 68 65 20 63 6f 6e 6e   leaves the conn
8ec0: 65 63 74 69 6f 6e 20 6f 70 74 69 6f 6e 20 69 66  ection option if
8ed0: 20 74 68 65 72 65 20 61 72 65 20 75 6e 66 69 6e   there are unfin
8ee0: 61 6c 69 7a 65 64 20 70 72 65 70 61 72 65 64 0a  alized prepared.
8ef0: 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73 20 6f 72  ** statements or
8f00: 20 75 6e 66 69 6e 69 73 68 65 64 20 73 71 6c 69   unfinished sqli
8f10: 74 65 33 5f 62 61 63 6b 75 70 73 2e 20 20 54 68  te3_backups.  Th
8f20: 65 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 5f  e sqlite3_close_
8f30: 76 32 28 29 0a 2a 2a 20 76 65 72 73 69 6f 6e 20  v2().** version 
8f40: 66 6f 72 63 65 73 20 74 68 65 20 63 6f 6e 6e 65  forces the conne
8f50: 63 74 69 6f 6e 20 74 6f 20 62 65 63 6f 6d 65 20  ction to become 
8f60: 61 20 7a 6f 6d 62 69 65 20 69 66 20 74 68 65 72  a zombie if ther
8f70: 65 20 61 72 65 0a 2a 2a 20 75 6e 63 6c 6f 73 65  e are.** unclose
8f80: 64 20 72 65 73 6f 75 72 63 65 73 2c 20 61 6e 64  d resources, and
8f90: 20 61 72 72 61 6e 67 65 73 20 66 6f 72 20 64 65   arranges for de
8fa0: 61 6c 6c 6f 63 61 74 69 6f 6e 20 77 68 65 6e 20  allocation when 
8fb0: 74 68 65 20 6c 61 73 74 0a 2a 2a 20 70 72 65 70  the last.** prep
8fc0: 61 72 65 20 73 74 61 74 65 6d 65 6e 74 20 6f 72  are statement or
8fd0: 20 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 20   sqlite3_backup 
8fe0: 63 6c 6f 73 65 73 2e 0a 2a 2f 0a 69 6e 74 20 73  closes..*/.int s
8ff0: 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28 73 71 6c  qlite3_close(sql
9000: 69 74 65 33 20 2a 64 62 29 7b 20 72 65 74 75 72  ite3 *db){ retur
9010: 6e 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 28 64  n sqlite3Close(d
9020: 62 2c 30 29 3b 20 7d 0a 69 6e 74 20 73 71 6c 69  b,0); }.int sqli
9030: 74 65 33 5f 63 6c 6f 73 65 5f 76 32 28 73 71 6c  te3_close_v2(sql
9040: 69 74 65 33 20 2a 64 62 29 7b 20 72 65 74 75 72  ite3 *db){ retur
9050: 6e 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 28 64  n sqlite3Close(d
9060: 62 2c 31 29 3b 20 7d 0a 0a 0a 2f 2a 0a 2a 2a 20  b,1); }.../*.** 
9070: 43 6c 6f 73 65 20 74 68 65 20 6d 75 74 65 78 20  Close the mutex 
9080: 6f 6e 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  on database conn
9090: 65 63 74 69 6f 6e 20 64 62 2e 0a 2a 2a 0a 2a 2a  ection db..**.**
90a0: 20 46 75 72 74 68 65 72 6d 6f 72 65 2c 20 69 66   Furthermore, if
90b0: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
90c0: 74 69 6f 6e 20 64 62 20 69 73 20 61 20 7a 6f 6d  tion db is a zom
90d0: 62 69 65 20 28 6d 65 61 6e 69 6e 67 20 74 68 61  bie (meaning tha
90e0: 74 20 74 68 65 72 65 0a 2a 2a 20 68 61 73 20 62  t there.** has b
90f0: 65 65 6e 20 61 20 70 72 69 6f 72 20 63 61 6c 6c  een a prior call
9100: 20 74 6f 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73   to sqlite3_clos
9110: 65 28 64 62 29 20 6f 72 20 73 71 6c 69 74 65 33  e(db) or sqlite3
9120: 5f 63 6c 6f 73 65 5f 76 32 28 64 62 29 29 20 61  _close_v2(db)) a
9130: 6e 64 0a 2a 2a 20 65 76 65 72 79 20 73 71 6c 69  nd.** every sqli
9140: 74 65 33 5f 73 74 6d 74 20 68 61 73 20 6e 6f 77  te3_stmt has now
9150: 20 62 65 65 6e 20 66 69 6e 61 6c 69 7a 65 64 20   been finalized 
9160: 61 6e 64 20 65 76 65 72 79 20 73 71 6c 69 74 65  and every sqlite
9170: 33 5f 62 61 63 6b 75 70 20 68 61 73 0a 2a 2a 20  3_backup has.** 
9180: 66 69 6e 69 73 68 65 64 2c 20 74 68 65 6e 20 66  finished, then f
9190: 72 65 65 20 61 6c 6c 20 72 65 73 6f 75 72 63 65  ree all resource
91a0: 73 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74  s..*/.void sqlit
91b0: 65 33 4c 65 61 76 65 4d 75 74 65 78 41 6e 64 43  e3LeaveMutexAndC
91c0: 6c 6f 73 65 5a 6f 6d 62 69 65 28 73 71 6c 69 74  loseZombie(sqlit
91d0: 65 33 20 2a 64 62 29 7b 0a 20 20 48 61 73 68 45  e3 *db){.  HashE
91e0: 6c 65 6d 20 2a 69 3b 20 20 20 20 20 20 20 20 20  lem *i;         
91f0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 61             /* Ha
9200: 73 68 20 74 61 62 6c 65 20 69 74 65 72 61 74 6f  sh table iterato
9210: 72 20 2a 2f 0a 20 20 69 6e 74 20 6a 3b 0a 0a 20  r */.  int j;.. 
9220: 20 2f 2a 20 49 66 20 74 68 65 72 65 20 61 72 65   /* If there are
9230: 20 6f 75 74 73 74 61 6e 64 69 6e 67 20 73 71 6c   outstanding sql
9240: 69 74 65 33 5f 73 74 6d 74 20 6f 72 20 73 71 6c  ite3_stmt or sql
9250: 69 74 65 33 5f 62 61 63 6b 75 70 20 6f 62 6a 65  ite3_backup obje
9260: 63 74 73 0a 20 20 2a 2a 20 6f 72 20 69 66 20 74  cts.  ** or if t
9270: 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61  he connection ha
9280: 73 20 6e 6f 74 20 79 65 74 20 62 65 65 6e 20 63  s not yet been c
9290: 6c 6f 73 65 64 20 62 79 20 73 71 6c 69 74 65 33  losed by sqlite3
92a0: 5f 63 6c 6f 73 65 5f 76 32 28 29 2c 0a 20 20 2a  _close_v2(),.  *
92b0: 2a 20 74 68 65 6e 20 6a 75 73 74 20 6c 65 61 76  * then just leav
92c0: 65 20 74 68 65 20 6d 75 74 65 78 20 61 6e 64 20  e the mutex and 
92d0: 72 65 74 75 72 6e 2e 0a 20 20 2a 2f 0a 20 20 69  return..  */.  i
92e0: 66 28 20 64 62 2d 3e 6d 61 67 69 63 21 3d 53 51  f( db->magic!=SQ
92f0: 4c 49 54 45 5f 4d 41 47 49 43 5f 5a 4f 4d 42 49  LITE_MAGIC_ZOMBI
9300: 45 20 7c 7c 20 63 6f 6e 6e 65 63 74 69 6f 6e 49  E || connectionI
9310: 73 42 75 73 79 28 64 62 29 20 29 7b 0a 20 20 20  sBusy(db) ){.   
9320: 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c   sqlite3_mutex_l
9330: 65 61 76 65 28 64 62 2d 3e 6d 75 74 65 78 29 3b  eave(db->mutex);
9340: 0a 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20 7d  .    return;.  }
9350: 0a 0a 20 20 2f 2a 20 49 66 20 77 65 20 72 65 61  ..  /* If we rea
9360: 63 68 20 74 68 69 73 20 70 6f 69 6e 74 2c 20 69  ch this point, i
9370: 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65  t means that the
9380: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
9390: 74 69 6f 6e 20 68 61 73 0a 20 20 2a 2a 20 63 6c  tion has.  ** cl
93a0: 6f 73 65 64 20 61 6c 6c 20 73 71 6c 69 74 65 33  osed all sqlite3
93b0: 5f 73 74 6d 74 20 61 6e 64 20 73 71 6c 69 74 65  _stmt and sqlite
93c0: 33 5f 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 73  3_backup objects
93d0: 20 61 6e 64 20 68 61 73 20 62 65 65 6e 0a 20 20   and has been.  
93e0: 2a 2a 20 70 61 73 73 65 64 20 74 6f 20 73 71 6c  ** passed to sql
93f0: 69 74 65 33 5f 63 6c 6f 73 65 20 28 6d 65 61 6e  ite3_close (mean
9400: 69 6e 67 20 74 68 61 74 20 69 74 20 69 73 20 61  ing that it is a
9410: 20 7a 6f 6d 62 69 65 29 2e 20 20 54 68 65 72 65   zombie).  There
9420: 66 6f 72 65 2c 0a 20 20 2a 2a 20 67 6f 20 61 68  fore,.  ** go ah
9430: 65 61 64 20 61 6e 64 20 66 72 65 65 20 61 6c 6c  ead and free all
9440: 20 72 65 73 6f 75 72 63 65 73 2e 0a 20 20 2a 2f   resources..  */
9450: 0a 0a 20 20 2f 2a 20 49 66 20 61 20 74 72 61 6e  ..  /* If a tran
9460: 73 61 63 74 69 6f 6e 20 69 73 20 6f 70 65 6e 2c  saction is open,
9470: 20 72 6f 6c 6c 20 69 74 20 62 61 63 6b 2e 20 54   roll it back. T
9480: 68 69 73 20 61 6c 73 6f 20 65 6e 73 75 72 65 73  his also ensures
9490: 20 74 68 61 74 20 69 66 0a 20 20 2a 2a 20 61 6e   that if.  ** an
94a0: 79 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  y database schem
94b0: 61 73 20 68 61 76 65 20 62 65 65 6e 20 6d 6f 64  as have been mod
94c0: 69 66 69 65 64 20 62 79 20 61 6e 20 75 6e 63 6f  ified by an unco
94d0: 6d 6d 69 74 74 65 64 20 74 72 61 6e 73 61 63 74  mmitted transact
94e0: 69 6f 6e 0a 20 20 2a 2a 20 74 68 65 79 20 61 72  ion.  ** they ar
94f0: 65 20 72 65 73 65 74 2e 20 41 6e 64 20 74 68 61  e reset. And tha
9500: 74 20 74 68 65 20 72 65 71 75 69 72 65 64 20 62  t the required b
9510: 2d 74 72 65 65 20 6d 75 74 65 78 20 69 73 20 68  -tree mutex is h
9520: 65 6c 64 20 74 6f 20 6d 61 6b 65 0a 20 20 2a 2a  eld to make.  **
9530: 20 74 68 65 20 70 61 67 65 72 20 72 6f 6c 6c 62   the pager rollb
9540: 61 63 6b 20 61 6e 64 20 73 63 68 65 6d 61 20 72  ack and schema r
9550: 65 73 65 74 20 61 6e 20 61 74 6f 6d 69 63 20 6f  eset an atomic o
9560: 70 65 72 61 74 69 6f 6e 2e 20 2a 2f 0a 20 20 73  peration. */.  s
9570: 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c  qlite3RollbackAl
9580: 6c 28 64 62 2c 20 53 51 4c 49 54 45 5f 4f 4b 29  l(db, SQLITE_OK)
9590: 3b 0a 0a 20 20 2f 2a 20 46 72 65 65 20 61 6e 79  ;..  /* Free any
95a0: 20 6f 75 74 73 74 61 6e 64 69 6e 67 20 53 61 76   outstanding Sav
95b0: 65 70 6f 69 6e 74 20 73 74 72 75 63 74 75 72 65  epoint structure
95c0: 73 2e 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 43  s. */.  sqlite3C
95d0: 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74 73 28 64  loseSavepoints(d
95e0: 62 29 3b 0a 0a 20 20 2f 2a 20 43 6c 6f 73 65 20  b);..  /* Close 
95f0: 61 6c 6c 20 64 61 74 61 62 61 73 65 20 63 6f 6e  all database con
9600: 6e 65 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 66 6f  nections */.  fo
9610: 72 28 6a 3d 30 3b 20 6a 3c 64 62 2d 3e 6e 44 62  r(j=0; j<db->nDb
9620: 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 73 74 72 75  ; j++){.    stru
9630: 63 74 20 44 62 20 2a 70 44 62 20 3d 20 26 64 62  ct Db *pDb = &db
9640: 2d 3e 61 44 62 5b 6a 5d 3b 0a 20 20 20 20 69 66  ->aDb[j];.    if
9650: 28 20 70 44 62 2d 3e 70 42 74 20 29 7b 0a 20 20  ( pDb->pBt ){.  
9660: 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65      sqlite3Btree
9670: 43 6c 6f 73 65 28 70 44 62 2d 3e 70 42 74 29 3b  Close(pDb->pBt);
9680: 0a 20 20 20 20 20 20 70 44 62 2d 3e 70 42 74 20  .      pDb->pBt 
9690: 3d 20 30 3b 0a 20 20 20 20 20 20 69 66 28 20 6a  = 0;.      if( j
96a0: 21 3d 31 20 29 7b 0a 20 20 20 20 20 20 20 20 70  !=1 ){.        p
96b0: 44 62 2d 3e 70 53 63 68 65 6d 61 20 3d 20 30 3b  Db->pSchema = 0;
96c0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
96d0: 20 7d 0a 20 20 2f 2a 20 43 6c 65 61 72 20 74 68   }.  /* Clear th
96e0: 65 20 54 45 4d 50 20 73 63 68 65 6d 61 20 73 65  e TEMP schema se
96f0: 70 61 72 61 74 65 6c 79 20 61 6e 64 20 6c 61 73  parately and las
9700: 74 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e 61  t */.  if( db->a
9710: 44 62 5b 31 5d 2e 70 53 63 68 65 6d 61 20 29 7b  Db[1].pSchema ){
9720: 0a 20 20 20 20 73 71 6c 69 74 65 33 53 63 68 65  .    sqlite3Sche
9730: 6d 61 43 6c 65 61 72 28 64 62 2d 3e 61 44 62 5b  maClear(db->aDb[
9740: 31 5d 2e 70 53 63 68 65 6d 61 29 3b 0a 20 20 7d  1].pSchema);.  }
9750: 0a 20 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e  .  sqlite3VtabUn
9760: 6c 6f 63 6b 4c 69 73 74 28 64 62 29 3b 0a 0a 20  lockList(db);.. 
9770: 20 2f 2a 20 46 72 65 65 20 75 70 20 74 68 65 20   /* Free up the 
9780: 61 72 72 61 79 20 6f 66 20 61 75 78 69 6c 69 61  array of auxilia
9790: 72 79 20 64 61 74 61 62 61 73 65 73 20 2a 2f 0a  ry databases */.
97a0: 20 20 73 71 6c 69 74 65 33 43 6f 6c 6c 61 70 73    sqlite3Collaps
97b0: 65 44 61 74 61 62 61 73 65 41 72 72 61 79 28 64  eDatabaseArray(d
97c0: 62 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62  b);.  assert( db
97d0: 2d 3e 6e 44 62 3c 3d 32 20 29 3b 0a 20 20 61 73  ->nDb<=2 );.  as
97e0: 73 65 72 74 28 20 64 62 2d 3e 61 44 62 3d 3d 64  sert( db->aDb==d
97f0: 62 2d 3e 61 44 62 53 74 61 74 69 63 20 29 3b 0a  b->aDbStatic );.
9800: 0a 20 20 2f 2a 20 54 65 6c 6c 20 74 68 65 20 63  .  /* Tell the c
9810: 6f 64 65 20 69 6e 20 6e 6f 74 69 66 79 2e 63 20  ode in notify.c 
9820: 74 68 61 74 20 74 68 65 20 63 6f 6e 6e 65 63 74  that the connect
9830: 69 6f 6e 20 6e 6f 20 6c 6f 6e 67 65 72 20 68 6f  ion no longer ho
9840: 6c 64 73 20 61 6e 79 0a 20 20 2a 2a 20 6c 6f 63  lds any.  ** loc
9850: 6b 73 20 61 6e 64 20 64 6f 65 73 20 6e 6f 74 20  ks and does not 
9860: 72 65 71 75 69 72 65 20 61 6e 79 20 66 75 72 74  require any furt
9870: 68 65 72 20 75 6e 6c 6f 63 6b 2d 6e 6f 74 69 66  her unlock-notif
9880: 79 20 63 61 6c 6c 62 61 63 6b 73 2e 0a 20 20 2a  y callbacks..  *
9890: 2f 0a 20 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65  /.  sqlite3Conne
98a0: 63 74 69 6f 6e 43 6c 6f 73 65 64 28 64 62 29 3b  ctionClosed(db);
98b0: 0a 0a 20 20 66 6f 72 28 69 3d 73 71 6c 69 74 65  ..  for(i=sqlite
98c0: 48 61 73 68 46 69 72 73 74 28 26 64 62 2d 3e 61  HashFirst(&db->a
98d0: 46 75 6e 63 29 3b 20 69 3b 20 69 3d 73 71 6c 69  Func); i; i=sqli
98e0: 74 65 48 61 73 68 4e 65 78 74 28 69 29 29 7b 0a  teHashNext(i)){.
98f0: 20 20 20 20 46 75 6e 63 44 65 66 20 2a 70 4e 65      FuncDef *pNe
9900: 78 74 2c 20 2a 70 3b 0a 20 20 20 20 70 20 3d 20  xt, *p;.    p = 
9910: 73 71 6c 69 74 65 48 61 73 68 44 61 74 61 28 69  sqliteHashData(i
9920: 29 3b 0a 20 20 20 20 64 6f 7b 0a 20 20 20 20 20  );.    do{.     
9930: 20 66 75 6e 63 74 69 6f 6e 44 65 73 74 72 6f 79   functionDestroy
9940: 28 64 62 2c 20 70 29 3b 0a 20 20 20 20 20 20 70  (db, p);.      p
9950: 4e 65 78 74 20 3d 20 70 2d 3e 70 4e 65 78 74 3b  Next = p->pNext;
9960: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62  .      sqlite3Db
9970: 46 72 65 65 28 64 62 2c 20 70 29 3b 0a 20 20 20  Free(db, p);.   
9980: 20 20 20 70 20 3d 20 70 4e 65 78 74 3b 0a 20 20     p = pNext;.  
9990: 20 20 7d 77 68 69 6c 65 28 20 70 20 29 3b 0a 20    }while( p );. 
99a0: 20 7d 0a 20 20 73 71 6c 69 74 65 33 48 61 73 68   }.  sqlite3Hash
99b0: 43 6c 65 61 72 28 26 64 62 2d 3e 61 46 75 6e 63  Clear(&db->aFunc
99c0: 29 3b 0a 20 20 66 6f 72 28 69 3d 73 71 6c 69 74  );.  for(i=sqlit
99d0: 65 48 61 73 68 46 69 72 73 74 28 26 64 62 2d 3e  eHashFirst(&db->
99e0: 61 43 6f 6c 6c 53 65 71 29 3b 20 69 3b 20 69 3d  aCollSeq); i; i=
99f0: 73 71 6c 69 74 65 48 61 73 68 4e 65 78 74 28 69  sqliteHashNext(i
9a00: 29 29 7b 0a 20 20 20 20 43 6f 6c 6c 53 65 71 20  )){.    CollSeq 
9a10: 2a 70 43 6f 6c 6c 20 3d 20 28 43 6f 6c 6c 53 65  *pColl = (CollSe
9a20: 71 20 2a 29 73 71 6c 69 74 65 48 61 73 68 44 61  q *)sqliteHashDa
9a30: 74 61 28 69 29 3b 0a 20 20 20 20 2f 2a 20 49 6e  ta(i);.    /* In
9a40: 76 6f 6b 65 20 61 6e 79 20 64 65 73 74 72 75 63  voke any destruc
9a50: 74 6f 72 73 20 72 65 67 69 73 74 65 72 65 64 20  tors registered 
9a60: 66 6f 72 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  for collation se
9a70: 71 75 65 6e 63 65 20 75 73 65 72 20 64 61 74 61  quence user data
9a80: 2e 20 2a 2f 0a 20 20 20 20 66 6f 72 28 6a 3d 30  . */.    for(j=0
9a90: 3b 20 6a 3c 33 3b 20 6a 2b 2b 29 7b 0a 20 20 20  ; j<3; j++){.   
9aa0: 20 20 20 69 66 28 20 70 43 6f 6c 6c 5b 6a 5d 2e     if( pColl[j].
9ab0: 78 44 65 6c 20 29 7b 0a 20 20 20 20 20 20 20 20  xDel ){.        
9ac0: 70 43 6f 6c 6c 5b 6a 5d 2e 78 44 65 6c 28 70 43  pColl[j].xDel(pC
9ad0: 6f 6c 6c 5b 6a 5d 2e 70 55 73 65 72 29 3b 0a 20  oll[j].pUser);. 
9ae0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
9af0: 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
9b00: 62 2c 20 70 43 6f 6c 6c 29 3b 0a 20 20 7d 0a 20  b, pColl);.  }. 
9b10: 20 73 71 6c 69 74 65 33 48 61 73 68 43 6c 65 61   sqlite3HashClea
9b20: 72 28 26 64 62 2d 3e 61 43 6f 6c 6c 53 65 71 29  r(&db->aCollSeq)
9b30: 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
9b40: 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
9b50: 4c 45 0a 20 20 66 6f 72 28 69 3d 73 71 6c 69 74  LE.  for(i=sqlit
9b60: 65 48 61 73 68 46 69 72 73 74 28 26 64 62 2d 3e  eHashFirst(&db->
9b70: 61 4d 6f 64 75 6c 65 29 3b 20 69 3b 20 69 3d 73  aModule); i; i=s
9b80: 71 6c 69 74 65 48 61 73 68 4e 65 78 74 28 69 29  qliteHashNext(i)
9b90: 29 7b 0a 20 20 20 20 4d 6f 64 75 6c 65 20 2a 70  ){.    Module *p
9ba0: 4d 6f 64 20 3d 20 28 4d 6f 64 75 6c 65 20 2a 29  Mod = (Module *)
9bb0: 73 71 6c 69 74 65 48 61 73 68 44 61 74 61 28 69  sqliteHashData(i
9bc0: 29 3b 0a 20 20 20 20 69 66 28 20 70 4d 6f 64 2d  );.    if( pMod-
9bd0: 3e 78 44 65 73 74 72 6f 79 20 29 7b 0a 20 20 20  >xDestroy ){.   
9be0: 20 20 20 70 4d 6f 64 2d 3e 78 44 65 73 74 72 6f     pMod->xDestro
9bf0: 79 28 70 4d 6f 64 2d 3e 70 41 75 78 29 3b 0a 20  y(pMod->pAux);. 
9c00: 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33     }.    sqlite3
9c10: 56 74 61 62 45 70 6f 6e 79 6d 6f 75 73 54 61 62  VtabEponymousTab
9c20: 6c 65 43 6c 65 61 72 28 64 62 2c 20 70 4d 6f 64  leClear(db, pMod
9c30: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 44 62  );.    sqlite3Db
9c40: 46 72 65 65 28 64 62 2c 20 70 4d 6f 64 29 3b 0a  Free(db, pMod);.
9c50: 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 48 61 73    }.  sqlite3Has
9c60: 68 43 6c 65 61 72 28 26 64 62 2d 3e 61 4d 6f 64  hClear(&db->aMod
9c70: 75 6c 65 29 3b 0a 23 65 6e 64 69 66 0a 0a 20 20  ule);.#endif..  
9c80: 73 71 6c 69 74 65 33 45 72 72 6f 72 28 64 62 2c  sqlite3Error(db,
9c90: 20 53 51 4c 49 54 45 5f 4f 4b 29 3b 20 2f 2a 20   SQLITE_OK); /* 
9ca0: 44 65 61 6c 6c 6f 63 61 74 65 73 20 61 6e 79 20  Deallocates any 
9cb0: 63 61 63 68 65 64 20 65 72 72 6f 72 20 73 74 72  cached error str
9cc0: 69 6e 67 73 2e 20 2a 2f 0a 20 20 73 71 6c 69 74  ings. */.  sqlit
9cd0: 65 33 56 61 6c 75 65 46 72 65 65 28 64 62 2d 3e  e3ValueFree(db->
9ce0: 70 45 72 72 29 3b 0a 20 20 73 71 6c 69 74 65 33  pErr);.  sqlite3
9cf0: 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73 28  CloseExtensions(
9d00: 64 62 29 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f  db);.#if SQLITE_
9d10: 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43 41 54  USER_AUTHENTICAT
9d20: 49 4f 4e 0a 20 20 73 71 6c 69 74 65 33 5f 66 72  ION.  sqlite3_fr
9d30: 65 65 28 64 62 2d 3e 61 75 74 68 2e 7a 41 75 74  ee(db->auth.zAut
9d40: 68 55 73 65 72 29 3b 0a 20 20 73 71 6c 69 74 65  hUser);.  sqlite
9d50: 33 5f 66 72 65 65 28 64 62 2d 3e 61 75 74 68 2e  3_free(db->auth.
9d60: 7a 41 75 74 68 50 57 29 3b 0a 23 65 6e 64 69 66  zAuthPW);.#endif
9d70: 0a 0a 20 20 64 62 2d 3e 6d 61 67 69 63 20 3d 20  ..  db->magic = 
9d80: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 45 52 52  SQLITE_MAGIC_ERR
9d90: 4f 52 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 74 65  OR;..  /* The te
9da0: 6d 70 2d 64 61 74 61 62 61 73 65 20 73 63 68 65  mp-database sche
9db0: 6d 61 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20  ma is allocated 
9dc0: 64 69 66 66 65 72 65 6e 74 6c 79 20 66 72 6f 6d  differently from
9dd0: 20 74 68 65 20 6f 74 68 65 72 20 73 63 68 65 6d   the other schem
9de0: 61 0a 20 20 2a 2a 20 6f 62 6a 65 63 74 73 20 28  a.  ** objects (
9df0: 75 73 69 6e 67 20 73 71 6c 69 74 65 4d 61 6c 6c  using sqliteMall
9e00: 6f 63 28 29 20 64 69 72 65 63 74 6c 79 2c 20 69  oc() directly, i
9e10: 6e 73 74 65 61 64 20 6f 66 20 73 71 6c 69 74 65  nstead of sqlite
9e20: 33 42 74 72 65 65 53 63 68 65 6d 61 28 29 29 2e  3BtreeSchema()).
9e30: 0a 20 20 2a 2a 20 53 6f 20 69 74 20 6e 65 65 64  .  ** So it need
9e40: 73 20 74 6f 20 62 65 20 66 72 65 65 64 20 68 65  s to be freed he
9e50: 72 65 2e 20 54 6f 64 6f 3a 20 57 68 79 20 6e 6f  re. Todo: Why no
9e60: 74 20 72 6f 6c 6c 20 74 68 65 20 74 65 6d 70 20  t roll the temp 
9e70: 73 63 68 65 6d 61 20 69 6e 74 6f 0a 20 20 2a 2a  schema into.  **
9e80: 20 74 68 65 20 73 61 6d 65 20 73 71 6c 69 74 65   the same sqlite
9e90: 4d 61 6c 6c 6f 63 28 29 20 61 73 20 74 68 65 20  Malloc() as the 
9ea0: 6f 6e 65 20 74 68 61 74 20 61 6c 6c 6f 63 61 74  one that allocat
9eb0: 65 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  es the database 
9ec0: 0a 20 20 2a 2a 20 73 74 72 75 63 74 75 72 65 3f  .  ** structure?
9ed0: 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 44  .  */.  sqlite3D
9ee0: 62 46 72 65 65 28 64 62 2c 20 64 62 2d 3e 61 44  bFree(db, db->aD
9ef0: 62 5b 31 5d 2e 70 53 63 68 65 6d 61 29 3b 0a 20  b[1].pSchema);. 
9f00: 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c   sqlite3_mutex_l
9f10: 65 61 76 65 28 64 62 2d 3e 6d 75 74 65 78 29 3b  eave(db->mutex);
9f20: 0a 20 20 64 62 2d 3e 6d 61 67 69 63 20 3d 20 53  .  db->magic = S
9f30: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53  QLITE_MAGIC_CLOS
9f40: 45 44 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75  ED;.  sqlite3_mu
9f50: 74 65 78 5f 66 72 65 65 28 64 62 2d 3e 6d 75 74  tex_free(db->mut
9f60: 65 78 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64  ex);.  assert( d
9f70: 62 2d 3e 6c 6f 6f 6b 61 73 69 64 65 2e 6e 4f 75  b->lookaside.nOu
9f80: 74 3d 3d 30 20 29 3b 20 20 2f 2a 20 46 61 69 6c  t==0 );  /* Fail
9f90: 73 20 6f 6e 20 61 20 6c 6f 6f 6b 61 73 69 64 65  s on a lookaside
9fa0: 20 6d 65 6d 6f 72 79 20 6c 65 61 6b 20 2a 2f 0a   memory leak */.
9fb0: 20 20 69 66 28 20 64 62 2d 3e 6c 6f 6f 6b 61 73    if( db->lookas
9fc0: 69 64 65 2e 62 4d 61 6c 6c 6f 63 65 64 20 29 7b  ide.bMalloced ){
9fd0: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65  .    sqlite3_fre
9fe0: 65 28 64 62 2d 3e 6c 6f 6f 6b 61 73 69 64 65 2e  e(db->lookaside.
9ff0: 70 53 74 61 72 74 29 3b 0a 20 20 7d 0a 23 69 66  pStart);.  }.#if
a000: 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
a010: 45 5f 53 51 4c 52 52 0a 20 20 53 52 52 65 63 43  E_SQLRR.  SRRecC
a020: 6c 6f 73 65 28 64 62 29 3b 0a 23 65 6e 64 69 66  lose(db);.#endif
a030: 0a 20 20 0a 20 20 73 71 6c 69 74 65 33 5f 66 72  .  .  sqlite3_fr
a040: 65 65 28 64 62 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  ee(db);.}../*.**
a050: 20 52 6f 6c 6c 62 61 63 6b 20 61 6c 6c 20 64 61   Rollback all da
a060: 74 61 62 61 73 65 20 66 69 6c 65 73 2e 20 20 49  tabase files.  I
a070: 66 20 74 72 69 70 43 6f 64 65 20 69 73 20 6e 6f  f tripCode is no
a080: 74 20 53 51 4c 49 54 45 5f 4f 4b 2c 20 74 68 65  t SQLITE_OK, the
a090: 6e 0a 2a 2a 20 61 6e 79 20 77 72 69 74 65 20 63  n.** any write c
a0a0: 75 72 73 6f 72 73 20 61 72 65 20 69 6e 76 61 6c  ursors are inval
a0b0: 69 64 61 74 65 64 20 28 22 74 72 69 70 70 65 64  idated ("tripped
a0c0: 22 20 2d 20 61 73 20 69 6e 20 22 74 72 69 70 70  " - as in "tripp
a0d0: 69 6e 67 20 61 20 63 69 72 63 75 69 74 0a 2a 2a  ing a circuit.**
a0e0: 20 62 72 65 61 6b 65 72 22 29 20 61 6e 64 20 6d   breaker") and m
a0f0: 61 64 65 20 74 6f 20 72 65 74 75 72 6e 20 74 72  ade to return tr
a100: 69 70 43 6f 64 65 20 69 66 20 74 68 65 72 65 20  ipCode if there 
a110: 61 72 65 20 61 6e 79 20 66 75 72 74 68 65 72 0a  are any further.
a120: 2a 2a 20 61 74 74 65 6d 70 74 73 20 74 6f 20 75  ** attempts to u
a130: 73 65 20 74 68 61 74 20 63 75 72 73 6f 72 2e 20  se that cursor. 
a140: 20 52 65 61 64 20 63 75 72 73 6f 72 73 20 72 65   Read cursors re
a150: 6d 61 69 6e 20 6f 70 65 6e 20 61 6e 64 20 76 61  main open and va
a160: 6c 69 64 0a 2a 2a 20 62 75 74 20 61 72 65 20 22  lid.** but are "
a170: 73 61 76 65 64 22 20 69 6e 20 63 61 73 65 20 74  saved" in case t
a180: 68 65 20 74 61 62 6c 65 20 70 61 67 65 73 20 61  he table pages a
a190: 72 65 20 6d 6f 76 65 64 20 61 72 6f 75 6e 64 2e  re moved around.
a1a0: 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  .*/.void sqlite3
a1b0: 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 73 71 6c 69  RollbackAll(sqli
a1c0: 74 65 33 20 2a 64 62 2c 20 69 6e 74 20 74 72 69  te3 *db, int tri
a1d0: 70 43 6f 64 65 29 7b 0a 20 20 69 6e 74 20 69 3b  pCode){.  int i;
a1e0: 0a 20 20 69 6e 74 20 69 6e 54 72 61 6e 73 20 3d  .  int inTrans =
a1f0: 20 30 3b 0a 20 20 69 6e 74 20 73 63 68 65 6d 61   0;.  int schema
a200: 43 68 61 6e 67 65 3b 0a 20 20 61 73 73 65 72 74  Change;.  assert
a210: 28 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f  ( sqlite3_mutex_
a220: 68 65 6c 64 28 64 62 2d 3e 6d 75 74 65 78 29 20  held(db->mutex) 
a230: 29 3b 0a 20 20 73 71 6c 69 74 65 33 42 65 67 69  );.  sqlite3Begi
a240: 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b  nBenignMalloc();
a250: 0a 0a 20 20 2f 2a 20 4f 62 74 61 69 6e 20 61 6c  ..  /* Obtain al
a260: 6c 20 62 2d 74 72 65 65 20 6d 75 74 65 78 65 73  l b-tree mutexes
a270: 20 62 65 66 6f 72 65 20 6d 61 6b 69 6e 67 20 61   before making a
a280: 6e 79 20 63 61 6c 6c 73 20 74 6f 20 42 74 72 65  ny calls to Btre
a290: 65 52 6f 6c 6c 62 61 63 6b 28 29 2e 20 0a 20 20  eRollback(). .  
a2a0: 2a 2a 20 54 68 69 73 20 69 73 20 69 6d 70 6f 72  ** This is impor
a2b0: 74 61 6e 74 20 69 6e 20 63 61 73 65 20 74 68 65  tant in case the
a2c0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 62 65 69   transaction bei
a2d0: 6e 67 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20 68  ng rolled back h
a2e0: 61 73 0a 20 20 2a 2a 20 6d 6f 64 69 66 69 65 64  as.  ** modified
a2f0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
a300: 68 65 6d 61 2e 20 49 66 20 74 68 65 20 62 2d 74  hema. If the b-t
a310: 72 65 65 20 6d 75 74 65 78 65 73 20 61 72 65 20  ree mutexes are 
a320: 6e 6f 74 20 74 61 6b 65 6e 0a 20 20 2a 2a 20 68  not taken.  ** h
a330: 65 72 65 2c 20 74 68 65 6e 20 61 6e 6f 74 68 65  ere, then anothe
a340: 72 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 63  r shared-cache c
a350: 6f 6e 6e 65 63 74 69 6f 6e 20 6d 69 67 68 74 20  onnection might 
a360: 73 6e 65 61 6b 20 69 6e 20 62 65 74 77 65 65 6e  sneak in between
a370: 0a 20 20 2a 2a 20 74 68 65 20 64 61 74 61 62 61  .  ** the databa
a380: 73 65 20 72 6f 6c 6c 62 61 63 6b 20 61 6e 64 20  se rollback and 
a390: 73 63 68 65 6d 61 20 72 65 73 65 74 2c 20 77 68  schema reset, wh
a3a0: 69 63 68 20 63 61 6e 20 63 61 75 73 65 20 66 61  ich can cause fa
a3b0: 6c 73 65 0a 20 20 2a 2a 20 63 6f 72 72 75 70 74  lse.  ** corrupt
a3c0: 69 6f 6e 20 72 65 70 6f 72 74 73 20 69 6e 20 73  ion reports in s
a3d0: 6f 6d 65 20 63 61 73 65 73 2e 20 20 2a 2f 0a 20  ome cases.  */. 
a3e0: 20 73 71 6c 69 74 65 33 42 74 72 65 65 45 6e 74   sqlite3BtreeEnt
a3f0: 65 72 41 6c 6c 28 64 62 29 3b 0a 20 20 73 63 68  erAll(db);.  sch
a400: 65 6d 61 43 68 61 6e 67 65 20 3d 20 28 64 62 2d  emaChange = (db-
a410: 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f  >flags & SQLITE_
a420: 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 29 21 3d  InternChanges)!=
a430: 30 20 26 26 20 64 62 2d 3e 69 6e 69 74 2e 62 75  0 && db->init.bu
a440: 73 79 3d 3d 30 3b 0a 0a 20 20 66 6f 72 28 69 3d  sy==0;..  for(i=
a450: 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b  0; i<db->nDb; i+
a460: 2b 29 7b 0a 20 20 20 20 42 74 72 65 65 20 2a 70  +){.    Btree *p
a470: 20 3d 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42   = db->aDb[i].pB
a480: 74 3b 0a 20 20 20 20 69 66 28 20 70 20 29 7b 0a  t;.    if( p ){.
a490: 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
a4a0: 33 42 74 72 65 65 49 73 49 6e 54 72 61 6e 73 28  3BtreeIsInTrans(
a4b0: 70 29 20 29 7b 0a 20 20 20 20 20 20 20 20 69 6e  p) ){.        in
a4c0: 54 72 61 6e 73 20 3d 20 31 3b 0a 20 20 20 20 20  Trans = 1;.     
a4d0: 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33   }.      sqlite3
a4e0: 42 74 72 65 65 52 6f 6c 6c 62 61 63 6b 28 70 2c  BtreeRollback(p,
a4f0: 20 74 72 69 70 43 6f 64 65 2c 20 21 73 63 68 65   tripCode, !sche
a500: 6d 61 43 68 61 6e 67 65 29 3b 0a 20 20 20 20 7d  maChange);.    }
a510: 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 56 74  .  }.  sqlite3Vt
a520: 61 62 52 6f 6c 6c 62 61 63 6b 28 64 62 29 3b 0a  abRollback(db);.
a530: 20 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69    sqlite3EndBeni
a540: 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 0a 20 20 69  gnMalloc();..  i
a550: 66 28 20 28 64 62 2d 3e 66 6c 61 67 73 26 53 51  f( (db->flags&SQ
a560: 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67  LITE_InternChang
a570: 65 73 29 21 3d 30 20 26 26 20 64 62 2d 3e 69 6e  es)!=0 && db->in
a580: 69 74 2e 62 75 73 79 3d 3d 30 20 29 7b 0a 20 20  it.busy==0 ){.  
a590: 20 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50    sqlite3ExpireP
a5a0: 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74  reparedStatement
a5b0: 73 28 64 62 29 3b 0a 20 20 20 20 73 71 6c 69 74  s(db);.    sqlit
a5c0: 65 33 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61  e3ResetAllSchema
a5d0: 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 64 62  sOfConnection(db
a5e0: 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33  );.  }.  sqlite3
a5f0: 42 74 72 65 65 4c 65 61 76 65 41 6c 6c 28 64 62  BtreeLeaveAll(db
a600: 29 3b 0a 0a 20 20 2f 2a 20 41 6e 79 20 64 65 66  );..  /* Any def
a610: 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69 6e 74  erred constraint
a620: 20 76 69 6f 6c 61 74 69 6f 6e 73 20 68 61 76 65   violations have
a630: 20 6e 6f 77 20 62 65 65 6e 20 72 65 73 6f 6c 76   now been resolv
a640: 65 64 2e 20 2a 2f 0a 20 20 64 62 2d 3e 6e 44 65  ed. */.  db->nDe
a650: 66 65 72 72 65 64 43 6f 6e 73 20 3d 20 30 3b 0a  ferredCons = 0;.
a660: 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49    db->nDeferredI
a670: 6d 6d 43 6f 6e 73 20 3d 20 30 3b 0a 20 20 64 62  mmCons = 0;.  db
a680: 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 53 51 4c 49  ->flags &= ~SQLI
a690: 54 45 5f 44 65 66 65 72 46 4b 73 3b 0a 0a 20 20  TE_DeferFKs;..  
a6a0: 2f 2a 20 49 66 20 6f 6e 65 20 68 61 73 20 62 65  /* If one has be
a6b0: 65 6e 20 63 6f 6e 66 69 67 75 72 65 64 2c 20 69  en configured, i
a6c0: 6e 76 6f 6b 65 20 74 68 65 20 72 6f 6c 6c 62 61  nvoke the rollba
a6d0: 63 6b 2d 68 6f 6f 6b 20 63 61 6c 6c 62 61 63 6b  ck-hook callback
a6e0: 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e 78 52   */.  if( db->xR
a6f0: 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 20  ollbackCallback 
a700: 26 26 20 28 69 6e 54 72 61 6e 73 20 7c 7c 20 21  && (inTrans || !
a710: 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 29 20  db->autoCommit) 
a720: 29 7b 0a 20 20 20 20 64 62 2d 3e 78 52 6f 6c 6c  ){.    db->xRoll
a730: 62 61 63 6b 43 61 6c 6c 62 61 63 6b 28 64 62 2d  backCallback(db-
a740: 3e 70 52 6f 6c 6c 62 61 63 6b 41 72 67 29 3b 0a  >pRollbackArg);.
a750: 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74    }.}../*.** Ret
a760: 75 72 6e 20 61 20 73 74 61 74 69 63 20 73 74 72  urn a static str
a770: 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ing containing t
a780: 68 65 20 6e 61 6d 65 20 63 6f 72 72 65 73 70 6f  he name correspo
a790: 6e 64 69 6e 67 20 74 6f 20 74 68 65 20 65 72 72  nding to the err
a7a0: 6f 72 20 63 6f 64 65 0a 2a 2a 20 73 70 65 63 69  or code.** speci
a7b0: 66 69 65 64 20 69 6e 20 74 68 65 20 61 72 67 75  fied in the argu
a7c0: 6d 65 6e 74 2e 0a 2a 2f 0a 23 69 66 20 64 65 66  ment..*/.#if def
a7d0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4e 45 45 44  ined(SQLITE_NEED
a7e0: 5f 45 52 52 5f 4e 41 4d 45 29 0a 63 6f 6e 73 74  _ERR_NAME).const
a7f0: 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 45 72   char *sqlite3Er
a800: 72 4e 61 6d 65 28 69 6e 74 20 72 63 29 7b 0a 20  rName(int rc){. 
a810: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61   const char *zNa
a820: 6d 65 20 3d 20 30 3b 0a 20 20 69 6e 74 20 69 2c  me = 0;.  int i,
a830: 20 6f 72 69 67 52 63 20 3d 20 72 63 3b 0a 20 20   origRc = rc;.  
a840: 66 6f 72 28 69 3d 30 3b 20 69 3c 32 20 26 26 20  for(i=0; i<2 && 
a850: 7a 4e 61 6d 65 3d 3d 30 3b 20 69 2b 2b 2c 20 72  zName==0; i++, r
a860: 63 20 26 3d 20 30 78 66 66 29 7b 0a 20 20 20 20  c &= 0xff){.    
a870: 73 77 69 74 63 68 28 20 72 63 20 29 7b 0a 20 20  switch( rc ){.  
a880: 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
a890: 4f 4b 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  OK:             
a8a0: 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c      zName = "SQL
a8b0: 49 54 45 5f 4f 4b 22 3b 20 20 20 20 20 20 20 20  ITE_OK";        
a8c0: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
a8d0: 20 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45       case SQLITE
a8e0: 5f 45 52 52 4f 52 3a 20 20 20 20 20 20 20 20 20  _ERROR:         
a8f0: 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51       zName = "SQ
a900: 4c 49 54 45 5f 45 52 52 4f 52 22 3b 20 20 20 20  LITE_ERROR";    
a910: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
a920: 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 49 54        case SQLIT
a930: 45 5f 49 4e 54 45 52 4e 41 4c 3a 20 20 20 20 20  E_INTERNAL:     
a940: 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53        zName = "S
a950: 51 4c 49 54 45 5f 49 4e 54 45 52 4e 41 4c 22 3b  QLITE_INTERNAL";
a960: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
a970: 0a 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 49  .      case SQLI
a980: 54 45 5f 50 45 52 4d 3a 20 20 20 20 20 20 20 20  TE_PERM:        
a990: 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22         zName = "
a9a0: 53 51 4c 49 54 45 5f 50 45 52 4d 22 3b 20 20 20  SQLITE_PERM";   
a9b0: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
a9c0: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 53 51 4c  ;.      case SQL
a9d0: 49 54 45 5f 41 42 4f 52 54 3a 20 20 20 20 20 20  ITE_ABORT:      
a9e0: 20 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20          zName = 
a9f0: 22 53 51 4c 49 54 45 5f 41 42 4f 52 54 22 3b 20  "SQLITE_ABORT"; 
aa00: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
aa10: 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 53 51  k;.      case SQ
aa20: 4c 49 54 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42  LITE_ABORT_ROLLB
aa30: 41 43 4b 3a 20 20 20 20 20 7a 4e 61 6d 65 20 3d  ACK:     zName =
aa40: 20 22 53 51 4c 49 54 45 5f 41 42 4f 52 54 5f 52   "SQLITE_ABORT_R
aa50: 4f 4c 4c 42 41 43 4b 22 3b 20 20 20 20 62 72 65  OLLBACK";    bre
aa60: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 53  ak;.      case S
aa70: 51 4c 49 54 45 5f 42 55 53 59 3a 20 20 20 20 20  QLITE_BUSY:     
aa80: 20 20 20 20 20 20 20 20 20 20 7a 4e 61 6d 65 20            zName 
aa90: 3d 20 22 53 51 4c 49 54 45 5f 42 55 53 59 22 3b  = "SQLITE_BUSY";
aaa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72                br
aab0: 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20  eak;.      case 
aac0: 53 51 4c 49 54 45 5f 42 55 53 59 5f 52 45 43 4f  SQLITE_BUSY_RECO
aad0: 56 45 52 59 3a 20 20 20 20 20 20 7a 4e 61 6d 65  VERY:      zName
aae0: 20 3d 20 22 53 51 4c 49 54 45 5f 42 55 53 59 5f   = "SQLITE_BUSY_
aaf0: 52 45 43 4f 56 45 52 59 22 3b 20 20 20 20 20 62  RECOVERY";     b
ab00: 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65  reak;.      case
ab10: 20 53 51 4c 49 54 45 5f 42 55 53 59 5f 53 4e 41   SQLITE_BUSY_SNA
ab20: 50 53 48 4f 54 3a 20 20 20 20 20 20 7a 4e 61 6d  PSHOT:      zNam
ab30: 65 20 3d 20 22 53 51 4c 49 54 45 5f 42 55 53 59  e = "SQLITE_BUSY
ab40: 5f 53 4e 41 50 53 48 4f 54 22 3b 20 20 20 20 20  _SNAPSHOT";     
ab50: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73  break;.      cas
ab60: 65 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 3a  e SQLITE_LOCKED:
ab70: 20 20 20 20 20 20 20 20 20 20 20 20 20 7a 4e 61               zNa
ab80: 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 4c 4f 43  me = "SQLITE_LOC
ab90: 4b 45 44 22 3b 20 20 20 20 20 20 20 20 20 20 20  KED";           
aba0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
abb0: 73 65 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44  se SQLITE_LOCKED
abc0: 5f 53 48 41 52 45 44 43 41 43 48 45 3a 20 7a 4e  _SHAREDCACHE: zN
abd0: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 4c 4f  ame = "SQLITE_LO
abe0: 43 4b 45 44 5f 53 48 41 52 45 44 43 41 43 48 45  CKED_SHAREDCACHE
abf0: 22 3b 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63  ";break;.      c
ac00: 61 73 65 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  ase SQLITE_NOMEM
ac10: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7a  :              z
ac20: 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 4e  Name = "SQLITE_N
ac30: 4f 4d 45 4d 22 3b 20 20 20 20 20 20 20 20 20 20  OMEM";          
ac40: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
ac50: 63 61 73 65 20 53 51 4c 49 54 45 5f 52 45 41 44  case SQLITE_READ
ac60: 4f 4e 4c 59 3a 20 20 20 20 20 20 20 20 20 20 20  ONLY:           
ac70: 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f  zName = "SQLITE_
ac80: 52 45 41 44 4f 4e 4c 59 22 3b 20 20 20 20 20 20  READONLY";      
ac90: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
aca0: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 52 45 41   case SQLITE_REA
acb0: 44 4f 4e 4c 59 5f 52 45 43 4f 56 45 52 59 3a 20  DONLY_RECOVERY: 
acc0: 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45   zName = "SQLITE
acd0: 5f 52 45 41 44 4f 4e 4c 59 5f 52 45 43 4f 56 45  _READONLY_RECOVE
ace0: 52 59 22 3b 20 62 72 65 61 6b 3b 0a 20 20 20 20  RY"; break;.    
acf0: 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 52 45    case SQLITE_RE
ad00: 41 44 4f 4e 4c 59 5f 43 41 4e 54 4c 4f 43 4b 3a  ADONLY_CANTLOCK:
ad10: 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54    zName = "SQLIT
ad20: 45 5f 52 45 41 44 4f 4e 4c 59 5f 43 41 4e 54 4c  E_READONLY_CANTL
ad30: 4f 43 4b 22 3b 20 62 72 65 61 6b 3b 0a 20 20 20  OCK"; break;.   
ad40: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 52     case SQLITE_R
ad50: 45 41 44 4f 4e 4c 59 5f 52 4f 4c 4c 42 41 43 4b  EADONLY_ROLLBACK
ad60: 3a 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49  :  zName = "SQLI
ad70: 54 45 5f 52 45 41 44 4f 4e 4c 59 5f 52 4f 4c 4c  TE_READONLY_ROLL
ad80: 42 41 43 4b 22 3b 20 62 72 65 61 6b 3b 0a 20 20  BACK"; break;.  
ad90: 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
ada0: 52 45 41 44 4f 4e 4c 59 5f 44 42 4d 4f 56 45 44  READONLY_DBMOVED
adb0: 3a 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c  :   zName = "SQL
adc0: 49 54 45 5f 52 45 41 44 4f 4e 4c 59 5f 44 42 4d  ITE_READONLY_DBM
add0: 4f 56 45 44 22 3b 20 20 62 72 65 61 6b 3b 0a 20  OVED";  break;. 
ade0: 20 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45       case SQLITE
adf0: 5f 49 4e 54 45 52 52 55 50 54 3a 20 20 20 20 20  _INTERRUPT:     
ae00: 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51       zName = "SQ
ae10: 4c 49 54 45 5f 49 4e 54 45 52 52 55 50 54 22 3b  LITE_INTERRUPT";
ae20: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
ae30: 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 49 54        case SQLIT
ae40: 45 5f 49 4f 45 52 52 3a 20 20 20 20 20 20 20 20  E_IOERR:        
ae50: 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53        zName = "S
ae60: 51 4c 49 54 45 5f 49 4f 45 52 52 22 3b 20 20 20  QLITE_IOERR";   
ae70: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
ae80: 0a 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 49  .      case SQLI
ae90: 54 45 5f 49 4f 45 52 52 5f 52 45 41 44 3a 20 20  TE_IOERR_READ:  
aea0: 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22         zName = "
aeb0: 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 52 45 41  SQLITE_IOERR_REA
aec0: 44 22 3b 20 20 20 20 20 20 20 20 62 72 65 61 6b  D";        break
aed0: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 53 51 4c  ;.      case SQL
aee0: 49 54 45 5f 49 4f 45 52 52 5f 53 48 4f 52 54 5f  ITE_IOERR_SHORT_
aef0: 52 45 41 44 3a 20 20 20 7a 4e 61 6d 65 20 3d 20  READ:   zName = 
af00: 22 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 53 48  "SQLITE_IOERR_SH
af10: 4f 52 54 5f 52 45 41 44 22 3b 20 20 62 72 65 61  ORT_READ";  brea
af20: 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 53 51  k;.      case SQ
af30: 4c 49 54 45 5f 49 4f 45 52 52 5f 57 52 49 54 45  LITE_IOERR_WRITE
af40: 3a 20 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d  :        zName =
af50: 20 22 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 57   "SQLITE_IOERR_W
af60: 52 49 54 45 22 3b 20 20 20 20 20 20 20 62 72 65  RITE";       bre
af70: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 53  ak;.      case S
af80: 51 4c 49 54 45 5f 49 4f 45 52 52 5f 46 53 59 4e  QLITE_IOERR_FSYN
af90: 43 3a 20 20 20 20 20 20 20 20 7a 4e 61 6d 65 20  C:        zName 
afa0: 3d 20 22 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f  = "SQLITE_IOERR_
afb0: 46 53 59 4e 43 22 3b 20 20 20 20 20 20 20 62 72  FSYNC";       br
afc0: 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20  eak;.      case 
afd0: 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 44 49 52  SQLITE_IOERR_DIR
afe0: 5f 46 53 59 4e 43 3a 20 20 20 20 7a 4e 61 6d 65  _FSYNC:    zName
aff0: 20 3d 20 22 53 51 4c 49 54 45 5f 49 4f 45 52 52   = "SQLITE_IOERR
b000: 5f 44 49 52 5f 46 53 59 4e 43 22 3b 20 20 20 62  _DIR_FSYNC";   b
b010: 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65  reak;.      case
b020: 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 54 52   SQLITE_IOERR_TR
b030: 55 4e 43 41 54 45 3a 20 20 20 20 20 7a 4e 61 6d  UNCATE:     zNam
b040: 65 20 3d 20 22 53 51 4c 49 54 45 5f 49 4f 45 52  e = "SQLITE_IOER
b050: 52 5f 54 52 55 4e 43 41 54 45 22 3b 20 20 20 20  R_TRUNCATE";    
b060: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73  break;.      cas
b070: 65 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 46  e SQLITE_IOERR_F
b080: 53 54 41 54 3a 20 20 20 20 20 20 20 20 7a 4e 61  STAT:        zNa
b090: 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 49 4f 45  me = "SQLITE_IOE
b0a0: 52 52 5f 46 53 54 41 54 22 3b 20 20 20 20 20 20  RR_FSTAT";      
b0b0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
b0c0: 73 65 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f  se SQLITE_IOERR_
b0d0: 55 4e 4c 4f 43 4b 3a 20 20 20 20 20 20 20 7a 4e  UNLOCK:       zN
b0e0: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 49 4f  ame = "SQLITE_IO
b0f0: 45 52 52 5f 55 4e 4c 4f 43 4b 22 3b 20 20 20 20  ERR_UNLOCK";    
b100: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63    break;.      c
b110: 61 73 65 20 53 51 4c 49 54 45 5f 49 4f 45 52 52  ase SQLITE_IOERR
b120: 5f 52 44 4c 4f 43 4b 3a 20 20 20 20 20 20 20 7a  _RDLOCK:       z
b130: 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 49  Name = "SQLITE_I
b140: 4f 45 52 52 5f 52 44 4c 4f 43 4b 22 3b 20 20 20  OERR_RDLOCK";   
b150: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
b160: 63 61 73 65 20 53 51 4c 49 54 45 5f 49 4f 45 52  case SQLITE_IOER
b170: 52 5f 44 45 4c 45 54 45 3a 20 20 20 20 20 20 20  R_DELETE:       
b180: 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f  zName = "SQLITE_
b190: 49 4f 45 52 52 5f 44 45 4c 45 54 45 22 3b 20 20  IOERR_DELETE";  
b1a0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
b1b0: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 49 4f 45   case SQLITE_IOE
b1c0: 52 52 5f 4e 4f 4d 45 4d 3a 20 20 20 20 20 20 20  RR_NOMEM:       
b1d0: 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45   zName = "SQLITE
b1e0: 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 22 3b 20 20  _IOERR_NOMEM";  
b1f0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
b200: 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 49 4f    case SQLITE_IO
b210: 45 52 52 5f 41 43 43 45 53 53 3a 20 20 20 20 20  ERR_ACCESS:     
b220: 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54    zName = "SQLIT
b230: 45 5f 49 4f 45 52 52 5f 41 43 43 45 53 53 22 3b  E_IOERR_ACCESS";
b240: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
b250: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 49     case SQLITE_I
b260: 4f 45 52 52 5f 43 48 45 43 4b 52 45 53 45 52 56  OERR_CHECKRESERV
b270: 45 44 4c 4f 43 4b 3a 0a 20 20 20 20 20 20 20 20  EDLOCK:.        
b280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b290: 20 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20          zName = 
b2a0: 22 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 43 48  "SQLITE_IOERR_CH
b2b0: 45 43 4b 52 45 53 45 52 56 45 44 4c 4f 43 4b 22  ECKRESERVEDLOCK"
b2c0: 3b 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63  ; break;.      c
b2d0: 61 73 65 20 53 51 4c 49 54 45 5f 49 4f 45 52 52  ase SQLITE_IOERR
b2e0: 5f 4c 4f 43 4b 3a 20 20 20 20 20 20 20 20 20 7a  _LOCK:         z
b2f0: 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 49  Name = "SQLITE_I
b300: 4f 45 52 52 5f 4c 4f 43 4b 22 3b 20 20 20 20 20  OERR_LOCK";     
b310: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
b320: 63 61 73 65 20 53 51 4c 49 54 45 5f 49 4f 45 52  case SQLITE_IOER
b330: 52 5f 43 4c 4f 53 45 3a 20 20 20 20 20 20 20 20  R_CLOSE:        
b340: 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f  zName = "SQLITE_
b350: 49 4f 45 52 52 5f 43 4c 4f 53 45 22 3b 20 20 20  IOERR_CLOSE";   
b360: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
b370: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 49 4f 45   case SQLITE_IOE
b380: 52 52 5f 44 49 52 5f 43 4c 4f 53 45 3a 20 20 20  RR_DIR_CLOSE:   
b390: 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45   zName = "SQLITE
b3a0: 5f 49 4f 45 52 52 5f 44 49 52 5f 43 4c 4f 53 45  _IOERR_DIR_CLOSE
b3b0: 22 3b 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20  ";   break;.    
b3c0: 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 49 4f    case SQLITE_IO
b3d0: 45 52 52 5f 53 48 4d 4f 50 45 4e 3a 20 20 20 20  ERR_SHMOPEN:    
b3e0: 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54    zName = "SQLIT
b3f0: 45 5f 49 4f 45 52 52 5f 53 48 4d 4f 50 45 4e 22  E_IOERR_SHMOPEN"
b400: 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20  ;     break;.   
b410: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 49     case SQLITE_I
b420: 4f 45 52 52 5f 53 48 4d 53 49 5a 45 3a 20 20 20  OERR_SHMSIZE:   
b430: 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49     zName = "SQLI
b440: 54 45 5f 49 4f 45 52 52 5f 53 48 4d 53 49 5a 45  TE_IOERR_SHMSIZE
b450: 22 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  ";     break;.  
b460: 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
b470: 49 4f 45 52 52 5f 53 48 4d 4c 4f 43 4b 3a 20 20  IOERR_SHMLOCK:  
b480: 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c      zName = "SQL
b490: 49 54 45 5f 49 4f 45 52 52 5f 53 48 4d 4c 4f 43  ITE_IOERR_SHMLOC
b4a0: 4b 22 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  K";     break;. 
b4b0: 20 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45       case SQLITE
b4c0: 5f 49 4f 45 52 52 5f 53 48 4d 4d 41 50 3a 20 20  _IOERR_SHMMAP:  
b4d0: 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51       zName = "SQ
b4e0: 4c 49 54 45 5f 49 4f 45 52 52 5f 53 48 4d 4d 41  LITE_IOERR_SHMMA
b4f0: 50 22 3b 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  P";      break;.
b500: 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 49 54        case SQLIT
b510: 45 5f 49 4f 45 52 52 5f 53 45 45 4b 3a 20 20 20  E_IOERR_SEEK:   
b520: 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53        zName = "S
b530: 51 4c 49 54 45 5f 49 4f 45 52 52 5f 53 45 45 4b  QLITE_IOERR_SEEK
b540: 22 3b 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b  ";        break;
b550: 0a 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 49  .      case SQLI
b560: 54 45 5f 49 4f 45 52 52 5f 44 45 4c 45 54 45 5f  TE_IOERR_DELETE_
b570: 4e 4f 45 4e 54 3a 20 7a 4e 61 6d 65 20 3d 20 22  NOENT: zName = "
b580: 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 44 45 4c  SQLITE_IOERR_DEL
b590: 45 54 45 5f 4e 4f 45 4e 54 22 3b 62 72 65 61 6b  ETE_NOENT";break
b5a0: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 53 51 4c  ;.      case SQL
b5b0: 49 54 45 5f 49 4f 45 52 52 5f 4d 4d 41 50 3a 20  ITE_IOERR_MMAP: 
b5c0: 20 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20          zName = 
b5d0: 22 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4d 4d  "SQLITE_IOERR_MM
b5e0: 41 50 22 3b 20 20 20 20 20 20 20 20 62 72 65 61  AP";        brea
b5f0: 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 53 51  k;.      case SQ
b600: 4c 49 54 45 5f 49 4f 45 52 52 5f 47 45 54 54 45  LITE_IOERR_GETTE
b610: 4d 50 50 41 54 48 3a 20 20 7a 4e 61 6d 65 20 3d  MPPATH:  zName =
b620: 20 22 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 47   "SQLITE_IOERR_G
b630: 45 54 54 45 4d 50 50 41 54 48 22 3b 20 62 72 65  ETTEMPPATH"; bre
b640: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 53  ak;.      case S
b650: 51 4c 49 54 45 5f 49 4f 45 52 52 5f 43 4f 4e 56  QLITE_IOERR_CONV
b660: 50 41 54 48 3a 20 20 20 20 20 7a 4e 61 6d 65 20  PATH:     zName 
b670: 3d 20 22 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f  = "SQLITE_IOERR_
b680: 43 4f 4e 56 50 41 54 48 22 3b 20 20 20 20 62 72  CONVPATH";    br
b690: 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20  eak;.      case 
b6a0: 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 3a 20  SQLITE_CORRUPT: 
b6b0: 20 20 20 20 20 20 20 20 20 20 20 7a 4e 61 6d 65             zName
b6c0: 20 3d 20 22 53 51 4c 49 54 45 5f 43 4f 52 52 55   = "SQLITE_CORRU
b6d0: 50 54 22 3b 20 20 20 20 20 20 20 20 20 20 20 62  PT";           b
b6e0: 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65  reak;.      case
b6f0: 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f   SQLITE_CORRUPT_
b700: 56 54 41 42 3a 20 20 20 20 20 20 20 7a 4e 61 6d  VTAB:       zNam
b710: 65 20 3d 20 22 53 51 4c 49 54 45 5f 43 4f 52 52  e = "SQLITE_CORR
b720: 55 50 54 5f 56 54 41 42 22 3b 20 20 20 20 20 20  UPT_VTAB";      
b730: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73  break;.      cas
b740: 65 20 53 51 4c 49 54 45 5f 4e 4f 54 46 4f 55 4e  e SQLITE_NOTFOUN
b750: 44 3a 20 20 20 20 20 20 20 20 20 20 20 7a 4e 61  D:           zNa
b760: 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 4e 4f 54  me = "SQLITE_NOT
b770: 46 4f 55 4e 44 22 3b 20 20 20 20 20 20 20 20 20  FOUND";         
b780: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
b790: 73 65 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3a 20  se SQLITE_FULL: 
b7a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7a 4e                zN
b7b0: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 46 55  ame = "SQLITE_FU
b7c0: 4c 4c 22 3b 20 20 20 20 20 20 20 20 20 20 20 20  LL";            
b7d0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63    break;.      c
b7e0: 61 73 65 20 53 51 4c 49 54 45 5f 43 41 4e 54 4f  ase SQLITE_CANTO
b7f0: 50 45 4e 3a 20 20 20 20 20 20 20 20 20 20 20 7a  PEN:           z
b800: 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 43  Name = "SQLITE_C
b810: 41 4e 54 4f 50 45 4e 22 3b 20 20 20 20 20 20 20  ANTOPEN";       
b820: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
b830: 63 61 73 65 20 53 51 4c 49 54 45 5f 43 41 4e 54  case SQLITE_CANT
b840: 4f 50 45 4e 5f 4e 4f 54 45 4d 50 44 49 52 3a 20  OPEN_NOTEMPDIR: 
b850: 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f  zName = "SQLITE_
b860: 43 41 4e 54 4f 50 45 4e 5f 4e 4f 54 45 4d 50 44  CANTOPEN_NOTEMPD
b870: 49 52 22 3b 62 72 65 61 6b 3b 0a 20 20 20 20 20  IR";break;.     
b880: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 43 41 4e   case SQLITE_CAN
b890: 54 4f 50 45 4e 5f 49 53 44 49 52 3a 20 20 20 20  TOPEN_ISDIR:    
b8a0: 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45   zName = "SQLITE
b8b0: 5f 43 41 4e 54 4f 50 45 4e 5f 49 53 44 49 52 22  _CANTOPEN_ISDIR"
b8c0: 3b 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20  ;    break;.    
b8d0: 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 43 41    case SQLITE_CA
b8e0: 4e 54 4f 50 45 4e 5f 46 55 4c 4c 50 41 54 48 3a  NTOPEN_FULLPATH:
b8f0: 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54    zName = "SQLIT
b900: 45 5f 43 41 4e 54 4f 50 45 4e 5f 46 55 4c 4c 50  E_CANTOPEN_FULLP
b910: 41 54 48 22 3b 20 62 72 65 61 6b 3b 0a 20 20 20  ATH"; break;.   
b920: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 43     case SQLITE_C
b930: 41 4e 54 4f 50 45 4e 5f 43 4f 4e 56 50 41 54 48  ANTOPEN_CONVPATH
b940: 3a 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49  :  zName = "SQLI
b950: 54 45 5f 43 41 4e 54 4f 50 45 4e 5f 43 4f 4e 56  TE_CANTOPEN_CONV
b960: 50 41 54 48 22 3b 20 62 72 65 61 6b 3b 0a 20 20  PATH"; break;.  
b970: 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
b980: 50 52 4f 54 4f 43 4f 4c 3a 20 20 20 20 20 20 20  PROTOCOL:       
b990: 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c      zName = "SQL
b9a0: 49 54 45 5f 50 52 4f 54 4f 43 4f 4c 22 3b 20 20  ITE_PROTOCOL";  
b9b0: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
b9c0: 20 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45       case SQLITE
b9d0: 5f 45 4d 50 54 59 3a 20 20 20 20 20 20 20 20 20  _EMPTY:         
b9e0: 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51       zName = "SQ
b9f0: 4c 49 54 45 5f 45 4d 50 54 59 22 3b 20 20 20 20  LITE_EMPTY";    
ba00: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
ba10: 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 49 54        case SQLIT
ba20: 45 5f 53 43 48 45 4d 41 3a 20 20 20 20 20 20 20  E_SCHEMA:       
ba30: 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53        zName = "S
ba40: 51 4c 49 54 45 5f 53 43 48 45 4d 41 22 3b 20 20  QLITE_SCHEMA";  
ba50: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
ba60: 0a 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 49  .      case SQLI
ba70: 54 45 5f 54 4f 4f 42 49 47 3a 20 20 20 20 20 20  TE_TOOBIG:      
ba80: 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22         zName = "
ba90: 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 22 3b 20  SQLITE_TOOBIG"; 
baa0: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
bab0: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 53 51 4c  ;.      case SQL
bac0: 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 3a 20  ITE_CONSTRAINT: 
bad0: 20 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20          zName = 
bae0: 22 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49  "SQLITE_CONSTRAI
baf0: 4e 54 22 3b 20 20 20 20 20 20 20 20 62 72 65 61  NT";        brea
bb00: 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 53 51  k;.      case SQ
bb10: 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 5f  LITE_CONSTRAINT_
bb20: 55 4e 49 51 55 45 3a 20 20 7a 4e 61 6d 65 20 3d  UNIQUE:  zName =
bb30: 20 22 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41   "SQLITE_CONSTRA
bb40: 49 4e 54 5f 55 4e 49 51 55 45 22 3b 20 62 72 65  INT_UNIQUE"; bre
bb50: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 53  ak;.      case S
bb60: 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54  QLITE_CONSTRAINT
bb70: 5f 54 52 49 47 47 45 52 3a 20 7a 4e 61 6d 65 20  _TRIGGER: zName 
bb80: 3d 20 22 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52  = "SQLITE_CONSTR
bb90: 41 49 4e 54 5f 54 52 49 47 47 45 52 22 3b 62 72  AINT_TRIGGER";br
bba0: 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20  eak;.      case 
bbb0: 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e  SQLITE_CONSTRAIN
bbc0: 54 5f 46 4f 52 45 49 47 4e 4b 45 59 3a 0a 20 20  T_FOREIGNKEY:.  
bbd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bbe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7a 4e                zN
bbf0: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 43 4f  ame = "SQLITE_CO
bc00: 4e 53 54 52 41 49 4e 54 5f 46 4f 52 45 49 47 4e  NSTRAINT_FOREIGN
bc10: 4b 45 59 22 3b 20 20 20 62 72 65 61 6b 3b 0a 20  KEY";   break;. 
bc20: 20 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45       case SQLITE
bc30: 5f 43 4f 4e 53 54 52 41 49 4e 54 5f 43 48 45 43  _CONSTRAINT_CHEC
bc40: 4b 3a 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51  K:   zName = "SQ
bc50: 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 5f  LITE_CONSTRAINT_
bc60: 43 48 45 43 4b 22 3b 20 20 62 72 65 61 6b 3b 0a  CHECK";  break;.
bc70: 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 49 54        case SQLIT
bc80: 45 5f 43 4f 4e 53 54 52 41 49 4e 54 5f 50 52 49  E_CONSTRAINT_PRI
bc90: 4d 41 52 59 4b 45 59 3a 0a 20 20 20 20 20 20 20  MARYKEY:.       
bca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bcb0: 20 20 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d           zName =
bcc0: 20 22 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41   "SQLITE_CONSTRA
bcd0: 49 4e 54 5f 50 52 49 4d 41 52 59 4b 45 59 22 3b  INT_PRIMARYKEY";
bce0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
bcf0: 63 61 73 65 20 53 51 4c 49 54 45 5f 43 4f 4e 53  case SQLITE_CONS
bd00: 54 52 41 49 4e 54 5f 4e 4f 54 4e 55 4c 4c 3a 20  TRAINT_NOTNULL: 
bd10: 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f  zName = "SQLITE_
bd20: 43 4f 4e 53 54 52 41 49 4e 54 5f 4e 4f 54 4e 55  CONSTRAINT_NOTNU
bd30: 4c 4c 22 3b 62 72 65 61 6b 3b 0a 20 20 20 20 20  LL";break;.     
bd40: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 43 4f 4e   case SQLITE_CON
bd50: 53 54 52 41 49 4e 54 5f 43 4f 4d 4d 49 54 48 4f  STRAINT_COMMITHO
bd60: 4f 4b 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20  OK:.            
bd70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bd80: 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c      zName = "SQL
bd90: 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 5f 43  ITE_CONSTRAINT_C
bda0: 4f 4d 4d 49 54 48 4f 4f 4b 22 3b 20 20 20 62 72  OMMITHOOK";   br
bdb0: 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20  eak;.      case 
bdc0: 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e  SQLITE_CONSTRAIN
bdd0: 54 5f 56 54 41 42 3a 20 20 20 20 7a 4e 61 6d 65  T_VTAB:    zName
bde0: 20 3d 20 22 53 51 4c 49 54 45 5f 43 4f 4e 53 54   = "SQLITE_CONST
bdf0: 52 41 49 4e 54 5f 56 54 41 42 22 3b 20 20 20 62  RAINT_VTAB";   b
be00: 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65  reak;.      case
be10: 20 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49   SQLITE_CONSTRAI
be20: 4e 54 5f 46 55 4e 43 54 49 4f 4e 3a 0a 20 20 20  NT_FUNCTION:.   
be30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
be40: 20 20 20 20 20 20 20 20 20 20 20 20 20 7a 4e 61               zNa
be50: 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 43 4f 4e  me = "SQLITE_CON
be60: 53 54 52 41 49 4e 54 5f 46 55 4e 43 54 49 4f 4e  STRAINT_FUNCTION
be70: 22 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  ";     break;.  
be80: 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
be90: 43 4f 4e 53 54 52 41 49 4e 54 5f 52 4f 57 49 44  CONSTRAINT_ROWID
bea0: 3a 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c  :   zName = "SQL
beb0: 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 5f 52  ITE_CONSTRAINT_R
bec0: 4f 57 49 44 22 3b 20 20 62 72 65 61 6b 3b 0a 20  OWID";  break;. 
bed0: 20 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45       case SQLITE
bee0: 5f 4d 49 53 4d 41 54 43 48 3a 20 20 20 20 20 20  _MISMATCH:      
bef0: 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51       zName = "SQ
bf00: 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 22 3b 20  LITE_MISMATCH"; 
bf10: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
bf20: 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 49 54        case SQLIT
bf30: 45 5f 4d 49 53 55 53 45 3a 20 20 20 20 20 20 20  E_MISUSE:       
bf40: 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53        zName = "S
bf50: 51 4c 49 54 45 5f 4d 49 53 55 53 45 22 3b 20 20  QLITE_MISUSE";  
bf60: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
bf70: 0a 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 49  .      case SQLI
bf80: 54 45 5f 4e 4f 4c 46 53 3a 20 20 20 20 20 20 20  TE_NOLFS:       
bf90: 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22         zName = "
bfa0: 53 51 4c 49 54 45 5f 4e 4f 4c 46 53 22 3b 20 20  SQLITE_NOLFS";  
bfb0: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
bfc0: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 53 51 4c  ;.      case SQL
bfd0: 49 54 45 5f 41 55 54 48 3a 20 20 20 20 20 20 20  ITE_AUTH:       
bfe0: 20 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20          zName = 
bff0: 22 53 51 4c 49 54 45 5f 41 55 54 48 22 3b 20 20  "SQLITE_AUTH";  
c000: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
c010: 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 53 51  k;.      case SQ
c020: 4c 49 54 45 5f 46 4f 52 4d 41 54 3a 20 20 20 20  LITE_FORMAT:    
c030: 20 20 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d           zName =
c040: 20 22 53 51 4c 49 54 45 5f 46 4f 52 4d 41 54 22   "SQLITE_FORMAT"
c050: 3b 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65  ;            bre
c060: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 53  ak;.      case S
c070: 51 4c 49 54 45 5f 52 41 4e 47 45 3a 20 20 20 20  QLITE_RANGE:    
c080: 20 20 20 20 20 20 20 20 20 20 7a 4e 61 6d 65 20            zName 
c090: 3d 20 22 53 51 4c 49 54 45 5f 52 41 4e 47 45 22  = "SQLITE_RANGE"
c0a0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72  ;             br
c0b0: 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20  eak;.      case 
c0c0: 53 51 4c 49 54 45 5f 4e 4f 54 41 44 42 3a 20 20  SQLITE_NOTADB:  
c0d0: 20 20 20 20 20 20 20 20 20 20 20 7a 4e 61 6d 65             zName
c0e0: 20 3d 20 22 53 51 4c 49 54 45 5f 4e 4f 54 41 44   = "SQLITE_NOTAD
c0f0: 42 22 3b 20 20 20 20 20 20 20 20 20 20 20 20 62  B";            b
c100: 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65  reak;.      case
c110: 20 53 51 4c 49 54 45 5f 52 4f 57 3a 20 20 20 20   SQLITE_ROW:    
c120: 20 20 20 20 20 20 20 20 20 20 20 20 7a 4e 61 6d              zNam
c130: 65 20 3d 20 22 53 51 4c 49 54 45 5f 52 4f 57 22  e = "SQLITE_ROW"
c140: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
c150: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73  break;.      cas
c160: 65 20 53 51 4c 49 54 45 5f 4e 4f 54 49 43 45 3a  e SQLITE_NOTICE:
c170: 20 20 20 20 20 20 20 20 20 20 20 20 20 7a 4e 61               zNa
c180: 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 4e 4f 54  me = "SQLITE_NOT
c190: 49 43 45 22 3b 20 20 20 20 20 20 20 20 20 20 20  ICE";           
c1a0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
c1b0: 73 65 20 53 51 4c 49 54 45 5f 4e 4f 54 49 43 45  se SQLITE_NOTICE
c1c0: 5f 52 45 43 4f 56 45 52 5f 57 41 4c 3a 20 7a 4e  _RECOVER_WAL: zN
c1d0: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 4e 4f  ame = "SQLITE_NO
c1e0: 54 49 43 45 5f 52 45 43 4f 56 45 52 5f 57 41 4c  TICE_RECOVER_WAL
c1f0: 22 3b 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63  ";break;.      c
c200: 61 73 65 20 53 51 4c 49 54 45 5f 4e 4f 54 49 43  ase SQLITE_NOTIC
c210: 45 5f 52 45 43 4f 56 45 52 5f 52 4f 4c 4c 42 41  E_RECOVER_ROLLBA
c220: 43 4b 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20  CK:.            
c230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c240: 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c      zName = "SQL
c250: 49 54 45 5f 4e 4f 54 49 43 45 5f 52 45 43 4f 56  ITE_NOTICE_RECOV
c260: 45 52 5f 52 4f 4c 4c 42 41 43 4b 22 3b 20 62 72  ER_ROLLBACK"; br
c270: 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20  eak;.      case 
c280: 53 51 4c 49 54 45 5f 57 41 52 4e 49 4e 47 3a 20  SQLITE_WARNING: 
c290: 20 20 20 20 20 20 20 20 20 20 20 7a 4e 61 6d 65             zName
c2a0: 20 3d 20 22 53 51 4c 49 54 45 5f 57 41 52 4e 49   = "SQLITE_WARNI
c2b0: 4e 47 22 3b 20 20 20 20 20 20 20 20 20 20 20 62  NG";           b
c2c0: 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65  reak;.      case
c2d0: 20 53 51 4c 49 54 45 5f 57 41 52 4e 49 4e 47 5f   SQLITE_WARNING_
c2e0: 41 55 54 4f 49 4e 44 45 58 3a 20 20 7a 4e 61 6d  AUTOINDEX:  zNam
c2f0: 65 20 3d 20 22 53 51 4c 49 54 45 5f 57 41 52 4e  e = "SQLITE_WARN
c300: 49 4e 47 5f 41 55 54 4f 49 4e 44 45 58 22 3b 20  ING_AUTOINDEX"; 
c310: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73  break;.      cas
c320: 65 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3a 20 20  e SQLITE_DONE:  
c330: 20 20 20 20 20 20 20 20 20 20 20 20 20 7a 4e 61               zNa
c340: 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 44 4f 4e  me = "SQLITE_DON
c350: 45 22 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  E";             
c360: 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20   break;.    }.  
c370: 7d 0a 20 20 69 66 28 20 7a 4e 61 6d 65 3d 3d 30  }.  if( zName==0
c380: 20 29 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63   ){.    static c
c390: 68 61 72 20 7a 42 75 66 5b 35 30 5d 3b 0a 20 20  har zBuf[50];.  
c3a0: 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
c3b0: 74 66 28 73 69 7a 65 6f 66 28 7a 42 75 66 29 2c  tf(sizeof(zBuf),
c3c0: 20 7a 42 75 66 2c 20 22 53 51 4c 49 54 45 5f 55   zBuf, "SQLITE_U
c3d0: 4e 4b 4e 4f 57 4e 28 25 64 29 22 2c 20 6f 72 69  NKNOWN(%d)", ori
c3e0: 67 52 63 29 3b 0a 20 20 20 20 7a 4e 61 6d 65 20  gRc);.    zName 
c3f0: 3d 20 7a 42 75 66 3b 0a 20 20 7d 0a 20 20 72 65  = zBuf;.  }.  re
c400: 74 75 72 6e 20 7a 4e 61 6d 65 3b 0a 7d 0a 23 65  turn zName;.}.#e
c410: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75  ndif../*.** Retu
c420: 72 6e 20 61 20 73 74 61 74 69 63 20 73 74 72 69  rn a static stri
c430: 6e 67 20 74 68 61 74 20 64 65 73 63 72 69 62 65  ng that describe
c440: 73 20 74 68 65 20 6b 69 6e 64 20 6f 66 20 65 72  s the kind of er
c450: 72 6f 72 20 73 70 65 63 69 66 69 65 64 20 69 6e  ror specified in
c460: 20 74 68 65 0a 2a 2a 20 61 72 67 75 6d 65 6e 74   the.** argument
c470: 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 63 68 61 72 20  ..*/.const char 
c480: 2a 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 69  *sqlite3ErrStr(i
c490: 6e 74 20 72 63 29 7b 0a 20 20 73 74 61 74 69 63  nt rc){.  static
c4a0: 20 63 6f 6e 73 74 20 63 68 61 72 2a 20 63 6f 6e   const char* con
c4b0: 73 74 20 61 4d 73 67 5b 5d 20 3d 20 7b 0a 20 20  st aMsg[] = {.  
c4c0: 20 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4b 20 20    /* SQLITE_OK  
c4d0: 20 20 20 20 20 20 20 20 2a 2f 20 22 6e 6f 74 20          */ "not 
c4e0: 61 6e 20 65 72 72 6f 72 22 2c 0a 20 20 20 20 2f  an error",.    /
c4f0: 2a 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 20 20  * SQLITE_ERROR  
c500: 20 20 20 20 20 2a 2f 20 22 53 51 4c 20 6c 6f 67       */ "SQL log
c510: 69 63 20 65 72 72 6f 72 20 6f 72 20 6d 69 73 73  ic error or miss
c520: 69 6e 67 20 64 61 74 61 62 61 73 65 22 2c 0a 20  ing database",. 
c530: 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 49 4e 54     /* SQLITE_INT
c540: 45 52 4e 41 4c 20 20 20 20 2a 2f 20 30 2c 0a 20  ERNAL    */ 0,. 
c550: 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 50 45 52     /* SQLITE_PER
c560: 4d 20 20 20 20 20 20 20 20 2a 2f 20 22 61 63 63  M        */ "acc
c570: 65 73 73 20 70 65 72 6d 69 73 73 69 6f 6e 20 64  ess permission d
c580: 65 6e 69 65 64 22 2c 0a 20 20 20 20 2f 2a 20 53  enied",.    /* S
c590: 51 4c 49 54 45 5f 41 42 4f 52 54 20 20 20 20 20  QLITE_ABORT     
c5a0: 20 20 2a 2f 20 22 63 61 6c 6c 62 61 63 6b 20 72    */ "callback r
c5b0: 65 71 75 65 73 74 65 64 20 71 75 65 72 79 20 61  equested query a
c5c0: 62 6f 72 74 22 2c 0a 20 20 20 20 2f 2a 20 53 51  bort",.    /* SQ
c5d0: 4c 49 54 45 5f 42 55 53 59 20 20 20 20 20 20 20  LITE_BUSY       
c5e0: 20 2a 2f 20 22 64 61 74 61 62 61 73 65 20 69 73   */ "database is
c5f0: 20 6c 6f 63 6b 65 64 22 2c 0a 20 20 20 20 2f 2a   locked",.    /*
c600: 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 20   SQLITE_LOCKED  
c610: 20 20 20 20 2a 2f 20 22 64 61 74 61 62 61 73 65      */ "database
c620: 20 74 61 62 6c 65 20 69 73 20 6c 6f 63 6b 65 64   table is locked
c630: 22 2c 0a 20 20 20 20 2f 2a 20 53 51 4c 49 54 45  ",.    /* SQLITE
c640: 5f 4e 4f 4d 45 4d 20 20 20 20 20 20 20 2a 2f 20  _NOMEM       */ 
c650: 22 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 22 2c  "out of memory",
c660: 0a 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 52  .    /* SQLITE_R
c670: 45 41 44 4f 4e 4c 59 20 20 20 20 2a 2f 20 22 61  EADONLY    */ "a
c680: 74 74 65 6d 70 74 20 74 6f 20 77 72 69 74 65 20  ttempt to write 
c690: 61 20 72 65 61 64 6f 6e 6c 79 20 64 61 74 61 62  a readonly datab
c6a0: 61 73 65 22 2c 0a 20 20 20 20 2f 2a 20 53 51 4c  ase",.    /* SQL
c6b0: 49 54 45 5f 49 4e 54 45 52 52 55 50 54 20 20 20  ITE_INTERRUPT   
c6c0: 2a 2f 20 22 69 6e 74 65 72 72 75 70 74 65 64 22  */ "interrupted"
c6d0: 2c 0a 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f  ,.    /* SQLITE_
c6e0: 49 4f 45 52 52 20 20 20 20 20 20 20 2a 2f 20 22  IOERR       */ "
c6f0: 64 69 73 6b 20 49 2f 4f 20 65 72 72 6f 72 22 2c  disk I/O error",
c700: 0a 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 43  .    /* SQLITE_C
c710: 4f 52 52 55 50 54 20 20 20 20 20 2a 2f 20 22 64  ORRUPT     */ "d
c720: 61 74 61 62 61 73 65 20 64 69 73 6b 20 69 6d 61  atabase disk ima
c730: 67 65 20 69 73 20 6d 61 6c 66 6f 72 6d 65 64 22  ge is malformed"
c740: 2c 0a 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f  ,.    /* SQLITE_
c750: 4e 4f 54 46 4f 55 4e 44 20 20 20 20 2a 2f 20 22  NOTFOUND    */ "
c760: 75 6e 6b 6e 6f 77 6e 20 6f 70 65 72 61 74 69 6f  unknown operatio
c770: 6e 22 2c 0a 20 20 20 20 2f 2a 20 53 51 4c 49 54  n",.    /* SQLIT
c780: 45 5f 46 55 4c 4c 20 20 20 20 20 20 20 20 2a 2f  E_FULL        */
c790: 20 22 64 61 74 61 62 61 73 65 20 6f 72 20 64 69   "database or di
c7a0: 73 6b 20 69 73 20 66 75 6c 6c 22 2c 0a 20 20 20  sk is full",.   
c7b0: 20 2f 2a 20 53 51 4c 49 54 45 5f 43 41 4e 54 4f   /* SQLITE_CANTO
c7c0: 50 45 4e 20 20 20 20 2a 2f 20 22 75 6e 61 62 6c  PEN    */ "unabl
c7d0: 65 20 74 6f 20 6f 70 65 6e 20 64 61 74 61 62 61  e to open databa
c7e0: 73 65 20 66 69 6c 65 22 2c 0a 20 20 20 20 2f 2a  se file",.    /*
c7f0: 20 53 51 4c 49 54 45 5f 50 52 4f 54 4f 43 4f 4c   SQLITE_PROTOCOL
c800: 20 20 20 20 2a 2f 20 22 6c 6f 63 6b 69 6e 67 20      */ "locking 
c810: 70 72 6f 74 6f 63 6f 6c 22 2c 0a 20 20 20 20 2f  protocol",.    /
c820: 2a 20 53 51 4c 49 54 45 5f 45 4d 50 54 59 20 20  * SQLITE_EMPTY  
c830: 20 20 20 20 20 2a 2f 20 22 74 61 62 6c 65 20 63       */ "table c
c840: 6f 6e 74 61 69 6e 73 20 6e 6f 20 64 61 74 61 22  ontains no data"
c850: 2c 0a 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f  ,.    /* SQLITE_
c860: 53 43 48 45 4d 41 20 20 20 20 20 20 2a 2f 20 22  SCHEMA      */ "
c870: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
c880: 68 61 73 20 63 68 61 6e 67 65 64 22 2c 0a 20 20  has changed",.  
c890: 20 20 2f 2a 20 53 51 4c 49 54 45 5f 54 4f 4f 42    /* SQLITE_TOOB
c8a0: 49 47 20 20 20 20 20 20 2a 2f 20 22 73 74 72 69  IG      */ "stri
c8b0: 6e 67 20 6f 72 20 62 6c 6f 62 20 74 6f 6f 20 62  ng or blob too b
c8c0: 69 67 22 2c 0a 20 20 20 20 2f 2a 20 53 51 4c 49  ig",.    /* SQLI
c8d0: 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20 20 2a  TE_CONSTRAINT  *
c8e0: 2f 20 22 63 6f 6e 73 74 72 61 69 6e 74 20 66 61  / "constraint fa
c8f0: 69 6c 65 64 22 2c 0a 20 20 20 20 2f 2a 20 53 51  iled",.    /* SQ
c900: 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 20 20 20  LITE_MISMATCH   
c910: 20 2a 2f 20 22 64 61 74 61 74 79 70 65 20 6d 69   */ "datatype mi
c920: 73 6d 61 74 63 68 22 2c 0a 20 20 20 20 2f 2a 20  smatch",.    /* 
c930: 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 20 20 20  SQLITE_MISUSE   
c940: 20 20 20 2a 2f 20 22 6c 69 62 72 61 72 79 20 72     */ "library r
c950: 6f 75 74 69 6e 65 20 63 61 6c 6c 65 64 20 6f 75  outine called ou
c960: 74 20 6f 66 20 73 65 71 75 65 6e 63 65 22 2c 0a  t of sequence",.
c970: 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 4e 4f      /* SQLITE_NO
c980: 4c 46 53 20 20 20 20 20 20 20 2a 2f 20 22 6c 61  LFS       */ "la
c990: 72 67 65 20 66 69 6c 65 20 73 75 70 70 6f 72 74  rge file support
c9a0: 20 69 73 20 64 69 73 61 62 6c 65 64 22 2c 0a 20   is disabled",. 
c9b0: 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 41 55 54     /* SQLITE_AUT
c9c0: 48 20 20 20 20 20 20 20 20 2a 2f 20 22 61 75 74  H        */ "aut
c9d0: 68 6f 72 69 7a 61 74 69 6f 6e 20 64 65 6e 69 65  horization denie
c9e0: 64 22 2c 0a 20 20 20 20 2f 2a 20 53 51 4c 49 54  d",.    /* SQLIT
c9f0: 45 5f 46 4f 52 4d 41 54 20 20 20 20 20 20 2a 2f  E_FORMAT      */
ca00: 20 22 61 75 78 69 6c 69 61 72 79 20 64 61 74 61   "auxiliary data
ca10: 62 61 73 65 20 66 6f 72 6d 61 74 20 65 72 72 6f  base format erro
ca20: 72 22 2c 0a 20 20 20 20 2f 2a 20 53 51 4c 49 54  r",.    /* SQLIT
ca30: 45 5f 52 41 4e 47 45 20 20 20 20 20 20 20 2a 2f  E_RANGE       */
ca40: 20 22 62 69 6e 64 20 6f 72 20 63 6f 6c 75 6d 6e   "bind or column
ca50: 20 69 6e 64 65 78 20 6f 75 74 20 6f 66 20 72 61   index out of ra
ca60: 6e 67 65 22 2c 0a 20 20 20 20 2f 2a 20 53 51 4c  nge",.    /* SQL
ca70: 49 54 45 5f 4e 4f 54 41 44 42 20 20 20 20 20 20  ITE_NOTADB      
ca80: 2a 2f 20 22 66 69 6c 65 20 69 73 20 65 6e 63 72  */ "file is encr
ca90: 79 70 74 65 64 20 6f 72 20 69 73 20 6e 6f 74 20  ypted or is not 
caa0: 61 20 64 61 74 61 62 61 73 65 22 2c 0a 20 20 7d  a database",.  }
cab0: 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ;.  const char *
cac0: 7a 45 72 72 20 3d 20 22 75 6e 6b 6e 6f 77 6e 20  zErr = "unknown 
cad0: 65 72 72 6f 72 22 3b 0a 20 20 73 77 69 74 63 68  error";.  switch
cae0: 28 20 72 63 20 29 7b 0a 20 20 20 20 63 61 73 65  ( rc ){.    case
caf0: 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 5f 52 4f   SQLITE_ABORT_RO
cb00: 4c 4c 42 41 43 4b 3a 20 7b 0a 20 20 20 20 20 20  LLBACK: {.      
cb10: 7a 45 72 72 20 3d 20 22 61 62 6f 72 74 20 64 75  zErr = "abort du
cb20: 65 20 74 6f 20 52 4f 4c 4c 42 41 43 4b 22 3b 0a  e to ROLLBACK";.
cb30: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
cb40: 20 7d 0a 20 20 20 20 64 65 66 61 75 6c 74 3a 20   }.    default: 
cb50: 7b 0a 20 20 20 20 20 20 72 63 20 26 3d 20 30 78  {.      rc &= 0x
cb60: 66 66 3b 0a 20 20 20 20 20 20 69 66 28 20 41 4c  ff;.      if( AL
cb70: 57 41 59 53 28 72 63 3e 3d 30 29 20 26 26 20 72  WAYS(rc>=0) && r
cb80: 63 3c 41 72 72 61 79 53 69 7a 65 28 61 4d 73 67  c<ArraySize(aMsg
cb90: 29 20 26 26 20 61 4d 73 67 5b 72 63 5d 21 3d 30  ) && aMsg[rc]!=0
cba0: 20 29 7b 0a 20 20 20 20 20 20 20 20 7a 45 72 72   ){.        zErr
cbb0: 20 3d 20 61 4d 73 67 5b 72 63 5d 3b 0a 20 20 20   = aMsg[rc];.   
cbc0: 20 20 20 7d 0a 20 20 20 20 20 20 62 72 65 61 6b     }.      break
cbd0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65  ;.    }.  }.  re
cbe0: 74 75 72 6e 20 7a 45 72 72 3b 0a 7d 0a 0a 2f 2a  turn zErr;.}../*
cbf0: 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65  .** This routine
cc00: 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61 20 62 75   implements a bu
cc10: 73 79 20 63 61 6c 6c 62 61 63 6b 20 74 68 61 74  sy callback that
cc20: 20 73 6c 65 65 70 73 20 61 6e 64 20 74 72 69 65   sleeps and trie
cc30: 73 0a 2a 2a 20 61 67 61 69 6e 20 75 6e 74 69 6c  s.** again until
cc40: 20 61 20 74 69 6d 65 6f 75 74 20 76 61 6c 75 65   a timeout value
cc50: 20 69 73 20 72 65 61 63 68 65 64 2e 20 20 54 68   is reached.  Th
cc60: 65 20 74 69 6d 65 6f 75 74 20 76 61 6c 75 65 20  e timeout value 
cc70: 69 73 0a 2a 2a 20 61 6e 20 69 6e 74 65 67 65 72  is.** an integer
cc80: 20 6e 75 6d 62 65 72 20 6f 66 20 6d 69 6c 6c 69   number of milli
cc90: 73 65 63 6f 6e 64 73 20 70 61 73 73 65 64 20 69  seconds passed i
cca0: 6e 20 61 73 20 74 68 65 20 66 69 72 73 74 0a 2a  n as the first.*
ccb0: 2a 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 73  * argument..*/.s
ccc0: 74 61 74 69 63 20 69 6e 74 20 73 71 6c 69 74 65  tatic int sqlite
ccd0: 44 65 66 61 75 6c 74 42 75 73 79 43 61 6c 6c 62  DefaultBusyCallb
cce0: 61 63 6b 28 0a 20 76 6f 69 64 20 2a 70 74 72 2c  ack(. void *ptr,
ccf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
cd00: 2a 20 44 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  * Database conne
cd10: 63 74 69 6f 6e 20 2a 2f 0a 20 69 6e 74 20 63 6f  ction */. int co
cd20: 75 6e 74 20 20 20 20 20 20 20 20 20 20 20 20 20  unt             
cd30: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
cd40: 74 69 6d 65 73 20 74 61 62 6c 65 20 68 61 73 20  times table has 
cd50: 62 65 65 6e 20 62 75 73 79 20 2a 2f 0a 29 7b 0a  been busy */.){.
cd60: 23 69 66 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49  #if SQLITE_OS_WI
cd70: 4e 20 7c 7c 20 48 41 56 45 5f 55 53 4c 45 45 50  N || HAVE_USLEEP
cd80: 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20  .  static const 
cd90: 75 38 20 64 65 6c 61 79 73 5b 5d 20 3d 0a 20 20  u8 delays[] =.  
cda0: 20 20 20 7b 20 31 2c 20 32 2c 20 35 2c 20 31 30     { 1, 2, 5, 10
cdb0: 2c 20 31 35 2c 20 32 30 2c 20 32 35 2c 20 32 35  , 15, 20, 25, 25
cdc0: 2c 20 20 32 35 2c 20 20 35 30 2c 20 20 35 30 2c  ,  25,  50,  50,
cdd0: 20 31 30 30 20 7d 3b 0a 20 20 73 74 61 74 69 63   100 };.  static
cde0: 20 63 6f 6e 73 74 20 75 38 20 74 6f 74 61 6c 73   const u8 totals
cdf0: 5b 5d 20 3d 0a 20 20 20 20 20 7b 20 30 2c 20 31  [] =.     { 0, 1
ce00: 2c 20 33 2c 20 20 38 2c 20 31 38 2c 20 33 33 2c  , 3,  8, 18, 33,
ce10: 20 35 33 2c 20 37 38 2c 20 31 30 33 2c 20 31 32   53, 78, 103, 12
ce20: 38 2c 20 31 37 38 2c 20 32 32 38 20 7d 3b 0a 23  8, 178, 228 };.#
ce30: 20 64 65 66 69 6e 65 20 4e 44 45 4c 41 59 20 41   define NDELAY A
ce40: 72 72 61 79 53 69 7a 65 28 64 65 6c 61 79 73 29  rraySize(delays)
ce50: 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 20 3d  .  sqlite3 *db =
ce60: 20 28 73 71 6c 69 74 65 33 20 2a 29 70 74 72 3b   (sqlite3 *)ptr;
ce70: 0a 20 20 69 6e 74 20 74 69 6d 65 6f 75 74 20 3d  .  int timeout =
ce80: 20 64 62 2d 3e 62 75 73 79 54 69 6d 65 6f 75 74   db->busyTimeout
ce90: 3b 0a 20 20 69 6e 74 20 64 65 6c 61 79 2c 20 70  ;.  int delay, p
cea0: 72 69 6f 72 3b 0a 0a 20 20 61 73 73 65 72 74 28  rior;..  assert(
ceb0: 20 63 6f 75 6e 74 3e 3d 30 20 29 3b 0a 20 20 69   count>=0 );.  i
cec0: 66 28 20 63 6f 75 6e 74 20 3c 20 4e 44 45 4c 41  f( count < NDELA
ced0: 59 20 29 7b 0a 20 20 20 20 64 65 6c 61 79 20 3d  Y ){.    delay =
cee0: 20 64 65 6c 61 79 73 5b 63 6f 75 6e 74 5d 3b 0a   delays[count];.
cef0: 20 20 20 20 70 72 69 6f 72 20 3d 20 74 6f 74 61      prior = tota
cf00: 6c 73 5b 63 6f 75 6e 74 5d 3b 0a 20 20 7d 65 6c  ls[count];.  }el
cf10: 73 65 7b 0a 20 20 20 20 64 65 6c 61 79 20 3d 20  se{.    delay = 
cf20: 64 65 6c 61 79 73 5b 4e 44 45 4c 41 59 2d 31 5d  delays[NDELAY-1]
cf30: 3b 0a 20 20 20 20 70 72 69 6f 72 20 3d 20 74 6f  ;.    prior = to
cf40: 74 61 6c 73 5b 4e 44 45 4c 41 59 2d 31 5d 20 2b  tals[NDELAY-1] +
cf50: 20 64 65 6c 61 79 2a 28 63 6f 75 6e 74 2d 28 4e   delay*(count-(N
cf60: 44 45 4c 41 59 2d 31 29 29 3b 0a 20 20 7d 0a 20  DELAY-1));.  }. 
cf70: 20 69 66 28 20 70 72 69 6f 72 20 2b 20 64 65 6c   if( prior + del
cf80: 61 79 20 3e 20 74 69 6d 65 6f 75 74 20 29 7b 0a  ay > timeout ){.
cf90: 20 20 20 20 64 65 6c 61 79 20 3d 20 74 69 6d 65      delay = time
cfa0: 6f 75 74 20 2d 20 70 72 69 6f 72 3b 0a 20 20 20  out - prior;.   
cfb0: 20 69 66 28 20 64 65 6c 61 79 3c 3d 30 20 29 20   if( delay<=0 ) 
cfc0: 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20  return 0;.  }.  
cfd0: 73 71 6c 69 74 65 33 4f 73 53 6c 65 65 70 28 64  sqlite3OsSleep(d
cfe0: 62 2d 3e 70 56 66 73 2c 20 64 65 6c 61 79 2a 31  b->pVfs, delay*1
cff0: 30 30 30 29 3b 0a 20 20 72 65 74 75 72 6e 20 31  000);.  return 1
d000: 3b 0a 23 65 6c 73 65 0a 20 20 73 71 6c 69 74 65  ;.#else.  sqlite
d010: 33 20 2a 64 62 20 3d 20 28 73 71 6c 69 74 65 33  3 *db = (sqlite3
d020: 20 2a 29 70 74 72 3b 0a 20 20 69 6e 74 20 74 69   *)ptr;.  int ti
d030: 6d 65 6f 75 74 20 3d 20 28 28 73 71 6c 69 74 65  meout = ((sqlite
d040: 33 20 2a 29 70 74 72 29 2d 3e 62 75 73 79 54 69  3 *)ptr)->busyTi
d050: 6d 65 6f 75 74 3b 0a 20 20 69 66 28 20 28 63 6f  meout;.  if( (co
d060: 75 6e 74 2b 31 29 2a 31 30 30 30 20 3e 20 74 69  unt+1)*1000 > ti
d070: 6d 65 6f 75 74 20 29 7b 0a 20 20 20 20 72 65 74  meout ){.    ret
d080: 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20 73 71 6c  urn 0;.  }.  sql
d090: 69 74 65 33 4f 73 53 6c 65 65 70 28 64 62 2d 3e  ite3OsSleep(db->
d0a0: 70 56 66 73 2c 20 31 30 30 30 30 30 30 29 3b 0a  pVfs, 1000000);.
d0b0: 20 20 72 65 74 75 72 6e 20 31 3b 0a 23 65 6e 64    return 1;.#end
d0c0: 69 66 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76 6f  if.}../*.** Invo
d0d0: 6b 65 20 74 68 65 20 67 69 76 65 6e 20 62 75 73  ke the given bus
d0e0: 79 20 68 61 6e 64 6c 65 72 2e 0a 2a 2a 0a 2a 2a  y handler..**.**
d0f0: 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73   This routine is
d100: 20 63 61 6c 6c 65 64 20 77 68 65 6e 20 61 6e 20   called when an 
d110: 6f 70 65 72 61 74 69 6f 6e 20 66 61 69 6c 65 64  operation failed
d120: 20 77 69 74 68 20 61 20 6c 6f 63 6b 2e 0a 2a 2a   with a lock..**
d130: 20 49 66 20 74 68 69 73 20 72 6f 75 74 69 6e 65   If this routine
d140: 20 72 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72   returns non-zer
d150: 6f 2c 20 74 68 65 20 6c 6f 63 6b 20 69 73 20 72  o, the lock is r
d160: 65 74 72 69 65 64 2e 20 20 49 66 20 69 74 0a 2a  etried.  If it.*
d170: 2a 20 72 65 74 75 72 6e 73 20 30 2c 20 74 68 65  * returns 0, the
d180: 20 6f 70 65 72 61 74 69 6f 6e 20 61 62 6f 72 74   operation abort
d190: 73 20 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45  s with an SQLITE
d1a0: 5f 42 55 53 59 20 65 72 72 6f 72 2e 0a 2a 2f 0a  _BUSY error..*/.
d1b0: 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 76 6f 6b  int sqlite3Invok
d1c0: 65 42 75 73 79 48 61 6e 64 6c 65 72 28 42 75 73  eBusyHandler(Bus
d1d0: 79 48 61 6e 64 6c 65 72 20 2a 70 29 7b 0a 20 20  yHandler *p){.  
d1e0: 69 6e 74 20 72 63 3b 0a 20 20 69 66 28 20 4e 45  int rc;.  if( NE
d1f0: 56 45 52 28 70 3d 3d 30 29 20 7c 7c 20 70 2d 3e  VER(p==0) || p->
d200: 78 46 75 6e 63 3d 3d 30 20 7c 7c 20 70 2d 3e 6e  xFunc==0 || p->n
d210: 42 75 73 79 3c 30 20 29 20 72 65 74 75 72 6e 20  Busy<0 ) return 
d220: 30 3b 0a 20 20 72 63 20 3d 20 70 2d 3e 78 46 75  0;.  rc = p->xFu
d230: 6e 63 28 70 2d 3e 70 41 72 67 2c 20 70 2d 3e 6e  nc(p->pArg, p->n
d240: 42 75 73 79 29 3b 0a 20 20 69 66 28 20 72 63 3d  Busy);.  if( rc=
d250: 3d 30 20 29 7b 0a 20 20 20 20 70 2d 3e 6e 42 75  =0 ){.    p->nBu
d260: 73 79 20 3d 20 2d 31 3b 0a 20 20 7d 65 6c 73 65  sy = -1;.  }else
d270: 7b 0a 20 20 20 20 70 2d 3e 6e 42 75 73 79 2b 2b  {.    p->nBusy++
d280: 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 72  ;.  }.  return r
d290: 63 3b 20 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69  c; .}../*.** Thi
d2a0: 73 20 72 6f 75 74 69 6e 65 20 73 65 74 73 20 74  s routine sets t
d2b0: 68 65 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b  he busy callback
d2c0: 20 66 6f 72 20 61 6e 20 53 71 6c 69 74 65 20 64   for an Sqlite d
d2d0: 61 74 61 62 61 73 65 20 74 6f 20 74 68 65 0a 2a  atabase to the.*
d2e0: 2a 20 67 69 76 65 6e 20 63 61 6c 6c 62 61 63 6b  * given callback
d2f0: 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 74   function with t
d300: 68 65 20 67 69 76 65 6e 20 61 72 67 75 6d 65 6e  he given argumen
d310: 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  t..*/.int sqlite
d320: 33 5f 62 75 73 79 5f 68 61 6e 64 6c 65 72 28 0a  3_busy_handler(.
d330: 20 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 0a 20    sqlite3 *db,. 
d340: 20 69 6e 74 20 28 2a 78 42 75 73 79 29 28 76 6f   int (*xBusy)(vo
d350: 69 64 2a 2c 69 6e 74 29 2c 0a 20 20 76 6f 69 64  id*,int),.  void
d360: 20 2a 70 41 72 67 0a 29 7b 0a 23 69 66 64 65 66   *pArg.){.#ifdef
d370: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41   SQLITE_ENABLE_A
d380: 50 49 5f 41 52 4d 4f 52 0a 20 20 69 66 28 20 21  PI_ARMOR.  if( !
d390: 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65  sqlite3SafetyChe
d3a0: 63 6b 4f 6b 28 64 62 29 20 29 20 72 65 74 75 72  ckOk(db) ) retur
d3b0: 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 5f  n SQLITE_MISUSE_
d3c0: 42 4b 50 54 3b 0a 23 65 6e 64 69 66 0a 20 20 73  BKPT;.#endif.  s
d3d0: 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74  qlite3_mutex_ent
d3e0: 65 72 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20  er(db->mutex);. 
d3f0: 20 64 62 2d 3e 62 75 73 79 48 61 6e 64 6c 65 72   db->busyHandler
d400: 2e 78 46 75 6e 63 20 3d 20 78 42 75 73 79 3b 0a  .xFunc = xBusy;.
d410: 20 20 64 62 2d 3e 62 75 73 79 48 61 6e 64 6c 65    db->busyHandle
d420: 72 2e 70 41 72 67 20 3d 20 70 41 72 67 3b 0a 20  r.pArg = pArg;. 
d430: 20 64 62 2d 3e 62 75 73 79 48 61 6e 64 6c 65 72   db->busyHandler
d440: 2e 6e 42 75 73 79 20 3d 20 30 3b 0a 20 20 64 62  .nBusy = 0;.  db
d450: 2d 3e 62 75 73 79 54 69 6d 65 6f 75 74 20 3d 20  ->busyTimeout = 
d460: 30 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  0;.  sqlite3_mut
d470: 65 78 5f 6c 65 61 76 65 28 64 62 2d 3e 6d 75 74  ex_leave(db->mut
d480: 65 78 29 3b 0a 20 20 72 65 74 75 72 6e 20 53 51  ex);.  return SQ
d490: 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 23 69 66 6e  LITE_OK;.}..#ifn
d4a0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
d4b0: 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43  PROGRESS_CALLBAC
d4c0: 4b 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75  K./*.** This rou
d4d0: 74 69 6e 65 20 73 65 74 73 20 74 68 65 20 70 72  tine sets the pr
d4e0: 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20  ogress callback 
d4f0: 66 6f 72 20 61 6e 20 53 71 6c 69 74 65 20 64 61  for an Sqlite da
d500: 74 61 62 61 73 65 20 74 6f 20 74 68 65 0a 2a 2a  tabase to the.**
d510: 20 67 69 76 65 6e 20 63 61 6c 6c 62 61 63 6b 20   given callback 
d520: 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 74 68  function with th
d530: 65 20 67 69 76 65 6e 20 61 72 67 75 6d 65 6e 74  e given argument
d540: 2e 20 54 68 65 20 70 72 6f 67 72 65 73 73 20 63  . The progress c
d550: 61 6c 6c 62 61 63 6b 20 77 69 6c 6c 0a 2a 2a 20  allback will.** 
d560: 62 65 20 69 6e 76 6f 6b 65 64 20 65 76 65 72 79  be invoked every
d570: 20 6e 4f 70 73 20 6f 70 63 6f 64 65 73 2e 0a 2a   nOps opcodes..*
d580: 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 5f 70  /.void sqlite3_p
d590: 72 6f 67 72 65 73 73 5f 68 61 6e 64 6c 65 72 28  rogress_handler(
d5a0: 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  .  sqlite3 *db, 
d5b0: 0a 20 20 69 6e 74 20 6e 4f 70 73 2c 0a 20 20 69  .  int nOps,.  i
d5c0: 6e 74 20 28 2a 78 50 72 6f 67 72 65 73 73 29 28  nt (*xProgress)(
d5d0: 76 6f 69 64 2a 29 2c 20 0a 20 20 76 6f 69 64 20  void*), .  void 
d5e0: 2a 70 41 72 67 0a 29 7b 0a 23 69 66 64 65 66 20  *pArg.){.#ifdef 
d5f0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41 50  SQLITE_ENABLE_AP
d600: 49 5f 41 52 4d 4f 52 0a 20 20 69 66 28 20 21 73  I_ARMOR.  if( !s
d610: 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63  qlite3SafetyChec
d620: 6b 4f 6b 28 64 62 29 20 29 7b 0a 20 20 20 20 28  kOk(db) ){.    (
d630: 76 6f 69 64 29 53 51 4c 49 54 45 5f 4d 49 53 55  void)SQLITE_MISU
d640: 53 45 5f 42 4b 50 54 3b 0a 20 20 20 20 72 65 74  SE_BKPT;.    ret
d650: 75 72 6e 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a  urn;.  }.#endif.
d660: 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f    sqlite3_mutex_
d670: 65 6e 74 65 72 28 64 62 2d 3e 6d 75 74 65 78 29  enter(db->mutex)
d680: 3b 0a 20 20 69 66 28 20 6e 4f 70 73 3e 30 20 29  ;.  if( nOps>0 )
d690: 7b 0a 20 20 20 20 64 62 2d 3e 78 50 72 6f 67 72  {.    db->xProgr
d6a0: 65 73 73 20 3d 20 78 50 72 6f 67 72 65 73 73 3b  ess = xProgress;
d6b0: 0a 20 20 20 20 64 62 2d 3e 6e 50 72 6f 67 72 65  .    db->nProgre
d6c0: 73 73 4f 70 73 20 3d 20 28 75 6e 73 69 67 6e 65  ssOps = (unsigne
d6d0: 64 29 6e 4f 70 73 3b 0a 20 20 20 20 64 62 2d 3e  d)nOps;.    db->
d6e0: 70 50 72 6f 67 72 65 73 73 41 72 67 20 3d 20 70  pProgressArg = p
d6f0: 41 72 67 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  Arg;.  }else{.  
d700: 20 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 20    db->xProgress 
d710: 3d 20 30 3b 0a 20 20 20 20 64 62 2d 3e 6e 50 72  = 0;.    db->nPr
d720: 6f 67 72 65 73 73 4f 70 73 20 3d 20 30 3b 0a 20  ogressOps = 0;. 
d730: 20 20 20 64 62 2d 3e 70 50 72 6f 67 72 65 73 73     db->pProgress
d740: 41 72 67 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 73  Arg = 0;.  }.  s
d750: 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61  qlite3_mutex_lea
d760: 76 65 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 7d  ve(db->mutex);.}
d770: 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20  .#endif.../*.** 
d780: 54 68 69 73 20 72 6f 75 74 69 6e 65 20 69 6e 73  This routine ins
d790: 74 61 6c 6c 73 20 61 20 64 65 66 61 75 6c 74 20  talls a default 
d7a0: 62 75 73 79 20 68 61 6e 64 6c 65 72 20 74 68 61  busy handler tha
d7b0: 74 20 77 61 69 74 73 20 66 6f 72 20 74 68 65 0a  t waits for the.
d7c0: 2a 2a 20 73 70 65 63 69 66 69 65 64 20 6e 75 6d  ** specified num
d7d0: 62 65 72 20 6f 66 20 6d 69 6c 6c 69 73 65 63 6f  ber of milliseco
d7e0: 6e 64 73 20 62 65 66 6f 72 65 20 72 65 74 75 72  nds before retur
d7f0: 6e 69 6e 67 20 30 2e 0a 2a 2f 0a 69 6e 74 20 73  ning 0..*/.int s
d800: 71 6c 69 74 65 33 5f 62 75 73 79 5f 74 69 6d 65  qlite3_busy_time
d810: 6f 75 74 28 73 71 6c 69 74 65 33 20 2a 64 62 2c  out(sqlite3 *db,
d820: 20 69 6e 74 20 6d 73 29 7b 0a 23 69 66 64 65 66   int ms){.#ifdef
d830: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41   SQLITE_ENABLE_A
d840: 50 49 5f 41 52 4d 4f 52 0a 20 20 69 66 28 20 21  PI_ARMOR.  if( !
d850: 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65  sqlite3SafetyChe
d860: 63 6b 4f 6b 28 64 62 29 20 29 20 72 65 74 75 72  ckOk(db) ) retur
d870: 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 5f  n SQLITE_MISUSE_
d880: 42 4b 50 54 3b 0a 23 65 6e 64 69 66 0a 20 20 69  BKPT;.#endif.  i
d890: 66 28 20 6d 73 3e 30 20 29 7b 0a 20 20 20 20 73  f( ms>0 ){.    s
d8a0: 71 6c 69 74 65 33 5f 62 75 73 79 5f 68 61 6e 64  qlite3_busy_hand
d8b0: 6c 65 72 28 64 62 2c 20 73 71 6c 69 74 65 44 65  ler(db, sqliteDe
d8c0: 66 61 75 6c 74 42 75 73 79 43 61 6c 6c 62 61 63  faultBusyCallbac
d8d0: 6b 2c 20 28 76 6f 69 64 2a 29 64 62 29 3b 0a 20  k, (void*)db);. 
d8e0: 20 20 20 64 62 2d 3e 62 75 73 79 54 69 6d 65 6f     db->busyTimeo
d8f0: 75 74 20 3d 20 6d 73 3b 0a 20 20 7d 65 6c 73 65  ut = ms;.  }else
d900: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 62 75  {.    sqlite3_bu
d910: 73 79 5f 68 61 6e 64 6c 65 72 28 64 62 2c 20 30  sy_handler(db, 0
d920: 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75  , 0);.  }.  retu
d930: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a  rn SQLITE_OK;.}.
d940: 0a 2f 2a 0a 2a 2a 20 43 61 75 73 65 20 61 6e 79  ./*.** Cause any
d950: 20 70 65 6e 64 69 6e 67 20 6f 70 65 72 61 74 69   pending operati
d960: 6f 6e 20 74 6f 20 73 74 6f 70 20 61 74 20 69 74  on to stop at it
d970: 73 20 65 61 72 6c 69 65 73 74 20 6f 70 70 6f 72  s earliest oppor
d980: 74 75 6e 69 74 79 2e 0a 2a 2f 0a 76 6f 69 64 20  tunity..*/.void 
d990: 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70  sqlite3_interrup
d9a0: 74 28 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a  t(sqlite3 *db){.
d9b0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
d9c0: 41 42 4c 45 5f 41 50 49 5f 41 52 4d 4f 52 0a 20  ABLE_API_ARMOR. 
d9d0: 20 69 66 28 20 21 73 71 6c 69 74 65 33 53 61 66   if( !sqlite3Saf
d9e0: 65 74 79 43 68 65 63 6b 4f 6b 28 64 62 29 20 26  etyCheckOk(db) &
d9f0: 26 20 28 64 62 3d 3d 30 20 7c 7c 20 64 62 2d 3e  & (db==0 || db->
da00: 6d 61 67 69 63 21 3d 53 51 4c 49 54 45 5f 4d 41  magic!=SQLITE_MA
da10: 47 49 43 5f 5a 4f 4d 42 49 45 29 20 29 7b 0a 20  GIC_ZOMBIE) ){. 
da20: 20 20 20 28 76 6f 69 64 29 53 51 4c 49 54 45 5f     (void)SQLITE_
da30: 4d 49 53 55 53 45 5f 42 4b 50 54 3b 0a 20 20 20  MISUSE_BKPT;.   
da40: 20 72 65 74 75 72 6e 3b 0a 20 20 7d 0a 23 65 6e   return;.  }.#en
da50: 64 69 66 0a 20 20 64 62 2d 3e 75 31 2e 69 73 49  dif.  db->u1.isI
da60: 6e 74 65 72 72 75 70 74 65 64 20 3d 20 31 3b 0a  nterrupted = 1;.
da70: 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 66  }.../*.** This f
da80: 75 6e 63 74 69 6f 6e 20 69 73 20 65 78 61 63 74  unction is exact
da90: 6c 79 20 74 68 65 20 73 61 6d 65 20 61 73 20 73  ly the same as s
daa0: 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75  qlite3_create_fu
dab0: 6e 63 74 69 6f 6e 28 29 2c 20 65 78 63 65 70 74  nction(), except
dac0: 0a 2a 2a 20 74 68 61 74 20 69 74 20 69 73 20 64  .** that it is d
dad0: 65 73 69 67 6e 65 64 20 74 6f 20 62 65 20 63 61  esigned to be ca
dae0: 6c 6c 65 64 20 62 79 20 69 6e 74 65 72 6e 61 6c  lled by internal
daf0: 20 63 6f 64 65 2e 20 54 68 65 20 64 69 66 66 65   code. The diffe
db00: 72 65 6e 63 65 20 69 73 0a 2a 2a 20 74 68 61 74  rence is.** that
db10: 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66   if a malloc() f
db20: 61 69 6c 73 20 69 6e 20 73 71 6c 69 74 65 33 5f  ails in sqlite3_
db30: 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28  create_function(
db40: 29 2c 20 61 6e 20 65 72 72 6f 72 20 63 6f 64 65  ), an error code
db50: 0a 2a 2a 20 69 73 20 72 65 74 75 72 6e 65 64 20  .** is returned 
db60: 61 6e 64 20 74 68 65 20 6d 61 6c 6c 6f 63 46 61  and the mallocFa
db70: 69 6c 65 64 20 66 6c 61 67 20 63 6c 65 61 72 65  iled flag cleare
db80: 64 2e 20 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  d. .*/.int sqlit
db90: 65 33 43 72 65 61 74 65 46 75 6e 63 28 0a 20 20  e3CreateFunc(.  
dba0: 73 71 6c 69 74 65 33 20 2a 64 62 2c 0a 20 20 63  sqlite3 *db,.  c
dbb0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 75 6e 63  onst char *zFunc
dbc0: 74 69 6f 6e 4e 61 6d 65 2c 0a 20 20 69 6e 74 20  tionName,.  int 
dbd0: 6e 41 72 67 2c 0a 20 20 69 6e 74 20 65 6e 63 2c  nArg,.  int enc,
dbe0: 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72 44 61  .  void *pUserDa
dbf0: 74 61 2c 0a 20 20 76 6f 69 64 20 28 2a 78 53 46  ta,.  void (*xSF
dc00: 75 6e 63 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e  unc)(sqlite3_con
dc10: 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65  text*,int,sqlite
dc20: 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 0a 20 20 76  3_value **),.  v
dc30: 6f 69 64 20 28 2a 78 53 74 65 70 29 28 73 71 6c  oid (*xStep)(sql
dc40: 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e  ite3_context*,in
dc50: 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20  t,sqlite3_value 
dc60: 2a 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a 78 46  **),.  void (*xF
dc70: 69 6e 61 6c 29 28 73 71 6c 69 74 65 33 5f 63 6f  inal)(sqlite3_co
dc80: 6e 74 65 78 74 2a 29 2c 0a 20 20 46 75 6e 63 44  ntext*),.  FuncD
dc90: 65 73 74 72 75 63 74 6f 72 20 2a 70 44 65 73 74  estructor *pDest
dca0: 72 75 63 74 6f 72 0a 29 7b 0a 20 20 46 75 6e 63  ructor.){.  Func
dcb0: 44 65 66 20 2a 70 3b 0a 20 20 69 6e 74 20 6e 4e  Def *p;.  int nN
dcc0: 61 6d 65 3b 0a 20 20 69 6e 74 20 65 78 74 72 61  ame;.  int extra
dcd0: 46 6c 61 67 73 3b 0a 0a 20 20 61 73 73 65 72 74  Flags;..  assert
dce0: 28 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f  ( sqlite3_mutex_
dcf0: 68 65 6c 64 28 64 62 2d 3e 6d 75 74 65 78 29 20  held(db->mutex) 
dd00: 29 3b 0a 20 20 69 66 28 20 7a 46 75 6e 63 74 69  );.  if( zFuncti
dd10: 6f 6e 4e 61 6d 65 3d 3d 30 20 7c 7c 0a 20 20 20  onName==0 ||.   
dd20: 20 20 20 28 78 53 46 75 6e 63 20 26 26 20 28 78     (xSFunc && (x
dd30: 46 69 6e 61 6c 20 7c 7c 20 78 53 74 65 70 29 29  Final || xStep))
dd40: 20 7c 7c 20 0a 20 20 20 20 20 20 28 21 78 53 46   || .      (!xSF
dd50: 75 6e 63 20 26 26 20 28 78 46 69 6e 61 6c 20 26  unc && (xFinal &
dd60: 26 20 21 78 53 74 65 70 29 29 20 7c 7c 0a 20 20  & !xStep)) ||.  
dd70: 20 20 20 20 28 21 78 53 46 75 6e 63 20 26 26 20      (!xSFunc && 
dd80: 28 21 78 46 69 6e 61 6c 20 26 26 20 78 53 74 65  (!xFinal && xSte
dd90: 70 29 29 20 7c 7c 0a 20 20 20 20 20 20 28 6e 41  p)) ||.      (nA
dda0: 72 67 3c 2d 31 20 7c 7c 20 6e 41 72 67 3e 53 51  rg<-1 || nArg>SQ
ddb0: 4c 49 54 45 5f 4d 41 58 5f 46 55 4e 43 54 49 4f  LITE_MAX_FUNCTIO
ddc0: 4e 5f 41 52 47 29 20 7c 7c 0a 20 20 20 20 20 20  N_ARG) ||.      
ddd0: 28 32 35 35 3c 28 6e 4e 61 6d 65 20 3d 20 73 71  (255<(nName = sq
dde0: 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 20 7a  lite3Strlen30( z
ddf0: 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 29 29 29 20  FunctionName))) 
de00: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51  ){.    return SQ
de10: 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54  LITE_MISUSE_BKPT
de20: 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65 72 74 28  ;.  }..  assert(
de30: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e   SQLITE_FUNC_CON
de40: 53 54 41 4e 54 3d 3d 53 51 4c 49 54 45 5f 44 45  STANT==SQLITE_DE
de50: 54 45 52 4d 49 4e 49 53 54 49 43 20 29 3b 0a 20  TERMINISTIC );. 
de60: 20 65 78 74 72 61 46 6c 61 67 73 20 3d 20 65 6e   extraFlags = en
de70: 63 20 26 20 20 53 51 4c 49 54 45 5f 44 45 54 45  c &  SQLITE_DETE
de80: 52 4d 49 4e 49 53 54 49 43 3b 0a 20 20 65 6e 63  RMINISTIC;.  enc
de90: 20 26 3d 20 28 53 51 4c 49 54 45 5f 46 55 4e 43   &= (SQLITE_FUNC
dea0: 5f 45 4e 43 4d 41 53 4b 7c 53 51 4c 49 54 45 5f  _ENCMASK|SQLITE_
deb0: 41 4e 59 29 3b 0a 20 20 0a 23 69 66 6e 64 65 66  ANY);.  .#ifndef
dec0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
ded0: 31 36 0a 20 20 2f 2a 20 49 66 20 53 51 4c 49 54  16.  /* If SQLIT
dee0: 45 5f 55 54 46 31 36 20 69 73 20 73 70 65 63 69  E_UTF16 is speci
def0: 66 69 65 64 20 61 73 20 74 68 65 20 65 6e 63 6f  fied as the enco
df00: 64 69 6e 67 20 74 79 70 65 2c 20 74 72 61 6e 73  ding type, trans
df10: 66 6f 72 6d 20 74 68 69 73 0a 20 20 2a 2a 20 74  form this.  ** t
df20: 6f 20 6f 6e 65 20 6f 66 20 53 51 4c 49 54 45 5f  o one of SQLITE_
df30: 55 54 46 31 36 4c 45 20 6f 72 20 53 51 4c 49 54  UTF16LE or SQLIT
df40: 45 5f 55 54 46 31 36 42 45 20 75 73 69 6e 67 20  E_UTF16BE using 
df50: 74 68 65 0a 20 20 2a 2a 20 53 51 4c 49 54 45 5f  the.  ** SQLITE_
df60: 55 54 46 31 36 4e 41 54 49 56 45 20 6d 61 63 72  UTF16NATIVE macr
df70: 6f 2e 20 53 51 4c 49 54 45 5f 55 54 46 31 36 20  o. SQLITE_UTF16 
df80: 69 73 20 6e 6f 74 20 75 73 65 64 20 69 6e 74 65  is not used inte
df90: 72 6e 61 6c 6c 79 2e 0a 20 20 2a 2a 0a 20 20 2a  rnally..  **.  *
dfa0: 2a 20 49 66 20 53 51 4c 49 54 45 5f 41 4e 59 20  * If SQLITE_ANY 
dfb0: 69 73 20 73 70 65 63 69 66 69 65 64 2c 20 61 64  is specified, ad
dfc0: 64 20 74 68 72 65 65 20 76 65 72 73 69 6f 6e 73  d three versions
dfd0: 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   of the function
dfe0: 0a 20 20 2a 2a 20 74 6f 20 74 68 65 20 68 61 73  .  ** to the has
dff0: 68 20 74 61 62 6c 65 2e 0a 20 20 2a 2f 0a 20 20  h table..  */.  
e000: 69 66 28 20 65 6e 63 3d 3d 53 51 4c 49 54 45 5f  if( enc==SQLITE_
e010: 55 54 46 31 36 20 29 7b 0a 20 20 20 20 65 6e 63  UTF16 ){.    enc
e020: 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e   = SQLITE_UTF16N
e030: 41 54 49 56 45 3b 0a 20 20 7d 65 6c 73 65 20 69  ATIVE;.  }else i
e040: 66 28 20 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 41  f( enc==SQLITE_A
e050: 4e 59 20 29 7b 0a 20 20 20 20 69 6e 74 20 72 63  NY ){.    int rc
e060: 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
e070: 65 33 43 72 65 61 74 65 46 75 6e 63 28 64 62 2c  e3CreateFunc(db,
e080: 20 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 2c 20   zFunctionName, 
e090: 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46  nArg, SQLITE_UTF
e0a0: 38 7c 65 78 74 72 61 46 6c 61 67 73 2c 0a 20 20  8|extraFlags,.  
e0b0: 20 20 20 20 20 20 20 70 55 73 65 72 44 61 74 61         pUserData
e0c0: 2c 20 78 53 46 75 6e 63 2c 20 78 53 74 65 70 2c  , xSFunc, xStep,
e0d0: 20 78 46 69 6e 61 6c 2c 20 70 44 65 73 74 72 75   xFinal, pDestru
e0e0: 63 74 6f 72 29 3b 0a 20 20 20 20 69 66 28 20 72  ctor);.    if( r
e0f0: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
e100: 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
e110: 65 33 43 72 65 61 74 65 46 75 6e 63 28 64 62 2c  e3CreateFunc(db,
e120: 20 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 2c 20   zFunctionName, 
e130: 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46  nArg, SQLITE_UTF
e140: 31 36 4c 45 7c 65 78 74 72 61 46 6c 61 67 73 2c  16LE|extraFlags,
e150: 0a 20 20 20 20 20 20 20 20 20 20 70 55 73 65 72  .          pUser
e160: 44 61 74 61 2c 20 78 53 46 75 6e 63 2c 20 78 53  Data, xSFunc, xS
e170: 74 65 70 2c 20 78 46 69 6e 61 6c 2c 20 70 44 65  tep, xFinal, pDe
e180: 73 74 72 75 63 74 6f 72 29 3b 0a 20 20 20 20 7d  structor);.    }
e190: 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c  .    if( rc!=SQL
e1a0: 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
e1b0: 72 65 74 75 72 6e 20 72 63 3b 0a 20 20 20 20 7d  return rc;.    }
e1c0: 0a 20 20 20 20 65 6e 63 20 3d 20 53 51 4c 49 54  .    enc = SQLIT
e1d0: 45 5f 55 54 46 31 36 42 45 3b 0a 20 20 7d 0a 23  E_UTF16BE;.  }.#
e1e0: 65 6c 73 65 0a 20 20 65 6e 63 20 3d 20 53 51 4c  else.  enc = SQL
e1f0: 49 54 45 5f 55 54 46 38 3b 0a 23 65 6e 64 69 66  ITE_UTF8;.#endif
e200: 0a 20 20 0a 20 20 2f 2a 20 43 68 65 63 6b 20 69  .  .  /* Check i
e210: 66 20 61 6e 20 65 78 69 73 74 69 6e 67 20 66 75  f an existing fu
e220: 6e 63 74 69 6f 6e 20 69 73 20 62 65 69 6e 67 20  nction is being 
e230: 6f 76 65 72 72 69 64 64 65 6e 20 6f 72 20 64 65  overridden or de
e240: 6c 65 74 65 64 2e 20 49 66 20 73 6f 2c 0a 20 20  leted. If so,.  
e250: 2a 2a 20 61 6e 64 20 74 68 65 72 65 20 61 72 65  ** and there are
e260: 20 61 63 74 69 76 65 20 56 4d 73 2c 20 74 68 65   active VMs, the
e270: 6e 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f  n return SQLITE_
e280: 42 55 53 59 2e 20 49 66 20 61 20 66 75 6e 63 74  BUSY. If a funct
e290: 69 6f 6e 0a 20 20 2a 2a 20 69 73 20 62 65 69 6e  ion.  ** is bein
e2a0: 67 20 6f 76 65 72 72 69 64 64 65 6e 2f 64 65 6c  g overridden/del
e2b0: 65 74 65 64 20 62 75 74 20 74 68 65 72 65 20 61  eted but there a
e2c0: 72 65 20 6e 6f 20 61 63 74 69 76 65 20 56 4d 73  re no active VMs
e2d0: 2c 20 61 6c 6c 6f 77 20 74 68 65 0a 20 20 2a 2a  , allow the.  **
e2e0: 20 6f 70 65 72 61 74 69 6f 6e 20 74 6f 20 63 6f   operation to co
e2f0: 6e 74 69 6e 75 65 20 62 75 74 20 69 6e 76 61 6c  ntinue but inval
e300: 69 64 61 74 65 20 61 6c 6c 20 70 72 65 63 6f 6d  idate all precom
e310: 70 69 6c 65 64 20 73 74 61 74 65 6d 65 6e 74 73  piled statements
e320: 2e 0a 20 20 2a 2f 0a 20 20 70 20 3d 20 73 71 6c  ..  */.  p = sql
e330: 69 74 65 33 46 69 6e 64 46 75 6e 63 74 69 6f 6e  ite3FindFunction
e340: 28 64 62 2c 20 7a 46 75 6e 63 74 69 6f 6e 4e 61  (db, zFunctionNa
e350: 6d 65 2c 20 6e 41 72 67 2c 20 28 75 38 29 65 6e  me, nArg, (u8)en
e360: 63 2c 20 30 29 3b 0a 20 20 69 66 28 20 70 20 26  c, 0);.  if( p &
e370: 26 20 28 70 2d 3e 66 75 6e 63 46 6c 61 67 73 20  & (p->funcFlags 
e380: 26 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45 4e  & SQLITE_FUNC_EN
e390: 43 4d 41 53 4b 29 3d 3d 65 6e 63 20 26 26 20 70  CMASK)==enc && p
e3a0: 2d 3e 6e 41 72 67 3d 3d 6e 41 72 67 20 29 7b 0a  ->nArg==nArg ){.
e3b0: 20 20 20 20 69 66 28 20 64 62 2d 3e 6e 56 64 62      if( db->nVdb
e3c0: 65 41 63 74 69 76 65 20 29 7b 0a 20 20 20 20 20  eActive ){.     
e3d0: 20 73 71 6c 69 74 65 33 45 72 72 6f 72 57 69 74   sqlite3ErrorWit
e3e0: 68 4d 73 67 28 64 62 2c 20 53 51 4c 49 54 45 5f  hMsg(db, SQLITE_
e3f0: 42 55 53 59 2c 20 0a 20 20 20 20 20 20 20 20 22  BUSY, .        "
e400: 75 6e 61 62 6c 65 20 74 6f 20 64 65 6c 65 74 65  unable to delete
e410: 2f 6d 6f 64 69 66 79 20 75 73 65 72 2d 66 75 6e  /modify user-fun
e420: 63 74 69 6f 6e 20 64 75 65 20 74 6f 20 61 63 74  ction due to act
e430: 69 76 65 20 73 74 61 74 65 6d 65 6e 74 73 22 29  ive statements")
e440: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
e450: 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65  !db->mallocFaile
e460: 64 20 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72  d );.      retur
e470: 6e 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20  n SQLITE_BUSY;. 
e480: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
e490: 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65  sqlite3ExpirePre
e4a0: 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28  paredStatements(
e4b0: 64 62 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a  db);.    }.  }..
e4c0: 20 20 70 20 3d 20 73 71 6c 69 74 65 33 46 69 6e    p = sqlite3Fin
e4d0: 64 46 75 6e 63 74 69 6f 6e 28 64 62 2c 20 7a 46  dFunction(db, zF
e4e0: 75 6e 63 74 69 6f 6e 4e 61 6d 65 2c 20 6e 41 72  unctionName, nAr
e4f0: 67 2c 20 28 75 38 29 65 6e 63 2c 20 31 29 3b 0a  g, (u8)enc, 1);.
e500: 20 20 61 73 73 65 72 74 28 70 20 7c 7c 20 64 62    assert(p || db
e510: 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 29 3b  ->mallocFailed);
e520: 0a 20 20 69 66 28 20 21 70 20 29 7b 0a 20 20 20  .  if( !p ){.   
e530: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4e   return SQLITE_N
e540: 4f 4d 45 4d 5f 42 4b 50 54 3b 0a 20 20 7d 0a 0a  OMEM_BKPT;.  }..
e550: 20 20 2f 2a 20 49 66 20 61 6e 20 6f 6c 64 65 72    /* If an older
e560: 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 68 65 20   version of the 
e570: 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 61 20  function with a 
e580: 63 6f 6e 66 69 67 75 72 65 64 20 64 65 73 74 72  configured destr
e590: 75 63 74 6f 72 20 69 73 0a 20 20 2a 2a 20 62 65  uctor is.  ** be
e5a0: 69 6e 67 20 72 65 70 6c 61 63 65 64 20 69 6e 76  ing replaced inv
e5b0: 6f 6b 65 20 74 68 65 20 64 65 73 74 72 75 63 74  oke the destruct
e5c0: 6f 72 20 66 75 6e 63 74 69 6f 6e 20 68 65 72 65  or function here
e5d0: 2e 20 2a 2f 0a 20 20 66 75 6e 63 74 69 6f 6e 44  . */.  functionD
e5e0: 65 73 74 72 6f 79 28 64 62 2c 20 70 29 3b 0a 0a  estroy(db, p);..
e5f0: 20 20 69 66 28 20 70 44 65 73 74 72 75 63 74 6f    if( pDestructo
e600: 72 20 29 7b 0a 20 20 20 20 70 44 65 73 74 72 75  r ){.    pDestru
e610: 63 74 6f 72 2d 3e 6e 52 65 66 2b 2b 3b 0a 20 20  ctor->nRef++;.  
e620: 7d 0a 20 20 70 2d 3e 75 2e 70 44 65 73 74 72 75  }.  p->u.pDestru
e630: 63 74 6f 72 20 3d 20 70 44 65 73 74 72 75 63 74  ctor = pDestruct
e640: 6f 72 3b 0a 20 20 70 2d 3e 66 75 6e 63 46 6c 61  or;.  p->funcFla
e650: 67 73 20 3d 20 28 70 2d 3e 66 75 6e 63 46 6c 61  gs = (p->funcFla
e660: 67 73 20 26 20 53 51 4c 49 54 45 5f 46 55 4e 43  gs & SQLITE_FUNC
e670: 5f 45 4e 43 4d 41 53 4b 29 20 7c 20 65 78 74 72  _ENCMASK) | extr
e680: 61 46 6c 61 67 73 3b 0a 20 20 74 65 73 74 63 61  aFlags;.  testca
e690: 73 65 28 20 70 2d 3e 66 75 6e 63 46 6c 61 67 73  se( p->funcFlags
e6a0: 20 26 20 53 51 4c 49 54 45 5f 44 45 54 45 52 4d   & SQLITE_DETERM
e6b0: 49 4e 49 53 54 49 43 20 29 3b 0a 20 20 70 2d 3e  INISTIC );.  p->
e6c0: 78 53 46 75 6e 63 20 3d 20 78 53 46 75 6e 63 20  xSFunc = xSFunc 
e6d0: 3f 20 78 53 46 75 6e 63 20 3a 20 78 53 74 65 70  ? xSFunc : xStep
e6e0: 3b 0a 20 20 70 2d 3e 78 46 69 6e 61 6c 69 7a 65  ;.  p->xFinalize
e6f0: 20 3d 20 78 46 69 6e 61 6c 3b 0a 20 20 70 2d 3e   = xFinal;.  p->
e700: 70 55 73 65 72 44 61 74 61 20 3d 20 70 55 73 65  pUserData = pUse
e710: 72 44 61 74 61 3b 0a 20 20 70 2d 3e 6e 41 72 67  rData;.  p->nArg
e720: 20 3d 20 28 75 31 36 29 6e 41 72 67 3b 0a 20 20   = (u16)nArg;.  
e730: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
e740: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 72 65 61 74  ;.}../*.** Creat
e750: 65 20 6e 65 77 20 75 73 65 72 20 66 75 6e 63 74  e new user funct
e760: 69 6f 6e 73 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c  ions..*/.int sql
e770: 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63  ite3_create_func
e780: 74 69 6f 6e 28 0a 20 20 73 71 6c 69 74 65 33 20  tion(.  sqlite3 
e790: 2a 64 62 2c 0a 20 20 63 6f 6e 73 74 20 63 68 61  *db,.  const cha
e7a0: 72 20 2a 7a 46 75 6e 63 2c 0a 20 20 69 6e 74 20  r *zFunc,.  int 
e7b0: 6e 41 72 67 2c 0a 20 20 69 6e 74 20 65 6e 63 2c  nArg,.  int enc,
e7c0: 0a 20 20 76 6f 69 64 20 2a 70 2c 0a 20 20 76 6f  .  void *p,.  vo
e7d0: 69 64 20 28 2a 78 53 46 75 6e 63 29 28 73 71 6c  id (*xSFunc)(sql
e7e0: 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e  ite3_context*,in
e7f0: 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20  t,sqlite3_value 
e800: 2a 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a 78 53  **),.  void (*xS
e810: 74 65 70 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e  tep)(sqlite3_con
e820: 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65  text*,int,sqlite
e830: 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 0a 20 20 76  3_value **),.  v
e840: 6f 69 64 20 28 2a 78 46 69 6e 61 6c 29 28 73 71  oid (*xFinal)(sq
e850: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 0a  lite3_context*).
e860: 29 7b 0a 20 20 72 65 74 75 72 6e 20 73 71 6c 69  ){.  return sqli
e870: 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74  te3_create_funct
e880: 69 6f 6e 5f 76 32 28 64 62 2c 20 7a 46 75 6e 63  ion_v2(db, zFunc
e890: 2c 20 6e 41 72 67 2c 20 65 6e 63 2c 20 70 2c 20  , nArg, enc, p, 
e8a0: 78 53 46 75 6e 63 2c 20 78 53 74 65 70 2c 0a 20  xSFunc, xStep,. 
e8b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e8c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e8d0: 20 20 20 78 46 69 6e 61 6c 2c 20 30 29 3b 0a 7d     xFinal, 0);.}
e8e0: 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 63 72  ..int sqlite3_cr
e8f0: 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 76 32  eate_function_v2
e900: 28 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 2c  (.  sqlite3 *db,
e910: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
e920: 46 75 6e 63 2c 0a 20 20 69 6e 74 20 6e 41 72 67  Func,.  int nArg
e930: 2c 0a 20 20 69 6e 74 20 65 6e 63 2c 0a 20 20 76  ,.  int enc,.  v
e940: 6f 69 64 20 2a 70 2c 0a 20 20 76 6f 69 64 20 28  oid *p,.  void (
e950: 2a 78 53 46 75 6e 63 29 28 73 71 6c 69 74 65 33  *xSFunc)(sqlite3
e960: 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71  _context*,int,sq
e970: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c  lite3_value **),
e980: 0a 20 20 76 6f 69 64 20 28 2a 78 53 74 65 70 29  .  void (*xStep)
e990: 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
e9a0: 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61  *,int,sqlite3_va
e9b0: 6c 75 65 20 2a 2a 29 2c 0a 20 20 76 6f 69 64 20  lue **),.  void 
e9c0: 28 2a 78 46 69 6e 61 6c 29 28 73 71 6c 69 74 65  (*xFinal)(sqlite
e9d0: 33 5f 63 6f 6e 74 65 78 74 2a 29 2c 0a 20 20 76  3_context*),.  v
e9e0: 6f 69 64 20 28 2a 78 44 65 73 74 72 6f 79 29 28  oid (*xDestroy)(
e9f0: 76 6f 69 64 20 2a 29 0a 29 7b 0a 20 20 69 6e 74  void *).){.  int
ea00: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52   rc = SQLITE_ERR
ea10: 4f 52 3b 0a 20 20 46 75 6e 63 44 65 73 74 72 75  OR;.  FuncDestru
ea20: 63 74 6f 72 20 2a 70 41 72 67 20 3d 20 30 3b 0a  ctor *pArg = 0;.
ea30: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
ea40: 4e 41 42 4c 45 5f 41 50 49 5f 41 52 4d 4f 52 0a  NABLE_API_ARMOR.
ea50: 20 20 69 66 28 20 21 73 71 6c 69 74 65 33 53 61    if( !sqlite3Sa
ea60: 66 65 74 79 43 68 65 63 6b 4f 6b 28 64 62 29 20  fetyCheckOk(db) 
ea70: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51  ){.    return SQ
ea80: 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54  LITE_MISUSE_BKPT
ea90: 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 73  ;.  }.#endif.  s
eaa0: 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74  qlite3_mutex_ent
eab0: 65 72 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20  er(db->mutex);. 
eac0: 20 69 66 28 20 78 44 65 73 74 72 6f 79 20 29 7b   if( xDestroy ){
ead0: 0a 20 20 20 20 70 41 72 67 20 3d 20 28 46 75 6e  .    pArg = (Fun
eae0: 63 44 65 73 74 72 75 63 74 6f 72 20 2a 29 73 71  cDestructor *)sq
eaf0: 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72  lite3DbMallocZer
eb00: 6f 28 64 62 2c 20 73 69 7a 65 6f 66 28 46 75 6e  o(db, sizeof(Fun
eb10: 63 44 65 73 74 72 75 63 74 6f 72 29 29 3b 0a 20  cDestructor));. 
eb20: 20 20 20 69 66 28 20 21 70 41 72 67 20 29 7b 0a     if( !pArg ){.
eb30: 20 20 20 20 20 20 78 44 65 73 74 72 6f 79 28 70        xDestroy(p
eb40: 29 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6f 75  );.      goto ou
eb50: 74 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 41 72  t;.    }.    pAr
eb60: 67 2d 3e 78 44 65 73 74 72 6f 79 20 3d 20 78 44  g->xDestroy = xD
eb70: 65 73 74 72 6f 79 3b 0a 20 20 20 20 70 41 72 67  estroy;.    pArg
eb80: 2d 3e 70 55 73 65 72 44 61 74 61 20 3d 20 70 3b  ->pUserData = p;
eb90: 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69  .  }.  rc = sqli
eba0: 74 65 33 43 72 65 61 74 65 46 75 6e 63 28 64 62  te3CreateFunc(db
ebb0: 2c 20 7a 46 75 6e 63 2c 20 6e 41 72 67 2c 20 65  , zFunc, nArg, e
ebc0: 6e 63 2c 20 70 2c 20 78 53 46 75 6e 63 2c 20 78  nc, p, xSFunc, x
ebd0: 53 74 65 70 2c 20 78 46 69 6e 61 6c 2c 20 70 41  Step, xFinal, pA
ebe0: 72 67 29 3b 0a 20 20 69 66 28 20 70 41 72 67 20  rg);.  if( pArg 
ebf0: 26 26 20 70 41 72 67 2d 3e 6e 52 65 66 3d 3d 30  && pArg->nRef==0
ec00: 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
ec10: 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b  rc!=SQLITE_OK );
ec20: 0a 20 20 20 20 78 44 65 73 74 72 6f 79 28 70 29  .    xDestroy(p)
ec30: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 44 62 46  ;.    sqlite3DbF
ec40: 72 65 65 28 64 62 2c 20 70 41 72 67 29 3b 0a 20  ree(db, pArg);. 
ec50: 20 7d 0a 0a 20 6f 75 74 3a 0a 20 20 72 63 20 3d   }.. out:.  rc =
ec60: 20 73 71 6c 69 74 65 33 41 70 69 45 78 69 74 28   sqlite3ApiExit(
ec70: 64 62 2c 20 72 63 29 3b 0a 20 20 73 71 6c 69 74  db, rc);.  sqlit
ec80: 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 64  e3_mutex_leave(d
ec90: 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 72 65 74  b->mutex);.  ret
eca0: 75 72 6e 20 72 63 3b 0a 7d 0a 0a 23 69 66 6e 64  urn rc;.}..#ifnd
ecb0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  ef SQLITE_OMIT_U
ecc0: 54 46 31 36 0a 69 6e 74 20 73 71 6c 69 74 65 33  TF16.int sqlite3
ecd0: 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e  _create_function
ece0: 31 36 28 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  16(.  sqlite3 *d
ecf0: 62 2c 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20  b,.  const void 
ed00: 2a 7a 46 75 6e 63 74 69 6f 6e 4e 61 6d 65 2c 0a  *zFunctionName,.
ed10: 20 20 69 6e 74 20 6e 41 72 67 2c 0a 20 20 69 6e    int nArg,.  in
ed20: 74 20 65 54 65 78 74 52 65 70 2c 0a 20 20 76 6f  t eTextRep,.  vo
ed30: 69 64 20 2a 70 2c 0a 20 20 76 6f 69 64 20 28 2a  id *p,.  void (*
ed40: 78 53 46 75 6e 63 29 28 73 71 6c 69 74 65 33 5f  xSFunc)(sqlite3_
ed50: 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c  context*,int,sql
ed60: 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 2c 0a 20  ite3_value**),. 
ed70: 20 76 6f 69 64 20 28 2a 78 53 74 65 70 29 28 73   void (*xStep)(s
ed80: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c  qlite3_context*,
ed90: 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75  int,sqlite3_valu
eda0: 65 2a 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a 78  e**),.  void (*x
edb0: 46 69 6e 61 6c 29 28 73 71 6c 69 74 65 33 5f 63  Final)(sqlite3_c
edc0: 6f 6e 74 65 78 74 2a 29 0a 29 7b 0a 20 20 69 6e  ontext*).){.  in
edd0: 74 20 72 63 3b 0a 20 20 63 68 61 72 20 2a 7a 46  t rc;.  char *zF
ede0: 75 6e 63 38 3b 0a 0a 23 69 66 64 65 66 20 53 51  unc8;..#ifdef SQ
edf0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41 50 49 5f  LITE_ENABLE_API_
ee00: 41 52 4d 4f 52 0a 20 20 69 66 28 20 21 73 71 6c  ARMOR.  if( !sql
ee10: 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 4f  ite3SafetyCheckO
ee20: 6b 28 64 62 29 20 7c 7c 20 7a 46 75 6e 63 74 69  k(db) || zFuncti
ee30: 6f 6e 4e 61 6d 65 3d 3d 30 20 29 20 72 65 74 75  onName==0 ) retu
ee40: 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45  rn SQLITE_MISUSE
ee50: 5f 42 4b 50 54 3b 0a 23 65 6e 64 69 66 0a 20 20  _BKPT;.#endif.  
ee60: 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e  sqlite3_mutex_en
ee70: 74 65 72 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0a  ter(db->mutex);.
ee80: 20 20 61 73 73 65 72 74 28 20 21 64 62 2d 3e 6d    assert( !db->m
ee90: 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20  allocFailed );. 
eea0: 20 7a 46 75 6e 63 38 20 3d 20 73 71 6c 69 74 65   zFunc8 = sqlite
eeb0: 33 55 74 66 31 36 74 6f 38 28 64 62 2c 20 7a 46  3Utf16to8(db, zF
eec0: 75 6e 63 74 69 6f 6e 4e 61 6d 65 2c 20 2d 31 2c  unctionName, -1,
eed0: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54   SQLITE_UTF16NAT
eee0: 49 56 45 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  IVE);.  rc = sql
eef0: 69 74 65 33 43 72 65 61 74 65 46 75 6e 63 28 64  ite3CreateFunc(d
ef00: 62 2c 20 7a 46 75 6e 63 38 2c 20 6e 41 72 67 2c  b, zFunc8, nArg,
ef10: 20 65 54 65 78 74 52 65 70 2c 20 70 2c 20 78 53   eTextRep, p, xS
ef20: 46 75 6e 63 2c 78 53 74 65 70 2c 78 46 69 6e 61  Func,xStep,xFina
ef30: 6c 2c 30 29 3b 0a 20 20 73 71 6c 69 74 65 33 44  l,0);.  sqlite3D
ef40: 62 46 72 65 65 28 64 62 2c 20 7a 46 75 6e 63 38  bFree(db, zFunc8
ef50: 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
ef60: 33 41 70 69 45 78 69 74 28 64 62 2c 20 72 63 29  3ApiExit(db, rc)
ef70: 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  ;.  sqlite3_mute
ef80: 78 5f 6c 65 61 76 65 28 64 62 2d 3e 6d 75 74 65  x_leave(db->mute
ef90: 78 29 3b 0a 20 20 72 65 74 75 72 6e 20 72 63 3b  x);.  return rc;
efa0: 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a  .}.#endif.../*.*
efb0: 2a 20 44 65 63 6c 61 72 65 20 74 68 61 74 20 61  * Declare that a
efc0: 20 66 75 6e 63 74 69 6f 6e 20 68 61 73 20 62 65   function has be
efd0: 65 6e 20 6f 76 65 72 6c 6f 61 64 65 64 20 62 79  en overloaded by
efe0: 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
eff0: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 66  ..**.** If the f
f000: 75 6e 63 74 69 6f 6e 20 61 6c 72 65 61 64 79 20  unction already 
f010: 65 78 69 73 74 73 20 61 73 20 61 20 72 65 67 75  exists as a regu
f020: 6c 61 72 20 67 6c 6f 62 61 6c 20 66 75 6e 63 74  lar global funct
f030: 69 6f 6e 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 69  ion, then.** thi
f040: 73 20 72 6f 75 74 69 6e 65 20 69 73 20 61 20 6e  s routine is a n
f050: 6f 2d 6f 70 2e 20 20 49 66 20 74 68 65 20 66 75  o-op.  If the fu
f060: 6e 63 74 69 6f 6e 20 64 6f 65 73 20 6e 6f 74 20  nction does not 
f070: 65 78 69 73 74 2c 20 74 68 65 6e 20 63 72 65 61  exist, then crea
f080: 74 65 0a 2a 2a 20 61 20 6e 65 77 20 6f 6e 65 20  te.** a new one 
f090: 74 68 61 74 20 61 6c 77 61 79 73 20 74 68 72 6f  that always thro
f0a0: 77 73 20 61 20 72 75 6e 2d 74 69 6d 65 20 65 72  ws a run-time er
f0b0: 72 6f 72 2e 20 20 0a 2a 2a 0a 2a 2a 20 57 68 65  ror.  .**.** Whe
f0c0: 6e 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73  n virtual tables
f0d0: 20 69 6e 74 65 6e 64 20 74 6f 20 70 72 6f 76 69   intend to provi
f0e0: 64 65 20 61 6e 20 6f 76 65 72 6c 6f 61 64 65 64  de an overloaded
f0f0: 20 66 75 6e 63 74 69 6f 6e 2c 20 74 68 65 79 0a   function, they.
f100: 2a 2a 20 73 68 6f 75 6c 64 20 63 61 6c 6c 20 74  ** should call t
f110: 68 69 73 20 72 6f 75 74 69 6e 65 20 74 6f 20 6d  his routine to m
f120: 61 6b 65 20 73 75 72 65 20 74 68 65 20 67 6c 6f  ake sure the glo
f130: 62 61 6c 20 66 75 6e 63 74 69 6f 6e 20 65 78 69  bal function exi
f140: 73 74 73 2e 0a 2a 2a 20 41 20 67 6c 6f 62 61 6c  sts..** A global
f150: 20 66 75 6e 63 74 69 6f 6e 20 6d 75 73 74 20 65   function must e
f160: 78 69 73 74 20 69 6e 20 6f 72 64 65 72 20 66 6f  xist in order fo
f170: 72 20 6e 61 6d 65 20 72 65 73 6f 6c 75 74 69 6f  r name resolutio
f180: 6e 20 74 6f 20 77 6f 72 6b 0a 2a 2a 20 70 72 6f  n to work.** pro
f190: 70 65 72 6c 79 2e 0a 2a 2f 0a 69 6e 74 20 73 71  perly..*/.int sq
f1a0: 6c 69 74 65 33 5f 6f 76 65 72 6c 6f 61 64 5f 66  lite3_overload_f
f1b0: 75 6e 63 74 69 6f 6e 28 0a 20 20 73 71 6c 69 74  unction(.  sqlit
f1c0: 65 33 20 2a 64 62 2c 0a 20 20 63 6f 6e 73 74 20  e3 *db,.  const 
f1d0: 63 68 61 72 20 2a 7a 4e 61 6d 65 2c 0a 20 20 69  char *zName,.  i
f1e0: 6e 74 20 6e 41 72 67 0a 29 7b 0a 20 20 69 6e 74  nt nArg.){.  int
f1f0: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b   rc = SQLITE_OK;
f200: 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
f210: 45 4e 41 42 4c 45 5f 41 50 49 5f 41 52 4d 4f 52  ENABLE_API_ARMOR
f220: 0a 20 20 69 66 28 20 21 73 71 6c 69 74 65 33 53  .  if( !sqlite3S
f230: 61 66 65 74 79 43 68 65 63 6b 4f 6b 28 64 62 29  afetyCheckOk(db)
f240: 20 7c 7c 20 7a 4e 61 6d 65 3d 3d 30 20 7c 7c 20   || zName==0 || 
f250: 6e 41 72 67 3c 2d 32 20 29 7b 0a 20 20 20 20 72  nArg<-2 ){.    r
f260: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53  eturn SQLITE_MIS
f270: 55 53 45 5f 42 4b 50 54 3b 0a 20 20 7d 0a 23 65  USE_BKPT;.  }.#e
f280: 6e 64 69 66 0a 20 20 73 71 6c 69 74 65 33 5f 6d  ndif.  sqlite3_m
f290: 75 74 65 78 5f 65 6e 74 65 72 28 64 62 2d 3e 6d  utex_enter(db->m
f2a0: 75 74 65 78 29 3b 0a 20 20 69 66 28 20 73 71 6c  utex);.  if( sql
f2b0: 69 74 65 33 46 69 6e 64 46 75 6e 63 74 69 6f 6e  ite3FindFunction
f2c0: 28 64 62 2c 20 7a 4e 61 6d 65 2c 20 6e 41 72 67  (db, zName, nArg
f2d0: 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 30  , SQLITE_UTF8, 0
f2e0: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d  )==0 ){.    rc =
f2f0: 20 73 71 6c 69 74 65 33 43 72 65 61 74 65 46 75   sqlite3CreateFu
f300: 6e 63 28 64 62 2c 20 7a 4e 61 6d 65 2c 20 6e 41  nc(db, zName, nA
f310: 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c  rg, SQLITE_UTF8,
f320: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f330: 20 20 20 20 20 20 20 20 20 20 20 20 30 2c 20 73              0, s
f340: 71 6c 69 74 65 33 49 6e 76 61 6c 69 64 46 75 6e  qlite3InvalidFun
f350: 63 74 69 6f 6e 2c 20 30 2c 20 30 2c 20 30 29 3b  ction, 0, 0, 0);
f360: 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69  .  }.  rc = sqli
f370: 74 65 33 41 70 69 45 78 69 74 28 64 62 2c 20 72  te3ApiExit(db, r
f380: 63 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75  c);.  sqlite3_mu
f390: 74 65 78 5f 6c 65 61 76 65 28 64 62 2d 3e 6d 75  tex_leave(db->mu
f3a0: 74 65 78 29 3b 0a 20 20 72 65 74 75 72 6e 20 72  tex);.  return r
f3b0: 63 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51  c;.}..#ifndef SQ
f3c0: 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45 0a  LITE_OMIT_TRACE.
f3d0: 2f 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 61  /*.** Register a
f3e0: 20 74 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 2e   trace function.
f3f0: 20 20 54 68 65 20 70 41 72 67 20 66 72 6f 6d 20    The pArg from 
f400: 74 68 65 20 70 72 65 76 69 6f 75 73 6c 79 20 72  the previously r
f410: 65 67 69 73 74 65 72 65 64 20 74 72 61 63 65 0a  egistered trace.
f420: 2a 2a 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20  ** is returned. 
f430: 20 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 74   .**.** A NULL t
f440: 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20 6d 65  race function me
f450: 61 6e 73 20 74 68 61 74 20 6e 6f 20 74 72 61 63  ans that no trac
f460: 69 6e 67 20 69 73 20 65 78 65 63 75 74 65 73 2e  ing is executes.
f470: 20 20 41 20 6e 6f 6e 2d 4e 55 4c 4c 0a 2a 2a 20    A non-NULL.** 
f480: 74 72 61 63 65 20 69 73 20 61 20 70 6f 69 6e 74  trace is a point
f490: 65 72 20 74 6f 20 61 20 66 75 6e 63 74 69 6f 6e  er to a function
f4a0: 20 74 68 61 74 20 69 73 20 69 6e 76 6f 6b 65 64   that is invoked
f4b0: 20 61 74 20 74 68 65 20 73 74 61 72 74 20 6f 66   at the start of
f4c0: 20 65 61 63 68 0a 2a 2a 20 53 51 4c 20 73 74 61   each.** SQL sta
f4d0: 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 23 69 66 6e 64  tement..*/.#ifnd
f4e0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44  ef SQLITE_OMIT_D
f4f0: 45 50 52 45 43 41 54 45 44 0a 76 6f 69 64 20 2a  EPRECATED.void *
f500: 73 71 6c 69 74 65 33 5f 74 72 61 63 65 28 73 71  sqlite3_trace(sq
f510: 6c 69 74 65 33 20 2a 64 62 2c 20 76 6f 69 64 28  lite3 *db, void(
f520: 2a 78 54 72 61 63 65 29 28 76 6f 69 64 2a 2c 63  *xTrace)(void*,c
f530: 6f 6e 73 74 20 63 68 61 72 2a 29 2c 20 76 6f 69  onst char*), voi
f540: 64 20 2a 70 41 72 67 29 7b 0a 20 20 76 6f 69 64  d *pArg){.  void
f550: 20 2a 70 4f 6c 64 3b 0a 0a 23 69 66 64 65 66 20   *pOld;..#ifdef 
f560: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41 50  SQLITE_ENABLE_AP
f570: 49 5f 41 52 4d 4f 52 0a 20 20 69 66 28 20 21 73  I_ARMOR.  if( !s
f580: 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63  qlite3SafetyChec
f590: 6b 4f 6b 28 64 62 29 20 29 7b 0a 20 20 20 20 28  kOk(db) ){.    (
f5a0: 76 6f 69 64 29 53 51 4c 49 54 45 5f 4d 49 53 55  void)SQLITE_MISU
f5b0: 53 45 5f 42 4b 50 54 3b 0a 20 20 20 20 72 65 74  SE_BKPT;.    ret
f5c0: 75 72 6e 20 30 3b 0a 20 20 7d 0a 23 65 6e 64 69  urn 0;.  }.#endi
f5d0: 66 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  f.  sqlite3_mute
f5e0: 78 5f 65 6e 74 65 72 28 64 62 2d 3e 6d 75 74 65  x_enter(db->mute
f5f0: 78 29 3b 0a 20 20 70 4f 6c 64 20 3d 20 64 62 2d  x);.  pOld = db-
f600: 3e 70 54 72 61 63 65 41 72 67 3b 0a 20 20 64 62  >pTraceArg;.  db
f610: 2d 3e 6d 54 72 61 63 65 20 3d 20 78 54 72 61 63  ->mTrace = xTrac
f620: 65 20 3f 20 53 51 4c 49 54 45 5f 54 52 41 43 45  e ? SQLITE_TRACE
f630: 5f 4c 45 47 41 43 59 20 3a 20 30 3b 0a 20 20 64  _LEGACY : 0;.  d
f640: 62 2d 3e 78 54 72 61 63 65 20 3d 20 28 69 6e 74  b->xTrace = (int
f650: 28 2a 29 28 75 33 32 2c 76 6f 69 64 2a 2c 76 6f  (*)(u32,void*,vo
f660: 69 64 2a 2c 76 6f 69 64 2a 29 29 78 54 72 61 63  id*,void*))xTrac
f670: 65 3b 0a 20 20 64 62 2d 3e 70 54 72 61 63 65 41  e;.  db->pTraceA
f680: 72 67 20 3d 20 70 41 72 67 3b 0a 20 20 73 71 6c  rg = pArg;.  sql
f690: 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65  ite3_mutex_leave
f6a0: 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 72  (db->mutex);.  r
f6b0: 65 74 75 72 6e 20 70 4f 6c 64 3b 0a 7d 0a 23 65  eturn pOld;.}.#e
f6c0: 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
f6d0: 4d 49 54 5f 44 45 50 52 45 43 41 54 45 44 20 2a  MIT_DEPRECATED *
f6e0: 2f 0a 0a 2f 2a 20 52 65 67 69 73 74 65 72 20 61  /../* Register a
f6f0: 20 74 72 61 63 65 20 63 61 6c 6c 62 61 63 6b 20   trace callback 
f700: 75 73 69 6e 67 20 74 68 65 20 76 65 72 73 69 6f  using the versio
f710: 6e 2d 32 20 69 6e 74 65 72 66 61 63 65 2e 0a 2a  n-2 interface..*
f720: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 74 72  /.int sqlite3_tr
f730: 61 63 65 5f 76 32 28 0a 20 20 73 71 6c 69 74 65  ace_v2(.  sqlite
f740: 33 20 2a 64 62 2c 20 20 20 20 20 20 20 20 20 20  3 *db,          
f750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f760: 20 20 20 20 20 2f 2a 20 54 72 61 63 65 20 74 68       /* Trace th
f770: 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f  is connection */
f780: 0a 20 20 75 6e 73 69 67 6e 65 64 20 6d 54 72 61  .  unsigned mTra
f790: 63 65 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  ce,             
f7a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
f7b0: 20 4d 61 73 6b 20 6f 66 20 65 76 65 6e 74 73 20   Mask of events 
f7c0: 74 6f 20 62 65 20 74 72 61 63 65 64 20 2a 2f 0a  to be traced */.
f7d0: 20 20 69 6e 74 28 2a 78 54 72 61 63 65 29 28 75    int(*xTrace)(u
f7e0: 6e 73 69 67 6e 65 64 2c 76 6f 69 64 2a 2c 76 6f  nsigned,void*,vo
f7f0: 69 64 2a 2c 76 6f 69 64 2a 29 2c 20 20 2f 2a 20  id*,void*),  /* 
f800: 43 61 6c 6c 62 61 63 6b 20 74 6f 20 69 6e 76 6f  Callback to invo
f810: 6b 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41  ke */.  void *pA
f820: 72 67 20 20 20 20 20 20 20 20 20 20 20 20 20 20  rg              
f830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f840: 20 20 20 2f 2a 20 43 6f 6e 74 65 78 74 20 2a 2f     /* Context */
f850: 0a 29 7b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .){.#ifdef SQLIT
f860: 45 5f 45 4e 41 42 4c 45 5f 41 50 49 5f 41 52 4d  E_ENABLE_API_ARM
f870: 4f 52 0a 20 20 69 66 28 20 21 73 71 6c 69 74 65  OR.  if( !sqlite
f880: 33 53 61 66 65 74 79 43 68 65 63 6b 4f 6b 28 64  3SafetyCheckOk(d
f890: 62 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  b) ){.    return
f8a0: 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42   SQLITE_MISUSE_B
f8b0: 4b 50 54 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a  KPT;.  }.#endif.
f8c0: 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f    sqlite3_mutex_
f8d0: 65 6e 74 65 72 28 64 62 2d 3e 6d 75 74 65 78 29  enter(db->mutex)
f8e0: 3b 0a 20 20 69 66 28 20 6d 54 72 61 63 65 3d 3d  ;.  if( mTrace==
f8f0: 30 20 29 20 78 54 72 61 63 65 20 3d 20 30 3b 0a  0 ) xTrace = 0;.
f900: 20 20 69 66 28 20 78 54 72 61 63 65 3d 3d 30 20    if( xTrace==0 
f910: 29 20 6d 54 72 61 63 65 20 3d 20 30 3b 0a 20 20  ) mTrace = 0;.  
f920: 64 62 2d 3e 6d 54 72 61 63 65 20 3d 20 6d 54 72  db->mTrace = mTr
f930: 61 63 65 3b 0a 20 20 64 62 2d 3e 78 54 72 61 63  ace;.  db->xTrac
f940: 65 20 3d 20 78 54 72 61 63 65 3b 0a 20 20 64 62  e = xTrace;.  db
f950: 2d 3e 70 54 72 61 63 65 41 72 67 20 3d 20 70 41  ->pTraceArg = pA
f960: 72 67 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75  rg;.  sqlite3_mu
f970: 74 65 78 5f 6c 65 61 76 65 28 64 62 2d 3e 6d 75  tex_leave(db->mu
f980: 74 65 78 29 3b 0a 20 20 72 65 74 75 72 6e 20 53  tex);.  return S
f990: 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 23 69 66  QLITE_OK;.}..#if
f9a0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
f9b0: 5f 44 45 50 52 45 43 41 54 45 44 0a 2f 2a 0a 2a  _DEPRECATED./*.*
f9c0: 2a 20 52 65 67 69 73 74 65 72 20 61 20 70 72 6f  * Register a pro
f9d0: 66 69 6c 65 20 66 75 6e 63 74 69 6f 6e 2e 20 20  file function.  
f9e0: 54 68 65 20 70 41 72 67 20 66 72 6f 6d 20 74 68  The pArg from th
f9f0: 65 20 70 72 65 76 69 6f 75 73 6c 79 20 72 65 67  e previously reg
fa00: 69 73 74 65 72 65 64 20 0a 2a 2a 20 70 72 6f 66  istered .** prof
fa10: 69 6c 65 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  ile function is 
fa20: 72 65 74 75 72 6e 65 64 2e 20 20 0a 2a 2a 0a 2a  returned.  .**.*
fa30: 2a 20 41 20 4e 55 4c 4c 20 70 72 6f 66 69 6c 65  * A NULL profile
fa40: 20 66 75 6e 63 74 69 6f 6e 20 6d 65 61 6e 73 20   function means 
fa50: 74 68 61 74 20 6e 6f 20 70 72 6f 66 69 6c 69 6e  that no profilin
fa60: 67 20 69 73 20 65 78 65 63 75 74 65 73 2e 20 20  g is executes.  
fa70: 41 20 6e 6f 6e 2d 4e 55 4c 4c 0a 2a 2a 20 70 72  A non-NULL.** pr
fa80: 6f 66 69 6c 65 20 69 73 20 61 20 70 6f 69 6e 74  ofile is a point
fa90: 65 72 20 74 6f 20 61 20 66 75 6e 63 74 69 6f 6e  er to a function
faa0: 20 74 68 61 74 20 69 73 20 69 6e 76 6f 6b 65 64   that is invoked
fab0: 20 61 74 20 74 68 65 20 63 6f 6e 63 6c 75 73 69   at the conclusi
fac0: 6f 6e 20 6f 66 0a 2a 2a 20 65 61 63 68 20 53 51  on of.** each SQ
fad0: 4c 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74  L statement that
fae0: 20 69 73 20 72 75 6e 2e 0a 2a 2f 0a 76 6f 69 64   is run..*/.void
faf0: 20 2a 73 71 6c 69 74 65 33 5f 70 72 6f 66 69 6c   *sqlite3_profil
fb00: 65 28 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  e(.  sqlite3 *db
fb10: 2c 0a 20 20 76 6f 69 64 20 28 2a 78 50 72 6f 66  ,.  void (*xProf
fb20: 69 6c 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74  ile)(void*,const
fb30: 20 63 68 61 72 2a 2c 73 71 6c 69 74 65 5f 75 69   char*,sqlite_ui
fb40: 6e 74 36 34 29 2c 0a 20 20 76 6f 69 64 20 2a 70  nt64),.  void *p
fb50: 41 72 67 0a 29 7b 0a 20 20 76 6f 69 64 20 2a 70  Arg.){.  void *p
fb60: 4f 6c 64 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c  Old;..#ifdef SQL
fb70: 49 54 45 5f 45 4e 41 42 4c 45 5f 41 50 49 5f 41  ITE_ENABLE_API_A
fb80: 52 4d 4f 52 0a 20 20 69 66 28 20 21 73 71 6c 69  RMOR.  if( !sqli
fb90: 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 4f 6b  te3SafetyCheckOk
fba0: 28 64 62 29 20 29 7b 0a 20 20 20 20 28 76 6f 69  (db) ){.    (voi
fbb0: 64 29 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 5f  d)SQLITE_MISUSE_
fbc0: 42 4b 50 54 3b 0a 20 20 20 20 72 65 74 75 72 6e  BKPT;.    return
fbd0: 20 30 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20   0;.  }.#endif. 
fbe0: 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65   sqlite3_mutex_e
fbf0: 6e 74 65 72 28 64 62 2d 3e 6d 75 74 65 78 29 3b  nter(db->mutex);
fc00: 0a 20 20 70 4f 6c 64 20 3d 20 64 62 2d 3e 70 50  .  pOld = db->pP
fc10: 72 6f 66 69 6c 65 41 72 67 3b 0a 20 20 64 62 2d  rofileArg;.  db-
fc20: 3e 78 50 72 6f 66 69 6c 65 20 3d 20 78 50 72 6f  >xProfile = xPro
fc30: 66 69 6c 65 3b 0a 20 20 64 62 2d 3e 70 50 72 6f  file;.  db->pPro
fc40: 66 69 6c 65 41 72 67 20 3d 20 70 41 72 67 3b 0a  fileArg = pArg;.
fc50: 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f    sqlite3_mutex_
fc60: 6c 65 61 76 65 28 64 62 2d 3e 6d 75 74 65 78 29  leave(db->mutex)
fc70: 3b 0a 20 20 72 65 74 75 72 6e 20 70 4f 6c 64 3b  ;.  return pOld;
fc80: 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
fc90: 49 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41  ITE_OMIT_DEPRECA
fca0: 54 45 44 20 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a  TED */.#endif /*
fcb0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41   SQLITE_OMIT_TRA
fcc0: 43 45 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 52 65 67  CE */../*.** Reg
fcd0: 69 73 74 65 72 20 61 20 66 75 6e 63 74 69 6f 6e  ister a function
fce0: 20 74 6f 20 62 65 20 69 6e 76 6f 6b 65 64 20 77   to be invoked w
fcf0: 68 65 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f  hen a transactio
fd00: 6e 20 63 6f 6d 6d 69 74 73 2e 0a 2a 2a 20 49 66  n commits..** If
fd10: 20 74 68 65 20 69 6e 76 6f 6b 65 64 20 66 75 6e   the invoked fun
fd20: 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 6e 6f  ction returns no
fd30: 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65  n-zero, then the
fd40: 20 63 6f 6d 6d 69 74 20 62 65 63 6f 6d 65 73 20   commit becomes 
fd50: 61 0a 2a 2a 20 72 6f 6c 6c 62 61 63 6b 2e 0a 2a  a.** rollback..*
fd60: 2f 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f  /.void *sqlite3_
fd70: 63 6f 6d 6d 69 74 5f 68 6f 6f 6b 28 0a 20 20 73  commit_hook(.  s
fd80: 71 6c 69 74 65 33 20 2a 64 62 2c 20 20 20 20 20  qlite3 *db,     
fd90: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 74 74 61           /* Atta
fda0: 63 68 20 74 68 65 20 68 6f 6f 6b 20 74 6f 20 74  ch the hook to t
fdb0: 68 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f 0a  his database */.
fdc0: 20 20 69 6e 74 20 28 2a 78 43 61 6c 6c 62 61 63    int (*xCallbac
fdd0: 6b 29 28 76 6f 69 64 2a 29 2c 20 20 2f 2a 20 46  k)(void*),  /* F
fde0: 75 6e 63 74 69 6f 6e 20 74 6f 20 69 6e 76 6f 6b  unction to invok
fdf0: 65 20 6f 6e 20 65 61 63 68 20 63 6f 6d 6d 69 74  e on each commit
fe00: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 72 67   */.  void *pArg
fe10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fe20: 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 74  /* Argument to t
fe30: 68 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 29  he function */.)
fe40: 7b 0a 20 20 76 6f 69 64 20 2a 70 4f 6c 64 3b 0a  {.  void *pOld;.
fe50: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
fe60: 4e 41 42 4c 45 5f 41 50 49 5f 41 52 4d 4f 52 0a  NABLE_API_ARMOR.
fe70: 20 20 69 66 28 20 21 73 71 6c 69 74 65 33 53 61    if( !sqlite3Sa
fe80: 66 65 74 79 43 68 65 63 6b 4f 6b 28 64 62 29 20  fetyCheckOk(db) 
fe90: 29 7b 0a 20 20 20 20 28 76 6f 69 64 29 53 51 4c  ){.    (void)SQL
fea0: 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54 3b  ITE_MISUSE_BKPT;
feb0: 0a 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20  .    return 0;. 
fec0: 20 7d 0a 23 65 6e 64 69 66 0a 20 20 73 71 6c 69   }.#endif.  sqli
fed0: 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72 28  te3_mutex_enter(
fee0: 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 70 4f  db->mutex);.  pO
fef0: 6c 64 20 3d 20 64 62 2d 3e 70 43 6f 6d 6d 69 74  ld = db->pCommit
ff00: 41 72 67 3b 0a 20 20 64 62 2d 3e 78 43 6f 6d 6d  Arg;.  db->xComm
ff10: 69 74 43 61 6c 6c 62 61 63 6b 20 3d 20 78 43 61  itCallback = xCa
ff20: 6c 6c 62 61 63 6b 3b 0a 20 20 64 62 2d 3e 70 43  llback;.  db->pC
ff30: 6f 6d 6d 69 74 41 72 67 20 3d 20 70 41 72 67 3b  ommitArg = pArg;
ff40: 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  .  sqlite3_mutex
ff50: 5f 6c 65 61 76 65 28 64 62 2d 3e 6d 75 74 65 78  _leave(db->mutex
ff60: 29 3b 0a 20 20 72 65 74 75 72 6e 20 70 4f 6c 64  );.  return pOld
ff70: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 67 69 73  ;.}../*.** Regis
ff80: 74 65 72 20 61 20 63 61 6c 6c 62 61 63 6b 20 74  ter a callback t
ff90: 6f 20 62 65 20 69 6e 76 6f 6b 65 64 20 65 61 63  o be invoked eac
ffa0: 68 20 74 69 6d 65 20 61 20 72 6f 77 20 69 73 20  h time a row is 
ffb0: 75 70 64 61 74 65 64 2c 0a 2a 2a 20 69 6e 73 65  updated,.** inse
ffc0: 72 74 65 64 20 6f 72 20 64 65 6c 65 74 65 64 20  rted or deleted 
ffd0: 75 73 69 6e 67 20 74 68 69 73 20 64 61 74 61 62  using this datab
ffe0: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0a  ase connection..
fff0: 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  */.void *sqlite3
10000 5f 75 70 64 61 74 65 5f 68 6f 6f 6b 28 0a 20 20  _update_hook(.  
10010 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 20 20 20  sqlite3 *db,    
10020 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 74 74            /* Att
10030 61 63 68 20 74 68 65 20 68 6f 6f 6b 20 74 6f 20  ach the hook to 
10040 74 68 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f  this database */
10050 0a 20 20 76 6f 69 64 20 28 2a 78 43 61 6c 6c 62  .  void (*xCallb
10060 61 63 6b 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63  ack)(void*,int,c
10070 68 61 72 20 63 6f 6e 73 74 20 2a 2c 63 68 61 72  har const *,char
10080 20 63 6f 6e 73 74 20 2a 2c 73 71 6c 69 74 65 5f   const *,sqlite_
10090 69 6e 74 36 34 29 2c 0a 20 20 76 6f 69 64 20 2a  int64),.  void *
100a0 70 41 72 67 20 20 20 20 20 20 20 20 20 20 20 20  pArg            
100b0 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20      /* Argument 
100c0 74 6f 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20  to the function 
100d0 2a 2f 0a 29 7b 0a 20 20 76 6f 69 64 20 2a 70 52  */.){.  void *pR
100e0 65 74 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  et;..#ifdef SQLI
100f0 54 45 5f 45 4e 41 42 4c 45 5f 41 50 49 5f 41 52  TE_ENABLE_API_AR
10100 4d 4f 52 0a 20 20 69 66 28 20 21 73 71 6c 69 74  MOR.  if( !sqlit
10110 65 33 53 61 66 65 74 79 43 68 65 63 6b 4f 6b 28  e3SafetyCheckOk(
10120 64 62 29 20 29 7b 0a 20 20 20 20 28 76 6f 69 64  db) ){.    (void
10130 29 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42  )SQLITE_MISUSE_B
10140 4b 50 54 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  KPT;.    return 
10150 30 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20  0;.  }.#endif.  
10160 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e  sqlite3_mutex_en
10170 74 65 72 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0a  ter(db->mutex);.
10180 20 20 70 52 65 74 20 3d 20 64 62 2d 3e 70 55 70    pRet = db->pUp
10190 64 61 74 65 41 72 67 3b 0a 20 20 64 62 2d 3e 78  dateArg;.  db->x
101a0 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 3d  UpdateCallback =
101b0 20 78 43 61 6c 6c 62 61 63 6b 3b 0a 20 20 64 62   xCallback;.  db
101c0 2d 3e 70 55 70 64 61 74 65 41 72 67 20 3d 20 70  ->pUpdateArg = p
101d0 41 72 67 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d  Arg;.  sqlite3_m
101e0 75 74 65 78 5f 6c 65 61 76 65 28 64 62 2d 3e 6d  utex_leave(db->m
101f0 75 74 65 78 29 3b 0a 20 20 72 65 74 75 72 6e 20  utex);.  return 
10200 70 52 65 74 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52  pRet;.}../*.** R
10210 65 67 69 73 74 65 72 20 61 20 63 61 6c 6c 62 61  egister a callba
10220 63 6b 20 74 6f 20 62 65 20 69 6e 76 6f 6b 65 64  ck to be invoked
10230 20 65 61 63 68 20 74 69 6d 65 20 61 20 74 72 61   each time a tra
10240 6e 73 61 63 74 69 6f 6e 20 69 73 20 72 6f 6c 6c  nsaction is roll
10250 65 64 0a 2a 2a 20 62 61 63 6b 20 62 79 20 74 68  ed.** back by th
10260 69 73 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  is database conn
10270 65 63 74 69 6f 6e 2e 0a 2a 2f 0a 76 6f 69 64 20  ection..*/.void 
10280 2a 73 71 6c 69 74 65 33 5f 72 6f 6c 6c 62 61 63  *sqlite3_rollbac
10290 6b 5f 68 6f 6f 6b 28 0a 20 20 73 71 6c 69 74 65  k_hook(.  sqlite
102a0 33 20 2a 64 62 2c 20 20 20 20 20 20 20 20 20 20  3 *db,          
102b0 20 20 20 20 2f 2a 20 41 74 74 61 63 68 20 74 68      /* Attach th
102c0 65 20 68 6f 6f 6b 20 74 6f 20 74 68 69 73 20 64  e hook to this d
102d0 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 76 6f 69  atabase */.  voi
102e0 64 20 28 2a 78 43 61 6c 6c 62 61 63 6b 29 28 76  d (*xCallback)(v
102f0 6f 69 64 2a 29 2c 20 2f 2a 20 43 61 6c 6c 62 61  oid*), /* Callba
10300 63 6b 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  ck function */. 
10310 20 76 6f 69 64 20 2a 70 41 72 67 20 20 20 20 20   void *pArg     
10320 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
10330 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 66 75  gument to the fu
10340 6e 63 74 69 6f 6e 20 2a 2f 0a 29 7b 0a 20 20 76  nction */.){.  v
10350 6f 69 64 20 2a 70 52 65 74 3b 0a 0a 23 69 66 64  oid *pRet;..#ifd
10360 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
10370 5f 41 50 49 5f 41 52 4d 4f 52 0a 20 20 69 66 28  _API_ARMOR.  if(
10380 20 21 73 71 6c 69 74 65 33 53 61 66 65 74 79 43   !sqlite3SafetyC
10390 68 65 63 6b 4f 6b 28 64 62 29 20 29 7b 0a 20 20  heckOk(db) ){.  
103a0 20 20 28 76 6f 69 64 29 53 51 4c 49 54 45 5f 4d    (void)SQLITE_M
103b0 49 53 55 53 45 5f 42 4b 50 54 3b 0a 20 20 20 20  ISUSE_BKPT;.    
103c0 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 23 65  return 0;.  }.#e
103d0 6e 64 69 66 0a 20 20 73 71 6c 69 74 65 33 5f 6d  ndif.  sqlite3_m
103e0 75 74 65 78 5f 65 6e 74 65 72 28 64 62 2d 3e 6d  utex_enter(db->m
103f0 75 74 65 78 29 3b 0a 20 20 70 52 65 74 20 3d 20  utex);.  pRet = 
10400 64 62 2d 3e 70 52 6f 6c 6c 62 61 63 6b 41 72 67  db->pRollbackArg
10410 3b 0a 20 20 64 62 2d 3e 78 52 6f 6c 6c 62 61 63  ;.  db->xRollbac
10420 6b 43 61 6c 6c 62 61 63 6b 20 3d 20 78 43 61 6c  kCallback = xCal
10430 6c 62 61 63 6b 3b 0a 20 20 64 62 2d 3e 70 52 6f  lback;.  db->pRo
10440 6c 6c 62 61 63 6b 41 72 67 20 3d 20 70 41 72 67  llbackArg = pArg
10450 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  ;.  sqlite3_mute
10460 78 5f 6c 65 61 76 65 28 64 62 2d 3e 6d 75 74 65  x_leave(db->mute
10470 78 29 3b 0a 20 20 72 65 74 75 72 6e 20 70 52 65  x);.  return pRe
10480 74 3b 0a 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c  t;.}..#ifdef SQL
10490 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55 50  ITE_ENABLE_PREUP
104a0 44 41 54 45 5f 48 4f 4f 4b 0a 2f 2a 0a 2a 2a 20  DATE_HOOK./*.** 
104b0 52 65 67 69 73 74 65 72 20 61 20 63 61 6c 6c 62  Register a callb
104c0 61 63 6b 20 74 6f 20 62 65 20 69 6e 76 6f 6b 65  ack to be invoke
104d0 64 20 65 61 63 68 20 74 69 6d 65 20 61 20 72 6f  d each time a ro
104e0 77 20 69 73 20 75 70 64 61 74 65 64 2c 0a 2a 2a  w is updated,.**
104f0 20 69 6e 73 65 72 74 65 64 20 6f 72 20 64 65 6c   inserted or del
10500 65 74 65 64 20 75 73 69 6e 67 20 74 68 69 73 20  eted using this 
10510 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
10520 69 6f 6e 2e 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71  ion..*/.void *sq
10530 6c 69 74 65 33 5f 70 72 65 75 70 64 61 74 65 5f  lite3_preupdate_
10540 68 6f 6f 6b 28 0a 20 20 73 71 6c 69 74 65 33 20  hook(.  sqlite3 
10550 2a 64 62 2c 20 20 20 20 20 20 20 20 20 20 20 20  *db,            
10560 20 20 2f 2a 20 41 74 74 61 63 68 20 74 68 65 20    /* Attach the 
10570 68 6f 6f 6b 20 74 6f 20 74 68 69 73 20 64 61 74  hook to this dat
10580 61 62 61 73 65 20 2a 2f 0a 20 20 76 6f 69 64 28  abase */.  void(
10590 2a 78 43 61 6c 6c 62 61 63 6b 29 28 20 20 20 20  *xCallback)(    
105a0 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b       /* Callback
105b0 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20   function */.   
105c0 20 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c   void*,sqlite3*,
105d0 69 6e 74 2c 63 68 61 72 20 63 6f 6e 73 74 2a 2c  int,char const*,
105e0 63 68 61 72 20 63 6f 6e 73 74 2a 2c 73 71 6c 69  char const*,sqli
105f0 74 65 33 5f 69 6e 74 36 34 2c 73 71 6c 69 74 65  te3_int64,sqlite
10600 33 5f 69 6e 74 36 34 29 2c 0a 20 20 76 6f 69 64  3_int64),.  void
10610 20 2a 70 41 72 67 20 20 20 20 20 20 20 20 20 20   *pArg          
10620 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 63        /* First c
10630 61 6c 6c 62 61 63 6b 20 61 72 67 75 6d 65 6e 74  allback argument
10640 20 2a 2f 0a 29 7b 0a 20 20 76 6f 69 64 20 2a 70   */.){.  void *p
10650 52 65 74 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d  Ret;.  sqlite3_m
10660 75 74 65 78 5f 65 6e 74 65 72 28 64 62 2d 3e 6d  utex_enter(db->m
10670 75 74 65 78 29 3b 0a 20 20 70 52 65 74 20 3d 20  utex);.  pRet = 
10680 64 62 2d 3e 70 50 72 65 55 70 64 61 74 65 41 72  db->pPreUpdateAr
10690 67 3b 0a 20 20 64 62 2d 3e 78 50 72 65 55 70 64  g;.  db->xPreUpd
106a0 61 74 65 43 61 6c 6c 62 61 63 6b 20 3d 20 78 43  ateCallback = xC
106b0 61 6c 6c 62 61 63 6b 3b 0a 20 20 64 62 2d 3e 70  allback;.  db->p
106c0 50 72 65 55 70 64 61 74 65 41 72 67 20 3d 20 70  PreUpdateArg = p
106d0 41 72 67 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d  Arg;.  sqlite3_m
106e0 75 74 65 78 5f 6c 65 61 76 65 28 64 62 2d 3e 6d  utex_leave(db->m
106f0 75 74 65 78 29 3b 0a 20 20 72 65 74 75 72 6e 20  utex);.  return 
10700 70 52 65 74 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  pRet;.}.#endif /
10710 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  * SQLITE_ENABLE_
10720 50 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b 20 2a  PREUPDATE_HOOK *
10730 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
10740 45 5f 4f 4d 49 54 5f 57 41 4c 0a 2f 2a 0a 2a 2a  E_OMIT_WAL./*.**
10750 20 54 68 65 20 73 71 6c 69 74 65 33 5f 77 61 6c   The sqlite3_wal
10760 5f 68 6f 6f 6b 28 29 20 63 61 6c 6c 62 61 63 6b  _hook() callback
10770 20 72 65 67 69 73 74 65 72 65 64 20 62 79 20 73   registered by s
10780 71 6c 69 74 65 33 5f 77 61 6c 5f 61 75 74 6f 63  qlite3_wal_autoc
10790 68 65 63 6b 70 6f 69 6e 74 28 29 2e 0a 2a 2a 20  heckpoint()..** 
107a0 49 6e 76 6f 6b 65 20 73 71 6c 69 74 65 33 5f 77  Invoke sqlite3_w
107b0 61 6c 5f 63 68 65 63 6b 70 6f 69 6e 74 20 69 66  al_checkpoint if
107c0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 66   the number of f
107d0 72 61 6d 65 73 20 69 6e 20 74 68 65 20 6c 6f 67  rames in the log
107e0 20 66 69 6c 65 0a 2a 2a 20 69 73 20 67 72 65 61   file.** is grea
107f0 74 65 72 20 74 68 61 6e 20 73 71 6c 69 74 65 33  ter than sqlite3
10800 2e 70 57 61 6c 41 72 67 20 63 61 73 74 20 74 6f  .pWalArg cast to
10810 20 61 6e 20 69 6e 74 65 67 65 72 20 28 74 68 65   an integer (the
10820 20 76 61 6c 75 65 20 63 6f 6e 66 69 67 75 72 65   value configure
10830 64 20 62 79 0a 2a 2a 20 77 61 6c 5f 61 75 74 6f  d by.** wal_auto
10840 63 68 65 63 6b 70 6f 69 6e 74 28 29 29 2e 0a 2a  checkpoint())..*
10850 2f 20 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61  / .int sqlite3Wa
10860 6c 44 65 66 61 75 6c 74 48 6f 6f 6b 28 0a 20 20  lDefaultHook(.  
10870 76 6f 69 64 20 2a 70 43 6c 69 65 6e 74 44 61 74  void *pClientDat
10880 61 2c 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65  a,     /* Argume
10890 6e 74 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20  nt */.  sqlite3 
108a0 2a 64 62 2c 20 20 20 20 20 20 20 20 20 20 20 2f  *db,           /
108b0 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a  * Connection */.
108c0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44    const char *zD
108d0 62 2c 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61  b,       /* Data
108e0 62 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 46  base */.  int nF
108f0 72 61 6d 65 20 20 20 20 20 20 20 20 20 20 20 20  rame            
10900 20 2f 2a 20 53 69 7a 65 20 6f 66 20 57 41 4c 20   /* Size of WAL 
10910 2a 2f 0a 29 7b 0a 20 20 69 66 28 20 6e 46 72 61  */.){.  if( nFra
10920 6d 65 3e 3d 53 51 4c 49 54 45 5f 50 54 52 5f 54  me>=SQLITE_PTR_T
10930 4f 5f 49 4e 54 28 70 43 6c 69 65 6e 74 44 61 74  O_INT(pClientDat
10940 61 29 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  a) ){.    sqlite
10950 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c  3BeginBenignMall
10960 6f 63 28 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  oc();.    sqlite
10970 33 5f 77 61 6c 5f 63 68 65 63 6b 70 6f 69 6e 74  3_wal_checkpoint
10980 28 64 62 2c 20 7a 44 62 29 3b 0a 20 20 20 20 73  (db, zDb);.    s
10990 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d  qlite3EndBenignM
109a0 61 6c 6c 6f 63 28 29 3b 0a 20 20 7d 0a 20 20 72  alloc();.  }.  r
109b0 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b  eturn SQLITE_OK;
109c0 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
109d0 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 20 2a 2f 0a  ITE_OMIT_WAL */.
109e0 0a 2f 2a 0a 2a 2a 20 43 6f 6e 66 69 67 75 72 65  ./*.** Configure
109f0 20 61 6e 20 73 71 6c 69 74 65 33 5f 77 61 6c 5f   an sqlite3_wal_
10a00 68 6f 6f 6b 28 29 20 63 61 6c 6c 62 61 63 6b 20  hook() callback 
10a10 74 6f 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  to automatically
10a20 20 63 68 65 63 6b 70 6f 69 6e 74 0a 2a 2a 20 61   checkpoint.** a
10a30 20 64 61 74 61 62 61 73 65 20 61 66 74 65 72 20   database after 
10a40 63 6f 6d 6d 69 74 74 69 6e 67 20 61 20 74 72 61  committing a tra
10a50 6e 73 61 63 74 69 6f 6e 20 69 66 20 74 68 65 72  nsaction if ther
10a60 65 20 61 72 65 20 6e 46 72 61 6d 65 20 6f 72 0a  e are nFrame or.
10a70 2a 2a 20 6d 6f 72 65 20 66 72 61 6d 65 73 20 69  ** more frames i
10a80 6e 20 74 68 65 20 6c 6f 67 20 66 69 6c 65 2e 20  n the log file. 
10a90 50 61 73 73 69 6e 67 20 7a 65 72 6f 20 6f 72 20  Passing zero or 
10aa0 61 20 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65  a negative value
10ab0 20 61 73 20 74 68 65 0a 2a 2a 20 6e 46 72 61 6d   as the.** nFram
10ac0 65 20 70 61 72 61 6d 65 74 65 72 20 64 69 73 61  e parameter disa
10ad0 62 6c 65 73 20 61 75 74 6f 6d 61 74 69 63 20 63  bles automatic c
10ae0 68 65 63 6b 70 6f 69 6e 74 73 20 65 6e 74 69 72  heckpoints entir
10af0 65 6c 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63  ely..**.** The c
10b00 61 6c 6c 62 61 63 6b 20 72 65 67 69 73 74 65 72  allback register
10b10 65 64 20 62 79 20 74 68 69 73 20 66 75 6e 63 74  ed by this funct
10b20 69 6f 6e 20 72 65 70 6c 61 63 65 73 20 61 6e 79  ion replaces any
10b30 20 65 78 69 73 74 69 6e 67 20 63 61 6c 6c 62 61   existing callba
10b40 63 6b 0a 2a 2a 20 72 65 67 69 73 74 65 72 65 64  ck.** registered
10b50 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 77   using sqlite3_w
10b60 61 6c 5f 68 6f 6f 6b 28 29 2e 20 4c 69 6b 65 77  al_hook(). Likew
10b70 69 73 65 2c 20 72 65 67 69 73 74 65 72 69 6e 67  ise, registering
10b80 20 61 20 63 61 6c 6c 62 61 63 6b 0a 2a 2a 20 75   a callback.** u
10b90 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 77 61 6c  sing sqlite3_wal
10ba0 5f 68 6f 6f 6b 28 29 20 64 69 73 61 62 6c 65 73  _hook() disables
10bb0 20 74 68 65 20 61 75 74 6f 6d 61 74 69 63 20 63   the automatic c
10bc0 68 65 63 6b 70 6f 69 6e 74 20 6d 65 63 68 61 6e  heckpoint mechan
10bd0 69 73 6d 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65  ism.** configure
10be0 64 20 62 79 20 74 68 69 73 20 66 75 6e 63 74 69  d by this functi
10bf0 6f 6e 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  on..*/.int sqlit
10c00 65 33 5f 77 61 6c 5f 61 75 74 6f 63 68 65 63 6b  e3_wal_autocheck
10c10 70 6f 69 6e 74 28 73 71 6c 69 74 65 33 20 2a 64  point(sqlite3 *d
10c20 62 2c 20 69 6e 74 20 6e 46 72 61 6d 65 29 7b 0a  b, int nFrame){.
10c30 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
10c40 49 54 5f 57 41 4c 0a 20 20 55 4e 55 53 45 44 5f  IT_WAL.  UNUSED_
10c50 50 41 52 41 4d 45 54 45 52 28 64 62 29 3b 0a 20  PARAMETER(db);. 
10c60 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45   UNUSED_PARAMETE
10c70 52 28 6e 46 72 61 6d 65 29 3b 0a 23 65 6c 73 65  R(nFrame);.#else
10c80 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
10c90 4e 41 42 4c 45 5f 41 50 49 5f 41 52 4d 4f 52 0a  NABLE_API_ARMOR.
10ca0 20 20 69 66 28 20 21 73 71 6c 69 74 65 33 53 61    if( !sqlite3Sa
10cb0 66 65 74 79 43 68 65 63 6b 4f 6b 28 64 62 29 20  fetyCheckOk(db) 
10cc0 29 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f  ) return SQLITE_
10cd0 4d 49 53 55 53 45 5f 42 4b 50 54 3b 0a 23 65 6e  MISUSE_BKPT;.#en
10ce0 64 69 66 0a 20 20 69 66 28 20 6e 46 72 61 6d 65  dif.  if( nFrame
10cf0 3e 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  >0 ){.    sqlite
10d00 33 5f 77 61 6c 5f 68 6f 6f 6b 28 64 62 2c 20 73  3_wal_hook(db, s
10d10 71 6c 69 74 65 33 57 61 6c 44 65 66 61 75 6c 74  qlite3WalDefault
10d20 48 6f 6f 6b 2c 20 53 51 4c 49 54 45 5f 49 4e 54  Hook, SQLITE_INT
10d30 5f 54 4f 5f 50 54 52 28 6e 46 72 61 6d 65 29 29  _TO_PTR(nFrame))
10d40 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73  ;.  }else{.    s
10d50 71 6c 69 74 65 33 5f 77 61 6c 5f 68 6f 6f 6b 28  qlite3_wal_hook(
10d60 64 62 2c 20 30 2c 20 30 29 3b 0a 20 20 7d 0a 23  db, 0, 0);.  }.#
10d70 65 6e 64 69 66 0a 20 20 72 65 74 75 72 6e 20 53  endif.  return S
10d80 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  QLITE_OK;.}../*.
10d90 2a 2a 20 52 65 67 69 73 74 65 72 20 61 20 63 61  ** Register a ca
10da0 6c 6c 62 61 63 6b 20 74 6f 20 62 65 20 69 6e 76  llback to be inv
10db0 6f 6b 65 64 20 65 61 63 68 20 74 69 6d 65 20 61  oked each time a
10dc0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20   transaction is 
10dd0 77 72 69 74 74 65 6e 0a 2a 2a 20 69 6e 74 6f 20  written.** into 
10de0 74 68 65 20 77 72 69 74 65 2d 61 68 65 61 64 2d  the write-ahead-
10df0 6c 6f 67 20 62 79 20 74 68 69 73 20 64 61 74 61  log by this data
10e00 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  base connection.
10e10 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  .*/.void *sqlite
10e20 33 5f 77 61 6c 5f 68 6f 6f 6b 28 0a 20 20 73 71  3_wal_hook(.  sq
10e30 6c 69 74 65 33 20 2a 64 62 2c 20 20 20 20 20 20  lite3 *db,      
10e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
10e50 20 41 74 74 61 63 68 20 74 68 65 20 68 6f 6f 6b   Attach the hook
10e60 20 74 6f 20 74 68 69 73 20 64 62 20 68 61 6e 64   to this db hand
10e70 6c 65 20 2a 2f 0a 20 20 69 6e 74 28 2a 78 43 61  le */.  int(*xCa
10e80 6c 6c 62 61 63 6b 29 28 76 6f 69 64 20 2a 2c 20  llback)(void *, 
10e90 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20  sqlite3*, const 
10ea0 63 68 61 72 2a 2c 20 69 6e 74 29 2c 0a 20 20 76  char*, int),.  v
10eb0 6f 69 64 20 2a 70 41 72 67 20 20 20 20 20 20 20  oid *pArg       
10ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
10ed0 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74  * First argument
10ee0 20 70 61 73 73 65 64 20 74 6f 20 78 43 61 6c 6c   passed to xCall
10ef0 62 61 63 6b 28 29 20 2a 2f 0a 29 7b 0a 23 69 66  back() */.){.#if
10f00 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
10f10 5f 57 41 4c 0a 20 20 76 6f 69 64 20 2a 70 52 65  _WAL.  void *pRe
10f20 74 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  t;.#ifdef SQLITE
10f30 5f 45 4e 41 42 4c 45 5f 41 50 49 5f 41 52 4d 4f  _ENABLE_API_ARMO
10f40 52 0a 20 20 69 66 28 20 21 73 71 6c 69 74 65 33  R.  if( !sqlite3
10f50 53 61 66 65 74 79 43 68 65 63 6b 4f 6b 28 64 62  SafetyCheckOk(db
10f60 29 20 29 7b 0a 20 20 20 20 28 76 6f 69 64 29 53  ) ){.    (void)S
10f70 51 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50  QLITE_MISUSE_BKP
10f80 54 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 30 3b  T;.    return 0;
10f90 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 73 71  .  }.#endif.  sq
10fa0 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65  lite3_mutex_ente
10fb0 72 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20  r(db->mutex);.  
10fc0 70 52 65 74 20 3d 20 64 62 2d 3e 70 57 61 6c 41  pRet = db->pWalA
10fd0 72 67 3b 0a 20 20 64 62 2d 3e 78 57 61 6c 43 61  rg;.  db->xWalCa
10fe0 6c 6c 62 61 63 6b 20 3d 20 78 43 61 6c 6c 62 61  llback = xCallba
10ff0 63 6b 3b 0a 20 20 64 62 2d 3e 70 57 61 6c 41 72  ck;.  db->pWalAr
11000 67 20 3d 20 70 41 72 67 3b 0a 20 20 73 71 6c 69  g = pArg;.  sqli
11010 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28  te3_mutex_leave(
11020 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 72 65  db->mutex);.  re
11030 74 75 72 6e 20 70 52 65 74 3b 0a 23 65 6c 73 65  turn pRet;.#else
11040 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 23 65 6e  .  return 0;.#en
11050 64 69 66 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 68 65  dif.}../*.** Che
11060 63 6b 70 6f 69 6e 74 20 64 61 74 61 62 61 73 65  ckpoint database
11070 20 7a 44 62 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c   zDb..*/.int sql
11080 69 74 65 33 5f 77 61 6c 5f 63 68 65 63 6b 70 6f  ite3_wal_checkpo
11090 69 6e 74 5f 76 32 28 0a 20 20 73 71 6c 69 74 65  int_v2(.  sqlite
110a0 33 20 2a 64 62 2c 20 20 20 20 20 20 20 20 20 20  3 *db,          
110b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74            /* Dat
110c0 61 62 61 73 65 20 68 61 6e 64 6c 65 20 2a 2f 0a  abase handle */.
110d0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44    const char *zD
110e0 62 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b,              
110f0 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 61 74 74    /* Name of att
11100 61 63 68 65 64 20 64 61 74 61 62 61 73 65 20 28  ached database (
11110 6f 72 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 69 6e  or NULL) */.  in
11120 74 20 65 4d 6f 64 65 2c 20 20 20 20 20 20 20 20  t eMode,        
11130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
11140 20 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49   SQLITE_CHECKPOI
11150 4e 54 5f 2a 20 76 61 6c 75 65 20 2a 2f 0a 20 20  NT_* value */.  
11160 69 6e 74 20 2a 70 6e 4c 6f 67 2c 20 20 20 20 20  int *pnLog,     
11170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11180 2f 2a 20 4f 55 54 3a 20 53 69 7a 65 20 6f 66 20  /* OUT: Size of 
11190 57 41 4c 20 6c 6f 67 20 69 6e 20 66 72 61 6d 65  WAL log in frame
111a0 73 20 2a 2f 0a 20 20 69 6e 74 20 2a 70 6e 43 6b  s */.  int *pnCk
111b0 70 74 20 20 20 20 20 20 20 20 20 20 20 20 20 20  pt              
111c0 20 20 20 20 20 20 20 2f 2a 20 4f 55 54 3a 20 54         /* OUT: T
111d0 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 66  otal number of f
111e0 72 61 6d 65 73 20 63 68 65 63 6b 70 6f 69 6e 74  rames checkpoint
111f0 65 64 20 2a 2f 0a 29 7b 0a 23 69 66 64 65 66 20  ed */.){.#ifdef 
11200 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a  SQLITE_OMIT_WAL.
11210 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
11220 4f 4b 3b 0a 23 65 6c 73 65 0a 20 20 69 6e 74 20  OK;.#else.  int 
11230 72 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rc;             
11240 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
11250 65 74 75 72 6e 20 63 6f 64 65 20 2a 2f 0a 20 20  eturn code */.  
11260 69 6e 74 20 69 44 62 20 3d 20 53 51 4c 49 54 45  int iDb = SQLITE
11270 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 3b 20 20  _MAX_ATTACHED;  
11280 2f 2a 20 73 71 6c 69 74 65 33 2e 61 44 62 5b 5d  /* sqlite3.aDb[]
11290 20 69 6e 64 65 78 20 6f 66 20 64 62 20 74 6f 20   index of db to 
112a0 63 68 65 63 6b 70 6f 69 6e 74 20 2a 2f 0a 0a 23  checkpoint */..#
112b0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
112c0 42 4c 45 5f 41 50 49 5f 41 52 4d 4f 52 0a 20 20  BLE_API_ARMOR.  
112d0 69 66 28 20 21 73 71 6c 69 74 65 33 53 61 66 65  if( !sqlite3Safe
112e0 74 79 43 68 65 63 6b 4f 6b 28 64 62 29 20 29 20  tyCheckOk(db) ) 
112f0 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49  return SQLITE_MI
11300 53 55 53 45 5f 42 4b 50 54 3b 0a 23 65 6e 64 69  SUSE_BKPT;.#endi
11310 66 0a 0a 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69  f..  /* Initiali
11320 7a 65 20 74 68 65 20 6f 75 74 70 75 74 20 76 61  ze the output va
11330 72 69 61 62 6c 65 73 20 74 6f 20 2d 31 20 69 6e  riables to -1 in
11340 20 63 61 73 65 20 61 6e 20 65 72 72 6f 72 20 6f   case an error o
11350 63 63 75 72 73 2e 20 2a 2f 0a 20 20 69 66 28 20  ccurs. */.  if( 
11360 70 6e 4c 6f 67 20 29 20 2a 70 6e 4c 6f 67 20 3d  pnLog ) *pnLog =
11370 20 2d 31 3b 0a 20 20 69 66 28 20 70 6e 43 6b 70   -1;.  if( pnCkp
11380 74 20 29 20 2a 70 6e 43 6b 70 74 20 3d 20 2d 31  t ) *pnCkpt = -1
11390 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 53 51 4c  ;..  assert( SQL
113a0 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 50  ITE_CHECKPOINT_P
113b0 41 53 53 49 56 45 3d 3d 30 20 29 3b 0a 20 20 61  ASSIVE==0 );.  a
113c0 73 73 65 72 74 28 20 53 51 4c 49 54 45 5f 43 48  ssert( SQLITE_CH
113d0 45 43 4b 50 4f 49 4e 54 5f 46 55 4c 4c 3d 3d 31  ECKPOINT_FULL==1
113e0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 53 51   );.  assert( SQ
113f0 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f  LITE_CHECKPOINT_
11400 52 45 53 54 41 52 54 3d 3d 32 20 29 3b 0a 20 20  RESTART==2 );.  
11410 61 73 73 65 72 74 28 20 53 51 4c 49 54 45 5f 43  assert( SQLITE_C
11420 48 45 43 4b 50 4f 49 4e 54 5f 54 52 55 4e 43 41  HECKPOINT_TRUNCA
11430 54 45 3d 3d 33 20 29 3b 0a 20 20 69 66 28 20 65  TE==3 );.  if( e
11440 4d 6f 64 65 3c 53 51 4c 49 54 45 5f 43 48 45 43  Mode<SQLITE_CHEC
11450 4b 50 4f 49 4e 54 5f 50 41 53 53 49 56 45 20 7c  KPOINT_PASSIVE |
11460 7c 20 65 4d 6f 64 65 3e 53 51 4c 49 54 45 5f 43  | eMode>SQLITE_C
11470 48 45 43 4b 50 4f 49 4e 54 5f 54 52 55 4e 43 41  HECKPOINT_TRUNCA
11480 54 45 20 29 7b 0a 20 20 20 20 2f 2a 20 45 56 49  TE ){.    /* EVI
11490 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 30 33 39 39  DENCE-OF: R-0399
114a0 36 2d 31 32 30 38 38 20 54 68 65 20 4d 20 70 61  6-12088 The M pa
114b0 72 61 6d 65 74 65 72 20 6d 75 73 74 20 62 65 20  rameter must be 
114c0 61 20 76 61 6c 69 64 20 63 68 65 63 6b 70 6f 69  a valid checkpoi
114d0 6e 74 0a 20 20 20 20 2a 2a 20 6d 6f 64 65 3a 20  nt.    ** mode: 
114e0 2a 2f 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51  */.    return SQ
114f0 4c 49 54 45 5f 4d 49 53 55 53 45 3b 0a 20 20 7d  LITE_MISUSE;.  }
11500 0a 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  ..  sqlite3_mute
11510 78 5f 65 6e 74 65 72 28 64 62 2d 3e 6d 75 74 65  x_enter(db->mute
11520 78 29 3b 0a 20 20 69 66 28 20 7a 44 62 20 26 26  x);.  if( zDb &&
11530 20 7a 44 62 5b 30 5d 20 29 7b 0a 20 20 20 20 69   zDb[0] ){.    i
11540 44 62 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64  Db = sqlite3Find
11550 44 62 4e 61 6d 65 28 64 62 2c 20 7a 44 62 29 3b  DbName(db, zDb);
11560 0a 20 20 7d 0a 20 20 69 66 28 20 69 44 62 3c 30  .  }.  if( iDb<0
11570 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   ){.    rc = SQL
11580 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 73  ITE_ERROR;.    s
11590 71 6c 69 74 65 33 45 72 72 6f 72 57 69 74 68 4d  qlite3ErrorWithM
115a0 73 67 28 64 62 2c 20 53 51 4c 49 54 45 5f 45 52  sg(db, SQLITE_ER
115b0 52 4f 52 2c 20 22 75 6e 6b 6e 6f 77 6e 20 64 61  ROR, "unknown da
115c0 74 61 62 61 73 65 3a 20 25 73 22 2c 20 7a 44 62  tabase: %s", zDb
115d0 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
115e0 64 62 2d 3e 62 75 73 79 48 61 6e 64 6c 65 72 2e  db->busyHandler.
115f0 6e 42 75 73 79 20 3d 20 30 3b 0a 20 20 20 20 72  nBusy = 0;.    r
11600 63 20 3d 20 73 71 6c 69 74 65 33 43 68 65 63 6b  c = sqlite3Check
11610 70 6f 69 6e 74 28 64 62 2c 20 69 44 62 2c 20 65  point(db, iDb, e
11620 4d 6f 64 65 2c 20 70 6e 4c 6f 67 2c 20 70 6e 43  Mode, pnLog, pnC
11630 6b 70 74 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  kpt);.    sqlite
11640 33 45 72 72 6f 72 28 64 62 2c 20 72 63 29 3b 0a  3Error(db, rc);.
11650 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74    }.  rc = sqlit
11660 65 33 41 70 69 45 78 69 74 28 64 62 2c 20 72 63  e3ApiExit(db, rc
11670 29 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 72  );..  /* If ther
11680 65 20 61 72 65 20 6e 6f 20 61 63 74 69 76 65 20  e are no active 
11690 73 74 61 74 65 6d 65 6e 74 73 2c 20 63 6c 65 61  statements, clea
116a0 72 20 74 68 65 20 69 6e 74 65 72 72 75 70 74 20  r the interrupt 
116b0 66 6c 61 67 20 61 74 20 74 68 69 73 0a 20 20 2a  flag at this.  *
116c0 2a 20 70 6f 69 6e 74 2e 20 20 2a 2f 0a 20 20 69  * point.  */.  i
116d0 66 28 20 64 62 2d 3e 6e 56 64 62 65 41 63 74 69  f( db->nVdbeActi
116e0 76 65 3d 3d 30 20 29 7b 0a 20 20 20 20 64 62 2d  ve==0 ){.    db-
116f0 3e 75 31 2e 69 73 49 6e 74 65 72 72 75 70 74 65  >u1.isInterrupte
11700 64 20 3d 20 30 3b 0a 20 20 7d 0a 0a 20 20 73 71  d = 0;.  }..  sq
11710 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76  lite3_mutex_leav
11720 65 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20  e(db->mutex);.  
11730 72 65 74 75 72 6e 20 72 63 3b 0a 23 65 6e 64 69  return rc;.#endi
11740 66 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 43 68 65 63  f.}.../*.** Chec
11750 6b 70 6f 69 6e 74 20 64 61 74 61 62 61 73 65 20  kpoint database 
11760 7a 44 62 2e 20 49 66 20 7a 44 62 20 69 73 20 4e  zDb. If zDb is N
11770 55 4c 4c 2c 20 6f 72 20 69 66 20 74 68 65 20 62  ULL, or if the b
11780 75 66 66 65 72 20 7a 44 62 20 70 6f 69 6e 74 73  uffer zDb points
11790 0a 2a 2a 20 74 6f 20 63 6f 6e 74 61 69 6e 73 20  .** to contains 
117a0 61 20 7a 65 72 6f 2d 6c 65 6e 67 74 68 20 73 74  a zero-length st
117b0 72 69 6e 67 2c 20 61 6c 6c 20 61 74 74 61 63 68  ring, all attach
117c0 65 64 20 64 61 74 61 62 61 73 65 73 20 61 72 65  ed databases are
117d0 20 0a 2a 2a 20 63 68 65 63 6b 70 6f 69 6e 74 65   .** checkpointe
117e0 64 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  d..*/.int sqlite
117f0 33 5f 77 61 6c 5f 63 68 65 63 6b 70 6f 69 6e 74  3_wal_checkpoint
11800 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 63 6f  (sqlite3 *db, co
11810 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 29 7b 0a  nst char *zDb){.
11820 20 20 2f 2a 20 45 56 49 44 45 4e 43 45 2d 4f 46    /* EVIDENCE-OF
11830 3a 20 52 2d 34 31 36 31 33 2d 32 30 35 35 33 20  : R-41613-20553 
11840 54 68 65 20 73 71 6c 69 74 65 33 5f 77 61 6c 5f  The sqlite3_wal_
11850 63 68 65 63 6b 70 6f 69 6e 74 28 44 2c 58 29 20  checkpoint(D,X) 
11860 69 73 20 65 71 75 69 76 61 6c 65 6e 74 20 74 6f  is equivalent to
11870 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 5f 77 61  .  ** sqlite3_wa
11880 6c 5f 63 68 65 63 6b 70 6f 69 6e 74 5f 76 32 28  l_checkpoint_v2(
11890 44 2c 58 2c 53 51 4c 49 54 45 5f 43 48 45 43 4b  D,X,SQLITE_CHECK
118a0 50 4f 49 4e 54 5f 50 41 53 53 49 56 45 2c 30 2c  POINT_PASSIVE,0,
118b0 30 29 2e 20 2a 2f 0a 20 20 72 65 74 75 72 6e 20  0). */.  return 
118c0 73 71 6c 69 74 65 33 5f 77 61 6c 5f 63 68 65 63  sqlite3_wal_chec
118d0 6b 70 6f 69 6e 74 5f 76 32 28 64 62 2c 7a 44 62  kpoint_v2(db,zDb
118e0 2c 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49  ,SQLITE_CHECKPOI
118f0 4e 54 5f 50 41 53 53 49 56 45 2c 30 2c 30 29 3b  NT_PASSIVE,0,0);
11900 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .}..#ifndef SQLI
11910 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 2f 2a 0a 2a  TE_OMIT_WAL./*.*
11920 2a 20 52 75 6e 20 61 20 63 68 65 63 6b 70 6f 69  * Run a checkpoi
11930 6e 74 20 6f 6e 20 64 61 74 61 62 61 73 65 20 69  nt on database i
11940 44 62 2e 20 54 68 69 73 20 69 73 20 61 20 6e 6f  Db. This is a no
11950 2d 6f 70 20 69 66 20 64 61 74 61 62 61 73 65 20  -op if database 
11960 69 44 62 20 69 73 0a 2a 2a 20 6e 6f 74 20 63 75  iDb is.** not cu
11970 72 72 65 6e 74 6c 79 20 6f 70 65 6e 20 69 6e 20  rrently open in 
11980 57 41 4c 20 6d 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  WAL mode..**.** 
11990 49 66 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  If a transaction
119a0 20 69 73 20 6f 70 65 6e 20 6f 6e 20 74 68 65 20   is open on the 
119b0 64 61 74 61 62 61 73 65 20 62 65 69 6e 67 20 63  database being c
119c0 68 65 63 6b 70 6f 69 6e 74 65 64 2c 20 74 68 69  heckpointed, thi
119d0 73 20 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 72  s .** function r
119e0 65 74 75 72 6e 73 20 53 51 4c 49 54 45 5f 4c 4f  eturns SQLITE_LO
119f0 43 4b 45 44 20 61 6e 64 20 61 20 63 68 65 63 6b  CKED and a check
11a00 70 6f 69 6e 74 20 69 73 20 6e 6f 74 20 61 74 74  point is not att
11a10 65 6d 70 74 65 64 2e 20 49 66 20 0a 2a 2a 20 61  empted. If .** a
11a20 6e 20 65 72 72 6f 72 20 6f 63 63 75 72 73 20 77  n error occurs w
11a30 68 69 6c 65 20 72 75 6e 6e 69 6e 67 20 74 68 65  hile running the
11a40 20 63 68 65 63 6b 70 6f 69 6e 74 2c 20 61 6e 20   checkpoint, an 
11a50 53 51 4c 69 74 65 20 65 72 72 6f 72 20 63 6f 64  SQLite error cod
11a60 65 20 69 73 20 0a 2a 2a 20 72 65 74 75 72 6e 65  e is .** returne
11a70 64 20 28 69 2e 65 2e 20 53 51 4c 49 54 45 5f 49  d (i.e. SQLITE_I
11a80 4f 45 52 52 29 2e 20 4f 74 68 65 72 77 69 73 65  OERR). Otherwise
11a90 2c 20 53 51 4c 49 54 45 5f 4f 4b 2e 0a 2a 2a 0a  , SQLITE_OK..**.
11aa0 2a 2a 20 54 68 65 20 6d 75 74 65 78 20 6f 6e 20  ** The mutex on 
11ab0 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 20  database handle 
11ac0 64 62 20 73 68 6f 75 6c 64 20 62 65 20 68 65 6c  db should be hel
11ad0 64 20 62 79 20 74 68 65 20 63 61 6c 6c 65 72 2e  d by the caller.
11ae0 20 54 68 65 20 6d 75 74 65 78 0a 2a 2a 20 61 73   The mutex.** as
11af0 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
11b00 65 20 73 70 65 63 69 66 69 63 20 62 2d 74 72 65  e specific b-tre
11b10 65 20 62 65 69 6e 67 20 63 68 65 63 6b 70 6f 69  e being checkpoi
11b20 6e 74 65 64 20 69 73 20 74 61 6b 65 6e 20 62 79  nted is taken by
11b30 0a 2a 2a 20 74 68 69 73 20 66 75 6e 63 74 69 6f  .** this functio
11b40 6e 20 77 68 69 6c 65 20 74 68 65 20 63 68 65 63  n while the chec
11b50 6b 70 6f 69 6e 74 20 69 73 20 72 75 6e 6e 69 6e  kpoint is runnin
11b60 67 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 69 44 62 20  g..**.** If iDb 
11b70 69 73 20 70 61 73 73 65 64 20 53 51 4c 49 54 45  is passed SQLITE
11b80 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 2c 20 74  _MAX_ATTACHED, t
11b90 68 65 6e 20 61 6c 6c 20 61 74 74 61 63 68 65 64  hen all attached
11ba0 20 64 61 74 61 62 61 73 65 73 20 61 72 65 0a 2a   databases are.*
11bb0 2a 20 63 68 65 63 6b 70 6f 69 6e 74 65 64 2e 20  * checkpointed. 
11bc0 49 66 20 61 6e 20 65 72 72 6f 72 20 69 73 20 65  If an error is e
11bd0 6e 63 6f 75 6e 74 65 72 65 64 20 69 74 20 69 73  ncountered it is
11be0 20 72 65 74 75 72 6e 65 64 20 69 6d 6d 65 64 69   returned immedi
11bf0 61 74 65 6c 79 20 2d 0a 2a 2a 20 6e 6f 20 61 74  ately -.** no at
11c00 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20 74 6f  tempt is made to
11c10 20 63 68 65 63 6b 70 6f 69 6e 74 20 61 6e 79 20   checkpoint any 
11c20 72 65 6d 61 69 6e 69 6e 67 20 64 61 74 61 62 61  remaining databa
11c30 73 65 73 2e 0a 2a 2a 0a 2a 2a 20 50 61 72 61 6d  ses..**.** Param
11c40 65 74 65 72 20 65 4d 6f 64 65 20 69 73 20 6f 6e  eter eMode is on
11c50 65 20 6f 66 20 53 51 4c 49 54 45 5f 43 48 45 43  e of SQLITE_CHEC
11c60 4b 50 4f 49 4e 54 5f 50 41 53 53 49 56 45 2c 20  KPOINT_PASSIVE, 
11c70 46 55 4c 4c 20 6f 72 20 52 45 53 54 41 52 54 2e  FULL or RESTART.
11c80 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 43  .*/.int sqlite3C
11c90 68 65 63 6b 70 6f 69 6e 74 28 73 71 6c 69 74 65  heckpoint(sqlite
11ca0 33 20 2a 64 62 2c 20 69 6e 74 20 69 44 62 2c 20  3 *db, int iDb, 
11cb0 69 6e 74 20 65 4d 6f 64 65 2c 20 69 6e 74 20 2a  int eMode, int *
11cc0 70 6e 4c 6f 67 2c 20 69 6e 74 20 2a 70 6e 43 6b  pnLog, int *pnCk
11cd0 70 74 29 7b 0a 20 20 69 6e 74 20 72 63 20 3d 20  pt){.  int rc = 
11ce0 53 51 4c 49 54 45 5f 4f 4b 3b 20 20 20 20 20 20  SQLITE_OK;      
11cf0 20 20 20 20 20 20 20 2f 2a 20 52 65 74 75 72 6e         /* Return
11d00 20 63 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 69   code */.  int i
11d10 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
11d20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73             /* Us
11d30 65 64 20 74 6f 20 69 74 65 72 61 74 65 20 74 68  ed to iterate th
11d40 72 6f 75 67 68 20 61 74 74 61 63 68 65 64 20 64  rough attached d
11d50 62 73 20 2a 2f 0a 20 20 69 6e 74 20 62 42 75 73  bs */.  int bBus
11d60 79 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20  y = 0;          
11d70 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
11d80 69 66 20 53 51 4c 49 54 45 5f 42 55 53 59 20 68  if SQLITE_BUSY h
11d90 61 73 20 62 65 65 6e 20 65 6e 63 6f 75 6e 74 65  as been encounte
11da0 72 65 64 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74  red */..  assert
11db0 28 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f  ( sqlite3_mutex_
11dc0 68 65 6c 64 28 64 62 2d 3e 6d 75 74 65 78 29 20  held(db->mutex) 
11dd0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 21 70 6e  );.  assert( !pn
11de0 4c 6f 67 20 7c 7c 20 2a 70 6e 4c 6f 67 3d 3d 2d  Log || *pnLog==-
11df0 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 21  1 );.  assert( !
11e00 70 6e 43 6b 70 74 20 7c 7c 20 2a 70 6e 43 6b 70  pnCkpt || *pnCkp
11e10 74 3d 3d 2d 31 20 29 3b 0a 0a 20 20 66 6f 72 28  t==-1 );..  for(
11e20 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 20 26  i=0; i<db->nDb &
11e30 26 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 3b  & rc==SQLITE_OK;
11e40 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 69   i++){.    if( i
11e50 3d 3d 69 44 62 20 7c 7c 20 69 44 62 3d 3d 53 51  ==iDb || iDb==SQ
11e60 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45  LITE_MAX_ATTACHE
11e70 44 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  D ){.      rc = 
11e80 73 71 6c 69 74 65 33 42 74 72 65 65 43 68 65 63  sqlite3BtreeChec
11e90 6b 70 6f 69 6e 74 28 64 62 2d 3e 61 44 62 5b 69  kpoint(db->aDb[i
11ea0 5d 2e 70 42 74 2c 20 65 4d 6f 64 65 2c 20 70 6e  ].pBt, eMode, pn
11eb0 4c 6f 67 2c 20 70 6e 43 6b 70 74 29 3b 0a 20 20  Log, pnCkpt);.  
11ec0 20 20 20 20 70 6e 4c 6f 67 20 3d 20 30 3b 0a 20      pnLog = 0;. 
11ed0 20 20 20 20 20 70 6e 43 6b 70 74 20 3d 20 30 3b       pnCkpt = 0;
11ee0 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53  .      if( rc==S
11ef0 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20  QLITE_BUSY ){.  
11f00 20 20 20 20 20 20 62 42 75 73 79 20 3d 20 31 3b        bBusy = 1;
11f10 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51  .        rc = SQ
11f20 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20 7d  LITE_OK;.      }
11f30 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 72 65  .    }.  }..  re
11f40 74 75 72 6e 20 28 72 63 3d 3d 53 51 4c 49 54 45  turn (rc==SQLITE
11f50 5f 4f 4b 20 26 26 20 62 42 75 73 79 29 20 3f 20  _OK && bBusy) ? 
11f60 53 51 4c 49 54 45 5f 42 55 53 59 20 3a 20 72 63  SQLITE_BUSY : rc
11f70 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
11f80 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 20 2a 2f  LITE_OMIT_WAL */
11f90 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e  ../*.** This fun
11fa0 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 72  ction returns tr
11fb0 75 65 20 69 66 20 6d 61 69 6e 2d 6d 65 6d 6f 72  ue if main-memor
11fc0 79 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64  y should be used
11fd0 20 69 6e 73 74 65 61 64 20 6f 66 0a 2a 2a 20 61   instead of.** a
11fe0 20 74 65 6d 70 6f 72 61 72 79 20 66 69 6c 65 20   temporary file 
11ff0 66 6f 72 20 74 72 61 6e 73 69 65 6e 74 20 70 61  for transient pa
12000 67 65 72 20 66 69 6c 65 73 20 61 6e 64 20 73 74  ger files and st
12010 61 74 65 6d 65 6e 74 20 6a 6f 75 72 6e 61 6c 73  atement journals
12020 2e 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 72  ..** The value r
12030 65 74 75 72 6e 65 64 20 64 65 70 65 6e 64 73 20  eturned depends 
12040 6f 6e 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  on the value of 
12050 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65 20 28  db->temp_store (
12060 72 75 6e 74 69 6d 65 0a 2a 2a 20 70 61 72 61 6d  runtime.** param
12070 65 74 65 72 29 20 61 6e 64 20 74 68 65 20 63 6f  eter) and the co
12080 6d 70 69 6c 65 20 74 69 6d 65 20 76 61 6c 75 65  mpile time value
12090 20 6f 66 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f   of SQLITE_TEMP_
120a0 53 54 4f 52 45 2e 20 54 68 65 0a 2a 2a 20 66 6f  STORE. The.** fo
120b0 6c 6c 6f 77 69 6e 67 20 74 61 62 6c 65 20 64 65  llowing table de
120c0 73 63 72 69 62 65 73 20 74 68 65 20 72 65 6c 61  scribes the rela
120d0 74 69 6f 6e 73 68 69 70 20 62 65 74 77 65 65 6e  tionship between
120e0 20 74 68 65 73 65 20 74 77 6f 20 76 61 6c 75 65   these two value
120f0 73 0a 2a 2a 20 61 6e 64 20 74 68 69 73 20 66 75  s.** and this fu
12100 6e 63 74 69 6f 6e 73 20 72 65 74 75 72 6e 20 76  nctions return v
12110 61 6c 75 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 53 51  alue..**.**   SQ
12120 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 20  LITE_TEMP_STORE 
12130 20 20 20 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f      db->temp_sto
12140 72 65 20 20 20 20 20 4c 6f 63 61 74 69 6f 6e 20  re     Location 
12150 6f 66 20 74 65 6d 70 6f 72 61 72 79 20 64 61 74  of temporary dat
12160 61 62 61 73 65 0a 2a 2a 20 20 20 2d 2d 2d 2d 2d  abase.**   -----
12170 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 20 20 20 20  ------------    
12180 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 20   -------------- 
12190 20 20 20 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d      ------------
121a0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
121b0 2d 2d 0a 2a 2a 20 20 20 30 20 20 20 20 20 20 20  --.**   0       
121c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 6e                an
121d0 79 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  y               
121e0 20 66 69 6c 65 20 20 20 20 20 20 28 72 65 74 75   file      (retu
121f0 72 6e 20 30 29 0a 2a 2a 20 20 20 31 20 20 20 20  rn 0).**   1    
12200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12210 20 31 20 20 20 20 20 20 20 20 20 20 20 20 20 20   1              
12220 20 20 20 20 66 69 6c 65 20 20 20 20 20 20 28 72      file      (r
12230 65 74 75 72 6e 20 30 29 0a 2a 2a 20 20 20 31 20  eturn 0).**   1 
12240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12250 20 20 20 20 32 20 20 20 20 20 20 20 20 20 20 20      2           
12260 20 20 20 20 20 20 20 6d 65 6d 6f 72 79 20 20 20         memory   
12270 20 28 72 65 74 75 72 6e 20 31 29 0a 2a 2a 20 20   (return 1).**  
12280 20 31 20 20 20 20 20 20 20 20 20 20 20 20 20 20   1              
12290 20 20 20 20 20 20 20 30 20 20 20 20 20 20 20 20         0        
122a0 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 20 20            file  
122b0 20 20 20 20 28 72 65 74 75 72 6e 20 30 29 0a 2a      (return 0).*
122c0 2a 20 20 20 32 20 20 20 20 20 20 20 20 20 20 20  *   2           
122d0 20 20 20 20 20 20 20 20 20 20 31 20 20 20 20 20            1     
122e0 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c               fil
122f0 65 20 20 20 20 20 20 28 72 65 74 75 72 6e 20 30  e      (return 0
12300 29 0a 2a 2a 20 20 20 32 20 20 20 20 20 20 20 20  ).**   2        
12310 20 20 20 20 20 20 20 20 20 20 20 20 20 32 20 20               2  
12320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12330 6d 65 6d 6f 72 79 20 20 20 20 28 72 65 74 75 72  memory    (retur
12340 6e 20 31 29 0a 2a 2a 20 20 20 32 20 20 20 20 20  n 1).**   2     
12350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12360 30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  0               
12370 20 20 20 6d 65 6d 6f 72 79 20 20 20 20 28 72 65     memory    (re
12380 74 75 72 6e 20 31 29 0a 2a 2a 20 20 20 33 20 20  turn 1).**   3  
12390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
123a0 20 20 20 61 6e 79 20 20 20 20 20 20 20 20 20 20     any          
123b0 20 20 20 20 20 20 6d 65 6d 6f 72 79 20 20 20 20        memory    
123c0 28 72 65 74 75 72 6e 20 31 29 0a 2a 2f 0a 69 6e  (return 1).*/.in
123d0 74 20 73 71 6c 69 74 65 33 54 65 6d 70 49 6e 4d  t sqlite3TempInM
123e0 65 6d 6f 72 79 28 63 6f 6e 73 74 20 73 71 6c 69  emory(const sqli
123f0 74 65 33 20 2a 64 62 29 7b 0a 23 69 66 20 53 51  te3 *db){.#if SQ
12400 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 3d  LITE_TEMP_STORE=
12410 3d 31 0a 20 20 72 65 74 75 72 6e 20 28 20 64 62  =1.  return ( db
12420 2d 3e 74 65 6d 70 5f 73 74 6f 72 65 3d 3d 32 20  ->temp_store==2 
12430 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 53 51  );.#endif.#if SQ
12440 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 3d  LITE_TEMP_STORE=
12450 3d 32 0a 20 20 72 65 74 75 72 6e 20 28 20 64 62  =2.  return ( db
12460 2d 3e 74 65 6d 70 5f 73 74 6f 72 65 21 3d 31 20  ->temp_store!=1 
12470 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 53 51  );.#endif.#if SQ
12480 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 3d  LITE_TEMP_STORE=
12490 3d 33 0a 20 20 55 4e 55 53 45 44 5f 50 41 52 41  =3.  UNUSED_PARA
124a0 4d 45 54 45 52 28 64 62 29 3b 0a 20 20 72 65 74  METER(db);.  ret
124b0 75 72 6e 20 31 3b 0a 23 65 6e 64 69 66 0a 23 69  urn 1;.#endif.#i
124c0 66 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54  f SQLITE_TEMP_ST
124d0 4f 52 45 3c 31 20 7c 7c 20 53 51 4c 49 54 45 5f  ORE<1 || SQLITE_
124e0 54 45 4d 50 5f 53 54 4f 52 45 3e 33 0a 20 20 55  TEMP_STORE>3.  U
124f0 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52 28  NUSED_PARAMETER(
12500 64 62 29 3b 0a 20 20 72 65 74 75 72 6e 20 30 3b  db);.  return 0;
12510 0a 23 65 6e 64 69 66 0a 7d 0a 0a 2f 2a 0a 2a 2a  .#endif.}../*.**
12520 20 52 65 74 75 72 6e 20 55 54 46 2d 38 20 65 6e   Return UTF-8 en
12530 63 6f 64 65 64 20 45 6e 67 6c 69 73 68 20 6c 61  coded English la
12540 6e 67 75 61 67 65 20 65 78 70 6c 61 6e 61 74 69  nguage explanati
12550 6f 6e 20 6f 66 20 74 68 65 20 6d 6f 73 74 20 72  on of the most r
12560 65 63 65 6e 74 0a 2a 2a 20 65 72 72 6f 72 2e 0a  ecent.** error..
12570 2a 2f 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73  */.const char *s
12580 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 73 71  qlite3_errmsg(sq
12590 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20 20 63 6f  lite3 *db){.  co
125a0 6e 73 74 20 63 68 61 72 20 2a 7a 3b 0a 20 20 69  nst char *z;.  i
125b0 66 28 20 21 64 62 20 29 7b 0a 20 20 20 20 72 65  f( !db ){.    re
125c0 74 75 72 6e 20 73 71 6c 69 74 65 33 45 72 72 53  turn sqlite3ErrS
125d0 74 72 28 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f  tr(SQLITE_NOMEM_
125e0 42 4b 50 54 29 3b 0a 20 20 7d 0a 20 20 69 66 28  BKPT);.  }.  if(
125f0 20 21 73 71 6c 69 74 65 33 53 61 66 65 74 79 43   !sqlite3SafetyC
12600 68 65 63 6b 53 69 63 6b 4f 72 4f 6b 28 64 62 29  heckSickOrOk(db)
12610 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 73   ){.    return s
12620 71 6c 69 74 65 33 45 72 72 53 74 72 28 53 51 4c  qlite3ErrStr(SQL
12630 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54 29  ITE_MISUSE_BKPT)
12640 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f  ;.  }.  sqlite3_
12650 6d 75 74 65 78 5f 65 6e 74 65 72 28 64 62 2d 3e  mutex_enter(db->
12660 6d 75 74 65 78 29 3b 0a 20 20 69 66 28 20 64 62  mutex);.  if( db
12670 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29  ->mallocFailed )
12680 7b 0a 20 20 20 20 7a 20 3d 20 73 71 6c 69 74 65  {.    z = sqlite
12690 33 45 72 72 53 74 72 28 53 51 4c 49 54 45 5f 4e  3ErrStr(SQLITE_N
126a0 4f 4d 45 4d 5f 42 4b 50 54 29 3b 0a 20 20 7d 65  OMEM_BKPT);.  }e
126b0 6c 73 65 7b 0a 20 20 20 20 74 65 73 74 63 61 73  lse{.    testcas
126c0 65 28 20 64 62 2d 3e 70 45 72 72 3d 3d 30 20 29  e( db->pErr==0 )
126d0 3b 0a 20 20 20 20 7a 20 3d 20 28 63 68 61 72 2a  ;.    z = (char*
126e0 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74  )sqlite3_value_t
126f0 65 78 74 28 64 62 2d 3e 70 45 72 72 29 3b 0a 20  ext(db->pErr);. 
12700 20 20 20 61 73 73 65 72 74 28 20 21 64 62 2d 3e     assert( !db->
12710 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a  mallocFailed );.
12720 20 20 20 20 69 66 28 20 7a 3d 3d 30 20 29 7b 0a      if( z==0 ){.
12730 20 20 20 20 20 20 7a 20 3d 20 73 71 6c 69 74 65        z = sqlite
12740 33 45 72 72 53 74 72 28 64 62 2d 3e 65 72 72 43  3ErrStr(db->errC
12750 6f 64 65 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  ode);.    }.  }.
12760 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f    sqlite3_mutex_
12770 6c 65 61 76 65 28 64 62 2d 3e 6d 75 74 65 78 29  leave(db->mutex)
12780 3b 0a 20 20 72 65 74 75 72 6e 20 7a 3b 0a 7d 0a  ;.  return z;.}.
12790 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
127a0 4f 4d 49 54 5f 55 54 46 31 36 0a 2f 2a 0a 2a 2a  OMIT_UTF16./*.**
127b0 20 52 65 74 75 72 6e 20 55 54 46 2d 31 36 20 65   Return UTF-16 e
127c0 6e 63 6f 64 65 64 20 45 6e 67 6c 69 73 68 20 6c  ncoded English l
127d0 61 6e 67 75 61 67 65 20 65 78 70 6c 61 6e 61 74  anguage explanat
127e0 69 6f 6e 20 6f 66 20 74 68 65 20 6d 6f 73 74 20  ion of the most 
127f0 72 65 63 65 6e 74 0a 2a 2a 20 65 72 72 6f 72 2e  recent.** error.
12800 0a 2a 2f 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a  .*/.const void *
12810 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 31 36  sqlite3_errmsg16
12820 28 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20  (sqlite3 *db){. 
12830 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 31   static const u1
12840 36 20 6f 75 74 4f 66 4d 65 6d 5b 5d 20 3d 20 7b  6 outOfMem[] = {
12850 0a 20 20 20 20 27 6f 27 2c 20 27 75 27 2c 20 27  .    'o', 'u', '
12860 74 27 2c 20 27 20 27 2c 20 27 6f 27 2c 20 27 66  t', ' ', 'o', 'f
12870 27 2c 20 27 20 27 2c 20 27 6d 27 2c 20 27 65 27  ', ' ', 'm', 'e'
12880 2c 20 27 6d 27 2c 20 27 6f 27 2c 20 27 72 27 2c  , 'm', 'o', 'r',
12890 20 27 79 27 2c 20 30 0a 20 20 7d 3b 0a 20 20 73   'y', 0.  };.  s
128a0 74 61 74 69 63 20 63 6f 6e 73 74 20 75 31 36 20  tatic const u16 
128b0 6d 69 73 75 73 65 5b 5d 20 3d 20 7b 0a 20 20 20  misuse[] = {.   
128c0 20 27 6c 27 2c 20 27 69 27 2c 20 27 62 27 2c 20   'l', 'i', 'b', 
128d0 27 72 27 2c 20 27 61 27 2c 20 27 72 27 2c 20 27  'r', 'a', 'r', '
128e0 79 27 2c 20 27 20 27 2c 20 0a 20 20 20 20 27 72  y', ' ', .    'r
128f0 27 2c 20 27 6f 27 2c 20 27 75 27 2c 20 27 74 27  ', 'o', 'u', 't'
12900 2c 20 27 69 27 2c 20 27 6e 27 2c 20 27 65 27 2c  , 'i', 'n', 'e',
12910 20 27 20 27 2c 20 0a 20 20 20 20 27 63 27 2c 20   ' ', .    'c', 
12920 27 61 27 2c 20 27 6c 27 2c 20 27 6c 27 2c 20 27  'a', 'l', 'l', '
12930 65 27 2c 20 27 64 27 2c 20 27 20 27 2c 20 0a 20  e', 'd', ' ', . 
12940 20 20 20 27 6f 27 2c 20 27 75 27 2c 20 27 74 27     'o', 'u', 't'
12950 2c 20 27 20 27 2c 20 0a 20 20 20 20 27 6f 27 2c  , ' ', .    'o',
12960 20 27 66 27 2c 20 27 20 27 2c 20 0a 20 20 20 20   'f', ' ', .    
12970 27 73 27 2c 20 27 65 27 2c 20 27 71 27 2c 20 27  's', 'e', 'q', '
12980 75 27 2c 20 27 65 27 2c 20 27 6e 27 2c 20 27 63  u', 'e', 'n', 'c
12990 27 2c 20 27 65 27 2c 20 30 0a 20 20 7d 3b 0a 0a  ', 'e', 0.  };..
129a0 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 3b    const void *z;
129b0 0a 20 20 69 66 28 20 21 64 62 20 29 7b 0a 20 20  .  if( !db ){.  
129c0 20 20 72 65 74 75 72 6e 20 28 76 6f 69 64 20 2a    return (void *
129d0 29 6f 75 74 4f 66 4d 65 6d 3b 0a 20 20 7d 0a 20  )outOfMem;.  }. 
129e0 20 69 66 28 20 21 73 71 6c 69 74 65 33 53 61 66   if( !sqlite3Saf
129f0 65 74 79 43 68 65 63 6b 53 69 63 6b 4f 72 4f 6b  etyCheckSickOrOk
12a00 28 64 62 29 20 29 7b 0a 20 20 20 20 72 65 74 75  (db) ){.    retu
12a10 72 6e 20 28 76 6f 69 64 20 2a 29 6d 69 73 75 73  rn (void *)misus
12a20 65 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33  e;.  }.  sqlite3
12a30 5f 6d 75 74 65 78 5f 65 6e 74 65 72 28 64 62 2d  _mutex_enter(db-
12a40 3e 6d 75 74 65 78 29 3b 0a 20 20 69 66 28 20 64  >mutex);.  if( d
12a50 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
12a60 29 7b 0a 20 20 20 20 7a 20 3d 20 28 76 6f 69 64  ){.    z = (void
12a70 20 2a 29 6f 75 74 4f 66 4d 65 6d 3b 0a 20 20 7d   *)outOfMem;.  }
12a80 65 6c 73 65 7b 0a 20 20 20 20 7a 20 3d 20 73 71  else{.    z = sq
12a90 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
12aa0 31 36 28 64 62 2d 3e 70 45 72 72 29 3b 0a 20 20  16(db->pErr);.  
12ab0 20 20 69 66 28 20 7a 3d 3d 30 20 29 7b 0a 20 20    if( z==0 ){.  
12ac0 20 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72      sqlite3Error
12ad0 57 69 74 68 4d 73 67 28 64 62 2c 20 64 62 2d 3e  WithMsg(db, db->
12ae0 65 72 72 43 6f 64 65 2c 20 73 71 6c 69 74 65 33  errCode, sqlite3
12af0 45 72 72 53 74 72 28 64 62 2d 3e 65 72 72 43 6f  ErrStr(db->errCo
12b00 64 65 29 29 3b 0a 20 20 20 20 20 20 7a 20 3d 20  de));.      z = 
12b10 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65  sqlite3_value_te
12b20 78 74 31 36 28 64 62 2d 3e 70 45 72 72 29 3b 0a  xt16(db->pErr);.
12b30 20 20 20 20 7d 0a 20 20 20 20 2f 2a 20 41 20 6d      }.    /* A m
12b40 61 6c 6c 6f 63 28 29 20 6d 61 79 20 68 61 76 65  alloc() may have
12b50 20 66 61 69 6c 65 64 20 77 69 74 68 69 6e 20 74   failed within t
12b60 68 65 20 63 61 6c 6c 20 74 6f 20 73 71 6c 69 74  he call to sqlit
12b70 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 31 36 28  e3_value_text16(
12b80 29 0a 20 20 20 20 2a 2a 20 61 62 6f 76 65 2e 20  ).    ** above. 
12b90 49 66 20 74 68 69 73 20 69 73 20 74 68 65 20 63  If this is the c
12ba0 61 73 65 2c 20 74 68 65 6e 20 74 68 65 20 64 62  ase, then the db
12bb0 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 66  ->mallocFailed f
12bc0 6c 61 67 20 6e 65 65 64 73 20 74 6f 0a 20 20 20  lag needs to.   
12bd0 20 2a 2a 20 62 65 20 63 6c 65 61 72 65 64 20 62   ** be cleared b
12be0 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e 67 2e  efore returning.
12bf0 20 44 6f 20 74 68 69 73 20 64 69 72 65 63 74 6c   Do this directl
12c00 79 2c 20 69 6e 73 74 65 61 64 20 6f 66 20 76 69  y, instead of vi
12c10 61 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 33  a.    ** sqlite3
12c20 41 70 69 45 78 69 74 28 29 2c 20 74 6f 20 61 76  ApiExit(), to av
12c30 6f 69 64 20 73 65 74 74 69 6e 67 20 74 68 65 20  oid setting the 
12c40 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 20  database handle 
12c50 65 72 72 6f 72 20 6d 65 73 73 61 67 65 2e 0a 20  error message.. 
12c60 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65     */.    sqlite
12c70 33 4f 6f 6d 43 6c 65 61 72 28 64 62 29 3b 0a 20  3OomClear(db);. 
12c80 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74   }.  sqlite3_mut
12c90 65 78 5f 6c 65 61 76 65 28 64 62 2d 3e 6d 75 74  ex_leave(db->mut
12ca0 65 78 29 3b 0a 20 20 72 65 74 75 72 6e 20 7a 3b  ex);.  return z;
12cb0 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
12cc0 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a  ITE_OMIT_UTF16 *
12cd0 2f 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  /../*.** Return 
12ce0 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20  the most recent 
12cf0 65 72 72 6f 72 20 63 6f 64 65 20 67 65 6e 65 72  error code gener
12d00 61 74 65 64 20 62 79 20 61 6e 20 53 51 4c 69 74  ated by an SQLit
12d10 65 20 72 6f 75 74 69 6e 65 2e 20 49 66 20 4e 55  e routine. If NU
12d20 4c 4c 20 69 73 0a 2a 2a 20 70 61 73 73 65 64 20  LL is.** passed 
12d30 74 6f 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e  to this function
12d40 2c 20 77 65 20 61 73 73 75 6d 65 20 61 20 6d 61  , we assume a ma
12d50 6c 6c 6f 63 28 29 20 66 61 69 6c 65 64 20 64 75  lloc() failed du
12d60 72 69 6e 67 20 73 71 6c 69 74 65 33 5f 6f 70 65  ring sqlite3_ope
12d70 6e 28 29 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  n()..*/.int sqli
12d80 74 65 33 5f 65 72 72 63 6f 64 65 28 73 71 6c 69  te3_errcode(sqli
12d90 74 65 33 20 2a 64 62 29 7b 0a 20 20 69 66 28 20  te3 *db){.  if( 
12da0 64 62 20 26 26 20 21 73 71 6c 69 74 65 33 53 61  db && !sqlite3Sa
12db0 66 65 74 79 43 68 65 63 6b 53 69 63 6b 4f 72 4f  fetyCheckSickOrO
12dc0 6b 28 64 62 29 20 29 7b 0a 20 20 20 20 72 65 74  k(db) ){.    ret
12dd0 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53  urn SQLITE_MISUS
12de0 45 5f 42 4b 50 54 3b 0a 20 20 7d 0a 20 20 69 66  E_BKPT;.  }.  if
12df0 28 20 21 64 62 20 7c 7c 20 64 62 2d 3e 6d 61 6c  ( !db || db->mal
12e00 6c 6f 63 46 61 69 6c 65 64 20 29 7b 0a 20 20 20  locFailed ){.   
12e10 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4e   return SQLITE_N
12e20 4f 4d 45 4d 5f 42 4b 50 54 3b 0a 20 20 7d 0a 20  OMEM_BKPT;.  }. 
12e30 20 72 65 74 75 72 6e 20 64 62 2d 3e 65 72 72 43   return db->errC
12e40 6f 64 65 20 26 20 64 62 2d 3e 65 72 72 4d 61 73  ode & db->errMas
12e50 6b 3b 0a 7d 0a 69 6e 74 20 73 71 6c 69 74 65 33  k;.}.int sqlite3
12e60 5f 65 78 74 65 6e 64 65 64 5f 65 72 72 63 6f 64  _extended_errcod
12e70 65 28 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a  e(sqlite3 *db){.
12e80 20 20 69 66 28 20 64 62 20 26 26 20 21 73 71 6c    if( db && !sql
12e90 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 53  ite3SafetyCheckS
12ea0 69 63 6b 4f 72 4f 6b 28 64 62 29 20 29 7b 0a 20  ickOrOk(db) ){. 
12eb0 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
12ec0 5f 4d 49 53 55 53 45 5f 42 4b 50 54 3b 0a 20 20  _MISUSE_BKPT;.  
12ed0 7d 0a 20 20 69 66 28 20 21 64 62 20 7c 7c 20 64  }.  if( !db || d
12ee0 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
12ef0 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51  ){.    return SQ
12f00 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 3b  LITE_NOMEM_BKPT;
12f10 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 64 62  .  }.  return db
12f20 2d 3e 65 72 72 43 6f 64 65 3b 0a 7d 0a 69 6e 74  ->errCode;.}.int
12f30 20 73 71 6c 69 74 65 33 5f 73 79 73 74 65 6d 5f   sqlite3_system_
12f40 65 72 72 6e 6f 28 73 71 6c 69 74 65 33 20 2a 64  errno(sqlite3 *d
12f50 62 29 7b 0a 20 20 72 65 74 75 72 6e 20 64 62 20  b){.  return db 
12f60 3f 20 64 62 2d 3e 69 53 79 73 45 72 72 6e 6f 20  ? db->iSysErrno 
12f70 3a 20 30 3b 0a 7d 20 20 0a 0a 2f 2a 0a 2a 2a 20  : 0;.}  ../*.** 
12f80 52 65 74 75 72 6e 20 61 20 73 74 72 69 6e 67 20  Return a string 
12f90 74 68 61 74 20 64 65 73 63 72 69 62 65 73 20 74  that describes t
12fa0 68 65 20 6b 69 6e 64 20 6f 66 20 65 72 72 6f 72  he kind of error
12fb0 20 73 70 65 63 69 66 69 65 64 20 69 6e 20 74 68   specified in th
12fc0 65 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 2e 20 20  e.** argument.  
12fd0 46 6f 72 20 6e 6f 77 2c 20 74 68 69 73 20 73 69  For now, this si
12fe0 6d 70 6c 79 20 63 61 6c 6c 73 20 74 68 65 20 69  mply calls the i
12ff0 6e 74 65 72 6e 61 6c 20 73 71 6c 69 74 65 33 45  nternal sqlite3E
13000 72 72 53 74 72 28 29 0a 2a 2a 20 66 75 6e 63 74  rrStr().** funct
13010 69 6f 6e 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 63 68  ion..*/.const ch
13020 61 72 20 2a 73 71 6c 69 74 65 33 5f 65 72 72 73  ar *sqlite3_errs
13030 74 72 28 69 6e 74 20 72 63 29 7b 0a 20 20 72 65  tr(int rc){.  re
13040 74 75 72 6e 20 73 71 6c 69 74 65 33 45 72 72 53  turn sqlite3ErrS
13050 74 72 28 72 63 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  tr(rc);.}../*.**
13060 20 43 72 65 61 74 65 20 61 20 6e 65 77 20 63 6f   Create a new co
13070 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e  llating function
13080 20 66 6f 72 20 64 61 74 61 62 61 73 65 20 22 64   for database "d
13090 62 22 2e 20 20 54 68 65 20 6e 61 6d 65 20 69 73  b".  The name is
130a0 20 7a 4e 61 6d 65 0a 2a 2a 20 61 6e 64 20 74 68   zName.** and th
130b0 65 20 65 6e 63 6f 64 69 6e 67 20 69 73 20 65 6e  e encoding is en
130c0 63 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  c..*/.static int
130d0 20 63 72 65 61 74 65 43 6f 6c 6c 61 74 69 6f 6e   createCollation
130e0 28 0a 20 20 73 71 6c 69 74 65 33 2a 20 64 62 2c  (.  sqlite3* db,
130f0 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
13100 4e 61 6d 65 2c 20 0a 20 20 75 38 20 65 6e 63 2c  Name, .  u8 enc,
13110 0a 20 20 76 6f 69 64 2a 20 70 43 74 78 2c 0a 20  .  void* pCtx,. 
13120 20 69 6e 74 28 2a 78 43 6f 6d 70 61 72 65 29 28   int(*xCompare)(
13130 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  void*,int,const 
13140 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  void*,int,const 
13150 76 6f 69 64 2a 29 2c 0a 20 20 76 6f 69 64 28 2a  void*),.  void(*
13160 78 44 65 6c 29 28 76 6f 69 64 2a 29 0a 29 7b 0a  xDel)(void*).){.
13170 20 20 43 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c    CollSeq *pColl
13180 3b 0a 20 20 69 6e 74 20 65 6e 63 32 3b 0a 20 20  ;.  int enc2;.  
13190 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74  .  assert( sqlit
131a0 65 33 5f 6d 75 74 65 78 5f 68 65 6c 64 28 64 62  e3_mutex_held(db
131b0 2d 3e 6d 75 74 65 78 29 20 29 3b 0a 0a 20 20 2f  ->mutex) );..  /
131c0 2a 20 49 66 20 53 51 4c 49 54 45 5f 55 54 46 31  * If SQLITE_UTF1
131d0 36 20 69 73 20 73 70 65 63 69 66 69 65 64 20 61  6 is specified a
131e0 73 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20 74  s the encoding t
131f0 79 70 65 2c 20 74 72 61 6e 73 66 6f 72 6d 20 74  ype, transform t
13200 68 69 73 0a 20 20 2a 2a 20 74 6f 20 6f 6e 65 20  his.  ** to one 
13210 6f 66 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c  of SQLITE_UTF16L
13220 45 20 6f 72 20 53 51 4c 49 54 45 5f 55 54 46 31  E or SQLITE_UTF1
13230 36 42 45 20 75 73 69 6e 67 20 74 68 65 0a 20 20  6BE using the.  
13240 2a 2a 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e  ** SQLITE_UTF16N
13250 41 54 49 56 45 20 6d 61 63 72 6f 2e 20 53 51 4c  ATIVE macro. SQL
13260 49 54 45 5f 55 54 46 31 36 20 69 73 20 6e 6f 74  ITE_UTF16 is not
13270 20 75 73 65 64 20 69 6e 74 65 72 6e 61 6c 6c 79   used internally
13280 2e 0a 20 20 2a 2f 0a 20 20 65 6e 63 32 20 3d 20  ..  */.  enc2 = 
13290 65 6e 63 3b 0a 20 20 74 65 73 74 63 61 73 65 28  enc;.  testcase(
132a0 20 65 6e 63 32 3d 3d 53 51 4c 49 54 45 5f 55 54   enc2==SQLITE_UT
132b0 46 31 36 20 29 3b 0a 20 20 74 65 73 74 63 61 73  F16 );.  testcas
132c0 65 28 20 65 6e 63 32 3d 3d 53 51 4c 49 54 45 5f  e( enc2==SQLITE_
132d0 55 54 46 31 36 5f 41 4c 49 47 4e 45 44 20 29 3b  UTF16_ALIGNED );
132e0 0a 20 20 69 66 28 20 65 6e 63 32 3d 3d 53 51 4c  .  if( enc2==SQL
132f0 49 54 45 5f 55 54 46 31 36 20 7c 7c 20 65 6e 63  ITE_UTF16 || enc
13300 32 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31 36 5f  2==SQLITE_UTF16_
13310 41 4c 49 47 4e 45 44 20 29 7b 0a 20 20 20 20 65  ALIGNED ){.    e
13320 6e 63 32 20 3d 20 53 51 4c 49 54 45 5f 55 54 46  nc2 = SQLITE_UTF
13330 31 36 4e 41 54 49 56 45 3b 0a 20 20 7d 0a 20 20  16NATIVE;.  }.  
13340 69 66 28 20 65 6e 63 32 3c 53 51 4c 49 54 45 5f  if( enc2<SQLITE_
13350 55 54 46 38 20 7c 7c 20 65 6e 63 32 3e 53 51 4c  UTF8 || enc2>SQL
13360 49 54 45 5f 55 54 46 31 36 42 45 20 29 7b 0a 20  ITE_UTF16BE ){. 
13370 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
13380 5f 4d 49 53 55 53 45 5f 42 4b 50 54 3b 0a 20 20  _MISUSE_BKPT;.  
13390 7d 0a 0a 20 20 2f 2a 20 43 68 65 63 6b 20 69 66  }..  /* Check if
133a0 20 74 68 69 73 20 63 61 6c 6c 20 69 73 20 72 65   this call is re
133b0 6d 6f 76 69 6e 67 20 6f 72 20 72 65 70 6c 61 63  moving or replac
133c0 69 6e 67 20 61 6e 20 65 78 69 73 74 69 6e 67 20  ing an existing 
133d0 63 6f 6c 6c 61 74 69 6f 6e 20 0a 20 20 2a 2a 20  collation .  ** 
133e0 73 65 71 75 65 6e 63 65 2e 20 49 66 20 73 6f 2c  sequence. If so,
133f0 20 61 6e 64 20 74 68 65 72 65 20 61 72 65 20 61   and there are a
13400 63 74 69 76 65 20 56 4d 73 2c 20 72 65 74 75 72  ctive VMs, retur
13410 6e 20 62 75 73 79 2e 20 49 66 20 74 68 65 72 65  n busy. If there
13420 0a 20 20 2a 2a 20 61 72 65 20 6e 6f 20 61 63 74  .  ** are no act
13430 69 76 65 20 56 4d 73 2c 20 69 6e 76 61 6c 69 64  ive VMs, invalid
13440 61 74 65 20 61 6e 79 20 70 72 65 2d 63 6f 6d 70  ate any pre-comp
13450 69 6c 65 64 20 73 74 61 74 65 6d 65 6e 74 73 2e  iled statements.
13460 0a 20 20 2a 2f 0a 20 20 70 43 6f 6c 6c 20 3d 20  .  */.  pColl = 
13470 73 71 6c 69 74 65 33 46 69 6e 64 43 6f 6c 6c 53  sqlite3FindCollS
13480 65 71 28 64 62 2c 20 28 75 38 29 65 6e 63 32 2c  eq(db, (u8)enc2,
13490 20 7a 4e 61 6d 65 2c 20 30 29 3b 0a 20 20 69 66   zName, 0);.  if
134a0 28 20 70 43 6f 6c 6c 20 26 26 20 70 43 6f 6c 6c  ( pColl && pColl
134b0 2d 3e 78 43 6d 70 20 29 7b 0a 20 20 20 20 69 66  ->xCmp ){.    if
134c0 28 20 64 62 2d 3e 6e 56 64 62 65 41 63 74 69 76  ( db->nVdbeActiv
134d0 65 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  e ){.      sqlit
134e0 65 33 45 72 72 6f 72 57 69 74 68 4d 73 67 28 64  e3ErrorWithMsg(d
134f0 62 2c 20 53 51 4c 49 54 45 5f 42 55 53 59 2c 20  b, SQLITE_BUSY, 
13500 0a 20 20 20 20 20 20 20 20 22 75 6e 61 62 6c 65  .        "unable
13510 20 74 6f 20 64 65 6c 65 74 65 2f 6d 6f 64 69 66   to delete/modif
13520 79 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  y collation sequ
13530 65 6e 63 65 20 64 75 65 20 74 6f 20 61 63 74 69  ence due to acti
13540 76 65 20 73 74 61 74 65 6d 65 6e 74 73 22 29 3b  ve statements");
13550 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51  .      return SQ
13560 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 7d  LITE_BUSY;.    }
13570 0a 20 20 20 20 73 71 6c 69 74 65 33 45 78 70 69  .    sqlite3Expi
13580 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d  rePreparedStatem
13590 65 6e 74 73 28 64 62 29 3b 0a 0a 20 20 20 20 2f  ents(db);..    /
135a0 2a 20 49 66 20 63 6f 6c 6c 61 74 69 6f 6e 20 73  * If collation s
135b0 65 71 75 65 6e 63 65 20 70 43 6f 6c 6c 20 77 61  equence pColl wa
135c0 73 20 63 72 65 61 74 65 64 20 64 69 72 65 63 74  s created direct
135d0 6c 79 20 62 79 20 61 20 63 61 6c 6c 20 74 6f 0a  ly by a call to.
135e0 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 33 5f 63      ** sqlite3_c
135f0 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 2c  reate_collation,
13600 20 61 6e 64 20 6e 6f 74 20 67 65 6e 65 72 61 74   and not generat
13610 65 64 20 62 79 20 73 79 6e 74 68 43 6f 6c 6c 53  ed by synthCollS
13620 65 71 28 29 2c 0a 20 20 20 20 2a 2a 20 74 68 65  eq(),.    ** the
13630 6e 20 61 6e 79 20 63 6f 70 69 65 73 20 6d 61 64  n any copies mad
13640 65 20 62 79 20 73 79 6e 74 68 43 6f 6c 6c 53 65  e by synthCollSe
13650 71 28 29 20 6e 65 65 64 20 74 6f 20 62 65 20 69  q() need to be i
13660 6e 76 61 6c 69 64 61 74 65 64 2e 0a 20 20 20 20  nvalidated..    
13670 2a 2a 20 41 6c 73 6f 2c 20 63 6f 6c 6c 61 74 69  ** Also, collati
13680 6f 6e 20 64 65 73 74 72 75 63 74 6f 72 20 2d 20  on destructor - 
13690 43 6f 6c 6c 53 65 71 2e 78 44 65 6c 28 29 20 2d  CollSeq.xDel() -
136a0 20 66 75 6e 63 74 69 6f 6e 20 6d 61 79 20 6e 65   function may ne
136b0 65 64 0a 20 20 20 20 2a 2a 20 74 6f 20 62 65 20  ed.    ** to be 
136c0 63 61 6c 6c 65 64 2e 0a 20 20 20 20 2a 2f 20 0a  called..    */ .
136d0 20 20 20 20 69 66 28 20 28 70 43 6f 6c 6c 2d 3e      if( (pColl->
136e0 65 6e 63 20 26 20 7e 53 51 4c 49 54 45 5f 55 54  enc & ~SQLITE_UT
136f0 46 31 36 5f 41 4c 49 47 4e 45 44 29 3d 3d 65 6e  F16_ALIGNED)==en
13700 63 32 20 29 7b 0a 20 20 20 20 20 20 43 6f 6c 6c  c2 ){.      Coll
13710 53 65 71 20 2a 61 43 6f 6c 6c 20 3d 20 73 71 6c  Seq *aColl = sql
13720 69 74 65 33 48 61 73 68 46 69 6e 64 28 26 64 62  ite3HashFind(&db
13730 2d 3e 61 43 6f 6c 6c 53 65 71 2c 20 7a 4e 61 6d  ->aCollSeq, zNam
13740 65 29 3b 0a 20 20 20 20 20 20 69 6e 74 20 6a 3b  e);.      int j;
13750 0a 20 20 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20  .      for(j=0; 
13760 6a 3c 33 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20  j<3; j++){.     
13770 20 20 20 43 6f 6c 6c 53 65 71 20 2a 70 20 3d 20     CollSeq *p = 
13780 26 61 43 6f 6c 6c 5b 6a 5d 3b 0a 20 20 20 20 20  &aColl[j];.     
13790 20 20 20 69 66 28 20 70 2d 3e 65 6e 63 3d 3d 70     if( p->enc==p
137a0 43 6f 6c 6c 2d 3e 65 6e 63 20 29 7b 0a 20 20 20  Coll->enc ){.   
137b0 20 20 20 20 20 20 20 69 66 28 20 70 2d 3e 78 44         if( p->xD
137c0 65 6c 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  el ){.          
137d0 20 20 70 2d 3e 78 44 65 6c 28 70 2d 3e 70 55 73    p->xDel(p->pUs
137e0 65 72 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  er);.          }
137f0 0a 20 20 20 20 20 20 20 20 20 20 70 2d 3e 78 43  .          p->xC
13800 6d 70 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20  mp = 0;.        
13810 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  }.      }.    }.
13820 20 20 7d 0a 0a 20 20 70 43 6f 6c 6c 20 3d 20 73    }..  pColl = s
13830 71 6c 69 74 65 33 46 69 6e 64 43 6f 6c 6c 53 65  qlite3FindCollSe
13840 71 28 64 62 2c 20 28 75 38 29 65 6e 63 32 2c 20  q(db, (u8)enc2, 
13850 7a 4e 61 6d 65 2c 20 31 29 3b 0a 20 20 69 66 28  zName, 1);.  if(
13860 20 70 43 6f 6c 6c 3d 3d 30 20 29 20 72 65 74 75   pColl==0 ) retu
13870 72 6e 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f  rn SQLITE_NOMEM_
13880 42 4b 50 54 3b 0a 20 20 70 43 6f 6c 6c 2d 3e 78  BKPT;.  pColl->x
13890 43 6d 70 20 3d 20 78 43 6f 6d 70 61 72 65 3b 0a  Cmp = xCompare;.
138a0 20 20 70 43 6f 6c 6c 2d 3e 70 55 73 65 72 20 3d    pColl->pUser =
138b0 20 70 43 74 78 3b 0a 20 20 70 43 6f 6c 6c 2d 3e   pCtx;.  pColl->
138c0 78 44 65 6c 20 3d 20 78 44 65 6c 3b 0a 20 20 70  xDel = xDel;.  p
138d0 43 6f 6c 6c 2d 3e 65 6e 63 20 3d 20 28 75 38 29  Coll->enc = (u8)
138e0 28 65 6e 63 32 20 7c 20 28 65 6e 63 20 26 20 53  (enc2 | (enc & S
138f0 51 4c 49 54 45 5f 55 54 46 31 36 5f 41 4c 49 47  QLITE_UTF16_ALIG
13900 4e 45 44 29 29 3b 0a 20 20 73 71 6c 69 74 65 33  NED));.  sqlite3
13910 45 72 72 6f 72 28 64 62 2c 20 53 51 4c 49 54 45  Error(db, SQLITE
13920 5f 4f 4b 29 3b 0a 20 20 72 65 74 75 72 6e 20 53  _OK);.  return S
13930 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 0a 2f 2a  QLITE_OK;.}.../*
13940 0a 2a 2a 20 54 68 69 73 20 61 72 72 61 79 20 64  .** This array d
13950 65 66 69 6e 65 73 20 68 61 72 64 20 75 70 70 65  efines hard uppe
13960 72 20 62 6f 75 6e 64 73 20 6f 6e 20 6c 69 6d 69  r bounds on limi
13970 74 20 76 61 6c 75 65 73 2e 20 20 54 68 65 0a 2a  t values.  The.*
13980 2a 20 69 6e 69 74 69 61 6c 69 7a 65 72 20 6d 75  * initializer mu
13990 73 74 20 62 65 20 6b 65 70 74 20 69 6e 20 73 79  st be kept in sy
139a0 6e 63 20 77 69 74 68 20 74 68 65 20 53 51 4c 49  nc with the SQLI
139b0 54 45 5f 4c 49 4d 49 54 5f 2a 0a 2a 2a 20 23 64  TE_LIMIT_*.** #d
139c0 65 66 69 6e 65 73 20 69 6e 20 73 71 6c 69 74 65  efines in sqlite
139d0 33 2e 68 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 63  3.h..*/.static c
139e0 6f 6e 73 74 20 69 6e 74 20 61 48 61 72 64 4c 69  onst int aHardLi
139f0 6d 69 74 5b 5d 20 3d 20 7b 0a 20 20 53 51 4c 49  mit[] = {.  SQLI
13a00 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 2c 0a 20  TE_MAX_LENGTH,. 
13a10 20 53 51 4c 49 54 45 5f 4d 41 58 5f 53 51 4c 5f   SQLITE_MAX_SQL_
13a20 4c 45 4e 47 54 48 2c 0a 20 20 53 51 4c 49 54 45  LENGTH,.  SQLITE
13a30 5f 4d 41 58 5f 43 4f 4c 55 4d 4e 2c 0a 20 20 53  _MAX_COLUMN,.  S
13a40 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44  QLITE_MAX_EXPR_D
13a50 45 50 54 48 2c 0a 20 20 53 51 4c 49 54 45 5f 4d  EPTH,.  SQLITE_M
13a60 41 58 5f 43 4f 4d 50 4f 55 4e 44 5f 53 45 4c 45  AX_COMPOUND_SELE
13a70 43 54 2c 0a 20 20 53 51 4c 49 54 45 5f 4d 41 58  CT,.  SQLITE_MAX
13a80 5f 56 44 42 45 5f 4f 50 2c 0a 20 20 53 51 4c 49  _VDBE_OP,.  SQLI
13a90 54 45 5f 4d 41 58 5f 46 55 4e 43 54 49 4f 4e 5f  TE_MAX_FUNCTION_
13aa0 41 52 47 2c 0a 20 20 53 51 4c 49 54 45 5f 4d 41  ARG,.  SQLITE_MA
13ab0 58 5f 41 54 54 41 43 48 45 44 2c 0a 20 20 53 51  X_ATTACHED,.  SQ
13ac0 4c 49 54 45 5f 4d 41 58 5f 4c 49 4b 45 5f 50 41  LITE_MAX_LIKE_PA
13ad0 54 54 45 52 4e 5f 4c 45 4e 47 54 48 2c 0a 20 20  TTERN_LENGTH,.  
13ae0 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41  SQLITE_MAX_VARIA
13af0 42 4c 45 5f 4e 55 4d 42 45 52 2c 20 20 20 20 20  BLE_NUMBER,     
13b00 20 2f 2a 20 49 4d 50 3a 20 52 2d 33 38 30 39 31   /* IMP: R-38091
13b10 2d 33 32 33 35 32 20 2a 2f 0a 20 20 53 51 4c 49  -32352 */.  SQLI
13b20 54 45 5f 4d 41 58 5f 54 52 49 47 47 45 52 5f 44  TE_MAX_TRIGGER_D
13b30 45 50 54 48 2c 0a 20 20 53 51 4c 49 54 45 5f 4d  EPTH,.  SQLITE_M
13b40 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  AX_WORKER_THREAD
13b50 53 2c 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 4d 61 6b  S,.};../*.** Mak
13b60 65 20 73 75 72 65 20 74 68 65 20 68 61 72 64 20  e sure the hard 
13b70 6c 69 6d 69 74 73 20 61 72 65 20 73 65 74 20 74  limits are set t
13b80 6f 20 72 65 61 73 6f 6e 61 62 6c 65 20 76 61 6c  o reasonable val
13b90 75 65 73 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54  ues.*/.#if SQLIT
13ba0 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 3c 31 30 30  E_MAX_LENGTH<100
13bb0 0a 23 20 65 72 72 6f 72 20 53 51 4c 49 54 45 5f  .# error SQLITE_
13bc0 4d 41 58 5f 4c 45 4e 47 54 48 20 6d 75 73 74 20  MAX_LENGTH must 
13bd0 62 65 20 61 74 20 6c 65 61 73 74 20 31 30 30 0a  be at least 100.
13be0 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49 54  #endif.#if SQLIT
13bf0 45 5f 4d 41 58 5f 53 51 4c 5f 4c 45 4e 47 54 48  E_MAX_SQL_LENGTH
13c00 3c 31 30 30 0a 23 20 65 72 72 6f 72 20 53 51 4c  <100.# error SQL
13c10 49 54 45 5f 4d 41 58 5f 53 51 4c 5f 4c 45 4e 47  ITE_MAX_SQL_LENG
13c20 54 48 20 6d 75 73 74 20 62 65 20 61 74 20 6c 65  TH must be at le
13c30 61 73 74 20 31 30 30 0a 23 65 6e 64 69 66 0a 23  ast 100.#endif.#
13c40 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 53 51  if SQLITE_MAX_SQ
13c50 4c 5f 4c 45 4e 47 54 48 3e 53 51 4c 49 54 45 5f  L_LENGTH>SQLITE_
13c60 4d 41 58 5f 4c 45 4e 47 54 48 0a 23 20 65 72 72  MAX_LENGTH.# err
13c70 6f 72 20 53 51 4c 49 54 45 5f 4d 41 58 5f 53 51  or SQLITE_MAX_SQ
13c80 4c 5f 4c 45 4e 47 54 48 20 6d 75 73 74 20 6e 6f  L_LENGTH must no
13c90 74 20 62 65 20 67 72 65 61 74 65 72 20 74 68 61  t be greater tha
13ca0 6e 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e  n SQLITE_MAX_LEN
13cb0 47 54 48 0a 23 65 6e 64 69 66 0a 23 69 66 20 53  GTH.#endif.#if S
13cc0 51 4c 49 54 45 5f 4d 41 58 5f 43 4f 4d 50 4f 55  QLITE_MAX_COMPOU
13cd0 4e 44 5f 53 45 4c 45 43 54 3c 32 0a 23 20 65 72  ND_SELECT<2.# er
13ce0 72 6f 72 20 53 51 4c 49 54 45 5f 4d 41 58 5f 43  ror SQLITE_MAX_C
13cf0 4f 4d 50 4f 55 4e 44 5f 53 45 4c 45 43 54 20 6d  OMPOUND_SELECT m
13d00 75 73 74 20 62 65 20 61 74 20 6c 65 61 73 74 20  ust be at least 
13d10 32 0a 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c  2.#endif.#if SQL
13d20 49 54 45 5f 4d 41 58 5f 56 44 42 45 5f 4f 50 3c  ITE_MAX_VDBE_OP<
13d30 34 30 0a 23 20 65 72 72 6f 72 20 53 51 4c 49 54  40.# error SQLIT
13d40 45 5f 4d 41 58 5f 56 44 42 45 5f 4f 50 20 6d 75  E_MAX_VDBE_OP mu
13d50 73 74 20 62 65 20 61 74 20 6c 65 61 73 74 20 34  st be at least 4
13d60 30 0a 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c  0.#endif.#if SQL
13d70 49 54 45 5f 4d 41 58 5f 46 55 4e 43 54 49 4f 4e  ITE_MAX_FUNCTION
13d80 5f 41 52 47 3c 30 20 7c 7c 20 53 51 4c 49 54 45  _ARG<0 || SQLITE
13d90 5f 4d 41 58 5f 46 55 4e 43 54 49 4f 4e 5f 41 52  _MAX_FUNCTION_AR
13da0 47 3e 31 32 37 0a 23 20 65 72 72 6f 72 20 53 51  G>127.# error SQ
13db0 4c 49 54 45 5f 4d 41 58 5f 46 55 4e 43 54 49 4f  LITE_MAX_FUNCTIO
13dc0 4e 5f 41 52 47 20 6d 75 73 74 20 62 65 20 62 65  N_ARG must be be
13dd0 74 77 65 65 6e 20 30 20 61 6e 64 20 31 32 37 0a  tween 0 and 127.
13de0 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49 54  #endif.#if SQLIT
13df0 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 3c 30  E_MAX_ATTACHED<0
13e00 20 7c 7c 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41   || SQLITE_MAX_A
13e10 54 54 41 43 48 45 44 3e 31 32 35 0a 23 20 65 72  TTACHED>125.# er
13e20 72 6f 72 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41  ror SQLITE_MAX_A
13e30 54 54 41 43 48 45 44 20 6d 75 73 74 20 62 65 20  TTACHED must be 
13e40 62 65 74 77 65 65 6e 20 30 20 61 6e 64 20 31 32  between 0 and 12
13e50 35 0a 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c  5.#endif.#if SQL
13e60 49 54 45 5f 4d 41 58 5f 4c 49 4b 45 5f 50 41 54  ITE_MAX_LIKE_PAT
13e70 54 45 52 4e 5f 4c 45 4e 47 54 48 3c 31 0a 23 20  TERN_LENGTH<1.# 
13e80 65 72 72 6f 72 20 53 51 4c 49 54 45 5f 4d 41 58  error SQLITE_MAX
13e90 5f 4c 49 4b 45 5f 50 41 54 54 45 52 4e 5f 4c 45  _LIKE_PATTERN_LE
13ea0 4e 47 54 48 20 6d 75 73 74 20 62 65 20 61 74 20  NGTH must be at 
13eb0 6c 65 61 73 74 20 31 0a 23 65 6e 64 69 66 0a 23  least 1.#endif.#
13ec0 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 43 4f  if SQLITE_MAX_CO
13ed0 4c 55 4d 4e 3e 33 32 37 36 37 0a 23 20 65 72 72  LUMN>32767.# err
13ee0 6f 72 20 53 51 4c 49 54 45 5f 4d 41 58 5f 43 4f  or SQLITE_MAX_CO
13ef0 4c 55 4d 4e 20 6d 75 73 74 20 6e 6f 74 20 65 78  LUMN must not ex
13f00 63 65 65 64 20 33 32 37 36 37 0a 23 65 6e 64 69  ceed 32767.#endi
13f10 66 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58  f.#if SQLITE_MAX
13f20 5f 54 52 49 47 47 45 52 5f 44 45 50 54 48 3c 31  _TRIGGER_DEPTH<1
13f30 0a 23 20 65 72 72 6f 72 20 53 51 4c 49 54 45 5f  .# error SQLITE_
13f40 4d 41 58 5f 54 52 49 47 47 45 52 5f 44 45 50 54  MAX_TRIGGER_DEPT
13f50 48 20 6d 75 73 74 20 62 65 20 61 74 20 6c 65 61  H must be at lea
13f60 73 74 20 31 0a 23 65 6e 64 69 66 0a 23 69 66 20  st 1.#endif.#if 
13f70 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45  SQLITE_MAX_WORKE
13f80 52 5f 54 48 52 45 41 44 53 3c 30 20 7c 7c 20 53  R_THREADS<0 || S
13f90 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52  QLITE_MAX_WORKER
13fa0 5f 54 48 52 45 41 44 53 3e 35 30 0a 23 20 65 72  _THREADS>50.# er
13fb0 72 6f 72 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57  ror SQLITE_MAX_W
13fc0 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 20 6d 75  ORKER_THREADS mu
13fd0 73 74 20 62 65 20 62 65 74 77 65 65 6e 20 30 20  st be between 0 
13fe0 61 6e 64 20 35 30 0a 23 65 6e 64 69 66 0a 0a 0a  and 50.#endif...
13ff0 2f 2a 0a 2a 2a 20 43 68 61 6e 67 65 20 74 68 65  /*.** Change the
14000 20 76 61 6c 75 65 20 6f 66 20 61 20 6c 69 6d 69   value of a limi
14010 74 2e 20 20 52 65 70 6f 72 74 20 74 68 65 20 6f  t.  Report the o
14020 6c 64 20 76 61 6c 75 65 2e 0a 2a 2a 20 49 66 20  ld value..** If 
14030 61 6e 20 69 6e 76 61 6c 69 64 20 6c 69 6d 69 74  an invalid limit
14040 20 69 6e 64 65 78 20 69 73 20 73 75 70 70 6c 69   index is suppli
14050 65 64 2c 20 72 65 70 6f 72 74 20 2d 31 2e 0a 2a  ed, report -1..*
14060 2a 20 4d 61 6b 65 20 6e 6f 20 63 68 61 6e 67 65  * Make no change
14070 73 20 62 75 74 20 73 74 69 6c 6c 20 72 65 70 6f  s but still repo
14080 72 74 20 74 68 65 20 6f 6c 64 20 76 61 6c 75 65  rt the old value
14090 20 69 66 20 74 68 65 0a 2a 2a 20 6e 65 77 20 6c   if the.** new l
140a0 69 6d 69 74 20 69 73 20 6e 65 67 61 74 69 76 65  imit is negative
140b0 2e 0a 2a 2a 0a 2a 2a 20 41 20 6e 65 77 20 6c 6f  ..**.** A new lo
140c0 77 65 72 20 6c 69 6d 69 74 20 64 6f 65 73 20 6e  wer limit does n
140d0 6f 74 20 73 68 72 69 6e 6b 20 65 78 69 73 74 69  ot shrink existi
140e0 6e 67 20 63 6f 6e 73 74 72 75 63 74 73 2e 0a 2a  ng constructs..*
140f0 2a 20 49 74 20 6d 65 72 65 6c 79 20 70 72 65 76  * It merely prev
14100 65 6e 74 73 20 6e 65 77 20 63 6f 6e 73 74 72 75  ents new constru
14110 63 74 73 20 74 68 61 74 20 65 78 63 65 65 64 20  cts that exceed 
14120 74 68 65 20 6c 69 6d 69 74 0a 2a 2a 20 66 72 6f  the limit.** fro
14130 6d 20 66 6f 72 6d 69 6e 67 2e 0a 2a 2f 0a 69 6e  m forming..*/.in
14140 74 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28  t sqlite3_limit(
14150 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 69 6e 74  sqlite3 *db, int
14160 20 6c 69 6d 69 74 49 64 2c 20 69 6e 74 20 6e 65   limitId, int ne
14170 77 4c 69 6d 69 74 29 7b 0a 20 20 69 6e 74 20 6f  wLimit){.  int o
14180 6c 64 4c 69 6d 69 74 3b 0a 0a 23 69 66 64 65 66  ldLimit;..#ifdef
14190 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41   SQLITE_ENABLE_A
141a0 50 49 5f 41 52 4d 4f 52 0a 20 20 69 66 28 20 21  PI_ARMOR.  if( !
141b0 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65  sqlite3SafetyChe
141c0 63 6b 4f 6b 28 64 62 29 20 29 7b 0a 20 20 20 20  ckOk(db) ){.    
141d0 28 76 6f 69 64 29 53 51 4c 49 54 45 5f 4d 49 53  (void)SQLITE_MIS
141e0 55 53 45 5f 42 4b 50 54 3b 0a 20 20 20 20 72 65  USE_BKPT;.    re
141f0 74 75 72 6e 20 2d 31 3b 0a 20 20 7d 0a 23 65 6e  turn -1;.  }.#en
14200 64 69 66 0a 0a 20 20 2f 2a 20 45 56 49 44 45 4e  dif..  /* EVIDEN
14210 43 45 2d 4f 46 3a 20 52 2d 33 30 31 38 39 2d 35  CE-OF: R-30189-5
14220 34 30 39 37 20 46 6f 72 20 65 61 63 68 20 6c 69  4097 For each li
14230 6d 69 74 20 63 61 74 65 67 6f 72 79 20 53 51 4c  mit category SQL
14240 49 54 45 5f 4c 49 4d 49 54 5f 4e 41 4d 45 0a 20  ITE_LIMIT_NAME. 
14250 20 2a 2a 20 74 68 65 72 65 20 69 73 20 61 20 68   ** there is a h
14260 61 72 64 20 75 70 70 65 72 20 62 6f 75 6e 64 20  ard upper bound 
14270 73 65 74 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74  set at compile-t
14280 69 6d 65 20 62 79 20 61 20 43 20 70 72 65 70 72  ime by a C prepr
14290 6f 63 65 73 73 6f 72 0a 20 20 2a 2a 20 6d 61 63  ocessor.  ** mac
142a0 72 6f 20 63 61 6c 6c 65 64 20 53 51 4c 49 54 45  ro called SQLITE
142b0 5f 4d 41 58 5f 4e 41 4d 45 2e 20 28 54 68 65 20  _MAX_NAME. (The 
142c0 22 5f 4c 49 4d 49 54 5f 22 20 69 6e 20 74 68 65  "_LIMIT_" in the
142d0 20 6e 61 6d 65 20 69 73 20 63 68 61 6e 67 65 64   name is changed
142e0 20 74 6f 0a 20 20 2a 2a 20 22 5f 4d 41 58 5f 22   to.  ** "_MAX_"
142f0 2e 29 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74  .).  */.  assert
14300 28 20 61 48 61 72 64 4c 69 6d 69 74 5b 53 51 4c  ( aHardLimit[SQL
14310 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48  ITE_LIMIT_LENGTH
14320 5d 3d 3d 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45  ]==SQLITE_MAX_LE
14330 4e 47 54 48 20 29 3b 0a 20 20 61 73 73 65 72 74  NGTH );.  assert
14340 28 20 61 48 61 72 64 4c 69 6d 69 74 5b 53 51 4c  ( aHardLimit[SQL
14350 49 54 45 5f 4c 49 4d 49 54 5f 53 51 4c 5f 4c 45  ITE_LIMIT_SQL_LE
14360 4e 47 54 48 5d 3d 3d 53 51 4c 49 54 45 5f 4d 41  NGTH]==SQLITE_MA
14370 58 5f 53 51 4c 5f 4c 45 4e 47 54 48 20 29 3b 0a  X_SQL_LENGTH );.
14380 20 20 61 73 73 65 72 74 28 20 61 48 61 72 64 4c    assert( aHardL
14390 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49  imit[SQLITE_LIMI
143a0 54 5f 43 4f 4c 55 4d 4e 5d 3d 3d 53 51 4c 49 54  T_COLUMN]==SQLIT
143b0 45 5f 4d 41 58 5f 43 4f 4c 55 4d 4e 20 29 3b 0a  E_MAX_COLUMN );.
143c0 20 20 61 73 73 65 72 74 28 20 61 48 61 72 64 4c    assert( aHardL
143d0 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49  imit[SQLITE_LIMI
143e0 54 5f 45 58 50 52 5f 44 45 50 54 48 5d 3d 3d 53  T_EXPR_DEPTH]==S
143f0 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44  QLITE_MAX_EXPR_D
14400 45 50 54 48 20 29 3b 0a 20 20 61 73 73 65 72 74  EPTH );.  assert
14410 28 20 61 48 61 72 64 4c 69 6d 69 74 5b 53 51 4c  ( aHardLimit[SQL
14420 49 54 45 5f 4c 49 4d 49 54 5f 43 4f 4d 50 4f 55  ITE_LIMIT_COMPOU
14430 4e 44 5f 53 45 4c 45 43 54 5d 3d 3d 53 51 4c 49  ND_SELECT]==SQLI
14440 54 45 5f 4d 41 58 5f 43 4f 4d 50 4f 55 4e 44 5f  TE_MAX_COMPOUND_
14450 53 45 4c 45 43 54 29 3b 0a 20 20 61 73 73 65 72  SELECT);.  asser
14460 74 28 20 61 48 61 72 64 4c 69 6d 69 74 5b 53 51  t( aHardLimit[SQ
14470 4c 49 54 45 5f 4c 49 4d 49 54 5f 56 44 42 45 5f  LITE_LIMIT_VDBE_
14480 4f 50 5d 3d 3d 53 51 4c 49 54 45 5f 4d 41 58 5f  OP]==SQLITE_MAX_
14490 56 44 42 45 5f 4f 50 20 29 3b 0a 20 20 61 73 73  VDBE_OP );.  ass
144a0 65 72 74 28 20 61 48 61 72 64 4c 69 6d 69 74 5b  ert( aHardLimit[
144b0 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 46 55 4e  SQLITE_LIMIT_FUN
144c0 43 54 49 4f 4e 5f 41 52 47 5d 3d 3d 53 51 4c 49  CTION_ARG]==SQLI
144d0 54 45 5f 4d 41 58 5f 46 55 4e 43 54 49 4f 4e 5f  TE_MAX_FUNCTION_
144e0 41 52 47 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ARG );.  assert(
144f0 20 61 48 61 72 64 4c 69 6d 69 74 5b 53 51 4c 49   aHardLimit[SQLI
14500 54 45 5f 4c 49 4d 49 54 5f 41 54 54 41 43 48 45  TE_LIMIT_ATTACHE
14510 44 5d 3d 3d 53 51 4c 49 54 45 5f 4d 41 58 5f 41  D]==SQLITE_MAX_A
14520 54 54 41 43 48 45 44 20 29 3b 0a 20 20 61 73 73  TTACHED );.  ass
14530 65 72 74 28 20 61 48 61 72 64 4c 69 6d 69 74 5b  ert( aHardLimit[
14540 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 49 4b  SQLITE_LIMIT_LIK
14550 45 5f 50 41 54 54 45 52 4e 5f 4c 45 4e 47 54 48  E_PATTERN_LENGTH
14560 5d 3d 3d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ]==.            
14570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14590 20 20 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 49     SQLITE_MAX_LI
145a0 4b 45 5f 50 41 54 54 45 52 4e 5f 4c 45 4e 47 54  KE_PATTERN_LENGT
145b0 48 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 61  H );.  assert( a
145c0 48 61 72 64 4c 69 6d 69 74 5b 53 51 4c 49 54 45  HardLimit[SQLITE
145d0 5f 4c 49 4d 49 54 5f 56 41 52 49 41 42 4c 45 5f  _LIMIT_VARIABLE_
145e0 4e 55 4d 42 45 52 5d 3d 3d 53 51 4c 49 54 45 5f  NUMBER]==SQLITE_
145f0 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d  MAX_VARIABLE_NUM
14600 42 45 52 29 3b 0a 20 20 61 73 73 65 72 74 28 20  BER);.  assert( 
14610 61 48 61 72 64 4c 69 6d 69 74 5b 53 51 4c 49 54  aHardLimit[SQLIT
14620 45 5f 4c 49 4d 49 54 5f 54 52 49 47 47 45 52 5f  E_LIMIT_TRIGGER_
14630 44 45 50 54 48 5d 3d 3d 53 51 4c 49 54 45 5f 4d  DEPTH]==SQLITE_M
14640 41 58 5f 54 52 49 47 47 45 52 5f 44 45 50 54 48  AX_TRIGGER_DEPTH
14650 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 61 48   );.  assert( aH
14660 61 72 64 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f  ardLimit[SQLITE_
14670 4c 49 4d 49 54 5f 57 4f 52 4b 45 52 5f 54 48 52  LIMIT_WORKER_THR
14680 45 41 44 53 5d 3d 3d 53 51 4c 49 54 45 5f 4d 41  EADS]==SQLITE_MA
14690 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53  X_WORKER_THREADS
146a0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 53 51   );.  assert( SQ
146b0 4c 49 54 45 5f 4c 49 4d 49 54 5f 57 4f 52 4b 45  LITE_LIMIT_WORKE
146c0 52 5f 54 48 52 45 41 44 53 3d 3d 28 53 51 4c 49  R_THREADS==(SQLI
146d0 54 45 5f 4e 5f 4c 49 4d 49 54 2d 31 29 20 29 3b  TE_N_LIMIT-1) );
146e0 0a 0a 0a 20 20 69 66 28 20 6c 69 6d 69 74 49 64  ...  if( limitId
146f0 3c 30 20 7c 7c 20 6c 69 6d 69 74 49 64 3e 3d 53  <0 || limitId>=S
14700 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 20 29 7b  QLITE_N_LIMIT ){
14710 0a 20 20 20 20 72 65 74 75 72 6e 20 2d 31 3b 0a  .    return -1;.
14720 20 20 7d 0a 20 20 6f 6c 64 4c 69 6d 69 74 20 3d    }.  oldLimit =
14730 20 64 62 2d 3e 61 4c 69 6d 69 74 5b 6c 69 6d 69   db->aLimit[limi
14740 74 49 64 5d 3b 0a 20 20 69 66 28 20 6e 65 77 4c  tId];.  if( newL
14750 69 6d 69 74 3e 3d 30 20 29 7b 20 20 20 20 20 20  imit>=0 ){      
14760 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
14770 49 4d 50 3a 20 52 2d 35 32 34 37 36 2d 32 38 37  IMP: R-52476-287
14780 33 32 20 2a 2f 0a 20 20 20 20 69 66 28 20 6e 65  32 */.    if( ne
14790 77 4c 69 6d 69 74 3e 61 48 61 72 64 4c 69 6d 69  wLimit>aHardLimi
147a0 74 5b 6c 69 6d 69 74 49 64 5d 20 29 7b 0a 20 20  t[limitId] ){.  
147b0 20 20 20 20 6e 65 77 4c 69 6d 69 74 20 3d 20 61      newLimit = a
147c0 48 61 72 64 4c 69 6d 69 74 5b 6c 69 6d 69 74 49  HardLimit[limitI
147d0 64 5d 3b 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 35  d];  /* IMP: R-5
147e0 31 34 36 33 2d 32 35 36 33 34 20 2a 2f 0a 20 20  1463-25634 */.  
147f0 20 20 7d 0a 20 20 20 20 64 62 2d 3e 61 4c 69 6d    }.    db->aLim
14800 69 74 5b 6c 69 6d 69 74 49 64 5d 20 3d 20 6e 65  it[limitId] = ne
14810 77 4c 69 6d 69 74 3b 0a 20 20 7d 0a 20 20 72 65  wLimit;.  }.  re
14820 74 75 72 6e 20 6f 6c 64 4c 69 6d 69 74 3b 20 20  turn oldLimit;  
14830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14840 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 35 33 33     /* IMP: R-533
14850 34 31 2d 33 35 34 31 39 20 2a 2f 0a 7d 0a 23 69  41-35419 */.}.#i
14860 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
14870 5f 45 4e 41 42 4c 45 5f 41 55 54 4f 5f 50 52 4f  _ENABLE_AUTO_PRO
14880 46 49 4c 45 29 0a 2f 2a 20 73 74 64 65 72 72 20  FILE)./* stderr 
14890 6c 6f 67 67 69 6e 67 20 2a 2f 0a 76 6f 69 64 20  logging */.void 
148a0 5f 73 71 6c 69 74 65 5f 61 75 74 6f 5f 70 72 6f  _sqlite_auto_pro
148b0 66 69 6c 65 28 76 6f 69 64 20 2a 61 75 78 2c 20  file(void *aux, 
148c0 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 2c  const char *sql,
148d0 20 75 36 34 20 6e 73 29 3b 0a 76 6f 69 64 20 5f   u64 ns);.void _
148e0 73 71 6c 69 74 65 5f 61 75 74 6f 5f 74 72 61 63  sqlite_auto_trac
148f0 65 28 76 6f 69 64 20 2a 61 75 78 2c 20 63 6f 6e  e(void *aux, con
14900 73 74 20 63 68 61 72 20 2a 73 71 6c 29 3b 0a 76  st char *sql);.v
14910 6f 69 64 20 5f 73 71 6c 69 74 65 5f 61 75 74 6f  oid _sqlite_auto
14920 5f 70 72 6f 66 69 6c 65 28 76 6f 69 64 20 2a 61  _profile(void *a
14930 75 78 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ux, const char *
14940 73 71 6c 2c 20 75 36 34 20 6e 73 29 20 7b 0a 23  sql, u64 ns) {.#
14950 70 72 61 67 6d 61 20 75 6e 75 73 65 64 28 61 75  pragma unused(au
14960 78 29 0a 09 66 70 72 69 6e 74 66 28 73 74 64 65  x)..fprintf(stde
14970 72 72 2c 20 22 51 75 65 72 79 3a 20 25 73 5c 6e  rr, "Query: %s\n
14980 20 45 78 65 63 75 74 69 6f 6e 20 54 69 6d 65 3a   Execution Time:
14990 20 25 6c 6c 75 20 6d 73 5c 6e 22 2c 20 73 71 6c   %llu ms\n", sql
149a0 2c 20 6e 73 20 2f 20 31 30 30 30 30 30 30 29 3b  , ns / 1000000);
149b0 0a 7d 0a 76 6f 69 64 20 5f 73 71 6c 69 74 65 5f  .}.void _sqlite_
149c0 61 75 74 6f 5f 74 72 61 63 65 28 76 6f 69 64 20  auto_trace(void 
149d0 2a 61 75 78 2c 20 63 6f 6e 73 74 20 63 68 61 72  *aux, const char
149e0 20 2a 73 71 6c 29 20 7b 0a 09 66 70 72 69 6e 74   *sql) {..fprint
149f0 66 28 73 74 64 65 72 72 2c 20 22 54 72 61 63 65  f(stderr, "Trace
14a00 53 51 4c 28 25 70 29 3a 20 25 73 5c 6e 22 2c 20  SQL(%p): %s\n", 
14a10 61 75 78 2c 20 73 71 6c 29 3b 0a 7d 0a 0a 2f 2a  aux, sql);.}../*
14a20 20 73 79 73 6c 6f 67 20 6c 6f 67 67 69 6e 67 20   syslog logging 
14a30 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 3c 61 73 6c  */.#include <asl
14a40 2e 68 3e 0a 73 74 61 74 69 63 20 61 73 6c 63 6c  .h>.static aslcl
14a50 69 65 6e 74 20 61 75 74 6f 6c 6f 67 5f 63 6c 69  ient autolog_cli
14a60 65 6e 74 20 3d 20 4e 55 4c 4c 3b 0a 73 74 61 74  ent = NULL;.stat
14a70 69 63 20 76 6f 69 64 20 5f 63 6c 6f 73 65 5f 61  ic void _close_a
14a80 73 6c 5f 6c 6f 67 28 29 20 7b 0a 20 20 69 66 28  sl_log() {.  if(
14a90 20 4e 55 4c 4c 21 3d 61 75 74 6f 6c 6f 67 5f 63   NULL!=autolog_c
14aa0 6c 69 65 6e 74 20 29 7b 0a 20 20 20 20 61 73 6c  lient ){.    asl
14ab0 5f 63 6c 6f 73 65 28 61 75 74 6f 6c 6f 67 5f 63  _close(autolog_c
14ac0 6c 69 65 6e 74 29 3b 0a 20 20 20 20 61 75 74 6f  lient);.    auto
14ad0 6c 6f 67 5f 63 6c 69 65 6e 74 20 3d 20 4e 55 4c  log_client = NUL
14ae0 4c 3b 0a 20 20 7d 0a 7d 0a 73 74 61 74 69 63 20  L;.  }.}.static 
14af0 76 6f 69 64 20 5f 6f 70 65 6e 5f 61 73 6c 5f 6c  void _open_asl_l
14b00 6f 67 28 29 20 7b 0a 20 20 69 66 28 20 4e 55 4c  og() {.  if( NUL
14b10 4c 3d 3d 61 75 74 6f 6c 6f 67 5f 63 6c 69 65 6e  L==autolog_clien
14b20 74 20 29 7b 0a 20 20 20 20 61 75 74 6f 6c 6f 67  t ){.    autolog
14b30 5f 63 6c 69 65 6e 74 20 3d 20 61 73 6c 5f 6f 70  _client = asl_op
14b40 65 6e 28 22 53 51 4c 69 74 65 22 2c 20 4e 55 4c  en("SQLite", NUL
14b50 4c 2c 20 30 29 3b 0a 20 20 20 20 61 74 65 78 69  L, 0);.    atexi
14b60 74 28 5f 63 6c 6f 73 65 5f 61 73 6c 5f 6c 6f 67  t(_close_asl_log
14b70 29 3b 0a 20 20 7d 0a 7d 0a 0a 76 6f 69 64 20 5f  );.  }.}..void _
14b80 73 71 6c 69 74 65 5f 61 75 74 6f 5f 70 72 6f 66  sqlite_auto_prof
14b90 69 6c 65 5f 73 79 73 6c 6f 67 28 76 6f 69 64 20  ile_syslog(void 
14ba0 2a 61 75 78 2c 20 63 6f 6e 73 74 20 63 68 61 72  *aux, const char
14bb0 20 2a 73 71 6c 2c 20 75 36 34 20 6e 73 29 3b 0a   *sql, u64 ns);.
14bc0 76 6f 69 64 20 5f 73 71 6c 69 74 65 5f 61 75 74  void _sqlite_aut
14bd0 6f 5f 74 72 61 63 65 5f 73 79 73 6c 6f 67 28 76  o_trace_syslog(v
14be0 6f 69 64 20 2a 61 75 78 2c 20 63 6f 6e 73 74 20  oid *aux, const 
14bf0 63 68 61 72 20 2a 73 71 6c 29 3b 0a 76 6f 69 64  char *sql);.void
14c00 20 5f 73 71 6c 69 74 65 5f 61 75 74 6f 5f 70 72   _sqlite_auto_pr
14c10 6f 66 69 6c 65 5f 73 79 73 6c 6f 67 28 76 6f 69  ofile_syslog(voi
14c20 64 20 2a 61 75 78 2c 20 63 6f 6e 73 74 20 63 68  d *aux, const ch
14c30 61 72 20 2a 73 71 6c 2c 20 75 36 34 20 6e 73 29  ar *sql, u64 ns)
14c40 20 7b 0a 23 70 72 61 67 6d 61 20 75 6e 75 73 65   {.#pragma unuse
14c50 64 28 61 75 78 29 0a 09 61 73 6c 5f 6c 6f 67 28  d(aux)..asl_log(
14c60 61 75 74 6f 6c 6f 67 5f 63 6c 69 65 6e 74 2c 20  autolog_client, 
14c70 4e 55 4c 4c 2c 20 41 53 4c 5f 4c 45 56 45 4c 5f  NULL, ASL_LEVEL_
14c80 4e 4f 54 49 43 45 2c 20 22 51 75 65 72 79 3a 20  NOTICE, "Query: 
14c90 25 73 5c 6e 20 45 78 65 63 75 74 69 6f 6e 20 54  %s\n Execution T
14ca0 69 6d 65 3a 20 25 6c 6c 75 20 6d 73 5c 6e 22 2c  ime: %llu ms\n",
14cb0 20 73 71 6c 2c 20 6e 73 20 2f 20 31 30 30 30 30   sql, ns / 10000
14cc0 30 30 29 3b 0a 7d 0a 76 6f 69 64 20 5f 73 71 6c  00);.}.void _sql
14cd0 69 74 65 5f 61 75 74 6f 5f 74 72 61 63 65 5f 73  ite_auto_trace_s
14ce0 79 73 6c 6f 67 28 76 6f 69 64 20 2a 61 75 78 2c  yslog(void *aux,
14cf0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c   const char *sql
14d00 29 20 7b 0a 09 61 73 6c 5f 6c 6f 67 28 61 75 74  ) {..asl_log(aut
14d10 6f 6c 6f 67 5f 63 6c 69 65 6e 74 2c 20 4e 55 4c  olog_client, NUL
14d20 4c 2c 20 41 53 4c 5f 4c 45 56 45 4c 5f 4e 4f 54  L, ASL_LEVEL_NOT
14d30 49 43 45 2c 20 22 54 72 61 63 65 53 51 4c 28 25  ICE, "TraceSQL(%
14d40 70 29 3a 20 25 73 5c 6e 22 2c 20 61 75 78 2c 20  p): %s\n", aux, 
14d50 73 71 6c 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  sql);.}.#endif..
14d60 2f 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63 74  /*.** This funct
14d70 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20 70  ion is used to p
14d80 61 72 73 65 20 62 6f 74 68 20 55 52 49 73 20 61  arse both URIs a
14d90 6e 64 20 6e 6f 6e 2d 55 52 49 20 66 69 6c 65 6e  nd non-URI filen
14da0 61 6d 65 73 20 70 61 73 73 65 64 20 62 79 20 74  ames passed by t
14db0 68 65 0a 2a 2a 20 75 73 65 72 20 74 6f 20 41 50  he.** user to AP
14dc0 49 20 66 75 6e 63 74 69 6f 6e 73 20 73 71 6c 69  I functions sqli
14dd0 74 65 33 5f 6f 70 65 6e 28 29 20 6f 72 20 73 71  te3_open() or sq
14de0 6c 69 74 65 33 5f 6f 70 65 6e 5f 76 32 28 29 2c  lite3_open_v2(),
14df0 20 61 6e 64 20 66 6f 72 20 64 61 74 61 62 61 73   and for databas
14e00 65 0a 2a 2a 20 55 52 49 73 20 73 70 65 63 69 66  e.** URIs specif
14e10 69 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 41  ied as part of A
14e20 54 54 41 43 48 20 73 74 61 74 65 6d 65 6e 74 73  TTACH statements
14e30 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 69 72 73  ..**.** The firs
14e40 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  t argument to th
14e50 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 74  is function is t
14e60 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 56  he name of the V
14e70 46 53 20 74 6f 20 75 73 65 20 28 6f 72 0a 2a 2a  FS to use (or.**
14e80 20 61 20 4e 55 4c 4c 20 74 6f 20 73 69 67 6e 69   a NULL to signi
14e90 66 79 20 74 68 65 20 64 65 66 61 75 6c 74 20 56  fy the default V
14ea0 46 53 29 20 69 66 20 74 68 65 20 55 52 49 20 64  FS) if the URI d
14eb0 6f 65 73 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20  oes not contain 
14ec0 61 20 22 76 66 73 3d 78 78 78 22 0a 2a 2a 20 71  a "vfs=xxx".** q
14ed0 75 65 72 79 20 70 61 72 61 6d 65 74 65 72 2e 20  uery parameter. 
14ee0 54 68 65 20 73 65 63 6f 6e 64 20 61 72 67 75 6d  The second argum
14ef0 65 6e 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  ent contains the
14f00 20 55 52 49 20 28 6f 72 20 6e 6f 6e 2d 55 52 49   URI (or non-URI
14f10 20 66 69 6c 65 6e 61 6d 65 29 0a 2a 2a 20 69 74   filename).** it
14f20 73 65 6c 66 2e 20 57 68 65 6e 20 74 68 69 73 20  self. When this 
14f30 66 75 6e 63 74 69 6f 6e 20 69 73 20 63 61 6c 6c  function is call
14f40 65 64 20 74 68 65 20 2a 70 46 6c 61 67 73 20 76  ed the *pFlags v
14f50 61 72 69 61 62 6c 65 20 73 68 6f 75 6c 64 20 63  ariable should c
14f60 6f 6e 74 61 69 6e 0a 2a 2a 20 74 68 65 20 64 65  ontain.** the de
14f70 66 61 75 6c 74 20 66 6c 61 67 73 20 74 6f 20 6f  fault flags to o
14f80 70 65 6e 20 74 68 65 20 64 61 74 61 62 61 73 65  pen the database
14f90 20 68 61 6e 64 6c 65 20 77 69 74 68 2e 20 54 68   handle with. Th
14fa0 65 20 76 61 6c 75 65 20 73 74 6f 72 65 64 20 69  e value stored i
14fb0 6e 0a 2a 2a 20 2a 70 46 6c 61 67 73 20 6d 61 79  n.** *pFlags may
14fc0 20 62 65 20 75 70 64 61 74 65 64 20 62 65 66 6f   be updated befo
14fd0 72 65 20 72 65 74 75 72 6e 69 6e 67 20 69 66 20  re returning if 
14fe0 74 68 65 20 55 52 49 20 66 69 6c 65 6e 61 6d 65  the URI filename
14ff0 20 63 6f 6e 74 61 69 6e 73 20 0a 2a 2a 20 22 63   contains .** "c
15000 61 63 68 65 3d 78 78 78 22 20 6f 72 20 22 6d 6f  ache=xxx" or "mo
15010 64 65 3d 78 78 78 22 20 71 75 65 72 79 20 70 61  de=xxx" query pa
15020 72 61 6d 65 74 65 72 73 2e 0a 2a 2a 0a 2a 2a 20  rameters..**.** 
15030 49 66 20 73 75 63 63 65 73 73 66 75 6c 2c 20 53  If successful, S
15040 51 4c 49 54 45 5f 4f 4b 20 69 73 20 72 65 74 75  QLITE_OK is retu
15050 72 6e 65 64 2e 20 49 6e 20 74 68 69 73 20 63 61  rned. In this ca
15060 73 65 20 2a 70 70 56 66 73 20 69 73 20 73 65 74  se *ppVfs is set
15070 20 74 6f 20 70 6f 69 6e 74 20 74 6f 0a 2a 2a 20   to point to.** 
15080 74 68 65 20 56 46 53 20 74 68 61 74 20 73 68 6f  the VFS that sho
15090 75 6c 64 20 62 65 20 75 73 65 64 20 74 6f 20 6f  uld be used to o
150a0 70 65 6e 20 74 68 65 20 64 61 74 61 62 61 73 65  pen the database
150b0 20 66 69 6c 65 2e 20 2a 70 7a 46 69 6c 65 20 69   file. *pzFile i
150c0 73 20 73 65 74 20 74 6f 0a 2a 2a 20 70 6f 69 6e  s set to.** poin
150d0 74 20 74 6f 20 61 20 62 75 66 66 65 72 20 63 6f  t to a buffer co
150e0 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 6e 61 6d  ntaining the nam
150f0 65 20 6f 66 20 74 68 65 20 66 69 6c 65 20 74 6f  e of the file to
15100 20 6f 70 65 6e 2e 20 49 74 20 69 73 20 74 68 65   open. It is the
15110 20 0a 2a 2a 20 72 65 73 70 6f 6e 73 69 62 69 6c   .** responsibil
15120 69 74 79 20 6f 66 20 74 68 65 20 63 61 6c 6c 65  ity of the calle
15130 72 20 74 6f 20 65 76 65 6e 74 75 61 6c 6c 79 20  r to eventually 
15140 63 61 6c 6c 20 73 71 6c 69 74 65 33 5f 66 72 65  call sqlite3_fre
15150 65 28 29 20 74 6f 20 72 65 6c 65 61 73 65 0a 2a  e() to release.*
15160 2a 20 74 68 69 73 20 62 75 66 66 65 72 2e 0a 2a  * this buffer..*
15170 2a 0a 2a 2a 20 49 66 20 61 6e 20 65 72 72 6f 72  *.** If an error
15180 20 6f 63 63 75 72 73 2c 20 74 68 65 6e 20 61 6e   occurs, then an
15190 20 53 51 4c 69 74 65 20 65 72 72 6f 72 20 63 6f   SQLite error co
151a0 64 65 20 69 73 20 72 65 74 75 72 6e 65 64 20 61  de is returned a
151b0 6e 64 20 2a 70 7a 45 72 72 4d 73 67 0a 2a 2a 20  nd *pzErrMsg.** 
151c0 6d 61 79 20 62 65 20 73 65 74 20 74 6f 20 70 6f  may be set to po
151d0 69 6e 74 20 74 6f 20 61 20 62 75 66 66 65 72 20  int to a buffer 
151e0 63 6f 6e 74 61 69 6e 69 6e 67 20 61 6e 20 45 6e  containing an En
151f0 67 6c 69 73 68 20 6c 61 6e 67 75 61 67 65 20 65  glish language e
15200 72 72 6f 72 20 0a 2a 2a 20 6d 65 73 73 61 67 65  rror .** message
15210 2e 20 49 74 20 69 73 20 74 68 65 20 72 65 73 70  . It is the resp
15220 6f 6e 73 69 62 69 6c 69 74 79 20 6f 66 20 74 68  onsibility of th
15230 65 20 63 61 6c 6c 65 72 20 74 6f 20 65 76 65 6e  e caller to even
15240 74 75 61 6c 6c 79 20 72 65 6c 65 61 73 65 0a 2a  tually release.*
15250 2a 20 74 68 69 73 20 62 75 66 66 65 72 20 62 79  * this buffer by
15260 20 63 61 6c 6c 69 6e 67 20 73 71 6c 69 74 65 33   calling sqlite3
15270 5f 66 72 65 65 28 29 2e 0a 2a 2f 0a 69 6e 74 20  _free()..*/.int 
15280 73 71 6c 69 74 65 33 50 61 72 73 65 55 72 69 28  sqlite3ParseUri(
15290 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
152a0 44 65 66 61 75 6c 74 56 66 73 2c 20 20 20 20 20  DefaultVfs,     
152b0 20 20 20 2f 2a 20 56 46 53 20 74 6f 20 75 73 65     /* VFS to use
152c0 20 69 66 20 6e 6f 20 22 76 66 73 3d 78 78 78 22   if no "vfs=xxx"
152d0 20 71 75 65 72 79 20 6f 70 74 69 6f 6e 20 2a 2f   query option */
152e0 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
152f0 55 72 69 2c 20 20 20 20 20 20 20 20 20 20 20 20  Uri,            
15300 20 20 20 2f 2a 20 4e 75 6c 2d 74 65 72 6d 69 6e     /* Nul-termin
15310 61 74 65 64 20 55 52 49 20 74 6f 20 70 61 72 73  ated URI to pars
15320 65 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  e */.  unsigned 
15330 69 6e 74 20 2a 70 46 6c 61 67 73 2c 20 20 20 20  int *pFlags,    
15340 20 20 20 20 20 20 20 2f 2a 20 49 4e 2f 4f 55 54         /* IN/OUT
15350 3a 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 58 58  : SQLITE_OPEN_XX
15360 58 20 66 6c 61 67 73 20 2a 2f 0a 20 20 73 71 6c  X flags */.  sql
15370 69 74 65 33 5f 76 66 73 20 2a 2a 70 70 56 66 73  ite3_vfs **ppVfs
15380 2c 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ,            /* 
15390 4f 55 54 3a 20 56 46 53 20 74 6f 20 75 73 65 20  OUT: VFS to use 
153a0 2a 2f 20 0a 20 20 63 68 61 72 20 2a 2a 70 7a 46  */ .  char **pzF
153b0 69 6c 65 2c 20 20 20 20 20 20 20 20 20 20 20 20  ile,            
153c0 20 20 20 20 20 20 2f 2a 20 4f 55 54 3a 20 46 69        /* OUT: Fi
153d0 6c 65 6e 61 6d 65 20 63 6f 6d 70 6f 6e 65 6e 74  lename component
153e0 20 6f 66 20 55 52 49 20 2a 2f 0a 20 20 63 68 61   of URI */.  cha
153f0 72 20 2a 2a 70 7a 45 72 72 4d 73 67 20 20 20 20  r **pzErrMsg    
15400 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
15410 4f 55 54 3a 20 45 72 72 6f 72 20 6d 65 73 73 61  OUT: Error messa
15420 67 65 20 28 69 66 20 72 63 21 3d 53 51 4c 49 54  ge (if rc!=SQLIT
15430 45 5f 4f 4b 29 20 2a 2f 0a 29 7b 0a 20 20 69 6e  E_OK) */.){.  in
15440 74 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b  t rc = SQLITE_OK
15450 3b 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  ;.  unsigned int
15460 20 66 6c 61 67 73 20 3d 20 2a 70 46 6c 61 67 73   flags = *pFlags
15470 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ;.  const char *
15480 7a 56 66 73 20 3d 20 7a 44 65 66 61 75 6c 74 56  zVfs = zDefaultV
15490 66 73 3b 0a 20 20 63 68 61 72 20 2a 7a 46 69 6c  fs;.  char *zFil
154a0 65 3b 0a 20 20 63 68 61 72 20 63 3b 0a 20 20 69  e;.  char c;.  i
154b0 6e 74 20 6e 55 72 69 20 3d 20 73 71 6c 69 74 65  nt nUri = sqlite
154c0 33 53 74 72 6c 65 6e 33 30 28 7a 55 72 69 29 3b  3Strlen30(zUri);
154d0 0a 0a 20 20 61 73 73 65 72 74 28 20 2a 70 7a 45  ..  assert( *pzE
154e0 72 72 4d 73 67 3d 3d 30 20 29 3b 0a 0a 20 20 69  rrMsg==0 );..  i
154f0 66 28 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c  f( ((flags & SQL
15500 49 54 45 5f 4f 50 45 4e 5f 55 52 49 29 20 20 20  ITE_OPEN_URI)   
15510 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 4d 50            /* IMP
15520 3a 20 52 2d 34 38 37 32 35 2d 33 32 32 30 36 20  : R-48725-32206 
15530 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 7c  */.            |
15540 7c 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43  | sqlite3GlobalC
15550 6f 6e 66 69 67 2e 62 4f 70 65 6e 55 72 69 29 20  onfig.bOpenUri) 
15560 2f 2a 20 49 4d 50 3a 20 52 2d 35 31 36 38 39 2d  /* IMP: R-51689-
15570 34 36 35 34 38 20 2a 2f 0a 20 20 20 26 26 20 6e  46548 */.   && n
15580 55 72 69 3e 3d 35 20 26 26 20 6d 65 6d 63 6d 70  Uri>=5 && memcmp
15590 28 7a 55 72 69 2c 20 22 66 69 6c 65 3a 22 2c 20  (zUri, "file:", 
155a0 35 29 3d 3d 30 20 2f 2a 20 49 4d 50 3a 20 52 2d  5)==0 /* IMP: R-
155b0 35 37 38 38 34 2d 33 37 34 39 36 20 2a 2f 0a 20  57884-37496 */. 
155c0 20 29 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 4f   ){.    char *zO
155d0 70 74 3b 0a 20 20 20 20 69 6e 74 20 65 53 74 61  pt;.    int eSta
155e0 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  te;             
155f0 20 20 20 20 20 20 2f 2a 20 50 61 72 73 65 72 20        /* Parser 
15600 73 74 61 74 65 20 77 68 65 6e 20 70 61 72 73 69  state when parsi
15610 6e 67 20 55 52 49 20 2a 2f 0a 20 20 20 20 69 6e  ng URI */.    in
15620 74 20 69 49 6e 3b 20 20 20 20 20 20 20 20 20 20  t iIn;          
15630 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
15640 6e 70 75 74 20 63 68 61 72 61 63 74 65 72 20 69  nput character i
15650 6e 64 65 78 20 2a 2f 0a 20 20 20 20 69 6e 74 20  ndex */.    int 
15660 69 4f 75 74 20 3d 20 30 3b 20 20 20 20 20 20 20  iOut = 0;       
15670 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 75 74            /* Out
15680 70 75 74 20 63 68 61 72 61 63 74 65 72 20 69 6e  put character in
15690 64 65 78 20 2a 2f 0a 20 20 20 20 75 36 34 20 6e  dex */.    u64 n
156a0 42 79 74 65 20 3d 20 6e 55 72 69 2b 32 3b 20 20  Byte = nUri+2;  
156b0 20 20 20 20 20 20 20 20 20 2f 2a 20 42 79 74 65           /* Byte
156c0 73 20 6f 66 20 73 70 61 63 65 20 74 6f 20 61 6c  s of space to al
156d0 6c 6f 63 61 74 65 20 2a 2f 0a 0a 20 20 20 20 2f  locate */..    /
156e0 2a 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20  * Make sure the 
156f0 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 55 52 49 20  SQLITE_OPEN_URI 
15700 66 6c 61 67 20 69 73 20 73 65 74 20 74 6f 20 69  flag is set to i
15710 6e 64 69 63 61 74 65 20 74 6f 20 74 68 65 20 56  ndicate to the V
15720 46 53 20 78 4f 70 65 6e 20 0a 20 20 20 20 2a 2a  FS xOpen .    **
15730 20 6d 65 74 68 6f 64 20 74 68 61 74 20 74 68 65   method that the
15740 72 65 20 6d 61 79 20 62 65 20 65 78 74 72 61 20  re may be extra 
15750 70 61 72 61 6d 65 74 65 72 73 20 66 6f 6c 6c 6f  parameters follo
15760 77 69 6e 67 20 74 68 65 20 66 69 6c 65 2d 6e 61  wing the file-na
15770 6d 65 2e 20 20 2a 2f 0a 20 20 20 20 66 6c 61 67  me.  */.    flag
15780 73 20 7c 3d 20 53 51 4c 49 54 45 5f 4f 50 45 4e  s |= SQLITE_OPEN
15790 5f 55 52 49 3b 0a 0a 20 20 20 20 66 6f 72 28 69  _URI;..    for(i
157a0 49 6e 3d 30 3b 20 69 49 6e 3c 6e 55 72 69 3b 20  In=0; iIn<nUri; 
157b0 69 49 6e 2b 2b 29 20 6e 42 79 74 65 20 2b 3d 20  iIn++) nByte += 
157c0 28 7a 55 72 69 5b 69 49 6e 5d 3d 3d 27 26 27 29  (zUri[iIn]=='&')
157d0 3b 0a 20 20 20 20 7a 46 69 6c 65 20 3d 20 73 71  ;.    zFile = sq
157e0 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 36 34 28 6e  lite3_malloc64(n
157f0 42 79 74 65 29 3b 0a 20 20 20 20 69 66 28 20 21  Byte);.    if( !
15800 7a 46 69 6c 65 20 29 20 72 65 74 75 72 6e 20 53  zFile ) return S
15810 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b 50 54  QLITE_NOMEM_BKPT
15820 3b 0a 0a 20 20 20 20 69 49 6e 20 3d 20 35 3b 0a  ;..    iIn = 5;.
15830 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 41 4c  #ifdef SQLITE_AL
15840 4c 4f 57 5f 55 52 49 5f 41 55 54 48 4f 52 49 54  LOW_URI_AUTHORIT
15850 59 0a 20 20 20 20 69 66 28 20 73 74 72 6e 63 6d  Y.    if( strncm
15860 70 28 7a 55 72 69 2b 35 2c 20 22 2f 2f 2f 22 2c  p(zUri+5, "///",
15870 20 33 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20   3)==0 ){.      
15880 69 49 6e 20 3d 20 37 3b 0a 20 20 20 20 20 20 2f  iIn = 7;.      /
15890 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
158a0 63 6f 6e 64 69 74 69 6f 6e 20 63 61 75 73 65 73  condition causes
158b0 20 55 52 49 73 20 77 69 74 68 20 66 69 76 65 20   URIs with five 
158c0 6c 65 61 64 69 6e 67 20 2f 20 63 68 61 72 61 63  leading / charac
158d0 74 65 72 73 0a 20 20 20 20 20 20 2a 2a 20 6c 69  ters.      ** li
158e0 6b 65 20 66 69 6c 65 3a 2f 2f 2f 2f 2f 68 6f 73  ke file://///hos
158f0 74 2f 70 61 74 68 20 74 6f 20 62 65 20 63 6f 6e  t/path to be con
15900 76 65 72 74 65 64 20 69 6e 74 6f 20 55 4e 43 73  verted into UNCs
15910 20 6c 69 6b 65 20 2f 2f 68 6f 73 74 2f 70 61 74   like //host/pat
15920 68 2e 0a 20 20 20 20 20 20 2a 2a 20 54 68 65 20  h..      ** The 
15930 63 6f 72 72 65 63 74 20 55 52 49 20 66 6f 72 20  correct URI for 
15940 74 68 61 74 20 55 4e 43 20 68 61 73 20 6f 6e 6c  that UNC has onl
15950 79 20 74 77 6f 20 6f 72 20 66 6f 75 72 20 6c 65  y two or four le
15960 61 64 69 6e 67 20 2f 20 63 68 61 72 61 63 74 65  ading / characte
15970 72 73 0a 20 20 20 20 20 20 2a 2a 20 66 69 6c 65  rs.      ** file
15980 3a 2f 2f 68 6f 73 74 2f 70 61 74 68 20 6f 72 20  ://host/path or 
15990 66 69 6c 65 3a 2f 2f 2f 2f 68 6f 73 74 2f 70 61  file:////host/pa
159a0 74 68 2e 20 20 42 75 74 20 35 20 6c 65 61 64 69  th.  But 5 leadi
159b0 6e 67 20 73 6c 61 73 68 65 73 20 69 73 20 61 20  ng slashes is a 
159c0 0a 20 20 20 20 20 20 2a 2a 20 63 6f 6d 6d 6f 6e  .      ** common
159d0 20 65 72 72 6f 72 2c 20 77 65 20 61 72 65 20 74   error, we are t
159e0 6f 6c 64 2c 20 73 6f 20 77 65 20 68 61 6e 64 6c  old, so we handl
159f0 65 20 69 74 20 61 73 20 61 20 73 70 65 63 69 61  e it as a specia
15a00 6c 20 63 61 73 65 2e 20 2a 2f 0a 20 20 20 20 20  l case. */.     
15a10 20 69 66 28 20 73 74 72 6e 63 6d 70 28 7a 55 72   if( strncmp(zUr
15a20 69 2b 37 2c 20 22 2f 2f 2f 22 2c 20 33 29 3d 3d  i+7, "///", 3)==
15a30 30 20 29 7b 20 69 49 6e 2b 2b 3b 20 7d 0a 20 20  0 ){ iIn++; }.  
15a40 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 6e    }else if( strn
15a50 63 6d 70 28 7a 55 72 69 2b 35 2c 20 22 2f 2f 6c  cmp(zUri+5, "//l
15a60 6f 63 61 6c 68 6f 73 74 2f 22 2c 20 31 32 29 3d  ocalhost/", 12)=
15a70 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 49 6e 20  =0 ){.      iIn 
15a80 3d 20 31 36 3b 0a 20 20 20 20 7d 0a 23 65 6c 73  = 16;.    }.#els
15a90 65 0a 20 20 20 20 2f 2a 20 44 69 73 63 61 72 64  e.    /* Discard
15aa0 20 74 68 65 20 73 63 68 65 6d 65 20 61 6e 64 20   the scheme and 
15ab0 61 75 74 68 6f 72 69 74 79 20 73 65 67 6d 65 6e  authority segmen
15ac0 74 73 20 6f 66 20 74 68 65 20 55 52 49 2e 20 2a  ts of the URI. *
15ad0 2f 0a 20 20 20 20 69 66 28 20 7a 55 72 69 5b 35  /.    if( zUri[5
15ae0 5d 3d 3d 27 2f 27 20 26 26 20 7a 55 72 69 5b 36  ]=='/' && zUri[6
15af0 5d 3d 3d 27 2f 27 20 29 7b 0a 20 20 20 20 20 20  ]=='/' ){.      
15b00 69 49 6e 20 3d 20 37 3b 0a 20 20 20 20 20 20 77  iIn = 7;.      w
15b10 68 69 6c 65 28 20 7a 55 72 69 5b 69 49 6e 5d 20  hile( zUri[iIn] 
15b20 26 26 20 7a 55 72 69 5b 69 49 6e 5d 21 3d 27 2f  && zUri[iIn]!='/
15b30 27 20 29 20 69 49 6e 2b 2b 3b 0a 20 20 20 20 20  ' ) iIn++;.     
15b40 20 69 66 28 20 69 49 6e 21 3d 37 20 26 26 20 28   if( iIn!=7 && (
15b50 69 49 6e 21 3d 31 36 20 7c 7c 20 6d 65 6d 63 6d  iIn!=16 || memcm
15b60 70 28 22 6c 6f 63 61 6c 68 6f 73 74 22 2c 20 26  p("localhost", &
15b70 7a 55 72 69 5b 37 5d 2c 20 39 29 29 20 29 7b 0a  zUri[7], 9)) ){.
15b80 20 20 20 20 20 20 20 20 2a 70 7a 45 72 72 4d 73          *pzErrMs
15b90 67 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69  g = sqlite3_mpri
15ba0 6e 74 66 28 22 69 6e 76 61 6c 69 64 20 75 72 69  ntf("invalid uri
15bb0 20 61 75 74 68 6f 72 69 74 79 3a 20 25 2e 2a 73   authority: %.*s
15bc0 22 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20  ", .            
15bd0 69 49 6e 2d 37 2c 20 26 7a 55 72 69 5b 37 5d 29  iIn-7, &zUri[7])
15be0 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 53  ;.        rc = S
15bf0 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20  QLITE_ERROR;.   
15c00 20 20 20 20 20 67 6f 74 6f 20 70 61 72 73 65 5f       goto parse_
15c10 75 72 69 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d  uri_out;.      }
15c20 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20  .    }.#endif.. 
15c30 20 20 20 2f 2a 20 43 6f 70 79 20 74 68 65 20 66     /* Copy the f
15c40 69 6c 65 6e 61 6d 65 20 61 6e 64 20 61 6e 79 20  ilename and any 
15c50 71 75 65 72 79 20 70 61 72 61 6d 65 74 65 72 73  query parameters
15c60 20 69 6e 74 6f 20 74 68 65 20 7a 46 69 6c 65 20   into the zFile 
15c70 62 75 66 66 65 72 2e 20 0a 20 20 20 20 2a 2a 20  buffer. .    ** 
15c80 44 65 63 6f 64 65 20 25 48 48 20 65 73 63 61 70  Decode %HH escap
15c90 65 20 63 6f 64 65 73 20 61 6c 6f 6e 67 20 74 68  e codes along th
15ca0 65 20 77 61 79 2e 20 0a 20 20 20 20 2a 2a 0a 20  e way. .    **. 
15cb0 20 20 20 2a 2a 20 57 69 74 68 69 6e 20 74 68 69     ** Within thi
15cc0 73 20 6c 6f 6f 70 2c 20 76 61 72 69 61 62 6c 65  s loop, variable
15cd0 20 65 53 74 61 74 65 20 6d 61 79 20 62 65 20 73   eState may be s
15ce0 65 74 20 74 6f 20 30 2c 20 31 20 6f 72 20 32 2c  et to 0, 1 or 2,
15cf0 20 64 65 70 65 6e 64 69 6e 67 0a 20 20 20 20 2a   depending.    *
15d00 2a 20 6f 6e 20 74 68 65 20 70 61 72 73 69 6e 67  * on the parsing
15d10 20 63 6f 6e 74 65 78 74 2e 20 41 73 20 66 6f 6c   context. As fol
15d20 6c 6f 77 73 3a 0a 20 20 20 20 2a 2a 0a 20 20 20  lows:.    **.   
15d30 20 2a 2a 20 20 20 30 3a 20 50 61 72 73 69 6e 67   **   0: Parsing
15d40 20 66 69 6c 65 2d 6e 61 6d 65 2e 0a 20 20 20 20   file-name..    
15d50 2a 2a 20 20 20 31 3a 20 50 61 72 73 69 6e 67 20  **   1: Parsing 
15d60 6e 61 6d 65 20 73 65 63 74 69 6f 6e 20 6f 66 20  name section of 
15d70 61 20 6e 61 6d 65 3d 76 61 6c 75 65 20 71 75 65  a name=value que
15d80 72 79 20 70 61 72 61 6d 65 74 65 72 2e 0a 20 20  ry parameter..  
15d90 20 20 2a 2a 20 20 20 32 3a 20 50 61 72 73 69 6e    **   2: Parsin
15da0 67 20 76 61 6c 75 65 20 73 65 63 74 69 6f 6e 20  g value section 
15db0 6f 66 20 61 20 6e 61 6d 65 3d 76 61 6c 75 65 20  of a name=value 
15dc0 71 75 65 72 79 20 70 61 72 61 6d 65 74 65 72 2e  query parameter.
15dd0 0a 20 20 20 20 2a 2f 0a 20 20 20 20 65 53 74 61  .    */.    eSta
15de0 74 65 20 3d 20 30 3b 0a 20 20 20 20 77 68 69 6c  te = 0;.    whil
15df0 65 28 20 28 63 20 3d 20 7a 55 72 69 5b 69 49 6e  e( (c = zUri[iIn
15e00 5d 29 21 3d 30 20 26 26 20 63 21 3d 27 23 27 20  ])!=0 && c!='#' 
15e10 29 7b 0a 20 20 20 20 20 20 69 49 6e 2b 2b 3b 0a  ){.      iIn++;.
15e20 20 20 20 20 20 20 69 66 28 20 63 3d 3d 27 25 27        if( c=='%'
15e30 20 0a 20 20 20 20 20 20 20 26 26 20 73 71 6c 69   .       && sqli
15e40 74 65 33 49 73 78 64 69 67 69 74 28 7a 55 72 69  te3Isxdigit(zUri
15e50 5b 69 49 6e 5d 29 20 0a 20 20 20 20 20 20 20 26  [iIn]) .       &
15e60 26 20 73 71 6c 69 74 65 33 49 73 78 64 69 67 69  & sqlite3Isxdigi
15e70 74 28 7a 55 72 69 5b 69 49 6e 2b 31 5d 29 20 0a  t(zUri[iIn+1]) .
15e80 20 20 20 20 20 20 29 7b 0a 20 20 20 20 20 20 20        ){.       
15e90 20 69 6e 74 20 6f 63 74 65 74 20 3d 20 28 73 71   int octet = (sq
15ea0 6c 69 74 65 33 48 65 78 54 6f 49 6e 74 28 7a 55  lite3HexToInt(zU
15eb0 72 69 5b 69 49 6e 2b 2b 5d 29 20 3c 3c 20 34 29  ri[iIn++]) << 4)
15ec0 3b 0a 20 20 20 20 20 20 20 20 6f 63 74 65 74 20  ;.        octet 
15ed0 2b 3d 20 73 71 6c 69 74 65 33 48 65 78 54 6f 49  += sqlite3HexToI
15ee0 6e 74 28 7a 55 72 69 5b 69 49 6e 2b 2b 5d 29 3b  nt(zUri[iIn++]);
15ef0 0a 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ..        assert
15f00 28 20 6f 63 74 65 74 3e 3d 30 20 26 26 20 6f 63  ( octet>=0 && oc
15f10 74 65 74 3c 32 35 36 20 29 3b 0a 20 20 20 20 20  tet<256 );.     
15f20 20 20 20 69 66 28 20 6f 63 74 65 74 3d 3d 30 20     if( octet==0 
15f30 29 7b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ){.#ifndef SQLIT
15f40 45 5f 45 4e 41 42 4c 45 5f 55 52 49 5f 30 30 5f  E_ENABLE_URI_00_
15f50 45 52 52 4f 52 0a 20 20 20 20 20 20 20 20 20 20  ERROR.          
15f60 2f 2a 20 54 68 69 73 20 62 72 61 6e 63 68 20 69  /* This branch i
15f70 73 20 74 61 6b 65 6e 20 77 68 65 6e 20 22 25 30  s taken when "%0
15f80 30 22 20 61 70 70 65 61 72 73 20 77 69 74 68 69  0" appears withi
15f90 6e 20 74 68 65 20 55 52 49 2e 20 49 6e 20 74 68  n the URI. In th
15fa0 69 73 0a 20 20 20 20 20 20 20 20 20 20 2a 2a 20  is.          ** 
15fb0 63 61 73 65 20 77 65 20 69 67 6e 6f 72 65 20 61  case we ignore a
15fc0 6c 6c 20 74 65 78 74 20 69 6e 20 74 68 65 20 72  ll text in the r
15fd0 65 6d 61 69 6e 64 65 72 20 6f 66 20 74 68 65 20  emainder of the 
15fe0 70 61 74 68 2c 20 6e 61 6d 65 20 6f 72 0a 20 20  path, name or.  
15ff0 20 20 20 20 20 20 20 20 2a 2a 20 76 61 6c 75 65          ** value
16000 20 63 75 72 72 65 6e 74 6c 79 20 62 65 69 6e 67   currently being
16010 20 70 61 72 73 65 64 2e 20 53 6f 20 69 67 6e 6f   parsed. So igno
16020 72 65 20 74 68 65 20 63 75 72 72 65 6e 74 20 63  re the current c
16030 68 61 72 61 63 74 65 72 0a 20 20 20 20 20 20 20  haracter.       
16040 20 20 20 2a 2a 20 61 6e 64 20 73 6b 69 70 20 74     ** and skip t
16050 6f 20 74 68 65 20 6e 65 78 74 20 22 3f 22 2c 20  o the next "?", 
16060 22 3d 22 20 6f 72 20 22 26 22 2c 20 61 73 20 61  "=" or "&", as a
16070 70 70 72 6f 70 72 69 61 74 65 2e 20 2a 2f 0a 20  ppropriate. */. 
16080 20 20 20 20 20 20 20 20 20 77 68 69 6c 65 28 20           while( 
16090 28 63 20 3d 20 7a 55 72 69 5b 69 49 6e 5d 29 21  (c = zUri[iIn])!
160a0 3d 30 20 26 26 20 63 21 3d 27 23 27 20 0a 20 20  =0 && c!='#' .  
160b0 20 20 20 20 20 20 20 20 20 20 20 20 26 26 20 28              && (
160c0 65 53 74 61 74 65 21 3d 30 20 7c 7c 20 63 21 3d  eState!=0 || c!=
160d0 27 3f 27 29 0a 20 20 20 20 20 20 20 20 20 20 20  '?').           
160e0 20 20 20 26 26 20 28 65 53 74 61 74 65 21 3d 31     && (eState!=1
160f0 20 7c 7c 20 28 63 21 3d 27 3d 27 20 26 26 20 63   || (c!='=' && c
16100 21 3d 27 26 27 29 29 0a 20 20 20 20 20 20 20 20  !='&')).        
16110 20 20 20 20 20 20 26 26 20 28 65 53 74 61 74 65        && (eState
16120 21 3d 32 20 7c 7c 20 63 21 3d 27 26 27 29 0a 20  !=2 || c!='&'). 
16130 20 20 20 20 20 20 20 20 20 29 7b 0a 20 20 20 20           ){.    
16140 20 20 20 20 20 20 20 20 69 49 6e 2b 2b 3b 0a 20          iIn++;. 
16150 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
16160 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0a 23       continue;.#
16170 65 6c 73 65 0a 20 20 20 20 20 20 20 20 20 20 2f  else.          /
16180 2a 20 49 66 20 45 4e 41 42 4c 45 5f 55 52 49 5f  * If ENABLE_URI_
16190 30 30 5f 45 52 52 4f 52 20 69 73 20 64 65 66 69  00_ERROR is defi
161a0 6e 65 64 2c 20 22 25 30 30 22 20 69 6e 20 61 20  ned, "%00" in a 
161b0 55 52 49 20 69 73 20 61 6e 20 65 72 72 6f 72 2e  URI is an error.
161c0 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 2a 70   */.          *p
161d0 7a 45 72 72 4d 73 67 20 3d 20 73 71 6c 69 74 65  zErrMsg = sqlite
161e0 33 5f 6d 70 72 69 6e 74 66 28 22 75 6e 65 78 70  3_mprintf("unexp
161f0 65 63 74 65 64 20 25 25 30 30 20 69 6e 20 75 72  ected %%00 in ur
16200 69 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 72  i");.          r
16210 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c = SQLITE_ERROR
16220 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f  ;.          goto
16230 20 70 61 72 73 65 5f 75 72 69 5f 6f 75 74 3b 0a   parse_uri_out;.
16240 23 65 6e 64 69 66 0a 20 20 20 20 20 20 20 20 7d  #endif.        }
16250 0a 20 20 20 20 20 20 20 20 63 20 3d 20 6f 63 74  .        c = oct
16260 65 74 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20  et;.      }else 
16270 69 66 28 20 65 53 74 61 74 65 3d 3d 31 20 26 26  if( eState==1 &&
16280 20 28 63 3d 3d 27 26 27 20 7c 7c 20 63 3d 3d 27   (c=='&' || c=='
16290 3d 27 29 20 29 7b 0a 20 20 20 20 20 20 20 20 69  =') ){.        i
162a0 66 28 20 7a 46 69 6c 65 5b 69 4f 75 74 2d 31 5d  f( zFile[iOut-1]
162b0 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ==0 ){.         
162c0 20 2f 2a 20 41 6e 20 65 6d 70 74 79 20 6f 70 74   /* An empty opt
162d0 69 6f 6e 20 6e 61 6d 65 2e 20 49 67 6e 6f 72 65  ion name. Ignore
162e0 20 74 68 69 73 20 6f 70 74 69 6f 6e 20 61 6c 74   this option alt
162f0 6f 67 65 74 68 65 72 2e 20 2a 2f 0a 20 20 20 20  ogether. */.    
16300 20 20 20 20 20 20 77 68 69 6c 65 28 20 7a 55 72        while( zUr
16310 69 5b 69 49 6e 5d 20 26 26 20 7a 55 72 69 5b 69  i[iIn] && zUri[i
16320 49 6e 5d 21 3d 27 23 27 20 26 26 20 7a 55 72 69  In]!='#' && zUri
16330 5b 69 49 6e 2d 31 5d 21 3d 27 26 27 20 29 20 69  [iIn-1]!='&' ) i
16340 49 6e 2b 2b 3b 0a 20 20 20 20 20 20 20 20 20 20  In++;.          
16350 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20  continue;.      
16360 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20    }.        if( 
16370 63 3d 3d 27 26 27 20 29 7b 0a 20 20 20 20 20 20  c=='&' ){.      
16380 20 20 20 20 7a 46 69 6c 65 5b 69 4f 75 74 2b 2b      zFile[iOut++
16390 5d 20 3d 20 27 5c 30 27 3b 0a 20 20 20 20 20 20  ] = '\0';.      
163a0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
163b0 20 20 20 65 53 74 61 74 65 20 3d 20 32 3b 0a 20     eState = 2;. 
163c0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
163d0 20 63 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 65   c = 0;.      }e
163e0 6c 73 65 20 69 66 28 20 28 65 53 74 61 74 65 3d  lse if( (eState=
163f0 3d 30 20 26 26 20 63 3d 3d 27 3f 27 29 20 7c 7c  =0 && c=='?') ||
16400 20 28 65 53 74 61 74 65 3d 3d 32 20 26 26 20 63   (eState==2 && c
16410 3d 3d 27 26 27 29 20 29 7b 0a 20 20 20 20 20 20  =='&') ){.      
16420 20 20 63 20 3d 20 30 3b 0a 20 20 20 20 20 20 20    c = 0;.       
16430 20 65 53 74 61 74 65 20 3d 20 31 3b 0a 20 20 20   eState = 1;.   
16440 20 20 20 7d 0a 20 20 20 20 20 20 7a 46 69 6c 65     }.      zFile
16450 5b 69 4f 75 74 2b 2b 5d 20 3d 20 63 3b 0a 20 20  [iOut++] = c;.  
16460 20 20 7d 0a 20 20 20 20 69 66 28 20 65 53 74 61    }.    if( eSta
16470 74 65 3d 3d 31 20 29 20 7a 46 69 6c 65 5b 69 4f  te==1 ) zFile[iO
16480 75 74 2b 2b 5d 20 3d 20 27 5c 30 27 3b 0a 20 20  ut++] = '\0';.  
16490 20 20 7a 46 69 6c 65 5b 69 4f 75 74 2b 2b 5d 20    zFile[iOut++] 
164a0 3d 20 27 5c 30 27 3b 0a 20 20 20 20 7a 46 69 6c  = '\0';.    zFil
164b0 65 5b 69 4f 75 74 2b 2b 5d 20 3d 20 27 5c 30 27  e[iOut++] = '\0'
164c0 3b 0a 0a 20 20 20 20 2f 2a 20 43 68 65 63 6b 20  ;..    /* Check 
164d0 69 66 20 74 68 65 72 65 20 77 65 72 65 20 61 6e  if there were an
164e0 79 20 6f 70 74 69 6f 6e 73 20 73 70 65 63 69 66  y options specif
164f0 69 65 64 20 74 68 61 74 20 73 68 6f 75 6c 64 20  ied that should 
16500 62 65 20 69 6e 74 65 72 70 72 65 74 65 64 20 0a  be interpreted .
16510 20 20 20 20 2a 2a 20 68 65 72 65 2e 20 4f 70 74      ** here. Opt
16520 69 6f 6e 73 20 74 68 61 74 20 61 72 65 20 69 6e  ions that are in
16530 74 65 72 70 72 65 74 65 64 20 68 65 72 65 20 69  terpreted here i
16540 6e 63 6c 75 64 65 20 22 76 66 73 22 20 61 6e 64  nclude "vfs" and
16550 20 74 68 6f 73 65 20 74 68 61 74 0a 20 20 20 20   those that.    
16560 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f  ** correspond to
16570 20 66 6c 61 67 73 20 74 68 61 74 20 6d 61 79 20   flags that may 
16580 62 65 20 70 61 73 73 65 64 20 74 6f 20 74 68 65  be passed to the
16590 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 5f 76 32   sqlite3_open_v2
165a0 28 29 0a 20 20 20 20 2a 2a 20 6d 65 74 68 6f 64  ().    ** method
165b0 2e 20 2a 2f 0a 20 20 20 20 7a 4f 70 74 20 3d 20  . */.    zOpt = 
165c0 26 7a 46 69 6c 65 5b 73 71 6c 69 74 65 33 53 74  &zFile[sqlite3St
165d0 72 6c 65 6e 33 30 28 7a 46 69 6c 65 29 2b 31 5d  rlen30(zFile)+1]
165e0 3b 0a 20 20 20 20 77 68 69 6c 65 28 20 7a 4f 70  ;.    while( zOp
165f0 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 69 6e  t[0] ){.      in
16600 74 20 6e 4f 70 74 20 3d 20 73 71 6c 69 74 65 33  t nOpt = sqlite3
16610 53 74 72 6c 65 6e 33 30 28 7a 4f 70 74 29 3b 0a  Strlen30(zOpt);.
16620 20 20 20 20 20 20 63 68 61 72 20 2a 7a 56 61 6c        char *zVal
16630 20 3d 20 26 7a 4f 70 74 5b 6e 4f 70 74 2b 31 5d   = &zOpt[nOpt+1]
16640 3b 0a 20 20 20 20 20 20 69 6e 74 20 6e 56 61 6c  ;.      int nVal
16650 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e   = sqlite3Strlen
16660 33 30 28 7a 56 61 6c 29 3b 0a 0a 20 20 20 20 20  30(zVal);..     
16670 20 69 66 28 20 6e 4f 70 74 3d 3d 33 20 26 26 20   if( nOpt==3 && 
16680 6d 65 6d 63 6d 70 28 22 76 66 73 22 2c 20 7a 4f  memcmp("vfs", zO
16690 70 74 2c 20 33 29 3d 3d 30 20 29 7b 0a 20 20 20  pt, 3)==0 ){.   
166a0 20 20 20 20 20 7a 56 66 73 20 3d 20 7a 56 61 6c       zVfs = zVal
166b0 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
166c0 20 20 20 20 20 20 20 73 74 72 75 63 74 20 4f 70         struct Op
166d0 65 6e 4d 6f 64 65 20 7b 0a 20 20 20 20 20 20 20  enMode {.       
166e0 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a     const char *z
166f0 3b 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74 20  ;.          int 
16700 6d 6f 64 65 3b 0a 20 20 20 20 20 20 20 20 7d 20  mode;.        } 
16710 2a 61 4d 6f 64 65 20 3d 20 30 3b 0a 20 20 20 20  *aMode = 0;.    
16720 20 20 20 20 63 68 61 72 20 2a 7a 4d 6f 64 65 54      char *zModeT
16730 79 70 65 20 3d 20 30 3b 0a 20 20 20 20 20 20 20  ype = 0;.       
16740 20 69 6e 74 20 6d 61 73 6b 20 3d 20 30 3b 0a 20   int mask = 0;. 
16750 20 20 20 20 20 20 20 69 6e 74 20 6c 69 6d 69 74         int limit
16760 20 3d 20 30 3b 0a 0a 20 20 20 20 20 20 20 20 69   = 0;..        i
16770 66 28 20 6e 4f 70 74 3d 3d 35 20 26 26 20 6d 65  f( nOpt==5 && me
16780 6d 63 6d 70 28 22 63 61 63 68 65 22 2c 20 7a 4f  mcmp("cache", zO
16790 70 74 2c 20 35 29 3d 3d 30 20 29 7b 0a 20 20 20  pt, 5)==0 ){.   
167a0 20 20 20 20 20 20 20 73 74 61 74 69 63 20 73 74         static st
167b0 72 75 63 74 20 4f 70 65 6e 4d 6f 64 65 20 61 43  ruct OpenMode aC
167c0 61 63 68 65 4d 6f 64 65 5b 5d 20 3d 20 7b 0a 20  acheMode[] = {. 
167d0 20 20 20 20 20 20 20 20 20 20 20 7b 20 22 73 68             { "sh
167e0 61 72 65 64 22 2c 20 20 53 51 4c 49 54 45 5f 4f  ared",  SQLITE_O
167f0 50 45 4e 5f 53 48 41 52 45 44 43 41 43 48 45 20  PEN_SHAREDCACHE 
16800 7d 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  },.            {
16810 20 22 70 72 69 76 61 74 65 22 2c 20 53 51 4c 49   "private", SQLI
16820 54 45 5f 4f 50 45 4e 5f 50 52 49 56 41 54 45 43  TE_OPEN_PRIVATEC
16830 41 43 48 45 20 7d 2c 0a 20 20 20 20 20 20 20 20  ACHE },.        
16840 20 20 20 20 7b 20 30 2c 20 30 20 7d 0a 20 20 20      { 0, 0 }.   
16850 20 20 20 20 20 20 20 7d 3b 0a 0a 20 20 20 20 20         };..     
16860 20 20 20 20 20 6d 61 73 6b 20 3d 20 53 51 4c 49       mask = SQLI
16870 54 45 5f 4f 50 45 4e 5f 53 48 41 52 45 44 43 41  TE_OPEN_SHAREDCA
16880 43 48 45 7c 53 51 4c 49 54 45 5f 4f 50 45 4e 5f  CHE|SQLITE_OPEN_
16890 50 52 49 56 41 54 45 43 41 43 48 45 3b 0a 20 20  PRIVATECACHE;.  
168a0 20 20 20 20 20 20 20 20 61 4d 6f 64 65 20 3d 20          aMode = 
168b0 61 43 61 63 68 65 4d 6f 64 65 3b 0a 20 20 20 20  aCacheMode;.    
168c0 20 20 20 20 20 20 6c 69 6d 69 74 20 3d 20 6d 61        limit = ma
168d0 73 6b 3b 0a 20 20 20 20 20 20 20 20 20 20 7a 4d  sk;.          zM
168e0 6f 64 65 54 79 70 65 20 3d 20 22 63 61 63 68 65  odeType = "cache
168f0 22 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  ";.        }.   
16900 20 20 20 20 20 69 66 28 20 6e 4f 70 74 3d 3d 34       if( nOpt==4
16910 20 26 26 20 6d 65 6d 63 6d 70 28 22 6d 6f 64 65   && memcmp("mode
16920 22 2c 20 7a 4f 70 74 2c 20 34 29 3d 3d 30 20 29  ", zOpt, 4)==0 )
16930 7b 0a 20 20 20 20 20 20 20 20 20 20 73 74 61 74  {.          stat
16940 69 63 20 73 74 72 75 63 74 20 4f 70 65 6e 4d 6f  ic struct OpenMo
16950 64 65 20 61 4f 70 65 6e 4d 6f 64 65 5b 5d 20 3d  de aOpenMode[] =
16960 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b   {.            {
16970 20 22 72 6f 22 2c 20 20 53 51 4c 49 54 45 5f 4f   "ro",  SQLITE_O
16980 50 45 4e 5f 52 45 41 44 4f 4e 4c 59 20 7d 2c 0a  PEN_READONLY },.
16990 20 20 20 20 20 20 20 20 20 20 20 20 7b 20 22 72              { "r
169a0 77 22 2c 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e  w",  SQLITE_OPEN
169b0 5f 52 45 41 44 57 52 49 54 45 20 7d 2c 20 0a 20  _READWRITE }, . 
169c0 20 20 20 20 20 20 20 20 20 20 20 7b 20 22 72 77             { "rw
169d0 63 22 2c 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f  c", SQLITE_OPEN_
169e0 52 45 41 44 57 52 49 54 45 20 7c 20 53 51 4c 49  READWRITE | SQLI
169f0 54 45 5f 4f 50 45 4e 5f 43 52 45 41 54 45 20 7d  TE_OPEN_CREATE }
16a00 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 20  ,.            { 
16a10 22 6d 65 6d 6f 72 79 22 2c 20 53 51 4c 49 54 45  "memory", SQLITE
16a20 5f 4f 50 45 4e 5f 4d 45 4d 4f 52 59 20 7d 2c 0a  _OPEN_MEMORY },.
16a30 20 20 20 20 20 20 20 20 20 20 20 20 7b 20 30 2c              { 0,
16a40 20 30 20 7d 0a 20 20 20 20 20 20 20 20 20 20 7d   0 }.          }
16a50 3b 0a 0a 20 20 20 20 20 20 20 20 20 20 6d 61 73  ;..          mas
16a60 6b 20 3d 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f  k = SQLITE_OPEN_
16a70 52 45 41 44 4f 4e 4c 59 20 7c 20 53 51 4c 49 54  READONLY | SQLIT
16a80 45 5f 4f 50 45 4e 5f 52 45 41 44 57 52 49 54 45  E_OPEN_READWRITE
16a90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16aa0 20 20 20 20 7c 20 53 51 4c 49 54 45 5f 4f 50 45      | SQLITE_OPE
16ab0 4e 5f 43 52 45 41 54 45 20 7c 20 53 51 4c 49 54  N_CREATE | SQLIT
16ac0 45 5f 4f 50 45 4e 5f 4d 45 4d 4f 52 59 3b 0a 20  E_OPEN_MEMORY;. 
16ad0 20 20 20 20 20 20 20 20 20 61 4d 6f 64 65 20 3d           aMode =
16ae0 20 61 4f 70 65 6e 4d 6f 64 65 3b 0a 20 20 20 20   aOpenMode;.    
16af0 20 20 20 20 20 20 6c 69 6d 69 74 20 3d 20 6d 61        limit = ma
16b00 73 6b 20 26 20 66 6c 61 67 73 3b 0a 20 20 20 20  sk & flags;.    
16b10 20 20 20 20 20 20 7a 4d 6f 64 65 54 79 70 65 20        zModeType 
16b20 3d 20 22 61 63 63 65 73 73 22 3b 0a 20 20 20 20  = "access";.    
16b30 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 69      }..        i
16b40 66 28 20 61 4d 6f 64 65 20 29 7b 0a 20 20 20 20  f( aMode ){.    
16b50 20 20 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20        int i;.   
16b60 20 20 20 20 20 20 20 69 6e 74 20 6d 6f 64 65 20         int mode 
16b70 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20 66  = 0;.          f
16b80 6f 72 28 69 3d 30 3b 20 61 4d 6f 64 65 5b 69 5d  or(i=0; aMode[i]
16b90 2e 7a 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  .z; i++){.      
16ba0 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72        const char
16bb0 20 2a 7a 20 3d 20 61 4d 6f 64 65 5b 69 5d 2e 7a   *z = aMode[i].z
16bc0 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ;.            if
16bd0 28 20 6e 56 61 6c 3d 3d 73 71 6c 69 74 65 33 53  ( nVal==sqlite3S
16be0 74 72 6c 65 6e 33 30 28 7a 29 20 26 26 20 30 3d  trlen30(z) && 0=
16bf0 3d 6d 65 6d 63 6d 70 28 7a 56 61 6c 2c 20 7a 2c  =memcmp(zVal, z,
16c00 20 6e 56 61 6c 29 20 29 7b 0a 20 20 20 20 20 20   nVal) ){.      
16c10 20 20 20 20 20 20 20 20 6d 6f 64 65 20 3d 20 61          mode = a
16c20 4d 6f 64 65 5b 69 5d 2e 6d 6f 64 65 3b 0a 20 20  Mode[i].mode;.  
16c30 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
16c40 6b 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  k;.            }
16c50 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
16c60 20 20 20 20 20 20 20 69 66 28 20 6d 6f 64 65 3d         if( mode=
16c70 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  =0 ){.          
16c80 20 20 2a 70 7a 45 72 72 4d 73 67 20 3d 20 73 71    *pzErrMsg = sq
16c90 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 6e  lite3_mprintf("n
16ca0 6f 20 73 75 63 68 20 25 73 20 6d 6f 64 65 3a 20  o such %s mode: 
16cb0 25 73 22 2c 20 7a 4d 6f 64 65 54 79 70 65 2c 20  %s", zModeType, 
16cc0 7a 56 61 6c 29 3b 0a 20 20 20 20 20 20 20 20 20  zVal);.         
16cd0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45     rc = SQLITE_E
16ce0 52 52 4f 52 3b 0a 20 20 20 20 20 20 20 20 20 20  RROR;.          
16cf0 20 20 67 6f 74 6f 20 70 61 72 73 65 5f 75 72 69    goto parse_uri
16d00 5f 6f 75 74 3b 0a 20 20 20 20 20 20 20 20 20 20  _out;.          
16d10 7d 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  }.          if( 
16d20 28 6d 6f 64 65 20 26 20 7e 53 51 4c 49 54 45 5f  (mode & ~SQLITE_
16d30 4f 50 45 4e 5f 4d 45 4d 4f 52 59 29 3e 6c 69 6d  OPEN_MEMORY)>lim
16d40 69 74 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  it ){.          
16d50 20 20 2a 70 7a 45 72 72 4d 73 67 20 3d 20 73 71    *pzErrMsg = sq
16d60 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 25  lite3_mprintf("%
16d70 73 20 6d 6f 64 65 20 6e 6f 74 20 61 6c 6c 6f 77  s mode not allow
16d80 65 64 3a 20 25 73 22 2c 0a 20 20 20 20 20 20 20  ed: %s",.       
16d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16db0 20 7a 4d 6f 64 65 54 79 70 65 2c 20 7a 56 61 6c   zModeType, zVal
16dc0 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  );.            r
16dd0 63 20 3d 20 53 51 4c 49 54 45 5f 50 45 52 4d 3b  c = SQLITE_PERM;
16de0 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 6f 74  .            got
16df0 6f 20 70 61 72 73 65 5f 75 72 69 5f 6f 75 74 3b  o parse_uri_out;
16e00 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
16e10 20 20 20 20 20 20 20 66 6c 61 67 73 20 3d 20 28         flags = (
16e20 66 6c 61 67 73 20 26 20 7e 6d 61 73 6b 29 20 7c  flags & ~mask) |
16e30 20 6d 6f 64 65 3b 0a 20 20 20 20 20 20 20 20 7d   mode;.        }
16e40 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20  .      }..      
16e50 7a 4f 70 74 20 3d 20 26 7a 56 61 6c 5b 6e 56 61  zOpt = &zVal[nVa
16e60 6c 2b 31 5d 3b 0a 20 20 20 20 7d 0a 0a 20 20 7d  l+1];.    }..  }
16e70 65 6c 73 65 7b 0a 20 20 20 20 7a 46 69 6c 65 20  else{.    zFile 
16e80 3d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63  = sqlite3_malloc
16e90 36 34 28 6e 55 72 69 2b 32 29 3b 0a 20 20 20 20  64(nUri+2);.    
16ea0 69 66 28 20 21 7a 46 69 6c 65 20 29 20 72 65 74  if( !zFile ) ret
16eb0 75 72 6e 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  urn SQLITE_NOMEM
16ec0 5f 42 4b 50 54 3b 0a 20 20 20 20 69 66 28 20 6e  _BKPT;.    if( n
16ed0 55 72 69 20 29 7b 0a 20 20 20 20 20 20 6d 65 6d  Uri ){.      mem
16ee0 63 70 79 28 7a 46 69 6c 65 2c 20 7a 55 72 69 2c  cpy(zFile, zUri,
16ef0 20 6e 55 72 69 29 3b 0a 20 20 20 20 7d 0a 20 20   nUri);.    }.  
16f00 20 20 7a 46 69 6c 65 5b 6e 55 72 69 5d 20 3d 20    zFile[nUri] = 
16f10 27 5c 30 27 3b 0a 20 20 20 20 7a 46 69 6c 65 5b  '\0';.    zFile[
16f20 6e 55 72 69 2b 31 5d 20 3d 20 27 5c 30 27 3b 0a  nUri+1] = '\0';.
16f30 20 20 20 20 66 6c 61 67 73 20 26 3d 20 7e 53 51      flags &= ~SQ
16f40 4c 49 54 45 5f 4f 50 45 4e 5f 55 52 49 3b 0a 20  LITE_OPEN_URI;. 
16f50 20 7d 0a 0a 20 20 2a 70 70 56 66 73 20 3d 20 73   }..  *ppVfs = s
16f60 71 6c 69 74 65 33 5f 76 66 73 5f 66 69 6e 64 28  qlite3_vfs_find(
16f70 7a 56 66 73 29 3b 0a 20 20 69 66 28 20 2a 70 70  zVfs);.  if( *pp
16f80 56 66 73 3d 3d 30 20 29 7b 0a 20 20 20 20 2a 70  Vfs==0 ){.    *p
16f90 7a 45 72 72 4d 73 67 20 3d 20 73 71 6c 69 74 65  zErrMsg = sqlite
16fa0 33 5f 6d 70 72 69 6e 74 66 28 22 6e 6f 20 73 75  3_mprintf("no su
16fb0 63 68 20 76 66 73 3a 20 25 73 22 2c 20 7a 56 66  ch vfs: %s", zVf
16fc0 73 29 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c  s);.    rc = SQL
16fd0 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  ITE_ERROR;.  }. 
16fe0 70 61 72 73 65 5f 75 72 69 5f 6f 75 74 3a 0a 20  parse_uri_out:. 
16ff0 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
17000 4f 4b 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  OK ){.    sqlite
17010 33 5f 66 72 65 65 28 7a 46 69 6c 65 29 3b 0a 20  3_free(zFile);. 
17020 20 20 20 7a 46 69 6c 65 20 3d 20 30 3b 0a 20 20     zFile = 0;.  
17030 7d 0a 20 20 2a 70 46 6c 61 67 73 20 3d 20 66 6c  }.  *pFlags = fl
17040 61 67 73 3b 0a 20 20 2a 70 7a 46 69 6c 65 20 3d  ags;.  *pzFile =
17050 20 7a 46 69 6c 65 3b 0a 20 20 72 65 74 75 72 6e   zFile;.  return
17060 20 72 63 3b 0a 7d 0a 0a 23 69 66 20 64 65 66 69   rc;.}..#if defi
17070 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
17080 45 5f 41 55 54 4f 5f 50 52 4f 46 49 4c 45 29 0a  E_AUTO_PROFILE).
17090 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41  #define SQLITE_A
170a0 55 54 4f 4c 4f 47 47 49 4e 47 5f 53 54 44 45 52  UTOLOGGING_STDER
170b0 52 20 31 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  R 1.#define SQLI
170c0 54 45 5f 41 55 54 4f 4c 4f 47 47 49 4e 47 5f 53  TE_AUTOLOGGING_S
170d0 59 53 4c 4f 47 20 32 0a 73 74 61 74 69 63 20 76  YSLOG 2.static v
170e0 6f 69 64 20 65 6e 61 62 6c 65 41 75 74 6f 4c 6f  oid enableAutoLo
170f0 67 67 69 6e 67 28 0a 20 20 73 71 6c 69 74 65 33  gging(.  sqlite3
17100 20 2a 64 62 0a 29 7b 0a 20 20 63 68 61 72 20 2a   *db.){.  char *
17110 65 6e 76 70 72 6f 66 69 6c 65 20 3d 20 67 65 74  envprofile = get
17120 65 6e 76 28 22 53 51 4c 49 54 45 5f 41 55 54 4f  env("SQLITE_AUTO
17130 5f 50 52 4f 46 49 4c 45 22 29 3b 0a 20 20 0a 20  _PROFILE");.  . 
17140 20 69 66 28 20 65 6e 76 70 72 6f 66 69 6c 65 21   if( envprofile!
17150 3d 4e 55 4c 4c 20 29 7b 0a 20 20 20 20 69 6e 74  =NULL ){.    int
17160 20 77 68 65 72 65 20 3d 20 30 3b 0a 20 20 20 20   where = 0;.    
17170 69 66 28 20 21 73 74 72 6e 63 61 73 65 63 6d 70  if( !strncasecmp
17180 28 22 31 22 2c 20 65 6e 76 70 72 6f 66 69 6c 65  ("1", envprofile
17190 2c 20 31 29 20 29 7b 0a 20 20 20 20 20 20 69 66  , 1) ){.      if
171a0 28 20 69 73 61 74 74 79 28 32 29 20 29 7b 0a 20  ( isatty(2) ){. 
171b0 20 20 20 20 20 20 20 77 68 65 72 65 20 3d 20 53         where = S
171c0 51 4c 49 54 45 5f 41 55 54 4f 4c 4f 47 47 49 4e  QLITE_AUTOLOGGIN
171d0 47 5f 53 54 44 45 52 52 3b 0a 20 20 20 20 20 20  G_STDERR;.      
171e0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 77  }else{.        w
171f0 68 65 72 65 20 3d 20 53 51 4c 49 54 45 5f 41 55  here = SQLITE_AU
17200 54 4f 4c 4f 47 47 49 4e 47 5f 53 59 53 4c 4f 47  TOLOGGING_SYSLOG
17210 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 20  ;.      }.    } 
17220 65 6c 73 65 20 69 66 28 20 21 73 74 72 6e 63 61  else if( !strnca
17230 73 65 63 6d 70 28 22 73 74 64 65 72 72 22 2c 20  secmp("stderr", 
17240 65 6e 76 70 72 6f 66 69 6c 65 2c 20 36 29 20 29  envprofile, 6) )
17250 7b 0a 20 20 20 20 20 20 77 68 65 72 65 20 3d 20  {.      where = 
17260 53 51 4c 49 54 45 5f 41 55 54 4f 4c 4f 47 47 49  SQLITE_AUTOLOGGI
17270 4e 47 5f 53 54 44 45 52 52 3b 0a 20 20 20 20 7d  NG_STDERR;.    }
17280 20 65 6c 73 65 20 69 66 28 20 21 73 74 72 6e 63   else if( !strnc
17290 61 73 65 63 6d 70 28 22 73 79 73 6c 6f 67 22 2c  asecmp("syslog",
172a0 20 65 6e 76 70 72 6f 66 69 6c 65 2c 20 36 29 20   envprofile, 6) 
172b0 29 7b 0a 20 20 20 20 20 20 77 68 65 72 65 20 3d  ){.      where =
172c0 20 53 51 4c 49 54 45 5f 41 55 54 4f 4c 4f 47 47   SQLITE_AUTOLOGG
172d0 49 4e 47 5f 53 59 53 4c 4f 47 3b 0a 20 20 20 20  ING_SYSLOG;.    
172e0 7d 0a 20 20 20 20 69 66 28 20 77 68 65 72 65 3d  }.    if( where=
172f0 3d 53 51 4c 49 54 45 5f 41 55 54 4f 4c 4f 47 47  =SQLITE_AUTOLOGG
17300 49 4e 47 5f 53 54 44 45 52 52 20 29 7b 0a 20 20  ING_STDERR ){.  
17310 20 20 20 20 73 71 6c 69 74 65 33 5f 70 72 6f 66      sqlite3_prof
17320 69 6c 65 28 64 62 2c 20 5f 73 71 6c 69 74 65 5f  ile(db, _sqlite_
17330 61 75 74 6f 5f 70 72 6f 66 69 6c 65 2c 20 64 62  auto_profile, db
17340 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  );.    }else if(
17350 20 77 68 65 72 65 3d 3d 53 51 4c 49 54 45 5f 41   where==SQLITE_A
17360 55 54 4f 4c 4f 47 47 49 4e 47 5f 53 59 53 4c 4f  UTOLOGGING_SYSLO
17370 47 20 29 7b 0a 20 20 20 20 20 20 5f 6f 70 65 6e  G ){.      _open
17380 5f 61 73 6c 5f 6c 6f 67 28 29 3b 0a 20 20 20 20  _asl_log();.    
17390 20 20 73 71 6c 69 74 65 33 5f 70 72 6f 66 69 6c    sqlite3_profil
173a0 65 28 64 62 2c 20 5f 73 71 6c 69 74 65 5f 61 75  e(db, _sqlite_au
173b0 74 6f 5f 70 72 6f 66 69 6c 65 5f 73 79 73 6c 6f  to_profile_syslo
173c0 67 2c 20 64 62 29 3b 0a 20 20 20 20 7d 0a 20 20  g, db);.    }.  
173d0 7d 0a 20 20 63 68 61 72 20 2a 65 6e 76 74 72 61  }.  char *envtra
173e0 63 65 20 3d 20 67 65 74 65 6e 76 28 22 53 51 4c  ce = getenv("SQL
173f0 49 54 45 5f 41 55 54 4f 5f 54 52 41 43 45 22 29  ITE_AUTO_TRACE")
17400 3b 0a 20 20 69 66 28 20 65 6e 76 74 72 61 63 65  ;.  if( envtrace
17410 21 3d 4e 55 4c 4c 20 29 7b 0a 20 20 20 20 69 6e  !=NULL ){.    in
17420 74 20 77 68 65 72 65 20 3d 20 30 3b 0a 20 20 20  t where = 0;.   
17430 20 69 66 28 20 21 73 74 72 6e 63 61 73 65 63 6d   if( !strncasecm
17440 70 28 22 31 22 2c 20 65 6e 76 74 72 61 63 65 2c  p("1", envtrace,
17450 20 31 29 20 29 7b 0a 20 20 20 20 20 20 69 66 28   1) ){.      if(
17460 20 69 73 61 74 74 79 28 32 29 20 29 7b 0a 20 20   isatty(2) ){.  
17470 20 20 20 20 20 20 77 68 65 72 65 20 3d 20 53 51        where = SQ
17480 4c 49 54 45 5f 41 55 54 4f 4c 4f 47 47 49 4e 47  LITE_AUTOLOGGING
17490 5f 53 54 44 45 52 52 3b 0a 20 20 20 20 20 20 7d  _STDERR;.      }
174a0 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 77 68  else{.        wh
174b0 65 72 65 20 3d 20 53 51 4c 49 54 45 5f 41 55 54  ere = SQLITE_AUT
174c0 4f 4c 4f 47 47 49 4e 47 5f 53 59 53 4c 4f 47 3b  OLOGGING_SYSLOG;
174d0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 20 65  .      }.    } e
174e0 6c 73 65 20 69 66 28 20 21 73 74 72 6e 63 61 73  lse if( !strncas
174f0 65 63 6d 70 28 22 73 74 64 65 72 72 22 2c 20 65  ecmp("stderr", e
17500 6e 76 74 72 61 63 65 2c 20 36 29 20 29 7b 0a 20  nvtrace, 6) ){. 
17510 20 20 20 20 20 77 68 65 72 65 20 3d 20 53 51 4c       where = SQL
17520 49 54 45 5f 41 55 54 4f 4c 4f 47 47 49 4e 47 5f  ITE_AUTOLOGGING_
17530 53 54 44 45 52 52 3b 0a 20 20 20 20 7d 20 65 6c  STDERR;.    } el
17540 73 65 20 69 66 28 20 21 73 74 72 6e 63 61 73 65  se if( !strncase
17550 63 6d 70 28 22 73 79 73 6c 6f 67 22 2c 20 65 6e  cmp("syslog", en
17560 76 74 72 61 63 65 2c 20 36 29 20 29 7b 0a 20 20  vtrace, 6) ){.  
17570 20 20 20 20 77 68 65 72 65 20 3d 20 53 51 4c 49      where = SQLI
17580 54 45 5f 41 55 54 4f 4c 4f 47 47 49 4e 47 5f 53  TE_AUTOLOGGING_S
17590 59 53 4c 4f 47 3b 0a 20 20 20 20 7d 0a 20 20 20  YSLOG;.    }.   
175a0 20 69 66 28 20 77 68 65 72 65 3d 3d 53 51 4c 49   if( where==SQLI
175b0 54 45 5f 41 55 54 4f 4c 4f 47 47 49 4e 47 5f 53  TE_AUTOLOGGING_S
175c0 54 44 45 52 52 20 29 7b 0a 20 20 20 20 20 20 73  TDERR ){.      s
175d0 71 6c 69 74 65 33 5f 74 72 61 63 65 28 64 62 2c  qlite3_trace(db,
175e0 20 5f 73 71 6c 69 74 65 5f 61 75 74 6f 5f 74 72   _sqlite_auto_tr
175f0 61 63 65 2c 20 64 62 29 3b 0a 20 20 20 20 7d 65  ace, db);.    }e
17600 6c 73 65 20 69 66 28 20 77 68 65 72 65 3d 3d 53  lse if( where==S
17610 51 4c 49 54 45 5f 41 55 54 4f 4c 4f 47 47 49 4e  QLITE_AUTOLOGGIN
17620 47 5f 53 59 53 4c 4f 47 20 29 7b 0a 20 20 20 20  G_SYSLOG ){.    
17630 20 20 5f 6f 70 65 6e 5f 61 73 6c 5f 6c 6f 67 28    _open_asl_log(
17640 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
17650 5f 74 72 61 63 65 28 64 62 2c 20 5f 73 71 6c 69  _trace(db, _sqli
17660 74 65 5f 61 75 74 6f 5f 74 72 61 63 65 5f 73 79  te_auto_trace_sy
17670 73 6c 6f 67 2c 20 64 62 29 3b 0a 20 20 20 20 7d  slog, db);.    }
17680 0a 20 20 7d 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f  .  }.}.#endif../
17690 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e  *.** This routin
176a0 65 20 64 6f 65 73 20 74 68 65 20 77 6f 72 6b 20  e does the work 
176b0 6f 66 20 6f 70 65 6e 69 6e 67 20 61 20 64 61 74  of opening a dat
176c0 61 62 61 73 65 20 6f 6e 20 62 65 68 61 6c 66 20  abase on behalf 
176d0 6f 66 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 6f 70  of.** sqlite3_op
176e0 65 6e 28 29 20 61 6e 64 20 73 71 6c 69 74 65 33  en() and sqlite3
176f0 5f 6f 70 65 6e 31 36 28 29 2e 20 54 68 65 20 64  _open16(). The d
17700 61 74 61 62 61 73 65 20 66 69 6c 65 6e 61 6d 65  atabase filename
17710 20 22 7a 46 69 6c 65 6e 61 6d 65 22 20 20 0a 2a   "zFilename"  .*
17720 2a 20 69 73 20 55 54 46 2d 38 20 65 6e 63 6f 64  * is UTF-8 encod
17730 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  ed..*/.static in
17740 74 20 6f 70 65 6e 44 61 74 61 62 61 73 65 28 0a  t openDatabase(.
17750 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46    const char *zF
17760 69 6c 65 6e 61 6d 65 2c 20 2f 2a 20 44 61 74 61  ilename, /* Data
17770 62 61 73 65 20 66 69 6c 65 6e 61 6d 65 20 55 54  base filename UT
17780 46 2d 38 20 65 6e 63 6f 64 65 64 20 2a 2f 0a 20  F-8 encoded */. 
17790 20 73 71 6c 69 74 65 33 20 2a 2a 70 70 44 62 2c   sqlite3 **ppDb,
177a0 20 20 20 20 20 20 20 20 2f 2a 20 4f 55 54 3a 20          /* OUT: 
177b0 52 65 74 75 72 6e 65 64 20 64 61 74 61 62 61 73  Returned databas
177c0 65 20 68 61 6e 64 6c 65 20 2a 2f 0a 20 20 75 6e  e handle */.  un
177d0 73 69 67 6e 65 64 20 69 6e 74 20 66 6c 61 67 73  signed int flags
177e0 2c 20 20 20 20 2f 2a 20 4f 70 65 72 61 74 69 6f  ,    /* Operatio
177f0 6e 61 6c 20 66 6c 61 67 73 20 2a 2f 0a 20 20 63  nal flags */.  c
17800 6f 6e 73 74 20 63 68 61 72 20 2a 7a 56 66 73 20  onst char *zVfs 
17810 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
17820 20 74 68 65 20 56 46 53 20 74 6f 20 75 73 65 20   the VFS to use 
17830 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 20  */.){.  sqlite3 
17840 2a 64 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  *db;            
17850 20 20 20 20 20 20 20 20 2f 2a 20 53 74 6f 72 65          /* Store
17860 20 61 6c 6c 6f 63 61 74 65 64 20 68 61 6e 64 6c   allocated handl
17870 65 20 68 65 72 65 20 2a 2f 0a 20 20 69 6e 74 20  e here */.  int 
17880 72 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rc;             
17890 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
178a0 65 74 75 72 6e 20 63 6f 64 65 20 2a 2f 0a 20 20  eturn code */.  
178b0 69 6e 74 20 69 73 54 68 72 65 61 64 73 61 66 65  int isThreadsafe
178c0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
178d0 2f 2a 20 54 72 75 65 20 66 6f 72 20 74 68 72 65  /* True for thre
178e0 61 64 73 61 66 65 20 63 6f 6e 6e 65 63 74 69 6f  adsafe connectio
178f0 6e 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 4f  ns */.  char *zO
17900 70 65 6e 20 3d 20 30 3b 20 20 20 20 20 20 20 20  pen = 0;        
17910 20 20 20 20 20 20 20 20 2f 2a 20 46 69 6c 65 6e          /* Filen
17920 61 6d 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  ame argument to 
17930 70 61 73 73 20 74 6f 20 42 74 72 65 65 4f 70 65  pass to BtreeOpe
17940 6e 28 29 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  n() */.  char *z
17950 45 72 72 4d 73 67 20 3d 20 30 3b 20 20 20 20 20  ErrMsg = 0;     
17960 20 20 20 20 20 20 20 20 20 2f 2a 20 45 72 72 6f           /* Erro
17970 72 20 6d 65 73 73 61 67 65 20 66 72 6f 6d 20 73  r message from s
17980 71 6c 69 74 65 33 50 61 72 73 65 55 72 69 28 29  qlite3ParseUri()
17990 20 2a 2f 0a 0a 23 69 66 64 65 66 20 53 51 4c 49   */..#ifdef SQLI
179a0 54 45 5f 45 4e 41 42 4c 45 5f 41 50 49 5f 41 52  TE_ENABLE_API_AR
179b0 4d 4f 52 0a 20 20 69 66 28 20 70 70 44 62 3d 3d  MOR.  if( ppDb==
179c0 30 20 29 20 72 65 74 75 72 6e 20 53 51 4c 49 54  0 ) return SQLIT
179d0 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54 3b 0a 23  E_MISUSE_BKPT;.#
179e0 65 6e 64 69 66 0a 20 20 2a 70 70 44 62 20 3d 20  endif.  *ppDb = 
179f0 30 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  0;.#ifndef SQLIT
17a00 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 49 54 0a  E_OMIT_AUTOINIT.
17a10 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 69    rc = sqlite3_i
17a20 6e 69 74 69 61 6c 69 7a 65 28 29 3b 0a 20 20 69  nitialize();.  i
17a30 66 28 20 72 63 20 29 20 72 65 74 75 72 6e 20 72  f( rc ) return r
17a40 63 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20  c;.#endif..  /* 
17a50 4f 6e 6c 79 20 61 6c 6c 6f 77 20 73 65 6e 73 69  Only allow sensi
17a60 62 6c 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 73  ble combinations
17a70 20 6f 66 20 62 69 74 73 20 69 6e 20 74 68 65 20   of bits in the 
17a80 66 6c 61 67 73 20 61 72 67 75 6d 65 6e 74 2e 20  flags argument. 
17a90 20 0a 20 20 2a 2a 20 54 68 72 6f 77 20 61 6e 20   .  ** Throw an 
17aa0 65 72 72 6f 72 20 69 66 20 61 6e 79 20 6e 6f 6e  error if any non
17ab0 2d 73 65 6e 73 65 20 63 6f 6d 62 69 6e 61 74 69  -sense combinati
17ac0 6f 6e 20 69 73 20 75 73 65 64 2e 20 20 49 66 20  on is used.  If 
17ad0 77 65 0a 20 20 2a 2a 20 64 6f 20 6e 6f 74 20 62  we.  ** do not b
17ae0 6c 6f 63 6b 20 69 6c 6c 65 67 61 6c 20 63 6f 6d  lock illegal com
17af0 62 69 6e 61 74 69 6f 6e 73 20 68 65 72 65 2c 20  binations here, 
17b00 69 74 20 63 6f 75 6c 64 20 74 72 69 67 67 65 72  it could trigger
17b10 0a 20 20 2a 2a 20 61 73 73 65 72 74 28 29 20 73  .  ** assert() s
17b20 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 64 65 65  tatements in dee
17b30 70 65 72 20 6c 61 79 65 72 73 2e 20 20 53 65 6e  per layers.  Sen
17b40 73 69 62 6c 65 20 63 6f 6d 62 69 6e 61 74 69 6f  sible combinatio
17b50 6e 73 0a 20 20 2a 2a 20 61 72 65 3a 0a 20 20 2a  ns.  ** are:.  *
17b60 2a 0a 20 20 2a 2a 20 20 31 3a 20 20 53 51 4c 49  *.  **  1:  SQLI
17b70 54 45 5f 4f 50 45 4e 5f 52 45 41 44 4f 4e 4c 59  TE_OPEN_READONLY
17b80 0a 20 20 2a 2a 20 20 32 3a 20 20 53 51 4c 49 54  .  **  2:  SQLIT
17b90 45 5f 4f 50 45 4e 5f 52 45 41 44 57 52 49 54 45  E_OPEN_READWRITE
17ba0 0a 20 20 2a 2a 20 20 36 3a 20 20 53 51 4c 49 54  .  **  6:  SQLIT
17bb0 45 5f 4f 50 45 4e 5f 52 45 41 44 57 52 49 54 45  E_OPEN_READWRITE
17bc0 20 7c 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 43   | SQLITE_OPEN_C
17bd0 52 45 41 54 45 0a 20 20 2a 2f 0a 20 20 61 73 73  REATE.  */.  ass
17be0 65 72 74 28 20 53 51 4c 49 54 45 5f 4f 50 45 4e  ert( SQLITE_OPEN
17bf0 5f 52 45 41 44 4f 4e 4c 59 20 20 3d 3d 20 30 78  _READONLY  == 0x
17c00 30 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  01 );.  assert( 
17c10 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 52 45 41 44  SQLITE_OPEN_READ
17c20 57 52 49 54 45 20 3d 3d 20 30 78 30 32 20 29 3b  WRITE == 0x02 );
17c30 0a 20 20 61 73 73 65 72 74 28 20 53 51 4c 49 54  .  assert( SQLIT
17c40 45 5f 4f 50 45 4e 5f 43 52 45 41 54 45 20 20 20  E_OPEN_CREATE   
17c50 20 3d 3d 20 30 78 30 34 20 29 3b 0a 20 20 74 65   == 0x04 );.  te
17c60 73 74 63 61 73 65 28 20 28 31 3c 3c 28 66 6c 61  stcase( (1<<(fla
17c70 67 73 26 37 29 29 3d 3d 30 78 30 32 20 29 3b 20  gs&7))==0x02 ); 
17c80 2f 2a 20 52 45 41 44 4f 4e 4c 59 20 2a 2f 0a 20  /* READONLY */. 
17c90 20 74 65 73 74 63 61 73 65 28 20 28 31 3c 3c 28   testcase( (1<<(
17ca0 66 6c 61 67 73 26 37 29 29 3d 3d 30 78 30 34 20  flags&7))==0x04 
17cb0 29 3b 20 2f 2a 20 52 45 41 44 57 52 49 54 45 20  ); /* READWRITE 
17cc0 2a 2f 0a 20 20 74 65 73 74 63 61 73 65 28 20 28  */.  testcase( (
17cd0 31 3c 3c 28 66 6c 61 67 73 26 37 29 29 3d 3d 30  1<<(flags&7))==0
17ce0 78 34 30 20 29 3b 20 2f 2a 20 52 45 41 44 57 52  x40 ); /* READWR
17cf0 49 54 45 20 7c 20 43 52 45 41 54 45 20 2a 2f 0a  ITE | CREATE */.
17d00 20 20 69 66 28 20 28 28 31 3c 3c 28 66 6c 61 67    if( ((1<<(flag
17d10 73 26 37 29 29 20 26 20 30 78 34 36 29 3d 3d 30  s&7)) & 0x46)==0
17d20 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 53   ){.    return S
17d30 51 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50  QLITE_MISUSE_BKP
17d40 54 3b 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 36 35  T;  /* IMP: R-65
17d50 34 39 37 2d 34 34 35 39 34 20 2a 2f 0a 20 20 7d  497-44594 */.  }
17d60 0a 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 47  ..  if( sqlite3G
17d70 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 62 43 6f 72  lobalConfig.bCor
17d80 65 4d 75 74 65 78 3d 3d 30 20 29 7b 0a 20 20 20  eMutex==0 ){.   
17d90 20 69 73 54 68 72 65 61 64 73 61 66 65 20 3d 20   isThreadsafe = 
17da0 30 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 66  0;.  }else if( f
17db0 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 4f 50  lags & SQLITE_OP
17dc0 45 4e 5f 4e 4f 4d 55 54 45 58 20 29 7b 0a 20 20  EN_NOMUTEX ){.  
17dd0 20 20 69 73 54 68 72 65 61 64 73 61 66 65 20 3d    isThreadsafe =
17de0 20 30 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20   0;.  }else if( 
17df0 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 4f  flags & SQLITE_O
17e00 50 45 4e 5f 46 55 4c 4c 4d 55 54 45 58 20 29 7b  PEN_FULLMUTEX ){
17e10 0a 20 20 20 20 69 73 54 68 72 65 61 64 73 61 66  .    isThreadsaf
17e20 65 20 3d 20 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a  e = 1;.  }else{.
17e30 20 20 20 20 69 73 54 68 72 65 61 64 73 61 66 65      isThreadsafe
17e40 20 3d 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c   = sqlite3Global
17e50 43 6f 6e 66 69 67 2e 62 46 75 6c 6c 4d 75 74 65  Config.bFullMute
17e60 78 3b 0a 20 20 7d 0a 20 20 69 66 28 20 66 6c 61  x;.  }.  if( fla
17e70 67 73 20 26 20 53 51 4c 49 54 45 5f 4f 50 45 4e  gs & SQLITE_OPEN
17e80 5f 50 52 49 56 41 54 45 43 41 43 48 45 20 29 7b  _PRIVATECACHE ){
17e90 0a 20 20 20 20 66 6c 61 67 73 20 26 3d 20 7e 53  .    flags &= ~S
17ea0 51 4c 49 54 45 5f 4f 50 45 4e 5f 53 48 41 52 45  QLITE_OPEN_SHARE
17eb0 44 43 41 43 48 45 3b 0a 20 20 7d 65 6c 73 65 20  DCACHE;.  }else 
17ec0 69 66 28 20 73 71 6c 69 74 65 33 47 6c 6f 62 61  if( sqlite3Globa
17ed0 6c 43 6f 6e 66 69 67 2e 73 68 61 72 65 64 43 61  lConfig.sharedCa
17ee0 63 68 65 45 6e 61 62 6c 65 64 20 29 7b 0a 20 20  cheEnabled ){.  
17ef0 20 20 66 6c 61 67 73 20 7c 3d 20 53 51 4c 49 54    flags |= SQLIT
17f00 45 5f 4f 50 45 4e 5f 53 48 41 52 45 44 43 41 43  E_OPEN_SHAREDCAC
17f10 48 45 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 52 65  HE;.  }..  /* Re
17f20 6d 6f 76 65 20 68 61 72 6d 66 75 6c 20 62 69 74  move harmful bit
17f30 73 20 66 72 6f 6d 20 74 68 65 20 66 6c 61 67 73  s from the flags
17f40 20 70 61 72 61 6d 65 74 65 72 0a 20 20 2a 2a 0a   parameter.  **.
17f50 20 20 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f    ** The SQLITE_
17f60 4f 50 45 4e 5f 4e 4f 4d 55 54 45 58 20 61 6e 64  OPEN_NOMUTEX and
17f70 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 46 55 4c   SQLITE_OPEN_FUL
17f80 4c 4d 55 54 45 58 20 66 6c 61 67 73 20 77 65 72  LMUTEX flags wer
17f90 65 0a 20 20 2a 2a 20 64 65 61 6c 74 20 77 69 74  e.  ** dealt wit
17fa0 68 20 69 6e 20 74 68 65 20 70 72 65 76 69 6f 75  h in the previou
17fb0 73 20 63 6f 64 65 20 62 6c 6f 63 6b 2e 20 20 42  s code block.  B
17fc0 65 73 69 64 65 73 20 74 68 65 73 65 2c 20 74 68  esides these, th
17fd0 65 20 6f 6e 6c 79 0a 20 20 2a 2a 20 76 61 6c 69  e only.  ** vali
17fe0 64 20 69 6e 70 75 74 20 66 6c 61 67 73 20 66 6f  d input flags fo
17ff0 72 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 5f 76  r sqlite3_open_v
18000 32 28 29 20 61 72 65 20 53 51 4c 49 54 45 5f 4f  2() are SQLITE_O
18010 50 45 4e 5f 52 45 41 44 4f 4e 4c 59 2c 0a 20 20  PEN_READONLY,.  
18020 2a 2a 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 52  ** SQLITE_OPEN_R
18030 45 41 44 57 52 49 54 45 2c 20 53 51 4c 49 54 45  EADWRITE, SQLITE
18040 5f 4f 50 45 4e 5f 43 52 45 41 54 45 2c 20 53 51  _OPEN_CREATE, SQ
18050 4c 49 54 45 5f 4f 50 45 4e 5f 53 48 41 52 45 44  LITE_OPEN_SHARED
18060 43 41 43 48 45 2c 0a 20 20 2a 2a 20 53 51 4c 49  CACHE,.  ** SQLI
18070 54 45 5f 4f 50 45 4e 5f 50 52 49 56 41 54 45 43  TE_OPEN_PRIVATEC
18080 41 43 48 45 2c 20 61 6e 64 20 73 6f 6d 65 20 72  ACHE, and some r
18090 65 73 65 72 76 65 64 20 62 69 74 73 2e 20 20 53  eserved bits.  S
180a0 69 6c 65 6e 74 6c 79 20 6d 61 73 6b 0a 20 20 2a  ilently mask.  *
180b0 2a 20 6f 66 66 20 61 6c 6c 20 6f 74 68 65 72 20  * off all other 
180c0 66 6c 61 67 73 2e 0a 20 20 2a 2f 0a 20 20 66 6c  flags..  */.  fl
180d0 61 67 73 20 26 3d 20 20 7e 28 20 53 51 4c 49 54  ags &=  ~( SQLIT
180e0 45 5f 4f 50 45 4e 5f 44 45 4c 45 54 45 4f 4e 43  E_OPEN_DELETEONC
180f0 4c 4f 53 45 20 7c 0a 20 20 20 20 20 20 20 20 20  LOSE |.         
18100 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45        SQLITE_OPE
18110 4e 5f 45 58 43 4c 55 53 49 56 45 20 7c 0a 20 20  N_EXCLUSIVE |.  
18120 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
18130 49 54 45 5f 4f 50 45 4e 5f 4d 41 49 4e 5f 44 42  ITE_OPEN_MAIN_DB
18140 20 7c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   |.             
18150 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 54 45    SQLITE_OPEN_TE
18160 4d 50 5f 44 42 20 7c 20 0a 20 20 20 20 20 20 20  MP_DB | .       
18170 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f          SQLITE_O
18180 50 45 4e 5f 54 52 41 4e 53 49 45 4e 54 5f 44 42  PEN_TRANSIENT_DB
18190 20 7c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20   | .            
181a0 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 4d     SQLITE_OPEN_M
181b0 41 49 4e 5f 4a 4f 55 52 4e 41 4c 20 7c 20 0a 20  AIN_JOURNAL | . 
181c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
181d0 4c 49 54 45 5f 4f 50 45 4e 5f 54 45 4d 50 5f 4a  LITE_OPEN_TEMP_J
181e0 4f 55 52 4e 41 4c 20 7c 20 0a 20 20 20 20 20 20  OURNAL | .      
181f0 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f           SQLITE_
18200 4f 50 45 4e 5f 53 55 42 4a 4f 55 52 4e 41 4c 20  OPEN_SUBJOURNAL 
18210 7c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  | .             
18220 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 4d 41    SQLITE_OPEN_MA
18230 53 54 45 52 5f 4a 4f 55 52 4e 41 4c 20 7c 0a 20  STER_JOURNAL |. 
18240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
18250 4c 49 54 45 5f 4f 50 45 4e 5f 4e 4f 4d 55 54 45  LITE_OPEN_NOMUTE
18260 58 20 7c 0a 20 20 20 20 20 20 20 20 20 20 20 20  X |.            
18270 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 46     SQLITE_OPEN_F
18280 55 4c 4c 4d 55 54 45 58 20 7c 0a 20 20 20 20 20  ULLMUTEX |.     
18290 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45            SQLITE
182a0 5f 4f 50 45 4e 5f 57 41 4c 0a 20 20 20 20 20 20  _OPEN_WAL.      
182b0 20 20 20 20 20 20 20 29 3b 0a 0a 20 20 2f 2a 20         );..  /* 
182c0 41 6c 6c 6f 63 61 74 65 20 74 68 65 20 73 71 6c  Allocate the sql
182d0 69 74 65 20 64 61 74 61 20 73 74 72 75 63 74 75  ite data structu
182e0 72 65 20 2a 2f 0a 20 20 64 62 20 3d 20 73 71 6c  re */.  db = sql
182f0 69 74 65 33 4d 61 6c 6c 6f 63 5a 65 72 6f 28 20  ite3MallocZero( 
18300 73 69 7a 65 6f 66 28 73 71 6c 69 74 65 33 29 20  sizeof(sqlite3) 
18310 29 3b 0a 20 20 69 66 28 20 64 62 3d 3d 30 20 29  );.  if( db==0 )
18320 20 67 6f 74 6f 20 6f 70 65 6e 64 62 5f 6f 75 74   goto opendb_out
18330 3b 0a 20 20 69 66 28 20 69 73 54 68 72 65 61 64  ;.  if( isThread
18340 73 61 66 65 20 29 7b 0a 20 20 20 20 64 62 2d 3e  safe ){.    db->
18350 6d 75 74 65 78 20 3d 20 73 71 6c 69 74 65 33 4d  mutex = sqlite3M
18360 75 74 65 78 41 6c 6c 6f 63 28 53 51 4c 49 54 45  utexAlloc(SQLITE
18370 5f 4d 55 54 45 58 5f 52 45 43 55 52 53 49 56 45  _MUTEX_RECURSIVE
18380 29 3b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 6d  );.    if( db->m
18390 75 74 65 78 3d 3d 30 20 29 7b 0a 20 20 20 20 20  utex==0 ){.     
183a0 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 64 62   sqlite3_free(db
183b0 29 3b 0a 20 20 20 20 20 20 64 62 20 3d 20 30 3b  );.      db = 0;
183c0 0a 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 65 6e  .      goto open
183d0 64 62 5f 6f 75 74 3b 0a 20 20 20 20 7d 0a 20 20  db_out;.    }.  
183e0 7d 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  }.  sqlite3_mute
183f0 78 5f 65 6e 74 65 72 28 64 62 2d 3e 6d 75 74 65  x_enter(db->mute
18400 78 29 3b 0a 20 20 64 62 2d 3e 65 72 72 4d 61 73  x);.  db->errMas
18410 6b 20 3d 20 30 78 66 66 3b 0a 20 20 64 62 2d 3e  k = 0xff;.  db->
18420 6e 44 62 20 3d 20 32 3b 0a 20 20 64 62 2d 3e 6d  nDb = 2;.  db->m
18430 61 67 69 63 20 3d 20 53 51 4c 49 54 45 5f 4d 41  agic = SQLITE_MA
18440 47 49 43 5f 42 55 53 59 3b 0a 20 20 64 62 2d 3e  GIC_BUSY;.  db->
18450 61 44 62 20 3d 20 64 62 2d 3e 61 44 62 53 74 61  aDb = db->aDbSta
18460 74 69 63 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  tic;..  assert( 
18470 73 69 7a 65 6f 66 28 64 62 2d 3e 61 4c 69 6d 69  sizeof(db->aLimi
18480 74 29 3d 3d 73 69 7a 65 6f 66 28 61 48 61 72 64  t)==sizeof(aHard
18490 4c 69 6d 69 74 29 20 29 3b 0a 20 20 6d 65 6d 63  Limit) );.  memc
184a0 70 79 28 64 62 2d 3e 61 4c 69 6d 69 74 2c 20 61  py(db->aLimit, a
184b0 48 61 72 64 4c 69 6d 69 74 2c 20 73 69 7a 65 6f  HardLimit, sizeo
184c0 66 28 64 62 2d 3e 61 4c 69 6d 69 74 29 29 3b 0a  f(db->aLimit));.
184d0 20 20 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c    db->aLimit[SQL
184e0 49 54 45 5f 4c 49 4d 49 54 5f 57 4f 52 4b 45 52  ITE_LIMIT_WORKER
184f0 5f 54 48 52 45 41 44 53 5d 20 3d 20 53 51 4c 49  _THREADS] = SQLI
18500 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45  TE_DEFAULT_WORKE
18510 52 5f 54 48 52 45 41 44 53 3b 0a 20 20 64 62 2d  R_THREADS;.  db-
18520 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b  >autoCommit = 1;
18530 0a 20 20 64 62 2d 3e 6e 65 78 74 41 75 74 6f 76  .  db->nextAutov
18540 61 63 20 3d 20 2d 31 3b 0a 20 20 64 62 2d 3e 73  ac = -1;.  db->s
18550 7a 4d 6d 61 70 20 3d 20 73 71 6c 69 74 65 33 47  zMmap = sqlite3G
18560 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 73 7a 4d 6d  lobalConfig.szMm
18570 61 70 3b 0a 20 20 64 62 2d 3e 6e 65 78 74 50 61  ap;.  db->nextPa
18580 67 65 73 69 7a 65 20 3d 20 30 3b 0a 20 20 64 62  gesize = 0;.  db
18590 2d 3e 6e 4d 61 78 53 6f 72 74 65 72 4d 6d 61 70  ->nMaxSorterMmap
185a0 20 3d 20 30 78 37 46 46 46 46 46 46 46 3b 0a 20   = 0x7FFFFFFF;. 
185b0 20 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 53 51   db->flags |= SQ
185c0 4c 49 54 45 5f 53 68 6f 72 74 43 6f 6c 4e 61 6d  LITE_ShortColNam
185d0 65 73 20 7c 20 53 51 4c 49 54 45 5f 45 6e 61 62  es | SQLITE_Enab
185e0 6c 65 54 72 69 67 67 65 72 20 7c 20 53 51 4c 49  leTrigger | SQLI
185f0 54 45 5f 43 61 63 68 65 53 70 69 6c 6c 0a 23 69  TE_CacheSpill.#i
18600 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
18610 45 5f 44 45 46 41 55 4c 54 5f 41 55 54 4f 4d 41  E_DEFAULT_AUTOMA
18620 54 49 43 5f 49 4e 44 45 58 29 20 7c 7c 20 53 51  TIC_INDEX) || SQ
18630 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 41 55 54  LITE_DEFAULT_AUT
18640 4f 4d 41 54 49 43 5f 49 4e 44 45 58 0a 20 20 20  OMATIC_INDEX.   
18650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7c 20                | 
18660 53 51 4c 49 54 45 5f 41 75 74 6f 49 6e 64 65 78  SQLITE_AutoIndex
18670 0a 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49  .#endif.#if SQLI
18680 54 45 5f 44 45 46 41 55 4c 54 5f 43 4b 50 54 46  TE_DEFAULT_CKPTF
18690 55 4c 4c 46 53 59 4e 43 0a 20 20 20 20 20 20 20  ULLFSYNC.       
186a0 20 20 20 20 20 20 20 20 20 20 7c 20 53 51 4c 49            | SQLI
186b0 54 45 5f 43 6b 70 74 46 75 6c 6c 46 53 79 6e 63  TE_CkptFullFSync
186c0 0a 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49  .#endif.#if SQLI
186d0 54 45 5f 44 45 46 41 55 4c 54 5f 46 49 4c 45 5f  TE_DEFAULT_FILE_
186e0 46 4f 52 4d 41 54 3c 34 0a 20 20 20 20 20 20 20  FORMAT<4.       
186f0 20 20 20 20 20 20 20 20 20 20 7c 20 53 51 4c 49            | SQLI
18700 54 45 5f 4c 65 67 61 63 79 46 69 6c 65 46 6d 74  TE_LegacyFileFmt
18710 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53  .#endif.#ifdef S
18720 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 41  QLITE_ENABLE_LOA
18730 44 5f 45 58 54 45 4e 53 49 4f 4e 0a 20 20 20 20  D_EXTENSION.    
18740 20 20 20 20 20 20 20 20 20 20 20 20 20 7c 20 53               | S
18750 51 4c 49 54 45 5f 4c 6f 61 64 45 78 74 65 6e 73  QLITE_LoadExtens
18760 69 6f 6e 0a 23 65 6e 64 69 66 0a 23 69 66 20 53  ion.#endif.#if S
18770 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 52 45  QLITE_DEFAULT_RE
18780 43 55 52 53 49 56 45 5f 54 52 49 47 47 45 52 53  CURSIVE_TRIGGERS
18790 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
187a0 20 20 7c 20 53 51 4c 49 54 45 5f 52 65 63 54 72    | SQLITE_RecTr
187b0 69 67 67 65 72 73 0a 23 65 6e 64 69 66 0a 23 69  iggers.#endif.#i
187c0 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
187d0 5f 44 45 46 41 55 4c 54 5f 46 4f 52 45 49 47 4e  _DEFAULT_FOREIGN
187e0 5f 4b 45 59 53 29 20 26 26 20 53 51 4c 49 54 45  _KEYS) && SQLITE
187f0 5f 44 45 46 41 55 4c 54 5f 46 4f 52 45 49 47 4e  _DEFAULT_FOREIGN
18800 5f 4b 45 59 53 0a 20 20 20 20 20 20 20 20 20 20  _KEYS.          
18810 20 20 20 20 20 20 20 7c 20 53 51 4c 49 54 45 5f         | SQLITE_
18820 46 6f 72 65 69 67 6e 4b 65 79 73 0a 23 65 6e 64  ForeignKeys.#end
18830 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  if.#if defined(S
18840 51 4c 49 54 45 5f 52 45 56 45 52 53 45 5f 55 4e  QLITE_REVERSE_UN
18850 4f 52 44 45 52 45 44 5f 53 45 4c 45 43 54 53 29  ORDERED_SELECTS)
18860 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18870 20 20 7c 20 53 51 4c 49 54 45 5f 52 65 76 65 72    | SQLITE_Rever
18880 73 65 4f 72 64 65 72 0a 23 65 6e 64 69 66 0a 23  seOrder.#endif.#
18890 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
188a0 45 5f 45 4e 41 42 4c 45 5f 4f 56 45 52 53 49 5a  E_ENABLE_OVERSIZ
188b0 45 5f 43 45 4c 4c 5f 43 48 45 43 4b 29 0a 20 20  E_CELL_CHECK).  
188c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7c                 |
188d0 20 53 51 4c 49 54 45 5f 43 65 6c 6c 53 69 7a 65   SQLITE_CellSize
188e0 43 6b 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65  Ck.#endif.#if de
188f0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
18900 42 4c 45 5f 46 54 53 33 5f 54 4f 4b 45 4e 49 5a  BLE_FTS3_TOKENIZ
18910 45 52 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  ER).            
18920 20 20 20 20 20 7c 20 53 51 4c 49 54 45 5f 46 74       | SQLITE_Ft
18930 73 33 54 6f 6b 65 6e 69 7a 65 72 0a 23 65 6e 64  s3Tokenizer.#end
18940 69 66 0a 20 20 20 20 20 20 3b 0a 20 20 73 71 6c  if.      ;.  sql
18950 69 74 65 33 48 61 73 68 49 6e 69 74 28 26 64 62  ite3HashInit(&db
18960 2d 3e 61 43 6f 6c 6c 53 65 71 29 3b 0a 23 69 66  ->aCollSeq);.#if
18970 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
18980 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20  _VIRTUALTABLE.  
18990 73 71 6c 69 74 65 33 48 61 73 68 49 6e 69 74 28  sqlite3HashInit(
189a0 26 64 62 2d 3e 61 4d 6f 64 75 6c 65 29 3b 0a 23  &db->aModule);.#
189b0 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 41 64 64 20  endif..  /* Add 
189c0 74 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c  the default coll
189d0 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 42  ation sequence B
189e0 49 4e 41 52 59 2e 20 42 49 4e 41 52 59 20 77 6f  INARY. BINARY wo
189f0 72 6b 73 20 66 6f 72 20 62 6f 74 68 20 55 54 46  rks for both UTF
18a00 2d 38 0a 20 20 2a 2a 20 61 6e 64 20 55 54 46 2d  -8.  ** and UTF-
18a10 31 36 2c 20 73 6f 20 61 64 64 20 61 20 76 65 72  16, so add a ver
18a20 73 69 6f 6e 20 66 6f 72 20 65 61 63 68 20 74 6f  sion for each to
18a30 20 61 76 6f 69 64 20 61 6e 79 20 75 6e 6e 65 63   avoid any unnec
18a40 65 73 73 61 72 79 0a 20 20 2a 2a 20 63 6f 6e 76  essary.  ** conv
18a50 65 72 73 69 6f 6e 73 2e 20 54 68 65 20 6f 6e 6c  ersions. The onl
18a60 79 20 65 72 72 6f 72 20 74 68 61 74 20 63 61 6e  y error that can
18a70 20 6f 63 63 75 72 20 68 65 72 65 20 69 73 20 61   occur here is a
18a80 20 6d 61 6c 6c 6f 63 28 29 20 66 61 69 6c 75 72   malloc() failur
18a90 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 45 56 49  e..  **.  ** EVI
18aa0 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 35 32 37 38  DENCE-OF: R-5278
18ab0 36 2d 34 34 38 37 38 20 53 51 4c 69 74 65 20 64  6-44878 SQLite d
18ac0 65 66 69 6e 65 73 20 74 68 72 65 65 20 62 75 69  efines three bui
18ad0 6c 74 2d 69 6e 20 63 6f 6c 6c 61 74 69 6e 67 0a  lt-in collating.
18ae0 20 20 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 3a 0a    ** functions:.
18af0 20 20 2a 2f 0a 20 20 63 72 65 61 74 65 43 6f 6c    */.  createCol
18b00 6c 61 74 69 6f 6e 28 64 62 2c 20 73 71 6c 69 74  lation(db, sqlit
18b10 65 33 53 74 72 42 49 4e 41 52 59 2c 20 53 51 4c  e3StrBINARY, SQL
18b20 49 54 45 5f 55 54 46 38 2c 20 30 2c 20 62 69 6e  ITE_UTF8, 0, bin
18b30 43 6f 6c 6c 46 75 6e 63 2c 20 30 29 3b 0a 20 20  CollFunc, 0);.  
18b40 63 72 65 61 74 65 43 6f 6c 6c 61 74 69 6f 6e 28  createCollation(
18b50 64 62 2c 20 73 71 6c 69 74 65 33 53 74 72 42 49  db, sqlite3StrBI
18b60 4e 41 52 59 2c 20 53 51 4c 49 54 45 5f 55 54 46  NARY, SQLITE_UTF
18b70 31 36 42 45 2c 20 30 2c 20 62 69 6e 43 6f 6c 6c  16BE, 0, binColl
18b80 46 75 6e 63 2c 20 30 29 3b 0a 20 20 63 72 65 61  Func, 0);.  crea
18b90 74 65 43 6f 6c 6c 61 74 69 6f 6e 28 64 62 2c 20  teCollation(db, 
18ba0 73 71 6c 69 74 65 33 53 74 72 42 49 4e 41 52 59  sqlite3StrBINARY
18bb0 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45  , SQLITE_UTF16LE
18bc0 2c 20 30 2c 20 62 69 6e 43 6f 6c 6c 46 75 6e 63  , 0, binCollFunc
18bd0 2c 20 30 29 3b 0a 20 20 63 72 65 61 74 65 43 6f  , 0);.  createCo
18be0 6c 6c 61 74 69 6f 6e 28 64 62 2c 20 22 4e 4f 43  llation(db, "NOC
18bf0 41 53 45 22 2c 20 53 51 4c 49 54 45 5f 55 54 46  ASE", SQLITE_UTF
18c00 38 2c 20 30 2c 20 6e 6f 63 61 73 65 43 6f 6c 6c  8, 0, nocaseColl
18c10 61 74 69 6e 67 46 75 6e 63 2c 20 30 29 3b 0a 20  atingFunc, 0);. 
18c20 20 63 72 65 61 74 65 43 6f 6c 6c 61 74 69 6f 6e   createCollation
18c30 28 64 62 2c 20 22 52 54 52 49 4d 22 2c 20 53 51  (db, "RTRIM", SQ
18c40 4c 49 54 45 5f 55 54 46 38 2c 20 28 76 6f 69 64  LITE_UTF8, (void
18c50 2a 29 31 2c 20 62 69 6e 43 6f 6c 6c 46 75 6e 63  *)1, binCollFunc
18c60 2c 20 30 29 3b 0a 20 20 69 66 28 20 64 62 2d 3e  , 0);.  if( db->
18c70 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 7b 0a  mallocFailed ){.
18c80 20 20 20 20 67 6f 74 6f 20 6f 70 65 6e 64 62 5f      goto opendb_
18c90 6f 75 74 3b 0a 20 20 7d 0a 20 20 2f 2a 20 45 56  out;.  }.  /* EV
18ca0 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 30 38 33  IDENCE-OF: R-083
18cb0 30 38 2d 31 37 32 32 34 20 54 68 65 20 64 65 66  08-17224 The def
18cc0 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6e 67 20 66  ault collating f
18cd0 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6c 6c 0a  unction for all.
18ce0 20 20 2a 2a 20 73 74 72 69 6e 67 73 20 69 73 20    ** strings is 
18cf0 42 49 4e 41 52 59 2e 20 0a 20 20 2a 2f 0a 20 20  BINARY. .  */.  
18d00 64 62 2d 3e 70 44 66 6c 74 43 6f 6c 6c 20 3d 20  db->pDfltColl = 
18d10 73 71 6c 69 74 65 33 46 69 6e 64 43 6f 6c 6c 53  sqlite3FindCollS
18d20 65 71 28 64 62 2c 20 53 51 4c 49 54 45 5f 55 54  eq(db, SQLITE_UT
18d30 46 38 2c 20 73 71 6c 69 74 65 33 53 74 72 42 49  F8, sqlite3StrBI
18d40 4e 41 52 59 2c 20 30 29 3b 0a 20 20 61 73 73 65  NARY, 0);.  asse
18d50 72 74 28 20 64 62 2d 3e 70 44 66 6c 74 43 6f 6c  rt( db->pDfltCol
18d60 6c 21 3d 30 20 29 3b 0a 0a 20 20 2f 2a 20 50 61  l!=0 );..  /* Pa
18d70 72 73 65 20 74 68 65 20 66 69 6c 65 6e 61 6d 65  rse the filename
18d80 2f 55 52 49 20 61 72 67 75 6d 65 6e 74 2e 20 2a  /URI argument. *
18d90 2f 0a 20 20 64 62 2d 3e 6f 70 65 6e 46 6c 61 67  /.  db->openFlag
18da0 73 20 3d 20 66 6c 61 67 73 3b 0a 20 20 72 63 20  s = flags;.  rc 
18db0 3d 20 73 71 6c 69 74 65 33 50 61 72 73 65 55 72  = sqlite3ParseUr
18dc0 69 28 7a 56 66 73 2c 20 7a 46 69 6c 65 6e 61 6d  i(zVfs, zFilenam
18dd0 65 2c 20 26 66 6c 61 67 73 2c 20 26 64 62 2d 3e  e, &flags, &db->
18de0 70 56 66 73 2c 20 26 7a 4f 70 65 6e 2c 20 26 7a  pVfs, &zOpen, &z
18df0 45 72 72 4d 73 67 29 3b 0a 20 20 69 66 28 20 72  ErrMsg);.  if( r
18e00 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
18e10 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
18e20 54 45 5f 4e 4f 4d 45 4d 20 29 20 73 71 6c 69 74  TE_NOMEM ) sqlit
18e30 65 33 4f 6f 6d 46 61 75 6c 74 28 64 62 29 3b 0a  e3OomFault(db);.
18e40 20 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72      sqlite3Error
18e50 57 69 74 68 4d 73 67 28 64 62 2c 20 72 63 2c 20  WithMsg(db, rc, 
18e60 7a 45 72 72 4d 73 67 20 3f 20 22 25 73 22 20 3a  zErrMsg ? "%s" :
18e70 20 30 2c 20 7a 45 72 72 4d 73 67 29 3b 0a 20 20   0, zErrMsg);.  
18e80 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a    sqlite3_free(z
18e90 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 67 6f 74  ErrMsg);.    got
18ea0 6f 20 6f 70 65 6e 64 62 5f 6f 75 74 3b 0a 20 20  o opendb_out;.  
18eb0 7d 0a 0a 20 20 2f 2a 20 4f 70 65 6e 20 74 68 65  }..  /* Open the
18ec0 20 62 61 63 6b 65 6e 64 20 64 61 74 61 62 61 73   backend databas
18ed0 65 20 64 72 69 76 65 72 20 2a 2f 0a 20 20 72 63  e driver */.  rc
18ee0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4f   = sqlite3BtreeO
18ef0 70 65 6e 28 64 62 2d 3e 70 56 66 73 2c 20 7a 4f  pen(db->pVfs, zO
18f00 70 65 6e 2c 20 64 62 2c 20 26 64 62 2d 3e 61 44  pen, db, &db->aD
18f10 62 5b 30 5d 2e 70 42 74 2c 20 30 2c 0a 20 20 20  b[0].pBt, 0,.   
18f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f30 20 20 20 20 20 66 6c 61 67 73 20 7c 20 53 51 4c       flags | SQL
18f40 49 54 45 5f 4f 50 45 4e 5f 4d 41 49 4e 5f 44 42  ITE_OPEN_MAIN_DB
18f50 29 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c  );.  if( rc!=SQL
18f60 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 69 66  ITE_OK ){.    if
18f70 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 49 4f 45  ( rc==SQLITE_IOE
18f80 52 52 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20  RR_NOMEM ){.    
18f90 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f    rc = SQLITE_NO
18fa0 4d 45 4d 5f 42 4b 50 54 3b 0a 20 20 20 20 7d 0a  MEM_BKPT;.    }.
18fb0 20 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72      sqlite3Error
18fc0 28 64 62 2c 20 72 63 29 3b 0a 20 20 20 20 67 6f  (db, rc);.    go
18fd0 74 6f 20 6f 70 65 6e 64 62 5f 6f 75 74 3b 0a 20  to opendb_out;. 
18fe0 20 7d 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65   }.  sqlite3Btre
18ff0 65 45 6e 74 65 72 28 64 62 2d 3e 61 44 62 5b 30  eEnter(db->aDb[0
19000 5d 2e 70 42 74 29 3b 0a 20 20 64 62 2d 3e 61 44  ].pBt);.  db->aD
19010 62 5b 30 5d 2e 70 53 63 68 65 6d 61 20 3d 20 73  b[0].pSchema = s
19020 71 6c 69 74 65 33 53 63 68 65 6d 61 47 65 74 28  qlite3SchemaGet(
19030 64 62 2c 20 64 62 2d 3e 61 44 62 5b 30 5d 2e 70  db, db->aDb[0].p
19040 42 74 29 3b 0a 20 20 69 66 28 20 21 64 62 2d 3e  Bt);.  if( !db->
19050 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 45  mallocFailed ) E
19060 4e 43 28 64 62 29 20 3d 20 53 43 48 45 4d 41 5f  NC(db) = SCHEMA_
19070 45 4e 43 28 64 62 29 3b 0a 20 20 73 71 6c 69 74  ENC(db);.  sqlit
19080 65 33 42 74 72 65 65 4c 65 61 76 65 28 64 62 2d  e3BtreeLeave(db-
19090 3e 61 44 62 5b 30 5d 2e 70 42 74 29 3b 0a 20 20  >aDb[0].pBt);.  
190a0 64 62 2d 3e 61 44 62 5b 31 5d 2e 70 53 63 68 65  db->aDb[1].pSche
190b0 6d 61 20 3d 20 73 71 6c 69 74 65 33 53 63 68 65  ma = sqlite3Sche
190c0 6d 61 47 65 74 28 64 62 2c 20 30 29 3b 0a 0a 20  maGet(db, 0);.. 
190d0 20 2f 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20   /* The default 
190e0 73 61 66 65 74 79 5f 6c 65 76 65 6c 20 66 6f 72  safety_level for
190f0 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
19100 73 65 20 69 73 20 46 55 4c 4c 3b 20 66 6f 72 20  se is FULL; for 
19110 74 68 65 20 74 65 6d 70 0a 20 20 2a 2a 20 64 61  the temp.  ** da
19120 74 61 62 61 73 65 20 69 74 20 69 73 20 4f 46 46  tabase it is OFF
19130 2e 20 54 68 69 73 20 6d 61 74 63 68 65 73 20 74  . This matches t
19140 68 65 20 70 61 67 65 72 20 6c 61 79 65 72 20 64  he pager layer d
19150 65 66 61 75 6c 74 73 2e 20 20 0a 20 20 2a 2f 0a  efaults.  .  */.
19160 20 20 64 62 2d 3e 61 44 62 5b 30 5d 2e 7a 44 62    db->aDb[0].zDb
19170 53 4e 61 6d 65 20 3d 20 22 6d 61 69 6e 22 3b 0a  SName = "main";.
19180 20 20 64 62 2d 3e 61 44 62 5b 30 5d 2e 73 61 66    db->aDb[0].saf
19190 65 74 79 5f 6c 65 76 65 6c 20 3d 20 53 51 4c 49  ety_level = SQLI
191a0 54 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48  TE_DEFAULT_SYNCH
191b0 52 4f 4e 4f 55 53 2b 31 3b 0a 20 20 64 62 2d 3e  RONOUS+1;.  db->
191c0 61 44 62 5b 31 5d 2e 7a 44 62 53 4e 61 6d 65 20  aDb[1].zDbSName 
191d0 3d 20 22 74 65 6d 70 22 3b 0a 20 20 64 62 2d 3e  = "temp";.  db->
191e0 61 44 62 5b 31 5d 2e 73 61 66 65 74 79 5f 6c 65  aDb[1].safety_le
191f0 76 65 6c 20 3d 20 50 41 47 45 52 5f 53 59 4e 43  vel = PAGER_SYNC
19200 48 52 4f 4e 4f 55 53 5f 4f 46 46 3b 0a 0a 20 20  HRONOUS_OFF;..  
19210 64 62 2d 3e 6d 61 67 69 63 20 3d 20 53 51 4c 49  db->magic = SQLI
19220 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 3b 0a 20  TE_MAGIC_OPEN;. 
19230 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46   if( db->mallocF
19240 61 69 6c 65 64 20 29 7b 0a 20 20 20 20 67 6f 74  ailed ){.    got
19250 6f 20 6f 70 65 6e 64 62 5f 6f 75 74 3b 0a 20 20  o opendb_out;.  
19260 7d 0a 0a 20 20 2f 2a 20 52 65 67 69 73 74 65 72  }..  /* Register
19270 20 61 6c 6c 20 62 75 69 6c 74 2d 69 6e 20 66 75   all built-in fu
19280 6e 63 74 69 6f 6e 73 2c 20 62 75 74 20 64 6f 20  nctions, but do 
19290 6e 6f 74 20 61 74 74 65 6d 70 74 20 74 6f 20 72  not attempt to r
192a0 65 61 64 20 74 68 65 0a 20 20 2a 2a 20 64 61 74  ead the.  ** dat
192b0 61 62 61 73 65 20 73 63 68 65 6d 61 20 79 65 74  abase schema yet
192c0 2e 20 54 68 69 73 20 69 73 20 64 65 6c 61 79 65  . This is delaye
192d0 64 20 75 6e 74 69 6c 20 74 68 65 20 66 69 72 73  d until the firs
192e0 74 20 74 69 6d 65 20 74 68 65 20 64 61 74 61 62  t time the datab
192f0 61 73 65 0a 20 20 2a 2a 20 69 73 20 61 63 63 65  ase.  ** is acce
19300 73 73 65 64 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c  ssed..  */.  sql
19310 69 74 65 33 45 72 72 6f 72 28 64 62 2c 20 53 51  ite3Error(db, SQ
19320 4c 49 54 45 5f 4f 4b 29 3b 0a 20 20 73 71 6c 69  LITE_OK);.  sqli
19330 74 65 33 52 65 67 69 73 74 65 72 50 65 72 43 6f  te3RegisterPerCo
19340 6e 6e 65 63 74 69 6f 6e 42 75 69 6c 74 69 6e 46  nnectionBuiltinF
19350 75 6e 63 74 69 6f 6e 73 28 64 62 29 3b 0a 20 20  unctions(db);.  
19360 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 65 72 72  rc = sqlite3_err
19370 63 6f 64 65 28 64 62 29 3b 0a 0a 23 69 66 64 65  code(db);..#ifde
19380 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
19390 46 54 53 35 0a 20 20 2f 2a 20 52 65 67 69 73 74  FTS5.  /* Regist
193a0 65 72 20 61 6e 79 20 62 75 69 6c 74 2d 69 6e 20  er any built-in 
193b0 46 54 53 35 20 6d 6f 64 75 6c 65 20 62 65 66 6f  FTS5 module befo
193c0 72 65 20 6c 6f 61 64 69 6e 67 20 74 68 65 20 61  re loading the a
193d0 75 74 6f 6d 61 74 69 63 0a 20 20 2a 2a 20 65 78  utomatic.  ** ex
193e0 74 65 6e 73 69 6f 6e 73 2e 20 54 68 69 73 20 61  tensions. This a
193f0 6c 6c 6f 77 73 20 61 75 74 6f 6d 61 74 69 63 20  llows automatic 
19400 65 78 74 65 6e 73 69 6f 6e 73 20 74 6f 20 72 65  extensions to re
19410 67 69 73 74 65 72 20 46 54 53 35 20 0a 20 20 2a  gister FTS5 .  *
19420 2a 20 74 6f 6b 65 6e 69 7a 65 72 73 20 61 6e 64  * tokenizers and
19430 20 61 75 78 69 6c 69 61 72 79 20 66 75 6e 63 74   auxiliary funct
19440 69 6f 6e 73 2e 20 20 2a 2f 0a 20 20 69 66 28 20  ions.  */.  if( 
19450 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65  !db->mallocFaile
19460 64 20 26 26 20 72 63 3d 3d 53 51 4c 49 54 45 5f  d && rc==SQLITE_
19470 4f 4b 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  OK ){.    rc = s
19480 71 6c 69 74 65 33 46 74 73 35 49 6e 69 74 28 64  qlite3Fts5Init(d
19490 62 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a  b);.  }.#endif..
194a0 20 20 2f 2a 20 4c 6f 61 64 20 61 75 74 6f 6d 61    /* Load automa
194b0 74 69 63 20 65 78 74 65 6e 73 69 6f 6e 73 20 2d  tic extensions -
194c0 20 65 78 74 65 6e 73 69 6f 6e 73 20 74 68 61 74   extensions that
194d0 20 68 61 76 65 20 62 65 65 6e 20 72 65 67 69 73   have been regis
194e0 74 65 72 65 64 0a 20 20 2a 2a 20 75 73 69 6e 67  tered.  ** using
194f0 20 74 68 65 20 73 71 6c 69 74 65 33 5f 61 75 74   the sqlite3_aut
19500 6f 6d 61 74 69 63 5f 65 78 74 65 6e 73 69 6f 6e  omatic_extension
19510 28 29 20 41 50 49 2e 0a 20 20 2a 2f 0a 20 20 69  () API..  */.  i
19520 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
19530 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 41   ){.    sqlite3A
19540 75 74 6f 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e  utoLoadExtension
19550 73 28 64 62 29 3b 0a 20 20 20 20 72 63 20 3d 20  s(db);.    rc = 
19560 73 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 28  sqlite3_errcode(
19570 64 62 29 3b 0a 20 20 20 20 69 66 28 20 72 63 21  db);.    if( rc!
19580 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
19590 20 20 20 20 67 6f 74 6f 20 6f 70 65 6e 64 62 5f      goto opendb_
195a0 6f 75 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a  out;.    }.  }..
195b0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
195c0 41 42 4c 45 5f 46 54 53 31 0a 20 20 69 66 28 20  ABLE_FTS1.  if( 
195d0 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65  !db->mallocFaile
195e0 64 20 29 7b 0a 20 20 20 20 65 78 74 65 72 6e 20  d ){.    extern 
195f0 69 6e 74 20 73 71 6c 69 74 65 33 46 74 73 31 49  int sqlite3Fts1I
19600 6e 69 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 20  nit(sqlite3*);. 
19610 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 46     rc = sqlite3F
19620 74 73 31 49 6e 69 74 28 64 62 29 3b 0a 20 20 7d  ts1Init(db);.  }
19630 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
19640 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
19650 53 32 0a 20 20 69 66 28 20 21 64 62 2d 3e 6d 61  S2.  if( !db->ma
19660 6c 6c 6f 63 46 61 69 6c 65 64 20 26 26 20 72 63  llocFailed && rc
19670 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
19680 20 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71     extern int sq
19690 6c 69 74 65 33 46 74 73 32 49 6e 69 74 28 73 71  lite3Fts2Init(sq
196a0 6c 69 74 65 33 2a 29 3b 0a 20 20 20 20 72 63 20  lite3*);.    rc 
196b0 3d 20 73 71 6c 69 74 65 33 46 74 73 32 49 6e 69  = sqlite3Fts2Ini
196c0 74 28 64 62 29 3b 0a 20 20 7d 0a 23 65 6e 64 69  t(db);.  }.#endi
196d0 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
196e0 5f 45 4e 41 42 4c 45 5f 46 54 53 33 20 2f 2a 20  _ENABLE_FTS3 /* 
196f0 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65  automatically de
19700 66 69 6e 65 64 20 62 79 20 53 51 4c 49 54 45 5f  fined by SQLITE_
19710 45 4e 41 42 4c 45 5f 46 54 53 34 20 2a 2f 0a 20  ENABLE_FTS4 */. 
19720 20 69 66 28 20 21 64 62 2d 3e 6d 61 6c 6c 6f 63   if( !db->malloc
19730 46 61 69 6c 65 64 20 26 26 20 72 63 3d 3d 53 51  Failed && rc==SQ
19740 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72  LITE_OK ){.    r
19750 63 20 3d 20 73 71 6c 69 74 65 33 46 74 73 33 49  c = sqlite3Fts3I
19760 6e 69 74 28 64 62 29 3b 0a 20 20 7d 0a 23 65 6e  nit(db);.  }.#en
19770 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
19780 54 45 5f 45 4e 41 42 4c 45 5f 49 43 55 0a 20 20  TE_ENABLE_ICU.  
19790 69 66 28 20 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46  if( !db->mallocF
197a0 61 69 6c 65 64 20 26 26 20 72 63 3d 3d 53 51 4c  ailed && rc==SQL
197b0 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 63  ITE_OK ){.    rc
197c0 20 3d 20 73 71 6c 69 74 65 33 49 63 75 49 6e 69   = sqlite3IcuIni
197d0 74 28 64 62 29 3b 0a 20 20 7d 0a 23 65 6e 64 69  t(db);.  }.#endi
197e0 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
197f0 5f 45 4e 41 42 4c 45 5f 52 54 52 45 45 0a 20 20  _ENABLE_RTREE.  
19800 69 66 28 20 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46  if( !db->mallocF
19810 61 69 6c 65 64 20 26 26 20 72 63 3d 3d 53 51 4c  ailed && rc==SQL
19820 49 54 45 5f 4f 4b 29 7b 0a 20 20 20 20 72 63 20  ITE_OK){.    rc 
19830 3d 20 73 71 6c 69 74 65 33 52 74 72 65 65 49 6e  = sqlite3RtreeIn
19840 69 74 28 64 62 29 3b 0a 20 20 7d 0a 23 65 6e 64  it(db);.  }.#end
19850 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
19860 45 5f 45 4e 41 42 4c 45 5f 44 42 53 54 41 54 5f  E_ENABLE_DBSTAT_
19870 56 54 41 42 0a 20 20 69 66 28 20 21 64 62 2d 3e  VTAB.  if( !db->
19880 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 26 26 20  mallocFailed && 
19890 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 29 7b 0a  rc==SQLITE_OK){.
198a0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
198b0 44 62 73 74 61 74 52 65 67 69 73 74 65 72 28 64  DbstatRegister(d
198c0 62 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a  b);.  }.#endif..
198d0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
198e0 41 42 4c 45 5f 4a 53 4f 4e 31 0a 20 20 69 66 28  ABLE_JSON1.  if(
198f0 20 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c   !db->mallocFail
19900 65 64 20 26 26 20 72 63 3d 3d 53 51 4c 49 54 45  ed && rc==SQLITE
19910 5f 4f 4b 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  _OK){.    rc = s
19920 71 6c 69 74 65 33 4a 73 6f 6e 31 49 6e 69 74 28  qlite3Json1Init(
19930 64 62 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a  db);.  }.#endif.
19940 0a 20 20 2f 2a 20 2d 44 53 51 4c 49 54 45 5f 44  .  /* -DSQLITE_D
19950 45 46 41 55 4c 54 5f 4c 4f 43 4b 49 4e 47 5f 4d  EFAULT_LOCKING_M
19960 4f 44 45 3d 31 20 6d 61 6b 65 73 20 45 58 43 4c  ODE=1 makes EXCL
19970 55 53 49 56 45 20 74 68 65 20 64 65 66 61 75 6c  USIVE the defaul
19980 74 20 6c 6f 63 6b 69 6e 67 0a 20 20 2a 2a 20 6d  t locking.  ** m
19990 6f 64 65 2e 20 20 2d 44 53 51 4c 49 54 45 5f 44  ode.  -DSQLITE_D
199a0 45 46 41 55 4c 54 5f 4c 4f 43 4b 49 4e 47 5f 4d  EFAULT_LOCKING_M
199b0 4f 44 45 3d 30 20 6d 61 6b 65 20 4e 4f 52 4d 41  ODE=0 make NORMA
199c0 4c 20 74 68 65 20 64 65 66 61 75 6c 74 20 6c 6f  L the default lo
199d0 63 6b 69 6e 67 0a 20 20 2a 2a 20 6d 6f 64 65 2e  cking.  ** mode.
199e0 20 20 44 6f 69 6e 67 20 6e 6f 74 68 69 6e 67 20    Doing nothing 
199f0 61 74 20 61 6c 6c 20 61 6c 73 6f 20 6d 61 6b 65  at all also make
19a00 73 20 4e 4f 52 4d 41 4c 20 74 68 65 20 64 65 66  s NORMAL the def
19a10 61 75 6c 74 2e 0a 20 20 2a 2f 0a 23 69 66 64 65  ault..  */.#ifde
19a20 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  f SQLITE_DEFAULT
19a30 5f 4c 4f 43 4b 49 4e 47 5f 4d 4f 44 45 0a 20 20  _LOCKING_MODE.  
19a40 64 62 2d 3e 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65  db->dfltLockMode
19a50 20 3d 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c   = SQLITE_DEFAUL
19a60 54 5f 4c 4f 43 4b 49 4e 47 5f 4d 4f 44 45 3b 0a  T_LOCKING_MODE;.
19a70 20 20 73 71 6c 69 74 65 33 50 61 67 65 72 4c 6f    sqlite3PagerLo
19a80 63 6b 69 6e 67 4d 6f 64 65 28 73 71 6c 69 74 65  ckingMode(sqlite
19a90 33 42 74 72 65 65 50 61 67 65 72 28 64 62 2d 3e  3BtreePager(db->
19aa0 61 44 62 5b 30 5d 2e 70 42 74 29 2c 0a 20 20 20  aDb[0].pBt),.   
19ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ac0 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 44 45         SQLITE_DE
19ad0 46 41 55 4c 54 5f 4c 4f 43 4b 49 4e 47 5f 4d 4f  FAULT_LOCKING_MO
19ae0 44 45 29 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 69  DE);.#endif..  i
19af0 66 28 20 72 63 20 29 20 73 71 6c 69 74 65 33 45  f( rc ) sqlite3E
19b00 72 72 6f 72 28 64 62 2c 20 72 63 29 3b 0a 0a 20  rror(db, rc);.. 
19b10 20 2f 2a 20 45 6e 61 62 6c 65 20 74 68 65 20 6c   /* Enable the l
19b20 6f 6f 6b 61 73 69 64 65 2d 6d 61 6c 6c 6f 63 20  ookaside-malloc 
19b30 73 75 62 73 79 73 74 65 6d 20 2a 2f 0a 20 20 73  subsystem */.  s
19b40 65 74 75 70 4c 6f 6f 6b 61 73 69 64 65 28 64 62  etupLookaside(db
19b50 2c 20 30 2c 20 73 71 6c 69 74 65 33 47 6c 6f 62  , 0, sqlite3Glob
19b60 61 6c 43 6f 6e 66 69 67 2e 73 7a 4c 6f 6f 6b 61  alConfig.szLooka
19b70 73 69 64 65 2c 0a 20 20 20 20 20 20 20 20 20 20  side,.          
19b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71                sq
19b90 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69  lite3GlobalConfi
19ba0 67 2e 6e 4c 6f 6f 6b 61 73 69 64 65 29 3b 0a 0a  g.nLookaside);..
19bb0 20 20 73 71 6c 69 74 65 33 5f 77 61 6c 5f 61 75    sqlite3_wal_au
19bc0 74 6f 63 68 65 63 6b 70 6f 69 6e 74 28 64 62 2c  tocheckpoint(db,
19bd0 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
19be0 57 41 4c 5f 41 55 54 4f 43 48 45 43 4b 50 4f 49  WAL_AUTOCHECKPOI
19bf0 4e 54 29 3b 0a 0a 6f 70 65 6e 64 62 5f 6f 75 74  NT);..opendb_out
19c00 3a 0a 20 20 69 66 28 20 64 62 20 29 7b 0a 20 20  :.  if( db ){.  
19c10 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6d 75    assert( db->mu
19c20 74 65 78 21 3d 30 20 7c 7c 20 69 73 54 68 72 65  tex!=0 || isThre
19c30 61 64 73 61 66 65 3d 3d 30 0a 20 20 20 20 20 20  adsafe==0.      
19c40 20 20 20 20 20 7c 7c 20 73 71 6c 69 74 65 33 47       || sqlite3G
19c50 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 62 46 75 6c  lobalConfig.bFul
19c60 6c 4d 75 74 65 78 3d 3d 30 20 29 3b 0a 20 20 20  lMutex==0 );.   
19c70 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c   sqlite3_mutex_l
19c80 65 61 76 65 28 64 62 2d 3e 6d 75 74 65 78 29 3b  eave(db->mutex);
19c90 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69  .  }.  rc = sqli
19ca0 74 65 33 5f 65 72 72 63 6f 64 65 28 64 62 29 3b  te3_errcode(db);
19cb0 0a 20 20 61 73 73 65 72 74 28 20 64 62 21 3d 30  .  assert( db!=0
19cc0 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4e   || rc==SQLITE_N
19cd0 4f 4d 45 4d 20 29 3b 0a 20 20 69 66 28 20 72 63  OMEM );.  if( rc
19ce0 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29  ==SQLITE_NOMEM )
19cf0 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 63 6c  {.    sqlite3_cl
19d00 6f 73 65 28 64 62 29 3b 0a 20 20 20 20 64 62 20  ose(db);.    db 
19d10 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  = 0;.  }else if(
19d20 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
19d30 7b 0a 20 20 20 20 64 62 2d 3e 6d 61 67 69 63 20  {.    db->magic 
19d40 3d 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 53  = SQLITE_MAGIC_S
19d50 49 43 4b 3b 0a 20 20 7d 0a 23 69 66 20 64 65 66  ICK;.  }.#if def
19d60 69 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f 29 20  ined(__APPLE__) 
19d70 26 26 20 45 4e 41 42 4c 45 5f 46 4f 52 43 45 5f  && ENABLE_FORCE_
19d80 57 41 4c 0a 20 20 69 66 28 20 64 62 20 26 26 20  WAL.  if( db && 
19d90 21 72 63 20 29 7b 0a 20 20 20 20 69 66 20 28 28  !rc ){.    if ((
19da0 30 20 3d 3d 20 61 63 63 65 73 73 28 22 2f 76 61  0 == access("/va
19db0 72 2f 64 62 2f 65 6e 61 62 6c 65 46 6f 72 63 65  r/db/enableForce
19dc0 57 41 4c 22 2c 20 52 5f 4f 4b 29 29 29 20 7b 0a  WAL", R_OK))) {.
19dd0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
19de0 42 55 47 0a 20 20 20 20 20 20 66 70 72 69 6e 74  BUG.      fprint
19df0 66 28 73 74 64 65 72 72 2c 20 22 53 51 4c 69 74  f(stderr, "SQLit
19e00 65 20 57 41 4c 20 6a 6f 75 72 6e 61 6c 5f 6d 6f  e WAL journal_mo
19e10 64 65 20 45 4e 41 42 4c 45 44 20 62 79 20 64 65  de ENABLED by de
19e20 66 61 75 6c 74 2e 5c 6e 22 29 3b 0a 23 65 6e 64  fault.\n");.#end
19e30 69 66 0a 20 20 20 20 20 20 0a 20 20 20 20 20 20  if.      .      
19e40 73 71 6c 69 74 65 33 5f 65 78 65 63 28 64 62 2c  sqlite3_exec(db,
19e50 20 22 70 72 61 67 6d 61 20 6a 6f 75 72 6e 61 6c   "pragma journal
19e60 5f 6d 6f 64 65 3d 77 61 6c 22 2c 20 4e 55 4c 4c  _mode=wal", NULL
19e70 2c 20 4e 55 4c 4c 2c 20 4e 55 4c 4c 29 3b 0a 23  , NULL, NULL);.#
19e80 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
19e90 55 47 0a 2f 2f 20 20 20 20 7d 20 65 6c 73 65 20  UG.//    } else 
19ea0 7b 0a 2f 2f 20 20 20 20 20 20 66 70 72 69 6e 74  {.//      fprint
19eb0 66 28 73 74 64 65 72 72 2c 20 22 53 51 4c 69 74  f(stderr, "SQLit
19ec0 65 20 57 41 4c 20 6a 6f 75 72 6e 61 6c 5f 6d 6f  e WAL journal_mo
19ed0 64 65 20 4e 4f 54 20 45 4e 41 42 4c 45 44 20 62  de NOT ENABLED b
19ee0 79 20 64 65 66 61 75 6c 74 2e 5c 6e 22 29 3b 0a  y default.\n");.
19ef0 23 65 6e 64 69 66 0a 20 20 20 20 7d 0a 20 20 7d  #endif.    }.  }
19f00 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69  .#endif.#if defi
19f10 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
19f20 45 5f 41 55 54 4f 5f 50 52 4f 46 49 4c 45 29 0a  E_AUTO_PROFILE).
19f30 20 20 69 66 28 20 64 62 20 26 26 20 21 72 63 20    if( db && !rc 
19f40 29 7b 0a 20 20 20 20 65 6e 61 62 6c 65 41 75 74  ){.    enableAut
19f50 6f 4c 6f 67 67 69 6e 67 28 64 62 29 3b 0a 20 20  oLogging(db);.  
19f60 7d 0a 23 65 6e 64 69 66 0a 20 20 2a 70 70 44 62  }.#endif.  *ppDb
19f70 20 3d 20 64 62 3b 0a 23 69 66 64 65 66 20 53 51   = db;.#ifdef SQ
19f80 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 51 4c 52  LITE_ENABLE_SQLR
19f90 52 0a 20 20 53 52 52 65 63 4f 70 65 6e 28 64 62  R.  SRRecOpen(db
19fa0 2c 20 7a 46 69 6c 65 6e 61 6d 65 2c 20 66 6c 61  , zFilename, fla
19fb0 67 73 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64  gs);.#endif.#ifd
19fc0 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
19fd0 5f 53 51 4c 4c 4f 47 0a 20 20 69 66 28 20 73 71  _SQLLOG.  if( sq
19fe0 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69  lite3GlobalConfi
19ff0 67 2e 78 53 71 6c 6c 6f 67 20 29 7b 0a 20 20 20  g.xSqllog ){.   
1a000 20 2f 2a 20 4f 70 65 6e 69 6e 67 20 61 20 64 62   /* Opening a db
1a010 20 68 61 6e 64 6c 65 2e 20 46 6f 75 72 74 68 20   handle. Fourth 
1a020 70 61 72 61 6d 65 74 65 72 20 69 73 20 70 61 73  parameter is pas
1a030 73 65 64 20 30 2e 20 2a 2f 0a 20 20 20 20 76 6f  sed 0. */.    vo
1a040 69 64 20 2a 70 41 72 67 20 3d 20 73 71 6c 69 74  id *pArg = sqlit
1a050 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 70  e3GlobalConfig.p
1a060 53 71 6c 6c 6f 67 41 72 67 3b 0a 20 20 20 20 73  SqllogArg;.    s
1a070 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66  qlite3GlobalConf
1a080 69 67 2e 78 53 71 6c 6c 6f 67 28 70 41 72 67 2c  ig.xSqllog(pArg,
1a090 20 64 62 2c 20 7a 46 69 6c 65 6e 61 6d 65 2c 20   db, zFilename, 
1a0a0 30 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 23  0);.  }.#endif.#
1a0b0 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
1a0c0 45 5f 48 41 53 5f 43 4f 44 45 43 29 0a 20 20 69  E_HAS_CODEC).  i
1a0d0 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
1a0e0 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68   ){.    const ch
1a0f0 61 72 20 2a 7a 4b 65 79 3b 0a 20 20 20 20 69 66  ar *zKey;.    if
1a100 28 20 28 7a 4b 65 79 20 3d 20 73 71 6c 69 74 65  ( (zKey = sqlite
1a110 33 5f 75 72 69 5f 70 61 72 61 6d 65 74 65 72 28  3_uri_parameter(
1a120 7a 4f 70 65 6e 2c 20 22 68 65 78 6b 65 79 22 29  zOpen, "hexkey")
1a130 29 21 3d 30 20 26 26 20 7a 4b 65 79 5b 30 5d 20  )!=0 && zKey[0] 
1a140 29 7b 0a 20 20 20 20 20 20 75 38 20 69 42 79 74  ){.      u8 iByt
1a150 65 3b 0a 20 20 20 20 20 20 69 6e 74 20 69 3b 0a  e;.      int i;.
1a160 20 20 20 20 20 20 63 68 61 72 20 7a 44 65 63 6f        char zDeco
1a170 64 65 64 5b 34 30 5d 3b 0a 20 20 20 20 20 20 66  ded[40];.      f
1a180 6f 72 28 69 3d 30 2c 20 69 42 79 74 65 3d 30 3b  or(i=0, iByte=0;
1a190 20 69 3c 73 69 7a 65 6f 66 28 7a 44 65 63 6f 64   i<sizeof(zDecod
1a1a0 65 64 29 2a 32 20 26 26 20 73 71 6c 69 74 65 33  ed)*2 && sqlite3
1a1b0 49 73 78 64 69 67 69 74 28 7a 4b 65 79 5b 69 5d  Isxdigit(zKey[i]
1a1c0 29 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20  ); i++){.       
1a1d0 20 69 42 79 74 65 20 3d 20 28 69 42 79 74 65 3c   iByte = (iByte<
1a1e0 3c 34 29 20 2b 20 73 71 6c 69 74 65 33 48 65 78  <4) + sqlite3Hex
1a1f0 54 6f 49 6e 74 28 7a 4b 65 79 5b 69 5d 29 3b 0a  ToInt(zKey[i]);.
1a200 20 20 20 20 20 20 20 20 69 66 28 20 28 69 26 31          if( (i&1
1a210 29 21 3d 30 20 29 20 7a 44 65 63 6f 64 65 64 5b  )!=0 ) zDecoded[
1a220 69 2f 32 5d 20 3d 20 69 42 79 74 65 3b 0a 20 20  i/2] = iByte;.  
1a230 20 20 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69      }.      sqli
1a240 74 65 33 5f 6b 65 79 5f 76 32 28 64 62 2c 20 30  te3_key_v2(db, 0
1a250 2c 20 7a 44 65 63 6f 64 65 64 2c 20 69 2f 32 29  , zDecoded, i/2)
1a260 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
1a270 28 7a 4b 65 79 20 3d 20 73 71 6c 69 74 65 33 5f  (zKey = sqlite3_
1a280 75 72 69 5f 70 61 72 61 6d 65 74 65 72 28 7a 4f  uri_parameter(zO
1a290 70 65 6e 2c 20 22 6b 65 79 22 29 29 21 3d 30 20  pen, "key"))!=0 
1a2a0 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
1a2b0 5f 6b 65 79 5f 76 32 28 64 62 2c 20 30 2c 20 7a  _key_v2(db, 0, z
1a2c0 4b 65 79 2c 20 73 71 6c 69 74 65 33 53 74 72 6c  Key, sqlite3Strl
1a2d0 65 6e 33 30 28 7a 4b 65 79 29 29 3b 0a 20 20 20  en30(zKey));.   
1a2e0 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20   }.  }.#endif.  
1a2f0 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 4f 70  sqlite3_free(zOp
1a300 65 6e 29 3b 0a 20 20 72 65 74 75 72 6e 20 72 63  en);.  return rc
1a310 20 26 20 30 78 66 66 3b 0a 7d 0a 0a 2f 2a 0a 2a   & 0xff;.}../*.*
1a320 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20 64 61 74  * Open a new dat
1a330 61 62 61 73 65 20 68 61 6e 64 6c 65 2e 0a 2a 2f  abase handle..*/
1a340 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 6f 70 65  .int sqlite3_ope
1a350 6e 28 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  n(.  const char 
1a360 2a 7a 46 69 6c 65 6e 61 6d 65 2c 20 0a 20 20 73  *zFilename, .  s
1a370 71 6c 69 74 65 33 20 2a 2a 70 70 44 62 20 0a 29  qlite3 **ppDb .)
1a380 7b 0a 20 20 72 65 74 75 72 6e 20 6f 70 65 6e 44  {.  return openD
1a390 61 74 61 62 61 73 65 28 7a 46 69 6c 65 6e 61 6d  atabase(zFilenam
1a3a0 65 2c 20 70 70 44 62 2c 0a 20 20 20 20 20 20 20  e, ppDb,.       
1a3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
1a3c0 51 4c 49 54 45 5f 4f 50 45 4e 5f 52 45 41 44 57  QLITE_OPEN_READW
1a3d0 52 49 54 45 20 7c 20 53 51 4c 49 54 45 5f 4f 50  RITE | SQLITE_OP
1a3e0 45 4e 5f 43 52 45 41 54 45 2c 20 30 29 3b 0a 7d  EN_CREATE, 0);.}
1a3f0 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 6f 70 65  .int sqlite3_ope
1a400 6e 5f 76 32 28 0a 20 20 63 6f 6e 73 74 20 63 68  n_v2(.  const ch
1a410 61 72 20 2a 66 69 6c 65 6e 61 6d 65 2c 20 20 20  ar *filename,   
1a420 2f 2a 20 44 61 74 61 62 61 73 65 20 66 69 6c 65  /* Database file
1a430 6e 61 6d 65 20 28 55 54 46 2d 38 29 20 2a 2f 0a  name (UTF-8) */.
1a440 20 20 73 71 6c 69 74 65 33 20 2a 2a 70 70 44 62    sqlite3 **ppDb
1a450 2c 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 55 54  ,         /* OUT
1a460 3a 20 53 51 4c 69 74 65 20 64 62 20 68 61 6e 64  : SQLite db hand
1a470 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 66 6c 61 67  le */.  int flag
1a480 73 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s,              
1a490 2f 2a 20 46 6c 61 67 73 20 2a 2f 0a 20 20 63 6f  /* Flags */.  co
1a4a0 6e 73 74 20 63 68 61 72 20 2a 7a 56 66 73 20 20  nst char *zVfs  
1a4b0 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
1a4c0 20 56 46 53 20 6d 6f 64 75 6c 65 20 74 6f 20 75   VFS module to u
1a4d0 73 65 20 2a 2f 0a 29 7b 0a 20 20 72 65 74 75 72  se */.){.  retur
1a4e0 6e 20 6f 70 65 6e 44 61 74 61 62 61 73 65 28 66  n openDatabase(f
1a4f0 69 6c 65 6e 61 6d 65 2c 20 70 70 44 62 2c 20 28  ilename, ppDb, (
1a500 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 66 6c 61  unsigned int)fla
1a510 67 73 2c 20 7a 56 66 73 29 3b 0a 7d 0a 0a 23 69  gs, zVfs);.}..#i
1a520 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
1a530 54 5f 55 54 46 31 36 0a 2f 2a 0a 2a 2a 20 4f 70  T_UTF16./*.** Op
1a540 65 6e 20 61 20 6e 65 77 20 64 61 74 61 62 61 73  en a new databas
1a550 65 20 68 61 6e 64 6c 65 2e 0a 2a 2f 0a 69 6e 74  e handle..*/.int
1a560 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 31 36 28   sqlite3_open16(
1a570 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a  .  const void *z
1a580 46 69 6c 65 6e 61 6d 65 2c 20 0a 20 20 73 71 6c  Filename, .  sql
1a590 69 74 65 33 20 2a 2a 70 70 44 62 0a 29 7b 0a 20  ite3 **ppDb.){. 
1a5a0 20 63 68 61 72 20 63 6f 6e 73 74 20 2a 7a 46 69   char const *zFi
1a5b0 6c 65 6e 61 6d 65 38 3b 20 20 20 2f 2a 20 7a 46  lename8;   /* zF
1a5c0 69 6c 65 6e 61 6d 65 20 65 6e 63 6f 64 65 64 20  ilename encoded 
1a5d0 69 6e 20 55 54 46 2d 38 20 69 6e 73 74 65 61 64  in UTF-8 instead
1a5e0 20 6f 66 20 55 54 46 2d 31 36 20 2a 2f 0a 20 20   of UTF-16 */.  
1a5f0 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70  sqlite3_value *p
1a600 56 61 6c 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a  Val;.  int rc;..
1a610 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
1a620 41 42 4c 45 5f 41 50 49 5f 41 52 4d 4f 52 0a 20  ABLE_API_ARMOR. 
1a630 20 69 66 28 20 70 70 44 62 3d 3d 30 20 29 20 72   if( ppDb==0 ) r
1a640 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53  eturn SQLITE_MIS
1a650 55 53 45 5f 42 4b 50 54 3b 0a 23 65 6e 64 69 66  USE_BKPT;.#endif
1a660 0a 20 20 2a 70 70 44 62 20 3d 20 30 3b 0a 23 69  .  *ppDb = 0;.#i
1a670 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
1a680 54 5f 41 55 54 4f 49 4e 49 54 0a 20 20 72 63 20  T_AUTOINIT.  rc 
1a690 3d 20 73 71 6c 69 74 65 33 5f 69 6e 69 74 69 61  = sqlite3_initia
1a6a0 6c 69 7a 65 28 29 3b 0a 20 20 69 66 28 20 72 63  lize();.  if( rc
1a6b0 20 29 20 72 65 74 75 72 6e 20 72 63 3b 0a 23 65   ) return rc;.#e
1a6c0 6e 64 69 66 0a 20 20 69 66 28 20 7a 46 69 6c 65  ndif.  if( zFile
1a6d0 6e 61 6d 65 3d 3d 30 20 29 20 7a 46 69 6c 65 6e  name==0 ) zFilen
1a6e0 61 6d 65 20 3d 20 22 5c 30 30 30 5c 30 30 30 22  ame = "\000\000"
1a6f0 3b 0a 20 20 70 56 61 6c 20 3d 20 73 71 6c 69 74  ;.  pVal = sqlit
1a700 65 33 56 61 6c 75 65 4e 65 77 28 30 29 3b 0a 20  e3ValueNew(0);. 
1a710 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74   sqlite3ValueSet
1a720 53 74 72 28 70 56 61 6c 2c 20 2d 31 2c 20 7a 46  Str(pVal, -1, zF
1a730 69 6c 65 6e 61 6d 65 2c 20 53 51 4c 49 54 45 5f  ilename, SQLITE_
1a740 55 54 46 31 36 4e 41 54 49 56 45 2c 20 53 51 4c  UTF16NATIVE, SQL
1a750 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 7a  ITE_STATIC);.  z
1a760 46 69 6c 65 6e 61 6d 65 38 20 3d 20 73 71 6c 69  Filename8 = sqli
1a770 74 65 33 56 61 6c 75 65 54 65 78 74 28 70 56 61  te3ValueText(pVa
1a780 6c 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 29 3b  l, SQLITE_UTF8);
1a790 0a 20 20 69 66 28 20 7a 46 69 6c 65 6e 61 6d 65  .  if( zFilename
1a7a0 38 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 6f 70  8 ){.    rc = op
1a7b0 65 6e 44 61 74 61 62 61 73 65 28 7a 46 69 6c 65  enDatabase(zFile
1a7c0 6e 61 6d 65 38 2c 20 70 70 44 62 2c 0a 20 20 20  name8, ppDb,.   
1a7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a7e0 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 52     SQLITE_OPEN_R
1a7f0 45 41 44 57 52 49 54 45 20 7c 20 53 51 4c 49 54  EADWRITE | SQLIT
1a800 45 5f 4f 50 45 4e 5f 43 52 45 41 54 45 2c 20 30  E_OPEN_CREATE, 0
1a810 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 2a  );.    assert( *
1a820 70 70 44 62 20 7c 7c 20 72 63 3d 3d 53 51 4c 49  ppDb || rc==SQLI
1a830 54 45 5f 4e 4f 4d 45 4d 20 29 3b 0a 20 20 20 20  TE_NOMEM );.    
1a840 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
1a850 4b 20 26 26 20 21 44 62 48 61 73 50 72 6f 70 65  K && !DbHasPrope
1a860 72 74 79 28 2a 70 70 44 62 2c 20 30 2c 20 44 42  rty(*ppDb, 0, DB
1a870 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 29 20 29  _SchemaLoaded) )
1a880 7b 0a 20 20 20 20 20 20 53 43 48 45 4d 41 5f 45  {.      SCHEMA_E
1a890 4e 43 28 2a 70 70 44 62 29 20 3d 20 45 4e 43 28  NC(*ppDb) = ENC(
1a8a0 2a 70 70 44 62 29 20 3d 20 53 51 4c 49 54 45 5f  *ppDb) = SQLITE_
1a8b0 55 54 46 31 36 4e 41 54 49 56 45 3b 0a 20 20 20  UTF16NATIVE;.   
1a8c0 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
1a8d0 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45  rc = SQLITE_NOME
1a8e0 4d 5f 42 4b 50 54 3b 0a 20 20 7d 0a 20 20 73 71  M_BKPT;.  }.  sq
1a8f0 6c 69 74 65 33 56 61 6c 75 65 46 72 65 65 28 70  lite3ValueFree(p
1a900 56 61 6c 29 3b 0a 0a 20 20 72 65 74 75 72 6e 20  Val);..  return 
1a910 72 63 20 26 20 30 78 66 66 3b 0a 7d 0a 23 65 6e  rc & 0xff;.}.#en
1a920 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
1a930 49 54 5f 55 54 46 31 36 20 2a 2f 0a 0a 2f 2a 0a  IT_UTF16 */../*.
1a940 2a 2a 20 52 65 67 69 73 74 65 72 20 61 20 6e 65  ** Register a ne
1a950 77 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  w collation sequ
1a960 65 6e 63 65 20 77 69 74 68 20 74 68 65 20 64 61  ence with the da
1a970 74 61 62 61 73 65 20 68 61 6e 64 6c 65 20 64 62  tabase handle db
1a980 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
1a990 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f  _create_collatio
1a9a0 6e 28 0a 20 20 73 71 6c 69 74 65 33 2a 20 64 62  n(.  sqlite3* db
1a9b0 2c 20 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  , .  const char 
1a9c0 2a 7a 4e 61 6d 65 2c 20 0a 20 20 69 6e 74 20 65  *zName, .  int e
1a9d0 6e 63 2c 20 0a 20 20 76 6f 69 64 2a 20 70 43 74  nc, .  void* pCt
1a9e0 78 2c 0a 20 20 69 6e 74 28 2a 78 43 6f 6d 70 61  x,.  int(*xCompa
1a9f0 72 65 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f  re)(void*,int,co
1aa00 6e 73 74 20 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f  nst void*,int,co
1aa10 6e 73 74 20 76 6f 69 64 2a 29 0a 29 7b 0a 20 20  nst void*).){.  
1aa20 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33 5f 63  return sqlite3_c
1aa30 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 5f  reate_collation_
1aa40 76 32 28 64 62 2c 20 7a 4e 61 6d 65 2c 20 65 6e  v2(db, zName, en
1aa50 63 2c 20 70 43 74 78 2c 20 78 43 6f 6d 70 61 72  c, pCtx, xCompar
1aa60 65 2c 20 30 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  e, 0);.}../*.** 
1aa70 52 65 67 69 73 74 65 72 20 61 20 6e 65 77 20 63  Register a new c
1aa80 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
1aa90 65 20 77 69 74 68 20 74 68 65 20 64 61 74 61 62  e with the datab
1aaa0 61 73 65 20 68 61 6e 64 6c 65 20 64 62 2e 0a 2a  ase handle db..*
1aab0 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 63 72  /.int sqlite3_cr
1aac0 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 5f 76  eate_collation_v
1aad0 32 28 0a 20 20 73 71 6c 69 74 65 33 2a 20 64 62  2(.  sqlite3* db
1aae0 2c 20 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  , .  const char 
1aaf0 2a 7a 4e 61 6d 65 2c 20 0a 20 20 69 6e 74 20 65  *zName, .  int e
1ab00 6e 63 2c 20 0a 20 20 76 6f 69 64 2a 20 70 43 74  nc, .  void* pCt
1ab10 78 2c 0a 20 20 69 6e 74 28 2a 78 43 6f 6d 70 61  x,.  int(*xCompa
1ab20 72 65 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f  re)(void*,int,co
1ab30 6e 73 74 20 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f  nst void*,int,co
1ab40 6e 73 74 20 76 6f 69 64 2a 29 2c 0a 20 20 76 6f  nst void*),.  vo
1ab50 69 64 28 2a 78 44 65 6c 29 28 76 6f 69 64 2a 29  id(*xDel)(void*)
1ab60 0a 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 23  .){.  int rc;..#
1ab70 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
1ab80 42 4c 45 5f 41 50 49 5f 41 52 4d 4f 52 0a 20 20  BLE_API_ARMOR.  
1ab90 69 66 28 20 21 73 71 6c 69 74 65 33 53 61 66 65  if( !sqlite3Safe
1aba0 74 79 43 68 65 63 6b 4f 6b 28 64 62 29 20 7c 7c  tyCheckOk(db) ||
1abb0 20 7a 4e 61 6d 65 3d 3d 30 20 29 20 72 65 74 75   zName==0 ) retu
1abc0 72 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45  rn SQLITE_MISUSE
1abd0 5f 42 4b 50 54 3b 0a 23 65 6e 64 69 66 0a 20 20  _BKPT;.#endif.  
1abe0 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e  sqlite3_mutex_en
1abf0 74 65 72 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0a  ter(db->mutex);.
1ac00 20 20 61 73 73 65 72 74 28 20 21 64 62 2d 3e 6d    assert( !db->m
1ac10 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20  allocFailed );. 
1ac20 20 72 63 20 3d 20 63 72 65 61 74 65 43 6f 6c 6c   rc = createColl
1ac30 61 74 69 6f 6e 28 64 62 2c 20 7a 4e 61 6d 65 2c  ation(db, zName,
1ac40 20 28 75 38 29 65 6e 63 2c 20 70 43 74 78 2c 20   (u8)enc, pCtx, 
1ac50 78 43 6f 6d 70 61 72 65 2c 20 78 44 65 6c 29 3b  xCompare, xDel);
1ac60 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 41  .  rc = sqlite3A
1ac70 70 69 45 78 69 74 28 64 62 2c 20 72 63 29 3b 0a  piExit(db, rc);.
1ac80 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f    sqlite3_mutex_
1ac90 6c 65 61 76 65 28 64 62 2d 3e 6d 75 74 65 78 29  leave(db->mutex)
1aca0 3b 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d  ;.  return rc;.}
1acb0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
1acc0 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 2f 2a 0a 2a  _OMIT_UTF16./*.*
1acd0 2a 20 52 65 67 69 73 74 65 72 20 61 20 6e 65 77  * Register a new
1ace0 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
1acf0 6e 63 65 20 77 69 74 68 20 74 68 65 20 64 61 74  nce with the dat
1ad00 61 62 61 73 65 20 68 61 6e 64 6c 65 20 64 62 2e  abase handle db.
1ad10 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f  .*/.int sqlite3_
1ad20 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e  create_collation
1ad30 31 36 28 0a 20 20 73 71 6c 69 74 65 33 2a 20 64  16(.  sqlite3* d
1ad40 62 2c 20 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64  b, .  const void
1ad50 20 2a 7a 4e 61 6d 65 2c 0a 20 20 69 6e 74 20 65   *zName,.  int e
1ad60 6e 63 2c 20 0a 20 20 76 6f 69 64 2a 20 70 43 74  nc, .  void* pCt
1ad70 78 2c 0a 20 20 69 6e 74 28 2a 78 43 6f 6d 70 61  x,.  int(*xCompa
1ad80 72 65 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f  re)(void*,int,co
1ad90 6e 73 74 20 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f  nst void*,int,co
1ada0 6e 73 74 20 76 6f 69 64 2a 29 0a 29 7b 0a 20 20  nst void*).){.  
1adb0 69 6e 74 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  int rc = SQLITE_
1adc0 4f 4b 3b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d  OK;.  char *zNam
1add0 65 38 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  e8;..#ifdef SQLI
1ade0 54 45 5f 45 4e 41 42 4c 45 5f 41 50 49 5f 41 52  TE_ENABLE_API_AR
1adf0 4d 4f 52 0a 20 20 69 66 28 20 21 73 71 6c 69 74  MOR.  if( !sqlit
1ae00 65 33 53 61 66 65 74 79 43 68 65 63 6b 4f 6b 28  e3SafetyCheckOk(
1ae10 64 62 29 20 7c 7c 20 7a 4e 61 6d 65 3d 3d 30 20  db) || zName==0 
1ae20 29 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f  ) return SQLITE_
1ae30 4d 49 53 55 53 45 5f 42 4b 50 54 3b 0a 23 65 6e  MISUSE_BKPT;.#en
1ae40 64 69 66 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75  dif.  sqlite3_mu
1ae50 74 65 78 5f 65 6e 74 65 72 28 64 62 2d 3e 6d 75  tex_enter(db->mu
1ae60 74 65 78 29 3b 0a 20 20 61 73 73 65 72 74 28 20  tex);.  assert( 
1ae70 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65  !db->mallocFaile
1ae80 64 20 29 3b 0a 20 20 7a 4e 61 6d 65 38 20 3d 20  d );.  zName8 = 
1ae90 73 71 6c 69 74 65 33 55 74 66 31 36 74 6f 38 28  sqlite3Utf16to8(
1aea0 64 62 2c 20 7a 4e 61 6d 65 2c 20 2d 31 2c 20 53  db, zName, -1, S
1aeb0 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56  QLITE_UTF16NATIV
1aec0 45 29 3b 0a 20 20 69 66 28 20 7a 4e 61 6d 65 38  E);.  if( zName8
1aed0 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 63 72 65   ){.    rc = cre
1aee0 61 74 65 43 6f 6c 6c 61 74 69 6f 6e 28 64 62 2c  ateCollation(db,
1aef0 20 7a 4e 61 6d 65 38 2c 20 28 75 38 29 65 6e 63   zName8, (u8)enc
1af00 2c 20 70 43 74 78 2c 20 78 43 6f 6d 70 61 72 65  , pCtx, xCompare
1af10 2c 20 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  , 0);.    sqlite
1af20 33 44 62 46 72 65 65 28 64 62 2c 20 7a 4e 61 6d  3DbFree(db, zNam
1af30 65 38 29 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20  e8);.  }.  rc = 
1af40 73 71 6c 69 74 65 33 41 70 69 45 78 69 74 28 64  sqlite3ApiExit(d
1af50 62 2c 20 72 63 29 3b 0a 20 20 73 71 6c 69 74 65  b, rc);.  sqlite
1af60 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 64 62  3_mutex_leave(db
1af70 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 72 65 74 75  ->mutex);.  retu
1af80 72 6e 20 72 63 3b 0a 7d 0a 23 65 6e 64 69 66 20  rn rc;.}.#endif 
1af90 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  /* SQLITE_OMIT_U
1afa0 54 46 31 36 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 52  TF16 */../*.** R
1afb0 65 67 69 73 74 65 72 20 61 20 63 6f 6c 6c 61 74  egister a collat
1afc0 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 66 61 63  ion sequence fac
1afd0 74 6f 72 79 20 63 61 6c 6c 62 61 63 6b 20 77 69  tory callback wi
1afe0 74 68 20 74 68 65 20 64 61 74 61 62 61 73 65 20  th the database 
1aff0 68 61 6e 64 6c 65 0a 2a 2a 20 64 62 2e 20 52 65  handle.** db. Re
1b000 70 6c 61 63 65 20 61 6e 79 20 70 72 65 76 69 6f  place any previo
1b010 75 73 6c 79 20 69 6e 73 74 61 6c 6c 65 64 20 63  usly installed c
1b020 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
1b030 65 20 66 61 63 74 6f 72 79 2e 0a 2a 2f 0a 69 6e  e factory..*/.in
1b040 74 20 73 71 6c 69 74 65 33 5f 63 6f 6c 6c 61 74  t sqlite3_collat
1b050 69 6f 6e 5f 6e 65 65 64 65 64 28 0a 20 20 73 71  ion_needed(.  sq
1b060 6c 69 74 65 33 20 2a 64 62 2c 20 0a 20 20 76 6f  lite3 *db, .  vo
1b070 69 64 20 2a 70 43 6f 6c 6c 4e 65 65 64 65 64 41  id *pCollNeededA
1b080 72 67 2c 20 0a 20 20 76 6f 69 64 28 2a 78 43 6f  rg, .  void(*xCo
1b090 6c 6c 4e 65 65 64 65 64 29 28 76 6f 69 64 2a 2c  llNeeded)(void*,
1b0a0 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54 65  sqlite3*,int eTe
1b0b0 78 74 52 65 70 2c 63 6f 6e 73 74 20 63 68 61 72  xtRep,const char
1b0c0 2a 29 0a 29 7b 0a 23 69 66 64 65 66 20 53 51 4c  *).){.#ifdef SQL
1b0d0 49 54 45 5f 45 4e 41 42 4c 45 5f 41 50 49 5f 41  ITE_ENABLE_API_A
1b0e0 52 4d 4f 52 0a 20 20 69 66 28 20 21 73 71 6c 69  RMOR.  if( !sqli
1b0f0 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 4f 6b  te3SafetyCheckOk
1b100 28 64 62 29 20 29 20 72 65 74 75 72 6e 20 53 51  (db) ) return SQ
1b110 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54  LITE_MISUSE_BKPT
1b120 3b 0a 23 65 6e 64 69 66 0a 20 20 73 71 6c 69 74  ;.#endif.  sqlit
1b130 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72 28 64  e3_mutex_enter(d
1b140 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 64 62 2d  b->mutex);.  db-
1b150 3e 78 43 6f 6c 6c 4e 65 65 64 65 64 20 3d 20 78  >xCollNeeded = x
1b160 43 6f 6c 6c 4e 65 65 64 65 64 3b 0a 20 20 64 62  CollNeeded;.  db
1b170 2d 3e 78 43 6f 6c 6c 4e 65 65 64 65 64 31 36 20  ->xCollNeeded16 
1b180 3d 20 30 3b 0a 20 20 64 62 2d 3e 70 43 6f 6c 6c  = 0;.  db->pColl
1b190 4e 65 65 64 65 64 41 72 67 20 3d 20 70 43 6f 6c  NeededArg = pCol
1b1a0 6c 4e 65 65 64 65 64 41 72 67 3b 0a 20 20 73 71  lNeededArg;.  sq
1b1b0 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76  lite3_mutex_leav
1b1c0 65 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20  e(db->mutex);.  
1b1d0 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
1b1e0 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  ;.}..#ifndef SQL
1b1f0 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 2f  ITE_OMIT_UTF16./
1b200 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 61 20  *.** Register a 
1b210 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
1b220 63 65 20 66 61 63 74 6f 72 79 20 63 61 6c 6c 62  ce factory callb
1b230 61 63 6b 20 77 69 74 68 20 74 68 65 20 64 61 74  ack with the dat
1b240 61 62 61 73 65 20 68 61 6e 64 6c 65 0a 2a 2a 20  abase handle.** 
1b250 64 62 2e 20 52 65 70 6c 61 63 65 20 61 6e 79 20  db. Replace any 
1b260 70 72 65 76 69 6f 75 73 6c 79 20 69 6e 73 74 61  previously insta
1b270 6c 6c 65 64 20 63 6f 6c 6c 61 74 69 6f 6e 20 73  lled collation s
1b280 65 71 75 65 6e 63 65 20 66 61 63 74 6f 72 79 2e  equence factory.
1b290 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f  .*/.int sqlite3_
1b2a0 63 6f 6c 6c 61 74 69 6f 6e 5f 6e 65 65 64 65 64  collation_needed
1b2b0 31 36 28 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  16(.  sqlite3 *d
1b2c0 62 2c 20 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6c  b, .  void *pCol
1b2d0 6c 4e 65 65 64 65 64 41 72 67 2c 20 0a 20 20 76  lNeededArg, .  v
1b2e0 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64  oid(*xCollNeeded
1b2f0 31 36 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65  16)(void*,sqlite
1b300 33 2a 2c 69 6e 74 20 65 54 65 78 74 52 65 70 2c  3*,int eTextRep,
1b310 63 6f 6e 73 74 20 76 6f 69 64 2a 29 0a 29 7b 0a  const void*).){.
1b320 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
1b330 41 42 4c 45 5f 41 50 49 5f 41 52 4d 4f 52 0a 20  ABLE_API_ARMOR. 
1b340 20 69 66 28 20 21 73 71 6c 69 74 65 33 53 61 66   if( !sqlite3Saf
1b350 65 74 79 43 68 65 63 6b 4f 6b 28 64 62 29 20 29  etyCheckOk(db) )
1b360 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d   return SQLITE_M
1b370 49 53 55 53 45 5f 42 4b 50 54 3b 0a 23 65 6e 64  ISUSE_BKPT;.#end
1b380 69 66 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  if.  sqlite3_mut
1b390 65 78 5f 65 6e 74 65 72 28 64 62 2d 3e 6d 75 74  ex_enter(db->mut
1b3a0 65 78 29 3b 0a 20 20 64 62 2d 3e 78 43 6f 6c 6c  ex);.  db->xColl
1b3b0 4e 65 65 64 65 64 20 3d 20 30 3b 0a 20 20 64 62  Needed = 0;.  db
1b3c0 2d 3e 78 43 6f 6c 6c 4e 65 65 64 65 64 31 36 20  ->xCollNeeded16 
1b3d0 3d 20 78 43 6f 6c 6c 4e 65 65 64 65 64 31 36 3b  = xCollNeeded16;
1b3e0 0a 20 20 64 62 2d 3e 70 43 6f 6c 6c 4e 65 65 64  .  db->pCollNeed
1b3f0 65 64 41 72 67 20 3d 20 70 43 6f 6c 6c 4e 65 65  edArg = pCollNee
1b400 64 65 64 41 72 67 3b 0a 20 20 73 71 6c 69 74 65  dedArg;.  sqlite
1b410 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 64 62  3_mutex_leave(db
1b420 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 72 65 74 75  ->mutex);.  retu
1b430 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a  rn SQLITE_OK;.}.
1b440 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
1b450 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a 0a  _OMIT_UTF16 */..
1b460 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
1b470 4d 49 54 5f 44 45 50 52 45 43 41 54 45 44 0a 2f  MIT_DEPRECATED./
1b480 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63 74 69  *.** This functi
1b490 6f 6e 20 69 73 20 6e 6f 77 20 61 6e 20 61 6e 61  on is now an ana
1b4a0 63 68 72 6f 6e 69 73 6d 2e 20 49 74 20 75 73 65  chronism. It use
1b4b0 64 20 74 6f 20 62 65 20 75 73 65 64 20 74 6f 20  d to be used to 
1b4c0 72 65 63 6f 76 65 72 20 66 72 6f 6d 20 61 0a 2a  recover from a.*
1b4d0 2a 20 6d 61 6c 6c 6f 63 28 29 20 66 61 69 6c 75  * malloc() failu
1b4e0 72 65 2c 20 62 75 74 20 53 51 4c 69 74 65 20 6e  re, but SQLite n
1b4f0 6f 77 20 64 6f 65 73 20 74 68 69 73 20 61 75 74  ow does this aut
1b500 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a 2f 0a 69  omatically..*/.i
1b510 6e 74 20 73 71 6c 69 74 65 33 5f 67 6c 6f 62 61  nt sqlite3_globa
1b520 6c 5f 72 65 63 6f 76 65 72 28 76 6f 69 64 29 7b  l_recover(void){
1b530 0a 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45  .  return SQLITE
1b540 5f 4f 4b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f  _OK;.}.#endif../
1b550 2a 0a 2a 2a 20 54 65 73 74 20 74 6f 20 73 65 65  *.** Test to see
1b560 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
1b570 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  the database con
1b580 6e 65 63 74 69 6f 6e 20 69 73 20 69 6e 20 61 75  nection is in au
1b590 74 6f 63 6f 6d 6d 69 74 0a 2a 2a 20 6d 6f 64 65  tocommit.** mode
1b5a0 2e 20 20 52 65 74 75 72 6e 20 54 52 55 45 20 69  .  Return TRUE i
1b5b0 66 20 69 74 20 69 73 20 61 6e 64 20 46 41 4c 53  f it is and FALS
1b5c0 45 20 69 66 20 6e 6f 74 2e 20 20 41 75 74 6f 63  E if not.  Autoc
1b5d0 6f 6d 6d 69 74 20 6d 6f 64 65 20 69 73 20 6f 6e  ommit mode is on
1b5e0 0a 2a 2a 20 62 79 20 64 65 66 61 75 6c 74 2e 20  .** by default. 
1b5f0 20 41 75 74 6f 63 6f 6d 6d 69 74 20 69 73 20 64   Autocommit is d
1b600 69 73 61 62 6c 65 64 20 62 79 20 61 20 42 45 47  isabled by a BEG
1b610 49 4e 20 73 74 61 74 65 6d 65 6e 74 20 61 6e 64  IN statement and
1b620 20 72 65 65 6e 61 62 6c 65 64 0a 2a 2a 20 62 79   reenabled.** by
1b630 20 74 68 65 20 6e 65 78 74 20 43 4f 4d 4d 49 54   the next COMMIT
1b640 20 6f 72 20 52 4f 4c 4c 42 41 43 4b 2e 0a 2a 2f   or ROLLBACK..*/
1b650 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 67 65 74  .int sqlite3_get
1b660 5f 61 75 74 6f 63 6f 6d 6d 69 74 28 73 71 6c 69  _autocommit(sqli
1b670 74 65 33 20 2a 64 62 29 7b 0a 23 69 66 64 65 66  te3 *db){.#ifdef
1b680 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41   SQLITE_ENABLE_A
1b690 50 49 5f 41 52 4d 4f 52 0a 20 20 69 66 28 20 21  PI_ARMOR.  if( !
1b6a0 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65  sqlite3SafetyChe
1b6b0 63 6b 4f 6b 28 64 62 29 20 29 7b 0a 20 20 20 20  ckOk(db) ){.    
1b6c0 28 76 6f 69 64 29 53 51 4c 49 54 45 5f 4d 49 53  (void)SQLITE_MIS
1b6d0 55 53 45 5f 42 4b 50 54 3b 0a 20 20 20 20 72 65  USE_BKPT;.    re
1b6e0 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 23 65 6e 64  turn 0;.  }.#end
1b6f0 69 66 0a 20 20 72 65 74 75 72 6e 20 64 62 2d 3e  if.  return db->
1b700 61 75 74 6f 43 6f 6d 6d 69 74 3b 0a 7d 0a 0a 2f  autoCommit;.}../
1b710 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
1b720 6e 67 20 72 6f 75 74 69 6e 65 73 20 61 72 65 20  ng routines are 
1b730 73 75 62 73 74 69 74 75 74 65 73 20 66 6f 72 20  substitutes for 
1b740 63 6f 6e 73 74 61 6e 74 73 20 53 51 4c 49 54 45  constants SQLITE
1b750 5f 43 4f 52 52 55 50 54 2c 0a 2a 2a 20 53 51 4c  _CORRUPT,.** SQL
1b760 49 54 45 5f 4d 49 53 55 53 45 2c 20 53 51 4c 49  ITE_MISUSE, SQLI
1b770 54 45 5f 43 41 4e 54 4f 50 45 4e 2c 20 53 51 4c  TE_CANTOPEN, SQL
1b780 49 54 45 5f 4e 4f 4d 45 4d 20 61 6e 64 20 70 6f  ITE_NOMEM and po
1b790 73 73 69 62 6c 79 20 6f 74 68 65 72 20 65 72 72  ssibly other err
1b7a0 6f 72 0a 2a 2a 20 63 6f 6e 73 74 61 6e 74 73 2e  or.** constants.
1b7b0 20 20 54 68 65 79 20 73 65 72 76 65 20 74 77 6f    They serve two
1b7c0 20 70 75 72 70 6f 73 65 73 3a 0a 2a 2a 0a 2a 2a   purposes:.**.**
1b7d0 20 20 20 31 2e 20 20 53 65 72 76 65 20 61 73 20     1.  Serve as 
1b7e0 61 20 63 6f 6e 76 65 6e 69 65 6e 74 20 70 6c 61  a convenient pla
1b7f0 63 65 20 74 6f 20 73 65 74 20 61 20 62 72 65 61  ce to set a brea
1b800 6b 70 6f 69 6e 74 20 69 6e 20 61 20 64 65 62 75  kpoint in a debu
1b810 67 67 65 72 0a 2a 2a 20 20 20 20 20 20 20 74 6f  gger.**       to
1b820 20 64 65 74 65 63 74 20 77 68 65 6e 20 76 65 72   detect when ver
1b830 73 69 6f 6e 20 65 72 72 6f 72 20 63 6f 6e 64 69  sion error condi
1b840 74 69 6f 6e 73 20 6f 63 63 75 72 73 2e 0a 2a 2a  tions occurs..**
1b850 0a 2a 2a 20 20 20 32 2e 20 20 49 6e 76 6f 6b 65  .**   2.  Invoke
1b860 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 29 20 74   sqlite3_log() t
1b870 6f 20 70 72 6f 76 69 64 65 20 74 68 65 20 73 6f  o provide the so
1b880 75 72 63 65 20 63 6f 64 65 20 6c 6f 63 61 74 69  urce code locati
1b890 6f 6e 20 77 68 65 72 65 0a 2a 2a 20 20 20 20 20  on where.**     
1b8a0 20 20 61 20 6c 6f 77 2d 6c 65 76 65 6c 20 65 72    a low-level er
1b8b0 72 6f 72 20 69 73 20 66 69 72 73 74 20 64 65 74  ror is first det
1b8c0 65 63 74 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63  ected..*/.static
1b8d0 20 69 6e 74 20 72 65 70 6f 72 74 45 72 72 6f 72   int reportError
1b8e0 28 69 6e 74 20 69 45 72 72 2c 20 69 6e 74 20 6c  (int iErr, int l
1b8f0 69 6e 65 6e 6f 2c 20 63 6f 6e 73 74 20 63 68 61  ineno, const cha
1b900 72 20 2a 7a 54 79 70 65 29 7b 0a 20 20 73 71 6c  r *zType){.  sql
1b910 69 74 65 33 5f 6c 6f 67 28 69 45 72 72 2c 20 22  ite3_log(iErr, "
1b920 25 73 20 61 74 20 6c 69 6e 65 20 25 64 20 6f 66  %s at line %d of
1b930 20 5b 25 2e 31 30 73 5d 22 2c 0a 20 20 20 20 20   [%.10s]",.     
1b940 20 20 20 20 20 20 20 20 20 7a 54 79 70 65 2c 20           zType, 
1b950 6c 69 6e 65 6e 6f 2c 20 32 30 2b 73 71 6c 69 74  lineno, 20+sqlit
1b960 65 33 5f 73 6f 75 72 63 65 69 64 28 29 29 3b 0a  e3_sourceid());.
1b970 20 20 72 65 74 75 72 6e 20 69 45 72 72 3b 0a 7d    return iErr;.}
1b980 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 72 72  .int sqlite3Corr
1b990 75 70 74 45 72 72 6f 72 28 69 6e 74 20 6c 69 6e  uptError(int lin
1b9a0 65 6e 6f 29 7b 0a 20 20 74 65 73 74 63 61 73 65  eno){.  testcase
1b9b0 28 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43  ( sqlite3GlobalC
1b9c0 6f 6e 66 69 67 2e 78 4c 6f 67 21 3d 30 20 29 3b  onfig.xLog!=0 );
1b9d0 0a 20 20 72 65 74 75 72 6e 20 72 65 70 6f 72 74  .  return report
1b9e0 45 72 72 6f 72 28 53 51 4c 49 54 45 5f 43 4f 52  Error(SQLITE_COR
1b9f0 52 55 50 54 2c 20 6c 69 6e 65 6e 6f 2c 20 22 64  RUPT, lineno, "d
1ba00 61 74 61 62 61 73 65 20 63 6f 72 72 75 70 74 69  atabase corrupti
1ba10 6f 6e 22 29 3b 0a 7d 0a 69 6e 74 20 73 71 6c 69  on");.}.int sqli
1ba20 74 65 33 4d 69 73 75 73 65 45 72 72 6f 72 28 69  te3MisuseError(i
1ba30 6e 74 20 6c 69 6e 65 6e 6f 29 7b 0a 20 20 74 65  nt lineno){.  te
1ba40 73 74 63 61 73 65 28 20 73 71 6c 69 74 65 33 47  stcase( sqlite3G
1ba50 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78 4c 6f 67  lobalConfig.xLog
1ba60 21 3d 30 20 29 3b 0a 20 20 72 65 74 75 72 6e 20  !=0 );.  return 
1ba70 72 65 70 6f 72 74 45 72 72 6f 72 28 53 51 4c 49  reportError(SQLI
1ba80 54 45 5f 4d 49 53 55 53 45 2c 20 6c 69 6e 65 6e  TE_MISUSE, linen
1ba90 6f 2c 20 22 6d 69 73 75 73 65 22 29 3b 0a 7d 0a  o, "misuse");.}.
1baa0 69 6e 74 20 73 71 6c 69 74 65 33 43 61 6e 74 6f  int sqlite3Canto
1bab0 70 65 6e 45 72 72 6f 72 28 69 6e 74 20 6c 69 6e  penError(int lin
1bac0 65 6e 6f 29 7b 0a 20 20 74 65 73 74 63 61 73 65  eno){.  testcase
1bad0 28 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43  ( sqlite3GlobalC
1bae0 6f 6e 66 69 67 2e 78 4c 6f 67 21 3d 30 20 29 3b  onfig.xLog!=0 );
1baf0 0a 20 20 72 65 74 75 72 6e 20 72 65 70 6f 72 74  .  return report
1bb00 45 72 72 6f 72 28 53 51 4c 49 54 45 5f 43 41 4e  Error(SQLITE_CAN
1bb10 54 4f 50 45 4e 2c 20 6c 69 6e 65 6e 6f 2c 20 22  TOPEN, lineno, "
1bb20 63 61 6e 6e 6f 74 20 6f 70 65 6e 20 66 69 6c 65  cannot open file
1bb30 22 29 3b 0a 7d 0a 23 69 66 64 65 66 20 53 51 4c  ");.}.#ifdef SQL
1bb40 49 54 45 5f 44 45 42 55 47 0a 69 6e 74 20 73 71  ITE_DEBUG.int sq
1bb50 6c 69 74 65 33 43 6f 72 72 75 70 74 50 67 6e 6f  lite3CorruptPgno
1bb60 45 72 72 6f 72 28 69 6e 74 20 6c 69 6e 65 6e 6f  Error(int lineno
1bb70 2c 20 50 67 6e 6f 20 70 67 6e 6f 29 7b 0a 20 20  , Pgno pgno){.  
1bb80 63 68 61 72 20 7a 4d 73 67 5b 31 30 30 5d 3b 0a  char zMsg[100];.
1bb90 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
1bba0 74 66 28 73 69 7a 65 6f 66 28 7a 4d 73 67 29 2c  tf(sizeof(zMsg),
1bbb0 20 7a 4d 73 67 2c 20 22 64 61 74 61 62 61 73 65   zMsg, "database
1bbc0 20 63 6f 72 72 75 70 74 69 6f 6e 20 70 61 67 65   corruption page
1bbd0 20 25 64 22 2c 20 70 67 6e 6f 29 3b 0a 20 20 74   %d", pgno);.  t
1bbe0 65 73 74 63 61 73 65 28 20 73 71 6c 69 74 65 33  estcase( sqlite3
1bbf0 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78 4c 6f  GlobalConfig.xLo
1bc00 67 21 3d 30 20 29 3b 0a 20 20 72 65 74 75 72 6e  g!=0 );.  return
1bc10 20 72 65 70 6f 72 74 45 72 72 6f 72 28 53 51 4c   reportError(SQL
1bc20 49 54 45 5f 43 4f 52 52 55 50 54 2c 20 6c 69 6e  ITE_CORRUPT, lin
1bc30 65 6e 6f 2c 20 7a 4d 73 67 29 3b 0a 7d 0a 69 6e  eno, zMsg);.}.in
1bc40 74 20 73 71 6c 69 74 65 33 4e 6f 6d 65 6d 45 72  t sqlite3NomemEr
1bc50 72 6f 72 28 69 6e 74 20 6c 69 6e 65 6e 6f 29 7b  ror(int lineno){
1bc60 0a 20 20 74 65 73 74 63 61 73 65 28 20 73 71 6c  .  testcase( sql
1bc70 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67  ite3GlobalConfig
1bc80 2e 78 4c 6f 67 21 3d 30 20 29 3b 0a 20 20 72 65  .xLog!=0 );.  re
1bc90 74 75 72 6e 20 72 65 70 6f 72 74 45 72 72 6f 72  turn reportError
1bca0 28 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 2c 20 6c  (SQLITE_NOMEM, l
1bcb0 69 6e 65 6e 6f 2c 20 22 4f 4f 4d 22 29 3b 0a 7d  ineno, "OOM");.}
1bcc0 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6f 65 72  .int sqlite3Ioer
1bcd0 72 6e 6f 6d 65 6d 45 72 72 6f 72 28 69 6e 74 20  rnomemError(int 
1bce0 6c 69 6e 65 6e 6f 29 7b 0a 20 20 74 65 73 74 63  lineno){.  testc
1bcf0 61 73 65 28 20 73 71 6c 69 74 65 33 47 6c 6f 62  ase( sqlite3Glob
1bd00 61 6c 43 6f 6e 66 69 67 2e 78 4c 6f 67 21 3d 30  alConfig.xLog!=0
1bd10 20 29 3b 0a 20 20 72 65 74 75 72 6e 20 72 65 70   );.  return rep
1bd20 6f 72 74 45 72 72 6f 72 28 53 51 4c 49 54 45 5f  ortError(SQLITE_
1bd30 49 4f 45 52 52 5f 4e 4f 4d 45 4d 2c 20 6c 69 6e  IOERR_NOMEM, lin
1bd40 65 6e 6f 2c 20 22 49 2f 4f 20 4f 4f 4d 20 65 72  eno, "I/O OOM er
1bd50 72 6f 72 22 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a  ror");.}.#endif.
1bd60 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1bd70 4f 4d 49 54 5f 44 45 50 52 45 43 41 54 45 44 0a  OMIT_DEPRECATED.
1bd80 2f 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 61 20  /*.** This is a 
1bd90 63 6f 6e 76 65 6e 69 65 6e 63 65 20 72 6f 75 74  convenience rout
1bda0 69 6e 65 20 74 68 61 74 20 6d 61 6b 65 73 20 73  ine that makes s
1bdb0 75 72 65 20 74 68 61 74 20 61 6c 6c 20 74 68 72  ure that all thr
1bdc0 65 61 64 2d 73 70 65 63 69 66 69 63 0a 2a 2a 20  ead-specific.** 
1bdd0 64 61 74 61 20 66 6f 72 20 74 68 69 73 20 74 68  data for this th
1bde0 72 65 61 64 20 68 61 73 20 62 65 65 6e 20 64 65  read has been de
1bdf0 61 6c 6c 6f 63 61 74 65 64 2e 0a 2a 2a 0a 2a 2a  allocated..**.**
1be00 20 53 51 4c 69 74 65 20 6e 6f 20 6c 6f 6e 67 65   SQLite no longe
1be10 72 20 75 73 65 73 20 74 68 72 65 61 64 2d 73 70  r uses thread-sp
1be20 65 63 69 66 69 63 20 64 61 74 61 20 73 6f 20 74  ecific data so t
1be30 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20 6e  his routine is n
1be40 6f 77 20 61 0a 2a 2a 20 6e 6f 2d 6f 70 2e 20 20  ow a.** no-op.  
1be50 49 74 20 69 73 20 72 65 74 61 69 6e 65 64 20 66  It is retained f
1be60 6f 72 20 68 69 73 74 6f 72 69 63 61 6c 20 63 6f  or historical co
1be70 6d 70 61 74 69 62 69 6c 69 74 79 2e 0a 2a 2f 0a  mpatibility..*/.
1be80 76 6f 69 64 20 73 71 6c 69 74 65 33 5f 74 68 72  void sqlite3_thr
1be90 65 61 64 5f 63 6c 65 61 6e 75 70 28 76 6f 69 64  ead_cleanup(void
1bea0 29 7b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ){.}.#endif../*.
1beb0 2a 2a 20 52 65 74 75 72 6e 20 6d 65 74 61 20 69  ** Return meta i
1bec0 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
1bed0 20 61 20 73 70 65 63 69 66 69 63 20 63 6f 6c 75   a specific colu
1bee0 6d 6e 20 6f 66 20 61 20 64 61 74 61 62 61 73 65  mn of a database
1bef0 20 74 61 62 6c 65 2e 0a 2a 2a 20 53 65 65 20 63   table..** See c
1bf00 6f 6d 6d 65 6e 74 20 69 6e 20 73 71 6c 69 74 65  omment in sqlite
1bf10 33 2e 68 20 28 73 71 6c 69 74 65 2e 68 2e 69 6e  3.h (sqlite.h.in
1bf20 29 20 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a 2a  ) for details..*
1bf30 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 74 61  /.int sqlite3_ta
1bf40 62 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64  ble_column_metad
1bf50 61 74 61 28 0a 20 20 73 71 6c 69 74 65 33 20 2a  ata(.  sqlite3 *
1bf60 64 62 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  db,             
1bf70 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e     /* Connection
1bf80 20 68 61 6e 64 6c 65 20 2a 2f 0a 20 20 63 6f 6e   handle */.  con
1bf90 73 74 20 63 68 61 72 20 2a 7a 44 62 4e 61 6d 65  st char *zDbName
1bfa0 2c 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61  ,        /* Data
1bfb0 62 61 73 65 20 6e 61 6d 65 20 6f 72 20 4e 55 4c  base name or NUL
1bfc0 4c 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  L */.  const cha
1bfd0 72 20 2a 7a 54 61 62 6c 65 4e 61 6d 65 2c 20 20  r *zTableName,  
1bfe0 20 20 20 2f 2a 20 54 61 62 6c 65 20 6e 61 6d 65     /* Table name
1bff0 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
1c000 20 2a 7a 43 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 20   *zColumnName,  
1c010 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65    /* Column name
1c020 20 2a 2f 0a 20 20 63 68 61 72 20 63 6f 6e 73 74   */.  char const
1c030 20 2a 2a 70 7a 44 61 74 61 54 79 70 65 2c 20 20   **pzDataType,  
1c040 20 20 2f 2a 20 4f 55 54 50 55 54 3a 20 44 65 63    /* OUTPUT: Dec
1c050 6c 61 72 65 64 20 64 61 74 61 20 74 79 70 65 20  lared data type 
1c060 2a 2f 0a 20 20 63 68 61 72 20 63 6f 6e 73 74 20  */.  char const 
1c070 2a 2a 70 7a 43 6f 6c 6c 53 65 71 2c 20 20 20 20  **pzCollSeq,    
1c080 20 2f 2a 20 4f 55 54 50 55 54 3a 20 43 6f 6c 6c   /* OUTPUT: Coll
1c090 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 6e  ation sequence n
1c0a0 61 6d 65 20 2a 2f 0a 20 20 69 6e 74 20 2a 70 4e  ame */.  int *pN
1c0b0 6f 74 4e 75 6c 6c 2c 20 20 20 20 20 20 20 20 20  otNull,         
1c0c0 20 20 20 20 20 2f 2a 20 4f 55 54 50 55 54 3a 20       /* OUTPUT: 
1c0d0 54 72 75 65 20 69 66 20 4e 4f 54 20 4e 55 4c 4c  True if NOT NULL
1c0e0 20 63 6f 6e 73 74 72 61 69 6e 74 20 65 78 69 73   constraint exis
1c0f0 74 73 20 2a 2f 0a 20 20 69 6e 74 20 2a 70 50 72  ts */.  int *pPr
1c100 69 6d 61 72 79 4b 65 79 2c 20 20 20 20 20 20 20  imaryKey,       
1c110 20 20 20 20 2f 2a 20 4f 55 54 50 55 54 3a 20 54      /* OUTPUT: T
1c120 72 75 65 20 69 66 20 63 6f 6c 75 6d 6e 20 70 61  rue if column pa
1c130 72 74 20 6f 66 20 50 4b 20 2a 2f 0a 20 20 69 6e  rt of PK */.  in
1c140 74 20 2a 70 41 75 74 6f 69 6e 63 20 20 20 20 20  t *pAutoinc     
1c150 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 55 54            /* OUT
1c160 50 55 54 3a 20 54 72 75 65 20 69 66 20 63 6f 6c  PUT: True if col
1c170 75 6d 6e 20 69 73 20 61 75 74 6f 2d 69 6e 63 72  umn is auto-incr
1c180 65 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 69 6e  ement */.){.  in
1c190 74 20 72 63 3b 0a 20 20 63 68 61 72 20 2a 7a 45  t rc;.  char *zE
1c1a0 72 72 4d 73 67 20 3d 20 30 3b 0a 20 20 54 61 62  rrMsg = 0;.  Tab
1c1b0 6c 65 20 2a 70 54 61 62 20 3d 20 30 3b 0a 20 20  le *pTab = 0;.  
1c1c0 43 6f 6c 75 6d 6e 20 2a 70 43 6f 6c 20 3d 20 30  Column *pCol = 0
1c1d0 3b 0a 20 20 69 6e 74 20 69 43 6f 6c 20 3d 20 30  ;.  int iCol = 0
1c1e0 3b 0a 20 20 63 68 61 72 20 63 6f 6e 73 74 20 2a  ;.  char const *
1c1f0 7a 44 61 74 61 54 79 70 65 20 3d 20 30 3b 0a 20  zDataType = 0;. 
1c200 20 63 68 61 72 20 63 6f 6e 73 74 20 2a 7a 43 6f   char const *zCo
1c210 6c 6c 53 65 71 20 3d 20 30 3b 0a 20 20 69 6e 74  llSeq = 0;.  int
1c220 20 6e 6f 74 6e 75 6c 6c 20 3d 20 30 3b 0a 20 20   notnull = 0;.  
1c230 69 6e 74 20 70 72 69 6d 61 72 79 6b 65 79 20 3d  int primarykey =
1c240 20 30 3b 0a 20 20 69 6e 74 20 61 75 74 6f 69 6e   0;.  int autoin
1c250 63 20 3d 20 30 3b 0a 0a 0a 23 69 66 64 65 66 20  c = 0;...#ifdef 
1c260 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41 50  SQLITE_ENABLE_AP
1c270 49 5f 41 52 4d 4f 52 0a 20 20 69 66 28 20 21 73  I_ARMOR.  if( !s
1c280 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63  qlite3SafetyChec
1c290 6b 4f 6b 28 64 62 29 20 7c 7c 20 7a 54 61 62 6c  kOk(db) || zTabl
1c2a0 65 4e 61 6d 65 3d 3d 30 20 29 7b 0a 20 20 20 20  eName==0 ){.    
1c2b0 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d 49  return SQLITE_MI
1c2c0 53 55 53 45 5f 42 4b 50 54 3b 0a 20 20 7d 0a 23  SUSE_BKPT;.  }.#
1c2d0 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 45 6e 73 75  endif..  /* Ensu
1c2e0 72 65 20 74 68 65 20 64 61 74 61 62 61 73 65 20  re the database 
1c2f0 73 63 68 65 6d 61 20 68 61 73 20 62 65 65 6e 20  schema has been 
1c300 6c 6f 61 64 65 64 20 2a 2f 0a 20 20 73 71 6c 69  loaded */.  sqli
1c310 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72 28  te3_mutex_enter(
1c320 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 73 71  db->mutex);.  sq
1c330 6c 69 74 65 33 42 74 72 65 65 45 6e 74 65 72 41  lite3BtreeEnterA
1c340 6c 6c 28 64 62 29 3b 0a 20 20 72 63 20 3d 20 73  ll(db);.  rc = s
1c350 71 6c 69 74 65 33 49 6e 69 74 28 64 62 2c 20 26  qlite3Init(db, &
1c360 7a 45 72 72 4d 73 67 29 3b 0a 20 20 69 66 28 20  zErrMsg);.  if( 
1c370 53 51 4c 49 54 45 5f 4f 4b 21 3d 72 63 20 29 7b  SQLITE_OK!=rc ){
1c380 0a 20 20 20 20 67 6f 74 6f 20 65 72 72 6f 72 5f  .    goto error_
1c390 6f 75 74 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4c  out;.  }..  /* L
1c3a0 6f 63 61 74 65 20 74 68 65 20 74 61 62 6c 65 20  ocate the table 
1c3b0 69 6e 20 71 75 65 73 74 69 6f 6e 20 2a 2f 0a 20  in question */. 
1c3c0 20 70 54 61 62 20 3d 20 73 71 6c 69 74 65 33 46   pTab = sqlite3F
1c3d0 69 6e 64 54 61 62 6c 65 28 64 62 2c 20 7a 54 61  indTable(db, zTa
1c3e0 62 6c 65 4e 61 6d 65 2c 20 7a 44 62 4e 61 6d 65  bleName, zDbName
1c3f0 29 3b 0a 20 20 69 66 28 20 21 70 54 61 62 20 7c  );.  if( !pTab |
1c400 7c 20 70 54 61 62 2d 3e 70 53 65 6c 65 63 74 20  | pTab->pSelect 
1c410 29 7b 0a 20 20 20 20 70 54 61 62 20 3d 20 30 3b  ){.    pTab = 0;
1c420 0a 20 20 20 20 67 6f 74 6f 20 65 72 72 6f 72 5f  .    goto error_
1c430 6f 75 74 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 46  out;.  }..  /* F
1c440 69 6e 64 20 74 68 65 20 63 6f 6c 75 6d 6e 20 66  ind the column f
1c450 6f 72 20 77 68 69 63 68 20 69 6e 66 6f 20 69 73  or which info is
1c460 20 72 65 71 75 65 73 74 65 64 20 2a 2f 0a 20 20   requested */.  
1c470 69 66 28 20 7a 43 6f 6c 75 6d 6e 4e 61 6d 65 3d  if( zColumnName=
1c480 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20 51 75 65  =0 ){.    /* Que
1c490 72 79 20 66 6f 72 20 65 78 69 73 74 61 6e 63 65  ry for existance
1c4a0 20 6f 66 20 74 61 62 6c 65 20 6f 6e 6c 79 20 2a   of table only *
1c4b0 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 66  /.  }else{.    f
1c4c0 6f 72 28 69 43 6f 6c 3d 30 3b 20 69 43 6f 6c 3c  or(iCol=0; iCol<
1c4d0 70 54 61 62 2d 3e 6e 43 6f 6c 3b 20 69 43 6f 6c  pTab->nCol; iCol
1c4e0 2b 2b 29 7b 0a 20 20 20 20 20 20 70 43 6f 6c 20  ++){.      pCol 
1c4f0 3d 20 26 70 54 61 62 2d 3e 61 43 6f 6c 5b 69 43  = &pTab->aCol[iC
1c500 6f 6c 5d 3b 0a 20 20 20 20 20 20 69 66 28 20 30  ol];.      if( 0
1c510 3d 3d 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70  ==sqlite3StrICmp
1c520 28 70 43 6f 6c 2d 3e 7a 4e 61 6d 65 2c 20 7a 43  (pCol->zName, zC
1c530 6f 6c 75 6d 6e 4e 61 6d 65 29 20 29 7b 0a 20 20  olumnName) ){.  
1c540 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
1c550 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69     }.    }.    i
1c560 66 28 20 69 43 6f 6c 3d 3d 70 54 61 62 2d 3e 6e  f( iCol==pTab->n
1c570 43 6f 6c 20 29 7b 0a 20 20 20 20 20 20 69 66 28  Col ){.      if(
1c580 20 48 61 73 52 6f 77 69 64 28 70 54 61 62 29 20   HasRowid(pTab) 
1c590 26 26 20 73 71 6c 69 74 65 33 49 73 52 6f 77 69  && sqlite3IsRowi
1c5a0 64 28 7a 43 6f 6c 75 6d 6e 4e 61 6d 65 29 20 29  d(zColumnName) )
1c5b0 7b 0a 20 20 20 20 20 20 20 20 69 43 6f 6c 20 3d  {.        iCol =
1c5c0 20 70 54 61 62 2d 3e 69 50 4b 65 79 3b 0a 20 20   pTab->iPKey;.  
1c5d0 20 20 20 20 20 20 70 43 6f 6c 20 3d 20 69 43 6f        pCol = iCo
1c5e0 6c 3e 3d 30 20 3f 20 26 70 54 61 62 2d 3e 61 43  l>=0 ? &pTab->aC
1c5f0 6f 6c 5b 69 43 6f 6c 5d 20 3a 20 30 3b 0a 20 20  ol[iCol] : 0;.  
1c600 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
1c610 20 20 20 70 54 61 62 20 3d 20 30 3b 0a 20 20 20     pTab = 0;.   
1c620 20 20 20 20 20 67 6f 74 6f 20 65 72 72 6f 72 5f       goto error_
1c630 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  out;.      }.   
1c640 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20 54 68 65   }.  }..  /* The
1c650 20 66 6f 6c 6c 6f 77 69 6e 67 20 62 6c 6f 63 6b   following block
1c660 20 73 74 6f 72 65 73 20 74 68 65 20 6d 65 74 61   stores the meta
1c670 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61   information tha
1c680 74 20 77 69 6c 6c 20 62 65 20 72 65 74 75 72 6e  t will be return
1c690 65 64 0a 20 20 2a 2a 20 74 6f 20 74 68 65 20 63  ed.  ** to the c
1c6a0 61 6c 6c 65 72 20 69 6e 20 6c 6f 63 61 6c 20 76  aller in local v
1c6b0 61 72 69 61 62 6c 65 73 20 7a 44 61 74 61 54 79  ariables zDataTy
1c6c0 70 65 2c 20 7a 43 6f 6c 6c 53 65 71 2c 20 6e 6f  pe, zCollSeq, no
1c6d0 74 6e 75 6c 6c 2c 20 70 72 69 6d 61 72 79 6b 65  tnull, primaryke
1c6e0 79 0a 20 20 2a 2a 20 61 6e 64 20 61 75 74 6f 69  y.  ** and autoi
1c6f0 6e 63 2e 20 41 74 20 74 68 69 73 20 70 6f 69 6e  nc. At this poin
1c700 74 20 74 68 65 72 65 20 61 72 65 20 74 77 6f 20  t there are two 
1c710 70 6f 73 73 69 62 69 6c 69 74 69 65 73 3a 0a 20  possibilities:. 
1c720 20 2a 2a 20 0a 20 20 2a 2a 20 20 20 20 20 31 2e   ** .  **     1.
1c730 20 54 68 65 20 73 70 65 63 69 66 69 65 64 20 63   The specified c
1c740 6f 6c 75 6d 6e 20 6e 61 6d 65 20 77 61 73 20 72  olumn name was r
1c750 6f 77 69 64 22 2c 20 22 6f 69 64 22 20 6f 72 20  owid", "oid" or 
1c760 22 5f 72 6f 77 69 64 5f 22 20 0a 20 20 2a 2a 20  "_rowid_" .  ** 
1c770 20 20 20 20 20 20 20 61 6e 64 20 74 68 65 72 65         and there
1c780 20 69 73 20 6e 6f 20 65 78 70 6c 69 63 69 74 6c   is no explicitl
1c790 79 20 64 65 63 6c 61 72 65 64 20 49 50 4b 20 63  y declared IPK c
1c7a0 6f 6c 75 6d 6e 2e 20 0a 20 20 2a 2a 0a 20 20 2a  olumn. .  **.  *
1c7b0 2a 20 20 20 20 20 32 2e 20 54 68 65 20 74 61 62  *     2. The tab
1c7c0 6c 65 20 69 73 20 6e 6f 74 20 61 20 76 69 65 77  le is not a view
1c7d0 20 61 6e 64 20 74 68 65 20 63 6f 6c 75 6d 6e 20   and the column 
1c7e0 6e 61 6d 65 20 69 64 65 6e 74 69 66 69 65 64 20  name identified 
1c7f0 61 6e 20 0a 20 20 2a 2a 20 20 20 20 20 20 20 20  an .  **        
1c800 65 78 70 6c 69 63 69 74 6c 79 20 64 65 63 6c 61  explicitly decla
1c810 72 65 64 20 63 6f 6c 75 6d 6e 2e 20 43 6f 70 79  red column. Copy
1c820 20 6d 65 74 61 20 69 6e 66 6f 72 6d 61 74 69 6f   meta informatio
1c830 6e 20 66 72 6f 6d 20 2a 70 43 6f 6c 2e 0a 20 20  n from *pCol..  
1c840 2a 2f 20 0a 20 20 69 66 28 20 70 43 6f 6c 20 29  */ .  if( pCol )
1c850 7b 0a 20 20 20 20 7a 44 61 74 61 54 79 70 65 20  {.    zDataType 
1c860 3d 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 54  = sqlite3ColumnT
1c870 79 70 65 28 70 43 6f 6c 2c 30 29 3b 0a 20 20 20  ype(pCol,0);.   
1c880 20 7a 43 6f 6c 6c 53 65 71 20 3d 20 70 43 6f 6c   zCollSeq = pCol
1c890 2d 3e 7a 43 6f 6c 6c 3b 0a 20 20 20 20 6e 6f 74  ->zColl;.    not
1c8a0 6e 75 6c 6c 20 3d 20 70 43 6f 6c 2d 3e 6e 6f 74  null = pCol->not
1c8b0 4e 75 6c 6c 21 3d 30 3b 0a 20 20 20 20 70 72 69  Null!=0;.    pri
1c8c0 6d 61 72 79 6b 65 79 20 20 3d 20 28 70 43 6f 6c  marykey  = (pCol
1c8d0 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c  ->colFlags & COL
1c8e0 46 4c 41 47 5f 50 52 49 4d 4b 45 59 29 21 3d 30  FLAG_PRIMKEY)!=0
1c8f0 3b 0a 20 20 20 20 61 75 74 6f 69 6e 63 20 3d 20  ;.    autoinc = 
1c900 70 54 61 62 2d 3e 69 50 4b 65 79 3d 3d 69 43 6f  pTab->iPKey==iCo
1c910 6c 20 26 26 20 28 70 54 61 62 2d 3e 74 61 62 46  l && (pTab->tabF
1c920 6c 61 67 73 20 26 20 54 46 5f 41 75 74 6f 69 6e  lags & TF_Autoin
1c930 63 72 65 6d 65 6e 74 29 21 3d 30 3b 0a 20 20 7d  crement)!=0;.  }
1c940 65 6c 73 65 7b 0a 20 20 20 20 7a 44 61 74 61 54  else{.    zDataT
1c950 79 70 65 20 3d 20 22 49 4e 54 45 47 45 52 22 3b  ype = "INTEGER";
1c960 0a 20 20 20 20 70 72 69 6d 61 72 79 6b 65 79 20  .    primarykey 
1c970 3d 20 31 3b 0a 20 20 7d 0a 20 20 69 66 28 20 21  = 1;.  }.  if( !
1c980 7a 43 6f 6c 6c 53 65 71 20 29 7b 0a 20 20 20 20  zCollSeq ){.    
1c990 7a 43 6f 6c 6c 53 65 71 20 3d 20 73 71 6c 69 74  zCollSeq = sqlit
1c9a0 65 33 53 74 72 42 49 4e 41 52 59 3b 0a 20 20 7d  e3StrBINARY;.  }
1c9b0 0a 0a 65 72 72 6f 72 5f 6f 75 74 3a 0a 20 20 73  ..error_out:.  s
1c9c0 71 6c 69 74 65 33 42 74 72 65 65 4c 65 61 76 65  qlite3BtreeLeave
1c9d0 41 6c 6c 28 64 62 29 3b 0a 0a 20 20 2f 2a 20 57  All(db);..  /* W
1c9e0 68 65 74 68 65 72 20 74 68 65 20 66 75 6e 63 74  hether the funct
1c9f0 69 6f 6e 20 63 61 6c 6c 20 73 75 63 63 65 65 64  ion call succeed
1ca00 65 64 20 6f 72 20 66 61 69 6c 65 64 2c 20 73 65  ed or failed, se
1ca10 74 20 74 68 65 20 6f 75 74 70 75 74 20 70 61 72  t the output par
1ca20 61 6d 65 74 65 72 73 0a 20 20 2a 2a 20 74 6f 20  ameters.  ** to 
1ca30 77 68 61 74 65 76 65 72 20 74 68 65 69 72 20 6c  whatever their l
1ca40 6f 63 61 6c 20 63 6f 75 6e 74 65 72 70 61 72 74  ocal counterpart
1ca50 73 20 63 6f 6e 74 61 69 6e 2e 20 49 66 20 61 6e  s contain. If an
1ca60 20 65 72 72 6f 72 20 64 69 64 20 6f 63 63 75 72   error did occur
1ca70 2c 0a 20 20 2a 2a 20 74 68 69 73 20 68 61 73 20  ,.  ** this has 
1ca80 74 68 65 20 65 66 66 65 63 74 20 6f 66 20 7a 65  the effect of ze
1ca90 72 6f 69 6e 67 20 61 6c 6c 20 6f 75 74 70 75 74  roing all output
1caa0 20 70 61 72 61 6d 65 74 65 72 73 2e 0a 20 20 2a   parameters..  *
1cab0 2f 0a 20 20 69 66 28 20 70 7a 44 61 74 61 54 79  /.  if( pzDataTy
1cac0 70 65 20 29 20 2a 70 7a 44 61 74 61 54 79 70 65  pe ) *pzDataType
1cad0 20 3d 20 7a 44 61 74 61 54 79 70 65 3b 0a 20 20   = zDataType;.  
1cae0 69 66 28 20 70 7a 43 6f 6c 6c 53 65 71 20 29 20  if( pzCollSeq ) 
1caf0 2a 70 7a 43 6f 6c 6c 53 65 71 20 3d 20 7a 43 6f  *pzCollSeq = zCo
1cb00 6c 6c 53 65 71 3b 0a 20 20 69 66 28 20 70 4e 6f  llSeq;.  if( pNo
1cb10 74 4e 75 6c 6c 20 29 20 2a 70 4e 6f 74 4e 75 6c  tNull ) *pNotNul
1cb20 6c 20 3d 20 6e 6f 74 6e 75 6c 6c 3b 0a 20 20 69  l = notnull;.  i
1cb30 66 28 20 70 50 72 69 6d 61 72 79 4b 65 79 20 29  f( pPrimaryKey )
1cb40 20 2a 70 50 72 69 6d 61 72 79 4b 65 79 20 3d 20   *pPrimaryKey = 
1cb50 70 72 69 6d 61 72 79 6b 65 79 3b 0a 20 20 69 66  primarykey;.  if
1cb60 28 20 70 41 75 74 6f 69 6e 63 20 29 20 2a 70 41  ( pAutoinc ) *pA
1cb70 75 74 6f 69 6e 63 20 3d 20 61 75 74 6f 69 6e 63  utoinc = autoinc
1cb80 3b 0a 0a 20 20 69 66 28 20 53 51 4c 49 54 45 5f  ;..  if( SQLITE_
1cb90 4f 4b 3d 3d 72 63 20 26 26 20 21 70 54 61 62 20  OK==rc && !pTab 
1cba0 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 44 62  ){.    sqlite3Db
1cbb0 46 72 65 65 28 64 62 2c 20 7a 45 72 72 4d 73 67  Free(db, zErrMsg
1cbc0 29 3b 0a 20 20 20 20 7a 45 72 72 4d 73 67 20 3d  );.    zErrMsg =
1cbd0 20 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28   sqlite3MPrintf(
1cbe0 64 62 2c 20 22 6e 6f 20 73 75 63 68 20 74 61 62  db, "no such tab
1cbf0 6c 65 20 63 6f 6c 75 6d 6e 3a 20 25 73 2e 25 73  le column: %s.%s
1cc00 22 2c 20 7a 54 61 62 6c 65 4e 61 6d 65 2c 0a 20  ", zTableName,. 
1cc10 20 20 20 20 20 20 20 7a 43 6f 6c 75 6d 6e 4e 61         zColumnNa
1cc20 6d 65 29 3b 0a 20 20 20 20 72 63 20 3d 20 53 51  me);.    rc = SQ
1cc30 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a  LITE_ERROR;.  }.
1cc40 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 57 69    sqlite3ErrorWi
1cc50 74 68 4d 73 67 28 64 62 2c 20 72 63 2c 20 28 7a  thMsg(db, rc, (z
1cc60 45 72 72 4d 73 67 3f 22 25 73 22 3a 30 29 2c 20  ErrMsg?"%s":0), 
1cc70 7a 45 72 72 4d 73 67 29 3b 0a 20 20 73 71 6c 69  zErrMsg);.  sqli
1cc80 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 7a 45  te3DbFree(db, zE
1cc90 72 72 4d 73 67 29 3b 0a 20 20 72 63 20 3d 20 73  rrMsg);.  rc = s
1cca0 71 6c 69 74 65 33 41 70 69 45 78 69 74 28 64 62  qlite3ApiExit(db
1ccb0 2c 20 72 63 29 3b 0a 20 20 73 71 6c 69 74 65 33  , rc);.  sqlite3
1ccc0 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 64 62 2d  _mutex_leave(db-
1ccd0 3e 6d 75 74 65 78 29 3b 0a 20 20 72 65 74 75 72  >mutex);.  retur
1cce0 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 53  n rc;.}../*.** S
1ccf0 6c 65 65 70 20 66 6f 72 20 61 20 6c 69 74 74 6c  leep for a littl
1cd00 65 20 77 68 69 6c 65 2e 20 20 52 65 74 75 72 6e  e while.  Return
1cd10 20 74 68 65 20 61 6d 6f 75 6e 74 20 6f 66 20 74   the amount of t
1cd20 69 6d 65 20 73 6c 65 70 74 2e 0a 2a 2f 0a 69 6e  ime slept..*/.in
1cd30 74 20 73 71 6c 69 74 65 33 5f 73 6c 65 65 70 28  t sqlite3_sleep(
1cd40 69 6e 74 20 6d 73 29 7b 0a 20 20 73 71 6c 69 74  int ms){.  sqlit
1cd50 65 33 5f 76 66 73 20 2a 70 56 66 73 3b 0a 20 20  e3_vfs *pVfs;.  
1cd60 69 6e 74 20 72 63 3b 0a 20 20 70 56 66 73 20 3d  int rc;.  pVfs =
1cd70 20 73 71 6c 69 74 65 33 5f 76 66 73 5f 66 69 6e   sqlite3_vfs_fin
1cd80 64 28 30 29 3b 0a 20 20 69 66 28 20 70 56 66 73  d(0);.  if( pVfs
1cd90 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 30 3b 0a  ==0 ) return 0;.
1cda0 0a 20 20 2f 2a 20 54 68 69 73 20 66 75 6e 63 74  .  /* This funct
1cdb0 69 6f 6e 20 77 6f 72 6b 73 20 69 6e 20 6d 69 6c  ion works in mil
1cdc0 6c 69 73 65 63 6f 6e 64 73 2c 20 62 75 74 20 74  liseconds, but t
1cdd0 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 4f 73  he underlying Os
1cde0 53 6c 65 65 70 28 29 20 0a 20 20 2a 2a 20 41 50  Sleep() .  ** AP
1cdf0 49 20 75 73 65 73 20 6d 69 63 72 6f 73 65 63 6f  I uses microseco
1ce00 6e 64 73 2e 20 48 65 6e 63 65 20 74 68 65 20 31  nds. Hence the 1
1ce10 30 30 30 27 73 2e 0a 20 20 2a 2f 0a 20 20 72 63  000's..  */.  rc
1ce20 20 3d 20 28 73 71 6c 69 74 65 33 4f 73 53 6c 65   = (sqlite3OsSle
1ce30 65 70 28 70 56 66 73 2c 20 31 30 30 30 2a 6d 73  ep(pVfs, 1000*ms
1ce40 29 2f 31 30 30 30 29 3b 0a 20 20 72 65 74 75 72  )/1000);.  retur
1ce50 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 45  n rc;.}../*.** E
1ce60 6e 61 62 6c 65 20 6f 72 20 64 69 73 61 62 6c 65  nable or disable
1ce70 20 74 68 65 20 65 78 74 65 6e 64 65 64 20 72 65   the extended re
1ce80 73 75 6c 74 20 63 6f 64 65 73 2e 0a 2a 2f 0a 69  sult codes..*/.i
1ce90 6e 74 20 73 71 6c 69 74 65 33 5f 65 78 74 65 6e  nt sqlite3_exten
1cea0 64 65 64 5f 72 65 73 75 6c 74 5f 63 6f 64 65 73  ded_result_codes
1ceb0 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 69 6e  (sqlite3 *db, in
1cec0 74 20 6f 6e 6f 66 66 29 7b 0a 23 69 66 64 65 66  t onoff){.#ifdef
1ced0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41   SQLITE_ENABLE_A
1cee0 50 49 5f 41 52 4d 4f 52 0a 20 20 69 66 28 20 21  PI_ARMOR.  if( !
1cef0 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65  sqlite3SafetyChe
1cf00 63 6b 4f 6b 28 64 62 29 20 29 20 72 65 74 75 72  ckOk(db) ) retur
1cf10 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 5f  n SQLITE_MISUSE_
1cf20 42 4b 50 54 3b 0a 23 65 6e 64 69 66 0a 20 20 73  BKPT;.#endif.  s
1cf30 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74  qlite3_mutex_ent
1cf40 65 72 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20  er(db->mutex);. 
1cf50 20 64 62 2d 3e 65 72 72 4d 61 73 6b 20 3d 20 6f   db->errMask = o
1cf60 6e 6f 66 66 20 3f 20 30 78 66 66 66 66 66 66 66  noff ? 0xfffffff
1cf70 66 20 3a 20 30 78 66 66 3b 0a 20 20 73 71 6c 69  f : 0xff;.  sqli
1cf80 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28  te3_mutex_leave(
1cf90 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 72 65  db->mutex);.  re
1cfa0 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  turn SQLITE_OK;.
1cfb0 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20  }../*.** Invoke 
1cfc0 74 68 65 20 78 46 69 6c 65 43 6f 6e 74 72 6f 6c  the xFileControl
1cfd0 20 6d 65 74 68 6f 64 20 6f 6e 20 61 20 70 61 72   method on a par
1cfe0 74 69 63 75 6c 61 72 20 64 61 74 61 62 61 73 65  ticular database
1cff0 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
1d000 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 73 71  _file_control(sq
1d010 6c 69 74 65 33 20 2a 64 62 2c 20 63 6f 6e 73 74  lite3 *db, const
1d020 20 63 68 61 72 20 2a 7a 44 62 4e 61 6d 65 2c 20   char *zDbName, 
1d030 69 6e 74 20 6f 70 2c 20 76 6f 69 64 20 2a 70 41  int op, void *pA
1d040 72 67 29 7b 0a 20 20 69 6e 74 20 72 63 20 3d 20  rg){.  int rc = 
1d050 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20  SQLITE_ERROR;.  
1d060 42 74 72 65 65 20 2a 70 42 74 72 65 65 3b 0a 0a  Btree *pBtree;..
1d070 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
1d080 41 42 4c 45 5f 41 50 49 5f 41 52 4d 4f 52 0a 20  ABLE_API_ARMOR. 
1d090 20 69 66 28 20 21 73 71 6c 69 74 65 33 53 61 66   if( !sqlite3Saf
1d0a0 65 74 79 43 68 65 63 6b 4f 6b 28 64 62 29 20 29  etyCheckOk(db) )
1d0b0 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d   return SQLITE_M
1d0c0 49 53 55 53 45 5f 42 4b 50 54 3b 0a 23 65 6e 64  ISUSE_BKPT;.#end
1d0d0 69 66 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  if.  sqlite3_mut
1d0e0 65 78 5f 65 6e 74 65 72 28 64 62 2d 3e 6d 75 74  ex_enter(db->mut
1d0f0 65 78 29 3b 0a 20 20 70 42 74 72 65 65 20 3d 20  ex);.  pBtree = 
1d100 73 71 6c 69 74 65 33 44 62 4e 61 6d 65 54 6f 42  sqlite3DbNameToB
1d110 74 72 65 65 28 64 62 2c 20 7a 44 62 4e 61 6d 65  tree(db, zDbName
1d120 29 3b 0a 20 20 69 66 28 20 70 42 74 72 65 65 20  );.  if( pBtree 
1d130 29 7b 0a 20 20 20 20 50 61 67 65 72 20 2a 70 50  ){.    Pager *pP
1d140 61 67 65 72 3b 0a 20 20 20 20 73 71 6c 69 74 65  ager;.    sqlite
1d150 33 5f 66 69 6c 65 20 2a 66 64 3b 0a 20 20 20 20  3_file *fd;.    
1d160 73 71 6c 69 74 65 33 42 74 72 65 65 45 6e 74 65  sqlite3BtreeEnte
1d170 72 28 70 42 74 72 65 65 29 3b 0a 20 20 20 20 70  r(pBtree);.    p
1d180 50 61 67 65 72 20 3d 20 73 71 6c 69 74 65 33 42  Pager = sqlite3B
1d190 74 72 65 65 50 61 67 65 72 28 70 42 74 72 65 65  treePager(pBtree
1d1a0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
1d1b0 50 61 67 65 72 21 3d 30 20 29 3b 0a 20 20 20 20  Pager!=0 );.    
1d1c0 66 64 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65  fd = sqlite3Page
1d1d0 72 46 69 6c 65 28 70 50 61 67 65 72 29 3b 0a 20  rFile(pPager);. 
1d1e0 20 20 20 61 73 73 65 72 74 28 20 66 64 21 3d 30     assert( fd!=0
1d1f0 20 29 3b 0a 20 20 20 20 69 66 28 20 6f 70 3d 3d   );.    if( op==
1d200 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 46 49 4c  SQLITE_FCNTL_FIL
1d210 45 5f 50 4f 49 4e 54 45 52 20 29 7b 0a 20 20 20  E_POINTER ){.   
1d220 20 20 20 2a 28 73 71 6c 69 74 65 33 5f 66 69 6c     *(sqlite3_fil
1d230 65 2a 2a 29 70 41 72 67 20 3d 20 66 64 3b 0a 20  e**)pArg = fd;. 
1d240 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
1d250 5f 4f 4b 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  _OK;.    }else i
1d260 66 28 20 6f 70 3d 3d 53 51 4c 49 54 45 5f 46 43  f( op==SQLITE_FC
1d270 4e 54 4c 5f 56 46 53 5f 50 4f 49 4e 54 45 52 20  NTL_VFS_POINTER 
1d280 29 7b 0a 20 20 20 20 20 20 2a 28 73 71 6c 69 74  ){.      *(sqlit
1d290 65 33 5f 76 66 73 2a 2a 29 70 41 72 67 20 3d 20  e3_vfs**)pArg = 
1d2a0 73 71 6c 69 74 65 33 50 61 67 65 72 56 66 73 28  sqlite3PagerVfs(
1d2b0 70 50 61 67 65 72 29 3b 0a 20 20 20 20 20 20 72  pPager);.      r
1d2c0 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20  c = SQLITE_OK;. 
1d2d0 20 20 20 7d 65 6c 73 65 20 69 66 28 20 6f 70 3d     }else if( op=
1d2e0 3d 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 4a 4f  =SQLITE_FCNTL_JO
1d2f0 55 52 4e 41 4c 5f 50 4f 49 4e 54 45 52 20 29 7b  URNAL_POINTER ){
1d300 0a 20 20 20 20 20 20 2a 28 73 71 6c 69 74 65 33  .      *(sqlite3
1d310 5f 66 69 6c 65 2a 2a 29 70 41 72 67 20 3d 20 73  _file**)pArg = s
1d320 71 6c 69 74 65 33 50 61 67 65 72 4a 72 6e 6c 46  qlite3PagerJrnlF
1d330 69 6c 65 28 70 50 61 67 65 72 29 3b 0a 20 20 20  ile(pPager);.   
1d340 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f     rc = SQLITE_O
1d350 4b 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  K;.    }else if(
1d360 20 66 64 2d 3e 70 4d 65 74 68 6f 64 73 20 29 7b   fd->pMethods ){
1d370 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
1d380 74 65 33 4f 73 46 69 6c 65 43 6f 6e 74 72 6f 6c  te3OsFileControl
1d390 28 66 64 2c 20 6f 70 2c 20 70 41 72 67 29 3b 0a  (fd, op, pArg);.
1d3a0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
1d3b0 4d 49 54 5f 57 41 4c 0a 20 20 20 20 20 20 69 66  MIT_WAL.      if
1d3c0 28 20 28 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  ( (rc==SQLITE_OK
1d3d0 29 26 26 28 6f 70 3d 3d 53 51 4c 49 54 45 5f 46  )&&(op==SQLITE_F
1d3e0 43 4e 54 4c 5f 4c 41 53 54 5f 45 52 52 4e 4f 29  CNTL_LAST_ERRNO)
1d3f0 26 26 28 2a 28 69 6e 74 20 2a 29 70 41 72 67 3d  &&(*(int *)pArg=
1d400 3d 30 29 20 29 7b 0a 20 20 20 20 20 20 20 20 73  =0) ){.        s
1d410 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 70 57 61  qlite3_file *pWa
1d420 6c 46 64 20 3d 20 73 71 6c 69 74 65 33 50 61 67  lFd = sqlite3Pag
1d430 65 72 57 61 6c 46 69 6c 65 28 70 50 61 67 65 72  erWalFile(pPager
1d440 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70  );.        if( p
1d450 57 61 6c 46 64 26 26 28 70 57 61 6c 46 64 2d 3e  WalFd&&(pWalFd->
1d460 70 4d 65 74 68 6f 64 73 29 20 29 7b 0a 20 20 20  pMethods) ){.   
1d470 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
1d480 74 65 33 4f 73 46 69 6c 65 43 6f 6e 74 72 6f 6c  te3OsFileControl
1d490 28 70 57 61 6c 46 64 2c 20 6f 70 2c 20 70 41 72  (pWalFd, op, pAr
1d4a0 67 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  g);.        }.  
1d4b0 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20      }.#endif.   
1d4c0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63   }else{.      rc
1d4d0 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 54 46 4f 55   = SQLITE_NOTFOU
1d4e0 4e 44 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71  ND;.    }.    sq
1d4f0 6c 69 74 65 33 42 74 72 65 65 4c 65 61 76 65 28  lite3BtreeLeave(
1d500 70 42 74 72 65 65 29 3b 0a 20 20 7d 0a 20 20 73  pBtree);.  }.  s
1d510 71 6c 69 74 65 33 45 72 72 6f 72 28 64 62 2c 20  qlite3Error(db, 
1d520 72 63 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d  rc);.  sqlite3_m
1d530 75 74 65 78 5f 6c 65 61 76 65 28 64 62 2d 3e 6d  utex_leave(db->m
1d540 75 74 65 78 29 3b 0a 20 20 72 65 74 75 72 6e 20  utex);.  return 
1d550 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74  rc;.}../*.** Int
1d560 65 72 66 61 63 65 20 74 6f 20 74 68 65 20 74 65  erface to the te
1d570 73 74 69 6e 67 20 6c 6f 67 69 63 2e 0a 2a 2f 0a  sting logic..*/.
1d580 69 6e 74 20 73 71 6c 69 74 65 33 5f 74 65 73 74  int sqlite3_test
1d590 5f 63 6f 6e 74 72 6f 6c 28 69 6e 74 20 6f 70 2c  _control(int op,
1d5a0 20 2e 2e 2e 29 7b 0a 20 20 69 6e 74 20 72 63 20   ...){.  int rc 
1d5b0 3d 20 30 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  = 0;.#ifdef SQLI
1d5c0 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 20 20  TE_UNTESTABLE.  
1d5d0 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52  UNUSED_PARAMETER
1d5e0 28 6f 70 29 3b 0a 23 65 6c 73 65 0a 20 20 76 61  (op);.#else.  va
1d5f0 5f 6c 69 73 74 20 61 70 3b 0a 20 20 76 61 5f 73  _list ap;.  va_s
1d600 74 61 72 74 28 61 70 2c 20 6f 70 29 3b 0a 20 20  tart(ap, op);.  
1d610 73 77 69 74 63 68 28 20 6f 70 20 29 7b 0a 0a 20  switch( op ){.. 
1d620 20 20 20 2f 2a 0a 20 20 20 20 2a 2a 20 53 61 76     /*.    ** Sav
1d630 65 20 74 68 65 20 63 75 72 72 65 6e 74 20 73 74  e the current st
1d640 61 74 65 20 6f 66 20 74 68 65 20 50 52 4e 47 2e  ate of the PRNG.
1d650 0a 20 20 20 20 2a 2f 0a 20 20 20 20 63 61 73 65  .    */.    case
1d660 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c   SQLITE_TESTCTRL
1d670 5f 50 52 4e 47 5f 53 41 56 45 3a 20 7b 0a 20 20  _PRNG_SAVE: {.  
1d680 20 20 20 20 73 71 6c 69 74 65 33 50 72 6e 67 53      sqlite3PrngS
1d690 61 76 65 53 74 61 74 65 28 29 3b 0a 20 20 20 20  aveState();.    
1d6a0 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 0a    break;.    }..
1d6b0 20 20 20 20 2f 2a 0a 20 20 20 20 2a 2a 20 52 65      /*.    ** Re
1d6c0 73 74 6f 72 65 20 74 68 65 20 73 74 61 74 65 20  store the state 
1d6d0 6f 66 20 74 68 65 20 50 52 4e 47 20 74 6f 20 74  of the PRNG to t
1d6e0 68 65 20 6c 61 73 74 20 73 74 61 74 65 20 73 61  he last state sa
1d6f0 76 65 64 20 75 73 69 6e 67 0a 20 20 20 20 2a 2a  ved using.    **
1d700 20 50 52 4e 47 5f 53 41 56 45 2e 20 20 49 66 20   PRNG_SAVE.  If 
1d710 50 52 4e 47 5f 53 41 56 45 20 68 61 73 20 6e 65  PRNG_SAVE has ne
1d720 76 65 72 20 62 65 66 6f 72 65 20 62 65 65 6e 20  ver before been 
1d730 63 61 6c 6c 65 64 2c 20 74 68 65 6e 0a 20 20 20  called, then.   
1d740 20 2a 2a 20 74 68 69 73 20 76 65 72 62 20 61 63   ** this verb ac
1d750 74 73 20 6c 69 6b 65 20 50 52 4e 47 5f 52 45 53  ts like PRNG_RES
1d760 45 54 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 63  ET..    */.    c
1d770 61 73 65 20 53 51 4c 49 54 45 5f 54 45 53 54 43  ase SQLITE_TESTC
1d780 54 52 4c 5f 50 52 4e 47 5f 52 45 53 54 4f 52 45  TRL_PRNG_RESTORE
1d790 3a 20 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  : {.      sqlite
1d7a0 33 50 72 6e 67 52 65 73 74 6f 72 65 53 74 61 74  3PrngRestoreStat
1d7b0 65 28 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b  e();.      break
1d7c0 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 0a  ;.    }..    /*.
1d7d0 20 20 20 20 2a 2a 20 52 65 73 65 74 20 74 68 65      ** Reset the
1d7e0 20 50 52 4e 47 20 62 61 63 6b 20 74 6f 20 69 74   PRNG back to it
1d7f0 73 20 75 6e 69 6e 69 74 69 61 6c 69 7a 65 64 20  s uninitialized 
1d800 73 74 61 74 65 2e 20 20 54 68 65 20 6e 65 78 74  state.  The next
1d810 20 63 61 6c 6c 0a 20 20 20 20 2a 2a 20 74 6f 20   call.    ** to 
1d820 73 71 6c 69 74 65 33 5f 72 61 6e 64 6f 6d 6e 65  sqlite3_randomne
1d830 73 73 28 29 20 77 69 6c 6c 20 72 65 73 65 65 64  ss() will reseed
1d840 20 74 68 65 20 50 52 4e 47 20 75 73 69 6e 67 20   the PRNG using 
1d850 61 20 73 69 6e 67 6c 65 20 63 61 6c 6c 0a 20 20  a single call.  
1d860 20 20 2a 2a 20 74 6f 20 74 68 65 20 78 52 61 6e    ** to the xRan
1d870 64 6f 6d 6e 65 73 73 20 6d 65 74 68 6f 64 20 6f  domness method o
1d880 66 20 74 68 65 20 64 65 66 61 75 6c 74 20 56 46  f the default VF
1d890 53 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 63 61  S..    */.    ca
1d8a0 73 65 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54  se SQLITE_TESTCT
1d8b0 52 4c 5f 50 52 4e 47 5f 52 45 53 45 54 3a 20 7b  RL_PRNG_RESET: {
1d8c0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72  .      sqlite3_r
1d8d0 61 6e 64 6f 6d 6e 65 73 73 28 30 2c 30 29 3b 0a  andomness(0,0);.
1d8e0 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
1d8f0 20 7d 0a 0a 20 20 20 20 2f 2a 0a 20 20 20 20 2a   }..    /*.    *
1d900 2a 20 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f  *  sqlite3_test_
1d910 63 6f 6e 74 72 6f 6c 28 42 49 54 56 45 43 5f 54  control(BITVEC_T
1d920 45 53 54 2c 20 73 69 7a 65 2c 20 70 72 6f 67 72  EST, size, progr
1d930 61 6d 29 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a  am).    **.    *
1d940 2a 20 52 75 6e 20 61 20 74 65 73 74 20 61 67 61  * Run a test aga
1d950 69 6e 73 74 20 61 20 42 69 74 76 65 63 20 6f 62  inst a Bitvec ob
1d960 6a 65 63 74 20 6f 66 20 73 69 7a 65 2e 20 20 54  ject of size.  T
1d970 68 65 20 70 72 6f 67 72 61 6d 20 61 72 67 75 6d  he program argum
1d980 65 6e 74 0a 20 20 20 20 2a 2a 20 69 73 20 61 6e  ent.    ** is an
1d990 20 61 72 72 61 79 20 6f 66 20 69 6e 74 65 67 65   array of intege
1d9a0 72 73 20 74 68 61 74 20 64 65 66 69 6e 65 73 20  rs that defines 
1d9b0 74 68 65 20 74 65 73 74 2e 20 20 52 65 74 75 72  the test.  Retur
1d9c0 6e 20 2d 31 20 6f 6e 20 61 0a 20 20 20 20 2a 2a  n -1 on a.    **
1d9d0 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
1d9e0 6f 6e 20 65 72 72 6f 72 2c 20 30 20 6f 6e 20 73  on error, 0 on s
1d9f0 75 63 63 65 73 73 2c 20 6f 72 20 6e 6f 6e 2d 7a  uccess, or non-z
1da00 65 72 6f 20 66 6f 72 20 61 6e 20 65 72 72 6f 72  ero for an error
1da10 2e 0a 20 20 20 20 2a 2a 20 53 65 65 20 74 68 65  ..    ** See the
1da20 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 42 75   sqlite3BitvecBu
1da30 69 6c 74 69 6e 54 65 73 74 28 29 20 66 6f 72 20  iltinTest() for 
1da40 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
1da50 6d 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2f 0a 20  mation..    */. 
1da60 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 54     case SQLITE_T
1da70 45 53 54 43 54 52 4c 5f 42 49 54 56 45 43 5f 54  ESTCTRL_BITVEC_T
1da80 45 53 54 3a 20 7b 0a 20 20 20 20 20 20 69 6e 74  EST: {.      int
1da90 20 73 7a 20 3d 20 76 61 5f 61 72 67 28 61 70 2c   sz = va_arg(ap,
1daa0 20 69 6e 74 29 3b 0a 20 20 20 20 20 20 69 6e 74   int);.      int
1dab0 20 2a 61 50 72 6f 67 20 3d 20 76 61 5f 61 72 67   *aProg = va_arg
1dac0 28 61 70 2c 20 69 6e 74 2a 29 3b 0a 20 20 20 20  (ap, int*);.    
1dad0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 69    rc = sqlite3Bi
1dae0 74 76 65 63 42 75 69 6c 74 69 6e 54 65 73 74 28  tvecBuiltinTest(
1daf0 73 7a 2c 20 61 50 72 6f 67 29 3b 0a 20 20 20 20  sz, aProg);.    
1db00 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 0a    break;.    }..
1db10 20 20 20 20 2f 2a 0a 20 20 20 20 2a 2a 20 20 73      /*.    **  s
1db20 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74  qlite3_test_cont
1db30 72 6f 6c 28 46 41 55 4c 54 5f 49 4e 53 54 41 4c  rol(FAULT_INSTAL
1db40 4c 2c 20 78 43 61 6c 6c 62 61 63 6b 29 0a 20 20  L, xCallback).  
1db50 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 41 72 72 61    **.    ** Arra
1db60 6e 67 65 20 74 6f 20 69 6e 76 6f 6b 65 20 78 43  nge to invoke xC
1db70 61 6c 6c 62 61 63 6b 28 29 20 77 68 65 6e 65 76  allback() whenev
1db80 65 72 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53  er sqlite3FaultS
1db90 69 6d 28 29 20 69 73 20 63 61 6c 6c 65 64 2c 0a  im() is called,.
1dba0 20 20 20 20 2a 2a 20 69 66 20 78 43 61 6c 6c 62      ** if xCallb
1dbb0 61 63 6b 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e  ack is not NULL.
1dbc0 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 41  .    **.    ** A
1dbd0 73 20 61 20 74 65 73 74 20 6f 66 20 74 68 65 20  s a test of the 
1dbe0 66 61 75 6c 74 20 73 69 6d 75 6c 61 74 6f 72 20  fault simulator 
1dbf0 6d 65 63 68 61 6e 69 73 6d 20 69 74 73 65 6c 66  mechanism itself
1dc00 2c 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69  , sqlite3FaultSi
1dc10 6d 28 30 29 0a 20 20 20 20 2a 2a 20 69 73 20 63  m(0).    ** is c
1dc20 61 6c 6c 65 64 20 69 6d 6d 65 64 69 61 74 65 6c  alled immediatel
1dc30 79 20 61 66 74 65 72 20 69 6e 73 74 61 6c 6c 69  y after installi
1dc40 6e 67 20 74 68 65 20 6e 65 77 20 63 61 6c 6c 62  ng the new callb
1dc50 61 63 6b 20 61 6e 64 20 74 68 65 20 72 65 74 75  ack and the retu
1dc60 72 6e 0a 20 20 20 20 2a 2a 20 76 61 6c 75 65 20  rn.    ** value 
1dc70 66 72 6f 6d 20 73 71 6c 69 74 65 33 46 61 75 6c  from sqlite3Faul
1dc80 74 53 69 6d 28 30 29 20 62 65 63 6f 6d 65 73 20  tSim(0) becomes 
1dc90 74 68 65 20 72 65 74 75 72 6e 20 66 72 6f 6d 0a  the return from.
1dca0 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 33 5f 74      ** sqlite3_t
1dcb0 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 29 2e 0a 20  est_control().. 
1dcc0 20 20 20 2a 2f 0a 20 20 20 20 63 61 73 65 20 53     */.    case S
1dcd0 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 46  QLITE_TESTCTRL_F
1dce0 41 55 4c 54 5f 49 4e 53 54 41 4c 4c 3a 20 7b 0a  AULT_INSTALL: {.
1dcf0 20 20 20 20 20 20 2f 2a 20 4d 53 56 43 20 69 73        /* MSVC is
1dd00 20 70 69 63 6b 79 20 61 62 6f 75 74 20 70 75 6c   picky about pul
1dd10 6c 69 6e 67 20 66 75 6e 63 20 70 74 72 73 20 66  ling func ptrs f
1dd20 72 6f 6d 20 76 61 20 6c 69 73 74 73 2e 0a 20 20  rom va lists..  
1dd30 20 20 20 20 2a 2a 20 68 74 74 70 3a 2f 2f 73 75      ** http://su
1dd40 70 70 6f 72 74 2e 6d 69 63 72 6f 73 6f 66 74 2e  pport.microsoft.
1dd50 63 6f 6d 2f 6b 62 2f 34 37 39 36 31 0a 20 20 20  com/kb/47961.   
1dd60 20 20 20 2a 2a 20 73 71 6c 69 74 65 33 47 6c 6f     ** sqlite3Glo
1dd70 62 61 6c 43 6f 6e 66 69 67 2e 78 54 65 73 74 43  balConfig.xTestC
1dd80 61 6c 6c 62 61 63 6b 20 3d 20 76 61 5f 61 72 67  allback = va_arg
1dd90 28 61 70 2c 20 69 6e 74 28 2a 29 28 69 6e 74 29  (ap, int(*)(int)
1dda0 29 3b 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  );.      */.    
1ddb0 20 20 74 79 70 65 64 65 66 20 69 6e 74 28 2a 54    typedef int(*T
1ddc0 45 53 54 43 41 4c 4c 42 41 43 4b 46 55 4e 43 5f  ESTCALLBACKFUNC_
1ddd0 74 29 28 69 6e 74 29 3b 0a 20 20 20 20 20 20 73  t)(int);.      s
1dde0 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66  qlite3GlobalConf
1ddf0 69 67 2e 78 54 65 73 74 43 61 6c 6c 62 61 63 6b  ig.xTestCallback
1de00 20 3d 20 76 61 5f 61 72 67 28 61 70 2c 20 54 45   = va_arg(ap, TE
1de10 53 54 43 41 4c 4c 42 41 43 4b 46 55 4e 43 5f 74  STCALLBACKFUNC_t
1de20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  );.      rc = sq
1de30 6c 69 74 65 33 46 61 75 6c 74 53 69 6d 28 30 29  lite3FaultSim(0)
1de40 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;.      break;. 
1de50 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 0a 20 20 20     }..    /*.   
1de60 20 2a 2a 20 20 73 71 6c 69 74 65 33 5f 74 65 73   **  sqlite3_tes
1de70 74 5f 63 6f 6e 74 72 6f 6c 28 42 45 4e 49 47 4e  t_control(BENIGN
1de80 5f 4d 41 4c 4c 4f 43 5f 48 4f 4f 4b 53 2c 20 78  _MALLOC_HOOKS, x
1de90 42 65 67 69 6e 2c 20 78 45 6e 64 29 0a 20 20 20  Begin, xEnd).   
1dea0 20 2a 2a 0a 20 20 20 20 2a 2a 20 52 65 67 69 73   **.    ** Regis
1deb0 74 65 72 20 68 6f 6f 6b 73 20 74 6f 20 63 61 6c  ter hooks to cal
1dec0 6c 20 74 6f 20 69 6e 64 69 63 61 74 65 20 77 68  l to indicate wh
1ded0 69 63 68 20 6d 61 6c 6c 6f 63 28 29 20 66 61 69  ich malloc() fai
1dee0 6c 75 72 65 73 20 0a 20 20 20 20 2a 2a 20 61 72  lures .    ** ar
1def0 65 20 62 65 6e 69 67 6e 2e 0a 20 20 20 20 2a 2f  e benign..    */
1df00 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
1df10 5f 54 45 53 54 43 54 52 4c 5f 42 45 4e 49 47 4e  _TESTCTRL_BENIGN
1df20 5f 4d 41 4c 4c 4f 43 5f 48 4f 4f 4b 53 3a 20 7b  _MALLOC_HOOKS: {
1df30 0a 20 20 20 20 20 20 74 79 70 65 64 65 66 20 76  .      typedef v
1df40 6f 69 64 20 28 2a 76 6f 69 64 5f 66 75 6e 63 74  oid (*void_funct
1df50 69 6f 6e 29 28 76 6f 69 64 29 3b 0a 20 20 20 20  ion)(void);.    
1df60 20 20 76 6f 69 64 5f 66 75 6e 63 74 69 6f 6e 20    void_function 
1df70 78 42 65 6e 69 67 6e 42 65 67 69 6e 3b 0a 20 20  xBenignBegin;.  
1df80 20 20 20 20 76 6f 69 64 5f 66 75 6e 63 74 69 6f      void_functio
1df90 6e 20 78 42 65 6e 69 67 6e 45 6e 64 3b 0a 20 20  n xBenignEnd;.  
1dfa0 20 20 20 20 78 42 65 6e 69 67 6e 42 65 67 69 6e      xBenignBegin
1dfb0 20 3d 20 76 61 5f 61 72 67 28 61 70 2c 20 76 6f   = va_arg(ap, vo
1dfc0 69 64 5f 66 75 6e 63 74 69 6f 6e 29 3b 0a 20 20  id_function);.  
1dfd0 20 20 20 20 78 42 65 6e 69 67 6e 45 6e 64 20 3d      xBenignEnd =
1dfe0 20 76 61 5f 61 72 67 28 61 70 2c 20 76 6f 69 64   va_arg(ap, void
1dff0 5f 66 75 6e 63 74 69 6f 6e 29 3b 0a 20 20 20 20  _function);.    
1e000 20 20 73 71 6c 69 74 65 33 42 65 6e 69 67 6e 4d    sqlite3BenignM
1e010 61 6c 6c 6f 63 48 6f 6f 6b 73 28 78 42 65 6e 69  allocHooks(xBeni
1e020 67 6e 42 65 67 69 6e 2c 20 78 42 65 6e 69 67 6e  gnBegin, xBenign
1e030 45 6e 64 29 3b 0a 20 20 20 20 20 20 62 72 65 61  End);.      brea
1e040 6b 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a  k;.    }..    /*
1e050 0a 20 20 20 20 2a 2a 20 20 73 71 6c 69 74 65 33  .    **  sqlite3
1e060 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 53 51  _test_control(SQ
1e070 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 50 45  LITE_TESTCTRL_PE
1e080 4e 44 49 4e 47 5f 42 59 54 45 2c 20 75 6e 73 69  NDING_BYTE, unsi
1e090 67 6e 65 64 20 69 6e 74 20 58 29 0a 20 20 20 20  gned int X).    
1e0a0 2a 2a 0a 20 20 20 20 2a 2a 20 53 65 74 20 74 68  **.    ** Set th
1e0b0 65 20 50 45 4e 44 49 4e 47 20 62 79 74 65 20 74  e PENDING byte t
1e0c0 6f 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 74  o the value in t
1e0d0 68 65 20 61 72 67 75 6d 65 6e 74 2c 20 69 66 20  he argument, if 
1e0e0 58 3e 30 2e 0a 20 20 20 20 2a 2a 20 4d 61 6b 65  X>0..    ** Make
1e0f0 20 6e 6f 20 63 68 61 6e 67 65 73 20 69 66 20 58   no changes if X
1e100 3d 3d 30 2e 20 20 52 65 74 75 72 6e 20 74 68 65  ==0.  Return the
1e110 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 70 65   value of the pe
1e120 6e 64 69 6e 67 20 62 79 74 65 0a 20 20 20 20 2a  nding byte.    *
1e130 2a 20 61 73 20 69 74 20 65 78 69 73 74 69 6e 67  * as it existing
1e140 20 62 65 66 6f 72 65 20 74 68 69 73 20 72 6f 75   before this rou
1e150 74 69 6e 65 20 77 61 73 20 63 61 6c 6c 65 64 2e  tine was called.
1e160 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 49  .    **.    ** I
1e170 4d 50 4f 52 54 41 4e 54 3a 20 20 43 68 61 6e 67  MPORTANT:  Chang
1e180 69 6e 67 20 74 68 65 20 50 45 4e 44 49 4e 47 20  ing the PENDING 
1e190 62 79 74 65 20 66 72 6f 6d 20 30 78 34 30 30 30  byte from 0x4000
1e1a0 30 30 30 30 20 72 65 73 75 6c 74 73 20 69 6e 0a  0000 results in.
1e1b0 20 20 20 20 2a 2a 20 61 6e 20 69 6e 63 6f 6d 70      ** an incomp
1e1c0 61 74 69 62 6c 65 20 64 61 74 61 62 61 73 65 20  atible database 
1e1d0 66 69 6c 65 20 66 6f 72 6d 61 74 2e 20 20 43 68  file format.  Ch
1e1e0 61 6e 67 69 6e 67 20 74 68 65 20 50 45 4e 44 49  anging the PENDI
1e1f0 4e 47 20 62 79 74 65 0a 20 20 20 20 2a 2a 20 77  NG byte.    ** w
1e200 68 69 6c 65 20 61 6e 79 20 64 61 74 61 62 61 73  hile any databas
1e210 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20  e connection is 
1e220 6f 70 65 6e 20 72 65 73 75 6c 74 73 20 69 6e 20  open results in 
1e230 75 6e 64 65 66 69 6e 65 64 20 61 6e 64 0a 20 20  undefined and.  
1e240 20 20 2a 2a 20 64 65 6c 65 74 65 72 69 6f 75 73    ** deleterious
1e250 20 62 65 68 61 76 69 6f 72 2e 0a 20 20 20 20 2a   behavior..    *
1e260 2f 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  /.    case SQLIT
1e270 45 5f 54 45 53 54 43 54 52 4c 5f 50 45 4e 44 49  E_TESTCTRL_PENDI
1e280 4e 47 5f 42 59 54 45 3a 20 7b 0a 20 20 20 20 20  NG_BYTE: {.     
1e290 20 72 63 20 3d 20 50 45 4e 44 49 4e 47 5f 42 59   rc = PENDING_BY
1e2a0 54 45 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  TE;.#ifndef SQLI
1e2b0 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 20 20 20 20  TE_OMIT_WSD.    
1e2c0 20 20 7b 0a 20 20 20 20 20 20 20 20 75 6e 73 69    {.        unsi
1e2d0 67 6e 65 64 20 69 6e 74 20 6e 65 77 56 61 6c 20  gned int newVal 
1e2e0 3d 20 76 61 5f 61 72 67 28 61 70 2c 20 75 6e 73  = va_arg(ap, uns
1e2f0 69 67 6e 65 64 20 69 6e 74 29 3b 0a 20 20 20 20  igned int);.    
1e300 20 20 20 20 69 66 28 20 6e 65 77 56 61 6c 20 29      if( newVal )
1e310 20 73 71 6c 69 74 65 33 50 65 6e 64 69 6e 67 42   sqlite3PendingB
1e320 79 74 65 20 3d 20 6e 65 77 56 61 6c 3b 0a 20 20  yte = newVal;.  
1e330 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20      }.#endif.   
1e340 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
1e350 0a 20 20 20 20 2f 2a 0a 20 20 20 20 2a 2a 20 20  .    /*.    **  
1e360 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e  sqlite3_test_con
1e370 74 72 6f 6c 28 53 51 4c 49 54 45 5f 54 45 53 54  trol(SQLITE_TEST
1e380 43 54 52 4c 5f 41 53 53 45 52 54 2c 20 69 6e 74  CTRL_ASSERT, int
1e390 20 58 29 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a   X).    **.    *
1e3a0 2a 20 54 68 69 73 20 61 63 74 69 6f 6e 20 70 72  * This action pr
1e3b0 6f 76 69 64 65 73 20 61 20 72 75 6e 2d 74 69 6d  ovides a run-tim
1e3c0 65 20 74 65 73 74 20 74 6f 20 73 65 65 20 77 68  e test to see wh
1e3d0 65 74 68 65 72 20 6f 72 20 6e 6f 74 0a 20 20 20  ether or not.   
1e3e0 20 2a 2a 20 61 73 73 65 72 74 28 29 20 77 61 73   ** assert() was
1e3f0 20 65 6e 61 62 6c 65 64 20 61 74 20 63 6f 6d 70   enabled at comp
1e400 69 6c 65 2d 74 69 6d 65 2e 20 20 49 66 20 58 20  ile-time.  If X 
1e410 69 73 20 74 72 75 65 20 61 6e 64 20 61 73 73 65  is true and asse
1e420 72 74 28 29 0a 20 20 20 20 2a 2a 20 69 73 20 65  rt().    ** is e
1e430 6e 61 62 6c 65 64 2c 20 74 68 65 6e 20 74 68 65  nabled, then the
1e440 20 72 65 74 75 72 6e 20 76 61 6c 75 65 20 69 73   return value is
1e450 20 74 72 75 65 2e 20 20 49 66 20 58 20 69 73 20   true.  If X is 
1e460 74 72 75 65 20 61 6e 64 0a 20 20 20 20 2a 2a 20  true and.    ** 
1e470 61 73 73 65 72 74 28 29 20 69 73 20 64 69 73 61  assert() is disa
1e480 62 6c 65 64 2c 20 74 68 65 6e 20 74 68 65 20 72  bled, then the r
1e490 65 74 75 72 6e 20 76 61 6c 75 65 20 69 73 20 7a  eturn value is z
1e4a0 65 72 6f 2e 20 20 49 66 20 58 20 69 73 0a 20 20  ero.  If X is.  
1e4b0 20 20 2a 2a 20 66 61 6c 73 65 20 61 6e 64 20 61    ** false and a
1e4c0 73 73 65 72 74 28 29 20 69 73 20 65 6e 61 62 6c  ssert() is enabl
1e4d0 65 64 2c 20 74 68 65 6e 20 74 68 65 20 61 73 73  ed, then the ass
1e4e0 65 72 74 69 6f 6e 20 66 69 72 65 73 20 61 6e 64  ertion fires and
1e4f0 20 74 68 65 0a 20 20 20 20 2a 2a 20 70 72 6f 63   the.    ** proc
1e500 65 73 73 20 61 62 6f 72 74 73 2e 20 20 49 66 20  ess aborts.  If 
1e510 58 20 69 73 20 66 61 6c 73 65 20 61 6e 64 20 61  X is false and a
1e520 73 73 65 72 74 28 29 20 69 73 20 64 69 73 61 62  ssert() is disab
1e530 6c 65 64 2c 20 74 68 65 6e 20 74 68 65 0a 20 20  led, then the.  
1e540 20 20 2a 2a 20 72 65 74 75 72 6e 20 76 61 6c 75    ** return valu
1e550 65 20 69 73 20 7a 65 72 6f 2e 0a 20 20 20 20 2a  e is zero..    *
1e560 2f 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  /.    case SQLIT
1e570 45 5f 54 45 53 54 43 54 52 4c 5f 41 53 53 45 52  E_TESTCTRL_ASSER
1e580 54 3a 20 7b 0a 20 20 20 20 20 20 76 6f 6c 61 74  T: {.      volat
1e590 69 6c 65 20 69 6e 74 20 78 20 3d 20 30 3b 0a 20  ile int x = 0;. 
1e5a0 20 20 20 20 20 61 73 73 65 72 74 28 20 2f 2a 73       assert( /*s
1e5b0 69 64 65 2d 65 66 66 65 63 74 73 2d 6f 6b 2a 2f  ide-effects-ok*/
1e5c0 20 28 78 20 3d 20 76 61 5f 61 72 67 28 61 70 2c   (x = va_arg(ap,
1e5d0 69 6e 74 29 29 21 3d 30 20 29 3b 0a 20 20 20 20  int))!=0 );.    
1e5e0 20 20 72 63 20 3d 20 78 3b 0a 20 20 20 20 20 20    rc = x;.      
1e5f0 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 0a 0a 20  break;.    }... 
1e600 20 20 20 2f 2a 0a 20 20 20 20 2a 2a 20 20 73 71     /*.    **  sq
1e610 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72  lite3_test_contr
1e620 6f 6c 28 53 51 4c 49 54 45 5f 54 45 53 54 43 54  ol(SQLITE_TESTCT
1e630 52 4c 5f 41 4c 57 41 59 53 2c 20 69 6e 74 20 58  RL_ALWAYS, int X
1e640 29 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20  ).    **.    ** 
1e650 54 68 69 73 20 61 63 74 69 6f 6e 20 70 72 6f 76  This action prov
1e660 69 64 65 73 20 61 20 72 75 6e 2d 74 69 6d 65 20  ides a run-time 
1e670 74 65 73 74 20 74 6f 20 73 65 65 20 68 6f 77 20  test to see how 
1e680 74 68 65 20 41 4c 57 41 59 53 20 61 6e 64 0a 20  the ALWAYS and. 
1e690 20 20 20 2a 2a 20 4e 45 56 45 52 20 6d 61 63 72     ** NEVER macr
1e6a0 6f 73 20 77 65 72 65 20 64 65 66 69 6e 65 64 20  os were defined 
1e6b0 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 2e  at compile-time.
1e6c0 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 54  .    **.    ** T
1e6d0 68 65 20 72 65 74 75 72 6e 20 76 61 6c 75 65 20  he return value 
1e6e0 69 73 20 41 4c 57 41 59 53 28 58 29 2e 20 20 0a  is ALWAYS(X).  .
1e6f0 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 54 68      **.    ** Th
1e700 65 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20 74 65  e recommended te
1e710 73 74 20 69 73 20 58 3d 3d 32 2e 20 20 49 66 20  st is X==2.  If 
1e720 74 68 65 20 72 65 74 75 72 6e 20 76 61 6c 75 65  the return value
1e730 20 69 73 20 32 2c 20 74 68 61 74 20 6d 65 61 6e   is 2, that mean
1e740 73 0a 20 20 20 20 2a 2a 20 41 4c 57 41 59 53 28  s.    ** ALWAYS(
1e750 29 20 61 6e 64 20 4e 45 56 45 52 28 29 20 61 72  ) and NEVER() ar
1e760 65 20 62 6f 74 68 20 6e 6f 2d 6f 70 20 70 61 73  e both no-op pas
1e770 73 2d 74 68 72 6f 75 67 68 20 6d 61 63 72 6f 73  s-through macros
1e780 2c 20 77 68 69 63 68 20 69 73 20 74 68 65 0a 20  , which is the. 
1e790 20 20 20 2a 2a 20 64 65 66 61 75 6c 74 20 73 65     ** default se
1e7a0 74 74 69 6e 67 2e 20 20 49 66 20 74 68 65 20 72  tting.  If the r
1e7b0 65 74 75 72 6e 20 76 61 6c 75 65 20 69 73 20 31  eturn value is 1
1e7c0 2c 20 74 68 65 6e 20 41 4c 57 41 59 53 28 29 20  , then ALWAYS() 
1e7d0 69 73 20 65 69 74 68 65 72 0a 20 20 20 20 2a 2a  is either.    **
1e7e0 20 68 61 72 64 2d 63 6f 64 65 64 20 74 6f 20 74   hard-coded to t
1e7f0 72 75 65 20 6f 72 20 65 6c 73 65 20 69 74 20 61  rue or else it a
1e800 73 73 65 72 74 73 20 69 66 20 69 74 73 20 61 72  sserts if its ar
1e810 67 75 6d 65 6e 74 20 69 73 20 66 61 6c 73 65 2e  gument is false.
1e820 0a 20 20 20 20 2a 2a 20 54 68 65 20 66 69 72 73  .    ** The firs
1e830 74 20 62 65 68 61 76 69 6f 72 20 28 68 61 72 64  t behavior (hard
1e840 2d 63 6f 64 65 64 20 74 6f 20 74 72 75 65 29 20  -coded to true) 
1e850 69 73 20 74 68 65 20 63 61 73 65 20 69 66 0a 20  is the case if. 
1e860 20 20 20 2a 2a 20 53 51 4c 49 54 45 5f 54 45 53     ** SQLITE_TES
1e870 54 43 54 52 4c 5f 41 53 53 45 52 54 20 73 68 6f  TCTRL_ASSERT sho
1e880 77 73 20 74 68 61 74 20 61 73 73 65 72 74 28 29  ws that assert()
1e890 20 69 73 20 64 69 73 61 62 6c 65 64 20 61 6e 64   is disabled and
1e8a0 20 74 68 65 20 73 65 63 6f 6e 64 0a 20 20 20 20   the second.    
1e8b0 2a 2a 20 62 65 68 61 76 69 6f 72 20 28 61 73 73  ** behavior (ass
1e8c0 65 72 74 20 69 66 20 74 68 65 20 61 72 67 75 6d  ert if the argum
1e8d0 65 6e 74 20 74 6f 20 41 4c 57 41 59 53 28 29 20  ent to ALWAYS() 
1e8e0 69 73 20 66 61 6c 73 65 29 20 69 73 20 74 68 65  is false) is the
1e8f0 20 63 61 73 65 20 69 66 0a 20 20 20 20 2a 2a 20   case if.    ** 
1e900 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f  SQLITE_TESTCTRL_
1e910 41 53 53 45 52 54 20 73 68 6f 77 73 20 74 68 61  ASSERT shows tha
1e920 74 20 61 73 73 65 72 74 28 29 20 69 73 20 65 6e  t assert() is en
1e930 61 62 6c 65 64 2e 0a 20 20 20 20 2a 2a 0a 20 20  abled..    **.  
1e940 20 20 2a 2a 20 54 68 65 20 72 75 6e 2d 74 69 6d    ** The run-tim
1e950 65 20 74 65 73 74 20 70 72 6f 63 65 64 75 72 65  e test procedure
1e960 20 6d 69 67 68 74 20 6c 6f 6f 6b 20 73 6f 6d 65   might look some
1e970 74 68 69 6e 67 20 6c 69 6b 65 20 74 68 69 73 3a  thing like this:
1e980 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 20  .    **.    **  
1e990 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 74 65    if( sqlite3_te
1e9a0 73 74 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c 49 54  st_control(SQLIT
1e9b0 45 5f 54 45 53 54 43 54 52 4c 5f 41 4c 57 41 59  E_TESTCTRL_ALWAY
1e9c0 53 2c 20 32 29 3d 3d 32 20 29 7b 0a 20 20 20 20  S, 2)==2 ){.    
1e9d0 2a 2a 20 20 20 20 20 20 2f 2f 20 41 4c 57 41 59  **      // ALWAY
1e9e0 53 28 29 20 61 6e 64 20 4e 45 56 45 52 28 29 20  S() and NEVER() 
1e9f0 61 72 65 20 6e 6f 2d 6f 70 20 70 61 73 73 2d 74  are no-op pass-t
1ea00 68 72 6f 75 67 68 20 6d 61 63 72 6f 73 0a 20 20  hrough macros.  
1ea10 20 20 2a 2a 20 20 20 20 7d 65 6c 73 65 20 69 66    **    }else if
1ea20 28 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63  ( sqlite3_test_c
1ea30 6f 6e 74 72 6f 6c 28 53 51 4c 49 54 45 5f 54 45  ontrol(SQLITE_TE
1ea40 53 54 43 54 52 4c 5f 41 53 53 45 52 54 2c 20 31  STCTRL_ASSERT, 1
1ea50 29 20 29 7b 0a 20 20 20 20 2a 2a 20 20 20 20 20  ) ){.    **     
1ea60 20 2f 2f 20 41 4c 57 41 59 53 28 78 29 20 61 73   // ALWAYS(x) as
1ea70 73 65 72 74 73 20 74 68 61 74 20 78 20 69 73 20  serts that x is 
1ea80 74 72 75 65 2e 20 4e 45 56 45 52 28 78 29 20 61  true. NEVER(x) a
1ea90 73 73 65 72 74 73 20 78 20 69 73 20 66 61 6c 73  sserts x is fals
1eaa0 65 2e 0a 20 20 20 20 2a 2a 20 20 20 20 7d 65 6c  e..    **    }el
1eab0 73 65 7b 0a 20 20 20 20 2a 2a 20 20 20 20 20 20  se{.    **      
1eac0 2f 2f 20 41 4c 57 41 59 53 28 78 29 20 69 73 20  // ALWAYS(x) is 
1ead0 61 20 63 6f 6e 73 74 61 6e 74 20 31 2e 20 20 4e  a constant 1.  N
1eae0 45 56 45 52 28 78 29 20 69 73 20 61 20 63 6f 6e  EVER(x) is a con
1eaf0 73 74 61 6e 74 20 30 2e 0a 20 20 20 20 2a 2a 20  stant 0..    ** 
1eb00 20 20 20 7d 0a 20 20 20 20 2a 2f 0a 20 20 20 20     }.    */.    
1eb10 63 61 73 65 20 53 51 4c 49 54 45 5f 54 45 53 54  case SQLITE_TEST
1eb20 43 54 52 4c 5f 41 4c 57 41 59 53 3a 20 7b 0a 20  CTRL_ALWAYS: {. 
1eb30 20 20 20 20 20 69 6e 74 20 78 20 3d 20 76 61 5f       int x = va_
1eb40 61 72 67 28 61 70 2c 69 6e 74 29 3b 0a 20 20 20  arg(ap,int);.   
1eb50 20 20 20 72 63 20 3d 20 41 4c 57 41 59 53 28 78     rc = ALWAYS(x
1eb60 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  );.      break;.
1eb70 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 0a 20 20      }..    /*.  
1eb80 20 20 2a 2a 20 20 20 73 71 6c 69 74 65 33 5f 74    **   sqlite3_t
1eb90 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c 49  est_control(SQLI
1eba0 54 45 5f 54 45 53 54 43 54 52 4c 5f 42 59 54 45  TE_TESTCTRL_BYTE
1ebb0 4f 52 44 45 52 29 3b 0a 20 20 20 20 2a 2a 0a 20  ORDER);.    **. 
1ebc0 20 20 20 2a 2a 20 54 68 65 20 69 6e 74 65 67 65     ** The intege
1ebd0 72 20 72 65 74 75 72 6e 65 64 20 72 65 76 65 61  r returned revea
1ebe0 6c 73 20 74 68 65 20 62 79 74 65 2d 6f 72 64 65  ls the byte-orde
1ebf0 72 20 6f 66 20 74 68 65 20 63 6f 6d 70 75 74 65  r of the compute
1ec00 72 20 6f 6e 20 77 68 69 63 68 0a 20 20 20 20 2a  r on which.    *
1ec10 2a 20 53 51 4c 69 74 65 20 69 73 20 72 75 6e 6e  * SQLite is runn
1ec20 69 6e 67 3a 0a 20 20 20 20 2a 2a 0a 20 20 20 20  ing:.    **.    
1ec30 2a 2a 20 20 20 20 20 20 20 31 20 20 20 20 20 62  **       1     b
1ec40 69 67 2d 65 6e 64 69 61 6e 2c 20 20 20 20 64 65  ig-endian,    de
1ec50 74 65 72 6d 69 6e 65 64 20 61 74 20 72 75 6e 2d  termined at run-
1ec60 74 69 6d 65 0a 20 20 20 20 2a 2a 20 20 20 20 20  time.    **     
1ec70 20 31 30 20 20 20 20 20 6c 69 74 74 6c 65 2d 65   10     little-e
1ec80 6e 64 69 61 6e 2c 20 64 65 74 65 72 6d 69 6e 65  ndian, determine
1ec90 64 20 61 74 20 72 75 6e 2d 74 69 6d 65 0a 20 20  d at run-time.  
1eca0 20 20 2a 2a 20 20 34 33 32 31 30 31 20 20 20 20    **  432101    
1ecb0 20 62 69 67 2d 65 6e 64 69 61 6e 2c 20 20 20 20   big-endian,    
1ecc0 64 65 74 65 72 6d 69 6e 65 64 20 61 74 20 63 6f  determined at co
1ecd0 6d 70 69 6c 65 2d 74 69 6d 65 0a 20 20 20 20 2a  mpile-time.    *
1ece0 2a 20 20 31 32 33 34 31 30 20 20 20 20 20 6c 69  *  123410     li
1ecf0 74 74 6c 65 2d 65 6e 64 69 61 6e 2c 20 64 65 74  ttle-endian, det
1ed00 65 72 6d 69 6e 65 64 20 61 74 20 63 6f 6d 70 69  ermined at compi
1ed10 6c 65 2d 74 69 6d 65 0a 20 20 20 20 2a 2f 20 0a  le-time.    */ .
1ed20 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
1ed30 54 45 53 54 43 54 52 4c 5f 42 59 54 45 4f 52 44  TESTCTRL_BYTEORD
1ed40 45 52 3a 20 7b 0a 20 20 20 20 20 20 72 63 20 3d  ER: {.      rc =
1ed50 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45   SQLITE_BYTEORDE
1ed60 52 2a 31 30 30 20 2b 20 53 51 4c 49 54 45 5f 4c  R*100 + SQLITE_L
1ed70 49 54 54 4c 45 45 4e 44 49 41 4e 2a 31 30 20 2b  ITTLEENDIAN*10 +
1ed80 20 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41   SQLITE_BIGENDIA
1ed90 4e 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  N;.      break;.
1eda0 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 20 20      }..    /*   
1edb0 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e  sqlite3_test_con
1edc0 74 72 6f 6c 28 53 51 4c 49 54 45 5f 54 45 53 54  trol(SQLITE_TEST
1edd0 43 54 52 4c 5f 52 45 53 45 52 56 45 2c 20 73 71  CTRL_RESERVE, sq
1ede0 6c 69 74 65 33 20 2a 64 62 2c 20 69 6e 74 20 4e  lite3 *db, int N
1edf0 29 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20  ).    **.    ** 
1ee00 53 65 74 20 74 68 65 20 6e 52 65 73 65 72 76 65  Set the nReserve
1ee10 20 73 69 7a 65 20 74 6f 20 4e 20 66 6f 72 20 74   size to N for t
1ee20 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
1ee30 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   on the database
1ee40 0a 20 20 20 20 2a 2a 20 63 6f 6e 6e 65 63 74 69  .    ** connecti
1ee50 6f 6e 20 64 62 2e 0a 20 20 20 20 2a 2f 0a 20 20  on db..    */.  
1ee60 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 54 45    case SQLITE_TE
1ee70 53 54 43 54 52 4c 5f 52 45 53 45 52 56 45 3a 20  STCTRL_RESERVE: 
1ee80 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 20  {.      sqlite3 
1ee90 2a 64 62 20 3d 20 76 61 5f 61 72 67 28 61 70 2c  *db = va_arg(ap,
1eea0 20 73 71 6c 69 74 65 33 2a 29 3b 0a 20 20 20 20   sqlite3*);.    
1eeb0 20 20 69 6e 74 20 78 20 3d 20 76 61 5f 61 72 67    int x = va_arg
1eec0 28 61 70 2c 69 6e 74 29 3b 0a 20 20 20 20 20 20  (ap,int);.      
1eed0 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e  sqlite3_mutex_en
1eee0 74 65 72 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0a  ter(db->mutex);.
1eef0 20 20 20 20 20 20 73 71 6c 69 74 65 33 42 74 72        sqlite3Btr
1ef00 65 65 53 65 74 50 61 67 65 53 69 7a 65 28 64 62  eeSetPageSize(db
1ef10 2d 3e 61 44 62 5b 30 5d 2e 70 42 74 2c 20 30 2c  ->aDb[0].pBt, 0,
1ef20 20 78 2c 20 30 29 3b 0a 20 20 20 20 20 20 73 71   x, 0);.      sq
1ef30 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76  lite3_mutex_leav
1ef40 65 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20  e(db->mutex);.  
1ef50 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
1ef60 0a 0a 20 20 20 20 2f 2a 20 20 73 71 6c 69 74 65  ..    /*  sqlite
1ef70 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 53  3_test_control(S
1ef80 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 4f  QLITE_TESTCTRL_O
1ef90 50 54 49 4d 49 5a 41 54 49 4f 4e 53 2c 20 73 71  PTIMIZATIONS, sq
1efa0 6c 69 74 65 33 20 2a 64 62 2c 20 69 6e 74 20 4e  lite3 *db, int N
1efb0 29 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20  ).    **.    ** 
1efc0 45 6e 61 62 6c 65 20 6f 72 20 64 69 73 61 62 6c  Enable or disabl
1efd0 65 20 76 61 72 69 6f 75 73 20 6f 70 74 69 6d 69  e various optimi
1efe0 7a 61 74 69 6f 6e 73 20 66 6f 72 20 74 65 73 74  zations for test
1eff0 69 6e 67 20 70 75 72 70 6f 73 65 73 2e 20 20 54  ing purposes.  T
1f000 68 65 20 0a 20 20 20 20 2a 2a 20 61 72 67 75 6d  he .    ** argum
1f010 65 6e 74 20 4e 20 69 73 20 61 20 62 69 74 6d 61  ent N is a bitma
1f020 73 6b 20 6f 66 20 6f 70 74 69 6d 69 7a 61 74 69  sk of optimizati
1f030 6f 6e 73 20 74 6f 20 62 65 20 64 69 73 61 62 6c  ons to be disabl
1f040 65 64 2e 20 20 46 6f 72 20 6e 6f 72 6d 61 6c 0a  ed.  For normal.
1f050 20 20 20 20 2a 2a 20 6f 70 65 72 61 74 69 6f 6e      ** operation
1f060 20 4e 20 73 68 6f 75 6c 64 20 62 65 20 30 2e 20   N should be 0. 
1f070 20 54 68 65 20 69 64 65 61 20 69 73 20 74 68 61   The idea is tha
1f080 74 20 61 20 74 65 73 74 20 70 72 6f 67 72 61 6d  t a test program
1f090 20 28 6c 69 6b 65 20 74 68 65 0a 20 20 20 20 2a   (like the.    *
1f0a0 2a 20 53 51 4c 20 4c 6f 67 69 63 20 54 65 73 74  * SQL Logic Test
1f0b0 20 6f 72 20 53 4c 54 20 74 65 73 74 20 6d 6f 64   or SLT test mod
1f0c0 75 6c 65 29 20 63 61 6e 20 72 75 6e 20 74 68 65  ule) can run the
1f0d0 20 73 61 6d 65 20 53 51 4c 20 6d 75 6c 74 69 70   same SQL multip
1f0e0 6c 65 20 74 69 6d 65 73 0a 20 20 20 20 2a 2a 20  le times.    ** 
1f0f0 77 69 74 68 20 76 61 72 69 6f 75 73 20 6f 70 74  with various opt
1f100 69 6d 69 7a 61 74 69 6f 6e 73 20 64 69 73 61 62  imizations disab
1f110 6c 65 64 20 74 6f 20 76 65 72 69 66 79 20 74 68  led to verify th
1f120 61 74 20 74 68 65 20 73 61 6d 65 20 61 6e 73 77  at the same answ
1f130 65 72 0a 20 20 20 20 2a 2a 20 69 73 20 6f 62 74  er.    ** is obt
1f140 61 69 6e 65 64 20 69 6e 20 65 76 65 72 79 20 63  ained in every c
1f150 61 73 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  ase..    */.    
1f160 63 61 73 65 20 53 51 4c 49 54 45 5f 54 45 53 54  case SQLITE_TEST
1f170 43 54 52 4c 5f 4f 50 54 49 4d 49 5a 41 54 49 4f  CTRL_OPTIMIZATIO
1f180 4e 53 3a 20 7b 0a 20 20 20 20 20 20 73 71 6c 69  NS: {.      sqli
1f190 74 65 33 20 2a 64 62 20 3d 20 76 61 5f 61 72 67  te3 *db = va_arg
1f1a0 28 61 70 2c 20 73 71 6c 69 74 65 33 2a 29 3b 0a  (ap, sqlite3*);.
1f1b0 20 20 20 20 20 20 64 62 2d 3e 64 62 4f 70 74 46        db->dbOptF
1f1c0 6c 61 67 73 20 3d 20 28 75 31 36 29 28 76 61 5f  lags = (u16)(va_
1f1d0 61 72 67 28 61 70 2c 20 69 6e 74 29 20 26 20 30  arg(ap, int) & 0
1f1e0 78 66 66 66 66 29 3b 0a 20 20 20 20 20 20 62 72  xffff);.      br
1f1f0 65 61 6b 3b 0a 20 20 20 20 7d 0a 0a 23 69 66 64  eak;.    }..#ifd
1f200 65 66 20 53 51 4c 49 54 45 5f 4e 5f 4b 45 59 57  ef SQLITE_N_KEYW
1f210 4f 52 44 0a 20 20 20 20 2f 2a 20 73 71 6c 69 74  ORD.    /* sqlit
1f220 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28  e3_test_control(
1f230 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f  SQLITE_TESTCTRL_
1f240 49 53 4b 45 59 57 4f 52 44 2c 20 63 6f 6e 73 74  ISKEYWORD, const
1f250 20 63 68 61 72 20 2a 7a 57 6f 72 64 29 0a 20 20   char *zWord).  
1f260 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 49 66 20 7a    **.    ** If z
1f270 57 6f 72 64 20 69 73 20 61 20 6b 65 79 77 6f 72  Word is a keywor
1f280 64 20 72 65 63 6f 67 6e 69 7a 65 64 20 62 79 20  d recognized by 
1f290 74 68 65 20 70 61 72 73 65 72 2c 20 74 68 65 6e  the parser, then
1f2a0 20 72 65 74 75 72 6e 20 74 68 65 0a 20 20 20 20   return the.    
1f2b0 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 6b 65 79  ** number of key
1f2c0 77 6f 72 64 73 2e 20 20 4f 72 20 69 66 20 7a 57  words.  Or if zW
1f2d0 6f 72 64 20 69 73 20 6e 6f 74 20 61 20 6b 65 79  ord is not a key
1f2e0 77 6f 72 64 2c 20 72 65 74 75 72 6e 20 30 2e 0a  word, return 0..
1f2f0 20 20 20 20 2a 2a 20 0a 20 20 20 20 2a 2a 20 54      ** .    ** T
1f300 68 69 73 20 74 65 73 74 20 66 65 61 74 75 72 65  his test feature
1f310 20 69 73 20 6f 6e 6c 79 20 61 76 61 69 6c 61 62   is only availab
1f320 6c 65 20 69 6e 20 74 68 65 20 61 6d 61 6c 67 61  le in the amalga
1f330 6d 61 74 69 6f 6e 20 73 69 6e 63 65 0a 20 20 20  mation since.   
1f340 20 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 4e   ** the SQLITE_N
1f350 5f 4b 45 59 57 4f 52 44 20 6d 61 63 72 6f 20 69  _KEYWORD macro i
1f360 73 20 6e 6f 74 20 64 65 66 69 6e 65 64 20 69 6e  s not defined in
1f370 20 74 68 69 73 20 66 69 6c 65 20 69 66 20 53 51   this file if SQ
1f380 4c 69 74 65 0a 20 20 20 20 2a 2a 20 69 73 20 62  Lite.    ** is b
1f390 75 69 6c 74 20 75 73 69 6e 67 20 73 65 70 61 72  uilt using separ
1f3a0 61 74 65 20 73 6f 75 72 63 65 20 66 69 6c 65 73  ate source files
1f3b0 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 63 61 73  ..    */.    cas
1f3c0 65 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52  e SQLITE_TESTCTR
1f3d0 4c 5f 49 53 4b 45 59 57 4f 52 44 3a 20 7b 0a 20  L_ISKEYWORD: {. 
1f3e0 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20       const char 
1f3f0 2a 7a 57 6f 72 64 20 3d 20 76 61 5f 61 72 67 28  *zWord = va_arg(
1f400 61 70 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  ap, const char*)
1f410 3b 0a 20 20 20 20 20 20 69 6e 74 20 6e 20 3d 20  ;.      int n = 
1f420 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
1f430 7a 57 6f 72 64 29 3b 0a 20 20 20 20 20 20 72 63  zWord);.      rc
1f440 20 3d 20 28 73 71 6c 69 74 65 33 4b 65 79 77 6f   = (sqlite3Keywo
1f450 72 64 43 6f 64 65 28 28 75 38 2a 29 7a 57 6f 72  rdCode((u8*)zWor
1f460 64 2c 20 6e 29 21 3d 54 4b 5f 49 44 29 20 3f 20  d, n)!=TK_ID) ? 
1f470 53 51 4c 49 54 45 5f 4e 5f 4b 45 59 57 4f 52 44  SQLITE_N_KEYWORD
1f480 20 3a 20 30 3b 0a 20 20 20 20 20 20 62 72 65 61   : 0;.      brea
1f490 6b 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 20  k;.    }.#endif 
1f4a0 0a 0a 20 20 20 20 2f 2a 20 73 71 6c 69 74 65 33  ..    /* sqlite3
1f4b0 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 53 51  _test_control(SQ
1f4c0 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 53 43  LITE_TESTCTRL_SC
1f4d0 52 41 54 43 48 4d 41 4c 4c 4f 43 2c 20 73 7a 2c  RATCHMALLOC, sz,
1f4e0 20 26 70 4e 65 77 2c 20 70 46 72 65 65 29 3b 0a   &pNew, pFree);.
1f4f0 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 50 61      **.    ** Pa
1f500 73 73 20 70 46 72 65 65 20 69 6e 74 6f 20 73 71  ss pFree into sq
1f510 6c 69 74 65 33 53 63 72 61 74 63 68 46 72 65 65  lite3ScratchFree
1f520 28 29 2e 20 0a 20 20 20 20 2a 2a 20 49 66 20 73  (). .    ** If s
1f530 7a 3e 30 20 74 68 65 6e 20 61 6c 6c 6f 63 61 74  z>0 then allocat
1f540 65 20 61 20 73 63 72 61 74 63 68 20 62 75 66 66  e a scratch buff
1f550 65 72 20 69 6e 74 6f 20 70 4e 65 77 2e 20 20 0a  er into pNew.  .
1f560 20 20 20 20 2a 2f 0a 20 20 20 20 63 61 73 65 20      */.    case 
1f570 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f  SQLITE_TESTCTRL_
1f580 53 43 52 41 54 43 48 4d 41 4c 4c 4f 43 3a 20 7b  SCRATCHMALLOC: {
1f590 0a 20 20 20 20 20 20 76 6f 69 64 20 2a 70 46 72  .      void *pFr
1f5a0 65 65 2c 20 2a 2a 70 70 4e 65 77 3b 0a 20 20 20  ee, **ppNew;.   
1f5b0 20 20 20 69 6e 74 20 73 7a 3b 0a 20 20 20 20 20     int sz;.     
1f5c0 20 73 7a 20 3d 20 76 61 5f 61 72 67 28 61 70 2c   sz = va_arg(ap,
1f5d0 20 69 6e 74 29 3b 0a 20 20 20 20 20 20 70 70 4e   int);.      ppN
1f5e0 65 77 20 3d 20 76 61 5f 61 72 67 28 61 70 2c 20  ew = va_arg(ap, 
1f5f0 76 6f 69 64 2a 2a 29 3b 0a 20 20 20 20 20 20 70  void**);.      p
1f600 46 72 65 65 20 3d 20 76 61 5f 61 72 67 28 61 70  Free = va_arg(ap
1f610 2c 20 76 6f 69 64 2a 29 3b 0a 20 20 20 20 20 20  , void*);.      
1f620 69 66 28 20 73 7a 20 29 20 2a 70 70 4e 65 77 20  if( sz ) *ppNew 
1f630 3d 20 73 71 6c 69 74 65 33 53 63 72 61 74 63 68  = sqlite3Scratch
1f640 4d 61 6c 6c 6f 63 28 73 7a 29 3b 0a 20 20 20 20  Malloc(sz);.    
1f650 20 20 73 71 6c 69 74 65 33 53 63 72 61 74 63 68    sqlite3Scratch
1f660 46 72 65 65 28 70 46 72 65 65 29 3b 0a 20 20 20  Free(pFree);.   
1f670 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
1f680 0a 20 20 20 20 2f 2a 20 20 20 73 71 6c 69 74 65  .    /*   sqlite
1f690 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 53  3_test_control(S
1f6a0 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 4c  QLITE_TESTCTRL_L
1f6b0 4f 43 41 4c 54 49 4d 45 5f 46 41 55 4c 54 2c 20  OCALTIME_FAULT, 
1f6c0 69 6e 74 20 6f 6e 6f 66 66 29 3b 0a 20 20 20 20  int onoff);.    
1f6d0 2a 2a 0a 20 20 20 20 2a 2a 20 49 66 20 70 61 72  **.    ** If par
1f6e0 61 6d 65 74 65 72 20 6f 6e 6f 66 66 20 69 73 20  ameter onoff is 
1f6f0 6e 6f 6e 2d 7a 65 72 6f 2c 20 63 6f 6e 66 69 67  non-zero, config
1f700 75 72 65 20 74 68 65 20 77 72 61 70 70 65 72 73  ure the wrappers
1f710 20 73 6f 20 74 68 61 74 20 61 6c 6c 0a 20 20 20   so that all.   
1f720 20 2a 2a 20 73 75 62 73 65 71 75 65 6e 74 20 63   ** subsequent c
1f730 61 6c 6c 73 20 74 6f 20 6c 6f 63 61 6c 74 69 6d  alls to localtim
1f740 65 28 29 20 61 6e 64 20 76 61 72 69 61 6e 74 73  e() and variants
1f750 20 66 61 69 6c 2e 20 49 66 20 6f 6e 6f 66 66 20   fail. If onoff 
1f760 69 73 20 7a 65 72 6f 2c 0a 20 20 20 20 2a 2a 20  is zero,.    ** 
1f770 75 6e 64 6f 20 74 68 69 73 20 73 65 74 74 69 6e  undo this settin
1f780 67 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 63 61  g..    */.    ca
1f790 73 65 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54  se SQLITE_TESTCT
1f7a0 52 4c 5f 4c 4f 43 41 4c 54 49 4d 45 5f 46 41 55  RL_LOCALTIME_FAU
1f7b0 4c 54 3a 20 7b 0a 20 20 20 20 20 20 73 71 6c 69  LT: {.      sqli
1f7c0 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e  te3GlobalConfig.
1f7d0 62 4c 6f 63 61 6c 74 69 6d 65 46 61 75 6c 74 20  bLocaltimeFault 
1f7e0 3d 20 76 61 5f 61 72 67 28 61 70 2c 20 69 6e 74  = va_arg(ap, int
1f7f0 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  );.      break;.
1f800 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 20 20      }..    /*   
1f810 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e  sqlite3_test_con
1f820 74 72 6f 6c 28 53 51 4c 49 54 45 5f 54 45 53 54  trol(SQLITE_TEST
1f830 43 54 52 4c 5f 4e 45 56 45 52 5f 43 4f 52 52 55  CTRL_NEVER_CORRU
1f840 50 54 2c 20 69 6e 74 29 3b 0a 20 20 20 20 2a 2a  PT, int);.    **
1f850 0a 20 20 20 20 2a 2a 20 53 65 74 20 6f 72 20 63  .    ** Set or c
1f860 6c 65 61 72 20 61 20 66 6c 61 67 20 74 68 61 74  lear a flag that
1f870 20 69 6e 64 69 63 61 74 65 73 20 74 68 61 74 20   indicates that 
1f880 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
1f890 65 20 69 73 20 61 6c 77 61 79 73 20 77 65 6c 6c  e is always well
1f8a0 2d 0a 20 20 20 20 2a 2a 20 66 6f 72 6d 65 64 20  -.    ** formed 
1f8b0 61 6e 64 20 6e 65 76 65 72 20 63 6f 72 72 75 70  and never corrup
1f8c0 74 2e 20 20 54 68 69 73 20 66 6c 61 67 20 69 73  t.  This flag is
1f8d0 20 63 6c 65 61 72 20 62 79 20 64 65 66 61 75 6c   clear by defaul
1f8e0 74 2c 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68  t, indicating th
1f8f0 61 74 0a 20 20 20 20 2a 2a 20 64 61 74 61 62 61  at.    ** databa
1f900 73 65 20 66 69 6c 65 73 20 6d 69 67 68 74 20 68  se files might h
1f910 61 76 65 20 61 72 62 69 74 72 61 72 79 20 63 6f  ave arbitrary co
1f920 72 72 75 70 74 69 6f 6e 2e 20 20 53 65 74 74 69  rruption.  Setti
1f930 6e 67 20 74 68 65 20 66 6c 61 67 20 64 75 72 69  ng the flag duri
1f940 6e 67 0a 20 20 20 20 2a 2a 20 74 65 73 74 69 6e  ng.    ** testin
1f950 67 20 63 61 75 73 65 73 20 63 65 72 74 61 69 6e  g causes certain
1f960 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
1f970 65 6e 74 73 20 69 6e 20 74 68 65 20 63 6f 64 65  ents in the code
1f980 20 74 6f 20 62 65 20 61 63 74 69 76 61 74 65 64   to be activated
1f990 0a 20 20 20 20 2a 2a 20 74 68 61 74 20 64 65 6d  .    ** that dem
1f9a0 6f 6e 73 74 72 61 74 20 69 6e 76 61 72 69 61 6e  onstrat invarian
1f9b0 74 73 20 6f 6e 20 77 65 6c 6c 2d 66 6f 72 6d 65  ts on well-forme
1f9c0 64 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73  d database files
1f9d0 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 63 61 73  ..    */.    cas
1f9e0 65 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52  e SQLITE_TESTCTR
1f9f0 4c 5f 4e 45 56 45 52 5f 43 4f 52 52 55 50 54 3a  L_NEVER_CORRUPT:
1fa00 20 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33   {.      sqlite3
1fa10 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 6e 65 76  GlobalConfig.nev
1fa20 65 72 43 6f 72 72 75 70 74 20 3d 20 76 61 5f 61  erCorrupt = va_a
1fa30 72 67 28 61 70 2c 20 69 6e 74 29 3b 0a 20 20 20  rg(ap, int);.   
1fa40 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
1fa50 0a 20 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20  .    /* Set the 
1fa60 74 68 72 65 73 68 6f 6c 64 20 61 74 20 77 68 69  threshold at whi
1fa70 63 68 20 4f 50 5f 4f 6e 63 65 20 63 6f 75 6e 74  ch OP_Once count
1fa80 65 72 73 20 72 65 73 65 74 20 62 61 63 6b 20 74  ers reset back t
1fa90 6f 20 7a 65 72 6f 2e 0a 20 20 20 20 2a 2a 20 42  o zero..    ** B
1faa0 79 20 64 65 66 61 75 6c 74 20 74 68 69 73 20 69  y default this i
1fab0 73 20 30 78 37 66 66 66 66 66 66 65 20 28 6f 76  s 0x7ffffffe (ov
1fac0 65 72 20 32 20 62 69 6c 6c 69 6f 6e 29 2c 20 62  er 2 billion), b
1fad0 75 74 20 74 68 61 74 20 76 61 6c 75 65 20 69 73  ut that value is
1fae0 0a 20 20 20 20 2a 2a 20 74 6f 6f 20 62 69 67 20  .    ** too big 
1faf0 74 6f 20 74 65 73 74 20 69 6e 20 61 20 72 65 61  to test in a rea
1fb00 73 6f 6e 61 62 6c 65 20 61 6d 6f 75 6e 74 20 6f  sonable amount o
1fb10 66 20 74 69 6d 65 2c 20 73 6f 20 74 68 69 73 20  f time, so this 
1fb20 63 6f 6e 74 72 6f 6c 20 69 73 0a 20 20 20 20 2a  control is.    *
1fb30 2a 20 70 72 6f 76 69 64 65 64 20 74 6f 20 73 65  * provided to se
1fb40 74 20 61 20 73 6d 61 6c 6c 20 61 6e 64 20 65 61  t a small and ea
1fb50 73 69 6c 79 20 72 65 61 63 68 61 62 6c 65 20 72  sily reachable r
1fb60 65 73 65 74 20 76 61 6c 75 65 2e 0a 20 20 20 20  eset value..    
1fb70 2a 2f 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  */.    case SQLI
1fb80 54 45 5f 54 45 53 54 43 54 52 4c 5f 4f 4e 43 45  TE_TESTCTRL_ONCE
1fb90 5f 52 45 53 45 54 5f 54 48 52 45 53 48 4f 4c 44  _RESET_THRESHOLD
1fba0 3a 20 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  : {.      sqlite
1fbb0 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 69 4f  3GlobalConfig.iO
1fbc0 6e 63 65 52 65 73 65 74 54 68 72 65 73 68 6f 6c  nceResetThreshol
1fbd0 64 20 3d 20 76 61 5f 61 72 67 28 61 70 2c 20 69  d = va_arg(ap, i
1fbe0 6e 74 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b  nt);.      break
1fbf0 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20  ;.    }..    /* 
1fc00 20 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63    sqlite3_test_c
1fc10 6f 6e 74 72 6f 6c 28 53 51 4c 49 54 45 5f 54 45  ontrol(SQLITE_TE
1fc20 53 54 43 54 52 4c 5f 56 44 42 45 5f 43 4f 56 45  STCTRL_VDBE_COVE
1fc30 52 41 47 45 2c 20 78 43 61 6c 6c 62 61 63 6b 2c  RAGE, xCallback,
1fc40 20 70 74 72 29 3b 0a 20 20 20 20 2a 2a 0a 20 20   ptr);.    **.  
1fc50 20 20 2a 2a 20 53 65 74 20 74 68 65 20 56 44 42    ** Set the VDB
1fc60 45 20 63 6f 76 65 72 61 67 65 20 63 61 6c 6c 62  E coverage callb
1fc70 61 63 6b 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20  ack function to 
1fc80 78 43 61 6c 6c 62 61 63 6b 20 77 69 74 68 20 63  xCallback with c
1fc90 6f 6e 74 65 78 74 20 0a 20 20 20 20 2a 2a 20 70  ontext .    ** p
1fca0 6f 69 6e 74 65 72 20 70 74 72 2e 0a 20 20 20 20  ointer ptr..    
1fcb0 2a 2f 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  */.    case SQLI
1fcc0 54 45 5f 54 45 53 54 43 54 52 4c 5f 56 44 42 45  TE_TESTCTRL_VDBE
1fcd0 5f 43 4f 56 45 52 41 47 45 3a 20 7b 0a 23 69 66  _COVERAGE: {.#if
1fce0 64 65 66 20 53 51 4c 49 54 45 5f 56 44 42 45 5f  def SQLITE_VDBE_
1fcf0 43 4f 56 45 52 41 47 45 0a 20 20 20 20 20 20 74  COVERAGE.      t
1fd00 79 70 65 64 65 66 20 76 6f 69 64 20 28 2a 62 72  ypedef void (*br
1fd10 61 6e 63 68 5f 63 61 6c 6c 62 61 63 6b 29 28 76  anch_callback)(v
1fd20 6f 69 64 2a 2c 69 6e 74 2c 75 38 2c 75 38 29 3b  oid*,int,u8,u8);
1fd30 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 47 6c  .      sqlite3Gl
1fd40 6f 62 61 6c 43 6f 6e 66 69 67 2e 78 56 64 62 65  obalConfig.xVdbe
1fd50 42 72 61 6e 63 68 20 3d 20 76 61 5f 61 72 67 28  Branch = va_arg(
1fd60 61 70 2c 62 72 61 6e 63 68 5f 63 61 6c 6c 62 61  ap,branch_callba
1fd70 63 6b 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  ck);.      sqlit
1fd80 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 70  e3GlobalConfig.p
1fd90 56 64 62 65 42 72 61 6e 63 68 41 72 67 20 3d 20  VdbeBranchArg = 
1fda0 76 61 5f 61 72 67 28 61 70 2c 76 6f 69 64 2a 29  va_arg(ap,void*)
1fdb0 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 20 20 62  ;.#endif.      b
1fdc0 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  reak;.    }..   
1fdd0 20 2f 2a 20 20 20 73 71 6c 69 74 65 33 5f 74 65   /*   sqlite3_te
1fde0 73 74 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c 49 54  st_control(SQLIT
1fdf0 45 5f 54 45 53 54 43 54 52 4c 5f 53 4f 52 54 45  E_TESTCTRL_SORTE
1fe00 52 5f 4d 4d 41 50 2c 20 64 62 2c 20 6e 4d 61 78  R_MMAP, db, nMax
1fe10 29 3b 20 2a 2f 0a 20 20 20 20 63 61 73 65 20 53  ); */.    case S
1fe20 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 53  QLITE_TESTCTRL_S
1fe30 4f 52 54 45 52 5f 4d 4d 41 50 3a 20 7b 0a 20 20  ORTER_MMAP: {.  
1fe40 20 20 20 20 73 71 6c 69 74 65 33 20 2a 64 62 20      sqlite3 *db 
1fe50 3d 20 76 61 5f 61 72 67 28 61 70 2c 20 73 71 6c  = va_arg(ap, sql
1fe60 69 74 65 33 2a 29 3b 0a 20 20 20 20 20 20 64 62  ite3*);.      db
1fe70 2d 3e 6e 4d 61 78 53 6f 72 74 65 72 4d 6d 61 70  ->nMaxSorterMmap
1fe80 20 3d 20 76 61 5f 61 72 67 28 61 70 2c 20 69 6e   = va_arg(ap, in
1fe90 74 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b  t);.      break;
1fea0 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 20  .    }..    /*  
1feb0 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f   sqlite3_test_co
1fec0 6e 74 72 6f 6c 28 53 51 4c 49 54 45 5f 54 45 53  ntrol(SQLITE_TES
1fed0 54 43 54 52 4c 5f 49 53 49 4e 49 54 29 3b 0a 20  TCTRL_ISINIT);. 
1fee0 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 52 65 74     **.    ** Ret
1fef0 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 20 69 66  urn SQLITE_OK if
1ff00 20 53 51 4c 69 74 65 20 68 61 73 20 62 65 65 6e   SQLite has been
1ff10 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 61 6e 64   initialized and
1ff20 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 20 69 66   SQLITE_ERROR if
1ff30 0a 20 20 20 20 2a 2a 20 6e 6f 74 2e 0a 20 20 20  .    ** not..   
1ff40 20 2a 2f 0a 20 20 20 20 63 61 73 65 20 53 51 4c   */.    case SQL
1ff50 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 49 53 49  ITE_TESTCTRL_ISI
1ff60 4e 49 54 3a 20 7b 0a 20 20 20 20 20 20 69 66 28  NIT: {.      if(
1ff70 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f   sqlite3GlobalCo
1ff80 6e 66 69 67 2e 69 73 49 6e 69 74 3d 3d 30 20 29  nfig.isInit==0 )
1ff90 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52   rc = SQLITE_ERR
1ffa0 4f 52 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b  OR;.      break;
1ffb0 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 20  .    }..    /*  
1ffc0 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e  sqlite3_test_con
1ffd0 74 72 6f 6c 28 53 51 4c 49 54 45 5f 54 45 53 54  trol(SQLITE_TEST
1ffe0 43 54 52 4c 5f 49 4d 50 4f 53 54 45 52 2c 20 64  CTRL_IMPOSTER, d
1fff0 62 2c 20 64 62 4e 61 6d 65 2c 20 6f 6e 4f 66 66  b, dbName, onOff
20000 2c 20 74 6e 75 6d 29 3b 0a 20 20 20 20 2a 2a 0a  , tnum);.    **.
20010 20 20 20 20 2a 2a 20 54 68 69 73 20 74 65 73 74      ** This test
20020 20 63 6f 6e 74 72 6f 6c 20 69 73 20 75 73 65 64   control is used
20030 20 74 6f 20 63 72 65 61 74 65 20 69 6d 70 6f 73   to create impos
20040 74 65 72 20 74 61 62 6c 65 73 2e 20 20 22 64 62  ter tables.  "db
20050 22 20 69 73 20 61 20 70 6f 69 6e 74 65 72 0a 20  " is a pointer. 
20060 20 20 20 2a 2a 20 74 6f 20 74 68 65 20 64 61 74     ** to the dat
20070 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
20080 2e 20 20 64 62 4e 61 6d 65 20 69 73 20 74 68 65  .  dbName is the
20090 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 20 28   database name (
200a0 65 78 3a 20 22 6d 61 69 6e 22 20 6f 72 0a 20 20  ex: "main" or.  
200b0 20 20 2a 2a 20 22 74 65 6d 70 22 29 20 77 68 69    ** "temp") whi
200c0 63 68 20 77 69 6c 6c 20 72 65 63 65 69 76 65 20  ch will receive 
200d0 74 68 65 20 69 6d 70 6f 73 74 65 72 2e 20 20 22  the imposter.  "
200e0 6f 6e 4f 66 66 22 20 74 75 72 6e 73 20 69 6d 70  onOff" turns imp
200f0 6f 73 74 65 72 20 6d 6f 64 65 20 6f 6e 0a 20 20  oster mode on.  
20100 20 20 2a 2a 20 6f 72 20 6f 66 66 2e 20 20 22 74    ** or off.  "t
20110 6e 75 6d 22 20 69 73 20 74 68 65 20 72 6f 6f 74  num" is the root
20120 20 70 61 67 65 20 6f 66 20 74 68 65 20 62 2d 74   page of the b-t
20130 72 65 65 20 74 6f 20 77 68 69 63 68 20 74 68 65  ree to which the
20140 20 69 6d 70 6f 73 74 65 72 0a 20 20 20 20 2a 2a   imposter.    **
20150 20 74 61 62 6c 65 20 73 68 6f 75 6c 64 20 63 6f   table should co
20160 6e 6e 65 63 74 2e 0a 20 20 20 20 2a 2a 0a 20 20  nnect..    **.  
20170 20 20 2a 2a 20 45 6e 61 62 6c 65 20 69 6d 70 6f    ** Enable impo
20180 73 74 65 72 20 6d 6f 64 65 20 6f 6e 6c 79 20 77  ster mode only w
20190 68 65 6e 20 74 68 65 20 73 63 68 65 6d 61 20 68  hen the schema h
201a0 61 73 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20  as already been 
201b0 70 61 72 73 65 64 2e 20 20 54 68 65 6e 0a 20 20  parsed.  Then.  
201c0 20 20 2a 2a 20 72 75 6e 20 61 20 73 69 6e 67 6c    ** run a singl
201d0 65 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 73  e CREATE TABLE s
201e0 74 61 74 65 6d 65 6e 74 20 74 6f 20 63 6f 6e 73  tatement to cons
201f0 74 72 75 63 74 20 74 68 65 20 69 6d 70 6f 73 74  truct the impost
20200 65 72 20 74 61 62 6c 65 20 69 6e 0a 20 20 20 20  er table in.    
20210 2a 2a 20 74 68 65 20 70 61 72 73 65 64 20 73 63  ** the parsed sc
20220 68 65 6d 61 2e 20 20 54 68 65 6e 20 74 75 72 6e  hema.  Then turn
20230 20 69 6d 70 6f 73 74 65 72 20 6d 6f 64 65 20 62   imposter mode b
20240 61 63 6b 20 6f 66 66 20 61 67 61 69 6e 2e 0a 20  ack off again.. 
20250 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 49 66 20     **.    ** If 
20260 6f 6e 4f 66 66 3d 3d 30 20 61 6e 64 20 74 6e 75  onOff==0 and tnu
20270 6d 3e 30 20 74 68 65 6e 20 72 65 73 65 74 20 74  m>0 then reset t
20280 68 65 20 73 63 68 65 6d 61 20 66 6f 72 20 61 6c  he schema for al
20290 6c 20 64 61 74 61 62 61 73 65 73 2c 20 63 61 75  l databases, cau
202a0 73 69 6e 67 0a 20 20 20 20 2a 2a 20 74 68 65 20  sing.    ** the 
202b0 73 63 68 65 6d 61 20 74 6f 20 62 65 20 72 65 70  schema to be rep
202c0 61 72 73 65 64 20 74 68 65 20 6e 65 78 74 20 74  arsed the next t
202d0 69 6d 65 20 69 74 20 69 73 20 6e 65 65 64 65 64  ime it is needed
202e0 2e 20 20 54 68 69 73 20 68 61 73 20 74 68 65 0a  .  This has the.
202f0 20 20 20 20 2a 2a 20 65 66 66 65 63 74 20 6f 66      ** effect of
20300 20 65 72 61 73 69 6e 67 20 61 6c 6c 20 69 6d 70   erasing all imp
20310 6f 73 74 65 72 20 74 61 62 6c 65 73 2e 0a 20 20  oster tables..  
20320 20 20 2a 2f 0a 20 20 20 20 63 61 73 65 20 53 51    */.    case SQ
20330 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 49 4d  LITE_TESTCTRL_IM
20340 50 4f 53 54 45 52 3a 20 7b 0a 20 20 20 20 20 20  POSTER: {.      
20350 73 71 6c 69 74 65 33 20 2a 64 62 20 3d 20 76 61  sqlite3 *db = va
20360 5f 61 72 67 28 61 70 2c 20 73 71 6c 69 74 65 33  _arg(ap, sqlite3
20370 2a 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  *);.      sqlite
20380 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72 28 64 62  3_mutex_enter(db
20390 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 20 20 20 20  ->mutex);.      
203a0 64 62 2d 3e 69 6e 69 74 2e 69 44 62 20 3d 20 73  db->init.iDb = s
203b0 71 6c 69 74 65 33 46 69 6e 64 44 62 4e 61 6d 65  qlite3FindDbName
203c0 28 64 62 2c 20 76 61 5f 61 72 67 28 61 70 2c 63  (db, va_arg(ap,c
203d0 6f 6e 73 74 20 63 68 61 72 2a 29 29 3b 0a 20 20  onst char*));.  
203e0 20 20 20 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73      db->init.bus
203f0 79 20 3d 20 64 62 2d 3e 69 6e 69 74 2e 69 6d 70  y = db->init.imp
20400 6f 73 74 65 72 54 61 62 6c 65 20 3d 20 76 61 5f  osterTable = va_
20410 61 72 67 28 61 70 2c 69 6e 74 29 3b 0a 20 20 20  arg(ap,int);.   
20420 20 20 20 64 62 2d 3e 69 6e 69 74 2e 6e 65 77 54     db->init.newT
20430 6e 75 6d 20 3d 20 76 61 5f 61 72 67 28 61 70 2c  num = va_arg(ap,
20440 69 6e 74 29 3b 0a 20 20 20 20 20 20 69 66 28 20  int);.      if( 
20450 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 3d 3d 30  db->init.busy==0
20460 20 26 26 20 64 62 2d 3e 69 6e 69 74 2e 6e 65 77   && db->init.new
20470 54 6e 75 6d 3e 30 20 29 7b 0a 20 20 20 20 20 20  Tnum>0 ){.      
20480 20 20 73 71 6c 69 74 65 33 52 65 73 65 74 41 6c    sqlite3ResetAl
20490 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63  lSchemasOfConnec
204a0 74 69 6f 6e 28 64 62 29 3b 0a 20 20 20 20 20 20  tion(db);.      
204b0 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  }.      sqlite3_
204c0 6d 75 74 65 78 5f 6c 65 61 76 65 28 64 62 2d 3e  mutex_leave(db->
204d0 6d 75 74 65 78 29 3b 0a 20 20 20 20 20 20 62 72  mutex);.      br
204e0 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  eak;.    }.  }. 
204f0 20 76 61 5f 65 6e 64 28 61 70 29 3b 0a 23 65 6e   va_end(ap);.#en
20500 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 55 4e  dif /* SQLITE_UN
20510 54 45 53 54 41 42 4c 45 20 2a 2f 0a 20 20 72 65  TESTABLE */.  re
20520 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a  turn rc;.}../*.*
20530 2a 20 54 68 69 73 20 69 73 20 61 20 75 74 69 6c  * This is a util
20540 69 74 79 20 72 6f 75 74 69 6e 65 2c 20 75 73 65  ity routine, use
20550 66 75 6c 20 74 6f 20 56 46 53 20 69 6d 70 6c 65  ful to VFS imple
20560 6d 65 6e 74 61 74 69 6f 6e 73 2c 20 74 68 61 74  mentations, that
20570 20 63 68 65 63 6b 73 0a 2a 2a 20 74 6f 20 73 65   checks.** to se
20580 65 20 69 66 20 61 20 64 61 74 61 62 61 73 65 20  e if a database 
20590 66 69 6c 65 20 77 61 73 20 61 20 55 52 49 20 74  file was a URI t
205a0 68 61 74 20 63 6f 6e 74 61 69 6e 65 64 20 61 20  hat contained a 
205b0 73 70 65 63 69 66 69 63 20 71 75 65 72 79 20 0a  specific query .
205c0 2a 2a 20 70 61 72 61 6d 65 74 65 72 2c 20 61 6e  ** parameter, an
205d0 64 20 69 66 20 73 6f 20 6f 62 74 61 69 6e 73 20  d if so obtains 
205e0 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
205f0 20 71 75 65 72 79 20 70 61 72 61 6d 65 74 65 72   query parameter
20600 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 7a 46 69 6c  ..**.** The zFil
20610 65 6e 61 6d 65 20 61 72 67 75 6d 65 6e 74 20 69  ename argument i
20620 73 20 74 68 65 20 66 69 6c 65 6e 61 6d 65 20 70  s the filename p
20630 6f 69 6e 74 65 72 20 70 61 73 73 65 64 20 69 6e  ointer passed in
20640 74 6f 20 74 68 65 20 78 4f 70 65 6e 28 29 0a 2a  to the xOpen().*
20650 2a 20 6d 65 74 68 6f 64 20 6f 66 20 61 20 56 46  * method of a VF
20660 53 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  S implementation
20670 2e 20 20 54 68 65 20 7a 50 61 72 61 6d 20 61 72  .  The zParam ar
20680 67 75 6d 65 6e 74 20 69 73 20 74 68 65 20 6e 61  gument is the na
20690 6d 65 20 6f 66 20 74 68 65 0a 2a 2a 20 71 75 65  me of the.** que
206a0 72 79 20 70 61 72 61 6d 65 74 65 72 20 77 65 20  ry parameter we 
206b0 73 65 65 6b 2e 20 20 54 68 69 73 20 72 6f 75 74  seek.  This rout
206c0 69 6e 65 20 72 65 74 75 72 6e 73 20 74 68 65 20  ine returns the 
206d0 76 61 6c 75 65 20 6f 66 20 74 68 65 20 7a 50 61  value of the zPa
206e0 72 61 6d 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72  ram.** parameter
206f0 20 69 66 20 69 74 20 65 78 69 73 74 73 2e 20 20   if it exists.  
20700 49 66 20 74 68 65 20 70 61 72 61 6d 65 74 65 72  If the parameter
20710 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 2c   does not exist,
20720 20 74 68 69 73 20 72 6f 75 74 69 6e 65 0a 2a 2a   this routine.**
20730 20 72 65 74 75 72 6e 73 20 61 20 4e 55 4c 4c 20   returns a NULL 
20740 70 6f 69 6e 74 65 72 2e 0a 2a 2f 0a 63 6f 6e 73  pointer..*/.cons
20750 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 5f  t char *sqlite3_
20760 75 72 69 5f 70 61 72 61 6d 65 74 65 72 28 63 6f  uri_parameter(co
20770 6e 73 74 20 63 68 61 72 20 2a 7a 46 69 6c 65 6e  nst char *zFilen
20780 61 6d 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  ame, const char 
20790 2a 7a 50 61 72 61 6d 29 7b 0a 20 20 69 66 28 20  *zParam){.  if( 
207a0 7a 46 69 6c 65 6e 61 6d 65 3d 3d 30 20 7c 7c 20  zFilename==0 || 
207b0 7a 50 61 72 61 6d 3d 3d 30 20 29 20 72 65 74 75  zParam==0 ) retu
207c0 72 6e 20 30 3b 0a 20 20 7a 46 69 6c 65 6e 61 6d  rn 0;.  zFilenam
207d0 65 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c  e += sqlite3Strl
207e0 65 6e 33 30 28 7a 46 69 6c 65 6e 61 6d 65 29 20  en30(zFilename) 
207f0 2b 20 31 3b 0a 20 20 77 68 69 6c 65 28 20 7a 46  + 1;.  while( zF
20800 69 6c 65 6e 61 6d 65 5b 30 5d 20 29 7b 0a 20 20  ilename[0] ){.  
20810 20 20 69 6e 74 20 78 20 3d 20 73 74 72 63 6d 70    int x = strcmp
20820 28 7a 46 69 6c 65 6e 61 6d 65 2c 20 7a 50 61 72  (zFilename, zPar
20830 61 6d 29 3b 0a 20 20 20 20 7a 46 69 6c 65 6e 61  am);.    zFilena
20840 6d 65 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72  me += sqlite3Str
20850 6c 65 6e 33 30 28 7a 46 69 6c 65 6e 61 6d 65 29  len30(zFilename)
20860 20 2b 20 31 3b 0a 20 20 20 20 69 66 28 20 78 3d   + 1;.    if( x=
20870 3d 30 20 29 20 72 65 74 75 72 6e 20 7a 46 69 6c  =0 ) return zFil
20880 65 6e 61 6d 65 3b 0a 20 20 20 20 7a 46 69 6c 65  ename;.    zFile
20890 6e 61 6d 65 20 2b 3d 20 73 71 6c 69 74 65 33 53  name += sqlite3S
208a0 74 72 6c 65 6e 33 30 28 7a 46 69 6c 65 6e 61 6d  trlen30(zFilenam
208b0 65 29 20 2b 20 31 3b 0a 20 20 7d 0a 20 20 72 65  e) + 1;.  }.  re
208c0 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  turn 0;.}../*.**
208d0 20 52 65 74 75 72 6e 20 61 20 62 6f 6f 6c 65 61   Return a boolea
208e0 6e 20 76 61 6c 75 65 20 66 6f 72 20 61 20 71 75  n value for a qu
208f0 65 72 79 20 70 61 72 61 6d 65 74 65 72 2e 0a 2a  ery parameter..*
20900 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 75 72  /.int sqlite3_ur
20910 69 5f 62 6f 6f 6c 65 61 6e 28 63 6f 6e 73 74 20  i_boolean(const 
20920 63 68 61 72 20 2a 7a 46 69 6c 65 6e 61 6d 65 2c  char *zFilename,
20930 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 50 61   const char *zPa
20940 72 61 6d 2c 20 69 6e 74 20 62 44 66 6c 74 29 7b  ram, int bDflt){
20950 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
20960 20 3d 20 73 71 6c 69 74 65 33 5f 75 72 69 5f 70   = sqlite3_uri_p
20970 61 72 61 6d 65 74 65 72 28 7a 46 69 6c 65 6e 61  arameter(zFilena
20980 6d 65 2c 20 7a 50 61 72 61 6d 29 3b 0a 20 20 62  me, zParam);.  b
20990 44 66 6c 74 20 3d 20 62 44 66 6c 74 21 3d 30 3b  Dflt = bDflt!=0;
209a0 0a 20 20 72 65 74 75 72 6e 20 7a 20 3f 20 73 71  .  return z ? sq
209b0 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28  lite3GetBoolean(
209c0 7a 2c 20 62 44 66 6c 74 29 20 3a 20 62 44 66 6c  z, bDflt) : bDfl
209d0 74 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75  t;.}../*.** Retu
209e0 72 6e 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65  rn a 64-bit inte
209f0 67 65 72 20 76 61 6c 75 65 20 66 6f 72 20 61 20  ger value for a 
20a00 71 75 65 72 79 20 70 61 72 61 6d 65 74 65 72 2e  query parameter.
20a10 0a 2a 2f 0a 73 71 6c 69 74 65 33 5f 69 6e 74 36  .*/.sqlite3_int6
20a20 34 20 73 71 6c 69 74 65 33 5f 75 72 69 5f 69 6e  4 sqlite3_uri_in
20a30 74 36 34 28 0a 20 20 63 6f 6e 73 74 20 63 68 61  t64(.  const cha
20a40 72 20 2a 7a 46 69 6c 65 6e 61 6d 65 2c 20 20 20  r *zFilename,   
20a50 20 2f 2a 20 46 69 6c 65 6e 61 6d 65 20 61 73 20   /* Filename as 
20a60 70 61 73 73 65 64 20 74 6f 20 78 4f 70 65 6e 20  passed to xOpen 
20a70 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
20a80 2a 7a 50 61 72 61 6d 2c 20 20 20 20 20 20 20 2f  *zParam,       /
20a90 2a 20 55 52 49 20 70 61 72 61 6d 65 74 65 72 20  * URI parameter 
20aa0 73 6f 75 67 68 74 20 2a 2f 0a 20 20 73 71 6c 69  sought */.  sqli
20ab0 74 65 33 5f 69 6e 74 36 34 20 62 44 66 6c 74 20  te3_int64 bDflt 
20ac0 20 20 20 20 20 20 2f 2a 20 72 65 74 75 72 6e 20        /* return 
20ad0 69 66 20 70 61 72 61 6d 65 74 65 72 20 69 73 20  if parameter is 
20ae0 6d 69 73 73 69 6e 67 20 2a 2f 0a 29 7b 0a 20 20  missing */.){.  
20af0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 20 3d 20  const char *z = 
20b00 73 71 6c 69 74 65 33 5f 75 72 69 5f 70 61 72 61  sqlite3_uri_para
20b10 6d 65 74 65 72 28 7a 46 69 6c 65 6e 61 6d 65 2c  meter(zFilename,
20b20 20 7a 50 61 72 61 6d 29 3b 0a 20 20 73 71 6c 69   zParam);.  sqli
20b30 74 65 33 5f 69 6e 74 36 34 20 76 3b 0a 20 20 69  te3_int64 v;.  i
20b40 66 28 20 7a 20 26 26 20 73 71 6c 69 74 65 33 44  f( z && sqlite3D
20b50 65 63 4f 72 48 65 78 54 6f 49 36 34 28 7a 2c 20  ecOrHexToI64(z, 
20b60 26 76 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29  &v)==SQLITE_OK )
20b70 7b 0a 20 20 20 20 62 44 66 6c 74 20 3d 20 76 3b  {.    bDflt = v;
20b80 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 62 44  .  }.  return bD
20b90 66 6c 74 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65  flt;.}../*.** Re
20ba0 74 75 72 6e 20 74 68 65 20 42 74 72 65 65 20 70  turn the Btree p
20bb0 6f 69 6e 74 65 72 20 69 64 65 6e 74 69 66 69 65  ointer identifie
20bc0 64 20 62 79 20 7a 44 62 4e 61 6d 65 2e 20 20 52  d by zDbName.  R
20bd0 65 74 75 72 6e 20 4e 55 4c 4c 20 69 66 20 6e 6f  eturn NULL if no
20be0 74 20 66 6f 75 6e 64 2e 0a 2a 2f 0a 42 74 72 65  t found..*/.Btre
20bf0 65 20 2a 73 71 6c 69 74 65 33 44 62 4e 61 6d 65  e *sqlite3DbName
20c00 54 6f 42 74 72 65 65 28 73 71 6c 69 74 65 33 20  ToBtree(sqlite3 
20c10 2a 64 62 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  *db, const char 
20c20 2a 7a 44 62 4e 61 6d 65 29 7b 0a 20 20 69 6e 74  *zDbName){.  int
20c30 20 69 44 62 20 3d 20 7a 44 62 4e 61 6d 65 20 3f   iDb = zDbName ?
20c40 20 73 71 6c 69 74 65 33 46 69 6e 64 44 62 4e 61   sqlite3FindDbNa
20c50 6d 65 28 64 62 2c 20 7a 44 62 4e 61 6d 65 29 20  me(db, zDbName) 
20c60 3a 20 30 3b 0a 20 20 72 65 74 75 72 6e 20 69 44  : 0;.  return iD
20c70 62 3c 30 20 3f 20 30 20 3a 20 64 62 2d 3e 61 44  b<0 ? 0 : db->aD
20c80 62 5b 69 44 62 5d 2e 70 42 74 3b 0a 7d 0a 0a 2f  b[iDb].pBt;.}../
20c90 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20  *.** Return the 
20ca0 66 69 6c 65 6e 61 6d 65 20 6f 66 20 74 68 65 20  filename of the 
20cb0 64 61 74 61 62 61 73 65 20 61 73 73 6f 63 69 61  database associa
20cc0 74 65 64 20 77 69 74 68 20 61 20 64 61 74 61 62  ted with a datab
20cd0 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f  ase.** connectio
20ce0 6e 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 63 68 61 72  n..*/.const char
20cf0 20 2a 73 71 6c 69 74 65 33 5f 64 62 5f 66 69 6c   *sqlite3_db_fil
20d00 65 6e 61 6d 65 28 73 71 6c 69 74 65 33 20 2a 64  ename(sqlite3 *d
20d10 62 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  b, const char *z
20d20 44 62 4e 61 6d 65 29 7b 0a 20 20 42 74 72 65 65  DbName){.  Btree
20d30 20 2a 70 42 74 3b 0a 23 69 66 64 65 66 20 53 51   *pBt;.#ifdef SQ
20d40 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41 50 49 5f  LITE_ENABLE_API_
20d50 41 52 4d 4f 52 0a 20 20 69 66 28 20 21 73 71 6c  ARMOR.  if( !sql
20d60 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 4f  ite3SafetyCheckO
20d70 6b 28 64 62 29 20 29 7b 0a 20 20 20 20 28 76 6f  k(db) ){.    (vo
20d80 69 64 29 53 51 4c 49 54 45 5f 4d 49 53 55 53 45  id)SQLITE_MISUSE
20d90 5f 42 4b 50 54 3b 0a 20 20 20 20 72 65 74 75 72  _BKPT;.    retur
20da0 6e 20 30 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a  n 0;.  }.#endif.
20db0 20 20 70 42 74 20 3d 20 73 71 6c 69 74 65 33 44    pBt = sqlite3D
20dc0 62 4e 61 6d 65 54 6f 42 74 72 65 65 28 64 62 2c  bNameToBtree(db,
20dd0 20 7a 44 62 4e 61 6d 65 29 3b 0a 20 20 72 65 74   zDbName);.  ret
20de0 75 72 6e 20 70 42 74 20 3f 20 73 71 6c 69 74 65  urn pBt ? sqlite
20df0 33 42 74 72 65 65 47 65 74 46 69 6c 65 6e 61 6d  3BtreeGetFilenam
20e00 65 28 70 42 74 29 20 3a 20 30 3b 0a 7d 0a 0a 2f  e(pBt) : 0;.}../
20e10 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 31 20 69 66  *.** Return 1 if
20e20 20 64 61 74 61 62 61 73 65 20 69 73 20 72 65 61   database is rea
20e30 64 2d 6f 6e 6c 79 20 6f 72 20 30 20 69 66 20 72  d-only or 0 if r
20e40 65 61 64 2f 77 72 69 74 65 2e 20 20 52 65 74 75  ead/write.  Retu
20e50 72 6e 20 2d 31 20 69 66 0a 2a 2a 20 6e 6f 20 73  rn -1 if.** no s
20e60 75 63 68 20 64 61 74 61 62 61 73 65 20 65 78 69  uch database exi
20e70 73 74 73 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  sts..*/.int sqli
20e80 74 65 33 5f 64 62 5f 72 65 61 64 6f 6e 6c 79 28  te3_db_readonly(
20e90 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 63 6f 6e  sqlite3 *db, con
20ea0 73 74 20 63 68 61 72 20 2a 7a 44 62 4e 61 6d 65  st char *zDbName
20eb0 29 7b 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b  ){.  Btree *pBt;
20ec0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
20ed0 4e 41 42 4c 45 5f 41 50 49 5f 41 52 4d 4f 52 0a  NABLE_API_ARMOR.
20ee0 20 20 69 66 28 20 21 73 71 6c 69 74 65 33 53 61    if( !sqlite3Sa
20ef0 66 65 74 79 43 68 65 63 6b 4f 6b 28 64 62 29 20  fetyCheckOk(db) 
20f00 29 7b 0a 20 20 20 20 28 76 6f 69 64 29 53 51 4c  ){.    (void)SQL
20f10 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54 3b  ITE_MISUSE_BKPT;
20f20 0a 20 20 20 20 72 65 74 75 72 6e 20 2d 31 3b 0a  .    return -1;.
20f30 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 70 42 74    }.#endif.  pBt
20f40 20 3d 20 73 71 6c 69 74 65 33 44 62 4e 61 6d 65   = sqlite3DbName
20f50 54 6f 42 74 72 65 65 28 64 62 2c 20 7a 44 62 4e  ToBtree(db, zDbN
20f60 61 6d 65 29 3b 0a 20 20 72 65 74 75 72 6e 20 70  ame);.  return p
20f70 42 74 20 3f 20 73 71 6c 69 74 65 33 42 74 72 65  Bt ? sqlite3Btre
20f80 65 49 73 52 65 61 64 6f 6e 6c 79 28 70 42 74 29  eIsReadonly(pBt)
20f90 20 3a 20 2d 31 3b 0a 7d 0a 23 69 66 20 28 53 51   : -1;.}.#if (SQ
20fa0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41 50 50 4c  LITE_ENABLE_APPL
20fb0 45 5f 53 50 49 3e 30 29 20 26 26 20 64 65 66 69  E_SPI>0) && defi
20fc0 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f 29 0a 0a  ned(__APPLE__)..
20fd0 23 69 6e 63 6c 75 64 65 20 22 73 71 6c 69 74 65  #include "sqlite
20fe0 33 5f 70 72 69 76 61 74 65 2e 68 22 0a 0a 2f 2a  3_private.h"../*
20ff0 20 0a 2a 2a 20 54 65 73 74 69 6e 67 20 61 20 66   .** Testing a f
21000 69 6c 65 20 70 61 74 68 20 66 6f 72 20 73 71 6c  ile path for sql
21010 69 74 65 20 6c 6f 63 6b 73 20 68 65 6c 64 20 62  ite locks held b
21020 79 20 61 20 70 72 6f 63 65 73 73 20 49 44 2e 20  y a process ID. 
21030 0a 2a 2a 20 52 65 74 75 72 6e 73 20 53 51 4c 49  .** Returns SQLI
21040 54 45 5f 4c 4f 43 4b 53 54 41 54 45 5f 4f 4e 20  TE_LOCKSTATE_ON 
21050 69 66 20 6c 6f 63 6b 73 20 61 72 65 20 70 72 65  if locks are pre
21060 73 65 6e 74 20 6f 6e 20 70 61 74 68 0a 2a 2a 20  sent on path.** 
21070 74 68 61 74 20 77 6f 75 6c 64 20 70 72 65 76 65  that would preve
21080 6e 74 20 77 72 69 74 69 6e 67 20 74 6f 20 74 68  nt writing to th
21090 65 20 64 61 74 61 62 61 73 65 2e 0a 2a 2f 0a 69  e database..*/.i
210a0 6e 74 20 5f 73 71 6c 69 74 65 33 5f 6c 6f 63 6b  nt _sqlite3_lock
210b0 73 74 61 74 65 28 63 6f 6e 73 74 20 63 68 61 72  state(const char
210c0 20 2a 70 61 74 68 2c 20 70 69 64 5f 74 20 70 69   *path, pid_t pi
210d0 64 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  d){.  sqlite3 *d
210e0 62 20 3d 20 4e 55 4c 4c 3b 0a 20 20 0a 20 20 69  b = NULL;.  .  i
210f0 66 28 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 5f  f( sqlite3_open_
21100 76 32 28 70 61 74 68 2c 20 26 64 62 2c 20 53 51  v2(path, &db, SQ
21110 4c 49 54 45 5f 4f 50 45 4e 5f 52 45 41 44 4f 4e  LITE_OPEN_READON
21120 4c 59 2c 20 4e 55 4c 4c 29 20 3d 3d 20 53 51 4c  LY, NULL) == SQL
21130 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 4c 6f  ITE_OK ){.    Lo
21140 63 6b 73 74 61 74 65 50 49 44 20 6c 6f 63 6b 73  ckstatePID locks
21150 74 61 74 65 20 3d 20 7b 70 69 64 2c 20 2d 31 7d  tate = {pid, -1}
21160 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69  ;.    sqlite3_fi
21170 6c 65 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c 20 4e  le_control(db, N
21180 55 4c 4c 2c 20 53 51 4c 49 54 45 5f 46 43 4e 54  ULL, SQLITE_FCNT
21190 4c 5f 4c 4f 43 4b 53 54 41 54 45 5f 50 49 44 2c  L_LOCKSTATE_PID,
211a0 20 26 6c 6f 63 6b 73 74 61 74 65 29 3b 0a 20 20   &lockstate);.  
211b0 20 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28    sqlite3_close(
211c0 64 62 29 3b 0a 20 20 20 20 69 6e 74 20 73 74 61  db);.    int sta
211d0 74 65 20 3d 20 6c 6f 63 6b 73 74 61 74 65 2e 73  te = lockstate.s
211e0 74 61 74 65 3b 0a 20 20 20 20 72 65 74 75 72 6e  tate;.    return
211f0 20 73 74 61 74 65 3b 0a 20 20 7d 0a 20 20 69 66   state;.  }.  if
21200 28 20 4e 55 4c 4c 21 3d 64 62 20 29 7b 20 0a 20  ( NULL!=db ){ . 
21210 20 20 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65     sqlite3_close
21220 28 64 62 29 3b 20 2f 2a 20 6e 65 65 64 20 74 6f  (db); /* need to
21230 20 63 6c 6f 73 65 20 65 76 65 6e 20 69 66 20 6f   close even if o
21240 70 65 6e 20 72 65 74 75 72 6e 73 20 61 6e 20 65  pen returns an e
21250 72 72 6f 72 20 2a 2f 0a 20 20 7d 0a 20 20 72 65  rror */.  }.  re
21260 74 75 72 6e 20 53 51 4c 49 54 45 5f 4c 4f 43 4b  turn SQLITE_LOCK
21270 53 54 41 54 45 5f 45 52 52 4f 52 3b 0a 7d 0a 0a  STATE_ERROR;.}..
21280 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
21290 5f 45 4e 41 42 4c 45 5f 41 50 50 4c 45 5f 53 50  _ENABLE_APPLE_SP
212a0 49 20 2a 2f 0a 0a 23 69 66 64 65 66 20 53 51 4c  I */..#ifdef SQL
212b0 49 54 45 5f 45 4e 41 42 4c 45 5f 53 4e 41 50 53  ITE_ENABLE_SNAPS
212c0 48 4f 54 0a 2f 2a 0a 2a 2a 20 4f 62 74 61 69 6e  HOT./*.** Obtain
212d0 20 61 20 73 6e 61 70 73 68 6f 74 20 68 61 6e 64   a snapshot hand
212e0 6c 65 20 66 6f 72 20 74 68 65 20 73 6e 61 70 73  le for the snaps
212f0 68 6f 74 20 6f 66 20 64 61 74 61 62 61 73 65 20  hot of database 
21300 7a 44 62 20 63 75 72 72 65 6e 74 6c 79 20 0a 2a  zDb currently .*
21310 2a 20 62 65 69 6e 67 20 72 65 61 64 20 62 79 20  * being read by 
21320 68 61 6e 64 6c 65 20 64 62 2e 0a 2a 2f 0a 69 6e  handle db..*/.in
21330 74 20 73 71 6c 69 74 65 33 5f 73 6e 61 70 73 68  t sqlite3_snapsh
21340 6f 74 5f 67 65 74 28 0a 20 20 73 71 6c 69 74 65  ot_get(.  sqlite
21350 33 20 2a 64 62 2c 20 0a 20 20 63 6f 6e 73 74 20  3 *db, .  const 
21360 63 68 61 72 20 2a 7a 44 62 2c 0a 20 20 73 71 6c  char *zDb,.  sql
21370 69 74 65 33 5f 73 6e 61 70 73 68 6f 74 20 2a 2a  ite3_snapshot **
21380 70 70 53 6e 61 70 73 68 6f 74 0a 29 7b 0a 20 20  ppSnapshot.){.  
21390 69 6e 74 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  int rc = SQLITE_
213a0 45 52 52 4f 52 3b 0a 23 69 66 6e 64 65 66 20 53  ERROR;.#ifndef S
213b0 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 0a  QLITE_OMIT_WAL..
213c0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
213d0 41 42 4c 45 5f 41 50 49 5f 41 52 4d 4f 52 0a 20  ABLE_API_ARMOR. 
213e0 20 69 66 28 20 21 73 71 6c 69 74 65 33 53 61 66   if( !sqlite3Saf
213f0 65 74 79 43 68 65 63 6b 4f 6b 28 64 62 29 20 29  etyCheckOk(db) )
21400 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  {.    return SQL
21410 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54 3b  ITE_MISUSE_BKPT;
21420 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 73 71  .  }.#endif.  sq
21430 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65  lite3_mutex_ente
21440 72 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 0a 20  r(db->mutex);.. 
21450 20 69 66 28 20 64 62 2d 3e 61 75 74 6f 43 6f 6d   if( db->autoCom
21460 6d 69 74 3d 3d 30 20 29 7b 0a 20 20 20 20 69 6e  mit==0 ){.    in
21470 74 20 69 44 62 20 3d 20 73 71 6c 69 74 65 33 46  t iDb = sqlite3F
21480 69 6e 64 44 62 4e 61 6d 65 28 64 62 2c 20 7a 44  indDbName(db, zD
21490 62 29 3b 0a 20 20 20 20 69 66 28 20 69 44 62 3d  b);.    if( iDb=
214a0 3d 30 20 7c 7c 20 69 44 62 3e 31 20 29 7b 0a 20  =0 || iDb>1 ){. 
214b0 20 20 20 20 20 42 74 72 65 65 20 2a 70 42 74 20       Btree *pBt 
214c0 3d 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70  = db->aDb[iDb].p
214d0 42 74 3b 0a 20 20 20 20 20 20 69 66 28 20 30 3d  Bt;.      if( 0=
214e0 3d 73 71 6c 69 74 65 33 42 74 72 65 65 49 73 49  =sqlite3BtreeIsI
214f0 6e 54 72 61 6e 73 28 70 42 74 29 20 29 7b 0a 20  nTrans(pBt) ){. 
21500 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
21510 74 65 33 42 74 72 65 65 42 65 67 69 6e 54 72 61  te3BtreeBeginTra
21520 6e 73 28 70 42 74 2c 20 30 29 3b 0a 20 20 20 20  ns(pBt, 0);.    
21530 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
21540 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
21550 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 50     rc = sqlite3P
21560 61 67 65 72 53 6e 61 70 73 68 6f 74 47 65 74 28  agerSnapshotGet(
21570 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 67 65  sqlite3BtreePage
21580 72 28 70 42 74 29 2c 20 70 70 53 6e 61 70 73 68  r(pBt), ppSnapsh
21590 6f 74 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  ot);.        }. 
215a0 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
215b0 0a 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  ..  sqlite3_mute
215c0 78 5f 6c 65 61 76 65 28 64 62 2d 3e 6d 75 74 65  x_leave(db->mute
215d0 78 29 3b 0a 23 65 6e 64 69 66 20 20 20 2f 2a 20  x);.#endif   /* 
215e0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 20  SQLITE_OMIT_WAL 
215f0 2a 2f 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a  */.  return rc;.
21600 7d 0a 0a 2f 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20  }../*.** Open a 
21610 72 65 61 64 2d 74 72 61 6e 73 61 63 74 69 6f 6e  read-transaction
21620 20 6f 6e 20 74 68 65 20 73 6e 61 70 73 68 6f 74   on the snapshot
21630 20 69 64 65 6e 64 69 66 69 65 64 20 62 79 20 70   idendified by p
21640 53 6e 61 70 73 68 6f 74 2e 0a 2a 2f 0a 69 6e 74  Snapshot..*/.int
21650 20 73 71 6c 69 74 65 33 5f 73 6e 61 70 73 68 6f   sqlite3_snapsho
21660 74 5f 6f 70 65 6e 28 0a 20 20 73 71 6c 69 74 65  t_open(.  sqlite
21670 33 20 2a 64 62 2c 20 0a 20 20 63 6f 6e 73 74 20  3 *db, .  const 
21680 63 68 61 72 20 2a 7a 44 62 2c 20 0a 20 20 73 71  char *zDb, .  sq
21690 6c 69 74 65 33 5f 73 6e 61 70 73 68 6f 74 20 2a  lite3_snapshot *
216a0 70 53 6e 61 70 73 68 6f 74 0a 29 7b 0a 20 20 69  pSnapshot.){.  i
216b0 6e 74 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45  nt rc = SQLITE_E
216c0 52 52 4f 52 3b 0a 23 69 66 6e 64 65 66 20 53 51  RROR;.#ifndef SQ
216d0 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 0a 23  LITE_OMIT_WAL..#
216e0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
216f0 42 4c 45 5f 41 50 49 5f 41 52 4d 4f 52 0a 20 20  BLE_API_ARMOR.  
21700 69 66 28 20 21 73 71 6c 69 74 65 33 53 61 66 65  if( !sqlite3Safe
21710 74 79 43 68 65 63 6b 4f 6b 28 64 62 29 20 29 7b  tyCheckOk(db) ){
21720 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
21730 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54 3b 0a  TE_MISUSE_BKPT;.
21740 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 73 71 6c    }.#endif.  sql
21750 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72  ite3_mutex_enter
21760 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 69  (db->mutex);.  i
21770 66 28 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69  f( db->autoCommi
21780 74 3d 3d 30 20 29 7b 0a 20 20 20 20 69 6e 74 20  t==0 ){.    int 
21790 69 44 62 3b 0a 20 20 20 20 69 44 62 20 3d 20 73  iDb;.    iDb = s
217a0 71 6c 69 74 65 33 46 69 6e 64 44 62 4e 61 6d 65  qlite3FindDbName
217b0 28 64 62 2c 20 7a 44 62 29 3b 0a 20 20 20 20 69  (db, zDb);.    i
217c0 66 28 20 69 44 62 3d 3d 30 20 7c 7c 20 69 44 62  f( iDb==0 || iDb
217d0 3e 31 20 29 7b 0a 20 20 20 20 20 20 42 74 72 65  >1 ){.      Btre
217e0 65 20 2a 70 42 74 20 3d 20 64 62 2d 3e 61 44 62  e *pBt = db->aDb
217f0 5b 69 44 62 5d 2e 70 42 74 3b 0a 20 20 20 20 20  [iDb].pBt;.     
21800 20 69 66 28 20 30 3d 3d 73 71 6c 69 74 65 33 42   if( 0==sqlite3B
21810 74 72 65 65 49 73 49 6e 52 65 61 64 54 72 61 6e  treeIsInReadTran
21820 73 28 70 42 74 29 20 29 7b 0a 20 20 20 20 20 20  s(pBt) ){.      
21830 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 50 61    rc = sqlite3Pa
21840 67 65 72 53 6e 61 70 73 68 6f 74 4f 70 65 6e 28  gerSnapshotOpen(
21850 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 67 65  sqlite3BtreePage
21860 72 28 70 42 74 29 2c 20 70 53 6e 61 70 73 68 6f  r(pBt), pSnapsho
21870 74 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  t);.        if( 
21880 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
21890 0a 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20  .          rc = 
218a0 73 71 6c 69 74 65 33 42 74 72 65 65 42 65 67 69  sqlite3BtreeBegi
218b0 6e 54 72 61 6e 73 28 70 42 74 2c 20 30 29 3b 0a  nTrans(pBt, 0);.
218c0 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
218d0 33 50 61 67 65 72 53 6e 61 70 73 68 6f 74 4f 70  3PagerSnapshotOp
218e0 65 6e 28 73 71 6c 69 74 65 33 42 74 72 65 65 50  en(sqlite3BtreeP
218f0 61 67 65 72 28 70 42 74 29 2c 20 30 29 3b 0a 20  ager(pBt), 0);. 
21900 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
21910 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 73 71  .    }.  }..  sq
21920 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76  lite3_mutex_leav
21930 65 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 23 65  e(db->mutex);.#e
21940 6e 64 69 66 20 20 20 2f 2a 20 53 51 4c 49 54 45  ndif   /* SQLITE
21950 5f 4f 4d 49 54 5f 57 41 4c 20 2a 2f 0a 20 20 72  _OMIT_WAL */.  r
21960 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a  eturn rc;.}../*.
21970 2a 2a 20 52 65 63 6f 76 65 72 20 61 73 20 6d 61  ** Recover as ma
21980 6e 79 20 73 6e 61 70 73 68 6f 74 73 20 61 73 20  ny snapshots as 
21990 70 6f 73 73 69 62 6c 65 20 66 72 6f 6d 20 74 68  possible from th
219a0 65 20 77 61 6c 20 66 69 6c 65 20 61 73 73 6f 63  e wal file assoc
219b0 69 61 74 65 64 20 77 69 74 68 0a 2a 2a 20 73 63  iated with.** sc
219c0 68 65 6d 61 20 7a 44 62 20 6f 66 20 64 61 74 61  hema zDb of data
219d0 62 61 73 65 20 64 62 2e 0a 2a 2f 0a 69 6e 74 20  base db..*/.int 
219e0 73 71 6c 69 74 65 33 5f 73 6e 61 70 73 68 6f 74  sqlite3_snapshot
219f0 5f 72 65 63 6f 76 65 72 28 73 71 6c 69 74 65 33  _recover(sqlite3
21a00 20 2a 64 62 2c 20 63 6f 6e 73 74 20 63 68 61 72   *db, const char
21a10 20 2a 7a 44 62 29 7b 0a 20 20 69 6e 74 20 72 63   *zDb){.  int rc
21a20 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b   = SQLITE_ERROR;
21a30 0a 20 20 69 6e 74 20 69 44 62 3b 0a 23 69 66 6e  .  int iDb;.#ifn
21a40 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
21a50 57 41 4c 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  WAL..#ifdef SQLI
21a60 54 45 5f 45 4e 41 42 4c 45 5f 41 50 49 5f 41 52  TE_ENABLE_API_AR
21a70 4d 4f 52 0a 20 20 69 66 28 20 21 73 71 6c 69 74  MOR.  if( !sqlit
21a80 65 33 53 61 66 65 74 79 43 68 65 63 6b 4f 6b 28  e3SafetyCheckOk(
21a90 64 62 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72  db) ){.    retur
21aa0 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 5f  n SQLITE_MISUSE_
21ab0 42 4b 50 54 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  BKPT;.  }.#endif
21ac0 0a 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  ..  sqlite3_mute
21ad0 78 5f 65 6e 74 65 72 28 64 62 2d 3e 6d 75 74 65  x_enter(db->mute
21ae0 78 29 3b 0a 20 20 69 44 62 20 3d 20 73 71 6c 69  x);.  iDb = sqli
21af0 74 65 33 46 69 6e 64 44 62 4e 61 6d 65 28 64 62  te3FindDbName(db
21b00 2c 20 7a 44 62 29 3b 0a 20 20 69 66 28 20 69 44  , zDb);.  if( iD
21b10 62 3d 3d 30 20 7c 7c 20 69 44 62 3e 31 20 29 7b  b==0 || iDb>1 ){
21b20 0a 20 20 20 20 42 74 72 65 65 20 2a 70 42 74 20  .    Btree *pBt 
21b30 3d 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70  = db->aDb[iDb].p
21b40 42 74 3b 0a 20 20 20 20 69 66 28 20 30 3d 3d 73  Bt;.    if( 0==s
21b50 71 6c 69 74 65 33 42 74 72 65 65 49 73 49 6e 52  qlite3BtreeIsInR
21b60 65 61 64 54 72 61 6e 73 28 70 42 74 29 20 29 7b  eadTrans(pBt) ){
21b70 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
21b80 74 65 33 42 74 72 65 65 42 65 67 69 6e 54 72 61  te3BtreeBeginTra
21b90 6e 73 28 70 42 74 2c 20 30 29 3b 0a 20 20 20 20  ns(pBt, 0);.    
21ba0 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
21bb0 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 72  _OK ){.        r
21bc0 63 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72  c = sqlite3Pager
21bd0 53 6e 61 70 73 68 6f 74 52 65 63 6f 76 65 72 28  SnapshotRecover(
21be0 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 67 65  sqlite3BtreePage
21bf0 72 28 70 42 74 29 29 3b 0a 20 20 20 20 20 20 20  r(pBt));.       
21c00 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6f 6d   sqlite3BtreeCom
21c10 6d 69 74 28 70 42 74 29 3b 0a 20 20 20 20 20 20  mit(pBt);.      
21c20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 73 71  }.    }.  }.  sq
21c30 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76  lite3_mutex_leav
21c40 65 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 23 65  e(db->mutex);.#e
21c50 6e 64 69 66 20 20 20 2f 2a 20 53 51 4c 49 54 45  ndif   /* SQLITE
21c60 5f 4f 4d 49 54 5f 57 41 4c 20 2a 2f 0a 20 20 72  _OMIT_WAL */.  r
21c70 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a  eturn rc;.}../*.
21c80 2a 2a 20 46 72 65 65 20 61 20 73 6e 61 70 73 68  ** Free a snapsh
21c90 6f 74 20 68 61 6e 64 6c 65 20 6f 62 74 61 69 6e  ot handle obtain
21ca0 65 64 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 5f  ed from sqlite3_
21cb0 73 6e 61 70 73 68 6f 74 5f 67 65 74 28 29 2e 0a  snapshot_get()..
21cc0 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 5f  */.void sqlite3_
21cd0 73 6e 61 70 73 68 6f 74 5f 66 72 65 65 28 73 71  snapshot_free(sq
21ce0 6c 69 74 65 33 5f 73 6e 61 70 73 68 6f 74 20 2a  lite3_snapshot *
21cf0 70 53 6e 61 70 73 68 6f 74 29 7b 0a 20 20 73 71  pSnapshot){.  sq
21d00 6c 69 74 65 33 5f 66 72 65 65 28 70 53 6e 61 70  lite3_free(pSnap
21d10 73 68 6f 74 29 3b 0a 7d 0a 23 65 6e 64 69 66 20  shot);.}.#endif 
21d20 2f 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  /* SQLITE_ENABLE
21d30 5f 53 4e 41 50 53 48 4f 54 20 2a 2f 0a 0a 23 69  _SNAPSHOT */..#i
21d40 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
21d50 54 5f 43 4f 4d 50 49 4c 45 4f 50 54 49 4f 4e 5f  T_COMPILEOPTION_
21d60 44 49 41 47 53 0a 2f 2a 0a 2a 2a 20 47 69 76 65  DIAGS./*.** Give
21d70 6e 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20  n the name of a 
21d80 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74  compile-time opt
21d90 69 6f 6e 2c 20 72 65 74 75 72 6e 20 74 72 75 65  ion, return true
21da0 20 69 66 20 74 68 61 74 20 6f 70 74 69 6f 6e 0a   if that option.
21db0 2a 2a 20 77 61 73 20 75 73 65 64 20 61 6e 64 20  ** was used and 
21dc0 66 61 6c 73 65 20 69 66 20 6e 6f 74 2e 0a 2a 2a  false if not..**
21dd0 0a 2a 2a 20 54 68 65 20 6e 61 6d 65 20 63 61 6e  .** The name can
21de0 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 62 65 67 69   optionally begi
21df0 6e 20 77 69 74 68 20 22 53 51 4c 49 54 45 5f 22  n with "SQLITE_"
21e00 20 62 75 74 20 74 68 65 20 22 53 51 4c 49 54 45   but the "SQLITE
21e10 5f 22 20 70 72 65 66 69 78 0a 2a 2a 20 69 73 20  _" prefix.** is 
21e20 6e 6f 74 20 72 65 71 75 69 72 65 64 20 66 6f 72  not required for
21e30 20 61 20 6d 61 74 63 68 2e 0a 2a 2f 0a 69 6e 74   a match..*/.int
21e40 20 73 71 6c 69 74 65 33 5f 63 6f 6d 70 69 6c 65   sqlite3_compile
21e50 6f 70 74 69 6f 6e 5f 75 73 65 64 28 63 6f 6e 73  option_used(cons
21e60 74 20 63 68 61 72 20 2a 7a 4f 70 74 4e 61 6d 65  t char *zOptName
21e70 29 7b 0a 20 20 69 6e 74 20 69 2c 20 6e 3b 0a 20  ){.  int i, n;. 
21e80 20 69 6e 74 20 6e 4f 70 74 3b 0a 20 20 63 6f 6e   int nOpt;.  con
21e90 73 74 20 63 68 61 72 20 2a 2a 61 7a 43 6f 6d 70  st char **azComp
21ea0 69 6c 65 4f 70 74 3b 0a 20 0a 23 69 66 20 53 51  ileOpt;. .#if SQ
21eb0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41 50 49 5f  LITE_ENABLE_API_
21ec0 41 52 4d 4f 52 0a 20 20 69 66 28 20 7a 4f 70 74  ARMOR.  if( zOpt
21ed0 4e 61 6d 65 3d 3d 30 20 29 7b 0a 20 20 20 20 28  Name==0 ){.    (
21ee0 76 6f 69 64 29 53 51 4c 49 54 45 5f 4d 49 53 55  void)SQLITE_MISU
21ef0 53 45 5f 42 4b 50 54 3b 0a 20 20 20 20 72 65 74  SE_BKPT;.    ret
21f00 75 72 6e 20 30 3b 0a 20 20 7d 0a 23 65 6e 64 69  urn 0;.  }.#endi
21f10 66 0a 0a 20 20 61 7a 43 6f 6d 70 69 6c 65 4f 70  f..  azCompileOp
21f20 74 20 3d 20 73 71 6c 69 74 65 33 43 6f 6d 70 69  t = sqlite3Compi
21f30 6c 65 4f 70 74 69 6f 6e 73 28 26 6e 4f 70 74 29  leOptions(&nOpt)
21f40 3b 0a 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  ;..  if( sqlite3
21f50 53 74 72 4e 49 43 6d 70 28 7a 4f 70 74 4e 61 6d  StrNICmp(zOptNam
21f60 65 2c 20 22 53 51 4c 49 54 45 5f 22 2c 20 37 29  e, "SQLITE_", 7)
21f70 3d 3d 30 20 29 20 7a 4f 70 74 4e 61 6d 65 20 2b  ==0 ) zOptName +
21f80 3d 20 37 3b 0a 20 20 6e 20 3d 20 73 71 6c 69 74  = 7;.  n = sqlit
21f90 65 33 53 74 72 6c 65 6e 33 30 28 7a 4f 70 74 4e  e3Strlen30(zOptN
21fa0 61 6d 65 29 3b 0a 0a 20 20 2f 2a 20 53 69 6e 63  ame);..  /* Sinc
21fb0 65 20 6e 4f 70 74 20 69 73 20 6e 6f 72 6d 61 6c  e nOpt is normal
21fc0 6c 79 20 69 6e 20 73 69 6e 67 6c 65 20 64 69 67  ly in single dig
21fd0 69 74 73 2c 20 61 20 6c 69 6e 65 61 72 20 73 65  its, a linear se
21fe0 61 72 63 68 20 69 73 20 0a 20 20 2a 2a 20 61 64  arch is .  ** ad
21ff0 65 71 75 61 74 65 2e 20 4e 6f 20 6e 65 65 64 20  equate. No need 
22000 66 6f 72 20 61 20 62 69 6e 61 72 79 20 73 65 61  for a binary sea
22010 72 63 68 2e 20 2a 2f 0a 20 20 66 6f 72 28 69 3d  rch. */.  for(i=
22020 30 3b 20 69 3c 6e 4f 70 74 3b 20 69 2b 2b 29 7b  0; i<nOpt; i++){
22030 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33  .    if( sqlite3
22040 53 74 72 4e 49 43 6d 70 28 7a 4f 70 74 4e 61 6d  StrNICmp(zOptNam
22050 65 2c 20 61 7a 43 6f 6d 70 69 6c 65 4f 70 74 5b  e, azCompileOpt[
22060 69 5d 2c 20 6e 29 3d 3d 30 0a 20 20 20 20 20 26  i], n)==0.     &
22070 26 20 73 71 6c 69 74 65 33 49 73 49 64 43 68 61  & sqlite3IsIdCha
22080 72 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  r((unsigned char
22090 29 61 7a 43 6f 6d 70 69 6c 65 4f 70 74 5b 69 5d  )azCompileOpt[i]
220a0 5b 6e 5d 29 3d 3d 30 0a 20 20 20 20 29 7b 0a 20  [n])==0.    ){. 
220b0 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20       return 1;. 
220c0 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72     }.  }.  retur
220d0 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65  n 0;.}../*.** Re
220e0 74 75 72 6e 20 74 68 65 20 4e 2d 74 68 20 63 6f  turn the N-th co
220f0 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
22100 6e 20 73 74 72 69 6e 67 2e 20 20 49 66 20 4e 20  n string.  If N 
22110 69 73 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 2c  is out of range,
22120 0a 2a 2a 20 72 65 74 75 72 6e 20 61 20 4e 55 4c  .** return a NUL
22130 4c 20 70 6f 69 6e 74 65 72 2e 0a 2a 2f 0a 63 6f  L pointer..*/.co
22140 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65  nst char *sqlite
22150 33 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f  3_compileoption_
22160 67 65 74 28 69 6e 74 20 4e 29 7b 0a 20 20 69 6e  get(int N){.  in
22170 74 20 6e 4f 70 74 3b 0a 20 20 63 6f 6e 73 74 20  t nOpt;.  const 
22180 63 68 61 72 20 2a 2a 61 7a 43 6f 6d 70 69 6c 65  char **azCompile
22190 4f 70 74 3b 0a 20 20 61 7a 43 6f 6d 70 69 6c 65  Opt;.  azCompile
221a0 4f 70 74 20 3d 20 73 71 6c 69 74 65 33 43 6f 6d  Opt = sqlite3Com
221b0 70 69 6c 65 4f 70 74 69 6f 6e 73 28 26 6e 4f 70  pileOptions(&nOp
221c0 74 29 3b 0a 20 20 69 66 28 20 4e 3e 3d 30 20 26  t);.  if( N>=0 &
221d0 26 20 4e 3c 6e 4f 70 74 20 29 7b 0a 20 20 20 20  & N<nOpt ){.    
221e0 72 65 74 75 72 6e 20 61 7a 43 6f 6d 70 69 6c 65  return azCompile
221f0 4f 70 74 5b 4e 5d 3b 0a 20 20 7d 0a 20 20 72 65  Opt[N];.  }.  re
22200 74 75 72 6e 20 30 3b 0a 7d 0a 23 65 6e 64 69 66  turn 0;.}.#endif
22210 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
22220 43 4f 4d 50 49 4c 45 4f 50 54 49 4f 4e 5f 44 49  COMPILEOPTION_DI
22230 41 47 53 20 2a 2f 0a                             AGS */.