Documentation Source Text

Hex Artifact Content
Login

Artifact 5b6ab57434106e1562162c42b9aa22bb326cfabb:


0000: 3c 74 69 74 6c 65 3e 43 6f 6d 70 69 6c 61 74 69  <title>Compilati
0010: 6f 6e 20 4f 70 74 69 6f 6e 73 20 46 6f 72 20 53  on Options For S
0020: 51 4c 69 74 65 3c 2f 74 69 74 6c 65 3e 0a 3c 74  QLite</title>.<t
0030: 63 6c 3e 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b  cl>hd_keywords {
0040: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74  compile-time opt
0050: 69 6f 6e 73 7d 3c 2f 74 63 6c 3e 0a 0a 3c 74 61  ions}</tcl>..<ta
0060: 62 6c 65 5f 6f 66 5f 63 6f 6e 74 65 6e 74 73 3e  ble_of_contents>
0070: 0a 0a 3c 68 31 3e 4f 76 65 72 76 69 65 77 3c 2f  ..<h1>Overview</
0080: 68 31 3e 0a 0a 3c 70 3e 0a 46 6f 72 20 6d 6f 73  h1>..<p>.For mos
0090: 74 20 70 75 72 70 6f 73 65 73 2c 20 53 51 4c 69  t purposes, SQLi
00a0: 74 65 20 63 61 6e 20 62 65 20 62 75 69 6c 74 20  te can be built 
00b0: 6a 75 73 74 20 66 69 6e 65 20 75 73 69 6e 67 20  just fine using 
00c0: 74 68 65 20 64 65 66 61 75 6c 74 0a 63 6f 6d 70  the default.comp
00d0: 69 6c 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 2e  ilation options.
00e0: 20 48 6f 77 65 76 65 72 2c 20 69 66 20 72 65 71   However, if req
00f0: 75 69 72 65 64 2c 20 74 68 65 20 63 6f 6d 70 69  uired, the compi
0100: 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73 0a  le-time options.
0110: 64 6f 63 75 6d 65 6e 74 65 64 20 62 65 6c 6f 77  documented below
0120: 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20   can be used to 
0130: 0a 3c 61 20 68 72 65 66 3d 22 23 6f 6d 69 74 66  .<a href="#omitf
0140: 65 61 74 75 72 65 73 22 3e 6f 6d 69 74 20 53 51  eatures">omit SQ
0150: 4c 69 74 65 20 66 65 61 74 75 72 65 73 3c 2f 61  Lite features</a
0160: 3e 20 28 72 65 73 75 6c 74 69 6e 67 20 69 6e 0a  > (resulting in.
0170: 61 20 5b 72 65 6c 66 6f 6f 74 70 72 69 6e 74 20  a [relfootprint 
0180: 7c 20 73 6d 61 6c 6c 65 72 20 63 6f 6d 70 69 6c  | smaller compil
0190: 65 64 20 6c 69 62 72 61 72 79 20 73 69 7a 65 5d  ed library size]
01a0: 29 20 6f 72 20 74 6f 20 63 68 61 6e 67 65 20 74  ) or to change t
01b0: 68 65 0a 3c 61 20 68 72 65 66 3d 22 23 64 65 66  he.<a href="#def
01c0: 61 75 6c 74 73 22 3e 64 65 66 61 75 6c 74 20 76  aults">default v
01d0: 61 6c 75 65 73 3c 2f 61 3e 20 6f 66 20 73 6f 6d  alues</a> of som
01e0: 65 20 70 61 72 61 6d 65 74 65 72 73 2e 0a 3c 2f  e parameters..</
01f0: 70 3e 0a 0a 3c 70 3e 0a 45 76 65 72 79 20 65 66  p>..<p>.Every ef
0200: 66 6f 72 74 20 68 61 73 20 62 65 65 6e 20 6d 61  fort has been ma
0210: 64 65 20 74 6f 20 65 6e 73 75 72 65 20 74 68 61  de to ensure tha
0220: 74 20 74 68 65 20 76 61 72 69 6f 75 73 20 63 6f  t the various co
0230: 6d 62 69 6e 61 74 69 6f 6e 73 0a 6f 66 20 63 6f  mbinations.of co
0240: 6d 70 69 6c 61 74 69 6f 6e 20 6f 70 74 69 6f 6e  mpilation option
0250: 73 20 77 6f 72 6b 20 68 61 72 6d 6f 6e 69 6f 75  s work harmoniou
0260: 73 6c 79 20 61 6e 64 20 70 72 6f 64 75 63 65 20  sly and produce 
0270: 61 20 77 6f 72 6b 69 6e 67 20 6c 69 62 72 61 72  a working librar
0280: 79 2e 0a 4e 65 76 65 72 74 68 65 6c 65 73 73 2c  y..Nevertheless,
0290: 20 69 74 20 69 73 20 73 74 72 6f 6e 67 6c 79 20   it is strongly 
02a0: 72 65 63 6f 6d 6d 65 6e 64 65 64 20 74 68 61 74  recommended that
02b0: 20 74 68 65 20 53 51 4c 69 74 65 20 74 65 73 74   the SQLite test
02c0: 2d 73 75 69 74 65 0a 62 65 20 65 78 65 63 75 74  -suite.be execut
02d0: 65 64 20 74 6f 20 63 68 65 63 6b 20 66 6f 72 20  ed to check for 
02e0: 65 72 72 6f 72 73 20 62 65 66 6f 72 65 20 75 73  errors before us
02f0: 69 6e 67 20 61 6e 20 53 51 4c 69 74 65 20 6c 69  ing an SQLite li
0300: 62 72 61 72 79 20 62 75 69 6c 74 0a 77 69 74 68  brary built.with
0310: 20 6e 6f 6e 2d 73 74 61 6e 64 61 72 64 20 63 6f   non-standard co
0320: 6d 70 69 6c 61 74 69 6f 6e 20 6f 70 74 69 6f 6e  mpilation option
0330: 73 2e 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 70  s..</p>..<tcl>.p
0340: 72 6f 63 20 43 4f 4d 50 49 4c 45 5f 4f 50 54 49  roc COMPILE_OPTI
0350: 4f 4e 20 7b 6e 61 6d 65 20 74 65 78 74 7d 20 7b  ON {name text} {
0360: 0a 20 20 69 66 20 7b 5b 72 65 67 65 78 70 20 7b  .  if {[regexp {
0370: 28 53 51 4c 49 54 45 7c 48 41 56 45 29 5f 28 5b  (SQLITE|HAVE)_([
0380: 41 2d 5a 30 2d 39 5f 5d 2b 29 7d 20 24 6e 61 6d  A-Z0-9_]+)} $nam
0390: 65 20 61 6c 6c 20 70 72 65 66 69 78 20 6c 61 62  e all prefix lab
03a0: 65 6c 5d 7d 20 7b 0a 20 20 20 20 68 64 5f 66 72  el]} {.    hd_fr
03b0: 61 67 6d 65 6e 74 20 5b 73 74 72 69 6e 67 20 74  agment [string t
03c0: 6f 6c 6f 77 65 72 20 24 6c 61 62 65 6c 5d 0a 20  olower $label]. 
03d0: 20 20 20 68 64 5f 6b 65 79 77 6f 72 64 73 20 24     hd_keywords $
03e0: 61 6c 6c 20 2d 44 24 61 6c 6c 0a 20 20 7d 0a 20  all -D$all.  }. 
03f0: 20 69 66 20 7b 5b 72 65 67 65 78 70 20 7b 5e 59   if {[regexp {^Y
0400: 59 28 5b 41 2d 5a 30 2d 39 5f 5d 2b 29 7d 20 24  Y([A-Z0-9_]+)} $
0410: 6e 61 6d 65 20 61 6c 6c 20 6c 61 62 65 6c 5d 7d  name all label]}
0420: 20 7b 0a 20 20 20 20 68 64 5f 66 72 61 67 6d 65   {.    hd_fragme
0430: 6e 74 20 5b 73 74 72 69 6e 67 20 74 6f 6c 6f 77  nt [string tolow
0440: 65 72 20 24 61 6c 6c 5d 0a 20 20 20 20 68 64 5f  er $all].    hd_
0450: 6b 65 79 77 6f 72 64 73 20 24 61 6c 6c 0a 20 20  keywords $all.  
0460: 7d 0a 20 20 68 64 5f 70 75 74 73 20 3c 70 3e 3c  }.  hd_puts <p><
0470: 62 3e 24 6e 61 6d 65 3c 2f 62 3e 3c 2f 70 3e 0a  b>$name</b></p>.
0480: 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 22 5c    regsub -all "\
0490: 6e 5c 5c 73 2a 5c 6e 22 20 24 74 65 78 74 20 22  n\\s*\n" $text "
04a0: 3c 2f 70 3e 5c 6e 5c 6e 3c 70 3e 22 20 74 65 78  </p>\n\n<p>" tex
04b0: 74 0a 20 20 68 64 5f 72 65 73 6f 6c 76 65 20 3c  t.  hd_resolve <
04c0: 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 3e 24 74  blockquote><p>$t
04d0: 65 78 74 3c 2f 70 3e 3c 2f 62 6c 6f 63 6b 71 75  ext</p></blockqu
04e0: 6f 74 65 3e 0a 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c  ote>.}.</tcl>..<
04f0: 61 20 6e 61 6d 65 3d 22 6f 73 63 6f 6e 66 69 67  a name="osconfig
0500: 22 3e 3c 2f 61 3e 0a 3c 68 31 3e 20 50 6c 61 74  "></a>.<h1> Plat
0510: 66 6f 72 6d 20 43 6f 6e 66 69 67 75 72 61 74 69  form Configurati
0520: 6f 6e 3c 2f 68 31 3e 0a 0a 3c 74 63 6c 3e 0a 43  on</h1>..<tcl>.C
0530: 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 5f  OMPILE_OPTION {_
0540: 48 41 56 45 5f 53 51 4c 49 54 45 5f 43 4f 4e 46  HAVE_SQLITE_CONF
0550: 49 47 5f 48 7d 20 7b 0a 20 20 49 66 20 74 68 65  IG_H} {.  If the
0560: 20 5f 48 41 56 45 5f 53 51 4c 49 54 45 5f 43 4f   _HAVE_SQLITE_CO
0570: 4e 46 49 47 5f 48 20 6d 61 63 72 6f 20 69 73 20  NFIG_H macro is 
0580: 64 65 66 69 6e 65 64 0a 20 20 74 68 65 6e 20 74  defined.  then t
0590: 68 65 20 53 51 4c 69 74 65 20 73 6f 75 72 63 65  he SQLite source
05a0: 20 63 6f 64 65 20 77 69 6c 6c 20 61 74 74 65 6d   code will attem
05b0: 70 74 20 74 6f 20 23 69 6e 63 6c 75 64 65 20 61  pt to #include a
05c0: 20 66 69 6c 65 20 6e 61 6d 65 64 20 22 63 6f 6e   file named "con
05d0: 66 69 67 2e 68 22 2e 0a 20 20 54 68 65 20 22 63  fig.h"..  The "c
05e0: 6f 6e 66 69 67 2e 68 22 20 66 69 6c 65 20 75 73  onfig.h" file us
05f0: 75 61 6c 6c 79 20 63 6f 6e 74 61 69 6e 73 20 6f  ually contains o
0600: 74 68 65 72 20 63 6f 6e 66 69 67 75 72 61 74 69  ther configurati
0610: 6f 6e 20 6f 70 74 69 6f 6e 73 2c 20 65 73 70 65  on options, espe
0620: 63 69 61 6c 6c 79 0a 20 20 22 48 41 56 45 5f 3c  cially.  "HAVE_<
0630: 69 3e 49 4e 54 45 52 46 41 43 45 3c 2f 69 3e 22  i>INTERFACE</i>"
0640: 20 74 79 70 65 20 6f 70 74 69 6f 6e 73 20 67 65   type options ge
0650: 6e 65 72 61 74 65 64 20 62 79 20 61 75 74 6f 63  nerated by autoc
0660: 6f 6e 66 20 73 63 72 69 70 74 73 2e 0a 7d 0a 0a  onf scripts..}..
0670: 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b  COMPILE_OPTION {
0680: 48 41 56 45 5f 46 44 41 54 41 53 59 4e 43 7d 20  HAVE_FDATASYNC} 
0690: 7b 0a 20 20 49 66 20 74 68 65 20 48 41 56 45 5f  {.  If the HAVE_
06a0: 46 44 41 54 41 53 59 4e 43 20 63 6f 6d 70 69 6c  FDATASYNC compil
06b0: 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73  e-time option is
06c0: 20 74 72 75 65 2c 20 74 68 65 6e 20 74 68 65 20   true, then the 
06d0: 64 65 66 61 75 6c 74 20 5b 56 46 53 5d 0a 20 20  default [VFS].  
06e0: 66 6f 72 20 75 6e 69 78 20 73 79 73 74 65 6d 73  for unix systems
06f0: 20 77 69 6c 6c 20 61 74 74 65 6d 70 74 20 74 6f   will attempt to
0700: 20 75 73 65 20 66 64 61 74 61 73 79 6e 63 28 29   use fdatasync()
0710: 20 69 6e 73 74 65 61 64 20 6f 66 20 66 73 79 6e   instead of fsyn
0720: 63 28 29 20 77 68 65 72 65 0a 20 20 61 70 70 72  c() where.  appr
0730: 6f 70 72 69 61 74 65 2e 20 20 49 66 20 74 68 69  opriate.  If thi
0740: 73 20 66 6c 61 67 20 69 73 20 6d 69 73 73 69 6e  s flag is missin
0750: 67 20 6f 72 20 66 61 6c 73 65 2c 20 74 68 65 6e  g or false, then
0760: 20 66 73 79 6e 63 28 29 20 69 73 20 61 6c 77 61   fsync() is alwa
0770: 79 73 20 75 73 65 64 2e 0a 7d 0a 0a 43 4f 4d 50  ys used..}..COMP
0780: 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 48 41 56 45  ILE_OPTION {HAVE
0790: 5f 47 4d 54 49 4d 45 5f 52 7d 20 7b 0a 20 20 49  _GMTIME_R} {.  I
07a0: 66 20 74 68 65 20 48 41 56 45 5f 47 4d 54 49 4d  f the HAVE_GMTIM
07b0: 45 5f 52 20 6f 70 74 69 6f 6e 20 69 73 20 74 72  E_R option is tr
07c0: 75 65 20 61 6e 64 20 69 66 20 5b 53 51 4c 49 54  ue and if [SQLIT
07d0: 45 5f 4f 4d 49 54 5f 44 41 54 45 54 49 4d 45 5f  E_OMIT_DATETIME_
07e0: 46 55 4e 43 53 5d 20 69 73 20 74 72 75 65 2c 0a  FUNCS] is true,.
07f0: 20 20 74 68 65 6e 20 74 68 65 20 43 55 52 52 45    then the CURRE
0800: 4e 54 5f 54 49 4d 45 2c 20 43 55 52 52 45 4e 54  NT_TIME, CURRENT
0810: 5f 44 41 54 45 2c 20 61 6e 64 20 43 55 52 52 45  _DATE, and CURRE
0820: 4e 54 5f 54 49 4d 45 53 54 41 4d 50 20 6b 65 79  NT_TIMESTAMP key
0830: 77 6f 72 64 73 20 77 69 6c 6c 20 75 73 65 0a 20  words will use. 
0840: 20 74 68 65 20 74 68 72 65 61 64 73 61 66 65 20   the threadsafe 
0850: 22 67 6d 74 69 6d 65 5f 72 28 29 22 20 69 6e 74  "gmtime_r()" int
0860: 65 72 66 61 63 65 20 72 61 74 68 65 72 20 74 68  erface rather th
0870: 61 6e 20 22 67 6d 74 69 6d 65 28 29 22 2e 20 20  an "gmtime()".  
0880: 49 6e 20 74 68 65 20 75 73 75 61 6c 20 63 61 73  In the usual cas
0890: 65 0a 20 20 77 68 65 72 65 20 5b 53 51 4c 49 54  e.  where [SQLIT
08a0: 45 5f 4f 4d 49 54 5f 44 41 54 45 54 49 4d 45 5f  E_OMIT_DATETIME_
08b0: 46 55 4e 43 53 5d 20 69 73 20 6e 6f 74 20 64 65  FUNCS] is not de
08c0: 66 69 6e 65 64 20 6f 72 20 69 73 20 66 61 6c 73  fined or is fals
08d0: 65 2c 20 74 68 65 6e 20 74 68 65 0a 20 20 62 75  e, then the.  bu
08e0: 69 6c 74 2d 69 6e 20 5b 64 61 74 65 20 61 6e 64  ilt-in [date and
08f0: 20 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 5d   time functions]
0900: 20 61 72 65 20 75 73 65 64 20 74 6f 20 69 6d 70   are used to imp
0910: 6c 65 6d 65 6e 74 20 74 68 65 20 43 55 52 52 45  lement the CURRE
0920: 4e 54 5f 54 49 4d 45 2c 0a 20 20 43 55 52 52 45  NT_TIME,.  CURRE
0930: 4e 54 5f 44 41 54 45 2c 20 61 6e 64 20 43 55 52  NT_DATE, and CUR
0940: 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d 50 20 6b  RENT_TIMESTAMP k
0950: 65 79 77 6f 72 64 73 20 61 6e 64 20 6e 65 69 74  eywords and neit
0960: 68 65 72 20 67 6d 74 69 6d 65 5f 72 28 29 20 6e  her gmtime_r() n
0970: 6f 72 0a 20 20 67 6d 74 69 6d 65 28 29 20 69 73  or.  gmtime() is
0980: 20 65 76 65 72 20 63 61 6c 6c 65 64 2e 0a 7d 0a   ever called..}.
0990: 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20  .COMPILE_OPTION 
09a0: 7b 48 41 56 45 5f 49 53 4e 41 4e 7d 20 7b 0a 20  {HAVE_ISNAN} {. 
09b0: 20 49 66 20 74 68 65 20 48 41 56 45 5f 49 53 4e   If the HAVE_ISN
09c0: 41 4e 20 6f 70 74 69 6f 6e 20 69 73 20 74 72 75  AN option is tru
09d0: 65 2c 20 74 68 65 6e 20 53 51 4c 69 74 65 20 69  e, then SQLite i
09e0: 6e 76 6f 6b 65 73 20 74 68 65 20 73 79 73 74 65  nvokes the syste
09f0: 6d 20 6c 69 62 72 61 72 79 20 69 73 6e 61 6e 28  m library isnan(
0a00: 29 0a 20 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20  ).  function to 
0a10: 64 65 74 65 72 6d 69 6e 65 20 69 66 20 61 20 64  determine if a d
0a20: 6f 75 62 6c 65 2d 70 72 65 63 69 73 69 6f 6e 20  ouble-precision 
0a30: 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76  floating point v
0a40: 61 6c 75 65 20 69 73 20 61 20 4e 61 4e 2e 0a 20  alue is a NaN.. 
0a50: 20 49 66 20 48 41 56 45 5f 49 53 4e 41 4e 20 69   If HAVE_ISNAN i
0a60: 73 20 75 6e 64 65 66 69 6e 65 64 20 6f 72 20 66  s undefined or f
0a70: 61 6c 73 65 2c 20 74 68 65 6e 20 53 51 4c 69 74  alse, then SQLit
0a80: 65 20 73 75 62 73 74 69 74 75 74 65 73 20 69 74  e substitutes it
0a90: 73 20 6f 77 6e 20 68 6f 6d 65 2d 67 72 6f 77 6e  s own home-grown
0aa0: 0a 20 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  .  implementatio
0ab0: 6e 20 6f 66 20 69 73 6e 61 6e 28 29 2e 0a 7d 0a  n of isnan()..}.
0ac0: 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20  .COMPILE_OPTION 
0ad0: 7b 48 41 56 45 5f 4c 4f 43 41 4c 54 49 4d 45 5f  {HAVE_LOCALTIME_
0ae0: 52 7d 20 7b 0a 20 20 49 66 20 74 68 65 20 48 41  R} {.  If the HA
0af0: 56 45 5f 4c 4f 43 41 4c 54 49 4d 45 5f 52 20 6f  VE_LOCALTIME_R o
0b00: 70 74 69 6f 6e 20 69 73 20 74 72 75 65 2c 20 74  ption is true, t
0b10: 68 65 6e 20 53 51 4c 69 74 65 20 75 73 65 73 20  hen SQLite uses 
0b20: 74 68 65 20 74 68 72 65 61 64 73 61 66 65 0a 20  the threadsafe. 
0b30: 20 6c 6f 63 61 6c 74 69 6d 65 5f 72 28 29 20 6c   localtime_r() l
0b40: 69 62 72 61 72 79 20 72 6f 75 74 69 6e 65 20 69  ibrary routine i
0b50: 6e 73 74 65 61 64 20 6f 66 20 6c 6f 63 61 6c 74  nstead of localt
0b60: 69 6d 65 28 29 0a 20 20 74 6f 20 68 65 6c 70 20  ime().  to help 
0b70: 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20 5b 6c  implement the [l
0b80: 6f 63 61 6c 74 69 6d 65 20 6d 6f 64 69 66 69 65  ocaltime modifie
0b90: 72 5d 0a 20 20 74 6f 20 74 68 65 20 62 75 69 6c  r].  to the buil
0ba0: 74 2d 69 6e 20 5b 64 61 74 65 20 61 6e 64 20 74  t-in [date and t
0bb0: 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 5d 2e 0a  ime functions]..
0bc0: 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f  }..COMPILE_OPTIO
0bd0: 4e 20 7b 48 41 56 45 5f 4c 4f 43 41 4c 54 49 4d  N {HAVE_LOCALTIM
0be0: 45 5f 53 7d 20 7b 0a 20 20 49 66 20 74 68 65 20  E_S} {.  If the 
0bf0: 48 41 56 45 5f 4c 4f 43 41 4c 54 49 4d 45 5f 53  HAVE_LOCALTIME_S
0c00: 20 6f 70 74 69 6f 6e 20 69 73 20 74 72 75 65 2c   option is true,
0c10: 20 74 68 65 6e 20 53 51 4c 69 74 65 20 75 73 65   then SQLite use
0c20: 73 20 74 68 65 20 74 68 72 65 61 64 73 61 66 65  s the threadsafe
0c30: 0a 20 20 6c 6f 63 61 6c 74 69 6d 65 5f 73 28 29  .  localtime_s()
0c40: 20 6c 69 62 72 61 72 79 20 72 6f 75 74 69 6e 65   library routine
0c50: 20 69 6e 73 74 65 61 64 20 6f 66 20 6c 6f 63 61   instead of loca
0c60: 6c 74 69 6d 65 28 29 0a 20 20 74 6f 20 68 65 6c  ltime().  to hel
0c70: 70 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20  p implement the 
0c80: 5b 6c 6f 63 61 6c 74 69 6d 65 20 6d 6f 64 69 66  [localtime modif
0c90: 69 65 72 5d 0a 20 20 74 6f 20 74 68 65 20 62 75  ier].  to the bu
0ca0: 69 6c 74 2d 69 6e 20 5b 64 61 74 65 20 61 6e 64  ilt-in [date and
0cb0: 20 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 5d   time functions]
0cc0: 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54  ..}..COMPILE_OPT
0cd0: 49 4f 4e 20 7b 48 41 56 45 5f 4d 41 4c 4c 4f 43  ION {HAVE_MALLOC
0ce0: 5f 55 53 41 42 4c 45 5f 53 49 5a 45 7d 20 7b 0a  _USABLE_SIZE} {.
0cf0: 20 20 49 66 20 74 68 65 20 48 41 56 45 5f 4d 41    If the HAVE_MA
0d00: 4c 4c 4f 43 5f 55 53 41 42 4c 45 5f 53 49 5a 45  LLOC_USABLE_SIZE
0d10: 20 6f 70 74 69 6f 6e 20 69 73 20 74 72 75 65 2c   option is true,
0d20: 20 74 68 65 6e 20 53 51 4c 69 74 65 20 74 72 69   then SQLite tri
0d30: 65 73 20 75 73 65 73 20 74 68 65 0a 20 20 6d 61  es uses the.  ma
0d40: 6c 6c 6f 63 5f 75 73 61 62 6c 65 5f 73 69 7a 65  lloc_usable_size
0d50: 28 29 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20  () interface to 
0d60: 66 69 6e 64 20 74 68 65 20 73 69 7a 65 20 6f 66  find the size of
0d70: 20 61 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61   a memory alloca
0d80: 74 69 6f 6e 20 6f 62 74 61 69 6e 65 64 0a 20 20  tion obtained.  
0d90: 66 72 6f 6d 20 74 68 65 20 73 74 61 6e 64 61 72  from the standar
0da0: 64 2d 6c 69 62 72 61 72 79 20 6d 61 6c 6c 6f 63  d-library malloc
0db0: 28 29 20 6f 72 20 72 65 61 6c 6c 6f 63 28 29 20  () or realloc() 
0dc0: 72 6f 75 74 69 6e 65 73 2e 20 20 54 68 69 73 20  routines.  This 
0dd0: 6f 70 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 0a 20  option is only. 
0de0: 20 61 70 70 6c 69 63 61 62 6c 65 20 69 66 20 74   applicable if t
0df0: 68 65 20 73 74 61 6e 64 61 72 64 2d 6c 69 62 72  he standard-libr
0e00: 61 72 79 20 6d 61 6c 6c 6f 63 28 29 20 69 73 20  ary malloc() is 
0e10: 75 73 65 64 2e 20 20 4f 6e 20 41 70 70 6c 65 20  used.  On Apple 
0e20: 73 79 73 74 65 6d 73 2c 0a 20 20 22 7a 6f 6e 65  systems,.  "zone
0e30: 20 6d 61 6c 6c 6f 63 22 20 69 73 20 75 73 65 64   malloc" is used
0e40: 20 69 6e 73 74 65 61 64 2c 20 61 6e 64 20 73 6f   instead, and so
0e50: 20 74 68 69 73 20 6f 70 74 69 6f 6e 20 69 73 20   this option is 
0e60: 6e 6f 74 20 61 70 70 6c 69 63 61 62 6c 65 2e 20  not applicable. 
0e70: 20 41 6e 64 2c 20 6f 66 0a 20 20 63 6f 75 72 73   And, of.  cours
0e80: 65 2c 20 69 66 20 74 68 65 20 61 70 70 6c 69 63  e, if the applic
0e90: 61 74 69 6f 6e 20 73 75 70 70 6c 69 65 73 20 69  ation supplies i
0ea0: 74 73 20 6f 77 6e 20 6d 61 6c 6c 6f 63 20 69 6d  ts own malloc im
0eb0: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 75 73 69  plementation usi
0ec0: 6e 67 0a 20 20 5b 53 51 4c 49 54 45 5f 43 4f 4e  ng.  [SQLITE_CON
0ed0: 46 49 47 5f 4d 41 4c 4c 4f 43 5d 20 74 68 65 6e  FIG_MALLOC] then
0ee0: 20 74 68 69 73 20 6f 70 74 69 6f 6e 20 68 61 73   this option has
0ef0: 20 6e 6f 20 65 66 66 65 63 74 2e 0a 20 20 3c 70   no effect..  <p
0f00: 3e 0a 20 20 49 66 20 74 68 65 20 48 41 56 45 5f  >.  If the HAVE_
0f10: 4d 41 4c 4c 4f 43 5f 55 53 41 42 4c 45 5f 53 49  MALLOC_USABLE_SI
0f20: 5a 45 20 6f 70 74 69 6f 6e 20 69 73 20 6f 6d 69  ZE option is omi
0f30: 74 74 65 64 20 6f 72 20 69 73 20 66 61 6c 73 65  tted or is false
0f40: 2c 20 74 68 65 6e 20 53 51 4c 69 74 65 20 0a 20  , then SQLite . 
0f50: 20 75 73 65 73 20 61 20 77 72 61 70 70 65 72 20   uses a wrapper 
0f60: 61 72 6f 75 6e 64 20 73 79 73 74 65 6d 20 6d 61  around system ma
0f70: 6c 6c 6f 63 28 29 20 61 6e 64 20 72 65 61 6c 6c  lloc() and reall
0f80: 6f 63 28 29 20 74 68 61 74 20 65 6e 6c 61 72 67  oc() that enlarg
0f90: 65 73 20 65 61 63 68 20 61 6c 6c 6f 63 61 74 69  es each allocati
0fa0: 6f 6e 0a 20 20 62 79 20 38 20 62 79 74 65 73 20  on.  by 8 bytes 
0fb0: 61 6e 64 20 77 72 69 74 65 73 20 74 68 65 20 73  and writes the s
0fc0: 69 7a 65 20 6f 66 20 74 68 65 20 61 6c 6c 6f 63  ize of the alloc
0fd0: 61 74 69 6f 6e 20 69 6e 20 74 68 65 20 69 6e 69  ation in the ini
0fe0: 74 69 61 6c 20 38 20 62 79 74 65 73 2c 20 61 6e  tial 8 bytes, an
0ff0: 64 0a 20 20 74 68 65 6e 20 53 51 4c 69 74 65 20  d.  then SQLite 
1000: 61 6c 73 6f 20 69 6d 70 6c 65 6d 65 6e 74 73 20  also implements 
1010: 69 74 73 20 6f 77 6e 20 68 6f 6d 65 2d 67 72 6f  its own home-gro
1020: 77 6e 20 76 65 72 73 69 6f 6e 20 6f 66 20 6d 61  wn version of ma
1030: 6c 6c 6f 63 5f 75 73 61 62 6c 65 5f 73 69 7a 65  lloc_usable_size
1040: 28 29 0a 20 20 74 68 61 74 20 63 6f 6e 73 75 6c  ().  that consul
1050: 74 73 20 74 68 61 74 20 38 2d 62 79 74 65 20 70  ts that 8-byte p
1060: 72 65 66 69 78 20 74 6f 20 66 69 6e 64 20 74 68  refix to find th
1070: 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73 69 7a  e allocation siz
1080: 65 2e 20 20 54 68 69 73 20 61 70 70 72 6f 61 63  e.  This approac
1090: 68 0a 20 20 77 6f 72 6b 73 20 62 75 74 20 69 74  h.  works but it
10a0: 20 69 73 20 73 75 62 6f 70 74 69 6d 61 6c 2e 20   is suboptimal. 
10b0: 20 41 70 70 6c 69 63 61 74 69 6f 6e 73 20 61 72   Applications ar
10c0: 65 20 65 6e 63 6f 75 72 61 67 65 64 20 74 6f 20  e encouraged to 
10d0: 75 73 65 0a 20 20 48 41 56 45 5f 4d 41 4c 4c 4f  use.  HAVE_MALLO
10e0: 43 5f 55 53 41 42 4c 45 5f 53 49 5a 45 20 77 68  C_USABLE_SIZE wh
10f0: 65 6e 65 76 65 72 20 70 6f 73 73 69 62 6c 65 2e  enever possible.
1100: 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49  .}..COMPILE_OPTI
1110: 4f 4e 20 7b 48 41 56 45 5f 53 54 52 43 48 52 4e  ON {HAVE_STRCHRN
1120: 55 4c 7d 20 7b 0a 20 20 49 66 20 74 68 65 20 48  UL} {.  If the H
1130: 41 56 45 5f 53 54 52 43 48 52 4e 55 4c 20 6f 70  AVE_STRCHRNUL op
1140: 74 69 6f 6e 20 69 73 20 74 72 75 65 2c 20 74 68  tion is true, th
1150: 65 6e 20 53 51 4c 69 74 65 20 75 73 65 73 20 74  en SQLite uses t
1160: 68 65 20 73 74 72 63 68 72 6e 75 6c 28 29 20 6c  he strchrnul() l
1170: 69 62 72 61 72 79 0a 20 20 66 75 6e 63 74 69 6f  ibrary.  functio
1180: 6e 2e 20 20 49 66 20 74 68 69 73 20 6f 70 74 69  n.  If this opti
1190: 6f 6e 20 69 73 20 6d 69 73 73 69 6e 67 20 6f 72  on is missing or
11a0: 20 66 61 6c 73 65 2c 20 74 68 65 6e 20 53 51 4c   false, then SQL
11b0: 69 74 65 20 73 75 62 73 74 69 74 75 74 65 73 20  ite substitutes 
11c0: 69 74 73 20 6f 77 6e 0a 20 20 68 6f 6d 65 2d 67  its own.  home-g
11d0: 72 6f 77 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74  rown implementat
11e0: 69 6f 6e 20 6f 66 20 73 74 72 63 68 72 6e 75 6c  ion of strchrnul
11f0: 28 29 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f  ()..}..COMPILE_O
1200: 50 54 49 4f 4e 20 7b 48 41 56 45 5f 55 53 4c 45  PTION {HAVE_USLE
1210: 45 50 7d 20 7b 0a 20 20 49 66 20 74 68 65 20 48  EP} {.  If the H
1220: 41 56 45 5f 55 53 4c 45 45 50 20 6f 70 74 69 6f  AVE_USLEEP optio
1230: 6e 20 69 73 20 74 72 75 65 2c 20 74 68 65 6e 20  n is true, then 
1240: 74 68 65 20 64 65 66 61 75 6c 74 20 75 6e 69 78  the default unix
1250: 20 56 46 53 20 75 73 65 73 20 74 68 65 0a 20 20   VFS uses the.  
1260: 75 73 6c 65 65 70 28 29 20 73 79 73 74 65 6d 20  usleep() system 
1270: 63 61 6c 6c 20 74 6f 20 69 6d 70 6c 65 6d 65 6e  call to implemen
1280: 74 20 74 68 65 20 78 53 6c 65 65 70 20 6d 65 74  t the xSleep met
1290: 68 6f 64 2e 20 20 49 66 20 74 68 69 73 20 6f 70  hod.  If this op
12a0: 74 69 6f 6e 20 69 73 0a 20 20 75 6e 64 65 66 69  tion is.  undefi
12b0: 6e 65 64 20 6f 72 20 66 61 6c 73 65 2c 20 74 68  ned or false, th
12c0: 65 6e 20 78 53 6c 65 65 70 20 6f 6e 20 75 6e 69  en xSleep on uni
12d0: 78 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64  x is implemented
12e0: 20 75 73 69 6e 67 20 73 6c 65 65 70 28 29 20 77   using sleep() w
12f0: 68 69 63 68 0a 20 20 6d 65 61 6e 73 20 74 68 61  hich.  means tha
1300: 74 20 5b 73 71 6c 69 74 65 33 5f 73 6c 65 65 70  t [sqlite3_sleep
1310: 28 29 5d 20 77 69 6c 6c 20 68 61 76 65 20 61 20  ()] will have a 
1320: 6d 69 6e 69 6d 75 6d 20 77 61 69 74 20 69 6e 74  minimum wait int
1330: 65 72 76 61 6c 20 6f 66 20 31 30 30 30 0a 20 20  erval of 1000.  
1340: 6d 69 6c 6c 69 73 65 63 6f 6e 64 73 20 72 65 67  milliseconds reg
1350: 61 72 64 6c 65 73 73 20 6f 66 20 69 74 73 20 61  ardless of its a
1360: 72 67 75 6d 65 6e 74 2e 20 20 0a 7d 0a 0a 43 4f  rgument.  .}..CO
1370: 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 48 41  MPILE_OPTION {HA
1380: 56 45 5f 55 54 49 4d 45 7d 20 7b 0a 20 20 49 66  VE_UTIME} {.  If
1390: 20 74 68 65 20 48 41 56 45 5f 55 54 49 4d 45 20   the HAVE_UTIME 
13a0: 6f 70 74 69 6f 6e 20 69 73 20 74 72 75 65 2c 20  option is true, 
13b0: 74 68 65 6e 20 74 68 65 20 62 75 69 6c 74 2d 69  then the built-i
13c0: 6e 20 62 75 74 20 6e 6f 6e 2d 73 74 61 6e 64 61  n but non-standa
13d0: 72 64 0a 20 20 22 75 6e 69 78 2d 64 6f 74 66 69  rd.  "unix-dotfi
13e0: 6c 65 22 20 56 46 53 20 77 69 6c 6c 20 75 73 65  le" VFS will use
13f0: 20 74 68 65 20 75 74 69 6d 65 28 29 20 73 79 73   the utime() sys
1400: 74 65 6d 20 63 61 6c 6c 2c 20 69 6e 73 74 65 61  tem call, instea
1410: 64 20 6f 66 20 75 74 69 6d 65 73 28 29 2c 0a 20  d of utimes(),. 
1420: 20 74 6f 20 73 65 74 20 74 68 65 20 6c 61 73 74   to set the last
1430: 20 61 63 63 65 73 73 20 74 69 6d 65 20 6f 6e 20   access time on 
1440: 74 68 65 20 6c 6f 63 6b 20 66 69 6c 65 2e 0a 7d  the lock file..}
1450: 0a 3c 2f 74 63 6c 3e 0a 0a 3c 61 20 6e 61 6d 65  .</tcl>..<a name
1460: 3d 22 64 65 66 61 75 6c 74 73 22 3e 3c 2f 61 3e  ="defaults"></a>
1470: 0a 3c 68 31 3e 20 4f 70 74 69 6f 6e 73 20 54 6f  .<h1> Options To
1480: 20 53 65 74 20 44 65 66 61 75 6c 74 20 50 61 72   Set Default Par
1490: 61 6d 65 74 65 72 20 56 61 6c 75 65 73 3c 2f 68  ameter Values</h
14a0: 31 3e 0a 0a 3c 74 63 6c 3e 0a 0a 43 4f 4d 50 49  1>..<tcl>..COMPI
14b0: 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54  LE_OPTION {SQLIT
14c0: 45 5f 44 45 46 41 55 4c 54 5f 41 55 54 4f 4d 41  E_DEFAULT_AUTOMA
14d0: 54 49 43 5f 49 4e 44 45 58 3d 3c 69 3e 26 6c 74  TIC_INDEX=<i>&lt
14e0: 3b 30 20 6f 72 20 31 26 67 74 3b 3c 2f 69 3e 7d  ;0 or 1&gt;</i>}
14f0: 20 7b 0a 20 20 54 68 69 73 20 6d 61 63 72 6f 20   {.  This macro 
1500: 64 65 74 65 72 6d 69 6e 65 73 20 74 68 65 20 69  determines the i
1510: 6e 69 74 69 61 6c 20 73 65 74 74 69 6e 67 20 66  nitial setting f
1520: 6f 72 20 5b 50 52 41 47 4d 41 20 61 75 74 6f 6d  or [PRAGMA autom
1530: 61 74 69 63 5f 69 6e 64 65 78 5d 0a 20 20 66 6f  atic_index].  fo
1540: 72 20 6e 65 77 6c 79 20 6f 70 65 6e 65 64 20 5b  r newly opened [
1550: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
1560: 69 6f 6e 73 5d 2e 0a 20 20 46 6f 72 20 61 6c 6c  ions]..  For all
1570: 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c   versions of SQL
1580: 69 74 65 20 74 68 72 6f 75 67 68 20 33 2e 37 2e  ite through 3.7.
1590: 31 37 2c 0a 20 20 61 75 74 6f 6d 61 74 69 63 20  17,.  automatic 
15a0: 69 6e 64 69 63 65 73 20 61 72 65 20 6e 6f 72 6d  indices are norm
15b0: 61 6c 6c 79 20 65 6e 61 62 6c 65 64 20 66 6f 72  ally enabled for
15c0: 20 6e 65 77 20 64 61 74 61 62 61 73 65 20 63 6f   new database co
15d0: 6e 6e 65 63 74 69 6f 6e 73 20 69 66 0a 20 20 74  nnections if.  t
15e0: 68 69 73 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  his compile-time
15f0: 20 6f 70 74 69 6f 6e 20 69 73 20 6f 6d 69 74 74   option is omitt
1600: 65 64 2e 0a 20 20 48 6f 77 65 76 65 72 2c 20 74  ed..  However, t
1610: 68 61 74 20 6d 69 67 68 74 20 63 68 61 6e 67 65  hat might change
1620: 20 69 6e 20 66 75 74 75 72 65 20 72 65 6c 65 61   in future relea
1630: 73 65 73 20 6f 66 20 53 51 4c 69 74 65 2e 0a 20  ses of SQLite.. 
1640: 20 3c 70 3e 53 65 65 20 61 6c 73 6f 3a 20 5b 53   <p>See also: [S
1650: 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 4d  QLITE_OMIT_AUTOM
1660: 41 54 49 43 5f 49 4e 44 45 58 5d 0a 7d 0a 0a 43  ATIC_INDEX].}..C
1670: 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53  OMPILE_OPTION {S
1680: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 41 55  QLITE_DEFAULT_AU
1690: 54 4f 56 41 43 55 55 4d 3d 3c 69 3e 26 6c 74 3b  TOVACUUM=<i>&lt;
16a0: 30 20 6f 72 20 31 20 6f 72 20 32 26 67 74 3b 3c  0 or 1 or 2&gt;<
16b0: 2f 69 3e 7d 20 7b 0a 20 20 54 68 69 73 20 6d 61  /i>} {.  This ma
16c0: 63 72 6f 20 64 65 74 65 72 6d 69 6e 65 73 20 69  cro determines i
16d0: 66 20 53 51 4c 69 74 65 20 63 72 65 61 74 65 73  f SQLite creates
16e0: 20 64 61 74 61 62 61 73 65 73 20 77 69 74 68 20   databases with 
16f0: 74 68 65 20 0a 20 20 5b 61 75 74 6f 5f 76 61 63  the .  [auto_vac
1700: 75 75 6d 5d 20 66 6c 61 67 20 73 65 74 20 62 79  uum] flag set by
1710: 20 64 65 66 61 75 6c 74 20 74 6f 20 4f 46 46 20   default to OFF 
1720: 28 30 29 2c 20 46 55 4c 4c 20 28 31 29 2c 20 6f  (0), FULL (1), o
1730: 72 0a 20 20 49 4e 43 52 45 4d 45 4e 54 41 4c 20  r.  INCREMENTAL 
1740: 28 32 29 2e 20 54 68 65 20 64 65 66 61 75 6c 74  (2). The default
1750: 20 76 61 6c 75 65 20 69 73 20 30 20 6d 65 61 6e   value is 0 mean
1760: 69 6e 67 20 74 68 61 74 20 64 61 74 61 62 61 73  ing that databas
1770: 65 73 0a 20 20 61 72 65 20 63 72 65 61 74 65 64  es.  are created
1780: 20 77 69 74 68 20 61 75 74 6f 2d 76 61 63 75 75   with auto-vacuu
1790: 6d 20 74 75 72 6e 65 64 20 6f 66 66 2e 0a 20 20  m turned off..  
17a0: 49 6e 20 61 6e 79 20 63 61 73 65 20 74 68 65 20  In any case the 
17b0: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 64 65 66  compile-time def
17c0: 61 75 6c 74 20 6d 61 79 20 62 65 20 6f 76 65 72  ault may be over
17d0: 72 69 64 64 65 6e 20 62 79 20 74 68 65 20 0a 20  ridden by the . 
17e0: 20 5b 50 52 41 47 4d 41 20 61 75 74 6f 5f 76 61   [PRAGMA auto_va
17f0: 63 75 75 6d 5d 20 63 6f 6d 6d 61 6e 64 2e 0a 7d  cuum] command..}
1800: 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e  ..COMPILE_OPTION
1810: 20 7b 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54   {SQLITE_DEFAULT
1820: 5f 43 41 43 48 45 5f 53 49 5a 45 3d 3c 69 3e 26  _CACHE_SIZE=<i>&
1830: 6c 74 3b 4e 26 67 74 3b 3c 2f 69 3e 7d 20 7b 0a  lt;N&gt;</i>} {.
1840: 20 20 54 68 69 73 20 6d 61 63 72 6f 20 73 65 74    This macro set
1850: 73 20 74 68 65 20 64 65 66 61 75 6c 74 20 6d 61  s the default ma
1860: 78 69 6d 75 6d 20 73 69 7a 65 20 6f 66 20 74 68  ximum size of th
1870: 65 20 70 61 67 65 2d 63 61 63 68 65 20 66 6f 72  e page-cache for
1880: 20 65 61 63 68 20 61 74 74 61 63 68 65 64 0a 20   each attached. 
1890: 20 64 61 74 61 62 61 73 65 2e 20 20 41 20 70 6f   database.  A po
18a0: 73 69 74 69 76 65 20 76 61 6c 75 65 20 6d 65 61  sitive value mea
18b0: 6e 73 20 74 68 61 74 20 74 68 65 20 6c 69 6d 69  ns that the limi
18c0: 74 20 69 73 20 4e 20 70 61 67 65 2e 20 20 49 66  t is N page.  If
18d0: 20 4e 20 69 73 20 6e 65 67 61 74 69 76 65 0a 20   N is negative. 
18e0: 20 74 68 61 74 20 6d 65 61 6e 73 20 74 6f 20 6c   that means to l
18f0: 69 6d 69 74 20 74 68 65 20 63 61 63 68 65 20 73  imit the cache s
1900: 69 7a 65 20 74 6f 20 2d 4e 2a 31 30 32 34 20 62  ize to -N*1024 b
1910: 79 74 65 73 2e 0a 20 20 54 68 65 20 73 75 67 67  ytes..  The sugg
1920: 65 73 74 65 64 20 6d 61 78 69 6d 75 6d 20 63 61  ested maximum ca
1930: 63 68 65 20 73 69 7a 65 20 63 61 6e 20 62 65 20  che size can be 
1940: 6f 76 65 72 72 69 64 64 65 6e 20 62 79 20 74 68  overridden by th
1950: 65 20 0a 20 20 5b 50 52 41 47 4d 41 20 63 61 63  e .  [PRAGMA cac
1960: 68 65 5f 73 69 7a 65 5d 20 63 6f 6d 6d 61 6e 64  he_size] command
1970: 2e 20 54 68 65 20 64 65 66 61 75 6c 74 20 76 61  . The default va
1980: 6c 75 65 20 69 73 20 2d 32 30 30 30 2c 20 77 68  lue is -2000, wh
1990: 69 63 68 20 74 72 61 6e 73 6c 61 74 65 73 0a 20  ich translates. 
19a0: 20 69 6e 74 6f 20 61 20 6d 61 78 69 6d 75 6d 20   into a maximum 
19b0: 6f 66 20 32 30 34 38 30 30 30 20 62 79 74 65 73  of 2048000 bytes
19c0: 20 70 65 72 20 63 61 63 68 65 2e 0a 7d 0a 0a 43   per cache..}..C
19d0: 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53  OMPILE_OPTION {S
19e0: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 46 49  QLITE_DEFAULT_FI
19f0: 4c 45 5f 46 4f 52 4d 41 54 3d 3c 69 3e 26 6c 74  LE_FORMAT=<i>&lt
1a00: 3b 31 20 6f 72 20 34 26 67 74 3b 3c 2f 69 3e 7d  ;1 or 4&gt;</i>}
1a10: 20 7b 0a 20 20 54 68 65 20 64 65 66 61 75 6c 74   {.  The default
1a20: 20 5b 73 63 68 65 6d 61 20 66 6f 72 6d 61 74 20   [schema format 
1a30: 6e 75 6d 62 65 72 5d 20 75 73 65 64 20 62 79 20  number] used by 
1a40: 53 51 4c 69 74 65 20 77 68 65 6e 20 63 72 65 61  SQLite when crea
1a50: 74 69 6e 67 0a 20 20 6e 65 77 20 64 61 74 61 62  ting.  new datab
1a60: 61 73 65 20 66 69 6c 65 73 20 69 73 20 73 65 74  ase files is set
1a70: 20 62 79 20 74 68 69 73 20 6d 61 63 72 6f 2e 20   by this macro. 
1a80: 20 54 68 65 20 73 63 68 65 6d 61 20 66 6f 72 6d   The schema form
1a90: 61 74 73 20 61 72 65 20 61 6c 6c 0a 20 20 76 65  ats are all.  ve
1aa0: 72 79 20 73 69 6d 69 6c 61 72 2e 20 20 54 68 65  ry similar.  The
1ab0: 20 64 69 66 66 65 72 65 6e 63 65 20 62 65 74 77   difference betw
1ac0: 65 65 6e 20 66 6f 72 6d 61 74 73 20 31 20 61 6e  een formats 1 an
1ad0: 64 20 34 20 69 73 20 74 68 61 74 20 66 6f 72 6d  d 4 is that form
1ae0: 61 74 0a 20 20 34 20 75 6e 64 65 72 73 74 61 6e  at.  4 understan
1af0: 64 73 20 5b 64 65 73 63 65 6e 64 69 6e 67 20 69  ds [descending i
1b00: 6e 64 69 63 65 73 5d 20 61 6e 64 20 68 61 73 20  ndices] and has 
1b10: 61 20 74 69 67 68 74 65 72 20 65 6e 63 6f 64 69  a tighter encodi
1b20: 6e 67 20 66 6f 72 0a 20 20 62 6f 6f 6c 65 61 6e  ng for.  boolean
1b30: 20 76 61 6c 75 65 73 2e 0a 0a 20 20 41 6c 6c 20   values...  All 
1b40: 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69  versions of SQLi
1b50: 74 65 20 73 69 6e 63 65 20 33 2e 33 2e 30 20 28  te since 3.3.0 (
1b60: 32 30 30 36 2d 30 31 2d 31 30 29 0a 20 20 63 61  2006-01-10).  ca
1b70: 6e 20 72 65 61 64 20 61 6e 64 20 77 72 69 74 65  n read and write
1b80: 20 61 6e 79 20 73 63 68 65 6d 61 20 66 6f 72 6d   any schema form
1b90: 61 74 0a 20 20 62 65 74 77 65 65 6e 20 31 20 61  at.  between 1 a
1ba0: 6e 64 20 34 2e 20 20 42 75 74 20 6f 6c 64 65 72  nd 4.  But older
1bb0: 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c   versions of SQL
1bc0: 69 74 65 20 6d 69 67 68 74 20 6e 6f 74 20 62 65  ite might not be
1bd0: 20 61 62 6c 65 20 74 6f 0a 20 20 72 65 61 64 20   able to.  read 
1be0: 66 6f 72 6d 61 74 73 20 67 72 65 61 74 65 72 20  formats greater 
1bf0: 74 68 61 6e 20 31 2e 20 20 53 6f 20 74 68 61 74  than 1.  So that
1c00: 20 6f 6c 64 65 72 20 76 65 72 73 69 6f 6e 73 20   older versions 
1c10: 6f 66 20 53 51 4c 69 74 65 20 77 69 6c 6c 0a 20  of SQLite will. 
1c20: 20 62 65 20 61 62 6c 65 20 74 6f 20 72 65 61 64   be able to read
1c30: 20 61 6e 64 20 77 72 69 74 65 20 64 61 74 61 62   and write datab
1c40: 61 73 65 20 66 69 6c 65 73 20 63 72 65 61 74 65  ase files create
1c50: 64 20 62 79 20 6e 65 77 65 72 20 76 65 72 73 69  d by newer versi
1c60: 6f 6e 73 0a 20 20 6f 66 20 53 51 4c 69 74 65 2c  ons.  of SQLite,
1c70: 20 74 68 65 20 64 65 66 61 75 6c 74 20 73 63 68   the default sch
1c80: 65 6d 61 20 66 6f 72 6d 61 74 20 77 61 73 20 73  ema format was s
1c90: 65 74 20 74 6f 20 31 20 66 6f 72 20 53 51 4c 69  et to 1 for SQLi
1ca0: 74 65 20 76 65 72 73 69 6f 6e 73 0a 20 20 74 68  te versions.  th
1cb0: 72 6f 75 67 68 20 33 2e 37 2e 39 20 28 32 30 31  rough 3.7.9 (201
1cc0: 31 2d 31 31 2d 30 31 29 2e 20 20 42 65 67 69 6e  1-11-01).  Begin
1cd0: 6e 69 6e 67 20 77 69 74 68 20 76 65 72 73 69 6f  ning with versio
1ce0: 6e 20 33 2e 37 2e 31 30 2c 20 74 68 65 20 64 65  n 3.7.10, the de
1cf0: 66 61 75 6c 74 0a 20 20 73 63 68 65 6d 61 20 66  fault.  schema f
1d00: 6f 72 6d 61 74 20 69 73 20 34 2e 0a 0a 20 20 54  ormat is 4...  T
1d10: 68 65 20 73 63 68 65 6d 61 20 66 6f 72 6d 61 74  he schema format
1d20: 20 6e 75 6d 62 65 72 20 66 6f 72 20 61 20 6e 65   number for a ne
1d30: 77 20 64 61 74 61 62 61 73 65 20 63 61 6e 20 62  w database can b
1d40: 65 20 73 65 74 20 61 74 20 72 75 6e 74 69 6d 65  e set at runtime
1d50: 20 75 73 69 6e 67 0a 20 20 74 68 65 20 5b 50 52   using.  the [PR
1d60: 41 47 4d 41 20 6c 65 67 61 63 79 5f 66 69 6c 65  AGMA legacy_file
1d70: 5f 66 6f 72 6d 61 74 5d 20 63 6f 6d 6d 61 6e 64  _format] command
1d80: 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54  ..}..COMPILE_OPT
1d90: 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 44 45 46 41  ION {SQLITE_DEFA
1da0: 55 4c 54 5f 46 49 4c 45 5f 50 45 52 4d 49 53 53  ULT_FILE_PERMISS
1db0: 49 4f 4e 53 3d 3c 69 3e 4e 3c 2f 69 3e 7d 20 7b  IONS=<i>N</i>} {
1dc0: 0a 20 20 54 68 65 20 64 65 66 61 75 6c 74 20 6e  .  The default n
1dd0: 75 6d 65 72 69 63 20 66 69 6c 65 20 70 65 72 6d  umeric file perm
1de0: 69 73 73 69 6f 6e 73 20 66 6f 72 20 6e 65 77 6c  issions for newl
1df0: 79 20 63 72 65 61 74 65 64 20 64 61 74 61 62 61  y created databa
1e00: 73 65 20 66 69 6c 65 73 0a 20 20 75 6e 64 65 72  se files.  under
1e10: 20 75 6e 69 78 2e 20 20 49 66 20 6e 6f 74 20 73   unix.  If not s
1e20: 70 65 63 69 66 69 65 64 2c 20 74 68 65 20 64 65  pecified, the de
1e30: 66 61 75 6c 74 20 69 73 20 30 36 34 34 20 77 68  fault is 0644 wh
1e40: 69 63 68 20 6d 65 61 6e 73 20 74 68 61 74 0a 20  ich means that. 
1e50: 20 74 68 65 20 66 69 6c 65 73 20 69 73 20 67 6c   the files is gl
1e60: 6f 62 61 6c 6c 79 20 72 65 61 64 61 62 6c 65 20  obally readable 
1e70: 62 75 74 20 6f 6e 6c 79 20 77 72 69 74 61 62 6c  but only writabl
1e80: 65 20 62 79 20 74 68 65 20 63 72 65 61 74 6f 72  e by the creator
1e90: 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54  ..}..COMPILE_OPT
1ea0: 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 44 45 46 41  ION {SQLITE_DEFA
1eb0: 55 4c 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 53  ULT_FOREIGN_KEYS
1ec0: 3d 3c 69 3e 26 6c 74 3b 30 20 6f 72 20 31 26 67  =<i>&lt;0 or 1&g
1ed0: 74 3b 3c 2f 69 3e 7d 20 7b 0a 20 20 54 68 69 73  t;</i>} {.  This
1ee0: 20 6d 61 63 72 6f 20 64 65 74 65 72 6d 69 6e 65   macro determine
1ef0: 73 20 77 68 65 74 68 65 72 20 65 6e 66 6f 72 63  s whether enforc
1f00: 65 6d 65 6e 74 20 6f 66 20 0a 20 20 5b 66 6f 72  ement of .  [for
1f10: 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61  eign key constra
1f20: 69 6e 74 73 5d 20 69 73 20 65 6e 61 62 6c 65 64  ints] is enabled
1f30: 20 6f 72 20 64 69 73 61 62 6c 65 64 20 62 79 20   or disabled by 
1f40: 64 65 66 61 75 6c 74 20 66 6f 72 0a 20 20 6e 65  default for.  ne
1f50: 77 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  w database conne
1f60: 63 74 69 6f 6e 73 2e 20 20 45 61 63 68 20 64 61  ctions.  Each da
1f70: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
1f80: 6e 20 63 61 6e 20 61 6c 77 61 79 73 20 74 75 72  n can always tur
1f90: 6e 0a 20 20 65 6e 66 6f 72 63 65 6d 65 6e 74 20  n.  enforcement 
1fa0: 6f 66 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  of foreign key c
1fb0: 6f 6e 73 74 72 61 69 6e 74 73 20 6f 6e 20 61 6e  onstraints on an
1fc0: 64 20 6f 66 66 20 61 6e 64 20 72 75 6e 2d 74 69  d off and run-ti
1fd0: 6d 65 20 75 73 69 6e 67 0a 20 20 74 68 65 20 5b  me using.  the [
1fe0: 66 6f 72 65 69 67 6e 5f 6b 65 79 73 20 70 72 61  foreign_keys pra
1ff0: 67 6d 61 5d 2e 20 20 45 6e 66 6f 72 63 65 6d 65  gma].  Enforceme
2000: 6e 74 20 6f 66 20 66 6f 72 65 69 67 6e 20 6b 65  nt of foreign ke
2010: 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 0a 20 20  y constraints.  
2020: 69 73 20 6e 6f 72 6d 61 6c 6c 79 20 6f 66 66 20  is normally off 
2030: 62 79 20 64 65 66 61 75 6c 74 2c 20 62 75 74 20  by default, but 
2040: 69 66 20 74 68 69 73 20 63 6f 6d 70 69 6c 65 2d  if this compile-
2050: 74 69 6d 65 20 70 61 72 61 6d 65 74 65 72 20 69  time parameter i
2060: 73 0a 20 20 73 65 74 20 74 6f 20 31 2c 20 65 6e  s.  set to 1, en
2070: 66 6f 72 63 65 6d 65 6e 74 20 6f 66 20 66 6f 72  forcement of for
2080: 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61  eign key constra
2090: 69 6e 74 73 20 77 69 6c 6c 20 62 65 20 6f 6e 20  ints will be on 
20a0: 62 79 20 64 65 66 61 75 6c 74 2e 0a 7d 0a 0a 43  by default..}..C
20b0: 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53  OMPILE_OPTION {S
20c0: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d  QLITE_DEFAULT_MM
20d0: 41 50 5f 53 49 5a 45 3d 3c 69 3e 4e 3c 2f 69 3e  AP_SIZE=<i>N</i>
20e0: 7d 20 7b 0a 20 20 54 68 69 73 20 6d 61 63 72 6f  } {.  This macro
20f0: 20 73 65 74 73 20 74 68 65 20 64 65 66 61 75 6c   sets the defaul
2100: 74 20 6c 69 6d 69 74 20 6f 6e 20 74 68 65 20 61  t limit on the a
2110: 6d 6f 75 6e 74 20 6f 66 20 6d 65 6d 6f 72 79 20  mount of memory 
2120: 74 68 61 74 0a 20 20 77 69 6c 6c 20 62 65 20 75  that.  will be u
2130: 73 65 64 20 66 6f 72 20 6d 65 6d 6f 72 79 2d 6d  sed for memory-m
2140: 61 70 70 65 64 20 49 2f 4f 0a 20 20 66 6f 72 20  apped I/O.  for 
2150: 65 61 63 68 20 6f 70 65 6e 20 64 61 74 61 62 61  each open databa
2160: 73 65 20 66 69 6c 65 2e 20 20 49 66 20 74 68 65  se file.  If the
2170: 20 3c 69 3e 4e 3c 2f 69 3e 0a 20 20 69 73 20 7a   <i>N</i>.  is z
2180: 65 72 6f 2c 20 74 68 65 6e 20 6d 65 6d 6f 72 79  ero, then memory
2190: 20 6d 61 70 70 65 64 20 49 2f 4f 20 69 73 20 64   mapped I/O is d
21a0: 69 73 61 62 6c 65 64 20 62 79 20 64 65 66 61 75  isabled by defau
21b0: 6c 74 2e 20 20 54 68 69 73 0a 20 20 63 6f 6d 70  lt.  This.  comp
21c0: 69 6c 65 2d 74 69 6d 65 20 6c 69 6d 69 74 20 61  ile-time limit a
21d0: 6e 64 20 74 68 65 20 5b 53 51 4c 49 54 45 5f 4d  nd the [SQLITE_M
21e0: 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 5d 20 63 61  AX_MMAP_SIZE] ca
21f0: 6e 20 62 65 20 6d 6f 64 69 66 69 65 64 20 0a 20  n be modified . 
2200: 20 61 74 20 73 74 61 72 74 2d 74 69 6d 65 20 75   at start-time u
2210: 73 69 6e 67 20 74 68 65 0a 20 20 5b 73 71 6c 69  sing the.  [sqli
2220: 74 65 33 5f 63 6f 6e 66 69 67 5d 28 5b 53 51 4c  te3_config]([SQL
2230: 49 54 45 5f 43 4f 4e 46 49 47 5f 4d 4d 41 50 5f  ITE_CONFIG_MMAP_
2240: 53 49 5a 45 5d 29 20 63 61 6c 6c 2c 20 6f 72 20  SIZE]) call, or 
2250: 61 74 20 72 75 6e 2d 74 69 6d 65 0a 20 20 75 73  at run-time.  us
2260: 69 6e 67 20 74 68 65 20 5b 6d 6d 61 70 5f 73 69  ing the [mmap_si
2270: 7a 65 20 70 72 61 67 6d 61 5d 2e 0a 7d 0a 0a 43  ze pragma]..}..C
2280: 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53  OMPILE_OPTION {S
2290: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4a 4f  QLITE_DEFAULT_JO
22a0: 55 52 4e 41 4c 5f 53 49 5a 45 5f 4c 49 4d 49 54  URNAL_SIZE_LIMIT
22b0: 3d 3c 69 3e 26 6c 74 3b 62 79 74 65 73 26 67 74  =<i>&lt;bytes&gt
22c0: 3b 3c 2f 69 3e 7d 20 7b 0a 20 20 54 68 69 73 20  ;</i>} {.  This 
22d0: 6f 70 74 69 6f 6e 20 73 65 74 73 20 74 68 65 20  option sets the 
22e0: 73 69 7a 65 20 6c 69 6d 69 74 20 6f 6e 20 5b 72  size limit on [r
22f0: 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 5d  ollback journal]
2300: 20 66 69 6c 65 73 20 69 6e 0a 20 20 5b 6a 6f 75   files in.  [jou
2310: 72 6e 61 6c 5f 6d 6f 64 65 20 70 72 61 67 6d 61  rnal_mode pragma
2320: 20 7c 20 70 65 72 73 69 73 74 65 6e 74 20 6a 6f   | persistent jo
2330: 75 72 6e 61 6c 20 6d 6f 64 65 5d 20 61 6e 64 0a  urnal mode] and.
2340: 20 20 5b 6c 6f 63 6b 69 6e 67 5f 6d 6f 64 65 20    [locking_mode 
2350: 7c 20 65 78 63 6c 75 73 69 76 65 20 6c 6f 63 6b  | exclusive lock
2360: 69 6e 67 20 6d 6f 64 65 5d 20 61 6e 64 20 6f 6e  ing mode] and on
2370: 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65   the size of the
2380: 0a 20 20 77 72 69 74 65 2d 61 68 65 61 64 20 6c  .  write-ahead l
2390: 6f 67 20 66 69 6c 65 20 69 6e 20 5b 57 41 4c 20  og file in [WAL 
23a0: 6d 6f 64 65 5d 2e 20 57 68 65 6e 20 74 68 69 73  mode]. When this
23b0: 20 0a 20 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65   .  compile-time
23c0: 20 6f 70 74 69 6f 6e 20 69 73 20 6f 6d 69 74 74   option is omitt
23d0: 65 64 20 74 68 65 72 65 20 69 73 20 6e 6f 20 75  ed there is no u
23e0: 70 70 65 72 20 62 6f 75 6e 64 20 6f 6e 20 74 68  pper bound on th
23f0: 65 0a 20 20 73 69 7a 65 20 6f 66 20 74 68 65 20  e.  size of the 
2400: 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c  rollback journal
2410: 73 20 6f 72 20 77 72 69 74 65 2d 61 68 65 61 64  s or write-ahead
2420: 20 6c 6f 67 73 2e 20 20 0a 20 20 54 68 65 20 6a   logs.  .  The j
2430: 6f 75 72 6e 61 6c 20 66 69 6c 65 20 73 69 7a 65  ournal file size
2440: 20 6c 69 6d 69 74 0a 20 20 63 61 6e 20 62 65 20   limit.  can be 
2450: 63 68 61 6e 67 65 64 20 61 74 20 72 75 6e 2d 74  changed at run-t
2460: 69 6d 65 20 75 73 69 6e 67 20 74 68 65 20 5b 6a  ime using the [j
2470: 6f 75 72 6e 61 6c 5f 73 69 7a 65 5f 6c 69 6d 69  ournal_size_limi
2480: 74 20 70 72 61 67 6d 61 5d 2e 0a 7d 0a 0a 43 4f  t pragma]..}..CO
2490: 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51  MPILE_OPTION {SQ
24a0: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4c 4f 43  LITE_DEFAULT_LOC
24b0: 4b 49 4e 47 5f 4d 4f 44 45 3d 3c 69 3e 26 6c 74  KING_MODE=<i>&lt
24c0: 3b 31 20 6f 72 20 30 26 67 74 3b 3c 2f 69 3e 7d  ;1 or 0&gt;</i>}
24d0: 20 7b 0a 20 20 49 66 20 73 65 74 20 74 6f 20 31   {.  If set to 1
24e0: 2c 20 74 68 65 6e 20 74 68 65 20 64 65 66 61 75  , then the defau
24f0: 6c 74 20 5b 6c 6f 63 6b 69 6e 67 5f 6d 6f 64 65  lt [locking_mode
2500: 5d 20 69 73 20 73 65 74 20 74 6f 20 45 58 43 4c  ] is set to EXCL
2510: 55 53 49 56 45 2e 0a 20 20 49 66 20 6f 6d 69 74  USIVE..  If omit
2520: 74 65 64 20 6f 72 20 73 65 74 20 74 6f 20 30 20  ted or set to 0 
2530: 74 68 65 6e 20 74 68 65 20 64 65 66 61 75 6c 74  then the default
2540: 20 5b 6c 6f 63 6b 69 6e 67 5f 6d 6f 64 65 5d 20   [locking_mode] 
2550: 69 73 20 4e 4f 52 4d 41 4c 2e 0a 7d 0a 0a 43 4f  is NORMAL..}..CO
2560: 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51  MPILE_OPTION {SQ
2570: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d  LITE_DEFAULT_MEM
2580: 53 54 41 54 55 53 3d 3c 69 3e 26 6c 74 3b 31 20  STATUS=<i>&lt;1 
2590: 6f 72 20 30 26 67 74 3b 3c 2f 69 3e 7d 20 7b 0a  or 0&gt;</i>} {.
25a0: 20 20 54 68 69 73 20 6d 61 63 72 6f 20 69 73 20    This macro is 
25b0: 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e  used to determin
25c0: 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  e whether or not
25d0: 20 74 68 65 20 66 65 61 74 75 72 65 73 20 65 6e   the features en
25e0: 61 62 6c 65 64 20 61 6e 64 0a 20 20 64 69 73 61  abled and.  disa
25f0: 62 6c 65 64 20 75 73 69 6e 67 20 74 68 65 20 53  bled using the S
2600: 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4d 45 4d  QLITE_CONFIG_MEM
2610: 53 54 41 54 55 53 20 61 72 67 75 6d 65 6e 74 20  STATUS argument 
2620: 74 6f 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6e 66  to [sqlite3_conf
2630: 69 67 28 29 5d 0a 20 20 61 72 65 20 61 76 61 69  ig()].  are avai
2640: 6c 61 62 6c 65 20 62 79 20 64 65 66 61 75 6c 74  lable by default
2650: 2e 20 54 68 65 20 64 65 66 61 75 6c 74 20 76 61  . The default va
2660: 6c 75 65 20 69 73 20 31 20 28 5b 53 51 4c 49 54  lue is 1 ([SQLIT
2670: 45 5f 43 4f 4e 46 49 47 5f 4d 45 4d 53 54 41 54  E_CONFIG_MEMSTAT
2680: 55 53 5d 0a 20 20 72 65 6c 61 74 65 64 20 66 65  US].  related fe
2690: 61 74 75 72 65 73 20 65 6e 61 62 6c 65 64 29 2e  atures enabled).
26a0: 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49  .}..COMPILE_OPTI
26b0: 4f 4e 20 7b 53 51 4c 49 54 45 5f 44 45 46 41 55  ON {SQLITE_DEFAU
26c0: 4c 54 5f 50 41 47 45 5f 53 49 5a 45 3d 3c 69 3e  LT_PAGE_SIZE=<i>
26d0: 26 6c 74 3b 62 79 74 65 73 26 67 74 3b 3c 2f 69  &lt;bytes&gt;</i
26e0: 3e 7d 20 7b 0a 20 20 54 68 69 73 20 6d 61 63 72  >} {.  This macr
26f0: 6f 20 69 73 20 75 73 65 64 20 74 6f 20 73 65 74  o is used to set
2700: 20 74 68 65 20 64 65 66 61 75 6c 74 20 70 61 67   the default pag
2710: 65 2d 73 69 7a 65 20 75 73 65 64 20 77 68 65 6e  e-size used when
2720: 20 61 0a 20 20 64 61 74 61 62 61 73 65 20 69 73   a.  database is
2730: 20 63 72 65 61 74 65 64 2e 20 54 68 65 20 76 61   created. The va
2740: 6c 75 65 20 61 73 73 69 67 6e 65 64 20 6d 75 73  lue assigned mus
2750: 74 20 62 65 20 61 20 70 6f 77 65 72 20 6f 66 20  t be a power of 
2760: 32 2e 20 54 68 65 0a 20 20 64 65 66 61 75 6c 74  2. The.  default
2770: 20 76 61 6c 75 65 20 69 73 20 34 30 39 36 2e 20   value is 4096. 
2780: 54 68 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  The compile-time
2790: 20 64 65 66 61 75 6c 74 20 6d 61 79 20 62 65 20   default may be 
27a0: 6f 76 65 72 72 69 64 64 65 6e 20 61 74 20 0a 20  overridden at . 
27b0: 20 72 75 6e 74 69 6d 65 20 62 79 20 74 68 65 20   runtime by the 
27c0: 5b 50 52 41 47 4d 41 20 70 61 67 65 5f 73 69 7a  [PRAGMA page_siz
27d0: 65 5d 20 63 6f 6d 6d 61 6e 64 2e 0a 7d 0a 0a 43  e] command..}..C
27e0: 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53  OMPILE_OPTION {S
27f0: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53 59  QLITE_DEFAULT_SY
2800: 4e 43 48 52 4f 4e 4f 55 53 3d 3c 69 3e 26 6c 74  NCHRONOUS=<i>&lt
2810: 3b 30 2d 33 26 67 74 3b 3c 2f 69 3e 7d 20 7b 0a  ;0-3&gt;</i>} {.
2820: 20 20 54 68 69 73 20 6d 61 63 72 6f 20 64 65 74    This macro det
2830: 65 72 6d 69 6e 65 73 20 74 68 65 20 64 65 66 61  ermines the defa
2840: 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 74 68 65  ult value of the
2850: 0a 20 20 5b 50 52 41 47 4d 41 20 73 79 6e 63 68  .  [PRAGMA synch
2860: 72 6f 6e 6f 75 73 5d 20 73 65 74 74 69 6e 67 2e  ronous] setting.
2870: 20 20 49 66 20 6e 6f 74 20 6f 76 65 72 72 69 64    If not overrid
2880: 64 65 6e 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74  den at compile-t
2890: 69 6d 65 2c 0a 20 20 74 68 65 20 64 65 66 61 75  ime,.  the defau
28a0: 6c 74 20 73 65 74 74 69 6e 67 20 69 73 20 32 20  lt setting is 2 
28b0: 28 46 55 4c 4c 29 2e 0a 7d 0a 0a 43 4f 4d 50 49  (FULL)..}..COMPI
28c0: 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54  LE_OPTION {SQLIT
28d0: 45 5f 44 45 46 41 55 4c 54 5f 57 41 4c 5f 53 59  E_DEFAULT_WAL_SY
28e0: 4e 43 48 52 4f 4e 4f 55 53 3d 3c 69 3e 26 6c 74  NCHRONOUS=<i>&lt
28f0: 3b 30 2d 33 26 67 74 3b 3c 2f 69 3e 7d 20 7b 0a  ;0-3&gt;</i>} {.
2900: 20 20 54 68 69 73 20 6d 61 63 72 6f 20 64 65 74    This macro det
2910: 65 72 6d 69 6e 65 73 20 74 68 65 20 64 65 66 61  ermines the defa
2920: 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 74 68 65  ult value of the
2930: 0a 20 20 5b 50 52 41 47 4d 41 20 73 79 6e 63 68  .  [PRAGMA synch
2940: 72 6f 6e 6f 75 73 5d 20 73 65 74 74 69 6e 67 20  ronous] setting 
2950: 66 6f 72 20 64 61 74 61 62 61 73 65 20 66 69 6c  for database fil
2960: 65 73 20 74 68 61 74 20 6f 70 65 6e 20 69 6e 0a  es that open in.
2970: 20 20 5b 57 41 4c 20 6d 6f 64 65 5d 2e 20 20 49    [WAL mode].  I
2980: 66 20 6e 6f 74 20 6f 76 65 72 72 69 64 64 65 6e  f not overridden
2990: 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65   at compile-time
29a0: 2c 20 74 68 69 73 20 76 61 6c 75 65 20 69 73 20  , this value is 
29b0: 74 68 65 0a 20 20 73 61 6d 65 20 61 73 20 5b 53  the.  same as [S
29c0: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53 59  QLITE_DEFAULT_SY
29d0: 4e 43 48 52 4f 4e 4f 55 53 5d 2e 0a 20 20 3c 70  NCHRONOUS]..  <p
29e0: 3e 0a 20 20 49 66 20 53 51 4c 49 54 45 5f 44 45  >.  If SQLITE_DE
29f0: 46 41 55 4c 54 5f 57 41 4c 5f 53 59 4e 43 48 52  FAULT_WAL_SYNCHR
2a00: 4f 4e 4f 55 53 20 64 69 66 66 65 72 73 20 66 72  ONOUS differs fr
2a10: 6f 6d 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  om SQLITE_DEFAUL
2a20: 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 2c 0a 20  T_SYNCHRONOUS,. 
2a30: 20 61 6e 64 20 69 66 20 74 68 65 20 61 70 70 6c   and if the appl
2a40: 69 63 61 74 69 6f 6e 20 68 61 73 20 6e 6f 74 20  ication has not 
2a50: 6d 6f 64 69 66 69 65 64 20 74 68 65 20 73 79 6e  modified the syn
2a60: 63 68 72 6f 6e 6f 75 73 20 73 65 74 74 69 6e 67  chronous setting
2a70: 20 66 6f 72 0a 20 20 74 68 65 20 64 61 74 61 62   for.  the datab
2a80: 61 73 65 20 66 69 6c 65 20 75 73 69 6e 67 20 74  ase file using t
2a90: 68 65 20 5b 50 52 41 47 4d 41 20 73 79 6e 63 68  he [PRAGMA synch
2aa0: 72 6f 6e 6f 75 73 5d 20 73 74 61 74 65 6d 65 6e  ronous] statemen
2ab0: 74 2c 20 74 68 65 6e 0a 20 20 74 68 65 20 73 79  t, then.  the sy
2ac0: 6e 63 68 72 6f 6e 6f 75 73 20 73 65 74 74 69 6e  nchronous settin
2ad0: 67 20 69 73 20 63 68 61 6e 67 65 64 20 74 6f 20  g is changed to 
2ae0: 76 61 6c 75 65 20 64 65 66 69 6e 65 64 20 62 79  value defined by
2af0: 0a 20 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  .  SQLITE_DEFAUL
2b00: 54 5f 57 41 4c 5f 53 59 4e 43 48 52 4f 4e 4f 55  T_WAL_SYNCHRONOU
2b10: 53 20 77 68 65 6e 20 74 68 65 20 64 61 74 61 62  S when the datab
2b20: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73  ase connection s
2b30: 77 69 74 63 68 65 73 0a 20 20 69 6e 74 6f 20 57  witches.  into W
2b40: 41 4c 20 6d 6f 64 65 20 66 6f 72 20 74 68 65 20  AL mode for the 
2b50: 66 69 72 73 74 20 74 69 6d 65 2e 0a 20 20 49 66  first time..  If
2b60: 20 74 68 65 20 53 51 4c 49 54 45 5f 44 45 46 41   the SQLITE_DEFA
2b70: 55 4c 54 5f 57 41 4c 5f 53 59 4e 43 48 52 4f 4e  ULT_WAL_SYNCHRON
2b80: 4f 55 53 20 76 61 6c 75 65 20 69 73 20 6e 6f 74  OUS value is not
2b90: 20 6f 76 65 72 72 69 64 64 65 6e 20 61 74 0a 20   overridden at. 
2ba0: 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 2c 20 74   compile-time, t
2bb0: 68 65 6e 20 69 74 20 77 69 6c 6c 20 61 6c 77 61  hen it will alwa
2bc0: 79 73 20 62 65 20 74 68 65 20 73 61 6d 65 20 61  ys be the same a
2bd0: 73 0a 20 20 5b 53 51 4c 49 54 45 5f 44 45 46 41  s.  [SQLITE_DEFA
2be0: 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 5d  ULT_SYNCHRONOUS]
2bf0: 20 61 6e 64 20 73 6f 20 6e 6f 20 61 75 74 6f 6d   and so no autom
2c00: 61 74 69 63 20 73 79 6e 63 68 72 6f 6e 6f 75 73  atic synchronous
2c10: 20 73 65 74 74 69 6e 67 0a 20 20 63 68 61 6e 67   setting.  chang
2c20: 65 73 20 77 69 6c 6c 20 65 76 65 72 20 6f 63 63  es will ever occ
2c30: 75 72 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f  ur..}..COMPILE_O
2c40: 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 44 45  PTION {SQLITE_DE
2c50: 46 41 55 4c 54 5f 57 41 4c 5f 41 55 54 4f 43 48  FAULT_WAL_AUTOCH
2c60: 45 43 4b 50 4f 49 4e 54 3d 3c 69 3e 26 6c 74 3b  ECKPOINT=<i>&lt;
2c70: 70 61 67 65 73 26 67 74 3b 3c 2f 69 3e 7d 20 7b  pages&gt;</i>} {
2c80: 0a 20 20 54 68 69 73 20 6d 61 63 72 6f 20 73 65  .  This macro se
2c90: 74 73 20 74 68 65 20 64 65 66 61 75 6c 74 20 70  ts the default p
2ca0: 61 67 65 20 63 6f 75 6e 74 20 66 6f 72 20 74 68  age count for th
2cb0: 65 20 5b 57 41 4c 5d 0a 20 20 5b 63 68 65 63 6b  e [WAL].  [check
2cc0: 70 6f 69 6e 74 69 6e 67 20 7c 20 61 75 74 6f 6d  pointing | autom
2cd0: 61 74 69 63 20 63 68 65 63 6b 70 6f 69 6e 74 69  atic checkpointi
2ce0: 6e 67 5d 20 66 65 61 74 75 72 65 2e 20 20 49 66  ng] feature.  If
2cf0: 20 75 6e 73 70 65 63 69 66 69 65 64 2c 0a 20 20   unspecified,.  
2d00: 74 68 65 20 64 65 66 61 75 6c 74 20 70 61 67 65  the default page
2d10: 20 63 6f 75 6e 74 20 69 73 20 31 30 30 30 2e 0a   count is 1000..
2d20: 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f  }..COMPILE_OPTIO
2d30: 4e 20 7b 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  N {SQLITE_DEFAUL
2d40: 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53  T_WORKER_THREADS
2d50: 3d 3c 69 3e 4e 3c 2f 69 3e 7d 20 7b 0a 20 20 54  =<i>N</i>} {.  T
2d60: 68 69 73 20 6d 61 63 72 6f 20 73 65 74 73 20 74  his macro sets t
2d70: 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65  he default value
2d80: 20 66 6f 72 0a 20 20 74 68 65 20 5b 53 51 4c 49   for.  the [SQLI
2d90: 54 45 5f 4c 49 4d 49 54 5f 57 4f 52 4b 45 52 5f  TE_LIMIT_WORKER_
2da0: 54 48 52 45 41 44 53 5d 20 70 61 72 61 6d 65 74  THREADS] paramet
2db0: 65 72 2e 20 20 54 68 65 20 5b 53 51 4c 49 54 45  er.  The [SQLITE
2dc0: 5f 4c 49 4d 49 54 5f 57 4f 52 4b 45 52 5f 54 48  _LIMIT_WORKER_TH
2dd0: 52 45 41 44 53 5d 0a 20 20 70 61 72 61 6d 65 74  READS].  paramet
2de0: 65 72 20 73 65 74 73 20 74 68 65 20 6d 61 78 69  er sets the maxi
2df0: 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20 61 75  mum number of au
2e00: 78 69 6c 69 61 72 79 20 74 68 72 65 61 64 73 20  xiliary threads 
2e10: 74 68 61 74 20 61 20 73 69 6e 67 6c 65 0a 20 20  that a single.  
2e20: 5b 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d  [prepared statem
2e30: 65 6e 74 5d 20 77 69 6c 6c 20 6c 61 75 6e 63 68  ent] will launch
2e40: 20 74 6f 20 61 73 73 69 73 74 20 69 74 20 77 69   to assist it wi
2e50: 74 68 20 61 20 71 75 65 72 79 2e 20 20 49 66 20  th a query.  If 
2e60: 6e 6f 74 20 73 70 65 63 69 66 69 65 64 2c 0a 20  not specified,. 
2e70: 20 74 68 65 20 64 65 66 61 75 6c 74 20 6d 61 78   the default max
2e80: 69 6d 75 6d 20 69 73 20 30 2e 0a 20 20 54 68 65  imum is 0..  The
2e90: 20 76 61 6c 75 65 20 73 65 74 20 68 65 72 65 20   value set here 
2ea0: 63 61 6e 6e 6f 74 20 62 65 20 6d 6f 72 65 20 74  cannot be more t
2eb0: 68 61 6e 20 5b 53 51 4c 49 54 45 5f 4d 41 58 5f  han [SQLITE_MAX_
2ec0: 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 5d 2e  WORKER_THREADS].
2ed0: 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49  .}..COMPILE_OPTI
2ee0: 4f 4e 20 7b 53 51 4c 49 54 45 5f 45 58 54 52 41  ON {SQLITE_EXTRA
2ef0: 5f 44 55 52 41 42 4c 45 7d 20 7b 0a 20 20 54 68  _DURABLE} {.  Th
2f00: 65 20 53 51 4c 49 54 45 5f 45 58 54 52 41 5f 44  e SQLITE_EXTRA_D
2f10: 55 52 41 42 4c 45 20 63 6f 6d 70 69 6c 65 2d 74  URABLE compile-t
2f20: 69 6d 65 20 6f 70 74 69 6f 6e 20 74 68 61 74 20  ime option that 
2f30: 75 73 65 64 20 74 6f 20 63 61 75 73 65 20 74 68  used to cause th
2f40: 65 20 64 65 66 61 75 6c 74 0a 20 20 5b 50 52 41  e default.  [PRA
2f50: 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 5d  GMA synchronous]
2f60: 20 73 65 74 74 69 6e 67 20 74 6f 20 62 65 20 45   setting to be E
2f70: 58 54 52 41 2c 20 72 61 74 68 65 72 20 74 68 61  XTRA, rather tha
2f80: 6e 20 46 55 4c 4c 2e 20 20 54 68 69 73 20 6f 70  n FULL.  This op
2f90: 74 69 6f 6e 0a 20 20 69 73 20 6e 6f 20 6c 6f 6e  tion.  is no lon
2fa0: 67 65 72 20 73 75 70 70 6f 72 74 65 64 2e 20 20  ger supported.  
2fb0: 55 73 65 0a 20 20 5b 53 51 4c 49 54 45 5f 44 45  Use.  [SQLITE_DE
2fc0: 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55  FAULT_SYNCHRONOU
2fd0: 53 7c 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  S|SQLITE_DEFAULT
2fe0: 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 3d 33 5d 20  _SYNCHRONOUS=3] 
2ff0: 69 6e 73 74 65 61 64 2e 0a 7d 0a 0a 43 4f 4d 50  instead..}..COMP
3000: 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49  ILE_OPTION {SQLI
3010: 54 45 5f 46 54 53 33 5f 4d 41 58 5f 45 58 50 52  TE_FTS3_MAX_EXPR
3020: 5f 44 45 50 54 48 3d 3c 69 3e 4e 3c 2f 69 3e 7d  _DEPTH=<i>N</i>}
3030: 20 7b 0a 20 20 54 68 69 73 20 6d 61 63 72 6f 20   {.  This macro 
3040: 73 65 74 73 20 74 68 65 20 6d 61 78 69 6d 75 6d  sets the maximum
3050: 20 64 65 70 74 68 20 6f 66 20 74 68 65 20 73 65   depth of the se
3060: 61 72 63 68 20 74 72 65 65 20 74 68 61 74 20 63  arch tree that c
3070: 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 0a 20 20  orresponds to.  
3080: 74 68 65 20 72 69 67 68 74 2d 68 61 6e 64 20 73  the right-hand s
3090: 69 64 65 20 6f 66 20 74 68 65 20 4d 41 54 43 48  ide of the MATCH
30a0: 20 6f 70 65 72 61 74 6f 72 20 69 6e 20 61 6e 20   operator in an 
30b0: 5b 46 54 53 33 5d 20 6f 72 20 5b 46 54 53 34 5d  [FTS3] or [FTS4]
30c0: 20 66 75 6c 6c 2d 74 65 78 74 0a 20 20 69 6e 64   full-text.  ind
30d0: 65 78 2e 20 20 54 68 65 20 66 75 6c 6c 2d 74 65  ex.  The full-te
30e0: 78 74 20 73 65 61 72 63 68 20 75 73 65 73 20 61  xt search uses a
30f0: 20 72 65 63 75 72 73 69 76 65 20 61 6c 67 6f 72   recursive algor
3100: 69 74 68 6d 2c 20 73 6f 20 74 68 65 20 64 65 70  ithm, so the dep
3110: 74 68 20 6f 66 0a 20 20 74 68 65 20 74 72 65 65  th of.  the tree
3120: 20 69 73 20 6c 69 6d 69 74 65 64 20 74 6f 20 70   is limited to p
3130: 72 65 76 65 6e 74 20 75 73 69 6e 67 20 74 6f 6f  revent using too
3140: 20 6d 75 63 68 20 73 74 61 63 6b 20 73 70 61 63   much stack spac
3150: 65 2e 20 20 54 68 65 20 64 65 66 61 75 6c 74 0a  e.  The default.
3160: 20 20 6c 69 6d 69 74 20 69 73 20 31 32 2e 20 20    limit is 12.  
3170: 54 68 69 73 20 6c 69 6d 69 74 20 69 73 20 73 75  This limit is su
3180: 66 66 69 63 69 65 6e 74 20 66 6f 72 20 75 70 20  fficient for up 
3190: 74 6f 20 34 30 39 35 20 73 65 61 72 63 68 20 74  to 4095 search t
31a0: 65 72 6d 73 20 6f 6e 20 74 68 65 0a 20 20 72 69  erms on the.  ri
31b0: 67 68 74 2d 68 61 6e 64 20 73 69 64 65 20 6f 66  ght-hand side of
31c0: 20 74 68 65 20 4d 41 54 43 48 20 6f 70 65 72 61   the MATCH opera
31d0: 74 6f 72 20 61 6e 64 20 69 74 20 68 6f 6c 64 73  tor and it holds
31e0: 20 73 74 61 63 6b 20 73 70 61 63 65 20 75 73 61   stack space usa
31f0: 67 65 20 74 6f 20 0a 20 20 6c 65 73 73 20 74 68  ge to .  less th
3200: 61 6e 20 32 30 30 30 20 62 79 74 65 73 2e 0a 20  an 2000 bytes.. 
3210: 20 3c 70 3e 0a 20 20 46 6f 72 20 6f 72 64 69 6e   <p>.  For ordin
3220: 61 72 79 20 46 54 53 33 2f 46 54 53 34 20 71 75  ary FTS3/FTS4 qu
3230: 65 72 69 65 73 2c 20 74 68 65 20 73 65 61 72 63  eries, the searc
3240: 68 20 74 72 65 65 20 64 65 70 74 68 20 69 73 20  h tree depth is 
3250: 61 70 70 72 6f 78 69 6d 61 74 65 6c 79 0a 20 20  approximately.  
3260: 74 68 65 20 62 61 73 65 2d 32 20 6c 6f 67 61 72  the base-2 logar
3270: 69 74 68 6d 20 6f 66 20 74 68 65 20 6e 75 6d 62  ithm of the numb
3280: 65 72 20 6f 66 20 74 65 72 6d 73 20 69 6e 20 74  er of terms in t
3290: 68 65 20 72 69 67 68 74 2d 68 61 6e 64 20 73 69  he right-hand si
32a0: 64 65 20 6f 66 20 74 68 65 0a 20 20 4d 41 54 43  de of the.  MATC
32b0: 48 20 6f 70 65 72 61 74 6f 72 2e 20 20 48 6f 77  H operator.  How
32c0: 65 76 65 72 2c 20 66 6f 72 20 5b 70 68 72 61 73  ever, for [phras
32d0: 65 20 71 75 65 72 69 65 73 5d 20 61 6e 64 20 5b  e queries] and [
32e0: 4e 45 41 52 20 71 75 65 72 69 65 73 5d 20 74 68  NEAR queries] th
32f0: 65 0a 20 20 73 65 61 72 63 68 20 74 72 65 65 20  e.  search tree 
3300: 64 65 70 74 68 20 69 73 20 6c 69 6e 65 61 72 20  depth is linear 
3310: 69 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  in the number of
3320: 20 72 69 67 68 74 2d 68 61 6e 64 20 73 69 64 65   right-hand side
3330: 20 74 65 72 6d 73 2e 0a 20 20 53 6f 20 74 68 65   terms..  So the
3340: 20 64 65 66 61 75 6c 74 20 64 65 70 74 68 20 6c   default depth l
3350: 69 6d 69 74 20 6f 66 20 31 32 20 69 73 20 73 75  imit of 12 is su
3360: 66 66 69 63 69 65 6e 74 20 66 6f 72 20 75 70 20  fficient for up 
3370: 74 6f 20 34 30 39 35 20 6f 72 64 69 6e 61 72 79  to 4095 ordinary
3380: 0a 20 20 74 65 72 6d 73 20 6f 6e 20 61 20 4d 41  .  terms on a MA
3390: 54 43 48 2c 20 69 74 20 69 73 20 6f 6e 6c 79 20  TCH, it is only 
33a0: 73 75 66 66 69 63 69 65 6e 74 20 66 6f 72 20 31  sufficient for 1
33b0: 31 20 6f 72 20 31 32 20 70 68 72 61 73 65 20 6f  1 or 12 phrase o
33c0: 72 20 4e 45 41 52 0a 20 20 74 65 72 6d 73 2e 20  r NEAR.  terms. 
33d0: 20 45 76 65 6e 20 73 6f 2c 20 74 68 65 20 64 65   Even so, the de
33e0: 66 61 75 6c 74 20 69 73 20 6d 6f 72 65 20 74 68  fault is more th
33f0: 61 6e 20 65 6e 6f 75 67 68 20 66 6f 72 20 6d 6f  an enough for mo
3400: 73 74 20 61 70 70 6c 69 63 61 74 69 6f 6e 2e 0a  st application..
3410: 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f  }..COMPILE_OPTIO
3420: 4e 20 7b 53 51 4c 49 54 45 5f 4c 49 4b 45 5f 44  N {SQLITE_LIKE_D
3430: 4f 45 53 4e 54 5f 4d 41 54 43 48 5f 42 4c 4f 42  OESNT_MATCH_BLOB
3440: 53 7d 20 7b 0a 20 20 54 68 69 73 20 63 6f 6d 70  S} {.  This comp
3450: 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20  ile-time option 
3460: 63 61 75 73 65 73 20 74 68 65 20 5b 4c 49 4b 45  causes the [LIKE
3470: 5d 20 6f 70 65 72 61 74 6f 72 20 74 6f 20 61 6c  ] operator to al
3480: 77 61 79 73 20 72 65 74 75 72 6e 20 0a 20 20 46  ways return .  F
3490: 61 6c 73 65 20 69 66 20 65 69 74 68 65 72 20 6f  alse if either o
34a0: 70 65 72 61 6e 64 20 69 73 20 61 20 42 4c 4f 42  perand is a BLOB
34b0: 2e 20 20 54 68 65 20 64 65 66 61 75 6c 74 20 62  .  The default b
34c0: 65 68 61 76 69 6f 72 20 6f 66 20 5b 4c 49 4b 45  ehavior of [LIKE
34d0: 5d 20 0a 20 20 69 73 20 74 68 61 74 20 42 4c 4f  ] .  is that BLO
34e0: 42 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 63  B operands are c
34f0: 61 73 74 20 74 6f 20 54 45 58 54 20 62 65 66 6f  ast to TEXT befo
3500: 72 65 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f  re the compariso
3510: 6e 20 69 73 20 64 6f 6e 65 2e 0a 20 20 3c 70 3e  n is done..  <p>
3520: 0a 20 20 54 68 69 73 20 63 6f 6d 70 69 6c 65 2d  .  This compile-
3530: 74 69 6d 65 20 6f 70 74 69 6f 6e 20 6d 61 6b 65  time option make
3540: 73 20 53 51 4c 69 74 65 20 72 75 6e 20 6d 6f 72  s SQLite run mor
3550: 65 20 65 66 66 69 63 69 65 6e 74 6c 79 20 77 68  e efficiently wh
3560: 65 6e 20 70 72 6f 63 65 73 73 69 6e 67 0a 20 20  en processing.  
3570: 71 75 65 72 69 65 73 20 74 68 61 74 20 75 73 65  queries that use
3580: 20 74 68 65 20 5b 4c 49 4b 45 5d 20 6f 70 65 72   the [LIKE] oper
3590: 61 74 6f 72 2c 20 61 74 20 74 68 65 20 65 78 70  ator, at the exp
35a0: 65 6e 73 65 20 6f 66 20 62 72 65 61 6b 69 6e 67  ense of breaking
35b0: 20 62 61 63 6b 77 61 72 64 73 0a 20 20 63 6f 6d   backwards.  com
35c0: 70 61 74 69 62 69 6c 69 74 79 2e 20 20 48 6f 77  patibility.  How
35d0: 65 76 65 72 2c 20 74 68 65 20 62 61 63 6b 77 61  ever, the backwa
35e0: 72 64 73 20 63 6f 6d 70 61 74 69 62 69 6c 69 74  rds compatibilit
35f0: 79 20 62 72 65 61 6b 20 6d 61 79 20 62 65 20 6f  y break may be o
3600: 6e 6c 79 0a 20 20 61 20 74 65 63 68 6e 69 63 61  nly.  a technica
3610: 6c 69 74 79 2e 20 20 54 68 65 72 65 20 77 61 73  lity.  There was
3620: 20 61 20 6c 6f 6e 67 2d 73 74 61 6e 64 69 6e 67   a long-standing
3630: 20 62 75 67 20 69 6e 20 74 68 65 20 5b 4c 49 4b   bug in the [LIK
3640: 45 5d 20 70 72 6f 63 65 73 73 69 6e 67 20 6c 6f  E] processing lo
3650: 67 69 63 0a 20 20 28 73 65 65 20 5b 68 74 74 70  gic.  (see [http
3660: 73 3a 2f 2f 77 77 77 2e 73 71 6c 69 74 65 2e 6f  s://www.sqlite.o
3670: 72 67 2f 73 72 63 2f 69 6e 66 6f 2f 30 35 66 34  rg/src/info/05f4
3680: 33 62 65 38 66 64 64 61 39 66 5d 29 20 74 68 61  3be8fdda9f]) tha
3690: 74 20 63 61 75 73 65 64 20 69 74 20 74 6f 0a 20  t caused it to. 
36a0: 20 6d 69 73 62 65 68 61 76 69 6f 72 20 66 6f 72   misbehavior for
36b0: 20 42 4c 4f 42 20 6f 70 65 72 61 6e 64 73 20 61   BLOB operands a
36c0: 6e 64 20 6e 6f 62 6f 64 79 20 6f 62 73 65 72 76  nd nobody observ
36d0: 65 64 20 74 68 61 74 20 62 75 67 20 69 6e 20 6e  ed that bug in n
36e0: 65 61 72 6c 79 0a 20 20 31 30 20 79 65 61 72 73  early.  10 years
36f0: 20 6f 66 20 61 63 74 69 76 65 20 75 73 65 2e 20   of active use. 
3700: 20 53 6f 20 66 6f 72 20 6d 6f 72 65 20 75 73 65   So for more use
3710: 72 73 2c 20 69 74 20 69 73 20 70 72 6f 62 61 62  rs, it is probab
3720: 6c 79 20 73 61 66 65 20 74 6f 0a 20 20 65 6e 61  ly safe to.  ena
3730: 62 6c 65 20 74 68 69 73 20 63 6f 6d 70 69 6c 65  ble this compile
3740: 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 61 6e 64  -time option and
3750: 20 74 68 65 72 65 62 79 20 73 61 76 65 20 61 20   thereby save a 
3760: 6c 69 74 74 6c 65 20 43 50 55 20 74 69 6d 65 0a  little CPU time.
3770: 20 20 6f 6e 20 4c 49 4b 45 20 71 75 65 72 69 65    on LIKE querie
3780: 73 2e 0a 20 20 3c 70 3e 0a 20 20 54 68 69 73 20  s..  <p>.  This 
3790: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74  compile-time opt
37a0: 69 6f 6e 20 61 66 66 65 63 74 73 20 74 68 65 20  ion affects the 
37b0: 53 51 4c 20 5b 4c 49 4b 45 5d 20 6f 70 65 72 61  SQL [LIKE] opera
37c0: 74 6f 72 20 6f 6e 6c 79 20 61 6e 64 20 68 61 73  tor only and has
37d0: 0a 20 20 6e 6f 20 69 6d 70 61 63 74 20 6f 6e 20  .  no impact on 
37e0: 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 73 74 72  the [sqlite3_str
37f0: 6c 69 6b 65 28 29 5d 20 43 2d 6c 61 6e 67 75 61  like()] C-langua
3800: 67 65 20 69 6e 74 65 72 66 61 63 65 2e 0a 7d 0a  ge interface..}.
3810: 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20  .COMPILE_OPTION 
3820: 7b 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50  {SQLITE_MAX_MMAP
3830: 5f 53 49 5a 45 3d 3c 69 3e 4e 3c 2f 69 3e 7d 20  _SIZE=<i>N</i>} 
3840: 7b 0a 20 20 54 68 69 73 20 6d 61 63 72 6f 20 73  {.  This macro s
3850: 65 74 73 20 61 20 68 61 72 64 20 75 70 70 65 72  ets a hard upper
3860: 20 62 6f 75 6e 64 20 6f 6e 20 74 68 65 20 61 6d   bound on the am
3870: 6f 75 6e 74 20 6f 66 20 61 64 64 72 65 73 73 20  ount of address 
3880: 73 70 61 63 65 20 74 68 61 74 0a 20 20 63 61 6e  space that.  can
3890: 20 62 65 20 75 73 65 64 20 62 79 20 61 6e 79 20   be used by any 
38a0: 73 69 6e 67 6c 65 20 64 61 74 61 62 61 73 65 20  single database 
38b0: 66 6f 72 20 6d 65 6d 6f 72 79 2d 6d 61 70 70 65  for memory-mappe
38c0: 64 20 49 2f 4f 2e 0a 20 20 53 65 74 74 69 6e 67  d I/O..  Setting
38d0: 20 74 68 69 73 20 76 61 6c 75 65 20 74 6f 20 30   this value to 0
38e0: 20 63 6f 6d 70 6c 65 74 65 6c 79 20 64 69 73 61   completely disa
38f0: 62 6c 65 73 20 6d 65 6d 6f 72 79 2d 6d 61 70 70  bles memory-mapp
3900: 65 64 20 49 2f 4f 20 61 6e 64 0a 20 20 63 61 75  ed I/O and.  cau
3910: 73 65 73 20 6c 6f 67 69 63 20 61 73 73 6f 63 69  ses logic associ
3920: 61 74 65 64 20 77 69 74 68 20 6d 65 6d 6f 72 79  ated with memory
3930: 2d 6d 61 70 70 65 64 20 49 2f 4f 20 74 6f 20 62  -mapped I/O to b
3940: 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74  e omitted from t
3950: 68 65 0a 20 20 62 75 69 6c 64 2e 20 20 54 68 69  he.  build.  Thi
3960: 73 20 6f 70 74 69 6f 6e 20 64 6f 65 73 20 63 68  s option does ch
3970: 61 6e 67 65 20 74 68 65 20 64 65 66 61 75 6c 74  ange the default
3980: 20 6d 65 6d 6f 72 79 2d 6d 61 70 70 65 64 20 49   memory-mapped I
3990: 2f 4f 20 61 64 64 72 65 73 73 0a 20 20 73 70 61  /O address.  spa
39a0: 63 65 20 73 69 7a 65 20 28 73 65 74 20 62 79 20  ce size (set by 
39b0: 5b 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f  [SQLITE_DEFAULT_
39c0: 4d 4d 41 50 5f 53 49 5a 45 5d 20 6f 72 0a 20 20  MMAP_SIZE] or.  
39d0: 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 28 5b  sqlite3_config([
39e0: 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4d 4d  SQLITE_CONFIG_MM
39f0: 41 50 5f 53 49 5a 45 5d 29 20 6f 72 20 74 68 65  AP_SIZE]) or the
3a00: 0a 20 20 72 75 6e 2d 74 69 6d 65 20 6d 65 6d 6f  .  run-time memo
3a10: 72 79 2d 6d 61 70 70 65 64 20 49 2f 4f 20 61 64  ry-mapped I/O ad
3a20: 64 72 65 73 73 20 73 70 61 63 65 20 73 69 7a 65  dress space size
3a30: 20 28 73 65 74 20 62 79 0a 20 20 73 71 6c 69 74   (set by.  sqlit
3a40: 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28  e3_file_control(
3a50: 5b 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 4d 4d  [SQLITE_FCNTL_MM
3a60: 41 50 5f 53 49 5a 45 5d 29 20 6f 72 0a 20 20 5b  AP_SIZE]) or.  [
3a70: 50 52 41 47 4d 41 20 6d 6d 61 70 5f 73 69 7a 65  PRAGMA mmap_size
3a80: 5d 29 20 61 73 20 6c 6f 6e 67 20 61 73 20 74 68  ]) as long as th
3a90: 6f 73 65 20 6f 74 68 65 72 20 73 65 74 74 69 6e  ose other settin
3aa0: 67 73 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e  gs are less than
3ab0: 20 74 68 65 0a 20 20 6d 61 78 69 6d 75 6d 20 76   the.  maximum v
3ac0: 61 6c 75 65 20 64 65 66 69 6e 65 64 20 68 65 72  alue defined her
3ad0: 65 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50  e..}..COMPILE_OP
3ae0: 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 4d 41 58  TION {SQLITE_MAX
3af0: 5f 53 43 48 45 4d 41 5f 52 45 54 52 59 3d 3c 69  _SCHEMA_RETRY=<i
3b00: 3e 4e 3c 2f 69 3e 7d 20 7b 0a 20 20 57 68 65 6e  >N</i>} {.  When
3b10: 65 76 65 72 20 74 68 65 20 64 61 74 61 62 61 73  ever the databas
3b20: 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73  e schema changes
3b30: 2c 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  , prepared state
3b40: 6d 65 6e 74 73 20 61 72 65 20 61 75 74 6f 6d 61  ments are automa
3b50: 74 69 63 61 6c 6c 79 0a 20 20 72 65 70 72 65 70  tically.  reprep
3b60: 61 72 65 64 20 74 6f 20 61 63 63 6f 6d 6d 6f 64  ared to accommod
3b70: 61 74 65 20 74 68 65 20 6e 65 77 20 73 63 68 65  ate the new sche
3b80: 6d 61 2e 20 20 54 68 65 72 65 20 69 73 20 61 20  ma.  There is a 
3b90: 72 61 63 65 20 63 6f 6e 64 69 74 69 6f 6e 20 68  race condition h
3ba0: 65 72 65 0a 20 20 69 6e 20 74 68 61 74 20 69 66  ere.  in that if
3bb0: 20 6f 6e 65 20 74 68 72 65 61 64 20 69 73 20 63   one thread is c
3bc0: 6f 6e 73 74 61 6e 74 6c 79 20 63 68 61 6e 67 69  onstantly changi
3bd0: 6e 67 20 74 68 65 20 73 63 68 65 6d 61 2c 20 61  ng the schema, a
3be0: 6e 6f 74 68 65 72 20 74 68 72 65 61 64 0a 20 20  nother thread.  
3bf0: 6d 69 67 68 74 20 73 70 69 6e 20 6f 6e 20 72 65  might spin on re
3c00: 70 61 72 73 65 73 20 61 6e 64 20 72 65 70 72 65  parses and repre
3c10: 70 61 72 61 74 69 6f 6e 73 20 6f 66 20 61 20 70  parations of a p
3c20: 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
3c30: 74 20 61 6e 64 0a 20 20 6e 65 76 65 72 20 67 65  t and.  never ge
3c40: 74 20 61 6e 79 20 72 65 61 6c 20 77 6f 72 6b 20  t any real work 
3c50: 64 6f 6e 65 2e 20 20 54 68 69 73 20 70 61 72 61  done.  This para
3c60: 6d 65 74 65 72 20 70 72 65 76 65 6e 74 73 20 61  meter prevents a
3c70: 6e 20 69 6e 66 69 6e 69 74 65 20 6c 6f 6f 70 0a  n infinite loop.
3c80: 20 20 62 79 20 66 6f 72 63 69 6e 67 20 74 68 65    by forcing the
3c90: 20 73 70 69 6e 6e 69 6e 67 20 74 68 72 65 61 64   spinning thread
3ca0: 20 74 6f 20 67 69 76 65 20 75 70 20 61 66 74 65   to give up afte
3cb0: 72 20 61 20 66 69 78 65 64 20 6e 75 6d 62 65 72  r a fixed number
3cc0: 20 6f 66 20 61 74 74 65 6d 70 74 73 0a 20 20 61   of attempts.  a
3cd0: 74 20 72 65 63 6f 6d 70 69 6c 69 6e 67 20 74 68  t recompiling th
3ce0: 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  e prepared state
3cf0: 6d 65 6e 74 2e 20 20 54 68 65 20 64 65 66 61 75  ment.  The defau
3d00: 6c 74 20 73 65 74 74 69 6e 67 20 69 73 20 35 30  lt setting is 50
3d10: 20 77 68 69 63 68 20 69 73 0a 20 20 6d 6f 72 65   which is.  more
3d20: 20 74 68 61 6e 20 61 64 65 71 75 61 74 65 20 66   than adequate f
3d30: 6f 72 20 6d 6f 73 74 20 61 70 70 6c 69 63 61 74  or most applicat
3d40: 69 6f 6e 73 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45  ions..}..COMPILE
3d50: 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f  _OPTION {SQLITE_
3d60: 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41  MAX_WORKER_THREA
3d70: 44 53 3d 3c 69 3e 4e 3c 2f 69 3e 7d 20 7b 0a 20  DS=<i>N</i>} {. 
3d80: 20 53 65 74 20 61 6e 20 75 70 70 65 72 20 62 6f   Set an upper bo
3d90: 75 6e 64 20 6f 6e 20 74 68 65 20 5b 73 71 6c 69  und on the [sqli
3da0: 74 65 33 5f 6c 69 6d 69 74 5d 28 64 62 2c 5b 53  te3_limit](db,[S
3db0: 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 57 4f 52 4b  QLITE_LIMIT_WORK
3dc0: 45 52 5f 54 48 52 45 41 44 53 5d 2c 4e 29 0a 20  ER_THREADS],N). 
3dd0: 20 73 65 74 74 69 6e 67 20 74 68 61 74 20 64 65   setting that de
3de0: 74 65 72 6d 69 6e 65 73 20 74 68 65 20 6d 61 78  termines the max
3df0: 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20 61  imum number of a
3e00: 75 78 69 6c 69 61 72 79 20 74 68 72 65 61 64 73  uxiliary threads
3e10: 20 74 68 61 74 20 61 20 73 69 6e 67 6c 65 0a 20   that a single. 
3e20: 20 5b 70 72 65 70 61 72 65 64 20 73 74 61 74 65   [prepared state
3e30: 6d 65 6e 74 5d 20 77 69 6c 6c 20 75 73 65 20 74  ment] will use t
3e40: 6f 20 61 69 64 20 77 69 74 68 20 43 50 55 2d 69  o aid with CPU-i
3e50: 6e 74 65 6e 73 69 76 65 20 63 6f 6d 70 75 74 61  ntensive computa
3e60: 74 69 6f 6e 73 0a 20 20 28 6d 6f 73 74 6c 79 20  tions.  (mostly 
3e70: 73 6f 72 74 69 6e 67 29 2e 20 20 53 65 65 20 61  sorting).  See a
3e80: 6c 73 6f 20 74 68 65 20 5b 53 51 4c 49 54 45 5f  lso the [SQLITE_
3e90: 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54  DEFAULT_WORKER_T
3ea0: 48 52 45 41 44 53 5d 20 6f 70 74 69 6f 6e 73 2e  HREADS] options.
3eb0: 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49  .}..COMPILE_OPTI
3ec0: 4f 4e 20 7b 53 51 4c 49 54 45 5f 4d 49 4e 49 4d  ON {SQLITE_MINIM
3ed0: 55 4d 5f 46 49 4c 45 5f 44 45 53 43 52 49 50 54  UM_FILE_DESCRIPT
3ee0: 4f 52 3d 3c 69 3e 4e 3c 2f 69 3e 7d 20 7b 0a 20  OR=<i>N</i>} {. 
3ef0: 20 54 68 65 20 75 6e 69 78 20 5b 56 46 53 5d 20   The unix [VFS] 
3f00: 77 69 6c 6c 20 6e 65 76 65 72 20 75 73 65 20 61  will never use a
3f10: 20 66 69 6c 65 20 64 65 73 63 72 69 70 74 6f 72   file descriptor
3f20: 20 6c 65 73 73 20 74 68 61 6e 20 3c 69 3e 4e 3c   less than <i>N<
3f30: 2f 69 3e 2e 20 20 54 68 65 0a 20 20 64 65 66 61  /i>.  The.  defa
3f40: 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 3c 69 3e  ult value of <i>
3f50: 4e 3c 2f 69 3e 20 69 73 20 33 2e 0a 20 20 3c 70  N</i> is 3..  <p
3f60: 3e 0a 20 20 41 76 6f 69 64 69 6e 67 20 74 68 65  >.  Avoiding the
3f70: 20 75 73 65 20 6f 66 20 6c 6f 77 2d 6e 75 6d 62   use of low-numb
3f80: 65 72 65 64 20 66 69 6c 65 20 64 65 73 63 72 69  ered file descri
3f90: 70 74 6f 72 73 20 69 73 20 61 20 64 65 66 65 6e  ptors is a defen
3fa0: 73 65 20 61 67 61 69 6e 73 74 0a 20 20 61 63 63  se against.  acc
3fb0: 69 64 65 6e 74 61 6c 20 64 61 74 61 62 61 73 65  idental database
3fc0: 20 63 6f 72 72 75 70 74 69 6f 6e 2e 20 20 49 66   corruption.  If
3fd0: 20 61 20 64 61 74 61 62 61 73 65 20 66 69 6c 65   a database file
3fe0: 20 77 61 73 20 6f 70 65 6e 65 64 20 75 73 69 6e   was opened usin
3ff0: 67 0a 20 20 66 69 6c 65 20 64 65 73 63 72 69 70  g.  file descrip
4000: 74 6f 72 20 32 2c 20 66 6f 72 20 65 78 61 6d 70  tor 2, for examp
4010: 6c 65 2c 20 61 6e 64 20 74 68 65 6e 20 61 6e 20  le, and then an 
4020: 61 73 73 65 72 74 28 29 20 66 61 69 6c 65 64 20  assert() failed 
4030: 61 6e 64 20 69 6e 76 6f 6b 65 64 0a 20 20 77 72  and invoked.  wr
4040: 69 74 65 28 32 2c 2e 2e 2e 29 2c 20 74 68 61 74  ite(2,...), that
4050: 20 77 6f 75 6c 64 20 6c 69 6b 65 6c 79 20 63 61   would likely ca
4060: 75 73 65 20 64 61 74 61 62 61 73 65 20 63 6f 72  use database cor
4070: 72 75 70 74 69 6f 6e 20 62 79 20 6f 76 65 72 77  ruption by overw
4080: 72 69 74 69 6e 67 0a 20 20 70 61 72 74 20 6f 66  riting.  part of
4090: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
40a0: 6c 65 20 77 69 74 68 20 74 68 65 20 61 73 73 65  le with the asse
40b0: 72 74 69 6f 6e 20 65 72 72 6f 72 20 6d 65 73 73  rtion error mess
40c0: 61 67 65 2e 20 20 55 73 69 6e 67 20 6f 6e 6c 79  age.  Using only
40d0: 0a 20 20 68 69 67 68 65 72 2d 76 61 6c 75 65 64  .  higher-valued
40e0: 20 66 69 6c 65 20 64 65 73 63 72 69 70 74 6f 72   file descriptor
40f0: 73 20 61 76 6f 69 64 73 20 74 68 69 73 20 70 6f  s avoids this po
4100: 74 65 6e 74 69 61 6c 20 70 72 6f 62 6c 65 6d 2e  tential problem.
4110: 20 20 54 68 65 20 0a 20 20 70 72 6f 74 65 63 74    The .  protect
4120: 69 6f 6e 20 61 67 61 69 6e 73 74 0a 20 20 75 73  ion against.  us
4130: 69 6e 67 20 6c 6f 77 2d 6e 75 6d 62 65 72 65 64  ing low-numbered
4140: 20 66 69 6c 65 20 64 65 73 63 72 69 70 74 6f 72   file descriptor
4150: 73 20 63 61 6e 20 62 65 20 64 69 73 61 62 6c 65  s can be disable
4160: 64 20 62 79 20 73 65 74 74 69 6e 67 20 74 68 69  d by setting thi
4170: 73 0a 20 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  s.  compile-time
4180: 20 6f 70 74 69 6f 6e 20 74 6f 20 30 2e 0a 7d 0a   option to 0..}.
4190: 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20  .COMPILE_OPTION 
41a0: 7b 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41 46  {SQLITE_POWERSAF
41b0: 45 5f 4f 56 45 52 57 52 49 54 45 3d 3c 69 3e 26  E_OVERWRITE=<i>&
41c0: 6c 74 3b 30 20 6f 72 20 31 26 67 74 3b 3c 2f 69  lt;0 or 1&gt;</i
41d0: 3e 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70 74 69  >} {.  This opti
41e0: 6f 6e 20 63 68 61 6e 67 65 73 20 74 68 65 20 64  on changes the d
41f0: 65 66 61 75 6c 74 20 61 73 73 75 6d 70 74 69 6f  efault assumptio
4200: 6e 20 61 62 6f 75 74 20 5b 70 6f 77 65 72 73 61  n about [powersa
4210: 66 65 20 6f 76 65 72 77 72 69 74 65 5d 0a 20 20  fe overwrite].  
4220: 66 6f 72 20 74 68 65 20 75 6e 64 65 72 6c 79 69  for the underlyi
4230: 6e 67 20 66 69 6c 65 73 79 73 74 65 6d 73 20 66  ng filesystems f
4240: 6f 72 20 74 68 65 20 75 6e 69 78 20 61 6e 64 20  or the unix and 
4250: 77 69 6e 64 6f 77 73 20 5b 56 46 53 65 73 5d 2e  windows [VFSes].
4260: 0a 20 20 53 65 74 74 69 6e 67 20 53 51 4c 49 54  .  Setting SQLIT
4270: 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f 56 45 52  E_POWERSAFE_OVER
4280: 57 52 49 54 45 20 74 6f 20 31 20 63 61 75 73 65  WRITE to 1 cause
4290: 73 20 53 51 4c 69 74 65 20 74 6f 20 61 73 73 75  s SQLite to assu
42a0: 6d 65 20 74 68 61 74 0a 20 20 61 70 70 6c 69 63  me that.  applic
42b0: 61 74 69 6f 6e 2d 6c 65 76 65 6c 20 77 72 69 74  ation-level writ
42c0: 65 73 20 63 61 6e 6e 6f 74 20 63 68 61 6e 67 65  es cannot change
42d0: 73 20 62 79 74 65 73 20 6f 75 74 73 69 64 65 20  s bytes outside 
42e0: 74 68 65 20 72 61 6e 67 65 20 6f 66 0a 20 20 62  the range of.  b
42f0: 79 74 65 73 20 77 72 69 74 74 65 6e 20 65 76 65  ytes written eve
4300: 6e 20 69 66 20 74 68 65 20 77 72 69 74 65 20 6f  n if the write o
4310: 63 63 75 72 73 20 6a 75 73 74 20 62 65 66 6f 72  ccurs just befor
4320: 65 20 61 20 70 6f 77 65 72 20 6c 6f 73 73 2e 0a  e a power loss..
4330: 20 20 57 69 74 68 20 53 51 4c 49 54 45 5f 50 4f    With SQLITE_PO
4340: 57 45 52 53 41 46 45 5f 4f 56 45 52 57 52 49 54  WERSAFE_OVERWRIT
4350: 45 20 73 65 74 20 74 6f 20 30 2c 20 53 51 4c 69  E set to 0, SQLi
4360: 74 65 20 61 73 73 75 6d 65 73 20 74 68 61 74 20  te assumes that 
4370: 6f 74 68 65 72 0a 20 20 62 79 74 65 73 20 69 6e  other.  bytes in
4380: 20 74 68 65 20 73 61 6d 65 20 73 65 63 74 6f 72   the same sector
4390: 20 77 69 74 68 20 61 20 77 72 69 74 74 65 6e 20   with a written 
43a0: 62 79 74 65 20 6d 69 67 68 74 20 62 65 20 63 68  byte might be ch
43b0: 61 6e 67 65 64 20 6f 72 20 0a 20 20 64 61 6d 61  anged or .  dama
43c0: 67 65 64 20 62 79 20 61 20 70 6f 77 65 72 20 6c  ged by a power l
43d0: 6f 73 73 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f  oss..}..COMPILE_
43e0: 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 52  OPTION {SQLITE_R
43f0: 45 56 45 52 53 45 5f 55 4e 4f 52 44 45 52 45 44  EVERSE_UNORDERED
4400: 5f 53 45 4c 45 43 54 53 7d 20 7b 0a 20 20 54 68  _SELECTS} {.  Th
4410: 69 73 20 6f 70 74 69 6f 6e 20 63 61 75 73 65 73  is option causes
4420: 20 74 68 65 20 5b 50 52 41 47 4d 41 20 72 65 76   the [PRAGMA rev
4430: 65 72 73 65 5f 75 6e 6f 72 64 65 72 65 64 5f 73  erse_unordered_s
4440: 65 6c 65 63 74 73 5d 20 73 65 74 74 69 6e 67 20  elects] setting 
4450: 74 6f 20 62 65 0a 20 20 65 6e 61 62 6c 65 64 20  to be.  enabled 
4460: 62 79 20 64 65 66 61 75 6c 74 2e 20 20 57 68 65  by default.  Whe
4470: 6e 20 65 6e 61 62 6c 65 64 2c 20 5b 53 45 4c 45  n enabled, [SELE
4480: 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 73 20 74  CT] statements t
4490: 68 61 74 20 6c 61 63 6b 20 61 6e 0a 20 20 4f 52  hat lack an.  OR
44a0: 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 77 69  DER BY clause wi
44b0: 6c 6c 20 72 75 6e 20 69 6e 20 72 65 76 65 72 73  ll run in revers
44c0: 65 20 6f 72 64 65 72 2e 3c 70 3e 0a 20 20 54 68  e order.<p>.  Th
44d0: 69 73 20 6f 70 74 69 6f 6e 20 69 73 20 75 73 65  is option is use
44e0: 66 75 6c 20 66 6f 72 20 64 65 74 65 63 74 69 6e  ful for detectin
44f0: 67 20 77 68 65 6e 20 61 70 70 6c 69 63 61 74 69  g when applicati
4500: 6f 6e 73 20 28 69 6e 63 6f 72 72 65 63 74 6c 79  ons (incorrectly
4510: 29 0a 20 20 61 73 73 75 6d 65 20 74 68 61 74 20  ).  assume that 
4520: 74 68 65 20 6f 72 64 65 72 20 6f 66 20 72 6f 77  the order of row
4530: 73 20 69 6e 20 61 20 53 45 4c 45 43 54 20 77 69  s in a SELECT wi
4540: 74 68 6f 75 74 20 61 6e 20 4f 52 44 45 52 20 42  thout an ORDER B
4550: 59 20 63 6c 61 75 73 65 0a 20 20 77 69 6c 6c 20  Y clause.  will 
4560: 61 6c 77 61 79 73 20 62 65 20 74 68 65 20 73 61  always be the sa
4570: 6d 65 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f  me..}..COMPILE_O
4580: 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 53 4f  PTION {SQLITE_SO
4590: 52 54 45 52 5f 50 4d 41 53 5a 3d 3c 69 3e 4e 3c  RTER_PMASZ=<i>N<
45a0: 2f 69 3e 7d 20 7b 0a 20 20 49 66 20 6d 75 6c 74  /i>} {.  If mult
45b0: 69 2d 74 68 72 65 61 64 65 64 20 70 72 6f 63 65  i-threaded proce
45c0: 73 73 69 6e 67 20 69 73 20 65 6e 61 62 6c 65 64  ssing is enabled
45d0: 20 76 69 61 20 74 68 65 0a 20 20 5b 50 52 41 47   via the.  [PRAG
45e0: 4d 41 20 74 68 72 65 61 64 73 5d 20 73 65 74 74  MA threads] sett
45f0: 69 6e 67 2c 20 74 68 65 6e 20 73 6f 72 74 20 6f  ing, then sort o
4600: 70 65 72 61 74 69 6f 6e 73 20 77 69 6c 6c 0a 20  perations will. 
4610: 20 61 74 74 65 6d 70 74 20 74 6f 20 73 74 61 72   attempt to star
4620: 74 20 68 65 6c 70 65 72 20 74 68 72 65 61 64 73  t helper threads
4630: 20 77 68 65 6e 20 74 68 65 20 61 6d 6f 75 6e 74   when the amount
4640: 20 6f 66 20 63 6f 6e 74 65 6e 74 0a 20 20 74 6f   of content.  to
4650: 20 62 65 20 73 6f 72 74 65 64 20 65 78 63 65 65   be sorted excee
4660: 64 73 20 74 68 65 20 6d 69 6e 69 6d 75 6d 20 6f  ds the minimum o
4670: 66 20 74 68 65 20 5b 63 61 63 68 65 5f 73 69 7a  f the [cache_siz
4680: 65 5d 20 61 6e 64 20 50 4d 41 20 53 69 7a 65 0a  e] and PMA Size.
4690: 20 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20    determined by 
46a0: 74 68 65 20 5b 53 51 4c 49 54 45 5f 43 4f 4e 46  the [SQLITE_CONF
46b0: 49 47 5f 50 4d 41 53 5a 5d 20 73 74 61 72 74 2d  IG_PMASZ] start-
46c0: 74 69 6d 65 20 6f 70 74 69 6f 6e 2e 0a 20 20 54  time option..  T
46d0: 68 69 73 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  his compile-time
46e0: 20 6f 70 74 69 6f 6e 20 73 65 74 73 20 74 68 65   option sets the
46f0: 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 66   default value f
4700: 6f 72 20 74 68 65 0a 20 20 5b 53 51 4c 49 54 45  or the.  [SQLITE
4710: 5f 43 4f 4e 46 49 47 5f 50 4d 41 53 5a 5d 20 73  _CONFIG_PMASZ] s
4720: 74 61 72 74 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  tart-time option
4730: 2e 0a 20 20 54 68 65 20 64 65 66 61 75 6c 74 20  ..  The default 
4740: 76 61 6c 75 65 20 69 73 20 32 35 30 2e 0a 7d 0a  value is 250..}.
4750: 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20  .COMPILE_OPTION 
4760: 7b 53 51 4c 49 54 45 5f 53 54 4d 54 4a 52 4e 4c  {SQLITE_STMTJRNL
4770: 5f 53 50 49 4c 4c 3d 3c 69 3e 4e 3c 2f 69 3e 7d  _SPILL=<i>N</i>}
4780: 20 7b 0a 20 20 54 68 65 20 53 51 4c 49 54 45 5f   {.  The SQLITE_
4790: 53 54 4d 54 4a 52 4e 4c 5f 53 50 49 4c 4c 20 63  STMTJRNL_SPILL c
47a0: 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69  ompile-time opti
47b0: 6f 6e 20 64 65 74 65 72 6d 69 6e 65 73 20 74 68  on determines th
47c0: 65 0a 20 20 64 65 66 61 75 6c 74 20 73 65 74 74  e.  default sett
47d0: 69 6e 67 20 6f 66 20 74 68 65 20 5b 53 51 4c 49  ing of the [SQLI
47e0: 54 45 5f 43 4f 4e 46 49 47 5f 53 54 4d 54 4a 52  TE_CONFIG_STMTJR
47f0: 4e 4c 5f 53 50 49 4c 4c 5d 20 73 74 61 72 74 2d  NL_SPILL] start-
4800: 74 69 6d 65 0a 20 20 73 65 74 74 69 6e 67 2e 20  time.  setting. 
4810: 20 54 68 61 74 20 73 65 74 74 69 6e 67 20 64 65   That setting de
4820: 74 65 72 6d 69 6e 65 73 20 74 68 65 20 73 69 7a  termines the siz
4830: 65 20 74 68 72 65 73 68 6f 6c 64 20 61 62 6f 76  e threshold abov
4840: 65 20 77 68 69 63 68 0a 20 20 5b 73 74 61 74 65  e which.  [state
4850: 6d 65 6e 74 20 6a 6f 75 72 6e 61 6c 73 5d 20 61  ment journals] a
4860: 72 65 20 6d 6f 76 65 64 20 66 72 6f 6d 20 6d 65  re moved from me
4870: 6d 6f 72 79 20 74 6f 20 64 69 73 6b 2e 0a 7d 0a  mory to disk..}.
4880: 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20  .COMPILE_OPTION 
4890: 7b 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41  {SQLITE_WIN32_MA
48a0: 4c 4c 4f 43 7d 20 7b 0a 20 20 54 68 69 73 20 6f  LLOC} {.  This o
48b0: 70 74 69 6f 6e 20 65 6e 61 62 6c 65 73 20 74 68  ption enables th
48c0: 65 20 75 73 65 20 6f 66 20 74 68 65 20 57 69 6e  e use of the Win
48d0: 64 6f 77 73 20 48 65 61 70 20 41 50 49 20 66 75  dows Heap API fu
48e0: 6e 63 74 69 6f 6e 73 20 66 6f 72 20 6d 65 6d 6f  nctions for memo
48f0: 72 79 0a 20 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  ry.  allocation 
4900: 69 6e 73 74 65 61 64 20 6f 66 20 74 68 65 20 73  instead of the s
4910: 74 61 6e 64 61 72 64 20 6c 69 62 72 61 72 79 20  tandard library 
4920: 6d 61 6c 6c 6f 63 28 29 20 61 6e 64 20 66 72 65  malloc() and fre
4930: 65 28 29 20 72 6f 75 74 69 6e 65 73 2e 0a 7d 0a  e() routines..}.
4940: 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20  .COMPILE_OPTION 
4950: 7b 59 59 53 54 41 43 4b 44 45 50 54 48 3d 3c 69  {YYSTACKDEPTH=<i
4960: 3e 26 6c 74 3b 6d 61 78 5f 64 65 70 74 68 26 67  >&lt;max_depth&g
4970: 74 3b 3c 2f 69 3e 7d 20 7b 0a 20 20 54 68 69 73  t;</i>} {.  This
4980: 20 6d 61 63 72 6f 20 73 65 74 73 20 74 68 65 20   macro sets the 
4990: 6d 61 78 69 6d 75 6d 20 64 65 70 74 68 20 6f 66  maximum depth of
49a0: 20 74 68 65 20 4c 41 4c 52 28 31 29 20 73 74 61   the LALR(1) sta
49b0: 63 6b 20 75 73 65 64 20 62 79 0a 20 20 74 68 65  ck used by.  the
49c0: 20 53 51 4c 20 70 61 72 73 65 72 20 77 69 74 68   SQL parser with
49d0: 69 6e 20 53 51 4c 69 74 65 2e 20 20 54 68 65 20  in SQLite.  The 
49e0: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 69 73  default value is
49f0: 20 31 30 30 2e 20 20 41 20 74 79 70 69 63 61 6c   100.  A typical
4a00: 0a 20 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 77  .  application w
4a10: 69 6c 6c 20 75 73 65 20 6c 65 73 73 20 74 68 61  ill use less tha
4a20: 6e 20 61 62 6f 75 74 20 32 30 20 6c 65 76 65 6c  n about 20 level
4a30: 73 20 6f 66 20 74 68 65 20 73 74 61 63 6b 2e 0a  s of the stack..
4a40: 20 20 44 65 76 65 6c 6f 70 65 72 73 20 77 68 6f    Developers who
4a50: 73 65 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 20  se applications 
4a60: 63 6f 6e 74 61 69 6e 20 53 51 4c 20 73 74 61 74  contain SQL stat
4a70: 65 6d 65 6e 74 73 20 74 68 61 74 20 0a 20 20 6e  ements that .  n
4a80: 65 65 64 20 6d 6f 72 65 20 74 68 61 6e 20 31 30  eed more than 10
4a90: 30 20 4c 41 4c 52 28 31 29 20 73 74 61 63 6b 20  0 LALR(1) stack 
4aa0: 65 6e 74 72 69 65 73 20 73 68 6f 75 6c 64 20 73  entries should s
4ab0: 65 72 69 6f 75 73 6c 79 0a 20 20 63 6f 6e 73 69  eriously.  consi
4ac0: 64 65 72 20 72 65 66 61 63 74 6f 72 69 6e 67 20  der refactoring 
4ad0: 74 68 65 69 72 20 53 51 4c 20 61 73 20 69 74 20  their SQL as it 
4ae0: 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65 20  is likely to be 
4af0: 77 65 6c 6c 20 62 65 79 6f 6e 64 0a 20 20 74 68  well beyond.  th
4b00: 65 20 61 62 69 6c 69 74 79 20 6f 66 20 61 6e 79  e ability of any
4b10: 20 68 75 6d 61 6e 20 74 6f 20 63 6f 6d 70 72 65   human to compre
4b20: 68 65 6e 64 2e 0a 7d 0a 3c 2f 74 63 6c 3e 0a 0a  hend..}.</tcl>..
4b30: 3c 68 31 3e 20 4f 70 74 69 6f 6e 73 20 54 6f 20  <h1> Options To 
4b40: 53 65 74 20 53 69 7a 65 20 4c 69 6d 69 74 73 3c  Set Size Limits<
4b50: 2f 68 31 3e 0a 0a 3c 70 3e 54 68 65 72 65 20 61  /h1>..<p>There a
4b60: 72 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  re compile-time 
4b70: 6f 70 74 69 6f 6e 73 20 74 68 61 74 20 77 69 6c  options that wil
4b80: 6c 20 73 65 74 20 75 70 70 65 72 20 62 6f 75 6e  l set upper boun
4b90: 64 73 0a 6f 6e 20 74 68 65 20 73 69 7a 65 73 20  ds.on the sizes 
4ba0: 6f 66 20 76 61 72 69 6f 75 73 20 73 74 72 75 63  of various struc
4bb0: 74 75 72 65 73 20 69 6e 20 53 51 4c 69 74 65 2e  tures in SQLite.
4bc0: 20 20 54 68 65 20 63 6f 6d 70 69 6c 65 2d 74 69    The compile-ti
4bd0: 6d 65 0a 6f 70 74 69 6f 6e 73 20 6e 6f 72 6d 61  me.options norma
4be0: 6c 6c 79 20 73 65 74 20 61 20 68 61 72 64 20 75  lly set a hard u
4bf0: 70 70 65 72 20 62 6f 75 6e 64 20 74 68 61 74 20  pper bound that 
4c00: 63 61 6e 20 62 65 20 63 68 61 6e 67 65 64 0a 61  can be changed.a
4c10: 74 20 72 75 6e 2d 74 69 6d 65 20 6f 6e 20 69 6e  t run-time on in
4c20: 64 69 76 69 64 75 61 6c 20 5b 64 61 74 61 62 61  dividual [databa
4c30: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 5d 20  se connections] 
4c40: 75 73 69 6e 67 20 74 68 65 0a 5b 73 71 6c 69 74  using the.[sqlit
4c50: 65 33 5f 6c 69 6d 69 74 28 29 5d 20 69 6e 74 65  e3_limit()] inte
4c60: 72 66 61 63 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54  rface.</p>..<p>T
4c70: 68 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  he compile-time 
4c80: 6f 70 74 69 6f 6e 73 20 66 6f 72 20 73 65 74 74  options for sett
4c90: 69 6e 67 20 75 70 70 65 72 20 62 6f 75 6e 64 73  ing upper bounds
4ca0: 20 61 72 65 0a 5b 6c 69 6d 69 74 73 20 7c 20 64   are.[limits | d
4cb0: 6f 63 75 6d 65 6e 74 65 64 20 73 65 70 61 72 61  ocumented separa
4cc0: 74 65 6c 79 5d 2e 20 20 54 68 65 20 66 6f 6c 6c  tely].  The foll
4cd0: 6f 77 69 6e 67 20 69 73 20 61 20 6c 69 73 74 20  owing is a list 
4ce0: 6f 66 0a 74 68 65 20 61 76 61 69 6c 61 62 6c 65  of.the available
4cf0: 20 73 65 74 74 69 6e 67 73 3a 3c 2f 70 3e 0a 0a   settings:</p>..
4d00: 3c 75 6c 3e 0a 3c 6c 69 3e 20 5b 53 51 4c 49 54  <ul>.<li> [SQLIT
4d10: 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 5d 20  E_MAX_ATTACHED] 
4d20: 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e 20 5b 53 51 4c   </li>.<li> [SQL
4d30: 49 54 45 5f 4d 41 58 5f 43 4f 4c 55 4d 4e 5d 20  ITE_MAX_COLUMN] 
4d40: 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e 20 5b 53 51 4c   </li>.<li> [SQL
4d50: 49 54 45 5f 4d 41 58 5f 43 4f 4d 50 4f 55 4e 44  ITE_MAX_COMPOUND
4d60: 5f 53 45 4c 45 43 54 5d 20 20 3c 2f 6c 69 3e 0a  _SELECT]  </li>.
4d70: 3c 6c 69 3e 20 5b 53 51 4c 49 54 45 5f 4d 41 58  <li> [SQLITE_MAX
4d80: 5f 45 58 50 52 5f 44 45 50 54 48 5d 20 20 3c 2f  _EXPR_DEPTH]  </
4d90: 6c 69 3e 0a 3c 6c 69 3e 20 5b 53 51 4c 49 54 45  li>.<li> [SQLITE
4da0: 5f 4d 41 58 5f 46 55 4e 43 54 49 4f 4e 5f 41 52  _MAX_FUNCTION_AR
4db0: 47 5d 20 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e 20 5b  G]  </li>.<li> [
4dc0: 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54  SQLITE_MAX_LENGT
4dd0: 48 5d 20 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e 20 5b  H]  </li>.<li> [
4de0: 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 49 4b 45 5f  SQLITE_MAX_LIKE_
4df0: 50 41 54 54 45 52 4e 5f 4c 45 4e 47 54 48 5d 20  PATTERN_LENGTH] 
4e00: 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e 20 5b 53 51 4c   </li>.<li> [SQL
4e10: 49 54 45 5f 4d 41 58 5f 50 41 47 45 5f 43 4f 55  ITE_MAX_PAGE_COU
4e20: 4e 54 5d 20 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e 20  NT]  </li>.<li> 
4e30: 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 53 51 4c 5f  [SQLITE_MAX_SQL_
4e40: 4c 45 4e 47 54 48 5d 20 20 3c 2f 6c 69 3e 0a 3c  LENGTH]  </li>.<
4e50: 6c 69 3e 20 5b 53 51 4c 49 54 45 5f 4d 41 58 5f  li> [SQLITE_MAX_
4e60: 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 5d  VARIABLE_NUMBER]
4e70: 20 20 3c 2f 6c 69 3e 0a 3c 2f 75 6c 3e 0a 0a 3c    </li>.</ul>..<
4e80: 61 20 6e 61 6d 65 3d 22 63 6f 6e 74 72 6f 6c 66  a name="controlf
4e90: 65 61 74 75 72 65 73 22 3e 3c 2f 61 3e 0a 3c 68  eatures"></a>.<h
4ea0: 31 3e 20 4f 70 74 69 6f 6e 73 20 54 6f 20 43 6f  1> Options To Co
4eb0: 6e 74 72 6f 6c 20 4f 70 65 72 61 74 69 6e 67 20  ntrol Operating 
4ec0: 43 68 61 72 61 63 74 65 72 69 73 74 69 63 73 3c  Characteristics<
4ed0: 2f 68 31 3e 0a 0a 3c 74 63 6c 3e 0a 43 4f 4d 50  /h1>..<tcl>.COMP
4ee0: 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49  ILE_OPTION {SQLI
4ef0: 54 45 5f 34 5f 42 59 54 45 5f 41 4c 49 47 4e 45  TE_4_BYTE_ALIGNE
4f00: 44 5f 4d 41 4c 4c 4f 43 7d 20 7b 0a 20 20 4f 6e  D_MALLOC} {.  On
4f10: 20 6d 6f 73 74 20 73 79 73 74 65 6d 73 2c 20 74   most systems, t
4f20: 68 65 20 6d 61 6c 6c 6f 63 28 29 20 73 79 73 74  he malloc() syst
4f30: 65 6d 20 63 61 6c 6c 20 72 65 74 75 72 6e 73 20  em call returns 
4f40: 61 20 62 75 66 66 65 72 20 74 68 61 74 20 69 73  a buffer that is
4f50: 0a 20 20 61 6c 69 67 6e 65 64 20 74 6f 20 61 6e  .  aligned to an
4f60: 20 38 2d 62 79 74 65 20 62 6f 75 6e 64 61 72 79   8-byte boundary
4f70: 2e 20 20 42 75 74 20 6f 6e 20 73 6f 6d 65 20 73  .  But on some s
4f80: 79 73 74 65 6d 73 20 28 65 78 3a 20 77 69 6e 64  ystems (ex: wind
4f90: 6f 77 73 29 20 6d 61 6c 6c 6f 63 28 29 0a 20 20  ows) malloc().  
4fa0: 72 65 74 75 72 6e 73 20 34 2d 62 79 74 65 20 61  returns 4-byte a
4fb0: 6c 69 67 6e 65 64 20 70 6f 69 6e 74 65 72 2e 20  ligned pointer. 
4fc0: 20 54 68 69 73 20 63 6f 6d 70 69 6c 65 2d 74 69   This compile-ti
4fd0: 6d 65 20 6f 70 74 69 6f 6e 20 6d 75 73 74 20 62  me option must b
4fe0: 65 20 75 73 65 64 0a 20 20 6f 6e 20 73 79 73 74  e used.  on syst
4ff0: 65 6d 73 20 74 68 61 74 20 72 65 74 75 72 6e 20  ems that return 
5000: 34 2d 62 79 74 65 20 61 6c 69 67 6e 65 64 20 70  4-byte aligned p
5010: 6f 69 6e 74 65 72 73 20 66 72 6f 6d 20 6d 61 6c  ointers from mal
5020: 6c 6f 63 28 29 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c  loc()..}..COMPIL
5030: 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45  E_OPTION {SQLITE
5040: 5f 43 41 53 45 5f 53 45 4e 53 49 54 49 56 45 5f  _CASE_SENSITIVE_
5050: 4c 49 4b 45 7d 20 7b 0a 20 20 49 66 20 74 68 69  LIKE} {.  If thi
5060: 73 20 6f 70 74 69 6f 6e 20 69 73 20 70 72 65 73  s option is pres
5070: 65 6e 74 2c 20 74 68 65 6e 20 74 68 65 20 62 75  ent, then the bu
5080: 69 6c 74 2d 69 6e 20 5b 4c 49 4b 45 5d 20 6f 70  ilt-in [LIKE] op
5090: 65 72 61 74 6f 72 20 77 69 6c 6c 20 62 65 0a 20  erator will be. 
50a0: 20 63 61 73 65 20 73 65 6e 73 69 74 69 76 65 2e   case sensitive.
50b0: 20 20 54 68 69 73 20 73 61 6d 65 20 65 66 66 65    This same effe
50c0: 63 74 20 63 61 6e 20 62 65 20 61 63 68 69 65 76  ct can be achiev
50d0: 65 64 20 61 74 20 72 75 6e 2d 74 69 6d 65 20 75  ed at run-time u
50e0: 73 69 6e 67 0a 20 20 74 68 65 20 5b 63 61 73 65  sing.  the [case
50f0: 5f 73 65 6e 73 69 74 69 76 65 5f 6c 69 6b 65 20  _sensitive_like 
5100: 70 72 61 67 6d 61 5d 2e 0a 7d 0a 0a 43 4f 4d 50  pragma]..}..COMP
5110: 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49  ILE_OPTION {SQLI
5120: 54 45 5f 44 49 52 45 43 54 5f 4f 56 45 52 46 4c  TE_DIRECT_OVERFL
5130: 4f 57 5f 52 45 41 44 7d 20 7b 0a 20 20 57 68 65  OW_READ} {.  Whe
5140: 6e 20 74 68 69 73 20 6f 70 74 69 6f 6e 20 69 73  n this option is
5150: 20 70 72 65 73 65 6e 74 2c 20 63 6f 6e 74 65 6e   present, conten
5160: 74 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 0a 20  t contained in. 
5170: 20 5b 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 73   [overflow pages
5180: 5d 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  ] of the databas
5190: 65 20 66 69 6c 65 20 69 73 20 72 65 61 64 20 64  e file is read d
51a0: 69 72 65 63 74 6c 79 20 66 72 6f 6d 20 64 69 73  irectly from dis
51b0: 6b 2c 0a 20 20 62 79 70 61 73 73 69 6e 67 20 74  k,.  bypassing t
51c0: 68 65 20 5b 70 61 67 65 20 63 61 63 68 65 5d 2c  he [page cache],
51d0: 20 64 75 72 69 6e 67 20 72 65 61 64 20 74 72 61   during read tra
51e0: 6e 73 61 63 74 69 6f 6e 73 2e 20 20 49 6e 20 61  nsactions.  In a
51f0: 70 70 6c 69 63 61 74 69 6f 6e 73 0a 20 20 74 68  pplications.  th
5200: 61 74 20 64 6f 20 61 20 6c 6f 74 20 6f 66 20 72  at do a lot of r
5210: 65 61 64 73 20 6f 66 20 6c 61 72 67 65 20 42 4c  eads of large BL
5220: 4f 42 73 2c 20 74 68 69 73 20 6f 70 74 69 6f 6e  OBs, this option
5230: 20 6d 69 67 68 74 20 69 6d 70 72 6f 76 65 20 72   might improve r
5240: 65 61 64 0a 20 20 70 65 72 66 6f 72 6d 61 6e 63  ead.  performanc
5250: 65 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50  e..}..COMPILE_OP
5260: 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 48 41 56  TION {SQLITE_HAV
5270: 45 5f 49 53 4e 41 4e 7d 20 7b 0a 20 20 49 66 20  E_ISNAN} {.  If 
5280: 74 68 69 73 20 6f 70 74 69 6f 6e 20 69 73 20 70  this option is p
5290: 72 65 73 65 6e 74 2c 20 74 68 65 6e 20 53 51 4c  resent, then SQL
52a0: 69 74 65 20 77 69 6c 6c 20 75 73 65 20 74 68 65  ite will use the
52b0: 20 69 73 6e 61 6e 28 29 20 66 75 6e 63 74 69 6f   isnan() functio
52c0: 6e 20 66 72 6f 6d 0a 20 20 74 68 65 20 73 79 73  n from.  the sys
52d0: 74 65 6d 20 6d 61 74 68 20 6c 69 62 72 61 72 79  tem math library
52e0: 2e 20 20 54 68 69 73 20 69 73 20 61 6e 20 61 6c  .  This is an al
52f0: 69 61 73 20 66 6f 72 20 74 68 65 20 5b 48 41 56  ias for the [HAV
5300: 45 5f 49 53 4e 41 4e 5d 20 63 6f 6e 66 69 67 75  E_ISNAN] configu
5310: 72 61 74 69 6f 6e 0a 20 20 6f 70 74 69 6f 6e 2e  ration.  option.
5320: 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49  .}..COMPILE_OPTI
5330: 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f 53 5f 4f 54  ON {SQLITE_OS_OT
5340: 48 45 52 3d 3c 69 3e 26 6c 74 3b 30 20 6f 72 20  HER=<i>&lt;0 or 
5350: 31 26 67 74 3b 3c 2f 69 3e 7d 20 7b 0a 20 20 54  1&gt;</i>} {.  T
5360: 68 65 20 6f 70 74 69 6f 6e 20 63 61 75 73 65 73  he option causes
5370: 20 53 51 4c 69 74 65 20 74 6f 20 6f 6d 69 74 20   SQLite to omit 
5380: 69 74 73 20 62 75 69 6c 74 2d 69 6e 20 6f 70 65  its built-in ope
5390: 72 61 74 69 6e 67 20 73 79 73 74 65 6d 20 69 6e  rating system in
53a0: 74 65 72 66 61 63 65 73 0a 20 20 66 6f 72 20 55  terfaces.  for U
53b0: 6e 69 78 2c 20 57 69 6e 64 6f 77 73 2c 20 61 6e  nix, Windows, an
53c0: 64 20 4f 53 2f 32 2e 20 20 54 68 65 20 72 65 73  d OS/2.  The res
53d0: 75 6c 74 69 6e 67 20 6c 69 62 72 61 72 79 20 77  ulting library w
53e0: 69 6c 6c 20 68 61 76 65 20 6e 6f 20 64 65 66 61  ill have no defa
53f0: 75 6c 74 0a 20 20 5b 73 71 6c 69 74 65 33 5f 76  ult.  [sqlite3_v
5400: 66 73 20 7c 20 6f 70 65 72 61 74 69 6e 67 20 73  fs | operating s
5410: 79 73 74 65 6d 20 69 6e 74 65 72 66 61 63 65 5d  ystem interface]
5420: 2e 20 20 41 70 70 6c 69 63 61 74 69 6f 6e 73 20  .  Applications 
5430: 6d 75 73 74 20 75 73 65 0a 20 20 5b 73 71 6c 69  must use.  [sqli
5440: 74 65 33 5f 76 66 73 5f 72 65 67 69 73 74 65 72  te3_vfs_register
5450: 28 29 5d 20 74 6f 20 72 65 67 69 73 74 65 72 20  ()] to register 
5460: 61 6e 20 61 70 70 72 6f 70 72 69 61 74 65 20 69  an appropriate i
5470: 6e 74 65 72 66 61 63 65 20 62 65 66 6f 72 65 0a  nterface before.
5480: 20 20 75 73 69 6e 67 20 53 51 4c 69 74 65 2e 20    using SQLite. 
5490: 20 41 70 70 6c 69 63 61 74 69 6f 6e 73 20 6d 75   Applications mu
54a0: 73 74 20 61 6c 73 6f 20 73 75 70 70 6c 79 20 69  st also supply i
54b0: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20 66  mplementations f
54c0: 6f 72 20 74 68 65 0a 20 20 5b 73 71 6c 69 74 65  or the.  [sqlite
54d0: 33 5f 6f 73 5f 69 6e 69 74 28 29 5d 20 61 6e 64  3_os_init()] and
54e0: 20 5b 73 71 6c 69 74 65 33 5f 6f 73 5f 65 6e 64   [sqlite3_os_end
54f0: 28 29 5d 20 69 6e 74 65 72 66 61 63 65 73 2e 20  ()] interfaces. 
5500: 20 54 68 65 20 75 73 75 61 6c 20 70 72 61 63 74   The usual pract
5510: 69 63 65 0a 20 20 69 73 20 66 6f 72 20 74 68 65  ice.  is for the
5520: 20 73 75 70 70 6c 69 65 64 20 5b 73 71 6c 69 74   supplied [sqlit
5530: 65 33 5f 6f 73 5f 69 6e 69 74 28 29 5d 20 74 6f  e3_os_init()] to
5540: 20 69 6e 76 6f 6b 65 20 5b 73 71 6c 69 74 65 33   invoke [sqlite3
5550: 5f 76 66 73 5f 72 65 67 69 73 74 65 72 28 29 5d  _vfs_register()]
5560: 2e 0a 20 20 53 51 4c 69 74 65 20 77 69 6c 6c 20  ..  SQLite will 
5570: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 69 6e  automatically in
5580: 76 6f 6b 65 20 5b 73 71 6c 69 74 65 33 5f 6f 73  voke [sqlite3_os
5590: 5f 69 6e 69 74 28 29 5d 20 77 68 65 6e 20 69 74  _init()] when it
55a0: 20 69 6e 69 74 69 61 6c 69 7a 65 73 2e 0a 0a 20   initializes... 
55b0: 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 69 73 20   This option is 
55c0: 74 79 70 69 63 61 6c 6c 79 20 75 73 65 64 20 77  typically used w
55d0: 68 65 6e 20 62 75 69 6c 64 69 6e 67 20 53 51 4c  hen building SQL
55e0: 69 74 65 20 66 6f 72 20 61 6e 20 65 6d 62 65 64  ite for an embed
55f0: 64 65 64 0a 20 20 70 6c 61 74 66 6f 72 6d 20 77  ded.  platform w
5600: 69 74 68 20 61 20 63 75 73 74 6f 6d 20 6f 70 65  ith a custom ope
5610: 72 61 74 69 6e 67 20 73 79 73 74 65 6d 2e 0a 7d  rating system..}
5620: 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e  ..COMPILE_OPTION
5630: 20 7b 53 51 4c 49 54 45 5f 53 45 43 55 52 45 5f   {SQLITE_SECURE_
5640: 44 45 4c 45 54 45 7d 20 7b 0a 20 20 54 68 69 73  DELETE} {.  This
5650: 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70   compile-time op
5660: 74 69 6f 6e 20 63 68 61 6e 67 65 73 20 74 68 65  tion changes the
5670: 20 64 65 66 61 75 6c 74 20 73 65 74 74 69 6e 67   default setting
5680: 20 6f 66 20 74 68 65 0a 20 20 5b 73 65 63 75 72   of the.  [secur
5690: 65 5f 64 65 6c 65 74 65 20 70 72 61 67 6d 61 5d  e_delete pragma]
56a0: 2e 20 20 57 68 65 6e 20 74 68 69 73 20 6f 70 74  .  When this opt
56b0: 69 6f 6e 20 69 73 20 6e 6f 74 20 75 73 65 64 2c  ion is not used,
56c0: 20 73 65 63 75 72 65 5f 64 65 6c 65 74 65 20 64   secure_delete d
56d0: 65 66 61 75 6c 74 73 0a 20 20 74 6f 20 6f 66 66  efaults.  to off
56e0: 2e 20 20 57 68 65 6e 20 74 68 69 73 20 6f 70 74  .  When this opt
56f0: 69 6f 6e 20 69 73 20 70 72 65 73 65 6e 74 2c 20  ion is present, 
5700: 73 65 63 75 72 65 5f 64 65 6c 65 74 65 20 64 65  secure_delete de
5710: 66 61 75 6c 74 73 20 74 6f 20 6f 6e 2e 0a 0a 20  faults to on... 
5720: 20 54 68 65 20 73 65 63 75 72 65 5f 64 65 6c 65   The secure_dele
5730: 74 65 20 73 65 74 74 69 6e 67 20 63 61 75 73 65  te setting cause
5740: 73 20 64 65 6c 65 74 65 64 20 63 6f 6e 74 65 6e  s deleted conten
5750: 74 20 74 6f 20 62 65 20 6f 76 65 72 77 72 69 74  t to be overwrit
5760: 74 65 6e 20 77 69 74 68 0a 20 20 7a 65 72 6f 73  ten with.  zeros
5770: 2e 20 20 54 68 65 72 65 20 69 73 20 61 20 73 6d  .  There is a sm
5780: 61 6c 6c 20 70 65 72 66 6f 72 6d 61 6e 63 65 20  all performance 
5790: 70 65 6e 61 6c 74 79 20 73 69 6e 63 65 20 61 64  penalty since ad
57a0: 64 69 74 69 6f 6e 61 6c 20 49 2f 4f 0a 20 20 6d  ditional I/O.  m
57b0: 75 73 74 20 6f 63 63 75 72 2e 20 20 4f 6e 20 74  ust occur.  On t
57c0: 68 65 20 6f 74 68 65 72 20 68 61 6e 64 2c 20 73  he other hand, s
57d0: 65 63 75 72 65 5f 64 65 6c 65 74 65 20 63 61 6e  ecure_delete can
57e0: 20 70 72 65 76 65 6e 74 20 66 72 61 67 6d 65 6e   prevent fragmen
57f0: 74 73 20 6f 66 20 0a 20 20 73 65 6e 73 69 74 69  ts of .  sensiti
5800: 76 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66  ve information f
5810: 72 6f 6d 20 6c 69 6e 67 65 72 69 6e 67 20 69 6e  rom lingering in
5820: 20 75 6e 75 73 65 64 20 70 61 72 74 73 20 6f 66   unused parts of
5830: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
5840: 6c 65 20 0a 20 20 61 66 74 65 72 20 69 74 20 68  le .  after it h
5850: 61 73 20 62 65 65 6e 20 64 65 6c 65 74 65 64 2e  as been deleted.
5860: 20 20 53 65 65 20 74 68 65 20 64 6f 63 75 6d 65    See the docume
5870: 6e 74 61 74 69 6f 6e 20 6f 6e 20 74 68 65 0a 20  ntation on the. 
5880: 20 5b 73 65 63 75 72 65 5f 64 65 6c 65 74 65 20   [secure_delete 
5890: 70 72 61 67 6d 61 5d 20 66 6f 72 20 61 64 64 69  pragma] for addi
58a0: 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
58b0: 6f 6e 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f  on..}..COMPILE_O
58c0: 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 54 48  PTION {SQLITE_TH
58d0: 52 45 41 44 53 41 46 45 3d 3c 69 3e 26 6c 74 3b  READSAFE=<i>&lt;
58e0: 30 20 6f 72 20 31 20 6f 72 20 32 26 67 74 3b 3c  0 or 1 or 2&gt;<
58f0: 2f 69 3e 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70  /i>} {.  This op
5900: 74 69 6f 6e 20 63 6f 6e 74 72 6f 6c 73 20 77 68  tion controls wh
5910: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 63 6f 64  ether or not cod
5920: 65 20 69 73 20 69 6e 63 6c 75 64 65 64 20 69 6e  e is included in
5930: 20 53 51 4c 69 74 65 20 74 6f 0a 20 20 65 6e 61   SQLite to.  ena
5940: 62 6c 65 20 69 74 20 74 6f 20 6f 70 65 72 61 74  ble it to operat
5950: 65 20 73 61 66 65 6c 79 20 69 6e 20 61 20 6d 75  e safely in a mu
5960: 6c 74 69 74 68 72 65 61 64 65 64 20 65 6e 76 69  ltithreaded envi
5970: 72 6f 6e 6d 65 6e 74 2e 20 20 54 68 65 0a 20 20  ronment.  The.  
5980: 64 65 66 61 75 6c 74 20 69 73 20 53 51 4c 49 54  default is SQLIT
5990: 45 5f 54 48 52 45 41 44 53 41 46 45 3d 31 20 77  E_THREADSAFE=1 w
59a0: 68 69 63 68 20 69 73 20 73 61 66 65 20 66 6f 72  hich is safe for
59b0: 20 75 73 65 20 69 6e 20 61 20 6d 75 6c 74 69 74   use in a multit
59c0: 68 72 65 61 64 65 64 0a 20 20 65 6e 76 69 72 6f  hreaded.  enviro
59d0: 6e 6d 65 6e 74 2e 20 20 57 68 65 6e 20 63 6f 6d  nment.  When com
59e0: 70 69 6c 65 64 20 77 69 74 68 20 53 51 4c 49 54  piled with SQLIT
59f0: 45 5f 54 48 52 45 41 44 53 41 46 45 3d 30 20 61  E_THREADSAFE=0 a
5a00: 6c 6c 20 6d 75 74 65 78 69 6e 67 20 63 6f 64 65  ll mutexing code
5a10: 0a 20 20 69 73 20 6f 6d 69 74 74 65 64 20 61 6e  .  is omitted an
5a20: 64 20 69 74 20 69 73 20 75 6e 73 61 66 65 20 74  d it is unsafe t
5a30: 6f 20 75 73 65 20 53 51 4c 69 74 65 20 69 6e 20  o use SQLite in 
5a40: 61 20 6d 75 6c 74 69 74 68 72 65 61 64 65 64 20  a multithreaded 
5a50: 70 72 6f 67 72 61 6d 2e 0a 20 20 57 68 65 6e 20  program..  When 
5a60: 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 53 51  compiled with SQ
5a70: 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45 3d  LITE_THREADSAFE=
5a80: 32 2c 20 53 51 4c 69 74 65 20 63 61 6e 20 62 65  2, SQLite can be
5a90: 20 75 73 65 64 20 69 6e 20 61 20 6d 75 6c 74 69   used in a multi
5aa0: 74 68 72 65 61 64 65 64 0a 20 20 70 72 6f 67 72  threaded.  progr
5ab0: 61 6d 20 73 6f 20 6c 6f 6e 67 20 61 73 20 6e 6f  am so long as no
5ac0: 20 74 77 6f 20 74 68 72 65 61 64 73 20 61 74 74   two threads att
5ad0: 65 6d 70 74 20 74 6f 20 75 73 65 20 74 68 65 20  empt to use the 
5ae0: 73 61 6d 65 0a 20 20 5b 64 61 74 61 62 61 73 65  same.  [database
5af0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d 20 28 6f 72   connection] (or
5b00: 20 61 6e 79 20 5b 70 72 65 70 61 72 65 64 20 73   any [prepared s
5b10: 74 61 74 65 6d 65 6e 74 73 5d 20 64 65 72 69 76  tatements] deriv
5b20: 65 64 20 66 72 6f 6d 0a 20 20 74 68 61 74 20 64  ed from.  that d
5b30: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
5b40: 6f 6e 29 20 61 74 20 74 68 65 20 73 61 6d 65 20  on) at the same 
5b50: 74 69 6d 65 2e 0a 0a 20 20 54 6f 20 70 75 74 20  time...  To put 
5b60: 69 74 20 61 6e 6f 74 68 65 72 20 77 61 79 2c 20  it another way, 
5b70: 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46  SQLITE_THREADSAF
5b80: 45 3d 31 20 73 65 74 73 20 74 68 65 20 64 65 66  E=1 sets the def
5b90: 61 75 6c 74 0a 20 20 5b 74 68 72 65 61 64 69 6e  ault.  [threadin
5ba0: 67 20 6d 6f 64 65 5d 20 74 6f 20 53 65 72 69 61  g mode] to Seria
5bb0: 6c 69 7a 65 64 2e 20 20 53 51 4c 49 54 45 5f 54  lized.  SQLITE_T
5bc0: 48 52 45 41 44 53 41 46 45 3d 32 20 73 65 74 73  HREADSAFE=2 sets
5bd0: 20 74 68 65 20 64 65 66 61 75 6c 74 0a 20 20 5b   the default.  [
5be0: 74 68 72 65 61 64 69 6e 67 20 6d 6f 64 65 5d 20  threading mode] 
5bf0: 74 6f 20 4d 75 6c 74 69 2d 74 68 72 65 61 64 65  to Multi-threade
5c00: 64 2e 20 20 41 6e 64 20 53 51 4c 49 54 45 5f 54  d.  And SQLITE_T
5c10: 48 52 45 41 44 53 41 46 45 3d 30 20 73 65 74 73  HREADSAFE=0 sets
5c20: 20 74 68 65 0a 20 20 5b 74 68 72 65 61 64 69 6e   the.  [threadin
5c30: 67 20 6d 6f 64 65 5d 20 74 6f 20 53 69 6e 67 6c  g mode] to Singl
5c40: 65 2d 74 68 72 65 61 64 65 64 2e 0a 0a 20 20 54  e-threaded...  T
5c50: 68 65 20 76 61 6c 75 65 20 6f 66 20 53 51 4c 49  he value of SQLI
5c60: 54 45 5f 54 48 52 45 41 44 53 41 46 45 20 63 61  TE_THREADSAFE ca
5c70: 6e 20 62 65 20 64 65 74 65 72 6d 69 6e 65 64 20  n be determined 
5c80: 61 74 20 72 75 6e 2d 74 69 6d 65 0a 20 20 75 73  at run-time.  us
5c90: 69 6e 67 20 74 68 65 20 5b 73 71 6c 69 74 65 33  ing the [sqlite3
5ca0: 5f 74 68 72 65 61 64 73 61 66 65 28 29 5d 20 69  _threadsafe()] i
5cb0: 6e 74 65 72 66 61 63 65 2e 0a 0a 20 20 57 68 65  nterface...  Whe
5cc0: 6e 20 53 51 4c 69 74 65 20 68 61 73 20 62 65 65  n SQLite has bee
5cd0: 6e 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20  n compiled with 
5ce0: 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46  SQLITE_THREADSAF
5cf0: 45 3d 31 20 6f 72 0a 20 20 53 51 4c 49 54 45 5f  E=1 or.  SQLITE_
5d00: 54 48 52 45 41 44 53 41 46 45 3d 32 20 74 68 65  THREADSAFE=2 the
5d10: 6e 20 74 68 65 20 5b 74 68 72 65 61 64 69 6e 67  n the [threading
5d20: 20 6d 6f 64 65 5d 0a 20 20 63 61 6e 20 62 65 20   mode].  can be 
5d30: 61 6c 74 65 72 65 64 20 61 74 20 72 75 6e 2d 74  altered at run-t
5d40: 69 6d 65 20 75 73 69 6e 67 20 74 68 65 20 5b 73  ime using the [s
5d50: 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 28 29 5d  qlite3_config()]
5d60: 20 69 6e 74 65 72 66 61 63 65 20 74 6f 67 65 74   interface toget
5d70: 68 65 72 0a 20 20 77 69 74 68 20 6f 6e 65 20 6f  her.  with one o
5d80: 66 20 74 68 65 73 65 20 76 65 72 62 73 3a 0a 0a  f these verbs:..
5d90: 20 20 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 5b 53 51    <ul>.  <li>[SQ
5da0: 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 53 49 4e 47  LITE_CONFIG_SING
5db0: 4c 45 54 48 52 45 41 44 5d 0a 20 20 3c 6c 69 3e  LETHREAD].  <li>
5dc0: 5b 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4d  [SQLITE_CONFIG_M
5dd0: 55 4c 54 49 54 48 52 45 41 44 5d 0a 20 20 3c 6c  ULTITHREAD].  <l
5de0: 69 3e 5b 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47  i>[SQLITE_CONFIG
5df0: 5f 53 45 52 49 41 4c 49 5a 45 44 5d 0a 20 20 3c  _SERIALIZED].  <
5e00: 2f 75 6c 3e 0a 0a 20 20 54 68 65 20 5b 53 51 4c  /ul>..  The [SQL
5e10: 49 54 45 5f 4f 50 45 4e 5f 4e 4f 4d 55 54 45 58  ITE_OPEN_NOMUTEX
5e20: 5d 20 61 6e 64 0a 20 20 5b 53 51 4c 49 54 45 5f  ] and.  [SQLITE_
5e30: 4f 50 45 4e 5f 46 55 4c 4c 4d 55 54 45 58 5d 20  OPEN_FULLMUTEX] 
5e40: 66 6c 61 67 73 20 74 6f 20 5b 73 71 6c 69 74 65  flags to [sqlite
5e50: 33 5f 6f 70 65 6e 5f 76 32 28 29 5d 20 63 61 6e  3_open_v2()] can
5e60: 20 61 6c 73 6f 20 62 65 20 75 73 65 64 0a 20 20   also be used.  
5e70: 74 6f 20 61 64 6a 75 73 74 20 74 68 65 20 5b 74  to adjust the [t
5e80: 68 72 65 61 64 69 6e 67 20 6d 6f 64 65 5d 20 6f  hreading mode] o
5e90: 66 20 69 6e 64 69 76 69 64 75 61 6c 20 5b 64 61  f individual [da
5ea0: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
5eb0: 6e 73 5d 0a 20 20 61 74 20 72 75 6e 2d 74 69 6d  ns].  at run-tim
5ec0: 65 2e 0a 0a 20 20 4e 6f 74 65 20 74 68 61 74 20  e...  Note that 
5ed0: 77 68 65 6e 20 53 51 4c 69 74 65 20 69 73 20 63  when SQLite is c
5ee0: 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 53 51 4c  ompiled with SQL
5ef0: 49 54 45 5f 54 48 52 45 41 44 53 41 46 45 3d 30  ITE_THREADSAFE=0
5f00: 2c 20 74 68 65 20 63 6f 64 65 0a 20 20 74 6f 20  , the code.  to 
5f10: 6d 61 6b 65 20 53 51 4c 69 74 65 20 74 68 72 65  make SQLite thre
5f20: 61 64 73 61 66 65 20 69 73 20 6f 6d 69 74 74 65  adsafe is omitte
5f30: 64 20 66 72 6f 6d 20 74 68 65 20 62 75 69 6c 64  d from the build
5f40: 2e 20 20 57 68 65 6e 20 74 68 69 73 20 6f 63 63  .  When this occ
5f50: 75 72 73 2c 0a 20 20 69 74 20 69 73 20 69 6d 70  urs,.  it is imp
5f60: 6f 73 73 69 62 6c 65 20 74 6f 20 63 68 61 6e 67  ossible to chang
5f70: 65 20 74 68 65 20 5b 74 68 72 65 61 64 69 6e 67  e the [threading
5f80: 20 6d 6f 64 65 5d 20 61 74 20 73 74 61 72 74 2d   mode] at start-
5f90: 74 69 6d 65 20 6f 72 20 72 75 6e 2d 74 69 6d 65  time or run-time
5fa0: 2e 0a 0a 20 20 53 65 65 20 74 68 65 20 5b 74 68  ...  See the [th
5fb0: 72 65 61 64 69 6e 67 20 6d 6f 64 65 5d 20 64 6f  reading mode] do
5fc0: 63 75 6d 65 6e 74 61 74 69 6f 6e 20 66 6f 72 20  cumentation for 
5fd0: 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
5fe0: 6d 61 74 69 6f 6e 0a 20 20 6f 6e 20 61 73 70 65  mation.  on aspe
5ff0: 63 74 73 20 6f 66 20 75 73 69 6e 67 20 53 51 4c  cts of using SQL
6000: 69 74 65 20 69 6e 20 61 20 6d 75 6c 74 69 74 68  ite in a multith
6010: 72 65 61 64 65 64 20 65 6e 76 69 72 6f 6e 6d 65  readed environme
6020: 6e 74 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f  nt..}..COMPILE_O
6030: 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 54 45  PTION {SQLITE_TE
6040: 4d 50 5f 53 54 4f 52 45 3d 3c 69 3e 26 6c 74 3b  MP_STORE=<i>&lt;
6050: 30 20 74 68 72 6f 75 67 68 20 33 26 67 74 3b 3c  0 through 3&gt;<
6060: 2f 69 3e 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70  /i>} {.  This op
6070: 74 69 6f 6e 20 63 6f 6e 74 72 6f 6c 73 20 77 68  tion controls wh
6080: 65 74 68 65 72 20 74 65 6d 70 6f 72 61 72 79 20  ether temporary 
6090: 66 69 6c 65 73 20 61 72 65 20 73 74 6f 72 65 64  files are stored
60a0: 20 6f 6e 20 64 69 73 6b 20 6f 72 0a 20 20 69 6e   on disk or.  in
60b0: 20 6d 65 6d 6f 72 79 2e 20 20 54 68 65 20 6d 65   memory.  The me
60c0: 61 6e 69 6e 67 73 20 66 6f 72 20 76 61 72 69 6f  anings for vario
60d0: 75 73 20 73 65 74 74 69 6e 67 73 20 6f 66 20 74  us settings of t
60e0: 68 69 73 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  his compile-time
60f0: 0a 20 20 6f 70 74 69 6f 6e 20 61 72 65 20 61 73  .  option are as
6100: 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 20 20 3c 74 61   follows:..  <ta
6110: 62 6c 65 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d  ble cellpadding=
6120: 22 32 22 20 62 6f 72 64 65 72 3d 22 31 22 3e 0a  "2" border="1">.
6130: 20 20 3c 74 72 3e 3c 74 68 3e 53 51 4c 49 54 45    <tr><th>SQLITE
6140: 5f 54 45 4d 50 5f 53 54 4f 52 45 3c 2f 74 68 3e  _TEMP_STORE</th>
6150: 3c 74 68 3e 4d 65 61 6e 69 6e 67 3c 2f 74 68 3e  <th>Meaning</th>
6160: 3c 2f 74 72 3e 0a 20 20 3c 74 72 3e 3c 74 64 20  </tr>.  <tr><td 
6170: 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 30  align="center">0
6180: 3c 2f 74 64 3e 3c 74 64 3e 41 6c 77 61 79 73 20  </td><td>Always 
6190: 75 73 65 20 74 65 6d 70 6f 72 61 72 79 20 66 69  use temporary fi
61a0: 6c 65 73 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 20 20  les</td></tr>.  
61b0: 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 22 63  <tr><td align="c
61c0: 65 6e 74 65 72 22 3e 31 3c 2f 74 64 3e 3c 74 64  enter">1</td><td
61d0: 3e 55 73 65 20 66 69 6c 65 73 20 62 79 20 64 65  >Use files by de
61e0: 66 61 75 6c 74 20 62 75 74 20 61 6c 6c 6f 77 20  fault but allow 
61f0: 74 68 65 0a 20 20 5b 50 52 41 47 4d 41 20 74 65  the.  [PRAGMA te
6200: 6d 70 5f 73 74 6f 72 65 5d 20 63 6f 6d 6d 61 6e  mp_store] comman
6210: 64 20 74 6f 20 6f 76 65 72 72 69 64 65 3c 2f 74  d to override</t
6220: 64 3e 3c 2f 74 72 3e 0a 20 20 3c 74 72 3e 3c 74  d></tr>.  <tr><t
6230: 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
6240: 3e 32 3c 2f 74 64 3e 3c 74 64 3e 55 73 65 20 6d  >2</td><td>Use m
6250: 65 6d 6f 72 79 20 62 79 20 64 65 66 61 75 6c 74  emory by default
6260: 20 62 75 74 20 61 6c 6c 6f 77 20 74 68 65 0a 20   but allow the. 
6270: 20 5b 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74   [PRAGMA temp_st
6280: 6f 72 65 5d 20 63 6f 6d 6d 61 6e 64 20 74 6f 20  ore] command to 
6290: 6f 76 65 72 72 69 64 65 3c 2f 74 64 3e 3c 2f 74  override</td></t
62a0: 72 3e 0a 20 20 3c 74 72 3e 3c 74 64 20 61 6c 69  r>.  <tr><td ali
62b0: 67 6e 3d 22 63 65 6e 74 65 72 22 3e 33 3c 2f 74  gn="center">3</t
62c0: 64 3e 3c 74 64 3e 41 6c 77 61 79 73 20 75 73 65  d><td>Always use
62d0: 20 6d 65 6d 6f 72 79 3c 2f 74 64 3e 3c 2f 74 72   memory</td></tr
62e0: 3e 0a 20 20 3c 2f 74 61 62 6c 65 3e 0a 0a 20 20  >.  </table>..  
62f0: 54 68 65 20 64 65 66 61 75 6c 74 20 73 65 74 74  The default sett
6300: 69 6e 67 20 69 73 20 31 2e 20 20 0a 20 20 41 64  ing is 1.  .  Ad
6310: 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
6320: 74 69 6f 6e 20 63 61 6e 20 62 65 20 66 6f 75 6e  tion can be foun
6330: 64 20 69 6e 20 5b 74 65 6d 70 73 74 6f 72 65 20  d in [tempstore 
6340: 7c 20 74 65 6d 70 66 69 6c 65 73 2e 68 74 6d 6c  | tempfiles.html
6350: 5d 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50  ]..}..COMPILE_OP
6360: 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 54 52 41  TION {SQLITE_TRA
6370: 43 45 5f 53 49 5a 45 5f 4c 49 4d 49 54 3d 3c 69  CE_SIZE_LIMIT=<i
6380: 3e 4e 3c 2f 69 3e 7d 20 7b 0a 20 20 49 66 20 74  >N</i>} {.  If t
6390: 68 69 73 20 6d 61 63 72 6f 20 69 73 20 64 65 66  his macro is def
63a0: 69 6e 65 64 20 74 6f 20 61 20 70 6f 73 69 74 69  ined to a positi
63b0: 76 65 20 69 6e 74 65 67 65 72 20 3c 69 3e 4e 3c  ve integer <i>N<
63c0: 2f 69 3e 2c 20 74 68 65 6e 20 74 68 65 20 6c 65  /i>, then the le
63d0: 6e 67 74 68 20 6f 66 0a 20 20 73 74 72 69 6e 67  ngth of.  string
63e0: 73 20 61 6e 64 20 42 4c 4f 42 20 74 68 61 74 20  s and BLOB that 
63f0: 61 72 65 20 65 78 70 61 6e 64 65 64 20 69 6e 74  are expanded int
6400: 6f 20 70 61 72 61 6d 65 74 65 72 73 20 69 6e 20  o parameters in 
6410: 74 68 65 20 6f 75 74 70 75 74 20 6f 66 0a 20 20  the output of.  
6420: 5b 73 71 6c 69 74 65 33 5f 74 72 61 63 65 28 29  [sqlite3_trace()
6430: 5d 20 69 73 20 6c 69 6d 69 74 65 64 20 74 6f 20  ] is limited to 
6440: 3c 69 3e 4e 3c 2f 69 3e 20 62 79 74 65 73 2e 20  <i>N</i> bytes. 
6450: 20 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54   .}..COMPILE_OPT
6460: 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 55 53 45 5f  ION {SQLITE_USE_
6470: 55 52 49 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70  URI} {.  This op
6480: 74 69 6f 6e 20 63 61 75 73 65 73 20 74 68 65 20  tion causes the 
6490: 5b 55 52 49 20 66 69 6c 65 6e 61 6d 65 5d 20 70  [URI filename] p
64a0: 72 6f 63 65 73 73 20 6c 6f 67 69 63 20 74 6f 20  rocess logic to 
64b0: 62 65 20 65 6e 61 62 6c 65 64 20 62 79 20 0a 20  be enabled by . 
64c0: 20 64 65 66 61 75 6c 74 2e 20 20 0a 7d 0a 0a 3c   default.  .}..<
64d0: 2f 74 63 6c 3e 0a 0a 3c 61 20 6e 61 6d 65 3d 22  /tcl>..<a name="
64e0: 65 6e 61 62 6c 65 66 65 61 74 75 72 65 73 22 3e  enablefeatures">
64f0: 3c 2f 61 3e 0a 3c 68 31 3e 20 4f 70 74 69 6f 6e  </a>.<h1> Option
6500: 73 20 54 6f 20 45 6e 61 62 6c 65 20 46 65 61 74  s To Enable Feat
6510: 75 72 65 73 20 4e 6f 72 6d 61 6c 6c 79 20 54 75  ures Normally Tu
6520: 72 6e 65 64 20 4f 66 66 3c 2f 68 31 3e 0a 0a 3c  rned Off</h1>..<
6530: 74 63 6c 3e 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54  tcl>.COMPILE_OPT
6540: 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 41 4c 4c 4f  ION {SQLITE_ALLO
6550: 57 5f 55 52 49 5f 41 55 54 48 4f 52 49 54 59 7d  W_URI_AUTHORITY}
6560: 20 7b 0a 20 20 5b 55 52 49 20 66 69 6c 65 6e 61   {.  [URI filena
6570: 6d 65 73 5d 20 6e 6f 72 6d 61 6c 6c 79 20 74 68  mes] normally th
6580: 72 6f 77 73 20 61 6e 20 65 72 72 6f 72 20 69 66  rows an error if
6590: 20 74 68 65 20 61 75 74 68 6f 72 69 74 79 20 73   the authority s
65a0: 65 63 74 69 6f 6e 20 69 73 0a 20 20 6e 6f 74 20  ection is.  not 
65b0: 65 69 74 68 65 72 20 65 6d 70 74 79 20 6f 72 20  either empty or 
65c0: 22 6c 6f 63 61 6c 68 6f 73 74 22 2e 20 20 48 6f  "localhost".  Ho
65d0: 77 65 76 65 72 2c 20 69 66 20 53 51 4c 69 74 65  wever, if SQLite
65e0: 20 69 73 20 63 6f 6d 70 69 6c 65 64 20 77 69 74   is compiled wit
65f0: 68 0a 20 20 74 68 65 20 53 51 4c 49 54 45 5f 41  h.  the SQLITE_A
6600: 4c 4c 4f 57 5f 55 52 49 5f 41 55 54 48 4f 52 49  LLOW_URI_AUTHORI
6610: 54 59 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  TY compile-time 
6620: 6f 70 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65  option, then the
6630: 20 55 52 49 20 69 73 0a 20 20 63 6f 6e 76 65 72   URI is.  conver
6640: 74 65 64 20 69 6e 74 6f 20 61 20 55 6e 69 66 6f  ted into a Unifo
6650: 72 6d 20 4e 61 6d 69 6e 67 20 43 6f 6e 76 65 6e  rm Naming Conven
6660: 74 69 6f 6e 20 28 55 4e 43 29 20 66 69 6c 65 6e  tion (UNC) filen
6670: 61 6d 65 20 61 6e 64 20 70 61 73 73 65 64 0a 20  ame and passed. 
6680: 20 64 6f 77 6e 20 74 6f 20 74 68 65 20 75 6e 64   down to the und
6690: 65 72 6c 79 69 6e 67 20 6f 70 65 72 61 74 69 6e  erlying operatin
66a0: 67 20 73 79 73 74 65 6d 20 74 68 61 74 20 77 61  g system that wa
66b0: 79 2e 20 20 0a 20 20 3c 70 3e 0a 20 20 53 6f 6d  y.  .  <p>.  Som
66c0: 65 20 66 75 74 75 72 65 20 76 65 72 73 69 6f 6e  e future version
66d0: 73 20 6f 66 20 53 51 4c 69 74 65 20 6d 61 79 20  s of SQLite may 
66e0: 63 68 61 6e 67 65 20 74 6f 20 65 6e 61 62 6c 65  change to enable
66f0: 20 74 68 69 73 20 66 65 61 74 75 72 65 0a 20 20   this feature.  
6700: 62 79 20 64 65 66 61 75 6c 74 2e 0a 7d 0a 43 4f  by default..}.CO
6710: 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51  MPILE_OPTION {SQ
6720: 4c 49 54 45 5f 41 4c 4c 4f 57 5f 43 4f 56 45 52  LITE_ALLOW_COVER
6730: 49 4e 47 5f 49 4e 44 45 58 5f 53 43 41 4e 3d 3c  ING_INDEX_SCAN=<
6740: 69 3e 26 6c 74 3b 30 20 6f 72 20 31 26 67 74 3b  i>&lt;0 or 1&gt;
6750: 3c 2f 69 3e 7d 20 7b 0a 20 20 54 68 69 73 20 43  </i>} {.  This C
6760: 2d 70 72 65 70 72 6f 63 65 73 73 20 6d 61 63 72  -preprocess macr
6770: 6f 20 64 65 74 65 72 6d 69 6e 65 73 20 74 68 65  o determines the
6780: 20 64 65 66 61 75 6c 74 20 73 65 74 74 69 6e 67   default setting
6790: 20 6f 66 20 74 68 65 0a 20 20 5b 53 51 4c 49 54   of the.  [SQLIT
67a0: 45 5f 43 4f 4e 46 49 47 5f 43 4f 56 45 52 49 4e  E_CONFIG_COVERIN
67b0: 47 5f 49 4e 44 45 58 5f 53 43 41 4e 5d 20 63 6f  G_INDEX_SCAN] co
67c0: 6e 66 69 67 75 72 61 74 69 6f 6e 20 73 65 74 74  nfiguration sett
67d0: 69 6e 67 2e 20 20 49 74 20 64 65 66 61 75 6c 74  ing.  It default
67e0: 73 0a 20 20 74 6f 20 31 20 28 6f 6e 29 20 77 68  s.  to 1 (on) wh
67f0: 69 63 68 20 6d 65 61 6e 73 20 74 68 61 74 20 63  ich means that c
6800: 6f 76 65 72 69 6e 67 20 69 6e 64 69 63 65 73 20  overing indices 
6810: 61 72 65 20 75 73 65 64 20 66 6f 72 20 66 75 6c  are used for ful
6820: 6c 20 74 61 62 6c 65 0a 20 20 73 63 61 6e 73 20  l table.  scans 
6830: 77 68 65 72 65 20 70 6f 73 73 69 62 6c 65 2c 20  where possible, 
6840: 69 6e 20 6f 72 64 65 72 20 74 6f 20 72 65 64 75  in order to redu
6850: 63 65 20 49 2f 4f 20 61 6e 64 20 69 6d 70 72 6f  ce I/O and impro
6860: 76 65 20 70 65 72 66 6f 72 6d 61 6e 63 65 2e 0a  ve performance..
6870: 20 20 48 6f 77 65 76 65 72 2c 20 74 68 65 20 75    However, the u
6880: 73 65 20 6f 66 20 61 20 63 6f 76 65 72 69 6e 67  se of a covering
6890: 20 69 6e 64 65 78 20 66 6f 72 20 61 20 66 75 6c   index for a ful
68a0: 6c 20 73 63 61 6e 20 77 69 6c 6c 20 63 61 75 73  l scan will caus
68b0: 65 20 72 65 73 75 6c 74 73 0a 20 20 74 6f 20 61  e results.  to a
68c0: 70 70 65 61 72 20 69 6e 20 61 20 64 69 66 66 65  ppear in a diffe
68d0: 72 65 6e 74 20 6f 72 64 65 72 20 66 72 6f 6d 20  rent order from 
68e0: 6c 65 67 61 63 79 2c 20 77 68 69 63 68 20 63 6f  legacy, which co
68f0: 75 6c 64 20 63 61 75 73 65 20 73 6f 6d 65 0a 20  uld cause some. 
6900: 20 28 69 6e 63 6f 72 72 65 63 74 6c 79 2d 63 6f   (incorrectly-co
6910: 64 65 64 29 20 6c 65 67 61 63 79 20 61 70 70 6c  ded) legacy appl
6920: 69 63 61 74 69 6f 6e 73 20 74 6f 20 62 72 65 61  ications to brea
6930: 6b 2e 20 20 48 65 6e 63 65 2c 20 74 68 65 20 63  k.  Hence, the c
6940: 6f 76 65 72 69 6e 67 0a 20 20 69 6e 64 65 78 20  overing.  index 
6950: 73 63 61 6e 20 6f 70 74 69 6f 6e 20 63 61 6e 20  scan option can 
6960: 62 65 20 64 69 73 61 62 6c 65 64 20 61 74 20 63  be disabled at c
6970: 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 6e 20 73  ompile-time on s
6980: 79 73 74 65 6d 73 20 74 68 61 74 20 77 68 61 74  ystems that what
6990: 0a 20 20 74 6f 20 6d 69 6e 69 6d 69 7a 65 20 74  .  to minimize t
69a0: 68 65 69 72 20 72 69 73 6b 20 6f 66 20 65 78 70  heir risk of exp
69b0: 6f 73 69 6e 67 20 65 72 72 6f 72 73 20 69 6e 20  osing errors in 
69c0: 6c 65 67 61 63 79 20 61 70 70 6c 69 63 61 74 69  legacy applicati
69d0: 6f 6e 73 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f  ons..}..COMPILE_
69e0: 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 45  OPTION {SQLITE_E
69f0: 4e 41 42 4c 45 5f 38 5f 33 5f 4e 41 4d 45 53 3d  NABLE_8_3_NAMES=
6a00: 3c 69 3e 26 6c 74 3b 31 20 6f 72 20 32 26 67 74  <i>&lt;1 or 2&gt
6a10: 3b 3c 2f 69 3e 7d 20 7b 0a 20 20 49 66 20 74 68  ;</i>} {.  If th
6a20: 69 73 20 43 2d 70 72 65 70 72 6f 63 65 73 73 6f  is C-preprocesso
6a30: 72 20 6d 61 63 72 6f 20 69 73 20 64 65 66 69 6e  r macro is defin
6a40: 65 64 2c 20 74 68 65 6e 20 65 78 74 72 61 20 63  ed, then extra c
6a50: 6f 64 65 20 69 73 0a 20 20 69 6e 63 6c 75 64 65  ode is.  include
6a60: 64 20 74 68 61 74 20 61 6c 6c 6f 77 73 20 53 51  d that allows SQ
6a70: 4c 69 74 65 20 74 6f 20 66 75 6e 63 74 69 6f 6e  Lite to function
6a80: 20 6f 6e 20 61 20 66 69 6c 65 73 79 73 74 65 6d   on a filesystem
6a90: 20 74 68 61 74 0a 20 20 6f 6e 6c 79 20 73 75 70   that.  only sup
6aa0: 70 6f 72 74 20 38 2b 33 20 66 69 6c 65 6e 61 6d  port 8+3 filenam
6ab0: 65 73 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75  es.  If the valu
6ac0: 65 20 6f 66 20 74 68 69 73 20 6d 61 63 72 6f 20  e of this macro 
6ad0: 69 73 20 31 2c 0a 20 20 74 68 65 6e 20 74 68 65  is 1,.  then the
6ae0: 20 64 65 66 61 75 6c 74 20 62 65 68 61 76 69 6f   default behavio
6af0: 72 20 69 73 20 74 6f 20 63 6f 6e 74 69 6e 75 65  r is to continue
6b00: 20 74 6f 20 75 73 65 20 6c 6f 6e 67 20 66 69 6c   to use long fil
6b10: 65 6e 61 6d 65 73 20 61 6e 64 0a 20 20 74 6f 20  enames and.  to 
6b20: 6f 6e 6c 79 20 75 73 65 20 38 2b 33 20 66 69 6c  only use 8+3 fil
6b30: 65 6e 61 6d 65 73 20 69 66 20 74 68 65 20 0a 20  enames if the . 
6b40: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
6b50: 74 69 6f 6e 20 69 73 20 6f 70 65 6e 65 64 20 75  tion is opened u
6b60: 73 69 6e 67 20 5b 55 52 49 20 66 69 6c 65 6e 61  sing [URI filena
6b70: 6d 65 73 5d 20 77 69 74 68 0a 20 20 74 68 65 20  mes] with.  the 
6b80: 22 3c 74 74 3e 38 5f 33 5f 6e 61 6d 65 73 3d 31  "<tt>8_3_names=1
6b90: 3c 2f 74 74 3e 22 20 71 75 65 72 79 20 70 61 72  </tt>" query par
6ba0: 61 6d 65 74 65 72 2e 20 20 49 66 20 74 68 65 20  ameter.  If the 
6bb0: 76 61 6c 75 65 20 6f 66 0a 20 20 74 68 69 73 20  value of.  this 
6bc0: 6d 61 63 72 6f 20 69 73 20 32 2c 20 74 68 65 6e  macro is 2, then
6bd0: 20 74 68 65 20 75 73 65 20 6f 66 20 38 2b 33 20   the use of 8+3 
6be0: 66 69 6c 65 6e 61 6d 65 73 20 62 65 63 6f 6d 65  filenames become
6bf0: 73 20 74 68 65 20 64 65 66 61 75 6c 74 0a 20 20  s the default.  
6c00: 62 75 74 20 6d 61 79 20 62 65 20 64 69 73 61 62  but may be disab
6c10: 6c 65 64 20 6f 6e 20 75 73 69 6e 67 20 74 68 65  led on using the
6c20: 20 3c 74 74 3e 38 5f 33 5f 6e 61 6d 65 73 3d 30   <tt>8_3_names=0
6c30: 3c 2f 74 74 3e 20 71 75 65 72 79 20 70 61 72 61  </tt> query para
6c40: 6d 65 74 65 72 2e 0a 20 20 53 65 65 20 0a 7d 0a  meter..  See .}.
6c50: 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20  .COMPILE_OPTION 
6c60: 7b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41  {SQLITE_ENABLE_A
6c70: 50 49 5f 41 52 4d 4f 52 7d 20 7b 0a 20 20 57 68  PI_ARMOR} {.  Wh
6c80: 65 6e 20 64 65 66 69 6e 65 64 2c 20 74 68 69 73  en defined, this
6c90: 20 43 2d 70 72 65 70 72 6f 63 65 73 73 6f 72 20   C-preprocessor 
6ca0: 6d 61 63 72 6f 20 61 63 74 69 76 61 74 65 73 20  macro activates 
6cb0: 65 78 74 72 61 20 63 6f 64 65 20 74 68 61 74 0a  extra code that.
6cc0: 20 20 61 74 74 65 6d 70 74 73 20 74 6f 20 64 65    attempts to de
6cd0: 74 65 63 74 20 6d 69 73 75 73 65 20 6f 66 20 74  tect misuse of t
6ce0: 68 65 20 53 51 4c 69 74 65 20 41 50 49 2c 20 73  he SQLite API, s
6cf0: 75 63 68 20 61 73 20 70 61 73 73 69 6e 67 20 69  uch as passing i
6d00: 6e 20 4e 55 4c 4c 0a 20 20 70 6f 69 6e 74 65 72  n NULL.  pointer
6d10: 73 20 74 6f 20 72 65 71 75 69 72 65 64 20 70 61  s to required pa
6d20: 72 61 6d 65 74 65 72 73 20 6f 72 20 75 73 69 6e  rameters or usin
6d30: 67 20 6f 62 6a 65 63 74 73 20 61 66 74 65 72 20  g objects after 
6d40: 74 68 65 79 20 68 61 76 65 20 62 65 65 6e 0a 20  they have been. 
6d50: 20 64 65 73 74 72 6f 79 65 64 2e 0a 7d 0a 0a 43   destroyed..}..C
6d60: 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53  OMPILE_OPTION {S
6d70: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41 54 4f  QLITE_ENABLE_ATO
6d80: 4d 49 43 5f 57 52 49 54 45 7d 20 7b 0a 20 20 49  MIC_WRITE} {.  I
6d90: 66 20 74 68 69 73 20 43 2d 70 72 65 70 72 6f 63  f this C-preproc
6da0: 65 73 73 6f 72 20 6d 61 63 72 6f 20 69 73 20 64  essor macro is d
6db0: 65 66 69 6e 65 64 20 61 6e 64 20 69 66 20 74 68  efined and if th
6dc0: 65 0a 20 20 78 44 65 76 69 63 65 43 68 61 72 61  e.  xDeviceChara
6dd0: 63 74 65 72 69 73 74 69 63 73 20 6d 65 74 68 6f  cteristics metho
6de0: 64 20 6f 66 20 5b 73 71 6c 69 74 65 33 5f 69 6f  d of [sqlite3_io
6df0: 5f 6d 65 74 68 6f 64 73 5d 20 6f 62 6a 65 63 74  _methods] object
6e00: 20 66 6f 72 0a 20 20 61 20 64 61 74 61 62 61 73   for.  a databas
6e10: 65 20 66 69 6c 65 20 72 65 70 6f 72 74 73 20 28  e file reports (
6e20: 76 69 61 20 6f 6e 65 20 6f 66 20 74 68 65 20 5b  via one of the [
6e30: 53 51 4c 49 54 45 5f 49 4f 43 41 50 5f 41 54 4f  SQLITE_IOCAP_ATO
6e40: 4d 49 43 5d 20 62 69 74 73 29 0a 20 20 74 68 61  MIC] bits).  tha
6e50: 74 20 74 68 65 20 66 69 6c 65 73 79 73 74 65 6d  t the filesystem
6e60: 20 73 75 70 70 6f 72 74 73 20 61 74 6f 6d 69 63   supports atomic
6e70: 20 77 72 69 74 65 73 20 61 6e 64 20 69 66 20 61   writes and if a
6e80: 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 20 20 69   transaction.  i
6e90: 6e 76 6f 6c 76 65 73 20 61 20 63 68 61 6e 67 65  nvolves a change
6ea0: 20 74 6f 20 6f 6e 6c 79 20 61 20 73 69 6e 67 6c   to only a singl
6eb0: 65 20 70 61 67 65 20 6f 66 20 74 68 65 20 64 61  e page of the da
6ec0: 74 61 62 61 73 65 20 66 69 6c 65 2c 0a 20 20 74  tabase file,.  t
6ed0: 68 65 6e 20 74 68 65 20 74 72 61 6e 73 61 63 74  hen the transact
6ee0: 69 6f 6e 20 63 6f 6d 6d 69 74 73 20 77 69 74 68  ion commits with
6ef0: 20 6a 75 73 74 20 61 20 73 69 6e 67 6c 65 20 77   just a single w
6f00: 72 69 74 65 20 72 65 71 75 65 73 74 20 6f 66 0a  rite request of.
6f10: 20 20 61 20 73 69 6e 67 6c 65 20 70 61 67 65 20    a single page 
6f20: 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
6f30: 61 6e 64 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 20  and no rollback 
6f40: 6a 6f 75 72 6e 61 6c 20 69 73 20 63 72 65 61 74  journal is creat
6f50: 65 64 0a 20 20 6f 72 20 77 72 69 74 74 65 6e 2e  ed.  or written.
6f60: 20 20 4f 6e 20 66 69 6c 65 73 79 73 74 65 6d 73    On filesystems
6f70: 20 74 68 61 74 20 73 75 70 70 6f 72 74 20 61 74   that support at
6f80: 6f 6d 69 63 20 77 72 69 74 65 73 2c 20 74 68 69  omic writes, thi
6f90: 73 0a 20 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  s.  optimization
6fa0: 20 63 61 6e 20 72 65 73 75 6c 74 20 69 6e 20 73   can result in s
6fb0: 69 67 6e 69 66 69 63 61 6e 74 20 73 70 65 65 64  ignificant speed
6fc0: 20 69 6d 70 72 6f 76 65 6d 65 6e 74 73 20 66 6f   improvements fo
6fd0: 72 0a 20 20 73 6d 61 6c 6c 20 75 70 64 61 74 65  r.  small update
6fe0: 73 2e 20 20 48 6f 77 65 76 65 72 2c 20 66 65 77  s.  However, few
6ff0: 20 66 69 6c 65 73 79 73 74 65 6d 73 20 73 75 70   filesystems sup
7000: 70 6f 72 74 20 74 68 69 73 20 63 61 70 61 62 69  port this capabi
7010: 6c 69 74 79 0a 20 20 61 6e 64 20 74 68 65 20 63  lity.  and the c
7020: 6f 64 65 20 70 61 74 68 73 20 74 68 61 74 20 63  ode paths that c
7030: 68 65 63 6b 20 66 6f 72 20 74 68 69 73 20 63 61  heck for this ca
7040: 70 61 62 69 6c 69 74 79 20 73 6c 6f 77 20 64 6f  pability slow do
7050: 77 6e 20 77 72 69 74 65 0a 20 20 70 65 72 66 6f  wn write.  perfo
7060: 72 6d 61 6e 63 65 20 6f 6e 20 73 79 73 74 65 6d  rmance on system
7070: 73 20 74 68 61 74 20 6c 61 63 6b 20 61 74 6f 6d  s that lack atom
7080: 69 63 20 77 72 69 74 65 20 63 61 70 61 62 69 6c  ic write capabil
7090: 69 74 79 2c 20 73 6f 20 74 68 69 73 0a 20 20 66  ity, so this.  f
70a0: 65 61 74 75 72 65 20 69 73 20 64 69 73 61 62 6c  eature is disabl
70b0: 65 64 20 62 79 20 64 65 66 61 75 6c 74 2e 0a 7d  ed by default..}
70c0: 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e  ..COMPILE_OPTION
70d0: 20 7b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f   {SQLITE_ENABLE_
70e0: 43 4f 4c 55 4d 4e 5f 4d 45 54 41 44 41 54 41 7d  COLUMN_METADATA}
70f0: 20 7b 0a 20 20 57 68 65 6e 20 74 68 69 73 20 43   {.  When this C
7100: 2d 70 72 65 70 72 6f 63 65 73 73 6f 72 20 6d 61  -preprocessor ma
7110: 63 72 6f 20 69 73 20 64 65 66 69 6e 65 64 2c 20  cro is defined, 
7120: 53 51 4c 69 74 65 20 69 6e 63 6c 75 64 65 73 20  SQLite includes 
7130: 73 6f 6d 65 0a 20 20 61 64 64 69 74 69 6f 6e 61  some.  additiona
7140: 6c 20 41 50 49 73 20 74 68 61 74 20 70 72 6f 76  l APIs that prov
7150: 69 64 65 20 63 6f 6e 76 65 6e 69 65 6e 74 20 61  ide convenient a
7160: 63 63 65 73 73 20 74 6f 20 6d 65 74 61 2d 64 61  ccess to meta-da
7170: 74 61 20 61 62 6f 75 74 0a 20 20 74 61 62 6c 65  ta about.  table
7180: 73 20 61 6e 64 20 71 75 65 72 69 65 73 2e 20 20  s and queries.  
7190: 54 68 65 20 41 50 49 73 20 74 68 61 74 20 61 72  The APIs that ar
71a0: 65 20 65 6e 61 62 6c 65 64 20 62 79 20 74 68 69  e enabled by thi
71b0: 73 20 6f 70 74 69 6f 6e 20 61 72 65 3a 0a 0a 20  s option are:.. 
71c0: 20 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 20 5b 73 71   <ul>.  <li> [sq
71d0: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 61 74  lite3_column_dat
71e0: 61 62 61 73 65 5f 6e 61 6d 65 28 29 5d 20 3c 2f  abase_name()] </
71f0: 6c 69 3e 0a 20 20 3c 6c 69 3e 20 5b 73 71 6c 69  li>.  <li> [sqli
7200: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61 62  te3_column_datab
7210: 61 73 65 5f 6e 61 6d 65 31 36 28 29 5d 20 3c 2f  ase_name16()] </
7220: 6c 69 3e 0a 20 20 3c 6c 69 3e 20 5b 73 71 6c 69  li>.  <li> [sqli
7230: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 61 62 6c 65  te3_column_table
7240: 5f 6e 61 6d 65 28 29 5d 20 3c 2f 6c 69 3e 0a 20  _name()] </li>. 
7250: 20 3c 6c 69 3e 20 5b 73 71 6c 69 74 65 33 5f 63   <li> [sqlite3_c
7260: 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65  olumn_table_name
7270: 31 36 28 29 5d 20 3c 2f 6c 69 3e 0a 20 20 3c 6c  16()] </li>.  <l
7280: 69 3e 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75  i> [sqlite3_colu
7290: 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65 28 29  mn_origin_name()
72a0: 5d 20 3c 2f 6c 69 3e 0a 20 20 3c 6c 69 3e 20 5b  ] </li>.  <li> [
72b0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f  sqlite3_column_o
72c0: 72 69 67 69 6e 5f 6e 61 6d 65 31 36 28 29 5d 20  rigin_name16()] 
72d0: 3c 2f 6c 69 3e 0a 20 20 3c 2f 75 6c 3e 0a 7d 0a  </li>.  </ul>.}.
72e0: 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20  .COMPILE_OPTION 
72f0: 7b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 44  {SQLITE_ENABLE_D
7300: 42 53 54 41 54 5f 56 54 41 42 7d 20 7b 0a 20 20  BSTAT_VTAB} {.  
7310: 54 68 69 73 20 6f 70 74 69 6f 6e 20 65 6e 61 62  This option enab
7320: 6c 65 73 20 74 68 65 20 5b 64 62 73 74 61 74 20  les the [dbstat 
7330: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 5d 2e 0a  virtual table]..
7340: 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f  }..COMPILE_OPTIO
7350: 4e 20 7b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  N {SQLITE_ENABLE
7360: 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54  _EXPLAIN_COMMENT
7370: 53 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70 74 69  S} {.  This opti
7380: 6f 6e 20 61 64 64 73 20 65 78 74 72 61 20 6c 6f  on adds extra lo
7390: 67 69 63 20 74 6f 20 53 51 4c 69 74 65 20 74 68  gic to SQLite th
73a0: 61 74 20 69 6e 73 65 72 74 73 20 63 6f 6d 6d 65  at inserts comme
73b0: 6e 74 20 74 65 78 74 20 69 6e 74 6f 20 74 68 65  nt text into the
73c0: 0a 20 20 6f 75 74 70 75 74 20 6f 66 20 5b 45 58  .  output of [EX
73d0: 50 4c 41 49 4e 5d 2e 20 20 54 68 65 73 65 20 65  PLAIN].  These e
73e0: 78 74 72 61 20 63 6f 6d 6d 65 6e 74 73 20 75 73  xtra comments us
73f0: 65 20 65 78 74 72 61 20 6d 65 6d 6f 72 79 2c 20  e extra memory, 
7400: 74 68 75 73 0a 20 20 6d 61 6b 69 6e 67 20 5b 70  thus.  making [p
7410: 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
7420: 74 73 5d 20 6c 61 72 67 65 72 20 61 6e 64 20 76  ts] larger and v
7430: 65 72 79 20 73 6c 69 67 68 74 6c 79 20 73 6c 6f  ery slightly slo
7440: 77 65 72 2c 20 61 6e 64 20 73 6f 20 74 68 65 79  wer, and so they
7450: 20 61 72 65 0a 20 20 74 75 72 6e 65 64 20 6f 66   are.  turned of
7460: 66 20 62 79 20 64 65 66 61 75 6c 74 20 61 6e 64  f by default and
7470: 20 69 6e 20 6d 6f 73 74 20 61 70 70 6c 69 63 61   in most applica
7480: 74 69 6f 6e 2e 20 20 42 75 74 20 73 6f 6d 65 20  tion.  But some 
7490: 61 70 70 6c 69 63 61 74 69 6f 6e 73 2c 20 73 75  applications, su
74a0: 63 68 0a 20 20 61 73 20 74 68 65 20 5b 63 6f 6d  ch.  as the [com
74b0: 6d 61 6e 64 2d 6c 69 6e 65 20 73 68 65 6c 6c 5d  mand-line shell]
74c0: 20 66 6f 72 20 53 51 4c 69 74 65 2c 20 76 61 6c   for SQLite, val
74d0: 75 65 20 63 6c 61 72 69 74 79 20 6f 66 20 45 58  ue clarity of EX
74e0: 50 4c 41 49 4e 20 6f 75 74 70 75 74 0a 20 20 6f  PLAIN output.  o
74f0: 76 65 72 20 72 61 77 20 70 65 72 66 6f 72 6d 61  ver raw performa
7500: 6e 63 65 20 61 6e 64 20 73 6f 20 74 68 69 73 20  nce and so this 
7510: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74  compile-time opt
7520: 69 6f 6e 20 69 73 20 61 76 61 69 6c 61 62 6c 65  ion is available
7530: 20 74 6f 20 74 68 65 6d 2e 0a 20 20 54 68 65 20   to them..  The 
7540: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58  SQLITE_ENABLE_EX
7550: 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 63  PLAIN_COMMENTS c
7560: 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69  ompile-time opti
7570: 6f 6e 20 69 73 20 61 6c 73 6f 20 65 6e 61 62 6c  on is also enabl
7580: 65 64 0a 20 20 61 75 74 6f 6d 61 74 69 63 61 6c  ed.  automatical
7590: 6c 79 20 69 66 20 5b 53 51 4c 49 54 45 5f 44 45  ly if [SQLITE_DE
75a0: 42 55 47 5d 20 69 73 20 65 6e 61 62 6c 65 64 2e  BUG] is enabled.
75b0: 0a 7d 0a 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54  .}...COMPILE_OPT
75c0: 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 45 4e 41 42  ION {SQLITE_ENAB
75d0: 4c 45 5f 46 54 53 33 7d 20 7b 0a 20 20 57 68 65  LE_FTS3} {.  Whe
75e0: 6e 20 74 68 69 73 20 6f 70 74 69 6f 6e 20 69 73  n this option is
75f0: 20 64 65 66 69 6e 65 64 20 69 6e 20 74 68 65 20   defined in the 
7600: 5b 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 5d 2c 20  [amalgamation], 
7610: 76 65 72 73 69 6f 6e 20 33 0a 20 20 6f 66 20 74  version 3.  of t
7620: 68 65 20 66 75 6c 6c 2d 74 65 78 74 20 73 65 61  he full-text sea
7630: 72 63 68 20 65 6e 67 69 6e 65 20 69 73 20 61 64  rch engine is ad
7640: 64 65 64 20 74 6f 20 74 68 65 20 62 75 69 6c 64  ded to the build
7650: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a   automatically..
7660: 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f  }..COMPILE_OPTIO
7670: 4e 20 7b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  N {SQLITE_ENABLE
7680: 5f 46 54 53 33 5f 50 41 52 45 4e 54 48 45 53 49  _FTS3_PARENTHESI
7690: 53 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70 74 69  S} {.  This opti
76a0: 6f 6e 20 6d 6f 64 69 66 69 65 73 20 74 68 65 20  on modifies the 
76b0: 71 75 65 72 79 20 70 61 74 74 65 72 6e 20 70 61  query pattern pa
76c0: 72 73 65 72 20 69 6e 20 46 54 53 33 20 73 75 63  rser in FTS3 suc
76d0: 68 20 74 68 61 74 20 69 74 0a 20 20 73 75 70 70  h that it.  supp
76e0: 6f 72 74 73 20 6f 70 65 72 61 74 6f 72 73 20 41  orts operators A
76f0: 4e 44 20 61 6e 64 20 4e 4f 54 20 28 69 6e 20 61  ND and NOT (in a
7700: 64 64 69 74 69 6f 6e 20 74 6f 20 74 68 65 20 75  ddition to the u
7710: 73 75 61 6c 20 4f 52 20 61 6e 64 20 4e 45 41 52  sual OR and NEAR
7720: 29 0a 20 20 61 6e 64 20 61 6c 73 6f 20 61 6c 6c  ).  and also all
7730: 6f 77 73 20 71 75 65 72 79 20 65 78 70 72 65 73  ows query expres
7740: 73 69 6f 6e 73 20 74 6f 20 63 6f 6e 74 61 69 6e  sions to contain
7750: 20 6e 65 73 74 65 64 20 70 61 72 65 6e 74 68 65   nested parenthe
7760: 73 69 73 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f  sis..}..COMPILE_
7770: 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 45  OPTION {SQLITE_E
7780: 4e 41 42 4c 45 5f 46 54 53 33 5f 54 4f 4b 45 4e  NABLE_FTS3_TOKEN
7790: 49 5a 45 52 7d 20 7b 0a 20 20 54 68 69 73 20 6f  IZER} {.  This o
77a0: 70 74 69 6f 6e 20 65 6e 61 62 6c 65 73 20 74 68  ption enables th
77b0: 65 20 74 77 6f 2d 61 72 67 75 6d 65 6e 74 20 76  e two-argument v
77c0: 65 72 73 69 6f 6e 20 6f 66 20 74 68 65 20 5b 66  ersion of the [f
77d0: 74 73 33 5f 74 6f 6b 65 6e 69 7a 65 72 28 29 5d  ts3_tokenizer()]
77e0: 0a 20 20 69 6e 74 65 72 66 61 63 65 2e 20 20 54  .  interface.  T
77f0: 68 65 20 73 65 63 6f 6e 64 20 61 72 67 75 6d 65  he second argume
7800: 6e 74 20 74 6f 20 66 74 73 33 5f 74 6f 6b 65 6e  nt to fts3_token
7810: 69 7a 65 72 28 29 20 69 73 20 73 75 70 70 6f 73  izer() is suppos
7820: 65 20 74 6f 20 62 65 20 61 0a 20 20 70 6f 69 6e  e to be a.  poin
7830: 74 65 72 20 74 6f 20 61 20 66 75 6e 63 74 69 6f  ter to a functio
7840: 6e 20 28 65 6e 63 6f 64 65 64 20 61 73 20 61 20  n (encoded as a 
7850: 42 4c 4f 42 29 20 74 68 61 74 20 69 6d 70 6c 65  BLOB) that imple
7860: 6d 65 6e 74 73 20 61 6e 0a 20 20 61 70 70 6c 69  ments an.  appli
7870: 63 61 74 69 6f 6e 20 64 65 66 69 6e 65 64 20 74  cation defined t
7880: 6f 6b 65 6e 69 7a 65 72 2e 20 20 49 66 20 68 6f  okenizer.  If ho
7890: 73 74 69 6c 65 20 61 63 74 6f 72 73 20 61 72 65  stile actors are
78a0: 20 61 62 6c 65 20 74 6f 20 72 75 6e 0a 20 20 74   able to run.  t
78b0: 68 65 20 74 77 6f 2d 61 72 67 75 6d 65 6e 74 20  he two-argument 
78c0: 76 65 72 73 69 6f 6e 20 6f 66 20 66 74 73 33 5f  version of fts3_
78d0: 74 6f 6b 65 6e 69 7a 65 72 28 29 20 77 69 74 68  tokenizer() with
78e0: 20 61 6e 20 61 72 62 69 74 72 61 72 79 20 73 65   an arbitrary se
78f0: 63 6f 6e 64 0a 20 20 61 72 67 75 6d 65 6e 74 2c  cond.  argument,
7900: 20 74 68 65 79 20 63 6f 75 6c 64 20 75 73 65 20   they could use 
7910: 63 72 61 73 68 20 6f 72 20 74 61 6b 65 20 63 6f  crash or take co
7920: 6e 74 72 6f 6c 20 6f 66 20 74 68 65 20 70 72 6f  ntrol of the pro
7930: 63 65 73 73 2e 20 0a 20 20 3c 70 3e 0a 20 20 42  cess. .  <p>.  B
7940: 65 63 61 75 73 65 20 6f 66 20 73 65 63 75 72 69  ecause of securi
7950: 74 79 20 63 6f 6e 63 65 72 6e 73 2c 20 74 68 65  ty concerns, the
7960: 20 74 77 6f 2d 61 72 67 75 6d 65 6e 74 20 66 74   two-argument ft
7970: 73 33 5f 74 6f 6b 65 6e 69 7a 65 72 28 29 20 66  s3_tokenizer() f
7980: 65 61 74 75 72 65 20 0a 20 20 77 61 73 20 64 69  eature .  was di
7990: 73 61 62 6c 65 64 20 62 65 67 69 6e 6e 69 6e 67  sabled beginning
79a0: 20 77 69 74 68 20 5b 56 65 72 73 69 6f 6e 20 33   with [Version 3
79b0: 2e 31 31 2e 30 5d 20 75 6e 6c 65 73 73 20 74 68  .11.0] unless th
79c0: 69 73 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 0a  is compile-time.
79d0: 20 20 6f 70 74 69 6f 6e 20 69 73 20 75 73 65 64    option is used
79e0: 2e 0a 20 20 5b 56 65 72 73 69 6f 6e 20 33 2e 31  ..  [Version 3.1
79f0: 32 2e 30 5d 20 61 64 64 65 64 20 74 68 65 20 0a  2.0] added the .
7a00: 20 20 5b 73 71 6c 69 74 65 33 5f 64 62 5f 63 6f    [sqlite3_db_co
7a10: 6e 66 69 67 5d 28 64 62 2c 5b 53 51 4c 49 54 45  nfig](db,[SQLITE
7a20: 5f 44 42 43 4f 4e 46 49 47 5f 45 4e 41 42 4c 45  _DBCONFIG_ENABLE
7a30: 5f 46 54 53 33 5f 54 4f 4b 45 4e 49 5a 45 52 5d  _FTS3_TOKENIZER]
7a40: 2c 31 2c 30 29 20 69 6e 74 65 72 66 61 63 65 0a  ,1,0) interface.
7a50: 20 20 74 68 61 74 20 61 63 74 69 76 61 74 65 73    that activates
7a60: 20 74 68 65 20 74 77 6f 2d 61 72 67 75 6d 65 6e   the two-argumen
7a70: 74 20 76 65 72 73 69 6f 6e 20 6f 66 20 5b 66 74  t version of [ft
7a80: 73 33 5f 74 6f 6b 65 6e 69 7a 65 72 28 29 5d 0a  s3_tokenizer()].
7a90: 20 20 66 6f 72 20 61 20 73 70 65 63 69 66 69 63    for a specific
7aa0: 20 5b 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65   [database conne
7ab0: 63 74 69 6f 6e 5d 20 61 74 20 72 75 6e 2d 74 69  ction] at run-ti
7ac0: 6d 65 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f  me..}..COMPILE_O
7ad0: 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 45 4e  PTION {SQLITE_EN
7ae0: 41 42 4c 45 5f 46 54 53 34 7d 20 7b 0a 20 20 57  ABLE_FTS4} {.  W
7af0: 68 65 6e 20 74 68 69 73 20 6f 70 74 69 6f 6e 20  hen this option 
7b00: 69 73 20 64 65 66 69 6e 65 64 20 69 6e 20 74 68  is defined in th
7b10: 65 20 5b 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 5d  e [amalgamation]
7b20: 2c 20 76 65 72 73 69 6f 6e 73 20 33 20 61 6e 64  , versions 3 and
7b30: 20 34 0a 20 20 6f 66 20 74 68 65 20 66 75 6c 6c   4.  of the full
7b40: 2d 74 65 78 74 20 73 65 61 72 63 68 20 65 6e 67  -text search eng
7b50: 69 6e 65 20 69 73 20 61 64 64 65 64 20 74 6f 20  ine is added to 
7b60: 74 68 65 20 62 75 69 6c 64 20 61 75 74 6f 6d 61  the build automa
7b70: 74 69 63 61 6c 6c 79 2e 0a 7d 0a 0a 43 4f 4d 50  tically..}..COMP
7b80: 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49  ILE_OPTION {SQLI
7b90: 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 35 7d 20  TE_ENABLE_FTS5} 
7ba0: 7b 0a 20 20 57 68 65 6e 20 74 68 69 73 20 6f 70  {.  When this op
7bb0: 74 69 6f 6e 20 69 73 20 64 65 66 69 6e 65 64 20  tion is defined 
7bc0: 69 6e 20 74 68 65 20 5b 61 6d 61 6c 67 61 6d 61  in the [amalgama
7bd0: 74 69 6f 6e 5d 2c 20 76 65 72 73 69 6f 6e 73 20  tion], versions 
7be0: 35 0a 20 20 6f 66 20 74 68 65 20 66 75 6c 6c 2d  5.  of the full-
7bf0: 74 65 78 74 20 73 65 61 72 63 68 20 65 6e 67 69  text search engi
7c00: 6e 65 20 28 5b 66 74 73 35 5d 29 20 69 73 20 61  ne ([fts5]) is a
7c10: 64 64 65 64 20 74 6f 20 74 68 65 20 62 75 69 6c  dded to the buil
7c20: 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e  d automatically.
7c30: 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49  .}..COMPILE_OPTI
7c40: 4f 4e 20 7b 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ON {SQLITE_ENABL
7c50: 45 5f 49 43 55 7d 20 7b 0a 20 20 54 68 69 73 20  E_ICU} {.  This 
7c60: 6f 70 74 69 6f 6e 20 63 61 75 73 65 73 20 74 68  option causes th
7c70: 65 20 0a 20 20 5b 68 74 74 70 3a 2f 2f 77 77 77  e .  [http://www
7c80: 2e 69 63 75 2d 70 72 6f 6a 65 63 74 2e 6f 72 67  .icu-project.org
7c90: 2f 20 7c 20 49 6e 74 65 72 6e 61 74 69 6f 6e 61  / | Internationa
7ca0: 6c 20 43 6f 6d 70 6f 6e 65 6e 74 73 20 66 6f 72  l Components for
7cb0: 20 55 6e 69 63 6f 64 65 5d 0a 20 20 6f 72 20 22   Unicode].  or "
7cc0: 49 43 55 22 20 65 78 74 65 6e 73 69 6f 6e 20 74  ICU" extension t
7cd0: 6f 20 53 51 4c 69 74 65 20 74 6f 20 62 65 20 61  o SQLite to be a
7ce0: 64 64 65 64 20 74 6f 20 74 68 65 20 62 75 69 6c  dded to the buil
7cf0: 64 2e 20 20 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f  d.  .}..COMPILE_
7d00: 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 45  OPTION {SQLITE_E
7d10: 4e 41 42 4c 45 5f 49 4f 54 52 41 43 45 7d 20 7b  NABLE_IOTRACE} {
7d20: 0a 20 20 57 68 65 6e 20 62 6f 74 68 20 74 68 65  .  When both the
7d30: 20 53 51 4c 69 74 65 20 63 6f 72 65 20 61 6e 64   SQLite core and
7d40: 20 74 68 65 20 5b 43 6f 6d 6d 61 6e 64 20 4c 69   the [Command Li
7d50: 6e 65 20 49 6e 74 65 72 66 61 63 65 5d 20 28 43  ne Interface] (C
7d60: 4c 49 29 20 61 72 65 20 62 6f 74 68 20 0a 20 20  LI) are both .  
7d70: 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 74 68  compiled with th
7d80: 69 73 20 6f 70 74 69 6f 6e 2c 20 74 68 65 6e 20  is option, then 
7d90: 74 68 65 20 43 4c 49 20 70 72 6f 76 69 64 65 73  the CLI provides
7da0: 20 61 6e 20 65 78 74 72 61 20 63 6f 6d 6d 61 6e   an extra comman
7db0: 64 0a 20 20 6e 61 6d 65 64 20 22 2e 69 6f 74 72  d.  named ".iotr
7dc0: 61 63 65 22 20 74 68 61 74 20 70 72 6f 76 69 64  ace" that provid
7dd0: 65 73 20 61 20 6c 6f 77 2d 6c 65 76 65 6c 20 6c  es a low-level l
7de0: 6f 67 20 6f 66 20 49 2f 4f 20 61 63 74 69 76 69  og of I/O activi
7df0: 74 79 2e 0a 20 20 54 68 69 73 20 6f 70 74 69 6f  ty..  This optio
7e00: 6e 20 69 73 20 65 78 70 65 72 69 6d 65 6e 74 61  n is experimenta
7e10: 6c 20 61 6e 64 20 6d 61 79 20 62 65 20 64 69 73  l and may be dis
7e20: 63 6f 6e 74 69 6e 75 65 64 20 69 6e 20 61 20 66  continued in a f
7e30: 75 74 75 72 65 20 72 65 6c 65 61 73 65 2e 0a 7d  uture release..}
7e40: 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e  ..COMPILE_OPTION
7e50: 20 7b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f   {SQLITE_ENABLE_
7e60: 4a 53 4f 4e 31 7d 20 7b 0a 20 20 57 68 65 6e 20  JSON1} {.  When 
7e70: 74 68 69 73 20 6f 70 74 69 6f 6e 20 69 73 20 64  this option is d
7e80: 65 66 69 6e 65 64 20 69 6e 20 74 68 65 20 5b 61  efined in the [a
7e90: 6d 61 6c 67 61 6d 61 74 69 6f 6e 5d 2c 20 74 68  malgamation], th
7ea0: 65 0a 20 20 5b 4a 53 4f 4e 20 53 51 4c 20 66 75  e.  [JSON SQL fu
7eb0: 6e 63 74 69 6f 6e 73 5d 20 61 72 65 20 61 64 64  nctions] are add
7ec0: 65 64 20 74 6f 20 74 68 65 20 62 75 69 6c 64 20  ed to the build 
7ed0: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a 7d  automatically..}
7ee0: 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e  ..COMPILE_OPTION
7ef0: 20 7b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f   {SQLITE_ENABLE_
7f00: 4c 4f 43 4b 49 4e 47 5f 53 54 59 4c 45 7d 20 7b  LOCKING_STYLE} {
7f10: 0a 20 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 65  .  This option e
7f20: 6e 61 62 6c 65 73 20 61 64 64 69 74 69 6f 6e 61  nables additiona
7f30: 6c 20 6c 6f 67 69 63 20 69 6e 20 74 68 65 20 4f  l logic in the O
7f40: 53 20 69 6e 74 65 72 66 61 63 65 20 6c 61 79 65  S interface laye
7f50: 72 20 66 6f 72 0a 20 20 4d 61 63 20 4f 53 20 58  r for.  Mac OS X
7f60: 2e 20 54 68 65 20 61 64 64 69 74 69 6f 6e 61 6c  . The additional
7f70: 20 6c 6f 67 69 63 20 61 74 74 65 6d 70 74 73 20   logic attempts 
7f80: 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65  to determine the
7f90: 20 74 79 70 65 20 6f 66 20 74 68 65 0a 20 20 75   type of the.  u
7fa0: 6e 64 65 72 6c 79 69 6e 67 20 66 69 6c 65 73 79  nderlying filesy
7fb0: 73 74 65 6d 20 61 6e 64 20 63 68 6f 6f 73 65 20  stem and choose 
7fc0: 61 6e 64 20 61 6c 74 65 72 6e 61 74 69 76 65 20  and alternative 
7fd0: 6c 6f 63 6b 69 6e 67 20 73 74 72 61 74 65 67 79  locking strategy
7fe0: 0a 20 20 74 68 61 74 20 77 6f 72 6b 73 20 63 6f  .  that works co
7ff0: 72 72 65 63 74 6c 79 20 66 6f 72 20 74 68 61 74  rrectly for that
8000: 20 66 69 6c 65 73 79 73 74 65 6d 20 74 79 70 65   filesystem type
8010: 2e 20 46 69 76 65 20 6c 6f 63 6b 69 6e 67 20 73  . Five locking s
8020: 74 72 61 74 65 67 69 65 73 20 0a 20 20 61 72 65  trategies .  are
8030: 20 61 76 61 69 6c 61 62 6c 65 3a 0a 0a 20 20 3c   available:..  <
8040: 75 6c 3e 0a 20 20 20 20 3c 6c 69 3e 20 50 4f 53  ul>.    <li> POS
8050: 49 58 20 6c 6f 63 6b 69 6e 67 20 73 74 79 6c 65  IX locking style
8060: 2e 20 54 68 69 73 20 69 73 20 74 68 65 20 64 65  . This is the de
8070: 66 61 75 6c 74 20 6c 6f 63 6b 69 6e 67 20 73 74  fault locking st
8080: 79 6c 65 20 61 6e 64 20 74 68 65 0a 20 20 20 20  yle and the.    
8090: 20 20 20 20 20 73 74 79 6c 65 20 75 73 65 64 20       style used 
80a0: 62 79 20 6f 74 68 65 72 20 28 6e 6f 6e 20 4d 61  by other (non Ma
80b0: 63 20 4f 53 20 58 29 20 55 6e 69 78 65 73 2e 20  c OS X) Unixes. 
80c0: 4c 6f 63 6b 73 20 61 72 65 20 6f 62 74 61 69 6e  Locks are obtain
80d0: 65 64 20 61 6e 64 20 0a 20 20 20 20 20 20 20 20  ed and .        
80e0: 20 72 65 6c 65 61 73 65 64 20 75 73 69 6e 67 20   released using 
80f0: 74 68 65 20 66 63 6e 74 6c 28 29 20 73 79 73 74  the fcntl() syst
8100: 65 6d 20 63 61 6c 6c 2e 0a 0a 20 20 20 20 3c 6c  em call...    <l
8110: 69 3e 20 41 46 50 20 6c 6f 63 6b 69 6e 67 20 73  i> AFP locking s
8120: 74 79 6c 65 2e 20 54 68 69 73 20 6c 6f 63 6b 69  tyle. This locki
8130: 6e 67 20 73 74 79 6c 65 20 69 73 20 75 73 65 64  ng style is used
8140: 20 66 6f 72 20 6e 65 74 77 6f 72 6b 20 66 69 6c   for network fil
8150: 65 20 0a 20 20 20 20 20 20 20 20 20 73 79 73 74  e .         syst
8160: 65 6d 73 20 74 68 61 74 20 75 73 65 20 74 68 65  ems that use the
8170: 20 41 46 50 20 28 41 70 70 6c 65 20 46 69 6c 69   AFP (Apple Fili
8180: 6e 67 20 50 72 6f 74 6f 63 6f 6c 29 20 70 72 6f  ng Protocol) pro
8190: 74 6f 63 6f 6c 2e 20 4c 6f 63 6b 73 0a 20 20 20  tocol. Locks.   
81a0: 20 20 20 20 20 20 61 72 65 20 6f 62 74 61 69 6e        are obtain
81b0: 65 64 20 62 79 20 63 61 6c 6c 69 6e 67 20 74 68  ed by calling th
81c0: 65 20 6c 69 62 72 61 72 79 20 66 75 6e 63 74 69  e library functi
81d0: 6f 6e 20 5f 41 46 50 46 53 53 65 74 4c 6f 63 6b  on _AFPFSSetLock
81e0: 28 29 2e 0a 0a 20 20 20 20 3c 6c 69 3e 20 46 6c  ()...    <li> Fl
81f0: 6f 63 6b 20 6c 6f 63 6b 69 6e 67 20 73 74 79 6c  ock locking styl
8200: 65 2e 20 54 68 69 73 20 69 73 20 75 73 65 64 20  e. This is used 
8210: 66 6f 72 20 66 69 6c 65 2d 73 79 73 74 65 6d 73  for file-systems
8220: 20 74 68 61 74 20 64 6f 20 6e 6f 74 0a 20 20 20   that do not.   
8230: 20 20 20 20 20 20 73 75 70 70 6f 72 74 20 50 4f        support PO
8240: 53 49 58 20 6c 6f 63 6b 69 6e 67 20 73 74 79 6c  SIX locking styl
8250: 65 2e 20 4c 6f 63 6b 73 20 61 72 65 20 6f 62 74  e. Locks are obt
8260: 61 69 6e 65 64 20 61 6e 64 20 72 65 6c 65 61 73  ained and releas
8270: 65 64 20 75 73 69 6e 67 0a 20 20 20 20 20 20 20  ed using.       
8280: 20 20 74 68 65 20 66 6c 6f 63 6b 28 29 20 73 79    the flock() sy
8290: 73 74 65 6d 20 63 61 6c 6c 2e 0a 0a 20 20 20 20  stem call...    
82a0: 3c 6c 69 3e 20 44 6f 74 2d 66 69 6c 65 20 6c 6f  <li> Dot-file lo
82b0: 63 6b 69 6e 67 20 73 74 79 6c 65 2e 20 54 68 69  cking style. Thi
82c0: 73 20 6c 6f 63 6b 69 6e 67 20 73 74 79 6c 65 20  s locking style 
82d0: 69 73 20 75 73 65 64 20 77 68 65 6e 20 6e 65 69  is used when nei
82e0: 74 68 65 72 0a 20 20 20 20 20 20 20 20 20 66 6c  ther.         fl
82f0: 6f 63 6b 20 6e 6f 72 20 50 4f 53 49 58 20 6c 6f  ock nor POSIX lo
8300: 63 6b 69 6e 67 20 73 74 79 6c 65 73 20 61 72 65  cking styles are
8310: 20 73 75 70 70 6f 72 74 65 64 20 62 79 20 74 68   supported by th
8320: 65 20 66 69 6c 65 20 73 79 73 74 65 6d 2e 0a 20  e file system.. 
8330: 20 20 20 20 20 20 20 20 44 61 74 61 62 61 73 65          Database
8340: 20 6c 6f 63 6b 73 20 61 72 65 20 6f 62 74 61 69   locks are obtai
8350: 6e 65 64 20 62 79 20 63 72 65 61 74 69 6e 67 20  ned by creating 
8360: 61 6e 64 20 65 6e 74 72 79 20 69 6e 20 74 68 65  and entry in the
8370: 20 66 69 6c 65 2d 73 79 73 74 65 6d 0a 20 20 20   file-system.   
8380: 20 20 20 20 20 20 61 74 20 61 20 77 65 6c 6c 2d        at a well-
8390: 6b 6e 6f 77 6e 20 6c 6f 63 61 74 69 6f 6e 20 72  known location r
83a0: 65 6c 61 74 69 76 65 20 74 6f 20 74 68 65 20 64  elative to the d
83b0: 61 74 61 62 61 73 65 20 66 69 6c 65 20 28 61 20  atabase file (a 
83c0: 22 64 6f 74 2d 66 69 6c 65 22 29 0a 20 20 20 20  "dot-file").    
83d0: 20 20 20 20 20 61 6e 64 20 72 65 6c 69 6e 71 75       and relinqu
83e0: 69 73 68 65 64 20 62 79 20 64 65 6c 65 74 69 6e  ished by deletin
83f0: 67 20 74 68 65 20 73 61 6d 65 20 66 69 6c 65 2e  g the same file.
8400: 0a 0a 20 20 20 20 3c 6c 69 3e 20 4e 6f 20 6c 6f  ..    <li> No lo
8410: 63 6b 69 6e 67 20 73 74 79 6c 65 2e 20 49 66 20  cking style. If 
8420: 6e 6f 6e 65 20 6f 66 20 74 68 65 20 61 62 6f 76  none of the abov
8430: 65 20 63 61 6e 20 62 65 20 73 75 70 70 6f 72 74  e can be support
8440: 65 64 2c 20 74 68 69 73 20 0a 20 20 20 20 20 20  ed, this .      
8450: 20 20 20 6c 6f 63 6b 69 6e 67 20 73 74 79 6c 65     locking style
8460: 20 69 73 20 75 73 65 64 2e 20 4e 6f 20 64 61 74   is used. No dat
8470: 61 62 61 73 65 20 6c 6f 63 6b 69 6e 67 20 6d 65  abase locking me
8480: 63 68 61 6e 69 73 6d 20 69 73 20 75 73 65 64 2e  chanism is used.
8490: 20 57 68 65 6e 0a 20 20 20 20 20 20 20 20 20 74   When.         t
84a0: 68 69 73 20 73 79 73 74 65 6d 20 69 73 20 75 73  his system is us
84b0: 65 64 20 69 74 20 69 73 20 6e 6f 74 20 73 61 66  ed it is not saf
84c0: 65 20 66 6f 72 20 61 20 73 69 6e 67 6c 65 20 64  e for a single d
84d0: 61 74 61 62 61 73 65 20 74 6f 20 62 65 0a 20 20  atabase to be.  
84e0: 20 20 20 20 20 20 20 61 63 63 65 73 73 65 64 20         accessed 
84f0: 62 79 20 6d 75 6c 74 69 70 6c 65 20 63 6c 69 65  by multiple clie
8500: 6e 74 73 2e 0a 20 20 3c 2f 75 6c 3e 0a 0a 20 20  nts..  </ul>..  
8510: 41 64 64 69 74 69 6f 6e 61 6c 6c 79 2c 20 66 69  Additionally, fi
8520: 76 65 20 65 78 74 72 61 20 5b 56 46 53 5d 20 69  ve extra [VFS] i
8530: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20 61  mplementations a
8540: 72 65 20 70 72 6f 76 69 64 65 64 20 61 73 20 77  re provided as w
8550: 65 6c 6c 20 61 73 20 74 68 65 0a 20 20 64 65 66  ell as the.  def
8560: 61 75 6c 74 2e 20 42 79 20 73 70 65 63 69 66 79  ault. By specify
8570: 69 6e 67 20 6f 6e 65 20 6f 66 20 74 68 65 20 65  ing one of the e
8580: 78 74 72 61 20 56 46 53 20 69 6d 70 6c 65 6d 65  xtra VFS impleme
8590: 6e 74 61 74 69 6f 6e 73 20 0a 20 20 77 68 65 6e  ntations .  when
85a0: 20 63 61 6c 6c 69 6e 67 20 5b 73 71 6c 69 74 65   calling [sqlite
85b0: 33 5f 6f 70 65 6e 5f 76 32 28 29 5d 2c 20 61 6e  3_open_v2()], an
85c0: 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 6d 61 79   application may
85d0: 20 62 79 70 61 73 73 20 74 68 65 20 66 69 6c 65   bypass the file
85e0: 2d 73 79 73 74 65 6d 0a 20 20 64 65 74 65 63 74  -system.  detect
85f0: 69 6f 6e 20 6c 6f 67 69 63 20 61 6e 64 20 65 78  ion logic and ex
8600: 70 6c 69 63 69 74 6c 79 20 73 65 6c 65 63 74 20  plicitly select 
8610: 6f 6e 65 20 6f 66 20 74 68 65 20 61 62 6f 76 65  one of the above
8620: 20 6c 6f 63 6b 69 6e 67 20 73 74 79 6c 65 73 2e   locking styles.
8630: 20 54 68 65 0a 20 20 66 69 76 65 20 65 78 74 72   The.  five extr
8640: 61 20 5b 56 46 53 5d 20 69 6d 70 6c 65 6d 65 6e  a [VFS] implemen
8650: 74 61 74 69 6f 6e 73 20 61 72 65 20 63 61 6c 6c  tations are call
8660: 65 64 20 22 75 6e 69 78 2d 70 6f 73 69 78 22 2c  ed "unix-posix",
8670: 20 22 75 6e 69 78 2d 61 66 70 22 2c 0a 20 20 22   "unix-afp",.  "
8680: 75 6e 69 78 2d 66 6c 6f 63 6b 22 2c 20 22 75 6e  unix-flock", "un
8690: 69 78 2d 64 6f 74 66 69 6c 65 22 20 61 6e 64 20  ix-dotfile" and 
86a0: 22 75 6e 69 78 2d 6e 6f 6e 65 22 2e 0a 7d 0a 0a  "unix-none"..}..
86b0: 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b  COMPILE_OPTION {
86c0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45  SQLITE_ENABLE_ME
86d0: 4d 4f 52 59 5f 4d 41 4e 41 47 45 4d 45 4e 54 7d  MORY_MANAGEMENT}
86e0: 20 7b 0a 20 20 54 68 69 73 20 6f 70 74 69 6f 6e   {.  This option
86f0: 20 61 64 64 73 20 65 78 74 72 61 20 6c 6f 67 69   adds extra logi
8700: 63 20 74 6f 20 53 51 4c 69 74 65 20 74 68 61 74  c to SQLite that
8710: 20 61 6c 6c 6f 77 73 20 69 74 20 74 6f 20 72 65   allows it to re
8720: 6c 65 61 73 65 20 75 6e 75 73 65 64 0a 20 20 6d  lease unused.  m
8730: 65 6d 6f 72 79 20 75 70 6f 6e 20 72 65 71 75 65  emory upon reque
8740: 73 74 2e 20 20 54 68 69 73 20 6f 70 74 69 6f 6e  st.  This option
8750: 20 6d 75 73 74 20 62 65 20 65 6e 61 62 6c 65 64   must be enabled
8760: 20 69 6e 20 6f 72 64 65 72 20 66 6f 72 20 74 68   in order for th
8770: 65 0a 20 20 5b 73 71 6c 69 74 65 33 5f 72 65 6c  e.  [sqlite3_rel
8780: 65 61 73 65 5f 6d 65 6d 6f 72 79 28 29 5d 20 69  ease_memory()] i
8790: 6e 74 65 72 66 61 63 65 20 74 6f 20 77 6f 72 6b  nterface to work
87a0: 2e 20 20 49 66 20 74 68 69 73 20 63 6f 6d 70 69  .  If this compi
87b0: 6c 65 2d 74 69 6d 65 0a 20 20 6f 70 74 69 6f 6e  le-time.  option
87c0: 20 69 73 20 6e 6f 74 20 75 73 65 64 2c 20 74 68   is not used, th
87d0: 65 20 5b 73 71 6c 69 74 65 33 5f 72 65 6c 65 61  e [sqlite3_relea
87e0: 73 65 5f 6d 65 6d 6f 72 79 28 29 5d 20 69 6e 74  se_memory()] int
87f0: 65 72 66 61 63 65 20 69 73 20 61 20 0a 20 20 6e  erface is a .  n
8800: 6f 2d 6f 70 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45  o-op..}..COMPILE
8810: 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f  _OPTION {SQLITE_
8820: 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 33 7d 20  ENABLE_MEMSYS3} 
8830: 7b 0a 20 20 54 68 69 73 20 6f 70 74 69 6f 6e 20  {.  This option 
8840: 69 6e 63 6c 75 64 65 73 20 63 6f 64 65 20 69 6e  includes code in
8850: 20 53 51 4c 69 74 65 20 74 68 61 74 20 69 6d 70   SQLite that imp
8860: 6c 65 6d 65 6e 74 73 20 61 6e 20 61 6c 74 65 72  lements an alter
8870: 6e 61 74 69 76 65 0a 20 20 6d 65 6d 6f 72 79 20  native.  memory 
8880: 61 6c 6c 6f 63 61 74 6f 72 2e 20 20 54 68 69 73  allocator.  This
8890: 20 61 6c 74 65 72 6e 61 74 69 76 65 20 6d 65 6d   alternative mem
88a0: 6f 72 79 20 61 6c 6c 6f 63 61 74 6f 72 20 69 73  ory allocator is
88b0: 20 6f 6e 6c 79 20 65 6e 67 61 67 65 64 0a 20 20   only engaged.  
88c0: 77 68 65 6e 20 74 68 65 20 5b 53 51 4c 49 54 45  when the [SQLITE
88d0: 5f 43 4f 4e 46 49 47 5f 48 45 41 50 5d 20 6f 70  _CONFIG_HEAP] op
88e0: 74 69 6f 6e 20 74 6f 20 5b 73 71 6c 69 74 65 33  tion to [sqlite3
88f0: 5f 63 6f 6e 66 69 67 28 29 5d 20 69 73 20 75 73  _config()] is us
8900: 65 64 20 74 6f 0a 20 20 73 75 70 70 6c 79 20 61  ed to.  supply a
8910: 20 6c 61 72 67 65 20 63 68 75 6e 6b 20 6f 66 20   large chunk of 
8920: 6d 65 6d 6f 72 79 20 66 72 6f 6d 20 77 68 69 63  memory from whic
8930: 68 20 61 6c 6c 20 6d 65 6d 6f 72 79 20 61 6c 6c  h all memory all
8940: 6f 63 61 74 69 6f 6e 73 20 61 72 65 0a 20 20 74  ocations are.  t
8950: 61 6b 65 6e 2e 0a 20 20 54 68 65 20 4d 45 4d 53  aken..  The MEMS
8960: 59 53 33 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  YS3 memory alloc
8970: 61 74 6f 72 20 75 73 65 73 20 61 20 68 79 62 72  ator uses a hybr
8980: 69 64 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 61 6c  id allocation al
8990: 67 6f 72 69 74 68 6d 20 0a 20 20 70 61 74 74 65  gorithm .  patte
89a0: 72 6e 65 64 20 61 66 74 65 72 20 64 6c 6d 61 6c  rned after dlmal
89b0: 6c 6f 63 28 29 2e 20 20 20 4f 6e 6c 79 20 6f 6e  loc().   Only on
89c0: 65 20 6f 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  e of SQLITE_ENAB
89d0: 4c 45 5f 4d 45 4d 53 59 53 33 20 61 6e 64 20 0a  LE_MEMSYS3 and .
89e0: 20 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f    SQLITE_ENABLE_
89f0: 4d 45 4d 53 59 53 35 20 6d 61 79 20 62 65 20 65  MEMSYS5 may be e
8a00: 6e 61 62 6c 65 64 20 61 74 20 6f 6e 63 65 2e 0a  nabled at once..
8a10: 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f  }..COMPILE_OPTIO
8a20: 4e 20 7b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  N {SQLITE_ENABLE
8a30: 5f 4d 45 4d 53 59 53 35 7d 20 7b 0a 20 20 54 68  _MEMSYS5} {.  Th
8a40: 69 73 20 6f 70 74 69 6f 6e 20 69 6e 63 6c 75 64  is option includ
8a50: 65 73 20 63 6f 64 65 20 69 6e 20 53 51 4c 69 74  es code in SQLit
8a60: 65 20 74 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74  e that implement
8a70: 73 20 61 6e 20 61 6c 74 65 72 6e 61 74 69 76 65  s an alternative
8a80: 0a 20 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  .  memory alloca
8a90: 74 6f 72 2e 20 20 54 68 69 73 20 61 6c 74 65 72  tor.  This alter
8aa0: 6e 61 74 69 76 65 20 6d 65 6d 6f 72 79 20 61 6c  native memory al
8ab0: 6c 6f 63 61 74 6f 72 20 69 73 20 6f 6e 6c 79 20  locator is only 
8ac0: 65 6e 67 61 67 65 64 0a 20 20 77 68 65 6e 20 74  engaged.  when t
8ad0: 68 65 20 5b 53 51 4c 49 54 45 5f 43 4f 4e 46 49  he [SQLITE_CONFI
8ae0: 47 5f 48 45 41 50 5d 20 6f 70 74 69 6f 6e 20 74  G_HEAP] option t
8af0: 6f 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69  o [sqlite3_confi
8b00: 67 28 29 5d 20 69 73 20 75 73 65 64 20 74 6f 0a  g()] is used to.
8b10: 20 20 73 75 70 70 6c 79 20 61 20 6c 61 72 67 65    supply a large
8b20: 20 63 68 75 6e 6b 20 6f 66 20 6d 65 6d 6f 72 79   chunk of memory
8b30: 20 66 72 6f 6d 20 77 68 69 63 68 20 61 6c 6c 20   from which all 
8b40: 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
8b50: 6e 73 20 61 72 65 0a 20 20 74 61 6b 65 6e 2e 0a  ns are.  taken..
8b60: 20 20 54 68 65 20 4d 45 4d 53 59 53 35 20 6d 6f    The MEMSYS5 mo
8b70: 64 75 6c 65 20 72 6f 75 6e 64 73 20 61 6c 6c 20  dule rounds all 
8b80: 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 75 70 20 74  allocations up t
8b90: 6f 20 74 68 65 20 6e 65 78 74 20 70 6f 77 65 72  o the next power
8ba0: 0a 20 20 6f 66 20 74 77 6f 20 61 6e 64 20 75 73  .  of two and us
8bb0: 65 73 20 61 20 66 69 72 73 74 2d 66 69 74 2c 20  es a first-fit, 
8bc0: 62 75 64 64 79 2d 61 6c 6c 6f 63 61 74 6f 72 20  buddy-allocator 
8bd0: 61 6c 67 6f 72 69 74 68 6d 0a 20 20 74 68 61 74  algorithm.  that
8be0: 20 70 72 6f 76 69 64 65 73 20 73 74 72 6f 6e 67   provides strong
8bf0: 20 67 75 61 72 61 6e 74 65 65 73 20 61 67 61 69   guarantees agai
8c00: 6e 73 74 20 66 72 61 67 6d 65 6e 74 61 74 69 6f  nst fragmentatio
8c10: 6e 20 61 6e 64 20 62 72 65 61 6b 64 6f 77 6e 0a  n and breakdown.
8c20: 20 20 73 75 62 6a 65 63 74 20 74 6f 20 63 65 72    subject to cer
8c30: 74 61 69 6e 20 6f 70 65 72 61 74 69 6e 67 20 63  tain operating c
8c40: 6f 6e 73 74 72 61 69 6e 74 73 2e 0a 7d 0a 0a 43  onstraints..}..C
8c50: 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53  OMPILE_OPTION {S
8c60: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45  QLITE_ENABLE_PRE
8c70: 55 50 44 41 54 45 5f 48 4f 4f 4b 7d 20 7b 0a 20  UPDATE_HOOK} {. 
8c80: 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 65 6e 61   This option ena
8c90: 62 6c 65 73 20 0a 20 20 5b 73 71 6c 69 74 65 33  bles .  [sqlite3
8ca0: 5f 70 72 65 75 70 64 61 74 65 5f 68 6f 6f 6b 7c  _preupdate_hook|
8cb0: 73 65 76 65 72 61 6c 20 6e 65 77 20 41 50 49 73  several new APIs
8cc0: 5d 20 74 68 61 74 20 70 72 6f 76 69 64 65 20 63  ] that provide c
8cd0: 61 6c 6c 62 61 63 6b 73 0a 20 20 70 72 69 6f 72  allbacks.  prior
8ce0: 20 74 6f 20 61 6e 79 20 63 68 61 6e 67 65 20 74   to any change t
8cf0: 6f 20 61 20 5b 72 6f 77 69 64 20 74 61 62 6c 65  o a [rowid table
8d00: 5d 2e 20 20 54 68 65 20 63 61 6c 6c 62 61 63 6b  ].  The callback
8d10: 73 20 63 61 6e 20 62 65 20 75 73 65 64 0a 20 20  s can be used.  
8d20: 74 6f 20 72 65 63 6f 72 64 20 74 68 65 20 73 74  to record the st
8d30: 61 74 65 20 6f 66 20 74 68 65 20 72 6f 77 20 62  ate of the row b
8d40: 65 66 6f 72 65 20 74 68 65 20 63 68 61 6e 67 65  efore the change
8d50: 20 6f 63 63 75 72 73 2e 0a 20 20 3c 70 3e 54 68   occurs..  <p>Th
8d60: 65 20 61 63 74 69 6f 6e 20 6f 66 20 74 68 65 20  e action of the 
8d70: 70 72 65 75 70 64 61 74 65 20 68 6f 6f 6b 20 69  preupdate hook i
8d80: 73 20 73 69 6d 69 6c 61 72 20 74 6f 20 74 68 65  s similar to the
8d90: 0a 20 20 5b 73 71 6c 69 74 65 33 5f 75 70 64 61  .  [sqlite3_upda
8da0: 74 65 5f 68 6f 6f 6b 7c 75 70 64 61 74 65 20 68  te_hook|update h
8db0: 6f 6f 6b 5d 20 65 78 63 65 70 74 20 74 68 61 74  ook] except that
8dc0: 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 69 73   the callback is
8dd0: 0a 20 20 69 6e 76 6f 6b 65 64 20 62 65 66 6f 72  .  invoked befor
8de0: 65 20 74 68 65 20 63 68 61 6e 67 65 2c 20 6e 6f  e the change, no
8df0: 74 20 61 66 74 65 72 77 61 72 64 73 2c 20 61 6e  t afterwards, an
8e00: 64 20 74 68 65 20 70 72 65 75 70 64 61 74 65 0a  d the preupdate.
8e10: 20 20 68 6f 6f 6b 20 69 6e 74 65 72 66 61 63 65    hook interface
8e20: 73 20 61 72 65 20 6f 6d 69 74 74 65 64 20 75 6e  s are omitted un
8e30: 6c 65 73 73 20 74 68 69 73 20 63 6f 6d 70 69 6c  less this compil
8e40: 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73  e-time option is
8e50: 0a 20 20 75 73 65 64 2e 0a 20 20 3c 70 3e 54 68  .  used..  <p>Th
8e60: 65 20 70 72 65 75 70 64 61 74 65 20 68 6f 6f 6b  e preupdate hook
8e70: 20 69 6e 74 65 72 66 61 63 65 73 20 77 65 72 65   interfaces were
8e80: 20 6f 72 69 67 69 6e 61 6c 6c 79 20 61 64 64 65   originally adde
8e90: 64 20 74 6f 0a 20 20 73 75 70 70 6f 72 74 20 74  d to.  support t
8ea0: 68 65 20 5b 73 65 73 73 69 6f 6e 5d 20 65 78 74  he [session] ext
8eb0: 65 6e 73 69 6f 6e 2e 0a 7d 0a 0a 43 4f 4d 50 49  ension..}..COMPI
8ec0: 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54  LE_OPTION {SQLIT
8ed0: 45 5f 45 4e 41 42 4c 45 5f 52 42 55 7d 20 7b 0a  E_ENABLE_RBU} {.
8ee0: 20 20 45 6e 61 62 6c 65 20 74 68 65 20 63 6f 64    Enable the cod
8ef0: 65 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 73  e the implements
8f00: 20 74 68 65 20 5b 52 42 55 20 65 78 74 65 6e 73   the [RBU extens
8f10: 69 6f 6e 5d 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45  ion]..}..COMPILE
8f20: 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f  _OPTION {SQLITE_
8f30: 45 4e 41 42 4c 45 5f 52 54 52 45 45 7d 20 7b 0a  ENABLE_RTREE} {.
8f40: 20 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 63 61    This option ca
8f50: 75 73 65 73 20 53 51 4c 69 74 65 20 74 6f 20 69  uses SQLite to i
8f60: 6e 63 6c 75 64 65 20 73 75 70 70 6f 72 74 20 66  nclude support f
8f70: 6f 72 20 74 68 65 0a 20 20 5b 72 74 72 65 65 20  or the.  [rtree 
8f80: 7c 20 52 2a 54 72 65 65 20 69 6e 64 65 78 20 65  | R*Tree index e
8f90: 78 74 65 6e 73 69 6f 6e 5d 2e 0a 7d 0a 0a 43 4f  xtension]..}..CO
8fa0: 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51  MPILE_OPTION {SQ
8fb0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 45 53 53  LITE_ENABLE_SESS
8fc0: 49 4f 4e 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70  ION} {.  This op
8fd0: 74 69 6f 6e 20 65 6e 61 62 6c 65 73 20 74 68 65  tion enables the
8fe0: 20 5b 73 65 73 73 69 6f 6e 20 65 78 74 65 6e 73   [session extens
8ff0: 69 6f 6e 5d 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45  ion]..}..COMPILE
9000: 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f  _OPTION {SQLITE_
9010: 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53 43 41 4e  ENABLE_STMT_SCAN
9020: 53 54 41 54 55 53 7d 20 7b 0a 20 20 54 68 69 73  STATUS} {.  This
9030: 20 6f 70 74 69 6f 6e 20 65 6e 61 62 6c 65 73 20   option enables 
9040: 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 73 74 6d  the [sqlite3_stm
9050: 74 5f 73 63 61 6e 73 74 61 74 75 73 28 29 5d 20  t_scanstatus()] 
9060: 69 6e 74 65 72 66 61 63 65 2e 20 20 54 68 65 0a  interface.  The.
9070: 20 20 5b 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f    [sqlite3_stmt_
9080: 73 63 61 6e 73 74 61 74 75 73 28 29 5d 20 69 6e  scanstatus()] in
9090: 74 65 72 66 61 63 65 20 69 73 20 6e 6f 72 6d 61  terface is norma
90a0: 6c 6c 79 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d  lly omitted from
90b0: 20 74 68 65 20 62 75 69 6c 64 0a 20 20 62 65 63   the build.  bec
90c0: 61 75 73 65 20 69 74 20 69 6d 70 6f 73 65 73 20  ause it imposes 
90d0: 61 20 73 6d 61 6c 6c 20 70 65 72 66 6f 72 6d 61  a small performa
90e0: 6e 63 65 20 70 65 6e 61 6c 74 79 2c 20 65 76 65  nce penalty, eve
90f0: 6e 20 6f 6e 20 73 74 61 74 65 6d 65 6e 74 73 20  n on statements 
9100: 74 68 61 74 0a 20 20 64 6f 20 6e 6f 74 20 75 73  that.  do not us
9110: 65 20 74 68 65 20 66 65 61 74 75 72 65 2e 0a 7d  e the feature..}
9120: 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e  ..COMPILE_OPTION
9130: 20 7b 53 51 4c 49 54 45 5f 52 54 52 45 45 5f 49   {SQLITE_RTREE_I
9140: 4e 54 5f 4f 4e 4c 59 7d 20 7b 0a 20 20 49 66 20  NT_ONLY} {.  If 
9150: 74 68 69 73 20 6f 70 74 69 6f 6e 20 69 73 20 75  this option is u
9160: 73 65 64 20 74 6f 67 65 74 68 65 72 20 77 69 74  sed together wit
9170: 68 20 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  h [SQLITE_ENABLE
9180: 5f 52 54 52 45 45 5d 20 74 68 65 6e 20 74 68 65  _RTREE] then the
9190: 0a 20 20 5b 72 74 72 65 65 20 7c 20 52 2a 54 72  .  [rtree | R*Tr
91a0: 65 65 20 65 78 74 65 6e 73 69 6f 6e 5d 20 77 69  ee extension] wi
91b0: 6c 6c 20 6f 6e 6c 79 20 73 74 6f 72 65 20 33 32  ll only store 32
91c0: 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e 74 65  -bit signed inte
91d0: 67 65 72 0a 20 20 63 6f 6f 72 64 69 6e 61 74 65  ger.  coordinate
91e0: 73 20 61 6e 64 20 61 6c 6c 20 69 6e 74 65 72 6e  s and all intern
91f0: 61 6c 20 63 6f 6d 70 75 74 61 74 69 6f 6e 73 20  al computations 
9200: 77 69 6c 6c 20 62 65 20 64 6f 6e 65 20 75 73 69  will be done usi
9210: 6e 67 20 69 6e 74 65 67 65 72 73 0a 20 20 69 6e  ng integers.  in
9220: 73 74 65 61 64 20 6f 66 20 66 6c 6f 61 74 69 6e  stead of floatin
9230: 67 20 70 6f 69 6e 74 20 6e 75 6d 62 65 72 73 2e  g point numbers.
9240: 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49  .}..COMPILE_OPTI
9250: 4f 4e 20 7b 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ON {SQLITE_ENABL
9260: 45 5f 53 51 4c 4c 4f 47 7d 20 7b 0a 20 20 54 68  E_SQLLOG} {.  Th
9270: 69 73 20 6f 70 74 69 6f 6e 20 65 6e 61 62 6c 65  is option enable
9280: 73 20 65 78 74 72 61 20 63 6f 64 65 20 28 65 73  s extra code (es
9290: 70 65 63 69 61 6c 6c 79 20 74 68 65 20 5b 53 51  pecially the [SQ
92a0: 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 53 51 4c 4c  LITE_CONFIG_SQLL
92b0: 4f 47 5d 0a 20 20 6f 70 74 69 6f 6e 20 74 6f 20  OG].  option to 
92c0: 5b 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 28  [sqlite3_config(
92d0: 29 5d 29 20 74 68 61 74 20 63 61 6e 20 62 65 20  )]) that can be 
92e0: 75 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 6c  used to create l
92f0: 6f 67 73 20 6f 66 20 61 6c 6c 0a 20 20 53 51 4c  ogs of all.  SQL
9300: 69 74 65 20 70 72 6f 63 65 73 73 69 6e 67 20 70  ite processing p
9310: 65 72 66 6f 72 6d 65 64 20 62 79 20 61 6e 20 61  erformed by an a
9320: 70 70 6c 69 63 61 74 69 6f 6e 2e 20 20 54 68 65  pplication.  The
9330: 73 65 20 6c 6f 67 73 20 63 61 6e 20 62 65 20 75  se logs can be u
9340: 73 65 66 75 6c 0a 20 20 69 6e 20 64 6f 69 6e 67  seful.  in doing
9350: 20 6f 66 66 2d 6c 69 6e 65 20 61 6e 61 6c 79 73   off-line analys
9360: 69 73 20 6f 66 20 74 68 65 20 62 65 68 61 76 69  is of the behavi
9370: 6f 72 20 6f 66 20 61 6e 20 61 70 70 6c 69 63 61  or of an applica
9380: 74 69 6f 6e 2c 20 61 6e 64 20 65 73 70 65 63 69  tion, and especi
9390: 61 6c 6c 79 0a 20 20 66 6f 72 20 70 65 72 66 6f  ally.  for perfo
93a0: 72 6d 61 6e 63 65 20 61 6e 61 6c 79 73 69 73 2e  rmance analysis.
93b0: 20 20 49 6e 20 6f 72 64 65 72 20 66 6f 72 20 74    In order for t
93c0: 68 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  he SQLITE_ENABLE
93d0: 5f 53 51 4c 4c 4f 47 20 6f 70 74 69 6f 6e 20 74  _SQLLOG option t
93e0: 6f 20 0a 20 20 62 65 20 75 73 65 66 75 6c 2c 20  o .  be useful, 
93f0: 73 6f 6d 65 20 65 78 74 72 61 20 63 6f 64 65 20  some extra code 
9400: 69 73 20 72 65 71 75 69 72 65 64 2e 20 20 54 68  is required.  Th
9410: 65 20 0a 20 20 3c 61 20 68 72 65 66 3d 22 68 74  e .  <a href="ht
9420: 74 70 3a 2f 2f 77 77 77 2e 73 71 6c 69 74 65 2e  tp://www.sqlite.
9430: 6f 72 67 2f 73 72 63 2f 64 6f 63 2f 74 72 75 6e  org/src/doc/trun
9440: 6b 2f 73 72 63 2f 74 65 73 74 5f 73 71 6c 6c 6f  k/src/test_sqllo
9450: 67 2e 63 22 3e 22 74 65 73 74 5f 73 71 6c 6c 6f  g.c">"test_sqllo
9460: 67 2e 63 22 3c 2f 61 3e 0a 20 20 73 6f 75 72 63  g.c"</a>.  sourc
9470: 65 20 63 6f 64 65 0a 20 20 66 69 6c 65 20 69 6e  e code.  file in
9480: 20 74 68 65 20 53 51 4c 69 74 65 20 73 6f 75 72   the SQLite sour
9490: 63 65 20 74 72 65 65 20 69 73 20 61 20 77 6f 72  ce tree is a wor
94a0: 6b 69 6e 67 20 65 78 61 6d 70 6c 65 20 6f 66 20  king example of 
94b0: 74 68 65 20 72 65 71 75 69 72 65 64 20 65 78 74  the required ext
94c0: 72 61 0a 20 20 63 6f 64 65 2e 20 20 4f 6e 20 75  ra.  code.  On u
94d0: 6e 69 78 20 61 6e 64 20 77 69 6e 64 6f 77 73 20  nix and windows 
94e0: 73 79 73 74 65 6d 73 2c 20 61 20 64 65 76 65 6c  systems, a devel
94f0: 6f 70 65 72 20 63 61 6e 20 61 70 70 65 6e 64 20  oper can append 
9500: 74 68 65 20 74 65 78 74 20 6f 66 20 74 68 65 0a  the text of the.
9510: 20 20 22 74 65 73 74 5f 73 71 6c 6c 6f 67 2e 63    "test_sqllog.c
9520: 22 20 73 6f 75 72 63 65 20 63 6f 64 65 20 66 69  " source code fi
9530: 6c 65 20 74 6f 20 74 68 65 20 65 6e 64 20 6f 66  le to the end of
9540: 20 61 6e 20 22 73 71 6c 69 74 65 33 2e 63 22 20   an "sqlite3.c" 
9550: 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 2c 0a 20 20  amalgamation,.  
9560: 72 65 63 6f 6d 70 69 6c 65 20 74 68 65 20 61 70  recompile the ap
9570: 70 6c 69 63 61 74 69 6f 6e 20 75 73 69 6e 67 20  plication using 
9580: 74 68 65 20 2d 44 53 51 4c 49 54 45 5f 45 4e 41  the -DSQLITE_ENA
9590: 42 4c 45 5f 53 51 4c 4c 4f 47 20 6f 70 74 69 6f  BLE_SQLLOG optio
95a0: 6e 2c 20 74 68 65 6e 20 0a 20 20 63 6f 6e 74 72  n, then .  contr
95b0: 6f 6c 20 6c 6f 67 67 69 6e 67 20 75 73 69 6e 67  ol logging using
95c0: 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72   environment var
95d0: 69 61 62 6c 65 73 2e 20 20 53 65 65 20 74 68 65  iables.  See the
95e0: 20 68 65 61 64 65 72 20 63 6f 6d 6d 65 6e 74 20   header comment 
95f0: 6f 6e 20 0a 20 20 74 68 65 20 22 74 65 73 74 5f  on .  the "test_
9600: 73 71 6c 6c 6f 67 2e 63 22 20 73 6f 75 72 63 65  sqllog.c" source
9610: 20 66 69 6c 65 20 66 6f 72 20 61 64 64 69 74 69   file for additi
9620: 6f 6e 61 6c 20 64 65 74 61 69 6c 2e 20 20 0a 7d  onal detail.  .}
9630: 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e  ..COMPILE_OPTION
9640: 20 7b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f   {SQLITE_ENABLE_
9650: 53 54 41 54 32 7d 20 7b 0a 20 20 54 68 69 73 20  STAT2} {.  This 
9660: 6f 70 74 69 6f 6e 20 75 73 65 64 20 74 6f 20 63  option used to c
9670: 61 75 73 65 20 74 68 65 20 5b 41 4e 41 4c 59 5a  ause the [ANALYZ
9680: 45 5d 20 63 6f 6d 6d 61 6e 64 20 74 6f 20 63 6f  E] command to co
9690: 6c 6c 65 63 74 0a 20 20 69 6e 64 65 78 20 68 69  llect.  index hi
96a0: 73 74 6f 67 72 61 6d 20 64 61 74 61 20 69 6e 20  stogram data in 
96b0: 74 68 65 20 3c 62 3e 73 71 6c 69 74 65 5f 73 74  the <b>sqlite_st
96c0: 61 74 32 3c 2f 62 3e 20 74 61 62 6c 65 2e 20 20  at2</b> table.  
96d0: 42 75 74 20 74 68 61 74 0a 20 20 66 75 6e 63 74  But that.  funct
96e0: 69 6f 6e 61 6c 69 74 79 20 77 61 73 20 73 75 70  ionality was sup
96f0: 65 72 63 65 64 65 64 20 62 79 20 5b 53 51 4c 49  erceded by [SQLI
9700: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5d  TE_ENABLE_STAT3]
9710: 20 61 73 20 6f 66 0a 20 20 53 51 4c 69 74 65 20   as of.  SQLite 
9720: 76 65 72 73 69 6f 6e 20 33 2e 37 2e 39 2e 20 20  version 3.7.9.  
9730: 54 68 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  The SQLITE_ENABL
9740: 45 5f 53 54 41 54 32 20 63 6f 6d 70 69 6c 65 2d  E_STAT2 compile-
9750: 74 69 6d 65 20 6f 70 74 69 6f 6e 0a 20 20 69 73  time option.  is
9760: 20 6e 6f 77 20 61 20 6e 6f 2d 6f 70 2e 0a 7d 0a   now a no-op..}.
9770: 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20  .COMPILE_OPTION 
9780: 7b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53  {SQLITE_ENABLE_S
9790: 54 41 54 33 7d 20 7b 0a 20 20 54 68 69 73 20 6f  TAT3} {.  This o
97a0: 70 74 69 6f 6e 20 61 64 64 73 20 61 64 64 69 74  ption adds addit
97b0: 69 6f 6e 61 6c 20 6c 6f 67 69 63 20 74 6f 20 74  ional logic to t
97c0: 68 65 20 5b 41 4e 41 4c 59 5a 45 5d 20 63 6f 6d  he [ANALYZE] com
97d0: 6d 61 6e 64 20 61 6e 64 20 74 6f 0a 20 20 74 68  mand and to.  th
97e0: 65 20 5b 71 75 65 72 79 20 70 6c 61 6e 6e 65 72  e [query planner
97f0: 5d 20 74 68 61 74 20 63 61 6e 20 68 65 6c 70 20  ] that can help 
9800: 53 51 4c 69 74 65 20 74 6f 20 63 68 6f 73 65 20  SQLite to chose 
9810: 61 20 62 65 74 74 65 72 20 71 75 65 72 79 20 70  a better query p
9820: 6c 61 6e 0a 20 20 75 6e 64 65 72 20 63 65 72 74  lan.  under cert
9830: 61 69 6e 20 73 69 74 75 61 74 69 6f 6e 73 2e 20  ain situations. 
9840: 20 54 68 65 20 5b 41 4e 41 4c 59 5a 45 5d 20 63   The [ANALYZE] c
9850: 6f 6d 6d 61 6e 64 20 69 73 20 65 6e 68 61 6e 63  ommand is enhanc
9860: 65 64 20 74 6f 20 63 6f 6c 6c 65 63 74 0a 20 20  ed to collect.  
9870: 68 69 73 74 6f 67 72 61 6d 20 64 61 74 61 20 66  histogram data f
9880: 72 6f 6d 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73  rom the left-mos
9890: 74 20 63 6f 6c 75 6d 6e 20 6f 66 20 65 61 63 68  t column of each
98a0: 20 69 6e 64 65 78 20 61 6e 64 20 73 74 6f 72 65   index and store
98b0: 20 74 68 61 74 20 64 61 74 61 0a 20 20 69 6e 20   that data.  in 
98c0: 74 68 65 20 5b 73 71 6c 69 74 65 5f 73 74 61 74  the [sqlite_stat
98d0: 33 5d 20 74 61 62 6c 65 2e 20 20 54 68 65 20 71  3] table.  The q
98e0: 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 77 69 6c  uery planner wil
98f0: 6c 20 74 68 65 6e 20 75 73 65 20 74 68 65 0a 20  l then use the. 
9900: 20 68 69 73 74 6f 67 72 61 6d 20 64 61 74 61 20   histogram data 
9910: 74 6f 20 68 65 6c 70 20 69 74 20 6d 61 6b 65 20  to help it make 
9920: 62 65 74 74 65 72 20 69 6e 64 65 78 20 63 68 6f  better index cho
9930: 69 63 65 73 2e 20 20 4e 6f 74 65 2c 20 68 6f 77  ices.  Note, how
9940: 65 76 65 72 2c 0a 20 20 74 68 61 74 20 74 68 65  ever,.  that the
9950: 20 75 73 65 20 6f 66 20 68 69 73 74 6f 67 72 61   use of histogra
9960: 6d 20 64 61 74 61 20 69 6e 20 71 75 65 72 79 20  m data in query 
9970: 70 6c 61 6e 6e 65 72 20 76 69 6f 6c 61 74 65 73  planner violates
9980: 20 74 68 65 0a 20 20 5b 71 75 65 72 79 20 70 6c   the.  [query pl
9990: 61 6e 6e 65 72 20 73 74 61 62 69 6c 69 74 79 20  anner stability 
99a0: 67 75 61 72 61 6e 74 65 65 5d 20 77 68 69 63 68  guarantee] which
99b0: 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f   is important to
99c0: 20 73 6f 6d 65 20 61 70 70 6c 69 63 61 74 69 6f   some applicatio
99d0: 6e 73 2e 0a 20 20 3c 70 3e 0a 7d 0a 0a 43 4f 4d  ns..  <p>.}..COM
99e0: 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c  PILE_OPTION {SQL
99f0: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34  ITE_ENABLE_STAT4
9a00: 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70 74 69 6f  } {.  This optio
9a10: 6e 20 61 64 64 73 20 61 64 64 69 74 69 6f 6e 61  n adds additiona
9a20: 6c 20 6c 6f 67 69 63 20 74 6f 20 74 68 65 20 5b  l logic to the [
9a30: 41 4e 41 4c 59 5a 45 5d 20 63 6f 6d 6d 61 6e 64  ANALYZE] command
9a40: 20 61 6e 64 20 74 6f 0a 20 20 74 68 65 20 5b 71   and to.  the [q
9a50: 75 65 72 79 20 70 6c 61 6e 6e 65 72 5d 20 74 68  uery planner] th
9a60: 61 74 20 63 61 6e 20 68 65 6c 70 20 53 51 4c 69  at can help SQLi
9a70: 74 65 20 74 6f 20 63 68 6f 73 65 20 61 20 62 65  te to chose a be
9a80: 74 74 65 72 20 71 75 65 72 79 20 70 6c 61 6e 0a  tter query plan.
9a90: 20 20 75 6e 64 65 72 20 63 65 72 74 61 69 6e 20    under certain 
9aa0: 73 69 74 75 61 74 69 6f 6e 73 2e 20 20 54 68 65  situations.  The
9ab0: 20 5b 41 4e 41 4c 59 5a 45 5d 20 63 6f 6d 6d 61   [ANALYZE] comma
9ac0: 6e 64 20 69 73 20 65 6e 68 61 6e 63 65 64 20 74  nd is enhanced t
9ad0: 6f 20 63 6f 6c 6c 65 63 74 0a 20 20 68 69 73 74  o collect.  hist
9ae0: 6f 67 72 61 6d 20 64 61 74 61 20 66 72 6f 6d 20  ogram data from 
9af0: 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 65  all columns of e
9b00: 76 65 72 79 20 69 6e 64 65 78 20 61 6e 64 20 73  very index and s
9b10: 74 6f 72 65 20 74 68 61 74 20 64 61 74 61 0a 20  tore that data. 
9b20: 20 69 6e 20 74 68 65 20 5b 73 71 6c 69 74 65 5f   in the [sqlite_
9b30: 73 74 61 74 34 5d 20 74 61 62 6c 65 2e 20 20 54  stat4] table.  T
9b40: 68 65 20 71 75 65 72 79 20 70 6c 61 6e 6e 65 72  he query planner
9b50: 20 77 69 6c 6c 20 74 68 65 6e 20 75 73 65 20 74   will then use t
9b60: 68 65 0a 20 20 68 69 73 74 6f 67 72 61 6d 20 64  he.  histogram d
9b70: 61 74 61 20 74 6f 20 68 65 6c 70 20 69 74 20 6d  ata to help it m
9b80: 61 6b 65 20 62 65 74 74 65 72 20 69 6e 64 65 78  ake better index
9b90: 20 63 68 6f 69 63 65 73 2e 20 20 54 68 65 20 64   choices.  The d
9ba0: 6f 77 6e 73 69 64 65 20 6f 66 0a 20 20 74 68 69  ownside of.  thi
9bb0: 73 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f  s compile-time o
9bc0: 70 74 69 6f 6e 20 69 73 20 74 68 61 74 20 69 74  ption is that it
9bd0: 20 76 69 6f 6c 61 74 65 73 20 74 68 65 0a 20 20   violates the.  
9be0: 5b 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 73  [query planner s
9bf0: 74 61 62 69 6c 69 74 79 20 67 75 61 72 61 6e 74  tability guarant
9c00: 65 65 5d 20 6d 61 6b 69 6e 67 20 69 74 20 6d 6f  ee] making it mo
9c10: 72 65 20 64 69 66 66 69 63 75 6c 74 20 74 6f 20  re difficult to 
9c20: 65 6e 73 75 72 65 0a 20 20 63 6f 6e 73 69 73 74  ensure.  consist
9c30: 65 6e 74 20 70 65 72 66 6f 72 6d 61 6e 63 65 20  ent performance 
9c40: 69 6e 20 6d 61 73 73 2d 70 72 6f 64 75 63 65 64  in mass-produced
9c50: 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 2e 0a 20   applications.. 
9c60: 20 3c 70 3e 0a 20 20 53 51 4c 49 54 45 5f 45 4e   <p>.  SQLITE_EN
9c70: 41 42 4c 45 5f 53 54 41 54 34 20 69 73 20 61 6e  ABLE_STAT4 is an
9c80: 20 65 6e 68 61 6e 63 65 6d 65 6e 74 20 6f 66 20   enhancement of 
9c90: 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53  [SQLITE_ENABLE_S
9ca0: 54 41 54 33 5d 2e 20 20 53 54 41 54 33 0a 20 20  TAT3].  STAT3.  
9cb0: 6f 6e 6c 79 20 72 65 63 6f 72 64 65 64 20 68 69  only recorded hi
9cc0: 73 74 6f 67 72 61 6d 20 64 61 74 61 20 66 6f 72  stogram data for
9cd0: 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 63   the left-most c
9ce0: 6f 6c 75 6d 6e 20 6f 66 20 65 61 63 68 20 69 6e  olumn of each in
9cf0: 64 65 78 0a 20 20 77 68 65 72 65 61 73 20 74 68  dex.  whereas th
9d00: 65 20 53 54 41 54 34 20 65 6e 68 61 6e 63 65 6d  e STAT4 enhancem
9d10: 65 6e 74 20 72 65 63 6f 72 64 73 20 68 69 73 74  ent records hist
9d20: 6f 67 72 61 6d 20 64 61 74 61 20 66 72 6f 6d 20  ogram data from 
9d30: 61 6c 6c 20 63 6f 6c 75 6d 6e 73 0a 20 20 6f 66  all columns.  of
9d40: 20 65 61 63 68 20 69 6e 64 65 78 2e 0a 20 20 54   each index..  T
9d50: 68 65 20 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c  he [SQLITE_ENABL
9d60: 45 5f 53 54 41 54 33 5d 20 63 6f 6d 70 69 6c 65  E_STAT3] compile
9d70: 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20  -time option is 
9d80: 61 20 6e 6f 2d 6f 70 20 61 6e 64 20 69 73 20 69  a no-op and is i
9d90: 67 6e 6f 72 65 64 0a 20 20 69 66 20 74 68 65 20  gnored.  if the 
9da0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
9db0: 41 54 34 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  AT4 compile-time
9dc0: 20 6f 70 74 69 6f 6e 20 69 73 20 75 73 65 64 2e   option is used.
9dd0: 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49  .}..COMPILE_OPTI
9de0: 4f 4e 20 7b 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ON {SQLITE_ENABL
9df0: 45 5f 54 52 45 45 5f 45 58 50 4c 41 49 4e 7d 20  E_TREE_EXPLAIN} 
9e00: 7b 0a 20 20 54 68 69 73 20 63 6f 6d 70 69 6c 65  {.  This compile
9e10: 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20  -time option is 
9e20: 6e 6f 20 6c 6f 6e 67 65 72 20 75 73 65 64 2e 0a  no longer used..
9e30: 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f  }..COMPILE_OPTIO
9e40: 4e 20 7b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  N {SQLITE_ENABLE
9e50: 5f 55 50 44 41 54 45 5f 44 45 4c 45 54 45 5f 4c  _UPDATE_DELETE_L
9e60: 49 4d 49 54 7d 20 7b 0a 20 20 54 68 69 73 20 6f  IMIT} {.  This o
9e70: 70 74 69 6f 6e 20 65 6e 61 62 6c 65 73 20 61 6e  ption enables an
9e80: 20 6f 70 74 69 6f 6e 61 6c 20 4f 52 44 45 52 20   optional ORDER 
9e90: 42 59 20 61 6e 64 20 4c 49 4d 49 54 20 63 6c 61  BY and LIMIT cla
9ea0: 75 73 65 20 6f 6e 20 0a 20 20 5b 55 50 44 41 54  use on .  [UPDAT
9eb0: 45 5d 20 61 6e 64 20 5b 44 45 4c 45 54 45 5d 20  E] and [DELETE] 
9ec0: 73 74 61 74 65 6d 65 6e 74 73 2e 0a 0a 20 20 3c  statements...  <
9ed0: 70 3e 49 66 20 74 68 69 73 20 6f 70 74 69 6f 6e  p>If this option
9ee0: 20 69 73 20 64 65 66 69 6e 65 64 2c 20 74 68 65   is defined, the
9ef0: 6e 20 69 74 20 6d 75 73 74 20 61 6c 73 6f 20 62  n it must also b
9f00: 65 20 0a 20 20 64 65 66 69 6e 65 64 20 77 68 65  e .  defined whe
9f10: 6e 20 75 73 69 6e 67 20 74 68 65 20 27 6c 65 6d  n using the 'lem
9f20: 6f 6e 27 20 74 6f 6f 6c 20 74 6f 20 67 65 6e 65  on' tool to gene
9f30: 72 61 74 65 20 61 20 70 61 72 73 65 2e 63 0a 20  rate a parse.c. 
9f40: 20 66 69 6c 65 2e 20 42 65 63 61 75 73 65 20 6f   file. Because o
9f50: 66 20 74 68 69 73 2c 20 74 68 69 73 20 6f 70 74  f this, this opt
9f60: 69 6f 6e 20 6d 61 79 20 6f 6e 6c 79 20 62 65 20  ion may only be 
9f70: 75 73 65 64 20 77 68 65 6e 20 74 68 65 20 6c 69  used when the li
9f80: 62 72 61 72 79 20 69 73 20 62 75 69 6c 74 0a 20  brary is built. 
9f90: 20 66 72 6f 6d 20 73 6f 75 72 63 65 2c 20 6e 6f   from source, no
9fa0: 74 20 66 72 6f 6d 20 74 68 65 20 5b 61 6d 61 6c  t from the [amal
9fb0: 67 61 6d 61 74 69 6f 6e 5d 20 6f 72 20 66 72 6f  gamation] or fro
9fc0: 6d 20 74 68 65 20 63 6f 6c 6c 65 63 74 69 6f 6e  m the collection
9fd0: 20 6f 66 0a 20 20 70 72 65 2d 70 61 63 6b 61 67   of.  pre-packag
9fe0: 65 64 20 43 20 66 69 6c 65 73 20 70 72 6f 76 69  ed C files provi
9ff0: 64 65 64 20 66 6f 72 20 6e 6f 6e 2d 55 6e 69 78  ded for non-Unix
a000: 20 6c 69 6b 65 20 70 6c 61 74 66 6f 72 6d 73 20   like platforms 
a010: 6f 6e 20 74 68 65 20 77 65 62 73 69 74 65 2e 0a  on the website..
a020: 20 20 3c 2f 70 3e 0a 7d 0a 0a 43 4f 4d 50 49 4c    </p>.}..COMPIL
a030: 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45  E_OPTION {SQLITE
a040: 5f 45 4e 41 42 4c 45 5f 55 4e 4b 4e 4f 57 4e 5f  _ENABLE_UNKNOWN_
a050: 53 51 4c 5f 46 55 4e 43 54 49 4f 4e 7d 20 7b 0a  SQL_FUNCTION} {.
a060: 20 20 57 68 65 6e 20 74 68 65 20 53 51 4c 49 54    When the SQLIT
a070: 45 5f 45 4e 41 42 4c 45 5f 55 4e 4b 4e 4f 57 4e  E_ENABLE_UNKNOWN
a080: 5f 53 51 4c 5f 46 55 4e 43 54 49 4f 4e 20 63 6f  _SQL_FUNCTION co
a090: 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
a0a0: 6e 20 69 73 0a 20 20 61 63 74 69 76 61 74 65 64  n is.  activated
a0b0: 2c 20 53 51 4c 69 74 65 20 77 69 6c 6c 20 73 75  , SQLite will su
a0c0: 70 70 72 65 73 73 20 22 75 6e 6b 6e 6f 77 6e 20  ppress "unknown 
a0d0: 66 75 6e 63 74 69 6f 6e 22 20 65 72 72 6f 72 73  function" errors
a0e0: 20 77 68 65 6e 20 72 75 6e 6e 69 6e 67 0a 20 20   when running.  
a0f0: 61 6e 20 5b 45 58 50 4c 41 49 4e 5d 20 6f 72 20  an [EXPLAIN] or 
a100: 5b 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50  [EXPLAIN QUERY P
a110: 4c 41 4e 5d 2e 20 20 49 6e 73 74 65 61 64 20 6f  LAN].  Instead o
a120: 66 20 74 68 72 6f 77 69 6e 67 20 61 6e 20 65 72  f throwing an er
a130: 72 6f 72 2c 0a 20 20 53 51 4c 69 74 65 20 77 69  ror,.  SQLite wi
a140: 6c 6c 20 69 6e 73 65 72 74 20 61 20 73 75 62 73  ll insert a subs
a150: 74 69 74 75 74 65 20 6e 6f 2d 6f 70 20 66 75 6e  titute no-op fun
a160: 63 74 69 6f 6e 20 6e 61 6d 65 64 20 22 75 6e 6b  ction named "unk
a170: 6e 6f 77 6e 28 29 22 2e 0a 20 20 54 68 65 20 73  nown()"..  The s
a180: 75 62 73 74 69 74 75 74 69 6f 6e 20 6f 66 20 22  ubstitution of "
a190: 75 6e 6b 6e 6f 77 6e 28 29 22 20 69 6e 20 70 6c  unknown()" in pl
a1a0: 61 63 65 20 6f 66 20 75 6e 72 65 63 6f 67 6e 69  ace of unrecogni
a1b0: 7a 65 64 20 66 75 6e 63 74 69 6f 6e 73 0a 20 20  zed functions.  
a1c0: 6f 6e 6c 79 20 6f 63 63 75 72 73 20 6f 6e 20 5b  only occurs on [
a1d0: 45 58 50 4c 41 49 4e 5d 20 61 6e 64 20 5b 45 58  EXPLAIN] and [EX
a1e0: 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e  PLAIN QUERY PLAN
a1f0: 5d 2c 20 6e 6f 74 20 6f 6e 20 6f 72 64 69 6e 61  ], not on ordina
a200: 72 79 0a 20 20 73 74 61 74 65 6d 65 6e 74 73 2e  ry.  statements.
a210: 0a 20 20 3c 70 3e 0a 20 20 57 68 65 6e 20 75 73  .  <p>.  When us
a220: 65 64 20 69 6e 20 74 68 65 20 5b 63 6f 6d 6d 61  ed in the [comma
a230: 6e 64 2d 6c 69 6e 65 20 73 68 65 6c 6c 5d 2c 20  nd-line shell], 
a240: 74 68 65 0a 20 20 53 51 4c 49 54 45 5f 45 4e 41  the.  SQLITE_ENA
a250: 42 4c 45 5f 55 4e 4b 4e 4f 57 4e 5f 53 51 4c 5f  BLE_UNKNOWN_SQL_
a260: 46 55 4e 43 54 49 4f 4e 20 66 65 61 74 75 72 65  FUNCTION feature
a270: 20 61 6c 6c 6f 77 73 20 53 51 4c 20 74 65 78 74   allows SQL text
a280: 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 0a 20   that contains. 
a290: 20 61 70 70 6c 69 63 61 74 69 6f 6e 2d 64 65 66   application-def
a2a0: 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73 20 74  ined functions t
a2b0: 6f 20 62 65 20 70 61 73 74 65 64 20 69 6e 74 6f  o be pasted into
a2c0: 20 74 68 65 20 73 68 65 6c 6c 20 66 6f 72 20 0a   the shell for .
a2d0: 20 20 61 6e 61 6c 79 73 69 73 20 61 6e 64 20 64    analysis and d
a2e0: 65 62 75 67 67 69 6e 67 20 77 69 74 68 6f 75 74  ebugging without
a2f0: 20 68 61 76 69 6e 67 20 74 6f 20 63 72 65 61 74   having to creat
a300: 65 20 61 6e 64 20 6c 6f 61 64 20 61 6e 0a 20 20  e and load an.  
a310: 65 78 74 65 6e 73 69 6f 6e 20 74 68 61 74 20 69  extension that i
a320: 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 61 70  mplements the ap
a330: 70 6c 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65  plication-define
a340: 64 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 7d 0a 0a  d functions..}..
a350: 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b  COMPILE_OPTION {
a360: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 4e  SQLITE_ENABLE_UN
a370: 4c 4f 43 4b 5f 4e 4f 54 49 46 59 7d 20 7b 0a 20  LOCK_NOTIFY} {. 
a380: 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 65 6e 61   This option ena
a390: 62 6c 65 73 20 74 68 65 20 5b 73 71 6c 69 74 65  bles the [sqlite
a3a0: 33 5f 75 6e 6c 6f 63 6b 5f 6e 6f 74 69 66 79 28  3_unlock_notify(
a3b0: 29 5d 20 69 6e 74 65 72 66 61 63 65 20 61 6e 64  )] interface and
a3c0: 0a 20 20 69 74 73 20 61 73 73 6f 63 69 61 74 65  .  its associate
a3d0: 64 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 2e  d functionality.
a3e0: 20 20 53 65 65 20 74 68 65 20 64 6f 63 75 6d 65    See the docume
a3f0: 6e 74 61 74 69 6f 6e 20 74 69 74 6c 65 64 0a 20  ntation titled. 
a400: 20 5b 55 73 69 6e 67 20 74 68 65 20 53 51 4c 69   [Using the SQLi
a410: 74 65 20 55 6e 6c 6f 63 6b 20 4e 6f 74 69 66 69  te Unlock Notifi
a420: 63 61 74 69 6f 6e 20 46 65 61 74 75 72 65 5d 20  cation Feature] 
a430: 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 0a 20  for additional. 
a440: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 7d 0a   information..}.
a450: 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20  .COMPILE_OPTION 
a460: 7b 53 51 4c 49 54 45 5f 53 4f 55 4e 44 45 58 7d  {SQLITE_SOUNDEX}
a470: 20 7b 0a 20 20 54 68 69 73 20 6f 70 74 69 6f 6e   {.  This option
a480: 20 65 6e 61 62 6c 65 73 20 74 68 65 20 5b 73 6f   enables the [so
a490: 75 6e 64 65 78 28 29 20 53 51 4c 20 66 75 6e 63  undex() SQL func
a4a0: 74 69 6f 6e 5d 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c  tion]..}..COMPIL
a4b0: 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45  E_OPTION {SQLITE
a4c0: 5f 55 53 45 5f 46 43 4e 54 4c 5f 54 52 41 43 45  _USE_FCNTL_TRACE
a4d0: 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70 74 69 6f  } {.  This optio
a4e0: 6e 20 63 61 75 73 65 73 20 53 51 4c 69 74 65 20  n causes SQLite 
a4f0: 74 6f 20 69 73 73 75 65 20 65 78 74 72 61 20 5b  to issue extra [
a500: 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 54 52 41  SQLITE_FCNTL_TRA
a510: 43 45 5d 20 66 69 6c 65 20 63 6f 6e 74 72 6f 6c  CE] file control
a520: 73 0a 20 20 74 6f 20 70 72 6f 76 69 64 65 20 73  s.  to provide s
a530: 75 70 70 6c 65 6d 65 6e 74 61 72 79 20 69 6e 66  upplementary inf
a540: 6f 72 6d 61 74 69 6f 6e 20 74 6f 20 74 68 65 20  ormation to the 
a550: 56 46 53 2e 20 20 54 68 65 20 22 76 66 73 6c 6f  VFS.  The "vfslo
a560: 67 2e 63 22 20 65 78 74 65 6e 73 69 6f 6e 0a 20  g.c" extension. 
a570: 20 6d 61 6b 65 73 20 75 73 65 20 6f 66 20 74 68   makes use of th
a580: 69 73 20 74 6f 20 70 72 6f 76 69 64 65 20 65 6e  is to provide en
a590: 68 61 6e 63 65 64 20 6c 6f 67 73 20 6f 66 20 56  hanced logs of V
a5a0: 46 53 20 61 63 74 69 76 69 74 79 2e 0a 7d 0a 0a  FS activity..}..
a5b0: 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b  COMPILE_OPTION {
a5c0: 59 59 54 52 41 43 4b 4d 41 58 53 54 41 43 4b 44  YYTRACKMAXSTACKD
a5d0: 45 50 54 48 7d 20 7b 0a 20 20 54 68 69 73 20 6f  EPTH} {.  This o
a5e0: 70 74 69 6f 6e 20 63 61 75 73 65 73 20 74 68 65  ption causes the
a5f0: 20 4c 41 4c 52 28 31 29 20 70 61 72 73 65 72 20   LALR(1) parser 
a600: 73 74 61 63 6b 20 64 65 70 74 68 20 74 6f 20 62  stack depth to b
a610: 65 20 74 72 61 63 6b 65 64 0a 20 20 61 6e 64 20  e tracked.  and 
a620: 72 65 70 6f 72 74 65 64 20 75 73 69 6e 67 20 74  reported using t
a630: 68 65 20 5b 73 71 6c 69 74 65 33 5f 73 74 61 74  he [sqlite3_stat
a640: 75 73 5d 28 5b 53 51 4c 49 54 45 5f 53 54 41 54  us]([SQLITE_STAT
a650: 55 53 5f 50 41 52 53 45 52 5f 53 54 41 43 4b 5d  US_PARSER_STACK]
a660: 2c 2e 2e 2e 29 0a 20 20 69 6e 74 65 72 66 61 63  ,...).  interfac
a670: 65 2e 20 20 53 51 4c 69 74 65 27 73 20 4c 41 4c  e.  SQLite's LAL
a680: 52 28 31 29 20 70 61 72 73 65 72 20 68 61 73 20  R(1) parser has 
a690: 61 20 66 69 78 65 64 20 73 74 61 63 6b 20 64 65  a fixed stack de
a6a0: 70 74 68 0a 20 20 28 64 65 74 65 72 6d 69 6e 65  pth.  (determine
a6b0: 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  d at compile-tim
a6c0: 65 20 75 73 69 6e 67 20 74 68 65 20 5b 59 59 53  e using the [YYS
a6d0: 54 41 43 4b 44 45 50 54 48 5d 20 6f 70 74 69 6f  TACKDEPTH] optio
a6e0: 6e 73 29 2e 0a 20 20 54 68 69 73 20 6f 70 74 69  ns)..  This opti
a6f0: 6f 6e 20 63 61 6e 20 62 65 20 75 73 65 64 20 74  on can be used t
a700: 6f 20 68 65 6c 70 20 64 65 74 65 72 6d 69 6e 65  o help determine
a710: 20 69 66 20 61 6e 20 61 70 70 6c 69 63 61 74 69   if an applicati
a720: 6f 6e 20 69 73 0a 20 20 67 65 74 74 69 6e 67 20  on is.  getting 
a730: 63 6c 6f 73 65 20 74 6f 20 65 78 63 65 65 64 69  close to exceedi
a740: 6e 67 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 4c  ng the maximum L
a750: 41 4c 52 28 31 29 20 73 74 61 63 6b 20 64 65 70  ALR(1) stack dep
a760: 74 68 2e 0a 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 61  th..}.</tcl>..<a
a770: 20 6e 61 6d 65 3d 22 64 69 73 61 62 6c 65 66 65   name="disablefe
a780: 61 74 75 72 65 73 22 3e 3c 2f 61 3e 0a 3c 68 31  atures"></a>.<h1
a790: 3e 20 4f 70 74 69 6f 6e 73 20 54 6f 20 44 69 73  > Options To Dis
a7a0: 61 62 6c 65 20 46 65 61 74 75 72 65 73 20 4e 6f  able Features No
a7b0: 72 6d 61 6c 6c 79 20 54 75 72 6e 65 64 20 4f 6e  rmally Turned On
a7c0: 3c 2f 68 31 3e 0a 0a 3c 74 63 6c 3e 0a 43 4f 4d  </h1>..<tcl>.COM
a7d0: 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c  PILE_OPTION {SQL
a7e0: 49 54 45 5f 44 49 53 41 42 4c 45 5f 4c 46 53 7d  ITE_DISABLE_LFS}
a7f0: 20 7b 0a 20 20 49 66 20 74 68 69 73 20 43 2d 70   {.  If this C-p
a800: 72 65 70 72 6f 63 65 73 73 6f 72 20 6d 61 63 72  reprocessor macr
a810: 6f 20 69 73 20 64 65 66 69 6e 65 64 2c 20 6c 61  o is defined, la
a820: 72 67 65 20 66 69 6c 65 20 73 75 70 70 6f 72 74  rge file support
a830: 0a 20 20 69 73 20 64 69 73 61 62 6c 65 64 2e 0a  .  is disabled..
a840: 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f  }..COMPILE_OPTIO
a850: 4e 20 7b 53 51 4c 49 54 45 5f 44 49 53 41 42 4c  N {SQLITE_DISABL
a860: 45 5f 44 49 52 53 59 4e 43 7d 20 7b 0a 20 20 49  E_DIRSYNC} {.  I
a870: 66 20 74 68 69 73 20 43 2d 70 72 65 70 72 6f 63  f this C-preproc
a880: 65 73 73 6f 72 20 6d 61 63 72 6f 20 69 73 20 64  essor macro is d
a890: 65 66 69 6e 65 64 2c 20 64 69 72 65 63 74 6f 72  efined, director
a8a0: 79 20 73 79 6e 63 73 0a 20 20 61 72 65 20 64 69  y syncs.  are di
a8b0: 73 61 62 6c 65 64 2e 20 20 53 51 4c 69 74 65 20  sabled.  SQLite 
a8c0: 74 79 70 69 63 61 6c 6c 79 20 61 74 74 65 6d 70  typically attemp
a8d0: 74 73 20 74 6f 20 73 79 6e 63 20 74 68 65 20 70  ts to sync the p
a8e0: 61 72 65 6e 74 0a 20 20 64 69 72 65 63 74 6f 72  arent.  director
a8f0: 79 20 77 68 65 6e 20 61 20 66 69 6c 65 20 69 73  y when a file is
a900: 20 64 65 6c 65 74 65 64 20 74 6f 20 65 6e 73 75   deleted to ensu
a910: 72 65 20 74 68 65 20 64 69 72 65 63 74 6f 72 79  re the directory
a920: 0a 20 20 65 6e 74 72 69 65 73 20 61 72 65 20 75  .  entries are u
a930: 70 64 61 74 65 64 20 69 6d 6d 65 64 69 61 74 65  pdated immediate
a940: 6c 79 20 6f 6e 20 64 69 73 6b 2e 0a 7d 0a 0a 43  ly on disk..}..C
a950: 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53  OMPILE_OPTION {S
a960: 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 46 54  QLITE_DISABLE_FT
a970: 53 33 5f 55 4e 49 43 4f 44 45 7d 20 7b 0a 20 20  S3_UNICODE} {.  
a980: 49 66 20 74 68 69 73 20 43 2d 70 72 65 70 72 6f  If this C-prepro
a990: 63 65 73 73 6f 72 20 6d 61 63 72 6f 20 69 73 20  cessor macro is 
a9a0: 64 65 66 69 6e 65 64 2c 20 74 68 65 20 5b 75 6e  defined, the [un
a9b0: 69 63 6f 64 65 36 31 5d 20 74 6f 6b 65 6e 69 7a  icode61] tokeniz
a9c0: 65 72 0a 20 20 69 6e 20 5b 46 54 53 33 5d 20 69  er.  in [FTS3] i
a9d0: 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74  s omitted from t
a9e0: 68 65 20 62 75 69 6c 64 20 61 6e 64 20 69 73 20  he build and is 
a9f0: 75 6e 61 76 61 69 6c 61 62 6c 65 20 74 6f 20 0a  unavailable to .
aa00: 20 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 2e 0a    applications..
aa10: 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f  }..COMPILE_OPTIO
aa20: 4e 20 7b 53 51 4c 49 54 45 5f 44 49 53 41 42 4c  N {SQLITE_DISABL
aa30: 45 5f 46 54 53 34 5f 44 45 46 45 52 52 45 44 7d  E_FTS4_DEFERRED}
aa40: 20 7b 0a 20 20 49 66 20 74 68 69 73 20 43 2d 70   {.  If this C-p
aa50: 72 65 70 72 6f 63 65 73 73 6f 72 20 6d 61 63 72  reprocessor macr
aa60: 6f 20 64 69 73 61 62 6c 65 73 20 74 68 65 20 22  o disables the "
aa70: 64 65 66 65 72 72 65 64 20 74 6f 6b 65 6e 22 20  deferred token" 
aa80: 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 0a 20 20 69  optimization.  i
aa90: 6e 20 5b 46 54 53 34 5d 2e 20 20 54 68 65 20 22  n [FTS4].  The "
aaa0: 64 65 66 65 72 72 65 64 20 74 6f 6b 65 6e 22 20  deferred token" 
aab0: 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 61 76 6f  optimization avo
aac0: 69 64 73 20 6c 6f 61 64 69 6e 67 20 6d 61 73 73  ids loading mass
aad0: 69 76 65 0a 20 20 70 6f 73 74 69 6e 67 20 6c 69  ive.  posting li
aae0: 73 74 73 20 66 6f 72 20 74 65 72 6d 73 20 74 68  sts for terms th
aaf0: 61 74 20 61 72 65 20 69 6e 20 6d 6f 73 74 20 64  at are in most d
ab00: 6f 63 75 6d 65 6e 74 73 20 6f 66 20 74 68 65 20  ocuments of the 
ab10: 63 6f 6c 6c 65 63 74 69 6f 6e 0a 20 20 61 6e 64  collection.  and
ab20: 20 69 6e 73 74 65 61 64 20 73 69 6d 70 6c 79 20   instead simply 
ab30: 73 63 61 6e 73 20 66 6f 72 20 74 68 6f 73 65 20  scans for those 
ab40: 74 6f 6b 65 6e 73 20 69 6e 20 74 68 65 20 64 6f  tokens in the do
ab50: 63 75 6d 65 6e 74 20 73 6f 75 72 63 65 2e 20 20  cument source.  
ab60: 5b 46 54 53 34 5d 0a 20 20 73 68 6f 75 6c 64 20  [FTS4].  should 
ab70: 67 65 74 20 65 78 61 63 74 6c 79 20 74 68 65 20  get exactly the 
ab80: 73 61 6d 65 20 61 6e 73 77 65 72 20 62 6f 74 68  same answer both
ab90: 20 77 69 74 68 20 61 6e 64 20 77 69 74 68 6f 75   with and withou
aba0: 74 20 74 68 69 73 20 6f 70 74 69 6d 69 7a 61 74  t this optimizat
abb0: 69 6f 6e 2e 0a 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c  ion..}.</tcl>..<
abc0: 74 63 6c 3e 0a 20 20 68 64 5f 66 72 61 67 6d 65  tcl>.  hd_fragme
abd0: 6e 74 20 22 6f 6d 69 74 66 65 61 74 75 72 65 73  nt "omitfeatures
abe0: 22 0a 20 20 68 64 5f 6b 65 79 77 6f 72 64 73 20  ".  hd_keywords 
abf0: 22 6f 6d 69 74 66 65 61 74 75 72 65 73 22 0a 3c  "omitfeatures".<
ac00: 2f 74 63 6c 3e 0a 3c 68 31 3e 20 4f 70 74 69 6f  /tcl>.<h1> Optio
ac10: 6e 73 20 54 6f 20 4f 6d 69 74 20 46 65 61 74 75  ns To Omit Featu
ac20: 72 65 73 3c 2f 68 31 3e 0a 0a 3c 70 3e 54 68 65  res</h1>..<p>The
ac30: 20 66 6f 6c 6c 6f 77 69 6e 67 20 6f 70 74 69 6f   following optio
ac40: 6e 73 20 63 61 6e 20 62 65 20 75 73 65 64 20 74  ns can be used t
ac50: 6f 20 0a 5b 72 65 6c 66 6f 6f 74 70 72 69 6e 74  o .[relfootprint
ac60: 20 7c 20 72 65 64 75 63 65 20 74 68 65 20 73 69   | reduce the si
ac70: 7a 65 20 6f 66 20 74 68 65 20 63 6f 6d 70 69 6c  ze of the compil
ac80: 65 64 20 6c 69 62 72 61 72 79 5d 0a 62 79 20 6f  ed library].by o
ac90: 6d 69 74 74 69 6e 67 20 75 6e 75 73 65 64 20 66  mitting unused f
aca0: 65 61 74 75 72 65 73 2e 20 54 68 69 73 20 69 73  eatures. This is
acb0: 20 70 72 6f 62 61 62 6c 79 20 6f 6e 6c 79 20 75   probably only u
acc0: 73 65 66 75 6c 0a 69 6e 20 65 6d 62 65 64 64 65  seful.in embedde
acd0: 64 20 73 79 73 74 65 6d 73 20 77 68 65 72 65 20  d systems where 
ace0: 73 70 61 63 65 20 69 73 20 65 73 70 65 63 69 61  space is especia
acf0: 6c 6c 79 20 74 69 67 68 74 2c 20 61 73 20 65 76  lly tight, as ev
ad00: 65 6e 20 77 69 74 68 20 61 6c 6c 0a 66 65 61 74  en with all.feat
ad10: 75 72 65 73 20 69 6e 63 6c 75 64 65 64 20 74 68  ures included th
ad20: 65 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79  e SQLite library
ad30: 20 69 73 20 72 65 6c 61 74 69 76 65 6c 79 20 73   is relatively s
ad40: 6d 61 6c 6c 2e 20 44 6f 6e 27 74 20 66 6f 72 67  mall. Don't forg
ad50: 65 74 0a 74 6f 20 74 65 6c 6c 20 79 6f 75 72 20  et.to tell your 
ad60: 63 6f 6d 70 69 6c 65 72 20 74 6f 20 6f 70 74 69  compiler to opti
ad70: 6d 69 7a 65 20 66 6f 72 20 62 69 6e 61 72 79 20  mize for binary 
ad80: 73 69 7a 65 21 20 28 74 68 65 20 2d 4f 73 20 6f  size! (the -Os o
ad90: 70 74 69 6f 6e 20 69 66 0a 75 73 69 6e 67 20 47  ption if.using G
ada0: 43 43 29 2e 20 20 54 65 6c 6c 69 6e 67 20 79 6f  CC).  Telling yo
adb0: 75 72 20 63 6f 6d 70 69 6c 65 72 20 74 6f 20 6f  ur compiler to o
adc0: 70 74 69 6d 69 7a 65 20 66 6f 72 20 73 69 7a 65  ptimize for size
add0: 20 75 73 75 61 6c 6c 79 20 68 61 73 0a 61 20 6d   usually has.a m
ade0: 75 63 68 20 6c 61 72 67 65 72 20 69 6d 70 61 63  uch larger impac
adf0: 74 20 6f 6e 20 6c 69 62 72 61 72 79 20 66 6f 6f  t on library foo
ae00: 74 70 72 69 6e 74 20 74 68 61 6e 20 65 6d 70 6c  tprint than empl
ae10: 6f 79 69 6e 67 20 61 6e 79 20 6f 66 20 74 68 65  oying any of the
ae20: 73 65 0a 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  se.compile-time 
ae30: 6f 70 74 69 6f 6e 73 2e 20 20 59 6f 75 20 73 68  options.  You sh
ae40: 6f 75 6c 64 20 61 6c 73 6f 20 76 65 72 69 66 79  ould also verify
ae50: 20 74 68 61 74 20 0a 3c 61 20 68 72 65 66 3d 22   that .<a href="
ae60: 23 64 65 62 75 67 6f 70 74 69 6f 6e 73 22 3e 64  #debugoptions">d
ae70: 65 62 75 67 67 69 6e 67 20 6f 70 74 69 6f 6e 73  ebugging options
ae80: 3c 2f 61 3e 20 61 72 65 20 64 69 73 61 62 6c 65  </a> are disable
ae90: 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 6d  d.</p>..<p>The m
aea0: 61 63 72 6f 73 20 69 6e 20 74 68 69 73 20 73 65  acros in this se
aeb0: 63 74 69 6f 6e 20 64 6f 20 6e 6f 74 20 72 65 71  ction do not req
aec0: 75 69 72 65 20 76 61 6c 75 65 73 2e 20 54 68 65  uire values. The
aed0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 0a 63 6f 6d 70   following .comp
aee0: 69 6c 61 74 69 6f 6e 20 73 77 69 74 63 68 65 73  ilation switches
aef0: 20 61 6c 6c 20 68 61 76 65 20 74 68 65 20 73 61   all have the sa
af00: 6d 65 20 65 66 66 65 63 74 3a 3c 62 72 3e 0a 2d  me effect:<br>.-
af10: 44 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54  DSQLITE_OMIT_ALT
af20: 45 52 54 41 42 4c 45 3c 62 72 3e 0a 2d 44 53 51  ERTABLE<br>.-DSQ
af30: 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54  LITE_OMIT_ALTERT
af40: 41 42 4c 45 3d 31 3c 62 72 3e 0a 2d 44 53 51 4c  ABLE=1<br>.-DSQL
af50: 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41  ITE_OMIT_ALTERTA
af60: 42 4c 45 3d 30 0a 3c 2f 70 3e 0a 0a 3c 70 3e 49  BLE=0.</p>..<p>I
af70: 66 20 61 6e 79 20 6f 66 20 74 68 65 73 65 20 6f  f any of these o
af80: 70 74 69 6f 6e 73 20 61 72 65 20 64 65 66 69 6e  ptions are defin
af90: 65 64 2c 20 74 68 65 6e 20 74 68 65 20 73 61 6d  ed, then the sam
afa0: 65 20 73 65 74 20 6f 66 20 53 51 4c 49 54 45 5f  e set of SQLITE_
afb0: 4f 4d 49 54 5f 2a 0a 6f 70 74 69 6f 6e 73 20 6d  OMIT_*.options m
afc0: 75 73 74 20 61 6c 73 6f 20 62 65 20 64 65 66 69  ust also be defi
afd0: 6e 65 64 20 77 68 65 6e 20 75 73 69 6e 67 20 74  ned when using t
afe0: 68 65 20 27 6c 65 6d 6f 6e 27 20 74 6f 6f 6c 20  he 'lemon' tool 
aff0: 74 6f 20 67 65 6e 65 72 61 74 65 20 74 68 65 0a  to generate the.
b000: 70 61 72 73 65 2e 63 20 66 69 6c 65 20 61 6e 64  parse.c file and
b010: 20 77 68 65 6e 20 63 6f 6d 70 69 6c 69 6e 67 20   when compiling 
b020: 74 68 65 20 27 6d 6b 6b 65 79 77 6f 72 64 68 61  the 'mkkeywordha
b030: 73 68 27 20 74 6f 6f 6c 20 77 68 69 63 68 20 67  sh' tool which g
b040: 65 6e 65 72 61 74 65 73 20 0a 74 68 65 20 6b 65  enerates .the ke
b050: 79 77 6f 72 64 68 61 73 68 2e 68 20 66 69 6c 65  ywordhash.h file
b060: 2e 0a 42 65 63 61 75 73 65 20 6f 66 20 74 68 69  ..Because of thi
b070: 73 2c 20 74 68 65 73 65 20 6f 70 74 69 6f 6e 73  s, these options
b080: 20 6d 61 79 20 6f 6e 6c 79 20 62 65 20 75 73 65   may only be use
b090: 64 20 77 68 65 6e 20 74 68 65 20 6c 69 62 72 61  d when the libra
b0a0: 72 79 20 69 73 20 62 75 69 6c 74 0a 66 72 6f 6d  ry is built.from
b0b0: 20 63 61 6e 6f 6e 69 63 61 6c 20 73 6f 75 72 63   canonical sourc
b0c0: 65 2c 20 6e 6f 74 20 66 72 6f 6d 20 74 68 65 20  e, not from the 
b0d0: 5b 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 5d 2e 0a  [amalgamation]..
b0e0: 53 6f 6d 65 20 53 51 4c 49 54 45 5f 4f 4d 49 54  Some SQLITE_OMIT
b0f0: 5f 2a 20 6f 70 74 69 6f 6e 73 20 6d 69 67 68 74  _* options might
b100: 20 77 6f 72 6b 2c 20 6f 72 20 61 70 70 65 61 72   work, or appear
b110: 20 74 6f 20 77 6f 72 6b 2c 20 77 68 65 6e 20 75   to work, when u
b120: 73 65 64 20 77 69 74 68 0a 74 68 65 20 5b 61 6d  sed with.the [am
b130: 61 6c 67 61 6d 61 74 69 6f 6e 5d 2e 20 20 42 75  algamation].  Bu
b140: 74 20 74 68 69 73 20 69 73 20 6e 6f 74 20 67 75  t this is not gu
b150: 61 72 61 6e 74 65 65 64 2e 20 20 49 6e 20 67 65  aranteed.  In ge
b160: 6e 65 72 61 6c 2c 20 61 6c 77 61 79 73 20 63 6f  neral, always co
b170: 6d 70 69 6c 65 0a 66 72 6f 6d 20 63 61 6e 6f 6e  mpile.from canon
b180: 69 63 61 6c 20 73 6f 75 72 63 65 73 20 69 6e 20  ical sources in 
b190: 6f 72 64 65 72 20 74 6f 20 74 61 6b 65 20 61 64  order to take ad
b1a0: 76 61 6e 74 61 67 65 20 6f 66 20 53 51 4c 49 54  vantage of SQLIT
b1b0: 45 5f 4f 4d 49 54 5f 2a 20 6f 70 74 69 6f 6e 73  E_OMIT_* options
b1c0: 2e 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75  ..</p>..<blockqu
b1d0: 6f 74 65 3e 0a 3c 69 3e 3c 62 3e 49 6d 70 6f 72  ote>.<i><b>Impor
b1e0: 74 61 6e 74 20 4e 6f 74 65 3a 3c 2f 62 3e 20 54  tant Note:</b> T
b1f0: 68 65 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 2a  he SQLITE_OMIT_*
b200: 20 6f 70 74 69 6f 6e 73 20 6d 61 79 20 6e 6f 74   options may not
b210: 20 77 6f 72 6b 20 77 69 74 68 20 74 68 65 0a 5b   work with the.[
b220: 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 5d 2e 20 20  amalgamation].  
b230: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 2a 20 63 6f  SQLITE_OMIT_* co
b240: 6d 70 69 6c 65 2d 74 69 6d 65 0a 6f 70 74 69 6f  mpile-time.optio
b250: 6e 73 20 75 73 75 61 6c 6c 79 20 77 6f 72 6b 20  ns usually work 
b260: 63 6f 72 72 65 63 74 6c 79 20 6f 6e 6c 79 20 77  correctly only w
b270: 68 65 6e 20 53 51 4c 69 74 65 20 69 73 20 62 75  hen SQLite is bu
b280: 69 6c 74 20 66 72 6f 6d 20 63 61 6e 6f 6e 69 63  ilt from canonic
b290: 61 6c 20 0a 73 6f 75 72 63 65 20 66 69 6c 65 73  al .source files
b2a0: 2e 0a 3c 2f 69 3e 0a 3c 2f 62 6c 6f 63 6b 71 75  ..</i>.</blockqu
b2b0: 6f 74 65 3e 0a 0a 0a 3c 70 3e 53 70 65 63 69 61  ote>...<p>Specia
b2c0: 6c 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 74 68  l versions of th
b2d0: 65 20 53 51 4c 69 74 65 20 61 6d 61 6c 67 61 6d  e SQLite amalgam
b2e0: 61 74 69 6f 6e 20 74 68 61 74 20 64 6f 20 77 6f  ation that do wo
b2f0: 72 6b 20 77 69 74 68 20 61 0a 70 72 65 64 65 74  rk with a.predet
b300: 65 72 6d 69 6e 65 64 20 73 65 74 20 6f 66 20 53  ermined set of S
b310: 51 4c 49 54 45 5f 4f 4d 49 54 5f 2a 20 6f 70 74  QLITE_OMIT_* opt
b320: 69 6f 6e 73 20 63 61 6e 20 62 65 20 67 65 6e 65  ions can be gene
b330: 72 61 74 65 64 2e 20 20 54 6f 20 64 6f 20 73 6f  rated.  To do so
b340: 2c 0a 6d 61 6b 65 20 61 20 63 6f 70 79 20 6f 66  ,.make a copy of
b350: 20 74 68 65 20 4d 61 6b 65 66 69 6c 65 2e 6c 69   the Makefile.li
b360: 6e 75 78 2d 67 63 63 20 6d 61 6b 65 66 69 6c 65  nux-gcc makefile
b370: 20 74 65 6d 70 6c 61 74 65 20 69 6e 20 74 68 65   template in the
b380: 20 63 61 6e 6f 6e 69 63 61 6c 0a 73 6f 75 72 63   canonical.sourc
b390: 65 20 63 6f 64 65 20 64 69 73 74 72 69 62 75 74  e code distribut
b3a0: 69 6f 6e 2e 20 20 43 68 61 6e 67 65 20 74 68 65  ion.  Change the
b3b0: 20 6e 61 6d 65 20 6f 66 20 79 6f 75 72 20 63 6f   name of your co
b3c0: 70 79 20 74 6f 20 73 69 6d 70 6c 79 20 22 4d 61  py to simply "Ma
b3d0: 6b 65 66 69 6c 65 22 2e 0a 54 68 65 6e 20 65 64  kefile"..Then ed
b3e0: 69 74 20 22 4d 61 6b 65 66 69 6c 65 22 20 74 6f  it "Makefile" to
b3f0: 20 73 65 74 20 75 70 20 61 70 70 72 6f 70 72 69   set up appropri
b400: 61 74 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  ate compile-time
b410: 20 6f 70 74 69 6f 6e 73 2e 20 20 54 68 65 6e 0a   options.  Then.
b420: 74 79 70 65 3a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  type:.<blockquot
b430: 65 3e 3c 74 74 3e 6d 61 6b 65 20 63 6c 65 61 6e  e><tt>make clean
b440: 3b 20 6d 61 6b 65 20 73 71 6c 69 74 65 33 2e 63  ; make sqlite3.c
b450: 3c 2f 74 74 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74  </tt></blockquot
b460: 65 3e 0a 54 68 65 20 72 65 73 75 6c 74 69 6e 67  e>.The resulting
b470: 20 22 73 71 6c 69 74 65 33 2e 63 22 20 61 6d 61   "sqlite3.c" ama
b480: 6c 67 61 6d 61 74 69 6f 6e 20 63 6f 64 65 20 66  lgamation code f
b490: 69 6c 65 20 28 61 6e 64 20 69 74 73 20 61 73 73  ile (and its ass
b4a0: 6f 63 69 61 74 65 64 0a 68 65 61 64 65 72 20 66  ociated.header f
b4b0: 69 6c 65 20 22 73 71 6c 69 74 65 33 2e 68 22 29  ile "sqlite3.h")
b4c0: 20 63 61 6e 20 74 68 65 6e 20 62 65 20 6d 6f 76   can then be mov
b4d0: 65 64 20 74 6f 20 61 20 6e 6f 6e 2d 75 6e 69 78  ed to a non-unix
b4e0: 20 70 6c 61 74 66 6f 72 6d 0a 66 6f 72 20 66 69   platform.for fi
b4f0: 6e 61 6c 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20  nal compilation 
b500: 75 73 69 6e 67 20 61 20 6e 61 74 69 76 65 20 63  using a native c
b510: 6f 6d 70 69 6c 65 72 2e 3c 2f 70 3e 0a 0a 3c 70  ompiler.</p>..<p
b520: 3e 54 68 65 20 53 51 4c 49 54 45 5f 4f 4d 49 54  >The SQLITE_OMIT
b530: 5f 2a 20 6f 70 74 69 6f 6e 73 20 61 72 65 20 75  _* options are u
b540: 6e 73 75 70 70 6f 72 74 65 64 2e 20 20 42 79 20  nsupported.  By 
b550: 74 68 69 73 20 77 65 20 6d 65 61 6e 20 74 68 61  this we mean tha
b560: 74 0a 61 6e 20 53 51 4c 49 54 45 5f 4f 4d 49 54  t.an SQLITE_OMIT
b570: 5f 2a 20 6f 70 74 69 6f 6e 20 74 68 61 74 20 6f  _* option that o
b580: 6d 69 74 73 20 63 6f 64 65 20 66 72 6f 6d 20 74  mits code from t
b590: 68 65 20 62 75 69 6c 64 20 69 6e 20 74 68 65 20  he build in the 
b5a0: 63 75 72 72 65 6e 74 0a 72 65 6c 65 61 73 65 20  current.release 
b5b0: 6d 69 67 68 74 20 62 65 63 6f 6d 65 20 61 20 6e  might become a n
b5c0: 6f 2d 6f 70 20 69 6e 20 74 68 65 20 6e 65 78 74  o-op in the next
b5d0: 20 72 65 6c 65 61 73 65 2e 20 20 4f 72 20 74 68   release.  Or th
b5e0: 65 20 6f 74 68 65 72 20 77 61 79 20 61 72 6f 75  e other way arou
b5f0: 6e 64 3a 0a 61 6e 20 53 51 4c 49 54 45 5f 4f 4d  nd:.an SQLITE_OM
b600: 49 54 5f 2a 20 74 68 61 74 20 69 73 20 61 20 6e  IT_* that is a n
b610: 6f 2d 6f 70 20 69 6e 20 74 68 65 20 63 75 72 72  o-op in the curr
b620: 65 6e 74 20 72 65 6c 65 61 73 65 20 6d 69 67 68  ent release migh
b630: 74 20 63 61 75 73 65 20 63 6f 64 65 0a 74 6f 20  t cause code.to 
b640: 62 65 20 65 78 63 6c 75 64 65 64 20 69 6e 20 74  be excluded in t
b650: 68 65 20 6e 65 78 74 20 72 65 6c 65 61 73 65 2e  he next release.
b660: 20 20 41 6c 73 6f 2c 20 6e 6f 74 20 61 6c 6c 20    Also, not all 
b670: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 2a 20 6f 70  SQLITE_OMIT_* op
b680: 74 69 6f 6e 73 0a 61 72 65 20 74 65 73 74 65 64  tions.are tested
b690: 2e 20 20 53 6f 6d 65 20 53 51 4c 49 54 45 5f 4f  .  Some SQLITE_O
b6a0: 4d 49 54 5f 2a 20 6f 70 74 69 6f 6e 73 20 6d 69  MIT_* options mi
b6b0: 67 68 74 20 63 61 75 73 65 20 53 51 4c 69 74 65  ght cause SQLite
b6c0: 20 74 6f 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 0a   to malfunction.
b6d0: 61 6e 64 2f 6f 72 20 70 72 6f 76 69 64 65 20 69  and/or provide i
b6e0: 6e 63 6f 72 72 65 63 74 20 61 6e 73 77 65 72 73  ncorrect answers
b6f0: 2e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  ...<blockquote>.
b700: 3c 69 3e 3c 62 3e 49 6d 70 6f 72 74 61 6e 74 20  <i><b>Important 
b710: 4e 6f 74 65 3a 3c 2f 62 3e 0a 54 68 65 20 53 51  Note:</b>.The SQ
b720: 4c 49 54 45 5f 4f 4d 49 54 5f 2a 20 63 6f 6d 70  LITE_OMIT_* comp
b730: 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73  ile-time options
b740: 20 61 72 65 20 75 6e 73 75 70 70 6f 72 74 65 64   are unsupported
b750: 2e 0a 3c 2f 69 3e 3c 2f 62 6c 6f 63 6b 71 75 6f  ..</i></blockquo
b760: 74 65 3e 0a 0a 3c 74 63 6c 3e 0a 43 4f 4d 50 49  te>..<tcl>.COMPI
b770: 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54  LE_OPTION {SQLIT
b780: 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c  E_OMIT_ALTERTABL
b790: 45 7d 20 7b 0a 20 20 57 68 65 6e 20 74 68 69 73  E} {.  When this
b7a0: 20 6f 70 74 69 6f 6e 20 69 73 20 64 65 66 69 6e   option is defin
b7b0: 65 64 2c 20 74 68 65 20 0a 20 20 5b 41 4c 54 45  ed, the .  [ALTE
b7c0: 52 20 54 41 42 4c 45 5d 20 63 6f 6d 6d 61 6e 64  R TABLE] command
b7d0: 20 69 73 20 6e 6f 74 20 69 6e 63 6c 75 64 65 64   is not included
b7e0: 20 69 6e 20 74 68 65 20 0a 20 20 6c 69 62 72 61   in the .  libra
b7f0: 72 79 2e 20 45 78 65 63 75 74 69 6e 67 20 61 6e  ry. Executing an
b800: 20 5b 41 4c 54 45 52 20 54 41 42 4c 45 5d 20 73   [ALTER TABLE] s
b810: 74 61 74 65 6d 65 6e 74 20 63 61 75 73 65 73 20  tatement causes 
b820: 61 20 70 61 72 73 65 20 65 72 72 6f 72 2e 0a 7d  a parse error..}
b830: 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e  ..COMPILE_OPTION
b840: 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e   {SQLITE_OMIT_AN
b850: 41 4c 59 5a 45 7d 20 7b 0a 20 20 57 68 65 6e 20  ALYZE} {.  When 
b860: 74 68 69 73 20 6f 70 74 69 6f 6e 20 69 73 20 64  this option is d
b870: 65 66 69 6e 65 64 2c 20 74 68 65 20 5b 41 4e 41  efined, the [ANA
b880: 4c 59 5a 45 5d 20 63 6f 6d 6d 61 6e 64 20 69 73  LYZE] command is
b890: 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 0a 20 20   omitted from.  
b8a0: 74 68 65 20 62 75 69 6c 64 2e 0a 7d 0a 0a 43 4f  the build..}..CO
b8b0: 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51  MPILE_OPTION {SQ
b8c0: 4c 49 54 45 5f 4f 4d 49 54 5f 41 54 54 41 43 48  LITE_OMIT_ATTACH
b8d0: 7d 20 7b 0a 20 20 57 68 65 6e 20 74 68 69 73 20  } {.  When this 
b8e0: 6f 70 74 69 6f 6e 20 69 73 20 64 65 66 69 6e 65  option is define
b8f0: 64 2c 20 74 68 65 20 5b 41 54 54 41 43 48 5d 20  d, the [ATTACH] 
b900: 61 6e 64 20 5b 44 45 54 41 43 48 5d 20 63 6f 6d  and [DETACH] com
b910: 6d 61 6e 64 73 20 61 72 65 0a 20 20 6f 6d 69 74  mands are.  omit
b920: 74 65 64 20 66 72 6f 6d 20 74 68 65 20 62 75 69  ted from the bui
b930: 6c 64 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f  ld..}..COMPILE_O
b940: 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d  PTION {SQLITE_OM
b950: 49 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e  IT_AUTHORIZATION
b960: 7d 20 7b 0a 20 20 44 65 66 69 6e 69 6e 67 20 74  } {.  Defining t
b970: 68 69 73 20 6f 70 74 69 6f 6e 20 6f 6d 69 74 73  his option omits
b980: 20 74 68 65 20 61 75 74 68 6f 72 69 7a 61 74 69   the authorizati
b990: 6f 6e 20 63 61 6c 6c 62 61 63 6b 20 66 65 61 74  on callback feat
b9a0: 75 72 65 20 66 72 6f 6d 20 74 68 65 0a 20 20 6c  ure from the.  l
b9b0: 69 62 72 61 72 79 2e 20 54 68 65 20 5b 73 71 6c  ibrary. The [sql
b9c0: 69 74 65 33 5f 73 65 74 5f 61 75 74 68 6f 72 69  ite3_set_authori
b9d0: 7a 65 72 28 29 5d 20 41 50 49 20 66 75 6e 63 74  zer()] API funct
b9e0: 69 6f 6e 20 69 73 20 6e 6f 74 20 70 72 65 73 65  ion is not prese
b9f0: 6e 74 0a 20 20 69 6e 20 74 68 65 20 6c 69 62 72  nt.  in the libr
ba00: 61 72 79 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f  ary..}..COMPILE_
ba10: 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f  OPTION {SQLITE_O
ba20: 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e  MIT_AUTOINCREMEN
ba30: 54 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70 74 69  T} {.  This opti
ba40: 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20 6f 6d  on is used to om
ba50: 69 74 20 74 68 65 20 0a 20 20 5b 41 55 54 4f 49  it the .  [AUTOI
ba60: 4e 43 52 45 4d 45 4e 54 5d 20 66 75 6e 63 74 69  NCREMENT] functi
ba70: 6f 6e 61 6c 69 74 79 2e 20 57 68 65 6e 20 74 68  onality. When th
ba80: 69 73 20 0a 20 20 69 73 20 6d 61 63 72 6f 20 69  is .  is macro i
ba90: 73 20 64 65 66 69 6e 65 64 2c 20 63 6f 6c 75 6d  s defined, colum
baa0: 6e 73 20 64 65 63 6c 61 72 65 64 20 61 73 20 0a  ns declared as .
bab0: 20 20 22 5b 49 4e 54 45 47 45 52 20 50 52 49 4d    "[INTEGER PRIM
bac0: 41 52 59 20 4b 45 59 5d 20 41 55 54 4f 49 4e 43  ARY KEY] AUTOINC
bad0: 52 45 4d 45 4e 54 22 0a 20 20 62 65 68 61 76 65  REMENT".  behave
bae0: 20 69 6e 20 74 68 65 20 73 61 6d 65 20 77 61 79   in the same way
baf0: 20 61 73 20 63 6f 6c 75 6d 6e 73 20 64 65 63 6c   as columns decl
bb00: 61 72 65 64 20 61 73 20 22 5b 49 4e 54 45 47 45  ared as "[INTEGE
bb10: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 5d 22 20  R PRIMARY KEY]" 
bb20: 77 68 65 6e 20 61 20 0a 20 20 4e 55 4c 4c 20 69  when a .  NULL i
bb30: 73 20 69 6e 73 65 72 74 65 64 2e 20 54 68 65 20  s inserted. The 
bb40: 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 20  sqlite_sequence 
bb50: 73 79 73 74 65 6d 20 74 61 62 6c 65 20 69 73 20  system table is 
bb60: 6e 65 69 74 68 65 72 20 63 72 65 61 74 65 64 2c  neither created,
bb70: 20 6e 6f 72 0a 20 20 72 65 73 70 65 63 74 65 64   nor.  respected
bb80: 20 69 66 20 69 74 20 61 6c 72 65 61 64 79 20 65   if it already e
bb90: 78 69 73 74 73 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c  xists..}..COMPIL
bba0: 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45  E_OPTION {SQLITE
bbb0: 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 49 54 7d 20  _OMIT_AUTOINIT} 
bbc0: 7b 0a 20 20 46 6f 72 20 62 61 63 6b 77 61 72 64  {.  For backward
bbd0: 73 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20  s compatibility 
bbe0: 77 69 74 68 20 6f 6c 64 65 72 20 76 65 72 73 69  with older versi
bbf0: 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 74 68  ons of SQLite th
bc00: 61 74 20 6c 61 63 6b 0a 20 20 74 68 65 20 5b 73  at lack.  the [s
bc10: 71 6c 69 74 65 33 5f 69 6e 69 74 69 61 6c 69 7a  qlite3_initializ
bc20: 65 28 29 5d 20 69 6e 74 65 72 66 61 63 65 2c 20  e()] interface, 
bc30: 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 69 6e 69  the [sqlite3_ini
bc40: 74 69 61 6c 69 7a 65 28 29 5d 20 69 6e 74 65 72  tialize()] inter
bc50: 66 61 63 65 0a 20 20 69 73 20 63 61 6c 6c 65 64  face.  is called
bc60: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 75   automatically u
bc70: 70 6f 6e 20 65 6e 74 72 79 20 74 6f 20 63 65 72  pon entry to cer
bc80: 74 61 69 6e 20 6b 65 79 20 69 6e 74 65 72 66 61  tain key interfa
bc90: 63 65 73 20 73 75 63 68 20 61 73 0a 20 20 5b 73  ces such as.  [s
bca0: 71 6c 69 74 65 33 5f 6f 70 65 6e 28 29 5d 2c 20  qlite3_open()], 
bcb0: 5b 73 71 6c 69 74 65 33 5f 76 66 73 5f 72 65 67  [sqlite3_vfs_reg
bcc0: 69 73 74 65 72 28 29 5d 2c 20 61 6e 64 20 5b 73  ister()], and [s
bcd0: 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 29  qlite3_mprintf()
bce0: 5d 2e 0a 20 20 54 68 65 20 6f 76 65 72 68 65 61  ]..  The overhea
bcf0: 64 20 6f 66 20 69 6e 76 6f 6b 69 6e 67 20 5b 73  d of invoking [s
bd00: 71 6c 69 74 65 33 5f 69 6e 69 74 69 61 6c 69 7a  qlite3_initializ
bd10: 65 28 29 5d 20 61 75 74 6f 6d 61 74 69 63 61 6c  e()] automatical
bd20: 6c 79 20 69 6e 20 74 68 69 73 0a 20 20 77 61 79  ly in this.  way
bd30: 20 6d 61 79 20 62 65 20 6f 6d 69 74 74 65 64 20   may be omitted 
bd40: 62 79 20 62 75 69 6c 64 69 6e 67 20 53 51 4c 69  by building SQLi
bd50: 74 65 20 77 69 74 68 20 74 68 65 20 53 51 4c 49  te with the SQLI
bd60: 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 49 54  TE_OMIT_AUTOINIT
bd70: 0a 20 20 43 2d 70 72 65 70 72 6f 63 65 73 73 6f  .  C-preprocesso
bd80: 72 20 6d 61 63 72 6f 2e 20 20 57 68 65 6e 20 62  r macro.  When b
bd90: 75 69 6c 74 20 75 73 69 6e 67 20 53 51 4c 49 54  uilt using SQLIT
bda0: 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 49 54 2c  E_OMIT_AUTOINIT,
bdb0: 20 53 51 4c 69 74 65 0a 20 20 77 69 6c 6c 20 6e   SQLite.  will n
bdc0: 6f 74 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  ot automatically
bdd0: 20 69 6e 69 74 69 61 6c 69 7a 65 20 69 74 73 65   initialize itse
bde0: 6c 66 20 61 6e 64 20 74 68 65 20 61 70 70 6c 69  lf and the appli
bdf0: 63 61 74 69 6f 6e 20 69 73 20 72 65 71 75 69 72  cation is requir
be00: 65 64 0a 20 20 74 6f 20 69 6e 76 6f 6b 65 20 5b  ed.  to invoke [
be10: 73 71 6c 69 74 65 33 5f 69 6e 69 74 69 61 6c 69  sqlite3_initiali
be20: 7a 65 28 29 5d 20 64 69 72 65 63 74 6c 79 20 70  ze()] directly p
be30: 72 69 6f 72 20 74 6f 20 62 65 67 69 6e 6e 69 6e  rior to beginnin
be40: 67 20 75 73 65 20 6f 66 20 74 68 65 0a 20 20 53  g use of the.  S
be50: 51 4c 69 74 65 20 6c 69 62 72 61 72 79 2e 0a 7d  QLite library..}
be60: 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e  ..COMPILE_OPTION
be70: 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55   {SQLITE_OMIT_AU
be80: 54 4f 4d 41 54 49 43 5f 49 4e 44 45 58 7d 20 7b  TOMATIC_INDEX} {
be90: 0a 20 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 69  .  This option i
bea0: 73 20 75 73 65 64 20 74 6f 20 6f 6d 69 74 20 74  s used to omit t
beb0: 68 65 20 0a 20 20 5b 61 75 74 6f 6d 61 74 69 63  he .  [automatic
bec0: 20 69 6e 64 65 78 69 6e 67 5d 20 66 75 6e 63 74   indexing] funct
bed0: 69 6f 6e 61 6c 69 74 79 2e 0a 20 20 53 65 65 20  ionality..  See 
bee0: 61 6c 73 6f 3a 20 5b 53 51 4c 49 54 45 5f 44 45  also: [SQLITE_DE
bef0: 46 41 55 4c 54 5f 41 55 54 4f 4d 41 54 49 43 5f  FAULT_AUTOMATIC_
bf00: 49 4e 44 45 58 5d 2e 0a 7d 0a 0a 43 4f 4d 50 49  INDEX]..}..COMPI
bf10: 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54  LE_OPTION {SQLIT
bf20: 45 5f 4f 4d 49 54 5f 41 55 54 4f 52 45 53 45 54  E_OMIT_AUTORESET
bf30: 7d 20 7b 0a 20 20 42 79 20 64 65 66 61 75 6c 74  } {.  By default
bf40: 2c 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 73  , the [sqlite3_s
bf50: 74 65 70 28 29 5d 20 69 6e 74 65 72 66 61 63 65  tep()] interface
bf60: 20 77 69 6c 6c 20 61 75 74 6f 6d 61 74 69 63 61   will automatica
bf70: 6c 6c 79 20 69 6e 76 6f 6b 65 0a 20 20 5b 73 71  lly invoke.  [sq
bf80: 6c 69 74 65 33 5f 72 65 73 65 74 28 29 5d 20 74  lite3_reset()] t
bf90: 6f 20 72 65 73 65 74 20 74 68 65 20 5b 70 72 65  o reset the [pre
bfa0: 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 5d  pared statement]
bfb0: 20 69 66 20 6e 65 63 65 73 73 61 72 79 2e 20 20   if necessary.  
bfc0: 54 68 69 73 0a 20 20 63 6f 6d 70 69 6c 65 2d 74  This.  compile-t
bfd0: 69 6d 65 20 6f 70 74 69 6f 6e 20 63 68 61 6e 67  ime option chang
bfe0: 65 73 20 74 68 61 74 20 62 65 68 61 76 69 6f 72  es that behavior
bff0: 20 73 6f 20 74 68 61 74 20 5b 73 71 6c 69 74 65   so that [sqlite
c000: 33 5f 73 74 65 70 28 29 5d 20 77 69 6c 6c 0a 20  3_step()] will. 
c010: 20 72 65 74 75 72 6e 20 5b 53 51 4c 49 54 45 5f   return [SQLITE_
c020: 4d 49 53 55 53 45 5d 20 69 66 20 69 74 20 63 61  MISUSE] if it ca
c030: 6c 6c 65 64 20 61 67 61 69 6e 20 61 66 74 65 72  lled again after
c040: 20 72 65 74 75 72 6e 69 6e 67 20 61 6e 79 74 68   returning anyth
c050: 69 6e 67 20 6f 74 68 65 72 0a 20 20 74 68 61 6e  ing other.  than
c060: 20 5b 53 51 4c 49 54 45 5f 52 4f 57 5d 2c 20 5b   [SQLITE_ROW], [
c070: 53 51 4c 49 54 45 5f 42 55 53 59 5d 2c 20 6f 72  SQLITE_BUSY], or
c080: 20 5b 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 5d   [SQLITE_LOCKED]
c090: 20 75 6e 6c 65 73 73 20 74 68 65 72 65 20 77 61   unless there wa
c0a0: 73 20 61 6e 0a 20 20 69 6e 74 65 72 76 65 6e 69  s an.  interveni
c0b0: 6e 67 20 63 61 6c 6c 20 74 6f 20 5b 73 71 6c 69  ng call to [sqli
c0c0: 74 65 33 5f 72 65 73 65 74 28 29 5d 2e 0a 0a 20  te3_reset()]... 
c0d0: 20 49 6e 20 53 51 4c 69 74 65 20 76 65 72 73 69   In SQLite versi
c0e0: 6f 6e 20 33 2e 36 2e 32 33 2e 31 20 61 6e 64 20  on 3.6.23.1 and 
c0f0: 65 61 72 6c 69 65 72 2c 20 5b 73 71 6c 69 74 65  earlier, [sqlite
c100: 33 5f 73 74 65 70 28 29 5d 20 75 73 65 64 20 74  3_step()] used t
c110: 6f 20 61 6c 77 61 79 73 0a 20 20 72 65 74 75 72  o always.  retur
c120: 6e 20 5b 53 51 4c 49 54 45 5f 4d 49 53 55 53 45  n [SQLITE_MISUSE
c130: 5d 20 69 66 20 69 74 20 77 61 73 20 69 6e 76 6f  ] if it was invo
c140: 6b 65 64 20 61 67 61 69 6e 20 61 66 74 65 72 20  ked again after 
c150: 72 65 74 75 72 6e 69 6e 67 20 61 6e 79 74 68 69  returning anythi
c160: 6e 67 0a 20 20 6f 74 68 65 72 20 74 68 61 6e 20  ng.  other than 
c170: 5b 53 51 4c 49 54 45 5f 52 4f 57 5d 20 77 69 74  [SQLITE_ROW] wit
c180: 68 6f 75 74 20 61 6e 20 69 6e 74 65 72 76 65 6e  hout an interven
c190: 69 6e 67 20 63 61 6c 6c 20 74 6f 20 5b 73 71 6c  ing call to [sql
c1a0: 69 74 65 33 5f 72 65 73 65 74 28 29 5d 2e 0a 20  ite3_reset()].. 
c1b0: 20 54 68 69 73 20 63 61 75 73 65 64 20 70 72 6f   This caused pro
c1c0: 62 6c 65 6d 73 20 6f 6e 20 73 6f 6d 65 20 70 6f  blems on some po
c1d0: 6f 72 6c 79 20 77 72 69 74 74 65 6e 20 73 6d 61  orly written sma
c1e0: 72 74 70 68 6f 6e 65 20 61 70 70 6c 69 63 61 74  rtphone applicat
c1f0: 69 6f 6e 73 20 77 68 69 63 68 0a 20 20 64 69 64  ions which.  did
c200: 20 6e 6f 74 20 63 6f 72 72 65 63 74 6c 79 20 68   not correctly h
c210: 61 6e 64 6c 65 20 74 68 65 20 5b 53 51 4c 49 54  andle the [SQLIT
c220: 45 5f 4c 4f 43 4b 45 44 5d 20 61 6e 64 20 5b 53  E_LOCKED] and [S
c230: 51 4c 49 54 45 5f 42 55 53 59 5d 20 65 72 72 6f  QLITE_BUSY] erro
c240: 72 20 0a 20 20 72 65 74 75 72 6e 73 2e 20 20 52  r .  returns.  R
c250: 61 74 68 65 72 20 74 68 61 6e 20 66 69 78 20 74  ather than fix t
c260: 68 65 20 6d 61 6e 79 20 64 65 66 65 63 74 69 76  he many defectiv
c270: 65 20 73 6d 61 72 74 70 68 6f 6e 65 20 61 70 70  e smartphone app
c280: 6c 69 63 61 74 69 6f 6e 73 2c 20 0a 20 20 74 68  lications, .  th
c290: 65 20 62 65 68 61 76 69 6f 72 20 6f 66 20 53 51  e behavior of SQ
c2a0: 4c 69 74 65 20 77 61 73 20 63 68 61 6e 67 65 64  Lite was changed
c2b0: 20 69 6e 20 33 2e 36 2e 32 33 2e 32 20 74 6f 20   in 3.6.23.2 to 
c2c0: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 72 65  automatically re
c2d0: 73 65 74 0a 20 20 74 68 65 20 70 72 65 70 61 72  set.  the prepar
c2e0: 65 64 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 42  ed statement.  B
c2f0: 75 74 20 74 68 61 74 20 63 68 61 6e 67 65 64 20  ut that changed 
c300: 63 61 75 73 65 64 20 69 73 73 75 65 73 20 69 6e  caused issues in
c310: 20 6f 74 68 65 72 20 0a 20 20 69 6d 70 72 6f 70   other .  improp
c320: 65 72 6c 79 20 69 6d 70 6c 65 6d 65 6e 74 65 64  erly implemented
c330: 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 20 74 68   applications th
c340: 61 74 20 77 65 72 65 20 61 63 74 75 61 6c 6c 79  at were actually
c350: 20 6c 6f 6f 6b 69 6e 67 0a 20 20 66 6f 72 20 61   looking.  for a
c360: 6e 20 5b 53 51 4c 49 54 45 5f 4d 49 53 55 53 45  n [SQLITE_MISUSE
c370: 5d 20 72 65 74 75 72 6e 20 74 6f 20 74 65 72 6d  ] return to term
c380: 69 6e 61 74 65 20 74 68 65 69 72 20 71 75 65 72  inate their quer
c390: 79 20 6c 6f 6f 70 73 2e 20 20 28 41 6e 79 74 69  y loops.  (Anyti
c3a0: 6d 65 0a 20 20 61 6e 20 61 70 70 6c 69 63 61 74  me.  an applicat
c3b0: 69 6f 6e 20 67 65 74 73 20 61 6e 20 53 51 4c 49  ion gets an SQLI
c3c0: 54 45 5f 4d 49 53 55 53 45 20 65 72 72 6f 72 20  TE_MISUSE error 
c3d0: 63 6f 64 65 20 66 72 6f 6d 20 53 51 4c 69 74 65  code from SQLite
c3e0: 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 65  , that means the
c3f0: 0a 20 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 69  .  application i
c400: 73 20 6d 69 73 75 73 69 6e 67 20 74 68 65 20 53  s misusing the S
c410: 51 4c 69 74 65 20 69 6e 74 65 72 66 61 63 65 20  QLite interface 
c420: 61 6e 64 20 69 73 20 74 68 75 73 20 69 6e 63 6f  and is thus inco
c430: 72 72 65 63 74 6c 79 0a 20 20 69 6d 70 6c 65 6d  rrectly.  implem
c440: 65 6e 74 65 64 2e 29 20 20 54 68 65 20 53 51 4c  ented.)  The SQL
c450: 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 52 45 53  ITE_OMIT_AUTORES
c460: 45 54 20 69 6e 74 65 72 66 61 63 65 20 77 61 73  ET interface was
c470: 20 61 64 64 65 64 20 74 6f 20 53 51 4c 69 74 65   added to SQLite
c480: 0a 20 20 76 65 72 73 69 6f 6e 20 33 2e 37 2e 35  .  version 3.7.5
c490: 20 69 6e 20 61 6e 20 65 66 66 6f 72 74 20 74 6f   in an effort to
c4a0: 20 67 65 74 20 61 6c 6c 20 6f 66 20 74 68 65 20   get all of the 
c4b0: 28 62 72 6f 6b 65 6e 29 0a 20 20 61 70 70 6c 69  (broken).  appli
c4c0: 63 61 74 69 6f 6e 73 20 74 6f 20 77 6f 72 6b 20  cations to work 
c4d0: 61 67 61 69 6e 20 77 69 74 68 6f 75 74 20 68 61  again without ha
c4e0: 76 69 6e 67 20 74 6f 20 61 63 74 75 61 6c 6c 79  ving to actually
c4f0: 20 66 69 78 20 74 68 65 20 61 70 70 6c 69 63 61   fix the applica
c500: 74 69 6f 6e 73 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c  tions..}..COMPIL
c510: 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45  E_OPTION {SQLITE
c520: 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d  _OMIT_AUTOVACUUM
c530: 7d 20 7b 0a 20 20 49 66 20 74 68 69 73 20 6f 70  } {.  If this op
c540: 74 69 6f 6e 20 69 73 20 64 65 66 69 6e 65 64 2c  tion is defined,
c550: 20 74 68 65 20 6c 69 62 72 61 72 79 20 63 61 6e   the library can
c560: 6e 6f 74 20 63 72 65 61 74 65 20 6f 72 20 77 72  not create or wr
c570: 69 74 65 20 74 6f 20 0a 20 20 64 61 74 61 62 61  ite to .  databa
c580: 73 65 73 20 74 68 61 74 20 73 75 70 70 6f 72 74  ses that support
c590: 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d 2e 0a   [auto_vacuum]..
c5a0: 20 20 45 78 65 63 75 74 69 6e 67 20 61 20 5b 50    Executing a [P
c5b0: 52 41 47 4d 41 20 61 75 74 6f 5f 76 61 63 75 75  RAGMA auto_vacuu
c5c0: 6d 5d 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  m] statement is 
c5d0: 6e 6f 74 20 61 6e 20 65 72 72 6f 72 0a 20 20 28  not an error.  (
c5e0: 73 69 6e 63 65 20 75 6e 6b 6e 6f 77 6e 20 50 52  since unknown PR
c5f0: 41 47 4d 41 73 20 61 72 65 20 73 69 6c 65 6e 74  AGMAs are silent
c600: 6c 79 20 69 67 6e 6f 72 65 64 29 2c 20 62 75 74  ly ignored), but
c610: 20 64 6f 65 73 20 6e 6f 74 20 72 65 74 75 72 6e   does not return
c620: 20 61 20 76 61 6c 75 65 0a 20 20 6f 72 20 6d 6f   a value.  or mo
c630: 64 69 66 79 20 74 68 65 20 61 75 74 6f 2d 76 61  dify the auto-va
c640: 63 75 75 6d 20 66 6c 61 67 20 69 6e 20 74 68 65  cuum flag in the
c650: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20   database file. 
c660: 49 66 20 61 20 64 61 74 61 62 61 73 65 20 74 68  If a database th
c670: 61 74 0a 20 20 73 75 70 70 6f 72 74 73 20 61 75  at.  supports au
c680: 74 6f 2d 76 61 63 75 75 6d 20 69 73 20 6f 70 65  to-vacuum is ope
c690: 6e 65 64 20 62 79 20 61 20 6c 69 62 72 61 72 79  ned by a library
c6a0: 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 74   compiled with t
c6b0: 68 69 73 20 6f 70 74 69 6f 6e 2c 20 69 74 0a 20  his option, it. 
c6c0: 20 69 73 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c   is automaticall
c6d0: 79 20 6f 70 65 6e 65 64 20 69 6e 20 72 65 61 64  y opened in read
c6e0: 2d 6f 6e 6c 79 20 6d 6f 64 65 2e 0a 7d 0a 0a 43  -only mode..}..C
c6f0: 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53  OMPILE_OPTION {S
c700: 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 45 54 57 45  QLITE_OMIT_BETWE
c710: 45 4e 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 7d  EN_OPTIMIZATION}
c720: 20 7b 0a 20 20 54 68 69 73 20 6f 70 74 69 6f 6e   {.  This option
c730: 20 64 69 73 61 62 6c 65 73 20 74 68 65 20 75 73   disables the us
c740: 65 20 6f 66 20 69 6e 64 69 63 65 73 20 77 69 74  e of indices wit
c750: 68 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 74  h WHERE clause t
c760: 65 72 6d 73 0a 20 20 74 68 61 74 20 65 6d 70 6c  erms.  that empl
c770: 6f 79 20 74 68 65 20 42 45 54 57 45 45 4e 20 6f  oy the BETWEEN o
c780: 70 65 72 61 74 6f 72 2e 0a 7d 0a 0a 43 4f 4d 50  perator..}..COMP
c790: 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49  ILE_OPTION {SQLI
c7a0: 54 45 5f 4f 4d 49 54 5f 42 4c 4f 42 5f 4c 49 54  TE_OMIT_BLOB_LIT
c7b0: 45 52 41 4c 7d 20 7b 0a 20 20 57 68 65 6e 20 74  ERAL} {.  When t
c7c0: 68 69 73 20 6f 70 74 69 6f 6e 20 69 73 20 64 65  his option is de
c7d0: 66 69 6e 65 64 2c 20 69 74 20 69 73 20 6e 6f 74  fined, it is not
c7e0: 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 73 70 65   possible to spe
c7f0: 63 69 66 79 20 61 20 62 6c 6f 62 20 69 6e 0a 20  cify a blob in. 
c800: 20 61 6e 20 53 51 4c 20 73 74 61 74 65 6d 65 6e   an SQL statemen
c810: 74 20 75 73 69 6e 67 20 74 68 65 20 58 27 41 42  t using the X'AB
c820: 43 44 27 20 73 79 6e 74 61 78 2e 0a 7d 0a 0a 43  CD' syntax..}..C
c830: 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53  OMPILE_OPTION {S
c840: 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 54 52 45 45  QLITE_OMIT_BTREE
c850: 43 4f 55 4e 54 7d 20 7b 0a 20 20 57 68 65 6e 20  COUNT} {.  When 
c860: 74 68 69 73 20 6f 70 74 69 6f 6e 20 69 73 20 64  this option is d
c870: 65 66 69 6e 65 64 2c 20 61 6e 20 6f 70 74 69 6d  efined, an optim
c880: 69 7a 61 74 69 6f 6e 20 74 68 61 74 20 61 63 63  ization that acc
c890: 65 6c 65 72 61 74 65 73 20 63 6f 75 6e 74 69 6e  elerates countin
c8a0: 67 0a 20 20 61 6c 6c 20 65 6e 74 72 69 65 73 20  g.  all entries 
c8b0: 69 6e 20 61 20 74 61 62 6c 65 20 28 69 6e 20 6f  in a table (in o
c8c0: 74 68 65 72 20 77 6f 72 64 73 2c 20 61 6e 20 6f  ther words, an o
c8d0: 70 74 69 6d 69 7a 61 74 69 6f 6e 20 74 68 61 74  ptimization that
c8e0: 20 68 65 6c 70 73 0a 20 20 22 53 45 4c 45 43 54   helps.  "SELECT
c8f0: 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 74   count(*) FROM t
c900: 61 62 6c 65 22 20 72 75 6e 20 66 61 73 74 65 72  able" run faster
c910: 29 20 69 73 20 6f 6d 69 74 74 65 64 2e 0a 7d 0a  ) is omitted..}.
c920: 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20  .COMPILE_OPTION 
c930: 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49  {SQLITE_OMIT_BUI
c940: 4c 54 49 4e 5f 54 45 53 54 7d 20 7b 0a 20 20 41  LTIN_TEST} {.  A
c950: 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65   standard SQLite
c960: 20 62 75 69 6c 64 20 69 6e 63 6c 75 64 65 73 20   build includes 
c970: 61 20 73 6d 61 6c 6c 20 61 6d 6f 75 6e 74 20 6f  a small amount o
c980: 66 20 6c 6f 67 69 63 20 63 6f 6e 74 72 6f 6c 6c  f logic controll
c990: 65 64 0a 20 20 62 79 20 74 68 65 20 5b 73 71 6c  ed.  by the [sql
c9a0: 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f  ite3_test_contro
c9b0: 6c 28 29 5d 20 69 6e 74 65 72 66 61 63 65 20 74  l()] interface t
c9c0: 68 61 74 20 69 73 20 75 73 65 64 20 74 6f 20 65  hat is used to e
c9d0: 78 65 72 63 69 73 65 0a 20 20 70 61 72 74 73 20  xercise.  parts 
c9e0: 6f 66 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f  of the SQLite co
c9f0: 72 65 20 74 68 61 74 20 61 72 65 20 64 69 66 66  re that are diff
ca00: 69 63 75 6c 74 20 74 6f 20 63 6f 6e 74 72 6f 6c  icult to control
ca10: 20 61 6e 64 20 6d 65 61 73 75 72 65 20 75 73 69   and measure usi
ca20: 6e 67 0a 20 20 74 68 65 20 73 74 61 6e 64 61 72  ng.  the standar
ca30: 64 20 41 50 49 2e 20 20 54 68 69 73 20 6f 70 74  d API.  This opt
ca40: 69 6f 6e 20 6f 6d 69 74 73 20 74 68 61 74 20 62  ion omits that b
ca50: 75 69 6c 74 2d 69 6e 20 74 65 73 74 20 6c 6f 67  uilt-in test log
ca60: 69 63 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f  ic..}..COMPILE_O
ca70: 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d  PTION {SQLITE_OM
ca80: 49 54 5f 43 41 53 54 7d 20 7b 0a 20 20 54 68 69  IT_CAST} {.  Thi
ca90: 73 20 6f 70 74 69 6f 6e 20 63 61 75 73 65 73 20  s option causes 
caa0: 53 51 4c 69 74 65 20 74 6f 20 6f 6d 69 74 20 73  SQLite to omit s
cab0: 75 70 70 6f 72 74 20 66 6f 72 20 74 68 65 20 43  upport for the C
cac0: 41 53 54 20 6f 70 65 72 61 74 6f 72 2e 0a 7d 0a  AST operator..}.
cad0: 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20  .COMPILE_OPTION 
cae0: 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 48 45  {SQLITE_OMIT_CHE
caf0: 43 4b 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70 74  CK} {.  This opt
cb00: 69 6f 6e 20 63 61 75 73 65 73 20 53 51 4c 69 74  ion causes SQLit
cb10: 65 20 74 6f 20 6f 6d 69 74 20 73 75 70 70 6f 72  e to omit suppor
cb20: 74 20 66 6f 72 20 43 48 45 43 4b 20 63 6f 6e 73  t for CHECK cons
cb30: 74 72 61 69 6e 74 73 2e 0a 20 20 54 68 65 20 70  traints..  The p
cb40: 61 72 73 65 72 20 77 69 6c 6c 20 73 74 69 6c 6c  arser will still
cb50: 20 61 63 63 65 70 74 20 43 48 45 43 4b 20 63 6f   accept CHECK co
cb60: 6e 73 74 72 61 69 6e 74 73 20 69 6e 20 53 51 4c  nstraints in SQL
cb70: 20 73 74 61 74 65 6d 65 6e 74 73 2c 0a 20 20 74   statements,.  t
cb80: 68 65 79 20 77 69 6c 6c 20 6a 75 73 74 20 6e 6f  hey will just no
cb90: 74 20 62 65 20 65 6e 66 6f 72 63 65 64 2e 0a 7d  t be enforced..}
cba0: 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e  ..COMPILE_OPTION
cbb0: 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f   {SQLITE_OMIT_CO
cbc0: 4d 50 49 4c 45 4f 50 54 49 4f 4e 5f 44 49 41 47  MPILEOPTION_DIAG
cbd0: 53 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70 74 69  S} {.  This opti
cbe0: 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20 6f 6d  on is used to om
cbf0: 69 74 20 74 68 65 20 63 6f 6d 70 69 6c 65 2d 74  it the compile-t
cc00: 69 6d 65 20 6f 70 74 69 6f 6e 20 64 69 61 67 6e  ime option diagn
cc10: 6f 73 74 69 63 73 20 61 76 61 69 6c 61 62 6c 65  ostics available
cc20: 0a 20 20 69 6e 20 53 51 4c 69 74 65 2c 20 69 6e  .  in SQLite, in
cc30: 63 6c 75 64 69 6e 67 20 74 68 65 20 5b 73 71 6c  cluding the [sql
cc40: 69 74 65 33 5f 63 6f 6d 70 69 6c 65 6f 70 74 69  ite3_compileopti
cc50: 6f 6e 5f 75 73 65 64 28 29 5d 20 61 6e 64 0a 20  on_used()] and. 
cc60: 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6d 70 69 6c   [sqlite3_compil
cc70: 65 6f 70 74 69 6f 6e 5f 67 65 74 28 29 5d 20 43  eoption_get()] C
cc80: 2f 43 2b 2b 20 66 75 6e 63 74 69 6f 6e 73 2c 20  /C++ functions, 
cc90: 74 68 65 0a 20 20 5b 73 71 6c 69 74 65 5f 63 6f  the.  [sqlite_co
cca0: 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 75 73 65 64  mpileoption_used
ccb0: 28 29 5d 20 61 6e 64 20 5b 73 71 6c 69 74 65 5f  ()] and [sqlite_
ccc0: 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 67 65  compileoption_ge
ccd0: 74 28 29 5d 20 53 51 4c 20 66 75 6e 63 74 69 6f  t()] SQL functio
cce0: 6e 73 2c 0a 20 20 61 6e 64 20 74 68 65 20 5b 63  ns,.  and the [c
ccf0: 6f 6d 70 69 6c 65 5f 6f 70 74 69 6f 6e 73 20 70  ompile_options p
cd00: 72 61 67 6d 61 5d 2e 0a 7d 0a 0a 43 4f 4d 50 49  ragma]..}..COMPI
cd10: 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54  LE_OPTION {SQLIT
cd20: 45 5f 4f 4d 49 54 5f 43 4f 4d 50 4c 45 54 45 7d  E_OMIT_COMPLETE}
cd30: 20 7b 0a 20 20 54 68 69 73 20 6f 70 74 69 6f 6e   {.  This option
cd40: 20 63 61 75 73 65 73 20 74 68 65 20 5b 73 71 6c   causes the [sql
cd50: 69 74 65 33 5f 63 6f 6d 70 6c 65 74 65 28 29 5d  ite3_complete()]
cd60: 20 61 6e 64 20 5b 73 71 6c 69 74 65 33 5f 63 6f   and [sqlite3_co
cd70: 6d 70 6c 65 74 65 31 36 28 29 5d 0a 20 20 69 6e  mplete16()].  in
cd80: 74 65 72 66 61 63 65 73 20 74 6f 20 62 65 20 6f  terfaces to be o
cd90: 6d 69 74 74 65 64 2e 0a 7d 0a 0a 43 4f 4d 50 49  mitted..}..COMPI
cda0: 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54  LE_OPTION {SQLIT
cdb0: 45 5f 4f 4d 49 54 5f 43 4f 4d 50 4f 55 4e 44 5f  E_OMIT_COMPOUND_
cdc0: 53 45 4c 45 43 54 7d 20 7b 0a 20 20 54 68 69 73  SELECT} {.  This
cdd0: 20 6f 70 74 69 6f 6e 20 69 73 20 75 73 65 64 20   option is used 
cde0: 74 6f 20 6f 6d 69 74 20 74 68 65 20 63 6f 6d 70  to omit the comp
cdf0: 6f 75 6e 64 20 5b 53 45 4c 45 43 54 5d 20 66 75  ound [SELECT] fu
ce00: 6e 63 74 69 6f 6e 61 6c 69 74 79 2e 20 0a 20 20  nctionality. .  
ce10: 5b 53 45 4c 45 43 54 5d 20 73 74 61 74 65 6d 65  [SELECT] stateme
ce20: 6e 74 73 20 74 68 61 74 20 75 73 65 20 74 68 65  nts that use the
ce30: 20 0a 20 20 55 4e 49 4f 4e 2c 20 55 4e 49 4f 4e   .  UNION, UNION
ce40: 20 41 4c 4c 2c 20 49 4e 54 45 52 53 45 43 54 20   ALL, INTERSECT 
ce50: 6f 72 20 45 58 43 45 50 54 20 63 6f 6d 70 6f 75  or EXCEPT compou
ce60: 6e 64 20 53 45 4c 45 43 54 20 6f 70 65 72 61 74  nd SELECT operat
ce70: 6f 72 73 20 77 69 6c 6c 20 0a 20 20 63 61 75 73  ors will .  caus
ce80: 65 20 61 20 70 61 72 73 65 20 65 72 72 6f 72 2e  e a parse error.
ce90: 0a 0a 20 20 41 6e 20 5b 49 4e 53 45 52 54 5d 20  ..  An [INSERT] 
cea0: 73 74 61 74 65 6d 65 6e 74 20 77 69 74 68 20 6d  statement with m
ceb0: 75 6c 74 69 70 6c 65 20 76 61 6c 75 65 73 20 69  ultiple values i
cec0: 6e 20 74 68 65 20 56 41 4c 55 45 53 20 63 6c 61  n the VALUES cla
ced0: 75 73 65 20 69 73 0a 20 20 69 6d 70 6c 65 6d 65  use is.  impleme
cee0: 6e 74 65 64 20 69 6e 74 65 72 6e 61 6c 6c 79 20  nted internally 
cef0: 61 73 20 61 20 63 6f 6d 70 6f 75 6e 64 20 53 45  as a compound SE
cf00: 4c 45 43 54 2e 20 20 48 65 6e 63 65 2c 20 74 68  LECT.  Hence, th
cf10: 69 73 20 6f 70 74 69 6f 6e 20 61 6c 73 6f 0a 20  is option also. 
cf20: 20 64 69 73 61 62 6c 65 73 20 74 68 65 20 61 62   disables the ab
cf30: 69 6c 69 74 79 20 74 6f 20 69 6e 73 65 72 74 20  ility to insert 
cf40: 6d 6f 72 65 20 74 68 61 6e 20 61 20 73 69 6e 67  more than a sing
cf50: 6c 65 20 72 6f 77 20 75 73 69 6e 67 20 61 6e 0a  le row using an.
cf60: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e    INSERT INTO ..
cf70: 2e 20 56 41 4c 55 45 53 20 2e 2e 2e 20 73 74 61  . VALUES ... sta
cf80: 74 65 6d 65 6e 74 2e 0a 7d 0a 0a 43 4f 4d 50 49  tement..}..COMPI
cf90: 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54  LE_OPTION {SQLIT
cfa0: 45 5f 4f 4d 49 54 5f 43 54 45 7d 20 7b 0a 20 20  E_OMIT_CTE} {.  
cfb0: 54 68 69 73 20 6f 70 74 69 6f 6e 20 63 61 75 73  This option caus
cfc0: 65 73 20 73 75 70 70 6f 72 74 20 66 6f 72 20 5b  es support for [
cfd0: 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70  common table exp
cfe0: 72 65 73 73 69 6f 6e 73 5d 20 74 6f 20 62 65 20  ressions] to be 
cff0: 6f 6d 69 74 74 65 64 2e 0a 7d 0a 0a 0a 0a 43 4f  omitted..}....CO
d000: 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51  MPILE_OPTION {SQ
d010: 4c 49 54 45 5f 4f 4d 49 54 5f 44 41 54 45 54 49  LITE_OMIT_DATETI
d020: 4d 45 5f 46 55 4e 43 53 7d 20 7b 0a 20 20 49 66  ME_FUNCS} {.  If
d030: 20 74 68 69 73 20 6f 70 74 69 6f 6e 20 69 73 20   this option is 
d040: 64 65 66 69 6e 65 64 2c 20 53 51 4c 69 74 65 27  defined, SQLite'
d050: 73 20 62 75 69 6c 74 2d 69 6e 20 64 61 74 65 20  s built-in date 
d060: 61 6e 64 20 74 69 6d 65 20 6d 61 6e 69 70 75 6c  and time manipul
d070: 61 74 69 6f 6e 0a 20 20 66 75 6e 63 74 69 6f 6e  ation.  function
d080: 73 20 61 72 65 20 6f 6d 69 74 74 65 64 2e 20 53  s are omitted. S
d090: 70 65 63 69 66 69 63 61 6c 6c 79 2c 20 74 68 65  pecifically, the
d0a0: 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 73 20 6a   SQL functions j
d0b0: 75 6c 69 61 6e 64 61 79 28 29 2c 20 64 61 74 65  ulianday(), date
d0c0: 28 29 2c 0a 20 20 74 69 6d 65 28 29 2c 20 64 61  (),.  time(), da
d0d0: 74 65 74 69 6d 65 28 29 20 61 6e 64 20 73 74 72  tetime() and str
d0e0: 66 74 69 6d 65 28 29 20 61 72 65 20 6e 6f 74 20  ftime() are not 
d0f0: 61 76 61 69 6c 61 62 6c 65 2e 20 54 68 65 20 64  available. The d
d100: 65 66 61 75 6c 74 20 63 6f 6c 75 6d 6e 0a 20 20  efault column.  
d110: 76 61 6c 75 65 73 20 43 55 52 52 45 4e 54 5f 54  values CURRENT_T
d120: 49 4d 45 2c 20 43 55 52 52 45 4e 54 5f 44 41 54  IME, CURRENT_DAT
d130: 45 20 61 6e 64 20 43 55 52 52 45 4e 54 5f 54 49  E and CURRENT_TI
d140: 4d 45 53 54 41 4d 50 20 61 72 65 20 73 74 69 6c  MESTAMP are stil
d150: 6c 20 61 76 61 69 6c 61 62 6c 65 2e 0a 7d 0a 0a  l available..}..
d160: 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b  COMPILE_OPTION {
d170: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 45 43 4c  SQLITE_OMIT_DECL
d180: 54 59 50 45 7d 20 7b 0a 20 20 54 68 69 73 20 6f  TYPE} {.  This o
d190: 70 74 69 6f 6e 20 63 61 75 73 65 73 20 53 51 4c  ption causes SQL
d1a0: 69 74 65 20 74 6f 20 6f 6d 69 74 20 73 75 70 70  ite to omit supp
d1b0: 6f 72 74 20 66 6f 72 20 74 68 65 0a 20 20 5b 73  ort for the.  [s
d1c0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65  qlite3_column_de
d1d0: 63 6c 74 79 70 65 28 29 5d 20 61 6e 64 20 5b 73  cltype()] and [s
d1e0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65  qlite3_column_de
d1f0: 63 6c 74 79 70 65 31 36 28 29 5d 0a 20 20 69 6e  cltype16()].  in
d200: 74 65 72 66 61 63 65 73 2e 0a 7d 0a 0a 43 4f 4d  terfaces..}..COM
d210: 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c  PILE_OPTION {SQL
d220: 49 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41  ITE_OMIT_DEPRECA
d230: 54 45 44 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70  TED} {.  This op
d240: 74 69 6f 6e 20 63 61 75 73 65 73 20 53 51 4c 69  tion causes SQLi
d250: 74 65 20 74 6f 20 6f 6d 69 74 20 73 75 70 70 6f  te to omit suppo
d260: 72 74 20 66 6f 72 20 69 6e 74 65 72 66 61 63 65  rt for interface
d270: 73 0a 20 20 6d 61 72 6b 65 64 20 61 73 20 64 65  s.  marked as de
d280: 70 72 65 63 61 74 65 64 2e 20 20 54 68 69 73 20  precated.  This 
d290: 69 6e 63 6c 75 64 65 73 20 0a 20 20 5b 73 71 6c  includes .  [sql
d2a0: 69 74 65 33 5f 61 67 67 72 65 67 61 74 65 5f 63  ite3_aggregate_c
d2b0: 6f 75 6e 74 28 29 5d 2c 0a 20 20 5b 73 71 6c 69  ount()],.  [sqli
d2c0: 74 65 33 5f 65 78 70 69 72 65 64 28 29 5d 2c 0a  te3_expired()],.
d2d0: 20 20 5b 73 71 6c 69 74 65 33 5f 74 72 61 6e 73    [sqlite3_trans
d2e0: 66 65 72 5f 62 69 6e 64 69 6e 67 73 28 29 5d 2c  fer_bindings()],
d2f0: 0a 20 20 5b 73 71 6c 69 74 65 33 5f 67 6c 6f 62  .  [sqlite3_glob
d300: 61 6c 5f 72 65 63 6f 76 65 72 28 29 5d 2c 0a 20  al_recover()],. 
d310: 20 5b 73 71 6c 69 74 65 33 5f 74 68 72 65 61 64   [sqlite3_thread
d320: 5f 63 6c 65 61 6e 75 70 28 29 5d 20 61 6e 64 0a  _cleanup()] and.
d330: 20 20 5b 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72    [sqlite3_memor
d340: 79 5f 61 6c 61 72 6d 28 29 5d 20 69 6e 74 65 72  y_alarm()] inter
d350: 66 61 63 65 73 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c  faces..}..COMPIL
d360: 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45  E_OPTION {SQLITE
d370: 5f 4f 4d 49 54 5f 44 49 53 4b 49 4f 7d 20 7b 0a  _OMIT_DISKIO} {.
d380: 20 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 6f 6d    This option om
d390: 69 74 73 20 61 6c 6c 20 73 75 70 70 6f 72 74 20  its all support 
d3a0: 66 6f 72 20 77 72 69 74 69 6e 67 20 74 6f 20 74  for writing to t
d3b0: 68 65 20 64 69 73 6b 20 61 6e 64 20 66 6f 72 63  he disk and forc
d3c0: 65 73 0a 20 20 64 61 74 61 62 61 73 65 73 20 74  es.  databases t
d3d0: 6f 20 65 78 69 73 74 20 69 6e 20 6d 65 6d 6f 72  o exist in memor
d3e0: 79 20 6f 6e 6c 79 2e 20 20 54 68 69 73 20 6f 70  y only.  This op
d3f0: 74 69 6f 6e 20 68 61 73 20 6e 6f 74 20 62 65 65  tion has not bee
d400: 6e 20 0a 20 20 6d 61 69 6e 74 61 69 6e 65 64 20  n .  maintained 
d410: 61 6e 64 20 70 72 6f 62 61 62 6c 79 20 64 6f 65  and probably doe
d420: 73 20 6e 6f 74 20 77 6f 72 6b 20 77 69 74 68 20  s not work with 
d430: 6e 65 77 65 72 20 76 65 72 73 69 6f 6e 73 20 6f  newer versions o
d440: 66 20 53 51 4c 69 74 65 2e 0a 7d 0a 0a 43 4f 4d  f SQLite..}..COM
d450: 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c  PILE_OPTION {SQL
d460: 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e  ITE_OMIT_EXPLAIN
d470: 7d 20 7b 0a 20 20 44 65 66 69 6e 69 6e 67 20 74  } {.  Defining t
d480: 68 69 73 20 6f 70 74 69 6f 6e 20 63 61 75 73 65  his option cause
d490: 73 20 74 68 65 20 5b 45 58 50 4c 41 49 4e 5d 20  s the [EXPLAIN] 
d4a0: 63 6f 6d 6d 61 6e 64 20 74 6f 20 62 65 20 6f 6d  command to be om
d4b0: 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65 0a 20  itted from the. 
d4c0: 20 6c 69 62 72 61 72 79 2e 20 41 74 74 65 6d 70   library. Attemp
d4d0: 74 69 6e 67 20 74 6f 20 65 78 65 63 75 74 65 20  ting to execute 
d4e0: 61 6e 20 5b 45 58 50 4c 41 49 4e 5d 20 73 74 61  an [EXPLAIN] sta
d4f0: 74 65 6d 65 6e 74 20 77 69 6c 6c 20 63 61 75 73  tement will caus
d500: 65 20 61 20 70 61 72 73 65 0a 20 20 65 72 72 6f  e a parse.  erro
d510: 72 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50  r..}..COMPILE_OP
d520: 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d 49  TION {SQLITE_OMI
d530: 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53 7d 20  T_FLAG_PRAGMAS} 
d540: 7b 0a 20 20 54 68 69 73 20 6f 70 74 69 6f 6e 20  {.  This option 
d550: 6f 6d 69 74 73 20 73 75 70 70 6f 72 74 20 66 6f  omits support fo
d560: 72 20 61 20 73 75 62 73 65 74 20 6f 66 20 5b 50  r a subset of [P
d570: 52 41 47 4d 41 5d 20 63 6f 6d 6d 61 6e 64 73 20  RAGMA] commands 
d580: 74 68 61 74 0a 20 20 71 75 65 72 79 20 61 6e 64  that.  query and
d590: 20 73 65 74 20 62 6f 6f 6c 65 61 6e 20 70 72 6f   set boolean pro
d5a0: 70 65 72 74 69 65 73 2e 0a 7d 0a 0a 43 4f 4d 50  perties..}..COMP
d5b0: 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49  ILE_OPTION {SQLI
d5c0: 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47  TE_OMIT_FLOATING
d5d0: 5f 50 4f 49 4e 54 7d 20 7b 0a 20 20 54 68 69 73  _POINT} {.  This
d5e0: 20 6f 70 74 69 6f 6e 20 69 73 20 75 73 65 64 20   option is used 
d5f0: 74 6f 20 6f 6d 69 74 20 66 6c 6f 61 74 69 6e 67  to omit floating
d600: 2d 70 6f 69 6e 74 20 6e 75 6d 62 65 72 20 73 75  -point number su
d610: 70 70 6f 72 74 20 66 72 6f 6d 20 74 68 65 20 53  pport from the S
d620: 51 4c 69 74 65 0a 20 20 6c 69 62 72 61 72 79 2e  QLite.  library.
d630: 20 57 68 65 6e 20 73 70 65 63 69 66 69 65 64 2c   When specified,
d640: 20 73 70 65 63 69 66 79 69 6e 67 20 61 20 66 6c   specifying a fl
d650: 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 6e 75 6d  oating point num
d660: 62 65 72 20 61 73 20 61 20 6c 69 74 65 72 61 6c  ber as a literal
d670: 20 0a 20 20 28 69 2e 65 2e 20 22 31 2e 30 31 22   .  (i.e. "1.01"
d680: 29 20 72 65 73 75 6c 74 73 20 69 6e 20 61 20 70  ) results in a p
d690: 61 72 73 65 20 65 72 72 6f 72 2e 0a 0a 20 20 3c  arse error...  <
d6a0: 70 3e 49 6e 20 74 68 65 20 66 75 74 75 72 65 2c  p>In the future,
d6b0: 20 74 68 69 73 20 6f 70 74 69 6f 6e 20 6d 61 79   this option may
d6c0: 20 61 6c 73 6f 20 64 69 73 61 62 6c 65 20 6f 74   also disable ot
d6d0: 68 65 72 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69  her floating poi
d6e0: 6e 74 20 0a 20 20 66 75 6e 63 74 69 6f 6e 61 6c  nt .  functional
d6f0: 69 74 79 2c 20 66 6f 72 20 65 78 61 6d 70 6c 65  ity, for example
d700: 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 72 65   the [sqlite3_re
d710: 73 75 6c 74 5f 64 6f 75 62 6c 65 28 29 5d 2c 20  sult_double()], 
d720: 0a 20 20 5b 73 71 6c 69 74 65 33 5f 62 69 6e 64  .  [sqlite3_bind
d730: 5f 64 6f 75 62 6c 65 28 29 5d 2c 20 5b 73 71 6c  _double()], [sql
d740: 69 74 65 33 5f 76 61 6c 75 65 5f 64 6f 75 62 6c  ite3_value_doubl
d750: 65 28 29 5d 20 61 6e 64 0a 20 20 5b 73 71 6c 69  e()] and.  [sqli
d760: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c  te3_column_doubl
d770: 65 28 29 5d 20 41 50 49 20 66 75 6e 63 74 69 6f  e()] API functio
d780: 6e 73 2e 0a 20 20 3c 2f 70 3e 0a 7d 0a 0a 43 4f  ns..  </p>.}..CO
d790: 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51  MPILE_OPTION {SQ
d7a0: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47  LITE_OMIT_FOREIG
d7b0: 4e 5f 4b 45 59 7d 20 7b 0a 20 20 49 66 20 74 68  N_KEY} {.  If th
d7c0: 69 73 20 6f 70 74 69 6f 6e 20 69 73 20 64 65 66  is option is def
d7d0: 69 6e 65 64 2c 20 74 68 65 6e 20 5b 66 6f 72 65  ined, then [fore
d7e0: 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
d7f0: 6e 74 5d 20 73 79 6e 74 61 78 20 69 73 0a 20 20  nt] syntax is.  
d800: 6e 6f 74 20 72 65 63 6f 67 6e 69 7a 65 64 2e 0a  not recognized..
d810: 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f  }..COMPILE_OPTIO
d820: 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 47  N {SQLITE_OMIT_G
d830: 45 54 5f 54 41 42 4c 45 7d 20 7b 0a 20 20 54 68  ET_TABLE} {.  Th
d840: 69 73 20 6f 70 74 69 6f 6e 20 63 61 75 73 65 73  is option causes
d850: 20 73 75 70 70 6f 72 74 20 66 6f 72 20 5b 73 71   support for [sq
d860: 6c 69 74 65 33 5f 67 65 74 5f 74 61 62 6c 65 28  lite3_get_table(
d870: 29 5d 20 61 6e 64 0a 20 20 5b 73 71 6c 69 74 65  )] and.  [sqlite
d880: 33 5f 66 72 65 65 5f 74 61 62 6c 65 28 29 5d 20  3_free_table()] 
d890: 74 6f 20 62 65 20 6f 6d 69 74 74 65 64 2e 0a 7d  to be omitted..}
d8a0: 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e  ..COMPILE_OPTION
d8b0: 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e   {SQLITE_OMIT_IN
d8c0: 43 52 42 4c 4f 42 7d 20 7b 0a 20 20 54 68 69 73  CRBLOB} {.  This
d8d0: 20 6f 70 74 69 6f 6e 20 63 61 75 73 65 73 20 73   option causes s
d8e0: 75 70 70 6f 72 74 20 66 6f 72 20 5b 73 71 6c 69  upport for [sqli
d8f0: 74 65 33 5f 62 6c 6f 62 20 7c 20 69 6e 63 72 65  te3_blob | incre
d900: 6d 65 6e 74 61 6c 20 42 4c 4f 42 20 49 2f 4f 5d  mental BLOB I/O]
d910: 0a 20 20 74 6f 20 62 65 20 6f 6d 69 74 74 65 64  .  to be omitted
d920: 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54  ..}..COMPILE_OPT
d930: 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54  ION {SQLITE_OMIT
d940: 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b  _INTEGRITY_CHECK
d950: 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70 74 69 6f  } {.  This optio
d960: 6e 20 6f 6d 69 74 73 20 73 75 70 70 6f 72 74 20  n omits support 
d970: 66 6f 72 20 74 68 65 20 5b 69 6e 74 65 67 72 69  for the [integri
d980: 74 79 5f 63 68 65 63 6b 20 70 72 61 67 6d 61 5d  ty_check pragma]
d990: 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54  ..}..COMPILE_OPT
d9a0: 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54  ION {SQLITE_OMIT
d9b0: 5f 4c 49 4b 45 5f 4f 50 54 49 4d 49 5a 41 54 49  _LIKE_OPTIMIZATI
d9c0: 4f 4e 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70 74  ON} {.  This opt
d9d0: 69 6f 6e 20 64 69 73 61 62 6c 65 73 20 74 68 65  ion disables the
d9e0: 20 61 62 69 6c 69 74 79 20 6f 66 20 53 51 4c 69   ability of SQLi
d9f0: 74 65 20 74 6f 20 75 73 65 20 69 6e 64 69 63 65  te to use indice
da00: 73 20 74 6f 20 68 65 6c 70 0a 20 20 72 65 73 6f  s to help.  reso
da10: 6c 76 65 20 5b 4c 49 4b 45 5d 20 61 6e 64 20 5b  lve [LIKE] and [
da20: 47 4c 4f 42 5d 20 6f 70 65 72 61 74 6f 72 73 20  GLOB] operators 
da30: 69 6e 20 61 20 57 48 45 52 45 20 63 6c 61 75 73  in a WHERE claus
da40: 65 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50  e..}..COMPILE_OP
da50: 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d 49  TION {SQLITE_OMI
da60: 54 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e  T_LOAD_EXTENSION
da70: 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70 74 69 6f  } {.  This optio
da80: 6e 20 6f 6d 69 74 73 20 74 68 65 20 65 6e 74 69  n omits the enti
da90: 72 65 20 65 78 74 65 6e 73 69 6f 6e 20 6c 6f 61  re extension loa
daa0: 64 69 6e 67 20 6d 65 63 68 61 6e 69 73 6d 20 66  ding mechanism f
dab0: 72 6f 6d 0a 20 20 53 51 4c 69 74 65 2c 20 69 6e  rom.  SQLite, in
dac0: 63 6c 75 64 69 6e 67 20 5b 73 71 6c 69 74 65 33  cluding [sqlite3
dad0: 5f 65 6e 61 62 6c 65 5f 6c 6f 61 64 5f 65 78 74  _enable_load_ext
dae0: 65 6e 73 69 6f 6e 28 29 5d 20 61 6e 64 0a 20 20  ension()] and.  
daf0: 5b 73 71 6c 69 74 65 33 5f 6c 6f 61 64 5f 65 78  [sqlite3_load_ex
db00: 74 65 6e 73 69 6f 6e 28 29 5d 20 69 6e 74 65 72  tension()] inter
db10: 66 61 63 65 73 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c  faces..}..COMPIL
db20: 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45  E_OPTION {SQLITE
db30: 5f 4f 4d 49 54 5f 4c 4f 43 41 4c 54 49 4d 45 7d  _OMIT_LOCALTIME}
db40: 20 7b 0a 20 20 54 68 69 73 20 6f 70 74 69 6f 6e   {.  This option
db50: 20 6f 6d 69 74 73 20 74 68 65 20 22 6c 6f 63 61   omits the "loca
db60: 6c 74 69 6d 65 22 20 6d 6f 64 69 66 69 65 72 20  ltime" modifier 
db70: 66 72 6f 6d 20 74 68 65 20 64 61 74 65 20 61 6e  from the date an
db80: 64 20 74 69 6d 65 0a 20 20 66 75 6e 63 74 69 6f  d time.  functio
db90: 6e 73 2e 20 20 54 68 69 73 20 6f 70 74 69 6f 6e  ns.  This option
dba0: 20 69 73 20 73 6f 6d 65 74 69 6d 65 73 20 75 73   is sometimes us
dbb0: 65 66 75 6c 20 77 68 65 6e 20 74 72 79 69 6e 67  eful when trying
dbc0: 20 74 6f 20 63 6f 6d 70 69 6c 65 0a 20 20 74 68   to compile.  th
dbd0: 65 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20  e date and time 
dbe0: 66 75 6e 63 74 69 6f 6e 73 20 6f 6e 20 61 20 70  functions on a p
dbf0: 6c 61 74 66 6f 72 6d 20 74 68 61 74 20 64 6f 65  latform that doe
dc00: 73 20 6e 6f 74 20 73 75 70 70 6f 72 74 20 74 68  s not support th
dc10: 65 0a 20 20 63 6f 6e 63 65 70 74 20 6f 66 20 6c  e.  concept of l
dc20: 6f 63 61 6c 20 74 69 6d 65 2e 0a 7d 0a 0a 43 4f  ocal time..}..CO
dc30: 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51  MPILE_OPTION {SQ
dc40: 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f 4f 4b 41 53  LITE_OMIT_LOOKAS
dc50: 49 44 45 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70  IDE} {.  This op
dc60: 74 69 6f 6e 20 6f 6d 69 74 73 20 74 68 65 20 5b  tion omits the [
dc70: 6c 6f 6f 6b 61 73 69 64 65 20 6d 65 6d 6f 72 79  lookaside memory
dc80: 20 61 6c 6c 6f 63 61 74 6f 72 5d 2e 0a 7d 0a 0a   allocator]..}..
dc90: 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b  COMPILE_OPTION {
dca0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4d 45 4d 4f  SQLITE_OMIT_MEMO
dcb0: 52 59 44 42 7d 20 7b 0a 20 20 57 68 65 6e 20 74  RYDB} {.  When t
dcc0: 68 69 73 20 69 73 20 64 65 66 69 6e 65 64 2c 20  his is defined, 
dcd0: 74 68 65 20 6c 69 62 72 61 72 79 20 64 6f 65 73  the library does
dce0: 20 6e 6f 74 20 72 65 73 70 65 63 74 20 74 68 65   not respect the
dcf0: 20 73 70 65 63 69 61 6c 20 64 61 74 61 62 61 73   special databas
dd00: 65 0a 20 20 6e 61 6d 65 20 22 3a 6d 65 6d 6f 72  e.  name ":memor
dd10: 79 3a 22 20 28 6e 6f 72 6d 61 6c 6c 79 20 75 73  y:" (normally us
dd20: 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 6e 20  ed to create an 
dd30: 5b 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62  [in-memory datab
dd40: 61 73 65 5d 29 2e 20 49 66 20 0a 20 20 22 3a 6d  ase]). If .  ":m
dd50: 65 6d 6f 72 79 3a 22 20 69 73 20 70 61 73 73 65  emory:" is passe
dd60: 64 20 74 6f 20 5b 73 71 6c 69 74 65 33 5f 6f 70  d to [sqlite3_op
dd70: 65 6e 28 29 5d 2c 20 5b 73 71 6c 69 74 65 33 5f  en()], [sqlite3_
dd80: 6f 70 65 6e 31 36 28 29 5d 2c 20 6f 72 0a 20 20  open16()], or.  
dd90: 5b 73 71 6c 69 74 65 33 5f 6f 70 65 6e 5f 76 32  [sqlite3_open_v2
dda0: 28 29 5d 2c 20 61 20 66 69 6c 65 20 77 69 74 68  ()], a file with
ddb0: 20 74 68 69 73 20 6e 61 6d 65 20 77 69 6c 6c 20   this name will 
ddc0: 62 65 20 0a 20 20 6f 70 65 6e 65 64 20 6f 72 20  be .  opened or 
ddd0: 63 72 65 61 74 65 64 2e 0a 7d 0a 0a 43 4f 4d 50  created..}..COMP
dde0: 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49  ILE_OPTION {SQLI
ddf0: 54 45 5f 4f 4d 49 54 5f 4f 52 5f 4f 50 54 49 4d  TE_OMIT_OR_OPTIM
de00: 49 5a 41 54 49 4f 4e 7d 20 7b 0a 20 20 54 68 69  IZATION} {.  Thi
de10: 73 20 6f 70 74 69 6f 6e 20 64 69 73 61 62 6c 65  s option disable
de20: 73 20 74 68 65 20 61 62 69 6c 69 74 79 20 6f 66  s the ability of
de30: 20 53 51 4c 69 74 65 20 74 6f 20 75 73 65 20 61   SQLite to use a
de40: 6e 20 69 6e 64 65 78 20 74 6f 67 65 74 68 65 72  n index together
de50: 0a 20 20 77 69 74 68 20 74 65 72 6d 73 20 6f 66  .  with terms of
de60: 20 61 20 57 48 45 52 45 20 63 6c 61 75 73 65 20   a WHERE clause 
de70: 63 6f 6e 6e 65 63 74 65 64 20 62 79 20 74 68 65  connected by the
de80: 20 4f 52 20 6f 70 65 72 61 74 6f 72 2e 0a 7d 0a   OR operator..}.
de90: 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20  .COMPILE_OPTION 
dea0: 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47  {SQLITE_OMIT_PAG
deb0: 45 52 5f 50 52 41 47 4d 41 53 7d 20 7b 0a 20 20  ER_PRAGMAS} {.  
dec0: 44 65 66 69 6e 69 6e 67 20 74 68 69 73 20 6f 70  Defining this op
ded0: 74 69 6f 6e 20 6f 6d 69 74 73 20 70 72 61 67 6d  tion omits pragm
dee0: 61 73 20 72 65 6c 61 74 65 64 20 74 6f 20 74 68  as related to th
def0: 65 20 70 61 67 65 72 20 73 75 62 73 79 73 74 65  e pager subsyste
df00: 6d 20 66 72 6f 6d 20 0a 20 20 74 68 65 20 62 75  m from .  the bu
df10: 69 6c 64 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f  ild..}..COMPILE_
df20: 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f  OPTION {SQLITE_O
df30: 4d 49 54 5f 50 52 41 47 4d 41 7d 20 7b 0a 20 20  MIT_PRAGMA} {.  
df40: 54 68 69 73 20 6f 70 74 69 6f 6e 20 69 73 20 75  This option is u
df50: 73 65 64 20 74 6f 20 6f 6d 69 74 20 74 68 65 20  sed to omit the 
df60: 5b 50 52 41 47 4d 41 5d 20 63 6f 6d 6d 61 6e 64  [PRAGMA] command
df70: 0a 20 20 66 72 6f 6d 20 74 68 65 20 6c 69 62 72  .  from the libr
df80: 61 72 79 2e 20 4e 6f 74 65 20 74 68 61 74 20 69  ary. Note that i
df90: 74 20 69 73 20 75 73 65 66 75 6c 20 74 6f 20 64  t is useful to d
dfa0: 65 66 69 6e 65 20 74 68 65 20 6d 61 63 72 6f 73  efine the macros
dfb0: 20 74 68 61 74 20 6f 6d 69 74 0a 20 20 73 70 65   that omit.  spe
dfc0: 63 69 66 69 63 20 70 72 61 67 6d 61 73 20 69 6e  cific pragmas in
dfd0: 20 61 64 64 69 74 69 6f 6e 20 74 6f 20 74 68 69   addition to thi
dfe0: 73 2c 20 61 73 20 74 68 65 79 20 6d 61 79 20 61  s, as they may a
dff0: 6c 73 6f 20 72 65 6d 6f 76 65 20 73 75 70 70 6f  lso remove suppo
e000: 72 74 69 6e 67 20 63 6f 64 65 0a 20 20 69 6e 20  rting code.  in 
e010: 6f 74 68 65 72 20 73 75 62 2d 73 79 73 74 65 6d  other sub-system
e020: 73 2e 20 54 68 69 73 20 6d 61 63 72 6f 20 72 65  s. This macro re
e030: 6d 6f 76 65 73 20 74 68 65 20 5b 50 52 41 47 4d  moves the [PRAGM
e040: 41 5d 20 63 6f 6d 6d 61 6e 64 20 6f 6e 6c 79 2e  A] command only.
e050: 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49  .}..COMPILE_OPTI
e060: 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ON {SQLITE_OMIT_
e070: 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43  PROGRESS_CALLBAC
e080: 4b 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70 74 69  K} {.  This opti
e090: 6f 6e 20 6d 61 79 20 62 65 20 64 65 66 69 6e 65  on may be define
e0a0: 64 20 74 6f 20 6f 6d 69 74 20 74 68 65 20 63 61  d to omit the ca
e0b0: 70 61 62 69 6c 69 74 79 20 74 6f 20 69 73 73 75  pability to issu
e0c0: 65 20 22 70 72 6f 67 72 65 73 73 22 20 0a 20 20  e "progress" .  
e0d0: 63 61 6c 6c 62 61 63 6b 73 20 64 75 72 69 6e 67  callbacks during
e0e0: 20 6c 6f 6e 67 2d 72 75 6e 6e 69 6e 67 20 53 51   long-running SQ
e0f0: 4c 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 54 68  L statements. Th
e100: 65 20 0a 20 20 5b 73 71 6c 69 74 65 33 5f 70 72  e .  [sqlite3_pr
e110: 6f 67 72 65 73 73 5f 68 61 6e 64 6c 65 72 28 29  ogress_handler()
e120: 5d 0a 20 20 41 50 49 20 66 75 6e 63 74 69 6f 6e  ].  API function
e130: 20 69 73 20 6e 6f 74 20 70 72 65 73 65 6e 74 20   is not present 
e140: 69 6e 20 74 68 65 20 6c 69 62 72 61 72 79 2e 0a  in the library..
e150: 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f  }..COMPILE_OPTIO
e160: 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 51  N {SQLITE_OMIT_Q
e170: 55 49 43 4b 42 41 4c 41 4e 43 45 7d 20 7b 0a 20  UICKBALANCE} {. 
e180: 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 6f 6d 69   This option omi
e190: 74 73 20 61 6e 20 61 6c 74 65 72 6e 61 74 69 76  ts an alternativ
e1a0: 65 2c 20 66 61 73 74 65 72 20 42 2d 54 72 65 65  e, faster B-Tree
e1b0: 20 62 61 6c 61 6e 63 69 6e 67 20 72 6f 75 74 69   balancing routi
e1c0: 6e 65 2e 0a 20 20 55 73 69 6e 67 20 74 68 69 73  ne..  Using this
e1d0: 20 6f 70 74 69 6f 6e 20 6d 61 6b 65 73 20 53 51   option makes SQ
e1e0: 4c 69 74 65 20 73 6c 69 67 68 74 6c 79 20 73 6d  Lite slightly sm
e1f0: 61 6c 6c 65 72 20 61 74 20 74 68 65 20 65 78 70  aller at the exp
e200: 65 6e 73 65 20 6f 66 0a 20 20 6d 61 6b 69 6e 67  ense of.  making
e210: 20 69 74 20 72 75 6e 20 73 6c 69 67 68 74 6c 79   it run slightly
e220: 20 73 6c 6f 77 65 72 2e 0a 7d 0a 0a 43 4f 4d 50   slower..}..COMP
e230: 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49  ILE_OPTION {SQLI
e240: 54 45 5f 4f 4d 49 54 5f 52 45 49 4e 44 45 58 7d  TE_OMIT_REINDEX}
e250: 20 7b 0a 20 20 57 68 65 6e 20 74 68 69 73 20 6f   {.  When this o
e260: 70 74 69 6f 6e 20 69 73 20 64 65 66 69 6e 65 64  ption is defined
e270: 2c 20 74 68 65 20 5b 52 45 49 4e 44 45 58 5d 0a  , the [REINDEX].
e280: 20 20 63 6f 6d 6d 61 6e 64 20 69 73 20 6e 6f 74    command is not
e290: 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 74 68 65   included in the
e2a0: 20 6c 69 62 72 61 72 79 2e 0a 20 20 45 78 65 63   library..  Exec
e2b0: 75 74 69 6e 67 20 61 20 5b 52 45 49 4e 44 45 58  uting a [REINDEX
e2c0: 5d 20 73 74 61 74 65 6d 65 6e 74 20 63 61 75 73  ] statement caus
e2d0: 65 73 20 0a 20 20 61 20 70 61 72 73 65 20 65 72  es .  a parse er
e2e0: 72 6f 72 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f  ror..}..COMPILE_
e2f0: 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f  OPTION {SQLITE_O
e300: 4d 49 54 5f 53 43 48 45 4d 41 5f 50 52 41 47 4d  MIT_SCHEMA_PRAGM
e310: 41 53 7d 20 7b 0a 20 20 44 65 66 69 6e 69 6e 67  AS} {.  Defining
e320: 20 74 68 69 73 20 6f 70 74 69 6f 6e 20 6f 6d 69   this option omi
e330: 74 73 20 70 72 61 67 6d 61 73 20 66 6f 72 20 71  ts pragmas for q
e340: 75 65 72 79 69 6e 67 20 74 68 65 20 64 61 74 61  uerying the data
e350: 62 61 73 65 20 73 63 68 65 6d 61 20 66 72 6f 6d  base schema from
e360: 20 0a 20 20 74 68 65 20 62 75 69 6c 64 2e 0a 7d   .  the build..}
e370: 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e  ..COMPILE_OPTION
e380: 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43   {SQLITE_OMIT_SC
e390: 48 45 4d 41 5f 56 45 52 53 49 4f 4e 5f 50 52 41  HEMA_VERSION_PRA
e3a0: 47 4d 41 53 7d 20 7b 0a 20 20 44 65 66 69 6e 69  GMAS} {.  Defini
e3b0: 6e 67 20 74 68 69 73 20 6f 70 74 69 6f 6e 20 6f  ng this option o
e3c0: 6d 69 74 73 20 70 72 61 67 6d 61 73 20 66 6f 72  mits pragmas for
e3d0: 20 71 75 65 72 79 69 6e 67 20 61 6e 64 20 6d 6f   querying and mo
e3e0: 64 69 66 79 69 6e 67 20 74 68 65 20 0a 20 20 64  difying the .  d
e3f0: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 76  atabase schema v
e400: 65 72 73 69 6f 6e 20 61 6e 64 20 75 73 65 72 20  ersion and user 
e410: 76 65 72 73 69 6f 6e 20 66 72 6f 6d 20 74 68 65  version from the
e420: 20 62 75 69 6c 64 2e 20 53 70 65 63 69 66 69 63   build. Specific
e430: 61 6c 6c 79 2c 20 74 68 65 20 0a 20 20 5b 73 63  ally, the .  [sc
e440: 68 65 6d 61 5f 76 65 72 73 69 6f 6e 5d 20 61 6e  hema_version] an
e450: 64 20 5b 75 73 65 72 5f 76 65 72 73 69 6f 6e 5d  d [user_version]
e460: 20 50 52 41 47 4d 41 73 20 61 72 65 20 6f 6d 69   PRAGMAs are omi
e470: 74 74 65 64 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45  tted..}..COMPILE
e480: 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f  _OPTION {SQLITE_
e490: 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48  OMIT_SHARED_CACH
e4a0: 45 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70 74 69  E} {.  This opti
e4b0: 6f 6e 20 62 75 69 6c 64 73 20 53 51 4c 69 74 65  on builds SQLite
e4c0: 20 77 69 74 68 6f 75 74 20 73 75 70 70 6f 72 74   without support
e4d0: 20 66 6f 72 20 73 68 61 72 65 64 2d 63 61 63 68   for shared-cach
e4e0: 65 20 6d 6f 64 65 2e 0a 20 20 54 68 65 20 5b 73  e mode..  The [s
e4f0: 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f 73 68  qlite3_enable_sh
e500: 61 72 65 64 5f 63 61 63 68 65 28 29 5d 20 69 73  ared_cache()] is
e510: 20 6f 6d 69 74 74 65 64 20 61 6c 6f 6e 67 20 77   omitted along w
e520: 69 74 68 20 61 20 66 61 69 72 0a 20 20 61 6d 6f  ith a fair.  amo
e530: 75 6e 74 20 6f 66 20 6c 6f 67 69 63 20 77 69 74  unt of logic wit
e540: 68 69 6e 20 74 68 65 20 42 2d 54 72 65 65 20 73  hin the B-Tree s
e550: 75 62 73 79 73 74 65 6d 20 61 73 73 6f 63 69 61  ubsystem associa
e560: 74 65 64 20 77 69 74 68 20 73 68 61 72 65 64 0a  ted with shared.
e570: 20 20 63 61 63 68 65 20 6d 61 6e 61 67 65 6d 65    cache manageme
e580: 6e 74 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f  nt..}..COMPILE_O
e590: 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d  PTION {SQLITE_OM
e5a0: 49 54 5f 53 55 42 51 55 45 52 59 7d 20 7b 0a 20  IT_SUBQUERY} {. 
e5b0: 20 49 66 20 64 65 66 69 6e 65 64 2c 20 73 75 70   If defined, sup
e5c0: 70 6f 72 74 20 66 6f 72 20 73 75 62 2d 73 65 6c  port for sub-sel
e5d0: 65 63 74 73 20 61 6e 64 20 74 68 65 20 49 4e 28  ects and the IN(
e5e0: 29 20 6f 70 65 72 61 74 6f 72 20 61 72 65 20 6f  ) operator are o
e5f0: 6d 69 74 74 65 64 2e 0a 7d 0a 0a 43 4f 4d 50 49  mitted..}..COMPI
e600: 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54  LE_OPTION {SQLIT
e610: 45 5f 4f 4d 49 54 5f 54 43 4c 5f 56 41 52 49 41  E_OMIT_TCL_VARIA
e620: 42 4c 45 7d 20 7b 0a 20 20 49 66 20 74 68 69 73  BLE} {.  If this
e630: 20 6d 61 63 72 6f 20 69 73 20 64 65 66 69 6e 65   macro is define
e640: 64 2c 20 74 68 65 6e 20 74 68 65 20 73 70 65 63  d, then the spec
e650: 69 61 6c 20 22 24 3c 76 61 72 69 61 62 6c 65 2d  ial "$<variable-
e660: 6e 61 6d 65 3e 22 20 73 79 6e 74 61 78 0a 20 20  name>" syntax.  
e670: 75 73 65 64 20 74 6f 20 61 75 74 6f 6d 61 74 69  used to automati
e680: 63 61 6c 6c 79 20 62 69 6e 64 20 53 51 4c 20 76  cally bind SQL v
e690: 61 72 69 61 62 6c 65 73 20 74 6f 20 54 43 4c 20  ariables to TCL 
e6a0: 76 61 72 69 61 62 6c 65 73 20 69 73 20 6f 6d 69  variables is omi
e6b0: 74 74 65 64 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45  tted..}..COMPILE
e6c0: 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f  _OPTION {SQLITE_
e6d0: 4f 4d 49 54 5f 54 45 4d 50 44 42 7d 20 7b 0a 20  OMIT_TEMPDB} {. 
e6e0: 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 6f 6d 69   This option omi
e6f0: 74 73 20 73 75 70 70 6f 72 74 20 66 6f 72 20 54  ts support for T
e700: 45 4d 50 20 6f 72 20 54 45 4d 50 4f 52 41 52 59  EMP or TEMPORARY
e710: 20 74 61 62 6c 65 73 2e 0a 7d 0a 0a 43 4f 4d 50   tables..}..COMP
e720: 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49  ILE_OPTION {SQLI
e730: 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45 7d 20 7b  TE_OMIT_TRACE} {
e740: 0a 20 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 6f  .  This option o
e750: 6d 69 74 73 20 73 75 70 70 6f 72 74 20 66 6f 72  mits support for
e760: 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 70 72   the [sqlite3_pr
e770: 6f 66 69 6c 65 28 29 5d 20 61 6e 64 0a 20 20 5b  ofile()] and.  [
e780: 73 71 6c 69 74 65 33 5f 74 72 61 63 65 28 29 5d  sqlite3_trace()]
e790: 20 69 6e 74 65 72 66 61 63 65 73 20 61 6e 64 20   interfaces and 
e7a0: 74 68 65 69 72 20 61 73 73 6f 63 69 61 74 65 64  their associated
e7b0: 20 6c 6f 67 69 63 2e 0a 7d 0a 0a 43 4f 4d 50 49   logic..}..COMPI
e7c0: 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54  LE_OPTION {SQLIT
e7d0: 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 7d 20  E_OMIT_TRIGGER} 
e7e0: 7b 0a 20 20 44 65 66 69 6e 69 6e 67 20 74 68 69  {.  Defining thi
e7f0: 73 20 6f 70 74 69 6f 6e 20 6f 6d 69 74 73 20 73  s option omits s
e800: 75 70 70 6f 72 74 20 66 6f 72 20 54 52 49 47 47  upport for TRIGG
e810: 45 52 20 6f 62 6a 65 63 74 73 2e 20 4e 65 69 74  ER objects. Neit
e820: 68 65 72 20 74 68 65 20 0a 20 20 5b 43 52 45 41  her the .  [CREA
e830: 54 45 20 54 52 49 47 47 45 52 5d 20 6f 72 20 5b  TE TRIGGER] or [
e840: 44 52 4f 50 20 54 52 49 47 47 45 52 5d 0a 20 20  DROP TRIGGER].  
e850: 63 6f 6d 6d 61 6e 64 73 20 61 72 65 20 61 76 61  commands are ava
e860: 69 6c 61 62 6c 65 20 69 6e 20 74 68 69 73 20 63  ilable in this c
e870: 61 73 65 2c 20 61 6e 64 20 61 74 74 65 6d 70 74  ase, and attempt
e880: 69 6e 67 20 74 6f 20 65 78 65 63 75 74 65 0a 20  ing to execute. 
e890: 20 65 69 74 68 65 72 20 77 69 6c 6c 20 72 65 73   either will res
e8a0: 75 6c 74 20 69 6e 20 61 20 70 61 72 73 65 20 65  ult in a parse e
e8b0: 72 72 6f 72 2e 0a 20 20 54 68 69 73 20 6f 70 74  rror..  This opt
e8c0: 69 6f 6e 20 61 6c 73 6f 20 64 69 73 61 62 6c 65  ion also disable
e8d0: 73 20 65 6e 66 6f 72 63 65 6d 65 6e 74 20 6f 66  s enforcement of
e8e0: 20 5b 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f   [foreign key co
e8f0: 6e 73 74 72 61 69 6e 74 73 5d 2c 0a 20 20 73 69  nstraints],.  si
e900: 6e 63 65 20 74 68 65 20 63 6f 64 65 20 74 68 61  nce the code tha
e910: 74 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74 72 69  t implements tri
e920: 67 67 65 72 73 20 61 6e 64 20 77 68 69 63 68 20  ggers and which 
e930: 69 73 20 6f 6d 69 74 74 65 64 20 62 79 20 74 68  is omitted by th
e940: 69 73 0a 20 20 6f 70 74 69 6f 6e 20 69 73 20 61  is.  option is a
e950: 6c 73 6f 20 75 73 65 64 20 74 6f 20 69 6d 70 6c  lso used to impl
e960: 65 6d 65 6e 74 20 5b 66 6f 72 65 69 67 6e 20 6b  ement [foreign k
e970: 65 79 20 61 63 74 69 6f 6e 73 5d 2e 0a 7d 0a 0a  ey actions]..}..
e980: 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b  COMPILE_OPTION {
e990: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 55 4e  SQLITE_OMIT_TRUN
e9a0: 43 41 54 45 5f 4f 50 54 49 4d 49 5a 41 54 49 4f  CATE_OPTIMIZATIO
e9b0: 4e 7d 20 7b 0a 20 20 41 20 64 65 66 61 75 6c 74  N} {.  A default
e9c0: 20 62 75 69 6c 64 20 6f 66 20 53 51 4c 69 74 65   build of SQLite
e9d0: 2c 20 69 66 20 61 20 5b 44 45 4c 45 54 45 5d 20  , if a [DELETE] 
e9e0: 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20 6e 6f  statement has no
e9f0: 20 57 48 45 52 45 20 63 6c 61 75 73 65 0a 20 20   WHERE clause.  
ea00: 61 6e 64 20 6f 70 65 72 61 74 65 73 20 6f 6e 20  and operates on 
ea10: 61 20 74 61 62 6c 65 20 77 69 74 68 20 6e 6f 20  a table with no 
ea20: 74 72 69 67 67 65 72 73 2c 20 61 6e 20 6f 70 74  triggers, an opt
ea30: 69 6d 69 7a 61 74 69 6f 6e 20 6f 63 63 75 72 73  imization occurs
ea40: 20 74 68 61 74 0a 20 20 63 61 75 73 65 73 20 74   that.  causes t
ea50: 68 65 20 44 45 4c 45 54 45 20 74 6f 20 6f 63 63  he DELETE to occ
ea60: 75 72 20 62 79 20 64 72 6f 70 70 69 6e 67 20 61  ur by dropping a
ea70: 6e 64 20 72 65 63 72 65 61 74 69 6e 67 20 74 68  nd recreating th
ea80: 65 20 74 61 62 6c 65 2e 20 20 0a 20 20 44 72 6f  e table.  .  Dro
ea90: 70 70 69 6e 67 20 61 6e 64 20 72 65 63 72 65 61  pping and recrea
eaa0: 74 69 6e 67 20 61 20 74 61 62 6c 65 20 69 73 20  ting a table is 
eab0: 75 73 75 61 6c 6c 79 20 6d 75 63 68 20 66 61 73  usually much fas
eac0: 74 65 72 20 74 68 61 6e 20 64 65 6c 65 74 69 6e  ter than deletin
ead0: 67 0a 20 20 74 68 65 20 74 61 62 6c 65 20 63 6f  g.  the table co
eae0: 6e 74 65 6e 74 20 72 6f 77 20 62 79 20 72 6f 77  ntent row by row
eaf0: 2e 20 20 54 68 69 73 20 69 73 20 74 68 65 20 22  .  This is the "
eb00: 74 72 75 6e 63 61 74 65 20 6f 70 74 69 6d 69 7a  truncate optimiz
eb10: 61 74 69 6f 6e 22 2e 0a 7d 0a 0a 43 4f 4d 50 49  ation"..}..COMPI
eb20: 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54  LE_OPTION {SQLIT
eb30: 45 5f 4f 4d 49 54 5f 55 54 46 31 36 7d 20 7b 0a  E_OMIT_UTF16} {.
eb40: 20 20 54 68 69 73 20 6d 61 63 72 6f 20 69 73 20    This macro is 
eb50: 75 73 65 64 20 74 6f 20 6f 6d 69 74 20 73 75 70  used to omit sup
eb60: 70 6f 72 74 20 66 6f 72 20 55 54 46 31 36 20 74  port for UTF16 t
eb70: 65 78 74 20 65 6e 63 6f 64 69 6e 67 2e 20 57 68  ext encoding. Wh
eb80: 65 6e 20 74 68 69 73 20 69 73 0a 20 20 64 65 66  en this is.  def
eb90: 69 6e 65 64 20 61 6c 6c 20 41 50 49 20 66 75 6e  ined all API fun
eba0: 63 74 69 6f 6e 73 20 74 68 61 74 20 72 65 74 75  ctions that retu
ebb0: 72 6e 20 6f 72 20 61 63 63 65 70 74 20 55 54 46  rn or accept UTF
ebc0: 31 36 20 65 6e 63 6f 64 65 64 20 74 65 78 74 20  16 encoded text 
ebd0: 61 72 65 0a 20 20 75 6e 61 76 61 69 6c 61 62 6c  are.  unavailabl
ebe0: 65 2e 20 54 68 65 73 65 20 66 75 6e 63 74 69 6f  e. These functio
ebf0: 6e 73 20 63 61 6e 20 62 65 20 69 64 65 6e 74 69  ns can be identi
ec00: 66 69 65 64 20 62 79 20 74 68 65 20 66 61 63 74  fied by the fact
ec10: 20 74 68 61 74 20 74 68 65 79 20 65 6e 64 0a 20   that they end. 
ec20: 20 77 69 74 68 20 27 31 36 27 2c 20 66 6f 72 20   with '16', for 
ec30: 65 78 61 6d 70 6c 65 20 5b 73 71 6c 69 74 65 33  example [sqlite3
ec40: 5f 70 72 65 70 61 72 65 31 36 28 29 5d 2c 20 5b  _prepare16()], [
ec50: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
ec60: 65 78 74 31 36 28 29 5d 20 61 6e 64 0a 20 20 5b  ext16()] and.  [
ec70: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78  sqlite3_bind_tex
ec80: 74 31 36 28 29 5d 2e 0a 7d 0a 0a 43 4f 4d 50 49  t16()]..}..COMPI
ec90: 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54  LE_OPTION {SQLIT
eca0: 45 5f 4f 4d 49 54 5f 56 41 43 55 55 4d 7d 20 7b  E_OMIT_VACUUM} {
ecb0: 0a 20 20 57 68 65 6e 20 74 68 69 73 20 6f 70 74  .  When this opt
ecc0: 69 6f 6e 20 69 73 20 64 65 66 69 6e 65 64 2c 20  ion is defined, 
ecd0: 74 68 65 20 5b 56 41 43 55 55 4d 5d 0a 20 20 63  the [VACUUM].  c
ece0: 6f 6d 6d 61 6e 64 20 69 73 20 6e 6f 74 20 69 6e  ommand is not in
ecf0: 63 6c 75 64 65 64 20 69 6e 20 74 68 65 20 6c 69  cluded in the li
ed00: 62 72 61 72 79 2e 0a 20 20 45 78 65 63 75 74 69  brary..  Executi
ed10: 6e 67 20 61 20 5b 56 41 43 55 55 4d 5d 20 73 74  ng a [VACUUM] st
ed20: 61 74 65 6d 65 6e 74 20 63 61 75 73 65 73 20 0a  atement causes .
ed30: 20 20 61 20 70 61 72 73 65 20 65 72 72 6f 72 2e    a parse error.
ed40: 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49  .}..COMPILE_OPTI
ed50: 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ON {SQLITE_OMIT_
ed60: 56 49 45 57 7d 20 7b 0a 20 20 44 65 66 69 6e 69  VIEW} {.  Defini
ed70: 6e 67 20 74 68 69 73 20 6f 70 74 69 6f 6e 20 6f  ng this option o
ed80: 6d 69 74 73 20 73 75 70 70 6f 72 74 20 66 6f 72  mits support for
ed90: 20 56 49 45 57 20 6f 62 6a 65 63 74 73 2e 20 4e   VIEW objects. N
eda0: 65 69 74 68 65 72 20 74 68 65 20 0a 20 20 5b 43  either the .  [C
edb0: 52 45 41 54 45 20 56 49 45 57 5d 20 6e 6f 72 20  REATE VIEW] nor 
edc0: 74 68 65 20 5b 44 52 4f 50 20 56 49 45 57 5d 0a  the [DROP VIEW].
edd0: 20 20 63 6f 6d 6d 61 6e 64 73 20 61 72 65 20 61    commands are a
ede0: 76 61 69 6c 61 62 6c 65 20 69 6e 20 74 68 69 73  vailable in this
edf0: 20 63 61 73 65 2c 20 61 6e 64 0a 20 20 61 74 74   case, and.  att
ee00: 65 6d 70 74 69 6e 67 20 74 6f 20 65 78 65 63 75  empting to execu
ee10: 74 65 20 65 69 74 68 65 72 20 77 69 6c 6c 20 72  te either will r
ee20: 65 73 75 6c 74 20 69 6e 20 61 20 70 61 72 73 65  esult in a parse
ee30: 20 65 72 72 6f 72 2e 0a 0a 20 20 57 41 52 4e 49   error...  WARNI
ee40: 4e 47 3a 20 49 66 20 74 68 69 73 20 6d 61 63 72  NG: If this macr
ee50: 6f 20 69 73 20 64 65 66 69 6e 65 64 2c 20 69 74  o is defined, it
ee60: 20 77 69 6c 6c 20 6e 6f 74 20 62 65 20 70 6f 73   will not be pos
ee70: 73 69 62 6c 65 20 74 6f 20 6f 70 65 6e 20 61 20  sible to open a 
ee80: 64 61 74 61 62 61 73 65 0a 20 20 66 6f 72 20 77  database.  for w
ee90: 68 69 63 68 20 74 68 65 20 73 63 68 65 6d 61 20  hich the schema 
eea0: 63 6f 6e 74 61 69 6e 73 20 56 49 45 57 20 6f 62  contains VIEW ob
eeb0: 6a 65 63 74 73 2e 20 0a 7d 0a 0a 43 4f 4d 50 49  jects. .}..COMPI
eec0: 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54  LE_OPTION {SQLIT
eed0: 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
eee0: 42 4c 45 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70  BLE} {.  This op
eef0: 74 69 6f 6e 20 6f 6d 69 74 73 20 73 75 70 70 6f  tion omits suppo
ef00: 72 74 20 66 6f 72 20 74 68 65 20 5b 73 71 6c 69  rt for the [sqli
ef10: 74 65 33 5f 76 74 61 62 20 7c 20 56 69 72 74 75  te3_vtab | Virtu
ef20: 61 6c 20 54 61 62 6c 65 5d 0a 20 20 6d 65 63 68  al Table].  mech
ef30: 61 6e 69 73 6d 20 69 6e 20 53 51 4c 69 74 65 2e  anism in SQLite.
ef40: 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49  .}..COMPILE_OPTI
ef50: 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ON {SQLITE_OMIT_
ef60: 57 41 4c 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70  WAL} {.  This op
ef70: 74 69 6f 6e 20 6f 6d 69 74 73 20 74 68 65 20 22  tion omits the "
ef80: 5b 77 72 69 74 65 2d 61 68 65 61 64 20 6c 6f 67  [write-ahead log
ef90: 5d 22 20 28 61 2e 6b 2e 61 2e 20 22 5b 57 41 4c  ]" (a.k.a. "[WAL
efa0: 5d 22 29 20 63 61 70 61 62 69 6c 69 74 79 2e 0a  ]") capability..
efb0: 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f  }..COMPILE_OPTIO
efc0: 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  N {SQLITE_OMIT_W
efd0: 53 44 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70 74  SD} {.  This opt
efe0: 69 6f 6e 20 62 75 69 6c 64 73 20 61 20 76 65 72  ion builds a ver
eff0: 73 69 6f 6e 20 6f 66 20 74 68 65 20 53 51 4c 69  sion of the SQLi
f000: 74 65 20 6c 69 62 72 61 72 79 20 74 68 61 74 20  te library that 
f010: 63 6f 6e 74 61 69 6e 73 20 6e 6f 0a 20 20 57 72  contains no.  Wr
f020: 69 74 61 62 6c 65 20 53 74 61 74 69 63 20 44 61  itable Static Da
f030: 74 61 20 28 57 53 44 29 2e 20 20 57 53 44 20 69  ta (WSD).  WSD i
f040: 73 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c  s global variabl
f050: 65 73 20 61 6e 64 2f 6f 72 20 73 74 61 74 69 63  es and/or static
f060: 0a 20 20 76 61 72 69 61 62 6c 65 73 2e 20 20 53  .  variables.  S
f070: 6f 6d 65 20 70 6c 61 74 66 6f 72 6d 73 20 64 6f  ome platforms do
f080: 20 6e 6f 74 20 73 75 70 70 6f 72 74 20 57 53 44   not support WSD
f090: 2c 20 61 6e 64 20 74 68 69 73 20 6f 70 74 69 6f  , and this optio
f0a0: 6e 20 69 73 20 6e 65 63 65 73 73 61 72 79 0a 20  n is necessary. 
f0b0: 20 69 6e 20 6f 72 64 65 72 20 66 6f 72 20 53 51   in order for SQ
f0c0: 4c 69 74 65 20 74 6f 20 77 6f 72 6b 20 74 68 6f  Lite to work tho
f0d0: 73 65 20 70 6c 61 74 66 6f 72 6d 73 2e 20 20 0a  se platforms.  .
f0e0: 0a 20 20 55 6e 6c 69 6b 65 20 6f 74 68 65 72 20  .  Unlike other 
f0f0: 4f 4d 49 54 20 6f 70 74 69 6f 6e 73 20 77 68 69  OMIT options whi
f100: 63 68 20 6d 61 6b 65 20 74 68 65 20 53 51 4c 69  ch make the SQLi
f110: 74 65 20 6c 69 62 72 61 72 79 20 73 6d 61 6c 6c  te library small
f120: 65 72 2c 0a 20 20 74 68 69 73 20 6f 70 74 69 6f  er,.  this optio
f130: 6e 20 61 63 74 75 61 6c 6c 79 20 69 6e 63 72 65  n actually incre
f140: 61 73 65 73 20 74 68 65 20 73 69 7a 65 20 6f 66  ases the size of
f150: 20 53 51 4c 69 74 65 20 61 6e 64 20 6d 61 6b 65   SQLite and make
f160: 73 20 69 74 20 72 75 6e 0a 20 20 61 20 6c 69 74  s it run.  a lit
f170: 74 6c 65 20 73 6c 6f 77 65 72 2e 20 20 4f 6e 6c  tle slower.  Onl
f180: 79 20 75 73 65 20 74 68 69 73 20 6f 70 74 69 6f  y use this optio
f190: 6e 20 69 66 20 53 51 4c 69 74 65 20 69 73 20 62  n if SQLite is b
f1a0: 65 69 6e 67 20 62 75 69 6c 74 20 66 6f 72 20 61  eing built for a
f1b0: 6e 0a 20 20 65 6d 62 65 64 64 65 64 20 74 61 72  n.  embedded tar
f1c0: 67 65 74 20 74 68 61 74 20 64 6f 65 73 20 6e 6f  get that does no
f1d0: 74 20 73 75 70 70 6f 72 74 20 57 53 44 2e 0a 7d  t support WSD..}
f1e0: 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e  ..COMPILE_OPTION
f1f0: 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 58 46   {SQLITE_OMIT_XF
f200: 45 52 5f 4f 50 54 7d 20 7b 0a 20 20 54 68 69 73  ER_OPT} {.  This
f210: 20 6f 70 74 69 6f 6e 20 6f 6d 69 74 73 20 73 75   option omits su
f220: 70 70 6f 72 74 20 66 6f 72 20 6f 70 74 69 6d 69  pport for optimi
f230: 7a 61 74 69 6f 6e 73 20 74 68 61 74 20 68 65 6c  zations that hel
f240: 70 20 73 74 61 74 65 6d 65 6e 74 73 0a 20 20 6f  p statements.  o
f250: 66 20 74 68 65 20 66 6f 72 6d 20 22 49 4e 53 45  f the form "INSE
f260: 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 53 45 4c 45  RT INTO ... SELE
f270: 43 54 20 2e 2e 2e 22 20 72 75 6e 20 66 61 73 74  CT ..." run fast
f280: 65 72 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f  er..}..COMPILE_O
f290: 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 5a 45  PTION {SQLITE_ZE
f2a0: 52 4f 5f 4d 41 4c 4c 4f 43 7d 20 7b 0a 20 20 54  RO_MALLOC} {.  T
f2b0: 68 69 73 20 6f 70 74 69 6f 6e 20 6f 6d 69 74 73  his option omits
f2c0: 20 62 6f 74 68 20 74 68 65 20 5b 64 65 66 61 75   both the [defau
f2d0: 6c 74 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  lt memory alloca
f2e0: 74 6f 72 5d 20 61 6e 64 20 74 68 65 0a 20 20 5b  tor] and the.  [
f2f0: 64 65 62 75 67 67 69 6e 67 20 6d 65 6d 6f 72 79  debugging memory
f300: 20 61 6c 6c 6f 63 61 74 6f 72 5d 20 66 72 6f 6d   allocator] from
f310: 20 74 68 65 20 62 75 69 6c 64 20 61 6e 64 20 73   the build and s
f320: 75 62 73 74 69 74 75 74 65 73 20 61 20 73 74 75  ubstitutes a stu
f330: 62 0a 20 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  b.  memory alloc
f340: 61 74 6f 72 20 74 68 61 74 20 61 6c 77 61 79 73  ator that always
f350: 20 66 61 69 6c 73 2e 20 20 53 51 4c 69 74 65 20   fails.  SQLite 
f360: 77 69 6c 6c 20 6e 6f 74 20 72 75 6e 20 77 69 74  will not run wit
f370: 68 20 74 68 69 73 0a 20 20 73 74 75 62 20 6d 65  h this.  stub me
f380: 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 6f 72 20 73  mory allocator s
f390: 69 6e 63 65 20 69 74 20 77 69 6c 6c 20 62 65 20  ince it will be 
f3a0: 75 6e 61 62 6c 65 20 74 6f 20 61 6c 6c 6f 63 61  unable to alloca
f3b0: 74 65 20 6d 65 6d 6f 72 79 2e 20 20 42 75 74 0a  te memory.  But.
f3c0: 20 20 74 68 69 73 20 73 74 75 62 20 63 61 6e 20    this stub can 
f3d0: 62 65 20 72 65 70 6c 61 63 65 64 20 61 74 20 73  be replaced at s
f3e0: 74 61 72 74 2d 74 69 6d 65 20 75 73 69 6e 67 0a  tart-time using.
f3f0: 20 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69    [sqlite3_confi
f400: 67 5d 28 5b 53 51 4c 49 54 45 5f 43 4f 4e 46 49  g]([SQLITE_CONFI
f410: 47 5f 4d 41 4c 4c 4f 43 5d 2c 2e 2e 2e 29 20 6f  G_MALLOC],...) o
f420: 72 0a 20 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6e  r.  [sqlite3_con
f430: 66 69 67 5d 28 5b 53 51 4c 49 54 45 5f 43 4f 4e  fig]([SQLITE_CON
f440: 46 49 47 5f 48 45 41 50 5d 2c 2e 2e 2e 29 2e 0a  FIG_HEAP],...)..
f450: 20 20 53 6f 20 74 68 65 20 6e 65 74 20 65 66 66    So the net eff
f460: 65 63 74 20 6f 66 20 74 68 69 73 20 63 6f 6d 70  ect of this comp
f470: 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20  ile-time option 
f480: 69 73 20 74 68 61 74 20 69 74 20 61 6c 6c 6f 77  is that it allow
f490: 73 20 53 51 4c 69 74 65 0a 20 20 74 6f 20 62 65  s SQLite.  to be
f4a0: 20 63 6f 6d 70 69 6c 65 64 20 61 6e 64 20 6c 69   compiled and li
f4b0: 6e 6b 65 64 20 61 67 61 69 6e 73 74 20 61 20 73  nked against a s
f4c0: 79 73 74 65 6d 20 6c 69 62 72 61 72 79 20 74 68  ystem library th
f4d0: 61 74 20 64 6f 65 73 20 6e 6f 74 20 73 75 70 70  at does not supp
f4e0: 6f 72 74 0a 20 20 6d 61 6c 6c 6f 63 28 29 2c 20  ort.  malloc(), 
f4f0: 66 72 65 65 28 29 2c 20 61 6e 64 2f 6f 72 20 72  free(), and/or r
f500: 65 61 6c 6c 6f 63 28 29 2e 0a 7d 0a 0a 3c 2f 74  ealloc()..}..</t
f510: 63 6c 3e 0a 3c 61 20 6e 61 6d 65 3d 22 64 65 62  cl>.<a name="deb
f520: 75 67 6f 70 74 69 6f 6e 73 22 3e 3c 2f 61 3e 0a  ugoptions"></a>.
f530: 3c 68 31 3e 20 41 6e 61 6c 79 73 69 73 20 61 6e  <h1> Analysis an
f540: 64 20 44 65 62 75 67 67 69 6e 67 20 4f 70 74 69  d Debugging Opti
f550: 6f 6e 73 3c 2f 68 31 3e 0a 3c 74 63 6c 3e 0a 0a  ons</h1>.<tcl>..
f560: 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b  COMPILE_OPTION {
f570: 53 51 4c 49 54 45 5f 44 45 42 55 47 7d 20 7b 0a  SQLITE_DEBUG} {.
f580: 20 20 54 68 65 20 53 51 4c 69 74 65 20 73 6f 75    The SQLite sou
f590: 72 63 65 20 63 6f 64 65 20 63 6f 6e 74 61 69 6e  rce code contain
f5a0: 73 20 6c 69 74 65 72 61 6c 6c 79 20 74 68 6f 75  s literally thou
f5b0: 73 61 6e 64 73 20 6f 66 20 61 73 73 65 72 74 28  sands of assert(
f5c0: 29 20 73 74 61 74 65 6d 65 6e 74 73 0a 20 20 75  ) statements.  u
f5d0: 73 65 64 20 74 6f 20 76 65 72 69 66 79 20 69 6e  sed to verify in
f5e0: 74 65 72 6e 61 6c 20 61 73 73 75 6d 70 74 69 6f  ternal assumptio
f5f0: 6e 73 20 61 6e 64 20 73 75 62 72 6f 75 74 69 6e  ns and subroutin
f600: 65 20 70 72 65 63 6f 6e 64 69 74 69 6f 6e 73 20  e preconditions 
f610: 61 6e 64 0a 20 20 70 6f 73 74 63 6f 6e 64 69 74  and.  postcondit
f620: 69 6f 6e 73 2e 20 20 54 68 65 73 65 20 61 73 73  ions.  These ass
f630: 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73  ert() statements
f640: 20 61 72 65 20 6e 6f 72 6d 61 6c 6c 79 20 74 75   are normally tu
f650: 72 6e 65 64 20 6f 66 66 0a 20 20 28 74 68 65 79  rned off.  (they
f660: 20 67 65 6e 65 72 61 74 65 20 6e 6f 20 63 6f 64   generate no cod
f670: 65 29 20 73 69 6e 63 65 20 74 75 72 6e 69 6e 67  e) since turning
f680: 20 74 68 65 6d 20 6f 6e 20 6d 61 6b 65 73 20 53   them on makes S
f690: 51 4c 69 74 65 20 72 75 6e 20 61 70 70 72 6f 78  QLite run approx
f6a0: 69 6d 61 74 65 6c 79 0a 20 20 74 68 72 65 65 20  imately.  three 
f6b0: 74 69 6d 65 73 20 73 6c 6f 77 65 72 2e 20 20 42  times slower.  B
f6c0: 75 74 20 66 6f 72 20 74 65 73 74 69 6e 67 20 61  ut for testing a
f6d0: 6e 64 20 61 6e 61 6c 79 73 69 73 2c 20 69 74 20  nd analysis, it 
f6e0: 69 73 20 75 73 65 66 75 6c 20 74 6f 20 74 75 72  is useful to tur
f6f0: 6e 0a 20 20 74 68 65 20 61 73 73 65 72 74 28 29  n.  the assert()
f700: 20 73 74 61 74 65 6d 65 6e 74 73 20 6f 6e 2e 20   statements on. 
f710: 20 54 68 65 20 53 51 4c 49 54 45 5f 44 45 42 55   The SQLITE_DEBU
f720: 47 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f  G compile-time o
f730: 70 74 69 6f 6e 20 64 6f 65 73 20 74 68 69 73 2e  ption does this.
f740: 0a 20 20 3c 70 3e 53 51 4c 49 54 45 5f 44 45 42  .  <p>SQLITE_DEB
f750: 55 47 20 61 6c 73 6f 20 65 6e 61 62 6c 65 73 20  UG also enables 
f760: 73 6f 6d 65 20 6f 74 68 65 72 20 64 65 62 75 67  some other debug
f770: 67 69 6e 67 20 66 65 61 74 75 72 65 73 2c 20 73  ging features, s
f780: 75 63 68 20 61 73 0a 20 20 73 70 65 63 69 61 6c  uch as.  special
f790: 20 5b 50 52 41 47 4d 41 5d 20 73 74 61 74 65 6d   [PRAGMA] statem
f7a0: 65 6e 74 73 20 74 68 61 74 20 74 75 72 6e 20 6f  ents that turn o
f7b0: 6e 20 74 72 61 63 69 6e 67 20 61 6e 64 20 6c 69  n tracing and li
f7c0: 73 74 69 6e 67 20 66 65 61 74 75 72 65 73 0a 20  sting features. 
f7d0: 20 75 73 65 64 20 66 6f 72 20 74 72 6f 75 62 6c   used for troubl
f7e0: 65 73 68 6f 6f 74 69 6e 67 20 61 6e 64 20 61 6e  eshooting and an
f7f0: 61 6c 79 73 69 73 20 6f 66 20 74 68 65 20 5b 56  alysis of the [V
f800: 44 42 45 5d 20 61 6e 64 20 63 6f 64 65 20 67 65  DBE] and code ge
f810: 6e 65 72 61 74 6f 72 2e 0a 7d 0a 0a 43 4f 4d 50  nerator..}..COMP
f820: 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49  ILE_OPTION {SQLI
f830: 54 45 5f 4d 45 4d 44 45 42 55 47 7d 20 7b 0a 20  TE_MEMDEBUG} {. 
f840: 20 54 68 65 20 53 51 4c 49 54 45 5f 4d 45 4d 44   The SQLITE_MEMD
f850: 45 42 55 47 20 6f 70 74 69 6f 6e 20 63 61 75 73  EBUG option caus
f860: 65 73 20 61 6e 20 69 6e 73 74 72 75 6d 65 6e 74  es an instrument
f870: 65 64 20 0a 20 20 5b 64 65 62 75 67 67 69 6e 67  ed .  [debugging
f880: 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 6f   memory allocato
f890: 72 5d 0a 20 20 74 6f 20 62 65 20 75 73 65 64 20  r].  to be used 
f8a0: 61 73 20 74 68 65 20 64 65 66 61 75 6c 74 20 6d  as the default m
f8b0: 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 6f 72 20  emory allocator 
f8c0: 77 69 74 68 69 6e 20 53 51 4c 69 74 65 2e 20 20  within SQLite.  
f8d0: 54 68 65 0a 20 20 69 6e 73 74 72 75 6d 65 6e 74  The.  instrument
f8e0: 65 64 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  ed memory alloca
f8f0: 74 6f 72 20 63 68 65 63 6b 73 20 66 6f 72 20 6d  tor checks for m
f900: 69 73 75 73 65 20 6f 66 20 64 79 6e 61 6d 69 63  isuse of dynamic
f910: 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 0a 20  ally allocated. 
f920: 20 6d 65 6d 6f 72 79 2e 20 20 45 78 61 6d 70 6c   memory.  Exampl
f930: 65 73 20 6f 66 20 6d 69 73 75 73 65 20 69 6e 63  es of misuse inc
f940: 6c 75 64 65 20 75 73 69 6e 67 20 6d 65 6d 6f 72  lude using memor
f950: 79 20 61 66 74 65 72 20 69 74 20 69 73 20 66 72  y after it is fr
f960: 65 65 64 2c 0a 20 20 77 72 69 74 69 6e 67 20 6f  eed,.  writing o
f970: 66 66 20 74 68 65 20 65 6e 64 73 20 6f 66 20 61  ff the ends of a
f980: 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
f990: 6f 6e 2c 20 66 72 65 65 69 6e 67 20 6d 65 6d 6f  on, freeing memo
f9a0: 72 79 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c  ry not previousl
f9b0: 79 0a 20 20 6f 62 74 61 69 6e 65 64 20 66 72 6f  y.  obtained fro
f9c0: 6d 20 74 68 65 20 6d 65 6d 6f 72 79 20 61 6c 6c  m the memory all
f9d0: 6f 63 61 74 6f 72 2c 20 6f 72 20 66 61 69 6c 69  ocator, or faili
f9e0: 6e 67 20 74 6f 20 69 6e 69 74 69 61 6c 69 7a 65  ng to initialize
f9f0: 20 6e 65 77 6c 79 0a 20 20 61 6c 6c 6f 63 61 74   newly.  allocat
fa00: 65 64 20 6d 65 6d 6f 72 79 2e 0a 7d 0a 0a 3c 2f  ed memory..}..</
fa10: 74 63 6c 3e 0a 3c 61 20 6e 61 6d 65 3d 22 77 69  tcl>.<a name="wi
fa20: 6e 33 32 6f 70 74 69 6f 6e 73 22 3e 3c 2f 61 3e  n32options"></a>
fa30: 0a 3c 68 31 3e 20 57 69 6e 64 6f 77 73 2d 53 70  .<h1> Windows-Sp
fa40: 65 63 69 66 69 63 20 4f 70 74 69 6f 6e 73 3c 2f  ecific Options</
fa50: 68 31 3e 0a 3c 74 63 6c 3e 0a 0a 43 4f 4d 50 49  h1>.<tcl>..COMPI
fa60: 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54  LE_OPTION {SQLIT
fa70: 45 5f 57 49 4e 33 32 5f 48 45 41 50 5f 43 52 45  E_WIN32_HEAP_CRE
fa80: 41 54 45 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70  ATE} {.  This op
fa90: 74 69 6f 6e 20 66 6f 72 63 65 73 20 74 68 65 20  tion forces the 
faa0: 57 69 6e 33 32 20 6e 61 74 69 76 65 20 6d 65 6d  Win32 native mem
fab0: 6f 72 79 20 61 6c 6c 6f 63 61 74 6f 72 2c 20 77  ory allocator, w
fac0: 68 65 6e 20 65 6e 61 62 6c 65 64 2c 20 74 6f 0a  hen enabled, to.
fad0: 20 20 63 72 65 61 74 65 20 61 20 70 72 69 76 61    create a priva
fae0: 74 65 20 68 65 61 70 20 74 6f 20 68 6f 6c 64 20  te heap to hold 
faf0: 61 6c 6c 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  all memory alloc
fb00: 61 74 69 6f 6e 73 2e 0a 7d 0a 0a 43 4f 4d 50 49  ations..}..COMPI
fb10: 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54  LE_OPTION {SQLIT
fb20: 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 5f 56  E_WIN32_MALLOC_V
fb30: 41 4c 49 44 41 54 45 7d 20 7b 0a 20 20 54 68 69  ALIDATE} {.  Thi
fb40: 73 20 6f 70 74 69 6f 6e 20 66 6f 72 63 65 73 20  s option forces 
fb50: 74 68 65 20 57 69 6e 33 32 20 6e 61 74 69 76 65  the Win32 native
fb60: 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 6f   memory allocato
fb70: 72 2c 20 77 68 65 6e 20 65 6e 61 62 6c 65 64 2c  r, when enabled,
fb80: 20 74 6f 0a 20 20 6d 61 6b 65 20 73 74 72 61 74   to.  make strat
fb90: 65 67 69 63 20 63 61 6c 6c 73 20 69 6e 74 6f 20  egic calls into 
fba0: 74 68 65 20 48 65 61 70 56 61 6c 69 64 61 74 65  the HeapValidate
fbb0: 28 29 20 66 75 6e 63 74 69 6f 6e 20 69 66 20 61  () function if a
fbc0: 73 73 65 72 74 28 29 20 69 73 20 61 6c 73 6f 0a  ssert() is also.
fbd0: 20 20 65 6e 61 62 6c 65 64 2e 0a 7d 0a 0a 3c 2f    enabled..}..</
fbe0: 74 63 6c 3e 0a 3c 61 20 6e 61 6d 65 3d 22 6c 69  tcl>.<a name="li
fbf0: 6e 6b 61 67 65 22 3e 3c 2f 61 3e 0a 3c 68 31 3e  nkage"></a>.<h1>
fc00: 43 6f 6d 70 69 6c 65 72 20 4c 69 6e 6b 61 67 65  Compiler Linkage
fc10: 20 43 6f 6e 74 72 6f 6c 3c 2f 68 31 3e 0a 0a 3c   Control</h1>..<
fc20: 70 3e 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  p>The following 
fc30: 6d 61 63 72 6f 73 20 73 70 65 63 69 66 79 0a 69  macros specify.i
fc40: 6e 74 65 72 66 61 63 65 20 6c 69 6e 6b 61 67 65  nterface linkage
fc50: 20 66 6f 72 20 63 65 72 74 61 69 6e 20 6b 69 6e   for certain kin
fc60: 64 73 20 6f 66 20 53 51 4c 69 74 65 20 62 75 69  ds of SQLite bui
fc70: 6c 64 73 2e 20 20 54 68 65 20 4d 61 6b 65 66 69  lds.  The Makefi
fc80: 6c 65 73 20 77 69 6c 6c 20 6e 6f 72 6d 61 6c 6c  les will normall
fc90: 79 0a 68 61 6e 64 6c 65 20 73 65 74 74 69 6e 67  y.handle setting
fca0: 20 74 68 65 73 65 20 6d 61 63 72 6f 73 20 61 75   these macros au
fcb0: 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 20 20 41 70  tomatically.  Ap
fcc0: 70 6c 69 63 61 74 69 6f 6e 20 64 65 76 65 6c 6f  plication develo
fcd0: 70 65 72 73 20 73 68 6f 75 6c 64 0a 6e 6f 74 20  pers should.not 
fce0: 6e 65 65 64 20 74 6f 20 77 6f 72 72 79 20 77 69  need to worry wi
fcf0: 74 68 20 74 68 65 73 65 20 6d 61 63 72 6f 73 2e  th these macros.
fd00: 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20    The following 
fd10: 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 61 62  documentation ab
fd20: 6f 75 74 20 74 68 65 73 65 20 0a 6d 61 63 72 6f  out these .macro
fd30: 73 20 69 73 20 69 6e 63 6c 75 64 65 64 20 63 6f  s is included co
fd40: 6d 70 6c 65 74 65 6e 65 73 73 2e 3c 2f 70 3e 0a  mpleteness.</p>.
fd50: 0a 3c 74 63 6c 3e 0a 43 4f 4d 50 49 4c 45 5f 4f  .<tcl>.COMPILE_O
fd60: 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 41 50  PTION {SQLITE_AP
fd70: 49 7d 20 7b 0a 20 20 54 68 69 73 20 6d 61 63 72  I} {.  This macr
fd80: 6f 20 69 64 65 6e 74 69 66 69 65 73 20 61 20 65  o identifies a e
fd90: 78 74 65 72 6e 61 6c 6c 79 20 76 69 73 69 62 6c  xternally visibl
fda0: 65 20 69 6e 74 65 72 66 61 63 65 20 66 6f 72 20  e interface for 
fdb0: 53 51 4c 69 74 65 2e 0a 20 20 54 68 69 73 20 6d  SQLite..  This m
fdc0: 61 63 72 6f 20 69 73 20 73 6f 6d 65 74 69 6d 65  acro is sometime
fdd0: 73 20 73 65 74 20 74 6f 20 22 65 78 74 65 72 6e  s set to "extern
fde0: 22 2e 20 20 42 75 74 20 74 68 65 20 64 65 66 69  ".  But the defi
fdf0: 6e 69 74 69 6f 6e 20 69 73 0a 20 20 63 6f 6d 70  nition is.  comp
fe00: 69 6c 65 72 2d 73 70 65 63 69 66 69 63 2e 0a 7d  iler-specific..}
fe10: 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e  ..COMPILE_OPTION
fe20: 20 7b 53 51 4c 49 54 45 5f 41 50 49 43 41 4c 4c   {SQLITE_APICALL
fe30: 7d 20 7b 0a 20 20 54 68 69 73 20 6d 61 63 72 6f  } {.  This macro
fe40: 20 69 64 65 6e 74 69 66 69 65 73 20 74 68 65 20   identifies the 
fe50: 63 61 6c 6c 69 6e 67 20 63 6f 6e 76 65 6e 74 69  calling conventi
fe60: 6f 6e 20 75 73 65 64 20 62 79 20 70 75 62 6c 69  on used by publi
fe70: 63 20 69 6e 74 65 72 66 61 63 65 0a 20 20 72 6f  c interface.  ro
fe80: 75 74 69 6e 65 73 20 69 6e 20 53 51 4c 69 74 65  utines in SQLite
fe90: 2e 20 20 54 68 69 73 20 6d 61 63 72 6f 20 69 73  .  This macro is
fea0: 20 6e 6f 72 6d 61 6c 6c 79 20 64 65 66 69 6e 65   normally define
feb0: 64 20 74 6f 20 62 65 20 6e 6f 74 68 69 6e 67 2c  d to be nothing,
fec0: 0a 20 20 74 68 6f 75 67 68 20 6f 6e 20 57 69 6e  .  though on Win
fed0: 64 6f 77 73 20 62 75 69 6c 64 73 20 69 74 20 63  dows builds it c
fee0: 61 6e 20 73 6f 6d 65 74 69 6d 65 73 20 62 65 20  an sometimes be 
fef0: 73 65 74 20 74 6f 20 22 5f 5f 63 64 65 63 6c 22  set to "__cdecl"
ff00: 20 6f 72 20 22 5f 5f 73 74 64 63 61 6c 6c 22 2e   or "__stdcall".
ff10: 0a 20 20 54 68 65 20 22 5f 5f 63 64 65 63 6c 22  .  The "__cdecl"
ff20: 20 73 65 74 74 69 6e 67 20 69 73 20 74 68 65 20   setting is the 
ff30: 64 65 66 61 75 6c 74 2c 20 62 75 74 20 22 5f 5f  default, but "__
ff40: 73 74 64 63 61 6c 6c 22 20 69 73 20 75 73 65 64  stdcall" is used
ff50: 20 77 68 65 6e 20 53 51 4c 69 74 65 0a 20 20 69   when SQLite.  i
ff60: 73 20 69 6e 74 65 6e 64 65 64 20 74 6f 20 62 65  s intended to be
ff70: 20 63 6f 6d 70 69 6c 65 64 20 61 73 20 61 20 57   compiled as a W
ff80: 69 6e 64 6f 77 73 20 73 79 73 74 65 6d 20 6c 69  indows system li
ff90: 62 72 61 72 79 2e 0a 20 20 3c 70 3e 0a 20 20 41  brary..  <p>.  A
ffa0: 20 73 69 6e 67 6c 65 20 66 75 6e 63 74 69 6f 6e   single function
ffb0: 20 64 65 63 6c 61 72 61 74 69 6f 6e 20 73 68 6f   declaration sho
ffc0: 75 6c 64 20 63 6f 6e 74 61 69 6e 20 6e 6f 20 6d  uld contain no m
ffd0: 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 6f 66 0a  ore than one of.
ffe0: 20 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 3a    the following:
fff0: 20 20 5b 53 51 4c 49 54 45 5f 41 50 49 43 41 4c    [SQLITE_APICAL
10000 4c 5d 2c 20 5b 53 51 4c 49 54 45 5f 43 41 4c 4c  L], [SQLITE_CALL
10010 42 41 43 4b 5d 2c 20 5b 53 51 4c 49 54 45 5f 43  BACK], [SQLITE_C
10020 44 45 43 4c 5d 2c 0a 20 20 6f 72 20 5b 53 51 4c  DECL],.  or [SQL
10030 49 54 45 5f 53 59 53 43 41 4c 4c 5d 2e 0a 7d 0a  ITE_SYSCALL]..}.
10040 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20  .COMPILE_OPTION 
10050 7b 53 51 4c 49 54 45 5f 43 41 4c 4c 42 41 43 4b  {SQLITE_CALLBACK
10060 7d 20 7b 0a 20 20 54 68 69 73 20 6d 61 63 72 6f  } {.  This macro
10070 20 73 70 65 63 69 66 69 65 73 20 74 68 65 20 63   specifies the c
10080 61 6c 6c 69 6e 67 20 63 6f 6e 76 65 6e 74 69 6f  alling conventio
10090 6e 20 75 73 65 64 20 62 79 20 63 61 6c 6c 62 61  n used by callba
100a0 63 6b 20 70 6f 69 6e 74 65 72 73 0a 20 20 69 6e  ck pointers.  in
100b0 20 53 51 4c 69 74 65 2e 20 20 54 68 69 73 20 6d   SQLite.  This m
100c0 61 63 72 6f 20 69 73 20 6e 6f 72 6d 61 6c 6c 79  acro is normally
100d0 20 64 65 66 69 6e 65 64 20 74 6f 20 62 65 20 6e   defined to be n
100e0 6f 74 68 69 6e 67 2c 20 74 68 6f 75 67 68 20 6f  othing, though o
100f0 6e 20 57 69 6e 64 6f 77 73 0a 20 20 62 75 69 6c  n Windows.  buil
10100 64 73 20 69 74 20 63 61 6e 20 73 6f 6d 65 74 69  ds it can someti
10110 6d 65 73 20 62 65 20 73 65 74 20 74 6f 20 22 5f  mes be set to "_
10120 5f 63 64 65 63 6c 22 20 6f 72 20 22 5f 5f 73 74  _cdecl" or "__st
10130 64 63 61 6c 6c 22 2e 20 20 54 68 65 0a 20 20 22  dcall".  The.  "
10140 5f 5f 63 64 65 63 6c 22 20 73 65 74 74 69 6e 67  __cdecl" setting
10150 20 69 73 20 74 68 65 20 64 65 66 61 75 6c 74 2c   is the default,
10160 20 62 75 74 20 22 5f 5f 73 74 64 63 61 6c 6c 22   but "__stdcall"
10170 20 69 73 20 75 73 65 64 20 77 68 65 6e 20 53 51   is used when SQ
10180 4c 69 74 65 0a 20 20 69 73 20 69 6e 74 65 6e 64  Lite.  is intend
10190 65 64 20 74 6f 20 62 65 20 63 6f 6d 70 69 6c 65  ed to be compile
101a0 64 20 61 73 20 61 20 57 69 6e 64 6f 77 73 20 73  d as a Windows s
101b0 79 73 74 65 6d 20 6c 69 62 72 61 72 79 2e 0a 20  ystem library.. 
101c0 20 3c 70 3e 0a 20 20 41 20 73 69 6e 67 6c 65 20   <p>.  A single 
101d0 66 75 6e 63 74 69 6f 6e 20 64 65 63 6c 61 72 61  function declara
101e0 74 69 6f 6e 20 73 68 6f 75 6c 64 20 63 6f 6e 74  tion should cont
101f0 61 69 6e 20 6e 6f 20 6d 6f 72 65 20 74 68 61 6e  ain no more than
10200 20 6f 6e 65 20 6f 66 0a 20 20 74 68 65 20 66 6f   one of.  the fo
10210 6c 6c 6f 77 69 6e 67 3a 20 20 5b 53 51 4c 49 54  llowing:  [SQLIT
10220 45 5f 41 50 49 43 41 4c 4c 5d 2c 20 5b 53 51 4c  E_APICALL], [SQL
10230 49 54 45 5f 43 41 4c 4c 42 41 43 4b 5d 2c 20 5b  ITE_CALLBACK], [
10240 53 51 4c 49 54 45 5f 43 44 45 43 4c 5d 2c 0a 20  SQLITE_CDECL],. 
10250 20 6f 72 20 5b 53 51 4c 49 54 45 5f 53 59 53 43   or [SQLITE_SYSC
10260 41 4c 4c 5d 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45  ALL]..}..COMPILE
10270 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f  _OPTION {SQLITE_
10280 43 44 45 43 4c 7d 20 7b 0a 20 20 54 68 69 73 20  CDECL} {.  This 
10290 6d 61 63 72 6f 20 73 70 65 63 69 66 69 65 73 20  macro specifies 
102a0 74 68 65 20 63 61 6c 6c 69 6e 67 20 63 6f 6e 76  the calling conv
102b0 65 6e 74 69 6f 6e 20 75 73 65 64 20 62 79 20 76  ention used by v
102c0 61 72 61 72 67 73 20 69 6e 74 65 72 66 61 63 65  arargs interface
102d0 0a 20 20 72 6f 75 74 69 6e 65 73 20 69 6e 20 53  .  routines in S
102e0 51 4c 69 74 65 2e 20 20 54 68 69 73 20 6d 61 63  QLite.  This mac
102f0 72 6f 20 69 73 20 6e 6f 72 6d 61 6c 6c 79 20 64  ro is normally d
10300 65 66 69 6e 65 64 20 74 6f 20 62 65 20 6e 6f 74  efined to be not
10310 68 69 6e 67 2c 0a 20 20 74 68 6f 75 67 68 20 6f  hing,.  though o
10320 6e 20 57 69 6e 64 6f 77 73 20 62 75 69 6c 64 73  n Windows builds
10330 20 69 74 20 63 61 6e 20 73 6f 6d 65 74 69 6d 65   it can sometime
10340 73 20 62 65 20 73 65 74 20 74 6f 20 22 5f 5f 63  s be set to "__c
10350 64 65 63 6c 22 2e 20 20 54 68 69 73 0a 20 20 6d  decl".  This.  m
10360 61 63 72 6f 20 69 73 20 75 73 65 64 20 6f 6e 20  acro is used on 
10370 76 61 72 61 72 67 73 20 72 6f 75 74 69 6e 65 73  varargs routines
10380 20 61 6e 64 20 73 6f 20 63 61 6e 6e 6f 74 20 62   and so cannot b
10390 65 20 73 65 74 20 74 6f 20 22 5f 5f 73 74 64 63  e set to "__stdc
103a0 61 6c 6c 22 0a 20 20 73 69 6e 63 65 20 74 68 65  all".  since the
103b0 20 5f 5f 73 74 64 63 61 6c 6c 20 63 61 6c 6c 69   __stdcall calli
103c0 6e 67 20 63 6f 6e 76 65 6e 74 69 6f 6e 20 64 6f  ng convention do
103d0 65 73 20 6e 6f 74 20 73 75 70 70 6f 72 74 20 76  es not support v
103e0 61 72 61 72 67 73 20 66 75 6e 63 74 69 6f 6e 73  arargs functions
103f0 2e 0a 20 20 3c 70 3e 0a 20 20 41 20 73 69 6e 67  ..  <p>.  A sing
10400 6c 65 20 66 75 6e 63 74 69 6f 6e 20 64 65 63 6c  le function decl
10410 61 72 61 74 69 6f 6e 20 73 68 6f 75 6c 64 20 63  aration should c
10420 6f 6e 74 61 69 6e 20 6e 6f 20 6d 6f 72 65 20 74  ontain no more t
10430 68 61 6e 20 6f 6e 65 20 6f 66 0a 20 20 74 68 65  han one of.  the
10440 20 66 6f 6c 6c 6f 77 69 6e 67 3a 20 20 5b 53 51   following:  [SQ
10450 4c 49 54 45 5f 41 50 49 43 41 4c 4c 5d 2c 20 5b  LITE_APICALL], [
10460 53 51 4c 49 54 45 5f 43 41 4c 4c 42 41 43 4b 5d  SQLITE_CALLBACK]
10470 2c 20 5b 53 51 4c 49 54 45 5f 43 44 45 43 4c 5d  , [SQLITE_CDECL]
10480 2c 0a 20 20 6f 72 20 5b 53 51 4c 49 54 45 5f 53  ,.  or [SQLITE_S
10490 59 53 43 41 4c 4c 5d 2e 0a 7d 0a 0a 43 4f 4d 50  YSCALL]..}..COMP
104a0 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49  ILE_OPTION {SQLI
104b0 54 45 5f 53 59 53 43 41 4c 4c 7d 20 7b 0a 20 20  TE_SYSCALL} {.  
104c0 54 68 69 73 20 6d 61 63 72 6f 20 69 64 65 6e 74  This macro ident
104d0 69 66 69 65 73 20 74 68 65 20 63 61 6c 6c 69 6e  ifies the callin
104e0 67 20 63 6f 6e 76 65 6e 74 69 6f 6e 20 75 73 65  g convention use
104f0 64 20 62 79 20 6f 70 65 72 61 74 69 6e 67 20 73  d by operating s
10500 79 73 74 65 6d 0a 20 20 69 6e 74 65 72 66 61 63  ystem.  interfac
10510 65 73 20 66 6f 72 20 74 61 72 67 65 74 20 74 68  es for target th
10520 65 20 70 6c 61 74 66 6f 72 6d 20 66 6f 72 20 61  e platform for a
10530 6e 20 53 51 4c 69 74 65 20 62 75 69 6c 64 2e 0a  n SQLite build..
10540 20 20 54 68 69 73 20 6d 61 63 72 6f 20 69 73 20    This macro is 
10550 6e 6f 72 6d 61 6c 6c 79 20 64 65 66 69 6e 65 64  normally defined
10560 20 74 6f 20 62 65 20 6e 6f 74 68 69 6e 67 2c 20   to be nothing, 
10570 74 68 6f 75 67 68 20 6f 6e 20 57 69 6e 64 6f 77  though on Window
10580 73 0a 20 20 62 75 69 6c 64 73 20 69 74 20 63 61  s.  builds it ca
10590 6e 20 73 6f 6d 65 74 69 6d 65 73 20 62 65 20 73  n sometimes be s
105a0 65 74 20 74 6f 20 22 5f 5f 73 74 64 63 61 6c 6c  et to "__stdcall
105b0 22 2e 0a 20 20 3c 70 3e 0a 20 20 41 20 73 69 6e  "..  <p>.  A sin
105c0 67 6c 65 20 66 75 6e 63 74 69 6f 6e 20 64 65 63  gle function dec
105d0 6c 61 72 61 74 69 6f 6e 20 73 68 6f 75 6c 64 20  laration should 
105e0 63 6f 6e 74 61 69 6e 20 6e 6f 20 6d 6f 72 65 20  contain no more 
105f0 74 68 61 6e 20 6f 6e 65 20 6f 66 0a 20 20 74 68  than one of.  th
10600 65 20 66 6f 6c 6c 6f 77 69 6e 67 3a 20 20 5b 53  e following:  [S
10610 51 4c 49 54 45 5f 41 50 49 43 41 4c 4c 5d 2c 20  QLITE_APICALL], 
10620 5b 53 51 4c 49 54 45 5f 43 41 4c 4c 42 41 43 4b  [SQLITE_CALLBACK
10630 5d 2c 20 5b 53 51 4c 49 54 45 5f 43 44 45 43 4c  ], [SQLITE_CDECL
10640 5d 2c 0a 20 20 6f 72 20 5b 53 51 4c 49 54 45 5f  ],.  or [SQLITE_
10650 53 59 53 43 41 4c 4c 5d 2e 0a 7d 0a 0a 43 4f 4d  SYSCALL]..}..COM
10660 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c  PILE_OPTION {SQL
10670 49 54 45 5f 54 43 4c 41 50 49 7d 20 7b 0a 20 20  ITE_TCLAPI} {.  
10680 54 68 69 73 20 6d 61 63 72 6f 20 73 70 65 63 69  This macro speci
10690 66 69 65 73 20 74 68 65 20 63 61 6c 6c 69 6e 67  fies the calling
106a0 20 63 6f 6e 76 65 6e 74 69 6f 6e 20 75 73 65 64   convention used
106b0 20 62 79 20 74 68 65 20 0a 20 20 5b 68 74 74 70   by the .  [http
106c0 3a 2f 2f 77 77 77 2e 74 63 6c 2e 74 6b 20 7c 20  ://www.tcl.tk | 
106d0 54 43 4c 5d 20 6c 69 62 72 61 72 79 20 69 6e 74  TCL] library int
106e0 65 72 66 61 63 65 20 72 6f 75 74 69 6e 65 73 2e  erface routines.
106f0 0a 20 20 54 68 69 73 20 6d 61 63 72 6f 20 69 73  .  This macro is
10700 20 6e 6f 74 20 75 73 65 64 20 62 79 20 74 68 65   not used by the
10710 20 53 51 4c 69 74 65 20 63 6f 72 65 2c 20 62 75   SQLite core, bu
10720 74 20 6f 6e 6c 79 20 62 79 20 74 68 65 20 5b 54  t only by the [T
10730 43 4c 20 49 6e 74 65 72 66 61 63 65 5d 0a 20 20  CL Interface].  
10740 61 6e 64 20 5b 54 43 4c 20 74 65 73 74 20 73 75  and [TCL test su
10750 69 74 65 5d 2e 0a 20 20 54 68 69 73 20 6d 61 63  ite]..  This mac
10760 72 6f 20 69 73 20 6e 6f 72 6d 61 6c 6c 79 20 64  ro is normally d
10770 65 66 69 6e 65 64 20 74 6f 20 62 65 20 6e 6f 74  efined to be not
10780 68 69 6e 67 2c 0a 20 20 74 68 6f 75 67 68 20 6f  hing,.  though o
10790 6e 20 57 69 6e 64 6f 77 73 20 62 75 69 6c 64 73  n Windows builds
107a0 20 69 74 20 63 61 6e 20 73 6f 6d 65 74 69 6d 65   it can sometime
107b0 73 20 62 65 20 73 65 74 20 74 6f 20 22 5f 5f 63  s be set to "__c
107c0 64 65 63 6c 22 2e 20 20 54 68 69 73 0a 20 20 6d  decl".  This.  m
107d0 61 63 72 6f 20 69 73 20 75 73 65 64 20 6f 6e 20  acro is used on 
107e0 54 43 4c 20 6c 69 62 72 61 72 79 20 69 6e 74 65  TCL library inte
107f0 72 66 61 63 65 20 72 6f 75 74 69 6e 65 73 20 77  rface routines w
10800 68 69 63 68 20 61 72 65 20 61 6c 77 61 79 73 20  hich are always 
10810 63 6f 6d 70 69 6c 65 64 0a 20 20 61 73 20 5f 5f  compiled.  as __
10820 63 64 65 63 6c 2c 20 65 76 65 6e 20 6f 6e 20 70  cdecl, even on p
10830 6c 61 74 66 6f 72 6d 73 20 74 68 61 74 20 70 72  latforms that pr
10840 65 66 65 72 20 74 6f 20 75 73 65 20 5f 5f 73 74  efer to use __st
10850 64 63 61 6c 6c 2c 20 73 6f 20 74 68 69 73 0a 20  dcall, so this. 
10860 20 6d 61 63 72 6f 20 73 68 6f 75 6c 64 20 6e 6f   macro should no
10870 74 20 62 65 20 73 65 74 20 74 6f 20 5f 5f 73 74  t be set to __st
10880 64 63 61 6c 6c 20 75 6e 6c 65 73 73 20 74 68 65  dcall unless the
10890 20 70 6c 61 74 66 6f 72 6d 20 61 73 20 61 20 63   platform as a c
108a0 75 73 74 6f 6d 0a 20 20 54 43 4c 20 6c 69 62 72  ustom.  TCL libr
108b0 61 72 79 20 62 75 69 6c 64 20 74 68 61 74 20 73  ary build that s
108c0 75 70 70 6f 72 74 73 20 5f 5f 73 74 64 63 61 6c  upports __stdcal
108d0 6c 2e 0a 20 20 3c 70 3e 0a 20 20 54 68 69 73 20  l..  <p>.  This 
108e0 6d 61 63 72 6f 20 6d 61 79 20 6e 6f 74 20 62 65  macro may not be
108f0 20 75 73 65 64 20 69 6e 20 63 6f 6d 62 69 6e 61   used in combina
10900 74 69 6f 6e 20 77 69 74 68 20 61 6e 79 20 6f 66  tion with any of
10910 20 5b 53 51 4c 49 54 45 5f 41 50 49 43 41 4c 4c   [SQLITE_APICALL
10920 5d 2c 0a 20 20 5b 53 51 4c 49 54 45 5f 43 41 4c  ],.  [SQLITE_CAL
10930 4c 42 41 43 4b 5d 2c 20 5b 53 51 4c 49 54 45 5f  LBACK], [SQLITE_
10940 43 44 45 43 4c 5d 2c 20 6f 72 20 5b 53 51 4c 49  CDECL], or [SQLI
10950 54 45 5f 53 59 53 43 41 4c 4c 5d 2e 0a 7d 0a 0a  TE_SYSCALL]..}..
10960 0a 3c 2f 74 63 6c 3e 0a                          .</tcl>.