Documentation Source Text

Hex Artifact Content
Login

Artifact ecb259d632a217ecf5c194ceaf900b20e75408932e69daecbbeb3a4a61a96098:


0000: 3c 74 69 74 6c 65 3e 43 6f 6d 70 69 6c 65 2d 74  <title>Compile-t
0010: 69 6d 65 20 4f 70 74 69 6f 6e 73 3c 2f 74 69 74  ime Options</tit
0020: 6c 65 3e 0a 3c 74 63 6c 3e 68 64 5f 6b 65 79 77  le>.<tcl>hd_keyw
0030: 6f 72 64 73 20 7b 63 6f 6d 70 69 6c 65 2d 74 69  ords {compile-ti
0040: 6d 65 20 6f 70 74 69 6f 6e 73 7d 3c 2f 74 63 6c  me options}</tcl
0050: 3e 0a 0a 3c 74 61 62 6c 65 5f 6f 66 5f 63 6f 6e  >..<table_of_con
0060: 74 65 6e 74 73 3e 0a 0a 3c 68 31 3e 4f 76 65 72  tents>..<h1>Over
0070: 76 69 65 77 3c 2f 68 31 3e 0a 0a 3c 70 3e 0a 46  view</h1>..<p>.F
0080: 6f 72 20 6d 6f 73 74 20 70 75 72 70 6f 73 65 73  or most purposes
0090: 2c 20 53 51 4c 69 74 65 20 63 61 6e 20 62 65 20  , SQLite can be 
00a0: 62 75 69 6c 74 20 6a 75 73 74 20 66 69 6e 65 20  built just fine 
00b0: 75 73 69 6e 67 20 74 68 65 20 64 65 66 61 75 6c  using the defaul
00c0: 74 0a 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 6f 70  t.compilation op
00d0: 74 69 6f 6e 73 2e 20 48 6f 77 65 76 65 72 2c 20  tions. However, 
00e0: 69 66 20 72 65 71 75 69 72 65 64 2c 20 74 68 65  if required, the
00f0: 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70   compile-time op
0100: 74 69 6f 6e 73 0a 64 6f 63 75 6d 65 6e 74 65 64  tions.documented
0110: 20 62 65 6c 6f 77 20 63 61 6e 20 62 65 20 75 73   below can be us
0120: 65 64 20 74 6f 20 0a 3c 61 20 68 72 65 66 3d 22  ed to .<a href="
0130: 23 6f 6d 69 74 66 65 61 74 75 72 65 73 22 3e 6f  #omitfeatures">o
0140: 6d 69 74 20 53 51 4c 69 74 65 20 66 65 61 74 75  mit SQLite featu
0150: 72 65 73 3c 2f 61 3e 20 28 72 65 73 75 6c 74 69  res</a> (resulti
0160: 6e 67 20 69 6e 0a 61 20 5b 72 65 6c 66 6f 6f 74  ng in.a [relfoot
0170: 70 72 69 6e 74 20 7c 20 73 6d 61 6c 6c 65 72 20  print | smaller 
0180: 63 6f 6d 70 69 6c 65 64 20 6c 69 62 72 61 72 79  compiled library
0190: 20 73 69 7a 65 5d 29 20 6f 72 20 74 6f 20 63 68   size]) or to ch
01a0: 61 6e 67 65 20 74 68 65 0a 3c 61 20 68 72 65 66  ange the.<a href
01b0: 3d 22 23 64 65 66 61 75 6c 74 73 22 3e 64 65 66  ="#defaults">def
01c0: 61 75 6c 74 20 76 61 6c 75 65 73 3c 2f 61 3e 20  ault values</a> 
01d0: 6f 66 20 73 6f 6d 65 20 70 61 72 61 6d 65 74 65  of some paramete
01e0: 72 73 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 45 76  rs..</p>..<p>.Ev
01f0: 65 72 79 20 65 66 66 6f 72 74 20 68 61 73 20 62  ery effort has b
0200: 65 65 6e 20 6d 61 64 65 20 74 6f 20 65 6e 73 75  een made to ensu
0210: 72 65 20 74 68 61 74 20 74 68 65 20 76 61 72 69  re that the vari
0220: 6f 75 73 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 73  ous combinations
0230: 0a 6f 66 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20  .of compilation 
0240: 6f 70 74 69 6f 6e 73 20 77 6f 72 6b 20 68 61 72  options work har
0250: 6d 6f 6e 69 6f 75 73 6c 79 20 61 6e 64 20 70 72  moniously and pr
0260: 6f 64 75 63 65 20 61 20 77 6f 72 6b 69 6e 67 20  oduce a working 
0270: 6c 69 62 72 61 72 79 2e 0a 4e 65 76 65 72 74 68  library..Neverth
0280: 65 6c 65 73 73 2c 20 69 74 20 69 73 20 73 74 72  eless, it is str
0290: 6f 6e 67 6c 79 20 72 65 63 6f 6d 6d 65 6e 64 65  ongly recommende
02a0: 64 20 74 68 61 74 20 74 68 65 20 53 51 4c 69 74  d that the SQLit
02b0: 65 20 74 65 73 74 2d 73 75 69 74 65 0a 62 65 20  e test-suite.be 
02c0: 65 78 65 63 75 74 65 64 20 74 6f 20 63 68 65 63  executed to chec
02d0: 6b 20 66 6f 72 20 65 72 72 6f 72 73 20 62 65 66  k for errors bef
02e0: 6f 72 65 20 75 73 69 6e 67 20 61 6e 20 53 51 4c  ore using an SQL
02f0: 69 74 65 20 6c 69 62 72 61 72 79 20 62 75 69 6c  ite library buil
0300: 74 0a 77 69 74 68 20 6e 6f 6e 2d 73 74 61 6e 64  t.with non-stand
0310: 61 72 64 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20  ard compilation 
0320: 6f 70 74 69 6f 6e 73 2e 0a 3c 2f 70 3e 0a 0a 3c  options..</p>..<
0330: 74 63 6c 3e 0a 70 72 6f 63 20 43 4f 4d 50 49 4c  tcl>.proc COMPIL
0340: 45 5f 4f 50 54 49 4f 4e 20 7b 6e 61 6d 65 20 74  E_OPTION {name t
0350: 65 78 74 7d 20 7b 0a 20 20 69 66 20 7b 5b 72 65  ext} {.  if {[re
0360: 67 65 78 70 20 7b 28 53 51 4c 49 54 45 7c 48 41  gexp {(SQLITE|HA
0370: 56 45 29 5f 28 5b 41 2d 5a 30 2d 39 5f 5d 2b 29  VE)_([A-Z0-9_]+)
0380: 7d 20 24 6e 61 6d 65 20 61 6c 6c 20 70 72 65 66  } $name all pref
0390: 69 78 20 6c 61 62 65 6c 5d 7d 20 7b 0a 20 20 20  ix label]} {.   
03a0: 20 68 64 5f 66 72 61 67 6d 65 6e 74 20 5b 73 74   hd_fragment [st
03b0: 72 69 6e 67 20 74 6f 6c 6f 77 65 72 20 24 6c 61  ring tolower $la
03c0: 62 65 6c 5d 0a 20 20 20 20 68 64 5f 6b 65 79 77  bel].    hd_keyw
03d0: 6f 72 64 73 20 24 61 6c 6c 20 2d 44 24 61 6c 6c  ords $all -D$all
03e0: 0a 20 20 7d 0a 20 20 69 66 20 7b 5b 72 65 67 65  .  }.  if {[rege
03f0: 78 70 20 7b 5e 59 59 28 5b 41 2d 5a 30 2d 39 5f  xp {^YY([A-Z0-9_
0400: 5d 2b 29 7d 20 24 6e 61 6d 65 20 61 6c 6c 20 6c  ]+)} $name all l
0410: 61 62 65 6c 5d 7d 20 7b 0a 20 20 20 20 68 64 5f  abel]} {.    hd_
0420: 66 72 61 67 6d 65 6e 74 20 5b 73 74 72 69 6e 67  fragment [string
0430: 20 74 6f 6c 6f 77 65 72 20 24 61 6c 6c 5d 0a 20   tolower $all]. 
0440: 20 20 20 68 64 5f 6b 65 79 77 6f 72 64 73 20 24     hd_keywords $
0450: 61 6c 6c 0a 20 20 7d 0a 20 20 68 64 5f 70 75 74  all.  }.  hd_put
0460: 73 20 3c 70 3e 3c 62 3e 24 6e 61 6d 65 3c 2f 62  s <p><b>$name</b
0470: 3e 3c 2f 70 3e 0a 20 20 72 65 67 73 75 62 20 2d  ></p>.  regsub -
0480: 61 6c 6c 20 22 5c 6e 5c 5c 73 2a 5c 6e 22 20 24  all "\n\\s*\n" $
0490: 74 65 78 74 20 22 3c 2f 70 3e 5c 6e 5c 6e 3c 70  text "</p>\n\n<p
04a0: 3e 22 20 74 65 78 74 0a 20 20 68 64 5f 72 65 73  >" text.  hd_res
04b0: 6f 6c 76 65 20 3c 62 6c 6f 63 6b 71 75 6f 74 65  olve <blockquote
04c0: 3e 3c 70 3e 24 74 65 78 74 3c 2f 70 3e 3c 2f 62  ><p>$text</p></b
04d0: 6c 6f 63 6b 71 75 6f 74 65 3e 0a 7d 0a 0a 68 64  lockquote>.}..hd
04e0: 5f 66 72 61 67 6d 65 6e 74 20 72 63 6d 64 20 7b  _fragment rcmd {
04f0: 72 65 63 6f 6d 6d 65 6e 64 65 64 20 63 6f 6d 70  recommended comp
0500: 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73  ile-time options
0510: 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 68 31 3e 52 65  }.</tcl>..<h1>Re
0520: 63 6f 6d 6d 65 6e 64 65 64 20 43 6f 6d 70 69 6c  commended Compil
0530: 65 2d 74 69 6d 65 20 4f 70 74 69 6f 6e 73 3c 2f  e-time Options</
0540: 68 31 3e 0a 0a 3c 70 3e 54 68 65 20 66 6f 6c 6c  h1>..<p>The foll
0550: 6f 77 69 6e 67 20 63 6f 6d 70 69 6c 65 2d 74 69  owing compile-ti
0560: 6d 65 20 6f 70 74 69 6f 6e 73 20 61 72 65 20 72  me options are r
0570: 65 63 6f 6d 6d 65 6e 64 65 64 20 66 6f 72 20 61  ecommended for a
0580: 70 70 6c 69 63 61 74 69 6f 6e 73 20 74 68 61 74  pplications that
0590: 0a 61 72 65 20 61 62 6c 65 20 74 6f 20 75 73 65  .are able to use
05a0: 20 74 68 65 6d 2c 20 69 6e 20 6f 72 64 65 72 20   them, in order 
05b0: 74 6f 20 6d 69 6e 69 6d 69 7a 65 64 20 74 68 65  to minimized the
05c0: 20 6e 75 6d 62 65 72 20 6f 66 20 43 50 55 20 63   number of CPU c
05d0: 79 63 6c 65 73 20 61 6e 64 0a 74 68 65 20 62 79  ycles and.the by
05e0: 74 65 73 20 6f 66 20 6d 65 6d 6f 72 79 20 75 73  tes of memory us
05f0: 65 64 20 62 79 20 53 51 4c 69 74 65 2e 0a 4e 6f  ed by SQLite..No
0600: 74 20 61 6c 6c 20 6f 66 20 74 68 65 73 65 20 63  t all of these c
0610: 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69  ompile-time opti
0620: 6f 6e 73 20 61 72 65 20 75 73 61 62 6c 65 20 62  ons are usable b
0630: 79 20 65 76 65 72 79 20 61 70 70 6c 69 63 61 74  y every applicat
0640: 69 6f 6e 2e 0a 46 6f 72 20 65 78 61 6d 70 6c 65  ion..For example
0650: 2c 20 74 68 65 20 53 51 4c 49 54 45 5f 54 48 52  , the SQLITE_THR
0660: 45 41 44 53 41 46 45 3d 30 20 6f 70 74 69 6f 6e  EADSAFE=0 option
0670: 20 69 73 20 6f 6e 6c 79 20 75 73 61 62 6c 65 20   is only usable 
0680: 62 79 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 0a  by applications.
0690: 74 68 61 74 20 6e 65 76 65 72 20 61 63 63 65 73  that never acces
06a0: 73 20 53 51 4c 69 74 65 20 66 72 6f 6d 20 6d 6f  s SQLite from mo
06b0: 72 65 20 74 68 61 6e 20 6f 6e 65 20 74 68 72 65  re than one thre
06c0: 61 64 20 61 74 20 61 20 74 69 6d 65 2e 20 20 41  ad at a time.  A
06d0: 6e 64 20 74 68 65 0a 53 51 4c 49 54 45 5f 4f 4d  nd the.SQLITE_OM
06e0: 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c  IT_PROGRESS_CALL
06f0: 42 41 43 4b 20 6f 70 74 69 6f 6e 20 69 73 20 6f  BACK option is o
0700: 6e 6c 79 20 75 73 61 62 6c 65 20 62 79 20 61 70  nly usable by ap
0710: 70 6c 69 63 61 74 69 6f 6e 73 20 74 68 61 74 0a  plications that.
0720: 64 6f 65 20 6e 6f 74 20 75 73 65 20 74 68 65 20  doe not use the 
0730: 5b 73 71 6c 69 74 65 33 5f 70 72 6f 67 72 65 73  [sqlite3_progres
0740: 73 5f 68 61 6e 64 6c 65 72 28 29 5d 20 69 6e 74  s_handler()] int
0750: 65 72 66 61 63 65 2e 20 20 41 6e 64 20 73 6f 20  erface.  And so 
0760: 66 6f 72 74 68 2e 0a 0a 3c 70 3e 49 74 20 69 73  forth...<p>It is
0770: 20 69 6d 70 6f 73 73 69 62 6c 65 20 74 6f 20 74   impossible to t
0780: 65 73 74 20 65 76 65 72 79 20 70 6f 73 73 69 62  est every possib
0790: 6c 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f  le combination o
07a0: 66 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 0a 6f  f compile-time.o
07b0: 70 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c 69 74  ptions for SQLit
07c0: 65 2e 20 20 42 75 74 20 74 68 65 20 66 6f 6c 6c  e.  But the foll
07d0: 6f 77 69 6e 67 20 73 65 74 20 6f 66 20 63 6f 6d  owing set of com
07e0: 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
07f0: 73 20 69 73 0a 6f 6e 65 20 63 6f 6e 66 69 67 75  s is.one configu
0800: 72 61 74 69 6f 6e 20 74 68 61 74 20 69 73 20 61  ration that is a
0810: 6c 77 61 79 73 20 66 75 6c 6c 79 20 74 65 73 74  lways fully test
0820: 65 64 2e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 3c 70  ed...<ol>.<li><p
0830: 3e 3c 62 3e 5b 53 51 4c 49 54 45 5f 54 48 52 45  ><b>[SQLITE_THRE
0840: 41 44 53 41 46 45 3d 30 5d 3c 2f 62 3e 2e 0a 53  ADSAFE=0]</b>..S
0850: 65 74 74 69 6e 67 20 2d 44 53 51 4c 49 54 45 5f  etting -DSQLITE_
0860: 54 48 52 45 41 44 53 41 46 45 3d 30 20 63 61 75  THREADSAFE=0 cau
0870: 73 65 73 20 61 6c 6c 20 6f 66 20 74 68 65 20 6d  ses all of the m
0880: 75 74 65 78 20 61 6e 64 20 74 68 72 65 61 64 2d  utex and thread-
0890: 73 61 66 65 74 79 20 6c 6f 67 69 63 0a 69 6e 20  safety logic.in 
08a0: 53 51 4c 69 74 65 20 74 6f 20 62 65 20 6f 6d 69  SQLite to be omi
08b0: 74 74 65 64 2e 20 20 54 68 69 73 20 69 73 20 74  tted.  This is t
08c0: 68 65 20 73 69 6e 67 6c 65 20 63 6f 6d 70 69 6c  he single compil
08d0: 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 74 68  e-time option th
08e0: 61 74 20 6d 61 6b 65 73 0a 74 68 65 20 6d 6f 73  at makes.the mos
08f0: 74 20 64 69 66 66 65 72 65 6e 63 65 20 69 6e 20  t difference in 
0900: 6f 70 74 69 6d 69 7a 69 6e 67 20 74 68 65 20 70  optimizing the p
0910: 65 72 66 6f 72 6d 61 6e 63 65 20 6f 66 20 53 51  erformance of SQ
0920: 4c 69 74 65 2e 0a 0a 3c 6c 69 3e 3c 70 3e 3c 62  Lite...<li><p><b
0930: 3e 5b 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  >[SQLITE_DEFAULT
0940: 5f 4d 45 4d 53 54 41 54 55 53 3d 30 5d 3c 2f 62  _MEMSTATUS=0]</b
0950: 3e 2e 0a 54 68 69 73 20 73 65 74 74 69 6e 67 20  >..This setting 
0960: 63 61 75 73 65 73 20 74 68 65 20 5b 73 71 6c 69  causes the [sqli
0970: 74 65 33 5f 73 74 61 74 75 73 28 29 5d 20 69 6e  te3_status()] in
0980: 74 65 72 66 61 63 65 73 20 74 68 61 74 20 74 72  terfaces that tr
0990: 61 63 6b 20 6d 65 6d 6f 72 79 20 75 73 61 67 65  ack memory usage
09a0: 0a 74 6f 20 62 65 20 64 69 73 61 62 6c 65 64 2e  .to be disabled.
09b0: 20 20 54 68 69 73 20 68 65 6c 70 73 20 74 68 65    This helps the
09c0: 20 5b 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63   [sqlite3_malloc
09d0: 28 29 5d 20 72 6f 75 74 69 6e 65 73 20 72 75 6e  ()] routines run
09e0: 20 6d 75 63 68 20 66 61 73 74 65 72 2c 0a 61 6e   much faster,.an
09f0: 64 20 73 69 6e 63 65 20 53 51 4c 69 74 65 20 75  d since SQLite u
0a00: 73 65 73 20 5b 73 71 6c 69 74 65 33 5f 6d 61 6c  ses [sqlite3_mal
0a10: 6c 6f 63 28 29 5d 20 69 6e 74 65 72 6e 61 6c 6c  loc()] internall
0a20: 79 2c 20 74 68 69 73 20 68 65 6c 70 73 20 74 6f  y, this helps to
0a30: 20 6d 61 6b 65 20 74 68 65 0a 65 6e 74 69 72 65   make the.entire
0a40: 20 6c 69 62 72 61 72 79 20 66 61 73 74 65 72 2e   library faster.
0a50: 0a 0a 3c 6c 69 3e 3c 70 3e 3c 62 3e 5b 53 51 4c  ..<li><p><b>[SQL
0a60: 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 41 4c 5f  ITE_DEFAULT_WAL_
0a70: 53 59 4e 43 48 52 4f 4e 4f 55 53 3d 31 5d 3c 2f  SYNCHRONOUS=1]</
0a80: 62 3e 2e 0a 46 6f 72 20 6d 61 78 69 6d 75 6d 20  b>..For maximum 
0a90: 64 61 74 61 62 61 73 65 20 73 61 66 65 74 79 20  database safety 
0aa0: 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 70 6f 77 65  following a powe
0ab0: 72 20 6c 6f 73 65 2c 20 74 68 65 20 73 65 74 74  r lose, the sett
0ac0: 69 6e 67 20 6f 66 0a 5b 50 52 41 47 4d 41 20 73  ing of.[PRAGMA s
0ad0: 79 6e 63 68 72 6f 6e 6f 75 73 3d 46 55 4c 4c 5d  ynchronous=FULL]
0ae0: 20 69 73 20 72 65 63 6f 6d 6d 65 6e 64 65 64 2e   is recommended.
0af0: 20 20 48 6f 77 65 76 65 72 2c 20 69 6e 20 5b 57    However, in [W
0b00: 41 4c 20 6d 6f 64 65 5d 2c 20 63 6f 6d 70 6c 65  AL mode], comple
0b10: 74 65 0a 64 61 74 61 62 61 73 65 20 69 6e 74 65  te.database inte
0b20: 67 72 69 74 79 20 69 73 20 67 75 61 72 61 6e 74  grity is guarant
0b30: 65 65 64 20 77 69 74 68 20 5b 50 52 41 47 4d 41  eed with [PRAGMA
0b40: 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3d 4e 4f 52   synchronous=NOR
0b50: 4d 41 4c 5d 2e 20 20 57 69 74 68 0a 5b 50 52 41  MAL].  With.[PRA
0b60: 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3d  GMA synchronous=
0b70: 4e 4f 52 4d 41 4c 5d 20 69 6e 20 5b 57 41 4c 20  NORMAL] in [WAL 
0b80: 6d 6f 64 65 5d 2c 20 72 65 63 65 6e 74 20 63 68  mode], recent ch
0b90: 61 6e 67 65 73 20 74 6f 20 74 68 65 20 64 61 74  anges to the dat
0ba0: 61 62 61 73 65 20 6d 69 67 68 74 0a 62 65 20 72  abase might.be r
0bb0: 6f 6c 6c 65 64 20 62 61 63 6b 20 62 79 20 61 20  olled back by a 
0bc0: 70 6f 77 65 72 20 6c 6f 73 73 2c 20 62 75 74 20  power loss, but 
0bd0: 74 68 65 20 64 61 74 61 62 61 73 65 20 77 69 6c  the database wil
0be0: 6c 20 6e 6f 74 20 62 65 20 63 6f 72 72 75 70 74  l not be corrupt
0bf0: 65 64 2e 0a 46 75 72 74 68 65 72 6d 6f 72 65 2c  ed..Furthermore,
0c00: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 63 6f 6d   transaction com
0c10: 6d 69 74 20 69 73 20 6d 75 63 68 20 66 61 73 74  mit is much fast
0c20: 65 72 20 69 6e 20 57 41 4c 20 6d 6f 64 65 20 75  er in WAL mode u
0c30: 73 69 6e 67 0a 73 79 6e 63 68 72 6f 6e 6f 75 73  sing.synchronous
0c40: 3d 4e 4f 52 4d 41 4c 20 74 68 61 6e 20 77 69 74  =NORMAL than wit
0c50: 68 20 74 68 65 20 64 65 66 61 75 6c 74 20 73 79  h the default sy
0c60: 6e 63 68 72 6f 6e 6f 75 73 3d 46 55 4c 4c 2e 20  nchronous=FULL. 
0c70: 20 46 6f 72 20 74 68 65 73 65 0a 72 65 61 73 6f   For these.reaso
0c80: 6e 73 2c 20 69 74 20 69 73 20 72 65 63 6f 6d 6d  ns, it is recomm
0c90: 65 6e 64 65 64 20 74 68 61 74 20 74 68 65 20 73  ended that the s
0ca0: 79 6e 63 68 72 6f 6e 6f 75 73 20 73 65 74 74 69  ynchronous setti
0cb0: 6e 67 20 62 65 20 63 68 61 6e 67 65 64 20 66 72  ng be changed fr
0cc0: 6f 6d 0a 46 55 4c 4c 20 74 6f 20 4e 4f 52 4d 41  om.FULL to NORMA
0cd0: 4c 20 77 68 65 6e 20 73 77 69 74 63 68 69 6e 67  L when switching
0ce0: 20 74 6f 20 57 41 4c 20 6d 6f 64 65 2e 20 20 54   to WAL mode.  T
0cf0: 68 69 73 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  his compile-time
0d00: 20 6f 70 74 69 6f 6e 20 77 69 6c 6c 0a 61 63 63   option will.acc
0d10: 6f 6d 70 6c 69 73 68 20 74 68 61 74 2e 0a 0a 3c  omplish that...<
0d20: 6c 69 3e 3c 70 3e 3c 62 3e 5b 53 51 4c 49 54 45  li><p><b>[SQLITE
0d30: 5f 4c 49 4b 45 5f 44 4f 45 53 4e 54 5f 4d 41 54  _LIKE_DOESNT_MAT
0d40: 43 48 5f 42 4c 4f 42 53 5d 3c 2f 62 3e 2e 0a 48  CH_BLOBS]</b>..H
0d50: 69 73 74 6f 72 69 63 61 6c 6c 79 2c 20 53 51 4c  istorically, SQL
0d60: 69 74 65 20 68 61 73 20 61 6c 6c 6f 77 65 64 20  ite has allowed 
0d70: 42 4c 4f 42 20 6f 70 65 72 61 6e 64 73 20 74 6f  BLOB operands to
0d80: 20 74 68 65 20 5b 4c 49 4b 45 5d 20 61 6e 64 20   the [LIKE] and 
0d90: 5b 47 4c 4f 42 5d 0a 6f 70 65 72 61 74 6f 72 73  [GLOB].operators
0da0: 2e 20 20 42 75 74 20 68 61 76 69 6e 67 20 61 20  .  But having a 
0db0: 42 4c 4f 42 20 61 73 20 61 6e 20 6f 70 65 72 61  BLOB as an opera
0dc0: 6e 64 20 6f 66 20 5b 4c 49 4b 45 5d 20 6f 72 20  nd of [LIKE] or 
0dd0: 5b 47 4c 4f 42 5d 20 63 6f 6d 70 6c 69 63 61 74  [GLOB] complicat
0de0: 65 73 0a 61 6e 64 20 73 6c 6f 77 73 20 74 68 65  es.and slows the
0df0: 20 5b 4c 49 4b 45 20 6f 70 74 69 6d 69 7a 61 74   [LIKE optimizat
0e00: 69 6f 6e 5d 2e 20 20 57 68 65 6e 20 74 68 69 73  ion].  When this
0e10: 20 6f 70 74 69 6f 6e 20 69 73 20 73 65 74 2c 20   option is set, 
0e20: 69 74 20 6d 65 61 6e 73 20 74 68 61 74 0a 74 68  it means that.th
0e30: 65 20 4c 49 4b 45 20 61 6e 64 20 47 4c 4f 42 20  e LIKE and GLOB 
0e40: 6f 70 65 72 61 74 6f 72 73 20 61 6c 77 61 79 73  operators always
0e50: 20 72 65 74 75 72 6e 20 46 41 4c 53 45 20 69 66   return FALSE if
0e60: 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20   either operand 
0e70: 69 73 20 61 20 42 4c 4f 42 2e 0a 54 68 61 74 20  is a BLOB..That 
0e80: 73 69 6d 70 6c 69 66 69 65 73 20 74 68 65 20 69  simplifies the i
0e90: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66  mplementation of
0ea0: 20 74 68 65 20 5b 4c 49 4b 45 20 6f 70 74 69 6d   the [LIKE optim
0eb0: 69 7a 61 74 69 6f 6e 5d 20 61 6e 64 20 61 6c 6c  ization] and all
0ec0: 6f 77 73 0a 71 75 65 72 69 65 73 20 74 68 61 74  ows.queries that
0ed0: 20 75 73 65 20 74 68 65 20 5b 4c 49 4b 45 20 6f   use the [LIKE o
0ee0: 70 74 69 6d 69 7a 61 74 69 6f 6e 5d 20 74 6f 20  ptimization] to 
0ef0: 72 75 6e 20 66 61 73 74 65 72 2e 0a 0a 3c 6c 69  run faster...<li
0f00: 3e 3c 70 3e 3c 62 3e 5b 53 51 4c 49 54 45 5f 4d  ><p><b>[SQLITE_M
0f10: 41 58 5f 45 58 50 52 5f 44 45 50 54 48 3d 30 5d  AX_EXPR_DEPTH=0]
0f20: 3c 2f 62 3e 2e 0a 53 65 74 74 69 6e 67 20 74 68  </b>..Setting th
0f30: 65 20 6d 61 78 69 6d 75 6d 20 65 78 70 72 65 73  e maximum expres
0f40: 73 69 6f 6e 20 70 61 72 73 65 2d 74 72 65 65 20  sion parse-tree 
0f50: 64 65 70 74 68 20 74 6f 20 7a 65 72 6f 20 64 69  depth to zero di
0f60: 73 61 62 6c 65 73 20 61 6c 6c 20 63 68 65 63 6b  sables all check
0f70: 69 6e 67 0a 6f 66 20 74 68 65 20 65 78 70 72 65  ing.of the expre
0f80: 73 73 69 6f 6e 20 70 61 72 73 65 2d 74 72 65 65  ssion parse-tree
0f90: 20 64 65 70 74 68 2c 20 77 68 69 63 68 20 73 69   depth, which si
0fa0: 6d 70 6c 69 66 69 65 73 20 74 68 65 20 63 6f 64  mplifies the cod
0fb0: 65 20 72 65 73 75 6c 74 69 6e 67 20 69 6e 0a 66  e resulting in.f
0fc0: 61 73 74 65 72 20 65 78 65 63 75 74 69 6f 6e 2c  aster execution,
0fd0: 20 61 6e 64 20 68 65 6c 70 73 20 74 68 65 20 70   and helps the p
0fe0: 61 72 73 65 20 74 72 65 65 20 74 6f 20 75 73 65  arse tree to use
0ff0: 20 6c 65 73 73 20 6d 65 6d 6f 72 79 2e 0a 0a 3c   less memory...<
1000: 6c 69 3e 3c 70 3e 3c 62 3e 5b 53 51 4c 49 54 45  li><p><b>[SQLITE
1010: 5f 4f 4d 49 54 5f 44 45 43 4c 54 59 50 45 5d 3c  _OMIT_DECLTYPE]<
1020: 2f 62 3e 2e 0a 42 79 20 6f 6d 69 74 74 69 6e 67  /b>..By omitting
1030: 20 74 68 65 20 28 73 65 6c 64 6f 6d 2d 6e 65 65   the (seldom-nee
1040: 64 65 64 29 20 61 62 69 6c 69 74 79 20 74 6f 20  ded) ability to 
1050: 72 65 74 75 72 6e 20 74 68 65 20 64 65 63 6c 61  return the decla
1060: 72 65 64 20 74 79 70 65 20 6f 66 0a 63 6f 6c 75  red type of.colu
1070: 6d 6e 73 20 66 72 6f 6d 20 74 68 65 20 72 65 73  mns from the res
1080: 75 6c 74 20 73 65 74 20 6f 66 20 71 75 65 72 79  ult set of query
1090: 2c 20 5b 70 72 65 70 61 72 65 64 20 73 74 61 74  , [prepared stat
10a0: 65 6d 65 6e 74 73 5d 20 63 61 6e 20 62 65 20 6d  ements] can be m
10b0: 61 64 65 0a 74 6f 20 63 6f 6e 73 75 6d 65 20 6c  ade.to consume l
10c0: 65 73 73 20 6d 65 6d 6f 72 79 2e 0a 0a 3c 6c 69  ess memory...<li
10d0: 3e 3c 70 3e 3c 62 3e 5b 53 51 4c 49 54 45 5f 4f  ><p><b>[SQLITE_O
10e0: 4d 49 54 5f 44 45 50 52 45 43 41 54 45 44 5d 3c  MIT_DEPRECATED]<
10f0: 2f 62 3e 2e 0a 4f 6d 69 74 74 69 6e 67 20 64 65  /b>..Omitting de
1100: 70 72 65 63 61 74 65 64 20 69 6e 74 65 72 66 61  precated interfa
1110: 63 65 73 20 61 6e 64 20 66 65 61 74 75 72 65 73  ces and features
1120: 20 77 69 6c 6c 20 6e 6f 74 20 68 65 6c 70 20 53   will not help S
1130: 51 4c 69 74 65 20 74 6f 0a 72 75 6e 20 61 6e 79  QLite to.run any
1140: 20 66 61 73 74 65 72 2e 20 20 49 74 20 77 69 6c   faster.  It wil
1150: 6c 20 72 65 64 75 63 65 20 74 68 65 20 6c 69 62  l reduce the lib
1160: 72 61 72 79 20 66 6f 6f 74 70 72 69 6e 74 2c 20  rary footprint, 
1170: 68 6f 77 65 76 65 72 2e 20 20 41 6e 64 0a 69 74  however.  And.it
1180: 20 69 73 20 74 68 65 20 72 69 67 68 74 20 74 68   is the right th
1190: 69 6e 67 20 74 6f 20 64 6f 2e 0a 0a 3c 6c 69 3e  ing to do...<li>
11a0: 3c 70 3e 3c 62 3e 5b 53 51 4c 49 54 45 5f 4f 4d  <p><b>[SQLITE_OM
11b0: 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c  IT_PROGRESS_CALL
11c0: 42 41 43 4b 5d 3c 2f 62 3e 2e 0a 54 68 65 20 70  BACK]</b>..The p
11d0: 72 6f 67 72 65 73 73 20 68 61 6e 64 6c 65 72 20  rogress handler 
11e0: 63 61 6c 6c 62 61 63 6b 20 63 6f 75 6e 74 65 72  callback counter
11f0: 20 6d 75 73 74 20 62 65 20 63 68 65 63 6b 65 64   must be checked
1200: 20 69 6e 20 74 68 65 20 69 6e 6e 65 72 20 6c 6f   in the inner lo
1210: 6f 70 0a 6f 66 20 74 68 65 20 5b 62 79 74 65 63  op.of the [bytec
1220: 6f 64 65 20 65 6e 67 69 6e 65 5d 2e 20 20 42 79  ode engine].  By
1230: 20 6f 6d 69 74 74 69 6e 67 20 74 68 69 73 20 69   omitting this i
1240: 6e 74 65 72 66 61 63 65 2c 20 61 20 73 69 6e 67  nterface, a sing
1250: 6c 65 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 0a 69  le conditional.i
1260: 73 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d 20 74  s removed from t
1270: 68 65 20 69 6e 6e 65 72 20 6c 6f 6f 70 20 6f 66  he inner loop of
1280: 20 74 68 65 20 5b 62 79 74 65 63 6f 64 65 20 65   the [bytecode e
1290: 6e 67 69 6e 65 5d 2c 20 68 65 6c 70 69 6e 67 20  ngine], helping 
12a0: 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 0a 74  SQL statements.t
12b0: 6f 20 72 75 6e 20 73 6c 69 67 68 74 6c 79 20 66  o run slightly f
12c0: 61 73 74 65 72 2e 0a 0a 3c 6c 69 3e 3c 70 3e 3c  aster...<li><p><
12d0: 62 3e 5b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53  b>[SQLITE_OMIT_S
12e0: 48 41 52 45 44 5f 43 41 43 48 45 5d 3c 2f 62 3e  HARED_CACHE]</b>
12f0: 2e 0a 4f 6d 69 74 74 69 6e 67 20 74 68 65 20 70  ..Omitting the p
1300: 6f 73 73 69 62 69 6c 69 74 79 20 6f 66 20 75 73  ossibility of us
1310: 69 6e 67 20 5b 73 68 61 72 65 64 20 63 61 63 68  ing [shared cach
1320: 65 5d 20 61 6c 6c 6f 77 73 20 6d 61 6e 79 20 63  e] allows many c
1330: 6f 6e 64 69 74 69 6f 6e 61 6c 73 0a 69 6e 20 70  onditionals.in p
1340: 65 72 66 6f 72 6d 61 6e 63 65 2d 63 72 69 74 69  erformance-criti
1350: 63 61 6c 20 73 65 63 74 69 6f 6e 73 20 6f 66 20  cal sections of 
1360: 74 68 65 20 63 6f 64 65 20 74 6f 20 62 65 20 65  the code to be e
1370: 6c 69 6d 69 6e 61 74 65 64 2e 20 20 54 68 69 73  liminated.  This
1380: 20 63 61 6e 0a 67 69 76 65 20 61 20 6e 6f 74 69   can.give a noti
1390: 63 61 62 6c 65 20 69 6d 70 72 6f 76 65 6d 65 6e  cable improvemen
13a0: 74 20 69 6e 20 70 65 72 66 6f 72 6d 61 6e 63 65  t in performance
13b0: 2e 0a 0a 3c 6c 69 3e 3c 70 3e 3c 62 3e 5b 53 51  ...<li><p><b>[SQ
13c0: 4c 49 54 45 5f 55 53 45 5f 41 4c 4c 4f 43 41 5d  LITE_USE_ALLOCA]
13d0: 3c 2f 62 3e 2e 0a 4d 61 6b 65 20 75 73 65 20 6f  </b>..Make use o
13e0: 66 20 61 6c 6c 6f 63 61 28 29 20 66 6f 72 20 64  f alloca() for d
13f0: 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63  ynamically alloc
1400: 61 74 69 6e 67 20 74 65 6d 70 6f 72 61 72 79 20  ating temporary 
1410: 73 74 61 63 6b 20 73 70 61 63 65 20 66 6f 72 20  stack space for 
1420: 0a 75 73 65 20 77 69 74 68 69 6e 20 61 20 73 69  .use within a si
1430: 6e 67 6c 65 20 66 75 6e 63 74 69 6f 6e 2c 20 6f  ngle function, o
1440: 6e 20 73 79 73 74 65 6d 73 20 74 68 61 74 20 73  n systems that s
1450: 75 70 70 6f 72 74 20 61 6c 6c 6f 63 61 28 29 2e  upport alloca().
1460: 20 20 57 69 74 68 6f 75 74 0a 74 68 69 73 20 6f    Without.this o
1470: 70 74 69 6f 6e 2c 20 74 65 6d 70 6f 72 61 72 79  ption, temporary
1480: 20 73 70 61 63 65 20 69 73 20 61 6c 6c 6f 63 61   space is alloca
1490: 74 65 64 20 66 72 6f 6d 20 74 68 65 20 68 65 61  ted from the hea
14a0: 70 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 57 68 65  p..</ol>..<p>Whe
14b0: 6e 20 61 6c 6c 20 6f 66 20 74 68 65 20 72 65 63  n all of the rec
14c0: 6f 6d 6d 65 6e 64 65 64 20 63 6f 6d 70 69 6c 65  ommended compile
14d0: 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20 61 62  -time options ab
14e0: 6f 76 65 20 61 72 65 20 75 73 65 64 2c 0a 74 68  ove are used,.th
14f0: 65 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79  e SQLite library
1500: 20 77 69 6c 6c 20 62 65 20 61 70 70 72 6f 78 69   will be approxi
1510: 6d 61 74 65 6c 79 20 33 25 20 73 6d 61 6c 6c 65  mately 3% smalle
1520: 72 20 61 6e 64 20 75 73 65 20 61 62 6f 75 74 20  r and use about 
1530: 35 25 20 66 65 77 65 72 0a 43 50 55 20 63 79 63  5% fewer.CPU cyc
1540: 6c 65 73 2e 20 20 53 6f 20 74 68 65 73 65 20 6f  les.  So these o
1550: 70 74 69 6f 6e 73 20 64 6f 20 6e 6f 74 20 6d 61  ptions do not ma
1560: 6b 65 20 61 20 68 75 67 65 20 64 69 66 66 65 72  ke a huge differ
1570: 65 6e 63 65 2e 20 20 42 75 74 20 69 6e 20 0a 73  ence.  But in .s
1580: 6f 6d 65 20 64 65 73 69 67 6e 20 73 69 74 75 61  ome design situa
1590: 74 69 6f 6e 73 2c 20 65 76 65 72 79 20 6c 69 74  tions, every lit
15a0: 74 6c 65 20 62 69 74 20 68 65 6c 70 73 2e 0a 0a  tle bit helps...
15b0: 3c 61 20 6e 61 6d 65 3d 22 6f 73 63 6f 6e 66 69  <a name="osconfi
15c0: 67 22 3e 3c 2f 61 3e 0a 3c 68 31 3e 20 50 6c 61  g"></a>.<h1> Pla
15d0: 74 66 6f 72 6d 20 43 6f 6e 66 69 67 75 72 61 74  tform Configurat
15e0: 69 6f 6e 3c 2f 68 31 3e 0a 0a 3c 74 63 6c 3e 0a  ion</h1>..<tcl>.
15f0: 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b  COMPILE_OPTION {
1600: 5f 48 41 56 45 5f 53 51 4c 49 54 45 5f 43 4f 4e  _HAVE_SQLITE_CON
1610: 46 49 47 5f 48 7d 20 7b 0a 20 20 49 66 20 74 68  FIG_H} {.  If th
1620: 65 20 5f 48 41 56 45 5f 53 51 4c 49 54 45 5f 43  e _HAVE_SQLITE_C
1630: 4f 4e 46 49 47 5f 48 20 6d 61 63 72 6f 20 69 73  ONFIG_H macro is
1640: 20 64 65 66 69 6e 65 64 0a 20 20 74 68 65 6e 20   defined.  then 
1650: 74 68 65 20 53 51 4c 69 74 65 20 73 6f 75 72 63  the SQLite sourc
1660: 65 20 63 6f 64 65 20 77 69 6c 6c 20 61 74 74 65  e code will atte
1670: 6d 70 74 20 74 6f 20 23 69 6e 63 6c 75 64 65 20  mpt to #include 
1680: 61 20 66 69 6c 65 20 6e 61 6d 65 64 20 22 63 6f  a file named "co
1690: 6e 66 69 67 2e 68 22 2e 0a 20 20 54 68 65 20 22  nfig.h"..  The "
16a0: 63 6f 6e 66 69 67 2e 68 22 20 66 69 6c 65 20 75  config.h" file u
16b0: 73 75 61 6c 6c 79 20 63 6f 6e 74 61 69 6e 73 20  sually contains 
16c0: 6f 74 68 65 72 20 63 6f 6e 66 69 67 75 72 61 74  other configurat
16d0: 69 6f 6e 20 6f 70 74 69 6f 6e 73 2c 20 65 73 70  ion options, esp
16e0: 65 63 69 61 6c 6c 79 0a 20 20 22 48 41 56 45 5f  ecially.  "HAVE_
16f0: 3c 69 3e 49 4e 54 45 52 46 41 43 45 3c 2f 69 3e  <i>INTERFACE</i>
1700: 22 20 74 79 70 65 20 6f 70 74 69 6f 6e 73 20 67  " type options g
1710: 65 6e 65 72 61 74 65 64 20 62 79 20 61 75 74 6f  enerated by auto
1720: 63 6f 6e 66 20 73 63 72 69 70 74 73 2e 0a 7d 0a  conf scripts..}.
1730: 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20  .COMPILE_OPTION 
1740: 7b 48 41 56 45 5f 46 44 41 54 41 53 59 4e 43 7d  {HAVE_FDATASYNC}
1750: 20 7b 0a 20 20 49 66 20 74 68 65 20 48 41 56 45   {.  If the HAVE
1760: 5f 46 44 41 54 41 53 59 4e 43 20 63 6f 6d 70 69  _FDATASYNC compi
1770: 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69  le-time option i
1780: 73 20 74 72 75 65 2c 20 74 68 65 6e 20 74 68 65  s true, then the
1790: 20 64 65 66 61 75 6c 74 20 5b 56 46 53 5d 0a 20   default [VFS]. 
17a0: 20 66 6f 72 20 75 6e 69 78 20 73 79 73 74 65 6d   for unix system
17b0: 73 20 77 69 6c 6c 20 61 74 74 65 6d 70 74 20 74  s will attempt t
17c0: 6f 20 75 73 65 20 66 64 61 74 61 73 79 6e 63 28  o use fdatasync(
17d0: 29 20 69 6e 73 74 65 61 64 20 6f 66 20 66 73 79  ) instead of fsy
17e0: 6e 63 28 29 20 77 68 65 72 65 0a 20 20 61 70 70  nc() where.  app
17f0: 72 6f 70 72 69 61 74 65 2e 20 20 49 66 20 74 68  ropriate.  If th
1800: 69 73 20 66 6c 61 67 20 69 73 20 6d 69 73 73 69  is flag is missi
1810: 6e 67 20 6f 72 20 66 61 6c 73 65 2c 20 74 68 65  ng or false, the
1820: 6e 20 66 73 79 6e 63 28 29 20 69 73 20 61 6c 77  n fsync() is alw
1830: 61 79 73 20 75 73 65 64 2e 0a 7d 0a 0a 43 4f 4d  ays used..}..COM
1840: 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 48 41 56  PILE_OPTION {HAV
1850: 45 5f 47 4d 54 49 4d 45 5f 52 7d 20 7b 0a 20 20  E_GMTIME_R} {.  
1860: 49 66 20 74 68 65 20 48 41 56 45 5f 47 4d 54 49  If the HAVE_GMTI
1870: 4d 45 5f 52 20 6f 70 74 69 6f 6e 20 69 73 20 74  ME_R option is t
1880: 72 75 65 20 61 6e 64 20 69 66 20 5b 53 51 4c 49  rue and if [SQLI
1890: 54 45 5f 4f 4d 49 54 5f 44 41 54 45 54 49 4d 45  TE_OMIT_DATETIME
18a0: 5f 46 55 4e 43 53 5d 20 69 73 20 74 72 75 65 2c  _FUNCS] is true,
18b0: 0a 20 20 74 68 65 6e 20 74 68 65 20 43 55 52 52  .  then the CURR
18c0: 45 4e 54 5f 54 49 4d 45 2c 20 43 55 52 52 45 4e  ENT_TIME, CURREN
18d0: 54 5f 44 41 54 45 2c 20 61 6e 64 20 43 55 52 52  T_DATE, and CURR
18e0: 45 4e 54 5f 54 49 4d 45 53 54 41 4d 50 20 6b 65  ENT_TIMESTAMP ke
18f0: 79 77 6f 72 64 73 20 77 69 6c 6c 20 75 73 65 0a  ywords will use.
1900: 20 20 74 68 65 20 74 68 72 65 61 64 73 61 66 65    the threadsafe
1910: 20 22 67 6d 74 69 6d 65 5f 72 28 29 22 20 69 6e   "gmtime_r()" in
1920: 74 65 72 66 61 63 65 20 72 61 74 68 65 72 20 74  terface rather t
1930: 68 61 6e 20 22 67 6d 74 69 6d 65 28 29 22 2e 20  han "gmtime()". 
1940: 20 49 6e 20 74 68 65 20 75 73 75 61 6c 20 63 61   In the usual ca
1950: 73 65 0a 20 20 77 68 65 72 65 20 5b 53 51 4c 49  se.  where [SQLI
1960: 54 45 5f 4f 4d 49 54 5f 44 41 54 45 54 49 4d 45  TE_OMIT_DATETIME
1970: 5f 46 55 4e 43 53 5d 20 69 73 20 6e 6f 74 20 64  _FUNCS] is not d
1980: 65 66 69 6e 65 64 20 6f 72 20 69 73 20 66 61 6c  efined or is fal
1990: 73 65 2c 20 74 68 65 6e 20 74 68 65 0a 20 20 62  se, then the.  b
19a0: 75 69 6c 74 2d 69 6e 20 5b 64 61 74 65 20 61 6e  uilt-in [date an
19b0: 64 20 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73  d time functions
19c0: 5d 20 61 72 65 20 75 73 65 64 20 74 6f 20 69 6d  ] are used to im
19d0: 70 6c 65 6d 65 6e 74 20 74 68 65 20 43 55 52 52  plement the CURR
19e0: 45 4e 54 5f 54 49 4d 45 2c 0a 20 20 43 55 52 52  ENT_TIME,.  CURR
19f0: 45 4e 54 5f 44 41 54 45 2c 20 61 6e 64 20 43 55  ENT_DATE, and CU
1a00: 52 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d 50 20  RRENT_TIMESTAMP 
1a10: 6b 65 79 77 6f 72 64 73 20 61 6e 64 20 6e 65 69  keywords and nei
1a20: 74 68 65 72 20 67 6d 74 69 6d 65 5f 72 28 29 20  ther gmtime_r() 
1a30: 6e 6f 72 0a 20 20 67 6d 74 69 6d 65 28 29 20 69  nor.  gmtime() i
1a40: 73 20 65 76 65 72 20 63 61 6c 6c 65 64 2e 0a 7d  s ever called..}
1a50: 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e  ..COMPILE_OPTION
1a60: 20 7b 48 41 56 45 5f 49 53 4e 41 4e 7d 20 7b 0a   {HAVE_ISNAN} {.
1a70: 20 20 49 66 20 74 68 65 20 48 41 56 45 5f 49 53    If the HAVE_IS
1a80: 4e 41 4e 20 6f 70 74 69 6f 6e 20 69 73 20 74 72  NAN option is tr
1a90: 75 65 2c 20 74 68 65 6e 20 53 51 4c 69 74 65 20  ue, then SQLite 
1aa0: 69 6e 76 6f 6b 65 73 20 74 68 65 20 73 79 73 74  invokes the syst
1ab0: 65 6d 20 6c 69 62 72 61 72 79 20 69 73 6e 61 6e  em library isnan
1ac0: 28 29 0a 20 20 66 75 6e 63 74 69 6f 6e 20 74 6f  ().  function to
1ad0: 20 64 65 74 65 72 6d 69 6e 65 20 69 66 20 61 20   determine if a 
1ae0: 64 6f 75 62 6c 65 2d 70 72 65 63 69 73 69 6f 6e  double-precision
1af0: 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20   floating point 
1b00: 76 61 6c 75 65 20 69 73 20 61 20 4e 61 4e 2e 0a  value is a NaN..
1b10: 20 20 49 66 20 48 41 56 45 5f 49 53 4e 41 4e 20    If HAVE_ISNAN 
1b20: 69 73 20 75 6e 64 65 66 69 6e 65 64 20 6f 72 20  is undefined or 
1b30: 66 61 6c 73 65 2c 20 74 68 65 6e 20 53 51 4c 69  false, then SQLi
1b40: 74 65 20 73 75 62 73 74 69 74 75 74 65 73 20 69  te substitutes i
1b50: 74 73 20 6f 77 6e 20 68 6f 6d 65 2d 67 72 6f 77  ts own home-grow
1b60: 6e 0a 20 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  n.  implementati
1b70: 6f 6e 20 6f 66 20 69 73 6e 61 6e 28 29 2e 0a 7d  on of isnan()..}
1b80: 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e  ..COMPILE_OPTION
1b90: 20 7b 48 41 56 45 5f 4c 4f 43 41 4c 54 49 4d 45   {HAVE_LOCALTIME
1ba0: 5f 52 7d 20 7b 0a 20 20 49 66 20 74 68 65 20 48  _R} {.  If the H
1bb0: 41 56 45 5f 4c 4f 43 41 4c 54 49 4d 45 5f 52 20  AVE_LOCALTIME_R 
1bc0: 6f 70 74 69 6f 6e 20 69 73 20 74 72 75 65 2c 20  option is true, 
1bd0: 74 68 65 6e 20 53 51 4c 69 74 65 20 75 73 65 73  then SQLite uses
1be0: 20 74 68 65 20 74 68 72 65 61 64 73 61 66 65 0a   the threadsafe.
1bf0: 20 20 6c 6f 63 61 6c 74 69 6d 65 5f 72 28 29 20    localtime_r() 
1c00: 6c 69 62 72 61 72 79 20 72 6f 75 74 69 6e 65 20  library routine 
1c10: 69 6e 73 74 65 61 64 20 6f 66 20 6c 6f 63 61 6c  instead of local
1c20: 74 69 6d 65 28 29 0a 20 20 74 6f 20 68 65 6c 70  time().  to help
1c30: 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20 5b   implement the [
1c40: 6c 6f 63 61 6c 74 69 6d 65 20 6d 6f 64 69 66 69  localtime modifi
1c50: 65 72 5d 0a 20 20 74 6f 20 74 68 65 20 62 75 69  er].  to the bui
1c60: 6c 74 2d 69 6e 20 5b 64 61 74 65 20 61 6e 64 20  lt-in [date and 
1c70: 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 5d 2e  time functions].
1c80: 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49  .}..COMPILE_OPTI
1c90: 4f 4e 20 7b 48 41 56 45 5f 4c 4f 43 41 4c 54 49  ON {HAVE_LOCALTI
1ca0: 4d 45 5f 53 7d 20 7b 0a 20 20 49 66 20 74 68 65  ME_S} {.  If the
1cb0: 20 48 41 56 45 5f 4c 4f 43 41 4c 54 49 4d 45 5f   HAVE_LOCALTIME_
1cc0: 53 20 6f 70 74 69 6f 6e 20 69 73 20 74 72 75 65  S option is true
1cd0: 2c 20 74 68 65 6e 20 53 51 4c 69 74 65 20 75 73  , then SQLite us
1ce0: 65 73 20 74 68 65 20 74 68 72 65 61 64 73 61 66  es the threadsaf
1cf0: 65 0a 20 20 6c 6f 63 61 6c 74 69 6d 65 5f 73 28  e.  localtime_s(
1d00: 29 20 6c 69 62 72 61 72 79 20 72 6f 75 74 69 6e  ) library routin
1d10: 65 20 69 6e 73 74 65 61 64 20 6f 66 20 6c 6f 63  e instead of loc
1d20: 61 6c 74 69 6d 65 28 29 0a 20 20 74 6f 20 68 65  altime().  to he
1d30: 6c 70 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65  lp implement the
1d40: 20 5b 6c 6f 63 61 6c 74 69 6d 65 20 6d 6f 64 69   [localtime modi
1d50: 66 69 65 72 5d 0a 20 20 74 6f 20 74 68 65 20 62  fier].  to the b
1d60: 75 69 6c 74 2d 69 6e 20 5b 64 61 74 65 20 61 6e  uilt-in [date an
1d70: 64 20 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73  d time functions
1d80: 5d 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50  ]..}..COMPILE_OP
1d90: 54 49 4f 4e 20 7b 48 41 56 45 5f 4d 41 4c 4c 4f  TION {HAVE_MALLO
1da0: 43 5f 55 53 41 42 4c 45 5f 53 49 5a 45 7d 20 7b  C_USABLE_SIZE} {
1db0: 0a 20 20 49 66 20 74 68 65 20 48 41 56 45 5f 4d  .  If the HAVE_M
1dc0: 41 4c 4c 4f 43 5f 55 53 41 42 4c 45 5f 53 49 5a  ALLOC_USABLE_SIZ
1dd0: 45 20 6f 70 74 69 6f 6e 20 69 73 20 74 72 75 65  E option is true
1de0: 2c 20 74 68 65 6e 20 53 51 4c 69 74 65 20 74 72  , then SQLite tr
1df0: 69 65 73 20 75 73 65 73 20 74 68 65 0a 20 20 6d  ies uses the.  m
1e00: 61 6c 6c 6f 63 5f 75 73 61 62 6c 65 5f 73 69 7a  alloc_usable_siz
1e10: 65 28 29 20 69 6e 74 65 72 66 61 63 65 20 74 6f  e() interface to
1e20: 20 66 69 6e 64 20 74 68 65 20 73 69 7a 65 20 6f   find the size o
1e30: 66 20 61 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  f a memory alloc
1e40: 61 74 69 6f 6e 20 6f 62 74 61 69 6e 65 64 0a 20  ation obtained. 
1e50: 20 66 72 6f 6d 20 74 68 65 20 73 74 61 6e 64 61   from the standa
1e60: 72 64 2d 6c 69 62 72 61 72 79 20 6d 61 6c 6c 6f  rd-library mallo
1e70: 63 28 29 20 6f 72 20 72 65 61 6c 6c 6f 63 28 29  c() or realloc()
1e80: 20 72 6f 75 74 69 6e 65 73 2e 20 20 54 68 69 73   routines.  This
1e90: 20 6f 70 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 0a   option is only.
1ea0: 20 20 61 70 70 6c 69 63 61 62 6c 65 20 69 66 20    applicable if 
1eb0: 74 68 65 20 73 74 61 6e 64 61 72 64 2d 6c 69 62  the standard-lib
1ec0: 72 61 72 79 20 6d 61 6c 6c 6f 63 28 29 20 69 73  rary malloc() is
1ed0: 20 75 73 65 64 2e 20 20 4f 6e 20 41 70 70 6c 65   used.  On Apple
1ee0: 20 73 79 73 74 65 6d 73 2c 0a 20 20 22 7a 6f 6e   systems,.  "zon
1ef0: 65 20 6d 61 6c 6c 6f 63 22 20 69 73 20 75 73 65  e malloc" is use
1f00: 64 20 69 6e 73 74 65 61 64 2c 20 61 6e 64 20 73  d instead, and s
1f10: 6f 20 74 68 69 73 20 6f 70 74 69 6f 6e 20 69 73  o this option is
1f20: 20 6e 6f 74 20 61 70 70 6c 69 63 61 62 6c 65 2e   not applicable.
1f30: 20 20 41 6e 64 2c 20 6f 66 0a 20 20 63 6f 75 72    And, of.  cour
1f40: 73 65 2c 20 69 66 20 74 68 65 20 61 70 70 6c 69  se, if the appli
1f50: 63 61 74 69 6f 6e 20 73 75 70 70 6c 69 65 73 20  cation supplies 
1f60: 69 74 73 20 6f 77 6e 20 6d 61 6c 6c 6f 63 20 69  its own malloc i
1f70: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 75 73  mplementation us
1f80: 69 6e 67 0a 20 20 5b 53 51 4c 49 54 45 5f 43 4f  ing.  [SQLITE_CO
1f90: 4e 46 49 47 5f 4d 41 4c 4c 4f 43 5d 20 74 68 65  NFIG_MALLOC] the
1fa0: 6e 20 74 68 69 73 20 6f 70 74 69 6f 6e 20 68 61  n this option ha
1fb0: 73 20 6e 6f 20 65 66 66 65 63 74 2e 0a 20 20 3c  s no effect..  <
1fc0: 70 3e 0a 20 20 49 66 20 74 68 65 20 48 41 56 45  p>.  If the HAVE
1fd0: 5f 4d 41 4c 4c 4f 43 5f 55 53 41 42 4c 45 5f 53  _MALLOC_USABLE_S
1fe0: 49 5a 45 20 6f 70 74 69 6f 6e 20 69 73 20 6f 6d  IZE option is om
1ff0: 69 74 74 65 64 20 6f 72 20 69 73 20 66 61 6c 73  itted or is fals
2000: 65 2c 20 74 68 65 6e 20 53 51 4c 69 74 65 20 0a  e, then SQLite .
2010: 20 20 75 73 65 73 20 61 20 77 72 61 70 70 65 72    uses a wrapper
2020: 20 61 72 6f 75 6e 64 20 73 79 73 74 65 6d 20 6d   around system m
2030: 61 6c 6c 6f 63 28 29 20 61 6e 64 20 72 65 61 6c  alloc() and real
2040: 6c 6f 63 28 29 20 74 68 61 74 20 65 6e 6c 61 72  loc() that enlar
2050: 67 65 73 20 65 61 63 68 20 61 6c 6c 6f 63 61 74  ges each allocat
2060: 69 6f 6e 0a 20 20 62 79 20 38 20 62 79 74 65 73  ion.  by 8 bytes
2070: 20 61 6e 64 20 77 72 69 74 65 73 20 74 68 65 20   and writes the 
2080: 73 69 7a 65 20 6f 66 20 74 68 65 20 61 6c 6c 6f  size of the allo
2090: 63 61 74 69 6f 6e 20 69 6e 20 74 68 65 20 69 6e  cation in the in
20a0: 69 74 69 61 6c 20 38 20 62 79 74 65 73 2c 20 61  itial 8 bytes, a
20b0: 6e 64 0a 20 20 74 68 65 6e 20 53 51 4c 69 74 65  nd.  then SQLite
20c0: 20 61 6c 73 6f 20 69 6d 70 6c 65 6d 65 6e 74 73   also implements
20d0: 20 69 74 73 20 6f 77 6e 20 68 6f 6d 65 2d 67 72   its own home-gr
20e0: 6f 77 6e 20 76 65 72 73 69 6f 6e 20 6f 66 20 6d  own version of m
20f0: 61 6c 6c 6f 63 5f 75 73 61 62 6c 65 5f 73 69 7a  alloc_usable_siz
2100: 65 28 29 0a 20 20 74 68 61 74 20 63 6f 6e 73 75  e().  that consu
2110: 6c 74 73 20 74 68 61 74 20 38 2d 62 79 74 65 20  lts that 8-byte 
2120: 70 72 65 66 69 78 20 74 6f 20 66 69 6e 64 20 74  prefix to find t
2130: 68 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73 69  he allocation si
2140: 7a 65 2e 20 20 54 68 69 73 20 61 70 70 72 6f 61  ze.  This approa
2150: 63 68 0a 20 20 77 6f 72 6b 73 20 62 75 74 20 69  ch.  works but i
2160: 74 20 69 73 20 73 75 62 6f 70 74 69 6d 61 6c 2e  t is suboptimal.
2170: 20 20 41 70 70 6c 69 63 61 74 69 6f 6e 73 20 61    Applications a
2180: 72 65 20 65 6e 63 6f 75 72 61 67 65 64 20 74 6f  re encouraged to
2190: 20 75 73 65 0a 20 20 48 41 56 45 5f 4d 41 4c 4c   use.  HAVE_MALL
21a0: 4f 43 5f 55 53 41 42 4c 45 5f 53 49 5a 45 20 77  OC_USABLE_SIZE w
21b0: 68 65 6e 65 76 65 72 20 70 6f 73 73 69 62 6c 65  henever possible
21c0: 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54  ..}..COMPILE_OPT
21d0: 49 4f 4e 20 7b 48 41 56 45 5f 53 54 52 43 48 52  ION {HAVE_STRCHR
21e0: 4e 55 4c 7d 20 7b 0a 20 20 49 66 20 74 68 65 20  NUL} {.  If the 
21f0: 48 41 56 45 5f 53 54 52 43 48 52 4e 55 4c 20 6f  HAVE_STRCHRNUL o
2200: 70 74 69 6f 6e 20 69 73 20 74 72 75 65 2c 20 74  ption is true, t
2210: 68 65 6e 20 53 51 4c 69 74 65 20 75 73 65 73 20  hen SQLite uses 
2220: 74 68 65 20 73 74 72 63 68 72 6e 75 6c 28 29 20  the strchrnul() 
2230: 6c 69 62 72 61 72 79 0a 20 20 66 75 6e 63 74 69  library.  functi
2240: 6f 6e 2e 20 20 49 66 20 74 68 69 73 20 6f 70 74  on.  If this opt
2250: 69 6f 6e 20 69 73 20 6d 69 73 73 69 6e 67 20 6f  ion is missing o
2260: 72 20 66 61 6c 73 65 2c 20 74 68 65 6e 20 53 51  r false, then SQ
2270: 4c 69 74 65 20 73 75 62 73 74 69 74 75 74 65 73  Lite substitutes
2280: 20 69 74 73 20 6f 77 6e 0a 20 20 68 6f 6d 65 2d   its own.  home-
2290: 67 72 6f 77 6e 20 69 6d 70 6c 65 6d 65 6e 74 61  grown implementa
22a0: 74 69 6f 6e 20 6f 66 20 73 74 72 63 68 72 6e 75  tion of strchrnu
22b0: 6c 28 29 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f  l()..}..COMPILE_
22c0: 4f 50 54 49 4f 4e 20 7b 48 41 56 45 5f 55 53 4c  OPTION {HAVE_USL
22d0: 45 45 50 7d 20 7b 0a 20 20 49 66 20 74 68 65 20  EEP} {.  If the 
22e0: 48 41 56 45 5f 55 53 4c 45 45 50 20 6f 70 74 69  HAVE_USLEEP opti
22f0: 6f 6e 20 69 73 20 74 72 75 65 2c 20 74 68 65 6e  on is true, then
2300: 20 74 68 65 20 64 65 66 61 75 6c 74 20 75 6e 69   the default uni
2310: 78 20 56 46 53 20 75 73 65 73 20 74 68 65 0a 20  x VFS uses the. 
2320: 20 75 73 6c 65 65 70 28 29 20 73 79 73 74 65 6d   usleep() system
2330: 20 63 61 6c 6c 20 74 6f 20 69 6d 70 6c 65 6d 65   call to impleme
2340: 6e 74 20 74 68 65 20 78 53 6c 65 65 70 20 6d 65  nt the xSleep me
2350: 74 68 6f 64 2e 20 20 49 66 20 74 68 69 73 20 6f  thod.  If this o
2360: 70 74 69 6f 6e 20 69 73 0a 20 20 75 6e 64 65 66  ption is.  undef
2370: 69 6e 65 64 20 6f 72 20 66 61 6c 73 65 2c 20 74  ined or false, t
2380: 68 65 6e 20 78 53 6c 65 65 70 20 6f 6e 20 75 6e  hen xSleep on un
2390: 69 78 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65  ix is implemente
23a0: 64 20 75 73 69 6e 67 20 73 6c 65 65 70 28 29 20  d using sleep() 
23b0: 77 68 69 63 68 0a 20 20 6d 65 61 6e 73 20 74 68  which.  means th
23c0: 61 74 20 5b 73 71 6c 69 74 65 33 5f 73 6c 65 65  at [sqlite3_slee
23d0: 70 28 29 5d 20 77 69 6c 6c 20 68 61 76 65 20 61  p()] will have a
23e0: 20 6d 69 6e 69 6d 75 6d 20 77 61 69 74 20 69 6e   minimum wait in
23f0: 74 65 72 76 61 6c 20 6f 66 20 31 30 30 30 0a 20  terval of 1000. 
2400: 20 6d 69 6c 6c 69 73 65 63 6f 6e 64 73 20 72 65   milliseconds re
2410: 67 61 72 64 6c 65 73 73 20 6f 66 20 69 74 73 20  gardless of its 
2420: 61 72 67 75 6d 65 6e 74 2e 20 20 0a 7d 0a 0a 43  argument.  .}..C
2430: 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 48  OMPILE_OPTION {H
2440: 41 56 45 5f 55 54 49 4d 45 7d 20 7b 0a 20 20 49  AVE_UTIME} {.  I
2450: 66 20 74 68 65 20 48 41 56 45 5f 55 54 49 4d 45  f the HAVE_UTIME
2460: 20 6f 70 74 69 6f 6e 20 69 73 20 74 72 75 65 2c   option is true,
2470: 20 74 68 65 6e 20 74 68 65 20 62 75 69 6c 74 2d   then the built-
2480: 69 6e 20 62 75 74 20 6e 6f 6e 2d 73 74 61 6e 64  in but non-stand
2490: 61 72 64 0a 20 20 22 75 6e 69 78 2d 64 6f 74 66  ard.  "unix-dotf
24a0: 69 6c 65 22 20 56 46 53 20 77 69 6c 6c 20 75 73  ile" VFS will us
24b0: 65 20 74 68 65 20 75 74 69 6d 65 28 29 20 73 79  e the utime() sy
24c0: 73 74 65 6d 20 63 61 6c 6c 2c 20 69 6e 73 74 65  stem call, inste
24d0: 61 64 20 6f 66 20 75 74 69 6d 65 73 28 29 2c 0a  ad of utimes(),.
24e0: 20 20 74 6f 20 73 65 74 20 74 68 65 20 6c 61 73    to set the las
24f0: 74 20 61 63 63 65 73 73 20 74 69 6d 65 20 6f 6e  t access time on
2500: 20 74 68 65 20 6c 6f 63 6b 20 66 69 6c 65 2e 0a   the lock file..
2510: 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f  }..COMPILE_OPTIO
2520: 4e 20 7b 53 51 4c 49 54 45 5f 42 59 54 45 4f 52  N {SQLITE_BYTEOR
2530: 44 45 52 3d 3c 69 3e 28 30 7c 31 32 33 34 7c 34  DER=<i>(0|1234|4
2540: 33 32 31 29 3c 2f 69 3e 7d 20 7b 0a 20 20 53 51  321)</i>} {.  SQ
2550: 4c 69 74 65 20 6e 65 65 64 73 20 74 6f 20 6b 6e  Lite needs to kn
2560: 6f 77 20 69 66 20 74 68 65 20 6e 61 74 69 76 65  ow if the native
2570: 20 62 79 74 65 20 6f 72 64 65 72 20 6f 66 20 74   byte order of t
2580: 68 65 20 74 61 72 67 65 74 20 43 50 55 20 69 73  he target CPU is
2590: 0a 20 20 62 69 67 2d 65 6e 64 69 61 6e 20 6f 72  .  big-endian or
25a0: 20 6c 69 74 74 6c 65 2d 65 6e 64 69 6e 67 2e 20   little-ending. 
25b0: 20 54 68 65 20 53 51 4c 49 54 45 5f 42 59 54 45   The SQLITE_BYTE
25c0: 4f 52 44 45 52 20 70 72 65 70 72 6f 63 65 73 73  ORDER preprocess
25d0: 6f 72 20 69 73 20 73 65 74 0a 20 20 74 6f 20 34  or is set.  to 4
25e0: 33 32 31 20 66 6f 72 20 62 69 67 2d 65 6e 64 69  321 for big-endi
25f0: 61 6e 20 6d 61 63 68 69 6e 65 73 20 61 6e 64 20  an machines and 
2600: 31 32 33 34 20 66 6f 72 20 6c 69 74 74 6c 65 2d  1234 for little-
2610: 65 6e 64 69 61 6e 20 6d 61 63 68 69 6e 65 73 2c  endian machines,
2620: 20 6f 72 0a 20 20 69 74 20 63 61 6e 20 62 65 20   or.  it can be 
2630: 30 20 74 6f 20 6d 65 61 6e 20 74 68 61 74 20 74  0 to mean that t
2640: 68 65 20 62 79 74 65 20 6f 72 64 65 72 20 6d 75  he byte order mu
2650: 73 74 20 62 65 20 64 65 74 65 72 6d 69 6e 65 64  st be determined
2660: 20 61 74 20 72 75 6e 2d 74 69 6d 65 2e 0a 20 20   at run-time..  
2670: 54 68 65 72 65 20 61 72 65 20 23 69 66 64 65 66  There are #ifdef
2680: 73 20 69 6e 20 74 68 65 20 63 6f 64 65 20 74 68  s in the code th
2690: 61 74 20 73 65 74 20 53 51 4c 49 54 45 5f 42 59  at set SQLITE_BY
26a0: 54 45 4f 52 44 45 52 20 61 75 74 6f 6d 61 74 69  TEORDER automati
26b0: 63 61 6c 6c 79 0a 20 20 66 6f 72 20 61 6c 6c 20  cally.  for all 
26c0: 63 6f 6d 6d 6f 6e 20 70 6c 61 74 66 6f 72 6d 73  common platforms
26d0: 20 61 6e 64 20 63 6f 6d 70 69 6c 65 72 73 2e 20   and compilers. 
26e0: 20 48 6f 77 65 76 65 72 2c 20 69 74 20 6d 61 79   However, it may
26f0: 20 62 65 20 61 64 76 61 6e 74 61 67 65 6f 75 73   be advantageous
2700: 0a 20 20 74 6f 20 73 65 74 20 53 51 4c 49 54 45  .  to set SQLITE
2710: 5f 42 59 54 45 4f 52 44 45 52 20 61 70 70 72 6f  _BYTEORDER appro
2720: 70 72 69 61 74 65 6c 79 20 77 68 65 6e 20 63 6f  priately when co
2730: 6d 70 69 6c 69 6e 67 20 53 51 4c 69 74 65 20 66  mpiling SQLite f
2740: 6f 72 20 6f 62 73 63 75 72 65 0a 20 20 74 61 72  or obscure.  tar
2750: 67 65 74 73 2e 20 20 49 66 20 74 68 65 20 74 61  gets.  If the ta
2760: 72 67 65 74 20 62 79 74 65 20 6f 72 64 65 72 20  rget byte order 
2770: 63 61 6e 6e 6f 74 20 62 65 20 64 65 74 65 72 6d  cannot be determ
2780: 69 6e 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d  ined at compile-
2790: 74 69 6d 65 2c 0a 20 20 74 68 65 6e 20 53 51 4c  time,.  then SQL
27a0: 69 74 65 20 66 61 6c 6c 73 20 62 61 63 6b 20 74  ite falls back t
27b0: 6f 20 64 6f 69 6e 67 20 72 75 6e 2d 74 69 6d 65  o doing run-time
27c0: 20 63 68 65 63 6b 73 2c 20 77 68 69 63 68 20 61   checks, which a
27d0: 6c 77 61 79 73 20 77 6f 72 6b 2c 20 74 68 6f 75  lways work, thou
27e0: 67 68 0a 20 20 77 69 74 68 20 61 20 73 6d 61 6c  gh.  with a smal
27f0: 6c 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 70 65  l performance pe
2800: 6e 61 6c 74 79 2e 0a 7d 0a 3c 2f 74 63 6c 3e 0a  nalty..}.</tcl>.
2810: 0a 3c 61 20 6e 61 6d 65 3d 22 64 65 66 61 75 6c  .<a name="defaul
2820: 74 73 22 3e 3c 2f 61 3e 0a 3c 68 31 3e 20 4f 70  ts"></a>.<h1> Op
2830: 74 69 6f 6e 73 20 54 6f 20 53 65 74 20 44 65 66  tions To Set Def
2840: 61 75 6c 74 20 50 61 72 61 6d 65 74 65 72 20 56  ault Parameter V
2850: 61 6c 75 65 73 3c 2f 68 31 3e 0a 0a 3c 74 63 6c  alues</h1>..<tcl
2860: 3e 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f  >..COMPILE_OPTIO
2870: 4e 20 7b 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  N {SQLITE_DEFAUL
2880: 54 5f 41 55 54 4f 4d 41 54 49 43 5f 49 4e 44 45  T_AUTOMATIC_INDE
2890: 58 3d 3c 69 3e 26 6c 74 3b 30 20 6f 72 20 31 26  X=<i>&lt;0 or 1&
28a0: 67 74 3b 3c 2f 69 3e 7d 20 7b 0a 20 20 54 68 69  gt;</i>} {.  Thi
28b0: 73 20 6d 61 63 72 6f 20 64 65 74 65 72 6d 69 6e  s macro determin
28c0: 65 73 20 74 68 65 20 69 6e 69 74 69 61 6c 20 73  es the initial s
28d0: 65 74 74 69 6e 67 20 66 6f 72 20 5b 50 52 41 47  etting for [PRAG
28e0: 4d 41 20 61 75 74 6f 6d 61 74 69 63 5f 69 6e 64  MA automatic_ind
28f0: 65 78 5d 0a 20 20 66 6f 72 20 6e 65 77 6c 79 20  ex].  for newly 
2900: 6f 70 65 6e 65 64 20 5b 64 61 74 61 62 61 73 65  opened [database
2910: 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 5d 2e 0a 20   connections].. 
2920: 20 46 6f 72 20 61 6c 6c 20 76 65 72 73 69 6f 6e   For all version
2930: 73 20 6f 66 20 53 51 4c 69 74 65 20 74 68 72 6f  s of SQLite thro
2940: 75 67 68 20 33 2e 37 2e 31 37 2c 0a 20 20 61 75  ugh 3.7.17,.  au
2950: 74 6f 6d 61 74 69 63 20 69 6e 64 69 63 65 73 20  tomatic indices 
2960: 61 72 65 20 6e 6f 72 6d 61 6c 6c 79 20 65 6e 61  are normally ena
2970: 62 6c 65 64 20 66 6f 72 20 6e 65 77 20 64 61 74  bled for new dat
2980: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
2990: 73 20 69 66 0a 20 20 74 68 69 73 20 63 6f 6d 70  s if.  this comp
29a0: 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20  ile-time option 
29b0: 69 73 20 6f 6d 69 74 74 65 64 2e 0a 20 20 48 6f  is omitted..  Ho
29c0: 77 65 76 65 72 2c 20 74 68 61 74 20 6d 69 67 68  wever, that migh
29d0: 74 20 63 68 61 6e 67 65 20 69 6e 20 66 75 74 75  t change in futu
29e0: 72 65 20 72 65 6c 65 61 73 65 73 20 6f 66 20 53  re releases of S
29f0: 51 4c 69 74 65 2e 0a 20 20 3c 70 3e 53 65 65 20  QLite..  <p>See 
2a00: 61 6c 73 6f 3a 20 5b 53 51 4c 49 54 45 5f 4f 4d  also: [SQLITE_OM
2a10: 49 54 5f 41 55 54 4f 4d 41 54 49 43 5f 49 4e 44  IT_AUTOMATIC_IND
2a20: 45 58 5d 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f  EX].}..COMPILE_O
2a30: 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 44 45  PTION {SQLITE_DE
2a40: 46 41 55 4c 54 5f 41 55 54 4f 56 41 43 55 55 4d  FAULT_AUTOVACUUM
2a50: 3d 3c 69 3e 26 6c 74 3b 30 20 6f 72 20 31 20 6f  =<i>&lt;0 or 1 o
2a60: 72 20 32 26 67 74 3b 3c 2f 69 3e 7d 20 7b 0a 20  r 2&gt;</i>} {. 
2a70: 20 54 68 69 73 20 6d 61 63 72 6f 20 64 65 74 65   This macro dete
2a80: 72 6d 69 6e 65 73 20 69 66 20 53 51 4c 69 74 65  rmines if SQLite
2a90: 20 63 72 65 61 74 65 73 20 64 61 74 61 62 61 73   creates databas
2aa0: 65 73 20 77 69 74 68 20 74 68 65 20 0a 20 20 5b  es with the .  [
2ab0: 61 75 74 6f 5f 76 61 63 75 75 6d 5d 20 66 6c 61  auto_vacuum] fla
2ac0: 67 20 73 65 74 20 62 79 20 64 65 66 61 75 6c 74  g set by default
2ad0: 20 74 6f 20 4f 46 46 20 28 30 29 2c 20 46 55 4c   to OFF (0), FUL
2ae0: 4c 20 28 31 29 2c 20 6f 72 0a 20 20 49 4e 43 52  L (1), or.  INCR
2af0: 45 4d 45 4e 54 41 4c 20 28 32 29 2e 20 54 68 65  EMENTAL (2). The
2b00: 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 69   default value i
2b10: 73 20 30 20 6d 65 61 6e 69 6e 67 20 74 68 61 74  s 0 meaning that
2b20: 20 64 61 74 61 62 61 73 65 73 0a 20 20 61 72 65   databases.  are
2b30: 20 63 72 65 61 74 65 64 20 77 69 74 68 20 61 75   created with au
2b40: 74 6f 2d 76 61 63 75 75 6d 20 74 75 72 6e 65 64  to-vacuum turned
2b50: 20 6f 66 66 2e 0a 20 20 49 6e 20 61 6e 79 20 63   off..  In any c
2b60: 61 73 65 20 74 68 65 20 63 6f 6d 70 69 6c 65 2d  ase the compile-
2b70: 74 69 6d 65 20 64 65 66 61 75 6c 74 20 6d 61 79  time default may
2b80: 20 62 65 20 6f 76 65 72 72 69 64 64 65 6e 20 62   be overridden b
2b90: 79 20 74 68 65 20 0a 20 20 5b 50 52 41 47 4d 41  y the .  [PRAGMA
2ba0: 20 61 75 74 6f 5f 76 61 63 75 75 6d 5d 20 63 6f   auto_vacuum] co
2bb0: 6d 6d 61 6e 64 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c  mmand..}..COMPIL
2bc0: 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45  E_OPTION {SQLITE
2bd0: 5f 44 45 46 41 55 4c 54 5f 43 41 43 48 45 5f 53  _DEFAULT_CACHE_S
2be0: 49 5a 45 3d 3c 69 3e 26 6c 74 3b 4e 26 67 74 3b  IZE=<i>&lt;N&gt;
2bf0: 3c 2f 69 3e 7d 20 7b 0a 20 20 54 68 69 73 20 6d  </i>} {.  This m
2c00: 61 63 72 6f 20 73 65 74 73 20 74 68 65 20 64 65  acro sets the de
2c10: 66 61 75 6c 74 20 6d 61 78 69 6d 75 6d 20 73 69  fault maximum si
2c20: 7a 65 20 6f 66 20 74 68 65 20 70 61 67 65 2d 63  ze of the page-c
2c30: 61 63 68 65 20 66 6f 72 20 65 61 63 68 20 61 74  ache for each at
2c40: 74 61 63 68 65 64 0a 20 20 64 61 74 61 62 61 73  tached.  databas
2c50: 65 2e 20 20 41 20 70 6f 73 69 74 69 76 65 20 76  e.  A positive v
2c60: 61 6c 75 65 20 6d 65 61 6e 73 20 74 68 61 74 20  alue means that 
2c70: 74 68 65 20 6c 69 6d 69 74 20 69 73 20 4e 20 70  the limit is N p
2c80: 61 67 65 2e 20 20 49 66 20 4e 20 69 73 20 6e 65  age.  If N is ne
2c90: 67 61 74 69 76 65 0a 20 20 74 68 61 74 20 6d 65  gative.  that me
2ca0: 61 6e 73 20 74 6f 20 6c 69 6d 69 74 20 74 68 65  ans to limit the
2cb0: 20 63 61 63 68 65 20 73 69 7a 65 20 74 6f 20 2d   cache size to -
2cc0: 4e 2a 31 30 32 34 20 62 79 74 65 73 2e 0a 20 20  N*1024 bytes..  
2cd0: 54 68 65 20 73 75 67 67 65 73 74 65 64 20 6d 61  The suggested ma
2ce0: 78 69 6d 75 6d 20 63 61 63 68 65 20 73 69 7a 65  ximum cache size
2cf0: 20 63 61 6e 20 62 65 20 6f 76 65 72 72 69 64 64   can be overridd
2d00: 65 6e 20 62 79 20 74 68 65 20 0a 20 20 5b 50 52  en by the .  [PR
2d10: 41 47 4d 41 20 63 61 63 68 65 5f 73 69 7a 65 5d  AGMA cache_size]
2d20: 20 63 6f 6d 6d 61 6e 64 2e 20 54 68 65 20 64 65   command. The de
2d30: 66 61 75 6c 74 20 76 61 6c 75 65 20 69 73 20 2d  fault value is -
2d40: 32 30 30 30 2c 20 77 68 69 63 68 20 74 72 61 6e  2000, which tran
2d50: 73 6c 61 74 65 73 0a 20 20 69 6e 74 6f 20 61 20  slates.  into a 
2d60: 6d 61 78 69 6d 75 6d 20 6f 66 20 32 30 34 38 30  maximum of 20480
2d70: 30 30 20 62 79 74 65 73 20 70 65 72 20 63 61 63  00 bytes per cac
2d80: 68 65 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f  he..}..COMPILE_O
2d90: 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 44 45  PTION {SQLITE_DE
2da0: 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d 41  FAULT_FILE_FORMA
2db0: 54 3d 3c 69 3e 26 6c 74 3b 31 20 6f 72 20 34 26  T=<i>&lt;1 or 4&
2dc0: 67 74 3b 3c 2f 69 3e 7d 20 7b 0a 20 20 54 68 65  gt;</i>} {.  The
2dd0: 20 64 65 66 61 75 6c 74 20 5b 73 63 68 65 6d 61   default [schema
2de0: 20 66 6f 72 6d 61 74 20 6e 75 6d 62 65 72 5d 20   format number] 
2df0: 75 73 65 64 20 62 79 20 53 51 4c 69 74 65 20 77  used by SQLite w
2e00: 68 65 6e 20 63 72 65 61 74 69 6e 67 0a 20 20 6e  hen creating.  n
2e10: 65 77 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ew database file
2e20: 73 20 69 73 20 73 65 74 20 62 79 20 74 68 69 73  s is set by this
2e30: 20 6d 61 63 72 6f 2e 20 20 54 68 65 20 73 63 68   macro.  The sch
2e40: 65 6d 61 20 66 6f 72 6d 61 74 73 20 61 72 65 20  ema formats are 
2e50: 61 6c 6c 0a 20 20 76 65 72 79 20 73 69 6d 69 6c  all.  very simil
2e60: 61 72 2e 20 20 54 68 65 20 64 69 66 66 65 72 65  ar.  The differe
2e70: 6e 63 65 20 62 65 74 77 65 65 6e 20 66 6f 72 6d  nce between form
2e80: 61 74 73 20 31 20 61 6e 64 20 34 20 69 73 20 74  ats 1 and 4 is t
2e90: 68 61 74 20 66 6f 72 6d 61 74 0a 20 20 34 20 75  hat format.  4 u
2ea0: 6e 64 65 72 73 74 61 6e 64 73 20 5b 64 65 73 63  nderstands [desc
2eb0: 65 6e 64 69 6e 67 20 69 6e 64 69 63 65 73 5d 20  ending indices] 
2ec0: 61 6e 64 20 68 61 73 20 61 20 74 69 67 68 74 65  and has a tighte
2ed0: 72 20 65 6e 63 6f 64 69 6e 67 20 66 6f 72 0a 20  r encoding for. 
2ee0: 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 73 2e   boolean values.
2ef0: 0a 0a 20 20 41 6c 6c 20 76 65 72 73 69 6f 6e 73  ..  All versions
2f00: 20 6f 66 20 53 51 4c 69 74 65 20 73 69 6e 63 65   of SQLite since
2f10: 20 33 2e 33 2e 30 20 28 32 30 30 36 2d 30 31 2d   3.3.0 (2006-01-
2f20: 31 30 29 0a 20 20 63 61 6e 20 72 65 61 64 20 61  10).  can read a
2f30: 6e 64 20 77 72 69 74 65 20 61 6e 79 20 73 63 68  nd write any sch
2f40: 65 6d 61 20 66 6f 72 6d 61 74 0a 20 20 62 65 74  ema format.  bet
2f50: 77 65 65 6e 20 31 20 61 6e 64 20 34 2e 20 20 42  ween 1 and 4.  B
2f60: 75 74 20 6f 6c 64 65 72 20 76 65 72 73 69 6f 6e  ut older version
2f70: 73 20 6f 66 20 53 51 4c 69 74 65 20 6d 69 67 68  s of SQLite migh
2f80: 74 20 6e 6f 74 20 62 65 20 61 62 6c 65 20 74 6f  t not be able to
2f90: 0a 20 20 72 65 61 64 20 66 6f 72 6d 61 74 73 20  .  read formats 
2fa0: 67 72 65 61 74 65 72 20 74 68 61 6e 20 31 2e 20  greater than 1. 
2fb0: 20 53 6f 20 74 68 61 74 20 6f 6c 64 65 72 20 76   So that older v
2fc0: 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74  ersions of SQLit
2fd0: 65 20 77 69 6c 6c 0a 20 20 62 65 20 61 62 6c 65  e will.  be able
2fe0: 20 74 6f 20 72 65 61 64 20 61 6e 64 20 77 72 69   to read and wri
2ff0: 74 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  te database file
3000: 73 20 63 72 65 61 74 65 64 20 62 79 20 6e 65 77  s created by new
3010: 65 72 20 76 65 72 73 69 6f 6e 73 0a 20 20 6f 66  er versions.  of
3020: 20 53 51 4c 69 74 65 2c 20 74 68 65 20 64 65 66   SQLite, the def
3030: 61 75 6c 74 20 73 63 68 65 6d 61 20 66 6f 72 6d  ault schema form
3040: 61 74 20 77 61 73 20 73 65 74 20 74 6f 20 31 20  at was set to 1 
3050: 66 6f 72 20 53 51 4c 69 74 65 20 76 65 72 73 69  for SQLite versi
3060: 6f 6e 73 0a 20 20 74 68 72 6f 75 67 68 20 33 2e  ons.  through 3.
3070: 37 2e 39 20 28 32 30 31 31 2d 31 31 2d 30 31 29  7.9 (2011-11-01)
3080: 2e 20 20 42 65 67 69 6e 6e 69 6e 67 20 77 69 74  .  Beginning wit
3090: 68 20 0a 20 20 5b 76 65 72 73 69 6f 6e 20 33 2e  h .  [version 3.
30a0: 37 2e 31 30 5d 20 28 5b 64 61 74 65 6f 66 3a 33  7.10] ([dateof:3
30b0: 2e 37 2e 31 30 5d 29 2c 20 74 68 65 20 64 65 66  .7.10]), the def
30c0: 61 75 6c 74 0a 20 20 73 63 68 65 6d 61 20 66 6f  ault.  schema fo
30d0: 72 6d 61 74 20 69 73 20 34 2e 0a 0a 20 20 54 68  rmat is 4...  Th
30e0: 65 20 73 63 68 65 6d 61 20 66 6f 72 6d 61 74 20  e schema format 
30f0: 6e 75 6d 62 65 72 20 66 6f 72 20 61 20 6e 65 77  number for a new
3100: 20 64 61 74 61 62 61 73 65 20 63 61 6e 20 62 65   database can be
3110: 20 73 65 74 20 61 74 20 72 75 6e 74 69 6d 65 20   set at runtime 
3120: 75 73 69 6e 67 0a 20 20 74 68 65 20 5b 50 52 41  using.  the [PRA
3130: 47 4d 41 20 6c 65 67 61 63 79 5f 66 69 6c 65 5f  GMA legacy_file_
3140: 66 6f 72 6d 61 74 5d 20 63 6f 6d 6d 61 6e 64 2e  format] command.
3150: 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49  .}..COMPILE_OPTI
3160: 4f 4e 20 7b 53 51 4c 49 54 45 5f 44 45 46 41 55  ON {SQLITE_DEFAU
3170: 4c 54 5f 46 49 4c 45 5f 50 45 52 4d 49 53 53 49  LT_FILE_PERMISSI
3180: 4f 4e 53 3d 3c 69 3e 4e 3c 2f 69 3e 7d 20 7b 0a  ONS=<i>N</i>} {.
3190: 20 20 54 68 65 20 64 65 66 61 75 6c 74 20 6e 75    The default nu
31a0: 6d 65 72 69 63 20 66 69 6c 65 20 70 65 72 6d 69  meric file permi
31b0: 73 73 69 6f 6e 73 20 66 6f 72 20 6e 65 77 6c 79  ssions for newly
31c0: 20 63 72 65 61 74 65 64 20 64 61 74 61 62 61 73   created databas
31d0: 65 20 66 69 6c 65 73 0a 20 20 75 6e 64 65 72 20  e files.  under 
31e0: 75 6e 69 78 2e 20 20 49 66 20 6e 6f 74 20 73 70  unix.  If not sp
31f0: 65 63 69 66 69 65 64 2c 20 74 68 65 20 64 65 66  ecified, the def
3200: 61 75 6c 74 20 69 73 20 30 36 34 34 20 77 68 69  ault is 0644 whi
3210: 63 68 20 6d 65 61 6e 73 20 74 68 61 74 0a 20 20  ch means that.  
3220: 74 68 65 20 66 69 6c 65 73 20 69 73 20 67 6c 6f  the files is glo
3230: 62 61 6c 6c 79 20 72 65 61 64 61 62 6c 65 20 62  bally readable b
3240: 75 74 20 6f 6e 6c 79 20 77 72 69 74 61 62 6c 65  ut only writable
3250: 20 62 79 20 74 68 65 20 63 72 65 61 74 6f 72 2e   by the creator.
3260: 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49  .}..COMPILE_OPTI
3270: 4f 4e 20 7b 53 51 4c 49 54 45 5f 44 45 46 41 55  ON {SQLITE_DEFAU
3280: 4c 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 53 3d  LT_FOREIGN_KEYS=
3290: 3c 69 3e 26 6c 74 3b 30 20 6f 72 20 31 26 67 74  <i>&lt;0 or 1&gt
32a0: 3b 3c 2f 69 3e 7d 20 7b 0a 20 20 54 68 69 73 20  ;</i>} {.  This 
32b0: 6d 61 63 72 6f 20 64 65 74 65 72 6d 69 6e 65 73  macro determines
32c0: 20 77 68 65 74 68 65 72 20 65 6e 66 6f 72 63 65   whether enforce
32d0: 6d 65 6e 74 20 6f 66 20 0a 20 20 5b 66 6f 72 65  ment of .  [fore
32e0: 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
32f0: 6e 74 73 5d 20 69 73 20 65 6e 61 62 6c 65 64 20  nts] is enabled 
3300: 6f 72 20 64 69 73 61 62 6c 65 64 20 62 79 20 64  or disabled by d
3310: 65 66 61 75 6c 74 20 66 6f 72 0a 20 20 6e 65 77  efault for.  new
3320: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
3330: 74 69 6f 6e 73 2e 20 20 45 61 63 68 20 64 61 74  tions.  Each dat
3340: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
3350: 20 63 61 6e 20 61 6c 77 61 79 73 20 74 75 72 6e   can always turn
3360: 0a 20 20 65 6e 66 6f 72 63 65 6d 65 6e 74 20 6f  .  enforcement o
3370: 66 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f  f foreign key co
3380: 6e 73 74 72 61 69 6e 74 73 20 6f 6e 20 61 6e 64  nstraints on and
3390: 20 6f 66 66 20 61 6e 64 20 72 75 6e 2d 74 69 6d   off and run-tim
33a0: 65 20 75 73 69 6e 67 0a 20 20 74 68 65 20 5b 66  e using.  the [f
33b0: 6f 72 65 69 67 6e 5f 6b 65 79 73 20 70 72 61 67  oreign_keys prag
33c0: 6d 61 5d 2e 20 20 45 6e 66 6f 72 63 65 6d 65 6e  ma].  Enforcemen
33d0: 74 20 6f 66 20 66 6f 72 65 69 67 6e 20 6b 65 79  t of foreign key
33e0: 20 63 6f 6e 73 74 72 61 69 6e 74 73 0a 20 20 69   constraints.  i
33f0: 73 20 6e 6f 72 6d 61 6c 6c 79 20 6f 66 66 20 62  s normally off b
3400: 79 20 64 65 66 61 75 6c 74 2c 20 62 75 74 20 69  y default, but i
3410: 66 20 74 68 69 73 20 63 6f 6d 70 69 6c 65 2d 74  f this compile-t
3420: 69 6d 65 20 70 61 72 61 6d 65 74 65 72 20 69 73  ime parameter is
3430: 0a 20 20 73 65 74 20 74 6f 20 31 2c 20 65 6e 66  .  set to 1, enf
3440: 6f 72 63 65 6d 65 6e 74 20 6f 66 20 66 6f 72 65  orcement of fore
3450: 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
3460: 6e 74 73 20 77 69 6c 6c 20 62 65 20 6f 6e 20 62  nts will be on b
3470: 79 20 64 65 66 61 75 6c 74 2e 0a 7d 0a 0a 43 4f  y default..}..CO
3480: 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51  MPILE_OPTION {SQ
3490: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41  LITE_DEFAULT_MMA
34a0: 50 5f 53 49 5a 45 3d 3c 69 3e 4e 3c 2f 69 3e 7d  P_SIZE=<i>N</i>}
34b0: 20 7b 0a 20 20 54 68 69 73 20 6d 61 63 72 6f 20   {.  This macro 
34c0: 73 65 74 73 20 74 68 65 20 64 65 66 61 75 6c 74  sets the default
34d0: 20 6c 69 6d 69 74 20 6f 6e 20 74 68 65 20 61 6d   limit on the am
34e0: 6f 75 6e 74 20 6f 66 20 6d 65 6d 6f 72 79 20 74  ount of memory t
34f0: 68 61 74 0a 20 20 77 69 6c 6c 20 62 65 20 75 73  hat.  will be us
3500: 65 64 20 66 6f 72 20 6d 65 6d 6f 72 79 2d 6d 61  ed for memory-ma
3510: 70 70 65 64 20 49 2f 4f 0a 20 20 66 6f 72 20 65  pped I/O.  for e
3520: 61 63 68 20 6f 70 65 6e 20 64 61 74 61 62 61 73  ach open databas
3530: 65 20 66 69 6c 65 2e 20 20 49 66 20 74 68 65 20  e file.  If the 
3540: 3c 69 3e 4e 3c 2f 69 3e 0a 20 20 69 73 20 7a 65  <i>N</i>.  is ze
3550: 72 6f 2c 20 74 68 65 6e 20 6d 65 6d 6f 72 79 20  ro, then memory 
3560: 6d 61 70 70 65 64 20 49 2f 4f 20 69 73 20 64 69  mapped I/O is di
3570: 73 61 62 6c 65 64 20 62 79 20 64 65 66 61 75 6c  sabled by defaul
3580: 74 2e 20 20 54 68 69 73 0a 20 20 63 6f 6d 70 69  t.  This.  compi
3590: 6c 65 2d 74 69 6d 65 20 6c 69 6d 69 74 20 61 6e  le-time limit an
35a0: 64 20 74 68 65 20 5b 53 51 4c 49 54 45 5f 4d 41  d the [SQLITE_MA
35b0: 58 5f 4d 4d 41 50 5f 53 49 5a 45 5d 20 63 61 6e  X_MMAP_SIZE] can
35c0: 20 62 65 20 6d 6f 64 69 66 69 65 64 20 0a 20 20   be modified .  
35d0: 61 74 20 73 74 61 72 74 2d 74 69 6d 65 20 75 73  at start-time us
35e0: 69 6e 67 20 74 68 65 0a 20 20 5b 73 71 6c 69 74  ing the.  [sqlit
35f0: 65 33 5f 63 6f 6e 66 69 67 5d 28 5b 53 51 4c 49  e3_config]([SQLI
3600: 54 45 5f 43 4f 4e 46 49 47 5f 4d 4d 41 50 5f 53  TE_CONFIG_MMAP_S
3610: 49 5a 45 5d 29 20 63 61 6c 6c 2c 20 6f 72 20 61  IZE]) call, or a
3620: 74 20 72 75 6e 2d 74 69 6d 65 0a 20 20 75 73 69  t run-time.  usi
3630: 6e 67 20 74 68 65 20 5b 6d 6d 61 70 5f 73 69 7a  ng the [mmap_siz
3640: 65 20 70 72 61 67 6d 61 5d 2e 0a 7d 0a 0a 43 4f  e pragma]..}..CO
3650: 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51  MPILE_OPTION {SQ
3660: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4a 4f 55  LITE_DEFAULT_JOU
3670: 52 4e 41 4c 5f 53 49 5a 45 5f 4c 49 4d 49 54 3d  RNAL_SIZE_LIMIT=
3680: 3c 69 3e 26 6c 74 3b 62 79 74 65 73 26 67 74 3b  <i>&lt;bytes&gt;
3690: 3c 2f 69 3e 7d 20 7b 0a 20 20 54 68 69 73 20 6f  </i>} {.  This o
36a0: 70 74 69 6f 6e 20 73 65 74 73 20 74 68 65 20 73  ption sets the s
36b0: 69 7a 65 20 6c 69 6d 69 74 20 6f 6e 20 5b 72 6f  ize limit on [ro
36c0: 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 5d 20  llback journal] 
36d0: 66 69 6c 65 73 20 69 6e 0a 20 20 5b 6a 6f 75 72  files in.  [jour
36e0: 6e 61 6c 5f 6d 6f 64 65 20 70 72 61 67 6d 61 20  nal_mode pragma 
36f0: 7c 20 70 65 72 73 69 73 74 65 6e 74 20 6a 6f 75  | persistent jou
3700: 72 6e 61 6c 20 6d 6f 64 65 5d 20 61 6e 64 0a 20  rnal mode] and. 
3710: 20 5b 6c 6f 63 6b 69 6e 67 5f 6d 6f 64 65 20 7c   [locking_mode |
3720: 20 65 78 63 6c 75 73 69 76 65 20 6c 6f 63 6b 69   exclusive locki
3730: 6e 67 20 6d 6f 64 65 5d 20 61 6e 64 20 6f 6e 20  ng mode] and on 
3740: 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 0a  the size of the.
3750: 20 20 77 72 69 74 65 2d 61 68 65 61 64 20 6c 6f    write-ahead lo
3760: 67 20 66 69 6c 65 20 69 6e 20 5b 57 41 4c 20 6d  g file in [WAL m
3770: 6f 64 65 5d 2e 20 57 68 65 6e 20 74 68 69 73 20  ode]. When this 
3780: 0a 20 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  .  compile-time 
3790: 6f 70 74 69 6f 6e 20 69 73 20 6f 6d 69 74 74 65  option is omitte
37a0: 64 20 74 68 65 72 65 20 69 73 20 6e 6f 20 75 70  d there is no up
37b0: 70 65 72 20 62 6f 75 6e 64 20 6f 6e 20 74 68 65  per bound on the
37c0: 0a 20 20 73 69 7a 65 20 6f 66 20 74 68 65 20 72  .  size of the r
37d0: 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 73  ollback journals
37e0: 20 6f 72 20 77 72 69 74 65 2d 61 68 65 61 64 20   or write-ahead 
37f0: 6c 6f 67 73 2e 20 20 0a 20 20 54 68 65 20 6a 6f  logs.  .  The jo
3800: 75 72 6e 61 6c 20 66 69 6c 65 20 73 69 7a 65 20  urnal file size 
3810: 6c 69 6d 69 74 0a 20 20 63 61 6e 20 62 65 20 63  limit.  can be c
3820: 68 61 6e 67 65 64 20 61 74 20 72 75 6e 2d 74 69  hanged at run-ti
3830: 6d 65 20 75 73 69 6e 67 20 74 68 65 20 5b 6a 6f  me using the [jo
3840: 75 72 6e 61 6c 5f 73 69 7a 65 5f 6c 69 6d 69 74  urnal_size_limit
3850: 20 70 72 61 67 6d 61 5d 2e 0a 7d 0a 0a 43 4f 4d   pragma]..}..COM
3860: 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c  PILE_OPTION {SQL
3870: 49 54 45 5f 44 45 46 41 55 4c 54 5f 4c 4f 43 4b  ITE_DEFAULT_LOCK
3880: 49 4e 47 5f 4d 4f 44 45 3d 3c 69 3e 26 6c 74 3b  ING_MODE=<i>&lt;
3890: 31 20 6f 72 20 30 26 67 74 3b 3c 2f 69 3e 7d 20  1 or 0&gt;</i>} 
38a0: 7b 0a 20 20 49 66 20 73 65 74 20 74 6f 20 31 2c  {.  If set to 1,
38b0: 20 74 68 65 6e 20 74 68 65 20 64 65 66 61 75 6c   then the defaul
38c0: 74 20 5b 6c 6f 63 6b 69 6e 67 5f 6d 6f 64 65 5d  t [locking_mode]
38d0: 20 69 73 20 73 65 74 20 74 6f 20 45 58 43 4c 55   is set to EXCLU
38e0: 53 49 56 45 2e 0a 20 20 49 66 20 6f 6d 69 74 74  SIVE..  If omitt
38f0: 65 64 20 6f 72 20 73 65 74 20 74 6f 20 30 20 74  ed or set to 0 t
3900: 68 65 6e 20 74 68 65 20 64 65 66 61 75 6c 74 20  hen the default 
3910: 5b 6c 6f 63 6b 69 6e 67 5f 6d 6f 64 65 5d 20 69  [locking_mode] i
3920: 73 20 4e 4f 52 4d 41 4c 2e 0a 7d 0a 0a 43 4f 4d  s NORMAL..}..COM
3930: 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c  PILE_OPTION {SQL
3940: 49 54 45 5f 44 45 46 41 55 4c 54 5f 4c 4f 4f 4b  ITE_DEFAULT_LOOK
3950: 41 53 49 44 45 3d 3c 69 3e 53 5a 2c 4e 3c 2f 69  ASIDE=<i>SZ,N</i
3960: 3e 7d 20 7b 0a 20 20 53 65 74 73 20 74 68 65 20  >} {.  Sets the 
3970: 64 65 66 61 75 6c 74 20 73 69 7a 65 20 6f 66 20  default size of 
3980: 74 68 65 20 5b 6c 6f 6f 6b 61 73 69 64 65 20 6d  the [lookaside m
3990: 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 6f 72 5d  emory allocator]
39a0: 20 6d 65 6d 6f 72 79 20 70 6f 6f 6c 0a 20 20 74   memory pool.  t
39b0: 6f 20 4e 20 65 6e 74 72 69 65 73 20 6f 66 20 53  o N entries of S
39c0: 5a 20 62 79 74 65 73 20 65 61 63 68 2e 20 20 54  Z bytes each.  T
39d0: 68 69 73 20 73 65 74 74 69 6e 67 20 63 61 6e 20  his setting can 
39e0: 62 65 20 6d 6f 64 69 66 69 65 64 20 61 74 0a 20  be modified at. 
39f0: 20 73 74 61 72 74 2d 74 69 6d 65 20 75 73 69 6e   start-time usin
3a00: 67 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69  g [sqlite3_confi
3a10: 67 5d 28 5b 53 51 4c 49 54 45 5f 43 4f 4e 46 49  g]([SQLITE_CONFI
3a20: 47 5f 4c 4f 4f 4b 41 53 49 44 45 5d 29 20 61 6e  G_LOOKASIDE]) an
3a30: 64 2f 6f 72 0a 20 20 61 73 20 65 61 63 68 20 5b  d/or.  as each [
3a40: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
3a50: 69 6f 6e 5d 20 69 73 20 6f 70 65 6e 65 64 20 75  ion] is opened u
3a60: 73 69 6e 67 0a 20 20 5b 73 71 6c 69 74 65 33 5f  sing.  [sqlite3_
3a70: 64 62 5f 63 6f 6e 66 69 67 5d 28 64 62 2c 20 5b  db_config](db, [
3a80: 53 51 4c 49 54 45 5f 44 42 43 4f 4e 46 49 47 5f  SQLITE_DBCONFIG_
3a90: 4c 4f 4f 4b 41 53 49 44 45 5d 29 2e 0a 7d 0a 0a  LOOKASIDE])..}..
3aa0: 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b  COMPILE_OPTION {
3ab0: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d  SQLITE_DEFAULT_M
3ac0: 45 4d 53 54 41 54 55 53 3d 3c 69 3e 26 6c 74 3b  EMSTATUS=<i>&lt;
3ad0: 31 20 6f 72 20 30 26 67 74 3b 3c 2f 69 3e 7d 20  1 or 0&gt;</i>} 
3ae0: 7b 0a 20 20 54 68 69 73 20 6d 61 63 72 6f 20 69  {.  This macro i
3af0: 73 20 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d  s used to determ
3b00: 69 6e 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e  ine whether or n
3b10: 6f 74 20 74 68 65 20 66 65 61 74 75 72 65 73 20  ot the features 
3b20: 65 6e 61 62 6c 65 64 20 61 6e 64 0a 20 20 64 69  enabled and.  di
3b30: 73 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68 65  sabled using the
3b40: 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4d   SQLITE_CONFIG_M
3b50: 45 4d 53 54 41 54 55 53 20 61 72 67 75 6d 65 6e  EMSTATUS argumen
3b60: 74 20 74 6f 20 5b 73 71 6c 69 74 65 33 5f 63 6f  t to [sqlite3_co
3b70: 6e 66 69 67 28 29 5d 0a 20 20 61 72 65 20 61 76  nfig()].  are av
3b80: 61 69 6c 61 62 6c 65 20 62 79 20 64 65 66 61 75  ailable by defau
3b90: 6c 74 2e 20 54 68 65 20 64 65 66 61 75 6c 74 20  lt. The default 
3ba0: 76 61 6c 75 65 20 69 73 20 31 20 28 5b 53 51 4c  value is 1 ([SQL
3bb0: 49 54 45 5f 43 4f 4e 46 49 47 5f 4d 45 4d 53 54  ITE_CONFIG_MEMST
3bc0: 41 54 55 53 5d 0a 20 20 72 65 6c 61 74 65 64 20  ATUS].  related 
3bd0: 66 65 61 74 75 72 65 73 20 65 6e 61 62 6c 65 64  features enabled
3be0: 29 2e 0a 20 20 3c 70 3e 0a 20 20 54 68 65 20 5b  )..  <p>.  The [
3bf0: 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72 79 5f 75  sqlite3_memory_u
3c00: 73 65 64 28 29 5d 20 61 6e 64 20 5b 73 71 6c 69  sed()] and [sqli
3c10: 74 65 33 5f 6d 65 6d 6f 72 79 5f 68 69 67 68 77  te3_memory_highw
3c20: 61 74 65 72 28 29 5d 20 69 6e 74 65 72 66 61 63  ater()] interfac
3c30: 65 73 2c 0a 20 20 74 68 65 20 5b 73 71 6c 69 74  es,.  the [sqlit
3c40: 65 33 5f 73 74 61 74 75 73 36 34 5d 28 5b 53 51  e3_status64]([SQ
3c50: 4c 49 54 45 5f 53 54 41 54 55 53 5f 4d 45 4d 4f  LITE_STATUS_MEMO
3c60: 52 59 5f 55 53 45 44 5d 29 20 69 6e 74 65 72 66  RY_USED]) interf
3c70: 61 63 65 2c 0a 20 20 61 6e 64 20 74 68 65 20 5b  ace,.  and the [
3c80: 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 45 4d 4f 52  SQLITE_MAX_MEMOR
3c90: 59 5d 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  Y] compile-time 
3ca0: 6f 70 74 69 6f 6e 20 61 72 65 20 61 6c 6c 20 6e  option are all n
3cb0: 6f 6e 2d 66 75 6e 63 74 69 6f 6e 61 6c 0a 20 20  on-functional.  
3cc0: 77 68 65 6e 20 6d 65 6d 6f 72 79 20 75 73 61 67  when memory usag
3cd0: 65 20 74 72 61 63 6b 69 6e 67 20 69 73 20 64 69  e tracking is di
3ce0: 73 61 62 6c 65 64 2e 0a 7d 0a 0a 43 4f 4d 50 49  sabled..}..COMPI
3cf0: 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54  LE_OPTION {SQLIT
3d00: 45 5f 44 45 46 41 55 4c 54 5f 50 43 41 43 48 45  E_DEFAULT_PCACHE
3d10: 5f 49 4e 49 54 53 5a 3d 3c 69 3e 4e 3c 2f 69 3e  _INITSZ=<i>N</i>
3d20: 7d 20 7b 0a 20 20 54 68 69 73 20 6d 61 63 72 6f  } {.  This macro
3d30: 20 64 65 74 65 72 6d 69 6e 65 73 20 74 68 65 20   determines the 
3d40: 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20  number of pages 
3d50: 69 6e 69 74 69 61 6c 6c 79 20 61 6c 6c 6f 63 61  initially alloca
3d60: 74 65 64 20 62 79 20 74 68 65 20 0a 20 20 70 61  ted by the .  pa
3d70: 67 65 20 63 61 63 68 65 20 6d 6f 64 75 6c 65 20  ge cache module 
3d80: 77 68 65 6e 20 5b 53 51 4c 49 54 45 5f 43 4f 4e  when [SQLITE_CON
3d90: 46 49 47 5f 50 41 47 45 43 41 43 48 45 5d 20 63  FIG_PAGECACHE] c
3da0: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 6f 70 74  onfiguration opt
3db0: 69 6f 6e 20 69 73 0a 20 20 6e 6f 74 20 75 73 65  ion is.  not use
3dc0: 20 61 6e 64 20 6d 65 6d 6f 72 79 20 66 6f 72 20   and memory for 
3dd0: 74 68 65 20 70 61 67 65 20 63 61 63 68 65 20 69  the page cache i
3de0: 73 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20  s obtained from 
3df0: 5b 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28  [sqlite3_malloc(
3e00: 29 5d 0a 20 20 69 6e 73 74 65 61 64 2e 20 20 54  )].  instead.  T
3e10: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67  he number of pag
3e20: 65 73 20 73 65 74 20 62 79 20 74 68 69 73 20 6d  es set by this m
3e30: 61 63 72 6f 20 61 72 65 20 61 6c 6c 6f 63 61 74  acro are allocat
3e40: 65 64 20 69 6e 20 61 20 73 69 6e 67 6c 65 0a 20  ed in a single. 
3e50: 20 61 6c 6c 6f 63 61 74 69 6f 6e 2c 20 77 68 69   allocation, whi
3e60: 63 68 20 72 65 64 75 63 65 73 20 74 68 65 20 6c  ch reduces the l
3e70: 6f 61 64 20 6f 6e 20 74 68 65 20 6d 65 6d 6f 72  oad on the memor
3e80: 79 20 61 6c 6c 6f 63 61 74 6f 72 2e 0a 7d 0a 0a  y allocator..}..
3e90: 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b  COMPILE_OPTION {
3ea0: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 50  SQLITE_DEFAULT_P
3eb0: 41 47 45 5f 53 49 5a 45 3d 3c 69 3e 26 6c 74 3b  AGE_SIZE=<i>&lt;
3ec0: 62 79 74 65 73 26 67 74 3b 3c 2f 69 3e 7d 20 7b  bytes&gt;</i>} {
3ed0: 0a 20 20 54 68 69 73 20 6d 61 63 72 6f 20 69 73  .  This macro is
3ee0: 20 75 73 65 64 20 74 6f 20 73 65 74 20 74 68 65   used to set the
3ef0: 20 64 65 66 61 75 6c 74 20 70 61 67 65 2d 73 69   default page-si
3f00: 7a 65 20 75 73 65 64 20 77 68 65 6e 20 61 0a 20  ze used when a. 
3f10: 20 64 61 74 61 62 61 73 65 20 69 73 20 63 72 65   database is cre
3f20: 61 74 65 64 2e 20 54 68 65 20 76 61 6c 75 65 20  ated. The value 
3f30: 61 73 73 69 67 6e 65 64 20 6d 75 73 74 20 62 65  assigned must be
3f40: 20 61 20 70 6f 77 65 72 20 6f 66 20 32 2e 20 54   a power of 2. T
3f50: 68 65 0a 20 20 64 65 66 61 75 6c 74 20 76 61 6c  he.  default val
3f60: 75 65 20 69 73 20 34 30 39 36 2e 20 54 68 65 20  ue is 4096. The 
3f70: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 64 65 66  compile-time def
3f80: 61 75 6c 74 20 6d 61 79 20 62 65 20 6f 76 65 72  ault may be over
3f90: 72 69 64 64 65 6e 20 61 74 20 0a 20 20 72 75 6e  ridden at .  run
3fa0: 74 69 6d 65 20 62 79 20 74 68 65 20 5b 50 52 41  time by the [PRA
3fb0: 47 4d 41 20 70 61 67 65 5f 73 69 7a 65 5d 20 63  GMA page_size] c
3fc0: 6f 6d 6d 61 6e 64 2e 0a 7d 0a 0a 43 4f 4d 50 49  ommand..}..COMPI
3fd0: 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54  LE_OPTION {SQLIT
3fe0: 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52  E_DEFAULT_SYNCHR
3ff0: 4f 4e 4f 55 53 3d 3c 69 3e 26 6c 74 3b 30 2d 33  ONOUS=<i>&lt;0-3
4000: 26 67 74 3b 3c 2f 69 3e 7d 20 7b 0a 20 20 54 68  &gt;</i>} {.  Th
4010: 69 73 20 6d 61 63 72 6f 20 64 65 74 65 72 6d 69  is macro determi
4020: 6e 65 73 20 74 68 65 20 64 65 66 61 75 6c 74 20  nes the default 
4030: 76 61 6c 75 65 20 6f 66 20 74 68 65 0a 20 20 5b  value of the.  [
4040: 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f  PRAGMA synchrono
4050: 75 73 5d 20 73 65 74 74 69 6e 67 2e 20 20 49 66  us] setting.  If
4060: 20 6e 6f 74 20 6f 76 65 72 72 69 64 64 65 6e 20   not overridden 
4070: 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 2c  at compile-time,
4080: 0a 20 20 74 68 65 20 64 65 66 61 75 6c 74 20 73  .  the default s
4090: 65 74 74 69 6e 67 20 69 73 20 32 20 28 46 55 4c  etting is 2 (FUL
40a0: 4c 29 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f  L)..}..COMPILE_O
40b0: 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 44 45  PTION {SQLITE_DE
40c0: 46 41 55 4c 54 5f 57 41 4c 5f 53 59 4e 43 48 52  FAULT_WAL_SYNCHR
40d0: 4f 4e 4f 55 53 3d 3c 69 3e 26 6c 74 3b 30 2d 33  ONOUS=<i>&lt;0-3
40e0: 26 67 74 3b 3c 2f 69 3e 7d 20 7b 0a 20 20 54 68  &gt;</i>} {.  Th
40f0: 69 73 20 6d 61 63 72 6f 20 64 65 74 65 72 6d 69  is macro determi
4100: 6e 65 73 20 74 68 65 20 64 65 66 61 75 6c 74 20  nes the default 
4110: 76 61 6c 75 65 20 6f 66 20 74 68 65 0a 20 20 5b  value of the.  [
4120: 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f  PRAGMA synchrono
4130: 75 73 5d 20 73 65 74 74 69 6e 67 20 66 6f 72 20  us] setting for 
4140: 64 61 74 61 62 61 73 65 20 66 69 6c 65 73 20 74  database files t
4150: 68 61 74 20 6f 70 65 6e 20 69 6e 0a 20 20 5b 57  hat open in.  [W
4160: 41 4c 20 6d 6f 64 65 5d 2e 20 20 49 66 20 6e 6f  AL mode].  If no
4170: 74 20 6f 76 65 72 72 69 64 64 65 6e 20 61 74 20  t overridden at 
4180: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 2c 20 74 68  compile-time, th
4190: 69 73 20 76 61 6c 75 65 20 69 73 20 74 68 65 0a  is value is the.
41a0: 20 20 73 61 6d 65 20 61 73 20 5b 53 51 4c 49 54    same as [SQLIT
41b0: 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52  E_DEFAULT_SYNCHR
41c0: 4f 4e 4f 55 53 5d 2e 0a 20 20 3c 70 3e 0a 20 20  ONOUS]..  <p>.  
41d0: 49 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  If SQLITE_DEFAUL
41e0: 54 5f 57 41 4c 5f 53 59 4e 43 48 52 4f 4e 4f 55  T_WAL_SYNCHRONOU
41f0: 53 20 64 69 66 66 65 72 73 20 66 72 6f 6d 20 53  S differs from S
4200: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53 59  QLITE_DEFAULT_SY
4210: 4e 43 48 52 4f 4e 4f 55 53 2c 0a 20 20 61 6e 64  NCHRONOUS,.  and
4220: 20 69 66 20 74 68 65 20 61 70 70 6c 69 63 61 74   if the applicat
4230: 69 6f 6e 20 68 61 73 20 6e 6f 74 20 6d 6f 64 69  ion has not modi
4240: 66 69 65 64 20 74 68 65 20 73 79 6e 63 68 72 6f  fied the synchro
4250: 6e 6f 75 73 20 73 65 74 74 69 6e 67 20 66 6f 72  nous setting for
4260: 0a 20 20 74 68 65 20 64 61 74 61 62 61 73 65 20  .  the database 
4270: 66 69 6c 65 20 75 73 69 6e 67 20 74 68 65 20 5b  file using the [
4280: 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f  PRAGMA synchrono
4290: 75 73 5d 20 73 74 61 74 65 6d 65 6e 74 2c 20 74  us] statement, t
42a0: 68 65 6e 0a 20 20 74 68 65 20 73 79 6e 63 68 72  hen.  the synchr
42b0: 6f 6e 6f 75 73 20 73 65 74 74 69 6e 67 20 69 73  onous setting is
42c0: 20 63 68 61 6e 67 65 64 20 74 6f 20 76 61 6c 75   changed to valu
42d0: 65 20 64 65 66 69 6e 65 64 20 62 79 0a 20 20 53  e defined by.  S
42e0: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 41  QLITE_DEFAULT_WA
42f0: 4c 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20 77 68  L_SYNCHRONOUS wh
4300: 65 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  en the database 
4310: 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 77 69 74 63  connection switc
4320: 68 65 73 0a 20 20 69 6e 74 6f 20 57 41 4c 20 6d  hes.  into WAL m
4330: 6f 64 65 20 66 6f 72 20 74 68 65 20 66 69 72 73  ode for the firs
4340: 74 20 74 69 6d 65 2e 0a 20 20 49 66 20 74 68 65  t time..  If the
4350: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
4360: 57 41 4c 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20  WAL_SYNCHRONOUS 
4370: 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 6f 76 65  value is not ove
4380: 72 72 69 64 64 65 6e 20 61 74 0a 20 20 63 6f 6d  rridden at.  com
4390: 70 69 6c 65 2d 74 69 6d 65 2c 20 74 68 65 6e 20  pile-time, then 
43a0: 69 74 20 77 69 6c 6c 20 61 6c 77 61 79 73 20 62  it will always b
43b0: 65 20 74 68 65 20 73 61 6d 65 20 61 73 0a 20 20  e the same as.  
43c0: 5b 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f  [SQLITE_DEFAULT_
43d0: 53 59 4e 43 48 52 4f 4e 4f 55 53 5d 20 61 6e 64  SYNCHRONOUS] and
43e0: 20 73 6f 20 6e 6f 20 61 75 74 6f 6d 61 74 69 63   so no automatic
43f0: 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20 73 65 74   synchronous set
4400: 74 69 6e 67 0a 20 20 63 68 61 6e 67 65 73 20 77  ting.  changes w
4410: 69 6c 6c 20 65 76 65 72 20 6f 63 63 75 72 2e 0a  ill ever occur..
4420: 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f  }..COMPILE_OPTIO
4430: 4e 20 7b 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  N {SQLITE_DEFAUL
4440: 54 5f 57 41 4c 5f 41 55 54 4f 43 48 45 43 4b 50  T_WAL_AUTOCHECKP
4450: 4f 49 4e 54 3d 3c 69 3e 26 6c 74 3b 70 61 67 65  OINT=<i>&lt;page
4460: 73 26 67 74 3b 3c 2f 69 3e 7d 20 7b 0a 20 20 54  s&gt;</i>} {.  T
4470: 68 69 73 20 6d 61 63 72 6f 20 73 65 74 73 20 74  his macro sets t
4480: 68 65 20 64 65 66 61 75 6c 74 20 70 61 67 65 20  he default page 
4490: 63 6f 75 6e 74 20 66 6f 72 20 74 68 65 20 5b 57  count for the [W
44a0: 41 4c 5d 0a 20 20 5b 63 68 65 63 6b 70 6f 69 6e  AL].  [checkpoin
44b0: 74 69 6e 67 20 7c 20 61 75 74 6f 6d 61 74 69 63  ting | automatic
44c0: 20 63 68 65 63 6b 70 6f 69 6e 74 69 6e 67 5d 20   checkpointing] 
44d0: 66 65 61 74 75 72 65 2e 20 20 49 66 20 75 6e 73  feature.  If uns
44e0: 70 65 63 69 66 69 65 64 2c 0a 20 20 74 68 65 20  pecified,.  the 
44f0: 64 65 66 61 75 6c 74 20 70 61 67 65 20 63 6f 75  default page cou
4500: 6e 74 20 69 73 20 31 30 30 30 2e 0a 7d 0a 0a 43  nt is 1000..}..C
4510: 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53  OMPILE_OPTION {S
4520: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f  QLITE_DEFAULT_WO
4530: 52 4b 45 52 5f 54 48 52 45 41 44 53 3d 3c 69 3e  RKER_THREADS=<i>
4540: 4e 3c 2f 69 3e 7d 20 7b 0a 20 20 54 68 69 73 20  N</i>} {.  This 
4550: 6d 61 63 72 6f 20 73 65 74 73 20 74 68 65 20 64  macro sets the d
4560: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 66 6f 72  efault value for
4570: 0a 20 20 74 68 65 20 5b 53 51 4c 49 54 45 5f 4c  .  the [SQLITE_L
4580: 49 4d 49 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45  IMIT_WORKER_THRE
4590: 41 44 53 5d 20 70 61 72 61 6d 65 74 65 72 2e 20  ADS] parameter. 
45a0: 20 54 68 65 20 5b 53 51 4c 49 54 45 5f 4c 49 4d   The [SQLITE_LIM
45b0: 49 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  IT_WORKER_THREAD
45c0: 53 5d 0a 20 20 70 61 72 61 6d 65 74 65 72 20 73  S].  parameter s
45d0: 65 74 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20  ets the maximum 
45e0: 6e 75 6d 62 65 72 20 6f 66 20 61 75 78 69 6c 69  number of auxili
45f0: 61 72 79 20 74 68 72 65 61 64 73 20 74 68 61 74  ary threads that
4600: 20 61 20 73 69 6e 67 6c 65 0a 20 20 5b 70 72 65   a single.  [pre
4610: 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 5d  pared statement]
4620: 20 77 69 6c 6c 20 6c 61 75 6e 63 68 20 74 6f 20   will launch to 
4630: 61 73 73 69 73 74 20 69 74 20 77 69 74 68 20 61  assist it with a
4640: 20 71 75 65 72 79 2e 20 20 49 66 20 6e 6f 74 20   query.  If not 
4650: 73 70 65 63 69 66 69 65 64 2c 0a 20 20 74 68 65  specified,.  the
4660: 20 64 65 66 61 75 6c 74 20 6d 61 78 69 6d 75 6d   default maximum
4670: 20 69 73 20 30 2e 0a 20 20 54 68 65 20 76 61 6c   is 0..  The val
4680: 75 65 20 73 65 74 20 68 65 72 65 20 63 61 6e 6e  ue set here cann
4690: 6f 74 20 62 65 20 6d 6f 72 65 20 74 68 61 6e 20  ot be more than 
46a0: 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b  [SQLITE_MAX_WORK
46b0: 45 52 5f 54 48 52 45 41 44 53 5d 2e 0a 7d 0a 0a  ER_THREADS]..}..
46c0: 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b  COMPILE_OPTION {
46d0: 53 51 4c 49 54 45 5f 45 58 54 52 41 5f 44 55 52  SQLITE_EXTRA_DUR
46e0: 41 42 4c 45 7d 20 7b 0a 20 20 54 68 65 20 53 51  ABLE} {.  The SQ
46f0: 4c 49 54 45 5f 45 58 54 52 41 5f 44 55 52 41 42  LITE_EXTRA_DURAB
4700: 4c 45 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  LE compile-time 
4710: 6f 70 74 69 6f 6e 20 74 68 61 74 20 75 73 65 64  option that used
4720: 20 74 6f 20 63 61 75 73 65 20 74 68 65 20 64 65   to cause the de
4730: 66 61 75 6c 74 0a 20 20 5b 50 52 41 47 4d 41 20  fault.  [PRAGMA 
4740: 73 79 6e 63 68 72 6f 6e 6f 75 73 5d 20 73 65 74  synchronous] set
4750: 74 69 6e 67 20 74 6f 20 62 65 20 45 58 54 52 41  ting to be EXTRA
4760: 2c 20 72 61 74 68 65 72 20 74 68 61 6e 20 46 55  , rather than FU
4770: 4c 4c 2e 20 20 54 68 69 73 20 6f 70 74 69 6f 6e  LL.  This option
4780: 0a 20 20 69 73 20 6e 6f 20 6c 6f 6e 67 65 72 20  .  is no longer 
4790: 73 75 70 70 6f 72 74 65 64 2e 20 20 55 73 65 0a  supported.  Use.
47a0: 20 20 5b 53 51 4c 49 54 45 5f 44 45 46 41 55 4c    [SQLITE_DEFAUL
47b0: 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 7c 53 51  T_SYNCHRONOUS|SQ
47c0: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e  LITE_DEFAULT_SYN
47d0: 43 48 52 4f 4e 4f 55 53 3d 33 5d 20 69 6e 73 74  CHRONOUS=3] inst
47e0: 65 61 64 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f  ead..}..COMPILE_
47f0: 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 46  OPTION {SQLITE_F
4800: 54 53 33 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50  TS3_MAX_EXPR_DEP
4810: 54 48 3d 3c 69 3e 4e 3c 2f 69 3e 7d 20 7b 0a 20  TH=<i>N</i>} {. 
4820: 20 54 68 69 73 20 6d 61 63 72 6f 20 73 65 74 73   This macro sets
4830: 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 64 65 70   the maximum dep
4840: 74 68 20 6f 66 20 74 68 65 20 73 65 61 72 63 68  th of the search
4850: 20 74 72 65 65 20 74 68 61 74 20 63 6f 72 72 65   tree that corre
4860: 73 70 6f 6e 64 73 20 74 6f 0a 20 20 74 68 65 20  sponds to.  the 
4870: 72 69 67 68 74 2d 68 61 6e 64 20 73 69 64 65 20  right-hand side 
4880: 6f 66 20 74 68 65 20 4d 41 54 43 48 20 6f 70 65  of the MATCH ope
4890: 72 61 74 6f 72 20 69 6e 20 61 6e 20 5b 46 54 53  rator in an [FTS
48a0: 33 5d 20 6f 72 20 5b 46 54 53 34 5d 20 66 75 6c  3] or [FTS4] ful
48b0: 6c 2d 74 65 78 74 0a 20 20 69 6e 64 65 78 2e 20  l-text.  index. 
48c0: 20 54 68 65 20 66 75 6c 6c 2d 74 65 78 74 20 73   The full-text s
48d0: 65 61 72 63 68 20 75 73 65 73 20 61 20 72 65 63  earch uses a rec
48e0: 75 72 73 69 76 65 20 61 6c 67 6f 72 69 74 68 6d  ursive algorithm
48f0: 2c 20 73 6f 20 74 68 65 20 64 65 70 74 68 20 6f  , so the depth o
4900: 66 0a 20 20 74 68 65 20 74 72 65 65 20 69 73 20  f.  the tree is 
4910: 6c 69 6d 69 74 65 64 20 74 6f 20 70 72 65 76 65  limited to preve
4920: 6e 74 20 75 73 69 6e 67 20 74 6f 6f 20 6d 75 63  nt using too muc
4930: 68 20 73 74 61 63 6b 20 73 70 61 63 65 2e 20 20  h stack space.  
4940: 54 68 65 20 64 65 66 61 75 6c 74 0a 20 20 6c 69  The default.  li
4950: 6d 69 74 20 69 73 20 31 32 2e 20 20 54 68 69 73  mit is 12.  This
4960: 20 6c 69 6d 69 74 20 69 73 20 73 75 66 66 69 63   limit is suffic
4970: 69 65 6e 74 20 66 6f 72 20 75 70 20 74 6f 20 34  ient for up to 4
4980: 30 39 35 20 73 65 61 72 63 68 20 74 65 72 6d 73  095 search terms
4990: 20 6f 6e 20 74 68 65 0a 20 20 72 69 67 68 74 2d   on the.  right-
49a0: 68 61 6e 64 20 73 69 64 65 20 6f 66 20 74 68 65  hand side of the
49b0: 20 4d 41 54 43 48 20 6f 70 65 72 61 74 6f 72 20   MATCH operator 
49c0: 61 6e 64 20 69 74 20 68 6f 6c 64 73 20 73 74 61  and it holds sta
49d0: 63 6b 20 73 70 61 63 65 20 75 73 61 67 65 20 74  ck space usage t
49e0: 6f 20 0a 20 20 6c 65 73 73 20 74 68 61 6e 20 32  o .  less than 2
49f0: 30 30 30 20 62 79 74 65 73 2e 0a 20 20 3c 70 3e  000 bytes..  <p>
4a00: 0a 20 20 46 6f 72 20 6f 72 64 69 6e 61 72 79 20  .  For ordinary 
4a10: 46 54 53 33 2f 46 54 53 34 20 71 75 65 72 69 65  FTS3/FTS4 querie
4a20: 73 2c 20 74 68 65 20 73 65 61 72 63 68 20 74 72  s, the search tr
4a30: 65 65 20 64 65 70 74 68 20 69 73 20 61 70 70 72  ee depth is appr
4a40: 6f 78 69 6d 61 74 65 6c 79 0a 20 20 74 68 65 20  oximately.  the 
4a50: 62 61 73 65 2d 32 20 6c 6f 67 61 72 69 74 68 6d  base-2 logarithm
4a60: 20 6f 66 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   of the number o
4a70: 66 20 74 65 72 6d 73 20 69 6e 20 74 68 65 20 72  f terms in the r
4a80: 69 67 68 74 2d 68 61 6e 64 20 73 69 64 65 20 6f  ight-hand side o
4a90: 66 20 74 68 65 0a 20 20 4d 41 54 43 48 20 6f 70  f the.  MATCH op
4aa0: 65 72 61 74 6f 72 2e 20 20 48 6f 77 65 76 65 72  erator.  However
4ab0: 2c 20 66 6f 72 20 5b 70 68 72 61 73 65 20 71 75  , for [phrase qu
4ac0: 65 72 69 65 73 5d 20 61 6e 64 20 5b 4e 45 41 52  eries] and [NEAR
4ad0: 20 71 75 65 72 69 65 73 5d 20 74 68 65 0a 20 20   queries] the.  
4ae0: 73 65 61 72 63 68 20 74 72 65 65 20 64 65 70 74  search tree dept
4af0: 68 20 69 73 20 6c 69 6e 65 61 72 20 69 6e 20 74  h is linear in t
4b00: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 69 67  he number of rig
4b10: 68 74 2d 68 61 6e 64 20 73 69 64 65 20 74 65 72  ht-hand side ter
4b20: 6d 73 2e 0a 20 20 53 6f 20 74 68 65 20 64 65 66  ms..  So the def
4b30: 61 75 6c 74 20 64 65 70 74 68 20 6c 69 6d 69 74  ault depth limit
4b40: 20 6f 66 20 31 32 20 69 73 20 73 75 66 66 69 63   of 12 is suffic
4b50: 69 65 6e 74 20 66 6f 72 20 75 70 20 74 6f 20 34  ient for up to 4
4b60: 30 39 35 20 6f 72 64 69 6e 61 72 79 0a 20 20 74  095 ordinary.  t
4b70: 65 72 6d 73 20 6f 6e 20 61 20 4d 41 54 43 48 2c  erms on a MATCH,
4b80: 20 69 74 20 69 73 20 6f 6e 6c 79 20 73 75 66 66   it is only suff
4b90: 69 63 69 65 6e 74 20 66 6f 72 20 31 31 20 6f 72  icient for 11 or
4ba0: 20 31 32 20 70 68 72 61 73 65 20 6f 72 20 4e 45   12 phrase or NE
4bb0: 41 52 0a 20 20 74 65 72 6d 73 2e 20 20 45 76 65  AR.  terms.  Eve
4bc0: 6e 20 73 6f 2c 20 74 68 65 20 64 65 66 61 75 6c  n so, the defaul
4bd0: 74 20 69 73 20 6d 6f 72 65 20 74 68 61 6e 20 65  t is more than e
4be0: 6e 6f 75 67 68 20 66 6f 72 20 6d 6f 73 74 20 61  nough for most a
4bf0: 70 70 6c 69 63 61 74 69 6f 6e 2e 0a 7d 0a 0a 43  pplication..}..C
4c00: 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53  OMPILE_OPTION {S
4c10: 51 4c 49 54 45 5f 4c 49 4b 45 5f 44 4f 45 53 4e  QLITE_LIKE_DOESN
4c20: 54 5f 4d 41 54 43 48 5f 42 4c 4f 42 53 7d 20 7b  T_MATCH_BLOBS} {
4c30: 0a 20 20 54 68 69 73 20 63 6f 6d 70 69 6c 65 2d  .  This compile-
4c40: 74 69 6d 65 20 6f 70 74 69 6f 6e 20 63 61 75 73  time option caus
4c50: 65 73 20 74 68 65 20 5b 4c 49 4b 45 5d 20 6f 70  es the [LIKE] op
4c60: 65 72 61 74 6f 72 20 74 6f 20 61 6c 77 61 79 73  erator to always
4c70: 20 72 65 74 75 72 6e 20 0a 20 20 46 61 6c 73 65   return .  False
4c80: 20 69 66 20 65 69 74 68 65 72 20 6f 70 65 72 61   if either opera
4c90: 6e 64 20 69 73 20 61 20 42 4c 4f 42 2e 20 20 54  nd is a BLOB.  T
4ca0: 68 65 20 64 65 66 61 75 6c 74 20 62 65 68 61 76  he default behav
4cb0: 69 6f 72 20 6f 66 20 5b 4c 49 4b 45 5d 20 0a 20  ior of [LIKE] . 
4cc0: 20 69 73 20 74 68 61 74 20 42 4c 4f 42 20 6f 70   is that BLOB op
4cd0: 65 72 61 6e 64 73 20 61 72 65 20 63 61 73 74 20  erands are cast 
4ce0: 74 6f 20 54 45 58 54 20 62 65 66 6f 72 65 20 74  to TEXT before t
4cf0: 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73  he comparison is
4d00: 20 64 6f 6e 65 2e 0a 20 20 3c 70 3e 0a 20 20 54   done..  <p>.  T
4d10: 68 69 73 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  his compile-time
4d20: 20 6f 70 74 69 6f 6e 20 6d 61 6b 65 73 20 53 51   option makes SQ
4d30: 4c 69 74 65 20 72 75 6e 20 6d 6f 72 65 20 65 66  Lite run more ef
4d40: 66 69 63 69 65 6e 74 6c 79 20 77 68 65 6e 20 70  ficiently when p
4d50: 72 6f 63 65 73 73 69 6e 67 0a 20 20 71 75 65 72  rocessing.  quer
4d60: 69 65 73 20 74 68 61 74 20 75 73 65 20 74 68 65  ies that use the
4d70: 20 5b 4c 49 4b 45 5d 20 6f 70 65 72 61 74 6f 72   [LIKE] operator
4d80: 2c 20 61 74 20 74 68 65 20 65 78 70 65 6e 73 65  , at the expense
4d90: 20 6f 66 20 62 72 65 61 6b 69 6e 67 20 62 61 63   of breaking bac
4da0: 6b 77 61 72 64 73 0a 20 20 63 6f 6d 70 61 74 69  kwards.  compati
4db0: 62 69 6c 69 74 79 2e 20 20 48 6f 77 65 76 65 72  bility.  However
4dc0: 2c 20 74 68 65 20 62 61 63 6b 77 61 72 64 73 20  , the backwards 
4dd0: 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 62 72  compatibility br
4de0: 65 61 6b 20 6d 61 79 20 62 65 20 6f 6e 6c 79 0a  eak may be only.
4df0: 20 20 61 20 74 65 63 68 6e 69 63 61 6c 69 74 79    a technicality
4e00: 2e 20 20 54 68 65 72 65 20 77 61 73 20 61 20 6c  .  There was a l
4e10: 6f 6e 67 2d 73 74 61 6e 64 69 6e 67 20 62 75 67  ong-standing bug
4e20: 20 69 6e 20 74 68 65 20 5b 4c 49 4b 45 5d 20 70   in the [LIKE] p
4e30: 72 6f 63 65 73 73 69 6e 67 20 6c 6f 67 69 63 0a  rocessing logic.
4e40: 20 20 28 73 65 65 20 5b 68 74 74 70 73 3a 2f 2f    (see [https://
4e50: 77 77 77 2e 73 71 6c 69 74 65 2e 6f 72 67 2f 73  www.sqlite.org/s
4e60: 72 63 2f 69 6e 66 6f 2f 30 35 66 34 33 62 65 38  rc/info/05f43be8
4e70: 66 64 64 61 39 66 5d 29 20 74 68 61 74 20 63 61  fdda9f]) that ca
4e80: 75 73 65 64 20 69 74 20 74 6f 0a 20 20 6d 69 73  used it to.  mis
4e90: 62 65 68 61 76 69 6f 72 20 66 6f 72 20 42 4c 4f  behavior for BLO
4ea0: 42 20 6f 70 65 72 61 6e 64 73 20 61 6e 64 20 6e  B operands and n
4eb0: 6f 62 6f 64 79 20 6f 62 73 65 72 76 65 64 20 74  obody observed t
4ec0: 68 61 74 20 62 75 67 20 69 6e 20 6e 65 61 72 6c  hat bug in nearl
4ed0: 79 0a 20 20 31 30 20 79 65 61 72 73 20 6f 66 20  y.  10 years of 
4ee0: 61 63 74 69 76 65 20 75 73 65 2e 20 20 53 6f 20  active use.  So 
4ef0: 66 6f 72 20 6d 6f 72 65 20 75 73 65 72 73 2c 20  for more users, 
4f00: 69 74 20 69 73 20 70 72 6f 62 61 62 6c 79 20 73  it is probably s
4f10: 61 66 65 20 74 6f 0a 20 20 65 6e 61 62 6c 65 20  afe to.  enable 
4f20: 74 68 69 73 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  this compile-tim
4f30: 65 20 6f 70 74 69 6f 6e 20 61 6e 64 20 74 68 65  e option and the
4f40: 72 65 62 79 20 73 61 76 65 20 61 20 6c 69 74 74  reby save a litt
4f50: 6c 65 20 43 50 55 20 74 69 6d 65 0a 20 20 6f 6e  le CPU time.  on
4f60: 20 4c 49 4b 45 20 71 75 65 72 69 65 73 2e 0a 20   LIKE queries.. 
4f70: 20 3c 70 3e 0a 20 20 54 68 69 73 20 63 6f 6d 70   <p>.  This comp
4f80: 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20  ile-time option 
4f90: 61 66 66 65 63 74 73 20 74 68 65 20 53 51 4c 20  affects the SQL 
4fa0: 5b 4c 49 4b 45 5d 20 6f 70 65 72 61 74 6f 72 20  [LIKE] operator 
4fb0: 6f 6e 6c 79 20 61 6e 64 20 68 61 73 0a 20 20 6e  only and has.  n
4fc0: 6f 20 69 6d 70 61 63 74 20 6f 6e 20 74 68 65 20  o impact on the 
4fd0: 5b 73 71 6c 69 74 65 33 5f 73 74 72 6c 69 6b 65  [sqlite3_strlike
4fe0: 28 29 5d 20 43 2d 6c 61 6e 67 75 61 67 65 20 69  ()] C-language i
4ff0: 6e 74 65 72 66 61 63 65 2e 0a 7d 0a 0a 43 4f 4d  nterface..}..COM
5000: 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c  PILE_OPTION {SQL
5010: 49 54 45 5f 4d 41 58 5f 4d 45 4d 4f 52 59 3d 3c  ITE_MAX_MEMORY=<
5020: 69 3e 4e 3c 2f 69 3e 7d 20 7b 0a 20 20 54 68 69  i>N</i>} {.  Thi
5030: 73 20 6f 70 74 69 6f 6e 20 6c 69 6d 69 74 73 20  s option limits 
5040: 74 68 65 20 74 6f 74 61 6c 20 61 6d 6f 75 6e 74  the total amount
5050: 20 6f 66 20 6d 65 6d 6f 72 79 20 74 68 61 74 20   of memory that 
5060: 53 51 4c 69 74 65 20 77 69 6c 6c 20 72 65 71 75  SQLite will requ
5070: 65 73 74 0a 20 20 66 72 6f 6d 20 6d 61 6c 6c 6f  est.  from mallo
5080: 63 28 29 20 74 6f 20 3c 69 3e 4e 3c 2f 69 3e 20  c() to <i>N</i> 
5090: 62 79 74 65 73 2e 20 20 41 6e 79 20 61 74 74 65  bytes.  Any atte
50a0: 6d 70 74 20 62 79 20 53 51 4c 69 74 65 20 74 6f  mpt by SQLite to
50b0: 20 61 6c 6c 6f 63 61 74 65 0a 20 20 6e 65 77 20   allocate.  new 
50c0: 6d 65 6d 6f 72 79 20 74 68 61 74 20 77 6f 75 6c  memory that woul
50d0: 64 20 63 61 75 73 65 20 74 68 65 20 73 75 6d 20  d cause the sum 
50e0: 6f 66 20 61 6c 6c 20 61 6c 6c 6f 63 61 74 69 6f  of all allocatio
50f0: 6e 73 20 68 65 6c 64 20 62 79 20 53 51 4c 69 74  ns held by SQLit
5100: 65 20 74 6f 20 65 78 63 65 65 64 0a 20 20 3c 69  e to exceed.  <i
5110: 3e 4e 3c 2f 69 3e 20 62 79 74 65 73 20 77 69 6c  >N</i> bytes wil
5120: 6c 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 20 6f  l result in an o
5130: 75 74 2d 6f 66 2d 6d 65 6d 6f 72 79 20 65 72 72  ut-of-memory err
5140: 6f 72 2e 0a 20 20 54 68 69 73 20 69 73 20 61 20  or..  This is a 
5150: 68 61 72 64 20 75 70 70 65 72 20 6c 69 6d 69 74  hard upper limit
5160: 2e 20 20 53 65 65 20 61 6c 73 6f 20 74 68 65 20  .  See also the 
5170: 5b 73 71 6c 69 74 65 33 5f 73 6f 66 74 5f 68 65  [sqlite3_soft_he
5180: 61 70 5f 6c 69 6d 69 74 28 29 5d 0a 20 20 69 6e  ap_limit()].  in
5190: 74 65 72 66 61 63 65 2e 0a 20 20 3c 70 3e 0a 20  terface..  <p>. 
51a0: 20 54 68 69 73 20 6c 69 6d 69 74 20 69 73 20 6f   This limit is o
51b0: 6e 6c 79 20 66 75 6e 63 74 69 6f 6e 61 6c 20 69  nly functional i
51c0: 66 20 6d 65 6d 6f 72 79 20 75 73 61 67 65 20 73  f memory usage s
51d0: 74 61 74 69 73 74 69 63 73 20 61 72 65 20 61 76  tatistics are av
51e0: 61 69 6c 61 62 6c 65 20 76 69 61 0a 20 20 74 68  ailable via.  th
51f0: 65 20 5b 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72  e [sqlite3_memor
5200: 79 5f 75 73 65 64 28 29 5d 20 61 6e 64 20 5b 73  y_used()] and [s
5210: 71 6c 69 74 65 33 5f 73 74 61 74 75 73 36 34 5d  qlite3_status64]
5220: 28 5b 53 51 4c 49 54 45 5f 53 54 41 54 55 53 5f  ([SQLITE_STATUS_
5230: 4d 45 4d 4f 52 59 5f 55 53 45 44 5d 29 0a 20 20  MEMORY_USED]).  
5240: 69 6e 74 65 72 66 61 63 65 73 2e 20 20 57 69 74  interfaces.  Wit
5250: 68 6f 75 74 20 74 68 61 74 20 6d 65 6d 6f 72 79  hout that memory
5260: 20 75 73 61 67 65 20 69 6e 66 6f 72 6d 61 74 69   usage informati
5270: 6f 6e 2c 20 53 51 4c 69 74 65 20 68 61 73 20 6e  on, SQLite has n
5280: 6f 20 77 61 79 20 6f 66 0a 20 20 6b 6e 6f 77 69  o way of.  knowi
5290: 6e 67 20 77 68 65 6e 20 69 74 20 69 73 20 61 62  ng when it is ab
52a0: 6f 75 74 20 74 6f 20 67 6f 20 6f 76 65 72 20 74  out to go over t
52b0: 68 65 20 6c 69 6d 69 74 2c 20 61 6e 64 20 74 68  he limit, and th
52c0: 75 73 20 69 73 20 75 6e 61 62 6c 65 20 74 6f 20  us is unable to 
52d0: 70 72 65 76 65 6e 74 0a 20 20 74 68 65 20 65 78  prevent.  the ex
52e0: 63 65 73 73 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  cess memory allo
52f0: 63 61 74 69 6f 6e 2e 20 20 4d 65 6d 6f 72 79 20  cation.  Memory 
5300: 75 73 61 67 65 20 74 72 61 63 6b 69 6e 67 20 69  usage tracking i
5310: 73 20 74 75 72 6e 65 64 20 6f 6e 20 62 79 20 64  s turned on by d
5320: 65 66 61 75 6c 74 2c 0a 20 20 62 75 74 20 63 61  efault,.  but ca
5330: 6e 20 62 65 20 64 69 73 61 62 6c 65 64 20 61 74  n be disabled at
5340: 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 75 73   compile-time us
5350: 69 6e 67 20 74 68 65 20 5b 53 51 4c 49 54 45 5f  ing the [SQLITE_
5360: 44 45 46 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55  DEFAULT_MEMSTATU
5370: 53 5d 20 6f 70 74 69 6f 6e 2c 0a 20 20 6f 72 20  S] option,.  or 
5380: 61 74 20 73 74 61 72 74 2d 74 69 6d 65 20 75 73  at start-time us
5390: 69 6e 67 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6e  ing [sqlite3_con
53a0: 66 69 67 5d 28 5b 53 51 4c 49 54 45 5f 43 4f 4e  fig]([SQLITE_CON
53b0: 46 49 47 5f 4d 45 4d 53 54 41 54 55 53 5d 29 2e  FIG_MEMSTATUS]).
53c0: 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49  .}..COMPILE_OPTI
53d0: 4f 4e 20 7b 53 51 4c 49 54 45 5f 4d 41 58 5f 4d  ON {SQLITE_MAX_M
53e0: 4d 41 50 5f 53 49 5a 45 3d 3c 69 3e 4e 3c 2f 69  MAP_SIZE=<i>N</i
53f0: 3e 7d 20 7b 0a 20 20 54 68 69 73 20 6d 61 63 72  >} {.  This macr
5400: 6f 20 73 65 74 73 20 61 20 68 61 72 64 20 75 70  o sets a hard up
5410: 70 65 72 20 62 6f 75 6e 64 20 6f 6e 20 74 68 65  per bound on the
5420: 20 61 6d 6f 75 6e 74 20 6f 66 20 61 64 64 72 65   amount of addre
5430: 73 73 20 73 70 61 63 65 20 74 68 61 74 0a 20 20  ss space that.  
5440: 63 61 6e 20 62 65 20 75 73 65 64 20 62 79 20 61  can be used by a
5450: 6e 79 20 73 69 6e 67 6c 65 20 64 61 74 61 62 61  ny single databa
5460: 73 65 20 66 6f 72 20 6d 65 6d 6f 72 79 2d 6d 61  se for memory-ma
5470: 70 70 65 64 20 49 2f 4f 2e 0a 20 20 53 65 74 74  pped I/O..  Sett
5480: 69 6e 67 20 74 68 69 73 20 76 61 6c 75 65 20 74  ing this value t
5490: 6f 20 30 20 63 6f 6d 70 6c 65 74 65 6c 79 20 64  o 0 completely d
54a0: 69 73 61 62 6c 65 73 20 6d 65 6d 6f 72 79 2d 6d  isables memory-m
54b0: 61 70 70 65 64 20 49 2f 4f 20 61 6e 64 0a 20 20  apped I/O and.  
54c0: 63 61 75 73 65 73 20 6c 6f 67 69 63 20 61 73 73  causes logic ass
54d0: 6f 63 69 61 74 65 64 20 77 69 74 68 20 6d 65 6d  ociated with mem
54e0: 6f 72 79 2d 6d 61 70 70 65 64 20 49 2f 4f 20 74  ory-mapped I/O t
54f0: 6f 20 62 65 20 6f 6d 69 74 74 65 64 20 66 72 6f  o be omitted fro
5500: 6d 20 74 68 65 0a 20 20 62 75 69 6c 64 2e 20 20  m the.  build.  
5510: 54 68 69 73 20 6f 70 74 69 6f 6e 20 64 6f 65 73  This option does
5520: 20 63 68 61 6e 67 65 20 74 68 65 20 64 65 66 61   change the defa
5530: 75 6c 74 20 6d 65 6d 6f 72 79 2d 6d 61 70 70 65  ult memory-mappe
5540: 64 20 49 2f 4f 20 61 64 64 72 65 73 73 0a 20 20  d I/O address.  
5550: 73 70 61 63 65 20 73 69 7a 65 20 28 73 65 74 20  space size (set 
5560: 62 79 20 5b 53 51 4c 49 54 45 5f 44 45 46 41 55  by [SQLITE_DEFAU
5570: 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 5d 20 6f 72  LT_MMAP_SIZE] or
5580: 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69  .  sqlite3_confi
5590: 67 28 5b 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47  g([SQLITE_CONFIG
55a0: 5f 4d 4d 41 50 5f 53 49 5a 45 5d 29 20 6f 72 20  _MMAP_SIZE]) or 
55b0: 74 68 65 0a 20 20 72 75 6e 2d 74 69 6d 65 20 6d  the.  run-time m
55c0: 65 6d 6f 72 79 2d 6d 61 70 70 65 64 20 49 2f 4f  emory-mapped I/O
55d0: 20 61 64 64 72 65 73 73 20 73 70 61 63 65 20 73   address space s
55e0: 69 7a 65 20 28 73 65 74 20 62 79 0a 20 20 73 71  ize (set by.  sq
55f0: 6c 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72  lite3_file_contr
5600: 6f 6c 28 5b 53 51 4c 49 54 45 5f 46 43 4e 54 4c  ol([SQLITE_FCNTL
5610: 5f 4d 4d 41 50 5f 53 49 5a 45 5d 29 20 6f 72 0a  _MMAP_SIZE]) or.
5620: 20 20 5b 50 52 41 47 4d 41 20 6d 6d 61 70 5f 73    [PRAGMA mmap_s
5630: 69 7a 65 5d 29 20 61 73 20 6c 6f 6e 67 20 61 73  ize]) as long as
5640: 20 74 68 6f 73 65 20 6f 74 68 65 72 20 73 65 74   those other set
5650: 74 69 6e 67 73 20 61 72 65 20 6c 65 73 73 20 74  tings are less t
5660: 68 61 6e 20 74 68 65 0a 20 20 6d 61 78 69 6d 75  han the.  maximu
5670: 6d 20 76 61 6c 75 65 20 64 65 66 69 6e 65 64 20  m value defined 
5680: 68 65 72 65 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45  here..}..COMPILE
5690: 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f  _OPTION {SQLITE_
56a0: 4d 41 58 5f 53 43 48 45 4d 41 5f 52 45 54 52 59  MAX_SCHEMA_RETRY
56b0: 3d 3c 69 3e 4e 3c 2f 69 3e 7d 20 7b 0a 20 20 57  =<i>N</i>} {.  W
56c0: 68 65 6e 65 76 65 72 20 74 68 65 20 64 61 74 61  henever the data
56d0: 62 61 73 65 20 73 63 68 65 6d 61 20 63 68 61 6e  base schema chan
56e0: 67 65 73 2c 20 70 72 65 70 61 72 65 64 20 73 74  ges, prepared st
56f0: 61 74 65 6d 65 6e 74 73 20 61 72 65 20 61 75 74  atements are aut
5700: 6f 6d 61 74 69 63 61 6c 6c 79 0a 20 20 72 65 70  omatically.  rep
5710: 72 65 70 61 72 65 64 20 74 6f 20 61 63 63 6f 6d  repared to accom
5720: 6d 6f 64 61 74 65 20 74 68 65 20 6e 65 77 20 73  modate the new s
5730: 63 68 65 6d 61 2e 20 20 54 68 65 72 65 20 69 73  chema.  There is
5740: 20 61 20 72 61 63 65 20 63 6f 6e 64 69 74 69 6f   a race conditio
5750: 6e 20 68 65 72 65 0a 20 20 69 6e 20 74 68 61 74  n here.  in that
5760: 20 69 66 20 6f 6e 65 20 74 68 72 65 61 64 20 69   if one thread i
5770: 73 20 63 6f 6e 73 74 61 6e 74 6c 79 20 63 68 61  s constantly cha
5780: 6e 67 69 6e 67 20 74 68 65 20 73 63 68 65 6d 61  nging the schema
5790: 2c 20 61 6e 6f 74 68 65 72 20 74 68 72 65 61 64  , another thread
57a0: 0a 20 20 6d 69 67 68 74 20 73 70 69 6e 20 6f 6e  .  might spin on
57b0: 20 72 65 70 61 72 73 65 73 20 61 6e 64 20 72 65   reparses and re
57c0: 70 72 65 70 61 72 61 74 69 6f 6e 73 20 6f 66 20  preparations of 
57d0: 61 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  a prepared state
57e0: 6d 65 6e 74 20 61 6e 64 0a 20 20 6e 65 76 65 72  ment and.  never
57f0: 20 67 65 74 20 61 6e 79 20 72 65 61 6c 20 77 6f   get any real wo
5800: 72 6b 20 64 6f 6e 65 2e 20 20 54 68 69 73 20 70  rk done.  This p
5810: 61 72 61 6d 65 74 65 72 20 70 72 65 76 65 6e 74  arameter prevent
5820: 73 20 61 6e 20 69 6e 66 69 6e 69 74 65 20 6c 6f  s an infinite lo
5830: 6f 70 0a 20 20 62 79 20 66 6f 72 63 69 6e 67 20  op.  by forcing 
5840: 74 68 65 20 73 70 69 6e 6e 69 6e 67 20 74 68 72  the spinning thr
5850: 65 61 64 20 74 6f 20 67 69 76 65 20 75 70 20 61  ead to give up a
5860: 66 74 65 72 20 61 20 66 69 78 65 64 20 6e 75 6d  fter a fixed num
5870: 62 65 72 20 6f 66 20 61 74 74 65 6d 70 74 73 0a  ber of attempts.
5880: 20 20 61 74 20 72 65 63 6f 6d 70 69 6c 69 6e 67    at recompiling
5890: 20 74 68 65 20 70 72 65 70 61 72 65 64 20 73 74   the prepared st
58a0: 61 74 65 6d 65 6e 74 2e 20 20 54 68 65 20 64 65  atement.  The de
58b0: 66 61 75 6c 74 20 73 65 74 74 69 6e 67 20 69 73  fault setting is
58c0: 20 35 30 20 77 68 69 63 68 20 69 73 0a 20 20 6d   50 which is.  m
58d0: 6f 72 65 20 74 68 61 6e 20 61 64 65 71 75 61 74  ore than adequat
58e0: 65 20 66 6f 72 20 6d 6f 73 74 20 61 70 70 6c 69  e for most appli
58f0: 63 61 74 69 6f 6e 73 2e 0a 7d 0a 0a 43 4f 4d 50  cations..}..COMP
5900: 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49  ILE_OPTION {SQLI
5910: 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48  TE_MAX_WORKER_TH
5920: 52 45 41 44 53 3d 3c 69 3e 4e 3c 2f 69 3e 7d 20  READS=<i>N</i>} 
5930: 7b 0a 20 20 53 65 74 20 61 6e 20 75 70 70 65 72  {.  Set an upper
5940: 20 62 6f 75 6e 64 20 6f 6e 20 74 68 65 20 5b 73   bound on the [s
5950: 71 6c 69 74 65 33 5f 6c 69 6d 69 74 5d 28 64 62  qlite3_limit](db
5960: 2c 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 57  ,[SQLITE_LIMIT_W
5970: 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 5d 2c 4e  ORKER_THREADS],N
5980: 29 0a 20 20 73 65 74 74 69 6e 67 20 74 68 61 74  ).  setting that
5990: 20 64 65 74 65 72 6d 69 6e 65 73 20 74 68 65 20   determines the 
59a0: 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f  maximum number o
59b0: 66 20 61 75 78 69 6c 69 61 72 79 20 74 68 72 65  f auxiliary thre
59c0: 61 64 73 20 74 68 61 74 20 61 20 73 69 6e 67 6c  ads that a singl
59d0: 65 0a 20 20 5b 70 72 65 70 61 72 65 64 20 73 74  e.  [prepared st
59e0: 61 74 65 6d 65 6e 74 5d 20 77 69 6c 6c 20 75 73  atement] will us
59f0: 65 20 74 6f 20 61 69 64 20 77 69 74 68 20 43 50  e to aid with CP
5a00: 55 2d 69 6e 74 65 6e 73 69 76 65 20 63 6f 6d 70  U-intensive comp
5a10: 75 74 61 74 69 6f 6e 73 0a 20 20 28 6d 6f 73 74  utations.  (most
5a20: 6c 79 20 73 6f 72 74 69 6e 67 29 2e 20 20 53 65  ly sorting).  Se
5a30: 65 20 61 6c 73 6f 20 74 68 65 20 5b 53 51 4c 49  e also the [SQLI
5a40: 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45  TE_DEFAULT_WORKE
5a50: 52 5f 54 48 52 45 41 44 53 5d 20 6f 70 74 69 6f  R_THREADS] optio
5a60: 6e 73 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f  ns..}..COMPILE_O
5a70: 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 4d 49  PTION {SQLITE_MI
5a80: 4e 49 4d 55 4d 5f 46 49 4c 45 5f 44 45 53 43 52  NIMUM_FILE_DESCR
5a90: 49 50 54 4f 52 3d 3c 69 3e 4e 3c 2f 69 3e 7d 20  IPTOR=<i>N</i>} 
5aa0: 7b 0a 20 20 54 68 65 20 75 6e 69 78 20 5b 56 46  {.  The unix [VF
5ab0: 53 5d 20 77 69 6c 6c 20 6e 65 76 65 72 20 75 73  S] will never us
5ac0: 65 20 61 20 66 69 6c 65 20 64 65 73 63 72 69 70  e a file descrip
5ad0: 74 6f 72 20 6c 65 73 73 20 74 68 61 6e 20 3c 69  tor less than <i
5ae0: 3e 4e 3c 2f 69 3e 2e 20 20 54 68 65 0a 20 20 64  >N</i>.  The.  d
5af0: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20  efault value of 
5b00: 3c 69 3e 4e 3c 2f 69 3e 20 69 73 20 33 2e 0a 20  <i>N</i> is 3.. 
5b10: 20 3c 70 3e 0a 20 20 41 76 6f 69 64 69 6e 67 20   <p>.  Avoiding 
5b20: 74 68 65 20 75 73 65 20 6f 66 20 6c 6f 77 2d 6e  the use of low-n
5b30: 75 6d 62 65 72 65 64 20 66 69 6c 65 20 64 65 73  umbered file des
5b40: 63 72 69 70 74 6f 72 73 20 69 73 20 61 20 64 65  criptors is a de
5b50: 66 65 6e 73 65 20 61 67 61 69 6e 73 74 0a 20 20  fense against.  
5b60: 61 63 63 69 64 65 6e 74 61 6c 20 64 61 74 61 62  accidental datab
5b70: 61 73 65 20 63 6f 72 72 75 70 74 69 6f 6e 2e 20  ase corruption. 
5b80: 20 49 66 20 61 20 64 61 74 61 62 61 73 65 20 66   If a database f
5b90: 69 6c 65 20 77 61 73 20 6f 70 65 6e 65 64 20 75  ile was opened u
5ba0: 73 69 6e 67 0a 20 20 66 69 6c 65 20 64 65 73 63  sing.  file desc
5bb0: 72 69 70 74 6f 72 20 32 2c 20 66 6f 72 20 65 78  riptor 2, for ex
5bc0: 61 6d 70 6c 65 2c 20 61 6e 64 20 74 68 65 6e 20  ample, and then 
5bd0: 61 6e 20 61 73 73 65 72 74 28 29 20 66 61 69 6c  an assert() fail
5be0: 65 64 20 61 6e 64 20 69 6e 76 6f 6b 65 64 0a 20  ed and invoked. 
5bf0: 20 77 72 69 74 65 28 32 2c 2e 2e 2e 29 2c 20 74   write(2,...), t
5c00: 68 61 74 20 77 6f 75 6c 64 20 6c 69 6b 65 6c 79  hat would likely
5c10: 20 63 61 75 73 65 20 64 61 74 61 62 61 73 65 20   cause database 
5c20: 63 6f 72 72 75 70 74 69 6f 6e 20 62 79 20 6f 76  corruption by ov
5c30: 65 72 77 72 69 74 69 6e 67 0a 20 20 70 61 72 74  erwriting.  part
5c40: 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
5c50: 20 66 69 6c 65 20 77 69 74 68 20 74 68 65 20 61   file with the a
5c60: 73 73 65 72 74 69 6f 6e 20 65 72 72 6f 72 20 6d  ssertion error m
5c70: 65 73 73 61 67 65 2e 20 20 55 73 69 6e 67 20 6f  essage.  Using o
5c80: 6e 6c 79 0a 20 20 68 69 67 68 65 72 2d 76 61 6c  nly.  higher-val
5c90: 75 65 64 20 66 69 6c 65 20 64 65 73 63 72 69 70  ued file descrip
5ca0: 74 6f 72 73 20 61 76 6f 69 64 73 20 74 68 69 73  tors avoids this
5cb0: 20 70 6f 74 65 6e 74 69 61 6c 20 70 72 6f 62 6c   potential probl
5cc0: 65 6d 2e 20 20 54 68 65 20 0a 20 20 70 72 6f 74  em.  The .  prot
5cd0: 65 63 74 69 6f 6e 20 61 67 61 69 6e 73 74 0a 20  ection against. 
5ce0: 20 75 73 69 6e 67 20 6c 6f 77 2d 6e 75 6d 62 65   using low-numbe
5cf0: 72 65 64 20 66 69 6c 65 20 64 65 73 63 72 69 70  red file descrip
5d00: 74 6f 72 73 20 63 61 6e 20 62 65 20 64 69 73 61  tors can be disa
5d10: 62 6c 65 64 20 62 79 20 73 65 74 74 69 6e 67 20  bled by setting 
5d20: 74 68 69 73 0a 20 20 63 6f 6d 70 69 6c 65 2d 74  this.  compile-t
5d30: 69 6d 65 20 6f 70 74 69 6f 6e 20 74 6f 20 30 2e  ime option to 0.
5d40: 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49  .}..COMPILE_OPTI
5d50: 4f 4e 20 7b 53 51 4c 49 54 45 5f 50 4f 57 45 52  ON {SQLITE_POWER
5d60: 53 41 46 45 5f 4f 56 45 52 57 52 49 54 45 3d 3c  SAFE_OVERWRITE=<
5d70: 69 3e 26 6c 74 3b 30 20 6f 72 20 31 26 67 74 3b  i>&lt;0 or 1&gt;
5d80: 3c 2f 69 3e 7d 20 7b 0a 20 20 54 68 69 73 20 6f  </i>} {.  This o
5d90: 70 74 69 6f 6e 20 63 68 61 6e 67 65 73 20 74 68  ption changes th
5da0: 65 20 64 65 66 61 75 6c 74 20 61 73 73 75 6d 70  e default assump
5db0: 74 69 6f 6e 20 61 62 6f 75 74 20 5b 70 6f 77 65  tion about [powe
5dc0: 72 73 61 66 65 20 6f 76 65 72 77 72 69 74 65 5d  rsafe overwrite]
5dd0: 0a 20 20 66 6f 72 20 74 68 65 20 75 6e 64 65 72  .  for the under
5de0: 6c 79 69 6e 67 20 66 69 6c 65 73 79 73 74 65 6d  lying filesystem
5df0: 73 20 66 6f 72 20 74 68 65 20 75 6e 69 78 20 61  s for the unix a
5e00: 6e 64 20 77 69 6e 64 6f 77 73 20 5b 56 46 53 65  nd windows [VFSe
5e10: 73 5d 2e 0a 20 20 53 65 74 74 69 6e 67 20 53 51  s]..  Setting SQ
5e20: 4c 49 54 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f  LITE_POWERSAFE_O
5e30: 56 45 52 57 52 49 54 45 20 74 6f 20 31 20 63 61  VERWRITE to 1 ca
5e40: 75 73 65 73 20 53 51 4c 69 74 65 20 74 6f 20 61  uses SQLite to a
5e50: 73 73 75 6d 65 20 74 68 61 74 0a 20 20 61 70 70  ssume that.  app
5e60: 6c 69 63 61 74 69 6f 6e 2d 6c 65 76 65 6c 20 77  lication-level w
5e70: 72 69 74 65 73 20 63 61 6e 6e 6f 74 20 63 68 61  rites cannot cha
5e80: 6e 67 65 73 20 62 79 74 65 73 20 6f 75 74 73 69  nges bytes outsi
5e90: 64 65 20 74 68 65 20 72 61 6e 67 65 20 6f 66 0a  de the range of.
5ea0: 20 20 62 79 74 65 73 20 77 72 69 74 74 65 6e 20    bytes written 
5eb0: 65 76 65 6e 20 69 66 20 74 68 65 20 77 72 69 74  even if the writ
5ec0: 65 20 6f 63 63 75 72 73 20 6a 75 73 74 20 62 65  e occurs just be
5ed0: 66 6f 72 65 20 61 20 70 6f 77 65 72 20 6c 6f 73  fore a power los
5ee0: 73 2e 0a 20 20 57 69 74 68 20 53 51 4c 49 54 45  s..  With SQLITE
5ef0: 5f 50 4f 57 45 52 53 41 46 45 5f 4f 56 45 52 57  _POWERSAFE_OVERW
5f00: 52 49 54 45 20 73 65 74 20 74 6f 20 30 2c 20 53  RITE set to 0, S
5f10: 51 4c 69 74 65 20 61 73 73 75 6d 65 73 20 74 68  QLite assumes th
5f20: 61 74 20 6f 74 68 65 72 0a 20 20 62 79 74 65 73  at other.  bytes
5f30: 20 69 6e 20 74 68 65 20 73 61 6d 65 20 73 65 63   in the same sec
5f40: 74 6f 72 20 77 69 74 68 20 61 20 77 72 69 74 74  tor with a writt
5f50: 65 6e 20 62 79 74 65 20 6d 69 67 68 74 20 62 65  en byte might be
5f60: 20 63 68 61 6e 67 65 64 20 6f 72 20 0a 20 20 64   changed or .  d
5f70: 61 6d 61 67 65 64 20 62 79 20 61 20 70 6f 77 65  amaged by a powe
5f80: 72 20 6c 6f 73 73 2e 0a 7d 0a 0a 43 4f 4d 50 49  r loss..}..COMPI
5f90: 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54  LE_OPTION {SQLIT
5fa0: 45 5f 52 45 56 45 52 53 45 5f 55 4e 4f 52 44 45  E_REVERSE_UNORDE
5fb0: 52 45 44 5f 53 45 4c 45 43 54 53 7d 20 7b 0a 20  RED_SELECTS} {. 
5fc0: 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 63 61 75   This option cau
5fd0: 73 65 73 20 74 68 65 20 5b 50 52 41 47 4d 41 20  ses the [PRAGMA 
5fe0: 72 65 76 65 72 73 65 5f 75 6e 6f 72 64 65 72 65  reverse_unordere
5ff0: 64 5f 73 65 6c 65 63 74 73 5d 20 73 65 74 74 69  d_selects] setti
6000: 6e 67 20 74 6f 20 62 65 0a 20 20 65 6e 61 62 6c  ng to be.  enabl
6010: 65 64 20 62 79 20 64 65 66 61 75 6c 74 2e 20 20  ed by default.  
6020: 57 68 65 6e 20 65 6e 61 62 6c 65 64 2c 20 5b 53  When enabled, [S
6030: 45 4c 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74  ELECT] statement
6040: 73 20 74 68 61 74 20 6c 61 63 6b 20 61 6e 0a 20  s that lack an. 
6050: 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
6060: 20 77 69 6c 6c 20 72 75 6e 20 69 6e 20 72 65 76   will run in rev
6070: 65 72 73 65 20 6f 72 64 65 72 2e 3c 70 3e 0a 20  erse order.<p>. 
6080: 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 69 73 20   This option is 
6090: 75 73 65 66 75 6c 20 66 6f 72 20 64 65 74 65 63  useful for detec
60a0: 74 69 6e 67 20 77 68 65 6e 20 61 70 70 6c 69 63  ting when applic
60b0: 61 74 69 6f 6e 73 20 28 69 6e 63 6f 72 72 65 63  ations (incorrec
60c0: 74 6c 79 29 0a 20 20 61 73 73 75 6d 65 20 74 68  tly).  assume th
60d0: 61 74 20 74 68 65 20 6f 72 64 65 72 20 6f 66 20  at the order of 
60e0: 72 6f 77 73 20 69 6e 20 61 20 53 45 4c 45 43 54  rows in a SELECT
60f0: 20 77 69 74 68 6f 75 74 20 61 6e 20 4f 52 44 45   without an ORDE
6100: 52 20 42 59 20 63 6c 61 75 73 65 0a 20 20 77 69  R BY clause.  wi
6110: 6c 6c 20 61 6c 77 61 79 73 20 62 65 20 74 68 65  ll always be the
6120: 20 73 61 6d 65 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c   same..}..COMPIL
6130: 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45  E_OPTION {SQLITE
6140: 5f 53 4f 52 54 45 52 5f 50 4d 41 53 5a 3d 3c 69  _SORTER_PMASZ=<i
6150: 3e 4e 3c 2f 69 3e 7d 20 7b 0a 20 20 49 66 20 6d  >N</i>} {.  If m
6160: 75 6c 74 69 2d 74 68 72 65 61 64 65 64 20 70 72  ulti-threaded pr
6170: 6f 63 65 73 73 69 6e 67 20 69 73 20 65 6e 61 62  ocessing is enab
6180: 6c 65 64 20 76 69 61 20 74 68 65 0a 20 20 5b 50  led via the.  [P
6190: 52 41 47 4d 41 20 74 68 72 65 61 64 73 5d 20 73  RAGMA threads] s
61a0: 65 74 74 69 6e 67 2c 20 74 68 65 6e 20 73 6f 72  etting, then sor
61b0: 74 20 6f 70 65 72 61 74 69 6f 6e 73 20 77 69 6c  t operations wil
61c0: 6c 0a 20 20 61 74 74 65 6d 70 74 20 74 6f 20 73  l.  attempt to s
61d0: 74 61 72 74 20 68 65 6c 70 65 72 20 74 68 72 65  tart helper thre
61e0: 61 64 73 20 77 68 65 6e 20 74 68 65 20 61 6d 6f  ads when the amo
61f0: 75 6e 74 20 6f 66 20 63 6f 6e 74 65 6e 74 0a 20  unt of content. 
6200: 20 74 6f 20 62 65 20 73 6f 72 74 65 64 20 65 78   to be sorted ex
6210: 63 65 65 64 73 20 74 68 65 20 6d 69 6e 69 6d 75  ceeds the minimu
6220: 6d 20 6f 66 20 74 68 65 20 5b 63 61 63 68 65 5f  m of the [cache_
6230: 73 69 7a 65 5d 20 61 6e 64 20 50 4d 41 20 53 69  size] and PMA Si
6240: 7a 65 0a 20 20 64 65 74 65 72 6d 69 6e 65 64 20  ze.  determined 
6250: 62 79 20 74 68 65 20 5b 53 51 4c 49 54 45 5f 43  by the [SQLITE_C
6260: 4f 4e 46 49 47 5f 50 4d 41 53 5a 5d 20 73 74 61  ONFIG_PMASZ] sta
6270: 72 74 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 2e 0a  rt-time option..
6280: 20 20 54 68 69 73 20 63 6f 6d 70 69 6c 65 2d 74    This compile-t
6290: 69 6d 65 20 6f 70 74 69 6f 6e 20 73 65 74 73 20  ime option sets 
62a0: 74 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75  the default valu
62b0: 65 20 66 6f 72 20 74 68 65 0a 20 20 5b 53 51 4c  e for the.  [SQL
62c0: 49 54 45 5f 43 4f 4e 46 49 47 5f 50 4d 41 53 5a  ITE_CONFIG_PMASZ
62d0: 5d 20 73 74 61 72 74 2d 74 69 6d 65 20 6f 70 74  ] start-time opt
62e0: 69 6f 6e 2e 0a 20 20 54 68 65 20 64 65 66 61 75  ion..  The defau
62f0: 6c 74 20 76 61 6c 75 65 20 69 73 20 32 35 30 2e  lt value is 250.
6300: 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49  .}..COMPILE_OPTI
6310: 4f 4e 20 7b 53 51 4c 49 54 45 5f 53 54 4d 54 4a  ON {SQLITE_STMTJ
6320: 52 4e 4c 5f 53 50 49 4c 4c 3d 3c 69 3e 4e 3c 2f  RNL_SPILL=<i>N</
6330: 69 3e 7d 20 7b 0a 20 20 54 68 65 20 53 51 4c 49  i>} {.  The SQLI
6340: 54 45 5f 53 54 4d 54 4a 52 4e 4c 5f 53 50 49 4c  TE_STMTJRNL_SPIL
6350: 4c 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f  L compile-time o
6360: 70 74 69 6f 6e 20 64 65 74 65 72 6d 69 6e 65 73  ption determines
6370: 20 74 68 65 0a 20 20 64 65 66 61 75 6c 74 20 73   the.  default s
6380: 65 74 74 69 6e 67 20 6f 66 20 74 68 65 20 5b 53  etting of the [S
6390: 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 53 54 4d  QLITE_CONFIG_STM
63a0: 54 4a 52 4e 4c 5f 53 50 49 4c 4c 5d 20 73 74 61  TJRNL_SPILL] sta
63b0: 72 74 2d 74 69 6d 65 0a 20 20 73 65 74 74 69 6e  rt-time.  settin
63c0: 67 2e 20 20 54 68 61 74 20 73 65 74 74 69 6e 67  g.  That setting
63d0: 20 64 65 74 65 72 6d 69 6e 65 73 20 74 68 65 20   determines the 
63e0: 73 69 7a 65 20 74 68 72 65 73 68 6f 6c 64 20 61  size threshold a
63f0: 62 6f 76 65 20 77 68 69 63 68 0a 20 20 5b 73 74  bove which.  [st
6400: 61 74 65 6d 65 6e 74 20 6a 6f 75 72 6e 61 6c 73  atement journals
6410: 5d 20 61 72 65 20 6d 6f 76 65 64 20 66 72 6f 6d  ] are moved from
6420: 20 6d 65 6d 6f 72 79 20 74 6f 20 64 69 73 6b 2e   memory to disk.
6430: 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49  .}..COMPILE_OPTI
6440: 4f 4e 20 7b 53 51 4c 49 54 45 5f 57 49 4e 33 32  ON {SQLITE_WIN32
6450: 5f 4d 41 4c 4c 4f 43 7d 20 7b 0a 20 20 54 68 69  _MALLOC} {.  Thi
6460: 73 20 6f 70 74 69 6f 6e 20 65 6e 61 62 6c 65 73  s option enables
6470: 20 74 68 65 20 75 73 65 20 6f 66 20 74 68 65 20   the use of the 
6480: 57 69 6e 64 6f 77 73 20 48 65 61 70 20 41 50 49  Windows Heap API
6490: 20 66 75 6e 63 74 69 6f 6e 73 20 66 6f 72 20 6d   functions for m
64a0: 65 6d 6f 72 79 0a 20 20 61 6c 6c 6f 63 61 74 69  emory.  allocati
64b0: 6f 6e 20 69 6e 73 74 65 61 64 20 6f 66 20 74 68  on instead of th
64c0: 65 20 73 74 61 6e 64 61 72 64 20 6c 69 62 72 61  e standard libra
64d0: 72 79 20 6d 61 6c 6c 6f 63 28 29 20 61 6e 64 20  ry malloc() and 
64e0: 66 72 65 65 28 29 20 72 6f 75 74 69 6e 65 73 2e  free() routines.
64f0: 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49  .}..COMPILE_OPTI
6500: 4f 4e 20 7b 59 59 53 54 41 43 4b 44 45 50 54 48  ON {YYSTACKDEPTH
6510: 3d 3c 69 3e 26 6c 74 3b 6d 61 78 5f 64 65 70 74  =<i>&lt;max_dept
6520: 68 26 67 74 3b 3c 2f 69 3e 7d 20 7b 0a 20 20 54  h&gt;</i>} {.  T
6530: 68 69 73 20 6d 61 63 72 6f 20 73 65 74 73 20 74  his macro sets t
6540: 68 65 20 6d 61 78 69 6d 75 6d 20 64 65 70 74 68  he maximum depth
6550: 20 6f 66 20 74 68 65 20 4c 41 4c 52 28 31 29 20   of the LALR(1) 
6560: 73 74 61 63 6b 20 75 73 65 64 20 62 79 0a 20 20  stack used by.  
6570: 74 68 65 20 53 51 4c 20 70 61 72 73 65 72 20 77  the SQL parser w
6580: 69 74 68 69 6e 20 53 51 4c 69 74 65 2e 20 20 54  ithin SQLite.  T
6590: 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65  he default value
65a0: 20 69 73 20 31 30 30 2e 20 20 41 20 74 79 70 69   is 100.  A typi
65b0: 63 61 6c 0a 20 20 61 70 70 6c 69 63 61 74 69 6f  cal.  applicatio
65c0: 6e 20 77 69 6c 6c 20 75 73 65 20 6c 65 73 73 20  n will use less 
65d0: 74 68 61 6e 20 61 62 6f 75 74 20 32 30 20 6c 65  than about 20 le
65e0: 76 65 6c 73 20 6f 66 20 74 68 65 20 73 74 61 63  vels of the stac
65f0: 6b 2e 0a 20 20 44 65 76 65 6c 6f 70 65 72 73 20  k..  Developers 
6600: 77 68 6f 73 65 20 61 70 70 6c 69 63 61 74 69 6f  whose applicatio
6610: 6e 73 20 63 6f 6e 74 61 69 6e 20 53 51 4c 20 73  ns contain SQL s
6620: 74 61 74 65 6d 65 6e 74 73 20 74 68 61 74 20 0a  tatements that .
6630: 20 20 6e 65 65 64 20 6d 6f 72 65 20 74 68 61 6e    need more than
6640: 20 31 30 30 20 4c 41 4c 52 28 31 29 20 73 74 61   100 LALR(1) sta
6650: 63 6b 20 65 6e 74 72 69 65 73 20 73 68 6f 75 6c  ck entries shoul
6660: 64 20 73 65 72 69 6f 75 73 6c 79 0a 20 20 63 6f  d seriously.  co
6670: 6e 73 69 64 65 72 20 72 65 66 61 63 74 6f 72 69  nsider refactori
6680: 6e 67 20 74 68 65 69 72 20 53 51 4c 20 61 73 20  ng their SQL as 
6690: 69 74 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20  it is likely to 
66a0: 62 65 20 77 65 6c 6c 20 62 65 79 6f 6e 64 0a 20  be well beyond. 
66b0: 20 74 68 65 20 61 62 69 6c 69 74 79 20 6f 66 20   the ability of 
66c0: 61 6e 79 20 68 75 6d 61 6e 20 74 6f 20 63 6f 6d  any human to com
66d0: 70 72 65 68 65 6e 64 2e 0a 7d 0a 3c 2f 74 63 6c  prehend..}.</tcl
66e0: 3e 0a 0a 3c 68 31 3e 20 4f 70 74 69 6f 6e 73 20  >..<h1> Options 
66f0: 54 6f 20 53 65 74 20 53 69 7a 65 20 4c 69 6d 69  To Set Size Limi
6700: 74 73 3c 2f 68 31 3e 0a 0a 3c 70 3e 54 68 65 72  ts</h1>..<p>Ther
6710: 65 20 61 72 65 20 63 6f 6d 70 69 6c 65 2d 74 69  e are compile-ti
6720: 6d 65 20 6f 70 74 69 6f 6e 73 20 74 68 61 74 20  me options that 
6730: 77 69 6c 6c 20 73 65 74 20 75 70 70 65 72 20 62  will set upper b
6740: 6f 75 6e 64 73 0a 6f 6e 20 74 68 65 20 73 69 7a  ounds.on the siz
6750: 65 73 20 6f 66 20 76 61 72 69 6f 75 73 20 73 74  es of various st
6760: 72 75 63 74 75 72 65 73 20 69 6e 20 53 51 4c 69  ructures in SQLi
6770: 74 65 2e 20 20 54 68 65 20 63 6f 6d 70 69 6c 65  te.  The compile
6780: 2d 74 69 6d 65 0a 6f 70 74 69 6f 6e 73 20 6e 6f  -time.options no
6790: 72 6d 61 6c 6c 79 20 73 65 74 20 61 20 68 61 72  rmally set a har
67a0: 64 20 75 70 70 65 72 20 62 6f 75 6e 64 20 74 68  d upper bound th
67b0: 61 74 20 63 61 6e 20 62 65 20 63 68 61 6e 67 65  at can be change
67c0: 64 0a 61 74 20 72 75 6e 2d 74 69 6d 65 20 6f 6e  d.at run-time on
67d0: 20 69 6e 64 69 76 69 64 75 61 6c 20 5b 64 61 74   individual [dat
67e0: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
67f0: 73 5d 20 75 73 69 6e 67 20 74 68 65 0a 5b 73 71  s] using the.[sq
6800: 6c 69 74 65 33 5f 6c 69 6d 69 74 28 29 5d 20 69  lite3_limit()] i
6810: 6e 74 65 72 66 61 63 65 2e 3c 2f 70 3e 0a 0a 3c  nterface.</p>..<
6820: 70 3e 54 68 65 20 63 6f 6d 70 69 6c 65 2d 74 69  p>The compile-ti
6830: 6d 65 20 6f 70 74 69 6f 6e 73 20 66 6f 72 20 73  me options for s
6840: 65 74 74 69 6e 67 20 75 70 70 65 72 20 62 6f 75  etting upper bou
6850: 6e 64 73 20 61 72 65 0a 5b 6c 69 6d 69 74 73 20  nds are.[limits 
6860: 7c 20 64 6f 63 75 6d 65 6e 74 65 64 20 73 65 70  | documented sep
6870: 61 72 61 74 65 6c 79 5d 2e 20 20 54 68 65 20 66  arately].  The f
6880: 6f 6c 6c 6f 77 69 6e 67 20 69 73 20 61 20 6c 69  ollowing is a li
6890: 73 74 20 6f 66 0a 74 68 65 20 61 76 61 69 6c 61  st of.the availa
68a0: 62 6c 65 20 73 65 74 74 69 6e 67 73 3a 3c 2f 70  ble settings:</p
68b0: 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 20 5b 53 51  >..<ul>.<li> [SQ
68c0: 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45  LITE_MAX_ATTACHE
68d0: 44 5d 20 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e 20 5b  D]  </li>.<li> [
68e0: 53 51 4c 49 54 45 5f 4d 41 58 5f 43 4f 4c 55 4d  SQLITE_MAX_COLUM
68f0: 4e 5d 20 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e 20 5b  N]  </li>.<li> [
6900: 53 51 4c 49 54 45 5f 4d 41 58 5f 43 4f 4d 50 4f  SQLITE_MAX_COMPO
6910: 55 4e 44 5f 53 45 4c 45 43 54 5d 20 20 3c 2f 6c  UND_SELECT]  </l
6920: 69 3e 0a 3c 6c 69 3e 20 5b 53 51 4c 49 54 45 5f  i>.<li> [SQLITE_
6930: 4d 41 58 5f 45 58 50 52 5f 44 45 50 54 48 5d 20  MAX_EXPR_DEPTH] 
6940: 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e 20 5b 53 51 4c   </li>.<li> [SQL
6950: 49 54 45 5f 4d 41 58 5f 46 55 4e 43 54 49 4f 4e  ITE_MAX_FUNCTION
6960: 5f 41 52 47 5d 20 20 3c 2f 6c 69 3e 0a 3c 6c 69  _ARG]  </li>.<li
6970: 3e 20 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45  > [SQLITE_MAX_LE
6980: 4e 47 54 48 5d 20 20 3c 2f 6c 69 3e 0a 3c 6c 69  NGTH]  </li>.<li
6990: 3e 20 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 49  > [SQLITE_MAX_LI
69a0: 4b 45 5f 50 41 54 54 45 52 4e 5f 4c 45 4e 47 54  KE_PATTERN_LENGT
69b0: 48 5d 20 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e 20 5b  H]  </li>.<li> [
69c0: 53 51 4c 49 54 45 5f 4d 41 58 5f 50 41 47 45 5f  SQLITE_MAX_PAGE_
69d0: 43 4f 55 4e 54 5d 20 20 3c 2f 6c 69 3e 0a 3c 6c  COUNT]  </li>.<l
69e0: 69 3e 20 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 53  i> [SQLITE_MAX_S
69f0: 51 4c 5f 4c 45 4e 47 54 48 5d 20 20 3c 2f 6c 69  QL_LENGTH]  </li
6a00: 3e 0a 3c 6c 69 3e 20 5b 53 51 4c 49 54 45 5f 4d  >.<li> [SQLITE_M
6a10: 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42  AX_VARIABLE_NUMB
6a20: 45 52 5d 20 20 3c 2f 6c 69 3e 0a 3c 2f 75 6c 3e  ER]  </li>.</ul>
6a30: 0a 0a 3c 61 20 6e 61 6d 65 3d 22 63 6f 6e 74 72  ..<a name="contr
6a40: 6f 6c 66 65 61 74 75 72 65 73 22 3e 3c 2f 61 3e  olfeatures"></a>
6a50: 0a 3c 68 31 3e 20 4f 70 74 69 6f 6e 73 20 54 6f  .<h1> Options To
6a60: 20 43 6f 6e 74 72 6f 6c 20 4f 70 65 72 61 74 69   Control Operati
6a70: 6e 67 20 43 68 61 72 61 63 74 65 72 69 73 74 69  ng Characteristi
6a80: 63 73 3c 2f 68 31 3e 0a 0a 3c 74 63 6c 3e 0a 43  cs</h1>..<tcl>.C
6a90: 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53  OMPILE_OPTION {S
6aa0: 51 4c 49 54 45 5f 34 5f 42 59 54 45 5f 41 4c 49  QLITE_4_BYTE_ALI
6ab0: 47 4e 45 44 5f 4d 41 4c 4c 4f 43 7d 20 7b 0a 20  GNED_MALLOC} {. 
6ac0: 20 4f 6e 20 6d 6f 73 74 20 73 79 73 74 65 6d 73   On most systems
6ad0: 2c 20 74 68 65 20 6d 61 6c 6c 6f 63 28 29 20 73  , the malloc() s
6ae0: 79 73 74 65 6d 20 63 61 6c 6c 20 72 65 74 75 72  ystem call retur
6af0: 6e 73 20 61 20 62 75 66 66 65 72 20 74 68 61 74  ns a buffer that
6b00: 20 69 73 0a 20 20 61 6c 69 67 6e 65 64 20 74 6f   is.  aligned to
6b10: 20 61 6e 20 38 2d 62 79 74 65 20 62 6f 75 6e 64   an 8-byte bound
6b20: 61 72 79 2e 20 20 42 75 74 20 6f 6e 20 73 6f 6d  ary.  But on som
6b30: 65 20 73 79 73 74 65 6d 73 20 28 65 78 3a 20 77  e systems (ex: w
6b40: 69 6e 64 6f 77 73 29 20 6d 61 6c 6c 6f 63 28 29  indows) malloc()
6b50: 0a 20 20 72 65 74 75 72 6e 73 20 34 2d 62 79 74  .  returns 4-byt
6b60: 65 20 61 6c 69 67 6e 65 64 20 70 6f 69 6e 74 65  e aligned pointe
6b70: 72 2e 20 20 54 68 69 73 20 63 6f 6d 70 69 6c 65  r.  This compile
6b80: 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 6d 75 73  -time option mus
6b90: 74 20 62 65 20 75 73 65 64 0a 20 20 6f 6e 20 73  t be used.  on s
6ba0: 79 73 74 65 6d 73 20 74 68 61 74 20 72 65 74 75  ystems that retu
6bb0: 72 6e 20 34 2d 62 79 74 65 20 61 6c 69 67 6e 65  rn 4-byte aligne
6bc0: 64 20 70 6f 69 6e 74 65 72 73 20 66 72 6f 6d 20  d pointers from 
6bd0: 6d 61 6c 6c 6f 63 28 29 2e 0a 7d 0a 0a 43 4f 4d  malloc()..}..COM
6be0: 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c  PILE_OPTION {SQL
6bf0: 49 54 45 5f 43 41 53 45 5f 53 45 4e 53 49 54 49  ITE_CASE_SENSITI
6c00: 56 45 5f 4c 49 4b 45 7d 20 7b 0a 20 20 49 66 20  VE_LIKE} {.  If 
6c10: 74 68 69 73 20 6f 70 74 69 6f 6e 20 69 73 20 70  this option is p
6c20: 72 65 73 65 6e 74 2c 20 74 68 65 6e 20 74 68 65  resent, then the
6c30: 20 62 75 69 6c 74 2d 69 6e 20 5b 4c 49 4b 45 5d   built-in [LIKE]
6c40: 20 6f 70 65 72 61 74 6f 72 20 77 69 6c 6c 20 62   operator will b
6c50: 65 0a 20 20 63 61 73 65 20 73 65 6e 73 69 74 69  e.  case sensiti
6c60: 76 65 2e 20 20 54 68 69 73 20 73 61 6d 65 20 65  ve.  This same e
6c70: 66 66 65 63 74 20 63 61 6e 20 62 65 20 61 63 68  ffect can be ach
6c80: 69 65 76 65 64 20 61 74 20 72 75 6e 2d 74 69 6d  ieved at run-tim
6c90: 65 20 75 73 69 6e 67 0a 20 20 74 68 65 20 5b 63  e using.  the [c
6ca0: 61 73 65 5f 73 65 6e 73 69 74 69 76 65 5f 6c 69  ase_sensitive_li
6cb0: 6b 65 20 70 72 61 67 6d 61 5d 2e 0a 7d 0a 0a 43  ke pragma]..}..C
6cc0: 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53  OMPILE_OPTION {S
6cd0: 51 4c 49 54 45 5f 44 49 52 45 43 54 5f 4f 56 45  QLITE_DIRECT_OVE
6ce0: 52 46 4c 4f 57 5f 52 45 41 44 7d 20 7b 0a 20 20  RFLOW_READ} {.  
6cf0: 57 68 65 6e 20 74 68 69 73 20 6f 70 74 69 6f 6e  When this option
6d00: 20 69 73 20 70 72 65 73 65 6e 74 2c 20 63 6f 6e   is present, con
6d10: 74 65 6e 74 20 63 6f 6e 74 61 69 6e 65 64 20 69  tent contained i
6d20: 6e 0a 20 20 5b 6f 76 65 72 66 6c 6f 77 20 70 61  n.  [overflow pa
6d30: 67 65 73 5d 20 6f 66 20 74 68 65 20 64 61 74 61  ges] of the data
6d40: 62 61 73 65 20 66 69 6c 65 20 69 73 20 72 65 61  base file is rea
6d50: 64 20 64 69 72 65 63 74 6c 79 20 66 72 6f 6d 20  d directly from 
6d60: 64 69 73 6b 2c 0a 20 20 62 79 70 61 73 73 69 6e  disk,.  bypassin
6d70: 67 20 74 68 65 20 5b 70 61 67 65 20 63 61 63 68  g the [page cach
6d80: 65 5d 2c 20 64 75 72 69 6e 67 20 72 65 61 64 20  e], during read 
6d90: 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e 20 20 49  transactions.  I
6da0: 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 0a 20  n applications. 
6db0: 20 74 68 61 74 20 64 6f 20 61 20 6c 6f 74 20 6f   that do a lot o
6dc0: 66 20 72 65 61 64 73 20 6f 66 20 6c 61 72 67 65  f reads of large
6dd0: 20 42 4c 4f 42 73 2c 20 74 68 69 73 20 6f 70 74   BLOBs, this opt
6de0: 69 6f 6e 20 6d 69 67 68 74 20 69 6d 70 72 6f 76  ion might improv
6df0: 65 20 72 65 61 64 0a 20 20 70 65 72 66 6f 72 6d  e read.  perform
6e00: 61 6e 63 65 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45  ance..}..COMPILE
6e10: 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f  _OPTION {SQLITE_
6e20: 48 41 56 45 5f 49 53 4e 41 4e 7d 20 7b 0a 20 20  HAVE_ISNAN} {.  
6e30: 49 66 20 74 68 69 73 20 6f 70 74 69 6f 6e 20 69  If this option i
6e40: 73 20 70 72 65 73 65 6e 74 2c 20 74 68 65 6e 20  s present, then 
6e50: 53 51 4c 69 74 65 20 77 69 6c 6c 20 75 73 65 20  SQLite will use 
6e60: 74 68 65 20 69 73 6e 61 6e 28 29 20 66 75 6e 63  the isnan() func
6e70: 74 69 6f 6e 20 66 72 6f 6d 0a 20 20 74 68 65 20  tion from.  the 
6e80: 73 79 73 74 65 6d 20 6d 61 74 68 20 6c 69 62 72  system math libr
6e90: 61 72 79 2e 20 20 54 68 69 73 20 69 73 20 61 6e  ary.  This is an
6ea0: 20 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20 5b   alias for the [
6eb0: 48 41 56 45 5f 49 53 4e 41 4e 5d 20 63 6f 6e 66  HAVE_ISNAN] conf
6ec0: 69 67 75 72 61 74 69 6f 6e 0a 20 20 6f 70 74 69  iguration.  opti
6ed0: 6f 6e 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f  on..}..COMPILE_O
6ee0: 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f 53  PTION {SQLITE_OS
6ef0: 5f 4f 54 48 45 52 3d 3c 69 3e 26 6c 74 3b 30 20  _OTHER=<i>&lt;0 
6f00: 6f 72 20 31 26 67 74 3b 3c 2f 69 3e 7d 20 7b 0a  or 1&gt;</i>} {.
6f10: 20 20 54 68 65 20 6f 70 74 69 6f 6e 20 63 61 75    The option cau
6f20: 73 65 73 20 53 51 4c 69 74 65 20 74 6f 20 6f 6d  ses SQLite to om
6f30: 69 74 20 69 74 73 20 62 75 69 6c 74 2d 69 6e 20  it its built-in 
6f40: 6f 70 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d  operating system
6f50: 20 69 6e 74 65 72 66 61 63 65 73 0a 20 20 66 6f   interfaces.  fo
6f60: 72 20 55 6e 69 78 2c 20 57 69 6e 64 6f 77 73 2c  r Unix, Windows,
6f70: 20 61 6e 64 20 4f 53 2f 32 2e 20 20 54 68 65 20   and OS/2.  The 
6f80: 72 65 73 75 6c 74 69 6e 67 20 6c 69 62 72 61 72  resulting librar
6f90: 79 20 77 69 6c 6c 20 68 61 76 65 20 6e 6f 20 64  y will have no d
6fa0: 65 66 61 75 6c 74 0a 20 20 5b 73 71 6c 69 74 65  efault.  [sqlite
6fb0: 33 5f 76 66 73 20 7c 20 6f 70 65 72 61 74 69 6e  3_vfs | operatin
6fc0: 67 20 73 79 73 74 65 6d 20 69 6e 74 65 72 66 61  g system interfa
6fd0: 63 65 5d 2e 20 20 41 70 70 6c 69 63 61 74 69 6f  ce].  Applicatio
6fe0: 6e 73 20 6d 75 73 74 20 75 73 65 0a 20 20 5b 73  ns must use.  [s
6ff0: 71 6c 69 74 65 33 5f 76 66 73 5f 72 65 67 69 73  qlite3_vfs_regis
7000: 74 65 72 28 29 5d 20 74 6f 20 72 65 67 69 73 74  ter()] to regist
7010: 65 72 20 61 6e 20 61 70 70 72 6f 70 72 69 61 74  er an appropriat
7020: 65 20 69 6e 74 65 72 66 61 63 65 20 62 65 66 6f  e interface befo
7030: 72 65 0a 20 20 75 73 69 6e 67 20 53 51 4c 69 74  re.  using SQLit
7040: 65 2e 20 20 41 70 70 6c 69 63 61 74 69 6f 6e 73  e.  Applications
7050: 20 6d 75 73 74 20 61 6c 73 6f 20 73 75 70 70 6c   must also suppl
7060: 79 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  y implementation
7070: 73 20 66 6f 72 20 74 68 65 0a 20 20 5b 73 71 6c  s for the.  [sql
7080: 69 74 65 33 5f 6f 73 5f 69 6e 69 74 28 29 5d 20  ite3_os_init()] 
7090: 61 6e 64 20 5b 73 71 6c 69 74 65 33 5f 6f 73 5f  and [sqlite3_os_
70a0: 65 6e 64 28 29 5d 20 69 6e 74 65 72 66 61 63 65  end()] interface
70b0: 73 2e 20 20 54 68 65 20 75 73 75 61 6c 20 70 72  s.  The usual pr
70c0: 61 63 74 69 63 65 0a 20 20 69 73 20 66 6f 72 20  actice.  is for 
70d0: 74 68 65 20 73 75 70 70 6c 69 65 64 20 5b 73 71  the supplied [sq
70e0: 6c 69 74 65 33 5f 6f 73 5f 69 6e 69 74 28 29 5d  lite3_os_init()]
70f0: 20 74 6f 20 69 6e 76 6f 6b 65 20 5b 73 71 6c 69   to invoke [sqli
7100: 74 65 33 5f 76 66 73 5f 72 65 67 69 73 74 65 72  te3_vfs_register
7110: 28 29 5d 2e 0a 20 20 53 51 4c 69 74 65 20 77 69  ()]..  SQLite wi
7120: 6c 6c 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  ll automatically
7130: 20 69 6e 76 6f 6b 65 20 5b 73 71 6c 69 74 65 33   invoke [sqlite3
7140: 5f 6f 73 5f 69 6e 69 74 28 29 5d 20 77 68 65 6e  _os_init()] when
7150: 20 69 74 20 69 6e 69 74 69 61 6c 69 7a 65 73 2e   it initializes.
7160: 0a 0a 20 20 54 68 69 73 20 6f 70 74 69 6f 6e 20  ..  This option 
7170: 69 73 20 74 79 70 69 63 61 6c 6c 79 20 75 73 65  is typically use
7180: 64 20 77 68 65 6e 20 62 75 69 6c 64 69 6e 67 20  d when building 
7190: 53 51 4c 69 74 65 20 66 6f 72 20 61 6e 20 65 6d  SQLite for an em
71a0: 62 65 64 64 65 64 0a 20 20 70 6c 61 74 66 6f 72  bedded.  platfor
71b0: 6d 20 77 69 74 68 20 61 20 63 75 73 74 6f 6d 20  m with a custom 
71c0: 6f 70 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d  operating system
71d0: 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54  ..}..COMPILE_OPT
71e0: 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 53 45 43 55  ION {SQLITE_SECU
71f0: 52 45 5f 44 45 4c 45 54 45 7d 20 7b 0a 20 20 54  RE_DELETE} {.  T
7200: 68 69 73 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  his compile-time
7210: 20 6f 70 74 69 6f 6e 20 63 68 61 6e 67 65 73 20   option changes 
7220: 74 68 65 20 64 65 66 61 75 6c 74 20 73 65 74 74  the default sett
7230: 69 6e 67 20 6f 66 20 74 68 65 0a 20 20 5b 73 65  ing of the.  [se
7240: 63 75 72 65 5f 64 65 6c 65 74 65 20 70 72 61 67  cure_delete prag
7250: 6d 61 5d 2e 20 20 57 68 65 6e 20 74 68 69 73 20  ma].  When this 
7260: 6f 70 74 69 6f 6e 20 69 73 20 6e 6f 74 20 75 73  option is not us
7270: 65 64 2c 20 73 65 63 75 72 65 5f 64 65 6c 65 74  ed, secure_delet
7280: 65 20 64 65 66 61 75 6c 74 73 0a 20 20 74 6f 20  e defaults.  to 
7290: 6f 66 66 2e 20 20 57 68 65 6e 20 74 68 69 73 20  off.  When this 
72a0: 6f 70 74 69 6f 6e 20 69 73 20 70 72 65 73 65 6e  option is presen
72b0: 74 2c 20 73 65 63 75 72 65 5f 64 65 6c 65 74 65  t, secure_delete
72c0: 20 64 65 66 61 75 6c 74 73 20 74 6f 20 6f 6e 2e   defaults to on.
72d0: 0a 0a 20 20 54 68 65 20 73 65 63 75 72 65 5f 64  ..  The secure_d
72e0: 65 6c 65 74 65 20 73 65 74 74 69 6e 67 20 63 61  elete setting ca
72f0: 75 73 65 73 20 64 65 6c 65 74 65 64 20 63 6f 6e  uses deleted con
7300: 74 65 6e 74 20 74 6f 20 62 65 20 6f 76 65 72 77  tent to be overw
7310: 72 69 74 74 65 6e 20 77 69 74 68 0a 20 20 7a 65  ritten with.  ze
7320: 72 6f 73 2e 20 20 54 68 65 72 65 20 69 73 20 61  ros.  There is a
7330: 20 73 6d 61 6c 6c 20 70 65 72 66 6f 72 6d 61 6e   small performan
7340: 63 65 20 70 65 6e 61 6c 74 79 20 73 69 6e 63 65  ce penalty since
7350: 20 61 64 64 69 74 69 6f 6e 61 6c 20 49 2f 4f 0a   additional I/O.
7360: 20 20 6d 75 73 74 20 6f 63 63 75 72 2e 20 20 4f    must occur.  O
7370: 6e 20 74 68 65 20 6f 74 68 65 72 20 68 61 6e 64  n the other hand
7380: 2c 20 73 65 63 75 72 65 5f 64 65 6c 65 74 65 20  , secure_delete 
7390: 63 61 6e 20 70 72 65 76 65 6e 74 20 66 72 61 67  can prevent frag
73a0: 6d 65 6e 74 73 20 6f 66 20 0a 20 20 73 65 6e 73  ments of .  sens
73b0: 69 74 69 76 65 20 69 6e 66 6f 72 6d 61 74 69 6f  itive informatio
73c0: 6e 20 66 72 6f 6d 20 6c 69 6e 67 65 72 69 6e 67  n from lingering
73d0: 20 69 6e 20 75 6e 75 73 65 64 20 70 61 72 74 73   in unused parts
73e0: 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
73f0: 20 66 69 6c 65 20 0a 20 20 61 66 74 65 72 20 69   file .  after i
7400: 74 20 68 61 73 20 62 65 65 6e 20 64 65 6c 65 74  t has been delet
7410: 65 64 2e 20 20 53 65 65 20 74 68 65 20 64 6f 63  ed.  See the doc
7420: 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 6e 20 74 68  umentation on th
7430: 65 0a 20 20 5b 73 65 63 75 72 65 5f 64 65 6c 65  e.  [secure_dele
7440: 74 65 20 70 72 61 67 6d 61 5d 20 66 6f 72 20 61  te pragma] for a
7450: 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
7460: 61 74 69 6f 6e 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c  ation..}..COMPIL
7470: 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45  E_OPTION {SQLITE
7480: 5f 54 48 52 45 41 44 53 41 46 45 3d 3c 69 3e 26  _THREADSAFE=<i>&
7490: 6c 74 3b 30 20 6f 72 20 31 20 6f 72 20 32 26 67  lt;0 or 1 or 2&g
74a0: 74 3b 3c 2f 69 3e 7d 20 7b 0a 20 20 54 68 69 73  t;</i>} {.  This
74b0: 20 6f 70 74 69 6f 6e 20 63 6f 6e 74 72 6f 6c 73   option controls
74c0: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
74d0: 63 6f 64 65 20 69 73 20 69 6e 63 6c 75 64 65 64  code is included
74e0: 20 69 6e 20 53 51 4c 69 74 65 20 74 6f 0a 20 20   in SQLite to.  
74f0: 65 6e 61 62 6c 65 20 69 74 20 74 6f 20 6f 70 65  enable it to ope
7500: 72 61 74 65 20 73 61 66 65 6c 79 20 69 6e 20 61  rate safely in a
7510: 20 6d 75 6c 74 69 74 68 72 65 61 64 65 64 20 65   multithreaded e
7520: 6e 76 69 72 6f 6e 6d 65 6e 74 2e 20 20 54 68 65  nvironment.  The
7530: 0a 20 20 64 65 66 61 75 6c 74 20 69 73 20 53 51  .  default is SQ
7540: 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45 3d  LITE_THREADSAFE=
7550: 31 20 77 68 69 63 68 20 69 73 20 73 61 66 65 20  1 which is safe 
7560: 66 6f 72 20 75 73 65 20 69 6e 20 61 20 6d 75 6c  for use in a mul
7570: 74 69 74 68 72 65 61 64 65 64 0a 20 20 65 6e 76  tithreaded.  env
7580: 69 72 6f 6e 6d 65 6e 74 2e 20 20 57 68 65 6e 20  ironment.  When 
7590: 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 53 51  compiled with SQ
75a0: 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45 3d  LITE_THREADSAFE=
75b0: 30 20 61 6c 6c 20 6d 75 74 65 78 69 6e 67 20 63  0 all mutexing c
75c0: 6f 64 65 0a 20 20 69 73 20 6f 6d 69 74 74 65 64  ode.  is omitted
75d0: 20 61 6e 64 20 69 74 20 69 73 20 75 6e 73 61 66   and it is unsaf
75e0: 65 20 74 6f 20 75 73 65 20 53 51 4c 69 74 65 20  e to use SQLite 
75f0: 69 6e 20 61 20 6d 75 6c 74 69 74 68 72 65 61 64  in a multithread
7600: 65 64 20 70 72 6f 67 72 61 6d 2e 0a 20 20 57 68  ed program..  Wh
7610: 65 6e 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68  en compiled with
7620: 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41   SQLITE_THREADSA
7630: 46 45 3d 32 2c 20 53 51 4c 69 74 65 20 63 61 6e  FE=2, SQLite can
7640: 20 62 65 20 75 73 65 64 20 69 6e 20 61 20 6d 75   be used in a mu
7650: 6c 74 69 74 68 72 65 61 64 65 64 0a 20 20 70 72  ltithreaded.  pr
7660: 6f 67 72 61 6d 20 73 6f 20 6c 6f 6e 67 20 61 73  ogram so long as
7670: 20 6e 6f 20 74 77 6f 20 74 68 72 65 61 64 73 20   no two threads 
7680: 61 74 74 65 6d 70 74 20 74 6f 20 75 73 65 20 74  attempt to use t
7690: 68 65 20 73 61 6d 65 0a 20 20 5b 64 61 74 61 62  he same.  [datab
76a0: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d 20  ase connection] 
76b0: 28 6f 72 20 61 6e 79 20 5b 70 72 65 70 61 72 65  (or any [prepare
76c0: 64 20 73 74 61 74 65 6d 65 6e 74 73 5d 20 64 65  d statements] de
76d0: 72 69 76 65 64 20 66 72 6f 6d 0a 20 20 74 68 61  rived from.  tha
76e0: 74 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  t database conne
76f0: 63 74 69 6f 6e 29 20 61 74 20 74 68 65 20 73 61  ction) at the sa
7700: 6d 65 20 74 69 6d 65 2e 0a 0a 20 20 54 6f 20 70  me time...  To p
7710: 75 74 20 69 74 20 61 6e 6f 74 68 65 72 20 77 61  ut it another wa
7720: 79 2c 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44  y, SQLITE_THREAD
7730: 53 41 46 45 3d 31 20 73 65 74 73 20 74 68 65 20  SAFE=1 sets the 
7740: 64 65 66 61 75 6c 74 0a 20 20 5b 74 68 72 65 61  default.  [threa
7750: 64 69 6e 67 20 6d 6f 64 65 5d 20 74 6f 20 53 65  ding mode] to Se
7760: 72 69 61 6c 69 7a 65 64 2e 20 20 53 51 4c 49 54  rialized.  SQLIT
7770: 45 5f 54 48 52 45 41 44 53 41 46 45 3d 32 20 73  E_THREADSAFE=2 s
7780: 65 74 73 20 74 68 65 20 64 65 66 61 75 6c 74 0a  ets the default.
7790: 20 20 5b 74 68 72 65 61 64 69 6e 67 20 6d 6f 64    [threading mod
77a0: 65 5d 20 74 6f 20 4d 75 6c 74 69 2d 74 68 72 65  e] to Multi-thre
77b0: 61 64 65 64 2e 20 20 41 6e 64 20 53 51 4c 49 54  aded.  And SQLIT
77c0: 45 5f 54 48 52 45 41 44 53 41 46 45 3d 30 20 73  E_THREADSAFE=0 s
77d0: 65 74 73 20 74 68 65 0a 20 20 5b 74 68 72 65 61  ets the.  [threa
77e0: 64 69 6e 67 20 6d 6f 64 65 5d 20 74 6f 20 53 69  ding mode] to Si
77f0: 6e 67 6c 65 2d 74 68 72 65 61 64 65 64 2e 0a 0a  ngle-threaded...
7800: 20 20 54 68 65 20 76 61 6c 75 65 20 6f 66 20 53    The value of S
7810: 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45  QLITE_THREADSAFE
7820: 20 63 61 6e 20 62 65 20 64 65 74 65 72 6d 69 6e   can be determin
7830: 65 64 20 61 74 20 72 75 6e 2d 74 69 6d 65 0a 20  ed at run-time. 
7840: 20 75 73 69 6e 67 20 74 68 65 20 5b 73 71 6c 69   using the [sqli
7850: 74 65 33 5f 74 68 72 65 61 64 73 61 66 65 28 29  te3_threadsafe()
7860: 5d 20 69 6e 74 65 72 66 61 63 65 2e 0a 0a 20 20  ] interface...  
7870: 57 68 65 6e 20 53 51 4c 69 74 65 20 68 61 73 20  When SQLite has 
7880: 62 65 65 6e 20 63 6f 6d 70 69 6c 65 64 20 77 69  been compiled wi
7890: 74 68 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44  th SQLITE_THREAD
78a0: 53 41 46 45 3d 31 20 6f 72 0a 20 20 53 51 4c 49  SAFE=1 or.  SQLI
78b0: 54 45 5f 54 48 52 45 41 44 53 41 46 45 3d 32 20  TE_THREADSAFE=2 
78c0: 74 68 65 6e 20 74 68 65 20 5b 74 68 72 65 61 64  then the [thread
78d0: 69 6e 67 20 6d 6f 64 65 5d 0a 20 20 63 61 6e 20  ing mode].  can 
78e0: 62 65 20 61 6c 74 65 72 65 64 20 61 74 20 72 75  be altered at ru
78f0: 6e 2d 74 69 6d 65 20 75 73 69 6e 67 20 74 68 65  n-time using the
7900: 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67   [sqlite3_config
7910: 28 29 5d 20 69 6e 74 65 72 66 61 63 65 20 74 6f  ()] interface to
7920: 67 65 74 68 65 72 0a 20 20 77 69 74 68 20 6f 6e  gether.  with on
7930: 65 20 6f 66 20 74 68 65 73 65 20 76 65 72 62 73  e of these verbs
7940: 3a 0a 0a 20 20 3c 75 6c 3e 0a 20 20 3c 6c 69 3e  :..  <ul>.  <li>
7950: 5b 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 53  [SQLITE_CONFIG_S
7960: 49 4e 47 4c 45 54 48 52 45 41 44 5d 0a 20 20 3c  INGLETHREAD].  <
7970: 6c 69 3e 5b 53 51 4c 49 54 45 5f 43 4f 4e 46 49  li>[SQLITE_CONFI
7980: 47 5f 4d 55 4c 54 49 54 48 52 45 41 44 5d 0a 20  G_MULTITHREAD]. 
7990: 20 3c 6c 69 3e 5b 53 51 4c 49 54 45 5f 43 4f 4e   <li>[SQLITE_CON
79a0: 46 49 47 5f 53 45 52 49 41 4c 49 5a 45 44 5d 0a  FIG_SERIALIZED].
79b0: 20 20 3c 2f 75 6c 3e 0a 0a 20 20 54 68 65 20 5b    </ul>..  The [
79c0: 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 4e 4f 4d 55  SQLITE_OPEN_NOMU
79d0: 54 45 58 5d 20 61 6e 64 0a 20 20 5b 53 51 4c 49  TEX] and.  [SQLI
79e0: 54 45 5f 4f 50 45 4e 5f 46 55 4c 4c 4d 55 54 45  TE_OPEN_FULLMUTE
79f0: 58 5d 20 66 6c 61 67 73 20 74 6f 20 5b 73 71 6c  X] flags to [sql
7a00: 69 74 65 33 5f 6f 70 65 6e 5f 76 32 28 29 5d 20  ite3_open_v2()] 
7a10: 63 61 6e 20 61 6c 73 6f 20 62 65 20 75 73 65 64  can also be used
7a20: 0a 20 20 74 6f 20 61 64 6a 75 73 74 20 74 68 65  .  to adjust the
7a30: 20 5b 74 68 72 65 61 64 69 6e 67 20 6d 6f 64 65   [threading mode
7a40: 5d 20 6f 66 20 69 6e 64 69 76 69 64 75 61 6c 20  ] of individual 
7a50: 5b 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63  [database connec
7a60: 74 69 6f 6e 73 5d 0a 20 20 61 74 20 72 75 6e 2d  tions].  at run-
7a70: 74 69 6d 65 2e 0a 0a 20 20 4e 6f 74 65 20 74 68  time...  Note th
7a80: 61 74 20 77 68 65 6e 20 53 51 4c 69 74 65 20 69  at when SQLite i
7a90: 73 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20  s compiled with 
7aa0: 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46  SQLITE_THREADSAF
7ab0: 45 3d 30 2c 20 74 68 65 20 63 6f 64 65 0a 20 20  E=0, the code.  
7ac0: 74 6f 20 6d 61 6b 65 20 53 51 4c 69 74 65 20 74  to make SQLite t
7ad0: 68 72 65 61 64 73 61 66 65 20 69 73 20 6f 6d 69  hreadsafe is omi
7ae0: 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20 62 75  tted from the bu
7af0: 69 6c 64 2e 20 20 57 68 65 6e 20 74 68 69 73 20  ild.  When this 
7b00: 6f 63 63 75 72 73 2c 0a 20 20 69 74 20 69 73 20  occurs,.  it is 
7b10: 69 6d 70 6f 73 73 69 62 6c 65 20 74 6f 20 63 68  impossible to ch
7b20: 61 6e 67 65 20 74 68 65 20 5b 74 68 72 65 61 64  ange the [thread
7b30: 69 6e 67 20 6d 6f 64 65 5d 20 61 74 20 73 74 61  ing mode] at sta
7b40: 72 74 2d 74 69 6d 65 20 6f 72 20 72 75 6e 2d 74  rt-time or run-t
7b50: 69 6d 65 2e 0a 0a 20 20 53 65 65 20 74 68 65 20  ime...  See the 
7b60: 5b 74 68 72 65 61 64 69 6e 67 20 6d 6f 64 65 5d  [threading mode]
7b70: 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 66   documentation f
7b80: 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
7b90: 66 6f 72 6d 61 74 69 6f 6e 0a 20 20 6f 6e 20 61  formation.  on a
7ba0: 73 70 65 63 74 73 20 6f 66 20 75 73 69 6e 67 20  spects of using 
7bb0: 53 51 4c 69 74 65 20 69 6e 20 61 20 6d 75 6c 74  SQLite in a mult
7bc0: 69 74 68 72 65 61 64 65 64 20 65 6e 76 69 72 6f  ithreaded enviro
7bd0: 6e 6d 65 6e 74 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c  nment..}..COMPIL
7be0: 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45  E_OPTION {SQLITE
7bf0: 5f 54 45 4d 50 5f 53 54 4f 52 45 3d 3c 69 3e 26  _TEMP_STORE=<i>&
7c00: 6c 74 3b 30 20 74 68 72 6f 75 67 68 20 33 26 67  lt;0 through 3&g
7c10: 74 3b 3c 2f 69 3e 7d 20 7b 0a 20 20 54 68 69 73  t;</i>} {.  This
7c20: 20 6f 70 74 69 6f 6e 20 63 6f 6e 74 72 6f 6c 73   option controls
7c30: 20 77 68 65 74 68 65 72 20 74 65 6d 70 6f 72 61   whether tempora
7c40: 72 79 20 66 69 6c 65 73 20 61 72 65 20 73 74 6f  ry files are sto
7c50: 72 65 64 20 6f 6e 20 64 69 73 6b 20 6f 72 0a 20  red on disk or. 
7c60: 20 69 6e 20 6d 65 6d 6f 72 79 2e 20 20 54 68 65   in memory.  The
7c70: 20 6d 65 61 6e 69 6e 67 73 20 66 6f 72 20 76 61   meanings for va
7c80: 72 69 6f 75 73 20 73 65 74 74 69 6e 67 73 20 6f  rious settings o
7c90: 66 20 74 68 69 73 20 63 6f 6d 70 69 6c 65 2d 74  f this compile-t
7ca0: 69 6d 65 0a 20 20 6f 70 74 69 6f 6e 20 61 72 65  ime.  option are
7cb0: 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 20 20   as follows:..  
7cc0: 3c 74 61 62 6c 65 20 63 65 6c 6c 70 61 64 64 69  <table cellpaddi
7cd0: 6e 67 3d 22 32 22 20 62 6f 72 64 65 72 3d 22 31  ng="2" border="1
7ce0: 22 3e 0a 20 20 3c 74 72 3e 3c 74 68 3e 53 51 4c  ">.  <tr><th>SQL
7cf0: 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 3c 2f  ITE_TEMP_STORE</
7d00: 74 68 3e 3c 74 68 3e 4d 65 61 6e 69 6e 67 3c 2f  th><th>Meaning</
7d10: 74 68 3e 3c 2f 74 72 3e 0a 20 20 3c 74 72 3e 3c  th></tr>.  <tr><
7d20: 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  td align="center
7d30: 22 3e 30 3c 2f 74 64 3e 3c 74 64 3e 41 6c 77 61  ">0</td><td>Alwa
7d40: 79 73 20 75 73 65 20 74 65 6d 70 6f 72 61 72 79  ys use temporary
7d50: 20 66 69 6c 65 73 3c 2f 74 64 3e 3c 2f 74 72 3e   files</td></tr>
7d60: 0a 20 20 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e  .  <tr><td align
7d70: 3d 22 63 65 6e 74 65 72 22 3e 31 3c 2f 74 64 3e  ="center">1</td>
7d80: 3c 74 64 3e 55 73 65 20 66 69 6c 65 73 20 62 79  <td>Use files by
7d90: 20 64 65 66 61 75 6c 74 20 62 75 74 20 61 6c 6c   default but all
7da0: 6f 77 20 74 68 65 0a 20 20 5b 50 52 41 47 4d 41  ow the.  [PRAGMA
7db0: 20 74 65 6d 70 5f 73 74 6f 72 65 5d 20 63 6f 6d   temp_store] com
7dc0: 6d 61 6e 64 20 74 6f 20 6f 76 65 72 72 69 64 65  mand to override
7dd0: 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 20 20 3c 74 72  </td></tr>.  <tr
7de0: 3e 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74  ><td align="cent
7df0: 65 72 22 3e 32 3c 2f 74 64 3e 3c 74 64 3e 55 73  er">2</td><td>Us
7e00: 65 20 6d 65 6d 6f 72 79 20 62 79 20 64 65 66 61  e memory by defa
7e10: 75 6c 74 20 62 75 74 20 61 6c 6c 6f 77 20 74 68  ult but allow th
7e20: 65 0a 20 20 5b 50 52 41 47 4d 41 20 74 65 6d 70  e.  [PRAGMA temp
7e30: 5f 73 74 6f 72 65 5d 20 63 6f 6d 6d 61 6e 64 20  _store] command 
7e40: 74 6f 20 6f 76 65 72 72 69 64 65 3c 2f 74 64 3e  to override</td>
7e50: 3c 2f 74 72 3e 0a 20 20 3c 74 72 3e 3c 74 64 20  </tr>.  <tr><td 
7e60: 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 33  align="center">3
7e70: 3c 2f 74 64 3e 3c 74 64 3e 41 6c 77 61 79 73 20  </td><td>Always 
7e80: 75 73 65 20 6d 65 6d 6f 72 79 3c 2f 74 64 3e 3c  use memory</td><
7e90: 2f 74 72 3e 0a 20 20 3c 2f 74 61 62 6c 65 3e 0a  /tr>.  </table>.
7ea0: 0a 20 20 54 68 65 20 64 65 66 61 75 6c 74 20 73  .  The default s
7eb0: 65 74 74 69 6e 67 20 69 73 20 31 2e 20 20 0a 20  etting is 1.  . 
7ec0: 20 41 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   Additional info
7ed0: 72 6d 61 74 69 6f 6e 20 63 61 6e 20 62 65 20 66  rmation can be f
7ee0: 6f 75 6e 64 20 69 6e 20 5b 74 65 6d 70 73 74 6f  ound in [tempsto
7ef0: 72 65 20 7c 20 74 65 6d 70 66 69 6c 65 73 2e 68  re | tempfiles.h
7f00: 74 6d 6c 5d 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45  tml]..}..COMPILE
7f10: 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f  _OPTION {SQLITE_
7f20: 54 52 41 43 45 5f 53 49 5a 45 5f 4c 49 4d 49 54  TRACE_SIZE_LIMIT
7f30: 3d 3c 69 3e 4e 3c 2f 69 3e 7d 20 7b 0a 20 20 49  =<i>N</i>} {.  I
7f40: 66 20 74 68 69 73 20 6d 61 63 72 6f 20 69 73 20  f this macro is 
7f50: 64 65 66 69 6e 65 64 20 74 6f 20 61 20 70 6f 73  defined to a pos
7f60: 69 74 69 76 65 20 69 6e 74 65 67 65 72 20 3c 69  itive integer <i
7f70: 3e 4e 3c 2f 69 3e 2c 20 74 68 65 6e 20 74 68 65  >N</i>, then the
7f80: 20 6c 65 6e 67 74 68 20 6f 66 0a 20 20 73 74 72   length of.  str
7f90: 69 6e 67 73 20 61 6e 64 20 42 4c 4f 42 20 74 68  ings and BLOB th
7fa0: 61 74 20 61 72 65 20 65 78 70 61 6e 64 65 64 20  at are expanded 
7fb0: 69 6e 74 6f 20 70 61 72 61 6d 65 74 65 72 73 20  into parameters 
7fc0: 69 6e 20 74 68 65 20 6f 75 74 70 75 74 20 6f 66  in the output of
7fd0: 0a 20 20 5b 73 71 6c 69 74 65 33 5f 74 72 61 63  .  [sqlite3_trac
7fe0: 65 28 29 5d 20 69 73 20 6c 69 6d 69 74 65 64 20  e()] is limited 
7ff0: 74 6f 20 3c 69 3e 4e 3c 2f 69 3e 20 62 79 74 65  to <i>N</i> byte
8000: 73 2e 20 20 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f  s.  .}..COMPILE_
8010: 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 55  OPTION {SQLITE_U
8020: 53 45 5f 55 52 49 7d 20 7b 0a 20 20 54 68 69 73  SE_URI} {.  This
8030: 20 6f 70 74 69 6f 6e 20 63 61 75 73 65 73 20 74   option causes t
8040: 68 65 20 5b 55 52 49 20 66 69 6c 65 6e 61 6d 65  he [URI filename
8050: 5d 20 70 72 6f 63 65 73 73 20 6c 6f 67 69 63 20  ] process logic 
8060: 74 6f 20 62 65 20 65 6e 61 62 6c 65 64 20 62 79  to be enabled by
8070: 20 0a 20 20 64 65 66 61 75 6c 74 2e 20 20 0a 7d   .  default.  .}
8080: 0a 0a 3c 2f 74 63 6c 3e 0a 0a 3c 61 20 6e 61 6d  ..</tcl>..<a nam
8090: 65 3d 22 65 6e 61 62 6c 65 66 65 61 74 75 72 65  e="enablefeature
80a0: 73 22 3e 3c 2f 61 3e 0a 3c 68 31 3e 20 4f 70 74  s"></a>.<h1> Opt
80b0: 69 6f 6e 73 20 54 6f 20 45 6e 61 62 6c 65 20 46  ions To Enable F
80c0: 65 61 74 75 72 65 73 20 4e 6f 72 6d 61 6c 6c 79  eatures Normally
80d0: 20 54 75 72 6e 65 64 20 4f 66 66 3c 2f 68 31 3e   Turned Off</h1>
80e0: 0a 0a 3c 74 63 6c 3e 0a 43 4f 4d 50 49 4c 45 5f  ..<tcl>.COMPILE_
80f0: 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 41  OPTION {SQLITE_A
8100: 4c 4c 4f 57 5f 55 52 49 5f 41 55 54 48 4f 52 49  LLOW_URI_AUTHORI
8110: 54 59 7d 20 7b 0a 20 20 5b 55 52 49 20 66 69 6c  TY} {.  [URI fil
8120: 65 6e 61 6d 65 73 5d 20 6e 6f 72 6d 61 6c 6c 79  enames] normally
8130: 20 74 68 72 6f 77 73 20 61 6e 20 65 72 72 6f 72   throws an error
8140: 20 69 66 20 74 68 65 20 61 75 74 68 6f 72 69 74   if the authorit
8150: 79 20 73 65 63 74 69 6f 6e 20 69 73 0a 20 20 6e  y section is.  n
8160: 6f 74 20 65 69 74 68 65 72 20 65 6d 70 74 79 20  ot either empty 
8170: 6f 72 20 22 6c 6f 63 61 6c 68 6f 73 74 22 2e 20  or "localhost". 
8180: 20 48 6f 77 65 76 65 72 2c 20 69 66 20 53 51 4c   However, if SQL
8190: 69 74 65 20 69 73 20 63 6f 6d 70 69 6c 65 64 20  ite is compiled 
81a0: 77 69 74 68 0a 20 20 74 68 65 20 53 51 4c 49 54  with.  the SQLIT
81b0: 45 5f 41 4c 4c 4f 57 5f 55 52 49 5f 41 55 54 48  E_ALLOW_URI_AUTH
81c0: 4f 52 49 54 59 20 63 6f 6d 70 69 6c 65 2d 74 69  ORITY compile-ti
81d0: 6d 65 20 6f 70 74 69 6f 6e 2c 20 74 68 65 6e 20  me option, then 
81e0: 74 68 65 20 55 52 49 20 69 73 0a 20 20 63 6f 6e  the URI is.  con
81f0: 76 65 72 74 65 64 20 69 6e 74 6f 20 61 20 55 6e  verted into a Un
8200: 69 66 6f 72 6d 20 4e 61 6d 69 6e 67 20 43 6f 6e  iform Naming Con
8210: 76 65 6e 74 69 6f 6e 20 28 55 4e 43 29 20 66 69  vention (UNC) fi
8220: 6c 65 6e 61 6d 65 20 61 6e 64 20 70 61 73 73 65  lename and passe
8230: 64 0a 20 20 64 6f 77 6e 20 74 6f 20 74 68 65 20  d.  down to the 
8240: 75 6e 64 65 72 6c 79 69 6e 67 20 6f 70 65 72 61  underlying opera
8250: 74 69 6e 67 20 73 79 73 74 65 6d 20 74 68 61 74  ting system that
8260: 20 77 61 79 2e 20 20 0a 20 20 3c 70 3e 0a 20 20   way.  .  <p>.  
8270: 53 6f 6d 65 20 66 75 74 75 72 65 20 76 65 72 73  Some future vers
8280: 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 6d  ions of SQLite m
8290: 61 79 20 63 68 61 6e 67 65 20 74 6f 20 65 6e 61  ay change to ena
82a0: 62 6c 65 20 74 68 69 73 20 66 65 61 74 75 72 65  ble this feature
82b0: 0a 20 20 62 79 20 64 65 66 61 75 6c 74 2e 0a 7d  .  by default..}
82c0: 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20  .COMPILE_OPTION 
82d0: 7b 53 51 4c 49 54 45 5f 41 4c 4c 4f 57 5f 43 4f  {SQLITE_ALLOW_CO
82e0: 56 45 52 49 4e 47 5f 49 4e 44 45 58 5f 53 43 41  VERING_INDEX_SCA
82f0: 4e 3d 3c 69 3e 26 6c 74 3b 30 20 6f 72 20 31 26  N=<i>&lt;0 or 1&
8300: 67 74 3b 3c 2f 69 3e 7d 20 7b 0a 20 20 54 68 69  gt;</i>} {.  Thi
8310: 73 20 43 2d 70 72 65 70 72 6f 63 65 73 73 20 6d  s C-preprocess m
8320: 61 63 72 6f 20 64 65 74 65 72 6d 69 6e 65 73 20  acro determines 
8330: 74 68 65 20 64 65 66 61 75 6c 74 20 73 65 74 74  the default sett
8340: 69 6e 67 20 6f 66 20 74 68 65 0a 20 20 5b 53 51  ing of the.  [SQ
8350: 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 43 4f 56 45  LITE_CONFIG_COVE
8360: 52 49 4e 47 5f 49 4e 44 45 58 5f 53 43 41 4e 5d  RING_INDEX_SCAN]
8370: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 73   configuration s
8380: 65 74 74 69 6e 67 2e 20 20 49 74 20 64 65 66 61  etting.  It defa
8390: 75 6c 74 73 0a 20 20 74 6f 20 31 20 28 6f 6e 29  ults.  to 1 (on)
83a0: 20 77 68 69 63 68 20 6d 65 61 6e 73 20 74 68 61   which means tha
83b0: 74 20 63 6f 76 65 72 69 6e 67 20 69 6e 64 69 63  t covering indic
83c0: 65 73 20 61 72 65 20 75 73 65 64 20 66 6f 72 20  es are used for 
83d0: 66 75 6c 6c 20 74 61 62 6c 65 0a 20 20 73 63 61  full table.  sca
83e0: 6e 73 20 77 68 65 72 65 20 70 6f 73 73 69 62 6c  ns where possibl
83f0: 65 2c 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 72  e, in order to r
8400: 65 64 75 63 65 20 49 2f 4f 20 61 6e 64 20 69 6d  educe I/O and im
8410: 70 72 6f 76 65 20 70 65 72 66 6f 72 6d 61 6e 63  prove performanc
8420: 65 2e 0a 20 20 48 6f 77 65 76 65 72 2c 20 74 68  e..  However, th
8430: 65 20 75 73 65 20 6f 66 20 61 20 63 6f 76 65 72  e use of a cover
8440: 69 6e 67 20 69 6e 64 65 78 20 66 6f 72 20 61 20  ing index for a 
8450: 66 75 6c 6c 20 73 63 61 6e 20 77 69 6c 6c 20 63  full scan will c
8460: 61 75 73 65 20 72 65 73 75 6c 74 73 0a 20 20 74  ause results.  t
8470: 6f 20 61 70 70 65 61 72 20 69 6e 20 61 20 64 69  o appear in a di
8480: 66 66 65 72 65 6e 74 20 6f 72 64 65 72 20 66 72  fferent order fr
8490: 6f 6d 20 6c 65 67 61 63 79 2c 20 77 68 69 63 68  om legacy, which
84a0: 20 63 6f 75 6c 64 20 63 61 75 73 65 20 73 6f 6d   could cause som
84b0: 65 0a 20 20 28 69 6e 63 6f 72 72 65 63 74 6c 79  e.  (incorrectly
84c0: 2d 63 6f 64 65 64 29 20 6c 65 67 61 63 79 20 61  -coded) legacy a
84d0: 70 70 6c 69 63 61 74 69 6f 6e 73 20 74 6f 20 62  pplications to b
84e0: 72 65 61 6b 2e 20 20 48 65 6e 63 65 2c 20 74 68  reak.  Hence, th
84f0: 65 20 63 6f 76 65 72 69 6e 67 0a 20 20 69 6e 64  e covering.  ind
8500: 65 78 20 73 63 61 6e 20 6f 70 74 69 6f 6e 20 63  ex scan option c
8510: 61 6e 20 62 65 20 64 69 73 61 62 6c 65 64 20 61  an be disabled a
8520: 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f  t compile-time o
8530: 6e 20 73 79 73 74 65 6d 73 20 74 68 61 74 20 77  n systems that w
8540: 68 61 74 0a 20 20 74 6f 20 6d 69 6e 69 6d 69 7a  hat.  to minimiz
8550: 65 20 74 68 65 69 72 20 72 69 73 6b 20 6f 66 20  e their risk of 
8560: 65 78 70 6f 73 69 6e 67 20 65 72 72 6f 72 73 20  exposing errors 
8570: 69 6e 20 6c 65 67 61 63 79 20 61 70 70 6c 69 63  in legacy applic
8580: 61 74 69 6f 6e 73 2e 0a 7d 0a 0a 43 4f 4d 50 49  ations..}..COMPI
8590: 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54  LE_OPTION {SQLIT
85a0: 45 5f 45 4e 41 42 4c 45 5f 38 5f 33 5f 4e 41 4d  E_ENABLE_8_3_NAM
85b0: 45 53 3d 3c 69 3e 26 6c 74 3b 31 20 6f 72 20 32  ES=<i>&lt;1 or 2
85c0: 26 67 74 3b 3c 2f 69 3e 7d 20 7b 0a 20 20 49 66  &gt;</i>} {.  If
85d0: 20 74 68 69 73 20 43 2d 70 72 65 70 72 6f 63 65   this C-preproce
85e0: 73 73 6f 72 20 6d 61 63 72 6f 20 69 73 20 64 65  ssor macro is de
85f0: 66 69 6e 65 64 2c 20 74 68 65 6e 20 65 78 74 72  fined, then extr
8600: 61 20 63 6f 64 65 20 69 73 0a 20 20 69 6e 63 6c  a code is.  incl
8610: 75 64 65 64 20 74 68 61 74 20 61 6c 6c 6f 77 73  uded that allows
8620: 20 53 51 4c 69 74 65 20 74 6f 20 66 75 6e 63 74   SQLite to funct
8630: 69 6f 6e 20 6f 6e 20 61 20 66 69 6c 65 73 79 73  ion on a filesys
8640: 74 65 6d 20 74 68 61 74 0a 20 20 6f 6e 6c 79 20  tem that.  only 
8650: 73 75 70 70 6f 72 74 20 38 2b 33 20 66 69 6c 65  support 8+3 file
8660: 6e 61 6d 65 73 2e 20 20 49 66 20 74 68 65 20 76  names.  If the v
8670: 61 6c 75 65 20 6f 66 20 74 68 69 73 20 6d 61 63  alue of this mac
8680: 72 6f 20 69 73 20 31 2c 0a 20 20 74 68 65 6e 20  ro is 1,.  then 
8690: 74 68 65 20 64 65 66 61 75 6c 74 20 62 65 68 61  the default beha
86a0: 76 69 6f 72 20 69 73 20 74 6f 20 63 6f 6e 74 69  vior is to conti
86b0: 6e 75 65 20 74 6f 20 75 73 65 20 6c 6f 6e 67 20  nue to use long 
86c0: 66 69 6c 65 6e 61 6d 65 73 20 61 6e 64 0a 20 20  filenames and.  
86d0: 74 6f 20 6f 6e 6c 79 20 75 73 65 20 38 2b 33 20  to only use 8+3 
86e0: 66 69 6c 65 6e 61 6d 65 73 20 69 66 20 74 68 65  filenames if the
86f0: 20 0a 20 20 64 61 74 61 62 61 73 65 20 63 6f 6e   .  database con
8700: 6e 65 63 74 69 6f 6e 20 69 73 20 6f 70 65 6e 65  nection is opene
8710: 64 20 75 73 69 6e 67 20 5b 55 52 49 20 66 69 6c  d using [URI fil
8720: 65 6e 61 6d 65 73 5d 20 77 69 74 68 0a 20 20 74  enames] with.  t
8730: 68 65 20 22 3c 74 74 3e 38 5f 33 5f 6e 61 6d 65  he "<tt>8_3_name
8740: 73 3d 31 3c 2f 74 74 3e 22 20 71 75 65 72 79 20  s=1</tt>" query 
8750: 70 61 72 61 6d 65 74 65 72 2e 20 20 49 66 20 74  parameter.  If t
8760: 68 65 20 76 61 6c 75 65 20 6f 66 0a 20 20 74 68  he value of.  th
8770: 69 73 20 6d 61 63 72 6f 20 69 73 20 32 2c 20 74  is macro is 2, t
8780: 68 65 6e 20 74 68 65 20 75 73 65 20 6f 66 20 38  hen the use of 8
8790: 2b 33 20 66 69 6c 65 6e 61 6d 65 73 20 62 65 63  +3 filenames bec
87a0: 6f 6d 65 73 20 74 68 65 20 64 65 66 61 75 6c 74  omes the default
87b0: 0a 20 20 62 75 74 20 6d 61 79 20 62 65 20 64 69  .  but may be di
87c0: 73 61 62 6c 65 64 20 6f 6e 20 75 73 69 6e 67 20  sabled on using 
87d0: 74 68 65 20 3c 74 74 3e 38 5f 33 5f 6e 61 6d 65  the <tt>8_3_name
87e0: 73 3d 30 3c 2f 74 74 3e 20 71 75 65 72 79 20 70  s=0</tt> query p
87f0: 61 72 61 6d 65 74 65 72 2e 0a 7d 0a 0a 43 4f 4d  arameter..}..COM
8800: 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c  PILE_OPTION {SQL
8810: 49 54 45 5f 45 4e 41 42 4c 45 5f 41 50 49 5f 41  ITE_ENABLE_API_A
8820: 52 4d 4f 52 7d 20 7b 0a 20 20 57 68 65 6e 20 64  RMOR} {.  When d
8830: 65 66 69 6e 65 64 2c 20 74 68 69 73 20 43 2d 70  efined, this C-p
8840: 72 65 70 72 6f 63 65 73 73 6f 72 20 6d 61 63 72  reprocessor macr
8850: 6f 20 61 63 74 69 76 61 74 65 73 20 65 78 74 72  o activates extr
8860: 61 20 63 6f 64 65 20 74 68 61 74 0a 20 20 61 74  a code that.  at
8870: 74 65 6d 70 74 73 20 74 6f 20 64 65 74 65 63 74  tempts to detect
8880: 20 6d 69 73 75 73 65 20 6f 66 20 74 68 65 20 53   misuse of the S
8890: 51 4c 69 74 65 20 41 50 49 2c 20 73 75 63 68 20  QLite API, such 
88a0: 61 73 20 70 61 73 73 69 6e 67 20 69 6e 20 4e 55  as passing in NU
88b0: 4c 4c 0a 20 20 70 6f 69 6e 74 65 72 73 20 74 6f  LL.  pointers to
88c0: 20 72 65 71 75 69 72 65 64 20 70 61 72 61 6d 65   required parame
88d0: 74 65 72 73 20 6f 72 20 75 73 69 6e 67 20 6f 62  ters or using ob
88e0: 6a 65 63 74 73 20 61 66 74 65 72 20 74 68 65 79  jects after they
88f0: 20 68 61 76 65 20 62 65 65 6e 0a 20 20 64 65 73   have been.  des
8900: 74 72 6f 79 65 64 2e 0a 7d 0a 0a 43 4f 4d 50 49  troyed..}..COMPI
8910: 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54  LE_OPTION {SQLIT
8920: 45 5f 45 4e 41 42 4c 45 5f 41 54 4f 4d 49 43 5f  E_ENABLE_ATOMIC_
8930: 57 52 49 54 45 7d 20 7b 0a 20 20 49 66 20 74 68  WRITE} {.  If th
8940: 69 73 20 43 2d 70 72 65 70 72 6f 63 65 73 73 6f  is C-preprocesso
8950: 72 20 6d 61 63 72 6f 20 69 73 20 64 65 66 69 6e  r macro is defin
8960: 65 64 20 61 6e 64 20 69 66 20 74 68 65 0a 20 20  ed and if the.  
8970: 78 44 65 76 69 63 65 43 68 61 72 61 63 74 65 72  xDeviceCharacter
8980: 69 73 74 69 63 73 20 6d 65 74 68 6f 64 20 6f 66  istics method of
8990: 20 5b 73 71 6c 69 74 65 33 5f 69 6f 5f 6d 65 74   [sqlite3_io_met
89a0: 68 6f 64 73 5d 20 6f 62 6a 65 63 74 20 66 6f 72  hods] object for
89b0: 0a 20 20 61 20 64 61 74 61 62 61 73 65 20 66 69  .  a database fi
89c0: 6c 65 20 72 65 70 6f 72 74 73 20 28 76 69 61 20  le reports (via 
89d0: 6f 6e 65 20 6f 66 20 74 68 65 20 5b 53 51 4c 49  one of the [SQLI
89e0: 54 45 5f 49 4f 43 41 50 5f 41 54 4f 4d 49 43 5d  TE_IOCAP_ATOMIC]
89f0: 20 62 69 74 73 29 0a 20 20 74 68 61 74 20 74 68   bits).  that th
8a00: 65 20 66 69 6c 65 73 79 73 74 65 6d 20 73 75 70  e filesystem sup
8a10: 70 6f 72 74 73 20 61 74 6f 6d 69 63 20 77 72 69  ports atomic wri
8a20: 74 65 73 20 61 6e 64 20 69 66 20 61 20 74 72 61  tes and if a tra
8a30: 6e 73 61 63 74 69 6f 6e 0a 20 20 69 6e 76 6f 6c  nsaction.  invol
8a40: 76 65 73 20 61 20 63 68 61 6e 67 65 20 74 6f 20  ves a change to 
8a50: 6f 6e 6c 79 20 61 20 73 69 6e 67 6c 65 20 70 61  only a single pa
8a60: 67 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ge of the databa
8a70: 73 65 20 66 69 6c 65 2c 0a 20 20 74 68 65 6e 20  se file,.  then 
8a80: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
8a90: 63 6f 6d 6d 69 74 73 20 77 69 74 68 20 6a 75 73  commits with jus
8aa0: 74 20 61 20 73 69 6e 67 6c 65 20 77 72 69 74 65  t a single write
8ab0: 20 72 65 71 75 65 73 74 20 6f 66 0a 20 20 61 20   request of.  a 
8ac0: 73 69 6e 67 6c 65 20 70 61 67 65 20 6f 66 20 74  single page of t
8ad0: 68 65 20 64 61 74 61 62 61 73 65 20 61 6e 64 20  he database and 
8ae0: 6e 6f 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72  no rollback jour
8af0: 6e 61 6c 20 69 73 20 63 72 65 61 74 65 64 0a 20  nal is created. 
8b00: 20 6f 72 20 77 72 69 74 74 65 6e 2e 20 20 4f 6e   or written.  On
8b10: 20 66 69 6c 65 73 79 73 74 65 6d 73 20 74 68 61   filesystems tha
8b20: 74 20 73 75 70 70 6f 72 74 20 61 74 6f 6d 69 63  t support atomic
8b30: 20 77 72 69 74 65 73 2c 20 74 68 69 73 0a 20 20   writes, this.  
8b40: 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 63 61 6e  optimization can
8b50: 20 72 65 73 75 6c 74 20 69 6e 20 73 69 67 6e 69   result in signi
8b60: 66 69 63 61 6e 74 20 73 70 65 65 64 20 69 6d 70  ficant speed imp
8b70: 72 6f 76 65 6d 65 6e 74 73 20 66 6f 72 0a 20 20  rovements for.  
8b80: 73 6d 61 6c 6c 20 75 70 64 61 74 65 73 2e 20 20  small updates.  
8b90: 48 6f 77 65 76 65 72 2c 20 66 65 77 20 66 69 6c  However, few fil
8ba0: 65 73 79 73 74 65 6d 73 20 73 75 70 70 6f 72 74  esystems support
8bb0: 20 74 68 69 73 20 63 61 70 61 62 69 6c 69 74 79   this capability
8bc0: 0a 20 20 61 6e 64 20 74 68 65 20 63 6f 64 65 20  .  and the code 
8bd0: 70 61 74 68 73 20 74 68 61 74 20 63 68 65 63 6b  paths that check
8be0: 20 66 6f 72 20 74 68 69 73 20 63 61 70 61 62 69   for this capabi
8bf0: 6c 69 74 79 20 73 6c 6f 77 20 64 6f 77 6e 20 77  lity slow down w
8c00: 72 69 74 65 0a 20 20 70 65 72 66 6f 72 6d 61 6e  rite.  performan
8c10: 63 65 20 6f 6e 20 73 79 73 74 65 6d 73 20 74 68  ce on systems th
8c20: 61 74 20 6c 61 63 6b 20 61 74 6f 6d 69 63 20 77  at lack atomic w
8c30: 72 69 74 65 20 63 61 70 61 62 69 6c 69 74 79 2c  rite capability,
8c40: 20 73 6f 20 74 68 69 73 0a 20 20 66 65 61 74 75   so this.  featu
8c50: 72 65 20 69 73 20 64 69 73 61 62 6c 65 64 20 62  re is disabled b
8c60: 79 20 64 65 66 61 75 6c 74 2e 0a 7d 0a 0a 43 4f  y default..}..CO
8c70: 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51  MPILE_OPTION {SQ
8c80: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 42 41 54 43  LITE_ENABLE_BATC
8c90: 48 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45 7d 20  H_ATOMIC_WRITE} 
8ca0: 7b 0a 20 20 54 68 69 73 20 63 6f 6d 70 69 6c 65  {.  This compile
8cb0: 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 65 6e 61  -time option ena
8cc0: 62 6c 65 73 20 53 51 4c 69 74 65 20 74 6f 20 74  bles SQLite to t
8cd0: 61 6b 65 20 61 64 76 61 6e 74 61 67 65 20 62 61  ake advantage ba
8ce0: 74 63 68 0a 20 20 61 74 6f 6d 69 63 20 77 72 69  tch.  atomic wri
8cf0: 74 65 20 63 61 70 61 62 69 6c 69 74 69 65 73 20  te capabilities 
8d00: 69 6e 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e  in the underlyin
8d10: 67 20 66 69 6c 65 73 79 73 74 65 6d 2e 20 20 41  g filesystem.  A
8d20: 73 20 6f 66 0a 20 20 53 51 4c 69 74 65 20 76 65  s of.  SQLite ve
8d30: 72 73 69 6f 6e 20 33 2e 32 31 2e 30 20 28 5b 64  rsion 3.21.0 ([d
8d40: 61 74 65 6f 66 3a 33 2e 32 31 2e 30 5d 29 20 74  ateof:3.21.0]) t
8d50: 68 69 73 20 69 73 20 6f 6e 6c 79 20 73 75 70 70  his is only supp
8d60: 6f 72 74 65 64 20 6f 6e 0a 20 20 5b 68 74 74 70  orted on.  [http
8d70: 73 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61  s://en.wikipedia
8d80: 2e 6f 72 67 2f 77 69 6b 69 2f 46 32 46 53 7c 46  .org/wiki/F2FS|F
8d90: 32 46 53 5d 2e 20 20 48 6f 77 65 76 65 72 2c 20  2FS].  However, 
8da0: 74 68 65 20 69 6e 74 65 72 66 61 63 65 0a 20 20  the interface.  
8db0: 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 67  is implemented g
8dc0: 65 6e 65 72 69 63 61 6c 6c 79 2c 20 75 73 69 6e  enerically, usin
8dd0: 67 20 5b 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f  g [sqlite3_file_
8de0: 63 6f 6e 74 72 6f 6c 28 29 5d 20 77 69 74 68 0a  control()] with.
8df0: 20 20 5b 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f    [SQLITE_FCNTL_
8e00: 42 45 47 49 4e 5f 41 54 4f 4d 49 43 5f 57 52 49  BEGIN_ATOMIC_WRI
8e10: 54 45 5d 20 61 6e 64 20 5b 53 51 4c 49 54 45 5f  TE] and [SQLITE_
8e20: 46 43 4e 54 4c 5f 43 4f 4d 4d 49 54 5f 41 54 4f  FCNTL_COMMIT_ATO
8e30: 4d 49 43 5f 57 52 49 54 45 5d 0a 20 20 73 6f 20  MIC_WRITE].  so 
8e40: 74 68 65 20 63 61 70 61 62 69 6c 69 74 79 20 63  the capability c
8e50: 61 6e 20 62 65 20 61 64 64 65 64 20 74 6f 20 6f  an be added to o
8e60: 74 68 65 72 20 66 69 6c 65 73 79 73 74 65 6d 20  ther filesystem 
8e70: 74 69 6d 65 73 20 69 6e 20 74 68 65 0a 20 20 66  times in the.  f
8e80: 75 74 75 72 65 2e 20 20 57 68 65 6e 20 74 68 69  uture.  When thi
8e90: 73 20 6f 70 74 69 6f 6e 20 69 73 20 65 6e 61 62  s option is enab
8ea0: 6c 65 64 2c 20 53 51 4c 69 74 65 20 61 75 74 6f  led, SQLite auto
8eb0: 6d 61 74 69 63 61 6c 6c 79 20 64 65 74 65 63 74  matically detect
8ec0: 73 0a 20 20 74 68 61 74 20 74 68 65 20 75 6e 64  s.  that the und
8ed0: 65 72 6c 79 69 6e 67 20 66 69 6c 65 73 79 73 74  erlying filesyst
8ee0: 65 6d 20 73 75 70 70 6f 72 74 73 20 62 61 74 63  em supports batc
8ef0: 68 20 61 74 6f 6d 69 63 20 77 72 69 74 65 73 2c  h atomic writes,
8f00: 20 61 6e 64 0a 20 20 77 68 65 6e 20 69 74 20 64   and.  when it d
8f10: 6f 65 73 20 73 6f 20 69 74 20 61 76 6f 69 64 73  oes so it avoids
8f20: 20 77 72 69 74 69 6e 67 20 74 68 65 20 5b 72 6f   writing the [ro
8f30: 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 5d 20  llback journal] 
8f40: 66 6f 72 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a  for transaction.
8f50: 20 20 63 6f 6e 74 72 6f 6c 2e 20 20 54 68 69 73    control.  This
8f60: 20 63 61 6e 20 6d 61 6b 65 20 74 72 61 6e 73 61   can make transa
8f70: 63 74 69 6f 6e 73 20 6f 76 65 72 20 74 77 69 63  ctions over twic
8f80: 65 20 61 73 20 66 61 73 74 2c 20 77 68 69 6c 65  e as fast, while
8f90: 0a 20 20 73 69 6d 75 6c 74 61 6e 65 6f 75 73 6c  .  simultaneousl
8fa0: 79 20 72 65 64 75 63 69 6e 67 20 77 65 61 72 20  y reducing wear 
8fb0: 6f 6e 20 53 53 44 20 73 74 6f 72 61 67 65 20 64  on SSD storage d
8fc0: 65 76 69 63 65 73 2e 0a 3c 70 3e 0a 20 20 46 75  evices..<p>.  Fu
8fd0: 74 75 72 65 20 76 65 72 73 69 6f 6e 73 20 6f 66  ture versions of
8fe0: 20 53 51 4c 69 74 65 20 6d 69 67 68 74 20 65 6e   SQLite might en
8ff0: 61 62 6c 65 20 74 68 65 20 62 61 74 63 68 2d 61  able the batch-a
9000: 74 6f 6d 69 63 2d 77 72 69 74 65 0a 20 20 63 61  tomic-write.  ca
9010: 70 61 62 69 6c 69 74 79 20 62 79 20 64 65 66 61  pability by defa
9020: 75 6c 74 2c 20 61 74 20 77 68 69 63 68 20 70 6f  ult, at which po
9030: 69 6e 74 20 74 68 69 73 20 63 6f 6d 70 69 6c 65  int this compile
9040: 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 0a 20 20 77  -time option.  w
9050: 69 6c 6c 20 62 65 63 6f 6d 65 20 73 75 70 65 72  ill become super
9060: 66 6c 75 6f 75 73 2e 0a 7d 0a 0a 43 4f 4d 50 49  fluous..}..COMPI
9070: 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54  LE_OPTION {SQLIT
9080: 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f  E_ENABLE_COLUMN_
9090: 4d 45 54 41 44 41 54 41 7d 20 7b 0a 20 20 57 68  METADATA} {.  Wh
90a0: 65 6e 20 74 68 69 73 20 43 2d 70 72 65 70 72 6f  en this C-prepro
90b0: 63 65 73 73 6f 72 20 6d 61 63 72 6f 20 69 73 20  cessor macro is 
90c0: 64 65 66 69 6e 65 64 2c 20 53 51 4c 69 74 65 20  defined, SQLite 
90d0: 69 6e 63 6c 75 64 65 73 20 73 6f 6d 65 0a 20 20  includes some.  
90e0: 61 64 64 69 74 69 6f 6e 61 6c 20 41 50 49 73 20  additional APIs 
90f0: 74 68 61 74 20 70 72 6f 76 69 64 65 20 63 6f 6e  that provide con
9100: 76 65 6e 69 65 6e 74 20 61 63 63 65 73 73 20 74  venient access t
9110: 6f 20 6d 65 74 61 2d 64 61 74 61 20 61 62 6f 75  o meta-data abou
9120: 74 0a 20 20 74 61 62 6c 65 73 20 61 6e 64 20 71  t.  tables and q
9130: 75 65 72 69 65 73 2e 20 20 54 68 65 20 41 50 49  ueries.  The API
9140: 73 20 74 68 61 74 20 61 72 65 20 65 6e 61 62 6c  s that are enabl
9150: 65 64 20 62 79 20 74 68 69 73 20 6f 70 74 69 6f  ed by this optio
9160: 6e 20 61 72 65 3a 0a 0a 20 20 3c 75 6c 3e 0a 20  n are:..  <ul>. 
9170: 20 3c 6c 69 3e 20 5b 73 71 6c 69 74 65 33 5f 63   <li> [sqlite3_c
9180: 6f 6c 75 6d 6e 5f 64 61 74 61 62 61 73 65 5f 6e  olumn_database_n
9190: 61 6d 65 28 29 5d 20 3c 2f 6c 69 3e 0a 20 20 3c  ame()] </li>.  <
91a0: 6c 69 3e 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c  li> [sqlite3_col
91b0: 75 6d 6e 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d  umn_database_nam
91c0: 65 31 36 28 29 5d 20 3c 2f 6c 69 3e 0a 20 20 3c  e16()] </li>.  <
91d0: 6c 69 3e 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c  li> [sqlite3_col
91e0: 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65 28 29  umn_table_name()
91f0: 5d 20 3c 2f 6c 69 3e 0a 20 20 3c 6c 69 3e 20 5b  ] </li>.  <li> [
9200: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
9210: 61 62 6c 65 5f 6e 61 6d 65 31 36 28 29 5d 20 3c  able_name16()] <
9220: 2f 6c 69 3e 0a 20 20 3c 6c 69 3e 20 5b 73 71 6c  /li>.  <li> [sql
9230: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67  ite3_column_orig
9240: 69 6e 5f 6e 61 6d 65 28 29 5d 20 3c 2f 6c 69 3e  in_name()] </li>
9250: 0a 20 20 3c 6c 69 3e 20 5b 73 71 6c 69 74 65 33  .  <li> [sqlite3
9260: 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e  _column_origin_n
9270: 61 6d 65 31 36 28 29 5d 20 3c 2f 6c 69 3e 0a 20  ame16()] </li>. 
9280: 20 3c 2f 75 6c 3e 0a 7d 0a 0a 43 4f 4d 50 49 4c   </ul>.}..COMPIL
9290: 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45  E_OPTION {SQLITE
92a0: 5f 45 4e 41 42 4c 45 5f 44 42 50 41 47 45 5f 56  _ENABLE_DBPAGE_V
92b0: 54 41 42 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70  TAB} {.  This op
92c0: 74 69 6f 6e 20 65 6e 61 62 6c 65 73 20 74 68 65  tion enables the
92d0: 20 0a 20 20 5b 68 74 74 70 73 3a 2f 2f 73 71 6c   .  [https://sql
92e0: 69 74 65 2e 6f 72 67 2f 73 72 63 2f 66 69 6c 65  ite.org/src/file
92f0: 2f 73 72 63 2f 64 62 70 61 67 65 2e 63 7c 73 71  /src/dbpage.c|sq
9300: 6c 69 74 65 5f 64 62 70 61 67 65 20 76 69 72 74  lite_dbpage virt
9310: 75 61 6c 20 74 61 62 6c 65 5d 2e 0a 7d 0a 0a 43  ual table]..}..C
9320: 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53  OMPILE_OPTION {S
9330: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 44 42 53  QLITE_ENABLE_DBS
9340: 54 41 54 5f 56 54 41 42 7d 20 7b 0a 20 20 54 68  TAT_VTAB} {.  Th
9350: 69 73 20 6f 70 74 69 6f 6e 20 65 6e 61 62 6c 65  is option enable
9360: 73 20 74 68 65 20 5b 64 62 73 74 61 74 20 76 69  s the [dbstat vi
9370: 72 74 75 61 6c 20 74 61 62 6c 65 5d 2e 0a 7d 0a  rtual table]..}.
9380: 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20  .COMPILE_OPTION 
9390: 7b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 44  {SQLITE_ENABLE_D
93a0: 45 53 45 52 49 41 4c 49 5a 45 7d 20 7b 0a 20 20  ESERIALIZE} {.  
93b0: 54 68 69 73 20 6f 70 74 69 6f 6e 20 65 6e 61 62  This option enab
93c0: 6c 65 73 20 74 68 65 20 5b 73 71 6c 69 74 65 33  les the [sqlite3
93d0: 5f 73 65 72 69 61 6c 69 7a 65 28 29 5d 20 61 6e  _serialize()] an
93e0: 64 20 5b 73 71 6c 69 74 65 33 5f 64 65 73 65 72  d [sqlite3_deser
93f0: 69 61 6c 69 7a 65 28 29 5d 0a 20 20 69 6e 74 65  ialize()].  inte
9400: 72 66 61 63 65 73 2e 0a 20 20 3c 70 3e 0a 20 20  rfaces..  <p>.  
9410: 46 75 74 75 72 65 20 72 65 6c 65 61 73 65 73 20  Future releases 
9420: 6f 66 20 53 51 4c 69 74 65 20 6d 69 67 68 74 20  of SQLite might 
9430: 65 6e 61 62 6c 65 20 74 68 6f 73 65 20 69 6e 74  enable those int
9440: 65 72 66 61 63 65 73 20 62 79 20 64 65 66 61 75  erfaces by defau
9450: 6c 74 20 61 6e 64 0a 20 20 69 6e 73 74 65 61 64  lt and.  instead
9460: 20 6f 66 66 65 72 20 61 6e 20 53 51 4c 49 54 45   offer an SQLITE
9470: 5f 4f 4d 49 54 5f 44 45 53 45 52 49 41 4c 49 5a  _OMIT_DESERIALIZ
9480: 45 20 6f 70 74 69 6f 6e 20 74 6f 20 6c 65 61 76  E option to leav
9490: 65 20 74 68 65 6d 20 6f 75 74 2e 0a 7d 0a 0a 43  e them out..}..C
94a0: 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53  OMPILE_OPTION {S
94b0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50  QLITE_ENABLE_EXP
94c0: 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 7d 20 7b  LAIN_COMMENTS} {
94d0: 0a 20 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 61  .  This option a
94e0: 64 64 73 20 65 78 74 72 61 20 6c 6f 67 69 63 20  dds extra logic 
94f0: 74 6f 20 53 51 4c 69 74 65 20 74 68 61 74 20 69  to SQLite that i
9500: 6e 73 65 72 74 73 20 63 6f 6d 6d 65 6e 74 20 74  nserts comment t
9510: 65 78 74 20 69 6e 74 6f 20 74 68 65 0a 20 20 6f  ext into the.  o
9520: 75 74 70 75 74 20 6f 66 20 5b 45 58 50 4c 41 49  utput of [EXPLAI
9530: 4e 5d 2e 20 20 54 68 65 73 65 20 65 78 74 72 61  N].  These extra
9540: 20 63 6f 6d 6d 65 6e 74 73 20 75 73 65 20 65 78   comments use ex
9550: 74 72 61 20 6d 65 6d 6f 72 79 2c 20 74 68 75 73  tra memory, thus
9560: 0a 20 20 6d 61 6b 69 6e 67 20 5b 70 72 65 70 61  .  making [prepa
9570: 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73 5d 20  red statements] 
9580: 6c 61 72 67 65 72 20 61 6e 64 20 76 65 72 79 20  larger and very 
9590: 73 6c 69 67 68 74 6c 79 20 73 6c 6f 77 65 72 2c  slightly slower,
95a0: 20 61 6e 64 20 73 6f 20 74 68 65 79 20 61 72 65   and so they are
95b0: 0a 20 20 74 75 72 6e 65 64 20 6f 66 66 20 62 79  .  turned off by
95c0: 20 64 65 66 61 75 6c 74 20 61 6e 64 20 69 6e 20   default and in 
95d0: 6d 6f 73 74 20 61 70 70 6c 69 63 61 74 69 6f 6e  most application
95e0: 2e 20 20 42 75 74 20 73 6f 6d 65 20 61 70 70 6c  .  But some appl
95f0: 69 63 61 74 69 6f 6e 73 2c 20 73 75 63 68 0a 20  ications, such. 
9600: 20 61 73 20 74 68 65 20 5b 63 6f 6d 6d 61 6e 64   as the [command
9610: 2d 6c 69 6e 65 20 73 68 65 6c 6c 5d 20 66 6f 72  -line shell] for
9620: 20 53 51 4c 69 74 65 2c 20 76 61 6c 75 65 20 63   SQLite, value c
9630: 6c 61 72 69 74 79 20 6f 66 20 45 58 50 4c 41 49  larity of EXPLAI
9640: 4e 20 6f 75 74 70 75 74 0a 20 20 6f 76 65 72 20  N output.  over 
9650: 72 61 77 20 70 65 72 66 6f 72 6d 61 6e 63 65 20  raw performance 
9660: 61 6e 64 20 73 6f 20 74 68 69 73 20 63 6f 6d 70  and so this comp
9670: 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20  ile-time option 
9680: 69 73 20 61 76 61 69 6c 61 62 6c 65 20 74 6f 20  is available to 
9690: 74 68 65 6d 2e 0a 20 20 54 68 65 20 53 51 4c 49  them..  The SQLI
96a0: 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49  TE_ENABLE_EXPLAI
96b0: 4e 5f 43 4f 4d 4d 45 4e 54 53 20 63 6f 6d 70 69  N_COMMENTS compi
96c0: 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69  le-time option i
96d0: 73 20 61 6c 73 6f 20 65 6e 61 62 6c 65 64 0a 20  s also enabled. 
96e0: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 69   automatically i
96f0: 66 20 5b 53 51 4c 49 54 45 5f 44 45 42 55 47 5d  f [SQLITE_DEBUG]
9700: 20 69 73 20 65 6e 61 62 6c 65 64 2e 0a 7d 0a 0a   is enabled..}..
9710: 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20  .COMPILE_OPTION 
9720: 7b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46  {SQLITE_ENABLE_F
9730: 54 53 33 7d 20 7b 0a 20 20 57 68 65 6e 20 74 68  TS3} {.  When th
9740: 69 73 20 6f 70 74 69 6f 6e 20 69 73 20 64 65 66  is option is def
9750: 69 6e 65 64 20 69 6e 20 74 68 65 20 5b 61 6d 61  ined in the [ama
9760: 6c 67 61 6d 61 74 69 6f 6e 5d 2c 20 76 65 72 73  lgamation], vers
9770: 69 6f 6e 20 33 0a 20 20 6f 66 20 74 68 65 20 66  ion 3.  of the f
9780: 75 6c 6c 2d 74 65 78 74 20 73 65 61 72 63 68 20  ull-text search 
9790: 65 6e 67 69 6e 65 20 69 73 20 61 64 64 65 64 20  engine is added 
97a0: 74 6f 20 74 68 65 20 62 75 69 6c 64 20 61 75 74  to the build aut
97b0: 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a 7d 0a 0a 43  omatically..}..C
97c0: 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53  OMPILE_OPTION {S
97d0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
97e0: 33 5f 50 41 52 45 4e 54 48 45 53 49 53 7d 20 7b  3_PARENTHESIS} {
97f0: 0a 20 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 6d  .  This option m
9800: 6f 64 69 66 69 65 73 20 74 68 65 20 71 75 65 72  odifies the quer
9810: 79 20 70 61 74 74 65 72 6e 20 70 61 72 73 65 72  y pattern parser
9820: 20 69 6e 20 46 54 53 33 20 73 75 63 68 20 74 68   in FTS3 such th
9830: 61 74 20 69 74 0a 20 20 73 75 70 70 6f 72 74 73  at it.  supports
9840: 20 6f 70 65 72 61 74 6f 72 73 20 41 4e 44 20 61   operators AND a
9850: 6e 64 20 4e 4f 54 20 28 69 6e 20 61 64 64 69 74  nd NOT (in addit
9860: 69 6f 6e 20 74 6f 20 74 68 65 20 75 73 75 61 6c  ion to the usual
9870: 20 4f 52 20 61 6e 64 20 4e 45 41 52 29 0a 20 20   OR and NEAR).  
9880: 61 6e 64 20 61 6c 73 6f 20 61 6c 6c 6f 77 73 20  and also allows 
9890: 71 75 65 72 79 20 65 78 70 72 65 73 73 69 6f 6e  query expression
98a0: 73 20 74 6f 20 63 6f 6e 74 61 69 6e 20 6e 65 73  s to contain nes
98b0: 74 65 64 20 70 61 72 65 6e 74 68 65 73 69 73 2e  ted parenthesis.
98c0: 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49  .}..COMPILE_OPTI
98d0: 4f 4e 20 7b 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ON {SQLITE_ENABL
98e0: 45 5f 46 54 53 33 5f 54 4f 4b 45 4e 49 5a 45 52  E_FTS3_TOKENIZER
98f0: 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70 74 69 6f  } {.  This optio
9900: 6e 20 65 6e 61 62 6c 65 73 20 74 68 65 20 74 77  n enables the tw
9910: 6f 2d 61 72 67 75 6d 65 6e 74 20 76 65 72 73 69  o-argument versi
9920: 6f 6e 20 6f 66 20 74 68 65 20 5b 66 74 73 33 5f  on of the [fts3_
9930: 74 6f 6b 65 6e 69 7a 65 72 28 29 5d 0a 20 20 69  tokenizer()].  i
9940: 6e 74 65 72 66 61 63 65 2e 20 20 54 68 65 20 73  nterface.  The s
9950: 65 63 6f 6e 64 20 61 72 67 75 6d 65 6e 74 20 74  econd argument t
9960: 6f 20 66 74 73 33 5f 74 6f 6b 65 6e 69 7a 65 72  o fts3_tokenizer
9970: 28 29 20 69 73 20 73 75 70 70 6f 73 65 20 74 6f  () is suppose to
9980: 20 62 65 20 61 0a 20 20 70 6f 69 6e 74 65 72 20   be a.  pointer 
9990: 74 6f 20 61 20 66 75 6e 63 74 69 6f 6e 20 28 65  to a function (e
99a0: 6e 63 6f 64 65 64 20 61 73 20 61 20 42 4c 4f 42  ncoded as a BLOB
99b0: 29 20 74 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74  ) that implement
99c0: 73 20 61 6e 0a 20 20 61 70 70 6c 69 63 61 74 69  s an.  applicati
99d0: 6f 6e 20 64 65 66 69 6e 65 64 20 74 6f 6b 65 6e  on defined token
99e0: 69 7a 65 72 2e 20 20 49 66 20 68 6f 73 74 69 6c  izer.  If hostil
99f0: 65 20 61 63 74 6f 72 73 20 61 72 65 20 61 62 6c  e actors are abl
9a00: 65 20 74 6f 20 72 75 6e 0a 20 20 74 68 65 20 74  e to run.  the t
9a10: 77 6f 2d 61 72 67 75 6d 65 6e 74 20 76 65 72 73  wo-argument vers
9a20: 69 6f 6e 20 6f 66 20 66 74 73 33 5f 74 6f 6b 65  ion of fts3_toke
9a30: 6e 69 7a 65 72 28 29 20 77 69 74 68 20 61 6e 20  nizer() with an 
9a40: 61 72 62 69 74 72 61 72 79 20 73 65 63 6f 6e 64  arbitrary second
9a50: 0a 20 20 61 72 67 75 6d 65 6e 74 2c 20 74 68 65  .  argument, the
9a60: 79 20 63 6f 75 6c 64 20 75 73 65 20 63 72 61 73  y could use cras
9a70: 68 20 6f 72 20 74 61 6b 65 20 63 6f 6e 74 72 6f  h or take contro
9a80: 6c 20 6f 66 20 74 68 65 20 70 72 6f 63 65 73 73  l of the process
9a90: 2e 20 0a 20 20 3c 70 3e 0a 20 20 42 65 63 61 75  . .  <p>.  Becau
9aa0: 73 65 20 6f 66 20 73 65 63 75 72 69 74 79 20 63  se of security c
9ab0: 6f 6e 63 65 72 6e 73 2c 20 74 68 65 20 74 77 6f  oncerns, the two
9ac0: 2d 61 72 67 75 6d 65 6e 74 20 66 74 73 33 5f 74  -argument fts3_t
9ad0: 6f 6b 65 6e 69 7a 65 72 28 29 20 66 65 61 74 75  okenizer() featu
9ae0: 72 65 20 0a 20 20 77 61 73 20 64 69 73 61 62 6c  re .  was disabl
9af0: 65 64 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74  ed beginning wit
9b00: 68 20 5b 56 65 72 73 69 6f 6e 20 33 2e 31 31 2e  h [Version 3.11.
9b10: 30 5d 20 28 5b 64 61 74 65 6f 66 3a 33 2e 31 31  0] ([dateof:3.11
9b20: 2e 30 5d 29 0a 20 20 75 6e 6c 65 73 73 20 74 68  .0]).  unless th
9b30: 69 73 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  is compile-time 
9b40: 6f 70 74 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a  option is used..
9b50: 20 20 5b 56 65 72 73 69 6f 6e 20 33 2e 31 32 2e    [Version 3.12.
9b60: 30 5d 20 28 5b 64 61 74 65 6f 66 3a 33 2e 31 32  0] ([dateof:3.12
9b70: 2e 30 5d 29 20 61 64 64 65 64 20 74 68 65 20 0a  .0]) added the .
9b80: 20 20 5b 73 71 6c 69 74 65 33 5f 64 62 5f 63 6f    [sqlite3_db_co
9b90: 6e 66 69 67 5d 28 64 62 2c 5b 53 51 4c 49 54 45  nfig](db,[SQLITE
9ba0: 5f 44 42 43 4f 4e 46 49 47 5f 45 4e 41 42 4c 45  _DBCONFIG_ENABLE
9bb0: 5f 46 54 53 33 5f 54 4f 4b 45 4e 49 5a 45 52 5d  _FTS3_TOKENIZER]
9bc0: 2c 31 2c 30 29 20 69 6e 74 65 72 66 61 63 65 0a  ,1,0) interface.
9bd0: 20 20 74 68 61 74 20 61 63 74 69 76 61 74 65 73    that activates
9be0: 20 74 68 65 20 74 77 6f 2d 61 72 67 75 6d 65 6e   the two-argumen
9bf0: 74 20 76 65 72 73 69 6f 6e 20 6f 66 20 5b 66 74  t version of [ft
9c00: 73 33 5f 74 6f 6b 65 6e 69 7a 65 72 28 29 5d 0a  s3_tokenizer()].
9c10: 20 20 66 6f 72 20 61 20 73 70 65 63 69 66 69 63    for a specific
9c20: 20 5b 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65   [database conne
9c30: 63 74 69 6f 6e 5d 20 61 74 20 72 75 6e 2d 74 69  ction] at run-ti
9c40: 6d 65 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f  me..}..COMPILE_O
9c50: 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 45 4e  PTION {SQLITE_EN
9c60: 41 42 4c 45 5f 46 54 53 34 7d 20 7b 0a 20 20 57  ABLE_FTS4} {.  W
9c70: 68 65 6e 20 74 68 69 73 20 6f 70 74 69 6f 6e 20  hen this option 
9c80: 69 73 20 64 65 66 69 6e 65 64 20 69 6e 20 74 68  is defined in th
9c90: 65 20 5b 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 5d  e [amalgamation]
9ca0: 2c 20 76 65 72 73 69 6f 6e 73 20 33 20 61 6e 64  , versions 3 and
9cb0: 20 34 0a 20 20 6f 66 20 74 68 65 20 66 75 6c 6c   4.  of the full
9cc0: 2d 74 65 78 74 20 73 65 61 72 63 68 20 65 6e 67  -text search eng
9cd0: 69 6e 65 20 69 73 20 61 64 64 65 64 20 74 6f 20  ine is added to 
9ce0: 74 68 65 20 62 75 69 6c 64 20 61 75 74 6f 6d 61  the build automa
9cf0: 74 69 63 61 6c 6c 79 2e 0a 7d 0a 0a 43 4f 4d 50  tically..}..COMP
9d00: 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49  ILE_OPTION {SQLI
9d10: 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 35 7d 20  TE_ENABLE_FTS5} 
9d20: 7b 0a 20 20 57 68 65 6e 20 74 68 69 73 20 6f 70  {.  When this op
9d30: 74 69 6f 6e 20 69 73 20 64 65 66 69 6e 65 64 20  tion is defined 
9d40: 69 6e 20 74 68 65 20 5b 61 6d 61 6c 67 61 6d 61  in the [amalgama
9d50: 74 69 6f 6e 5d 2c 20 76 65 72 73 69 6f 6e 73 20  tion], versions 
9d60: 35 0a 20 20 6f 66 20 74 68 65 20 66 75 6c 6c 2d  5.  of the full-
9d70: 74 65 78 74 20 73 65 61 72 63 68 20 65 6e 67 69  text search engi
9d80: 6e 65 20 28 5b 66 74 73 35 5d 29 20 69 73 20 61  ne ([fts5]) is a
9d90: 64 64 65 64 20 74 6f 20 74 68 65 20 62 75 69 6c  dded to the buil
9da0: 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e  d automatically.
9db0: 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49  .}..COMPILE_OPTI
9dc0: 4f 4e 20 7b 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ON {SQLITE_ENABL
9dd0: 45 5f 47 45 4f 50 4f 4c 59 7d 20 7b 0a 20 20 57  E_GEOPOLY} {.  W
9de0: 68 65 6e 20 74 68 69 73 20 6f 70 74 69 6f 6e 20  hen this option 
9df0: 69 73 20 64 65 66 69 6e 65 64 20 69 6e 20 74 68  is defined in th
9e00: 65 20 5b 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 5d  e [amalgamation]
9e10: 2c 20 74 68 65 20 5b 47 65 6f 70 6f 6c 79 20 65  , the [Geopoly e
9e20: 78 74 65 6e 73 69 6f 6e 5d 0a 20 20 69 73 20 69  xtension].  is i
9e30: 6e 63 6c 75 64 65 64 20 69 6e 20 74 68 65 20 62  ncluded in the b
9e40: 75 69 6c 64 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45  uild..}..COMPILE
9e50: 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f  _OPTION {SQLITE_
9e60: 45 4e 41 42 4c 45 5f 49 43 55 7d 20 7b 0a 20 20  ENABLE_ICU} {.  
9e70: 54 68 69 73 20 6f 70 74 69 6f 6e 20 63 61 75 73  This option caus
9e80: 65 73 20 74 68 65 20 0a 20 20 5b 68 74 74 70 3a  es the .  [http:
9e90: 2f 2f 77 77 77 2e 69 63 75 2d 70 72 6f 6a 65 63  //www.icu-projec
9ea0: 74 2e 6f 72 67 2f 20 7c 20 49 6e 74 65 72 6e 61  t.org/ | Interna
9eb0: 74 69 6f 6e 61 6c 20 43 6f 6d 70 6f 6e 65 6e 74  tional Component
9ec0: 73 20 66 6f 72 20 55 6e 69 63 6f 64 65 5d 0a 20  s for Unicode]. 
9ed0: 20 6f 72 20 22 49 43 55 22 20 65 78 74 65 6e 73   or "ICU" extens
9ee0: 69 6f 6e 20 74 6f 20 53 51 4c 69 74 65 20 74 6f  ion to SQLite to
9ef0: 20 62 65 20 61 64 64 65 64 20 74 6f 20 74 68 65   be added to the
9f00: 20 62 75 69 6c 64 2e 20 20 0a 7d 0a 0a 43 4f 4d   build.  .}..COM
9f10: 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c  PILE_OPTION {SQL
9f20: 49 54 45 5f 45 4e 41 42 4c 45 5f 49 4f 54 52 41  ITE_ENABLE_IOTRA
9f30: 43 45 7d 20 7b 0a 20 20 57 68 65 6e 20 62 6f 74  CE} {.  When bot
9f40: 68 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72  h the SQLite cor
9f50: 65 20 61 6e 64 20 74 68 65 20 5b 43 6f 6d 6d 61  e and the [Comma
9f60: 6e 64 20 4c 69 6e 65 20 49 6e 74 65 72 66 61 63  nd Line Interfac
9f70: 65 5d 20 28 43 4c 49 29 20 61 72 65 20 62 6f 74  e] (CLI) are bot
9f80: 68 20 0a 20 20 63 6f 6d 70 69 6c 65 64 20 77 69  h .  compiled wi
9f90: 74 68 20 74 68 69 73 20 6f 70 74 69 6f 6e 2c 20  th this option, 
9fa0: 74 68 65 6e 20 74 68 65 20 43 4c 49 20 70 72 6f  then the CLI pro
9fb0: 76 69 64 65 73 20 61 6e 20 65 78 74 72 61 20 63  vides an extra c
9fc0: 6f 6d 6d 61 6e 64 0a 20 20 6e 61 6d 65 64 20 22  ommand.  named "
9fd0: 2e 69 6f 74 72 61 63 65 22 20 74 68 61 74 20 70  .iotrace" that p
9fe0: 72 6f 76 69 64 65 73 20 61 20 6c 6f 77 2d 6c 65  rovides a low-le
9ff0: 76 65 6c 20 6c 6f 67 20 6f 66 20 49 2f 4f 20 61  vel log of I/O a
a000: 63 74 69 76 69 74 79 2e 0a 20 20 54 68 69 73 20  ctivity..  This 
a010: 6f 70 74 69 6f 6e 20 69 73 20 65 78 70 65 72 69  option is experi
a020: 6d 65 6e 74 61 6c 20 61 6e 64 20 6d 61 79 20 62  mental and may b
a030: 65 20 64 69 73 63 6f 6e 74 69 6e 75 65 64 20 69  e discontinued i
a040: 6e 20 61 20 66 75 74 75 72 65 20 72 65 6c 65 61  n a future relea
a050: 73 65 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f  se..}..COMPILE_O
a060: 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 45 4e  PTION {SQLITE_EN
a070: 41 42 4c 45 5f 4a 53 4f 4e 31 7d 20 7b 0a 20 20  ABLE_JSON1} {.  
a080: 57 68 65 6e 20 74 68 69 73 20 6f 70 74 69 6f 6e  When this option
a090: 20 69 73 20 64 65 66 69 6e 65 64 20 69 6e 20 74   is defined in t
a0a0: 68 65 20 5b 61 6d 61 6c 67 61 6d 61 74 69 6f 6e  he [amalgamation
a0b0: 5d 2c 20 74 68 65 0a 20 20 5b 4a 53 4f 4e 20 53  ], the.  [JSON S
a0c0: 51 4c 20 66 75 6e 63 74 69 6f 6e 73 5d 20 61 72  QL functions] ar
a0d0: 65 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 62  e added to the b
a0e0: 75 69 6c 64 20 61 75 74 6f 6d 61 74 69 63 61 6c  uild automatical
a0f0: 6c 79 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f  ly..}..COMPILE_O
a100: 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 45 4e  PTION {SQLITE_EN
a110: 41 42 4c 45 5f 4c 4f 43 4b 49 4e 47 5f 53 54 59  ABLE_LOCKING_STY
a120: 4c 45 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70 74  LE} {.  This opt
a130: 69 6f 6e 20 65 6e 61 62 6c 65 73 20 61 64 64 69  ion enables addi
a140: 74 69 6f 6e 61 6c 20 6c 6f 67 69 63 20 69 6e 20  tional logic in 
a150: 74 68 65 20 4f 53 20 69 6e 74 65 72 66 61 63 65  the OS interface
a160: 20 6c 61 79 65 72 20 66 6f 72 0a 20 20 4d 61 63   layer for.  Mac
a170: 20 4f 53 20 58 2e 20 54 68 65 20 61 64 64 69 74   OS X. The addit
a180: 69 6f 6e 61 6c 20 6c 6f 67 69 63 20 61 74 74 65  ional logic atte
a190: 6d 70 74 73 20 74 6f 20 64 65 74 65 72 6d 69 6e  mpts to determin
a1a0: 65 20 74 68 65 20 74 79 70 65 20 6f 66 20 74 68  e the type of th
a1b0: 65 0a 20 20 75 6e 64 65 72 6c 79 69 6e 67 20 66  e.  underlying f
a1c0: 69 6c 65 73 79 73 74 65 6d 20 61 6e 64 20 63 68  ilesystem and ch
a1d0: 6f 6f 73 65 20 61 6e 64 20 61 6c 74 65 72 6e 61  oose and alterna
a1e0: 74 69 76 65 20 6c 6f 63 6b 69 6e 67 20 73 74 72  tive locking str
a1f0: 61 74 65 67 79 0a 20 20 74 68 61 74 20 77 6f 72  ategy.  that wor
a200: 6b 73 20 63 6f 72 72 65 63 74 6c 79 20 66 6f 72  ks correctly for
a210: 20 74 68 61 74 20 66 69 6c 65 73 79 73 74 65 6d   that filesystem
a220: 20 74 79 70 65 2e 20 46 69 76 65 20 6c 6f 63 6b   type. Five lock
a230: 69 6e 67 20 73 74 72 61 74 65 67 69 65 73 20 0a  ing strategies .
a240: 20 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 3a    are available:
a250: 0a 0a 20 20 3c 75 6c 3e 0a 20 20 20 20 3c 6c 69  ..  <ul>.    <li
a260: 3e 20 50 4f 53 49 58 20 6c 6f 63 6b 69 6e 67 20  > POSIX locking 
a270: 73 74 79 6c 65 2e 20 54 68 69 73 20 69 73 20 74  style. This is t
a280: 68 65 20 64 65 66 61 75 6c 74 20 6c 6f 63 6b 69  he default locki
a290: 6e 67 20 73 74 79 6c 65 20 61 6e 64 20 74 68 65  ng style and the
a2a0: 0a 20 20 20 20 20 20 20 20 20 73 74 79 6c 65 20  .         style 
a2b0: 75 73 65 64 20 62 79 20 6f 74 68 65 72 20 28 6e  used by other (n
a2c0: 6f 6e 20 4d 61 63 20 4f 53 20 58 29 20 55 6e 69  on Mac OS X) Uni
a2d0: 78 65 73 2e 20 4c 6f 63 6b 73 20 61 72 65 20 6f  xes. Locks are o
a2e0: 62 74 61 69 6e 65 64 20 61 6e 64 20 0a 20 20 20  btained and .   
a2f0: 20 20 20 20 20 20 72 65 6c 65 61 73 65 64 20 75        released u
a300: 73 69 6e 67 20 74 68 65 20 66 63 6e 74 6c 28 29  sing the fcntl()
a310: 20 73 79 73 74 65 6d 20 63 61 6c 6c 2e 0a 0a 20   system call... 
a320: 20 20 20 3c 6c 69 3e 20 41 46 50 20 6c 6f 63 6b     <li> AFP lock
a330: 69 6e 67 20 73 74 79 6c 65 2e 20 54 68 69 73 20  ing style. This 
a340: 6c 6f 63 6b 69 6e 67 20 73 74 79 6c 65 20 69 73  locking style is
a350: 20 75 73 65 64 20 66 6f 72 20 6e 65 74 77 6f 72   used for networ
a360: 6b 20 66 69 6c 65 20 0a 20 20 20 20 20 20 20 20  k file .        
a370: 20 73 79 73 74 65 6d 73 20 74 68 61 74 20 75 73   systems that us
a380: 65 20 74 68 65 20 41 46 50 20 28 41 70 70 6c 65  e the AFP (Apple
a390: 20 46 69 6c 69 6e 67 20 50 72 6f 74 6f 63 6f 6c   Filing Protocol
a3a0: 29 20 70 72 6f 74 6f 63 6f 6c 2e 20 4c 6f 63 6b  ) protocol. Lock
a3b0: 73 0a 20 20 20 20 20 20 20 20 20 61 72 65 20 6f  s.         are o
a3c0: 62 74 61 69 6e 65 64 20 62 79 20 63 61 6c 6c 69  btained by calli
a3d0: 6e 67 20 74 68 65 20 6c 69 62 72 61 72 79 20 66  ng the library f
a3e0: 75 6e 63 74 69 6f 6e 20 5f 41 46 50 46 53 53 65  unction _AFPFSSe
a3f0: 74 4c 6f 63 6b 28 29 2e 0a 0a 20 20 20 20 3c 6c  tLock()...    <l
a400: 69 3e 20 46 6c 6f 63 6b 20 6c 6f 63 6b 69 6e 67  i> Flock locking
a410: 20 73 74 79 6c 65 2e 20 54 68 69 73 20 69 73 20   style. This is 
a420: 75 73 65 64 20 66 6f 72 20 66 69 6c 65 2d 73 79  used for file-sy
a430: 73 74 65 6d 73 20 74 68 61 74 20 64 6f 20 6e 6f  stems that do no
a440: 74 0a 20 20 20 20 20 20 20 20 20 73 75 70 70 6f  t.         suppo
a450: 72 74 20 50 4f 53 49 58 20 6c 6f 63 6b 69 6e 67  rt POSIX locking
a460: 20 73 74 79 6c 65 2e 20 4c 6f 63 6b 73 20 61 72   style. Locks ar
a470: 65 20 6f 62 74 61 69 6e 65 64 20 61 6e 64 20 72  e obtained and r
a480: 65 6c 65 61 73 65 64 20 75 73 69 6e 67 0a 20 20  eleased using.  
a490: 20 20 20 20 20 20 20 74 68 65 20 66 6c 6f 63 6b         the flock
a4a0: 28 29 20 73 79 73 74 65 6d 20 63 61 6c 6c 2e 0a  () system call..
a4b0: 0a 20 20 20 20 3c 6c 69 3e 20 44 6f 74 2d 66 69  .    <li> Dot-fi
a4c0: 6c 65 20 6c 6f 63 6b 69 6e 67 20 73 74 79 6c 65  le locking style
a4d0: 2e 20 54 68 69 73 20 6c 6f 63 6b 69 6e 67 20 73  . This locking s
a4e0: 74 79 6c 65 20 69 73 20 75 73 65 64 20 77 68 65  tyle is used whe
a4f0: 6e 20 6e 65 69 74 68 65 72 0a 20 20 20 20 20 20  n neither.      
a500: 20 20 20 66 6c 6f 63 6b 20 6e 6f 72 20 50 4f 53     flock nor POS
a510: 49 58 20 6c 6f 63 6b 69 6e 67 20 73 74 79 6c 65  IX locking style
a520: 73 20 61 72 65 20 73 75 70 70 6f 72 74 65 64 20  s are supported 
a530: 62 79 20 74 68 65 20 66 69 6c 65 20 73 79 73 74  by the file syst
a540: 65 6d 2e 0a 20 20 20 20 20 20 20 20 20 44 61 74  em..         Dat
a550: 61 62 61 73 65 20 6c 6f 63 6b 73 20 61 72 65 20  abase locks are 
a560: 6f 62 74 61 69 6e 65 64 20 62 79 20 63 72 65 61  obtained by crea
a570: 74 69 6e 67 20 61 6e 64 20 65 6e 74 72 79 20 69  ting and entry i
a580: 6e 20 74 68 65 20 66 69 6c 65 2d 73 79 73 74 65  n the file-syste
a590: 6d 0a 20 20 20 20 20 20 20 20 20 61 74 20 61 20  m.         at a 
a5a0: 77 65 6c 6c 2d 6b 6e 6f 77 6e 20 6c 6f 63 61 74  well-known locat
a5b0: 69 6f 6e 20 72 65 6c 61 74 69 76 65 20 74 6f 20  ion relative to 
a5c0: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
a5d0: 65 20 28 61 20 22 64 6f 74 2d 66 69 6c 65 22 29  e (a "dot-file")
a5e0: 0a 20 20 20 20 20 20 20 20 20 61 6e 64 20 72 65  .         and re
a5f0: 6c 69 6e 71 75 69 73 68 65 64 20 62 79 20 64 65  linquished by de
a600: 6c 65 74 69 6e 67 20 74 68 65 20 73 61 6d 65 20  leting the same 
a610: 66 69 6c 65 2e 0a 0a 20 20 20 20 3c 6c 69 3e 20  file...    <li> 
a620: 4e 6f 20 6c 6f 63 6b 69 6e 67 20 73 74 79 6c 65  No locking style
a630: 2e 20 49 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65  . If none of the
a640: 20 61 62 6f 76 65 20 63 61 6e 20 62 65 20 73 75   above can be su
a650: 70 70 6f 72 74 65 64 2c 20 74 68 69 73 20 0a 20  pported, this . 
a660: 20 20 20 20 20 20 20 20 6c 6f 63 6b 69 6e 67 20          locking 
a670: 73 74 79 6c 65 20 69 73 20 75 73 65 64 2e 20 4e  style is used. N
a680: 6f 20 64 61 74 61 62 61 73 65 20 6c 6f 63 6b 69  o database locki
a690: 6e 67 20 6d 65 63 68 61 6e 69 73 6d 20 69 73 20  ng mechanism is 
a6a0: 75 73 65 64 2e 20 57 68 65 6e 0a 20 20 20 20 20  used. When.     
a6b0: 20 20 20 20 74 68 69 73 20 73 79 73 74 65 6d 20      this system 
a6c0: 69 73 20 75 73 65 64 20 69 74 20 69 73 20 6e 6f  is used it is no
a6d0: 74 20 73 61 66 65 20 66 6f 72 20 61 20 73 69 6e  t safe for a sin
a6e0: 67 6c 65 20 64 61 74 61 62 61 73 65 20 74 6f 20  gle database to 
a6f0: 62 65 0a 20 20 20 20 20 20 20 20 20 61 63 63 65  be.         acce
a700: 73 73 65 64 20 62 79 20 6d 75 6c 74 69 70 6c 65  ssed by multiple
a710: 20 63 6c 69 65 6e 74 73 2e 0a 20 20 3c 2f 75 6c   clients..  </ul
a720: 3e 0a 0a 20 20 41 64 64 69 74 69 6f 6e 61 6c 6c  >..  Additionall
a730: 79 2c 20 66 69 76 65 20 65 78 74 72 61 20 5b 56  y, five extra [V
a740: 46 53 5d 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  FS] implementati
a750: 6f 6e 73 20 61 72 65 20 70 72 6f 76 69 64 65 64  ons are provided
a760: 20 61 73 20 77 65 6c 6c 20 61 73 20 74 68 65 0a   as well as the.
a770: 20 20 64 65 66 61 75 6c 74 2e 20 42 79 20 73 70    default. By sp
a780: 65 63 69 66 79 69 6e 67 20 6f 6e 65 20 6f 66 20  ecifying one of 
a790: 74 68 65 20 65 78 74 72 61 20 56 46 53 20 69 6d  the extra VFS im
a7a0: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20 0a 20  plementations . 
a7b0: 20 77 68 65 6e 20 63 61 6c 6c 69 6e 67 20 5b 73   when calling [s
a7c0: 71 6c 69 74 65 33 5f 6f 70 65 6e 5f 76 32 28 29  qlite3_open_v2()
a7d0: 5d 2c 20 61 6e 20 61 70 70 6c 69 63 61 74 69 6f  ], an applicatio
a7e0: 6e 20 6d 61 79 20 62 79 70 61 73 73 20 74 68 65  n may bypass the
a7f0: 20 66 69 6c 65 2d 73 79 73 74 65 6d 0a 20 20 64   file-system.  d
a800: 65 74 65 63 74 69 6f 6e 20 6c 6f 67 69 63 20 61  etection logic a
a810: 6e 64 20 65 78 70 6c 69 63 69 74 6c 79 20 73 65  nd explicitly se
a820: 6c 65 63 74 20 6f 6e 65 20 6f 66 20 74 68 65 20  lect one of the 
a830: 61 62 6f 76 65 20 6c 6f 63 6b 69 6e 67 20 73 74  above locking st
a840: 79 6c 65 73 2e 20 54 68 65 0a 20 20 66 69 76 65  yles. The.  five
a850: 20 65 78 74 72 61 20 5b 56 46 53 5d 20 69 6d 70   extra [VFS] imp
a860: 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20 61 72 65  lementations are
a870: 20 63 61 6c 6c 65 64 20 22 75 6e 69 78 2d 70 6f   called "unix-po
a880: 73 69 78 22 2c 20 22 75 6e 69 78 2d 61 66 70 22  six", "unix-afp"
a890: 2c 0a 20 20 22 75 6e 69 78 2d 66 6c 6f 63 6b 22  ,.  "unix-flock"
a8a0: 2c 20 22 75 6e 69 78 2d 64 6f 74 66 69 6c 65 22  , "unix-dotfile"
a8b0: 20 61 6e 64 20 22 75 6e 69 78 2d 6e 6f 6e 65 22   and "unix-none"
a8c0: 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54  ..}..COMPILE_OPT
a8d0: 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 45 4e 41 42  ION {SQLITE_ENAB
a8e0: 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41 4e 41 47 45  LE_MEMORY_MANAGE
a8f0: 4d 45 4e 54 7d 20 7b 0a 20 20 54 68 69 73 20 6f  MENT} {.  This o
a900: 70 74 69 6f 6e 20 61 64 64 73 20 65 78 74 72 61  ption adds extra
a910: 20 6c 6f 67 69 63 20 74 6f 20 53 51 4c 69 74 65   logic to SQLite
a920: 20 74 68 61 74 20 61 6c 6c 6f 77 73 20 69 74 20   that allows it 
a930: 74 6f 20 72 65 6c 65 61 73 65 20 75 6e 75 73 65  to release unuse
a940: 64 0a 20 20 6d 65 6d 6f 72 79 20 75 70 6f 6e 20  d.  memory upon 
a950: 72 65 71 75 65 73 74 2e 20 20 54 68 69 73 20 6f  request.  This o
a960: 70 74 69 6f 6e 20 6d 75 73 74 20 62 65 20 65 6e  ption must be en
a970: 61 62 6c 65 64 20 69 6e 20 6f 72 64 65 72 20 66  abled in order f
a980: 6f 72 20 74 68 65 0a 20 20 5b 73 71 6c 69 74 65  or the.  [sqlite
a990: 33 5f 72 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79  3_release_memory
a9a0: 28 29 5d 20 69 6e 74 65 72 66 61 63 65 20 74 6f  ()] interface to
a9b0: 20 77 6f 72 6b 2e 20 20 49 66 20 74 68 69 73 20   work.  If this 
a9c0: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 0a 20 20 6f  compile-time.  o
a9d0: 70 74 69 6f 6e 20 69 73 20 6e 6f 74 20 75 73 65  ption is not use
a9e0: 64 2c 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f  d, the [sqlite3_
a9f0: 72 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28 29  release_memory()
aa00: 5d 20 69 6e 74 65 72 66 61 63 65 20 69 73 20 61  ] interface is a
aa10: 20 0a 20 20 6e 6f 2d 6f 70 2e 0a 7d 0a 0a 43 4f   .  no-op..}..CO
aa20: 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51  MPILE_OPTION {SQ
aa30: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53  LITE_ENABLE_MEMS
aa40: 59 53 33 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70  YS3} {.  This op
aa50: 74 69 6f 6e 20 69 6e 63 6c 75 64 65 73 20 63 6f  tion includes co
aa60: 64 65 20 69 6e 20 53 51 4c 69 74 65 20 74 68 61  de in SQLite tha
aa70: 74 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61 6e 20  t implements an 
aa80: 61 6c 74 65 72 6e 61 74 69 76 65 0a 20 20 6d 65  alternative.  me
aa90: 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 6f 72 2e 20  mory allocator. 
aaa0: 20 54 68 69 73 20 61 6c 74 65 72 6e 61 74 69 76   This alternativ
aab0: 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  e memory allocat
aac0: 6f 72 20 69 73 20 6f 6e 6c 79 20 65 6e 67 61 67  or is only engag
aad0: 65 64 0a 20 20 77 68 65 6e 20 74 68 65 20 5b 53  ed.  when the [S
aae0: 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 48 45 41  QLITE_CONFIG_HEA
aaf0: 50 5d 20 6f 70 74 69 6f 6e 20 74 6f 20 5b 73 71  P] option to [sq
ab00: 6c 69 74 65 33 5f 63 6f 6e 66 69 67 28 29 5d 20  lite3_config()] 
ab10: 69 73 20 75 73 65 64 20 74 6f 0a 20 20 73 75 70  is used to.  sup
ab20: 70 6c 79 20 61 20 6c 61 72 67 65 20 63 68 75 6e  ply a large chun
ab30: 6b 20 6f 66 20 6d 65 6d 6f 72 79 20 66 72 6f 6d  k of memory from
ab40: 20 77 68 69 63 68 20 61 6c 6c 20 6d 65 6d 6f 72   which all memor
ab50: 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72  y allocations ar
ab60: 65 0a 20 20 74 61 6b 65 6e 2e 0a 20 20 54 68 65  e.  taken..  The
ab70: 20 4d 45 4d 53 59 53 33 20 6d 65 6d 6f 72 79 20   MEMSYS3 memory 
ab80: 61 6c 6c 6f 63 61 74 6f 72 20 75 73 65 73 20 61  allocator uses a
ab90: 20 68 79 62 72 69 64 20 61 6c 6c 6f 63 61 74 69   hybrid allocati
aba0: 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 0a 20 20  on algorithm .  
abb0: 70 61 74 74 65 72 6e 65 64 20 61 66 74 65 72 20  patterned after 
abc0: 64 6c 6d 61 6c 6c 6f 63 28 29 2e 20 20 20 4f 6e  dlmalloc().   On
abd0: 6c 79 20 6f 6e 65 20 6f 66 20 53 51 4c 49 54 45  ly one of SQLITE
abe0: 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 33 20  _ENABLE_MEMSYS3 
abf0: 61 6e 64 20 0a 20 20 53 51 4c 49 54 45 5f 45 4e  and .  SQLITE_EN
ac00: 41 42 4c 45 5f 4d 45 4d 53 59 53 35 20 6d 61 79  ABLE_MEMSYS5 may
ac10: 20 62 65 20 65 6e 61 62 6c 65 64 20 61 74 20 6f   be enabled at o
ac20: 6e 63 65 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f  nce..}..COMPILE_
ac30: 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 45  OPTION {SQLITE_E
ac40: 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 35 7d 20 7b  NABLE_MEMSYS5} {
ac50: 0a 20 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 69  .  This option i
ac60: 6e 63 6c 75 64 65 73 20 63 6f 64 65 20 69 6e 20  ncludes code in 
ac70: 53 51 4c 69 74 65 20 74 68 61 74 20 69 6d 70 6c  SQLite that impl
ac80: 65 6d 65 6e 74 73 20 61 6e 20 61 6c 74 65 72 6e  ements an altern
ac90: 61 74 69 76 65 0a 20 20 6d 65 6d 6f 72 79 20 61  ative.  memory a
aca0: 6c 6c 6f 63 61 74 6f 72 2e 20 20 54 68 69 73 20  llocator.  This 
acb0: 61 6c 74 65 72 6e 61 74 69 76 65 20 6d 65 6d 6f  alternative memo
acc0: 72 79 20 61 6c 6c 6f 63 61 74 6f 72 20 69 73 20  ry allocator is 
acd0: 6f 6e 6c 79 20 65 6e 67 61 67 65 64 0a 20 20 77  only engaged.  w
ace0: 68 65 6e 20 74 68 65 20 5b 53 51 4c 49 54 45 5f  hen the [SQLITE_
acf0: 43 4f 4e 46 49 47 5f 48 45 41 50 5d 20 6f 70 74  CONFIG_HEAP] opt
ad00: 69 6f 6e 20 74 6f 20 5b 73 71 6c 69 74 65 33 5f  ion to [sqlite3_
ad10: 63 6f 6e 66 69 67 28 29 5d 20 69 73 20 75 73 65  config()] is use
ad20: 64 20 74 6f 0a 20 20 73 75 70 70 6c 79 20 61 20  d to.  supply a 
ad30: 6c 61 72 67 65 20 63 68 75 6e 6b 20 6f 66 20 6d  large chunk of m
ad40: 65 6d 6f 72 79 20 66 72 6f 6d 20 77 68 69 63 68  emory from which
ad50: 20 61 6c 6c 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f   all memory allo
ad60: 63 61 74 69 6f 6e 73 20 61 72 65 0a 20 20 74 61  cations are.  ta
ad70: 6b 65 6e 2e 0a 20 20 54 68 65 20 4d 45 4d 53 59  ken..  The MEMSY
ad80: 53 35 20 6d 6f 64 75 6c 65 20 72 6f 75 6e 64 73  S5 module rounds
ad90: 20 61 6c 6c 20 61 6c 6c 6f 63 61 74 69 6f 6e 73   all allocations
ada0: 20 75 70 20 74 6f 20 74 68 65 20 6e 65 78 74 20   up to the next 
adb0: 70 6f 77 65 72 0a 20 20 6f 66 20 74 77 6f 20 61  power.  of two a
adc0: 6e 64 20 75 73 65 73 20 61 20 66 69 72 73 74 2d  nd uses a first-
add0: 66 69 74 2c 20 62 75 64 64 79 2d 61 6c 6c 6f 63  fit, buddy-alloc
ade0: 61 74 6f 72 20 61 6c 67 6f 72 69 74 68 6d 0a 20  ator algorithm. 
adf0: 20 74 68 61 74 20 70 72 6f 76 69 64 65 73 20 73   that provides s
ae00: 74 72 6f 6e 67 20 67 75 61 72 61 6e 74 65 65 73  trong guarantees
ae10: 20 61 67 61 69 6e 73 74 20 66 72 61 67 6d 65 6e   against fragmen
ae20: 74 61 74 69 6f 6e 20 61 6e 64 20 62 72 65 61 6b  tation and break
ae30: 64 6f 77 6e 0a 20 20 73 75 62 6a 65 63 74 20 74  down.  subject t
ae40: 6f 20 63 65 72 74 61 69 6e 20 6f 70 65 72 61 74  o certain operat
ae50: 69 6e 67 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e  ing constraints.
ae60: 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49  .}..COMPILE_OPTI
ae70: 4f 4e 20 7b 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ON {SQLITE_ENABL
ae80: 45 5f 4e 55 4c 4c 5f 54 52 49 4d 7d 20 7b 0a 20  E_NULL_TRIM} {. 
ae90: 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 65 6e 61   This option ena
aea0: 62 6c 65 73 20 61 6e 20 6f 70 74 69 6d 69 7a 61  bles an optimiza
aeb0: 74 69 6f 6e 20 74 68 61 74 20 6f 6d 69 74 73 20  tion that omits 
aec0: 4e 55 4c 4c 20 63 6f 6c 75 6d 6e 73 20 61 74 0a  NULL columns at.
aed0: 20 20 74 68 65 20 65 6e 64 73 20 6f 66 20 72 6f    the ends of ro
aee0: 77 73 2c 20 66 6f 72 20 61 20 73 70 61 63 65 20  ws, for a space 
aef0: 73 61 76 69 6e 67 73 20 6f 6e 20 64 69 73 6b 2e  savings on disk.
af00: 0a 20 20 3c 70 3e 0a 20 20 44 61 74 61 62 61 73  .  <p>.  Databas
af10: 65 73 20 67 65 6e 65 72 61 74 65 64 20 77 69 74  es generated wit
af20: 68 20 74 68 69 73 20 6f 70 74 69 6f 6e 20 65 6e  h this option en
af30: 61 62 6c 65 64 20 61 72 65 20 6e 6f 74 20 72 65  abled are not re
af40: 61 64 61 62 6c 65 0a 20 20 62 79 20 53 51 4c 69  adable.  by SQLi
af50: 74 65 20 76 65 72 73 69 6f 6e 20 33 2e 31 2e 36  te version 3.1.6
af60: 20 28 5b 64 61 74 65 6f 66 3a 33 2e 31 2e 36 5d   ([dateof:3.1.6]
af70: 29 20 61 6e 64 20 65 61 72 6c 69 65 72 2e 20 20  ) and earlier.  
af80: 41 6c 73 6f 2c 0a 20 20 64 61 74 61 62 61 73 65  Also,.  database
af90: 73 20 67 65 6e 65 72 61 74 65 64 20 77 69 74 68  s generated with
afa0: 20 74 68 69 73 20 6f 70 74 69 6f 6e 20 65 6e 61   this option ena
afb0: 62 6c 65 64 20 61 72 65 20 70 72 6f 6e 65 20 74  bled are prone t
afc0: 6f 0a 20 20 74 72 69 67 67 65 72 69 6e 67 20 74  o.  triggering t
afd0: 68 65 0a 20 20 5b 68 74 74 70 73 3a 2f 2f 77 77  he.  [https://ww
afe0: 77 2e 73 71 6c 69 74 65 2e 6f 72 67 2f 73 72 63  w.sqlite.org/src
aff0: 2f 69 6e 66 6f 2f 65 36 65 39 36 32 64 36 62 30  /info/e6e962d6b0
b000: 66 30 36 66 34 36 65 7c 65 36 65 39 36 32 64 36  f06f46e|e6e962d6
b010: 62 30 66 30 36 66 34 36 5d 0a 20 20 62 75 67 20  b0f06f46].  bug 
b020: 69 6e 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f  in the [sqlite3_
b030: 62 6c 6f 62 5f 72 65 6f 70 65 6e 28 29 5d 20 69  blob_reopen()] i
b040: 6e 74 65 72 66 61 63 65 2e 20 20 46 6f 72 20 74  nterface.  For t
b050: 68 6f 73 65 20 72 65 61 73 6f 6e 73 2c 0a 20 20  hose reasons,.  
b060: 74 68 69 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f  this optimizatio
b070: 6e 20 69 73 20 64 69 73 61 62 6c 65 64 20 62 79  n is disabled by
b080: 20 64 65 66 61 75 6c 74 2e 20 20 48 6f 77 65 76   default.  Howev
b090: 65 72 2c 20 74 68 69 73 20 6f 70 74 69 6d 69 7a  er, this optimiz
b0a0: 61 74 69 6f 6e 0a 20 20 6d 61 79 20 62 65 20 65  ation.  may be e
b0b0: 6e 61 62 6c 65 64 20 62 79 20 64 65 66 61 75 6c  nabled by defaul
b0c0: 74 20 69 6e 20 61 20 66 75 74 75 72 65 20 72 65  t in a future re
b0d0: 6c 65 61 73 65 20 6f 66 20 53 51 4c 69 74 65 2e  lease of SQLite.
b0e0: 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49  .}..COMPILE_OPTI
b0f0: 4f 4e 20 7b 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ON {SQLITE_ENABL
b100: 45 5f 4f 46 46 53 45 54 5f 53 51 4c 5f 46 55 4e  E_OFFSET_SQL_FUN
b110: 43 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70 74 69  C} {.  This opti
b120: 6f 6e 20 65 6e 61 62 6c 65 73 20 73 75 70 70 6f  on enables suppo
b130: 72 74 20 66 6f 72 20 74 68 65 20 5b 73 71 6c 69  rt for the [sqli
b140: 74 65 5f 6f 66 66 73 65 74 28 58 29 5d 20 53 51  te_offset(X)] SQ
b150: 4c 20 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 3c 70  L function..  <p
b160: 3e 0a 20 20 54 68 65 20 5b 73 71 6c 69 74 65 5f  >.  The [sqlite_
b170: 6f 66 66 73 65 74 28 58 29 5d 20 53 51 4c 20 66  offset(X)] SQL f
b180: 75 6e 63 74 69 6f 6e 20 72 65 71 75 69 72 65 73  unction requires
b190: 20 61 20 6e 65 77 20 69 6e 74 65 72 66 61 63 65   a new interface
b1a0: 20 6f 6e 20 74 68 65 0a 20 20 42 2d 74 72 65 65   on the.  B-tree
b1b0: 20 73 74 6f 72 61 67 65 20 65 6e 67 69 6e 65 2c   storage engine,
b1c0: 20 61 20 6e 65 77 20 6f 70 63 6f 64 65 20 69 6e   a new opcode in
b1d0: 20 74 68 65 20 5b 76 69 72 74 75 61 6c 20 6d 61   the [virtual ma
b1e0: 63 68 69 6e 65 5d 20 74 68 61 74 0a 20 20 72 75  chine] that.  ru
b1f0: 6e 73 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  ns SQL statement
b200: 73 2c 20 61 6e 64 20 61 20 6e 65 77 20 63 6f 6e  s, and a new con
b210: 64 69 74 69 6f 6e 61 6c 20 69 6e 20 61 20 63 72  ditional in a cr
b220: 69 74 69 63 61 6c 20 70 61 74 68 20 6f 66 20 74  itical path of t
b230: 68 65 0a 20 20 63 6f 64 65 20 67 65 6e 65 72 61  he.  code genera
b240: 74 6f 72 2e 20 20 54 6f 20 61 76 6f 69 64 20 74  tor.  To avoid t
b250: 68 61 74 20 6f 76 65 72 68 65 61 64 20 69 6e 20  hat overhead in 
b260: 61 70 70 6c 69 63 61 74 69 6f 6e 73 20 74 68 61  applications tha
b270: 74 20 64 6f 20 6e 6f 74 0a 20 20 6e 65 65 64 20  t do not.  need 
b280: 74 68 65 20 75 74 69 6c 69 74 79 20 6f 66 20 73  the utility of s
b290: 71 6c 69 74 65 5f 6f 66 66 73 65 74 28 58 29 2c  qlite_offset(X),
b2a0: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 73   the function is
b2b0: 20 64 69 73 61 62 6c 65 64 20 62 79 0a 20 20 64   disabled by.  d
b2c0: 65 66 61 75 6c 74 2e 0a 7d 0a 0a 43 4f 4d 50 49  efault..}..COMPI
b2d0: 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54  LE_OPTION {SQLIT
b2e0: 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55 50 44 41  E_ENABLE_PREUPDA
b2f0: 54 45 5f 48 4f 4f 4b 7d 20 7b 0a 20 20 54 68 69  TE_HOOK} {.  Thi
b300: 73 20 6f 70 74 69 6f 6e 20 65 6e 61 62 6c 65 73  s option enables
b310: 20 0a 20 20 5b 73 71 6c 69 74 65 33 5f 70 72 65   .  [sqlite3_pre
b320: 75 70 64 61 74 65 5f 68 6f 6f 6b 7c 73 65 76 65  update_hook|seve
b330: 72 61 6c 20 6e 65 77 20 41 50 49 73 5d 20 74 68  ral new APIs] th
b340: 61 74 20 70 72 6f 76 69 64 65 20 63 61 6c 6c 62  at provide callb
b350: 61 63 6b 73 0a 20 20 70 72 69 6f 72 20 74 6f 20  acks.  prior to 
b360: 61 6e 79 20 63 68 61 6e 67 65 20 74 6f 20 61 20  any change to a 
b370: 5b 72 6f 77 69 64 20 74 61 62 6c 65 5d 2e 20 20  [rowid table].  
b380: 54 68 65 20 63 61 6c 6c 62 61 63 6b 73 20 63 61  The callbacks ca
b390: 6e 20 62 65 20 75 73 65 64 0a 20 20 74 6f 20 72  n be used.  to r
b3a0: 65 63 6f 72 64 20 74 68 65 20 73 74 61 74 65 20  ecord the state 
b3b0: 6f 66 20 74 68 65 20 72 6f 77 20 62 65 66 6f 72  of the row befor
b3c0: 65 20 74 68 65 20 63 68 61 6e 67 65 20 6f 63 63  e the change occ
b3d0: 75 72 73 2e 0a 20 20 3c 70 3e 54 68 65 20 61 63  urs..  <p>The ac
b3e0: 74 69 6f 6e 20 6f 66 20 74 68 65 20 70 72 65 75  tion of the preu
b3f0: 70 64 61 74 65 20 68 6f 6f 6b 20 69 73 20 73 69  pdate hook is si
b400: 6d 69 6c 61 72 20 74 6f 20 74 68 65 0a 20 20 5b  milar to the.  [
b410: 73 71 6c 69 74 65 33 5f 75 70 64 61 74 65 5f 68  sqlite3_update_h
b420: 6f 6f 6b 7c 75 70 64 61 74 65 20 68 6f 6f 6b 5d  ook|update hook]
b430: 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65   except that the
b440: 20 63 61 6c 6c 62 61 63 6b 20 69 73 0a 20 20 69   callback is.  i
b450: 6e 76 6f 6b 65 64 20 62 65 66 6f 72 65 20 74 68  nvoked before th
b460: 65 20 63 68 61 6e 67 65 2c 20 6e 6f 74 20 61 66  e change, not af
b470: 74 65 72 77 61 72 64 73 2c 20 61 6e 64 20 74 68  terwards, and th
b480: 65 20 70 72 65 75 70 64 61 74 65 0a 20 20 68 6f  e preupdate.  ho
b490: 6f 6b 20 69 6e 74 65 72 66 61 63 65 73 20 61 72  ok interfaces ar
b4a0: 65 20 6f 6d 69 74 74 65 64 20 75 6e 6c 65 73 73  e omitted unless
b4b0: 20 74 68 69 73 20 63 6f 6d 70 69 6c 65 2d 74 69   this compile-ti
b4c0: 6d 65 20 6f 70 74 69 6f 6e 20 69 73 0a 20 20 75  me option is.  u
b4d0: 73 65 64 2e 0a 20 20 3c 70 3e 54 68 65 20 70 72  sed..  <p>The pr
b4e0: 65 75 70 64 61 74 65 20 68 6f 6f 6b 20 69 6e 74  eupdate hook int
b4f0: 65 72 66 61 63 65 73 20 77 65 72 65 20 6f 72 69  erfaces were ori
b500: 67 69 6e 61 6c 6c 79 20 61 64 64 65 64 20 74 6f  ginally added to
b510: 0a 20 20 73 75 70 70 6f 72 74 20 74 68 65 20 5b  .  support the [
b520: 73 65 73 73 69 6f 6e 5d 20 65 78 74 65 6e 73 69  session] extensi
b530: 6f 6e 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f  on..}..COMPILE_O
b540: 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 45 4e  PTION {SQLITE_EN
b550: 41 42 4c 45 5f 51 50 53 47 7d 20 7b 0a 20 20 54  ABLE_QPSG} {.  T
b560: 68 69 73 20 6f 70 74 69 6f 6e 20 63 61 75 73 65  his option cause
b570: 73 20 74 68 65 20 5b 71 75 65 72 79 20 70 6c 61  s the [query pla
b580: 6e 6e 65 72 20 73 74 61 62 69 6c 69 74 79 20 67  nner stability g
b590: 75 61 72 61 6e 74 65 65 5d 20 28 51 50 53 47 29  uarantee] (QPSG)
b5a0: 20 74 6f 0a 20 20 62 65 20 6f 6e 20 62 79 20 64   to.  be on by d
b5b0: 65 66 61 75 6c 74 2e 20 20 4e 6f 72 6d 61 6c 6c  efault.  Normall
b5c0: 79 20 74 68 65 20 51 50 53 47 20 69 73 20 6f 66  y the QPSG is of
b5d0: 66 20 61 6e 64 20 6d 75 73 74 20 62 65 20 61 63  f and must be ac
b5e0: 74 69 76 61 74 65 64 0a 20 20 61 74 20 72 75 6e  tivated.  at run
b5f0: 2d 74 69 6d 65 20 75 73 69 6e 67 20 74 68 65 20  -time using the 
b600: 5b 53 51 4c 49 54 45 5f 44 42 43 4f 4e 46 49 47  [SQLITE_DBCONFIG
b610: 5f 45 4e 41 42 4c 45 5f 51 50 53 47 5d 20 6f 70  _ENABLE_QPSG] op
b620: 74 69 6f 6e 20 74 6f 20 74 68 65 0a 20 20 5b 73  tion to the.  [s
b630: 71 6c 69 74 65 33 5f 64 62 5f 63 6f 6e 66 69 67  qlite3_db_config
b640: 28 29 5d 20 69 6e 74 65 72 66 61 63 65 2e 0a 7d  ()] interface..}
b650: 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e  ..COMPILE_OPTION
b660: 20 7b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f   {SQLITE_ENABLE_
b670: 52 42 55 7d 20 7b 0a 20 20 45 6e 61 62 6c 65 20  RBU} {.  Enable 
b680: 74 68 65 20 63 6f 64 65 20 74 68 65 20 69 6d 70  the code the imp
b690: 6c 65 6d 65 6e 74 73 20 74 68 65 20 5b 52 42 55  lements the [RBU
b6a0: 20 65 78 74 65 6e 73 69 6f 6e 5d 2e 0a 7d 0a 0a   extension]..}..
b6b0: 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b  COMPILE_OPTION {
b6c0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 52 54  SQLITE_ENABLE_RT
b6d0: 52 45 45 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70  REE} {.  This op
b6e0: 74 69 6f 6e 20 63 61 75 73 65 73 20 53 51 4c 69  tion causes SQLi
b6f0: 74 65 20 74 6f 20 69 6e 63 6c 75 64 65 20 73 75  te to include su
b700: 70 70 6f 72 74 20 66 6f 72 20 74 68 65 0a 20 20  pport for the.  
b710: 5b 72 74 72 65 65 20 7c 20 52 2a 54 72 65 65 20  [rtree | R*Tree 
b720: 69 6e 64 65 78 20 65 78 74 65 6e 73 69 6f 6e 5d  index extension]
b730: 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54  ..}..COMPILE_OPT
b740: 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 45 4e 41 42  ION {SQLITE_ENAB
b750: 4c 45 5f 53 45 53 53 49 4f 4e 7d 20 7b 0a 20 20  LE_SESSION} {.  
b760: 54 68 69 73 20 6f 70 74 69 6f 6e 20 65 6e 61 62  This option enab
b770: 6c 65 73 20 74 68 65 20 5b 73 65 73 73 69 6f 6e  les the [session
b780: 20 65 78 74 65 6e 73 69 6f 6e 5d 2e 0a 7d 0a 0a   extension]..}..
b790: 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b  COMPILE_OPTION {
b7a0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 4e  SQLITE_ENABLE_SN
b7b0: 41 50 53 48 4f 54 7d 20 7b 0a 20 20 54 68 69 73  APSHOT} {.  This
b7c0: 20 6f 70 74 69 6f 6e 20 65 6e 61 62 6c 65 73 20   option enables 
b7d0: 74 68 65 20 63 6f 64 65 20 74 6f 20 73 75 70 70  the code to supp
b7e0: 6f 72 74 20 74 68 65 20 5b 73 71 6c 69 74 65 33  ort the [sqlite3
b7f0: 5f 73 6e 61 70 73 68 6f 74 5d 20 6f 62 6a 65 63  _snapshot] objec
b800: 74 0a 20 20 61 6e 64 20 69 74 73 20 72 65 6c 61  t.  and its rela
b810: 74 65 64 20 69 6e 74 65 72 66 61 63 65 73 3a 0a  ted interfaces:.
b820: 20 20 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 20 5b 73    <ul>.  <li> [s
b830: 71 6c 69 74 65 33 5f 73 6e 61 70 73 68 6f 74 5f  qlite3_snapshot_
b840: 67 65 74 28 29 5d 20 28 63 6f 6e 73 74 72 75 63  get()] (construc
b850: 74 6f 72 29 0a 20 20 3c 6c 69 3e 20 5b 73 71 6c  tor).  <li> [sql
b860: 69 74 65 33 5f 73 6e 61 70 73 68 6f 74 5f 66 72  ite3_snapshot_fr
b870: 65 65 28 29 5d 20 28 64 65 73 74 72 75 63 74 6f  ee()] (destructo
b880: 72 29 0a 20 20 3c 6c 69 3e 20 5b 73 71 6c 69 74  r).  <li> [sqlit
b890: 65 33 5f 73 6e 61 70 73 68 6f 74 5f 6f 70 65 6e  e3_snapshot_open
b8a0: 28 29 5d 0a 20 20 3c 6c 69 3e 20 5b 73 71 6c 69  ()].  <li> [sqli
b8b0: 74 65 33 5f 73 6e 61 70 73 68 6f 74 5f 63 6d 70  te3_snapshot_cmp
b8c0: 28 29 5d 0a 20 20 3c 6c 69 3e 20 5b 73 71 6c 69  ()].  <li> [sqli
b8d0: 74 65 33 5f 73 6e 61 70 73 68 6f 74 5f 72 65 63  te3_snapshot_rec
b8e0: 6f 76 65 72 28 29 5d 0a 20 20 3c 2f 75 6c 3e 0a  over()].  </ul>.
b8f0: 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f  }..COMPILE_OPTIO
b900: 4e 20 7b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  N {SQLITE_ENABLE
b910: 5f 53 4f 52 54 45 52 5f 52 45 46 45 52 45 4e 43  _SORTER_REFERENC
b920: 45 53 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70 74  ES} {.  This opt
b930: 69 6f 6e 20 61 63 74 69 76 61 74 65 73 20 61 6e  ion activates an
b940: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 74 68   optimization th
b950: 61 74 20 72 65 64 75 63 65 73 20 74 68 65 20 6d  at reduces the m
b960: 65 6d 6f 72 79 20 72 65 71 75 69 72 65 64 0a 20  emory required. 
b970: 20 62 79 20 74 68 65 20 73 6f 72 74 65 72 20 61   by the sorter a
b980: 74 20 74 68 65 20 63 6f 73 74 20 6f 66 20 64 6f  t the cost of do
b990: 69 6e 67 20 61 64 64 69 74 69 6f 6e 61 6c 20 42  ing additional B
b9a0: 2d 74 72 65 65 20 6c 6f 6f 6b 75 70 73 20 61 66  -tree lookups af
b9b0: 74 65 72 0a 20 20 74 68 65 20 73 6f 72 74 20 68  ter.  the sort h
b9c0: 61 73 20 6f 63 63 75 72 72 65 64 2e 0a 20 20 3c  as occurred..  <
b9d0: 70 3e 0a 20 20 54 68 65 20 64 65 66 61 75 6c 74  p>.  The default
b9e0: 20 73 6f 72 74 69 6e 67 20 70 72 6f 63 65 64 75   sorting procedu
b9f0: 72 65 20 69 73 20 74 6f 20 67 61 74 68 65 72 20  re is to gather 
ba00: 61 6c 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  all information 
ba10: 74 68 61 74 20 77 69 6c 6c 0a 20 20 75 6c 74 69  that will.  ulti
ba20: 6d 61 74 65 6c 79 20 62 65 20 6f 75 74 70 75 74  mately be output
ba30: 20 69 6e 74 6f 20 61 20 22 72 65 63 6f 72 64 22   into a "record"
ba40: 20 61 6e 64 20 70 61 73 73 20 74 68 61 74 20 63   and pass that c
ba50: 6f 6d 70 6c 65 74 65 20 72 65 63 6f 72 64 0a 20  omplete record. 
ba60: 20 74 6f 20 74 68 65 20 73 6f 72 74 65 72 2e 20   to the sorter. 
ba70: 20 42 75 74 20 69 6e 20 73 6f 6d 65 20 63 61 73   But in some cas
ba80: 65 73 2c 20 66 6f 72 20 65 78 61 6d 70 6c 65 20  es, for example 
ba90: 69 66 20 73 6f 6d 65 20 6f 66 20 74 68 65 20 6f  if some of the o
baa0: 75 74 70 75 74 0a 20 20 63 6f 6c 75 6d 6e 73 20  utput.  columns 
bab0: 63 6f 6e 73 69 73 74 73 20 6f 66 20 6c 61 72 67  consists of larg
bac0: 65 20 42 4c 4f 42 20 76 61 6c 75 65 73 2c 20 74  e BLOB values, t
bad0: 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 65  he size of the e
bae0: 61 63 68 20 72 65 63 6f 72 64 0a 20 20 63 61 6e  ach record.  can
baf0: 20 62 65 20 6c 61 72 67 65 2c 20 77 68 69 63 68   be large, which
bb00: 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20   means that the 
bb10: 73 6f 72 74 65 72 20 68 61 73 20 74 6f 20 65 69  sorter has to ei
bb20: 74 68 65 72 20 75 73 65 20 6d 6f 72 65 20 6d 65  ther use more me
bb30: 6d 6f 72 79 2c 0a 20 20 61 6e 64 2f 6f 72 20 77  mory,.  and/or w
bb40: 72 69 74 65 20 6d 6f 72 65 20 63 6f 6e 74 65 6e  rite more conten
bb50: 74 20 74 6f 20 74 65 6d 70 6f 72 61 72 79 20 73  t to temporary s
bb60: 74 6f 72 61 67 65 2e 0a 20 20 3c 70 3e 0a 20 20  torage..  <p>.  
bb70: 57 68 65 6e 20 53 51 4c 49 54 45 5f 45 4e 41 42  When SQLITE_ENAB
bb80: 4c 45 5f 53 4f 52 54 45 52 5f 52 45 46 45 52 45  LE_SORTER_REFERE
bb90: 4e 43 45 53 20 69 73 20 65 6e 61 62 6c 65 64 2c  NCES is enabled,
bba0: 20 74 68 65 20 72 65 63 6f 72 64 73 20 70 61 73   the records pas
bbb0: 73 65 64 20 74 6f 0a 20 20 74 68 65 20 73 6f 72  sed to.  the sor
bbc0: 74 65 72 20 6f 66 74 65 6e 20 63 6f 6e 74 61 69  ter often contai
bbd0: 6e 20 6f 6e 6c 79 20 61 20 5b 52 4f 57 49 44 5d  n only a [ROWID]
bbe0: 20 76 61 6c 75 65 2e 20 20 53 75 63 68 20 72 65   value.  Such re
bbf0: 63 6f 72 64 73 20 61 72 65 20 6d 75 63 68 0a 20  cords are much. 
bc00: 20 73 6d 61 6c 6c 65 72 2e 20 20 54 68 69 73 20   smaller.  This 
bc10: 6d 65 61 6e 73 20 74 68 65 20 73 6f 72 74 65 72  means the sorter
bc20: 20 68 61 73 20 6d 75 63 68 20 6c 65 73 73 20 22   has much less "
bc30: 70 61 79 6c 6f 61 64 22 20 74 6f 20 64 65 61 6c  payload" to deal
bc40: 20 77 69 74 68 20 61 6e 64 0a 20 20 63 61 6e 20   with and.  can 
bc50: 72 75 6e 20 66 61 73 74 65 72 2e 20 20 41 66 74  run faster.  Aft
bc60: 65 72 20 73 6f 72 74 69 6e 67 20 68 61 73 20 6f  er sorting has o
bc70: 63 63 75 72 72 65 64 2c 20 74 68 65 20 52 4f 57  ccurred, the ROW
bc80: 49 44 20 69 73 20 75 73 65 64 20 74 6f 20 6c 6f  ID is used to lo
bc90: 6f 6b 20 75 70 20 0a 20 20 74 68 65 20 6f 75 74  ok up .  the out
bca0: 70 75 74 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65  put column value
bcb0: 73 20 69 6e 20 74 68 65 20 6f 72 69 67 69 6e 61  s in the origina
bcc0: 6c 20 74 61 62 6c 65 2e 20 20 54 68 61 74 20 72  l table.  That r
bcd0: 65 71 75 69 72 65 73 20 61 6e 6f 74 68 65 72 0a  equires another.
bce0: 20 20 73 65 61 72 63 68 20 69 6e 74 6f 20 74 68    search into th
bcf0: 65 20 74 61 62 6c 65 2c 20 61 6e 64 20 63 6f 75  e table, and cou
bd00: 6c 64 20 70 6f 74 65 6e 74 69 61 6c 6c 79 20 72  ld potentially r
bd10: 65 73 75 6c 74 20 69 6e 20 61 20 73 6c 6f 77 64  esult in a slowd
bd20: 6f 77 6e 2e 20 20 4f 72 2c 0a 20 20 69 74 20 6d  own.  Or,.  it m
bd30: 69 67 68 74 20 62 65 20 61 20 70 65 72 66 6f 72  ight be a perfor
bd40: 6d 61 6e 63 65 20 77 69 6e 2c 20 64 65 70 65 6e  mance win, depen
bd50: 64 69 6e 67 20 6f 6e 20 68 6f 77 20 6c 61 72 67  ding on how larg
bd60: 65 20 74 68 65 20 76 61 6c 75 65 73 20 61 72 65  e the values are
bd70: 2e 0a 20 20 3c 70 3e 0a 20 20 45 76 65 6e 20 77  ..  <p>.  Even w
bd80: 68 65 6e 20 74 68 65 20 53 51 4c 49 54 45 5f 45  hen the SQLITE_E
bd90: 4e 41 42 4c 45 5f 53 4f 52 54 45 52 5f 52 45 46  NABLE_SORTER_REF
bda0: 45 52 45 4e 43 45 53 20 63 6f 6d 70 69 6c 65 2d  ERENCES compile-
bdb0: 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20 6f  time option is o
bdc0: 6e 2c 0a 20 20 73 6f 72 74 65 72 20 72 65 66 65  n,.  sorter refe
bdd0: 72 65 6e 63 65 73 20 61 72 65 20 73 74 69 6c 6c  rences are still
bde0: 20 64 69 73 61 62 6c 65 64 20 62 79 20 64 65 66   disabled by def
bdf0: 61 75 6c 74 2e 20 20 54 6f 20 75 73 65 20 73 6f  ault.  To use so
be00: 72 74 65 72 20 72 65 66 65 72 65 6e 63 65 73 2c  rter references,
be10: 0a 20 20 74 68 65 20 61 70 70 6c 69 63 61 74 69  .  the applicati
be20: 6f 6e 20 6d 75 73 74 20 73 65 74 20 61 20 73 6f  on must set a so
be30: 72 74 65 72 20 72 65 66 65 72 65 6e 63 65 20 73  rter reference s
be40: 69 7a 65 20 74 68 72 65 73 68 6f 6c 64 20 75 73  ize threshold us
be50: 69 6e 67 20 74 68 65 0a 20 20 5b 73 71 6c 69 74  ing the.  [sqlit
be60: 65 33 5f 63 6f 6e 66 69 67 5d 28 5b 53 51 4c 49  e3_config]([SQLI
be70: 54 45 5f 43 4f 4e 46 49 47 5f 53 4f 52 54 45 52  TE_CONFIG_SORTER
be80: 52 45 46 5f 53 49 5a 45 5d 29 20 69 6e 74 65 72  REF_SIZE]) inter
be90: 66 61 63 65 20 61 74 20 73 74 61 72 74 2d 74 69  face at start-ti
bea0: 6d 65 2e 0a 20 20 3c 70 3e 0a 20 20 42 65 63 61  me..  <p>.  Beca
beb0: 75 73 65 20 74 68 65 20 53 51 4c 69 74 65 20 64  use the SQLite d
bec0: 65 76 65 6c 6f 70 65 72 73 20 64 6f 20 6e 6f 74  evelopers do not
bed0: 20 6b 6e 6f 77 20 77 68 65 74 68 65 72 20 74 68   know whether th
bee0: 65 20 0a 20 20 53 51 4c 49 54 45 5f 45 4e 41 42  e .  SQLITE_ENAB
bef0: 4c 45 5f 53 4f 52 54 45 52 5f 52 45 46 45 52 45  LE_SORTER_REFERE
bf00: 4e 43 45 53 20 6f 70 74 69 6f 6e 20 77 69 6c 6c  NCES option will
bf10: 20 68 65 6c 70 20 6f 72 20 68 75 72 74 20 70 65   help or hurt pe
bf20: 72 66 6f 72 6d 61 6e 63 65 2c 0a 20 20 69 74 20  rformance,.  it 
bf30: 69 73 20 64 69 73 61 62 6c 65 64 20 62 79 20 64  is disabled by d
bf40: 65 66 61 75 6c 74 20 61 74 20 74 68 69 73 20 74  efault at this t
bf50: 69 6d 65 20 28 32 30 31 38 2d 30 35 2d 30 34 29  ime (2018-05-04)
bf60: 2e 20 20 49 74 20 6d 69 67 68 74 20 62 65 20 65  .  It might be e
bf70: 6e 61 62 6c 65 64 0a 20 20 62 79 20 64 65 66 61  nabled.  by defa
bf80: 75 6c 74 20 69 6e 20 73 6f 6d 65 20 66 75 74 75  ult in some futu
bf90: 72 65 20 72 65 6c 65 61 73 65 2c 20 64 65 70 65  re release, depe
bfa0: 6e 64 69 6e 67 20 6f 6e 20 77 68 61 74 20 69 73  nding on what is
bfb0: 20 6c 65 61 72 6e 65 64 20 61 62 6f 75 74 20 69   learned about i
bfc0: 74 73 0a 20 20 69 6d 70 61 63 74 20 6f 6e 20 70  ts.  impact on p
bfd0: 65 72 66 6f 72 6d 61 6e 63 65 2e 0a 7d 0a 0a 43  erformance..}..C
bfe0: 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53  OMPILE_OPTION {S
bff0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d  QLITE_ENABLE_STM
c000: 54 5f 53 43 41 4e 53 54 41 54 55 53 7d 20 7b 0a  T_SCANSTATUS} {.
c010: 20 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 65 6e    This option en
c020: 61 62 6c 65 73 20 74 68 65 20 5b 73 71 6c 69 74  ables the [sqlit
c030: 65 33 5f 73 74 6d 74 5f 73 63 61 6e 73 74 61 74  e3_stmt_scanstat
c040: 75 73 28 29 5d 20 69 6e 74 65 72 66 61 63 65 2e  us()] interface.
c050: 20 20 54 68 65 0a 20 20 5b 73 71 6c 69 74 65 33    The.  [sqlite3
c060: 5f 73 74 6d 74 5f 73 63 61 6e 73 74 61 74 75 73  _stmt_scanstatus
c070: 28 29 5d 20 69 6e 74 65 72 66 61 63 65 20 69 73  ()] interface is
c080: 20 6e 6f 72 6d 61 6c 6c 79 20 6f 6d 69 74 74 65   normally omitte
c090: 64 20 66 72 6f 6d 20 74 68 65 20 62 75 69 6c 64  d from the build
c0a0: 0a 20 20 62 65 63 61 75 73 65 20 69 74 20 69 6d  .  because it im
c0b0: 70 6f 73 65 73 20 61 20 73 6d 61 6c 6c 20 70 65  poses a small pe
c0c0: 72 66 6f 72 6d 61 6e 63 65 20 70 65 6e 61 6c 74  rformance penalt
c0d0: 79 2c 20 65 76 65 6e 20 6f 6e 20 73 74 61 74 65  y, even on state
c0e0: 6d 65 6e 74 73 20 74 68 61 74 0a 20 20 64 6f 20  ments that.  do 
c0f0: 6e 6f 74 20 75 73 65 20 74 68 65 20 66 65 61 74  not use the feat
c100: 75 72 65 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f  ure..}..COMPILE_
c110: 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 45  OPTION {SQLITE_E
c120: 4e 41 42 4c 45 5f 53 54 4d 54 56 54 41 42 7d 20  NABLE_STMTVTAB} 
c130: 7b 0a 20 20 54 68 69 73 20 63 6f 6d 70 69 6c 65  {.  This compile
c140: 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 65 6e 61  -time option ena
c150: 62 6c 65 73 20 74 68 65 20 5b 53 51 4c 49 54 45  bles the [SQLITE
c160: 5f 53 54 4d 54 20 76 69 72 74 75 61 6c 20 74 61  _STMT virtual ta
c170: 62 6c 65 5d 20 6c 6f 67 69 63 2e 0a 7d 0a 0a 43  ble] logic..}..C
c180: 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53  OMPILE_OPTION {S
c190: 51 4c 49 54 45 5f 52 54 52 45 45 5f 49 4e 54 5f  QLITE_RTREE_INT_
c1a0: 4f 4e 4c 59 7d 20 7b 0a 20 20 54 68 69 73 20 63  ONLY} {.  This c
c1b0: 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69  ompile-time opti
c1c0: 6f 6e 20 69 73 20 64 65 70 72 65 63 61 74 65 64  on is deprecated
c1d0: 20 61 6e 64 20 75 6e 74 65 73 74 65 64 2e 0a 7d   and untested..}
c1e0: 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e  ..COMPILE_OPTION
c1f0: 20 7b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f   {SQLITE_ENABLE_
c200: 53 51 4c 4c 4f 47 7d 20 7b 0a 20 20 54 68 69 73  SQLLOG} {.  This
c210: 20 6f 70 74 69 6f 6e 20 65 6e 61 62 6c 65 73 20   option enables 
c220: 65 78 74 72 61 20 63 6f 64 65 20 28 65 73 70 65  extra code (espe
c230: 63 69 61 6c 6c 79 20 74 68 65 20 5b 53 51 4c 49  cially the [SQLI
c240: 54 45 5f 43 4f 4e 46 49 47 5f 53 51 4c 4c 4f 47  TE_CONFIG_SQLLOG
c250: 5d 0a 20 20 6f 70 74 69 6f 6e 20 74 6f 20 5b 73  ].  option to [s
c260: 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 28 29 5d  qlite3_config()]
c270: 29 20 74 68 61 74 20 63 61 6e 20 62 65 20 75 73  ) that can be us
c280: 65 64 20 74 6f 20 63 72 65 61 74 65 20 6c 6f 67  ed to create log
c290: 73 20 6f 66 20 61 6c 6c 0a 20 20 53 51 4c 69 74  s of all.  SQLit
c2a0: 65 20 70 72 6f 63 65 73 73 69 6e 67 20 70 65 72  e processing per
c2b0: 66 6f 72 6d 65 64 20 62 79 20 61 6e 20 61 70 70  formed by an app
c2c0: 6c 69 63 61 74 69 6f 6e 2e 20 20 54 68 65 73 65  lication.  These
c2d0: 20 6c 6f 67 73 20 63 61 6e 20 62 65 20 75 73 65   logs can be use
c2e0: 66 75 6c 0a 20 20 69 6e 20 64 6f 69 6e 67 20 6f  ful.  in doing o
c2f0: 66 66 2d 6c 69 6e 65 20 61 6e 61 6c 79 73 69 73  ff-line analysis
c300: 20 6f 66 20 74 68 65 20 62 65 68 61 76 69 6f 72   of the behavior
c310: 20 6f 66 20 61 6e 20 61 70 70 6c 69 63 61 74 69   of an applicati
c320: 6f 6e 2c 20 61 6e 64 20 65 73 70 65 63 69 61 6c  on, and especial
c330: 6c 79 0a 20 20 66 6f 72 20 70 65 72 66 6f 72 6d  ly.  for perform
c340: 61 6e 63 65 20 61 6e 61 6c 79 73 69 73 2e 20 20  ance analysis.  
c350: 49 6e 20 6f 72 64 65 72 20 66 6f 72 20 74 68 65  In order for the
c360: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
c370: 51 4c 4c 4f 47 20 6f 70 74 69 6f 6e 20 74 6f 20  QLLOG option to 
c380: 0a 20 20 62 65 20 75 73 65 66 75 6c 2c 20 73 6f  .  be useful, so
c390: 6d 65 20 65 78 74 72 61 20 63 6f 64 65 20 69 73  me extra code is
c3a0: 20 72 65 71 75 69 72 65 64 2e 20 20 54 68 65 20   required.  The 
c3b0: 0a 20 20 3c 61 20 68 72 65 66 3d 22 68 74 74 70  .  <a href="http
c3c0: 3a 2f 2f 77 77 77 2e 73 71 6c 69 74 65 2e 6f 72  ://www.sqlite.or
c3d0: 67 2f 73 72 63 2f 64 6f 63 2f 74 72 75 6e 6b 2f  g/src/doc/trunk/
c3e0: 73 72 63 2f 74 65 73 74 5f 73 71 6c 6c 6f 67 2e  src/test_sqllog.
c3f0: 63 22 3e 22 74 65 73 74 5f 73 71 6c 6c 6f 67 2e  c">"test_sqllog.
c400: 63 22 3c 2f 61 3e 0a 20 20 73 6f 75 72 63 65 20  c"</a>.  source 
c410: 63 6f 64 65 0a 20 20 66 69 6c 65 20 69 6e 20 74  code.  file in t
c420: 68 65 20 53 51 4c 69 74 65 20 73 6f 75 72 63 65  he SQLite source
c430: 20 74 72 65 65 20 69 73 20 61 20 77 6f 72 6b 69   tree is a worki
c440: 6e 67 20 65 78 61 6d 70 6c 65 20 6f 66 20 74 68  ng example of th
c450: 65 20 72 65 71 75 69 72 65 64 20 65 78 74 72 61  e required extra
c460: 0a 20 20 63 6f 64 65 2e 20 20 4f 6e 20 75 6e 69  .  code.  On uni
c470: 78 20 61 6e 64 20 77 69 6e 64 6f 77 73 20 73 79  x and windows sy
c480: 73 74 65 6d 73 2c 20 61 20 64 65 76 65 6c 6f 70  stems, a develop
c490: 65 72 20 63 61 6e 20 61 70 70 65 6e 64 20 74 68  er can append th
c4a0: 65 20 74 65 78 74 20 6f 66 20 74 68 65 0a 20 20  e text of the.  
c4b0: 22 74 65 73 74 5f 73 71 6c 6c 6f 67 2e 63 22 20  "test_sqllog.c" 
c4c0: 73 6f 75 72 63 65 20 63 6f 64 65 20 66 69 6c 65  source code file
c4d0: 20 74 6f 20 74 68 65 20 65 6e 64 20 6f 66 20 61   to the end of a
c4e0: 6e 20 22 73 71 6c 69 74 65 33 2e 63 22 20 61 6d  n "sqlite3.c" am
c4f0: 61 6c 67 61 6d 61 74 69 6f 6e 2c 0a 20 20 72 65  algamation,.  re
c500: 63 6f 6d 70 69 6c 65 20 74 68 65 20 61 70 70 6c  compile the appl
c510: 69 63 61 74 69 6f 6e 20 75 73 69 6e 67 20 74 68  ication using th
c520: 65 20 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42 4c  e -DSQLITE_ENABL
c530: 45 5f 53 51 4c 4c 4f 47 20 6f 70 74 69 6f 6e 2c  E_SQLLOG option,
c540: 20 74 68 65 6e 20 0a 20 20 63 6f 6e 74 72 6f 6c   then .  control
c550: 20 6c 6f 67 67 69 6e 67 20 75 73 69 6e 67 20 65   logging using e
c560: 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69 61  nvironment varia
c570: 62 6c 65 73 2e 20 20 53 65 65 20 74 68 65 20 68  bles.  See the h
c580: 65 61 64 65 72 20 63 6f 6d 6d 65 6e 74 20 6f 6e  eader comment on
c590: 20 0a 20 20 74 68 65 20 22 74 65 73 74 5f 73 71   .  the "test_sq
c5a0: 6c 6c 6f 67 2e 63 22 20 73 6f 75 72 63 65 20 66  llog.c" source f
c5b0: 69 6c 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ile for addition
c5c0: 61 6c 20 64 65 74 61 69 6c 2e 20 20 0a 7d 0a 0a  al detail.  .}..
c5d0: 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b  COMPILE_OPTION {
c5e0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
c5f0: 41 54 32 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70  AT2} {.  This op
c600: 74 69 6f 6e 20 75 73 65 64 20 74 6f 20 63 61 75  tion used to cau
c610: 73 65 20 74 68 65 20 5b 41 4e 41 4c 59 5a 45 5d  se the [ANALYZE]
c620: 20 63 6f 6d 6d 61 6e 64 20 74 6f 20 63 6f 6c 6c   command to coll
c630: 65 63 74 0a 20 20 69 6e 64 65 78 20 68 69 73 74  ect.  index hist
c640: 6f 67 72 61 6d 20 64 61 74 61 20 69 6e 20 74 68  ogram data in th
c650: 65 20 3c 62 3e 73 71 6c 69 74 65 5f 73 74 61 74  e <b>sqlite_stat
c660: 32 3c 2f 62 3e 20 74 61 62 6c 65 2e 20 20 42 75  2</b> table.  Bu
c670: 74 20 74 68 61 74 0a 20 20 66 75 6e 63 74 69 6f  t that.  functio
c680: 6e 61 6c 69 74 79 20 77 61 73 20 73 75 70 65 72  nality was super
c690: 63 65 64 65 64 20 62 79 20 5b 53 51 4c 49 54 45  ceded by [SQLITE
c6a0: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5d 20 61  _ENABLE_STAT3] a
c6b0: 73 20 6f 66 0a 20 20 53 51 4c 69 74 65 20 5b 76  s of.  SQLite [v
c6c0: 65 72 73 69 6f 6e 20 33 2e 37 2e 39 5d 20 28 5b  ersion 3.7.9] ([
c6d0: 64 61 74 65 6f 66 3a 33 2e 37 2e 39 5d 29 2e 20  dateof:3.7.9]). 
c6e0: 20 0a 20 20 54 68 65 20 53 51 4c 49 54 45 5f 45   .  The SQLITE_E
c6f0: 4e 41 42 4c 45 5f 53 54 41 54 32 20 63 6f 6d 70  NABLE_STAT2 comp
c700: 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 0a  ile-time option.
c710: 20 20 69 73 20 6e 6f 77 20 61 20 6e 6f 2d 6f 70    is now a no-op
c720: 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54  ..}..COMPILE_OPT
c730: 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 45 4e 41 42  ION {SQLITE_ENAB
c740: 4c 45 5f 53 54 41 54 33 7d 20 7b 0a 20 20 54 68  LE_STAT3} {.  Th
c750: 69 73 20 6f 70 74 69 6f 6e 20 61 64 64 73 20 61  is option adds a
c760: 64 64 69 74 69 6f 6e 61 6c 20 6c 6f 67 69 63 20  dditional logic 
c770: 74 6f 20 74 68 65 20 5b 41 4e 41 4c 59 5a 45 5d  to the [ANALYZE]
c780: 20 63 6f 6d 6d 61 6e 64 20 61 6e 64 20 74 6f 0a   command and to.
c790: 20 20 74 68 65 20 5b 71 75 65 72 79 20 70 6c 61    the [query pla
c7a0: 6e 6e 65 72 5d 20 74 68 61 74 20 63 61 6e 20 68  nner] that can h
c7b0: 65 6c 70 20 53 51 4c 69 74 65 20 74 6f 20 63 68  elp SQLite to ch
c7c0: 6f 73 65 20 61 20 62 65 74 74 65 72 20 71 75 65  ose a better que
c7d0: 72 79 20 70 6c 61 6e 0a 20 20 75 6e 64 65 72 20  ry plan.  under 
c7e0: 63 65 72 74 61 69 6e 20 73 69 74 75 61 74 69 6f  certain situatio
c7f0: 6e 73 2e 20 20 54 68 65 20 5b 41 4e 41 4c 59 5a  ns.  The [ANALYZ
c800: 45 5d 20 63 6f 6d 6d 61 6e 64 20 69 73 20 65 6e  E] command is en
c810: 68 61 6e 63 65 64 20 74 6f 20 63 6f 6c 6c 65 63  hanced to collec
c820: 74 0a 20 20 68 69 73 74 6f 67 72 61 6d 20 64 61  t.  histogram da
c830: 74 61 20 66 72 6f 6d 20 74 68 65 20 6c 65 66 74  ta from the left
c840: 2d 6d 6f 73 74 20 63 6f 6c 75 6d 6e 20 6f 66 20  -most column of 
c850: 65 61 63 68 20 69 6e 64 65 78 20 61 6e 64 20 73  each index and s
c860: 74 6f 72 65 20 74 68 61 74 20 64 61 74 61 0a 20  tore that data. 
c870: 20 69 6e 20 74 68 65 20 5b 73 71 6c 69 74 65 5f   in the [sqlite_
c880: 73 74 61 74 33 5d 20 74 61 62 6c 65 2e 20 20 54  stat3] table.  T
c890: 68 65 20 71 75 65 72 79 20 70 6c 61 6e 6e 65 72  he query planner
c8a0: 20 77 69 6c 6c 20 74 68 65 6e 20 75 73 65 20 74   will then use t
c8b0: 68 65 0a 20 20 68 69 73 74 6f 67 72 61 6d 20 64  he.  histogram d
c8c0: 61 74 61 20 74 6f 20 68 65 6c 70 20 69 74 20 6d  ata to help it m
c8d0: 61 6b 65 20 62 65 74 74 65 72 20 69 6e 64 65 78  ake better index
c8e0: 20 63 68 6f 69 63 65 73 2e 20 20 4e 6f 74 65 2c   choices.  Note,
c8f0: 20 68 6f 77 65 76 65 72 2c 0a 20 20 74 68 61 74   however,.  that
c900: 20 74 68 65 20 75 73 65 20 6f 66 20 68 69 73 74   the use of hist
c910: 6f 67 72 61 6d 20 64 61 74 61 20 69 6e 20 71 75  ogram data in qu
c920: 65 72 79 20 70 6c 61 6e 6e 65 72 20 76 69 6f 6c  ery planner viol
c930: 61 74 65 73 20 74 68 65 0a 20 20 5b 71 75 65 72  ates the.  [quer
c940: 79 20 70 6c 61 6e 6e 65 72 20 73 74 61 62 69 6c  y planner stabil
c950: 69 74 79 20 67 75 61 72 61 6e 74 65 65 5d 20 77  ity guarantee] w
c960: 68 69 63 68 20 69 73 20 69 6d 70 6f 72 74 61 6e  hich is importan
c970: 74 20 74 6f 20 73 6f 6d 65 20 61 70 70 6c 69 63  t to some applic
c980: 61 74 69 6f 6e 73 2e 0a 20 20 3c 70 3e 0a 7d 0a  ations..  <p>.}.
c990: 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20  .COMPILE_OPTION 
c9a0: 7b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53  {SQLITE_ENABLE_S
c9b0: 54 41 54 34 7d 20 7b 0a 20 20 54 68 69 73 20 6f  TAT4} {.  This o
c9c0: 70 74 69 6f 6e 20 61 64 64 73 20 61 64 64 69 74  ption adds addit
c9d0: 69 6f 6e 61 6c 20 6c 6f 67 69 63 20 74 6f 20 74  ional logic to t
c9e0: 68 65 20 5b 41 4e 41 4c 59 5a 45 5d 20 63 6f 6d  he [ANALYZE] com
c9f0: 6d 61 6e 64 20 61 6e 64 20 74 6f 0a 20 20 74 68  mand and to.  th
ca00: 65 20 5b 71 75 65 72 79 20 70 6c 61 6e 6e 65 72  e [query planner
ca10: 5d 20 74 68 61 74 20 63 61 6e 20 68 65 6c 70 20  ] that can help 
ca20: 53 51 4c 69 74 65 20 74 6f 20 63 68 6f 73 65 20  SQLite to chose 
ca30: 61 20 62 65 74 74 65 72 20 71 75 65 72 79 20 70  a better query p
ca40: 6c 61 6e 0a 20 20 75 6e 64 65 72 20 63 65 72 74  lan.  under cert
ca50: 61 69 6e 20 73 69 74 75 61 74 69 6f 6e 73 2e 20  ain situations. 
ca60: 20 54 68 65 20 5b 41 4e 41 4c 59 5a 45 5d 20 63   The [ANALYZE] c
ca70: 6f 6d 6d 61 6e 64 20 69 73 20 65 6e 68 61 6e 63  ommand is enhanc
ca80: 65 64 20 74 6f 20 63 6f 6c 6c 65 63 74 0a 20 20  ed to collect.  
ca90: 68 69 73 74 6f 67 72 61 6d 20 64 61 74 61 20 66  histogram data f
caa0: 72 6f 6d 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20  rom all columns 
cab0: 6f 66 20 65 76 65 72 79 20 69 6e 64 65 78 20 61  of every index a
cac0: 6e 64 20 73 74 6f 72 65 20 74 68 61 74 20 64 61  nd store that da
cad0: 74 61 0a 20 20 69 6e 20 74 68 65 20 5b 73 71 6c  ta.  in the [sql
cae0: 69 74 65 5f 73 74 61 74 34 5d 20 74 61 62 6c 65  ite_stat4] table
caf0: 2e 20 20 54 68 65 20 71 75 65 72 79 20 70 6c 61  .  The query pla
cb00: 6e 6e 65 72 20 77 69 6c 6c 20 74 68 65 6e 20 75  nner will then u
cb10: 73 65 20 74 68 65 0a 20 20 68 69 73 74 6f 67 72  se the.  histogr
cb20: 61 6d 20 64 61 74 61 20 74 6f 20 68 65 6c 70 20  am data to help 
cb30: 69 74 20 6d 61 6b 65 20 62 65 74 74 65 72 20 69  it make better i
cb40: 6e 64 65 78 20 63 68 6f 69 63 65 73 2e 20 20 54  ndex choices.  T
cb50: 68 65 20 64 6f 77 6e 73 69 64 65 20 6f 66 0a 20  he downside of. 
cb60: 20 74 68 69 73 20 63 6f 6d 70 69 6c 65 2d 74 69   this compile-ti
cb70: 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20 74 68 61  me option is tha
cb80: 74 20 69 74 20 76 69 6f 6c 61 74 65 73 20 74 68  t it violates th
cb90: 65 0a 20 20 5b 71 75 65 72 79 20 70 6c 61 6e 6e  e.  [query plann
cba0: 65 72 20 73 74 61 62 69 6c 69 74 79 20 67 75 61  er stability gua
cbb0: 72 61 6e 74 65 65 5d 20 6d 61 6b 69 6e 67 20 69  rantee] making i
cbc0: 74 20 6d 6f 72 65 20 64 69 66 66 69 63 75 6c 74  t more difficult
cbd0: 20 74 6f 20 65 6e 73 75 72 65 0a 20 20 63 6f 6e   to ensure.  con
cbe0: 73 69 73 74 65 6e 74 20 70 65 72 66 6f 72 6d 61  sistent performa
cbf0: 6e 63 65 20 69 6e 20 6d 61 73 73 2d 70 72 6f 64  nce in mass-prod
cc00: 75 63 65 64 20 61 70 70 6c 69 63 61 74 69 6f 6e  uced application
cc10: 73 2e 0a 20 20 3c 70 3e 0a 20 20 53 51 4c 49 54  s..  <p>.  SQLIT
cc20: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 20 69  E_ENABLE_STAT4 i
cc30: 73 20 61 6e 20 65 6e 68 61 6e 63 65 6d 65 6e 74  s an enhancement
cc40: 20 6f 66 20 5b 53 51 4c 49 54 45 5f 45 4e 41 42   of [SQLITE_ENAB
cc50: 4c 45 5f 53 54 41 54 33 5d 2e 20 20 53 54 41 54  LE_STAT3].  STAT
cc60: 33 0a 20 20 6f 6e 6c 79 20 72 65 63 6f 72 64 65  3.  only recorde
cc70: 64 20 68 69 73 74 6f 67 72 61 6d 20 64 61 74 61  d histogram data
cc80: 20 66 6f 72 20 74 68 65 20 6c 65 66 74 2d 6d 6f   for the left-mo
cc90: 73 74 20 63 6f 6c 75 6d 6e 20 6f 66 20 65 61 63  st column of eac
cca0: 68 20 69 6e 64 65 78 0a 20 20 77 68 65 72 65 61  h index.  wherea
ccb0: 73 20 74 68 65 20 53 54 41 54 34 20 65 6e 68 61  s the STAT4 enha
ccc0: 6e 63 65 6d 65 6e 74 20 72 65 63 6f 72 64 73 20  ncement records 
ccd0: 68 69 73 74 6f 67 72 61 6d 20 64 61 74 61 20 66  histogram data f
cce0: 72 6f 6d 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 0a  rom all columns.
ccf0: 20 20 6f 66 20 65 61 63 68 20 69 6e 64 65 78 2e    of each index.
cd00: 0a 20 20 54 68 65 20 5b 53 51 4c 49 54 45 5f 45  .  The [SQLITE_E
cd10: 4e 41 42 4c 45 5f 53 54 41 54 33 5d 20 63 6f 6d  NABLE_STAT3] com
cd20: 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
cd30: 20 69 73 20 61 20 6e 6f 2d 6f 70 20 61 6e 64 20   is a no-op and 
cd40: 69 73 20 69 67 6e 6f 72 65 64 0a 20 20 69 66 20  is ignored.  if 
cd50: 74 68 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  the SQLITE_ENABL
cd60: 45 5f 53 54 41 54 34 20 63 6f 6d 70 69 6c 65 2d  E_STAT4 compile-
cd70: 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20 75  time option is u
cd80: 73 65 64 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f  sed..}..COMPILE_
cd90: 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 45  OPTION {SQLITE_E
cda0: 4e 41 42 4c 45 5f 54 52 45 45 5f 45 58 50 4c 41  NABLE_TREE_EXPLA
cdb0: 49 4e 7d 20 7b 0a 20 20 54 68 69 73 20 63 6f 6d  IN} {.  This com
cdc0: 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
cdd0: 20 69 73 20 6e 6f 20 6c 6f 6e 67 65 72 20 75 73   is no longer us
cde0: 65 64 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f  ed..}..COMPILE_O
cdf0: 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 45 4e  PTION {SQLITE_EN
ce00: 41 42 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c 45  ABLE_UPDATE_DELE
ce10: 54 45 5f 4c 49 4d 49 54 7d 20 7b 0a 20 20 54 68  TE_LIMIT} {.  Th
ce20: 69 73 20 6f 70 74 69 6f 6e 20 65 6e 61 62 6c 65  is option enable
ce30: 73 20 61 6e 20 6f 70 74 69 6f 6e 61 6c 20 4f 52  s an optional OR
ce40: 44 45 52 20 42 59 20 61 6e 64 20 4c 49 4d 49 54  DER BY and LIMIT
ce50: 20 63 6c 61 75 73 65 20 6f 6e 20 0a 20 20 5b 55   clause on .  [U
ce60: 50 44 41 54 45 5d 20 61 6e 64 20 5b 44 45 4c 45  PDATE] and [DELE
ce70: 54 45 5d 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a  TE] statements..
ce80: 0a 20 20 3c 70 3e 49 66 20 74 68 69 73 20 6f 70  .  <p>If this op
ce90: 74 69 6f 6e 20 69 73 20 64 65 66 69 6e 65 64 2c  tion is defined,
cea0: 20 74 68 65 6e 20 69 74 20 6d 75 73 74 20 61 6c   then it must al
ceb0: 73 6f 20 62 65 20 0a 20 20 64 65 66 69 6e 65 64  so be .  defined
cec0: 20 77 68 65 6e 20 75 73 69 6e 67 20 74 68 65 20   when using the 
ced0: 5b 4c 65 6d 6f 6e 20 70 61 72 73 65 72 20 67 65  [Lemon parser ge
cee0: 6e 65 72 61 74 6f 72 5d 20 74 6f 6f 6c 20 74 6f  nerator] tool to
cef0: 20 67 65 6e 65 72 61 74 65 20 61 20 70 61 72 73   generate a pars
cf00: 65 2e 63 0a 20 20 66 69 6c 65 2e 20 42 65 63 61  e.c.  file. Beca
cf10: 75 73 65 20 6f 66 20 74 68 69 73 2c 20 74 68 69  use of this, thi
cf20: 73 20 6f 70 74 69 6f 6e 20 6d 61 79 20 6f 6e 6c  s option may onl
cf30: 79 20 62 65 20 75 73 65 64 20 77 68 65 6e 20 74  y be used when t
cf40: 68 65 20 6c 69 62 72 61 72 79 20 69 73 20 62 75  he library is bu
cf50: 69 6c 74 0a 20 20 66 72 6f 6d 20 73 6f 75 72 63  ilt.  from sourc
cf60: 65 2c 20 6e 6f 74 20 66 72 6f 6d 20 74 68 65 20  e, not from the 
cf70: 5b 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 5d 20 6f  [amalgamation] o
cf80: 72 20 66 72 6f 6d 20 74 68 65 20 63 6f 6c 6c 65  r from the colle
cf90: 63 74 69 6f 6e 20 6f 66 0a 20 20 70 72 65 2d 70  ction of.  pre-p
cfa0: 61 63 6b 61 67 65 64 20 43 20 66 69 6c 65 73 20  ackaged C files 
cfb0: 70 72 6f 76 69 64 65 64 20 66 6f 72 20 6e 6f 6e  provided for non
cfc0: 2d 55 6e 69 78 20 6c 69 6b 65 20 70 6c 61 74 66  -Unix like platf
cfd0: 6f 72 6d 73 20 6f 6e 20 74 68 65 20 77 65 62 73  orms on the webs
cfe0: 69 74 65 2e 0a 20 20 3c 2f 70 3e 0a 7d 0a 0a 43  ite..  </p>.}..C
cff0: 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53  OMPILE_OPTION {S
d000: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 4e 4b  QLITE_ENABLE_UNK
d010: 4e 4f 57 4e 5f 53 51 4c 5f 46 55 4e 43 54 49 4f  NOWN_SQL_FUNCTIO
d020: 4e 7d 20 7b 0a 20 20 57 68 65 6e 20 74 68 65 20  N} {.  When the 
d030: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 4e  SQLITE_ENABLE_UN
d040: 4b 4e 4f 57 4e 5f 53 51 4c 5f 46 55 4e 43 54 49  KNOWN_SQL_FUNCTI
d050: 4f 4e 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  ON compile-time 
d060: 6f 70 74 69 6f 6e 20 69 73 0a 20 20 61 63 74 69  option is.  acti
d070: 76 61 74 65 64 2c 20 53 51 4c 69 74 65 20 77 69  vated, SQLite wi
d080: 6c 6c 20 73 75 70 70 72 65 73 73 20 22 75 6e 6b  ll suppress "unk
d090: 6e 6f 77 6e 20 66 75 6e 63 74 69 6f 6e 22 20 65  nown function" e
d0a0: 72 72 6f 72 73 20 77 68 65 6e 20 72 75 6e 6e 69  rrors when runni
d0b0: 6e 67 0a 20 20 61 6e 20 5b 45 58 50 4c 41 49 4e  ng.  an [EXPLAIN
d0c0: 5d 20 6f 72 20 5b 45 58 50 4c 41 49 4e 20 51 55  ] or [EXPLAIN QU
d0d0: 45 52 59 20 50 4c 41 4e 5d 2e 20 20 49 6e 73 74  ERY PLAN].  Inst
d0e0: 65 61 64 20 6f 66 20 74 68 72 6f 77 69 6e 67 20  ead of throwing 
d0f0: 61 6e 20 65 72 72 6f 72 2c 0a 20 20 53 51 4c 69  an error,.  SQLi
d100: 74 65 20 77 69 6c 6c 20 69 6e 73 65 72 74 20 61  te will insert a
d110: 20 73 75 62 73 74 69 74 75 74 65 20 6e 6f 2d 6f   substitute no-o
d120: 70 20 66 75 6e 63 74 69 6f 6e 20 6e 61 6d 65 64  p function named
d130: 20 22 75 6e 6b 6e 6f 77 6e 28 29 22 2e 0a 20 20   "unknown()"..  
d140: 54 68 65 20 73 75 62 73 74 69 74 75 74 69 6f 6e  The substitution
d150: 20 6f 66 20 22 75 6e 6b 6e 6f 77 6e 28 29 22 20   of "unknown()" 
d160: 69 6e 20 70 6c 61 63 65 20 6f 66 20 75 6e 72 65  in place of unre
d170: 63 6f 67 6e 69 7a 65 64 20 66 75 6e 63 74 69 6f  cognized functio
d180: 6e 73 0a 20 20 6f 6e 6c 79 20 6f 63 63 75 72 73  ns.  only occurs
d190: 20 6f 6e 20 5b 45 58 50 4c 41 49 4e 5d 20 61 6e   on [EXPLAIN] an
d1a0: 64 20 5b 45 58 50 4c 41 49 4e 20 51 55 45 52 59  d [EXPLAIN QUERY
d1b0: 20 50 4c 41 4e 5d 2c 20 6e 6f 74 20 6f 6e 20 6f   PLAN], not on o
d1c0: 72 64 69 6e 61 72 79 0a 20 20 73 74 61 74 65 6d  rdinary.  statem
d1d0: 65 6e 74 73 2e 0a 20 20 3c 70 3e 0a 20 20 57 68  ents..  <p>.  Wh
d1e0: 65 6e 20 75 73 65 64 20 69 6e 20 74 68 65 20 5b  en used in the [
d1f0: 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 73 68 65  command-line she
d200: 6c 6c 5d 2c 20 74 68 65 0a 20 20 53 51 4c 49 54  ll], the.  SQLIT
d210: 45 5f 45 4e 41 42 4c 45 5f 55 4e 4b 4e 4f 57 4e  E_ENABLE_UNKNOWN
d220: 5f 53 51 4c 5f 46 55 4e 43 54 49 4f 4e 20 66 65  _SQL_FUNCTION fe
d230: 61 74 75 72 65 20 61 6c 6c 6f 77 73 20 53 51 4c  ature allows SQL
d240: 20 74 65 78 74 20 74 68 61 74 20 63 6f 6e 74 61   text that conta
d250: 69 6e 73 0a 20 20 61 70 70 6c 69 63 61 74 69 6f  ins.  applicatio
d260: 6e 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69  n-defined functi
d270: 6f 6e 73 20 74 6f 20 62 65 20 70 61 73 74 65 64  ons to be pasted
d280: 20 69 6e 74 6f 20 74 68 65 20 73 68 65 6c 6c 20   into the shell 
d290: 66 6f 72 20 0a 20 20 61 6e 61 6c 79 73 69 73 20  for .  analysis 
d2a0: 61 6e 64 20 64 65 62 75 67 67 69 6e 67 20 77 69  and debugging wi
d2b0: 74 68 6f 75 74 20 68 61 76 69 6e 67 20 74 6f 20  thout having to 
d2c0: 63 72 65 61 74 65 20 61 6e 64 20 6c 6f 61 64 20  create and load 
d2d0: 61 6e 0a 20 20 65 78 74 65 6e 73 69 6f 6e 20 74  an.  extension t
d2e0: 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74  hat implements t
d2f0: 68 65 20 61 70 70 6c 69 63 61 74 69 6f 6e 2d 64  he application-d
d300: 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73  efined functions
d310: 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54  ..}..COMPILE_OPT
d320: 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 45 4e 41 42  ION {SQLITE_ENAB
d330: 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59  LE_UNLOCK_NOTIFY
d340: 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70 74 69 6f  } {.  This optio
d350: 6e 20 65 6e 61 62 6c 65 73 20 74 68 65 20 5b 73  n enables the [s
d360: 71 6c 69 74 65 33 5f 75 6e 6c 6f 63 6b 5f 6e 6f  qlite3_unlock_no
d370: 74 69 66 79 28 29 5d 20 69 6e 74 65 72 66 61 63  tify()] interfac
d380: 65 20 61 6e 64 0a 20 20 69 74 73 20 61 73 73 6f  e and.  its asso
d390: 63 69 61 74 65 64 20 66 75 6e 63 74 69 6f 6e 61  ciated functiona
d3a0: 6c 69 74 79 2e 20 20 53 65 65 20 74 68 65 20 64  lity.  See the d
d3b0: 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 74 69 74  ocumentation tit
d3c0: 6c 65 64 0a 20 20 5b 55 73 69 6e 67 20 74 68 65  led.  [Using the
d3d0: 20 53 51 4c 69 74 65 20 55 6e 6c 6f 63 6b 20 4e   SQLite Unlock N
d3e0: 6f 74 69 66 69 63 61 74 69 6f 6e 20 46 65 61 74  otification Feat
d3f0: 75 72 65 5d 20 66 6f 72 20 61 64 64 69 74 69 6f  ure] for additio
d400: 6e 61 6c 0a 20 20 69 6e 66 6f 72 6d 61 74 69 6f  nal.  informatio
d410: 6e 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50  n..}..COMPILE_OP
d420: 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 49 4e 54  TION {SQLITE_INT
d430: 52 4f 53 50 45 43 54 49 4f 4e 5f 50 52 41 47 4d  ROSPECTION_PRAGM
d440: 41 53 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70 74  AS} {.  This opt
d450: 69 6f 6e 20 61 64 64 73 20 73 6f 6d 65 20 65 78  ion adds some ex
d460: 74 72 61 20 50 52 41 47 4d 41 20 73 74 61 74 65  tra PRAGMA state
d470: 6d 65 6e 74 73 20 73 75 63 68 20 61 73 0a 20 20  ments such as.  
d480: 5b 50 52 41 47 4d 41 20 66 75 6e 63 74 69 6f 6e  [PRAGMA function
d490: 5f 6c 69 73 74 5d 2c 20 5b 50 52 41 47 4d 41 20  _list], [PRAGMA 
d4a0: 6d 6f 64 75 6c 65 5f 6c 69 73 74 5d 2c 20 61 6e  module_list], an
d4b0: 64 0a 20 20 5b 50 52 41 47 4d 41 20 70 72 61 67  d.  [PRAGMA prag
d4c0: 6d 61 5f 6c 69 73 74 5d 2e 0a 7d 0a 0a 43 4f 4d  ma_list]..}..COM
d4d0: 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c  PILE_OPTION {SQL
d4e0: 49 54 45 5f 53 4f 55 4e 44 45 58 7d 20 7b 0a 20  ITE_SOUNDEX} {. 
d4f0: 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 65 6e 61   This option ena
d500: 62 6c 65 73 20 74 68 65 20 5b 73 6f 75 6e 64 65  bles the [sounde
d510: 78 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e  x() SQL function
d520: 5d 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50  ]..}..COMPILE_OP
d530: 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 55 53 45  TION {SQLITE_USE
d540: 5f 41 4c 4c 4f 43 41 7d 20 7b 0a 20 20 49 66 20  _ALLOCA} {.  If 
d550: 74 68 69 73 20 6f 70 74 69 6f 6e 20 69 73 20 65  this option is e
d560: 6e 61 62 6c 65 64 2c 20 74 68 65 6e 20 74 68 65  nabled, then the
d570: 20 61 6c 6c 6f 63 61 28 29 20 6d 65 6d 6f 72 79   alloca() memory
d580: 20 61 6c 6c 6f 63 61 74 6f 72 20 77 69 6c 6c 20   allocator will 
d590: 62 65 0a 20 20 75 73 65 64 20 69 6e 20 61 20 66  be.  used in a f
d5a0: 65 77 20 73 69 74 75 61 74 69 6f 6e 73 20 77 68  ew situations wh
d5b0: 65 72 65 20 69 74 20 69 73 20 61 70 70 72 6f 70  ere it is approp
d5c0: 72 69 61 74 65 2e 20 20 54 68 69 73 20 72 65 73  riate.  This res
d5d0: 75 6c 74 73 20 69 6e 20 61 20 73 6c 69 67 68 74  ults in a slight
d5e0: 6c 79 0a 20 20 73 6d 61 6c 6c 65 72 20 61 6e 64  ly.  smaller and
d5f0: 20 66 61 73 74 65 72 20 62 69 6e 61 72 79 2e 20   faster binary. 
d600: 20 54 68 65 20 53 51 4c 49 54 45 5f 55 53 45 5f   The SQLITE_USE_
d610: 41 4c 4c 4f 43 41 20 63 6f 6d 70 69 6c 65 2d 74  ALLOCA compile-t
d620: 69 6d 65 20 6f 6e 6c 79 20 6f 6e 6c 79 20 0a 20  ime only only . 
d630: 20 77 6f 72 6b 73 2c 20 6f 66 20 63 6f 75 72 73   works, of cours
d640: 65 2c 20 6f 6e 20 73 79 73 74 65 6d 73 20 74 68  e, on systems th
d650: 61 74 20 73 75 70 70 6f 72 74 20 61 6c 6c 6f 63  at support alloc
d660: 61 28 29 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f  a()..}..COMPILE_
d670: 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 55  OPTION {SQLITE_U
d680: 53 45 5f 46 43 4e 54 4c 5f 54 52 41 43 45 7d 20  SE_FCNTL_TRACE} 
d690: 7b 0a 20 20 54 68 69 73 20 6f 70 74 69 6f 6e 20  {.  This option 
d6a0: 63 61 75 73 65 73 20 53 51 4c 69 74 65 20 74 6f  causes SQLite to
d6b0: 20 69 73 73 75 65 20 65 78 74 72 61 20 5b 53 51   issue extra [SQ
d6c0: 4c 49 54 45 5f 46 43 4e 54 4c 5f 54 52 41 43 45  LITE_FCNTL_TRACE
d6d0: 5d 20 66 69 6c 65 20 63 6f 6e 74 72 6f 6c 73 0a  ] file controls.
d6e0: 20 20 74 6f 20 70 72 6f 76 69 64 65 20 73 75 70    to provide sup
d6f0: 70 6c 65 6d 65 6e 74 61 72 79 20 69 6e 66 6f 72  plementary infor
d700: 6d 61 74 69 6f 6e 20 74 6f 20 74 68 65 20 56 46  mation to the VF
d710: 53 2e 20 20 54 68 65 20 22 76 66 73 6c 6f 67 2e  S.  The "vfslog.
d720: 63 22 20 65 78 74 65 6e 73 69 6f 6e 0a 20 20 6d  c" extension.  m
d730: 61 6b 65 73 20 75 73 65 20 6f 66 20 74 68 69 73  akes use of this
d740: 20 74 6f 20 70 72 6f 76 69 64 65 20 65 6e 68 61   to provide enha
d750: 6e 63 65 64 20 6c 6f 67 73 20 6f 66 20 56 46 53  nced logs of VFS
d760: 20 61 63 74 69 76 69 74 79 2e 0a 7d 0a 0a 43 4f   activity..}..CO
d770: 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51  MPILE_OPTION {SQ
d780: 4c 49 54 45 5f 55 53 45 5f 5a 4c 49 42 7d 20 7b  LITE_USE_ZLIB} {
d790: 0a 20 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 63  .  This option c
d7a0: 61 75 73 65 73 20 73 6f 6d 65 20 65 78 74 65 6e  auses some exten
d7b0: 73 69 6f 6e 73 20 74 6f 20 6c 69 6e 6b 20 61 67  sions to link ag
d7c0: 61 69 6e 73 74 20 74 68 65 20 0a 20 20 5b 68 74  ainst the .  [ht
d7d0: 74 70 73 3a 2f 2f 7a 6c 69 62 2e 6e 65 74 7c 7a  tps://zlib.net|z
d7e0: 6c 69 62 20 63 6f 6d 70 72 65 73 73 69 6f 6e 20  lib compression 
d7f0: 6c 69 62 72 61 72 79 5d 2e 0a 20 20 3c 70 3e 0a  library]..  <p>.
d800: 20 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 68 61    This option ha
d810: 73 20 6e 6f 20 61 66 66 65 63 74 20 6f 6e 20 74  s no affect on t
d820: 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 2e 20  he SQLite core. 
d830: 20 49 74 20 69 73 20 6f 6e 6c 79 20 75 73 65 64   It is only used
d840: 20 62 79 20 65 78 74 65 6e 73 69 6f 6e 73 2e 0a   by extensions..
d850: 20 20 54 68 69 73 20 69 73 20 6f 70 74 69 6f 6e    This is option
d860: 20 69 73 20 6e 65 63 65 73 73 61 72 79 20 66 6f   is necessary fo
d870: 72 20 74 68 65 20 63 6f 6d 6d 70 72 65 73 73 69  r the commpressi
d880: 6f 6e 20 61 6e 64 20 64 65 63 6f 6d 70 72 65 73  on and decompres
d890: 73 69 6f 6e 0a 20 20 66 75 6e 63 74 69 6f 6e 73  sion.  functions
d8a0: 20 74 68 61 74 20 61 72 65 20 70 61 72 74 20 6f   that are part o
d8b0: 66 20 5b 53 51 4c 20 41 72 63 68 69 76 65 5d 20  f [SQL Archive] 
d8c0: 73 75 70 70 6f 72 74 20 69 6e 20 74 68 65 0a 20  support in the. 
d8d0: 20 5b 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 73   [command-line s
d8e0: 68 65 6c 6c 5d 2e 0a 20 20 3c 70 3e 0a 20 20 57  hell]..  <p>.  W
d8f0: 68 65 6e 20 63 6f 6d 70 69 6c 69 6e 67 20 77 69  hen compiling wi
d900: 74 68 20 74 68 69 73 20 6f 70 74 69 6f 6e 2c 20  th this option, 
d910: 69 74 20 77 69 6c 6c 20 6e 6f 72 6d 61 6c 6c 79  it will normally
d920: 0a 20 20 62 65 20 6e 65 63 65 73 73 61 72 79 20  .  be necessary 
d930: 74 6f 20 61 64 64 20 61 20 6c 69 6e 6b 65 72 20  to add a linker 
d940: 6f 70 74 69 6f 6e 20 74 6f 20 69 6e 63 6c 75 64  option to includ
d950: 65 20 74 68 65 20 7a 6c 69 62 20 6c 69 62 72 61  e the zlib libra
d960: 72 79 20 69 6e 20 74 68 65 0a 20 20 62 75 69 6c  ry in the.  buil
d970: 64 2e 20 20 4e 6f 72 6d 61 6c 20 74 68 69 73 20  d.  Normal this 
d980: 6f 70 74 69 6f 6e 20 69 73 20 22 2d 6c 7a 22 20  option is "-lz" 
d990: 62 75 74 20 6d 69 67 68 74 20 62 65 20 64 69 66  but might be dif
d9a0: 66 65 72 65 6e 74 20 6f 6e 20 64 69 66 66 65 72  ferent on differ
d9b0: 65 6e 74 0a 20 20 73 79 73 74 65 6d 73 2e 0a 20  ent.  systems.. 
d9c0: 20 3c 70 3e 0a 20 20 57 68 65 6e 20 62 75 69 6c   <p>.  When buil
d9d0: 64 69 6e 67 20 77 69 74 68 20 4d 53 56 43 20 6f  ding with MSVC o
d9e0: 6e 20 57 69 6e 64 6f 77 73 20 73 79 73 74 65 6d  n Windows system
d9f0: 73 2c 20 6f 6e 65 20 63 61 6e 20 70 75 74 20 74  s, one can put t
da00: 68 65 20 7a 6c 69 62 20 73 6f 75 72 63 65 0a 20  he zlib source. 
da10: 20 63 6f 64 65 20 69 6e 20 74 68 65 20 63 6f 6d   code in the com
da20: 70 61 74 2f 7a 6c 69 62 20 73 75 62 64 69 72 65  pat/zlib subdire
da30: 63 74 6f 72 79 20 6f 66 20 74 68 65 20 73 6f 75  ctory of the sou
da40: 72 63 65 20 74 72 65 65 20 61 6e 64 20 74 68 65  rce tree and the
da50: 6e 20 61 64 64 0a 20 20 74 68 65 20 55 53 45 5f  n add.  the USE_
da60: 5a 4c 49 42 3d 31 20 6f 70 74 69 6f 6e 20 74 6f  ZLIB=1 option to
da70: 20 74 68 65 20 6e 6d 61 6b 65 20 63 6f 6d 6d 61   the nmake comma
da80: 6e 64 20 74 6f 20 63 61 75 73 65 20 74 68 65 20  nd to cause the 
da90: 54 68 65 20 4d 61 6b 65 66 69 6c 65 2e 6d 73 63  The Makefile.msc
daa0: 0a 20 20 74 6f 20 61 75 74 6f 6d 61 74 69 63 61  .  to automatica
dab0: 6c 6c 79 20 62 75 69 6c 64 20 61 6e 64 20 75 73  lly build and us
dac0: 65 20 61 6e 20 61 70 70 72 6f 70 72 69 61 74 65  e an appropriate
dad0: 20 7a 6c 69 62 20 6c 69 62 72 61 72 79 20 69 6d   zlib library im
dae0: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 0a 7d 0a  plementation..}.
daf0: 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20  .COMPILE_OPTION 
db00: 7b 59 59 54 52 41 43 4b 4d 41 58 53 54 41 43 4b  {YYTRACKMAXSTACK
db10: 44 45 50 54 48 7d 20 7b 0a 20 20 54 68 69 73 20  DEPTH} {.  This 
db20: 6f 70 74 69 6f 6e 20 63 61 75 73 65 73 20 74 68  option causes th
db30: 65 20 4c 41 4c 52 28 31 29 20 70 61 72 73 65 72  e LALR(1) parser
db40: 20 73 74 61 63 6b 20 64 65 70 74 68 20 74 6f 20   stack depth to 
db50: 62 65 20 74 72 61 63 6b 65 64 0a 20 20 61 6e 64  be tracked.  and
db60: 20 72 65 70 6f 72 74 65 64 20 75 73 69 6e 67 20   reported using 
db70: 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 73 74 61  the [sqlite3_sta
db80: 74 75 73 5d 28 5b 53 51 4c 49 54 45 5f 53 54 41  tus]([SQLITE_STA
db90: 54 55 53 5f 50 41 52 53 45 52 5f 53 54 41 43 4b  TUS_PARSER_STACK
dba0: 5d 2c 2e 2e 2e 29 0a 20 20 69 6e 74 65 72 66 61  ],...).  interfa
dbb0: 63 65 2e 20 20 53 51 4c 69 74 65 27 73 20 4c 41  ce.  SQLite's LA
dbc0: 4c 52 28 31 29 20 70 61 72 73 65 72 20 68 61 73  LR(1) parser has
dbd0: 20 61 20 66 69 78 65 64 20 73 74 61 63 6b 20 64   a fixed stack d
dbe0: 65 70 74 68 0a 20 20 28 64 65 74 65 72 6d 69 6e  epth.  (determin
dbf0: 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69  ed at compile-ti
dc00: 6d 65 20 75 73 69 6e 67 20 74 68 65 20 5b 59 59  me using the [YY
dc10: 53 54 41 43 4b 44 45 50 54 48 5d 20 6f 70 74 69  STACKDEPTH] opti
dc20: 6f 6e 73 29 2e 0a 20 20 54 68 69 73 20 6f 70 74  ons)..  This opt
dc30: 69 6f 6e 20 63 61 6e 20 62 65 20 75 73 65 64 20  ion can be used 
dc40: 74 6f 20 68 65 6c 70 20 64 65 74 65 72 6d 69 6e  to help determin
dc50: 65 20 69 66 20 61 6e 20 61 70 70 6c 69 63 61 74  e if an applicat
dc60: 69 6f 6e 20 69 73 0a 20 20 67 65 74 74 69 6e 67  ion is.  getting
dc70: 20 63 6c 6f 73 65 20 74 6f 20 65 78 63 65 65 64   close to exceed
dc80: 69 6e 67 20 74 68 65 20 6d 61 78 69 6d 75 6d 20  ing the maximum 
dc90: 4c 41 4c 52 28 31 29 20 73 74 61 63 6b 20 64 65  LALR(1) stack de
dca0: 70 74 68 2e 0a 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c  pth..}.</tcl>..<
dcb0: 61 20 6e 61 6d 65 3d 22 64 69 73 61 62 6c 65 66  a name="disablef
dcc0: 65 61 74 75 72 65 73 22 3e 3c 2f 61 3e 0a 3c 68  eatures"></a>.<h
dcd0: 31 3e 20 4f 70 74 69 6f 6e 73 20 54 6f 20 44 69  1> Options To Di
dce0: 73 61 62 6c 65 20 46 65 61 74 75 72 65 73 20 4e  sable Features N
dcf0: 6f 72 6d 61 6c 6c 79 20 54 75 72 6e 65 64 20 4f  ormally Turned O
dd00: 6e 3c 2f 68 31 3e 0a 0a 3c 74 63 6c 3e 0a 43 4f  n</h1>..<tcl>.CO
dd10: 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51  MPILE_OPTION {SQ
dd20: 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 4c 46 53  LITE_DISABLE_LFS
dd30: 7d 20 7b 0a 20 20 49 66 20 74 68 69 73 20 43 2d  } {.  If this C-
dd40: 70 72 65 70 72 6f 63 65 73 73 6f 72 20 6d 61 63  preprocessor mac
dd50: 72 6f 20 69 73 20 64 65 66 69 6e 65 64 2c 20 6c  ro is defined, l
dd60: 61 72 67 65 20 66 69 6c 65 20 73 75 70 70 6f 72  arge file suppor
dd70: 74 0a 20 20 69 73 20 64 69 73 61 62 6c 65 64 2e  t.  is disabled.
dd80: 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49  .}..COMPILE_OPTI
dd90: 4f 4e 20 7b 53 51 4c 49 54 45 5f 44 49 53 41 42  ON {SQLITE_DISAB
dda0: 4c 45 5f 44 49 52 53 59 4e 43 7d 20 7b 0a 20 20  LE_DIRSYNC} {.  
ddb0: 49 66 20 74 68 69 73 20 43 2d 70 72 65 70 72 6f  If this C-prepro
ddc0: 63 65 73 73 6f 72 20 6d 61 63 72 6f 20 69 73 20  cessor macro is 
ddd0: 64 65 66 69 6e 65 64 2c 20 64 69 72 65 63 74 6f  defined, directo
dde0: 72 79 20 73 79 6e 63 73 0a 20 20 61 72 65 20 64  ry syncs.  are d
ddf0: 69 73 61 62 6c 65 64 2e 20 20 53 51 4c 69 74 65  isabled.  SQLite
de00: 20 74 79 70 69 63 61 6c 6c 79 20 61 74 74 65 6d   typically attem
de10: 70 74 73 20 74 6f 20 73 79 6e 63 20 74 68 65 20  pts to sync the 
de20: 70 61 72 65 6e 74 0a 20 20 64 69 72 65 63 74 6f  parent.  directo
de30: 72 79 20 77 68 65 6e 20 61 20 66 69 6c 65 20 69  ry when a file i
de40: 73 20 64 65 6c 65 74 65 64 20 74 6f 20 65 6e 73  s deleted to ens
de50: 75 72 65 20 74 68 65 20 64 69 72 65 63 74 6f 72  ure the director
de60: 79 0a 20 20 65 6e 74 72 69 65 73 20 61 72 65 20  y.  entries are 
de70: 75 70 64 61 74 65 64 20 69 6d 6d 65 64 69 61 74  updated immediat
de80: 65 6c 79 20 6f 6e 20 64 69 73 6b 2e 0a 7d 0a 0a  ely on disk..}..
de90: 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b  COMPILE_OPTION {
dea0: 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 46  SQLITE_DISABLE_F
deb0: 54 53 33 5f 55 4e 49 43 4f 44 45 7d 20 7b 0a 20  TS3_UNICODE} {. 
dec0: 20 49 66 20 74 68 69 73 20 43 2d 70 72 65 70 72   If this C-prepr
ded0: 6f 63 65 73 73 6f 72 20 6d 61 63 72 6f 20 69 73  ocessor macro is
dee0: 20 64 65 66 69 6e 65 64 2c 20 74 68 65 20 5b 75   defined, the [u
def0: 6e 69 63 6f 64 65 36 31 5d 20 74 6f 6b 65 6e 69  nicode61] tokeni
df00: 7a 65 72 0a 20 20 69 6e 20 5b 46 54 53 33 5d 20  zer.  in [FTS3] 
df10: 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20  is omitted from 
df20: 74 68 65 20 62 75 69 6c 64 20 61 6e 64 20 69 73  the build and is
df30: 20 75 6e 61 76 61 69 6c 61 62 6c 65 20 74 6f 20   unavailable to 
df40: 0a 20 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 2e  .  applications.
df50: 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49  .}..COMPILE_OPTI
df60: 4f 4e 20 7b 53 51 4c 49 54 45 5f 44 49 53 41 42  ON {SQLITE_DISAB
df70: 4c 45 5f 46 54 53 34 5f 44 45 46 45 52 52 45 44  LE_FTS4_DEFERRED
df80: 7d 20 7b 0a 20 20 49 66 20 74 68 69 73 20 43 2d  } {.  If this C-
df90: 70 72 65 70 72 6f 63 65 73 73 6f 72 20 6d 61 63  preprocessor mac
dfa0: 72 6f 20 64 69 73 61 62 6c 65 73 20 74 68 65 20  ro disables the 
dfb0: 22 64 65 66 65 72 72 65 64 20 74 6f 6b 65 6e 22  "deferred token"
dfc0: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 0a 20 20   optimization.  
dfd0: 69 6e 20 5b 46 54 53 34 5d 2e 20 20 54 68 65 20  in [FTS4].  The 
dfe0: 22 64 65 66 65 72 72 65 64 20 74 6f 6b 65 6e 22  "deferred token"
dff0: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 61 76   optimization av
e000: 6f 69 64 73 20 6c 6f 61 64 69 6e 67 20 6d 61 73  oids loading mas
e010: 73 69 76 65 0a 20 20 70 6f 73 74 69 6e 67 20 6c  sive.  posting l
e020: 69 73 74 73 20 66 6f 72 20 74 65 72 6d 73 20 74  ists for terms t
e030: 68 61 74 20 61 72 65 20 69 6e 20 6d 6f 73 74 20  hat are in most 
e040: 64 6f 63 75 6d 65 6e 74 73 20 6f 66 20 74 68 65  documents of the
e050: 20 63 6f 6c 6c 65 63 74 69 6f 6e 0a 20 20 61 6e   collection.  an
e060: 64 20 69 6e 73 74 65 61 64 20 73 69 6d 70 6c 79  d instead simply
e070: 20 73 63 61 6e 73 20 66 6f 72 20 74 68 6f 73 65   scans for those
e080: 20 74 6f 6b 65 6e 73 20 69 6e 20 74 68 65 20 64   tokens in the d
e090: 6f 63 75 6d 65 6e 74 20 73 6f 75 72 63 65 2e 20  ocument source. 
e0a0: 20 5b 46 54 53 34 5d 0a 20 20 73 68 6f 75 6c 64   [FTS4].  should
e0b0: 20 67 65 74 20 65 78 61 63 74 6c 79 20 74 68 65   get exactly the
e0c0: 20 73 61 6d 65 20 61 6e 73 77 65 72 20 62 6f 74   same answer bot
e0d0: 68 20 77 69 74 68 20 61 6e 64 20 77 69 74 68 6f  h with and witho
e0e0: 75 74 20 74 68 69 73 20 6f 70 74 69 6d 69 7a 61  ut this optimiza
e0f0: 74 69 6f 6e 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45  tion..}..COMPILE
e100: 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f  _OPTION {SQLITE_
e110: 44 49 53 41 42 4c 45 5f 49 4e 54 52 49 4e 53 49  DISABLE_INTRINSI
e120: 43 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70 74 69  C} {.  This opti
e130: 6f 6e 20 64 69 73 61 62 6c 65 73 20 74 68 65 20  on disables the 
e140: 75 73 65 20 6f 66 20 63 6f 6d 70 69 6c 65 72 2d  use of compiler-
e150: 73 70 65 63 69 66 69 63 20 62 75 69 6c 74 2d 69  specific built-i
e160: 6e 20 66 75 6e 63 74 69 6f 6e 73 0a 20 20 73 75  n functions.  su
e170: 63 68 20 61 73 20 5f 5f 62 75 69 6c 74 69 6e 5f  ch as __builtin_
e180: 62 73 77 61 70 33 32 28 29 20 61 6e 64 20 5f 5f  bswap32() and __
e190: 62 75 69 6c 74 69 6e 5f 61 64 64 5f 6f 76 65 72  builtin_add_over
e1a0: 66 6c 6f 77 28 29 20 69 6e 20 47 43 43 20 61 6e  flow() in GCC an
e1b0: 64 20 43 6c 61 6e 67 2c 20 0a 20 20 6f 72 20 5f  d Clang, .  or _
e1c0: 62 79 74 65 73 77 61 70 5f 75 6c 6f 6e 67 28 29  byteswap_ulong()
e1d0: 20 61 6e 64 20 5f 52 65 61 64 57 72 69 74 65 42   and _ReadWriteB
e1e0: 61 72 72 69 65 72 28 29 20 77 69 74 68 20 4d 53  arrier() with MS
e1f0: 56 43 2e 20 20 0a 7d 0a 3c 2f 74 63 6c 3e 0a 0a  VC.  .}.</tcl>..
e200: 3c 74 63 6c 3e 0a 20 20 68 64 5f 66 72 61 67 6d  <tcl>.  hd_fragm
e210: 65 6e 74 20 22 6f 6d 69 74 66 65 61 74 75 72 65  ent "omitfeature
e220: 73 22 0a 20 20 68 64 5f 6b 65 79 77 6f 72 64 73  s".  hd_keywords
e230: 20 22 6f 6d 69 74 66 65 61 74 75 72 65 73 22 0a   "omitfeatures".
e240: 3c 2f 74 63 6c 3e 0a 3c 68 31 3e 20 4f 70 74 69  </tcl>.<h1> Opti
e250: 6f 6e 73 20 54 6f 20 4f 6d 69 74 20 46 65 61 74  ons To Omit Feat
e260: 75 72 65 73 3c 2f 68 31 3e 0a 0a 3c 70 3e 54 68  ures</h1>..<p>Th
e270: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6f 70 74 69  e following opti
e280: 6f 6e 73 20 63 61 6e 20 62 65 20 75 73 65 64 20  ons can be used 
e290: 74 6f 20 0a 5b 72 65 6c 66 6f 6f 74 70 72 69 6e  to .[relfootprin
e2a0: 74 20 7c 20 72 65 64 75 63 65 20 74 68 65 20 73  t | reduce the s
e2b0: 69 7a 65 20 6f 66 20 74 68 65 20 63 6f 6d 70 69  ize of the compi
e2c0: 6c 65 64 20 6c 69 62 72 61 72 79 5d 0a 62 79 20  led library].by 
e2d0: 6f 6d 69 74 74 69 6e 67 20 75 6e 75 73 65 64 20  omitting unused 
e2e0: 66 65 61 74 75 72 65 73 2e 20 54 68 69 73 20 69  features. This i
e2f0: 73 20 70 72 6f 62 61 62 6c 79 20 6f 6e 6c 79 20  s probably only 
e300: 75 73 65 66 75 6c 0a 69 6e 20 65 6d 62 65 64 64  useful.in embedd
e310: 65 64 20 73 79 73 74 65 6d 73 20 77 68 65 72 65  ed systems where
e320: 20 73 70 61 63 65 20 69 73 20 65 73 70 65 63 69   space is especi
e330: 61 6c 6c 79 20 74 69 67 68 74 2c 20 61 73 20 65  ally tight, as e
e340: 76 65 6e 20 77 69 74 68 20 61 6c 6c 0a 66 65 61  ven with all.fea
e350: 74 75 72 65 73 20 69 6e 63 6c 75 64 65 64 20 74  tures included t
e360: 68 65 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72  he SQLite librar
e370: 79 20 69 73 20 72 65 6c 61 74 69 76 65 6c 79 20  y is relatively 
e380: 73 6d 61 6c 6c 2e 20 44 6f 6e 27 74 20 66 6f 72  small. Don't for
e390: 67 65 74 0a 74 6f 20 74 65 6c 6c 20 79 6f 75 72  get.to tell your
e3a0: 20 63 6f 6d 70 69 6c 65 72 20 74 6f 20 6f 70 74   compiler to opt
e3b0: 69 6d 69 7a 65 20 66 6f 72 20 62 69 6e 61 72 79  imize for binary
e3c0: 20 73 69 7a 65 21 20 28 74 68 65 20 2d 4f 73 20   size! (the -Os 
e3d0: 6f 70 74 69 6f 6e 20 69 66 0a 75 73 69 6e 67 20  option if.using 
e3e0: 47 43 43 29 2e 20 20 54 65 6c 6c 69 6e 67 20 79  GCC).  Telling y
e3f0: 6f 75 72 20 63 6f 6d 70 69 6c 65 72 20 74 6f 20  our compiler to 
e400: 6f 70 74 69 6d 69 7a 65 20 66 6f 72 20 73 69 7a  optimize for siz
e410: 65 20 75 73 75 61 6c 6c 79 20 68 61 73 0a 61 20  e usually has.a 
e420: 6d 75 63 68 20 6c 61 72 67 65 72 20 69 6d 70 61  much larger impa
e430: 63 74 20 6f 6e 20 6c 69 62 72 61 72 79 20 66 6f  ct on library fo
e440: 6f 74 70 72 69 6e 74 20 74 68 61 6e 20 65 6d 70  otprint than emp
e450: 6c 6f 79 69 6e 67 20 61 6e 79 20 6f 66 20 74 68  loying any of th
e460: 65 73 65 0a 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  ese.compile-time
e470: 20 6f 70 74 69 6f 6e 73 2e 20 20 59 6f 75 20 73   options.  You s
e480: 68 6f 75 6c 64 20 61 6c 73 6f 20 76 65 72 69 66  hould also verif
e490: 79 20 74 68 61 74 20 0a 3c 61 20 68 72 65 66 3d  y that .<a href=
e4a0: 22 23 64 65 62 75 67 6f 70 74 69 6f 6e 73 22 3e  "#debugoptions">
e4b0: 64 65 62 75 67 67 69 6e 67 20 6f 70 74 69 6f 6e  debugging option
e4c0: 73 3c 2f 61 3e 20 61 72 65 20 64 69 73 61 62 6c  s</a> are disabl
e4d0: 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  ed.</p>..<p>The 
e4e0: 6d 61 63 72 6f 73 20 69 6e 20 74 68 69 73 20 73  macros in this s
e4f0: 65 63 74 69 6f 6e 20 64 6f 20 6e 6f 74 20 72 65  ection do not re
e500: 71 75 69 72 65 20 76 61 6c 75 65 73 2e 20 54 68  quire values. Th
e510: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 0a 63 6f 6d  e following .com
e520: 70 69 6c 61 74 69 6f 6e 20 73 77 69 74 63 68 65  pilation switche
e530: 73 20 61 6c 6c 20 68 61 76 65 20 74 68 65 20 73  s all have the s
e540: 61 6d 65 20 65 66 66 65 63 74 3a 3c 62 72 3e 0a  ame effect:<br>.
e550: 2d 44 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c  -DSQLITE_OMIT_AL
e560: 54 45 52 54 41 42 4c 45 3c 62 72 3e 0a 2d 44 53  TERTABLE<br>.-DS
e570: 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52  QLITE_OMIT_ALTER
e580: 54 41 42 4c 45 3d 31 3c 62 72 3e 0a 2d 44 53 51  TABLE=1<br>.-DSQ
e590: 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54  LITE_OMIT_ALTERT
e5a0: 41 42 4c 45 3d 30 0a 3c 2f 70 3e 0a 0a 3c 70 3e  ABLE=0.</p>..<p>
e5b0: 49 66 20 61 6e 79 20 6f 66 20 74 68 65 73 65 20  If any of these 
e5c0: 6f 70 74 69 6f 6e 73 20 61 72 65 20 64 65 66 69  options are defi
e5d0: 6e 65 64 2c 20 74 68 65 6e 20 74 68 65 20 73 61  ned, then the sa
e5e0: 6d 65 20 73 65 74 20 6f 66 20 53 51 4c 49 54 45  me set of SQLITE
e5f0: 5f 4f 4d 49 54 5f 2a 0a 6f 70 74 69 6f 6e 73 20  _OMIT_*.options 
e600: 6d 75 73 74 20 61 6c 73 6f 20 62 65 20 64 65 66  must also be def
e610: 69 6e 65 64 20 77 68 65 6e 20 75 73 69 6e 67 20  ined when using 
e620: 74 68 65 20 5b 4c 65 6d 6f 6e 20 70 61 72 73 65  the [Lemon parse
e630: 72 20 67 65 6e 65 72 61 74 6f 72 5d 0a 74 6f 6f  r generator].too
e640: 6c 20 74 6f 20 67 65 6e 65 72 61 74 65 20 74 68  l to generate th
e650: 65 0a 70 61 72 73 65 2e 63 20 66 69 6c 65 20 61  e.parse.c file a
e660: 6e 64 20 77 68 65 6e 20 63 6f 6d 70 69 6c 69 6e  nd when compilin
e670: 67 20 74 68 65 20 27 6d 6b 6b 65 79 77 6f 72 64  g the 'mkkeyword
e680: 68 61 73 68 27 20 74 6f 6f 6c 20 77 68 69 63 68  hash' tool which
e690: 20 67 65 6e 65 72 61 74 65 73 20 0a 74 68 65 20   generates .the 
e6a0: 6b 65 79 77 6f 72 64 68 61 73 68 2e 68 20 66 69  keywordhash.h fi
e6b0: 6c 65 2e 0a 42 65 63 61 75 73 65 20 6f 66 20 74  le..Because of t
e6c0: 68 69 73 2c 20 74 68 65 73 65 20 6f 70 74 69 6f  his, these optio
e6d0: 6e 73 20 6d 61 79 20 6f 6e 6c 79 20 62 65 20 75  ns may only be u
e6e0: 73 65 64 20 77 68 65 6e 20 74 68 65 20 6c 69 62  sed when the lib
e6f0: 72 61 72 79 20 69 73 20 62 75 69 6c 74 0a 66 72  rary is built.fr
e700: 6f 6d 20 63 61 6e 6f 6e 69 63 61 6c 20 73 6f 75  om canonical sou
e710: 72 63 65 2c 20 6e 6f 74 20 66 72 6f 6d 20 74 68  rce, not from th
e720: 65 20 5b 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 5d  e [amalgamation]
e730: 2e 0a 53 6f 6d 65 20 53 51 4c 49 54 45 5f 4f 4d  ..Some SQLITE_OM
e740: 49 54 5f 2a 20 6f 70 74 69 6f 6e 73 20 6d 69 67  IT_* options mig
e750: 68 74 20 77 6f 72 6b 2c 20 6f 72 20 61 70 70 65  ht work, or appe
e760: 61 72 20 74 6f 20 77 6f 72 6b 2c 20 77 68 65 6e  ar to work, when
e770: 20 75 73 65 64 20 77 69 74 68 0a 74 68 65 20 5b   used with.the [
e780: 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 5d 2e 20 20  amalgamation].  
e790: 42 75 74 20 74 68 69 73 20 69 73 20 6e 6f 74 20  But this is not 
e7a0: 67 75 61 72 61 6e 74 65 65 64 2e 20 20 49 6e 20  guaranteed.  In 
e7b0: 67 65 6e 65 72 61 6c 2c 20 61 6c 77 61 79 73 20  general, always 
e7c0: 63 6f 6d 70 69 6c 65 0a 66 72 6f 6d 20 63 61 6e  compile.from can
e7d0: 6f 6e 69 63 61 6c 20 73 6f 75 72 63 65 73 20 69  onical sources i
e7e0: 6e 20 6f 72 64 65 72 20 74 6f 20 74 61 6b 65 20  n order to take 
e7f0: 61 64 76 61 6e 74 61 67 65 20 6f 66 20 53 51 4c  advantage of SQL
e800: 49 54 45 5f 4f 4d 49 54 5f 2a 20 6f 70 74 69 6f  ITE_OMIT_* optio
e810: 6e 73 2e 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b  ns..</p>..<block
e820: 71 75 6f 74 65 3e 0a 3c 69 3e 3c 62 3e 49 6d 70  quote>.<i><b>Imp
e830: 6f 72 74 61 6e 74 20 4e 6f 74 65 3a 3c 2f 62 3e  ortant Note:</b>
e840: 20 54 68 65 20 53 51 4c 49 54 45 5f 4f 4d 49 54   The SQLITE_OMIT
e850: 5f 2a 20 6f 70 74 69 6f 6e 73 20 6d 61 79 20 6e  _* options may n
e860: 6f 74 20 77 6f 72 6b 20 77 69 74 68 20 74 68 65  ot work with the
e870: 0a 5b 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 5d 2e  .[amalgamation].
e880: 20 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 2a 20    SQLITE_OMIT_* 
e890: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 0a 6f 70 74  compile-time.opt
e8a0: 69 6f 6e 73 20 75 73 75 61 6c 6c 79 20 77 6f 72  ions usually wor
e8b0: 6b 20 63 6f 72 72 65 63 74 6c 79 20 6f 6e 6c 79  k correctly only
e8c0: 20 77 68 65 6e 20 53 51 4c 69 74 65 20 69 73 20   when SQLite is 
e8d0: 62 75 69 6c 74 20 66 72 6f 6d 20 63 61 6e 6f 6e  built from canon
e8e0: 69 63 61 6c 20 0a 73 6f 75 72 63 65 20 66 69 6c  ical .source fil
e8f0: 65 73 2e 0a 3c 2f 69 3e 0a 3c 2f 62 6c 6f 63 6b  es..</i>.</block
e900: 71 75 6f 74 65 3e 0a 0a 0a 3c 70 3e 53 70 65 63  quote>...<p>Spec
e910: 69 61 6c 20 76 65 72 73 69 6f 6e 73 20 6f 66 20  ial versions of 
e920: 74 68 65 20 53 51 4c 69 74 65 20 61 6d 61 6c 67  the SQLite amalg
e930: 61 6d 61 74 69 6f 6e 20 74 68 61 74 20 64 6f 20  amation that do 
e940: 77 6f 72 6b 20 77 69 74 68 20 61 0a 70 72 65 64  work with a.pred
e950: 65 74 65 72 6d 69 6e 65 64 20 73 65 74 20 6f 66  etermined set of
e960: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 2a 20 6f   SQLITE_OMIT_* o
e970: 70 74 69 6f 6e 73 20 63 61 6e 20 62 65 20 67 65  ptions can be ge
e980: 6e 65 72 61 74 65 64 2e 20 20 54 6f 20 64 6f 20  nerated.  To do 
e990: 73 6f 2c 0a 6d 61 6b 65 20 61 20 63 6f 70 79 20  so,.make a copy 
e9a0: 6f 66 20 74 68 65 20 4d 61 6b 65 66 69 6c 65 2e  of the Makefile.
e9b0: 6c 69 6e 75 78 2d 67 63 63 20 6d 61 6b 65 66 69  linux-gcc makefi
e9c0: 6c 65 20 74 65 6d 70 6c 61 74 65 20 69 6e 20 74  le template in t
e9d0: 68 65 20 63 61 6e 6f 6e 69 63 61 6c 0a 73 6f 75  he canonical.sou
e9e0: 72 63 65 20 63 6f 64 65 20 64 69 73 74 72 69 62  rce code distrib
e9f0: 75 74 69 6f 6e 2e 20 20 43 68 61 6e 67 65 20 74  ution.  Change t
ea00: 68 65 20 6e 61 6d 65 20 6f 66 20 79 6f 75 72 20  he name of your 
ea10: 63 6f 70 79 20 74 6f 20 73 69 6d 70 6c 79 20 22  copy to simply "
ea20: 4d 61 6b 65 66 69 6c 65 22 2e 0a 54 68 65 6e 20  Makefile"..Then 
ea30: 65 64 69 74 20 22 4d 61 6b 65 66 69 6c 65 22 20  edit "Makefile" 
ea40: 74 6f 20 73 65 74 20 75 70 20 61 70 70 72 6f 70  to set up approp
ea50: 72 69 61 74 65 20 63 6f 6d 70 69 6c 65 2d 74 69  riate compile-ti
ea60: 6d 65 20 6f 70 74 69 6f 6e 73 2e 20 20 54 68 65  me options.  The
ea70: 6e 0a 74 79 70 65 3a 0a 3c 63 6f 64 65 62 6c 6f  n.type:.<codeblo
ea80: 63 6b 3e 0a 6d 61 6b 65 20 63 6c 65 61 6e 3b 20  ck>.make clean; 
ea90: 6d 61 6b 65 20 73 71 6c 69 74 65 33 2e 63 0a 3c  make sqlite3.c.<
eaa0: 2f 63 6f 64 65 62 6c 6f 63 6b 3e 0a 3c 70 3e 54  /codeblock>.<p>T
eab0: 68 65 20 72 65 73 75 6c 74 69 6e 67 20 22 73 71  he resulting "sq
eac0: 6c 69 74 65 33 2e 63 22 20 61 6d 61 6c 67 61 6d  lite3.c" amalgam
ead0: 61 74 69 6f 6e 20 63 6f 64 65 20 66 69 6c 65 20  ation code file 
eae0: 28 61 6e 64 20 69 74 73 20 61 73 73 6f 63 69 61  (and its associa
eaf0: 74 65 64 0a 68 65 61 64 65 72 20 66 69 6c 65 20  ted.header file 
eb00: 22 73 71 6c 69 74 65 33 2e 68 22 29 20 63 61 6e  "sqlite3.h") can
eb10: 20 74 68 65 6e 20 62 65 20 6d 6f 76 65 64 20 74   then be moved t
eb20: 6f 20 61 20 6e 6f 6e 2d 75 6e 69 78 20 70 6c 61  o a non-unix pla
eb30: 74 66 6f 72 6d 0a 66 6f 72 20 66 69 6e 61 6c 20  tform.for final 
eb40: 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 75 73 69 6e  compilation usin
eb50: 67 20 61 20 6e 61 74 69 76 65 20 63 6f 6d 70 69  g a native compi
eb60: 6c 65 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  ler.</p>..<p>The
eb70: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 2a 20 6f   SQLITE_OMIT_* o
eb80: 70 74 69 6f 6e 73 20 61 72 65 20 75 6e 73 75 70  ptions are unsup
eb90: 70 6f 72 74 65 64 2e 20 20 42 79 20 74 68 69 73  ported.  By this
eba0: 20 77 65 20 6d 65 61 6e 20 74 68 61 74 0a 61 6e   we mean that.an
ebb0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 2a 20 6f   SQLITE_OMIT_* o
ebc0: 70 74 69 6f 6e 20 74 68 61 74 20 6f 6d 69 74 73  ption that omits
ebd0: 20 63 6f 64 65 20 66 72 6f 6d 20 74 68 65 20 62   code from the b
ebe0: 75 69 6c 64 20 69 6e 20 74 68 65 20 63 75 72 72  uild in the curr
ebf0: 65 6e 74 0a 72 65 6c 65 61 73 65 20 6d 69 67 68  ent.release migh
ec00: 74 20 62 65 63 6f 6d 65 20 61 20 6e 6f 2d 6f 70  t become a no-op
ec10: 20 69 6e 20 74 68 65 20 6e 65 78 74 20 72 65 6c   in the next rel
ec20: 65 61 73 65 2e 20 20 4f 72 20 74 68 65 20 6f 74  ease.  Or the ot
ec30: 68 65 72 20 77 61 79 20 61 72 6f 75 6e 64 3a 0a  her way around:.
ec40: 61 6e 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 2a  an SQLITE_OMIT_*
ec50: 20 74 68 61 74 20 69 73 20 61 20 6e 6f 2d 6f 70   that is a no-op
ec60: 20 69 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20   in the current 
ec70: 72 65 6c 65 61 73 65 20 6d 69 67 68 74 20 63 61  release might ca
ec80: 75 73 65 20 63 6f 64 65 0a 74 6f 20 62 65 20 65  use code.to be e
ec90: 78 63 6c 75 64 65 64 20 69 6e 20 74 68 65 20 6e  xcluded in the n
eca0: 65 78 74 20 72 65 6c 65 61 73 65 2e 20 20 41 6c  ext release.  Al
ecb0: 73 6f 2c 20 6e 6f 74 20 61 6c 6c 20 53 51 4c 49  so, not all SQLI
ecc0: 54 45 5f 4f 4d 49 54 5f 2a 20 6f 70 74 69 6f 6e  TE_OMIT_* option
ecd0: 73 0a 61 72 65 20 74 65 73 74 65 64 2e 20 20 53  s.are tested.  S
ece0: 6f 6d 65 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ome SQLITE_OMIT_
ecf0: 2a 20 6f 70 74 69 6f 6e 73 20 6d 69 67 68 74 20  * options might 
ed00: 63 61 75 73 65 20 53 51 4c 69 74 65 20 74 6f 20  cause SQLite to 
ed10: 6d 61 6c 66 75 6e 63 74 69 6f 6e 0a 61 6e 64 2f  malfunction.and/
ed20: 6f 72 20 70 72 6f 76 69 64 65 20 69 6e 63 6f 72  or provide incor
ed30: 72 65 63 74 20 61 6e 73 77 65 72 73 2e 0a 0a 3c  rect answers...<
ed40: 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 69 3e 3c  blockquote>.<i><
ed50: 62 3e 49 6d 70 6f 72 74 61 6e 74 20 4e 6f 74 65  b>Important Note
ed60: 3a 3c 2f 62 3e 0a 54 68 65 20 53 51 4c 49 54 45  :</b>.The SQLITE
ed70: 5f 4f 4d 49 54 5f 2a 20 63 6f 6d 70 69 6c 65 2d  _OMIT_* compile-
ed80: 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20 61 72 65  time options are
ed90: 20 6d 6f 73 74 6c 79 20 75 6e 73 75 70 70 6f 72   mostly unsuppor
eda0: 74 65 64 2e 0a 3c 2f 69 3e 3c 2f 62 6c 6f 63 6b  ted..</i></block
edb0: 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 66  quote>..<p>The f
edc0: 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20 74 68 65  ollowing are the
edd0: 20 61 76 61 69 6c 61 62 6c 65 20 4f 4d 49 54 20   available OMIT 
ede0: 6f 70 74 69 6f 6e 73 3a 0a 0a 3c 74 63 6c 3e 0a  options:..<tcl>.
edf0: 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b  COMPILE_OPTION {
ee00: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45  SQLITE_OMIT_ALTE
ee10: 52 54 41 42 4c 45 7d 20 7b 0a 20 20 57 68 65 6e  RTABLE} {.  When
ee20: 20 74 68 69 73 20 6f 70 74 69 6f 6e 20 69 73 20   this option is 
ee30: 64 65 66 69 6e 65 64 2c 20 74 68 65 20 0a 20 20  defined, the .  
ee40: 5b 41 4c 54 45 52 20 54 41 42 4c 45 5d 20 63 6f  [ALTER TABLE] co
ee50: 6d 6d 61 6e 64 20 69 73 20 6e 6f 74 20 69 6e 63  mmand is not inc
ee60: 6c 75 64 65 64 20 69 6e 20 74 68 65 20 0a 20 20  luded in the .  
ee70: 6c 69 62 72 61 72 79 2e 20 45 78 65 63 75 74 69  library. Executi
ee80: 6e 67 20 61 6e 20 5b 41 4c 54 45 52 20 54 41 42  ng an [ALTER TAB
ee90: 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74 20 63 61  LE] statement ca
eea0: 75 73 65 73 20 61 20 70 61 72 73 65 20 65 72 72  uses a parse err
eeb0: 6f 72 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f  or..}..COMPILE_O
eec0: 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d  PTION {SQLITE_OM
eed0: 49 54 5f 41 4e 41 4c 59 5a 45 7d 20 7b 0a 20 20  IT_ANALYZE} {.  
eee0: 57 68 65 6e 20 74 68 69 73 20 6f 70 74 69 6f 6e  When this option
eef0: 20 69 73 20 64 65 66 69 6e 65 64 2c 20 74 68 65   is defined, the
ef00: 20 5b 41 4e 41 4c 59 5a 45 5d 20 63 6f 6d 6d 61   [ANALYZE] comma
ef10: 6e 64 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72  nd is omitted fr
ef20: 6f 6d 0a 20 20 74 68 65 20 62 75 69 6c 64 2e 0a  om.  the build..
ef30: 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f  }..COMPILE_OPTIO
ef40: 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  N {SQLITE_OMIT_A
ef50: 54 54 41 43 48 7d 20 7b 0a 20 20 57 68 65 6e 20  TTACH} {.  When 
ef60: 74 68 69 73 20 6f 70 74 69 6f 6e 20 69 73 20 64  this option is d
ef70: 65 66 69 6e 65 64 2c 20 74 68 65 20 5b 41 54 54  efined, the [ATT
ef80: 41 43 48 5d 20 61 6e 64 20 5b 44 45 54 41 43 48  ACH] and [DETACH
ef90: 5d 20 63 6f 6d 6d 61 6e 64 73 20 61 72 65 0a 20  ] commands are. 
efa0: 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68   omitted from th
efb0: 65 20 62 75 69 6c 64 2e 0a 7d 0a 0a 43 4f 4d 50  e build..}..COMP
efc0: 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49  ILE_OPTION {SQLI
efd0: 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a  TE_OMIT_AUTHORIZ
efe0: 41 54 49 4f 4e 7d 20 7b 0a 20 20 44 65 66 69 6e  ATION} {.  Defin
eff0: 69 6e 67 20 74 68 69 73 20 6f 70 74 69 6f 6e 20  ing this option 
f000: 6f 6d 69 74 73 20 74 68 65 20 61 75 74 68 6f 72  omits the author
f010: 69 7a 61 74 69 6f 6e 20 63 61 6c 6c 62 61 63 6b  ization callback
f020: 20 66 65 61 74 75 72 65 20 66 72 6f 6d 20 74 68   feature from th
f030: 65 0a 20 20 6c 69 62 72 61 72 79 2e 20 54 68 65  e.  library. The
f040: 20 5b 73 71 6c 69 74 65 33 5f 73 65 74 5f 61 75   [sqlite3_set_au
f050: 74 68 6f 72 69 7a 65 72 28 29 5d 20 41 50 49 20  thorizer()] API 
f060: 66 75 6e 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20  function is not 
f070: 70 72 65 73 65 6e 74 0a 20 20 69 6e 20 74 68 65  present.  in the
f080: 20 6c 69 62 72 61 72 79 2e 0a 7d 0a 0a 43 4f 4d   library..}..COM
f090: 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c  PILE_OPTION {SQL
f0a0: 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43  ITE_OMIT_AUTOINC
f0b0: 52 45 4d 45 4e 54 7d 20 7b 0a 20 20 54 68 69 73  REMENT} {.  This
f0c0: 20 6f 70 74 69 6f 6e 20 69 73 20 6f 6d 69 74 73   option is omits
f0d0: 20 74 68 65 20 5b 41 55 54 4f 49 4e 43 52 45 4d   the [AUTOINCREM
f0e0: 45 4e 54 5d 20 66 65 61 74 75 72 65 2e 20 0a 20  ENT] feature. . 
f0f0: 20 57 68 65 6e 20 74 68 69 73 20 69 73 20 6d 61   When this is ma
f100: 63 72 6f 20 69 73 20 64 65 66 69 6e 65 64 2c 20  cro is defined, 
f110: 63 6f 6c 75 6d 6e 73 20 64 65 63 6c 61 72 65 64  columns declared
f120: 20 61 73 20 0a 20 20 22 5b 49 4e 54 45 47 45 52   as .  "[INTEGER
f130: 20 50 52 49 4d 41 52 59 20 4b 45 59 5d 20 41 55   PRIMARY KEY] AU
f140: 54 4f 49 4e 43 52 45 4d 45 4e 54 22 0a 20 20 62  TOINCREMENT".  b
f150: 65 68 61 76 65 20 69 6e 20 74 68 65 20 73 61 6d  ehave in the sam
f160: 65 20 77 61 79 20 61 73 20 63 6f 6c 75 6d 6e 73  e way as columns
f170: 20 64 65 63 6c 61 72 65 64 20 61 73 20 22 5b 49   declared as "[I
f180: 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
f190: 45 59 5d 22 20 77 68 65 6e 20 61 20 0a 20 20 4e  EY]" when a .  N
f1a0: 55 4c 4c 20 69 73 20 69 6e 73 65 72 74 65 64 2e  ULL is inserted.
f1b0: 20 54 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75   The sqlite_sequ
f1c0: 65 6e 63 65 20 73 79 73 74 65 6d 20 74 61 62 6c  ence system tabl
f1d0: 65 20 69 73 20 6e 65 69 74 68 65 72 20 63 72 65  e is neither cre
f1e0: 61 74 65 64 2c 20 6e 6f 72 0a 20 20 72 65 73 70  ated, nor.  resp
f1f0: 65 63 74 65 64 20 69 66 20 69 74 20 61 6c 72 65  ected if it alre
f200: 61 64 79 20 65 78 69 73 74 73 2e 0a 7d 0a 0a 43  ady exists..}..C
f210: 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53  OMPILE_OPTION {S
f220: 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49  QLITE_OMIT_AUTOI
f230: 4e 49 54 7d 20 7b 0a 20 20 46 6f 72 20 62 61 63  NIT} {.  For bac
f240: 6b 77 61 72 64 73 20 63 6f 6d 70 61 74 69 62 69  kwards compatibi
f250: 6c 69 74 79 20 77 69 74 68 20 6f 6c 64 65 72 20  lity with older 
f260: 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69  versions of SQLi
f270: 74 65 20 74 68 61 74 20 6c 61 63 6b 0a 20 20 74  te that lack.  t
f280: 68 65 20 5b 73 71 6c 69 74 65 33 5f 69 6e 69 74  he [sqlite3_init
f290: 69 61 6c 69 7a 65 28 29 5d 20 69 6e 74 65 72 66  ialize()] interf
f2a0: 61 63 65 2c 20 74 68 65 20 5b 73 71 6c 69 74 65  ace, the [sqlite
f2b0: 33 5f 69 6e 69 74 69 61 6c 69 7a 65 28 29 5d 20  3_initialize()] 
f2c0: 69 6e 74 65 72 66 61 63 65 0a 20 20 69 73 20 63  interface.  is c
f2d0: 61 6c 6c 65 64 20 61 75 74 6f 6d 61 74 69 63 61  alled automatica
f2e0: 6c 6c 79 20 75 70 6f 6e 20 65 6e 74 72 79 20 74  lly upon entry t
f2f0: 6f 20 63 65 72 74 61 69 6e 20 6b 65 79 20 69 6e  o certain key in
f300: 74 65 72 66 61 63 65 73 20 73 75 63 68 20 61 73  terfaces such as
f310: 0a 20 20 5b 73 71 6c 69 74 65 33 5f 6f 70 65 6e  .  [sqlite3_open
f320: 28 29 5d 2c 20 5b 73 71 6c 69 74 65 33 5f 76 66  ()], [sqlite3_vf
f330: 73 5f 72 65 67 69 73 74 65 72 28 29 5d 2c 20 61  s_register()], a
f340: 6e 64 20 5b 73 71 6c 69 74 65 33 5f 6d 70 72 69  nd [sqlite3_mpri
f350: 6e 74 66 28 29 5d 2e 0a 20 20 54 68 65 20 6f 76  ntf()]..  The ov
f360: 65 72 68 65 61 64 20 6f 66 20 69 6e 76 6f 6b 69  erhead of invoki
f370: 6e 67 20 5b 73 71 6c 69 74 65 33 5f 69 6e 69 74  ng [sqlite3_init
f380: 69 61 6c 69 7a 65 28 29 5d 20 61 75 74 6f 6d 61  ialize()] automa
f390: 74 69 63 61 6c 6c 79 20 69 6e 20 74 68 69 73 0a  tically in this.
f3a0: 20 20 77 61 79 20 6d 61 79 20 62 65 20 6f 6d 69    way may be omi
f3b0: 74 74 65 64 20 62 79 20 62 75 69 6c 64 69 6e 67  tted by building
f3c0: 20 53 51 4c 69 74 65 20 77 69 74 68 20 74 68 65   SQLite with the
f3d0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
f3e0: 4f 49 4e 49 54 0a 20 20 43 2d 70 72 65 70 72 6f  OINIT.  C-prepro
f3f0: 63 65 73 73 6f 72 20 6d 61 63 72 6f 2e 20 20 57  cessor macro.  W
f400: 68 65 6e 20 62 75 69 6c 74 20 75 73 69 6e 67 20  hen built using 
f410: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f  SQLITE_OMIT_AUTO
f420: 49 4e 49 54 2c 20 53 51 4c 69 74 65 0a 20 20 77  INIT, SQLite.  w
f430: 69 6c 6c 20 6e 6f 74 20 61 75 74 6f 6d 61 74 69  ill not automati
f440: 63 61 6c 6c 79 20 69 6e 69 74 69 61 6c 69 7a 65  cally initialize
f450: 20 69 74 73 65 6c 66 20 61 6e 64 20 74 68 65 20   itself and the 
f460: 61 70 70 6c 69 63 61 74 69 6f 6e 20 69 73 20 72  application is r
f470: 65 71 75 69 72 65 64 0a 20 20 74 6f 20 69 6e 76  equired.  to inv
f480: 6f 6b 65 20 5b 73 71 6c 69 74 65 33 5f 69 6e 69  oke [sqlite3_ini
f490: 74 69 61 6c 69 7a 65 28 29 5d 20 64 69 72 65 63  tialize()] direc
f4a0: 74 6c 79 20 70 72 69 6f 72 20 74 6f 20 62 65 67  tly prior to beg
f4b0: 69 6e 6e 69 6e 67 20 75 73 65 20 6f 66 20 74 68  inning use of th
f4c0: 65 0a 20 20 53 51 4c 69 74 65 20 6c 69 62 72 61  e.  SQLite libra
f4d0: 72 79 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f  ry..}..COMPILE_O
f4e0: 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d  PTION {SQLITE_OM
f4f0: 49 54 5f 41 55 54 4f 4d 41 54 49 43 5f 49 4e 44  IT_AUTOMATIC_IND
f500: 45 58 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70 74  EX} {.  This opt
f510: 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20 6f  ion is used to o
f520: 6d 69 74 20 74 68 65 20 0a 20 20 5b 61 75 74 6f  mit the .  [auto
f530: 6d 61 74 69 63 20 69 6e 64 65 78 69 6e 67 5d 20  matic indexing] 
f540: 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 2e 0a 20  functionality.. 
f550: 20 53 65 65 20 61 6c 73 6f 3a 20 5b 53 51 4c 49   See also: [SQLI
f560: 54 45 5f 44 45 46 41 55 4c 54 5f 41 55 54 4f 4d  TE_DEFAULT_AUTOM
f570: 41 54 49 43 5f 49 4e 44 45 58 5d 2e 0a 7d 0a 0a  ATIC_INDEX]..}..
f580: 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b  COMPILE_OPTION {
f590: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f  SQLITE_OMIT_AUTO
f5a0: 52 45 53 45 54 7d 20 7b 0a 20 20 42 79 20 64 65  RESET} {.  By de
f5b0: 66 61 75 6c 74 2c 20 74 68 65 20 5b 73 71 6c 69  fault, the [sqli
f5c0: 74 65 33 5f 73 74 65 70 28 29 5d 20 69 6e 74 65  te3_step()] inte
f5d0: 72 66 61 63 65 20 77 69 6c 6c 20 61 75 74 6f 6d  rface will autom
f5e0: 61 74 69 63 61 6c 6c 79 20 69 6e 76 6f 6b 65 0a  atically invoke.
f5f0: 20 20 5b 73 71 6c 69 74 65 33 5f 72 65 73 65 74    [sqlite3_reset
f600: 28 29 5d 20 74 6f 20 72 65 73 65 74 20 74 68 65  ()] to reset the
f610: 20 5b 70 72 65 70 61 72 65 64 20 73 74 61 74 65   [prepared state
f620: 6d 65 6e 74 5d 20 69 66 20 6e 65 63 65 73 73 61  ment] if necessa
f630: 72 79 2e 20 20 54 68 69 73 0a 20 20 63 6f 6d 70  ry.  This.  comp
f640: 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20  ile-time option 
f650: 63 68 61 6e 67 65 73 20 74 68 61 74 20 62 65 68  changes that beh
f660: 61 76 69 6f 72 20 73 6f 20 74 68 61 74 20 5b 73  avior so that [s
f670: 71 6c 69 74 65 33 5f 73 74 65 70 28 29 5d 20 77  qlite3_step()] w
f680: 69 6c 6c 0a 20 20 72 65 74 75 72 6e 20 5b 53 51  ill.  return [SQ
f690: 4c 49 54 45 5f 4d 49 53 55 53 45 5d 20 69 66 20  LITE_MISUSE] if 
f6a0: 69 74 20 63 61 6c 6c 65 64 20 61 67 61 69 6e 20  it called again 
f6b0: 61 66 74 65 72 20 72 65 74 75 72 6e 69 6e 67 20  after returning 
f6c0: 61 6e 79 74 68 69 6e 67 20 6f 74 68 65 72 0a 20  anything other. 
f6d0: 20 74 68 61 6e 20 5b 53 51 4c 49 54 45 5f 52 4f   than [SQLITE_RO
f6e0: 57 5d 2c 20 5b 53 51 4c 49 54 45 5f 42 55 53 59  W], [SQLITE_BUSY
f6f0: 5d 2c 20 6f 72 20 5b 53 51 4c 49 54 45 5f 4c 4f  ], or [SQLITE_LO
f700: 43 4b 45 44 5d 20 75 6e 6c 65 73 73 20 74 68 65  CKED] unless the
f710: 72 65 20 77 61 73 20 61 6e 0a 20 20 69 6e 74 65  re was an.  inte
f720: 72 76 65 6e 69 6e 67 20 63 61 6c 6c 20 74 6f 20  rvening call to 
f730: 5b 73 71 6c 69 74 65 33 5f 72 65 73 65 74 28 29  [sqlite3_reset()
f740: 5d 2e 0a 0a 20 20 49 6e 20 53 51 4c 69 74 65 20  ]...  In SQLite 
f750: 5b 76 65 72 73 69 6f 6e 20 33 2e 36 2e 32 33 2e  [version 3.6.23.
f760: 31 5d 20 28 5b 64 61 74 65 6f 66 3a 33 2e 36 2e  1] ([dateof:3.6.
f770: 32 33 2e 31 5d 29 0a 20 20 61 6e 64 20 65 61 72  23.1]).  and ear
f780: 6c 69 65 72 2c 20 5b 73 71 6c 69 74 65 33 5f 73  lier, [sqlite3_s
f790: 74 65 70 28 29 5d 20 75 73 65 64 20 74 6f 20 61  tep()] used to a
f7a0: 6c 77 61 79 73 0a 20 20 72 65 74 75 72 6e 20 5b  lways.  return [
f7b0: 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 5d 20 69  SQLITE_MISUSE] i
f7c0: 66 20 69 74 20 77 61 73 20 69 6e 76 6f 6b 65 64  f it was invoked
f7d0: 20 61 67 61 69 6e 20 61 66 74 65 72 20 72 65 74   again after ret
f7e0: 75 72 6e 69 6e 67 20 61 6e 79 74 68 69 6e 67 0a  urning anything.
f7f0: 20 20 6f 74 68 65 72 20 74 68 61 6e 20 5b 53 51    other than [SQ
f800: 4c 49 54 45 5f 52 4f 57 5d 20 77 69 74 68 6f 75  LITE_ROW] withou
f810: 74 20 61 6e 20 69 6e 74 65 72 76 65 6e 69 6e 67  t an intervening
f820: 20 63 61 6c 6c 20 74 6f 20 5b 73 71 6c 69 74 65   call to [sqlite
f830: 33 5f 72 65 73 65 74 28 29 5d 2e 0a 20 20 54 68  3_reset()]..  Th
f840: 69 73 20 63 61 75 73 65 64 20 70 72 6f 62 6c 65  is caused proble
f850: 6d 73 20 6f 6e 20 73 6f 6d 65 20 70 6f 6f 72 6c  ms on some poorl
f860: 79 20 77 72 69 74 74 65 6e 20 73 6d 61 72 74 70  y written smartp
f870: 68 6f 6e 65 20 61 70 70 6c 69 63 61 74 69 6f 6e  hone application
f880: 73 20 77 68 69 63 68 0a 20 20 64 69 64 20 6e 6f  s which.  did no
f890: 74 20 63 6f 72 72 65 63 74 6c 79 20 68 61 6e 64  t correctly hand
f8a0: 6c 65 20 74 68 65 20 5b 53 51 4c 49 54 45 5f 4c  le the [SQLITE_L
f8b0: 4f 43 4b 45 44 5d 20 61 6e 64 20 5b 53 51 4c 49  OCKED] and [SQLI
f8c0: 54 45 5f 42 55 53 59 5d 20 65 72 72 6f 72 20 0a  TE_BUSY] error .
f8d0: 20 20 72 65 74 75 72 6e 73 2e 20 20 52 61 74 68    returns.  Rath
f8e0: 65 72 20 74 68 61 6e 20 66 69 78 20 74 68 65 20  er than fix the 
f8f0: 6d 61 6e 79 20 64 65 66 65 63 74 69 76 65 20 73  many defective s
f900: 6d 61 72 74 70 68 6f 6e 65 20 61 70 70 6c 69 63  martphone applic
f910: 61 74 69 6f 6e 73 2c 20 0a 20 20 74 68 65 20 62  ations, .  the b
f920: 65 68 61 76 69 6f 72 20 6f 66 20 53 51 4c 69 74  ehavior of SQLit
f930: 65 20 77 61 73 20 63 68 61 6e 67 65 64 20 69 6e  e was changed in
f940: 20 33 2e 36 2e 32 33 2e 32 20 74 6f 20 61 75 74   3.6.23.2 to aut
f950: 6f 6d 61 74 69 63 61 6c 6c 79 20 72 65 73 65 74  omatically reset
f960: 0a 20 20 74 68 65 20 70 72 65 70 61 72 65 64 20  .  the prepared 
f970: 73 74 61 74 65 6d 65 6e 74 2e 20 20 42 75 74 20  statement.  But 
f980: 74 68 61 74 20 63 68 61 6e 67 65 64 20 63 61 75  that changed cau
f990: 73 65 64 20 69 73 73 75 65 73 20 69 6e 20 6f 74  sed issues in ot
f9a0: 68 65 72 20 0a 20 20 69 6d 70 72 6f 70 65 72 6c  her .  improperl
f9b0: 79 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 61 70  y implemented ap
f9c0: 70 6c 69 63 61 74 69 6f 6e 73 20 74 68 61 74 20  plications that 
f9d0: 77 65 72 65 20 61 63 74 75 61 6c 6c 79 20 6c 6f  were actually lo
f9e0: 6f 6b 69 6e 67 0a 20 20 66 6f 72 20 61 6e 20 5b  oking.  for an [
f9f0: 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 5d 20 72  SQLITE_MISUSE] r
fa00: 65 74 75 72 6e 20 74 6f 20 74 65 72 6d 69 6e 61  eturn to termina
fa10: 74 65 20 74 68 65 69 72 20 71 75 65 72 79 20 6c  te their query l
fa20: 6f 6f 70 73 2e 20 20 28 41 6e 79 74 69 6d 65 0a  oops.  (Anytime.
fa30: 20 20 61 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e    an application
fa40: 20 67 65 74 73 20 61 6e 20 53 51 4c 49 54 45 5f   gets an SQLITE_
fa50: 4d 49 53 55 53 45 20 65 72 72 6f 72 20 63 6f 64  MISUSE error cod
fa60: 65 20 66 72 6f 6d 20 53 51 4c 69 74 65 2c 20 74  e from SQLite, t
fa70: 68 61 74 20 6d 65 61 6e 73 20 74 68 65 0a 20 20  hat means the.  
fa80: 61 70 70 6c 69 63 61 74 69 6f 6e 20 69 73 20 6d  application is m
fa90: 69 73 75 73 69 6e 67 20 74 68 65 20 53 51 4c 69  isusing the SQLi
faa0: 74 65 20 69 6e 74 65 72 66 61 63 65 20 61 6e 64  te interface and
fab0: 20 69 73 20 74 68 75 73 20 69 6e 63 6f 72 72 65   is thus incorre
fac0: 63 74 6c 79 0a 20 20 69 6d 70 6c 65 6d 65 6e 74  ctly.  implement
fad0: 65 64 2e 29 20 20 54 68 65 20 53 51 4c 49 54 45  ed.)  The SQLITE
fae0: 5f 4f 4d 49 54 5f 41 55 54 4f 52 45 53 45 54 20  _OMIT_AUTORESET 
faf0: 69 6e 74 65 72 66 61 63 65 20 77 61 73 20 61 64  interface was ad
fb00: 64 65 64 20 74 6f 20 53 51 4c 69 74 65 0a 20 20  ded to SQLite.  
fb10: 5b 76 65 72 73 69 6f 6e 20 33 2e 37 2e 35 5d 20  [version 3.7.5] 
fb20: 28 5b 64 61 74 65 6f 66 3a 33 2e 37 2e 35 5d 29  ([dateof:3.7.5])
fb30: 20 69 6e 20 61 6e 20 65 66 66 6f 72 74 20 74 6f   in an effort to
fb40: 20 67 65 74 20 61 6c 6c 20 6f 66 20 74 68 65 20   get all of the 
fb50: 28 62 72 6f 6b 65 6e 29 0a 20 20 61 70 70 6c 69  (broken).  appli
fb60: 63 61 74 69 6f 6e 73 20 74 6f 20 77 6f 72 6b 20  cations to work 
fb70: 61 67 61 69 6e 20 77 69 74 68 6f 75 74 20 68 61  again without ha
fb80: 76 69 6e 67 20 74 6f 20 61 63 74 75 61 6c 6c 79  ving to actually
fb90: 20 66 69 78 20 74 68 65 20 61 70 70 6c 69 63 61   fix the applica
fba0: 74 69 6f 6e 73 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c  tions..}..COMPIL
fbb0: 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45  E_OPTION {SQLITE
fbc0: 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d  _OMIT_AUTOVACUUM
fbd0: 7d 20 7b 0a 20 20 49 66 20 74 68 69 73 20 6f 70  } {.  If this op
fbe0: 74 69 6f 6e 20 69 73 20 64 65 66 69 6e 65 64 2c  tion is defined,
fbf0: 20 74 68 65 20 6c 69 62 72 61 72 79 20 63 61 6e   the library can
fc00: 6e 6f 74 20 63 72 65 61 74 65 20 6f 72 20 77 72  not create or wr
fc10: 69 74 65 20 74 6f 20 0a 20 20 64 61 74 61 62 61  ite to .  databa
fc20: 73 65 73 20 74 68 61 74 20 73 75 70 70 6f 72 74  ses that support
fc30: 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d 2e 0a   [auto_vacuum]..
fc40: 20 20 45 78 65 63 75 74 69 6e 67 20 61 20 5b 50    Executing a [P
fc50: 52 41 47 4d 41 20 61 75 74 6f 5f 76 61 63 75 75  RAGMA auto_vacuu
fc60: 6d 5d 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  m] statement is 
fc70: 6e 6f 74 20 61 6e 20 65 72 72 6f 72 0a 20 20 28  not an error.  (
fc80: 73 69 6e 63 65 20 75 6e 6b 6e 6f 77 6e 20 50 52  since unknown PR
fc90: 41 47 4d 41 73 20 61 72 65 20 73 69 6c 65 6e 74  AGMAs are silent
fca0: 6c 79 20 69 67 6e 6f 72 65 64 29 2c 20 62 75 74  ly ignored), but
fcb0: 20 64 6f 65 73 20 6e 6f 74 20 72 65 74 75 72 6e   does not return
fcc0: 20 61 20 76 61 6c 75 65 0a 20 20 6f 72 20 6d 6f   a value.  or mo
fcd0: 64 69 66 79 20 74 68 65 20 61 75 74 6f 2d 76 61  dify the auto-va
fce0: 63 75 75 6d 20 66 6c 61 67 20 69 6e 20 74 68 65  cuum flag in the
fcf0: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20   database file. 
fd00: 49 66 20 61 20 64 61 74 61 62 61 73 65 20 74 68  If a database th
fd10: 61 74 0a 20 20 73 75 70 70 6f 72 74 73 20 61 75  at.  supports au
fd20: 74 6f 2d 76 61 63 75 75 6d 20 69 73 20 6f 70 65  to-vacuum is ope
fd30: 6e 65 64 20 62 79 20 61 20 6c 69 62 72 61 72 79  ned by a library
fd40: 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 74   compiled with t
fd50: 68 69 73 20 6f 70 74 69 6f 6e 2c 20 69 74 0a 20  his option, it. 
fd60: 20 69 73 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c   is automaticall
fd70: 79 20 6f 70 65 6e 65 64 20 69 6e 20 72 65 61 64  y opened in read
fd80: 2d 6f 6e 6c 79 20 6d 6f 64 65 2e 0a 7d 0a 0a 43  -only mode..}..C
fd90: 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53  OMPILE_OPTION {S
fda0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 45 54 57 45  QLITE_OMIT_BETWE
fdb0: 45 4e 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 7d  EN_OPTIMIZATION}
fdc0: 20 7b 0a 20 20 54 68 69 73 20 6f 70 74 69 6f 6e   {.  This option
fdd0: 20 64 69 73 61 62 6c 65 73 20 74 68 65 20 75 73   disables the us
fde0: 65 20 6f 66 20 69 6e 64 69 63 65 73 20 77 69 74  e of indices wit
fdf0: 68 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 74  h WHERE clause t
fe00: 65 72 6d 73 0a 20 20 74 68 61 74 20 65 6d 70 6c  erms.  that empl
fe10: 6f 79 20 74 68 65 20 42 45 54 57 45 45 4e 20 6f  oy the BETWEEN o
fe20: 70 65 72 61 74 6f 72 2e 0a 7d 0a 0a 43 4f 4d 50  perator..}..COMP
fe30: 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49  ILE_OPTION {SQLI
fe40: 54 45 5f 4f 4d 49 54 5f 42 4c 4f 42 5f 4c 49 54  TE_OMIT_BLOB_LIT
fe50: 45 52 41 4c 7d 20 7b 0a 20 20 57 68 65 6e 20 74  ERAL} {.  When t
fe60: 68 69 73 20 6f 70 74 69 6f 6e 20 69 73 20 64 65  his option is de
fe70: 66 69 6e 65 64 2c 20 69 74 20 69 73 20 6e 6f 74  fined, it is not
fe80: 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 73 70 65   possible to spe
fe90: 63 69 66 79 20 61 20 62 6c 6f 62 20 69 6e 0a 20  cify a blob in. 
fea0: 20 61 6e 20 53 51 4c 20 73 74 61 74 65 6d 65 6e   an SQL statemen
feb0: 74 20 75 73 69 6e 67 20 74 68 65 20 58 27 41 42  t using the X'AB
fec0: 43 44 27 20 73 79 6e 74 61 78 2e 0a 7d 0a 0a 43  CD' syntax..}..C
fed0: 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53  OMPILE_OPTION {S
fee0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 54 52 45 45  QLITE_OMIT_BTREE
fef0: 43 4f 55 4e 54 7d 20 7b 0a 20 20 57 68 65 6e 20  COUNT} {.  When 
ff00: 74 68 69 73 20 6f 70 74 69 6f 6e 20 69 73 20 64  this option is d
ff10: 65 66 69 6e 65 64 2c 20 61 6e 20 6f 70 74 69 6d  efined, an optim
ff20: 69 7a 61 74 69 6f 6e 20 74 68 61 74 20 61 63 63  ization that acc
ff30: 65 6c 65 72 61 74 65 73 20 63 6f 75 6e 74 69 6e  elerates countin
ff40: 67 0a 20 20 61 6c 6c 20 65 6e 74 72 69 65 73 20  g.  all entries 
ff50: 69 6e 20 61 20 74 61 62 6c 65 20 28 69 6e 20 6f  in a table (in o
ff60: 74 68 65 72 20 77 6f 72 64 73 2c 20 61 6e 20 6f  ther words, an o
ff70: 70 74 69 6d 69 7a 61 74 69 6f 6e 20 74 68 61 74  ptimization that
ff80: 20 68 65 6c 70 73 0a 20 20 22 53 45 4c 45 43 54   helps.  "SELECT
ff90: 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 74   count(*) FROM t
ffa0: 61 62 6c 65 22 20 72 75 6e 20 66 61 73 74 65 72  able" run faster
ffb0: 29 20 69 73 20 6f 6d 69 74 74 65 64 2e 0a 7d 0a  ) is omitted..}.
ffc0: 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20  .COMPILE_OPTION 
ffd0: 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49  {SQLITE_OMIT_BUI
ffe0: 4c 54 49 4e 5f 54 45 53 54 7d 20 7b 0a 20 20 54  LTIN_TEST} {.  T
fff0: 68 69 73 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  his compile-time
10000 20 6f 70 74 69 6f 6e 20 68 61 73 20 62 65 65 6e   option has been
10010 20 72 65 6e 61 6d 65 64 20 74 6f 20 5b 53 51 4c   renamed to [SQL
10020 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 5d 2e  ITE_UNTESTABLE].
10030 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49  .}..COMPILE_OPTI
10040 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ON {SQLITE_OMIT_
10050 43 41 53 54 7d 20 7b 0a 20 20 54 68 69 73 20 6f  CAST} {.  This o
10060 70 74 69 6f 6e 20 63 61 75 73 65 73 20 53 51 4c  ption causes SQL
10070 69 74 65 20 74 6f 20 6f 6d 69 74 20 73 75 70 70  ite to omit supp
10080 6f 72 74 20 66 6f 72 20 74 68 65 20 43 41 53 54  ort for the CAST
10090 20 6f 70 65 72 61 74 6f 72 2e 0a 7d 0a 0a 43 4f   operator..}..CO
100a0 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51  MPILE_OPTION {SQ
100b0 4c 49 54 45 5f 4f 4d 49 54 5f 43 48 45 43 4b 7d  LITE_OMIT_CHECK}
100c0 20 7b 0a 20 20 54 68 69 73 20 6f 70 74 69 6f 6e   {.  This option
100d0 20 63 61 75 73 65 73 20 53 51 4c 69 74 65 20 74   causes SQLite t
100e0 6f 20 6f 6d 69 74 20 73 75 70 70 6f 72 74 20 66  o omit support f
100f0 6f 72 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61  or CHECK constra
10100 69 6e 74 73 2e 0a 20 20 54 68 65 20 70 61 72 73  ints..  The pars
10110 65 72 20 77 69 6c 6c 20 73 74 69 6c 6c 20 61 63  er will still ac
10120 63 65 70 74 20 43 48 45 43 4b 20 63 6f 6e 73 74  cept CHECK const
10130 72 61 69 6e 74 73 20 69 6e 20 53 51 4c 20 73 74  raints in SQL st
10140 61 74 65 6d 65 6e 74 73 2c 0a 20 20 74 68 65 79  atements,.  they
10150 20 77 69 6c 6c 20 6a 75 73 74 20 6e 6f 74 20 62   will just not b
10160 65 20 65 6e 66 6f 72 63 65 64 2e 0a 7d 0a 0a 43  e enforced..}..C
10170 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53  OMPILE_OPTION {S
10180 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49  QLITE_OMIT_COMPI
10190 4c 45 4f 50 54 49 4f 4e 5f 44 49 41 47 53 7d 20  LEOPTION_DIAGS} 
101a0 7b 0a 20 20 54 68 69 73 20 6f 70 74 69 6f 6e 20  {.  This option 
101b0 69 73 20 75 73 65 64 20 74 6f 20 6f 6d 69 74 20  is used to omit 
101c0 74 68 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  the compile-time
101d0 20 6f 70 74 69 6f 6e 20 64 69 61 67 6e 6f 73 74   option diagnost
101e0 69 63 73 20 61 76 61 69 6c 61 62 6c 65 0a 20 20  ics available.  
101f0 69 6e 20 53 51 4c 69 74 65 2c 20 69 6e 63 6c 75  in SQLite, inclu
10200 64 69 6e 67 20 74 68 65 20 5b 73 71 6c 69 74 65  ding the [sqlite
10210 33 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f  3_compileoption_
10220 75 73 65 64 28 29 5d 20 61 6e 64 0a 20 20 5b 73  used()] and.  [s
10230 71 6c 69 74 65 33 5f 63 6f 6d 70 69 6c 65 6f 70  qlite3_compileop
10240 74 69 6f 6e 5f 67 65 74 28 29 5d 20 43 2f 43 2b  tion_get()] C/C+
10250 2b 20 66 75 6e 63 74 69 6f 6e 73 2c 20 74 68 65  + functions, the
10260 0a 20 20 5b 73 71 6c 69 74 65 5f 63 6f 6d 70 69  .  [sqlite_compi
10270 6c 65 6f 70 74 69 6f 6e 5f 75 73 65 64 28 29 5d  leoption_used()]
10280 20 61 6e 64 20 5b 73 71 6c 69 74 65 5f 63 6f 6d   and [sqlite_com
10290 70 69 6c 65 6f 70 74 69 6f 6e 5f 67 65 74 28 29  pileoption_get()
102a0 5d 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 73 2c  ] SQL functions,
102b0 0a 20 20 61 6e 64 20 74 68 65 20 5b 63 6f 6d 70  .  and the [comp
102c0 69 6c 65 5f 6f 70 74 69 6f 6e 73 20 70 72 61 67  ile_options prag
102d0 6d 61 5d 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f  ma]..}..COMPILE_
102e0 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f  OPTION {SQLITE_O
102f0 4d 49 54 5f 43 4f 4d 50 4c 45 54 45 7d 20 7b 0a  MIT_COMPLETE} {.
10300 20 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 63 61    This option ca
10310 75 73 65 73 20 74 68 65 20 5b 73 71 6c 69 74 65  uses the [sqlite
10320 33 5f 63 6f 6d 70 6c 65 74 65 28 29 5d 20 61 6e  3_complete()] an
10330 64 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6d 70 6c  d [sqlite3_compl
10340 65 74 65 31 36 28 29 5d 0a 20 20 69 6e 74 65 72  ete16()].  inter
10350 66 61 63 65 73 20 74 6f 20 62 65 20 6f 6d 69 74  faces to be omit
10360 74 65 64 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f  ted..}..COMPILE_
10370 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f  OPTION {SQLITE_O
10380 4d 49 54 5f 43 4f 4d 50 4f 55 4e 44 5f 53 45 4c  MIT_COMPOUND_SEL
10390 45 43 54 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70  ECT} {.  This op
103a0 74 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20  tion is used to 
103b0 6f 6d 69 74 20 74 68 65 20 63 6f 6d 70 6f 75 6e  omit the compoun
103c0 64 20 5b 53 45 4c 45 43 54 5d 20 66 75 6e 63 74  d [SELECT] funct
103d0 69 6f 6e 61 6c 69 74 79 2e 20 0a 20 20 5b 53 45  ionality. .  [SE
103e0 4c 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 73  LECT] statements
103f0 20 74 68 61 74 20 75 73 65 20 74 68 65 20 0a 20   that use the . 
10400 20 55 4e 49 4f 4e 2c 20 55 4e 49 4f 4e 20 41 4c   UNION, UNION AL
10410 4c 2c 20 49 4e 54 45 52 53 45 43 54 20 6f 72 20  L, INTERSECT or 
10420 45 58 43 45 50 54 20 63 6f 6d 70 6f 75 6e 64 20  EXCEPT compound 
10430 53 45 4c 45 43 54 20 6f 70 65 72 61 74 6f 72 73  SELECT operators
10440 20 77 69 6c 6c 20 0a 20 20 63 61 75 73 65 20 61   will .  cause a
10450 20 70 61 72 73 65 20 65 72 72 6f 72 2e 0a 0a 20   parse error... 
10460 20 41 6e 20 5b 49 4e 53 45 52 54 5d 20 73 74 61   An [INSERT] sta
10470 74 65 6d 65 6e 74 20 77 69 74 68 20 6d 75 6c 74  tement with mult
10480 69 70 6c 65 20 76 61 6c 75 65 73 20 69 6e 20 74  iple values in t
10490 68 65 20 56 41 4c 55 45 53 20 63 6c 61 75 73 65  he VALUES clause
104a0 20 69 73 0a 20 20 69 6d 70 6c 65 6d 65 6e 74 65   is.  implemente
104b0 64 20 69 6e 74 65 72 6e 61 6c 6c 79 20 61 73 20  d internally as 
104c0 61 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43  a compound SELEC
104d0 54 2e 20 20 48 65 6e 63 65 2c 20 74 68 69 73 20  T.  Hence, this 
104e0 6f 70 74 69 6f 6e 20 61 6c 73 6f 0a 20 20 64 69  option also.  di
104f0 73 61 62 6c 65 73 20 74 68 65 20 61 62 69 6c 69  sables the abili
10500 74 79 20 74 6f 20 69 6e 73 65 72 74 20 6d 6f 72  ty to insert mor
10510 65 20 74 68 61 6e 20 61 20 73 69 6e 67 6c 65 20  e than a single 
10520 72 6f 77 20 75 73 69 6e 67 20 61 6e 0a 20 20 49  row using an.  I
10530 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 56  NSERT INTO ... V
10540 41 4c 55 45 53 20 2e 2e 2e 20 73 74 61 74 65 6d  ALUES ... statem
10550 65 6e 74 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f  ent..}..COMPILE_
10560 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f  OPTION {SQLITE_O
10570 4d 49 54 5f 43 54 45 7d 20 7b 0a 20 20 54 68 69  MIT_CTE} {.  Thi
10580 73 20 6f 70 74 69 6f 6e 20 63 61 75 73 65 73 20  s option causes 
10590 73 75 70 70 6f 72 74 20 66 6f 72 20 5b 63 6f 6d  support for [com
105a0 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73  mon table expres
105b0 73 69 6f 6e 73 5d 20 74 6f 20 62 65 20 6f 6d 69  sions] to be omi
105c0 74 74 65 64 2e 0a 7d 0a 0a 0a 0a 43 4f 4d 50 49  tted..}....COMPI
105d0 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54  LE_OPTION {SQLIT
105e0 45 5f 4f 4d 49 54 5f 44 41 54 45 54 49 4d 45 5f  E_OMIT_DATETIME_
105f0 46 55 4e 43 53 7d 20 7b 0a 20 20 49 66 20 74 68  FUNCS} {.  If th
10600 69 73 20 6f 70 74 69 6f 6e 20 69 73 20 64 65 66  is option is def
10610 69 6e 65 64 2c 20 53 51 4c 69 74 65 27 73 20 62  ined, SQLite's b
10620 75 69 6c 74 2d 69 6e 20 64 61 74 65 20 61 6e 64  uilt-in date and
10630 20 74 69 6d 65 20 6d 61 6e 69 70 75 6c 61 74 69   time manipulati
10640 6f 6e 0a 20 20 66 75 6e 63 74 69 6f 6e 73 20 61  on.  functions a
10650 72 65 20 6f 6d 69 74 74 65 64 2e 20 53 70 65 63  re omitted. Spec
10660 69 66 69 63 61 6c 6c 79 2c 20 74 68 65 20 53 51  ifically, the SQ
10670 4c 20 66 75 6e 63 74 69 6f 6e 73 20 6a 75 6c 69  L functions juli
10680 61 6e 64 61 79 28 29 2c 20 64 61 74 65 28 29 2c  anday(), date(),
10690 0a 20 20 74 69 6d 65 28 29 2c 20 64 61 74 65 74  .  time(), datet
106a0 69 6d 65 28 29 20 61 6e 64 20 73 74 72 66 74 69  ime() and strfti
106b0 6d 65 28 29 20 61 72 65 20 6e 6f 74 20 61 76 61  me() are not ava
106c0 69 6c 61 62 6c 65 2e 20 54 68 65 20 64 65 66 61  ilable. The defa
106d0 75 6c 74 20 63 6f 6c 75 6d 6e 0a 20 20 76 61 6c  ult column.  val
106e0 75 65 73 20 43 55 52 52 45 4e 54 5f 54 49 4d 45  ues CURRENT_TIME
106f0 2c 20 43 55 52 52 45 4e 54 5f 44 41 54 45 20 61  , CURRENT_DATE a
10700 6e 64 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 53  nd CURRENT_TIMES
10710 54 41 4d 50 20 61 72 65 20 73 74 69 6c 6c 20 61  TAMP are still a
10720 76 61 69 6c 61 62 6c 65 2e 0a 7d 0a 0a 43 4f 4d  vailable..}..COM
10730 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c  PILE_OPTION {SQL
10740 49 54 45 5f 4f 4d 49 54 5f 44 45 43 4c 54 59 50  ITE_OMIT_DECLTYP
10750 45 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70 74 69  E} {.  This opti
10760 6f 6e 20 63 61 75 73 65 73 20 53 51 4c 69 74 65  on causes SQLite
10770 20 74 6f 20 6f 6d 69 74 20 73 75 70 70 6f 72 74   to omit support
10780 20 66 6f 72 20 74 68 65 0a 20 20 5b 73 71 6c 69   for the.  [sqli
10790 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74  te3_column_declt
107a0 79 70 65 28 29 5d 20 61 6e 64 20 5b 73 71 6c 69  ype()] and [sqli
107b0 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74  te3_column_declt
107c0 79 70 65 31 36 28 29 5d 0a 20 20 69 6e 74 65 72  ype16()].  inter
107d0 66 61 63 65 73 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c  faces..}..COMPIL
107e0 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45  E_OPTION {SQLITE
107f0 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41 54 45 44  _OMIT_DEPRECATED
10800 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70 74 69 6f  } {.  This optio
10810 6e 20 63 61 75 73 65 73 20 53 51 4c 69 74 65 20  n causes SQLite 
10820 74 6f 20 6f 6d 69 74 20 73 75 70 70 6f 72 74 20  to omit support 
10830 66 6f 72 20 69 6e 74 65 72 66 61 63 65 73 0a 20  for interfaces. 
10840 20 6d 61 72 6b 65 64 20 61 73 20 64 65 70 72 65   marked as depre
10850 63 61 74 65 64 2e 20 20 54 68 69 73 20 69 6e 63  cated.  This inc
10860 6c 75 64 65 73 20 0a 20 20 5b 73 71 6c 69 74 65  ludes .  [sqlite
10870 33 5f 61 67 67 72 65 67 61 74 65 5f 63 6f 75 6e  3_aggregate_coun
10880 74 28 29 5d 2c 0a 20 20 5b 73 71 6c 69 74 65 33  t()],.  [sqlite3
10890 5f 65 78 70 69 72 65 64 28 29 5d 2c 0a 20 20 5b  _expired()],.  [
108a0 73 71 6c 69 74 65 33 5f 74 72 61 6e 73 66 65 72  sqlite3_transfer
108b0 5f 62 69 6e 64 69 6e 67 73 28 29 5d 2c 0a 20 20  _bindings()],.  
108c0 5b 73 71 6c 69 74 65 33 5f 67 6c 6f 62 61 6c 5f  [sqlite3_global_
108d0 72 65 63 6f 76 65 72 28 29 5d 2c 0a 20 20 5b 73  recover()],.  [s
108e0 71 6c 69 74 65 33 5f 74 68 72 65 61 64 5f 63 6c  qlite3_thread_cl
108f0 65 61 6e 75 70 28 29 5d 20 61 6e 64 0a 20 20 5b  eanup()] and.  [
10900 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72 79 5f 61  sqlite3_memory_a
10910 6c 61 72 6d 28 29 5d 20 69 6e 74 65 72 66 61 63  larm()] interfac
10920 65 73 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f  es..}..COMPILE_O
10930 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d  PTION {SQLITE_OM
10940 49 54 5f 44 49 53 4b 49 4f 7d 20 7b 0a 20 20 54  IT_DISKIO} {.  T
10950 68 69 73 20 6f 70 74 69 6f 6e 20 6f 6d 69 74 73  his option omits
10960 20 61 6c 6c 20 73 75 70 70 6f 72 74 20 66 6f 72   all support for
10970 20 77 72 69 74 69 6e 67 20 74 6f 20 74 68 65 20   writing to the 
10980 64 69 73 6b 20 61 6e 64 20 66 6f 72 63 65 73 0a  disk and forces.
10990 20 20 64 61 74 61 62 61 73 65 73 20 74 6f 20 65    databases to e
109a0 78 69 73 74 20 69 6e 20 6d 65 6d 6f 72 79 20 6f  xist in memory o
109b0 6e 6c 79 2e 20 20 54 68 69 73 20 6f 70 74 69 6f  nly.  This optio
109c0 6e 20 68 61 73 20 6e 6f 74 20 62 65 65 6e 20 0a  n has not been .
109d0 20 20 6d 61 69 6e 74 61 69 6e 65 64 20 61 6e 64    maintained and
109e0 20 70 72 6f 62 61 62 6c 79 20 64 6f 65 73 20 6e   probably does n
109f0 6f 74 20 77 6f 72 6b 20 77 69 74 68 20 6e 65 77  ot work with new
10a00 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53  er versions of S
10a10 51 4c 69 74 65 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c  QLite..}..COMPIL
10a20 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45  E_OPTION {SQLITE
10a30 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 7d 20 7b  _OMIT_EXPLAIN} {
10a40 0a 20 20 44 65 66 69 6e 69 6e 67 20 74 68 69 73  .  Defining this
10a50 20 6f 70 74 69 6f 6e 20 63 61 75 73 65 73 20 74   option causes t
10a60 68 65 20 5b 45 58 50 4c 41 49 4e 5d 20 63 6f 6d  he [EXPLAIN] com
10a70 6d 61 6e 64 20 74 6f 20 62 65 20 6f 6d 69 74 74  mand to be omitt
10a80 65 64 20 66 72 6f 6d 20 74 68 65 0a 20 20 6c 69  ed from the.  li
10a90 62 72 61 72 79 2e 20 41 74 74 65 6d 70 74 69 6e  brary. Attemptin
10aa0 67 20 74 6f 20 65 78 65 63 75 74 65 20 61 6e 20  g to execute an 
10ab0 5b 45 58 50 4c 41 49 4e 5d 20 73 74 61 74 65 6d  [EXPLAIN] statem
10ac0 65 6e 74 20 77 69 6c 6c 20 63 61 75 73 65 20 61  ent will cause a
10ad0 20 70 61 72 73 65 0a 20 20 65 72 72 6f 72 2e 0a   parse.  error..
10ae0 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f  }..COMPILE_OPTIO
10af0 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  N {SQLITE_OMIT_F
10b00 4c 41 47 5f 50 52 41 47 4d 41 53 7d 20 7b 0a 20  LAG_PRAGMAS} {. 
10b10 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 6f 6d 69   This option omi
10b20 74 73 20 73 75 70 70 6f 72 74 20 66 6f 72 20 61  ts support for a
10b30 20 73 75 62 73 65 74 20 6f 66 20 5b 50 52 41 47   subset of [PRAG
10b40 4d 41 5d 20 63 6f 6d 6d 61 6e 64 73 20 74 68 61  MA] commands tha
10b50 74 0a 20 20 71 75 65 72 79 20 61 6e 64 20 73 65  t.  query and se
10b60 74 20 62 6f 6f 6c 65 61 6e 20 70 72 6f 70 65 72  t boolean proper
10b70 74 69 65 73 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45  ties..}..COMPILE
10b80 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f  _OPTION {SQLITE_
10b90 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
10ba0 49 4e 54 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70  INT} {.  This op
10bb0 74 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20  tion is used to 
10bc0 6f 6d 69 74 20 66 6c 6f 61 74 69 6e 67 2d 70 6f  omit floating-po
10bd0 69 6e 74 20 6e 75 6d 62 65 72 20 73 75 70 70 6f  int number suppo
10be0 72 74 20 66 72 6f 6d 20 74 68 65 20 53 51 4c 69  rt from the SQLi
10bf0 74 65 0a 20 20 6c 69 62 72 61 72 79 2e 20 57 68  te.  library. Wh
10c00 65 6e 20 73 70 65 63 69 66 69 65 64 2c 20 73 70  en specified, sp
10c10 65 63 69 66 79 69 6e 67 20 61 20 66 6c 6f 61 74  ecifying a float
10c20 69 6e 67 20 70 6f 69 6e 74 20 6e 75 6d 62 65 72  ing point number
10c30 20 61 73 20 61 20 6c 69 74 65 72 61 6c 20 0a 20   as a literal . 
10c40 20 28 69 2e 65 2e 20 22 31 2e 30 31 22 29 20 72   (i.e. "1.01") r
10c50 65 73 75 6c 74 73 20 69 6e 20 61 20 70 61 72 73  esults in a pars
10c60 65 20 65 72 72 6f 72 2e 0a 0a 20 20 3c 70 3e 49  e error...  <p>I
10c70 6e 20 74 68 65 20 66 75 74 75 72 65 2c 20 74 68  n the future, th
10c80 69 73 20 6f 70 74 69 6f 6e 20 6d 61 79 20 61 6c  is option may al
10c90 73 6f 20 64 69 73 61 62 6c 65 20 6f 74 68 65 72  so disable other
10ca0 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20   floating point 
10cb0 0a 20 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79  .  functionality
10cc0 2c 20 66 6f 72 20 65 78 61 6d 70 6c 65 20 74 68  , for example th
10cd0 65 20 5b 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  e [sqlite3_resul
10ce0 74 5f 64 6f 75 62 6c 65 28 29 5d 2c 20 0a 20 20  t_double()], .  
10cf0 5b 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64 6f  [sqlite3_bind_do
10d00 75 62 6c 65 28 29 5d 2c 20 5b 73 71 6c 69 74 65  uble()], [sqlite
10d10 33 5f 76 61 6c 75 65 5f 64 6f 75 62 6c 65 28 29  3_value_double()
10d20 5d 20 61 6e 64 0a 20 20 5b 73 71 6c 69 74 65 33  ] and.  [sqlite3
10d30 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65 28 29  _column_double()
10d40 5d 20 41 50 49 20 66 75 6e 63 74 69 6f 6e 73 2e  ] API functions.
10d50 0a 20 20 3c 2f 70 3e 0a 7d 0a 0a 43 4f 4d 50 49  .  </p>.}..COMPI
10d60 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54  LE_OPTION {SQLIT
10d70 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b  E_OMIT_FOREIGN_K
10d80 45 59 7d 20 7b 0a 20 20 49 66 20 74 68 69 73 20  EY} {.  If this 
10d90 6f 70 74 69 6f 6e 20 69 73 20 64 65 66 69 6e 65  option is define
10da0 64 2c 20 74 68 65 6e 20 5b 66 6f 72 65 69 67 6e  d, then [foreign
10db0 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 5d   key constraint]
10dc0 20 73 79 6e 74 61 78 20 69 73 0a 20 20 6e 6f 74   syntax is.  not
10dd0 20 72 65 63 6f 67 6e 69 7a 65 64 2e 0a 7d 0a 0a   recognized..}..
10de0 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b  COMPILE_OPTION {
10df0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 47 45 54 5f  SQLITE_OMIT_GET_
10e00 54 41 42 4c 45 7d 20 7b 0a 20 20 54 68 69 73 20  TABLE} {.  This 
10e10 6f 70 74 69 6f 6e 20 63 61 75 73 65 73 20 73 75  option causes su
10e20 70 70 6f 72 74 20 66 6f 72 20 5b 73 71 6c 69 74  pport for [sqlit
10e30 65 33 5f 67 65 74 5f 74 61 62 6c 65 28 29 5d 20  e3_get_table()] 
10e40 61 6e 64 0a 20 20 5b 73 71 6c 69 74 65 33 5f 66  and.  [sqlite3_f
10e50 72 65 65 5f 74 61 62 6c 65 28 29 5d 20 74 6f 20  ree_table()] to 
10e60 62 65 20 6f 6d 69 74 74 65 64 2e 0a 7d 0a 0a 43  be omitted..}..C
10e70 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53  OMPILE_OPTION {S
10e80 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 43 52 42  QLITE_OMIT_INCRB
10e90 4c 4f 42 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70  LOB} {.  This op
10ea0 74 69 6f 6e 20 63 61 75 73 65 73 20 73 75 70 70  tion causes supp
10eb0 6f 72 74 20 66 6f 72 20 5b 73 71 6c 69 74 65 33  ort for [sqlite3
10ec0 5f 62 6c 6f 62 20 7c 20 69 6e 63 72 65 6d 65 6e  _blob | incremen
10ed0 74 61 6c 20 42 4c 4f 42 20 49 2f 4f 5d 0a 20 20  tal BLOB I/O].  
10ee0 74 6f 20 62 65 20 6f 6d 69 74 74 65 64 2e 0a 7d  to be omitted..}
10ef0 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e  ..COMPILE_OPTION
10f00 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e   {SQLITE_OMIT_IN
10f10 54 45 47 52 49 54 59 5f 43 48 45 43 4b 7d 20 7b  TEGRITY_CHECK} {
10f20 0a 20 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 6f  .  This option o
10f30 6d 69 74 73 20 73 75 70 70 6f 72 74 20 66 6f 72  mits support for
10f40 20 74 68 65 20 5b 69 6e 74 65 67 72 69 74 79 5f   the [integrity_
10f50 63 68 65 63 6b 20 70 72 61 67 6d 61 5d 2e 0a 7d  check pragma]..}
10f60 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e  ..COMPILE_OPTION
10f70 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c 49   {SQLITE_OMIT_LI
10f80 4b 45 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 7d  KE_OPTIMIZATION}
10f90 20 7b 0a 20 20 54 68 69 73 20 6f 70 74 69 6f 6e   {.  This option
10fa0 20 64 69 73 61 62 6c 65 73 20 74 68 65 20 61 62   disables the ab
10fb0 69 6c 69 74 79 20 6f 66 20 53 51 4c 69 74 65 20  ility of SQLite 
10fc0 74 6f 20 75 73 65 20 69 6e 64 69 63 65 73 20 74  to use indices t
10fd0 6f 20 68 65 6c 70 0a 20 20 72 65 73 6f 6c 76 65  o help.  resolve
10fe0 20 5b 4c 49 4b 45 5d 20 61 6e 64 20 5b 47 4c 4f   [LIKE] and [GLO
10ff0 42 5d 20 6f 70 65 72 61 74 6f 72 73 20 69 6e 20  B] operators in 
11000 61 20 57 48 45 52 45 20 63 6c 61 75 73 65 2e 0a  a WHERE clause..
11010 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f  }..COMPILE_OPTIO
11020 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c  N {SQLITE_OMIT_L
11030 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e 7d 20 7b  OAD_EXTENSION} {
11040 0a 20 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 6f  .  This option o
11050 6d 69 74 73 20 74 68 65 20 65 6e 74 69 72 65 20  mits the entire 
11060 65 78 74 65 6e 73 69 6f 6e 20 6c 6f 61 64 69 6e  extension loadin
11070 67 20 6d 65 63 68 61 6e 69 73 6d 20 66 72 6f 6d  g mechanism from
11080 0a 20 20 53 51 4c 69 74 65 2c 20 69 6e 63 6c 75  .  SQLite, inclu
11090 64 69 6e 67 20 5b 73 71 6c 69 74 65 33 5f 65 6e  ding [sqlite3_en
110a0 61 62 6c 65 5f 6c 6f 61 64 5f 65 78 74 65 6e 73  able_load_extens
110b0 69 6f 6e 28 29 5d 20 61 6e 64 0a 20 20 5b 73 71  ion()] and.  [sq
110c0 6c 69 74 65 33 5f 6c 6f 61 64 5f 65 78 74 65 6e  lite3_load_exten
110d0 73 69 6f 6e 28 29 5d 20 69 6e 74 65 72 66 61 63  sion()] interfac
110e0 65 73 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f  es..}..COMPILE_O
110f0 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d  PTION {SQLITE_OM
11100 49 54 5f 4c 4f 43 41 4c 54 49 4d 45 7d 20 7b 0a  IT_LOCALTIME} {.
11110 20 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 6f 6d    This option om
11120 69 74 73 20 74 68 65 20 22 6c 6f 63 61 6c 74 69  its the "localti
11130 6d 65 22 20 6d 6f 64 69 66 69 65 72 20 66 72 6f  me" modifier fro
11140 6d 20 74 68 65 20 64 61 74 65 20 61 6e 64 20 74  m the date and t
11150 69 6d 65 0a 20 20 66 75 6e 63 74 69 6f 6e 73 2e  ime.  functions.
11160 20 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 69 73    This option is
11170 20 73 6f 6d 65 74 69 6d 65 73 20 75 73 65 66 75   sometimes usefu
11180 6c 20 77 68 65 6e 20 74 72 79 69 6e 67 20 74 6f  l when trying to
11190 20 63 6f 6d 70 69 6c 65 0a 20 20 74 68 65 20 64   compile.  the d
111a0 61 74 65 20 61 6e 64 20 74 69 6d 65 20 66 75 6e  ate and time fun
111b0 63 74 69 6f 6e 73 20 6f 6e 20 61 20 70 6c 61 74  ctions on a plat
111c0 66 6f 72 6d 20 74 68 61 74 20 64 6f 65 73 20 6e  form that does n
111d0 6f 74 20 73 75 70 70 6f 72 74 20 74 68 65 0a 20  ot support the. 
111e0 20 63 6f 6e 63 65 70 74 20 6f 66 20 6c 6f 63 61   concept of loca
111f0 6c 20 74 69 6d 65 2e 0a 7d 0a 0a 43 4f 4d 50 49  l time..}..COMPI
11200 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54  LE_OPTION {SQLIT
11210 45 5f 4f 4d 49 54 5f 4c 4f 4f 4b 41 53 49 44 45  E_OMIT_LOOKASIDE
11220 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70 74 69 6f  } {.  This optio
11230 6e 20 6f 6d 69 74 73 20 74 68 65 20 5b 6c 6f 6f  n omits the [loo
11240 6b 61 73 69 64 65 20 6d 65 6d 6f 72 79 20 61 6c  kaside memory al
11250 6c 6f 63 61 74 6f 72 5d 2e 0a 7d 0a 0a 43 4f 4d  locator]..}..COM
11260 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c  PILE_OPTION {SQL
11270 49 54 45 5f 4f 4d 49 54 5f 4d 45 4d 4f 52 59 44  ITE_OMIT_MEMORYD
11280 42 7d 20 7b 0a 20 20 57 68 65 6e 20 74 68 69 73  B} {.  When this
11290 20 69 73 20 64 65 66 69 6e 65 64 2c 20 74 68 65   is defined, the
112a0 20 6c 69 62 72 61 72 79 20 64 6f 65 73 20 6e 6f   library does no
112b0 74 20 72 65 73 70 65 63 74 20 74 68 65 20 73 70  t respect the sp
112c0 65 63 69 61 6c 20 64 61 74 61 62 61 73 65 0a 20  ecial database. 
112d0 20 6e 61 6d 65 20 22 3a 6d 65 6d 6f 72 79 3a 22   name ":memory:"
112e0 20 28 6e 6f 72 6d 61 6c 6c 79 20 75 73 65 64 20   (normally used 
112f0 74 6f 20 63 72 65 61 74 65 20 61 6e 20 5b 69 6e  to create an [in
11300 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 73 65  -memory database
11310 5d 29 2e 20 49 66 20 0a 20 20 22 3a 6d 65 6d 6f  ]). If .  ":memo
11320 72 79 3a 22 20 69 73 20 70 61 73 73 65 64 20 74  ry:" is passed t
11330 6f 20 5b 73 71 6c 69 74 65 33 5f 6f 70 65 6e 28  o [sqlite3_open(
11340 29 5d 2c 20 5b 73 71 6c 69 74 65 33 5f 6f 70 65  )], [sqlite3_ope
11350 6e 31 36 28 29 5d 2c 20 6f 72 0a 20 20 5b 73 71  n16()], or.  [sq
11360 6c 69 74 65 33 5f 6f 70 65 6e 5f 76 32 28 29 5d  lite3_open_v2()]
11370 2c 20 61 20 66 69 6c 65 20 77 69 74 68 20 74 68  , a file with th
11380 69 73 20 6e 61 6d 65 20 77 69 6c 6c 20 62 65 20  is name will be 
11390 0a 20 20 6f 70 65 6e 65 64 20 6f 72 20 63 72 65  .  opened or cre
113a0 61 74 65 64 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45  ated..}..COMPILE
113b0 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f  _OPTION {SQLITE_
113c0 4f 4d 49 54 5f 4f 52 5f 4f 50 54 49 4d 49 5a 41  OMIT_OR_OPTIMIZA
113d0 54 49 4f 4e 7d 20 7b 0a 20 20 54 68 69 73 20 6f  TION} {.  This o
113e0 70 74 69 6f 6e 20 64 69 73 61 62 6c 65 73 20 74  ption disables t
113f0 68 65 20 61 62 69 6c 69 74 79 20 6f 66 20 53 51  he ability of SQ
11400 4c 69 74 65 20 74 6f 20 75 73 65 20 61 6e 20 69  Lite to use an i
11410 6e 64 65 78 20 74 6f 67 65 74 68 65 72 0a 20 20  ndex together.  
11420 77 69 74 68 20 74 65 72 6d 73 20 6f 66 20 61 20  with terms of a 
11430 57 48 45 52 45 20 63 6c 61 75 73 65 20 63 6f 6e  WHERE clause con
11440 6e 65 63 74 65 64 20 62 79 20 74 68 65 20 4f 52  nected by the OR
11450 20 6f 70 65 72 61 74 6f 72 2e 0a 7d 0a 0a 43 4f   operator..}..CO
11460 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51  MPILE_OPTION {SQ
11470 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f  LITE_OMIT_PAGER_
11480 50 52 41 47 4d 41 53 7d 20 7b 0a 20 20 44 65 66  PRAGMAS} {.  Def
11490 69 6e 69 6e 67 20 74 68 69 73 20 6f 70 74 69 6f  ining this optio
114a0 6e 20 6f 6d 69 74 73 20 70 72 61 67 6d 61 73 20  n omits pragmas 
114b0 72 65 6c 61 74 65 64 20 74 6f 20 74 68 65 20 70  related to the p
114c0 61 67 65 72 20 73 75 62 73 79 73 74 65 6d 20 66  ager subsystem f
114d0 72 6f 6d 20 0a 20 20 74 68 65 20 62 75 69 6c 64  rom .  the build
114e0 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54  ..}..COMPILE_OPT
114f0 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54  ION {SQLITE_OMIT
11500 5f 50 52 41 47 4d 41 7d 20 7b 0a 20 20 54 68 69  _PRAGMA} {.  Thi
11510 73 20 6f 70 74 69 6f 6e 20 69 73 20 75 73 65 64  s option is used
11520 20 74 6f 20 6f 6d 69 74 20 74 68 65 20 5b 50 52   to omit the [PR
11530 41 47 4d 41 5d 20 63 6f 6d 6d 61 6e 64 0a 20 20  AGMA] command.  
11540 66 72 6f 6d 20 74 68 65 20 6c 69 62 72 61 72 79  from the library
11550 2e 20 4e 6f 74 65 20 74 68 61 74 20 69 74 20 69  . Note that it i
11560 73 20 75 73 65 66 75 6c 20 74 6f 20 64 65 66 69  s useful to defi
11570 6e 65 20 74 68 65 20 6d 61 63 72 6f 73 20 74 68  ne the macros th
11580 61 74 20 6f 6d 69 74 0a 20 20 73 70 65 63 69 66  at omit.  specif
11590 69 63 20 70 72 61 67 6d 61 73 20 69 6e 20 61 64  ic pragmas in ad
115a0 64 69 74 69 6f 6e 20 74 6f 20 74 68 69 73 2c 20  dition to this, 
115b0 61 73 20 74 68 65 79 20 6d 61 79 20 61 6c 73 6f  as they may also
115c0 20 72 65 6d 6f 76 65 20 73 75 70 70 6f 72 74 69   remove supporti
115d0 6e 67 20 63 6f 64 65 0a 20 20 69 6e 20 6f 74 68  ng code.  in oth
115e0 65 72 20 73 75 62 2d 73 79 73 74 65 6d 73 2e 20  er sub-systems. 
115f0 54 68 69 73 20 6d 61 63 72 6f 20 72 65 6d 6f 76  This macro remov
11600 65 73 20 74 68 65 20 5b 50 52 41 47 4d 41 5d 20  es the [PRAGMA] 
11610 63 6f 6d 6d 61 6e 64 20 6f 6e 6c 79 2e 0a 7d 0a  command only..}.
11620 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20  .COMPILE_OPTION 
11630 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f  {SQLITE_OMIT_PRO
11640 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 7d 20  GRESS_CALLBACK} 
11650 7b 0a 20 20 54 68 69 73 20 6f 70 74 69 6f 6e 20  {.  This option 
11660 6d 61 79 20 62 65 20 64 65 66 69 6e 65 64 20 74  may be defined t
11670 6f 20 6f 6d 69 74 20 74 68 65 20 63 61 70 61 62  o omit the capab
11680 69 6c 69 74 79 20 74 6f 20 69 73 73 75 65 20 22  ility to issue "
11690 70 72 6f 67 72 65 73 73 22 20 0a 20 20 63 61 6c  progress" .  cal
116a0 6c 62 61 63 6b 73 20 64 75 72 69 6e 67 20 6c 6f  lbacks during lo
116b0 6e 67 2d 72 75 6e 6e 69 6e 67 20 53 51 4c 20 73  ng-running SQL s
116c0 74 61 74 65 6d 65 6e 74 73 2e 20 54 68 65 20 0a  tatements. The .
116d0 20 20 5b 73 71 6c 69 74 65 33 5f 70 72 6f 67 72    [sqlite3_progr
116e0 65 73 73 5f 68 61 6e 64 6c 65 72 28 29 5d 0a 20  ess_handler()]. 
116f0 20 41 50 49 20 66 75 6e 63 74 69 6f 6e 20 69 73   API function is
11700 20 6e 6f 74 20 70 72 65 73 65 6e 74 20 69 6e 20   not present in 
11710 74 68 65 20 6c 69 62 72 61 72 79 2e 0a 7d 0a 0a  the library..}..
11720 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b  COMPILE_OPTION {
11730 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 51 55 49 43  SQLITE_OMIT_QUIC
11740 4b 42 41 4c 41 4e 43 45 7d 20 7b 0a 20 20 54 68  KBALANCE} {.  Th
11750 69 73 20 6f 70 74 69 6f 6e 20 6f 6d 69 74 73 20  is option omits 
11760 61 6e 20 61 6c 74 65 72 6e 61 74 69 76 65 2c 20  an alternative, 
11770 66 61 73 74 65 72 20 42 2d 54 72 65 65 20 62 61  faster B-Tree ba
11780 6c 61 6e 63 69 6e 67 20 72 6f 75 74 69 6e 65 2e  lancing routine.
11790 0a 20 20 55 73 69 6e 67 20 74 68 69 73 20 6f 70  .  Using this op
117a0 74 69 6f 6e 20 6d 61 6b 65 73 20 53 51 4c 69 74  tion makes SQLit
117b0 65 20 73 6c 69 67 68 74 6c 79 20 73 6d 61 6c 6c  e slightly small
117c0 65 72 20 61 74 20 74 68 65 20 65 78 70 65 6e 73  er at the expens
117d0 65 20 6f 66 0a 20 20 6d 61 6b 69 6e 67 20 69 74  e of.  making it
117e0 20 72 75 6e 20 73 6c 69 67 68 74 6c 79 20 73 6c   run slightly sl
117f0 6f 77 65 72 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45  ower..}..COMPILE
11800 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f  _OPTION {SQLITE_
11810 4f 4d 49 54 5f 52 45 49 4e 44 45 58 7d 20 7b 0a  OMIT_REINDEX} {.
11820 20 20 57 68 65 6e 20 74 68 69 73 20 6f 70 74 69    When this opti
11830 6f 6e 20 69 73 20 64 65 66 69 6e 65 64 2c 20 74  on is defined, t
11840 68 65 20 5b 52 45 49 4e 44 45 58 5d 0a 20 20 63  he [REINDEX].  c
11850 6f 6d 6d 61 6e 64 20 69 73 20 6e 6f 74 20 69 6e  ommand is not in
11860 63 6c 75 64 65 64 20 69 6e 20 74 68 65 20 6c 69  cluded in the li
11870 62 72 61 72 79 2e 0a 20 20 45 78 65 63 75 74 69  brary..  Executi
11880 6e 67 20 61 20 5b 52 45 49 4e 44 45 58 5d 20 73  ng a [REINDEX] s
11890 74 61 74 65 6d 65 6e 74 20 63 61 75 73 65 73 20  tatement causes 
118a0 0a 20 20 61 20 70 61 72 73 65 20 65 72 72 6f 72  .  a parse error
118b0 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54  ..}..COMPILE_OPT
118c0 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54  ION {SQLITE_OMIT
118d0 5f 53 43 48 45 4d 41 5f 50 52 41 47 4d 41 53 7d  _SCHEMA_PRAGMAS}
118e0 20 7b 0a 20 20 44 65 66 69 6e 69 6e 67 20 74 68   {.  Defining th
118f0 69 73 20 6f 70 74 69 6f 6e 20 6f 6d 69 74 73 20  is option omits 
11900 70 72 61 67 6d 61 73 20 66 6f 72 20 71 75 65 72  pragmas for quer
11910 79 69 6e 67 20 74 68 65 20 64 61 74 61 62 61 73  ying the databas
11920 65 20 73 63 68 65 6d 61 20 66 72 6f 6d 20 0a 20  e schema from . 
11930 20 74 68 65 20 62 75 69 6c 64 2e 0a 7d 0a 0a 43   the build..}..C
11940 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53  OMPILE_OPTION {S
11950 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d  QLITE_OMIT_SCHEM
11960 41 5f 56 45 52 53 49 4f 4e 5f 50 52 41 47 4d 41  A_VERSION_PRAGMA
11970 53 7d 20 7b 0a 20 20 44 65 66 69 6e 69 6e 67 20  S} {.  Defining 
11980 74 68 69 73 20 6f 70 74 69 6f 6e 20 6f 6d 69 74  this option omit
11990 73 20 70 72 61 67 6d 61 73 20 66 6f 72 20 71 75  s pragmas for qu
119a0 65 72 79 69 6e 67 20 61 6e 64 20 6d 6f 64 69 66  erying and modif
119b0 79 69 6e 67 20 74 68 65 20 0a 20 20 64 61 74 61  ying the .  data
119c0 62 61 73 65 20 73 63 68 65 6d 61 20 76 65 72 73  base schema vers
119d0 69 6f 6e 20 61 6e 64 20 75 73 65 72 20 76 65 72  ion and user ver
119e0 73 69 6f 6e 20 66 72 6f 6d 20 74 68 65 20 62 75  sion from the bu
119f0 69 6c 64 2e 20 53 70 65 63 69 66 69 63 61 6c 6c  ild. Specificall
11a00 79 2c 20 74 68 65 20 0a 20 20 5b 73 63 68 65 6d  y, the .  [schem
11a10 61 5f 76 65 72 73 69 6f 6e 5d 20 61 6e 64 20 5b  a_version] and [
11a20 75 73 65 72 5f 76 65 72 73 69 6f 6e 5d 20 50 52  user_version] PR
11a30 41 47 4d 41 73 20 61 72 65 20 6f 6d 69 74 74 65  AGMAs are omitte
11a40 64 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50  d..}..COMPILE_OP
11a50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d 49  TION {SQLITE_OMI
11a60 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45 7d 20  T_SHARED_CACHE} 
11a70 7b 0a 20 20 54 68 69 73 20 6f 70 74 69 6f 6e 20  {.  This option 
11a80 62 75 69 6c 64 73 20 53 51 4c 69 74 65 20 77 69  builds SQLite wi
11a90 74 68 6f 75 74 20 73 75 70 70 6f 72 74 20 66 6f  thout support fo
11aa0 72 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d  r shared-cache m
11ab0 6f 64 65 2e 0a 20 20 54 68 65 20 5b 73 71 6c 69  ode..  The [sqli
11ac0 74 65 33 5f 65 6e 61 62 6c 65 5f 73 68 61 72 65  te3_enable_share
11ad0 64 5f 63 61 63 68 65 28 29 5d 20 69 73 20 6f 6d  d_cache()] is om
11ae0 69 74 74 65 64 20 61 6c 6f 6e 67 20 77 69 74 68  itted along with
11af0 20 61 20 66 61 69 72 0a 20 20 61 6d 6f 75 6e 74   a fair.  amount
11b00 20 6f 66 20 6c 6f 67 69 63 20 77 69 74 68 69 6e   of logic within
11b10 20 74 68 65 20 42 2d 54 72 65 65 20 73 75 62 73   the B-Tree subs
11b20 79 73 74 65 6d 20 61 73 73 6f 63 69 61 74 65 64  ystem associated
11b30 20 77 69 74 68 20 73 68 61 72 65 64 0a 20 20 63   with shared.  c
11b40 61 63 68 65 20 6d 61 6e 61 67 65 6d 65 6e 74 2e  ache management.
11b50 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49  .}..COMPILE_OPTI
11b60 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ON {SQLITE_OMIT_
11b70 53 55 42 51 55 45 52 59 7d 20 7b 0a 20 20 49 66  SUBQUERY} {.  If
11b80 20 64 65 66 69 6e 65 64 2c 20 73 75 70 70 6f 72   defined, suppor
11b90 74 20 66 6f 72 20 73 75 62 2d 73 65 6c 65 63 74  t for sub-select
11ba0 73 20 61 6e 64 20 74 68 65 20 49 4e 28 29 20 6f  s and the IN() o
11bb0 70 65 72 61 74 6f 72 20 61 72 65 20 6f 6d 69 74  perator are omit
11bc0 74 65 64 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f  ted..}..COMPILE_
11bd0 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f  OPTION {SQLITE_O
11be0 4d 49 54 5f 54 43 4c 5f 56 41 52 49 41 42 4c 45  MIT_TCL_VARIABLE
11bf0 7d 20 7b 0a 20 20 49 66 20 74 68 69 73 20 6d 61  } {.  If this ma
11c00 63 72 6f 20 69 73 20 64 65 66 69 6e 65 64 2c 20  cro is defined, 
11c10 74 68 65 6e 20 74 68 65 20 73 70 65 63 69 61 6c  then the special
11c20 20 22 24 3c 76 61 72 69 61 62 6c 65 2d 6e 61 6d   "$<variable-nam
11c30 65 3e 22 20 73 79 6e 74 61 78 0a 20 20 75 73 65  e>" syntax.  use
11c40 64 20 74 6f 20 61 75 74 6f 6d 61 74 69 63 61 6c  d to automatical
11c50 6c 79 20 62 69 6e 64 20 53 51 4c 20 76 61 72 69  ly bind SQL vari
11c60 61 62 6c 65 73 20 74 6f 20 54 43 4c 20 76 61 72  ables to TCL var
11c70 69 61 62 6c 65 73 20 69 73 20 6f 6d 69 74 74 65  iables is omitte
11c80 64 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50  d..}..COMPILE_OP
11c90 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d 49  TION {SQLITE_OMI
11ca0 54 5f 54 45 4d 50 44 42 7d 20 7b 0a 20 20 54 68  T_TEMPDB} {.  Th
11cb0 69 73 20 6f 70 74 69 6f 6e 20 6f 6d 69 74 73 20  is option omits 
11cc0 73 75 70 70 6f 72 74 20 66 6f 72 20 54 45 4d 50  support for TEMP
11cd0 20 6f 72 20 54 45 4d 50 4f 52 41 52 59 20 74 61   or TEMPORARY ta
11ce0 62 6c 65 73 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45  bles..}..COMPILE
11cf0 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f  _OPTION {SQLITE_
11d00 4f 4d 49 54 5f 54 52 41 43 45 7d 20 7b 0a 20 20  OMIT_TRACE} {.  
11d10 54 68 69 73 20 6f 70 74 69 6f 6e 20 6f 6d 69 74  This option omit
11d20 73 20 73 75 70 70 6f 72 74 20 66 6f 72 20 74 68  s support for th
11d30 65 20 5b 73 71 6c 69 74 65 33 5f 70 72 6f 66 69  e [sqlite3_profi
11d40 6c 65 28 29 5d 20 61 6e 64 0a 20 20 5b 73 71 6c  le()] and.  [sql
11d50 69 74 65 33 5f 74 72 61 63 65 28 29 5d 20 69 6e  ite3_trace()] in
11d60 74 65 72 66 61 63 65 73 20 61 6e 64 20 74 68 65  terfaces and the
11d70 69 72 20 61 73 73 6f 63 69 61 74 65 64 20 6c 6f  ir associated lo
11d80 67 69 63 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f  gic..}..COMPILE_
11d90 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f  OPTION {SQLITE_O
11da0 4d 49 54 5f 54 52 49 47 47 45 52 7d 20 7b 0a 20  MIT_TRIGGER} {. 
11db0 20 44 65 66 69 6e 69 6e 67 20 74 68 69 73 20 6f   Defining this o
11dc0 70 74 69 6f 6e 20 6f 6d 69 74 73 20 73 75 70 70  ption omits supp
11dd0 6f 72 74 20 66 6f 72 20 54 52 49 47 47 45 52 20  ort for TRIGGER 
11de0 6f 62 6a 65 63 74 73 2e 20 4e 65 69 74 68 65 72  objects. Neither
11df0 20 74 68 65 20 0a 20 20 5b 43 52 45 41 54 45 20   the .  [CREATE 
11e00 54 52 49 47 47 45 52 5d 20 6f 72 20 5b 44 52 4f  TRIGGER] or [DRO
11e10 50 20 54 52 49 47 47 45 52 5d 0a 20 20 63 6f 6d  P TRIGGER].  com
11e20 6d 61 6e 64 73 20 61 72 65 20 61 76 61 69 6c 61  mands are availa
11e30 62 6c 65 20 69 6e 20 74 68 69 73 20 63 61 73 65  ble in this case
11e40 2c 20 61 6e 64 20 61 74 74 65 6d 70 74 69 6e 67  , and attempting
11e50 20 74 6f 20 65 78 65 63 75 74 65 0a 20 20 65 69   to execute.  ei
11e60 74 68 65 72 20 77 69 6c 6c 20 72 65 73 75 6c 74  ther will result
11e70 20 69 6e 20 61 20 70 61 72 73 65 20 65 72 72 6f   in a parse erro
11e80 72 2e 0a 20 20 54 68 69 73 20 6f 70 74 69 6f 6e  r..  This option
11e90 20 61 6c 73 6f 20 64 69 73 61 62 6c 65 73 20 65   also disables e
11ea0 6e 66 6f 72 63 65 6d 65 6e 74 20 6f 66 20 5b 66  nforcement of [f
11eb0 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74  oreign key const
11ec0 72 61 69 6e 74 73 5d 2c 0a 20 20 73 69 6e 63 65  raints],.  since
11ed0 20 74 68 65 20 63 6f 64 65 20 74 68 61 74 20 69   the code that i
11ee0 6d 70 6c 65 6d 65 6e 74 73 20 74 72 69 67 67 65  mplements trigge
11ef0 72 73 20 61 6e 64 20 77 68 69 63 68 20 69 73 20  rs and which is 
11f00 6f 6d 69 74 74 65 64 20 62 79 20 74 68 69 73 0a  omitted by this.
11f10 20 20 6f 70 74 69 6f 6e 20 69 73 20 61 6c 73 6f    option is also
11f20 20 75 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65   used to impleme
11f30 6e 74 20 5b 66 6f 72 65 69 67 6e 20 6b 65 79 20  nt [foreign key 
11f40 61 63 74 69 6f 6e 73 5d 2e 0a 7d 0a 0a 43 4f 4d  actions]..}..COM
11f50 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c  PILE_OPTION {SQL
11f60 49 54 45 5f 4f 4d 49 54 5f 54 52 55 4e 43 41 54  ITE_OMIT_TRUNCAT
11f70 45 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 7d 20  E_OPTIMIZATION} 
11f80 7b 0a 20 20 41 20 64 65 66 61 75 6c 74 20 62 75  {.  A default bu
11f90 69 6c 64 20 6f 66 20 53 51 4c 69 74 65 2c 20 69  ild of SQLite, i
11fa0 66 20 61 20 5b 44 45 4c 45 54 45 5d 20 73 74 61  f a [DELETE] sta
11fb0 74 65 6d 65 6e 74 20 68 61 73 20 6e 6f 20 57 48  tement has no WH
11fc0 45 52 45 20 63 6c 61 75 73 65 0a 20 20 61 6e 64  ERE clause.  and
11fd0 20 6f 70 65 72 61 74 65 73 20 6f 6e 20 61 20 74   operates on a t
11fe0 61 62 6c 65 20 77 69 74 68 20 6e 6f 20 74 72 69  able with no tri
11ff0 67 67 65 72 73 2c 20 61 6e 20 6f 70 74 69 6d 69  ggers, an optimi
12000 7a 61 74 69 6f 6e 20 6f 63 63 75 72 73 20 74 68  zation occurs th
12010 61 74 0a 20 20 63 61 75 73 65 73 20 74 68 65 20  at.  causes the 
12020 44 45 4c 45 54 45 20 74 6f 20 6f 63 63 75 72 20  DELETE to occur 
12030 62 79 20 64 72 6f 70 70 69 6e 67 20 61 6e 64 20  by dropping and 
12040 72 65 63 72 65 61 74 69 6e 67 20 74 68 65 20 74  recreating the t
12050 61 62 6c 65 2e 20 20 0a 20 20 44 72 6f 70 70 69  able.  .  Droppi
12060 6e 67 20 61 6e 64 20 72 65 63 72 65 61 74 69 6e  ng and recreatin
12070 67 20 61 20 74 61 62 6c 65 20 69 73 20 75 73 75  g a table is usu
12080 61 6c 6c 79 20 6d 75 63 68 20 66 61 73 74 65 72  ally much faster
12090 20 74 68 61 6e 20 64 65 6c 65 74 69 6e 67 0a 20   than deleting. 
120a0 20 74 68 65 20 74 61 62 6c 65 20 63 6f 6e 74 65   the table conte
120b0 6e 74 20 72 6f 77 20 62 79 20 72 6f 77 2e 20 20  nt row by row.  
120c0 54 68 69 73 20 69 73 20 74 68 65 20 22 74 72 75  This is the "tru
120d0 6e 63 61 74 65 20 6f 70 74 69 6d 69 7a 61 74 69  ncate optimizati
120e0 6f 6e 22 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f  on"..}..COMPILE_
120f0 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f  OPTION {SQLITE_O
12100 4d 49 54 5f 55 54 46 31 36 7d 20 7b 0a 20 20 54  MIT_UTF16} {.  T
12110 68 69 73 20 6d 61 63 72 6f 20 69 73 20 75 73 65  his macro is use
12120 64 20 74 6f 20 6f 6d 69 74 20 73 75 70 70 6f 72  d to omit suppor
12130 74 20 66 6f 72 20 55 54 46 31 36 20 74 65 78 74  t for UTF16 text
12140 20 65 6e 63 6f 64 69 6e 67 2e 20 57 68 65 6e 20   encoding. When 
12150 74 68 69 73 20 69 73 0a 20 20 64 65 66 69 6e 65  this is.  define
12160 64 20 61 6c 6c 20 41 50 49 20 66 75 6e 63 74 69  d all API functi
12170 6f 6e 73 20 74 68 61 74 20 72 65 74 75 72 6e 20  ons that return 
12180 6f 72 20 61 63 63 65 70 74 20 55 54 46 31 36 20  or accept UTF16 
12190 65 6e 63 6f 64 65 64 20 74 65 78 74 20 61 72 65  encoded text are
121a0 0a 20 20 75 6e 61 76 61 69 6c 61 62 6c 65 2e 20  .  unavailable. 
121b0 54 68 65 73 65 20 66 75 6e 63 74 69 6f 6e 73 20  These functions 
121c0 63 61 6e 20 62 65 20 69 64 65 6e 74 69 66 69 65  can be identifie
121d0 64 20 62 79 20 74 68 65 20 66 61 63 74 20 74 68  d by the fact th
121e0 61 74 20 74 68 65 79 20 65 6e 64 0a 20 20 77 69  at they end.  wi
121f0 74 68 20 27 31 36 27 2c 20 66 6f 72 20 65 78 61  th '16', for exa
12200 6d 70 6c 65 20 5b 73 71 6c 69 74 65 33 5f 70 72  mple [sqlite3_pr
12210 65 70 61 72 65 31 36 28 29 5d 2c 20 5b 73 71 6c  epare16()], [sql
12220 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74  ite3_column_text
12230 31 36 28 29 5d 20 61 6e 64 0a 20 20 5b 73 71 6c  16()] and.  [sql
12240 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 31 36  ite3_bind_text16
12250 28 29 5d 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f  ()]..}..COMPILE_
12260 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f  OPTION {SQLITE_O
12270 4d 49 54 5f 56 41 43 55 55 4d 7d 20 7b 0a 20 20  MIT_VACUUM} {.  
12280 57 68 65 6e 20 74 68 69 73 20 6f 70 74 69 6f 6e  When this option
12290 20 69 73 20 64 65 66 69 6e 65 64 2c 20 74 68 65   is defined, the
122a0 20 5b 56 41 43 55 55 4d 5d 0a 20 20 63 6f 6d 6d   [VACUUM].  comm
122b0 61 6e 64 20 69 73 20 6e 6f 74 20 69 6e 63 6c 75  and is not inclu
122c0 64 65 64 20 69 6e 20 74 68 65 20 6c 69 62 72 61  ded in the libra
122d0 72 79 2e 0a 20 20 45 78 65 63 75 74 69 6e 67 20  ry..  Executing 
122e0 61 20 5b 56 41 43 55 55 4d 5d 20 73 74 61 74 65  a [VACUUM] state
122f0 6d 65 6e 74 20 63 61 75 73 65 73 20 0a 20 20 61  ment causes .  a
12300 20 70 61 72 73 65 20 65 72 72 6f 72 2e 0a 7d 0a   parse error..}.
12310 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20  .COMPILE_OPTION 
12320 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45  {SQLITE_OMIT_VIE
12330 57 7d 20 7b 0a 20 20 44 65 66 69 6e 69 6e 67 20  W} {.  Defining 
12340 74 68 69 73 20 6f 70 74 69 6f 6e 20 6f 6d 69 74  this option omit
12350 73 20 73 75 70 70 6f 72 74 20 66 6f 72 20 56 49  s support for VI
12360 45 57 20 6f 62 6a 65 63 74 73 2e 20 4e 65 69 74  EW objects. Neit
12370 68 65 72 20 74 68 65 20 0a 20 20 5b 43 52 45 41  her the .  [CREA
12380 54 45 20 56 49 45 57 5d 20 6e 6f 72 20 74 68 65  TE VIEW] nor the
12390 20 5b 44 52 4f 50 20 56 49 45 57 5d 0a 20 20 63   [DROP VIEW].  c
123a0 6f 6d 6d 61 6e 64 73 20 61 72 65 20 61 76 61 69  ommands are avai
123b0 6c 61 62 6c 65 20 69 6e 20 74 68 69 73 20 63 61  lable in this ca
123c0 73 65 2c 20 61 6e 64 0a 20 20 61 74 74 65 6d 70  se, and.  attemp
123d0 74 69 6e 67 20 74 6f 20 65 78 65 63 75 74 65 20  ting to execute 
123e0 65 69 74 68 65 72 20 77 69 6c 6c 20 72 65 73 75  either will resu
123f0 6c 74 20 69 6e 20 61 20 70 61 72 73 65 20 65 72  lt in a parse er
12400 72 6f 72 2e 0a 0a 20 20 57 41 52 4e 49 4e 47 3a  ror...  WARNING:
12410 20 49 66 20 74 68 69 73 20 6d 61 63 72 6f 20 69   If this macro i
12420 73 20 64 65 66 69 6e 65 64 2c 20 69 74 20 77 69  s defined, it wi
12430 6c 6c 20 6e 6f 74 20 62 65 20 70 6f 73 73 69 62  ll not be possib
12440 6c 65 20 74 6f 20 6f 70 65 6e 20 61 20 64 61 74  le to open a dat
12450 61 62 61 73 65 0a 20 20 66 6f 72 20 77 68 69 63  abase.  for whic
12460 68 20 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6e  h the schema con
12470 74 61 69 6e 73 20 56 49 45 57 20 6f 62 6a 65 63  tains VIEW objec
12480 74 73 2e 20 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f  ts. .}..COMPILE_
12490 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f  OPTION {SQLITE_O
124a0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
124b0 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70 74 69 6f  } {.  This optio
124c0 6e 20 6f 6d 69 74 73 20 73 75 70 70 6f 72 74 20  n omits support 
124d0 66 6f 72 20 74 68 65 20 5b 73 71 6c 69 74 65 33  for the [sqlite3
124e0 5f 76 74 61 62 20 7c 20 56 69 72 74 75 61 6c 20  _vtab | Virtual 
124f0 54 61 62 6c 65 5d 0a 20 20 6d 65 63 68 61 6e 69  Table].  mechani
12500 73 6d 20 69 6e 20 53 51 4c 69 74 65 2e 0a 7d 0a  sm in SQLite..}.
12510 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20  .COMPILE_OPTION 
12520 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c  {SQLITE_OMIT_WAL
12530 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70 74 69 6f  } {.  This optio
12540 6e 20 6f 6d 69 74 73 20 74 68 65 20 22 5b 77 72  n omits the "[wr
12550 69 74 65 2d 61 68 65 61 64 20 6c 6f 67 5d 22 20  ite-ahead log]" 
12560 28 61 2e 6b 2e 61 2e 20 22 5b 57 41 4c 5d 22 29  (a.k.a. "[WAL]")
12570 20 63 61 70 61 62 69 6c 69 74 79 2e 0a 7d 0a 0a   capability..}..
12580 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b  COMPILE_OPTION {
12590 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 7d  SQLITE_OMIT_WSD}
125a0 20 7b 0a 20 20 54 68 69 73 20 6f 70 74 69 6f 6e   {.  This option
125b0 20 62 75 69 6c 64 73 20 61 20 76 65 72 73 69 6f   builds a versio
125c0 6e 20 6f 66 20 74 68 65 20 53 51 4c 69 74 65 20  n of the SQLite 
125d0 6c 69 62 72 61 72 79 20 74 68 61 74 20 63 6f 6e  library that con
125e0 74 61 69 6e 73 20 6e 6f 0a 20 20 57 72 69 74 61  tains no.  Writa
125f0 62 6c 65 20 53 74 61 74 69 63 20 44 61 74 61 20  ble Static Data 
12600 28 57 53 44 29 2e 20 20 57 53 44 20 69 73 20 67  (WSD).  WSD is g
12610 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 73 20  lobal variables 
12620 61 6e 64 2f 6f 72 20 73 74 61 74 69 63 0a 20 20  and/or static.  
12630 76 61 72 69 61 62 6c 65 73 2e 20 20 53 6f 6d 65  variables.  Some
12640 20 70 6c 61 74 66 6f 72 6d 73 20 64 6f 20 6e 6f   platforms do no
12650 74 20 73 75 70 70 6f 72 74 20 57 53 44 2c 20 61  t support WSD, a
12660 6e 64 20 74 68 69 73 20 6f 70 74 69 6f 6e 20 69  nd this option i
12670 73 20 6e 65 63 65 73 73 61 72 79 0a 20 20 69 6e  s necessary.  in
12680 20 6f 72 64 65 72 20 66 6f 72 20 53 51 4c 69 74   order for SQLit
12690 65 20 74 6f 20 77 6f 72 6b 20 74 68 6f 73 65 20  e to work those 
126a0 70 6c 61 74 66 6f 72 6d 73 2e 20 20 0a 0a 20 20  platforms.  ..  
126b0 55 6e 6c 69 6b 65 20 6f 74 68 65 72 20 4f 4d 49  Unlike other OMI
126c0 54 20 6f 70 74 69 6f 6e 73 20 77 68 69 63 68 20  T options which 
126d0 6d 61 6b 65 20 74 68 65 20 53 51 4c 69 74 65 20  make the SQLite 
126e0 6c 69 62 72 61 72 79 20 73 6d 61 6c 6c 65 72 2c  library smaller,
126f0 0a 20 20 74 68 69 73 20 6f 70 74 69 6f 6e 20 61  .  this option a
12700 63 74 75 61 6c 6c 79 20 69 6e 63 72 65 61 73 65  ctually increase
12710 73 20 74 68 65 20 73 69 7a 65 20 6f 66 20 53 51  s the size of SQ
12720 4c 69 74 65 20 61 6e 64 20 6d 61 6b 65 73 20 69  Lite and makes i
12730 74 20 72 75 6e 0a 20 20 61 20 6c 69 74 74 6c 65  t run.  a little
12740 20 73 6c 6f 77 65 72 2e 20 20 4f 6e 6c 79 20 75   slower.  Only u
12750 73 65 20 74 68 69 73 20 6f 70 74 69 6f 6e 20 69  se this option i
12760 66 20 53 51 4c 69 74 65 20 69 73 20 62 65 69 6e  f SQLite is bein
12770 67 20 62 75 69 6c 74 20 66 6f 72 20 61 6e 0a 20  g built for an. 
12780 20 65 6d 62 65 64 64 65 64 20 74 61 72 67 65 74   embedded target
12790 20 74 68 61 74 20 64 6f 65 73 20 6e 6f 74 20 73   that does not s
127a0 75 70 70 6f 72 74 20 57 53 44 2e 0a 7d 0a 0a 43  upport WSD..}..C
127b0 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53  OMPILE_OPTION {S
127c0 51 4c 49 54 45 5f 4f 4d 49 54 5f 58 46 45 52 5f  QLITE_OMIT_XFER_
127d0 4f 50 54 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70  OPT} {.  This op
127e0 74 69 6f 6e 20 6f 6d 69 74 73 20 73 75 70 70 6f  tion omits suppo
127f0 72 74 20 66 6f 72 20 6f 70 74 69 6d 69 7a 61 74  rt for optimizat
12800 69 6f 6e 73 20 74 68 61 74 20 68 65 6c 70 20 73  ions that help s
12810 74 61 74 65 6d 65 6e 74 73 0a 20 20 6f 66 20 74  tatements.  of t
12820 68 65 20 66 6f 72 6d 20 22 49 4e 53 45 52 54 20  he form "INSERT 
12830 49 4e 54 4f 20 2e 2e 2e 20 53 45 4c 45 43 54 20  INTO ... SELECT 
12840 2e 2e 2e 22 20 72 75 6e 20 66 61 73 74 65 72 2e  ..." run faster.
12850 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49  .}..COMPILE_OPTI
12860 4f 4e 20 7b 53 51 4c 49 54 45 5f 55 4e 54 45 53  ON {SQLITE_UNTES
12870 54 41 42 4c 45 7d 20 7b 0a 20 20 41 20 73 74 61  TABLE} {.  A sta
12880 6e 64 61 72 64 20 53 51 4c 69 74 65 20 62 75 69  ndard SQLite bui
12890 6c 64 20 69 6e 63 6c 75 64 65 73 20 61 20 73 6d  ld includes a sm
128a0 61 6c 6c 20 61 6d 6f 75 6e 74 20 6f 66 20 6c 6f  all amount of lo
128b0 67 69 63 20 61 73 73 6f 63 69 61 74 65 64 0a 20  gic associated. 
128c0 20 77 69 74 68 20 5b 73 71 6c 69 74 65 33 5f 74   with [sqlite3_t
128d0 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 29 5d 20 74  est_control()] t
128e0 6f 20 65 78 65 72 63 69 73 65 0a 20 20 70 61 72  o exercise.  par
128f0 74 73 20 6f 66 20 74 68 65 20 53 51 4c 69 74 65  ts of the SQLite
12900 20 63 6f 72 65 20 74 68 61 74 20 61 72 65 20 6f   core that are o
12910 74 68 65 72 77 69 73 65 20 64 69 66 66 69 63 75  therwise difficu
12920 6c 74 20 74 6f 20 76 61 6c 69 64 61 74 65 2e 0a  lt to validate..
12930 20 20 54 68 69 73 20 63 6f 6d 70 69 6c 65 2d 74    This compile-t
12940 69 6d 65 20 6f 70 74 69 6f 6e 20 6f 6d 69 74 73  ime option omits
12950 20 74 68 61 74 20 65 78 74 72 61 20 74 65 73 74   that extra test
12960 69 6e 67 20 6c 6f 67 69 63 2e 20 20 54 68 69 73  ing logic.  This
12970 0a 20 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  .  compile-time 
12980 6f 70 74 69 6f 6e 20 77 61 73 20 63 61 6c 6c 65  option was calle
12990 64 20 22 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42  d "SQLITE_OMIT_B
129a0 55 49 4c 54 49 4e 5f 54 45 53 54 22 20 70 72 69  UILTIN_TEST" pri
129b0 6f 72 0a 20 20 74 6f 20 53 51 4c 69 74 65 20 76  or.  to SQLite v
129c0 65 72 73 69 6f 6e 20 33 2e 31 36 2e 30 20 28 5b  ersion 3.16.0 ([
129d0 64 61 74 65 6f 66 3a 33 2e 31 36 2e 30 5d 29 2e  dateof:3.16.0]).
129e0 20 20 54 68 65 20 6e 61 6d 65 20 77 61 73 20 63    The name was c
129f0 68 61 6e 67 65 64 0a 20 20 74 6f 20 62 65 74 74  hanged.  to bett
12a00 65 72 20 64 65 73 63 72 69 62 65 20 74 68 65 20  er describe the 
12a10 69 6d 70 6c 69 63 61 74 69 6f 6e 73 20 6f 66 20  implications of 
12a20 75 73 69 6e 67 20 69 74 2e 0a 20 20 3c 70 3e 0a  using it..  <p>.
12a30 20 20 53 65 74 74 69 6e 67 20 74 68 69 73 20 63    Setting this c
12a40 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69  ompile-time opti
12a50 6f 6e 20 70 72 65 76 65 6e 74 73 20 53 51 4c 69  on prevents SQLi
12a60 74 65 20 66 72 6f 6d 20 62 65 69 6e 67 20 66 75  te from being fu
12a70 6c 6c 79 0a 20 20 74 65 73 74 61 62 6c 65 2e 20  lly.  testable. 
12a80 20 42 72 61 6e 63 68 20 74 65 73 74 20 63 6f 76   Branch test cov
12a90 65 72 61 67 65 20 64 72 6f 70 73 20 66 72 6f 6d  erage drops from
12aa0 20 31 30 30 25 20 64 6f 77 6e 20 74 6f 20 61 62   100% down to ab
12ab0 6f 75 74 20 39 35 25 2e 0a 20 20 3c 70 3e 0a 20  out 95%..  <p>. 
12ac0 20 53 51 4c 69 74 65 20 64 65 76 65 6c 6f 70 65   SQLite develope
12ad0 72 73 20 66 6f 6c 6c 6f 77 20 74 68 65 20 4e 41  rs follow the NA
12ae0 53 41 20 70 72 69 6e 63 69 70 6c 65 20 6f 66 0a  SA principle of.
12af0 20 20 22 66 6c 79 20 77 68 61 74 20 79 6f 75 20    "fly what you 
12b00 74 65 73 74 20 61 6e 64 20 74 65 73 74 20 77 68  test and test wh
12b10 61 74 20 79 6f 75 20 66 6c 79 22 2e 20 20 54 68  at you fly".  Th
12b20 69 73 20 70 72 69 6e 63 69 70 6c 65 20 69 73 20  is principle is 
12b30 76 69 6f 6c 61 74 65 64 0a 20 20 69 66 20 74 68  violated.  if th
12b40 69 73 20 6f 70 74 69 6f 6e 20 69 73 20 65 6e 61  is option is ena
12b50 62 6c 65 64 20 66 6f 72 20 64 65 6c 69 76 65 72  bled for deliver
12b60 79 20 62 75 74 20 64 69 73 61 62 6c 65 64 20 66  y but disabled f
12b70 6f 72 20 74 65 73 74 69 6e 67 2e 0a 20 20 42 75  or testing..  Bu
12b80 74 20 69 66 20 74 68 69 73 20 6f 70 74 69 6f 6e  t if this option
12b90 20 69 73 20 65 6e 61 62 6c 65 64 20 64 75 72 69   is enabled duri
12ba0 6e 67 20 74 65 73 74 69 6e 67 2c 20 6e 6f 74 20  ng testing, not 
12bb0 61 6c 6c 20 62 72 61 6e 63 68 65 73 20 61 72 65  all branches are
12bc0 20 0a 20 20 72 65 61 63 68 61 62 6c 65 2e 20 20   .  reachable.  
12bd0 54 68 65 72 65 66 6f 72 65 2c 20 74 68 65 20 75  Therefore, the u
12be0 73 65 20 6f 66 20 74 68 69 73 20 63 6f 6d 70 69  se of this compi
12bf0 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69  le-time option i
12c00 73 20 64 69 73 63 6f 75 72 61 67 65 64 2e 0a 7d  s discouraged..}
12c10 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e  ..COMPILE_OPTION
12c20 20 7b 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41   {SQLITE_ZERO_MA
12c30 4c 4c 4f 43 7d 20 7b 0a 20 20 54 68 69 73 20 6f  LLOC} {.  This o
12c40 70 74 69 6f 6e 20 6f 6d 69 74 73 20 62 6f 74 68  ption omits both
12c50 20 74 68 65 20 5b 64 65 66 61 75 6c 74 20 6d 65   the [default me
12c60 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 6f 72 5d 20  mory allocator] 
12c70 61 6e 64 20 74 68 65 0a 20 20 5b 64 65 62 75 67  and the.  [debug
12c80 67 69 6e 67 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  ging memory allo
12c90 63 61 74 6f 72 5d 20 66 72 6f 6d 20 74 68 65 20  cator] from the 
12ca0 62 75 69 6c 64 20 61 6e 64 20 73 75 62 73 74 69  build and substi
12cb0 74 75 74 65 73 20 61 20 73 74 75 62 0a 20 20 6d  tutes a stub.  m
12cc0 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 6f 72 20  emory allocator 
12cd0 74 68 61 74 20 61 6c 77 61 79 73 20 66 61 69 6c  that always fail
12ce0 73 2e 20 20 53 51 4c 69 74 65 20 77 69 6c 6c 20  s.  SQLite will 
12cf0 6e 6f 74 20 72 75 6e 20 77 69 74 68 20 74 68 69  not run with thi
12d00 73 0a 20 20 73 74 75 62 20 6d 65 6d 6f 72 79 20  s.  stub memory 
12d10 61 6c 6c 6f 63 61 74 6f 72 20 73 69 6e 63 65 20  allocator since 
12d20 69 74 20 77 69 6c 6c 20 62 65 20 75 6e 61 62 6c  it will be unabl
12d30 65 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20 6d 65  e to allocate me
12d40 6d 6f 72 79 2e 20 20 42 75 74 0a 20 20 74 68 69  mory.  But.  thi
12d50 73 20 73 74 75 62 20 63 61 6e 20 62 65 20 72 65  s stub can be re
12d60 70 6c 61 63 65 64 20 61 74 20 73 74 61 72 74 2d  placed at start-
12d70 74 69 6d 65 20 75 73 69 6e 67 0a 20 20 5b 73 71  time using.  [sq
12d80 6c 69 74 65 33 5f 63 6f 6e 66 69 67 5d 28 5b 53  lite3_config]([S
12d90 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4d 41 4c  QLITE_CONFIG_MAL
12da0 4c 4f 43 5d 2c 2e 2e 2e 29 20 6f 72 0a 20 20 5b  LOC],...) or.  [
12db0 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 5d 28  sqlite3_config](
12dc0 5b 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 48  [SQLITE_CONFIG_H
12dd0 45 41 50 5d 2c 2e 2e 2e 29 2e 0a 20 20 53 6f 20  EAP],...)..  So 
12de0 74 68 65 20 6e 65 74 20 65 66 66 65 63 74 20 6f  the net effect o
12df0 66 20 74 68 69 73 20 63 6f 6d 70 69 6c 65 2d 74  f this compile-t
12e00 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20 74 68  ime option is th
12e10 61 74 20 69 74 20 61 6c 6c 6f 77 73 20 53 51 4c  at it allows SQL
12e20 69 74 65 0a 20 20 74 6f 20 62 65 20 63 6f 6d 70  ite.  to be comp
12e30 69 6c 65 64 20 61 6e 64 20 6c 69 6e 6b 65 64 20  iled and linked 
12e40 61 67 61 69 6e 73 74 20 61 20 73 79 73 74 65 6d  against a system
12e50 20 6c 69 62 72 61 72 79 20 74 68 61 74 20 64 6f   library that do
12e60 65 73 20 6e 6f 74 20 73 75 70 70 6f 72 74 0a 20  es not support. 
12e70 20 6d 61 6c 6c 6f 63 28 29 2c 20 66 72 65 65 28   malloc(), free(
12e80 29 2c 20 61 6e 64 2f 6f 72 20 72 65 61 6c 6c 6f  ), and/or reallo
12e90 63 28 29 2e 0a 7d 0a 0a 3c 2f 74 63 6c 3e 0a 3c  c()..}..</tcl>.<
12ea0 61 20 6e 61 6d 65 3d 22 64 65 62 75 67 6f 70 74  a name="debugopt
12eb0 69 6f 6e 73 22 3e 3c 2f 61 3e 0a 3c 68 31 3e 20  ions"></a>.<h1> 
12ec0 41 6e 61 6c 79 73 69 73 20 61 6e 64 20 44 65 62  Analysis and Deb
12ed0 75 67 67 69 6e 67 20 4f 70 74 69 6f 6e 73 3c 2f  ugging Options</
12ee0 68 31 3e 0a 3c 74 63 6c 3e 0a 0a 43 4f 4d 50 49  h1>.<tcl>..COMPI
12ef0 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54  LE_OPTION {SQLIT
12f00 45 5f 44 45 42 55 47 7d 20 7b 0a 20 20 54 68 65  E_DEBUG} {.  The
12f10 20 53 51 4c 69 74 65 20 73 6f 75 72 63 65 20 63   SQLite source c
12f20 6f 64 65 20 63 6f 6e 74 61 69 6e 73 20 6c 69 74  ode contains lit
12f30 65 72 61 6c 6c 79 20 74 68 6f 75 73 61 6e 64 73  erally thousands
12f40 20 6f 66 20 61 73 73 65 72 74 28 29 20 73 74 61   of assert() sta
12f50 74 65 6d 65 6e 74 73 0a 20 20 75 73 65 64 20 74  tements.  used t
12f60 6f 20 76 65 72 69 66 79 20 69 6e 74 65 72 6e 61  o verify interna
12f70 6c 20 61 73 73 75 6d 70 74 69 6f 6e 73 20 61 6e  l assumptions an
12f80 64 20 73 75 62 72 6f 75 74 69 6e 65 20 70 72 65  d subroutine pre
12f90 63 6f 6e 64 69 74 69 6f 6e 73 20 61 6e 64 0a 20  conditions and. 
12fa0 20 70 6f 73 74 63 6f 6e 64 69 74 69 6f 6e 73 2e   postconditions.
12fb0 20 20 54 68 65 73 65 20 61 73 73 65 72 74 28 29    These assert()
12fc0 20 73 74 61 74 65 6d 65 6e 74 73 20 61 72 65 20   statements are 
12fd0 6e 6f 72 6d 61 6c 6c 79 20 74 75 72 6e 65 64 20  normally turned 
12fe0 6f 66 66 0a 20 20 28 74 68 65 79 20 67 65 6e 65  off.  (they gene
12ff0 72 61 74 65 20 6e 6f 20 63 6f 64 65 29 20 73 69  rate no code) si
13000 6e 63 65 20 74 75 72 6e 69 6e 67 20 74 68 65 6d  nce turning them
13010 20 6f 6e 20 6d 61 6b 65 73 20 53 51 4c 69 74 65   on makes SQLite
13020 20 72 75 6e 20 61 70 70 72 6f 78 69 6d 61 74 65   run approximate
13030 6c 79 0a 20 20 74 68 72 65 65 20 74 69 6d 65 73  ly.  three times
13040 20 73 6c 6f 77 65 72 2e 20 20 42 75 74 20 66 6f   slower.  But fo
13050 72 20 74 65 73 74 69 6e 67 20 61 6e 64 20 61 6e  r testing and an
13060 61 6c 79 73 69 73 2c 20 69 74 20 69 73 20 75 73  alysis, it is us
13070 65 66 75 6c 20 74 6f 20 74 75 72 6e 0a 20 20 74  eful to turn.  t
13080 68 65 20 61 73 73 65 72 74 28 29 20 73 74 61 74  he assert() stat
13090 65 6d 65 6e 74 73 20 6f 6e 2e 20 20 54 68 65 20  ements on.  The 
130a0 53 51 4c 49 54 45 5f 44 45 42 55 47 20 63 6f 6d  SQLITE_DEBUG com
130b0 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
130c0 20 64 6f 65 73 20 74 68 69 73 2e 0a 20 20 3c 70   does this..  <p
130d0 3e 53 51 4c 49 54 45 5f 44 45 42 55 47 20 61 6c  >SQLITE_DEBUG al
130e0 73 6f 20 65 6e 61 62 6c 65 73 20 73 6f 6d 65 20  so enables some 
130f0 6f 74 68 65 72 20 64 65 62 75 67 67 69 6e 67 20  other debugging 
13100 66 65 61 74 75 72 65 73 2c 20 73 75 63 68 20 61  features, such a
13110 73 0a 20 20 73 70 65 63 69 61 6c 20 5b 50 52 41  s.  special [PRA
13120 47 4d 41 5d 20 73 74 61 74 65 6d 65 6e 74 73 20  GMA] statements 
13130 74 68 61 74 20 74 75 72 6e 20 6f 6e 20 74 72 61  that turn on tra
13140 63 69 6e 67 20 61 6e 64 20 6c 69 73 74 69 6e 67  cing and listing
13150 20 66 65 61 74 75 72 65 73 0a 20 20 75 73 65 64   features.  used
13160 20 66 6f 72 20 74 72 6f 75 62 6c 65 73 68 6f 6f   for troubleshoo
13170 74 69 6e 67 20 61 6e 64 20 61 6e 61 6c 79 73 69  ting and analysi
13180 73 20 6f 66 20 74 68 65 20 5b 56 44 42 45 5d 20  s of the [VDBE] 
13190 61 6e 64 20 63 6f 64 65 20 67 65 6e 65 72 61 74  and code generat
131a0 6f 72 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f  or..}..COMPILE_O
131b0 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 4d 45  PTION {SQLITE_ME
131c0 4d 44 45 42 55 47 7d 20 7b 0a 20 20 54 68 65 20  MDEBUG} {.  The 
131d0 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 20  SQLITE_MEMDEBUG 
131e0 6f 70 74 69 6f 6e 20 63 61 75 73 65 73 20 61 6e  option causes an
131f0 20 69 6e 73 74 72 75 6d 65 6e 74 65 64 20 0a 20   instrumented . 
13200 20 5b 64 65 62 75 67 67 69 6e 67 20 6d 65 6d 6f   [debugging memo
13210 72 79 20 61 6c 6c 6f 63 61 74 6f 72 5d 0a 20 20  ry allocator].  
13220 74 6f 20 62 65 20 75 73 65 64 20 61 73 20 74 68  to be used as th
13230 65 20 64 65 66 61 75 6c 74 20 6d 65 6d 6f 72 79  e default memory
13240 20 61 6c 6c 6f 63 61 74 6f 72 20 77 69 74 68 69   allocator withi
13250 6e 20 53 51 4c 69 74 65 2e 20 20 54 68 65 0a 20  n SQLite.  The. 
13260 20 69 6e 73 74 72 75 6d 65 6e 74 65 64 20 6d 65   instrumented me
13270 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 6f 72 20 63  mory allocator c
13280 68 65 63 6b 73 20 66 6f 72 20 6d 69 73 75 73 65  hecks for misuse
13290 20 6f 66 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20   of dynamically 
132a0 61 6c 6c 6f 63 61 74 65 64 0a 20 20 6d 65 6d 6f  allocated.  memo
132b0 72 79 2e 20 20 45 78 61 6d 70 6c 65 73 20 6f 66  ry.  Examples of
132c0 20 6d 69 73 75 73 65 20 69 6e 63 6c 75 64 65 20   misuse include 
132d0 75 73 69 6e 67 20 6d 65 6d 6f 72 79 20 61 66 74  using memory aft
132e0 65 72 20 69 74 20 69 73 20 66 72 65 65 64 2c 0a  er it is freed,.
132f0 20 20 77 72 69 74 69 6e 67 20 6f 66 66 20 74 68    writing off th
13300 65 20 65 6e 64 73 20 6f 66 20 61 20 6d 65 6d 6f  e ends of a memo
13310 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2c 20 66  ry allocation, f
13320 72 65 65 69 6e 67 20 6d 65 6d 6f 72 79 20 6e 6f  reeing memory no
13330 74 20 70 72 65 76 69 6f 75 73 6c 79 0a 20 20 6f  t previously.  o
13340 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 74 68 65  btained from the
13350 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 6f   memory allocato
13360 72 2c 20 6f 72 20 66 61 69 6c 69 6e 67 20 74 6f  r, or failing to
13370 20 69 6e 69 74 69 61 6c 69 7a 65 20 6e 65 77 6c   initialize newl
13380 79 0a 20 20 61 6c 6c 6f 63 61 74 65 64 20 6d 65  y.  allocated me
13390 6d 6f 72 79 2e 0a 7d 0a 0a 3c 2f 74 63 6c 3e 0a  mory..}..</tcl>.
133a0 3c 61 20 6e 61 6d 65 3d 22 77 69 6e 33 32 6f 70  <a name="win32op
133b0 74 69 6f 6e 73 22 3e 3c 2f 61 3e 0a 3c 68 31 3e  tions"></a>.<h1>
133c0 20 57 69 6e 64 6f 77 73 2d 53 70 65 63 69 66 69   Windows-Specifi
133d0 63 20 4f 70 74 69 6f 6e 73 3c 2f 68 31 3e 0a 3c  c Options</h1>.<
133e0 74 63 6c 3e 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50  tcl>..COMPILE_OP
133f0 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 57 49 4e  TION {SQLITE_WIN
13400 33 32 5f 48 45 41 50 5f 43 52 45 41 54 45 7d 20  32_HEAP_CREATE} 
13410 7b 0a 20 20 54 68 69 73 20 6f 70 74 69 6f 6e 20  {.  This option 
13420 66 6f 72 63 65 73 20 74 68 65 20 57 69 6e 33 32  forces the Win32
13430 20 6e 61 74 69 76 65 20 6d 65 6d 6f 72 79 20 61   native memory a
13440 6c 6c 6f 63 61 74 6f 72 2c 20 77 68 65 6e 20 65  llocator, when e
13450 6e 61 62 6c 65 64 2c 20 74 6f 0a 20 20 63 72 65  nabled, to.  cre
13460 61 74 65 20 61 20 70 72 69 76 61 74 65 20 68 65  ate a private he
13470 61 70 20 74 6f 20 68 6f 6c 64 20 61 6c 6c 20 6d  ap to hold all m
13480 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
13490 73 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50  s..}..COMPILE_OP
134a0 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 57 49 4e  TION {SQLITE_WIN
134b0 33 32 5f 4d 41 4c 4c 4f 43 5f 56 41 4c 49 44 41  32_MALLOC_VALIDA
134c0 54 45 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70 74  TE} {.  This opt
134d0 69 6f 6e 20 66 6f 72 63 65 73 20 74 68 65 20 57  ion forces the W
134e0 69 6e 33 32 20 6e 61 74 69 76 65 20 6d 65 6d 6f  in32 native memo
134f0 72 79 20 61 6c 6c 6f 63 61 74 6f 72 2c 20 77 68  ry allocator, wh
13500 65 6e 20 65 6e 61 62 6c 65 64 2c 20 74 6f 0a 20  en enabled, to. 
13510 20 6d 61 6b 65 20 73 74 72 61 74 65 67 69 63 20   make strategic 
13520 63 61 6c 6c 73 20 69 6e 74 6f 20 74 68 65 20 48  calls into the H
13530 65 61 70 56 61 6c 69 64 61 74 65 28 29 20 66 75  eapValidate() fu
13540 6e 63 74 69 6f 6e 20 69 66 20 61 73 73 65 72 74  nction if assert
13550 28 29 20 69 73 20 61 6c 73 6f 0a 20 20 65 6e 61  () is also.  ena
13560 62 6c 65 64 2e 0a 7d 0a 0a 3c 2f 74 63 6c 3e 0a  bled..}..</tcl>.
13570 3c 61 20 6e 61 6d 65 3d 22 6c 69 6e 6b 61 67 65  <a name="linkage
13580 22 3e 3c 2f 61 3e 0a 3c 68 31 3e 43 6f 6d 70 69  "></a>.<h1>Compi
13590 6c 65 72 20 4c 69 6e 6b 61 67 65 20 43 6f 6e 74  ler Linkage Cont
135a0 72 6f 6c 3c 2f 68 31 3e 0a 0a 3c 70 3e 54 68 65  rol</h1>..<p>The
135b0 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f   following macro
135c0 73 20 73 70 65 63 69 66 79 0a 69 6e 74 65 72 66  s specify.interf
135d0 61 63 65 20 6c 69 6e 6b 61 67 65 20 66 6f 72 20  ace linkage for 
135e0 63 65 72 74 61 69 6e 20 6b 69 6e 64 73 20 6f 66  certain kinds of
135f0 20 53 51 4c 69 74 65 20 62 75 69 6c 64 73 2e 20   SQLite builds. 
13600 20 54 68 65 20 4d 61 6b 65 66 69 6c 65 73 20 77   The Makefiles w
13610 69 6c 6c 20 6e 6f 72 6d 61 6c 6c 79 0a 68 61 6e  ill normally.han
13620 64 6c 65 20 73 65 74 74 69 6e 67 20 74 68 65 73  dle setting thes
13630 65 20 6d 61 63 72 6f 73 20 61 75 74 6f 6d 61 74  e macros automat
13640 69 63 61 6c 6c 79 2e 20 20 41 70 70 6c 69 63 61  ically.  Applica
13650 74 69 6f 6e 20 64 65 76 65 6c 6f 70 65 72 73 20  tion developers 
13660 73 68 6f 75 6c 64 0a 6e 6f 74 20 6e 65 65 64 20  should.not need 
13670 74 6f 20 77 6f 72 72 79 20 77 69 74 68 20 74 68  to worry with th
13680 65 73 65 20 6d 61 63 72 6f 73 2e 20 20 54 68 65  ese macros.  The
13690 20 66 6f 6c 6c 6f 77 69 6e 67 20 64 6f 63 75 6d   following docum
136a0 65 6e 74 61 74 69 6f 6e 20 61 62 6f 75 74 20 74  entation about t
136b0 68 65 73 65 20 0a 6d 61 63 72 6f 73 20 69 73 20  hese .macros is 
136c0 69 6e 63 6c 75 64 65 64 20 63 6f 6d 70 6c 65 74  included complet
136d0 65 6e 65 73 73 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c  eness.</p>..<tcl
136e0 3e 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e  >.COMPILE_OPTION
136f0 20 7b 53 51 4c 49 54 45 5f 41 50 49 7d 20 7b 0a   {SQLITE_API} {.
13700 20 20 54 68 69 73 20 6d 61 63 72 6f 20 69 64 65    This macro ide
13710 6e 74 69 66 69 65 73 20 61 20 65 78 74 65 72 6e  ntifies a extern
13720 61 6c 6c 79 20 76 69 73 69 62 6c 65 20 69 6e 74  ally visible int
13730 65 72 66 61 63 65 20 66 6f 72 20 53 51 4c 69 74  erface for SQLit
13740 65 2e 0a 20 20 54 68 69 73 20 6d 61 63 72 6f 20  e..  This macro 
13750 69 73 20 73 6f 6d 65 74 69 6d 65 73 20 73 65 74  is sometimes set
13760 20 74 6f 20 22 65 78 74 65 72 6e 22 2e 20 20 42   to "extern".  B
13770 75 74 20 74 68 65 20 64 65 66 69 6e 69 74 69 6f  ut the definitio
13780 6e 20 69 73 0a 20 20 63 6f 6d 70 69 6c 65 72 2d  n is.  compiler-
13790 73 70 65 63 69 66 69 63 2e 0a 7d 0a 0a 43 4f 4d  specific..}..COM
137a0 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c  PILE_OPTION {SQL
137b0 49 54 45 5f 41 50 49 43 41 4c 4c 7d 20 7b 0a 20  ITE_APICALL} {. 
137c0 20 54 68 69 73 20 6d 61 63 72 6f 20 69 64 65 6e   This macro iden
137d0 74 69 66 69 65 73 20 74 68 65 20 63 61 6c 6c 69  tifies the calli
137e0 6e 67 20 63 6f 6e 76 65 6e 74 69 6f 6e 20 75 73  ng convention us
137f0 65 64 20 62 79 20 70 75 62 6c 69 63 20 69 6e 74  ed by public int
13800 65 72 66 61 63 65 0a 20 20 72 6f 75 74 69 6e 65  erface.  routine
13810 73 20 69 6e 20 53 51 4c 69 74 65 2e 20 20 54 68  s in SQLite.  Th
13820 69 73 20 6d 61 63 72 6f 20 69 73 20 6e 6f 72 6d  is macro is norm
13830 61 6c 6c 79 20 64 65 66 69 6e 65 64 20 74 6f 20  ally defined to 
13840 62 65 20 6e 6f 74 68 69 6e 67 2c 0a 20 20 74 68  be nothing,.  th
13850 6f 75 67 68 20 6f 6e 20 57 69 6e 64 6f 77 73 20  ough on Windows 
13860 62 75 69 6c 64 73 20 69 74 20 63 61 6e 20 73 6f  builds it can so
13870 6d 65 74 69 6d 65 73 20 62 65 20 73 65 74 20 74  metimes be set t
13880 6f 20 22 5f 5f 63 64 65 63 6c 22 20 6f 72 20 22  o "__cdecl" or "
13890 5f 5f 73 74 64 63 61 6c 6c 22 2e 0a 20 20 54 68  __stdcall"..  Th
138a0 65 20 22 5f 5f 63 64 65 63 6c 22 20 73 65 74 74  e "__cdecl" sett
138b0 69 6e 67 20 69 73 20 74 68 65 20 64 65 66 61 75  ing is the defau
138c0 6c 74 2c 20 62 75 74 20 22 5f 5f 73 74 64 63 61  lt, but "__stdca
138d0 6c 6c 22 20 69 73 20 75 73 65 64 20 77 68 65 6e  ll" is used when
138e0 20 53 51 4c 69 74 65 0a 20 20 69 73 20 69 6e 74   SQLite.  is int
138f0 65 6e 64 65 64 20 74 6f 20 62 65 20 63 6f 6d 70  ended to be comp
13900 69 6c 65 64 20 61 73 20 61 20 57 69 6e 64 6f 77  iled as a Window
13910 73 20 73 79 73 74 65 6d 20 6c 69 62 72 61 72 79  s system library
13920 2e 0a 20 20 3c 70 3e 0a 20 20 41 20 73 69 6e 67  ..  <p>.  A sing
13930 6c 65 20 66 75 6e 63 74 69 6f 6e 20 64 65 63 6c  le function decl
13940 61 72 61 74 69 6f 6e 20 73 68 6f 75 6c 64 20 63  aration should c
13950 6f 6e 74 61 69 6e 20 6e 6f 20 6d 6f 72 65 20 74  ontain no more t
13960 68 61 6e 20 6f 6e 65 20 6f 66 0a 20 20 74 68 65  han one of.  the
13970 20 66 6f 6c 6c 6f 77 69 6e 67 3a 20 20 5b 53 51   following:  [SQ
13980 4c 49 54 45 5f 41 50 49 43 41 4c 4c 5d 2c 20 5b  LITE_APICALL], [
13990 53 51 4c 49 54 45 5f 43 41 4c 4c 42 41 43 4b 5d  SQLITE_CALLBACK]
139a0 2c 20 5b 53 51 4c 49 54 45 5f 43 44 45 43 4c 5d  , [SQLITE_CDECL]
139b0 2c 0a 20 20 6f 72 20 5b 53 51 4c 49 54 45 5f 53  ,.  or [SQLITE_S
139c0 59 53 43 41 4c 4c 5d 2e 0a 7d 0a 0a 43 4f 4d 50  YSCALL]..}..COMP
139d0 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49  ILE_OPTION {SQLI
139e0 54 45 5f 43 41 4c 4c 42 41 43 4b 7d 20 7b 0a 20  TE_CALLBACK} {. 
139f0 20 54 68 69 73 20 6d 61 63 72 6f 20 73 70 65 63   This macro spec
13a00 69 66 69 65 73 20 74 68 65 20 63 61 6c 6c 69 6e  ifies the callin
13a10 67 20 63 6f 6e 76 65 6e 74 69 6f 6e 20 75 73 65  g convention use
13a20 64 20 62 79 20 63 61 6c 6c 62 61 63 6b 20 70 6f  d by callback po
13a30 69 6e 74 65 72 73 0a 20 20 69 6e 20 53 51 4c 69  inters.  in SQLi
13a40 74 65 2e 20 20 54 68 69 73 20 6d 61 63 72 6f 20  te.  This macro 
13a50 69 73 20 6e 6f 72 6d 61 6c 6c 79 20 64 65 66 69  is normally defi
13a60 6e 65 64 20 74 6f 20 62 65 20 6e 6f 74 68 69 6e  ned to be nothin
13a70 67 2c 20 74 68 6f 75 67 68 20 6f 6e 20 57 69 6e  g, though on Win
13a80 64 6f 77 73 0a 20 20 62 75 69 6c 64 73 20 69 74  dows.  builds it
13a90 20 63 61 6e 20 73 6f 6d 65 74 69 6d 65 73 20 62   can sometimes b
13aa0 65 20 73 65 74 20 74 6f 20 22 5f 5f 63 64 65 63  e set to "__cdec
13ab0 6c 22 20 6f 72 20 22 5f 5f 73 74 64 63 61 6c 6c  l" or "__stdcall
13ac0 22 2e 20 20 54 68 65 0a 20 20 22 5f 5f 63 64 65  ".  The.  "__cde
13ad0 63 6c 22 20 73 65 74 74 69 6e 67 20 69 73 20 74  cl" setting is t
13ae0 68 65 20 64 65 66 61 75 6c 74 2c 20 62 75 74 20  he default, but 
13af0 22 5f 5f 73 74 64 63 61 6c 6c 22 20 69 73 20 75  "__stdcall" is u
13b00 73 65 64 20 77 68 65 6e 20 53 51 4c 69 74 65 0a  sed when SQLite.
13b10 20 20 69 73 20 69 6e 74 65 6e 64 65 64 20 74 6f    is intended to
13b20 20 62 65 20 63 6f 6d 70 69 6c 65 64 20 61 73 20   be compiled as 
13b30 61 20 57 69 6e 64 6f 77 73 20 73 79 73 74 65 6d  a Windows system
13b40 20 6c 69 62 72 61 72 79 2e 0a 20 20 3c 70 3e 0a   library..  <p>.
13b50 20 20 41 20 73 69 6e 67 6c 65 20 66 75 6e 63 74    A single funct
13b60 69 6f 6e 20 64 65 63 6c 61 72 61 74 69 6f 6e 20  ion declaration 
13b70 73 68 6f 75 6c 64 20 63 6f 6e 74 61 69 6e 20 6e  should contain n
13b80 6f 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20  o more than one 
13b90 6f 66 0a 20 20 74 68 65 20 66 6f 6c 6c 6f 77 69  of.  the followi
13ba0 6e 67 3a 20 20 5b 53 51 4c 49 54 45 5f 41 50 49  ng:  [SQLITE_API
13bb0 43 41 4c 4c 5d 2c 20 5b 53 51 4c 49 54 45 5f 43  CALL], [SQLITE_C
13bc0 41 4c 4c 42 41 43 4b 5d 2c 20 5b 53 51 4c 49 54  ALLBACK], [SQLIT
13bd0 45 5f 43 44 45 43 4c 5d 2c 0a 20 20 6f 72 20 5b  E_CDECL],.  or [
13be0 53 51 4c 49 54 45 5f 53 59 53 43 41 4c 4c 5d 2e  SQLITE_SYSCALL].
13bf0 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49  .}..COMPILE_OPTI
13c00 4f 4e 20 7b 53 51 4c 49 54 45 5f 43 44 45 43 4c  ON {SQLITE_CDECL
13c10 7d 20 7b 0a 20 20 54 68 69 73 20 6d 61 63 72 6f  } {.  This macro
13c20 20 73 70 65 63 69 66 69 65 73 20 74 68 65 20 63   specifies the c
13c30 61 6c 6c 69 6e 67 20 63 6f 6e 76 65 6e 74 69 6f  alling conventio
13c40 6e 20 75 73 65 64 20 62 79 20 76 61 72 61 72 67  n used by vararg
13c50 73 20 69 6e 74 65 72 66 61 63 65 0a 20 20 72 6f  s interface.  ro
13c60 75 74 69 6e 65 73 20 69 6e 20 53 51 4c 69 74 65  utines in SQLite
13c70 2e 20 20 54 68 69 73 20 6d 61 63 72 6f 20 69 73  .  This macro is
13c80 20 6e 6f 72 6d 61 6c 6c 79 20 64 65 66 69 6e 65   normally define
13c90 64 20 74 6f 20 62 65 20 6e 6f 74 68 69 6e 67 2c  d to be nothing,
13ca0 0a 20 20 74 68 6f 75 67 68 20 6f 6e 20 57 69 6e  .  though on Win
13cb0 64 6f 77 73 20 62 75 69 6c 64 73 20 69 74 20 63  dows builds it c
13cc0 61 6e 20 73 6f 6d 65 74 69 6d 65 73 20 62 65 20  an sometimes be 
13cd0 73 65 74 20 74 6f 20 22 5f 5f 63 64 65 63 6c 22  set to "__cdecl"
13ce0 2e 20 20 54 68 69 73 0a 20 20 6d 61 63 72 6f 20  .  This.  macro 
13cf0 69 73 20 75 73 65 64 20 6f 6e 20 76 61 72 61 72  is used on varar
13d00 67 73 20 72 6f 75 74 69 6e 65 73 20 61 6e 64 20  gs routines and 
13d10 73 6f 20 63 61 6e 6e 6f 74 20 62 65 20 73 65 74  so cannot be set
13d20 20 74 6f 20 22 5f 5f 73 74 64 63 61 6c 6c 22 0a   to "__stdcall".
13d30 20 20 73 69 6e 63 65 20 74 68 65 20 5f 5f 73 74    since the __st
13d40 64 63 61 6c 6c 20 63 61 6c 6c 69 6e 67 20 63 6f  dcall calling co
13d50 6e 76 65 6e 74 69 6f 6e 20 64 6f 65 73 20 6e 6f  nvention does no
13d60 74 20 73 75 70 70 6f 72 74 20 76 61 72 61 72 67  t support vararg
13d70 73 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 20 20 3c  s functions..  <
13d80 70 3e 0a 20 20 41 20 73 69 6e 67 6c 65 20 66 75  p>.  A single fu
13d90 6e 63 74 69 6f 6e 20 64 65 63 6c 61 72 61 74 69  nction declarati
13da0 6f 6e 20 73 68 6f 75 6c 64 20 63 6f 6e 74 61 69  on should contai
13db0 6e 20 6e 6f 20 6d 6f 72 65 20 74 68 61 6e 20 6f  n no more than o
13dc0 6e 65 20 6f 66 0a 20 20 74 68 65 20 66 6f 6c 6c  ne of.  the foll
13dd0 6f 77 69 6e 67 3a 20 20 5b 53 51 4c 49 54 45 5f  owing:  [SQLITE_
13de0 41 50 49 43 41 4c 4c 5d 2c 20 5b 53 51 4c 49 54  APICALL], [SQLIT
13df0 45 5f 43 41 4c 4c 42 41 43 4b 5d 2c 20 5b 53 51  E_CALLBACK], [SQ
13e00 4c 49 54 45 5f 43 44 45 43 4c 5d 2c 0a 20 20 6f  LITE_CDECL],.  o
13e10 72 20 5b 53 51 4c 49 54 45 5f 53 59 53 43 41 4c  r [SQLITE_SYSCAL
13e20 4c 5d 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f  L]..}..COMPILE_O
13e30 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 53 59  PTION {SQLITE_SY
13e40 53 43 41 4c 4c 7d 20 7b 0a 20 20 54 68 69 73 20  SCALL} {.  This 
13e50 6d 61 63 72 6f 20 69 64 65 6e 74 69 66 69 65 73  macro identifies
13e60 20 74 68 65 20 63 61 6c 6c 69 6e 67 20 63 6f 6e   the calling con
13e70 76 65 6e 74 69 6f 6e 20 75 73 65 64 20 62 79 20  vention used by 
13e80 6f 70 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d  operating system
13e90 0a 20 20 69 6e 74 65 72 66 61 63 65 73 20 66 6f  .  interfaces fo
13ea0 72 20 74 61 72 67 65 74 20 74 68 65 20 70 6c 61  r target the pla
13eb0 74 66 6f 72 6d 20 66 6f 72 20 61 6e 20 53 51 4c  tform for an SQL
13ec0 69 74 65 20 62 75 69 6c 64 2e 0a 20 20 54 68 69  ite build..  Thi
13ed0 73 20 6d 61 63 72 6f 20 69 73 20 6e 6f 72 6d 61  s macro is norma
13ee0 6c 6c 79 20 64 65 66 69 6e 65 64 20 74 6f 20 62  lly defined to b
13ef0 65 20 6e 6f 74 68 69 6e 67 2c 20 74 68 6f 75 67  e nothing, thoug
13f00 68 20 6f 6e 20 57 69 6e 64 6f 77 73 0a 20 20 62  h on Windows.  b
13f10 75 69 6c 64 73 20 69 74 20 63 61 6e 20 73 6f 6d  uilds it can som
13f20 65 74 69 6d 65 73 20 62 65 20 73 65 74 20 74 6f  etimes be set to
13f30 20 22 5f 5f 73 74 64 63 61 6c 6c 22 2e 0a 20 20   "__stdcall"..  
13f40 3c 70 3e 0a 20 20 41 20 73 69 6e 67 6c 65 20 66  <p>.  A single f
13f50 75 6e 63 74 69 6f 6e 20 64 65 63 6c 61 72 61 74  unction declarat
13f60 69 6f 6e 20 73 68 6f 75 6c 64 20 63 6f 6e 74 61  ion should conta
13f70 69 6e 20 6e 6f 20 6d 6f 72 65 20 74 68 61 6e 20  in no more than 
13f80 6f 6e 65 20 6f 66 0a 20 20 74 68 65 20 66 6f 6c  one of.  the fol
13f90 6c 6f 77 69 6e 67 3a 20 20 5b 53 51 4c 49 54 45  lowing:  [SQLITE
13fa0 5f 41 50 49 43 41 4c 4c 5d 2c 20 5b 53 51 4c 49  _APICALL], [SQLI
13fb0 54 45 5f 43 41 4c 4c 42 41 43 4b 5d 2c 20 5b 53  TE_CALLBACK], [S
13fc0 51 4c 49 54 45 5f 43 44 45 43 4c 5d 2c 0a 20 20  QLITE_CDECL],.  
13fd0 6f 72 20 5b 53 51 4c 49 54 45 5f 53 59 53 43 41  or [SQLITE_SYSCA
13fe0 4c 4c 5d 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f  LL]..}..COMPILE_
13ff0 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 54  OPTION {SQLITE_T
14000 43 4c 41 50 49 7d 20 7b 0a 20 20 54 68 69 73 20  CLAPI} {.  This 
14010 6d 61 63 72 6f 20 73 70 65 63 69 66 69 65 73 20  macro specifies 
14020 74 68 65 20 63 61 6c 6c 69 6e 67 20 63 6f 6e 76  the calling conv
14030 65 6e 74 69 6f 6e 20 75 73 65 64 20 62 79 20 74  ention used by t
14040 68 65 20 0a 20 20 5b 68 74 74 70 3a 2f 2f 77 77  he .  [http://ww
14050 77 2e 74 63 6c 2e 74 6b 20 7c 20 54 43 4c 5d 20  w.tcl.tk | TCL] 
14060 6c 69 62 72 61 72 79 20 69 6e 74 65 72 66 61 63  library interfac
14070 65 20 72 6f 75 74 69 6e 65 73 2e 0a 20 20 54 68  e routines..  Th
14080 69 73 20 6d 61 63 72 6f 20 69 73 20 6e 6f 74 20  is macro is not 
14090 75 73 65 64 20 62 79 20 74 68 65 20 53 51 4c 69  used by the SQLi
140a0 74 65 20 63 6f 72 65 2c 20 62 75 74 20 6f 6e 6c  te core, but onl
140b0 79 20 62 79 20 74 68 65 20 5b 54 43 4c 20 49 6e  y by the [TCL In
140c0 74 65 72 66 61 63 65 5d 0a 20 20 61 6e 64 20 5b  terface].  and [
140d0 54 43 4c 20 74 65 73 74 20 73 75 69 74 65 5d 2e  TCL test suite].
140e0 0a 20 20 54 68 69 73 20 6d 61 63 72 6f 20 69 73  .  This macro is
140f0 20 6e 6f 72 6d 61 6c 6c 79 20 64 65 66 69 6e 65   normally define
14100 64 20 74 6f 20 62 65 20 6e 6f 74 68 69 6e 67 2c  d to be nothing,
14110 0a 20 20 74 68 6f 75 67 68 20 6f 6e 20 57 69 6e  .  though on Win
14120 64 6f 77 73 20 62 75 69 6c 64 73 20 69 74 20 63  dows builds it c
14130 61 6e 20 73 6f 6d 65 74 69 6d 65 73 20 62 65 20  an sometimes be 
14140 73 65 74 20 74 6f 20 22 5f 5f 63 64 65 63 6c 22  set to "__cdecl"
14150 2e 20 20 54 68 69 73 0a 20 20 6d 61 63 72 6f 20  .  This.  macro 
14160 69 73 20 75 73 65 64 20 6f 6e 20 54 43 4c 20 6c  is used on TCL l
14170 69 62 72 61 72 79 20 69 6e 74 65 72 66 61 63 65  ibrary interface
14180 20 72 6f 75 74 69 6e 65 73 20 77 68 69 63 68 20   routines which 
14190 61 72 65 20 61 6c 77 61 79 73 20 63 6f 6d 70 69  are always compi
141a0 6c 65 64 0a 20 20 61 73 20 5f 5f 63 64 65 63 6c  led.  as __cdecl
141b0 2c 20 65 76 65 6e 20 6f 6e 20 70 6c 61 74 66 6f  , even on platfo
141c0 72 6d 73 20 74 68 61 74 20 70 72 65 66 65 72 20  rms that prefer 
141d0 74 6f 20 75 73 65 20 5f 5f 73 74 64 63 61 6c 6c  to use __stdcall
141e0 2c 20 73 6f 20 74 68 69 73 0a 20 20 6d 61 63 72  , so this.  macr
141f0 6f 20 73 68 6f 75 6c 64 20 6e 6f 74 20 62 65 20  o should not be 
14200 73 65 74 20 74 6f 20 5f 5f 73 74 64 63 61 6c 6c  set to __stdcall
14210 20 75 6e 6c 65 73 73 20 74 68 65 20 70 6c 61 74   unless the plat
14220 66 6f 72 6d 20 61 73 20 61 20 63 75 73 74 6f 6d  form as a custom
14230 0a 20 20 54 43 4c 20 6c 69 62 72 61 72 79 20 62  .  TCL library b
14240 75 69 6c 64 20 74 68 61 74 20 73 75 70 70 6f 72  uild that suppor
14250 74 73 20 5f 5f 73 74 64 63 61 6c 6c 2e 0a 20 20  ts __stdcall..  
14260 3c 70 3e 0a 20 20 54 68 69 73 20 6d 61 63 72 6f  <p>.  This macro
14270 20 6d 61 79 20 6e 6f 74 20 62 65 20 75 73 65 64   may not be used
14280 20 69 6e 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20   in combination 
14290 77 69 74 68 20 61 6e 79 20 6f 66 20 5b 53 51 4c  with any of [SQL
142a0 49 54 45 5f 41 50 49 43 41 4c 4c 5d 2c 0a 20 20  ITE_APICALL],.  
142b0 5b 53 51 4c 49 54 45 5f 43 41 4c 4c 42 41 43 4b  [SQLITE_CALLBACK
142c0 5d 2c 20 5b 53 51 4c 49 54 45 5f 43 44 45 43 4c  ], [SQLITE_CDECL
142d0 5d 2c 20 6f 72 20 5b 53 51 4c 49 54 45 5f 53 59  ], or [SQLITE_SY
142e0 53 43 41 4c 4c 5d 2e 0a 7d 0a 0a 0a 3c 2f 74 63  SCALL]..}...</tc
142f0 6c 3e 0a                                         l>.