Documentation Source Text

Hex Artifact Content
Login

Artifact 15a1b0b6e153be591f74f22ca628972481df7ca7:


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 7d 0a 0a 43 4f 4d 50 49 4c  meter..}..COMPIL
6c50: 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45  E_OPTION {SQLITE
6c60: 5f 45 4e 41 42 4c 45 5f 41 50 49 5f 41 52 4d 4f  _ENABLE_API_ARMO
6c70: 52 7d 20 7b 0a 20 20 57 68 65 6e 20 64 65 66 69  R} {.  When defi
6c80: 6e 65 64 2c 20 74 68 69 73 20 43 2d 70 72 65 70  ned, this C-prep
6c90: 72 6f 63 65 73 73 6f 72 20 6d 61 63 72 6f 20 61  rocessor macro a
6ca0: 63 74 69 76 61 74 65 73 20 65 78 74 72 61 20 63  ctivates extra c
6cb0: 6f 64 65 20 74 68 61 74 0a 20 20 61 74 74 65 6d  ode that.  attem
6cc0: 70 74 73 20 74 6f 20 64 65 74 65 63 74 20 6d 69  pts to detect mi
6cd0: 73 75 73 65 20 6f 66 20 74 68 65 20 53 51 4c 69  suse of the SQLi
6ce0: 74 65 20 41 50 49 2c 20 73 75 63 68 20 61 73 20  te API, such as 
6cf0: 70 61 73 73 69 6e 67 20 69 6e 20 4e 55 4c 4c 0a  passing in NULL.
6d00: 20 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 72 65    pointers to re
6d10: 71 75 69 72 65 64 20 70 61 72 61 6d 65 74 65 72  quired parameter
6d20: 73 20 6f 72 20 75 73 69 6e 67 20 6f 62 6a 65 63  s or using objec
6d30: 74 73 20 61 66 74 65 72 20 74 68 65 79 20 68 61  ts after they ha
6d40: 76 65 20 62 65 65 6e 0a 20 20 64 65 73 74 72 6f  ve been.  destro
6d50: 79 65 64 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f  yed..}..COMPILE_
6d60: 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 45  OPTION {SQLITE_E
6d70: 4e 41 42 4c 45 5f 41 54 4f 4d 49 43 5f 57 52 49  NABLE_ATOMIC_WRI
6d80: 54 45 7d 20 7b 0a 20 20 49 66 20 74 68 69 73 20  TE} {.  If this 
6d90: 43 2d 70 72 65 70 72 6f 63 65 73 73 6f 72 20 6d  C-preprocessor m
6da0: 61 63 72 6f 20 69 73 20 64 65 66 69 6e 65 64 20  acro is defined 
6db0: 61 6e 64 20 69 66 20 74 68 65 0a 20 20 78 44 65  and if the.  xDe
6dc0: 76 69 63 65 43 68 61 72 61 63 74 65 72 69 73 74  viceCharacterist
6dd0: 69 63 73 20 6d 65 74 68 6f 64 20 6f 66 20 5b 73  ics method of [s
6de0: 71 6c 69 74 65 33 5f 69 6f 5f 6d 65 74 68 6f 64  qlite3_io_method
6df0: 73 5d 20 6f 62 6a 65 63 74 20 66 6f 72 0a 20 20  s] object for.  
6e00: 61 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  a database file 
6e10: 72 65 70 6f 72 74 73 20 28 76 69 61 20 6f 6e 65  reports (via one
6e20: 20 6f 66 20 74 68 65 20 5b 53 51 4c 49 54 45 5f   of the [SQLITE_
6e30: 49 4f 43 41 50 5f 41 54 4f 4d 49 43 5d 20 62 69  IOCAP_ATOMIC] bi
6e40: 74 73 29 0a 20 20 74 68 61 74 20 74 68 65 20 66  ts).  that the f
6e50: 69 6c 65 73 79 73 74 65 6d 20 73 75 70 70 6f 72  ilesystem suppor
6e60: 74 73 20 61 74 6f 6d 69 63 20 77 72 69 74 65 73  ts atomic writes
6e70: 20 61 6e 64 20 69 66 20 61 20 74 72 61 6e 73 61   and if a transa
6e80: 63 74 69 6f 6e 0a 20 20 69 6e 76 6f 6c 76 65 73  ction.  involves
6e90: 20 61 20 63 68 61 6e 67 65 20 74 6f 20 6f 6e 6c   a change to onl
6ea0: 79 20 61 20 73 69 6e 67 6c 65 20 70 61 67 65 20  y a single page 
6eb0: 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
6ec0: 66 69 6c 65 2c 0a 20 20 74 68 65 6e 20 74 68 65  file,.  then the
6ed0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 63 6f 6d   transaction com
6ee0: 6d 69 74 73 20 77 69 74 68 20 6a 75 73 74 20 61  mits with just a
6ef0: 20 73 69 6e 67 6c 65 20 77 72 69 74 65 20 72 65   single write re
6f00: 71 75 65 73 74 20 6f 66 0a 20 20 61 20 73 69 6e  quest of.  a sin
6f10: 67 6c 65 20 70 61 67 65 20 6f 66 20 74 68 65 20  gle page of the 
6f20: 64 61 74 61 62 61 73 65 20 61 6e 64 20 6e 6f 20  database and no 
6f30: 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c  rollback journal
6f40: 20 69 73 20 63 72 65 61 74 65 64 0a 20 20 6f 72   is created.  or
6f50: 20 77 72 69 74 74 65 6e 2e 20 20 4f 6e 20 66 69   written.  On fi
6f60: 6c 65 73 79 73 74 65 6d 73 20 74 68 61 74 20 73  lesystems that s
6f70: 75 70 70 6f 72 74 20 61 74 6f 6d 69 63 20 77 72  upport atomic wr
6f80: 69 74 65 73 2c 20 74 68 69 73 0a 20 20 6f 70 74  ites, this.  opt
6f90: 69 6d 69 7a 61 74 69 6f 6e 20 63 61 6e 20 72 65  imization can re
6fa0: 73 75 6c 74 20 69 6e 20 73 69 67 6e 69 66 69 63  sult in signific
6fb0: 61 6e 74 20 73 70 65 65 64 20 69 6d 70 72 6f 76  ant speed improv
6fc0: 65 6d 65 6e 74 73 20 66 6f 72 0a 20 20 73 6d 61  ements for.  sma
6fd0: 6c 6c 20 75 70 64 61 74 65 73 2e 20 20 48 6f 77  ll updates.  How
6fe0: 65 76 65 72 2c 20 66 65 77 20 66 69 6c 65 73 79  ever, few filesy
6ff0: 73 74 65 6d 73 20 73 75 70 70 6f 72 74 20 74 68  stems support th
7000: 69 73 20 63 61 70 61 62 69 6c 69 74 79 0a 20 20  is capability.  
7010: 61 6e 64 20 74 68 65 20 63 6f 64 65 20 70 61 74  and the code pat
7020: 68 73 20 74 68 61 74 20 63 68 65 63 6b 20 66 6f  hs that check fo
7030: 72 20 74 68 69 73 20 63 61 70 61 62 69 6c 69 74  r this capabilit
7040: 79 20 73 6c 6f 77 20 64 6f 77 6e 20 77 72 69 74  y slow down writ
7050: 65 0a 20 20 70 65 72 66 6f 72 6d 61 6e 63 65 20  e.  performance 
7060: 6f 6e 20 73 79 73 74 65 6d 73 20 74 68 61 74 20  on systems that 
7070: 6c 61 63 6b 20 61 74 6f 6d 69 63 20 77 72 69 74  lack atomic writ
7080: 65 20 63 61 70 61 62 69 6c 69 74 79 2c 20 73 6f  e capability, so
7090: 20 74 68 69 73 0a 20 20 66 65 61 74 75 72 65 20   this.  feature 
70a0: 69 73 20 64 69 73 61 62 6c 65 64 20 62 79 20 64  is disabled by d
70b0: 65 66 61 75 6c 74 2e 0a 7d 0a 0a 43 4f 4d 50 49  efault..}..COMPI
70c0: 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54  LE_OPTION {SQLIT
70d0: 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f  E_ENABLE_COLUMN_
70e0: 4d 45 54 41 44 41 54 41 7d 20 7b 0a 20 20 57 68  METADATA} {.  Wh
70f0: 65 6e 20 74 68 69 73 20 43 2d 70 72 65 70 72 6f  en this C-prepro
7100: 63 65 73 73 6f 72 20 6d 61 63 72 6f 20 69 73 20  cessor macro is 
7110: 64 65 66 69 6e 65 64 2c 20 53 51 4c 69 74 65 20  defined, SQLite 
7120: 69 6e 63 6c 75 64 65 73 20 73 6f 6d 65 0a 20 20  includes some.  
7130: 61 64 64 69 74 69 6f 6e 61 6c 20 41 50 49 73 20  additional APIs 
7140: 74 68 61 74 20 70 72 6f 76 69 64 65 20 63 6f 6e  that provide con
7150: 76 65 6e 69 65 6e 74 20 61 63 63 65 73 73 20 74  venient access t
7160: 6f 20 6d 65 74 61 2d 64 61 74 61 20 61 62 6f 75  o meta-data abou
7170: 74 0a 20 20 74 61 62 6c 65 73 20 61 6e 64 20 71  t.  tables and q
7180: 75 65 72 69 65 73 2e 20 20 54 68 65 20 41 50 49  ueries.  The API
7190: 73 20 74 68 61 74 20 61 72 65 20 65 6e 61 62 6c  s that are enabl
71a0: 65 64 20 62 79 20 74 68 69 73 20 6f 70 74 69 6f  ed by this optio
71b0: 6e 20 61 72 65 3a 0a 0a 20 20 3c 75 6c 3e 0a 20  n are:..  <ul>. 
71c0: 20 3c 6c 69 3e 20 5b 73 71 6c 69 74 65 33 5f 63   <li> [sqlite3_c
71d0: 6f 6c 75 6d 6e 5f 64 61 74 61 62 61 73 65 5f 6e  olumn_database_n
71e0: 61 6d 65 28 29 5d 20 3c 2f 6c 69 3e 0a 20 20 3c  ame()] </li>.  <
71f0: 6c 69 3e 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c  li> [sqlite3_col
7200: 75 6d 6e 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d  umn_database_nam
7210: 65 31 36 28 29 5d 20 3c 2f 6c 69 3e 0a 20 20 3c  e16()] </li>.  <
7220: 6c 69 3e 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c  li> [sqlite3_col
7230: 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65 28 29  umn_table_name()
7240: 5d 20 3c 2f 6c 69 3e 0a 20 20 3c 6c 69 3e 20 5b  ] </li>.  <li> [
7250: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
7260: 61 62 6c 65 5f 6e 61 6d 65 31 36 28 29 5d 20 3c  able_name16()] <
7270: 2f 6c 69 3e 0a 20 20 3c 6c 69 3e 20 5b 73 71 6c  /li>.  <li> [sql
7280: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67  ite3_column_orig
7290: 69 6e 5f 6e 61 6d 65 28 29 5d 20 3c 2f 6c 69 3e  in_name()] </li>
72a0: 0a 20 20 3c 6c 69 3e 20 5b 73 71 6c 69 74 65 33  .  <li> [sqlite3
72b0: 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e  _column_origin_n
72c0: 61 6d 65 31 36 28 29 5d 20 3c 2f 6c 69 3e 0a 20  ame16()] </li>. 
72d0: 20 3c 2f 75 6c 3e 0a 7d 0a 0a 43 4f 4d 50 49 4c   </ul>.}..COMPIL
72e0: 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45  E_OPTION {SQLITE
72f0: 5f 45 4e 41 42 4c 45 5f 44 42 53 54 41 54 5f 56  _ENABLE_DBSTAT_V
7300: 54 41 42 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70  TAB} {.  This op
7310: 74 69 6f 6e 20 65 6e 61 62 6c 65 73 20 74 68 65  tion enables the
7320: 20 5b 64 62 73 74 61 74 20 76 69 72 74 75 61 6c   [dbstat virtual
7330: 20 74 61 62 6c 65 5d 2e 0a 7d 0a 0a 43 4f 4d 50   table]..}..COMP
7340: 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49  ILE_OPTION {SQLI
7350: 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49  TE_ENABLE_EXPLAI
7360: 4e 5f 43 4f 4d 4d 45 4e 54 53 7d 20 7b 0a 20 20  N_COMMENTS} {.  
7370: 54 68 69 73 20 6f 70 74 69 6f 6e 20 61 64 64 73  This option adds
7380: 20 65 78 74 72 61 20 6c 6f 67 69 63 20 74 6f 20   extra logic to 
7390: 53 51 4c 69 74 65 20 74 68 61 74 20 69 6e 73 65  SQLite that inse
73a0: 72 74 73 20 63 6f 6d 6d 65 6e 74 20 74 65 78 74  rts comment text
73b0: 20 69 6e 74 6f 20 74 68 65 0a 20 20 6f 75 74 70   into the.  outp
73c0: 75 74 20 6f 66 20 5b 45 58 50 4c 41 49 4e 5d 2e  ut of [EXPLAIN].
73d0: 20 20 54 68 65 73 65 20 65 78 74 72 61 20 63 6f    These extra co
73e0: 6d 6d 65 6e 74 73 20 75 73 65 20 65 78 74 72 61  mments use extra
73f0: 20 6d 65 6d 6f 72 79 2c 20 74 68 75 73 0a 20 20   memory, thus.  
7400: 6d 61 6b 69 6e 67 20 5b 70 72 65 70 61 72 65 64  making [prepared
7410: 20 73 74 61 74 65 6d 65 6e 74 73 5d 20 6c 61 72   statements] lar
7420: 67 65 72 20 61 6e 64 20 76 65 72 79 20 73 6c 69  ger and very sli
7430: 67 68 74 6c 79 20 73 6c 6f 77 65 72 2c 20 61 6e  ghtly slower, an
7440: 64 20 73 6f 20 74 68 65 79 20 61 72 65 0a 20 20  d so they are.  
7450: 74 75 72 6e 65 64 20 6f 66 66 20 62 79 20 64 65  turned off by de
7460: 66 61 75 6c 74 20 61 6e 64 20 69 6e 20 6d 6f 73  fault and in mos
7470: 74 20 61 70 70 6c 69 63 61 74 69 6f 6e 2e 20 20  t application.  
7480: 42 75 74 20 73 6f 6d 65 20 61 70 70 6c 69 63 61  But some applica
7490: 74 69 6f 6e 73 2c 20 73 75 63 68 0a 20 20 61 73  tions, such.  as
74a0: 20 74 68 65 20 5b 63 6f 6d 6d 61 6e 64 2d 6c 69   the [command-li
74b0: 6e 65 20 73 68 65 6c 6c 5d 20 66 6f 72 20 53 51  ne shell] for SQ
74c0: 4c 69 74 65 2c 20 76 61 6c 75 65 20 63 6c 61 72  Lite, value clar
74d0: 69 74 79 20 6f 66 20 45 58 50 4c 41 49 4e 20 6f  ity of EXPLAIN o
74e0: 75 74 70 75 74 0a 20 20 6f 76 65 72 20 72 61 77  utput.  over raw
74f0: 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 61 6e 64   performance and
7500: 20 73 6f 20 74 68 69 73 20 63 6f 6d 70 69 6c 65   so this compile
7510: 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20  -time option is 
7520: 61 76 61 69 6c 61 62 6c 65 20 74 6f 20 74 68 65  available to the
7530: 6d 2e 0a 20 20 54 68 65 20 53 51 4c 49 54 45 5f  m..  The SQLITE_
7540: 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e 5f 43  ENABLE_EXPLAIN_C
7550: 4f 4d 4d 45 4e 54 53 20 63 6f 6d 70 69 6c 65 2d  OMMENTS compile-
7560: 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20 61  time option is a
7570: 6c 73 6f 20 65 6e 61 62 6c 65 64 0a 20 20 61 75  lso enabled.  au
7580: 74 6f 6d 61 74 69 63 61 6c 6c 79 20 69 66 20 5b  tomatically if [
7590: 53 51 4c 49 54 45 5f 44 45 42 55 47 5d 20 69 73  SQLITE_DEBUG] is
75a0: 20 65 6e 61 62 6c 65 64 2e 0a 7d 0a 0a 0a 43 4f   enabled..}...CO
75b0: 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51  MPILE_OPTION {SQ
75c0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33  LITE_ENABLE_FTS3
75d0: 7d 20 7b 0a 20 20 57 68 65 6e 20 74 68 69 73 20  } {.  When this 
75e0: 6f 70 74 69 6f 6e 20 69 73 20 64 65 66 69 6e 65  option is define
75f0: 64 20 69 6e 20 74 68 65 20 5b 61 6d 61 6c 67 61  d in the [amalga
7600: 6d 61 74 69 6f 6e 5d 2c 20 76 65 72 73 69 6f 6e  mation], version
7610: 20 33 0a 20 20 6f 66 20 74 68 65 20 66 75 6c 6c   3.  of the full
7620: 2d 74 65 78 74 20 73 65 61 72 63 68 20 65 6e 67  -text search eng
7630: 69 6e 65 20 69 73 20 61 64 64 65 64 20 74 6f 20  ine is added to 
7640: 74 68 65 20 62 75 69 6c 64 20 61 75 74 6f 6d 61  the build automa
7650: 74 69 63 61 6c 6c 79 2e 0a 7d 0a 0a 43 4f 4d 50  tically..}..COMP
7660: 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49  ILE_OPTION {SQLI
7670: 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 5f 50  TE_ENABLE_FTS3_P
7680: 41 52 45 4e 54 48 45 53 49 53 7d 20 7b 0a 20 20  ARENTHESIS} {.  
7690: 54 68 69 73 20 6f 70 74 69 6f 6e 20 6d 6f 64 69  This option modi
76a0: 66 69 65 73 20 74 68 65 20 71 75 65 72 79 20 70  fies the query p
76b0: 61 74 74 65 72 6e 20 70 61 72 73 65 72 20 69 6e  attern parser in
76c0: 20 46 54 53 33 20 73 75 63 68 20 74 68 61 74 20   FTS3 such that 
76d0: 69 74 0a 20 20 73 75 70 70 6f 72 74 73 20 6f 70  it.  supports op
76e0: 65 72 61 74 6f 72 73 20 41 4e 44 20 61 6e 64 20  erators AND and 
76f0: 4e 4f 54 20 28 69 6e 20 61 64 64 69 74 69 6f 6e  NOT (in addition
7700: 20 74 6f 20 74 68 65 20 75 73 75 61 6c 20 4f 52   to the usual OR
7710: 20 61 6e 64 20 4e 45 41 52 29 0a 20 20 61 6e 64   and NEAR).  and
7720: 20 61 6c 73 6f 20 61 6c 6c 6f 77 73 20 71 75 65   also allows que
7730: 72 79 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74  ry expressions t
7740: 6f 20 63 6f 6e 74 61 69 6e 20 6e 65 73 74 65 64  o contain nested
7750: 20 70 61 72 65 6e 74 68 65 73 69 73 2e 0a 7d 0a   parenthesis..}.
7760: 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20  .COMPILE_OPTION 
7770: 7b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46  {SQLITE_ENABLE_F
7780: 54 53 33 5f 54 4f 4b 45 4e 49 5a 45 52 7d 20 7b  TS3_TOKENIZER} {
7790: 0a 20 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 65  .  This option e
77a0: 6e 61 62 6c 65 73 20 74 68 65 20 74 77 6f 2d 61  nables the two-a
77b0: 72 67 75 6d 65 6e 74 20 76 65 72 73 69 6f 6e 20  rgument version 
77c0: 6f 66 20 74 68 65 20 5b 66 74 73 33 5f 74 6f 6b  of the [fts3_tok
77d0: 65 6e 69 7a 65 72 28 29 5d 0a 20 20 69 6e 74 65  enizer()].  inte
77e0: 72 66 61 63 65 2e 20 20 54 68 65 20 73 65 63 6f  rface.  The seco
77f0: 6e 64 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 66  nd argument to f
7800: 74 73 33 5f 74 6f 6b 65 6e 69 7a 65 72 28 29 20  ts3_tokenizer() 
7810: 69 73 20 73 75 70 70 6f 73 65 20 74 6f 20 62 65  is suppose to be
7820: 20 61 0a 20 20 70 6f 69 6e 74 65 72 20 74 6f 20   a.  pointer to 
7830: 61 20 66 75 6e 63 74 69 6f 6e 20 28 65 6e 63 6f  a function (enco
7840: 64 65 64 20 61 73 20 61 20 42 4c 4f 42 29 20 74  ded as a BLOB) t
7850: 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61  hat implements a
7860: 6e 0a 20 20 61 70 70 6c 69 63 61 74 69 6f 6e 20  n.  application 
7870: 64 65 66 69 6e 65 64 20 74 6f 6b 65 6e 69 7a 65  defined tokenize
7880: 72 2e 20 20 49 66 20 68 6f 73 74 69 6c 65 20 61  r.  If hostile a
7890: 63 74 6f 72 73 20 61 72 65 20 61 62 6c 65 20 74  ctors are able t
78a0: 6f 20 72 75 6e 0a 20 20 74 68 65 20 74 77 6f 2d  o run.  the two-
78b0: 61 72 67 75 6d 65 6e 74 20 76 65 72 73 69 6f 6e  argument version
78c0: 20 6f 66 20 66 74 73 33 5f 74 6f 6b 65 6e 69 7a   of fts3_tokeniz
78d0: 65 72 28 29 20 77 69 74 68 20 61 6e 20 61 72 62  er() with an arb
78e0: 69 74 72 61 72 79 20 73 65 63 6f 6e 64 0a 20 20  itrary second.  
78f0: 61 72 67 75 6d 65 6e 74 2c 20 74 68 65 79 20 63  argument, they c
7900: 6f 75 6c 64 20 75 73 65 20 63 72 61 73 68 20 6f  ould use crash o
7910: 72 20 74 61 6b 65 20 63 6f 6e 74 72 6f 6c 20 6f  r take control o
7920: 66 20 74 68 65 20 70 72 6f 63 65 73 73 2e 20 0a  f the process. .
7930: 20 20 3c 70 3e 0a 20 20 42 65 63 61 75 73 65 20    <p>.  Because 
7940: 6f 66 20 73 65 63 75 72 69 74 79 20 63 6f 6e 63  of security conc
7950: 65 72 6e 73 2c 20 74 68 65 20 74 77 6f 2d 61 72  erns, the two-ar
7960: 67 75 6d 65 6e 74 20 66 74 73 33 5f 74 6f 6b 65  gument fts3_toke
7970: 6e 69 7a 65 72 28 29 20 66 65 61 74 75 72 65 20  nizer() feature 
7980: 0a 20 20 77 61 73 20 64 69 73 61 62 6c 65 64 20  .  was disabled 
7990: 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 5b  beginning with [
79a0: 56 65 72 73 69 6f 6e 20 33 2e 31 31 2e 30 5d 20  Version 3.11.0] 
79b0: 75 6e 6c 65 73 73 20 74 68 69 73 20 63 6f 6d 70  unless this comp
79c0: 69 6c 65 2d 74 69 6d 65 0a 20 20 6f 70 74 69 6f  ile-time.  optio
79d0: 6e 20 69 73 20 75 73 65 64 2e 0a 20 20 5b 56 65  n is used..  [Ve
79e0: 72 73 69 6f 6e 20 33 2e 31 32 2e 30 5d 20 61 64  rsion 3.12.0] ad
79f0: 64 65 64 20 74 68 65 20 0a 20 20 5b 73 71 6c 69  ded the .  [sqli
7a00: 74 65 33 5f 64 62 5f 63 6f 6e 66 69 67 5d 28 64  te3_db_config](d
7a10: 62 2c 5b 53 51 4c 49 54 45 5f 44 42 43 4f 4e 46  b,[SQLITE_DBCONF
7a20: 49 47 5f 45 4e 41 42 4c 45 5f 46 54 53 33 5f 54  IG_ENABLE_FTS3_T
7a30: 4f 4b 45 4e 49 5a 45 52 5d 2c 31 2c 30 29 20 69  OKENIZER],1,0) i
7a40: 6e 74 65 72 66 61 63 65 0a 20 20 74 68 61 74 20  nterface.  that 
7a50: 61 63 74 69 76 61 74 65 73 20 74 68 65 20 74 77  activates the tw
7a60: 6f 2d 61 72 67 75 6d 65 6e 74 20 76 65 72 73 69  o-argument versi
7a70: 6f 6e 20 6f 66 20 5b 66 74 73 33 5f 74 6f 6b 65  on of [fts3_toke
7a80: 6e 69 7a 65 72 28 29 5d 0a 20 20 66 6f 72 20 61  nizer()].  for a
7a90: 20 73 70 65 63 69 66 69 63 20 5b 64 61 74 61 62   specific [datab
7aa0: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d 20  ase connection] 
7ab0: 61 74 20 72 75 6e 2d 74 69 6d 65 2e 0a 7d 0a 0a  at run-time..}..
7ac0: 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b  COMPILE_OPTION {
7ad0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
7ae0: 53 34 7d 20 7b 0a 20 20 57 68 65 6e 20 74 68 69  S4} {.  When thi
7af0: 73 20 6f 70 74 69 6f 6e 20 69 73 20 64 65 66 69  s option is defi
7b00: 6e 65 64 20 69 6e 20 74 68 65 20 5b 61 6d 61 6c  ned in the [amal
7b10: 67 61 6d 61 74 69 6f 6e 5d 2c 20 76 65 72 73 69  gamation], versi
7b20: 6f 6e 73 20 33 20 61 6e 64 20 34 0a 20 20 6f 66  ons 3 and 4.  of
7b30: 20 74 68 65 20 66 75 6c 6c 2d 74 65 78 74 20 73   the full-text s
7b40: 65 61 72 63 68 20 65 6e 67 69 6e 65 20 69 73 20  earch engine is 
7b50: 61 64 64 65 64 20 74 6f 20 74 68 65 20 62 75 69  added to the bui
7b60: 6c 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  ld automatically
7b70: 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54  ..}..COMPILE_OPT
7b80: 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 45 4e 41 42  ION {SQLITE_ENAB
7b90: 4c 45 5f 46 54 53 35 7d 20 7b 0a 20 20 57 68 65  LE_FTS5} {.  Whe
7ba0: 6e 20 74 68 69 73 20 6f 70 74 69 6f 6e 20 69 73  n this option is
7bb0: 20 64 65 66 69 6e 65 64 20 69 6e 20 74 68 65 20   defined in the 
7bc0: 5b 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 5d 2c 20  [amalgamation], 
7bd0: 76 65 72 73 69 6f 6e 73 20 35 0a 20 20 6f 66 20  versions 5.  of 
7be0: 74 68 65 20 66 75 6c 6c 2d 74 65 78 74 20 73 65  the full-text se
7bf0: 61 72 63 68 20 65 6e 67 69 6e 65 20 28 5b 66 74  arch engine ([ft
7c00: 73 35 5d 29 20 69 73 20 61 64 64 65 64 20 74 6f  s5]) is added to
7c10: 20 74 68 65 20 62 75 69 6c 64 20 61 75 74 6f 6d   the build autom
7c20: 61 74 69 63 61 6c 6c 79 2e 0a 7d 0a 0a 43 4f 4d  atically..}..COM
7c30: 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c  PILE_OPTION {SQL
7c40: 49 54 45 5f 45 4e 41 42 4c 45 5f 49 43 55 7d 20  ITE_ENABLE_ICU} 
7c50: 7b 0a 20 20 54 68 69 73 20 6f 70 74 69 6f 6e 20  {.  This option 
7c60: 63 61 75 73 65 73 20 74 68 65 20 0a 20 20 5b 68  causes the .  [h
7c70: 74 74 70 3a 2f 2f 77 77 77 2e 69 63 75 2d 70 72  ttp://www.icu-pr
7c80: 6f 6a 65 63 74 2e 6f 72 67 2f 20 7c 20 49 6e 74  oject.org/ | Int
7c90: 65 72 6e 61 74 69 6f 6e 61 6c 20 43 6f 6d 70 6f  ernational Compo
7ca0: 6e 65 6e 74 73 20 66 6f 72 20 55 6e 69 63 6f 64  nents for Unicod
7cb0: 65 5d 0a 20 20 6f 72 20 22 49 43 55 22 20 65 78  e].  or "ICU" ex
7cc0: 74 65 6e 73 69 6f 6e 20 74 6f 20 53 51 4c 69 74  tension to SQLit
7cd0: 65 20 74 6f 20 62 65 20 61 64 64 65 64 20 74 6f  e to be added to
7ce0: 20 74 68 65 20 62 75 69 6c 64 2e 20 20 0a 7d 0a   the build.  .}.
7cf0: 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20  .COMPILE_OPTION 
7d00: 7b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 49  {SQLITE_ENABLE_I
7d10: 4f 54 52 41 43 45 7d 20 7b 0a 20 20 57 68 65 6e  OTRACE} {.  When
7d20: 20 62 6f 74 68 20 74 68 65 20 53 51 4c 69 74 65   both the SQLite
7d30: 20 63 6f 72 65 20 61 6e 64 20 74 68 65 20 5b 43   core and the [C
7d40: 6f 6d 6d 61 6e 64 20 4c 69 6e 65 20 49 6e 74 65  ommand Line Inte
7d50: 72 66 61 63 65 5d 20 28 43 4c 49 29 20 61 72 65  rface] (CLI) are
7d60: 20 62 6f 74 68 20 0a 20 20 63 6f 6d 70 69 6c 65   both .  compile
7d70: 64 20 77 69 74 68 20 74 68 69 73 20 6f 70 74 69  d with this opti
7d80: 6f 6e 2c 20 74 68 65 6e 20 74 68 65 20 43 4c 49  on, then the CLI
7d90: 20 70 72 6f 76 69 64 65 73 20 61 6e 20 65 78 74   provides an ext
7da0: 72 61 20 63 6f 6d 6d 61 6e 64 0a 20 20 6e 61 6d  ra command.  nam
7db0: 65 64 20 22 2e 69 6f 74 72 61 63 65 22 20 74 68  ed ".iotrace" th
7dc0: 61 74 20 70 72 6f 76 69 64 65 73 20 61 20 6c 6f  at provides a lo
7dd0: 77 2d 6c 65 76 65 6c 20 6c 6f 67 20 6f 66 20 49  w-level log of I
7de0: 2f 4f 20 61 63 74 69 76 69 74 79 2e 0a 20 20 54  /O activity..  T
7df0: 68 69 73 20 6f 70 74 69 6f 6e 20 69 73 20 65 78  his option is ex
7e00: 70 65 72 69 6d 65 6e 74 61 6c 20 61 6e 64 20 6d  perimental and m
7e10: 61 79 20 62 65 20 64 69 73 63 6f 6e 74 69 6e 75  ay be discontinu
7e20: 65 64 20 69 6e 20 61 20 66 75 74 75 72 65 20 72  ed in a future r
7e30: 65 6c 65 61 73 65 2e 0a 7d 0a 0a 43 4f 4d 50 49  elease..}..COMPI
7e40: 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54  LE_OPTION {SQLIT
7e50: 45 5f 45 4e 41 42 4c 45 5f 4a 53 4f 4e 31 7d 20  E_ENABLE_JSON1} 
7e60: 7b 0a 20 20 57 68 65 6e 20 74 68 69 73 20 6f 70  {.  When this op
7e70: 74 69 6f 6e 20 69 73 20 64 65 66 69 6e 65 64 20  tion is defined 
7e80: 69 6e 20 74 68 65 20 5b 61 6d 61 6c 67 61 6d 61  in the [amalgama
7e90: 74 69 6f 6e 5d 2c 20 74 68 65 0a 20 20 5b 4a 53  tion], the.  [JS
7ea0: 4f 4e 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 73  ON SQL functions
7eb0: 5d 20 61 72 65 20 61 64 64 65 64 20 74 6f 20 74  ] are added to t
7ec0: 68 65 20 62 75 69 6c 64 20 61 75 74 6f 6d 61 74  he build automat
7ed0: 69 63 61 6c 6c 79 2e 0a 7d 0a 0a 43 4f 4d 50 49  ically..}..COMPI
7ee0: 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54  LE_OPTION {SQLIT
7ef0: 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49 4e 47  E_ENABLE_LOCKING
7f00: 5f 53 54 59 4c 45 7d 20 7b 0a 20 20 54 68 69 73  _STYLE} {.  This
7f10: 20 6f 70 74 69 6f 6e 20 65 6e 61 62 6c 65 73 20   option enables 
7f20: 61 64 64 69 74 69 6f 6e 61 6c 20 6c 6f 67 69 63  additional logic
7f30: 20 69 6e 20 74 68 65 20 4f 53 20 69 6e 74 65 72   in the OS inter
7f40: 66 61 63 65 20 6c 61 79 65 72 20 66 6f 72 0a 20  face layer for. 
7f50: 20 4d 61 63 20 4f 53 20 58 2e 20 54 68 65 20 61   Mac OS X. The a
7f60: 64 64 69 74 69 6f 6e 61 6c 20 6c 6f 67 69 63 20  dditional logic 
7f70: 61 74 74 65 6d 70 74 73 20 74 6f 20 64 65 74 65  attempts to dete
7f80: 72 6d 69 6e 65 20 74 68 65 20 74 79 70 65 20 6f  rmine the type o
7f90: 66 20 74 68 65 0a 20 20 75 6e 64 65 72 6c 79 69  f the.  underlyi
7fa0: 6e 67 20 66 69 6c 65 73 79 73 74 65 6d 20 61 6e  ng filesystem an
7fb0: 64 20 63 68 6f 6f 73 65 20 61 6e 64 20 61 6c 74  d choose and alt
7fc0: 65 72 6e 61 74 69 76 65 20 6c 6f 63 6b 69 6e 67  ernative locking
7fd0: 20 73 74 72 61 74 65 67 79 0a 20 20 74 68 61 74   strategy.  that
7fe0: 20 77 6f 72 6b 73 20 63 6f 72 72 65 63 74 6c 79   works correctly
7ff0: 20 66 6f 72 20 74 68 61 74 20 66 69 6c 65 73 79   for that filesy
8000: 73 74 65 6d 20 74 79 70 65 2e 20 46 69 76 65 20  stem type. Five 
8010: 6c 6f 63 6b 69 6e 67 20 73 74 72 61 74 65 67 69  locking strategi
8020: 65 73 20 0a 20 20 61 72 65 20 61 76 61 69 6c 61  es .  are availa
8030: 62 6c 65 3a 0a 0a 20 20 3c 75 6c 3e 0a 20 20 20  ble:..  <ul>.   
8040: 20 3c 6c 69 3e 20 50 4f 53 49 58 20 6c 6f 63 6b   <li> POSIX lock
8050: 69 6e 67 20 73 74 79 6c 65 2e 20 54 68 69 73 20  ing style. This 
8060: 69 73 20 74 68 65 20 64 65 66 61 75 6c 74 20 6c  is the default l
8070: 6f 63 6b 69 6e 67 20 73 74 79 6c 65 20 61 6e 64  ocking style and
8080: 20 74 68 65 0a 20 20 20 20 20 20 20 20 20 73 74   the.         st
8090: 79 6c 65 20 75 73 65 64 20 62 79 20 6f 74 68 65  yle used by othe
80a0: 72 20 28 6e 6f 6e 20 4d 61 63 20 4f 53 20 58 29  r (non Mac OS X)
80b0: 20 55 6e 69 78 65 73 2e 20 4c 6f 63 6b 73 20 61   Unixes. Locks a
80c0: 72 65 20 6f 62 74 61 69 6e 65 64 20 61 6e 64 20  re obtained and 
80d0: 0a 20 20 20 20 20 20 20 20 20 72 65 6c 65 61 73  .         releas
80e0: 65 64 20 75 73 69 6e 67 20 74 68 65 20 66 63 6e  ed using the fcn
80f0: 74 6c 28 29 20 73 79 73 74 65 6d 20 63 61 6c 6c  tl() system call
8100: 2e 0a 0a 20 20 20 20 3c 6c 69 3e 20 41 46 50 20  ...    <li> AFP 
8110: 6c 6f 63 6b 69 6e 67 20 73 74 79 6c 65 2e 20 54  locking style. T
8120: 68 69 73 20 6c 6f 63 6b 69 6e 67 20 73 74 79 6c  his locking styl
8130: 65 20 69 73 20 75 73 65 64 20 66 6f 72 20 6e 65  e is used for ne
8140: 74 77 6f 72 6b 20 66 69 6c 65 20 0a 20 20 20 20  twork file .    
8150: 20 20 20 20 20 73 79 73 74 65 6d 73 20 74 68 61       systems tha
8160: 74 20 75 73 65 20 74 68 65 20 41 46 50 20 28 41  t use the AFP (A
8170: 70 70 6c 65 20 46 69 6c 69 6e 67 20 50 72 6f 74  pple Filing Prot
8180: 6f 63 6f 6c 29 20 70 72 6f 74 6f 63 6f 6c 2e 20  ocol) protocol. 
8190: 4c 6f 63 6b 73 0a 20 20 20 20 20 20 20 20 20 61  Locks.         a
81a0: 72 65 20 6f 62 74 61 69 6e 65 64 20 62 79 20 63  re obtained by c
81b0: 61 6c 6c 69 6e 67 20 74 68 65 20 6c 69 62 72 61  alling the libra
81c0: 72 79 20 66 75 6e 63 74 69 6f 6e 20 5f 41 46 50  ry function _AFP
81d0: 46 53 53 65 74 4c 6f 63 6b 28 29 2e 0a 0a 20 20  FSSetLock()...  
81e0: 20 20 3c 6c 69 3e 20 46 6c 6f 63 6b 20 6c 6f 63    <li> Flock loc
81f0: 6b 69 6e 67 20 73 74 79 6c 65 2e 20 54 68 69 73  king style. This
8200: 20 69 73 20 75 73 65 64 20 66 6f 72 20 66 69 6c   is used for fil
8210: 65 2d 73 79 73 74 65 6d 73 20 74 68 61 74 20 64  e-systems that d
8220: 6f 20 6e 6f 74 0a 20 20 20 20 20 20 20 20 20 73  o not.         s
8230: 75 70 70 6f 72 74 20 50 4f 53 49 58 20 6c 6f 63  upport POSIX loc
8240: 6b 69 6e 67 20 73 74 79 6c 65 2e 20 4c 6f 63 6b  king style. Lock
8250: 73 20 61 72 65 20 6f 62 74 61 69 6e 65 64 20 61  s are obtained a
8260: 6e 64 20 72 65 6c 65 61 73 65 64 20 75 73 69 6e  nd released usin
8270: 67 0a 20 20 20 20 20 20 20 20 20 74 68 65 20 66  g.         the f
8280: 6c 6f 63 6b 28 29 20 73 79 73 74 65 6d 20 63 61  lock() system ca
8290: 6c 6c 2e 0a 0a 20 20 20 20 3c 6c 69 3e 20 44 6f  ll...    <li> Do
82a0: 74 2d 66 69 6c 65 20 6c 6f 63 6b 69 6e 67 20 73  t-file locking s
82b0: 74 79 6c 65 2e 20 54 68 69 73 20 6c 6f 63 6b 69  tyle. This locki
82c0: 6e 67 20 73 74 79 6c 65 20 69 73 20 75 73 65 64  ng style is used
82d0: 20 77 68 65 6e 20 6e 65 69 74 68 65 72 0a 20 20   when neither.  
82e0: 20 20 20 20 20 20 20 66 6c 6f 63 6b 20 6e 6f 72         flock nor
82f0: 20 50 4f 53 49 58 20 6c 6f 63 6b 69 6e 67 20 73   POSIX locking s
8300: 74 79 6c 65 73 20 61 72 65 20 73 75 70 70 6f 72  tyles are suppor
8310: 74 65 64 20 62 79 20 74 68 65 20 66 69 6c 65 20  ted by the file 
8320: 73 79 73 74 65 6d 2e 0a 20 20 20 20 20 20 20 20  system..        
8330: 20 44 61 74 61 62 61 73 65 20 6c 6f 63 6b 73 20   Database locks 
8340: 61 72 65 20 6f 62 74 61 69 6e 65 64 20 62 79 20  are obtained by 
8350: 63 72 65 61 74 69 6e 67 20 61 6e 64 20 65 6e 74  creating and ent
8360: 72 79 20 69 6e 20 74 68 65 20 66 69 6c 65 2d 73  ry in the file-s
8370: 79 73 74 65 6d 0a 20 20 20 20 20 20 20 20 20 61  ystem.         a
8380: 74 20 61 20 77 65 6c 6c 2d 6b 6e 6f 77 6e 20 6c  t a well-known l
8390: 6f 63 61 74 69 6f 6e 20 72 65 6c 61 74 69 76 65  ocation relative
83a0: 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65   to the database
83b0: 20 66 69 6c 65 20 28 61 20 22 64 6f 74 2d 66 69   file (a "dot-fi
83c0: 6c 65 22 29 0a 20 20 20 20 20 20 20 20 20 61 6e  le").         an
83d0: 64 20 72 65 6c 69 6e 71 75 69 73 68 65 64 20 62  d relinquished b
83e0: 79 20 64 65 6c 65 74 69 6e 67 20 74 68 65 20 73  y deleting the s
83f0: 61 6d 65 20 66 69 6c 65 2e 0a 0a 20 20 20 20 3c  ame file...    <
8400: 6c 69 3e 20 4e 6f 20 6c 6f 63 6b 69 6e 67 20 73  li> No locking s
8410: 74 79 6c 65 2e 20 49 66 20 6e 6f 6e 65 20 6f 66  tyle. If none of
8420: 20 74 68 65 20 61 62 6f 76 65 20 63 61 6e 20 62   the above can b
8430: 65 20 73 75 70 70 6f 72 74 65 64 2c 20 74 68 69  e supported, thi
8440: 73 20 0a 20 20 20 20 20 20 20 20 20 6c 6f 63 6b  s .         lock
8450: 69 6e 67 20 73 74 79 6c 65 20 69 73 20 75 73 65  ing style is use
8460: 64 2e 20 4e 6f 20 64 61 74 61 62 61 73 65 20 6c  d. No database l
8470: 6f 63 6b 69 6e 67 20 6d 65 63 68 61 6e 69 73 6d  ocking mechanism
8480: 20 69 73 20 75 73 65 64 2e 20 57 68 65 6e 0a 20   is used. When. 
8490: 20 20 20 20 20 20 20 20 74 68 69 73 20 73 79 73          this sys
84a0: 74 65 6d 20 69 73 20 75 73 65 64 20 69 74 20 69  tem is used it i
84b0: 73 20 6e 6f 74 20 73 61 66 65 20 66 6f 72 20 61  s not safe for a
84c0: 20 73 69 6e 67 6c 65 20 64 61 74 61 62 61 73 65   single database
84d0: 20 74 6f 20 62 65 0a 20 20 20 20 20 20 20 20 20   to be.         
84e0: 61 63 63 65 73 73 65 64 20 62 79 20 6d 75 6c 74  accessed by mult
84f0: 69 70 6c 65 20 63 6c 69 65 6e 74 73 2e 0a 20 20  iple clients..  
8500: 3c 2f 75 6c 3e 0a 0a 20 20 41 64 64 69 74 69 6f  </ul>..  Additio
8510: 6e 61 6c 6c 79 2c 20 66 69 76 65 20 65 78 74 72  nally, five extr
8520: 61 20 5b 56 46 53 5d 20 69 6d 70 6c 65 6d 65 6e  a [VFS] implemen
8530: 74 61 74 69 6f 6e 73 20 61 72 65 20 70 72 6f 76  tations are prov
8540: 69 64 65 64 20 61 73 20 77 65 6c 6c 20 61 73 20  ided as well as 
8550: 74 68 65 0a 20 20 64 65 66 61 75 6c 74 2e 20 42  the.  default. B
8560: 79 20 73 70 65 63 69 66 79 69 6e 67 20 6f 6e 65  y specifying one
8570: 20 6f 66 20 74 68 65 20 65 78 74 72 61 20 56 46   of the extra VF
8580: 53 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  S implementation
8590: 73 20 0a 20 20 77 68 65 6e 20 63 61 6c 6c 69 6e  s .  when callin
85a0: 67 20 5b 73 71 6c 69 74 65 33 5f 6f 70 65 6e 5f  g [sqlite3_open_
85b0: 76 32 28 29 5d 2c 20 61 6e 20 61 70 70 6c 69 63  v2()], an applic
85c0: 61 74 69 6f 6e 20 6d 61 79 20 62 79 70 61 73 73  ation may bypass
85d0: 20 74 68 65 20 66 69 6c 65 2d 73 79 73 74 65 6d   the file-system
85e0: 0a 20 20 64 65 74 65 63 74 69 6f 6e 20 6c 6f 67  .  detection log
85f0: 69 63 20 61 6e 64 20 65 78 70 6c 69 63 69 74 6c  ic and explicitl
8600: 79 20 73 65 6c 65 63 74 20 6f 6e 65 20 6f 66 20  y select one of 
8610: 74 68 65 20 61 62 6f 76 65 20 6c 6f 63 6b 69 6e  the above lockin
8620: 67 20 73 74 79 6c 65 73 2e 20 54 68 65 0a 20 20  g styles. The.  
8630: 66 69 76 65 20 65 78 74 72 61 20 5b 56 46 53 5d  five extra [VFS]
8640: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73   implementations
8650: 20 61 72 65 20 63 61 6c 6c 65 64 20 22 75 6e 69   are called "uni
8660: 78 2d 70 6f 73 69 78 22 2c 20 22 75 6e 69 78 2d  x-posix", "unix-
8670: 61 66 70 22 2c 0a 20 20 22 75 6e 69 78 2d 66 6c  afp",.  "unix-fl
8680: 6f 63 6b 22 2c 20 22 75 6e 69 78 2d 64 6f 74 66  ock", "unix-dotf
8690: 69 6c 65 22 20 61 6e 64 20 22 75 6e 69 78 2d 6e  ile" and "unix-n
86a0: 6f 6e 65 22 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45  one"..}..COMPILE
86b0: 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f  _OPTION {SQLITE_
86c0: 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41  ENABLE_MEMORY_MA
86d0: 4e 41 47 45 4d 45 4e 54 7d 20 7b 0a 20 20 54 68  NAGEMENT} {.  Th
86e0: 69 73 20 6f 70 74 69 6f 6e 20 61 64 64 73 20 65  is option adds e
86f0: 78 74 72 61 20 6c 6f 67 69 63 20 74 6f 20 53 51  xtra logic to SQ
8700: 4c 69 74 65 20 74 68 61 74 20 61 6c 6c 6f 77 73  Lite that allows
8710: 20 69 74 20 74 6f 20 72 65 6c 65 61 73 65 20 75   it to release u
8720: 6e 75 73 65 64 0a 20 20 6d 65 6d 6f 72 79 20 75  nused.  memory u
8730: 70 6f 6e 20 72 65 71 75 65 73 74 2e 20 20 54 68  pon request.  Th
8740: 69 73 20 6f 70 74 69 6f 6e 20 6d 75 73 74 20 62  is option must b
8750: 65 20 65 6e 61 62 6c 65 64 20 69 6e 20 6f 72 64  e enabled in ord
8760: 65 72 20 66 6f 72 20 74 68 65 0a 20 20 5b 73 71  er for the.  [sq
8770: 6c 69 74 65 33 5f 72 65 6c 65 61 73 65 5f 6d 65  lite3_release_me
8780: 6d 6f 72 79 28 29 5d 20 69 6e 74 65 72 66 61 63  mory()] interfac
8790: 65 20 74 6f 20 77 6f 72 6b 2e 20 20 49 66 20 74  e to work.  If t
87a0: 68 69 73 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  his compile-time
87b0: 0a 20 20 6f 70 74 69 6f 6e 20 69 73 20 6e 6f 74  .  option is not
87c0: 20 75 73 65 64 2c 20 74 68 65 20 5b 73 71 6c 69   used, the [sqli
87d0: 74 65 33 5f 72 65 6c 65 61 73 65 5f 6d 65 6d 6f  te3_release_memo
87e0: 72 79 28 29 5d 20 69 6e 74 65 72 66 61 63 65 20  ry()] interface 
87f0: 69 73 20 61 20 0a 20 20 6e 6f 2d 6f 70 2e 0a 7d  is a .  no-op..}
8800: 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e  ..COMPILE_OPTION
8810: 20 7b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f   {SQLITE_ENABLE_
8820: 4d 45 4d 53 59 53 33 7d 20 7b 0a 20 20 54 68 69  MEMSYS3} {.  Thi
8830: 73 20 6f 70 74 69 6f 6e 20 69 6e 63 6c 75 64 65  s option include
8840: 73 20 63 6f 64 65 20 69 6e 20 53 51 4c 69 74 65  s code in SQLite
8850: 20 74 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74 73   that implements
8860: 20 61 6e 20 61 6c 74 65 72 6e 61 74 69 76 65 0a   an alternative.
8870: 20 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74    memory allocat
8880: 6f 72 2e 20 20 54 68 69 73 20 61 6c 74 65 72 6e  or.  This altern
8890: 61 74 69 76 65 20 6d 65 6d 6f 72 79 20 61 6c 6c  ative memory all
88a0: 6f 63 61 74 6f 72 20 69 73 20 6f 6e 6c 79 20 65  ocator is only e
88b0: 6e 67 61 67 65 64 0a 20 20 77 68 65 6e 20 74 68  ngaged.  when th
88c0: 65 20 5b 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47  e [SQLITE_CONFIG
88d0: 5f 48 45 41 50 5d 20 6f 70 74 69 6f 6e 20 74 6f  _HEAP] option to
88e0: 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67   [sqlite3_config
88f0: 28 29 5d 20 69 73 20 75 73 65 64 20 74 6f 0a 20  ()] is used to. 
8900: 20 73 75 70 70 6c 79 20 61 20 6c 61 72 67 65 20   supply a large 
8910: 63 68 75 6e 6b 20 6f 66 20 6d 65 6d 6f 72 79 20  chunk of memory 
8920: 66 72 6f 6d 20 77 68 69 63 68 20 61 6c 6c 20 6d  from which all m
8930: 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
8940: 73 20 61 72 65 0a 20 20 74 61 6b 65 6e 2e 0a 20  s are.  taken.. 
8950: 20 54 68 65 20 4d 45 4d 53 59 53 33 20 6d 65 6d   The MEMSYS3 mem
8960: 6f 72 79 20 61 6c 6c 6f 63 61 74 6f 72 20 75 73  ory allocator us
8970: 65 73 20 61 20 68 79 62 72 69 64 20 61 6c 6c 6f  es a hybrid allo
8980: 63 61 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d  cation algorithm
8990: 20 0a 20 20 70 61 74 74 65 72 6e 65 64 20 61 66   .  patterned af
89a0: 74 65 72 20 64 6c 6d 61 6c 6c 6f 63 28 29 2e 20  ter dlmalloc(). 
89b0: 20 20 4f 6e 6c 79 20 6f 6e 65 20 6f 66 20 53 51    Only one of SQ
89c0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53  LITE_ENABLE_MEMS
89d0: 59 53 33 20 61 6e 64 20 0a 20 20 53 51 4c 49 54  YS3 and .  SQLIT
89e0: 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 35  E_ENABLE_MEMSYS5
89f0: 20 6d 61 79 20 62 65 20 65 6e 61 62 6c 65 64 20   may be enabled 
8a00: 61 74 20 6f 6e 63 65 2e 0a 7d 0a 0a 43 4f 4d 50  at once..}..COMP
8a10: 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49  ILE_OPTION {SQLI
8a20: 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53  TE_ENABLE_MEMSYS
8a30: 35 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70 74 69  5} {.  This opti
8a40: 6f 6e 20 69 6e 63 6c 75 64 65 73 20 63 6f 64 65  on includes code
8a50: 20 69 6e 20 53 51 4c 69 74 65 20 74 68 61 74 20   in SQLite that 
8a60: 69 6d 70 6c 65 6d 65 6e 74 73 20 61 6e 20 61 6c  implements an al
8a70: 74 65 72 6e 61 74 69 76 65 0a 20 20 6d 65 6d 6f  ternative.  memo
8a80: 72 79 20 61 6c 6c 6f 63 61 74 6f 72 2e 20 20 54  ry allocator.  T
8a90: 68 69 73 20 61 6c 74 65 72 6e 61 74 69 76 65 20  his alternative 
8aa0: 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 6f 72  memory allocator
8ab0: 20 69 73 20 6f 6e 6c 79 20 65 6e 67 61 67 65 64   is only engaged
8ac0: 0a 20 20 77 68 65 6e 20 74 68 65 20 5b 53 51 4c  .  when the [SQL
8ad0: 49 54 45 5f 43 4f 4e 46 49 47 5f 48 45 41 50 5d  ITE_CONFIG_HEAP]
8ae0: 20 6f 70 74 69 6f 6e 20 74 6f 20 5b 73 71 6c 69   option to [sqli
8af0: 74 65 33 5f 63 6f 6e 66 69 67 28 29 5d 20 69 73  te3_config()] is
8b00: 20 75 73 65 64 20 74 6f 0a 20 20 73 75 70 70 6c   used to.  suppl
8b10: 79 20 61 20 6c 61 72 67 65 20 63 68 75 6e 6b 20  y a large chunk 
8b20: 6f 66 20 6d 65 6d 6f 72 79 20 66 72 6f 6d 20 77  of memory from w
8b30: 68 69 63 68 20 61 6c 6c 20 6d 65 6d 6f 72 79 20  hich all memory 
8b40: 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 0a  allocations are.
8b50: 20 20 74 61 6b 65 6e 2e 0a 20 20 54 68 65 20 4d    taken..  The M
8b60: 45 4d 53 59 53 35 20 6d 6f 64 75 6c 65 20 72 6f  EMSYS5 module ro
8b70: 75 6e 64 73 20 61 6c 6c 20 61 6c 6c 6f 63 61 74  unds all allocat
8b80: 69 6f 6e 73 20 75 70 20 74 6f 20 74 68 65 20 6e  ions up to the n
8b90: 65 78 74 20 70 6f 77 65 72 0a 20 20 6f 66 20 74  ext power.  of t
8ba0: 77 6f 20 61 6e 64 20 75 73 65 73 20 61 20 66 69  wo and uses a fi
8bb0: 72 73 74 2d 66 69 74 2c 20 62 75 64 64 79 2d 61  rst-fit, buddy-a
8bc0: 6c 6c 6f 63 61 74 6f 72 20 61 6c 67 6f 72 69 74  llocator algorit
8bd0: 68 6d 0a 20 20 74 68 61 74 20 70 72 6f 76 69 64  hm.  that provid
8be0: 65 73 20 73 74 72 6f 6e 67 20 67 75 61 72 61 6e  es strong guaran
8bf0: 74 65 65 73 20 61 67 61 69 6e 73 74 20 66 72 61  tees against fra
8c00: 67 6d 65 6e 74 61 74 69 6f 6e 20 61 6e 64 20 62  gmentation and b
8c10: 72 65 61 6b 64 6f 77 6e 0a 20 20 73 75 62 6a 65  reakdown.  subje
8c20: 63 74 20 74 6f 20 63 65 72 74 61 69 6e 20 6f 70  ct to certain op
8c30: 65 72 61 74 69 6e 67 20 63 6f 6e 73 74 72 61 69  erating constrai
8c40: 6e 74 73 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f  nts..}..COMPILE_
8c50: 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 45  OPTION {SQLITE_E
8c60: 4e 41 42 4c 45 5f 50 52 45 55 50 44 41 54 45 5f  NABLE_PREUPDATE_
8c70: 48 4f 4f 4b 7d 20 7b 0a 20 20 54 68 69 73 20 6f  HOOK} {.  This o
8c80: 70 74 69 6f 6e 20 65 6e 61 62 6c 65 73 20 0a 20  ption enables . 
8c90: 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 75 70 64   [sqlite3_preupd
8ca0: 61 74 65 5f 68 6f 6f 6b 7c 73 65 76 65 72 61 6c  ate_hook|several
8cb0: 20 6e 65 77 20 41 50 49 73 5d 20 74 68 61 74 20   new APIs] that 
8cc0: 70 72 6f 76 69 64 65 20 63 61 6c 6c 62 61 63 6b  provide callback
8cd0: 73 0a 20 20 70 72 69 6f 72 20 74 6f 20 61 6e 79  s.  prior to any
8ce0: 20 63 68 61 6e 67 65 20 74 6f 20 61 20 5b 72 6f   change to a [ro
8cf0: 77 69 64 20 74 61 62 6c 65 5d 2e 20 20 54 68 65  wid table].  The
8d00: 20 63 61 6c 6c 62 61 63 6b 73 20 63 61 6e 20 62   callbacks can b
8d10: 65 20 75 73 65 64 0a 20 20 74 6f 20 72 65 63 6f  e used.  to reco
8d20: 72 64 20 74 68 65 20 73 74 61 74 65 20 6f 66 20  rd the state of 
8d30: 74 68 65 20 72 6f 77 20 62 65 66 6f 72 65 20 74  the row before t
8d40: 68 65 20 63 68 61 6e 67 65 20 6f 63 63 75 72 73  he change occurs
8d50: 2e 0a 20 20 3c 70 3e 54 68 65 20 61 63 74 69 6f  ..  <p>The actio
8d60: 6e 20 6f 66 20 74 68 65 20 70 72 65 75 70 64 61  n of the preupda
8d70: 74 65 20 68 6f 6f 6b 20 69 73 20 73 69 6d 69 6c  te hook is simil
8d80: 61 72 20 74 6f 20 74 68 65 0a 20 20 5b 73 71 6c  ar to the.  [sql
8d90: 69 74 65 33 5f 75 70 64 61 74 65 5f 68 6f 6f 6b  ite3_update_hook
8da0: 7c 75 70 64 61 74 65 20 68 6f 6f 6b 5d 20 65 78  |update hook] ex
8db0: 63 65 70 74 20 74 68 61 74 20 74 68 65 20 63 61  cept that the ca
8dc0: 6c 6c 62 61 63 6b 20 69 73 0a 20 20 69 6e 76 6f  llback is.  invo
8dd0: 6b 65 64 20 62 65 66 6f 72 65 20 74 68 65 20 63  ked before the c
8de0: 68 61 6e 67 65 2c 20 6e 6f 74 20 61 66 74 65 72  hange, not after
8df0: 77 61 72 64 73 2c 20 61 6e 64 20 74 68 65 20 70  wards, and the p
8e00: 72 65 75 70 64 61 74 65 0a 20 20 68 6f 6f 6b 20  reupdate.  hook 
8e10: 69 6e 74 65 72 66 61 63 65 73 20 61 72 65 20 6f  interfaces are o
8e20: 6d 69 74 74 65 64 20 75 6e 6c 65 73 73 20 74 68  mitted unless th
8e30: 69 73 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  is compile-time 
8e40: 6f 70 74 69 6f 6e 20 69 73 0a 20 20 75 73 65 64  option is.  used
8e50: 2e 0a 20 20 3c 70 3e 54 68 65 20 70 72 65 75 70  ..  <p>The preup
8e60: 64 61 74 65 20 68 6f 6f 6b 20 69 6e 74 65 72 66  date hook interf
8e70: 61 63 65 73 20 77 65 72 65 20 6f 72 69 67 69 6e  aces were origin
8e80: 61 6c 6c 79 20 61 64 64 65 64 20 74 6f 0a 20 20  ally added to.  
8e90: 73 75 70 70 6f 72 74 20 74 68 65 20 5b 73 65 73  support the [ses
8ea0: 73 69 6f 6e 5d 20 65 78 74 65 6e 73 69 6f 6e 2e  sion] extension.
8eb0: 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49  .}..COMPILE_OPTI
8ec0: 4f 4e 20 7b 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ON {SQLITE_ENABL
8ed0: 45 5f 52 42 55 7d 20 7b 0a 20 20 45 6e 61 62 6c  E_RBU} {.  Enabl
8ee0: 65 20 74 68 65 20 63 6f 64 65 20 74 68 65 20 69  e the code the i
8ef0: 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 5b 52  mplements the [R
8f00: 42 55 20 65 78 74 65 6e 73 69 6f 6e 5d 2e 0a 7d  BU extension]..}
8f10: 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e  ..COMPILE_OPTION
8f20: 20 7b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f   {SQLITE_ENABLE_
8f30: 52 54 52 45 45 7d 20 7b 0a 20 20 54 68 69 73 20  RTREE} {.  This 
8f40: 6f 70 74 69 6f 6e 20 63 61 75 73 65 73 20 53 51  option causes SQ
8f50: 4c 69 74 65 20 74 6f 20 69 6e 63 6c 75 64 65 20  Lite to include 
8f60: 73 75 70 70 6f 72 74 20 66 6f 72 20 74 68 65 0a  support for the.
8f70: 20 20 5b 72 74 72 65 65 20 7c 20 52 2a 54 72 65    [rtree | R*Tre
8f80: 65 20 69 6e 64 65 78 20 65 78 74 65 6e 73 69 6f  e index extensio
8f90: 6e 5d 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f  n]..}..COMPILE_O
8fa0: 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 45 4e  PTION {SQLITE_EN
8fb0: 41 42 4c 45 5f 53 45 53 53 49 4f 4e 7d 20 7b 0a  ABLE_SESSION} {.
8fc0: 20 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 65 6e    This option en
8fd0: 61 62 6c 65 73 20 74 68 65 20 5b 73 65 73 73 69  ables the [sessi
8fe0: 6f 6e 20 65 78 74 65 6e 73 69 6f 6e 5d 2e 0a 7d  on extension]..}
8ff0: 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e  ..COMPILE_OPTION
9000: 20 7b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f   {SQLITE_ENABLE_
9010: 53 54 4d 54 5f 53 43 41 4e 53 54 41 54 55 53 7d  STMT_SCANSTATUS}
9020: 20 7b 0a 20 20 54 68 69 73 20 6f 70 74 69 6f 6e   {.  This option
9030: 20 65 6e 61 62 6c 65 73 20 74 68 65 20 5b 73 71   enables the [sq
9040: 6c 69 74 65 33 5f 73 74 6d 74 5f 73 63 61 6e 73  lite3_stmt_scans
9050: 74 61 74 75 73 28 29 5d 20 69 6e 74 65 72 66 61  tatus()] interfa
9060: 63 65 2e 20 20 54 68 65 0a 20 20 5b 73 71 6c 69  ce.  The.  [sqli
9070: 74 65 33 5f 73 74 6d 74 5f 73 63 61 6e 73 74 61  te3_stmt_scansta
9080: 74 75 73 28 29 5d 20 69 6e 74 65 72 66 61 63 65  tus()] interface
9090: 20 69 73 20 6e 6f 72 6d 61 6c 6c 79 20 6f 6d 69   is normally omi
90a0: 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20 62 75  tted from the bu
90b0: 69 6c 64 0a 20 20 62 65 63 61 75 73 65 20 69 74  ild.  because it
90c0: 20 69 6d 70 6f 73 65 73 20 61 20 73 6d 61 6c 6c   imposes a small
90d0: 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 70 65 6e   performance pen
90e0: 61 6c 74 79 2c 20 65 76 65 6e 20 6f 6e 20 73 74  alty, even on st
90f0: 61 74 65 6d 65 6e 74 73 20 74 68 61 74 0a 20 20  atements that.  
9100: 64 6f 20 6e 6f 74 20 75 73 65 20 74 68 65 20 66  do not use the f
9110: 65 61 74 75 72 65 2e 0a 7d 0a 0a 43 4f 4d 50 49  eature..}..COMPI
9120: 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54  LE_OPTION {SQLIT
9130: 45 5f 52 54 52 45 45 5f 49 4e 54 5f 4f 4e 4c 59  E_RTREE_INT_ONLY
9140: 7d 20 7b 0a 20 20 49 66 20 74 68 69 73 20 6f 70  } {.  If this op
9150: 74 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 67  tion is used tog
9160: 65 74 68 65 72 20 77 69 74 68 20 5b 53 51 4c 49  ether with [SQLI
9170: 54 45 5f 45 4e 41 42 4c 45 5f 52 54 52 45 45 5d  TE_ENABLE_RTREE]
9180: 20 74 68 65 6e 20 74 68 65 0a 20 20 5b 72 74 72   then the.  [rtr
9190: 65 65 20 7c 20 52 2a 54 72 65 65 20 65 78 74 65  ee | R*Tree exte
91a0: 6e 73 69 6f 6e 5d 20 77 69 6c 6c 20 6f 6e 6c 79  nsion] will only
91b0: 20 73 74 6f 72 65 20 33 32 2d 62 69 74 20 73 69   store 32-bit si
91c0: 67 6e 65 64 20 69 6e 74 65 67 65 72 0a 20 20 63  gned integer.  c
91d0: 6f 6f 72 64 69 6e 61 74 65 73 20 61 6e 64 20 61  oordinates and a
91e0: 6c 6c 20 69 6e 74 65 72 6e 61 6c 20 63 6f 6d 70  ll internal comp
91f0: 75 74 61 74 69 6f 6e 73 20 77 69 6c 6c 20 62 65  utations will be
9200: 20 64 6f 6e 65 20 75 73 69 6e 67 20 69 6e 74 65   done using inte
9210: 67 65 72 73 0a 20 20 69 6e 73 74 65 61 64 20 6f  gers.  instead o
9220: 66 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74  f floating point
9230: 20 6e 75 6d 62 65 72 73 2e 0a 7d 0a 0a 43 4f 4d   numbers..}..COM
9240: 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c  PILE_OPTION {SQL
9250: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 51 4c 4c 4f  ITE_ENABLE_SQLLO
9260: 47 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70 74 69  G} {.  This opti
9270: 6f 6e 20 65 6e 61 62 6c 65 73 20 65 78 74 72 61  on enables extra
9280: 20 63 6f 64 65 20 28 65 73 70 65 63 69 61 6c 6c   code (especiall
9290: 79 20 74 68 65 20 5b 53 51 4c 49 54 45 5f 43 4f  y the [SQLITE_CO
92a0: 4e 46 49 47 5f 53 51 4c 4c 4f 47 5d 0a 20 20 6f  NFIG_SQLLOG].  o
92b0: 70 74 69 6f 6e 20 74 6f 20 5b 73 71 6c 69 74 65  ption to [sqlite
92c0: 33 5f 63 6f 6e 66 69 67 28 29 5d 29 20 74 68 61  3_config()]) tha
92d0: 74 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f  t can be used to
92e0: 20 63 72 65 61 74 65 20 6c 6f 67 73 20 6f 66 20   create logs of 
92f0: 61 6c 6c 0a 20 20 53 51 4c 69 74 65 20 70 72 6f  all.  SQLite pro
9300: 63 65 73 73 69 6e 67 20 70 65 72 66 6f 72 6d 65  cessing performe
9310: 64 20 62 79 20 61 6e 20 61 70 70 6c 69 63 61 74  d by an applicat
9320: 69 6f 6e 2e 20 20 54 68 65 73 65 20 6c 6f 67 73  ion.  These logs
9330: 20 63 61 6e 20 62 65 20 75 73 65 66 75 6c 0a 20   can be useful. 
9340: 20 69 6e 20 64 6f 69 6e 67 20 6f 66 66 2d 6c 69   in doing off-li
9350: 6e 65 20 61 6e 61 6c 79 73 69 73 20 6f 66 20 74  ne analysis of t
9360: 68 65 20 62 65 68 61 76 69 6f 72 20 6f 66 20 61  he behavior of a
9370: 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e 2c 20 61  n application, a
9380: 6e 64 20 65 73 70 65 63 69 61 6c 6c 79 0a 20 20  nd especially.  
9390: 66 6f 72 20 70 65 72 66 6f 72 6d 61 6e 63 65 20  for performance 
93a0: 61 6e 61 6c 79 73 69 73 2e 20 20 49 6e 20 6f 72  analysis.  In or
93b0: 64 65 72 20 66 6f 72 20 74 68 65 20 53 51 4c 49  der for the SQLI
93c0: 54 45 5f 45 4e 41 42 4c 45 5f 53 51 4c 4c 4f 47  TE_ENABLE_SQLLOG
93d0: 20 6f 70 74 69 6f 6e 20 74 6f 20 0a 20 20 62 65   option to .  be
93e0: 20 75 73 65 66 75 6c 2c 20 73 6f 6d 65 20 65 78   useful, some ex
93f0: 74 72 61 20 63 6f 64 65 20 69 73 20 72 65 71 75  tra code is requ
9400: 69 72 65 64 2e 20 20 54 68 65 20 0a 20 20 3c 61  ired.  The .  <a
9410: 20 68 72 65 66 3d 22 68 74 74 70 3a 2f 2f 77 77   href="http://ww
9420: 77 2e 73 71 6c 69 74 65 2e 6f 72 67 2f 73 72 63  w.sqlite.org/src
9430: 2f 64 6f 63 2f 74 72 75 6e 6b 2f 73 72 63 2f 74  /doc/trunk/src/t
9440: 65 73 74 5f 73 71 6c 6c 6f 67 2e 63 22 3e 22 74  est_sqllog.c">"t
9450: 65 73 74 5f 73 71 6c 6c 6f 67 2e 63 22 3c 2f 61  est_sqllog.c"</a
9460: 3e 0a 20 20 73 6f 75 72 63 65 20 63 6f 64 65 0a  >.  source code.
9470: 20 20 66 69 6c 65 20 69 6e 20 74 68 65 20 53 51    file in the SQ
9480: 4c 69 74 65 20 73 6f 75 72 63 65 20 74 72 65 65  Lite source tree
9490: 20 69 73 20 61 20 77 6f 72 6b 69 6e 67 20 65 78   is a working ex
94a0: 61 6d 70 6c 65 20 6f 66 20 74 68 65 20 72 65 71  ample of the req
94b0: 75 69 72 65 64 20 65 78 74 72 61 0a 20 20 63 6f  uired extra.  co
94c0: 64 65 2e 20 20 4f 6e 20 75 6e 69 78 20 61 6e 64  de.  On unix and
94d0: 20 77 69 6e 64 6f 77 73 20 73 79 73 74 65 6d 73   windows systems
94e0: 2c 20 61 20 64 65 76 65 6c 6f 70 65 72 20 63 61  , a developer ca
94f0: 6e 20 61 70 70 65 6e 64 20 74 68 65 20 74 65 78  n append the tex
9500: 74 20 6f 66 20 74 68 65 0a 20 20 22 74 65 73 74  t of the.  "test
9510: 5f 73 71 6c 6c 6f 67 2e 63 22 20 73 6f 75 72 63  _sqllog.c" sourc
9520: 65 20 63 6f 64 65 20 66 69 6c 65 20 74 6f 20 74  e code file to t
9530: 68 65 20 65 6e 64 20 6f 66 20 61 6e 20 22 73 71  he end of an "sq
9540: 6c 69 74 65 33 2e 63 22 20 61 6d 61 6c 67 61 6d  lite3.c" amalgam
9550: 61 74 69 6f 6e 2c 0a 20 20 72 65 63 6f 6d 70 69  ation,.  recompi
9560: 6c 65 20 74 68 65 20 61 70 70 6c 69 63 61 74 69  le the applicati
9570: 6f 6e 20 75 73 69 6e 67 20 74 68 65 20 2d 44 53  on using the -DS
9580: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 51 4c  QLITE_ENABLE_SQL
9590: 4c 4f 47 20 6f 70 74 69 6f 6e 2c 20 74 68 65 6e  LOG option, then
95a0: 20 0a 20 20 63 6f 6e 74 72 6f 6c 20 6c 6f 67 67   .  control logg
95b0: 69 6e 67 20 75 73 69 6e 67 20 65 6e 76 69 72 6f  ing using enviro
95c0: 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c 65 73 2e  nment variables.
95d0: 20 20 53 65 65 20 74 68 65 20 68 65 61 64 65 72    See the header
95e0: 20 63 6f 6d 6d 65 6e 74 20 6f 6e 20 0a 20 20 74   comment on .  t
95f0: 68 65 20 22 74 65 73 74 5f 73 71 6c 6c 6f 67 2e  he "test_sqllog.
9600: 63 22 20 73 6f 75 72 63 65 20 66 69 6c 65 20 66  c" source file f
9610: 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 64 65  or additional de
9620: 74 61 69 6c 2e 20 20 0a 7d 0a 0a 43 4f 4d 50 49  tail.  .}..COMPI
9630: 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54  LE_OPTION {SQLIT
9640: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 32 7d 20  E_ENABLE_STAT2} 
9650: 7b 0a 20 20 54 68 69 73 20 6f 70 74 69 6f 6e 20  {.  This option 
9660: 75 73 65 64 20 74 6f 20 63 61 75 73 65 20 74 68  used to cause th
9670: 65 20 5b 41 4e 41 4c 59 5a 45 5d 20 63 6f 6d 6d  e [ANALYZE] comm
9680: 61 6e 64 20 74 6f 20 63 6f 6c 6c 65 63 74 0a 20  and to collect. 
9690: 20 69 6e 64 65 78 20 68 69 73 74 6f 67 72 61 6d   index histogram
96a0: 20 64 61 74 61 20 69 6e 20 74 68 65 20 3c 62 3e   data in the <b>
96b0: 73 71 6c 69 74 65 5f 73 74 61 74 32 3c 2f 62 3e  sqlite_stat2</b>
96c0: 20 74 61 62 6c 65 2e 20 20 42 75 74 20 74 68 61   table.  But tha
96d0: 74 0a 20 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74  t.  functionalit
96e0: 79 20 77 61 73 20 73 75 70 65 72 63 65 64 65 64  y was superceded
96f0: 20 62 79 20 5b 53 51 4c 49 54 45 5f 45 4e 41 42   by [SQLITE_ENAB
9700: 4c 45 5f 53 54 41 54 33 5d 20 61 73 20 6f 66 0a  LE_STAT3] as of.
9710: 20 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e    SQLite version
9720: 20 33 2e 37 2e 39 2e 20 20 54 68 65 20 53 51 4c   3.7.9.  The SQL
9730: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 32  ITE_ENABLE_STAT2
9740: 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70   compile-time op
9750: 74 69 6f 6e 0a 20 20 69 73 20 6e 6f 77 20 61 20  tion.  is now a 
9760: 6e 6f 2d 6f 70 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c  no-op..}..COMPIL
9770: 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45  E_OPTION {SQLITE
9780: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 7d 20 7b  _ENABLE_STAT3} {
9790: 0a 20 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 61  .  This option a
97a0: 64 64 73 20 61 64 64 69 74 69 6f 6e 61 6c 20 6c  dds additional l
97b0: 6f 67 69 63 20 74 6f 20 74 68 65 20 5b 41 4e 41  ogic to the [ANA
97c0: 4c 59 5a 45 5d 20 63 6f 6d 6d 61 6e 64 20 61 6e  LYZE] command an
97d0: 64 20 74 6f 0a 20 20 74 68 65 20 5b 71 75 65 72  d to.  the [quer
97e0: 79 20 70 6c 61 6e 6e 65 72 5d 20 74 68 61 74 20  y planner] that 
97f0: 63 61 6e 20 68 65 6c 70 20 53 51 4c 69 74 65 20  can help SQLite 
9800: 74 6f 20 63 68 6f 73 65 20 61 20 62 65 74 74 65  to chose a bette
9810: 72 20 71 75 65 72 79 20 70 6c 61 6e 0a 20 20 75  r query plan.  u
9820: 6e 64 65 72 20 63 65 72 74 61 69 6e 20 73 69 74  nder certain sit
9830: 75 61 74 69 6f 6e 73 2e 20 20 54 68 65 20 5b 41  uations.  The [A
9840: 4e 41 4c 59 5a 45 5d 20 63 6f 6d 6d 61 6e 64 20  NALYZE] command 
9850: 69 73 20 65 6e 68 61 6e 63 65 64 20 74 6f 20 63  is enhanced to c
9860: 6f 6c 6c 65 63 74 0a 20 20 68 69 73 74 6f 67 72  ollect.  histogr
9870: 61 6d 20 64 61 74 61 20 66 72 6f 6d 20 74 68 65  am data from the
9880: 20 6c 65 66 74 2d 6d 6f 73 74 20 63 6f 6c 75 6d   left-most colum
9890: 6e 20 6f 66 20 65 61 63 68 20 69 6e 64 65 78 20  n of each index 
98a0: 61 6e 64 20 73 74 6f 72 65 20 74 68 61 74 20 64  and store that d
98b0: 61 74 61 0a 20 20 69 6e 20 74 68 65 20 5b 73 71  ata.  in the [sq
98c0: 6c 69 74 65 5f 73 74 61 74 33 5d 20 74 61 62 6c  lite_stat3] tabl
98d0: 65 2e 20 20 54 68 65 20 71 75 65 72 79 20 70 6c  e.  The query pl
98e0: 61 6e 6e 65 72 20 77 69 6c 6c 20 74 68 65 6e 20  anner will then 
98f0: 75 73 65 20 74 68 65 0a 20 20 68 69 73 74 6f 67  use the.  histog
9900: 72 61 6d 20 64 61 74 61 20 74 6f 20 68 65 6c 70  ram data to help
9910: 20 69 74 20 6d 61 6b 65 20 62 65 74 74 65 72 20   it make better 
9920: 69 6e 64 65 78 20 63 68 6f 69 63 65 73 2e 20 20  index choices.  
9930: 4e 6f 74 65 2c 20 68 6f 77 65 76 65 72 2c 0a 20  Note, however,. 
9940: 20 74 68 61 74 20 74 68 65 20 75 73 65 20 6f 66   that the use of
9950: 20 68 69 73 74 6f 67 72 61 6d 20 64 61 74 61 20   histogram data 
9960: 69 6e 20 71 75 65 72 79 20 70 6c 61 6e 6e 65 72  in query planner
9970: 20 76 69 6f 6c 61 74 65 73 20 74 68 65 0a 20 20   violates the.  
9980: 5b 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 73  [query planner s
9990: 74 61 62 69 6c 69 74 79 20 67 75 61 72 61 6e 74  tability guarant
99a0: 65 65 5d 20 77 68 69 63 68 20 69 73 20 69 6d 70  ee] which is imp
99b0: 6f 72 74 61 6e 74 20 74 6f 20 73 6f 6d 65 20 61  ortant to some a
99c0: 70 70 6c 69 63 61 74 69 6f 6e 73 2e 0a 20 20 3c  pplications..  <
99d0: 70 3e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50  p>.}..COMPILE_OP
99e0: 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 45 4e 41  TION {SQLITE_ENA
99f0: 42 4c 45 5f 53 54 41 54 34 7d 20 7b 0a 20 20 54  BLE_STAT4} {.  T
9a00: 68 69 73 20 6f 70 74 69 6f 6e 20 61 64 64 73 20  his option adds 
9a10: 61 64 64 69 74 69 6f 6e 61 6c 20 6c 6f 67 69 63  additional logic
9a20: 20 74 6f 20 74 68 65 20 5b 41 4e 41 4c 59 5a 45   to the [ANALYZE
9a30: 5d 20 63 6f 6d 6d 61 6e 64 20 61 6e 64 20 74 6f  ] command and to
9a40: 0a 20 20 74 68 65 20 5b 71 75 65 72 79 20 70 6c  .  the [query pl
9a50: 61 6e 6e 65 72 5d 20 74 68 61 74 20 63 61 6e 20  anner] that can 
9a60: 68 65 6c 70 20 53 51 4c 69 74 65 20 74 6f 20 63  help SQLite to c
9a70: 68 6f 73 65 20 61 20 62 65 74 74 65 72 20 71 75  hose a better qu
9a80: 65 72 79 20 70 6c 61 6e 0a 20 20 75 6e 64 65 72  ery plan.  under
9a90: 20 63 65 72 74 61 69 6e 20 73 69 74 75 61 74 69   certain situati
9aa0: 6f 6e 73 2e 20 20 54 68 65 20 5b 41 4e 41 4c 59  ons.  The [ANALY
9ab0: 5a 45 5d 20 63 6f 6d 6d 61 6e 64 20 69 73 20 65  ZE] command is e
9ac0: 6e 68 61 6e 63 65 64 20 74 6f 20 63 6f 6c 6c 65  nhanced to colle
9ad0: 63 74 0a 20 20 68 69 73 74 6f 67 72 61 6d 20 64  ct.  histogram d
9ae0: 61 74 61 20 66 72 6f 6d 20 61 6c 6c 20 63 6f 6c  ata from all col
9af0: 75 6d 6e 73 20 6f 66 20 65 76 65 72 79 20 69 6e  umns of every in
9b00: 64 65 78 20 61 6e 64 20 73 74 6f 72 65 20 74 68  dex and store th
9b10: 61 74 20 64 61 74 61 0a 20 20 69 6e 20 74 68 65  at data.  in the
9b20: 20 5b 73 71 6c 69 74 65 5f 73 74 61 74 34 5d 20   [sqlite_stat4] 
9b30: 74 61 62 6c 65 2e 20 20 54 68 65 20 71 75 65 72  table.  The quer
9b40: 79 20 70 6c 61 6e 6e 65 72 20 77 69 6c 6c 20 74  y planner will t
9b50: 68 65 6e 20 75 73 65 20 74 68 65 0a 20 20 68 69  hen use the.  hi
9b60: 73 74 6f 67 72 61 6d 20 64 61 74 61 20 74 6f 20  stogram data to 
9b70: 68 65 6c 70 20 69 74 20 6d 61 6b 65 20 62 65 74  help it make bet
9b80: 74 65 72 20 69 6e 64 65 78 20 63 68 6f 69 63 65  ter index choice
9b90: 73 2e 20 20 54 68 65 20 64 6f 77 6e 73 69 64 65  s.  The downside
9ba0: 20 6f 66 0a 20 20 74 68 69 73 20 63 6f 6d 70 69   of.  this compi
9bb0: 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69  le-time option i
9bc0: 73 20 74 68 61 74 20 69 74 20 76 69 6f 6c 61 74  s that it violat
9bd0: 65 73 20 74 68 65 0a 20 20 5b 71 75 65 72 79 20  es the.  [query 
9be0: 70 6c 61 6e 6e 65 72 20 73 74 61 62 69 6c 69 74  planner stabilit
9bf0: 79 20 67 75 61 72 61 6e 74 65 65 5d 20 6d 61 6b  y guarantee] mak
9c00: 69 6e 67 20 69 74 20 6d 6f 72 65 20 64 69 66 66  ing it more diff
9c10: 69 63 75 6c 74 20 74 6f 20 65 6e 73 75 72 65 0a  icult to ensure.
9c20: 20 20 63 6f 6e 73 69 73 74 65 6e 74 20 70 65 72    consistent per
9c30: 66 6f 72 6d 61 6e 63 65 20 69 6e 20 6d 61 73 73  formance in mass
9c40: 2d 70 72 6f 64 75 63 65 64 20 61 70 70 6c 69 63  -produced applic
9c50: 61 74 69 6f 6e 73 2e 0a 20 20 3c 70 3e 0a 20 20  ations..  <p>.  
9c60: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
9c70: 41 54 34 20 69 73 20 61 6e 20 65 6e 68 61 6e 63  AT4 is an enhanc
9c80: 65 6d 65 6e 74 20 6f 66 20 5b 53 51 4c 49 54 45  ement of [SQLITE
9c90: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5d 2e 20  _ENABLE_STAT3]. 
9ca0: 20 53 54 41 54 33 0a 20 20 6f 6e 6c 79 20 72 65   STAT3.  only re
9cb0: 63 6f 72 64 65 64 20 68 69 73 74 6f 67 72 61 6d  corded histogram
9cc0: 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 6c 65   data for the le
9cd0: 66 74 2d 6d 6f 73 74 20 63 6f 6c 75 6d 6e 20 6f  ft-most column o
9ce0: 66 20 65 61 63 68 20 69 6e 64 65 78 0a 20 20 77  f each index.  w
9cf0: 68 65 72 65 61 73 20 74 68 65 20 53 54 41 54 34  hereas the STAT4
9d00: 20 65 6e 68 61 6e 63 65 6d 65 6e 74 20 72 65 63   enhancement rec
9d10: 6f 72 64 73 20 68 69 73 74 6f 67 72 61 6d 20 64  ords histogram d
9d20: 61 74 61 20 66 72 6f 6d 20 61 6c 6c 20 63 6f 6c  ata from all col
9d30: 75 6d 6e 73 0a 20 20 6f 66 20 65 61 63 68 20 69  umns.  of each i
9d40: 6e 64 65 78 2e 0a 20 20 54 68 65 20 5b 53 51 4c  ndex..  The [SQL
9d50: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33  ITE_ENABLE_STAT3
9d60: 5d 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f  ] compile-time o
9d70: 70 74 69 6f 6e 20 69 73 20 61 20 6e 6f 2d 6f 70  ption is a no-op
9d80: 20 61 6e 64 20 69 73 20 69 67 6e 6f 72 65 64 0a   and is ignored.
9d90: 20 20 69 66 20 74 68 65 20 53 51 4c 49 54 45 5f    if the SQLITE_
9da0: 45 4e 41 42 4c 45 5f 53 54 41 54 34 20 63 6f 6d  ENABLE_STAT4 com
9db0: 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
9dc0: 20 69 73 20 75 73 65 64 2e 0a 7d 0a 0a 43 4f 4d   is used..}..COM
9dd0: 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c  PILE_OPTION {SQL
9de0: 49 54 45 5f 45 4e 41 42 4c 45 5f 54 52 45 45 5f  ITE_ENABLE_TREE_
9df0: 45 58 50 4c 41 49 4e 7d 20 7b 0a 20 20 54 68 69  EXPLAIN} {.  Thi
9e00: 73 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f  s compile-time o
9e10: 70 74 69 6f 6e 20 69 73 20 6e 6f 20 6c 6f 6e 67  ption is no long
9e20: 65 72 20 75 73 65 64 2e 0a 7d 0a 0a 43 4f 4d 50  er used..}..COMP
9e30: 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49  ILE_OPTION {SQLI
9e40: 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54 45  TE_ENABLE_UPDATE
9e50: 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54 7d 20 7b  _DELETE_LIMIT} {
9e60: 0a 20 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 65  .  This option e
9e70: 6e 61 62 6c 65 73 20 61 6e 20 6f 70 74 69 6f 6e  nables an option
9e80: 61 6c 20 4f 52 44 45 52 20 42 59 20 61 6e 64 20  al ORDER BY and 
9e90: 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 6f 6e 20  LIMIT clause on 
9ea0: 0a 20 20 5b 55 50 44 41 54 45 5d 20 61 6e 64 20  .  [UPDATE] and 
9eb0: 5b 44 45 4c 45 54 45 5d 20 73 74 61 74 65 6d 65  [DELETE] stateme
9ec0: 6e 74 73 2e 0a 0a 20 20 3c 70 3e 49 66 20 74 68  nts...  <p>If th
9ed0: 69 73 20 6f 70 74 69 6f 6e 20 69 73 20 64 65 66  is option is def
9ee0: 69 6e 65 64 2c 20 74 68 65 6e 20 69 74 20 6d 75  ined, then it mu
9ef0: 73 74 20 61 6c 73 6f 20 62 65 20 0a 20 20 64 65  st also be .  de
9f00: 66 69 6e 65 64 20 77 68 65 6e 20 75 73 69 6e 67  fined when using
9f10: 20 74 68 65 20 27 6c 65 6d 6f 6e 27 20 74 6f 6f   the 'lemon' too
9f20: 6c 20 74 6f 20 67 65 6e 65 72 61 74 65 20 61 20  l to generate a 
9f30: 70 61 72 73 65 2e 63 0a 20 20 66 69 6c 65 2e 20  parse.c.  file. 
9f40: 42 65 63 61 75 73 65 20 6f 66 20 74 68 69 73 2c  Because of this,
9f50: 20 74 68 69 73 20 6f 70 74 69 6f 6e 20 6d 61 79   this option may
9f60: 20 6f 6e 6c 79 20 62 65 20 75 73 65 64 20 77 68   only be used wh
9f70: 65 6e 20 74 68 65 20 6c 69 62 72 61 72 79 20 69  en the library i
9f80: 73 20 62 75 69 6c 74 0a 20 20 66 72 6f 6d 20 73  s built.  from s
9f90: 6f 75 72 63 65 2c 20 6e 6f 74 20 66 72 6f 6d 20  ource, not from 
9fa0: 74 68 65 20 5b 61 6d 61 6c 67 61 6d 61 74 69 6f  the [amalgamatio
9fb0: 6e 5d 20 6f 72 20 66 72 6f 6d 20 74 68 65 20 63  n] or from the c
9fc0: 6f 6c 6c 65 63 74 69 6f 6e 20 6f 66 0a 20 20 70  ollection of.  p
9fd0: 72 65 2d 70 61 63 6b 61 67 65 64 20 43 20 66 69  re-packaged C fi
9fe0: 6c 65 73 20 70 72 6f 76 69 64 65 64 20 66 6f 72  les provided for
9ff0: 20 6e 6f 6e 2d 55 6e 69 78 20 6c 69 6b 65 20 70   non-Unix like p
a000: 6c 61 74 66 6f 72 6d 73 20 6f 6e 20 74 68 65 20  latforms on the 
a010: 77 65 62 73 69 74 65 2e 0a 20 20 3c 2f 70 3e 0a  website..  </p>.
a020: 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f  }..COMPILE_OPTIO
a030: 4e 20 7b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  N {SQLITE_ENABLE
a040: 5f 55 4e 4b 4e 4f 57 4e 5f 53 51 4c 5f 46 55 4e  _UNKNOWN_SQL_FUN
a050: 43 54 49 4f 4e 7d 20 7b 0a 20 20 57 68 65 6e 20  CTION} {.  When 
a060: 74 68 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  the SQLITE_ENABL
a070: 45 5f 55 4e 4b 4e 4f 57 4e 5f 53 51 4c 5f 46 55  E_UNKNOWN_SQL_FU
a080: 4e 43 54 49 4f 4e 20 63 6f 6d 70 69 6c 65 2d 74  NCTION compile-t
a090: 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 0a 20 20  ime option is.  
a0a0: 61 63 74 69 76 61 74 65 64 2c 20 53 51 4c 69 74  activated, SQLit
a0b0: 65 20 77 69 6c 6c 20 73 75 70 70 72 65 73 73 20  e will suppress 
a0c0: 22 75 6e 6b 6e 6f 77 6e 20 66 75 6e 63 74 69 6f  "unknown functio
a0d0: 6e 22 20 65 72 72 6f 72 73 20 77 68 65 6e 20 72  n" errors when r
a0e0: 75 6e 6e 69 6e 67 0a 20 20 61 6e 20 5b 45 58 50  unning.  an [EXP
a0f0: 4c 41 49 4e 5d 20 6f 72 20 5b 45 58 50 4c 41 49  LAIN] or [EXPLAI
a100: 4e 20 51 55 45 52 59 20 50 4c 41 4e 5d 2e 20 20  N QUERY PLAN].  
a110: 49 6e 73 74 65 61 64 20 6f 66 20 74 68 72 6f 77  Instead of throw
a120: 69 6e 67 20 61 6e 20 65 72 72 6f 72 2c 0a 20 20  ing an error,.  
a130: 53 51 4c 69 74 65 20 77 69 6c 6c 20 69 6e 73 65  SQLite will inse
a140: 72 74 20 61 20 73 75 62 73 74 69 74 75 74 65 20  rt a substitute 
a150: 6e 6f 2d 6f 70 20 66 75 6e 63 74 69 6f 6e 20 6e  no-op function n
a160: 61 6d 65 64 20 22 75 6e 6b 6e 6f 77 6e 28 29 22  amed "unknown()"
a170: 2e 0a 20 20 54 68 65 20 73 75 62 73 74 69 74 75  ..  The substitu
a180: 74 69 6f 6e 20 6f 66 20 22 75 6e 6b 6e 6f 77 6e  tion of "unknown
a190: 28 29 22 20 69 6e 20 70 6c 61 63 65 20 6f 66 20  ()" in place of 
a1a0: 75 6e 72 65 63 6f 67 6e 69 7a 65 64 20 66 75 6e  unrecognized fun
a1b0: 63 74 69 6f 6e 73 0a 20 20 6f 6e 6c 79 20 6f 63  ctions.  only oc
a1c0: 63 75 72 73 20 6f 6e 20 5b 45 58 50 4c 41 49 4e  curs on [EXPLAIN
a1d0: 5d 20 61 6e 64 20 5b 45 58 50 4c 41 49 4e 20 51  ] and [EXPLAIN Q
a1e0: 55 45 52 59 20 50 4c 41 4e 5d 2c 20 6e 6f 74 20  UERY PLAN], not 
a1f0: 6f 6e 20 6f 72 64 69 6e 61 72 79 0a 20 20 73 74  on ordinary.  st
a200: 61 74 65 6d 65 6e 74 73 2e 0a 20 20 3c 70 3e 0a  atements..  <p>.
a210: 20 20 57 68 65 6e 20 75 73 65 64 20 69 6e 20 74    When used in t
a220: 68 65 20 5b 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65  he [command-line
a230: 20 73 68 65 6c 6c 5d 2c 20 74 68 65 0a 20 20 53   shell], the.  S
a240: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 4e 4b  QLITE_ENABLE_UNK
a250: 4e 4f 57 4e 5f 53 51 4c 5f 46 55 4e 43 54 49 4f  NOWN_SQL_FUNCTIO
a260: 4e 20 66 65 61 74 75 72 65 20 61 6c 6c 6f 77 73  N feature allows
a270: 20 53 51 4c 20 74 65 78 74 20 74 68 61 74 20 63   SQL text that c
a280: 6f 6e 74 61 69 6e 73 0a 20 20 61 70 70 6c 69 63  ontains.  applic
a290: 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64 20 66 75  ation-defined fu
a2a0: 6e 63 74 69 6f 6e 73 20 74 6f 20 62 65 20 70 61  nctions to be pa
a2b0: 73 74 65 64 20 69 6e 74 6f 20 74 68 65 20 73 68  sted into the sh
a2c0: 65 6c 6c 20 66 6f 72 20 0a 20 20 61 6e 61 6c 79  ell for .  analy
a2d0: 73 69 73 20 61 6e 64 20 64 65 62 75 67 67 69 6e  sis and debuggin
a2e0: 67 20 77 69 74 68 6f 75 74 20 68 61 76 69 6e 67  g without having
a2f0: 20 74 6f 20 63 72 65 61 74 65 20 61 6e 64 20 6c   to create and l
a300: 6f 61 64 20 61 6e 0a 20 20 65 78 74 65 6e 73 69  oad an.  extensi
a310: 6f 6e 20 74 68 61 74 20 69 6d 70 6c 65 6d 65 6e  on that implemen
a320: 74 73 20 74 68 65 20 61 70 70 6c 69 63 61 74 69  ts the applicati
a330: 6f 6e 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74  on-defined funct
a340: 69 6f 6e 73 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45  ions..}..COMPILE
a350: 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f  _OPTION {SQLITE_
a360: 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f  ENABLE_UNLOCK_NO
a370: 54 49 46 59 7d 20 7b 0a 20 20 54 68 69 73 20 6f  TIFY} {.  This o
a380: 70 74 69 6f 6e 20 65 6e 61 62 6c 65 73 20 74 68  ption enables th
a390: 65 20 5b 73 71 6c 69 74 65 33 5f 75 6e 6c 6f 63  e [sqlite3_unloc
a3a0: 6b 5f 6e 6f 74 69 66 79 28 29 5d 20 69 6e 74 65  k_notify()] inte
a3b0: 72 66 61 63 65 20 61 6e 64 0a 20 20 69 74 73 20  rface and.  its 
a3c0: 61 73 73 6f 63 69 61 74 65 64 20 66 75 6e 63 74  associated funct
a3d0: 69 6f 6e 61 6c 69 74 79 2e 20 20 53 65 65 20 74  ionality.  See t
a3e0: 68 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e  he documentation
a3f0: 20 74 69 74 6c 65 64 0a 20 20 5b 55 73 69 6e 67   titled.  [Using
a400: 20 74 68 65 20 53 51 4c 69 74 65 20 55 6e 6c 6f   the SQLite Unlo
a410: 63 6b 20 4e 6f 74 69 66 69 63 61 74 69 6f 6e 20  ck Notification 
a420: 46 65 61 74 75 72 65 5d 20 66 6f 72 20 61 64 64  Feature] for add
a430: 69 74 69 6f 6e 61 6c 0a 20 20 69 6e 66 6f 72 6d  itional.  inform
a440: 61 74 69 6f 6e 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c  ation..}..COMPIL
a450: 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45  E_OPTION {SQLITE
a460: 5f 53 4f 55 4e 44 45 58 7d 20 7b 0a 20 20 54 68  _SOUNDEX} {.  Th
a470: 69 73 20 6f 70 74 69 6f 6e 20 65 6e 61 62 6c 65  is option enable
a480: 73 20 74 68 65 20 5b 73 6f 75 6e 64 65 78 28 29  s the [soundex()
a490: 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 5d 2e 0a   SQL function]..
a4a0: 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f  }..COMPILE_OPTIO
a4b0: 4e 20 7b 53 51 4c 49 54 45 5f 55 53 45 5f 46 43  N {SQLITE_USE_FC
a4c0: 4e 54 4c 5f 54 52 41 43 45 7d 20 7b 0a 20 20 54  NTL_TRACE} {.  T
a4d0: 68 69 73 20 6f 70 74 69 6f 6e 20 63 61 75 73 65  his option cause
a4e0: 73 20 53 51 4c 69 74 65 20 74 6f 20 69 73 73 75  s SQLite to issu
a4f0: 65 20 65 78 74 72 61 20 5b 53 51 4c 49 54 45 5f  e extra [SQLITE_
a500: 46 43 4e 54 4c 5f 54 52 41 43 45 5d 20 66 69 6c  FCNTL_TRACE] fil
a510: 65 20 63 6f 6e 74 72 6f 6c 73 0a 20 20 74 6f 20  e controls.  to 
a520: 70 72 6f 76 69 64 65 20 73 75 70 70 6c 65 6d 65  provide suppleme
a530: 6e 74 61 72 79 20 69 6e 66 6f 72 6d 61 74 69 6f  ntary informatio
a540: 6e 20 74 6f 20 74 68 65 20 56 46 53 2e 20 20 54  n to the VFS.  T
a550: 68 65 20 22 76 66 73 6c 6f 67 2e 63 22 20 65 78  he "vfslog.c" ex
a560: 74 65 6e 73 69 6f 6e 0a 20 20 6d 61 6b 65 73 20  tension.  makes 
a570: 75 73 65 20 6f 66 20 74 68 69 73 20 74 6f 20 70  use of this to p
a580: 72 6f 76 69 64 65 20 65 6e 68 61 6e 63 65 64 20  rovide enhanced 
a590: 6c 6f 67 73 20 6f 66 20 56 46 53 20 61 63 74 69  logs of VFS acti
a5a0: 76 69 74 79 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45  vity..}..COMPILE
a5b0: 5f 4f 50 54 49 4f 4e 20 7b 59 59 54 52 41 43 4b  _OPTION {YYTRACK
a5c0: 4d 41 58 53 54 41 43 4b 44 45 50 54 48 7d 20 7b  MAXSTACKDEPTH} {
a5d0: 0a 20 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 63  .  This option c
a5e0: 61 75 73 65 73 20 74 68 65 20 4c 41 4c 52 28 31  auses the LALR(1
a5f0: 29 20 70 61 72 73 65 72 20 73 74 61 63 6b 20 64  ) parser stack d
a600: 65 70 74 68 20 74 6f 20 62 65 20 74 72 61 63 6b  epth to be track
a610: 65 64 0a 20 20 61 6e 64 20 72 65 70 6f 72 74 65  ed.  and reporte
a620: 64 20 75 73 69 6e 67 20 74 68 65 20 5b 73 71 6c  d using the [sql
a630: 69 74 65 33 5f 73 74 61 74 75 73 5d 28 5b 53 51  ite3_status]([SQ
a640: 4c 49 54 45 5f 53 54 41 54 55 53 5f 50 41 52 53  LITE_STATUS_PARS
a650: 45 52 5f 53 54 41 43 4b 5d 2c 2e 2e 2e 29 0a 20  ER_STACK],...). 
a660: 20 69 6e 74 65 72 66 61 63 65 2e 20 20 53 51 4c   interface.  SQL
a670: 69 74 65 27 73 20 4c 41 4c 52 28 31 29 20 70 61  ite's LALR(1) pa
a680: 72 73 65 72 20 68 61 73 20 61 20 66 69 78 65 64  rser has a fixed
a690: 20 73 74 61 63 6b 20 64 65 70 74 68 0a 20 20 28   stack depth.  (
a6a0: 64 65 74 65 72 6d 69 6e 65 64 20 61 74 20 63 6f  determined at co
a6b0: 6d 70 69 6c 65 2d 74 69 6d 65 20 75 73 69 6e 67  mpile-time using
a6c0: 20 74 68 65 20 5b 59 59 53 54 41 43 4b 44 45 50   the [YYSTACKDEP
a6d0: 54 48 5d 20 6f 70 74 69 6f 6e 73 29 2e 0a 20 20  TH] options)..  
a6e0: 54 68 69 73 20 6f 70 74 69 6f 6e 20 63 61 6e 20  This option can 
a6f0: 62 65 20 75 73 65 64 20 74 6f 20 68 65 6c 70 20  be used to help 
a700: 64 65 74 65 72 6d 69 6e 65 20 69 66 20 61 6e 20  determine if an 
a710: 61 70 70 6c 69 63 61 74 69 6f 6e 20 69 73 0a 20  application is. 
a720: 20 67 65 74 74 69 6e 67 20 63 6c 6f 73 65 20 74   getting close t
a730: 6f 20 65 78 63 65 65 64 69 6e 67 20 74 68 65 20  o exceeding the 
a740: 6d 61 78 69 6d 75 6d 20 4c 41 4c 52 28 31 29 20  maximum LALR(1) 
a750: 73 74 61 63 6b 20 64 65 70 74 68 2e 0a 7d 0a 3c  stack depth..}.<
a760: 2f 74 63 6c 3e 0a 0a 3c 61 20 6e 61 6d 65 3d 22  /tcl>..<a name="
a770: 64 69 73 61 62 6c 65 66 65 61 74 75 72 65 73 22  disablefeatures"
a780: 3e 3c 2f 61 3e 0a 3c 68 31 3e 20 4f 70 74 69 6f  ></a>.<h1> Optio
a790: 6e 73 20 54 6f 20 44 69 73 61 62 6c 65 20 46 65  ns To Disable Fe
a7a0: 61 74 75 72 65 73 20 4e 6f 72 6d 61 6c 6c 79 20  atures Normally 
a7b0: 54 75 72 6e 65 64 20 4f 6e 3c 2f 68 31 3e 0a 0a  Turned On</h1>..
a7c0: 3c 74 63 6c 3e 0a 43 4f 4d 50 49 4c 45 5f 4f 50  <tcl>.COMPILE_OP
a7d0: 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 44 49 53  TION {SQLITE_DIS
a7e0: 41 42 4c 45 5f 4c 46 53 7d 20 7b 0a 20 20 49 66  ABLE_LFS} {.  If
a7f0: 20 74 68 69 73 20 43 2d 70 72 65 70 72 6f 63 65   this C-preproce
a800: 73 73 6f 72 20 6d 61 63 72 6f 20 69 73 20 64 65  ssor macro is de
a810: 66 69 6e 65 64 2c 20 6c 61 72 67 65 20 66 69 6c  fined, large fil
a820: 65 20 73 75 70 70 6f 72 74 0a 20 20 69 73 20 64  e support.  is d
a830: 69 73 61 62 6c 65 64 2e 0a 7d 0a 0a 43 4f 4d 50  isabled..}..COMP
a840: 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49  ILE_OPTION {SQLI
a850: 54 45 5f 44 49 53 41 42 4c 45 5f 44 49 52 53 59  TE_DISABLE_DIRSY
a860: 4e 43 7d 20 7b 0a 20 20 49 66 20 74 68 69 73 20  NC} {.  If this 
a870: 43 2d 70 72 65 70 72 6f 63 65 73 73 6f 72 20 6d  C-preprocessor m
a880: 61 63 72 6f 20 69 73 20 64 65 66 69 6e 65 64 2c  acro is defined,
a890: 20 64 69 72 65 63 74 6f 72 79 20 73 79 6e 63 73   directory syncs
a8a0: 0a 20 20 61 72 65 20 64 69 73 61 62 6c 65 64 2e  .  are disabled.
a8b0: 20 20 53 51 4c 69 74 65 20 74 79 70 69 63 61 6c    SQLite typical
a8c0: 6c 79 20 61 74 74 65 6d 70 74 73 20 74 6f 20 73  ly attempts to s
a8d0: 79 6e 63 20 74 68 65 20 70 61 72 65 6e 74 0a 20  ync the parent. 
a8e0: 20 64 69 72 65 63 74 6f 72 79 20 77 68 65 6e 20   directory when 
a8f0: 61 20 66 69 6c 65 20 69 73 20 64 65 6c 65 74 65  a file is delete
a900: 64 20 74 6f 20 65 6e 73 75 72 65 20 74 68 65 20  d to ensure the 
a910: 64 69 72 65 63 74 6f 72 79 0a 20 20 65 6e 74 72  directory.  entr
a920: 69 65 73 20 61 72 65 20 75 70 64 61 74 65 64 20  ies are updated 
a930: 69 6d 6d 65 64 69 61 74 65 6c 79 20 6f 6e 20 64  immediately on d
a940: 69 73 6b 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f  isk..}..COMPILE_
a950: 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 44  OPTION {SQLITE_D
a960: 49 53 41 42 4c 45 5f 46 54 53 33 5f 55 4e 49 43  ISABLE_FTS3_UNIC
a970: 4f 44 45 7d 20 7b 0a 20 20 49 66 20 74 68 69 73  ODE} {.  If this
a980: 20 43 2d 70 72 65 70 72 6f 63 65 73 73 6f 72 20   C-preprocessor 
a990: 6d 61 63 72 6f 20 69 73 20 64 65 66 69 6e 65 64  macro is defined
a9a0: 2c 20 74 68 65 20 5b 75 6e 69 63 6f 64 65 36 31  , the [unicode61
a9b0: 5d 20 74 6f 6b 65 6e 69 7a 65 72 0a 20 20 69 6e  ] tokenizer.  in
a9c0: 20 5b 46 54 53 33 5d 20 69 73 20 6f 6d 69 74 74   [FTS3] is omitt
a9d0: 65 64 20 66 72 6f 6d 20 74 68 65 20 62 75 69 6c  ed from the buil
a9e0: 64 20 61 6e 64 20 69 73 20 75 6e 61 76 61 69 6c  d and is unavail
a9f0: 61 62 6c 65 20 74 6f 20 0a 20 20 61 70 70 6c 69  able to .  appli
aa00: 63 61 74 69 6f 6e 73 2e 0a 7d 0a 0a 43 4f 4d 50  cations..}..COMP
aa10: 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49  ILE_OPTION {SQLI
aa20: 54 45 5f 44 49 53 41 42 4c 45 5f 46 54 53 34 5f  TE_DISABLE_FTS4_
aa30: 44 45 46 45 52 52 45 44 7d 20 7b 0a 20 20 49 66  DEFERRED} {.  If
aa40: 20 74 68 69 73 20 43 2d 70 72 65 70 72 6f 63 65   this C-preproce
aa50: 73 73 6f 72 20 6d 61 63 72 6f 20 64 69 73 61 62  ssor macro disab
aa60: 6c 65 73 20 74 68 65 20 22 64 65 66 65 72 72 65  les the "deferre
aa70: 64 20 74 6f 6b 65 6e 22 20 6f 70 74 69 6d 69 7a  d token" optimiz
aa80: 61 74 69 6f 6e 0a 20 20 69 6e 20 5b 46 54 53 34  ation.  in [FTS4
aa90: 5d 2e 20 20 54 68 65 20 22 64 65 66 65 72 72 65  ].  The "deferre
aaa0: 64 20 74 6f 6b 65 6e 22 20 6f 70 74 69 6d 69 7a  d token" optimiz
aab0: 61 74 69 6f 6e 20 61 76 6f 69 64 73 20 6c 6f 61  ation avoids loa
aac0: 64 69 6e 67 20 6d 61 73 73 69 76 65 0a 20 20 70  ding massive.  p
aad0: 6f 73 74 69 6e 67 20 6c 69 73 74 73 20 66 6f 72  osting lists for
aae0: 20 74 65 72 6d 73 20 74 68 61 74 20 61 72 65 20   terms that are 
aaf0: 69 6e 20 6d 6f 73 74 20 64 6f 63 75 6d 65 6e 74  in most document
ab00: 73 20 6f 66 20 74 68 65 20 63 6f 6c 6c 65 63 74  s of the collect
ab10: 69 6f 6e 0a 20 20 61 6e 64 20 69 6e 73 74 65 61  ion.  and instea
ab20: 64 20 73 69 6d 70 6c 79 20 73 63 61 6e 73 20 66  d simply scans f
ab30: 6f 72 20 74 68 6f 73 65 20 74 6f 6b 65 6e 73 20  or those tokens 
ab40: 69 6e 20 74 68 65 20 64 6f 63 75 6d 65 6e 74 20  in the document 
ab50: 73 6f 75 72 63 65 2e 20 20 5b 46 54 53 34 5d 0a  source.  [FTS4].
ab60: 20 20 73 68 6f 75 6c 64 20 67 65 74 20 65 78 61    should get exa
ab70: 63 74 6c 79 20 74 68 65 20 73 61 6d 65 20 61 6e  ctly the same an
ab80: 73 77 65 72 20 62 6f 74 68 20 77 69 74 68 20 61  swer both with a
ab90: 6e 64 20 77 69 74 68 6f 75 74 20 74 68 69 73 20  nd without this 
aba0: 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 2e 0a 7d 0a  optimization..}.
abb0: 3c 2f 74 63 6c 3e 0a 0a 3c 74 63 6c 3e 0a 20 20  </tcl>..<tcl>.  
abc0: 68 64 5f 66 72 61 67 6d 65 6e 74 20 22 6f 6d 69  hd_fragment "omi
abd0: 74 66 65 61 74 75 72 65 73 22 0a 20 20 68 64 5f  tfeatures".  hd_
abe0: 6b 65 79 77 6f 72 64 73 20 22 6f 6d 69 74 66 65  keywords "omitfe
abf0: 61 74 75 72 65 73 22 0a 3c 2f 74 63 6c 3e 0a 3c  atures".</tcl>.<
ac00: 68 31 3e 20 4f 70 74 69 6f 6e 73 20 54 6f 20 4f  h1> Options To O
ac10: 6d 69 74 20 46 65 61 74 75 72 65 73 3c 2f 68 31  mit Features</h1
ac20: 3e 0a 0a 3c 70 3e 54 68 65 20 66 6f 6c 6c 6f 77  >..<p>The follow
ac30: 69 6e 67 20 6f 70 74 69 6f 6e 73 20 63 61 6e 20  ing options can 
ac40: 62 65 20 75 73 65 64 20 74 6f 20 0a 5b 72 65 6c  be used to .[rel
ac50: 66 6f 6f 74 70 72 69 6e 74 20 7c 20 72 65 64 75  footprint | redu
ac60: 63 65 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74  ce the size of t
ac70: 68 65 20 63 6f 6d 70 69 6c 65 64 20 6c 69 62 72  he compiled libr
ac80: 61 72 79 5d 0a 62 79 20 6f 6d 69 74 74 69 6e 67  ary].by omitting
ac90: 20 75 6e 75 73 65 64 20 66 65 61 74 75 72 65 73   unused features
aca0: 2e 20 54 68 69 73 20 69 73 20 70 72 6f 62 61 62  . This is probab
acb0: 6c 79 20 6f 6e 6c 79 20 75 73 65 66 75 6c 0a 69  ly only useful.i
acc0: 6e 20 65 6d 62 65 64 64 65 64 20 73 79 73 74 65  n embedded syste
acd0: 6d 73 20 77 68 65 72 65 20 73 70 61 63 65 20 69  ms where space i
ace0: 73 20 65 73 70 65 63 69 61 6c 6c 79 20 74 69 67  s especially tig
acf0: 68 74 2c 20 61 73 20 65 76 65 6e 20 77 69 74 68  ht, as even with
ad00: 20 61 6c 6c 0a 66 65 61 74 75 72 65 73 20 69 6e   all.features in
ad10: 63 6c 75 64 65 64 20 74 68 65 20 53 51 4c 69 74  cluded the SQLit
ad20: 65 20 6c 69 62 72 61 72 79 20 69 73 20 72 65 6c  e library is rel
ad30: 61 74 69 76 65 6c 79 20 73 6d 61 6c 6c 2e 20 44  atively small. D
ad40: 6f 6e 27 74 20 66 6f 72 67 65 74 0a 74 6f 20 74  on't forget.to t
ad50: 65 6c 6c 20 79 6f 75 72 20 63 6f 6d 70 69 6c 65  ell your compile
ad60: 72 20 74 6f 20 6f 70 74 69 6d 69 7a 65 20 66 6f  r to optimize fo
ad70: 72 20 62 69 6e 61 72 79 20 73 69 7a 65 21 20 28  r binary size! (
ad80: 74 68 65 20 2d 4f 73 20 6f 70 74 69 6f 6e 20 69  the -Os option i
ad90: 66 0a 75 73 69 6e 67 20 47 43 43 29 2e 20 20 54  f.using GCC).  T
ada0: 65 6c 6c 69 6e 67 20 79 6f 75 72 20 63 6f 6d 70  elling your comp
adb0: 69 6c 65 72 20 74 6f 20 6f 70 74 69 6d 69 7a 65  iler to optimize
adc0: 20 66 6f 72 20 73 69 7a 65 20 75 73 75 61 6c 6c   for size usuall
add0: 79 20 68 61 73 0a 61 20 6d 75 63 68 20 6c 61 72  y has.a much lar
ade0: 67 65 72 20 69 6d 70 61 63 74 20 6f 6e 20 6c 69  ger impact on li
adf0: 62 72 61 72 79 20 66 6f 6f 74 70 72 69 6e 74 20  brary footprint 
ae00: 74 68 61 6e 20 65 6d 70 6c 6f 79 69 6e 67 20 61  than employing a
ae10: 6e 79 20 6f 66 20 74 68 65 73 65 0a 63 6f 6d 70  ny of these.comp
ae20: 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73  ile-time options
ae30: 2e 20 20 59 6f 75 20 73 68 6f 75 6c 64 20 61 6c  .  You should al
ae40: 73 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 0a  so verify that .
ae50: 3c 61 20 68 72 65 66 3d 22 23 64 65 62 75 67 6f  <a href="#debugo
ae60: 70 74 69 6f 6e 73 22 3e 64 65 62 75 67 67 69 6e  ptions">debuggin
ae70: 67 20 6f 70 74 69 6f 6e 73 3c 2f 61 3e 20 61 72  g options</a> ar
ae80: 65 20 64 69 73 61 62 6c 65 64 2e 3c 2f 70 3e 0a  e disabled.</p>.
ae90: 0a 3c 70 3e 54 68 65 20 6d 61 63 72 6f 73 20 69  .<p>The macros i
aea0: 6e 20 74 68 69 73 20 73 65 63 74 69 6f 6e 20 64  n this section d
aeb0: 6f 20 6e 6f 74 20 72 65 71 75 69 72 65 20 76 61  o not require va
aec0: 6c 75 65 73 2e 20 54 68 65 20 66 6f 6c 6c 6f 77  lues. The follow
aed0: 69 6e 67 20 0a 63 6f 6d 70 69 6c 61 74 69 6f 6e  ing .compilation
aee0: 20 73 77 69 74 63 68 65 73 20 61 6c 6c 20 68 61   switches all ha
aef0: 76 65 20 74 68 65 20 73 61 6d 65 20 65 66 66 65  ve the same effe
af00: 63 74 3a 3c 62 72 3e 0a 2d 44 53 51 4c 49 54 45  ct:<br>.-DSQLITE
af10: 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c 45  _OMIT_ALTERTABLE
af20: 3c 62 72 3e 0a 2d 44 53 51 4c 49 54 45 5f 4f 4d  <br>.-DSQLITE_OM
af30: 49 54 5f 41 4c 54 45 52 54 41 42 4c 45 3d 31 3c  IT_ALTERTABLE=1<
af40: 62 72 3e 0a 2d 44 53 51 4c 49 54 45 5f 4f 4d 49  br>.-DSQLITE_OMI
af50: 54 5f 41 4c 54 45 52 54 41 42 4c 45 3d 30 0a 3c  T_ALTERTABLE=0.<
af60: 2f 70 3e 0a 0a 3c 70 3e 49 66 20 61 6e 79 20 6f  /p>..<p>If any o
af70: 66 20 74 68 65 73 65 20 6f 70 74 69 6f 6e 73 20  f these options 
af80: 61 72 65 20 64 65 66 69 6e 65 64 2c 20 74 68 65  are defined, the
af90: 6e 20 74 68 65 20 73 61 6d 65 20 73 65 74 20 6f  n the same set o
afa0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 2a 0a  f SQLITE_OMIT_*.
afb0: 6f 70 74 69 6f 6e 73 20 6d 75 73 74 20 61 6c 73  options must als
afc0: 6f 20 62 65 20 64 65 66 69 6e 65 64 20 77 68 65  o be defined whe
afd0: 6e 20 75 73 69 6e 67 20 74 68 65 20 27 6c 65 6d  n using the 'lem
afe0: 6f 6e 27 20 74 6f 6f 6c 20 74 6f 20 67 65 6e 65  on' tool to gene
aff0: 72 61 74 65 20 74 68 65 0a 70 61 72 73 65 2e 63  rate the.parse.c
b000: 20 66 69 6c 65 20 61 6e 64 20 77 68 65 6e 20 63   file and when c
b010: 6f 6d 70 69 6c 69 6e 67 20 74 68 65 20 27 6d 6b  ompiling the 'mk
b020: 6b 65 79 77 6f 72 64 68 61 73 68 27 20 74 6f 6f  keywordhash' too
b030: 6c 20 77 68 69 63 68 20 67 65 6e 65 72 61 74 65  l which generate
b040: 73 20 0a 74 68 65 20 6b 65 79 77 6f 72 64 68 61  s .the keywordha
b050: 73 68 2e 68 20 66 69 6c 65 2e 0a 42 65 63 61 75  sh.h file..Becau
b060: 73 65 20 6f 66 20 74 68 69 73 2c 20 74 68 65 73  se of this, thes
b070: 65 20 6f 70 74 69 6f 6e 73 20 6d 61 79 20 6f 6e  e options may on
b080: 6c 79 20 62 65 20 75 73 65 64 20 77 68 65 6e 20  ly be used when 
b090: 74 68 65 20 6c 69 62 72 61 72 79 20 69 73 20 62  the library is b
b0a0: 75 69 6c 74 0a 66 72 6f 6d 20 63 61 6e 6f 6e 69  uilt.from canoni
b0b0: 63 61 6c 20 73 6f 75 72 63 65 2c 20 6e 6f 74 20  cal source, not 
b0c0: 66 72 6f 6d 20 74 68 65 20 5b 61 6d 61 6c 67 61  from the [amalga
b0d0: 6d 61 74 69 6f 6e 5d 2e 0a 53 6f 6d 65 20 53 51  mation]..Some SQ
b0e0: 4c 49 54 45 5f 4f 4d 49 54 5f 2a 20 6f 70 74 69  LITE_OMIT_* opti
b0f0: 6f 6e 73 20 6d 69 67 68 74 20 77 6f 72 6b 2c 20  ons might work, 
b100: 6f 72 20 61 70 70 65 61 72 20 74 6f 20 77 6f 72  or appear to wor
b110: 6b 2c 20 77 68 65 6e 20 75 73 65 64 20 77 69 74  k, when used wit
b120: 68 0a 74 68 65 20 5b 61 6d 61 6c 67 61 6d 61 74  h.the [amalgamat
b130: 69 6f 6e 5d 2e 20 20 42 75 74 20 74 68 69 73 20  ion].  But this 
b140: 69 73 20 6e 6f 74 20 67 75 61 72 61 6e 74 65 65  is not guarantee
b150: 64 2e 20 20 49 6e 20 67 65 6e 65 72 61 6c 2c 20  d.  In general, 
b160: 61 6c 77 61 79 73 20 63 6f 6d 70 69 6c 65 0a 66  always compile.f
b170: 72 6f 6d 20 63 61 6e 6f 6e 69 63 61 6c 20 73 6f  rom canonical so
b180: 75 72 63 65 73 20 69 6e 20 6f 72 64 65 72 20 74  urces in order t
b190: 6f 20 74 61 6b 65 20 61 64 76 61 6e 74 61 67 65  o take advantage
b1a0: 20 6f 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   of SQLITE_OMIT_
b1b0: 2a 20 6f 70 74 69 6f 6e 73 2e 0a 3c 2f 70 3e 0a  * options..</p>.
b1c0: 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 69  .<blockquote>.<i
b1d0: 3e 3c 62 3e 49 6d 70 6f 72 74 61 6e 74 20 4e 6f  ><b>Important No
b1e0: 74 65 3a 3c 2f 62 3e 20 54 68 65 20 53 51 4c 49  te:</b> The SQLI
b1f0: 54 45 5f 4f 4d 49 54 5f 2a 20 6f 70 74 69 6f 6e  TE_OMIT_* option
b200: 73 20 6d 61 79 20 6e 6f 74 20 77 6f 72 6b 20 77  s may not work w
b210: 69 74 68 20 74 68 65 0a 5b 61 6d 61 6c 67 61 6d  ith the.[amalgam
b220: 61 74 69 6f 6e 5d 2e 20 20 53 51 4c 49 54 45 5f  ation].  SQLITE_
b230: 4f 4d 49 54 5f 2a 20 63 6f 6d 70 69 6c 65 2d 74  OMIT_* compile-t
b240: 69 6d 65 0a 6f 70 74 69 6f 6e 73 20 75 73 75 61  ime.options usua
b250: 6c 6c 79 20 77 6f 72 6b 20 63 6f 72 72 65 63 74  lly work correct
b260: 6c 79 20 6f 6e 6c 79 20 77 68 65 6e 20 53 51 4c  ly only when SQL
b270: 69 74 65 20 69 73 20 62 75 69 6c 74 20 66 72 6f  ite is built fro
b280: 6d 20 63 61 6e 6f 6e 69 63 61 6c 20 0a 73 6f 75  m canonical .sou
b290: 72 63 65 20 66 69 6c 65 73 2e 0a 3c 2f 69 3e 0a  rce files..</i>.
b2a0: 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 0a  </blockquote>...
b2b0: 3c 70 3e 53 70 65 63 69 61 6c 20 76 65 72 73 69  <p>Special versi
b2c0: 6f 6e 73 20 6f 66 20 74 68 65 20 53 51 4c 69 74  ons of the SQLit
b2d0: 65 20 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 20 74  e amalgamation t
b2e0: 68 61 74 20 64 6f 20 77 6f 72 6b 20 77 69 74 68  hat do work with
b2f0: 20 61 0a 70 72 65 64 65 74 65 72 6d 69 6e 65 64   a.predetermined
b300: 20 73 65 74 20 6f 66 20 53 51 4c 49 54 45 5f 4f   set of SQLITE_O
b310: 4d 49 54 5f 2a 20 6f 70 74 69 6f 6e 73 20 63 61  MIT_* options ca
b320: 6e 20 62 65 20 67 65 6e 65 72 61 74 65 64 2e 20  n be generated. 
b330: 20 54 6f 20 64 6f 20 73 6f 2c 0a 6d 61 6b 65 20   To do so,.make 
b340: 61 20 63 6f 70 79 20 6f 66 20 74 68 65 20 4d 61  a copy of the Ma
b350: 6b 65 66 69 6c 65 2e 6c 69 6e 75 78 2d 67 63 63  kefile.linux-gcc
b360: 20 6d 61 6b 65 66 69 6c 65 20 74 65 6d 70 6c 61   makefile templa
b370: 74 65 20 69 6e 20 74 68 65 20 63 61 6e 6f 6e 69  te in the canoni
b380: 63 61 6c 0a 73 6f 75 72 63 65 20 63 6f 64 65 20  cal.source code 
b390: 64 69 73 74 72 69 62 75 74 69 6f 6e 2e 20 20 43  distribution.  C
b3a0: 68 61 6e 67 65 20 74 68 65 20 6e 61 6d 65 20 6f  hange the name o
b3b0: 66 20 79 6f 75 72 20 63 6f 70 79 20 74 6f 20 73  f your copy to s
b3c0: 69 6d 70 6c 79 20 22 4d 61 6b 65 66 69 6c 65 22  imply "Makefile"
b3d0: 2e 0a 54 68 65 6e 20 65 64 69 74 20 22 4d 61 6b  ..Then edit "Mak
b3e0: 65 66 69 6c 65 22 20 74 6f 20 73 65 74 20 75 70  efile" to set up
b3f0: 20 61 70 70 72 6f 70 72 69 61 74 65 20 63 6f 6d   appropriate com
b400: 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
b410: 73 2e 20 20 54 68 65 6e 0a 74 79 70 65 3a 0a 3c  s.  Then.type:.<
b420: 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 74 74 3e 6d  blockquote><tt>m
b430: 61 6b 65 20 63 6c 65 61 6e 3b 20 6d 61 6b 65 20  ake clean; make 
b440: 73 71 6c 69 74 65 33 2e 63 3c 2f 74 74 3e 3c 2f  sqlite3.c</tt></
b450: 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 54 68 65 20  blockquote>.The 
b460: 72 65 73 75 6c 74 69 6e 67 20 22 73 71 6c 69 74  resulting "sqlit
b470: 65 33 2e 63 22 20 61 6d 61 6c 67 61 6d 61 74 69  e3.c" amalgamati
b480: 6f 6e 20 63 6f 64 65 20 66 69 6c 65 20 28 61 6e  on code file (an
b490: 64 20 69 74 73 20 61 73 73 6f 63 69 61 74 65 64  d its associated
b4a0: 0a 68 65 61 64 65 72 20 66 69 6c 65 20 22 73 71  .header file "sq
b4b0: 6c 69 74 65 33 2e 68 22 29 20 63 61 6e 20 74 68  lite3.h") can th
b4c0: 65 6e 20 62 65 20 6d 6f 76 65 64 20 74 6f 20 61  en be moved to a
b4d0: 20 6e 6f 6e 2d 75 6e 69 78 20 70 6c 61 74 66 6f   non-unix platfo
b4e0: 72 6d 0a 66 6f 72 20 66 69 6e 61 6c 20 63 6f 6d  rm.for final com
b4f0: 70 69 6c 61 74 69 6f 6e 20 75 73 69 6e 67 20 61  pilation using a
b500: 20 6e 61 74 69 76 65 20 63 6f 6d 70 69 6c 65 72   native compiler
b510: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 53 51  .</p>..<p>The SQ
b520: 4c 49 54 45 5f 4f 4d 49 54 5f 2a 20 6f 70 74 69  LITE_OMIT_* opti
b530: 6f 6e 73 20 61 72 65 20 75 6e 73 75 70 70 6f 72  ons are unsuppor
b540: 74 65 64 2e 20 20 42 79 20 74 68 69 73 20 77 65  ted.  By this we
b550: 20 6d 65 61 6e 20 74 68 61 74 0a 61 6e 20 53 51   mean that.an SQ
b560: 4c 49 54 45 5f 4f 4d 49 54 5f 2a 20 6f 70 74 69  LITE_OMIT_* opti
b570: 6f 6e 20 74 68 61 74 20 6f 6d 69 74 73 20 63 6f  on that omits co
b580: 64 65 20 66 72 6f 6d 20 74 68 65 20 62 75 69 6c  de from the buil
b590: 64 20 69 6e 20 74 68 65 20 63 75 72 72 65 6e 74  d in the current
b5a0: 0a 72 65 6c 65 61 73 65 20 6d 69 67 68 74 20 62  .release might b
b5b0: 65 63 6f 6d 65 20 61 20 6e 6f 2d 6f 70 20 69 6e  ecome a no-op in
b5c0: 20 74 68 65 20 6e 65 78 74 20 72 65 6c 65 61 73   the next releas
b5d0: 65 2e 20 20 4f 72 20 74 68 65 20 6f 74 68 65 72  e.  Or the other
b5e0: 20 77 61 79 20 61 72 6f 75 6e 64 3a 0a 61 6e 20   way around:.an 
b5f0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 2a 20 74 68  SQLITE_OMIT_* th
b600: 61 74 20 69 73 20 61 20 6e 6f 2d 6f 70 20 69 6e  at is a no-op in
b610: 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 65 6c   the current rel
b620: 65 61 73 65 20 6d 69 67 68 74 20 63 61 75 73 65  ease might cause
b630: 20 63 6f 64 65 0a 74 6f 20 62 65 20 65 78 63 6c   code.to be excl
b640: 75 64 65 64 20 69 6e 20 74 68 65 20 6e 65 78 74  uded in the next
b650: 20 72 65 6c 65 61 73 65 2e 20 20 41 6c 73 6f 2c   release.  Also,
b660: 20 6e 6f 74 20 61 6c 6c 20 53 51 4c 49 54 45 5f   not all SQLITE_
b670: 4f 4d 49 54 5f 2a 20 6f 70 74 69 6f 6e 73 0a 61  OMIT_* options.a
b680: 72 65 20 74 65 73 74 65 64 2e 20 20 53 6f 6d 65  re tested.  Some
b690: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 2a 20 6f   SQLITE_OMIT_* o
b6a0: 70 74 69 6f 6e 73 20 6d 69 67 68 74 20 63 61 75  ptions might cau
b6b0: 73 65 20 53 51 4c 69 74 65 20 74 6f 20 6d 61 6c  se SQLite to mal
b6c0: 66 75 6e 63 74 69 6f 6e 0a 61 6e 64 2f 6f 72 20  function.and/or 
b6d0: 70 72 6f 76 69 64 65 20 69 6e 63 6f 72 72 65 63  provide incorrec
b6e0: 74 20 61 6e 73 77 65 72 73 2e 0a 0a 3c 62 6c 6f  t answers...<blo
b6f0: 63 6b 71 75 6f 74 65 3e 0a 3c 69 3e 3c 62 3e 49  ckquote>.<i><b>I
b700: 6d 70 6f 72 74 61 6e 74 20 4e 6f 74 65 3a 3c 2f  mportant Note:</
b710: 62 3e 0a 54 68 65 20 53 51 4c 49 54 45 5f 4f 4d  b>.The SQLITE_OM
b720: 49 54 5f 2a 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  IT_* compile-tim
b730: 65 20 6f 70 74 69 6f 6e 73 20 61 72 65 20 75 6e  e options are un
b740: 73 75 70 70 6f 72 74 65 64 2e 0a 3c 2f 69 3e 3c  supported..</i><
b750: 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 74  /blockquote>..<t
b760: 63 6c 3e 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49  cl>.COMPILE_OPTI
b770: 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ON {SQLITE_OMIT_
b780: 41 4c 54 45 52 54 41 42 4c 45 7d 20 7b 0a 20 20  ALTERTABLE} {.  
b790: 57 68 65 6e 20 74 68 69 73 20 6f 70 74 69 6f 6e  When this option
b7a0: 20 69 73 20 64 65 66 69 6e 65 64 2c 20 74 68 65   is defined, the
b7b0: 20 0a 20 20 5b 41 4c 54 45 52 20 54 41 42 4c 45   .  [ALTER TABLE
b7c0: 5d 20 63 6f 6d 6d 61 6e 64 20 69 73 20 6e 6f 74  ] command is not
b7d0: 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 74 68 65   included in the
b7e0: 20 0a 20 20 6c 69 62 72 61 72 79 2e 20 45 78 65   .  library. Exe
b7f0: 63 75 74 69 6e 67 20 61 6e 20 5b 41 4c 54 45 52  cuting an [ALTER
b800: 20 54 41 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e   TABLE] statemen
b810: 74 20 63 61 75 73 65 73 20 61 20 70 61 72 73 65  t causes a parse
b820: 20 65 72 72 6f 72 2e 0a 7d 0a 0a 43 4f 4d 50 49   error..}..COMPI
b830: 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54  LE_OPTION {SQLIT
b840: 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45 7d 20  E_OMIT_ANALYZE} 
b850: 7b 0a 20 20 57 68 65 6e 20 74 68 69 73 20 6f 70  {.  When this op
b860: 74 69 6f 6e 20 69 73 20 64 65 66 69 6e 65 64 2c  tion is defined,
b870: 20 74 68 65 20 5b 41 4e 41 4c 59 5a 45 5d 20 63   the [ANALYZE] c
b880: 6f 6d 6d 61 6e 64 20 69 73 20 6f 6d 69 74 74 65  ommand is omitte
b890: 64 20 66 72 6f 6d 0a 20 20 74 68 65 20 62 75 69  d from.  the bui
b8a0: 6c 64 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f  ld..}..COMPILE_O
b8b0: 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d  PTION {SQLITE_OM
b8c0: 49 54 5f 41 54 54 41 43 48 7d 20 7b 0a 20 20 57  IT_ATTACH} {.  W
b8d0: 68 65 6e 20 74 68 69 73 20 6f 70 74 69 6f 6e 20  hen this option 
b8e0: 69 73 20 64 65 66 69 6e 65 64 2c 20 74 68 65 20  is defined, the 
b8f0: 5b 41 54 54 41 43 48 5d 20 61 6e 64 20 5b 44 45  [ATTACH] and [DE
b900: 54 41 43 48 5d 20 63 6f 6d 6d 61 6e 64 73 20 61  TACH] commands a
b910: 72 65 0a 20 20 6f 6d 69 74 74 65 64 20 66 72 6f  re.  omitted fro
b920: 6d 20 74 68 65 20 62 75 69 6c 64 2e 0a 7d 0a 0a  m the build..}..
b930: 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b  COMPILE_OPTION {
b940: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48  SQLITE_OMIT_AUTH
b950: 4f 52 49 5a 41 54 49 4f 4e 7d 20 7b 0a 20 20 44  ORIZATION} {.  D
b960: 65 66 69 6e 69 6e 67 20 74 68 69 73 20 6f 70 74  efining this opt
b970: 69 6f 6e 20 6f 6d 69 74 73 20 74 68 65 20 61 75  ion omits the au
b980: 74 68 6f 72 69 7a 61 74 69 6f 6e 20 63 61 6c 6c  thorization call
b990: 62 61 63 6b 20 66 65 61 74 75 72 65 20 66 72 6f  back feature fro
b9a0: 6d 20 74 68 65 0a 20 20 6c 69 62 72 61 72 79 2e  m the.  library.
b9b0: 20 54 68 65 20 5b 73 71 6c 69 74 65 33 5f 73 65   The [sqlite3_se
b9c0: 74 5f 61 75 74 68 6f 72 69 7a 65 72 28 29 5d 20  t_authorizer()] 
b9d0: 41 50 49 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  API function is 
b9e0: 6e 6f 74 20 70 72 65 73 65 6e 74 0a 20 20 69 6e  not present.  in
b9f0: 20 74 68 65 20 6c 69 62 72 61 72 79 2e 0a 7d 0a   the library..}.
ba00: 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20  .COMPILE_OPTION 
ba10: 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54  {SQLITE_OMIT_AUT
ba20: 4f 49 4e 43 52 45 4d 45 4e 54 7d 20 7b 0a 20 20  OINCREMENT} {.  
ba30: 54 68 69 73 20 6f 70 74 69 6f 6e 20 69 73 20 75  This option is u
ba40: 73 65 64 20 74 6f 20 6f 6d 69 74 20 74 68 65 20  sed to omit the 
ba50: 0a 20 20 5b 41 55 54 4f 49 4e 43 52 45 4d 45 4e  .  [AUTOINCREMEN
ba60: 54 5d 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79  T] functionality
ba70: 2e 20 57 68 65 6e 20 74 68 69 73 20 0a 20 20 69  . When this .  i
ba80: 73 20 6d 61 63 72 6f 20 69 73 20 64 65 66 69 6e  s macro is defin
ba90: 65 64 2c 20 63 6f 6c 75 6d 6e 73 20 64 65 63 6c  ed, columns decl
baa0: 61 72 65 64 20 61 73 20 0a 20 20 22 5b 49 4e 54  ared as .  "[INT
bab0: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
bac0: 5d 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 22  ] AUTOINCREMENT"
bad0: 0a 20 20 62 65 68 61 76 65 20 69 6e 20 74 68 65  .  behave in the
bae0: 20 73 61 6d 65 20 77 61 79 20 61 73 20 63 6f 6c   same way as col
baf0: 75 6d 6e 73 20 64 65 63 6c 61 72 65 64 20 61 73  umns declared as
bb00: 20 22 5b 49 4e 54 45 47 45 52 20 50 52 49 4d 41   "[INTEGER PRIMA
bb10: 52 59 20 4b 45 59 5d 22 20 77 68 65 6e 20 61 20  RY KEY]" when a 
bb20: 0a 20 20 4e 55 4c 4c 20 69 73 20 69 6e 73 65 72  .  NULL is inser
bb30: 74 65 64 2e 20 54 68 65 20 73 71 6c 69 74 65 5f  ted. The sqlite_
bb40: 73 65 71 75 65 6e 63 65 20 73 79 73 74 65 6d 20  sequence system 
bb50: 74 61 62 6c 65 20 69 73 20 6e 65 69 74 68 65 72  table is neither
bb60: 20 63 72 65 61 74 65 64 2c 20 6e 6f 72 0a 20 20   created, nor.  
bb70: 72 65 73 70 65 63 74 65 64 20 69 66 20 69 74 20  respected if it 
bb80: 61 6c 72 65 61 64 79 20 65 78 69 73 74 73 2e 0a  already exists..
bb90: 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f  }..COMPILE_OPTIO
bba0: 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  N {SQLITE_OMIT_A
bbb0: 55 54 4f 49 4e 49 54 7d 20 7b 0a 20 20 46 6f 72  UTOINIT} {.  For
bbc0: 20 62 61 63 6b 77 61 72 64 73 20 63 6f 6d 70 61   backwards compa
bbd0: 74 69 62 69 6c 69 74 79 20 77 69 74 68 20 6f 6c  tibility with ol
bbe0: 64 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66 20  der versions of 
bbf0: 53 51 4c 69 74 65 20 74 68 61 74 20 6c 61 63 6b  SQLite that lack
bc00: 0a 20 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f  .  the [sqlite3_
bc10: 69 6e 69 74 69 61 6c 69 7a 65 28 29 5d 20 69 6e  initialize()] in
bc20: 74 65 72 66 61 63 65 2c 20 74 68 65 20 5b 73 71  terface, the [sq
bc30: 6c 69 74 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65  lite3_initialize
bc40: 28 29 5d 20 69 6e 74 65 72 66 61 63 65 0a 20 20  ()] interface.  
bc50: 69 73 20 63 61 6c 6c 65 64 20 61 75 74 6f 6d 61  is called automa
bc60: 74 69 63 61 6c 6c 79 20 75 70 6f 6e 20 65 6e 74  tically upon ent
bc70: 72 79 20 74 6f 20 63 65 72 74 61 69 6e 20 6b 65  ry to certain ke
bc80: 79 20 69 6e 74 65 72 66 61 63 65 73 20 73 75 63  y interfaces suc
bc90: 68 20 61 73 0a 20 20 5b 73 71 6c 69 74 65 33 5f  h as.  [sqlite3_
bca0: 6f 70 65 6e 28 29 5d 2c 20 5b 73 71 6c 69 74 65  open()], [sqlite
bcb0: 33 5f 76 66 73 5f 72 65 67 69 73 74 65 72 28 29  3_vfs_register()
bcc0: 5d 2c 20 61 6e 64 20 5b 73 71 6c 69 74 65 33 5f  ], and [sqlite3_
bcd0: 6d 70 72 69 6e 74 66 28 29 5d 2e 0a 20 20 54 68  mprintf()]..  Th
bce0: 65 20 6f 76 65 72 68 65 61 64 20 6f 66 20 69 6e  e overhead of in
bcf0: 76 6f 6b 69 6e 67 20 5b 73 71 6c 69 74 65 33 5f  voking [sqlite3_
bd00: 69 6e 69 74 69 61 6c 69 7a 65 28 29 5d 20 61 75  initialize()] au
bd10: 74 6f 6d 61 74 69 63 61 6c 6c 79 20 69 6e 20 74  tomatically in t
bd20: 68 69 73 0a 20 20 77 61 79 20 6d 61 79 20 62 65  his.  way may be
bd30: 20 6f 6d 69 74 74 65 64 20 62 79 20 62 75 69 6c   omitted by buil
bd40: 64 69 6e 67 20 53 51 4c 69 74 65 20 77 69 74 68  ding SQLite with
bd50: 20 74 68 65 20 53 51 4c 49 54 45 5f 4f 4d 49 54   the SQLITE_OMIT
bd60: 5f 41 55 54 4f 49 4e 49 54 0a 20 20 43 2d 70 72  _AUTOINIT.  C-pr
bd70: 65 70 72 6f 63 65 73 73 6f 72 20 6d 61 63 72 6f  eprocessor macro
bd80: 2e 20 20 57 68 65 6e 20 62 75 69 6c 74 20 75 73  .  When built us
bd90: 69 6e 67 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ing SQLITE_OMIT_
bda0: 41 55 54 4f 49 4e 49 54 2c 20 53 51 4c 69 74 65  AUTOINIT, SQLite
bdb0: 0a 20 20 77 69 6c 6c 20 6e 6f 74 20 61 75 74 6f  .  will not auto
bdc0: 6d 61 74 69 63 61 6c 6c 79 20 69 6e 69 74 69 61  matically initia
bdd0: 6c 69 7a 65 20 69 74 73 65 6c 66 20 61 6e 64 20  lize itself and 
bde0: 74 68 65 20 61 70 70 6c 69 63 61 74 69 6f 6e 20  the application 
bdf0: 69 73 20 72 65 71 75 69 72 65 64 0a 20 20 74 6f  is required.  to
be00: 20 69 6e 76 6f 6b 65 20 5b 73 71 6c 69 74 65 33   invoke [sqlite3
be10: 5f 69 6e 69 74 69 61 6c 69 7a 65 28 29 5d 20 64  _initialize()] d
be20: 69 72 65 63 74 6c 79 20 70 72 69 6f 72 20 74 6f  irectly prior to
be30: 20 62 65 67 69 6e 6e 69 6e 67 20 75 73 65 20 6f   beginning use o
be40: 66 20 74 68 65 0a 20 20 53 51 4c 69 74 65 20 6c  f the.  SQLite l
be50: 69 62 72 61 72 79 2e 0a 7d 0a 0a 43 4f 4d 50 49  ibrary..}..COMPI
be60: 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54  LE_OPTION {SQLIT
be70: 45 5f 4f 4d 49 54 5f 41 55 54 4f 4d 41 54 49 43  E_OMIT_AUTOMATIC
be80: 5f 49 4e 44 45 58 7d 20 7b 0a 20 20 54 68 69 73  _INDEX} {.  This
be90: 20 6f 70 74 69 6f 6e 20 69 73 20 75 73 65 64 20   option is used 
bea0: 74 6f 20 6f 6d 69 74 20 74 68 65 20 0a 20 20 5b  to omit the .  [
beb0: 61 75 74 6f 6d 61 74 69 63 20 69 6e 64 65 78 69  automatic indexi
bec0: 6e 67 5d 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74  ng] functionalit
bed0: 79 2e 0a 20 20 53 65 65 20 61 6c 73 6f 3a 20 5b  y..  See also: [
bee0: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 41  SQLITE_DEFAULT_A
bef0: 55 54 4f 4d 41 54 49 43 5f 49 4e 44 45 58 5d 2e  UTOMATIC_INDEX].
bf00: 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49  .}..COMPILE_OPTI
bf10: 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ON {SQLITE_OMIT_
bf20: 41 55 54 4f 52 45 53 45 54 7d 20 7b 0a 20 20 42  AUTORESET} {.  B
bf30: 79 20 64 65 66 61 75 6c 74 2c 20 74 68 65 20 5b  y default, the [
bf40: 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 5d 20  sqlite3_step()] 
bf50: 69 6e 74 65 72 66 61 63 65 20 77 69 6c 6c 20 61  interface will a
bf60: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 69 6e 76  utomatically inv
bf70: 6f 6b 65 0a 20 20 5b 73 71 6c 69 74 65 33 5f 72  oke.  [sqlite3_r
bf80: 65 73 65 74 28 29 5d 20 74 6f 20 72 65 73 65 74  eset()] to reset
bf90: 20 74 68 65 20 5b 70 72 65 70 61 72 65 64 20 73   the [prepared s
bfa0: 74 61 74 65 6d 65 6e 74 5d 20 69 66 20 6e 65 63  tatement] if nec
bfb0: 65 73 73 61 72 79 2e 20 20 54 68 69 73 0a 20 20  essary.  This.  
bfc0: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74  compile-time opt
bfd0: 69 6f 6e 20 63 68 61 6e 67 65 73 20 74 68 61 74  ion changes that
bfe0: 20 62 65 68 61 76 69 6f 72 20 73 6f 20 74 68 61   behavior so tha
bff0: 74 20 5b 73 71 6c 69 74 65 33 5f 73 74 65 70 28  t [sqlite3_step(
c000: 29 5d 20 77 69 6c 6c 0a 20 20 72 65 74 75 72 6e  )] will.  return
c010: 20 5b 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 5d   [SQLITE_MISUSE]
c020: 20 69 66 20 69 74 20 63 61 6c 6c 65 64 20 61 67   if it called ag
c030: 61 69 6e 20 61 66 74 65 72 20 72 65 74 75 72 6e  ain after return
c040: 69 6e 67 20 61 6e 79 74 68 69 6e 67 20 6f 74 68  ing anything oth
c050: 65 72 0a 20 20 74 68 61 6e 20 5b 53 51 4c 49 54  er.  than [SQLIT
c060: 45 5f 52 4f 57 5d 2c 20 5b 53 51 4c 49 54 45 5f  E_ROW], [SQLITE_
c070: 42 55 53 59 5d 2c 20 6f 72 20 5b 53 51 4c 49 54  BUSY], or [SQLIT
c080: 45 5f 4c 4f 43 4b 45 44 5d 20 75 6e 6c 65 73 73  E_LOCKED] unless
c090: 20 74 68 65 72 65 20 77 61 73 20 61 6e 0a 20 20   there was an.  
c0a0: 69 6e 74 65 72 76 65 6e 69 6e 67 20 63 61 6c 6c  intervening call
c0b0: 20 74 6f 20 5b 73 71 6c 69 74 65 33 5f 72 65 73   to [sqlite3_res
c0c0: 65 74 28 29 5d 2e 0a 0a 20 20 49 6e 20 53 51 4c  et()]...  In SQL
c0d0: 69 74 65 20 76 65 72 73 69 6f 6e 20 33 2e 36 2e  ite version 3.6.
c0e0: 32 33 2e 31 20 61 6e 64 20 65 61 72 6c 69 65 72  23.1 and earlier
c0f0: 2c 20 5b 73 71 6c 69 74 65 33 5f 73 74 65 70 28  , [sqlite3_step(
c100: 29 5d 20 75 73 65 64 20 74 6f 20 61 6c 77 61 79  )] used to alway
c110: 73 0a 20 20 72 65 74 75 72 6e 20 5b 53 51 4c 49  s.  return [SQLI
c120: 54 45 5f 4d 49 53 55 53 45 5d 20 69 66 20 69 74  TE_MISUSE] if it
c130: 20 77 61 73 20 69 6e 76 6f 6b 65 64 20 61 67 61   was invoked aga
c140: 69 6e 20 61 66 74 65 72 20 72 65 74 75 72 6e 69  in after returni
c150: 6e 67 20 61 6e 79 74 68 69 6e 67 0a 20 20 6f 74  ng anything.  ot
c160: 68 65 72 20 74 68 61 6e 20 5b 53 51 4c 49 54 45  her than [SQLITE
c170: 5f 52 4f 57 5d 20 77 69 74 68 6f 75 74 20 61 6e  _ROW] without an
c180: 20 69 6e 74 65 72 76 65 6e 69 6e 67 20 63 61 6c   intervening cal
c190: 6c 20 74 6f 20 5b 73 71 6c 69 74 65 33 5f 72 65  l to [sqlite3_re
c1a0: 73 65 74 28 29 5d 2e 0a 20 20 54 68 69 73 20 63  set()]..  This c
c1b0: 61 75 73 65 64 20 70 72 6f 62 6c 65 6d 73 20 6f  aused problems o
c1c0: 6e 20 73 6f 6d 65 20 70 6f 6f 72 6c 79 20 77 72  n some poorly wr
c1d0: 69 74 74 65 6e 20 73 6d 61 72 74 70 68 6f 6e 65  itten smartphone
c1e0: 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 20 77 68   applications wh
c1f0: 69 63 68 0a 20 20 64 69 64 20 6e 6f 74 20 63 6f  ich.  did not co
c200: 72 72 65 63 74 6c 79 20 68 61 6e 64 6c 65 20 74  rrectly handle t
c210: 68 65 20 5b 53 51 4c 49 54 45 5f 4c 4f 43 4b 45  he [SQLITE_LOCKE
c220: 44 5d 20 61 6e 64 20 5b 53 51 4c 49 54 45 5f 42  D] and [SQLITE_B
c230: 55 53 59 5d 20 65 72 72 6f 72 20 0a 20 20 72 65  USY] error .  re
c240: 74 75 72 6e 73 2e 20 20 52 61 74 68 65 72 20 74  turns.  Rather t
c250: 68 61 6e 20 66 69 78 20 74 68 65 20 6d 61 6e 79  han fix the many
c260: 20 64 65 66 65 63 74 69 76 65 20 73 6d 61 72 74   defective smart
c270: 70 68 6f 6e 65 20 61 70 70 6c 69 63 61 74 69 6f  phone applicatio
c280: 6e 73 2c 20 0a 20 20 74 68 65 20 62 65 68 61 76  ns, .  the behav
c290: 69 6f 72 20 6f 66 20 53 51 4c 69 74 65 20 77 61  ior of SQLite wa
c2a0: 73 20 63 68 61 6e 67 65 64 20 69 6e 20 33 2e 36  s changed in 3.6
c2b0: 2e 32 33 2e 32 20 74 6f 20 61 75 74 6f 6d 61 74  .23.2 to automat
c2c0: 69 63 61 6c 6c 79 20 72 65 73 65 74 0a 20 20 74  ically reset.  t
c2d0: 68 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74  he prepared stat
c2e0: 65 6d 65 6e 74 2e 20 20 42 75 74 20 74 68 61 74  ement.  But that
c2f0: 20 63 68 61 6e 67 65 64 20 63 61 75 73 65 64 20   changed caused 
c300: 69 73 73 75 65 73 20 69 6e 20 6f 74 68 65 72 20  issues in other 
c310: 0a 20 20 69 6d 70 72 6f 70 65 72 6c 79 20 69 6d  .  improperly im
c320: 70 6c 65 6d 65 6e 74 65 64 20 61 70 70 6c 69 63  plemented applic
c330: 61 74 69 6f 6e 73 20 74 68 61 74 20 77 65 72 65  ations that were
c340: 20 61 63 74 75 61 6c 6c 79 20 6c 6f 6f 6b 69 6e   actually lookin
c350: 67 0a 20 20 66 6f 72 20 61 6e 20 5b 53 51 4c 49  g.  for an [SQLI
c360: 54 45 5f 4d 49 53 55 53 45 5d 20 72 65 74 75 72  TE_MISUSE] retur
c370: 6e 20 74 6f 20 74 65 72 6d 69 6e 61 74 65 20 74  n to terminate t
c380: 68 65 69 72 20 71 75 65 72 79 20 6c 6f 6f 70 73  heir query loops
c390: 2e 20 20 28 41 6e 79 74 69 6d 65 0a 20 20 61 6e  .  (Anytime.  an
c3a0: 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 67 65 74   application get
c3b0: 73 20 61 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55  s an SQLITE_MISU
c3c0: 53 45 20 65 72 72 6f 72 20 63 6f 64 65 20 66 72  SE error code fr
c3d0: 6f 6d 20 53 51 4c 69 74 65 2c 20 74 68 61 74 20  om SQLite, that 
c3e0: 6d 65 61 6e 73 20 74 68 65 0a 20 20 61 70 70 6c  means the.  appl
c3f0: 69 63 61 74 69 6f 6e 20 69 73 20 6d 69 73 75 73  ication is misus
c400: 69 6e 67 20 74 68 65 20 53 51 4c 69 74 65 20 69  ing the SQLite i
c410: 6e 74 65 72 66 61 63 65 20 61 6e 64 20 69 73 20  nterface and is 
c420: 74 68 75 73 20 69 6e 63 6f 72 72 65 63 74 6c 79  thus incorrectly
c430: 0a 20 20 69 6d 70 6c 65 6d 65 6e 74 65 64 2e 29  .  implemented.)
c440: 20 20 54 68 65 20 53 51 4c 49 54 45 5f 4f 4d 49    The SQLITE_OMI
c450: 54 5f 41 55 54 4f 52 45 53 45 54 20 69 6e 74 65  T_AUTORESET inte
c460: 72 66 61 63 65 20 77 61 73 20 61 64 64 65 64 20  rface was added 
c470: 74 6f 20 53 51 4c 69 74 65 0a 20 20 76 65 72 73  to SQLite.  vers
c480: 69 6f 6e 20 33 2e 37 2e 35 20 69 6e 20 61 6e 20  ion 3.7.5 in an 
c490: 65 66 66 6f 72 74 20 74 6f 20 67 65 74 20 61 6c  effort to get al
c4a0: 6c 20 6f 66 20 74 68 65 20 28 62 72 6f 6b 65 6e  l of the (broken
c4b0: 29 0a 20 20 61 70 70 6c 69 63 61 74 69 6f 6e 73  ).  applications
c4c0: 20 74 6f 20 77 6f 72 6b 20 61 67 61 69 6e 20 77   to work again w
c4d0: 69 74 68 6f 75 74 20 68 61 76 69 6e 67 20 74 6f  ithout having to
c4e0: 20 61 63 74 75 61 6c 6c 79 20 66 69 78 20 74 68   actually fix th
c4f0: 65 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 2e 0a  e applications..
c500: 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f  }..COMPILE_OPTIO
c510: 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  N {SQLITE_OMIT_A
c520: 55 54 4f 56 41 43 55 55 4d 7d 20 7b 0a 20 20 49  UTOVACUUM} {.  I
c530: 66 20 74 68 69 73 20 6f 70 74 69 6f 6e 20 69 73  f this option is
c540: 20 64 65 66 69 6e 65 64 2c 20 74 68 65 20 6c 69   defined, the li
c550: 62 72 61 72 79 20 63 61 6e 6e 6f 74 20 63 72 65  brary cannot cre
c560: 61 74 65 20 6f 72 20 77 72 69 74 65 20 74 6f 20  ate or write to 
c570: 0a 20 20 64 61 74 61 62 61 73 65 73 20 74 68 61  .  databases tha
c580: 74 20 73 75 70 70 6f 72 74 20 5b 61 75 74 6f 5f  t support [auto_
c590: 76 61 63 75 75 6d 5d 2e 0a 20 20 45 78 65 63 75  vacuum]..  Execu
c5a0: 74 69 6e 67 20 61 20 5b 50 52 41 47 4d 41 20 61  ting a [PRAGMA a
c5b0: 75 74 6f 5f 76 61 63 75 75 6d 5d 20 73 74 61 74  uto_vacuum] stat
c5c0: 65 6d 65 6e 74 20 69 73 20 6e 6f 74 20 61 6e 20  ement is not an 
c5d0: 65 72 72 6f 72 0a 20 20 28 73 69 6e 63 65 20 75  error.  (since u
c5e0: 6e 6b 6e 6f 77 6e 20 50 52 41 47 4d 41 73 20 61  nknown PRAGMAs a
c5f0: 72 65 20 73 69 6c 65 6e 74 6c 79 20 69 67 6e 6f  re silently igno
c600: 72 65 64 29 2c 20 62 75 74 20 64 6f 65 73 20 6e  red), but does n
c610: 6f 74 20 72 65 74 75 72 6e 20 61 20 76 61 6c 75  ot return a valu
c620: 65 0a 20 20 6f 72 20 6d 6f 64 69 66 79 20 74 68  e.  or modify th
c630: 65 20 61 75 74 6f 2d 76 61 63 75 75 6d 20 66 6c  e auto-vacuum fl
c640: 61 67 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ag in the databa
c650: 73 65 20 66 69 6c 65 2e 20 49 66 20 61 20 64 61  se file. If a da
c660: 74 61 62 61 73 65 20 74 68 61 74 0a 20 20 73 75  tabase that.  su
c670: 70 70 6f 72 74 73 20 61 75 74 6f 2d 76 61 63 75  pports auto-vacu
c680: 75 6d 20 69 73 20 6f 70 65 6e 65 64 20 62 79 20  um is opened by 
c690: 61 20 6c 69 62 72 61 72 79 20 63 6f 6d 70 69 6c  a library compil
c6a0: 65 64 20 77 69 74 68 20 74 68 69 73 20 6f 70 74  ed with this opt
c6b0: 69 6f 6e 2c 20 69 74 0a 20 20 69 73 20 61 75 74  ion, it.  is aut
c6c0: 6f 6d 61 74 69 63 61 6c 6c 79 20 6f 70 65 6e 65  omatically opene
c6d0: 64 20 69 6e 20 72 65 61 64 2d 6f 6e 6c 79 20 6d  d in read-only m
c6e0: 6f 64 65 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f  ode..}..COMPILE_
c6f0: 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f  OPTION {SQLITE_O
c700: 4d 49 54 5f 42 45 54 57 45 45 4e 5f 4f 50 54 49  MIT_BETWEEN_OPTI
c710: 4d 49 5a 41 54 49 4f 4e 7d 20 7b 0a 20 20 54 68  MIZATION} {.  Th
c720: 69 73 20 6f 70 74 69 6f 6e 20 64 69 73 61 62 6c  is option disabl
c730: 65 73 20 74 68 65 20 75 73 65 20 6f 66 20 69 6e  es the use of in
c740: 64 69 63 65 73 20 77 69 74 68 20 57 48 45 52 45  dices with WHERE
c750: 20 63 6c 61 75 73 65 20 74 65 72 6d 73 0a 20 20   clause terms.  
c760: 74 68 61 74 20 65 6d 70 6c 6f 79 20 74 68 65 20  that employ the 
c770: 42 45 54 57 45 45 4e 20 6f 70 65 72 61 74 6f 72  BETWEEN operator
c780: 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54  ..}..COMPILE_OPT
c790: 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54  ION {SQLITE_OMIT
c7a0: 5f 42 4c 4f 42 5f 4c 49 54 45 52 41 4c 7d 20 7b  _BLOB_LITERAL} {
c7b0: 0a 20 20 57 68 65 6e 20 74 68 69 73 20 6f 70 74  .  When this opt
c7c0: 69 6f 6e 20 69 73 20 64 65 66 69 6e 65 64 2c 20  ion is defined, 
c7d0: 69 74 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62  it is not possib
c7e0: 6c 65 20 74 6f 20 73 70 65 63 69 66 79 20 61 20  le to specify a 
c7f0: 62 6c 6f 62 20 69 6e 0a 20 20 61 6e 20 53 51 4c  blob in.  an SQL
c800: 20 73 74 61 74 65 6d 65 6e 74 20 75 73 69 6e 67   statement using
c810: 20 74 68 65 20 58 27 41 42 43 44 27 20 73 79 6e   the X'ABCD' syn
c820: 74 61 78 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f  tax..}..COMPILE_
c830: 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f  OPTION {SQLITE_O
c840: 4d 49 54 5f 42 54 52 45 45 43 4f 55 4e 54 7d 20  MIT_BTREECOUNT} 
c850: 7b 0a 20 20 57 68 65 6e 20 74 68 69 73 20 6f 70  {.  When this op
c860: 74 69 6f 6e 20 69 73 20 64 65 66 69 6e 65 64 2c  tion is defined,
c870: 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e   an optimization
c880: 20 74 68 61 74 20 61 63 63 65 6c 65 72 61 74 65   that accelerate
c890: 73 20 63 6f 75 6e 74 69 6e 67 0a 20 20 61 6c 6c  s counting.  all
c8a0: 20 65 6e 74 72 69 65 73 20 69 6e 20 61 20 74 61   entries in a ta
c8b0: 62 6c 65 20 28 69 6e 20 6f 74 68 65 72 20 77 6f  ble (in other wo
c8c0: 72 64 73 2c 20 61 6e 20 6f 70 74 69 6d 69 7a 61  rds, an optimiza
c8d0: 74 69 6f 6e 20 74 68 61 74 20 68 65 6c 70 73 0a  tion that helps.
c8e0: 20 20 22 53 45 4c 45 43 54 20 63 6f 75 6e 74 28    "SELECT count(
c8f0: 2a 29 20 46 52 4f 4d 20 74 61 62 6c 65 22 20 72  *) FROM table" r
c900: 75 6e 20 66 61 73 74 65 72 29 20 69 73 20 6f 6d  un faster) is om
c910: 69 74 74 65 64 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c  itted..}..COMPIL
c920: 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45  E_OPTION {SQLITE
c930: 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45  _OMIT_BUILTIN_TE
c940: 53 54 7d 20 7b 0a 20 20 41 20 73 74 61 6e 64 61  ST} {.  A standa
c950: 72 64 20 53 51 4c 69 74 65 20 62 75 69 6c 64 20  rd SQLite build 
c960: 69 6e 63 6c 75 64 65 73 20 61 20 73 6d 61 6c 6c  includes a small
c970: 20 61 6d 6f 75 6e 74 20 6f 66 20 6c 6f 67 69 63   amount of logic
c980: 20 63 6f 6e 74 72 6f 6c 6c 65 64 0a 20 20 62 79   controlled.  by
c990: 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 74 65   the [sqlite3_te
c9a0: 73 74 5f 63 6f 6e 74 72 6f 6c 28 29 5d 20 69 6e  st_control()] in
c9b0: 74 65 72 66 61 63 65 20 74 68 61 74 20 69 73 20  terface that is 
c9c0: 75 73 65 64 20 74 6f 20 65 78 65 72 63 69 73 65  used to exercise
c9d0: 0a 20 20 70 61 72 74 73 20 6f 66 20 74 68 65 20  .  parts of the 
c9e0: 53 51 4c 69 74 65 20 63 6f 72 65 20 74 68 61 74  SQLite core that
c9f0: 20 61 72 65 20 64 69 66 66 69 63 75 6c 74 20 74   are difficult t
ca00: 6f 20 63 6f 6e 74 72 6f 6c 20 61 6e 64 20 6d 65  o control and me
ca10: 61 73 75 72 65 20 75 73 69 6e 67 0a 20 20 74 68  asure using.  th
ca20: 65 20 73 74 61 6e 64 61 72 64 20 41 50 49 2e 20  e standard API. 
ca30: 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 6f 6d 69   This option omi
ca40: 74 73 20 74 68 61 74 20 62 75 69 6c 74 2d 69 6e  ts that built-in
ca50: 20 74 65 73 74 20 6c 6f 67 69 63 2e 0a 7d 0a 0a   test logic..}..
ca60: 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b  COMPILE_OPTION {
ca70: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54  SQLITE_OMIT_CAST
ca80: 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70 74 69 6f  } {.  This optio
ca90: 6e 20 63 61 75 73 65 73 20 53 51 4c 69 74 65 20  n causes SQLite 
caa0: 74 6f 20 6f 6d 69 74 20 73 75 70 70 6f 72 74 20  to omit support 
cab0: 66 6f 72 20 74 68 65 20 43 41 53 54 20 6f 70 65  for the CAST ope
cac0: 72 61 74 6f 72 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c  rator..}..COMPIL
cad0: 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45  E_OPTION {SQLITE
cae0: 5f 4f 4d 49 54 5f 43 48 45 43 4b 7d 20 7b 0a 20  _OMIT_CHECK} {. 
caf0: 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 63 61 75   This option cau
cb00: 73 65 73 20 53 51 4c 69 74 65 20 74 6f 20 6f 6d  ses SQLite to om
cb10: 69 74 20 73 75 70 70 6f 72 74 20 66 6f 72 20 43  it support for C
cb20: 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73  HECK constraints
cb30: 2e 0a 20 20 54 68 65 20 70 61 72 73 65 72 20 77  ..  The parser w
cb40: 69 6c 6c 20 73 74 69 6c 6c 20 61 63 63 65 70 74  ill still accept
cb50: 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e   CHECK constrain
cb60: 74 73 20 69 6e 20 53 51 4c 20 73 74 61 74 65 6d  ts in SQL statem
cb70: 65 6e 74 73 2c 0a 20 20 74 68 65 79 20 77 69 6c  ents,.  they wil
cb80: 6c 20 6a 75 73 74 20 6e 6f 74 20 62 65 20 65 6e  l just not be en
cb90: 66 6f 72 63 65 64 2e 0a 7d 0a 0a 43 4f 4d 50 49  forced..}..COMPI
cba0: 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54  LE_OPTION {SQLIT
cbb0: 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49 4c 45 4f 50  E_OMIT_COMPILEOP
cbc0: 54 49 4f 4e 5f 44 49 41 47 53 7d 20 7b 0a 20 20  TION_DIAGS} {.  
cbd0: 54 68 69 73 20 6f 70 74 69 6f 6e 20 69 73 20 75  This option is u
cbe0: 73 65 64 20 74 6f 20 6f 6d 69 74 20 74 68 65 20  sed to omit the 
cbf0: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74  compile-time opt
cc00: 69 6f 6e 20 64 69 61 67 6e 6f 73 74 69 63 73 20  ion diagnostics 
cc10: 61 76 61 69 6c 61 62 6c 65 0a 20 20 69 6e 20 53  available.  in S
cc20: 51 4c 69 74 65 2c 20 69 6e 63 6c 75 64 69 6e 67  QLite, including
cc30: 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 63 6f   the [sqlite3_co
cc40: 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 75 73 65 64  mpileoption_used
cc50: 28 29 5d 20 61 6e 64 0a 20 20 5b 73 71 6c 69 74  ()] and.  [sqlit
cc60: 65 33 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e  e3_compileoption
cc70: 5f 67 65 74 28 29 5d 20 43 2f 43 2b 2b 20 66 75  _get()] C/C++ fu
cc80: 6e 63 74 69 6f 6e 73 2c 20 74 68 65 0a 20 20 5b  nctions, the.  [
cc90: 73 71 6c 69 74 65 5f 63 6f 6d 70 69 6c 65 6f 70  sqlite_compileop
cca0: 74 69 6f 6e 5f 75 73 65 64 28 29 5d 20 61 6e 64  tion_used()] and
ccb0: 20 5b 73 71 6c 69 74 65 5f 63 6f 6d 70 69 6c 65   [sqlite_compile
ccc0: 6f 70 74 69 6f 6e 5f 67 65 74 28 29 5d 20 53 51  option_get()] SQ
ccd0: 4c 20 66 75 6e 63 74 69 6f 6e 73 2c 0a 20 20 61  L functions,.  a
cce0: 6e 64 20 74 68 65 20 5b 63 6f 6d 70 69 6c 65 5f  nd the [compile_
ccf0: 6f 70 74 69 6f 6e 73 20 70 72 61 67 6d 61 5d 2e  options pragma].
cd00: 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49  .}..COMPILE_OPTI
cd10: 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ON {SQLITE_OMIT_
cd20: 43 4f 4d 50 4c 45 54 45 7d 20 7b 0a 20 20 54 68  COMPLETE} {.  Th
cd30: 69 73 20 6f 70 74 69 6f 6e 20 63 61 75 73 65 73  is option causes
cd40: 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 63 6f   the [sqlite3_co
cd50: 6d 70 6c 65 74 65 28 29 5d 20 61 6e 64 20 5b 73  mplete()] and [s
cd60: 71 6c 69 74 65 33 5f 63 6f 6d 70 6c 65 74 65 31  qlite3_complete1
cd70: 36 28 29 5d 0a 20 20 69 6e 74 65 72 66 61 63 65  6()].  interface
cd80: 73 20 74 6f 20 62 65 20 6f 6d 69 74 74 65 64 2e  s to be omitted.
cd90: 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49  .}..COMPILE_OPTI
cda0: 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ON {SQLITE_OMIT_
cdb0: 43 4f 4d 50 4f 55 4e 44 5f 53 45 4c 45 43 54 7d  COMPOUND_SELECT}
cdc0: 20 7b 0a 20 20 54 68 69 73 20 6f 70 74 69 6f 6e   {.  This option
cdd0: 20 69 73 20 75 73 65 64 20 74 6f 20 6f 6d 69 74   is used to omit
cde0: 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20 5b 53   the compound [S
cdf0: 45 4c 45 43 54 5d 20 66 75 6e 63 74 69 6f 6e 61  ELECT] functiona
ce00: 6c 69 74 79 2e 20 0a 20 20 5b 53 45 4c 45 43 54  lity. .  [SELECT
ce10: 5d 20 73 74 61 74 65 6d 65 6e 74 73 20 74 68 61  ] statements tha
ce20: 74 20 75 73 65 20 74 68 65 20 0a 20 20 55 4e 49  t use the .  UNI
ce30: 4f 4e 2c 20 55 4e 49 4f 4e 20 41 4c 4c 2c 20 49  ON, UNION ALL, I
ce40: 4e 54 45 52 53 45 43 54 20 6f 72 20 45 58 43 45  NTERSECT or EXCE
ce50: 50 54 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45  PT compound SELE
ce60: 43 54 20 6f 70 65 72 61 74 6f 72 73 20 77 69 6c  CT operators wil
ce70: 6c 20 0a 20 20 63 61 75 73 65 20 61 20 70 61 72  l .  cause a par
ce80: 73 65 20 65 72 72 6f 72 2e 0a 0a 20 20 41 6e 20  se error...  An 
ce90: 5b 49 4e 53 45 52 54 5d 20 73 74 61 74 65 6d 65  [INSERT] stateme
cea0: 6e 74 20 77 69 74 68 20 6d 75 6c 74 69 70 6c 65  nt with multiple
ceb0: 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 56   values in the V
cec0: 41 4c 55 45 53 20 63 6c 61 75 73 65 20 69 73 0a  ALUES clause is.
ced0: 20 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 69 6e    implemented in
cee0: 74 65 72 6e 61 6c 6c 79 20 61 73 20 61 20 63 6f  ternally as a co
cef0: 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 2e 20 20  mpound SELECT.  
cf00: 48 65 6e 63 65 2c 20 74 68 69 73 20 6f 70 74 69  Hence, this opti
cf10: 6f 6e 20 61 6c 73 6f 0a 20 20 64 69 73 61 62 6c  on also.  disabl
cf20: 65 73 20 74 68 65 20 61 62 69 6c 69 74 79 20 74  es the ability t
cf30: 6f 20 69 6e 73 65 72 74 20 6d 6f 72 65 20 74 68  o insert more th
cf40: 61 6e 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20  an a single row 
cf50: 75 73 69 6e 67 20 61 6e 0a 20 20 49 4e 53 45 52  using an.  INSER
cf60: 54 20 49 4e 54 4f 20 2e 2e 2e 20 56 41 4c 55 45  T INTO ... VALUE
cf70: 53 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2e  S ... statement.
cf80: 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49  .}..COMPILE_OPTI
cf90: 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ON {SQLITE_OMIT_
cfa0: 43 54 45 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70  CTE} {.  This op
cfb0: 74 69 6f 6e 20 63 61 75 73 65 73 20 73 75 70 70  tion causes supp
cfc0: 6f 72 74 20 66 6f 72 20 5b 63 6f 6d 6d 6f 6e 20  ort for [common 
cfd0: 74 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e  table expression
cfe0: 73 5d 20 74 6f 20 62 65 20 6f 6d 69 74 74 65 64  s] to be omitted
cff0: 2e 0a 7d 0a 0a 0a 0a 43 4f 4d 50 49 4c 45 5f 4f  ..}....COMPILE_O
d000: 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d  PTION {SQLITE_OM
d010: 49 54 5f 44 41 54 45 54 49 4d 45 5f 46 55 4e 43  IT_DATETIME_FUNC
d020: 53 7d 20 7b 0a 20 20 49 66 20 74 68 69 73 20 6f  S} {.  If this o
d030: 70 74 69 6f 6e 20 69 73 20 64 65 66 69 6e 65 64  ption is defined
d040: 2c 20 53 51 4c 69 74 65 27 73 20 62 75 69 6c 74  , SQLite's built
d050: 2d 69 6e 20 64 61 74 65 20 61 6e 64 20 74 69 6d  -in date and tim
d060: 65 20 6d 61 6e 69 70 75 6c 61 74 69 6f 6e 0a 20  e manipulation. 
d070: 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 6f   functions are o
d080: 6d 69 74 74 65 64 2e 20 53 70 65 63 69 66 69 63  mitted. Specific
d090: 61 6c 6c 79 2c 20 74 68 65 20 53 51 4c 20 66 75  ally, the SQL fu
d0a0: 6e 63 74 69 6f 6e 73 20 6a 75 6c 69 61 6e 64 61  nctions julianda
d0b0: 79 28 29 2c 20 64 61 74 65 28 29 2c 0a 20 20 74  y(), date(),.  t
d0c0: 69 6d 65 28 29 2c 20 64 61 74 65 74 69 6d 65 28  ime(), datetime(
d0d0: 29 20 61 6e 64 20 73 74 72 66 74 69 6d 65 28 29  ) and strftime()
d0e0: 20 61 72 65 20 6e 6f 74 20 61 76 61 69 6c 61 62   are not availab
d0f0: 6c 65 2e 20 54 68 65 20 64 65 66 61 75 6c 74 20  le. The default 
d100: 63 6f 6c 75 6d 6e 0a 20 20 76 61 6c 75 65 73 20  column.  values 
d110: 43 55 52 52 45 4e 54 5f 54 49 4d 45 2c 20 43 55  CURRENT_TIME, CU
d120: 52 52 45 4e 54 5f 44 41 54 45 20 61 6e 64 20 43  RRENT_DATE and C
d130: 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d 50  URRENT_TIMESTAMP
d140: 20 61 72 65 20 73 74 69 6c 6c 20 61 76 61 69 6c   are still avail
d150: 61 62 6c 65 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45  able..}..COMPILE
d160: 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f  _OPTION {SQLITE_
d170: 4f 4d 49 54 5f 44 45 43 4c 54 59 50 45 7d 20 7b  OMIT_DECLTYPE} {
d180: 0a 20 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 63  .  This option c
d190: 61 75 73 65 73 20 53 51 4c 69 74 65 20 74 6f 20  auses SQLite to 
d1a0: 6f 6d 69 74 20 73 75 70 70 6f 72 74 20 66 6f 72  omit support for
d1b0: 20 74 68 65 0a 20 20 5b 73 71 6c 69 74 65 33 5f   the.  [sqlite3_
d1c0: 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65 28  column_decltype(
d1d0: 29 5d 20 61 6e 64 20 5b 73 71 6c 69 74 65 33 5f  )] and [sqlite3_
d1e0: 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65 31  column_decltype1
d1f0: 36 28 29 5d 0a 20 20 69 6e 74 65 72 66 61 63 65  6()].  interface
d200: 73 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50  s..}..COMPILE_OP
d210: 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d 49  TION {SQLITE_OMI
d220: 54 5f 44 45 50 52 45 43 41 54 45 44 7d 20 7b 0a  T_DEPRECATED} {.
d230: 20 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 63 61    This option ca
d240: 75 73 65 73 20 53 51 4c 69 74 65 20 74 6f 20 6f  uses SQLite to o
d250: 6d 69 74 20 73 75 70 70 6f 72 74 20 66 6f 72 20  mit support for 
d260: 69 6e 74 65 72 66 61 63 65 73 0a 20 20 6d 61 72  interfaces.  mar
d270: 6b 65 64 20 61 73 20 64 65 70 72 65 63 61 74 65  ked as deprecate
d280: 64 2e 20 20 54 68 69 73 20 69 6e 63 6c 75 64 65  d.  This include
d290: 73 20 0a 20 20 5b 73 71 6c 69 74 65 33 5f 61 67  s .  [sqlite3_ag
d2a0: 67 72 65 67 61 74 65 5f 63 6f 75 6e 74 28 29 5d  gregate_count()]
d2b0: 2c 0a 20 20 5b 73 71 6c 69 74 65 33 5f 65 78 70  ,.  [sqlite3_exp
d2c0: 69 72 65 64 28 29 5d 2c 0a 20 20 5b 73 71 6c 69  ired()],.  [sqli
d2d0: 74 65 33 5f 74 72 61 6e 73 66 65 72 5f 62 69 6e  te3_transfer_bin
d2e0: 64 69 6e 67 73 28 29 5d 2c 0a 20 20 5b 73 71 6c  dings()],.  [sql
d2f0: 69 74 65 33 5f 67 6c 6f 62 61 6c 5f 72 65 63 6f  ite3_global_reco
d300: 76 65 72 28 29 5d 2c 0a 20 20 5b 73 71 6c 69 74  ver()],.  [sqlit
d310: 65 33 5f 74 68 72 65 61 64 5f 63 6c 65 61 6e 75  e3_thread_cleanu
d320: 70 28 29 5d 20 61 6e 64 0a 20 20 5b 73 71 6c 69  p()] and.  [sqli
d330: 74 65 33 5f 6d 65 6d 6f 72 79 5f 61 6c 61 72 6d  te3_memory_alarm
d340: 28 29 5d 20 69 6e 74 65 72 66 61 63 65 73 2e 0a  ()] interfaces..
d350: 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f  }..COMPILE_OPTIO
d360: 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44  N {SQLITE_OMIT_D
d370: 49 53 4b 49 4f 7d 20 7b 0a 20 20 54 68 69 73 20  ISKIO} {.  This 
d380: 6f 70 74 69 6f 6e 20 6f 6d 69 74 73 20 61 6c 6c  option omits all
d390: 20 73 75 70 70 6f 72 74 20 66 6f 72 20 77 72 69   support for wri
d3a0: 74 69 6e 67 20 74 6f 20 74 68 65 20 64 69 73 6b  ting to the disk
d3b0: 20 61 6e 64 20 66 6f 72 63 65 73 0a 20 20 64 61   and forces.  da
d3c0: 74 61 62 61 73 65 73 20 74 6f 20 65 78 69 73 74  tabases to exist
d3d0: 20 69 6e 20 6d 65 6d 6f 72 79 20 6f 6e 6c 79 2e   in memory only.
d3e0: 20 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 68 61    This option ha
d3f0: 73 20 6e 6f 74 20 62 65 65 6e 20 0a 20 20 6d 61  s not been .  ma
d400: 69 6e 74 61 69 6e 65 64 20 61 6e 64 20 70 72 6f  intained and pro
d410: 62 61 62 6c 79 20 64 6f 65 73 20 6e 6f 74 20 77  bably does not w
d420: 6f 72 6b 20 77 69 74 68 20 6e 65 77 65 72 20 76  ork with newer v
d430: 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74  ersions of SQLit
d440: 65 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50  e..}..COMPILE_OP
d450: 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d 49  TION {SQLITE_OMI
d460: 54 5f 45 58 50 4c 41 49 4e 7d 20 7b 0a 20 20 44  T_EXPLAIN} {.  D
d470: 65 66 69 6e 69 6e 67 20 74 68 69 73 20 6f 70 74  efining this opt
d480: 69 6f 6e 20 63 61 75 73 65 73 20 74 68 65 20 5b  ion causes the [
d490: 45 58 50 4c 41 49 4e 5d 20 63 6f 6d 6d 61 6e 64  EXPLAIN] command
d4a0: 20 74 6f 20 62 65 20 6f 6d 69 74 74 65 64 20 66   to be omitted f
d4b0: 72 6f 6d 20 74 68 65 0a 20 20 6c 69 62 72 61 72  rom the.  librar
d4c0: 79 2e 20 41 74 74 65 6d 70 74 69 6e 67 20 74 6f  y. Attempting to
d4d0: 20 65 78 65 63 75 74 65 20 61 6e 20 5b 45 58 50   execute an [EXP
d4e0: 4c 41 49 4e 5d 20 73 74 61 74 65 6d 65 6e 74 20  LAIN] statement 
d4f0: 77 69 6c 6c 20 63 61 75 73 65 20 61 20 70 61 72  will cause a par
d500: 73 65 0a 20 20 65 72 72 6f 72 2e 0a 7d 0a 0a 43  se.  error..}..C
d510: 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53  OMPILE_OPTION {S
d520: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f  QLITE_OMIT_FLAG_
d530: 50 52 41 47 4d 41 53 7d 20 7b 0a 20 20 54 68 69  PRAGMAS} {.  Thi
d540: 73 20 6f 70 74 69 6f 6e 20 6f 6d 69 74 73 20 73  s option omits s
d550: 75 70 70 6f 72 74 20 66 6f 72 20 61 20 73 75 62  upport for a sub
d560: 73 65 74 20 6f 66 20 5b 50 52 41 47 4d 41 5d 20  set of [PRAGMA] 
d570: 63 6f 6d 6d 61 6e 64 73 20 74 68 61 74 0a 20 20  commands that.  
d580: 71 75 65 72 79 20 61 6e 64 20 73 65 74 20 62 6f  query and set bo
d590: 6f 6c 65 61 6e 20 70 72 6f 70 65 72 74 69 65 73  olean properties
d5a0: 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54  ..}..COMPILE_OPT
d5b0: 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54  ION {SQLITE_OMIT
d5c0: 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 7d  _FLOATING_POINT}
d5d0: 20 7b 0a 20 20 54 68 69 73 20 6f 70 74 69 6f 6e   {.  This option
d5e0: 20 69 73 20 75 73 65 64 20 74 6f 20 6f 6d 69 74   is used to omit
d5f0: 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 20   floating-point 
d600: 6e 75 6d 62 65 72 20 73 75 70 70 6f 72 74 20 66  number support f
d610: 72 6f 6d 20 74 68 65 20 53 51 4c 69 74 65 0a 20  rom the SQLite. 
d620: 20 6c 69 62 72 61 72 79 2e 20 57 68 65 6e 20 73   library. When s
d630: 70 65 63 69 66 69 65 64 2c 20 73 70 65 63 69 66  pecified, specif
d640: 79 69 6e 67 20 61 20 66 6c 6f 61 74 69 6e 67 20  ying a floating 
d650: 70 6f 69 6e 74 20 6e 75 6d 62 65 72 20 61 73 20  point number as 
d660: 61 20 6c 69 74 65 72 61 6c 20 0a 20 20 28 69 2e  a literal .  (i.
d670: 65 2e 20 22 31 2e 30 31 22 29 20 72 65 73 75 6c  e. "1.01") resul
d680: 74 73 20 69 6e 20 61 20 70 61 72 73 65 20 65 72  ts in a parse er
d690: 72 6f 72 2e 0a 0a 20 20 3c 70 3e 49 6e 20 74 68  ror...  <p>In th
d6a0: 65 20 66 75 74 75 72 65 2c 20 74 68 69 73 20 6f  e future, this o
d6b0: 70 74 69 6f 6e 20 6d 61 79 20 61 6c 73 6f 20 64  ption may also d
d6c0: 69 73 61 62 6c 65 20 6f 74 68 65 72 20 66 6c 6f  isable other flo
d6d0: 61 74 69 6e 67 20 70 6f 69 6e 74 20 0a 20 20 66  ating point .  f
d6e0: 75 6e 63 74 69 6f 6e 61 6c 69 74 79 2c 20 66 6f  unctionality, fo
d6f0: 72 20 65 78 61 6d 70 6c 65 20 74 68 65 20 5b 73  r example the [s
d700: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 64 6f  qlite3_result_do
d710: 75 62 6c 65 28 29 5d 2c 20 0a 20 20 5b 73 71 6c  uble()], .  [sql
d720: 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65  ite3_bind_double
d730: 28 29 5d 2c 20 5b 73 71 6c 69 74 65 33 5f 76 61  ()], [sqlite3_va
d740: 6c 75 65 5f 64 6f 75 62 6c 65 28 29 5d 20 61 6e  lue_double()] an
d750: 64 0a 20 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c  d.  [sqlite3_col
d760: 75 6d 6e 5f 64 6f 75 62 6c 65 28 29 5d 20 41 50  umn_double()] AP
d770: 49 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 20 20 3c  I functions..  <
d780: 2f 70 3e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f  /p>.}..COMPILE_O
d790: 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d  PTION {SQLITE_OM
d7a0: 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 7d 20  IT_FOREIGN_KEY} 
d7b0: 7b 0a 20 20 49 66 20 74 68 69 73 20 6f 70 74 69  {.  If this opti
d7c0: 6f 6e 20 69 73 20 64 65 66 69 6e 65 64 2c 20 74  on is defined, t
d7d0: 68 65 6e 20 5b 66 6f 72 65 69 67 6e 20 6b 65 79  hen [foreign key
d7e0: 20 63 6f 6e 73 74 72 61 69 6e 74 5d 20 73 79 6e   constraint] syn
d7f0: 74 61 78 20 69 73 0a 20 20 6e 6f 74 20 72 65 63  tax is.  not rec
d800: 6f 67 6e 69 7a 65 64 2e 0a 7d 0a 0a 43 4f 4d 50  ognized..}..COMP
d810: 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49  ILE_OPTION {SQLI
d820: 54 45 5f 4f 4d 49 54 5f 47 45 54 5f 54 41 42 4c  TE_OMIT_GET_TABL
d830: 45 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70 74 69  E} {.  This opti
d840: 6f 6e 20 63 61 75 73 65 73 20 73 75 70 70 6f 72  on causes suppor
d850: 74 20 66 6f 72 20 5b 73 71 6c 69 74 65 33 5f 67  t for [sqlite3_g
d860: 65 74 5f 74 61 62 6c 65 28 29 5d 20 61 6e 64 0a  et_table()] and.
d870: 20 20 5b 73 71 6c 69 74 65 33 5f 66 72 65 65 5f    [sqlite3_free_
d880: 74 61 62 6c 65 28 29 5d 20 74 6f 20 62 65 20 6f  table()] to be o
d890: 6d 69 74 74 65 64 2e 0a 7d 0a 0a 43 4f 4d 50 49  mitted..}..COMPI
d8a0: 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54  LE_OPTION {SQLIT
d8b0: 45 5f 4f 4d 49 54 5f 49 4e 43 52 42 4c 4f 42 7d  E_OMIT_INCRBLOB}
d8c0: 20 7b 0a 20 20 54 68 69 73 20 6f 70 74 69 6f 6e   {.  This option
d8d0: 20 63 61 75 73 65 73 20 73 75 70 70 6f 72 74 20   causes support 
d8e0: 66 6f 72 20 5b 73 71 6c 69 74 65 33 5f 62 6c 6f  for [sqlite3_blo
d8f0: 62 20 7c 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20  b | incremental 
d900: 42 4c 4f 42 20 49 2f 4f 5d 0a 20 20 74 6f 20 62  BLOB I/O].  to b
d910: 65 20 6f 6d 69 74 74 65 64 2e 0a 7d 0a 0a 43 4f  e omitted..}..CO
d920: 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51  MPILE_OPTION {SQ
d930: 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52  LITE_OMIT_INTEGR
d940: 49 54 59 5f 43 48 45 43 4b 7d 20 7b 0a 20 20 54  ITY_CHECK} {.  T
d950: 68 69 73 20 6f 70 74 69 6f 6e 20 6f 6d 69 74 73  his option omits
d960: 20 73 75 70 70 6f 72 74 20 66 6f 72 20 74 68 65   support for the
d970: 20 5b 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63   [integrity_chec
d980: 6b 20 70 72 61 67 6d 61 5d 2e 0a 7d 0a 0a 43 4f  k pragma]..}..CO
d990: 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51  MPILE_OPTION {SQ
d9a0: 4c 49 54 45 5f 4f 4d 49 54 5f 4c 49 4b 45 5f 4f  LITE_OMIT_LIKE_O
d9b0: 50 54 49 4d 49 5a 41 54 49 4f 4e 7d 20 7b 0a 20  PTIMIZATION} {. 
d9c0: 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 64 69 73   This option dis
d9d0: 61 62 6c 65 73 20 74 68 65 20 61 62 69 6c 69 74  ables the abilit
d9e0: 79 20 6f 66 20 53 51 4c 69 74 65 20 74 6f 20 75  y of SQLite to u
d9f0: 73 65 20 69 6e 64 69 63 65 73 20 74 6f 20 68 65  se indices to he
da00: 6c 70 0a 20 20 72 65 73 6f 6c 76 65 20 5b 4c 49  lp.  resolve [LI
da10: 4b 45 5d 20 61 6e 64 20 5b 47 4c 4f 42 5d 20 6f  KE] and [GLOB] o
da20: 70 65 72 61 74 6f 72 73 20 69 6e 20 61 20 57 48  perators in a WH
da30: 45 52 45 20 63 6c 61 75 73 65 2e 0a 7d 0a 0a 43  ERE clause..}..C
da40: 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53  OMPILE_OPTION {S
da50: 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41 44 5f  QLITE_OMIT_LOAD_
da60: 45 58 54 45 4e 53 49 4f 4e 7d 20 7b 0a 20 20 54  EXTENSION} {.  T
da70: 68 69 73 20 6f 70 74 69 6f 6e 20 6f 6d 69 74 73  his option omits
da80: 20 74 68 65 20 65 6e 74 69 72 65 20 65 78 74 65   the entire exte
da90: 6e 73 69 6f 6e 20 6c 6f 61 64 69 6e 67 20 6d 65  nsion loading me
daa0: 63 68 61 6e 69 73 6d 20 66 72 6f 6d 0a 20 20 53  chanism from.  S
dab0: 51 4c 69 74 65 2c 20 69 6e 63 6c 75 64 69 6e 67  QLite, including
dac0: 20 5b 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65   [sqlite3_enable
dad0: 5f 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28  _load_extension(
dae0: 29 5d 20 61 6e 64 0a 20 20 5b 73 71 6c 69 74 65  )] and.  [sqlite
daf0: 33 5f 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e  3_load_extension
db00: 28 29 5d 20 69 6e 74 65 72 66 61 63 65 73 2e 0a  ()] interfaces..
db10: 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f  }..COMPILE_OPTIO
db20: 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c  N {SQLITE_OMIT_L
db30: 4f 43 41 4c 54 49 4d 45 7d 20 7b 0a 20 20 54 68  OCALTIME} {.  Th
db40: 69 73 20 6f 70 74 69 6f 6e 20 6f 6d 69 74 73 20  is option omits 
db50: 74 68 65 20 22 6c 6f 63 61 6c 74 69 6d 65 22 20  the "localtime" 
db60: 6d 6f 64 69 66 69 65 72 20 66 72 6f 6d 20 74 68  modifier from th
db70: 65 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 0a  e date and time.
db80: 20 20 66 75 6e 63 74 69 6f 6e 73 2e 20 20 54 68    functions.  Th
db90: 69 73 20 6f 70 74 69 6f 6e 20 69 73 20 73 6f 6d  is option is som
dba0: 65 74 69 6d 65 73 20 75 73 65 66 75 6c 20 77 68  etimes useful wh
dbb0: 65 6e 20 74 72 79 69 6e 67 20 74 6f 20 63 6f 6d  en trying to com
dbc0: 70 69 6c 65 0a 20 20 74 68 65 20 64 61 74 65 20  pile.  the date 
dbd0: 61 6e 64 20 74 69 6d 65 20 66 75 6e 63 74 69 6f  and time functio
dbe0: 6e 73 20 6f 6e 20 61 20 70 6c 61 74 66 6f 72 6d  ns on a platform
dbf0: 20 74 68 61 74 20 64 6f 65 73 20 6e 6f 74 20 73   that does not s
dc00: 75 70 70 6f 72 74 20 74 68 65 0a 20 20 63 6f 6e  upport the.  con
dc10: 63 65 70 74 20 6f 66 20 6c 6f 63 61 6c 20 74 69  cept of local ti
dc20: 6d 65 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f  me..}..COMPILE_O
dc30: 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d  PTION {SQLITE_OM
dc40: 49 54 5f 4c 4f 4f 4b 41 53 49 44 45 7d 20 7b 0a  IT_LOOKASIDE} {.
dc50: 20 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 6f 6d    This option om
dc60: 69 74 73 20 74 68 65 20 5b 6c 6f 6f 6b 61 73 69  its the [lookasi
dc70: 64 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  de memory alloca
dc80: 74 6f 72 5d 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45  tor]..}..COMPILE
dc90: 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f  _OPTION {SQLITE_
dca0: 4f 4d 49 54 5f 4d 45 4d 4f 52 59 44 42 7d 20 7b  OMIT_MEMORYDB} {
dcb0: 0a 20 20 57 68 65 6e 20 74 68 69 73 20 69 73 20  .  When this is 
dcc0: 64 65 66 69 6e 65 64 2c 20 74 68 65 20 6c 69 62  defined, the lib
dcd0: 72 61 72 79 20 64 6f 65 73 20 6e 6f 74 20 72 65  rary does not re
dce0: 73 70 65 63 74 20 74 68 65 20 73 70 65 63 69 61  spect the specia
dcf0: 6c 20 64 61 74 61 62 61 73 65 0a 20 20 6e 61 6d  l database.  nam
dd00: 65 20 22 3a 6d 65 6d 6f 72 79 3a 22 20 28 6e 6f  e ":memory:" (no
dd10: 72 6d 61 6c 6c 79 20 75 73 65 64 20 74 6f 20 63  rmally used to c
dd20: 72 65 61 74 65 20 61 6e 20 5b 69 6e 2d 6d 65 6d  reate an [in-mem
dd30: 6f 72 79 20 64 61 74 61 62 61 73 65 5d 29 2e 20  ory database]). 
dd40: 49 66 20 0a 20 20 22 3a 6d 65 6d 6f 72 79 3a 22  If .  ":memory:"
dd50: 20 69 73 20 70 61 73 73 65 64 20 74 6f 20 5b 73   is passed to [s
dd60: 71 6c 69 74 65 33 5f 6f 70 65 6e 28 29 5d 2c 20  qlite3_open()], 
dd70: 5b 73 71 6c 69 74 65 33 5f 6f 70 65 6e 31 36 28  [sqlite3_open16(
dd80: 29 5d 2c 20 6f 72 0a 20 20 5b 73 71 6c 69 74 65  )], or.  [sqlite
dd90: 33 5f 6f 70 65 6e 5f 76 32 28 29 5d 2c 20 61 20  3_open_v2()], a 
dda0: 66 69 6c 65 20 77 69 74 68 20 74 68 69 73 20 6e  file with this n
ddb0: 61 6d 65 20 77 69 6c 6c 20 62 65 20 0a 20 20 6f  ame will be .  o
ddc0: 70 65 6e 65 64 20 6f 72 20 63 72 65 61 74 65 64  pened or created
ddd0: 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54  ..}..COMPILE_OPT
dde0: 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54  ION {SQLITE_OMIT
ddf0: 5f 4f 52 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e  _OR_OPTIMIZATION
de00: 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70 74 69 6f  } {.  This optio
de10: 6e 20 64 69 73 61 62 6c 65 73 20 74 68 65 20 61  n disables the a
de20: 62 69 6c 69 74 79 20 6f 66 20 53 51 4c 69 74 65  bility of SQLite
de30: 20 74 6f 20 75 73 65 20 61 6e 20 69 6e 64 65 78   to use an index
de40: 20 74 6f 67 65 74 68 65 72 0a 20 20 77 69 74 68   together.  with
de50: 20 74 65 72 6d 73 20 6f 66 20 61 20 57 48 45 52   terms of a WHER
de60: 45 20 63 6c 61 75 73 65 20 63 6f 6e 6e 65 63 74  E clause connect
de70: 65 64 20 62 79 20 74 68 65 20 4f 52 20 6f 70 65  ed by the OR ope
de80: 72 61 74 6f 72 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c  rator..}..COMPIL
de90: 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45  E_OPTION {SQLITE
dea0: 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47  _OMIT_PAGER_PRAG
deb0: 4d 41 53 7d 20 7b 0a 20 20 44 65 66 69 6e 69 6e  MAS} {.  Definin
dec0: 67 20 74 68 69 73 20 6f 70 74 69 6f 6e 20 6f 6d  g this option om
ded0: 69 74 73 20 70 72 61 67 6d 61 73 20 72 65 6c 61  its pragmas rela
dee0: 74 65 64 20 74 6f 20 74 68 65 20 70 61 67 65 72  ted to the pager
def0: 20 73 75 62 73 79 73 74 65 6d 20 66 72 6f 6d 20   subsystem from 
df00: 0a 20 20 74 68 65 20 62 75 69 6c 64 2e 0a 7d 0a  .  the build..}.
df10: 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20  .COMPILE_OPTION 
df20: 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41  {SQLITE_OMIT_PRA
df30: 47 4d 41 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70  GMA} {.  This op
df40: 74 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20  tion is used to 
df50: 6f 6d 69 74 20 74 68 65 20 5b 50 52 41 47 4d 41  omit the [PRAGMA
df60: 5d 20 63 6f 6d 6d 61 6e 64 0a 20 20 66 72 6f 6d  ] command.  from
df70: 20 74 68 65 20 6c 69 62 72 61 72 79 2e 20 4e 6f   the library. No
df80: 74 65 20 74 68 61 74 20 69 74 20 69 73 20 75 73  te that it is us
df90: 65 66 75 6c 20 74 6f 20 64 65 66 69 6e 65 20 74  eful to define t
dfa0: 68 65 20 6d 61 63 72 6f 73 20 74 68 61 74 20 6f  he macros that o
dfb0: 6d 69 74 0a 20 20 73 70 65 63 69 66 69 63 20 70  mit.  specific p
dfc0: 72 61 67 6d 61 73 20 69 6e 20 61 64 64 69 74 69  ragmas in additi
dfd0: 6f 6e 20 74 6f 20 74 68 69 73 2c 20 61 73 20 74  on to this, as t
dfe0: 68 65 79 20 6d 61 79 20 61 6c 73 6f 20 72 65 6d  hey may also rem
dff0: 6f 76 65 20 73 75 70 70 6f 72 74 69 6e 67 20 63  ove supporting c
e000: 6f 64 65 0a 20 20 69 6e 20 6f 74 68 65 72 20 73  ode.  in other s
e010: 75 62 2d 73 79 73 74 65 6d 73 2e 20 54 68 69 73  ub-systems. This
e020: 20 6d 61 63 72 6f 20 72 65 6d 6f 76 65 73 20 74   macro removes t
e030: 68 65 20 5b 50 52 41 47 4d 41 5d 20 63 6f 6d 6d  he [PRAGMA] comm
e040: 61 6e 64 20 6f 6e 6c 79 2e 0a 7d 0a 0a 43 4f 4d  and only..}..COM
e050: 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c  PILE_OPTION {SQL
e060: 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53  ITE_OMIT_PROGRES
e070: 53 5f 43 41 4c 4c 42 41 43 4b 7d 20 7b 0a 20 20  S_CALLBACK} {.  
e080: 54 68 69 73 20 6f 70 74 69 6f 6e 20 6d 61 79 20  This option may 
e090: 62 65 20 64 65 66 69 6e 65 64 20 74 6f 20 6f 6d  be defined to om
e0a0: 69 74 20 74 68 65 20 63 61 70 61 62 69 6c 69 74  it the capabilit
e0b0: 79 20 74 6f 20 69 73 73 75 65 20 22 70 72 6f 67  y to issue "prog
e0c0: 72 65 73 73 22 20 0a 20 20 63 61 6c 6c 62 61 63  ress" .  callbac
e0d0: 6b 73 20 64 75 72 69 6e 67 20 6c 6f 6e 67 2d 72  ks during long-r
e0e0: 75 6e 6e 69 6e 67 20 53 51 4c 20 73 74 61 74 65  unning SQL state
e0f0: 6d 65 6e 74 73 2e 20 54 68 65 20 0a 20 20 5b 73  ments. The .  [s
e100: 71 6c 69 74 65 33 5f 70 72 6f 67 72 65 73 73 5f  qlite3_progress_
e110: 68 61 6e 64 6c 65 72 28 29 5d 0a 20 20 41 50 49  handler()].  API
e120: 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 6e 6f 74   function is not
e130: 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20   present in the 
e140: 6c 69 62 72 61 72 79 2e 0a 7d 0a 0a 43 4f 4d 50  library..}..COMP
e150: 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49  ILE_OPTION {SQLI
e160: 54 45 5f 4f 4d 49 54 5f 51 55 49 43 4b 42 41 4c  TE_OMIT_QUICKBAL
e170: 41 4e 43 45 7d 20 7b 0a 20 20 54 68 69 73 20 6f  ANCE} {.  This o
e180: 70 74 69 6f 6e 20 6f 6d 69 74 73 20 61 6e 20 61  ption omits an a
e190: 6c 74 65 72 6e 61 74 69 76 65 2c 20 66 61 73 74  lternative, fast
e1a0: 65 72 20 42 2d 54 72 65 65 20 62 61 6c 61 6e 63  er B-Tree balanc
e1b0: 69 6e 67 20 72 6f 75 74 69 6e 65 2e 0a 20 20 55  ing routine..  U
e1c0: 73 69 6e 67 20 74 68 69 73 20 6f 70 74 69 6f 6e  sing this option
e1d0: 20 6d 61 6b 65 73 20 53 51 4c 69 74 65 20 73 6c   makes SQLite sl
e1e0: 69 67 68 74 6c 79 20 73 6d 61 6c 6c 65 72 20 61  ightly smaller a
e1f0: 74 20 74 68 65 20 65 78 70 65 6e 73 65 20 6f 66  t the expense of
e200: 0a 20 20 6d 61 6b 69 6e 67 20 69 74 20 72 75 6e  .  making it run
e210: 20 73 6c 69 67 68 74 6c 79 20 73 6c 6f 77 65 72   slightly slower
e220: 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54  ..}..COMPILE_OPT
e230: 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54  ION {SQLITE_OMIT
e240: 5f 52 45 49 4e 44 45 58 7d 20 7b 0a 20 20 57 68  _REINDEX} {.  Wh
e250: 65 6e 20 74 68 69 73 20 6f 70 74 69 6f 6e 20 69  en this option i
e260: 73 20 64 65 66 69 6e 65 64 2c 20 74 68 65 20 5b  s defined, the [
e270: 52 45 49 4e 44 45 58 5d 0a 20 20 63 6f 6d 6d 61  REINDEX].  comma
e280: 6e 64 20 69 73 20 6e 6f 74 20 69 6e 63 6c 75 64  nd is not includ
e290: 65 64 20 69 6e 20 74 68 65 20 6c 69 62 72 61 72  ed in the librar
e2a0: 79 2e 0a 20 20 45 78 65 63 75 74 69 6e 67 20 61  y..  Executing a
e2b0: 20 5b 52 45 49 4e 44 45 58 5d 20 73 74 61 74 65   [REINDEX] state
e2c0: 6d 65 6e 74 20 63 61 75 73 65 73 20 0a 20 20 61  ment causes .  a
e2d0: 20 70 61 72 73 65 20 65 72 72 6f 72 2e 0a 7d 0a   parse error..}.
e2e0: 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20  .COMPILE_OPTION 
e2f0: 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48  {SQLITE_OMIT_SCH
e300: 45 4d 41 5f 50 52 41 47 4d 41 53 7d 20 7b 0a 20  EMA_PRAGMAS} {. 
e310: 20 44 65 66 69 6e 69 6e 67 20 74 68 69 73 20 6f   Defining this o
e320: 70 74 69 6f 6e 20 6f 6d 69 74 73 20 70 72 61 67  ption omits prag
e330: 6d 61 73 20 66 6f 72 20 71 75 65 72 79 69 6e 67  mas for querying
e340: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
e350: 68 65 6d 61 20 66 72 6f 6d 20 0a 20 20 74 68 65  hema from .  the
e360: 20 62 75 69 6c 64 2e 0a 7d 0a 0a 43 4f 4d 50 49   build..}..COMPI
e370: 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54  LE_OPTION {SQLIT
e380: 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 56 45  E_OMIT_SCHEMA_VE
e390: 52 53 49 4f 4e 5f 50 52 41 47 4d 41 53 7d 20 7b  RSION_PRAGMAS} {
e3a0: 0a 20 20 44 65 66 69 6e 69 6e 67 20 74 68 69 73  .  Defining this
e3b0: 20 6f 70 74 69 6f 6e 20 6f 6d 69 74 73 20 70 72   option omits pr
e3c0: 61 67 6d 61 73 20 66 6f 72 20 71 75 65 72 79 69  agmas for queryi
e3d0: 6e 67 20 61 6e 64 20 6d 6f 64 69 66 79 69 6e 67  ng and modifying
e3e0: 20 74 68 65 20 0a 20 20 64 61 74 61 62 61 73 65   the .  database
e3f0: 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 20   schema version 
e400: 61 6e 64 20 75 73 65 72 20 76 65 72 73 69 6f 6e  and user version
e410: 20 66 72 6f 6d 20 74 68 65 20 62 75 69 6c 64 2e   from the build.
e420: 20 53 70 65 63 69 66 69 63 61 6c 6c 79 2c 20 74   Specifically, t
e430: 68 65 20 0a 20 20 5b 73 63 68 65 6d 61 5f 76 65  he .  [schema_ve
e440: 72 73 69 6f 6e 5d 20 61 6e 64 20 5b 75 73 65 72  rsion] and [user
e450: 5f 76 65 72 73 69 6f 6e 5d 20 50 52 41 47 4d 41  _version] PRAGMA
e460: 73 20 61 72 65 20 6f 6d 69 74 74 65 64 2e 0a 7d  s are omitted..}
e470: 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e  ..COMPILE_OPTION
e480: 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48   {SQLITE_OMIT_SH
e490: 41 52 45 44 5f 43 41 43 48 45 7d 20 7b 0a 20 20  ARED_CACHE} {.  
e4a0: 54 68 69 73 20 6f 70 74 69 6f 6e 20 62 75 69 6c  This option buil
e4b0: 64 73 20 53 51 4c 69 74 65 20 77 69 74 68 6f 75  ds SQLite withou
e4c0: 74 20 73 75 70 70 6f 72 74 20 66 6f 72 20 73 68  t support for sh
e4d0: 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 2e  ared-cache mode.
e4e0: 0a 20 20 54 68 65 20 5b 73 71 6c 69 74 65 33 5f  .  The [sqlite3_
e4f0: 65 6e 61 62 6c 65 5f 73 68 61 72 65 64 5f 63 61  enable_shared_ca
e500: 63 68 65 28 29 5d 20 69 73 20 6f 6d 69 74 74 65  che()] is omitte
e510: 64 20 61 6c 6f 6e 67 20 77 69 74 68 20 61 20 66  d along with a f
e520: 61 69 72 0a 20 20 61 6d 6f 75 6e 74 20 6f 66 20  air.  amount of 
e530: 6c 6f 67 69 63 20 77 69 74 68 69 6e 20 74 68 65  logic within the
e540: 20 42 2d 54 72 65 65 20 73 75 62 73 79 73 74 65   B-Tree subsyste
e550: 6d 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  m associated wit
e560: 68 20 73 68 61 72 65 64 0a 20 20 63 61 63 68 65  h shared.  cache
e570: 20 6d 61 6e 61 67 65 6d 65 6e 74 2e 0a 7d 0a 0a   management..}..
e580: 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b  COMPILE_OPTION {
e590: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 55 42 51  SQLITE_OMIT_SUBQ
e5a0: 55 45 52 59 7d 20 7b 0a 20 20 49 66 20 64 65 66  UERY} {.  If def
e5b0: 69 6e 65 64 2c 20 73 75 70 70 6f 72 74 20 66 6f  ined, support fo
e5c0: 72 20 73 75 62 2d 73 65 6c 65 63 74 73 20 61 6e  r sub-selects an
e5d0: 64 20 74 68 65 20 49 4e 28 29 20 6f 70 65 72 61  d the IN() opera
e5e0: 74 6f 72 20 61 72 65 20 6f 6d 69 74 74 65 64 2e  tor are omitted.
e5f0: 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49  .}..COMPILE_OPTI
e600: 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ON {SQLITE_OMIT_
e610: 54 43 4c 5f 56 41 52 49 41 42 4c 45 7d 20 7b 0a  TCL_VARIABLE} {.
e620: 20 20 49 66 20 74 68 69 73 20 6d 61 63 72 6f 20    If this macro 
e630: 69 73 20 64 65 66 69 6e 65 64 2c 20 74 68 65 6e  is defined, then
e640: 20 74 68 65 20 73 70 65 63 69 61 6c 20 22 24 3c   the special "$<
e650: 76 61 72 69 61 62 6c 65 2d 6e 61 6d 65 3e 22 20  variable-name>" 
e660: 73 79 6e 74 61 78 0a 20 20 75 73 65 64 20 74 6f  syntax.  used to
e670: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 62   automatically b
e680: 69 6e 64 20 53 51 4c 20 76 61 72 69 61 62 6c 65  ind SQL variable
e690: 73 20 74 6f 20 54 43 4c 20 76 61 72 69 61 62 6c  s to TCL variabl
e6a0: 65 73 20 69 73 20 6f 6d 69 74 74 65 64 2e 0a 7d  es is omitted..}
e6b0: 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e  ..COMPILE_OPTION
e6c0: 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 45   {SQLITE_OMIT_TE
e6d0: 4d 50 44 42 7d 20 7b 0a 20 20 54 68 69 73 20 6f  MPDB} {.  This o
e6e0: 70 74 69 6f 6e 20 6f 6d 69 74 73 20 73 75 70 70  ption omits supp
e6f0: 6f 72 74 20 66 6f 72 20 54 45 4d 50 20 6f 72 20  ort for TEMP or 
e700: 54 45 4d 50 4f 52 41 52 59 20 74 61 62 6c 65 73  TEMPORARY tables
e710: 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54  ..}..COMPILE_OPT
e720: 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54  ION {SQLITE_OMIT
e730: 5f 54 52 41 43 45 7d 20 7b 0a 20 20 54 68 69 73  _TRACE} {.  This
e740: 20 6f 70 74 69 6f 6e 20 6f 6d 69 74 73 20 73 75   option omits su
e750: 70 70 6f 72 74 20 66 6f 72 20 74 68 65 20 5b 73  pport for the [s
e760: 71 6c 69 74 65 33 5f 70 72 6f 66 69 6c 65 28 29  qlite3_profile()
e770: 5d 20 61 6e 64 0a 20 20 5b 73 71 6c 69 74 65 33  ] and.  [sqlite3
e780: 5f 74 72 61 63 65 28 29 5d 20 69 6e 74 65 72 66  _trace()] interf
e790: 61 63 65 73 20 61 6e 64 20 74 68 65 69 72 20 61  aces and their a
e7a0: 73 73 6f 63 69 61 74 65 64 20 6c 6f 67 69 63 2e  ssociated logic.
e7b0: 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49  .}..COMPILE_OPTI
e7c0: 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ON {SQLITE_OMIT_
e7d0: 54 52 49 47 47 45 52 7d 20 7b 0a 20 20 44 65 66  TRIGGER} {.  Def
e7e0: 69 6e 69 6e 67 20 74 68 69 73 20 6f 70 74 69 6f  ining this optio
e7f0: 6e 20 6f 6d 69 74 73 20 73 75 70 70 6f 72 74 20  n omits support 
e800: 66 6f 72 20 54 52 49 47 47 45 52 20 6f 62 6a 65  for TRIGGER obje
e810: 63 74 73 2e 20 4e 65 69 74 68 65 72 20 74 68 65  cts. Neither the
e820: 20 0a 20 20 5b 43 52 45 41 54 45 20 54 52 49 47   .  [CREATE TRIG
e830: 47 45 52 5d 20 6f 72 20 5b 44 52 4f 50 20 54 52  GER] or [DROP TR
e840: 49 47 47 45 52 5d 0a 20 20 63 6f 6d 6d 61 6e 64  IGGER].  command
e850: 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20  s are available 
e860: 69 6e 20 74 68 69 73 20 63 61 73 65 2c 20 61 6e  in this case, an
e870: 64 20 61 74 74 65 6d 70 74 69 6e 67 20 74 6f 20  d attempting to 
e880: 65 78 65 63 75 74 65 0a 20 20 65 69 74 68 65 72  execute.  either
e890: 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20   will result in 
e8a0: 61 20 70 61 72 73 65 20 65 72 72 6f 72 2e 0a 20  a parse error.. 
e8b0: 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 61 6c 73   This option als
e8c0: 6f 20 64 69 73 61 62 6c 65 73 20 65 6e 66 6f 72  o disables enfor
e8d0: 63 65 6d 65 6e 74 20 6f 66 20 5b 66 6f 72 65 69  cement of [forei
e8e0: 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
e8f0: 74 73 5d 2c 0a 20 20 73 69 6e 63 65 20 74 68 65  ts],.  since the
e900: 20 63 6f 64 65 20 74 68 61 74 20 69 6d 70 6c 65   code that imple
e910: 6d 65 6e 74 73 20 74 72 69 67 67 65 72 73 20 61  ments triggers a
e920: 6e 64 20 77 68 69 63 68 20 69 73 20 6f 6d 69 74  nd which is omit
e930: 74 65 64 20 62 79 20 74 68 69 73 0a 20 20 6f 70  ted by this.  op
e940: 74 69 6f 6e 20 69 73 20 61 6c 73 6f 20 75 73 65  tion is also use
e950: 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 5b  d to implement [
e960: 66 6f 72 65 69 67 6e 20 6b 65 79 20 61 63 74 69  foreign key acti
e970: 6f 6e 73 5d 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45  ons]..}..COMPILE
e980: 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f  _OPTION {SQLITE_
e990: 4f 4d 49 54 5f 54 52 55 4e 43 41 54 45 5f 4f 50  OMIT_TRUNCATE_OP
e9a0: 54 49 4d 49 5a 41 54 49 4f 4e 7d 20 7b 0a 20 20  TIMIZATION} {.  
e9b0: 41 20 64 65 66 61 75 6c 74 20 62 75 69 6c 64 20  A default build 
e9c0: 6f 66 20 53 51 4c 69 74 65 2c 20 69 66 20 61 20  of SQLite, if a 
e9d0: 5b 44 45 4c 45 54 45 5d 20 73 74 61 74 65 6d 65  [DELETE] stateme
e9e0: 6e 74 20 68 61 73 20 6e 6f 20 57 48 45 52 45 20  nt has no WHERE 
e9f0: 63 6c 61 75 73 65 0a 20 20 61 6e 64 20 6f 70 65  clause.  and ope
ea00: 72 61 74 65 73 20 6f 6e 20 61 20 74 61 62 6c 65  rates on a table
ea10: 20 77 69 74 68 20 6e 6f 20 74 72 69 67 67 65 72   with no trigger
ea20: 73 2c 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69  s, an optimizati
ea30: 6f 6e 20 6f 63 63 75 72 73 20 74 68 61 74 0a 20  on occurs that. 
ea40: 20 63 61 75 73 65 73 20 74 68 65 20 44 45 4c 45   causes the DELE
ea50: 54 45 20 74 6f 20 6f 63 63 75 72 20 62 79 20 64  TE to occur by d
ea60: 72 6f 70 70 69 6e 67 20 61 6e 64 20 72 65 63 72  ropping and recr
ea70: 65 61 74 69 6e 67 20 74 68 65 20 74 61 62 6c 65  eating the table
ea80: 2e 20 20 0a 20 20 44 72 6f 70 70 69 6e 67 20 61  .  .  Dropping a
ea90: 6e 64 20 72 65 63 72 65 61 74 69 6e 67 20 61 20  nd recreating a 
eaa0: 74 61 62 6c 65 20 69 73 20 75 73 75 61 6c 6c 79  table is usually
eab0: 20 6d 75 63 68 20 66 61 73 74 65 72 20 74 68 61   much faster tha
eac0: 6e 20 64 65 6c 65 74 69 6e 67 0a 20 20 74 68 65  n deleting.  the
ead0: 20 74 61 62 6c 65 20 63 6f 6e 74 65 6e 74 20 72   table content r
eae0: 6f 77 20 62 79 20 72 6f 77 2e 20 20 54 68 69 73  ow by row.  This
eaf0: 20 69 73 20 74 68 65 20 22 74 72 75 6e 63 61 74   is the "truncat
eb00: 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 22 2e  e optimization".
eb10: 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49  .}..COMPILE_OPTI
eb20: 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ON {SQLITE_OMIT_
eb30: 55 54 46 31 36 7d 20 7b 0a 20 20 54 68 69 73 20  UTF16} {.  This 
eb40: 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 74 6f  macro is used to
eb50: 20 6f 6d 69 74 20 73 75 70 70 6f 72 74 20 66 6f   omit support fo
eb60: 72 20 55 54 46 31 36 20 74 65 78 74 20 65 6e 63  r UTF16 text enc
eb70: 6f 64 69 6e 67 2e 20 57 68 65 6e 20 74 68 69 73  oding. When this
eb80: 20 69 73 0a 20 20 64 65 66 69 6e 65 64 20 61 6c   is.  defined al
eb90: 6c 20 41 50 49 20 66 75 6e 63 74 69 6f 6e 73 20  l API functions 
eba0: 74 68 61 74 20 72 65 74 75 72 6e 20 6f 72 20 61  that return or a
ebb0: 63 63 65 70 74 20 55 54 46 31 36 20 65 6e 63 6f  ccept UTF16 enco
ebc0: 64 65 64 20 74 65 78 74 20 61 72 65 0a 20 20 75  ded text are.  u
ebd0: 6e 61 76 61 69 6c 61 62 6c 65 2e 20 54 68 65 73  navailable. Thes
ebe0: 65 20 66 75 6e 63 74 69 6f 6e 73 20 63 61 6e 20  e functions can 
ebf0: 62 65 20 69 64 65 6e 74 69 66 69 65 64 20 62 79  be identified by
ec00: 20 74 68 65 20 66 61 63 74 20 74 68 61 74 20 74   the fact that t
ec10: 68 65 79 20 65 6e 64 0a 20 20 77 69 74 68 20 27  hey end.  with '
ec20: 31 36 27 2c 20 66 6f 72 20 65 78 61 6d 70 6c 65  16', for example
ec30: 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72   [sqlite3_prepar
ec40: 65 31 36 28 29 5d 2c 20 5b 73 71 6c 69 74 65 33  e16()], [sqlite3
ec50: 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 31 36 28 29  _column_text16()
ec60: 5d 20 61 6e 64 0a 20 20 5b 73 71 6c 69 74 65 33  ] and.  [sqlite3
ec70: 5f 62 69 6e 64 5f 74 65 78 74 31 36 28 29 5d 2e  _bind_text16()].
ec80: 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49  .}..COMPILE_OPTI
ec90: 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ON {SQLITE_OMIT_
eca0: 56 41 43 55 55 4d 7d 20 7b 0a 20 20 57 68 65 6e  VACUUM} {.  When
ecb0: 20 74 68 69 73 20 6f 70 74 69 6f 6e 20 69 73 20   this option is 
ecc0: 64 65 66 69 6e 65 64 2c 20 74 68 65 20 5b 56 41  defined, the [VA
ecd0: 43 55 55 4d 5d 0a 20 20 63 6f 6d 6d 61 6e 64 20  CUUM].  command 
ece0: 69 73 20 6e 6f 74 20 69 6e 63 6c 75 64 65 64 20  is not included 
ecf0: 69 6e 20 74 68 65 20 6c 69 62 72 61 72 79 2e 0a  in the library..
ed00: 20 20 45 78 65 63 75 74 69 6e 67 20 61 20 5b 56    Executing a [V
ed10: 41 43 55 55 4d 5d 20 73 74 61 74 65 6d 65 6e 74  ACUUM] statement
ed20: 20 63 61 75 73 65 73 20 0a 20 20 61 20 70 61 72   causes .  a par
ed30: 73 65 20 65 72 72 6f 72 2e 0a 7d 0a 0a 43 4f 4d  se error..}..COM
ed40: 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c  PILE_OPTION {SQL
ed50: 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 7d 20 7b  ITE_OMIT_VIEW} {
ed60: 0a 20 20 44 65 66 69 6e 69 6e 67 20 74 68 69 73  .  Defining this
ed70: 20 6f 70 74 69 6f 6e 20 6f 6d 69 74 73 20 73 75   option omits su
ed80: 70 70 6f 72 74 20 66 6f 72 20 56 49 45 57 20 6f  pport for VIEW o
ed90: 62 6a 65 63 74 73 2e 20 4e 65 69 74 68 65 72 20  bjects. Neither 
eda0: 74 68 65 20 0a 20 20 5b 43 52 45 41 54 45 20 56  the .  [CREATE V
edb0: 49 45 57 5d 20 6e 6f 72 20 74 68 65 20 5b 44 52  IEW] nor the [DR
edc0: 4f 50 20 56 49 45 57 5d 0a 20 20 63 6f 6d 6d 61  OP VIEW].  comma
edd0: 6e 64 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c  nds are availabl
ede0: 65 20 69 6e 20 74 68 69 73 20 63 61 73 65 2c 20  e in this case, 
edf0: 61 6e 64 0a 20 20 61 74 74 65 6d 70 74 69 6e 67  and.  attempting
ee00: 20 74 6f 20 65 78 65 63 75 74 65 20 65 69 74 68   to execute eith
ee10: 65 72 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69  er will result i
ee20: 6e 20 61 20 70 61 72 73 65 20 65 72 72 6f 72 2e  n a parse error.
ee30: 0a 0a 20 20 57 41 52 4e 49 4e 47 3a 20 49 66 20  ..  WARNING: If 
ee40: 74 68 69 73 20 6d 61 63 72 6f 20 69 73 20 64 65  this macro is de
ee50: 66 69 6e 65 64 2c 20 69 74 20 77 69 6c 6c 20 6e  fined, it will n
ee60: 6f 74 20 62 65 20 70 6f 73 73 69 62 6c 65 20 74  ot be possible t
ee70: 6f 20 6f 70 65 6e 20 61 20 64 61 74 61 62 61 73  o open a databas
ee80: 65 0a 20 20 66 6f 72 20 77 68 69 63 68 20 74 68  e.  for which th
ee90: 65 20 73 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e  e schema contain
eea0: 73 20 56 49 45 57 20 6f 62 6a 65 63 74 73 2e 20  s VIEW objects. 
eeb0: 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49  .}..COMPILE_OPTI
eec0: 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ON {SQLITE_OMIT_
eed0: 56 49 52 54 55 41 4c 54 41 42 4c 45 7d 20 7b 0a  VIRTUALTABLE} {.
eee0: 20 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 6f 6d    This option om
eef0: 69 74 73 20 73 75 70 70 6f 72 74 20 66 6f 72 20  its support for 
ef00: 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 76 74 61  the [sqlite3_vta
ef10: 62 20 7c 20 56 69 72 74 75 61 6c 20 54 61 62 6c  b | Virtual Tabl
ef20: 65 5d 0a 20 20 6d 65 63 68 61 6e 69 73 6d 20 69  e].  mechanism i
ef30: 6e 20 53 51 4c 69 74 65 2e 0a 7d 0a 0a 43 4f 4d  n SQLite..}..COM
ef40: 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c  PILE_OPTION {SQL
ef50: 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 7d 20 7b 0a  ITE_OMIT_WAL} {.
ef60: 20 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 6f 6d    This option om
ef70: 69 74 73 20 74 68 65 20 22 5b 77 72 69 74 65 2d  its the "[write-
ef80: 61 68 65 61 64 20 6c 6f 67 5d 22 20 28 61 2e 6b  ahead log]" (a.k
ef90: 2e 61 2e 20 22 5b 57 41 4c 5d 22 29 20 63 61 70  .a. "[WAL]") cap
efa0: 61 62 69 6c 69 74 79 2e 0a 7d 0a 0a 43 4f 4d 50  ability..}..COMP
efb0: 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49  ILE_OPTION {SQLI
efc0: 54 45 5f 4f 4d 49 54 5f 57 53 44 7d 20 7b 0a 20  TE_OMIT_WSD} {. 
efd0: 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 62 75 69   This option bui
efe0: 6c 64 73 20 61 20 76 65 72 73 69 6f 6e 20 6f 66  lds a version of
eff0: 20 74 68 65 20 53 51 4c 69 74 65 20 6c 69 62 72   the SQLite libr
f000: 61 72 79 20 74 68 61 74 20 63 6f 6e 74 61 69 6e  ary that contain
f010: 73 20 6e 6f 0a 20 20 57 72 69 74 61 62 6c 65 20  s no.  Writable 
f020: 53 74 61 74 69 63 20 44 61 74 61 20 28 57 53 44  Static Data (WSD
f030: 29 2e 20 20 57 53 44 20 69 73 20 67 6c 6f 62 61  ).  WSD is globa
f040: 6c 20 76 61 72 69 61 62 6c 65 73 20 61 6e 64 2f  l variables and/
f050: 6f 72 20 73 74 61 74 69 63 0a 20 20 76 61 72 69  or static.  vari
f060: 61 62 6c 65 73 2e 20 20 53 6f 6d 65 20 70 6c 61  ables.  Some pla
f070: 74 66 6f 72 6d 73 20 64 6f 20 6e 6f 74 20 73 75  tforms do not su
f080: 70 70 6f 72 74 20 57 53 44 2c 20 61 6e 64 20 74  pport WSD, and t
f090: 68 69 73 20 6f 70 74 69 6f 6e 20 69 73 20 6e 65  his option is ne
f0a0: 63 65 73 73 61 72 79 0a 20 20 69 6e 20 6f 72 64  cessary.  in ord
f0b0: 65 72 20 66 6f 72 20 53 51 4c 69 74 65 20 74 6f  er for SQLite to
f0c0: 20 77 6f 72 6b 20 74 68 6f 73 65 20 70 6c 61 74   work those plat
f0d0: 66 6f 72 6d 73 2e 20 20 0a 0a 20 20 55 6e 6c 69  forms.  ..  Unli
f0e0: 6b 65 20 6f 74 68 65 72 20 4f 4d 49 54 20 6f 70  ke other OMIT op
f0f0: 74 69 6f 6e 73 20 77 68 69 63 68 20 6d 61 6b 65  tions which make
f100: 20 74 68 65 20 53 51 4c 69 74 65 20 6c 69 62 72   the SQLite libr
f110: 61 72 79 20 73 6d 61 6c 6c 65 72 2c 0a 20 20 74  ary smaller,.  t
f120: 68 69 73 20 6f 70 74 69 6f 6e 20 61 63 74 75 61  his option actua
f130: 6c 6c 79 20 69 6e 63 72 65 61 73 65 73 20 74 68  lly increases th
f140: 65 20 73 69 7a 65 20 6f 66 20 53 51 4c 69 74 65  e size of SQLite
f150: 20 61 6e 64 20 6d 61 6b 65 73 20 69 74 20 72 75   and makes it ru
f160: 6e 0a 20 20 61 20 6c 69 74 74 6c 65 20 73 6c 6f  n.  a little slo
f170: 77 65 72 2e 20 20 4f 6e 6c 79 20 75 73 65 20 74  wer.  Only use t
f180: 68 69 73 20 6f 70 74 69 6f 6e 20 69 66 20 53 51  his option if SQ
f190: 4c 69 74 65 20 69 73 20 62 65 69 6e 67 20 62 75  Lite is being bu
f1a0: 69 6c 74 20 66 6f 72 20 61 6e 0a 20 20 65 6d 62  ilt for an.  emb
f1b0: 65 64 64 65 64 20 74 61 72 67 65 74 20 74 68 61  edded target tha
f1c0: 74 20 64 6f 65 73 20 6e 6f 74 20 73 75 70 70 6f  t does not suppo
f1d0: 72 74 20 57 53 44 2e 0a 7d 0a 0a 43 4f 4d 50 49  rt WSD..}..COMPI
f1e0: 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54  LE_OPTION {SQLIT
f1f0: 45 5f 4f 4d 49 54 5f 58 46 45 52 5f 4f 50 54 7d  E_OMIT_XFER_OPT}
f200: 20 7b 0a 20 20 54 68 69 73 20 6f 70 74 69 6f 6e   {.  This option
f210: 20 6f 6d 69 74 73 20 73 75 70 70 6f 72 74 20 66   omits support f
f220: 6f 72 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  or optimizations
f230: 20 74 68 61 74 20 68 65 6c 70 20 73 74 61 74 65   that help state
f240: 6d 65 6e 74 73 0a 20 20 6f 66 20 74 68 65 20 66  ments.  of the f
f250: 6f 72 6d 20 22 49 4e 53 45 52 54 20 49 4e 54 4f  orm "INSERT INTO
f260: 20 2e 2e 2e 20 53 45 4c 45 43 54 20 2e 2e 2e 22   ... SELECT ..."
f270: 20 72 75 6e 20 66 61 73 74 65 72 2e 0a 7d 0a 0a   run faster..}..
f280: 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b  COMPILE_OPTION {
f290: 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c  SQLITE_ZERO_MALL
f2a0: 4f 43 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70 74  OC} {.  This opt
f2b0: 69 6f 6e 20 6f 6d 69 74 73 20 62 6f 74 68 20 74  ion omits both t
f2c0: 68 65 20 5b 64 65 66 61 75 6c 74 20 6d 65 6d 6f  he [default memo
f2d0: 72 79 20 61 6c 6c 6f 63 61 74 6f 72 5d 20 61 6e  ry allocator] an
f2e0: 64 20 74 68 65 0a 20 20 5b 64 65 62 75 67 67 69  d the.  [debuggi
f2f0: 6e 67 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  ng memory alloca
f300: 74 6f 72 5d 20 66 72 6f 6d 20 74 68 65 20 62 75  tor] from the bu
f310: 69 6c 64 20 61 6e 64 20 73 75 62 73 74 69 74 75  ild and substitu
f320: 74 65 73 20 61 20 73 74 75 62 0a 20 20 6d 65 6d  tes a stub.  mem
f330: 6f 72 79 20 61 6c 6c 6f 63 61 74 6f 72 20 74 68  ory allocator th
f340: 61 74 20 61 6c 77 61 79 73 20 66 61 69 6c 73 2e  at always fails.
f350: 20 20 53 51 4c 69 74 65 20 77 69 6c 6c 20 6e 6f    SQLite will no
f360: 74 20 72 75 6e 20 77 69 74 68 20 74 68 69 73 0a  t run with this.
f370: 20 20 73 74 75 62 20 6d 65 6d 6f 72 79 20 61 6c    stub memory al
f380: 6c 6f 63 61 74 6f 72 20 73 69 6e 63 65 20 69 74  locator since it
f390: 20 77 69 6c 6c 20 62 65 20 75 6e 61 62 6c 65 20   will be unable 
f3a0: 74 6f 20 61 6c 6c 6f 63 61 74 65 20 6d 65 6d 6f  to allocate memo
f3b0: 72 79 2e 20 20 42 75 74 0a 20 20 74 68 69 73 20  ry.  But.  this 
f3c0: 73 74 75 62 20 63 61 6e 20 62 65 20 72 65 70 6c  stub can be repl
f3d0: 61 63 65 64 20 61 74 20 73 74 61 72 74 2d 74 69  aced at start-ti
f3e0: 6d 65 20 75 73 69 6e 67 0a 20 20 5b 73 71 6c 69  me using.  [sqli
f3f0: 74 65 33 5f 63 6f 6e 66 69 67 5d 28 5b 53 51 4c  te3_config]([SQL
f400: 49 54 45 5f 43 4f 4e 46 49 47 5f 4d 41 4c 4c 4f  ITE_CONFIG_MALLO
f410: 43 5d 2c 2e 2e 2e 29 20 6f 72 0a 20 20 5b 73 71  C],...) or.  [sq
f420: 6c 69 74 65 33 5f 63 6f 6e 66 69 67 5d 28 5b 53  lite3_config]([S
f430: 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 48 45 41  QLITE_CONFIG_HEA
f440: 50 5d 2c 2e 2e 2e 29 2e 0a 20 20 53 6f 20 74 68  P],...)..  So th
f450: 65 20 6e 65 74 20 65 66 66 65 63 74 20 6f 66 20  e net effect of 
f460: 74 68 69 73 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  this compile-tim
f470: 65 20 6f 70 74 69 6f 6e 20 69 73 20 74 68 61 74  e option is that
f480: 20 69 74 20 61 6c 6c 6f 77 73 20 53 51 4c 69 74   it allows SQLit
f490: 65 0a 20 20 74 6f 20 62 65 20 63 6f 6d 70 69 6c  e.  to be compil
f4a0: 65 64 20 61 6e 64 20 6c 69 6e 6b 65 64 20 61 67  ed and linked ag
f4b0: 61 69 6e 73 74 20 61 20 73 79 73 74 65 6d 20 6c  ainst a system l
f4c0: 69 62 72 61 72 79 20 74 68 61 74 20 64 6f 65 73  ibrary that does
f4d0: 20 6e 6f 74 20 73 75 70 70 6f 72 74 0a 20 20 6d   not support.  m
f4e0: 61 6c 6c 6f 63 28 29 2c 20 66 72 65 65 28 29 2c  alloc(), free(),
f4f0: 20 61 6e 64 2f 6f 72 20 72 65 61 6c 6c 6f 63 28   and/or realloc(
f500: 29 2e 0a 7d 0a 0a 3c 2f 74 63 6c 3e 0a 3c 61 20  )..}..</tcl>.<a 
f510: 6e 61 6d 65 3d 22 64 65 62 75 67 6f 70 74 69 6f  name="debugoptio
f520: 6e 73 22 3e 3c 2f 61 3e 0a 3c 68 31 3e 20 41 6e  ns"></a>.<h1> An
f530: 61 6c 79 73 69 73 20 61 6e 64 20 44 65 62 75 67  alysis and Debug
f540: 67 69 6e 67 20 4f 70 74 69 6f 6e 73 3c 2f 68 31  ging Options</h1
f550: 3e 0a 3c 74 63 6c 3e 0a 0a 43 4f 4d 50 49 4c 45  >.<tcl>..COMPILE
f560: 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f  _OPTION {SQLITE_
f570: 44 45 42 55 47 7d 20 7b 0a 20 20 54 68 65 20 53  DEBUG} {.  The S
f580: 51 4c 69 74 65 20 73 6f 75 72 63 65 20 63 6f 64  QLite source cod
f590: 65 20 63 6f 6e 74 61 69 6e 73 20 6c 69 74 65 72  e contains liter
f5a0: 61 6c 6c 79 20 74 68 6f 75 73 61 6e 64 73 20 6f  ally thousands o
f5b0: 66 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65  f assert() state
f5c0: 6d 65 6e 74 73 0a 20 20 75 73 65 64 20 74 6f 20  ments.  used to 
f5d0: 76 65 72 69 66 79 20 69 6e 74 65 72 6e 61 6c 20  verify internal 
f5e0: 61 73 73 75 6d 70 74 69 6f 6e 73 20 61 6e 64 20  assumptions and 
f5f0: 73 75 62 72 6f 75 74 69 6e 65 20 70 72 65 63 6f  subroutine preco
f600: 6e 64 69 74 69 6f 6e 73 20 61 6e 64 0a 20 20 70  nditions and.  p
f610: 6f 73 74 63 6f 6e 64 69 74 69 6f 6e 73 2e 20 20  ostconditions.  
f620: 54 68 65 73 65 20 61 73 73 65 72 74 28 29 20 73  These assert() s
f630: 74 61 74 65 6d 65 6e 74 73 20 61 72 65 20 6e 6f  tatements are no
f640: 72 6d 61 6c 6c 79 20 74 75 72 6e 65 64 20 6f 66  rmally turned of
f650: 66 0a 20 20 28 74 68 65 79 20 67 65 6e 65 72 61  f.  (they genera
f660: 74 65 20 6e 6f 20 63 6f 64 65 29 20 73 69 6e 63  te no code) sinc
f670: 65 20 74 75 72 6e 69 6e 67 20 74 68 65 6d 20 6f  e turning them o
f680: 6e 20 6d 61 6b 65 73 20 53 51 4c 69 74 65 20 72  n makes SQLite r
f690: 75 6e 20 61 70 70 72 6f 78 69 6d 61 74 65 6c 79  un approximately
f6a0: 0a 20 20 74 68 72 65 65 20 74 69 6d 65 73 20 73  .  three times s
f6b0: 6c 6f 77 65 72 2e 20 20 42 75 74 20 66 6f 72 20  lower.  But for 
f6c0: 74 65 73 74 69 6e 67 20 61 6e 64 20 61 6e 61 6c  testing and anal
f6d0: 79 73 69 73 2c 20 69 74 20 69 73 20 75 73 65 66  ysis, it is usef
f6e0: 75 6c 20 74 6f 20 74 75 72 6e 0a 20 20 74 68 65  ul to turn.  the
f6f0: 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
f700: 65 6e 74 73 20 6f 6e 2e 20 20 54 68 65 20 53 51  ents on.  The SQ
f710: 4c 49 54 45 5f 44 45 42 55 47 20 63 6f 6d 70 69  LITE_DEBUG compi
f720: 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 64  le-time option d
f730: 6f 65 73 20 74 68 69 73 2e 0a 20 20 3c 70 3e 53  oes this..  <p>S
f740: 51 4c 49 54 45 5f 44 45 42 55 47 20 61 6c 73 6f  QLITE_DEBUG also
f750: 20 65 6e 61 62 6c 65 73 20 73 6f 6d 65 20 6f 74   enables some ot
f760: 68 65 72 20 64 65 62 75 67 67 69 6e 67 20 66 65  her debugging fe
f770: 61 74 75 72 65 73 2c 20 73 75 63 68 20 61 73 0a  atures, such as.
f780: 20 20 73 70 65 63 69 61 6c 20 5b 50 52 41 47 4d    special [PRAGM
f790: 41 5d 20 73 74 61 74 65 6d 65 6e 74 73 20 74 68  A] statements th
f7a0: 61 74 20 74 75 72 6e 20 6f 6e 20 74 72 61 63 69  at turn on traci
f7b0: 6e 67 20 61 6e 64 20 6c 69 73 74 69 6e 67 20 66  ng and listing f
f7c0: 65 61 74 75 72 65 73 0a 20 20 75 73 65 64 20 66  eatures.  used f
f7d0: 6f 72 20 74 72 6f 75 62 6c 65 73 68 6f 6f 74 69  or troubleshooti
f7e0: 6e 67 20 61 6e 64 20 61 6e 61 6c 79 73 69 73 20  ng and analysis 
f7f0: 6f 66 20 74 68 65 20 5b 56 44 42 45 5d 20 61 6e  of the [VDBE] an
f800: 64 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72  d code generator
f810: 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54  ..}..COMPILE_OPT
f820: 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 4d 45 4d 44  ION {SQLITE_MEMD
f830: 45 42 55 47 7d 20 7b 0a 20 20 54 68 65 20 53 51  EBUG} {.  The SQ
f840: 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 20 6f 70  LITE_MEMDEBUG op
f850: 74 69 6f 6e 20 63 61 75 73 65 73 20 61 6e 20 69  tion causes an i
f860: 6e 73 74 72 75 6d 65 6e 74 65 64 20 0a 20 20 5b  nstrumented .  [
f870: 64 65 62 75 67 67 69 6e 67 20 6d 65 6d 6f 72 79  debugging memory
f880: 20 61 6c 6c 6f 63 61 74 6f 72 5d 0a 20 20 74 6f   allocator].  to
f890: 20 62 65 20 75 73 65 64 20 61 73 20 74 68 65 20   be used as the 
f8a0: 64 65 66 61 75 6c 74 20 6d 65 6d 6f 72 79 20 61  default memory a
f8b0: 6c 6c 6f 63 61 74 6f 72 20 77 69 74 68 69 6e 20  llocator within 
f8c0: 53 51 4c 69 74 65 2e 20 20 54 68 65 0a 20 20 69  SQLite.  The.  i
f8d0: 6e 73 74 72 75 6d 65 6e 74 65 64 20 6d 65 6d 6f  nstrumented memo
f8e0: 72 79 20 61 6c 6c 6f 63 61 74 6f 72 20 63 68 65  ry allocator che
f8f0: 63 6b 73 20 66 6f 72 20 6d 69 73 75 73 65 20 6f  cks for misuse o
f900: 66 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c  f dynamically al
f910: 6c 6f 63 61 74 65 64 0a 20 20 6d 65 6d 6f 72 79  located.  memory
f920: 2e 20 20 45 78 61 6d 70 6c 65 73 20 6f 66 20 6d  .  Examples of m
f930: 69 73 75 73 65 20 69 6e 63 6c 75 64 65 20 75 73  isuse include us
f940: 69 6e 67 20 6d 65 6d 6f 72 79 20 61 66 74 65 72  ing memory after
f950: 20 69 74 20 69 73 20 66 72 65 65 64 2c 0a 20 20   it is freed,.  
f960: 77 72 69 74 69 6e 67 20 6f 66 66 20 74 68 65 20  writing off the 
f970: 65 6e 64 73 20 6f 66 20 61 20 6d 65 6d 6f 72 79  ends of a memory
f980: 20 61 6c 6c 6f 63 61 74 69 6f 6e 2c 20 66 72 65   allocation, fre
f990: 65 69 6e 67 20 6d 65 6d 6f 72 79 20 6e 6f 74 20  eing memory not 
f9a0: 70 72 65 76 69 6f 75 73 6c 79 0a 20 20 6f 62 74  previously.  obt
f9b0: 61 69 6e 65 64 20 66 72 6f 6d 20 74 68 65 20 6d  ained from the m
f9c0: 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 6f 72 2c  emory allocator,
f9d0: 20 6f 72 20 66 61 69 6c 69 6e 67 20 74 6f 20 69   or failing to i
f9e0: 6e 69 74 69 61 6c 69 7a 65 20 6e 65 77 6c 79 0a  nitialize newly.
f9f0: 20 20 61 6c 6c 6f 63 61 74 65 64 20 6d 65 6d 6f    allocated memo
fa00: 72 79 2e 0a 7d 0a 0a 3c 2f 74 63 6c 3e 0a 3c 61  ry..}..</tcl>.<a
fa10: 20 6e 61 6d 65 3d 22 77 69 6e 33 32 6f 70 74 69   name="win32opti
fa20: 6f 6e 73 22 3e 3c 2f 61 3e 0a 3c 68 31 3e 20 57  ons"></a>.<h1> W
fa30: 69 6e 64 6f 77 73 2d 53 70 65 63 69 66 69 63 20  indows-Specific 
fa40: 4f 70 74 69 6f 6e 73 3c 2f 68 31 3e 0a 3c 74 63  Options</h1>.<tc
fa50: 6c 3e 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49  l>..COMPILE_OPTI
fa60: 4f 4e 20 7b 53 51 4c 49 54 45 5f 57 49 4e 33 32  ON {SQLITE_WIN32
fa70: 5f 48 45 41 50 5f 43 52 45 41 54 45 7d 20 7b 0a  _HEAP_CREATE} {.
fa80: 20 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 66 6f    This option fo
fa90: 72 63 65 73 20 74 68 65 20 57 69 6e 33 32 20 6e  rces the Win32 n
faa0: 61 74 69 76 65 20 6d 65 6d 6f 72 79 20 61 6c 6c  ative memory all
fab0: 6f 63 61 74 6f 72 2c 20 77 68 65 6e 20 65 6e 61  ocator, when ena
fac0: 62 6c 65 64 2c 20 74 6f 0a 20 20 63 72 65 61 74  bled, to.  creat
fad0: 65 20 61 20 70 72 69 76 61 74 65 20 68 65 61 70  e a private heap
fae0: 20 74 6f 20 68 6f 6c 64 20 61 6c 6c 20 6d 65 6d   to hold all mem
faf0: 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2e  ory allocations.
fb00: 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49  .}..COMPILE_OPTI
fb10: 4f 4e 20 7b 53 51 4c 49 54 45 5f 57 49 4e 33 32  ON {SQLITE_WIN32
fb20: 5f 4d 41 4c 4c 4f 43 5f 56 41 4c 49 44 41 54 45  _MALLOC_VALIDATE
fb30: 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70 74 69 6f  } {.  This optio
fb40: 6e 20 66 6f 72 63 65 73 20 74 68 65 20 57 69 6e  n forces the Win
fb50: 33 32 20 6e 61 74 69 76 65 20 6d 65 6d 6f 72 79  32 native memory
fb60: 20 61 6c 6c 6f 63 61 74 6f 72 2c 20 77 68 65 6e   allocator, when
fb70: 20 65 6e 61 62 6c 65 64 2c 20 74 6f 0a 20 20 6d   enabled, to.  m
fb80: 61 6b 65 20 73 74 72 61 74 65 67 69 63 20 63 61  ake strategic ca
fb90: 6c 6c 73 20 69 6e 74 6f 20 74 68 65 20 48 65 61  lls into the Hea
fba0: 70 56 61 6c 69 64 61 74 65 28 29 20 66 75 6e 63  pValidate() func
fbb0: 74 69 6f 6e 20 69 66 20 61 73 73 65 72 74 28 29  tion if assert()
fbc0: 20 69 73 20 61 6c 73 6f 0a 20 20 65 6e 61 62 6c   is also.  enabl
fbd0: 65 64 2e 0a 7d 0a 0a 3c 2f 74 63 6c 3e 0a 3c 61  ed..}..</tcl>.<a
fbe0: 20 6e 61 6d 65 3d 22 6c 69 6e 6b 61 67 65 22 3e   name="linkage">
fbf0: 3c 2f 61 3e 0a 3c 68 31 3e 43 6f 6d 70 69 6c 65  </a>.<h1>Compile
fc00: 72 20 4c 69 6e 6b 61 67 65 20 43 6f 6e 74 72 6f  r Linkage Contro
fc10: 6c 3c 2f 68 31 3e 0a 0a 3c 70 3e 54 68 65 20 66  l</h1>..<p>The f
fc20: 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20  ollowing macros 
fc30: 73 70 65 63 69 66 79 0a 69 6e 74 65 72 66 61 63  specify.interfac
fc40: 65 20 6c 69 6e 6b 61 67 65 20 66 6f 72 20 63 65  e linkage for ce
fc50: 72 74 61 69 6e 20 6b 69 6e 64 73 20 6f 66 20 53  rtain kinds of S
fc60: 51 4c 69 74 65 20 62 75 69 6c 64 73 2e 20 20 54  QLite builds.  T
fc70: 68 65 20 4d 61 6b 65 66 69 6c 65 73 20 77 69 6c  he Makefiles wil
fc80: 6c 20 6e 6f 72 6d 61 6c 6c 79 0a 68 61 6e 64 6c  l normally.handl
fc90: 65 20 73 65 74 74 69 6e 67 20 74 68 65 73 65 20  e setting these 
fca0: 6d 61 63 72 6f 73 20 61 75 74 6f 6d 61 74 69 63  macros automatic
fcb0: 61 6c 6c 79 2e 20 20 41 70 70 6c 69 63 61 74 69  ally.  Applicati
fcc0: 6f 6e 20 64 65 76 65 6c 6f 70 65 72 73 20 73 68  on developers sh
fcd0: 6f 75 6c 64 0a 6e 6f 74 20 6e 65 65 64 20 74 6f  ould.not need to
fce0: 20 77 6f 72 72 79 20 77 69 74 68 20 74 68 65 73   worry with thes
fcf0: 65 20 6d 61 63 72 6f 73 2e 20 20 54 68 65 20 66  e macros.  The f
fd00: 6f 6c 6c 6f 77 69 6e 67 20 64 6f 63 75 6d 65 6e  ollowing documen
fd10: 74 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65  tation about the
fd20: 73 65 20 0a 6d 61 63 72 6f 73 20 69 73 20 69 6e  se .macros is in
fd30: 63 6c 75 64 65 64 20 63 6f 6d 70 6c 65 74 65 6e  cluded completen
fd40: 65 73 73 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a  ess.</p>..<tcl>.
fd50: 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b  COMPILE_OPTION {
fd60: 53 51 4c 49 54 45 5f 41 50 49 7d 20 7b 0a 20 20  SQLITE_API} {.  
fd70: 54 68 69 73 20 6d 61 63 72 6f 20 69 64 65 6e 74  This macro ident
fd80: 69 66 69 65 73 20 61 20 65 78 74 65 72 6e 61 6c  ifies a external
fd90: 6c 79 20 76 69 73 69 62 6c 65 20 69 6e 74 65 72  ly visible inter
fda0: 66 61 63 65 20 66 6f 72 20 53 51 4c 69 74 65 2e  face for SQLite.
fdb0: 0a 20 20 54 68 69 73 20 6d 61 63 72 6f 20 69 73  .  This macro is
fdc0: 20 73 6f 6d 65 74 69 6d 65 73 20 73 65 74 20 74   sometimes set t
fdd0: 6f 20 22 65 78 74 65 72 6e 22 2e 20 20 42 75 74  o "extern".  But
fde0: 20 74 68 65 20 64 65 66 69 6e 69 74 69 6f 6e 20   the definition 
fdf0: 69 73 0a 20 20 63 6f 6d 70 69 6c 65 72 2d 73 70  is.  compiler-sp
fe00: 65 63 69 66 69 63 2e 0a 7d 0a 0a 43 4f 4d 50 49  ecific..}..COMPI
fe10: 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54  LE_OPTION {SQLIT
fe20: 45 5f 41 50 49 43 41 4c 4c 7d 20 7b 0a 20 20 54  E_APICALL} {.  T
fe30: 68 69 73 20 6d 61 63 72 6f 20 69 64 65 6e 74 69  his macro identi
fe40: 66 69 65 73 20 74 68 65 20 63 61 6c 6c 69 6e 67  fies the calling
fe50: 20 63 6f 6e 76 65 6e 74 69 6f 6e 20 75 73 65 64   convention used
fe60: 20 62 79 20 70 75 62 6c 69 63 20 69 6e 74 65 72   by public inter
fe70: 66 61 63 65 0a 20 20 72 6f 75 74 69 6e 65 73 20  face.  routines 
fe80: 69 6e 20 53 51 4c 69 74 65 2e 20 20 54 68 69 73  in SQLite.  This
fe90: 20 6d 61 63 72 6f 20 69 73 20 6e 6f 72 6d 61 6c   macro is normal
fea0: 6c 79 20 64 65 66 69 6e 65 64 20 74 6f 20 62 65  ly defined to be
feb0: 20 6e 6f 74 68 69 6e 67 2c 0a 20 20 74 68 6f 75   nothing,.  thou
fec0: 67 68 20 6f 6e 20 57 69 6e 64 6f 77 73 20 62 75  gh on Windows bu
fed0: 69 6c 64 73 20 69 74 20 63 61 6e 20 73 6f 6d 65  ilds it can some
fee0: 74 69 6d 65 73 20 62 65 20 73 65 74 20 74 6f 20  times be set to 
fef0: 22 5f 5f 63 64 65 63 6c 22 20 6f 72 20 22 5f 5f  "__cdecl" or "__
ff00: 73 74 64 63 61 6c 6c 22 2e 0a 20 20 54 68 65 20  stdcall"..  The 
ff10: 22 5f 5f 63 64 65 63 6c 22 20 73 65 74 74 69 6e  "__cdecl" settin
ff20: 67 20 69 73 20 74 68 65 20 64 65 66 61 75 6c 74  g is the default
ff30: 2c 20 62 75 74 20 22 5f 5f 73 74 64 63 61 6c 6c  , but "__stdcall
ff40: 22 20 69 73 20 75 73 65 64 20 77 68 65 6e 20 53  " is used when S
ff50: 51 4c 69 74 65 0a 20 20 69 73 20 69 6e 74 65 6e  QLite.  is inten
ff60: 64 65 64 20 74 6f 20 62 65 20 63 6f 6d 70 69 6c  ded to be compil
ff70: 65 64 20 61 73 20 61 20 57 69 6e 64 6f 77 73 20  ed as a Windows 
ff80: 73 79 73 74 65 6d 20 6c 69 62 72 61 72 79 2e 0a  system library..
ff90: 20 20 3c 70 3e 0a 20 20 41 20 73 69 6e 67 6c 65    <p>.  A single
ffa0: 20 66 75 6e 63 74 69 6f 6e 20 64 65 63 6c 61 72   function declar
ffb0: 61 74 69 6f 6e 20 73 68 6f 75 6c 64 20 63 6f 6e  ation should con
ffc0: 74 61 69 6e 20 6e 6f 20 6d 6f 72 65 20 74 68 61  tain no more tha
ffd0: 6e 20 6f 6e 65 20 6f 66 0a 20 20 74 68 65 20 66  n one of.  the f
ffe0: 6f 6c 6c 6f 77 69 6e 67 3a 20 20 5b 53 51 4c 49  ollowing:  [SQLI
fff0: 54 45 5f 41 50 49 43 41 4c 4c 5d 2c 20 5b 53 51  TE_APICALL], [SQ
10000 4c 49 54 45 5f 43 41 4c 4c 42 41 43 4b 5d 2c 20  LITE_CALLBACK], 
10010 5b 53 51 4c 49 54 45 5f 43 44 45 43 4c 5d 2c 0a  [SQLITE_CDECL],.
10020 20 20 6f 72 20 5b 53 51 4c 49 54 45 5f 53 59 53    or [SQLITE_SYS
10030 43 41 4c 4c 5d 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c  CALL]..}..COMPIL
10040 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45  E_OPTION {SQLITE
10050 5f 43 41 4c 4c 42 41 43 4b 7d 20 7b 0a 20 20 54  _CALLBACK} {.  T
10060 68 69 73 20 6d 61 63 72 6f 20 73 70 65 63 69 66  his macro specif
10070 69 65 73 20 74 68 65 20 63 61 6c 6c 69 6e 67 20  ies the calling 
10080 63 6f 6e 76 65 6e 74 69 6f 6e 20 75 73 65 64 20  convention used 
10090 62 79 20 63 61 6c 6c 62 61 63 6b 20 70 6f 69 6e  by callback poin
100a0 74 65 72 73 0a 20 20 69 6e 20 53 51 4c 69 74 65  ters.  in SQLite
100b0 2e 20 20 54 68 69 73 20 6d 61 63 72 6f 20 69 73  .  This macro is
100c0 20 6e 6f 72 6d 61 6c 6c 79 20 64 65 66 69 6e 65   normally define
100d0 64 20 74 6f 20 62 65 20 6e 6f 74 68 69 6e 67 2c  d to be nothing,
100e0 20 74 68 6f 75 67 68 20 6f 6e 20 57 69 6e 64 6f   though on Windo
100f0 77 73 0a 20 20 62 75 69 6c 64 73 20 69 74 20 63  ws.  builds it c
10100 61 6e 20 73 6f 6d 65 74 69 6d 65 73 20 62 65 20  an sometimes be 
10110 73 65 74 20 74 6f 20 22 5f 5f 63 64 65 63 6c 22  set to "__cdecl"
10120 20 6f 72 20 22 5f 5f 73 74 64 63 61 6c 6c 22 2e   or "__stdcall".
10130 20 20 54 68 65 0a 20 20 22 5f 5f 63 64 65 63 6c    The.  "__cdecl
10140 22 20 73 65 74 74 69 6e 67 20 69 73 20 74 68 65  " setting is the
10150 20 64 65 66 61 75 6c 74 2c 20 62 75 74 20 22 5f   default, but "_
10160 5f 73 74 64 63 61 6c 6c 22 20 69 73 20 75 73 65  _stdcall" is use
10170 64 20 77 68 65 6e 20 53 51 4c 69 74 65 0a 20 20  d when SQLite.  
10180 69 73 20 69 6e 74 65 6e 64 65 64 20 74 6f 20 62  is intended to b
10190 65 20 63 6f 6d 70 69 6c 65 64 20 61 73 20 61 20  e compiled as a 
101a0 57 69 6e 64 6f 77 73 20 73 79 73 74 65 6d 20 6c  Windows system l
101b0 69 62 72 61 72 79 2e 0a 20 20 3c 70 3e 0a 20 20  ibrary..  <p>.  
101c0 41 20 73 69 6e 67 6c 65 20 66 75 6e 63 74 69 6f  A single functio
101d0 6e 20 64 65 63 6c 61 72 61 74 69 6f 6e 20 73 68  n declaration sh
101e0 6f 75 6c 64 20 63 6f 6e 74 61 69 6e 20 6e 6f 20  ould contain no 
101f0 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 6f 66  more than one of
10200 0a 20 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  .  the following
10210 3a 20 20 5b 53 51 4c 49 54 45 5f 41 50 49 43 41  :  [SQLITE_APICA
10220 4c 4c 5d 2c 20 5b 53 51 4c 49 54 45 5f 43 41 4c  LL], [SQLITE_CAL
10230 4c 42 41 43 4b 5d 2c 20 5b 53 51 4c 49 54 45 5f  LBACK], [SQLITE_
10240 43 44 45 43 4c 5d 2c 0a 20 20 6f 72 20 5b 53 51  CDECL],.  or [SQ
10250 4c 49 54 45 5f 53 59 53 43 41 4c 4c 5d 2e 0a 7d  LITE_SYSCALL]..}
10260 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e  ..COMPILE_OPTION
10270 20 7b 53 51 4c 49 54 45 5f 43 44 45 43 4c 7d 20   {SQLITE_CDECL} 
10280 7b 0a 20 20 54 68 69 73 20 6d 61 63 72 6f 20 73  {.  This macro s
10290 70 65 63 69 66 69 65 73 20 74 68 65 20 63 61 6c  pecifies the cal
102a0 6c 69 6e 67 20 63 6f 6e 76 65 6e 74 69 6f 6e 20  ling convention 
102b0 75 73 65 64 20 62 79 20 76 61 72 61 72 67 73 20  used by varargs 
102c0 69 6e 74 65 72 66 61 63 65 0a 20 20 72 6f 75 74  interface.  rout
102d0 69 6e 65 73 20 69 6e 20 53 51 4c 69 74 65 2e 20  ines in SQLite. 
102e0 20 54 68 69 73 20 6d 61 63 72 6f 20 69 73 20 6e   This macro is n
102f0 6f 72 6d 61 6c 6c 79 20 64 65 66 69 6e 65 64 20  ormally defined 
10300 74 6f 20 62 65 20 6e 6f 74 68 69 6e 67 2c 0a 20  to be nothing,. 
10310 20 74 68 6f 75 67 68 20 6f 6e 20 57 69 6e 64 6f   though on Windo
10320 77 73 20 62 75 69 6c 64 73 20 69 74 20 63 61 6e  ws builds it can
10330 20 73 6f 6d 65 74 69 6d 65 73 20 62 65 20 73 65   sometimes be se
10340 74 20 74 6f 20 22 5f 5f 63 64 65 63 6c 22 2e 20  t to "__cdecl". 
10350 20 54 68 69 73 0a 20 20 6d 61 63 72 6f 20 69 73   This.  macro is
10360 20 75 73 65 64 20 6f 6e 20 76 61 72 61 72 67 73   used on varargs
10370 20 72 6f 75 74 69 6e 65 73 20 61 6e 64 20 73 6f   routines and so
10380 20 63 61 6e 6e 6f 74 20 62 65 20 73 65 74 20 74   cannot be set t
10390 6f 20 22 5f 5f 73 74 64 63 61 6c 6c 22 0a 20 20  o "__stdcall".  
103a0 73 69 6e 63 65 20 74 68 65 20 5f 5f 73 74 64 63  since the __stdc
103b0 61 6c 6c 20 63 61 6c 6c 69 6e 67 20 63 6f 6e 76  all calling conv
103c0 65 6e 74 69 6f 6e 20 64 6f 65 73 20 6e 6f 74 20  ention does not 
103d0 73 75 70 70 6f 72 74 20 76 61 72 61 72 67 73 20  support varargs 
103e0 66 75 6e 63 74 69 6f 6e 73 2e 0a 20 20 3c 70 3e  functions..  <p>
103f0 0a 20 20 41 20 73 69 6e 67 6c 65 20 66 75 6e 63  .  A single func
10400 74 69 6f 6e 20 64 65 63 6c 61 72 61 74 69 6f 6e  tion declaration
10410 20 73 68 6f 75 6c 64 20 63 6f 6e 74 61 69 6e 20   should contain 
10420 6e 6f 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65  no more than one
10430 20 6f 66 0a 20 20 74 68 65 20 66 6f 6c 6c 6f 77   of.  the follow
10440 69 6e 67 3a 20 20 5b 53 51 4c 49 54 45 5f 41 50  ing:  [SQLITE_AP
10450 49 43 41 4c 4c 5d 2c 20 5b 53 51 4c 49 54 45 5f  ICALL], [SQLITE_
10460 43 41 4c 4c 42 41 43 4b 5d 2c 20 5b 53 51 4c 49  CALLBACK], [SQLI
10470 54 45 5f 43 44 45 43 4c 5d 2c 0a 20 20 6f 72 20  TE_CDECL],.  or 
10480 5b 53 51 4c 49 54 45 5f 53 59 53 43 41 4c 4c 5d  [SQLITE_SYSCALL]
10490 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54  ..}..COMPILE_OPT
104a0 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 53 59 53 43  ION {SQLITE_SYSC
104b0 41 4c 4c 7d 20 7b 0a 20 20 54 68 69 73 20 6d 61  ALL} {.  This ma
104c0 63 72 6f 20 69 64 65 6e 74 69 66 69 65 73 20 74  cro identifies t
104d0 68 65 20 63 61 6c 6c 69 6e 67 20 63 6f 6e 76 65  he calling conve
104e0 6e 74 69 6f 6e 20 75 73 65 64 20 62 79 20 6f 70  ntion used by op
104f0 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d 0a 20  erating system. 
10500 20 69 6e 74 65 72 66 61 63 65 73 20 66 6f 72 20   interfaces for 
10510 74 61 72 67 65 74 20 74 68 65 20 70 6c 61 74 66  target the platf
10520 6f 72 6d 20 66 6f 72 20 61 6e 20 53 51 4c 69 74  orm for an SQLit
10530 65 20 62 75 69 6c 64 2e 0a 20 20 54 68 69 73 20  e build..  This 
10540 6d 61 63 72 6f 20 69 73 20 6e 6f 72 6d 61 6c 6c  macro is normall
10550 79 20 64 65 66 69 6e 65 64 20 74 6f 20 62 65 20  y defined to be 
10560 6e 6f 74 68 69 6e 67 2c 20 74 68 6f 75 67 68 20  nothing, though 
10570 6f 6e 20 57 69 6e 64 6f 77 73 0a 20 20 62 75 69  on Windows.  bui
10580 6c 64 73 20 69 74 20 63 61 6e 20 73 6f 6d 65 74  lds it can somet
10590 69 6d 65 73 20 62 65 20 73 65 74 20 74 6f 20 22  imes be set to "
105a0 5f 5f 73 74 64 63 61 6c 6c 22 2e 0a 20 20 3c 70  __stdcall"..  <p
105b0 3e 0a 20 20 41 20 73 69 6e 67 6c 65 20 66 75 6e  >.  A single fun
105c0 63 74 69 6f 6e 20 64 65 63 6c 61 72 61 74 69 6f  ction declaratio
105d0 6e 20 73 68 6f 75 6c 64 20 63 6f 6e 74 61 69 6e  n should contain
105e0 20 6e 6f 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e   no more than on
105f0 65 20 6f 66 0a 20 20 74 68 65 20 66 6f 6c 6c 6f  e of.  the follo
10600 77 69 6e 67 3a 20 20 5b 53 51 4c 49 54 45 5f 41  wing:  [SQLITE_A
10610 50 49 43 41 4c 4c 5d 2c 20 5b 53 51 4c 49 54 45  PICALL], [SQLITE
10620 5f 43 41 4c 4c 42 41 43 4b 5d 2c 20 5b 53 51 4c  _CALLBACK], [SQL
10630 49 54 45 5f 43 44 45 43 4c 5d 2c 0a 20 20 6f 72  ITE_CDECL],.  or
10640 20 5b 53 51 4c 49 54 45 5f 53 59 53 43 41 4c 4c   [SQLITE_SYSCALL
10650 5d 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50  ]..}..COMPILE_OP
10660 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 54 43 4c  TION {SQLITE_TCL
10670 41 50 49 7d 20 7b 0a 20 20 54 68 69 73 20 6d 61  API} {.  This ma
10680 63 72 6f 20 73 70 65 63 69 66 69 65 73 20 74 68  cro specifies th
10690 65 20 63 61 6c 6c 69 6e 67 20 63 6f 6e 76 65 6e  e calling conven
106a0 74 69 6f 6e 20 75 73 65 64 20 62 79 20 74 68 65  tion used by the
106b0 20 0a 20 20 5b 68 74 74 70 3a 2f 2f 77 77 77 2e   .  [http://www.
106c0 74 63 6c 2e 74 6b 20 7c 20 54 43 4c 5d 20 6c 69  tcl.tk | TCL] li
106d0 62 72 61 72 79 20 69 6e 74 65 72 66 61 63 65 20  brary interface 
106e0 72 6f 75 74 69 6e 65 73 2e 0a 20 20 54 68 69 73  routines..  This
106f0 20 6d 61 63 72 6f 20 69 73 20 6e 6f 74 20 75 73   macro is not us
10700 65 64 20 62 79 20 74 68 65 20 53 51 4c 69 74 65  ed by the SQLite
10710 20 63 6f 72 65 2c 20 62 75 74 20 6f 6e 6c 79 20   core, but only 
10720 62 79 20 74 68 65 20 5b 54 43 4c 20 49 6e 74 65  by the [TCL Inte
10730 72 66 61 63 65 5d 0a 20 20 61 6e 64 20 5b 54 43  rface].  and [TC
10740 4c 20 74 65 73 74 20 73 75 69 74 65 5d 2e 0a 20  L test suite].. 
10750 20 54 68 69 73 20 6d 61 63 72 6f 20 69 73 20 6e   This macro is n
10760 6f 72 6d 61 6c 6c 79 20 64 65 66 69 6e 65 64 20  ormally defined 
10770 74 6f 20 62 65 20 6e 6f 74 68 69 6e 67 2c 0a 20  to be nothing,. 
10780 20 74 68 6f 75 67 68 20 6f 6e 20 57 69 6e 64 6f   though on Windo
10790 77 73 20 62 75 69 6c 64 73 20 69 74 20 63 61 6e  ws builds it can
107a0 20 73 6f 6d 65 74 69 6d 65 73 20 62 65 20 73 65   sometimes be se
107b0 74 20 74 6f 20 22 5f 5f 63 64 65 63 6c 22 2e 20  t to "__cdecl". 
107c0 20 54 68 69 73 0a 20 20 6d 61 63 72 6f 20 69 73   This.  macro is
107d0 20 75 73 65 64 20 6f 6e 20 54 43 4c 20 6c 69 62   used on TCL lib
107e0 72 61 72 79 20 69 6e 74 65 72 66 61 63 65 20 72  rary interface r
107f0 6f 75 74 69 6e 65 73 20 77 68 69 63 68 20 61 72  outines which ar
10800 65 20 61 6c 77 61 79 73 20 63 6f 6d 70 69 6c 65  e always compile
10810 64 0a 20 20 61 73 20 5f 5f 63 64 65 63 6c 2c 20  d.  as __cdecl, 
10820 65 76 65 6e 20 6f 6e 20 70 6c 61 74 66 6f 72 6d  even on platform
10830 73 20 74 68 61 74 20 70 72 65 66 65 72 20 74 6f  s that prefer to
10840 20 75 73 65 20 5f 5f 73 74 64 63 61 6c 6c 2c 20   use __stdcall, 
10850 73 6f 20 74 68 69 73 0a 20 20 6d 61 63 72 6f 20  so this.  macro 
10860 73 68 6f 75 6c 64 20 6e 6f 74 20 62 65 20 73 65  should not be se
10870 74 20 74 6f 20 5f 5f 73 74 64 63 61 6c 6c 20 75  t to __stdcall u
10880 6e 6c 65 73 73 20 74 68 65 20 70 6c 61 74 66 6f  nless the platfo
10890 72 6d 20 61 73 20 61 20 63 75 73 74 6f 6d 0a 20  rm as a custom. 
108a0 20 54 43 4c 20 6c 69 62 72 61 72 79 20 62 75 69   TCL library bui
108b0 6c 64 20 74 68 61 74 20 73 75 70 70 6f 72 74 73  ld that supports
108c0 20 5f 5f 73 74 64 63 61 6c 6c 2e 0a 20 20 3c 70   __stdcall..  <p
108d0 3e 0a 20 20 54 68 69 73 20 6d 61 63 72 6f 20 6d  >.  This macro m
108e0 61 79 20 6e 6f 74 20 62 65 20 75 73 65 64 20 69  ay not be used i
108f0 6e 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 77 69  n combination wi
10900 74 68 20 61 6e 79 20 6f 66 20 5b 53 51 4c 49 54  th any of [SQLIT
10910 45 5f 41 50 49 43 41 4c 4c 5d 2c 0a 20 20 5b 53  E_APICALL],.  [S
10920 51 4c 49 54 45 5f 43 41 4c 4c 42 41 43 4b 5d 2c  QLITE_CALLBACK],
10930 20 5b 53 51 4c 49 54 45 5f 43 44 45 43 4c 5d 2c   [SQLITE_CDECL],
10940 20 6f 72 20 5b 53 51 4c 49 54 45 5f 53 59 53 43   or [SQLITE_SYSC
10950 41 4c 4c 5d 2e 0a 7d 0a 0a 0a 3c 2f 74 63 6c 3e  ALL]..}...</tcl>
10960 0a                                               .