Documentation Source Text

Hex Artifact Content
Login

Artifact 785b5438822445e9a3cbcd469831860fcdbbc068:


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 45 53 53 5f 43 41 4c 4c 42  IT_PROGESS_CALLB
06f0: 41 43 4b 20 6f 70 74 69 6f 6e 20 69 73 20 6f 6e  ACK option is on
0700: 6c 79 20 75 73 61 62 6c 65 20 62 79 20 61 70 70  ly usable by app
0710: 6c 69 63 61 74 69 6f 6e 73 20 74 68 61 74 0a 64  lications that.d
0720: 6f 65 20 6e 6f 74 20 75 73 65 20 74 68 65 20 5b  oe not use the [
0730: 73 71 6c 69 74 65 33 5f 70 72 6f 67 72 65 73 73  sqlite3_progress
0740: 5f 68 61 6e 64 6c 65 72 28 29 5d 20 69 6e 74 65  _handler()] inte
0750: 72 66 61 63 65 2e 20 20 41 6e 64 20 73 6f 20 66  rface.  And so f
0760: 6f 72 74 68 2e 0a 0a 3c 70 3e 49 74 20 69 73 20  orth...<p>It is 
0770: 69 6d 70 6f 73 73 69 62 6c 65 20 74 6f 20 74 65  impossible to te
0780: 73 74 20 65 76 65 72 79 20 70 6f 73 73 69 62 6c  st every possibl
0790: 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66  e combination of
07a0: 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 0a 6f 70   compile-time.op
07b0: 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c 69 74 65  tions for SQLite
07c0: 2e 20 20 42 75 74 20 74 68 65 20 66 6f 6c 6c 6f  .  But the follo
07d0: 77 69 6e 67 20 73 65 74 20 6f 66 20 63 6f 6d 70  wing set of comp
07e0: 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73  ile-time options
07f0: 20 69 73 0a 6f 6e 65 20 63 6f 6e 66 69 67 75 72   is.one configur
0800: 61 74 69 6f 6e 20 74 68 61 74 20 69 73 20 61 6c  ation that is al
0810: 77 61 79 73 20 66 75 6c 6c 79 20 74 65 73 74 65  ways fully teste
0820: 64 2e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 3c 70 3e  d...<ol>.<li><p>
0830: 3c 62 3e 5b 53 51 4c 49 54 45 5f 54 48 52 45 41  <b>[SQLITE_THREA
0840: 44 53 41 46 45 3d 30 5d 3c 2f 62 3e 2e 0a 53 65  DSAFE=0]</b>..Se
0850: 74 74 69 6e 67 20 2d 44 53 51 4c 49 54 45 5f 54  tting -DSQLITE_T
0860: 48 52 45 41 44 53 41 46 45 3d 30 20 63 61 75 73  HREADSAFE=0 caus
0870: 65 73 20 61 6c 6c 20 6f 66 20 74 68 65 20 6d 75  es all of the mu
0880: 74 65 78 20 61 6e 64 20 74 68 72 65 61 64 2d 73  tex and thread-s
0890: 61 66 65 74 79 20 6c 6f 67 69 63 0a 69 6e 20 53  afety logic.in S
08a0: 51 4c 69 74 65 20 74 6f 20 62 65 20 6f 6d 69 74  QLite to be omit
08b0: 74 65 64 2e 20 20 54 68 69 73 20 69 73 20 74 68  ted.  This is th
08c0: 65 20 73 69 6e 67 6c 65 20 63 6f 6d 70 69 6c 65  e single compile
08d0: 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 74 68 61  -time option tha
08e0: 74 20 6d 61 6b 65 73 0a 74 68 65 20 6d 6f 73 74  t makes.the most
08f0: 20 64 69 66 66 65 72 65 6e 63 65 20 69 6e 20 6f   difference in o
0900: 70 74 69 6d 69 7a 69 6e 67 20 74 68 65 20 70 65  ptimizing the pe
0910: 72 66 6f 72 6d 61 6e 63 65 20 6f 66 20 53 51 4c  rformance of SQL
0920: 69 74 65 2e 0a 0a 3c 6c 69 3e 3c 70 3e 3c 62 3e  ite...<li><p><b>
0930: 5b 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f  [SQLITE_DEFAULT_
0940: 4d 45 4d 53 54 41 54 55 53 3d 30 5d 3c 2f 62 3e  MEMSTATUS=0]</b>
0950: 2e 0a 54 68 69 73 20 73 65 74 74 69 6e 67 20 63  ..This setting c
0960: 61 75 73 65 73 20 74 68 65 20 5b 73 71 6c 69 74  auses the [sqlit
0970: 65 33 5f 73 74 61 74 75 73 28 29 5d 20 69 6e 74  e3_status()] int
0980: 65 72 66 61 63 65 73 20 74 68 61 74 20 74 72 61  erfaces that tra
0990: 63 6b 20 6d 65 6d 6f 72 79 20 75 73 61 67 65 0a  ck memory usage.
09a0: 74 6f 20 62 65 20 64 69 73 61 62 6c 65 64 2e 20  to be disabled. 
09b0: 20 54 68 69 73 20 68 65 6c 70 73 20 74 68 65 20   This helps the 
09c0: 5b 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28  [sqlite3_malloc(
09d0: 29 5d 20 72 6f 75 74 69 6e 65 73 20 72 75 6e 20  )] routines run 
09e0: 6d 75 63 68 20 66 61 73 74 65 72 2c 0a 61 6e 64  much faster,.and
09f0: 20 73 69 6e 63 65 20 53 51 4c 69 74 65 20 75 73   since SQLite us
0a00: 65 73 20 5b 73 71 6c 69 74 65 33 5f 6d 61 6c 6c  es [sqlite3_mall
0a10: 6f 63 28 29 5d 20 69 6e 74 65 72 6e 61 6c 6c 79  oc()] internally
0a20: 2c 20 74 68 69 73 20 68 65 6c 70 73 20 74 6f 20  , this helps to 
0a30: 6d 61 6b 65 20 74 68 65 0a 65 6e 74 69 72 65 20  make the.entire 
0a40: 6c 69 62 72 61 72 79 20 66 61 73 74 65 72 2e 0a  library faster..
0a50: 0a 3c 6c 69 3e 3c 70 3e 3c 62 3e 5b 53 51 4c 49  .<li><p><b>[SQLI
0a60: 54 45 5f 44 45 46 41 55 4c 54 5f 57 41 4c 5f 53  TE_DEFAULT_WAL_S
0a70: 59 4e 43 48 52 4f 4e 4f 55 53 3d 31 5d 3c 2f 62  YNCHRONOUS=1]</b
0a80: 3e 2e 0a 46 6f 72 20 6d 61 78 69 6d 75 6d 20 64  >..For maximum d
0a90: 61 74 61 62 61 73 65 20 73 61 66 65 74 79 20 66  atabase safety f
0aa0: 6f 6c 6c 6f 77 69 6e 67 20 61 20 70 6f 77 65 72  ollowing a power
0ab0: 20 6c 6f 73 65 2c 20 74 68 65 20 73 65 74 74 69   lose, the setti
0ac0: 6e 67 20 6f 66 0a 5b 50 52 41 47 4d 41 20 73 79  ng of.[PRAGMA sy
0ad0: 6e 63 68 72 6f 6e 6f 75 73 3d 46 55 4c 4c 5d 20  nchronous=FULL] 
0ae0: 69 73 20 72 65 63 6f 6d 6d 65 6e 64 65 64 2e 20  is recommended. 
0af0: 20 48 6f 77 65 76 65 72 2c 20 69 6e 20 5b 57 41   However, in [WA
0b00: 4c 20 6d 6f 64 65 5d 2c 20 63 6f 6d 70 6c 65 74  L mode], complet
0b10: 65 0a 64 61 74 61 62 61 73 65 20 69 6e 74 65 67  e.database integ
0b20: 72 69 74 79 20 69 73 20 67 75 61 72 61 6e 74 65  rity is guarante
0b30: 65 64 20 77 69 74 68 20 5b 50 52 41 47 4d 41 20  ed with [PRAGMA 
0b40: 73 79 6e 63 68 72 6f 6e 6f 75 73 3d 4e 4f 52 4d  synchronous=NORM
0b50: 41 4c 5d 2e 20 20 57 69 74 68 0a 5b 50 52 41 47  AL].  With.[PRAG
0b60: 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3d 4e  MA synchronous=N
0b70: 4f 52 4d 41 4c 5d 20 69 6e 20 5b 57 41 4c 20 6d  ORMAL] in [WAL m
0b80: 6f 64 65 5d 2c 20 72 65 63 65 6e 74 20 63 68 61  ode], recent cha
0b90: 6e 67 65 73 20 74 6f 20 74 68 65 20 64 61 74 61  nges to the data
0ba0: 62 61 73 65 20 6d 69 67 68 74 0a 62 65 20 72 6f  base might.be ro
0bb0: 6c 6c 65 64 20 62 61 63 6b 20 62 79 20 61 20 70  lled back by a p
0bc0: 6f 77 65 72 20 6c 6f 73 73 2c 20 62 75 74 20 74  ower loss, but t
0bd0: 68 65 20 64 61 74 61 62 61 73 65 20 77 69 6c 6c  he database will
0be0: 20 6e 6f 74 20 62 65 20 63 6f 72 72 75 70 74 65   not be corrupte
0bf0: 64 2e 0a 46 75 72 74 68 65 72 6d 6f 72 65 2c 20  d..Furthermore, 
0c00: 74 72 61 6e 73 61 63 74 69 6f 6e 20 63 6f 6d 6d  transaction comm
0c10: 69 74 20 69 73 20 6d 75 63 68 20 66 61 73 74 65  it is much faste
0c20: 72 20 69 6e 20 57 41 4c 20 6d 6f 64 65 20 75 73  r in WAL mode us
0c30: 69 6e 67 0a 73 79 6e 63 68 72 6f 6e 6f 75 73 3d  ing.synchronous=
0c40: 4e 4f 52 4d 41 4c 20 74 68 61 6e 20 77 69 74 68  NORMAL than with
0c50: 20 74 68 65 20 64 65 66 61 75 6c 74 20 73 79 6e   the default syn
0c60: 63 68 72 6f 6e 6f 75 73 3d 46 55 4c 4c 2e 20 20  chronous=FULL.  
0c70: 46 6f 72 20 74 68 65 73 65 0a 72 65 61 73 6f 6e  For these.reason
0c80: 73 2c 20 69 74 20 69 73 20 72 65 63 6f 6d 6d 65  s, it is recomme
0c90: 6e 64 65 64 20 74 68 61 74 20 74 68 65 20 73 79  nded that the sy
0ca0: 6e 63 68 72 6f 6e 6f 75 73 20 73 65 74 74 69 6e  nchronous settin
0cb0: 67 20 62 65 20 63 68 61 6e 67 65 64 20 66 72 6f  g be changed fro
0cc0: 6d 0a 46 55 4c 4c 20 74 6f 20 4e 4f 52 4d 41 4c  m.FULL to NORMAL
0cd0: 20 77 68 65 6e 20 73 77 69 74 63 68 69 6e 67 20   when switching 
0ce0: 74 6f 20 57 41 4c 20 6d 6f 64 65 2e 20 20 54 68  to WAL mode.  Th
0cf0: 69 73 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  is compile-time 
0d00: 6f 70 74 69 6f 6e 20 77 69 6c 6c 0a 61 63 63 6f  option will.acco
0d10: 6d 70 6c 69 73 68 20 74 68 61 74 2e 0a 0a 3c 6c  mplish that...<l
0d20: 69 3e 3c 70 3e 3c 62 3e 5b 53 51 4c 49 54 45 5f  i><p><b>[SQLITE_
0d30: 4c 49 4b 45 5f 44 4f 45 53 4e 54 5f 4d 41 54 43  LIKE_DOESNT_MATC
0d40: 48 5f 42 4c 4f 42 53 5d 3c 2f 62 3e 2e 0a 48 69  H_BLOBS]</b>..Hi
0d50: 73 74 6f 72 69 63 61 6c 6c 79 2c 20 53 51 4c 69  storically, SQLi
0d60: 74 65 20 68 61 73 20 61 6c 6c 6f 77 65 64 20 42  te has allowed B
0d70: 4c 4f 42 20 6f 70 65 72 61 6e 64 73 20 74 6f 20  LOB operands to 
0d80: 74 68 65 20 5b 4c 49 4b 45 5d 20 61 6e 64 20 5b  the [LIKE] and [
0d90: 47 4c 4f 42 5d 0a 6f 70 65 72 61 74 6f 72 73 2e  GLOB].operators.
0da0: 20 20 42 75 74 20 68 61 76 69 6e 67 20 61 20 42    But having a B
0db0: 4c 4f 42 20 61 73 20 61 6e 20 6f 70 65 72 61 6e  LOB as an operan
0dc0: 64 20 6f 66 20 5b 4c 49 4b 45 5d 20 6f 72 20 5b  d of [LIKE] or [
0dd0: 47 4c 4f 42 5d 20 63 6f 6d 70 6c 69 63 61 74 65  GLOB] complicate
0de0: 73 0a 61 6e 64 20 73 6c 6f 77 73 20 74 68 65 20  s.and slows the 
0df0: 5b 4c 49 4b 45 20 6f 70 74 69 6d 69 7a 61 74 69  [LIKE optimizati
0e00: 6f 6e 5d 2e 20 20 57 68 65 6e 20 74 68 69 73 20  on].  When this 
0e10: 6f 70 74 69 6f 6e 20 69 73 20 73 65 74 2c 20 69  option is set, i
0e20: 74 20 6d 65 61 6e 73 20 74 68 61 74 0a 74 68 65  t means that.the
0e30: 20 4c 49 4b 45 20 61 6e 64 20 47 4c 4f 42 20 6f   LIKE and GLOB o
0e40: 70 65 72 61 74 6f 72 73 20 61 6c 77 61 79 73 20  perators always 
0e50: 72 65 74 75 72 6e 20 46 41 4c 53 45 20 69 66 20  return FALSE if 
0e60: 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69  either operand i
0e70: 73 20 61 20 42 4c 4f 42 2e 0a 54 68 61 74 20 73  s a BLOB..That s
0e80: 69 6d 70 6c 69 66 69 65 73 20 74 68 65 20 69 6d  implifies the im
0e90: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20  plementation of 
0ea0: 74 68 65 20 5b 4c 49 4b 45 20 6f 70 74 69 6d 69  the [LIKE optimi
0eb0: 7a 61 74 69 6f 6e 5d 20 61 6e 64 20 61 6c 6c 6f  zation] and allo
0ec0: 77 73 0a 71 75 65 72 69 65 73 20 74 68 61 74 20  ws.queries that 
0ed0: 75 73 65 20 74 68 65 20 5b 4c 49 4b 45 20 6f 70  use the [LIKE op
0ee0: 74 69 6d 69 7a 61 74 69 6f 6e 5d 20 74 6f 20 72  timization] to r
0ef0: 75 6e 20 66 61 73 74 65 72 2e 0a 0a 3c 6c 69 3e  un faster...<li>
0f00: 3c 70 3e 3c 62 3e 5b 53 51 4c 49 54 45 5f 4d 41  <p><b>[SQLITE_MA
0f10: 58 5f 45 58 50 52 5f 44 45 50 54 48 3d 30 5d 3c  X_EXPR_DEPTH=0]<
0f20: 2f 62 3e 2e 0a 53 65 74 74 69 6e 67 20 74 68 65  /b>..Setting the
0f30: 20 6d 61 78 69 6d 75 6d 20 65 78 70 72 65 73 73   maximum express
0f40: 69 6f 6e 20 70 61 72 73 65 2d 74 72 65 65 20 64  ion parse-tree d
0f50: 65 70 74 68 20 74 6f 20 7a 65 72 6f 20 64 69 73  epth to zero dis
0f60: 61 62 6c 65 73 20 61 6c 6c 20 63 68 65 63 6b 69  ables all checki
0f70: 6e 67 0a 6f 66 20 74 68 65 20 65 78 70 72 65 73  ng.of the expres
0f80: 73 69 6f 6e 20 70 61 72 73 65 2d 74 72 65 65 20  sion parse-tree 
0f90: 64 65 70 74 68 2c 20 77 68 69 63 68 20 73 69 6d  depth, which sim
0fa0: 70 6c 69 66 69 65 73 20 74 68 65 20 63 6f 64 65  plifies the code
0fb0: 20 72 65 73 75 6c 74 69 6e 67 20 69 6e 0a 66 61   resulting in.fa
0fc0: 73 74 65 72 20 65 78 65 63 75 74 69 6f 6e 2c 20  ster execution, 
0fd0: 61 6e 64 20 68 65 6c 70 73 20 74 68 65 20 70 61  and helps the pa
0fe0: 72 73 65 20 74 72 65 65 20 74 6f 20 75 73 65 20  rse tree to use 
0ff0: 6c 65 73 73 20 6d 65 6d 6f 72 79 2e 0a 0a 3c 6c  less memory...<l
1000: 69 3e 3c 70 3e 3c 62 3e 5b 53 51 4c 49 54 45 5f  i><p><b>[SQLITE_
1010: 4f 4d 49 54 5f 44 45 43 4c 54 59 50 45 5d 3c 2f  OMIT_DECLTYPE]</
1020: 62 3e 2e 0a 42 79 20 6f 6d 69 74 74 69 6e 67 20  b>..By omitting 
1030: 74 68 65 20 28 73 65 6c 64 6f 6d 2d 6e 65 65 64  the (seldom-need
1040: 65 64 29 20 61 62 69 6c 69 74 79 20 74 6f 20 72  ed) ability to r
1050: 65 74 75 72 6e 20 74 68 65 20 64 65 63 6c 61 72  eturn the declar
1060: 65 64 20 74 79 70 65 20 6f 66 0a 63 6f 6c 75 6d  ed type of.colum
1070: 6e 73 20 66 72 6f 6d 20 74 68 65 20 72 65 73 75  ns from the resu
1080: 6c 74 20 73 65 74 20 6f 66 20 71 75 65 72 79 2c  lt set of query,
1090: 20 5b 70 72 65 70 61 72 65 64 20 73 74 61 74 65   [prepared state
10a0: 6d 65 6e 74 73 5d 20 63 61 6e 20 62 65 20 6d 61  ments] can be ma
10b0: 64 65 0a 74 6f 20 63 6f 6e 73 75 6d 65 20 6c 65  de.to consume le
10c0: 73 73 20 6d 65 6d 6f 72 79 2e 0a 0a 3c 6c 69 3e  ss memory...<li>
10d0: 3c 70 3e 3c 62 3e 5b 53 51 4c 49 54 45 5f 4f 4d  <p><b>[SQLITE_OM
10e0: 49 54 5f 44 45 50 52 45 43 41 54 45 44 5d 3c 2f  IT_DEPRECATED]</
10f0: 62 3e 2e 0a 4f 6d 69 74 74 69 6e 67 20 64 65 70  b>..Omitting dep
1100: 72 65 63 61 74 65 64 20 69 6e 74 65 72 66 61 63  recated interfac
1110: 65 73 20 61 6e 64 20 66 65 61 74 75 72 65 73 20  es and features 
1120: 77 69 6c 6c 20 6e 6f 74 20 68 65 6c 70 20 53 51  will not help SQ
1130: 4c 69 74 65 20 74 6f 0a 72 75 6e 20 61 6e 79 20  Lite to.run any 
1140: 66 61 73 74 65 72 2e 20 20 49 74 20 77 69 6c 6c  faster.  It will
1150: 20 72 65 64 75 63 65 20 74 68 65 20 6c 69 62 72   reduce the libr
1160: 61 72 79 20 66 6f 6f 74 70 72 69 6e 74 2c 20 68  ary footprint, h
1170: 6f 77 65 76 65 72 2e 20 20 41 6e 64 0a 69 74 20  owever.  And.it 
1180: 69 73 20 74 68 65 20 72 69 67 68 74 20 74 68 69  is the right thi
1190: 6e 67 20 74 6f 20 64 6f 2e 0a 0a 3c 6c 69 3e 3c  ng to do...<li><
11a0: 70 3e 3c 62 3e 5b 53 51 4c 49 54 45 5f 4f 4d 49  p><b>[SQLITE_OMI
11b0: 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42  T_PROGRESS_CALLB
11c0: 41 43 4b 5d 3c 2f 62 3e 2e 0a 54 68 65 20 70 72  ACK]</b>..The pr
11d0: 6f 67 72 65 73 73 20 68 61 6e 64 6c 65 72 20 63  ogress handler c
11e0: 61 6c 6c 62 61 63 6b 20 63 6f 75 6e 74 65 72 20  allback counter 
11f0: 6d 75 73 74 20 62 65 20 63 68 65 63 6b 65 64 20  must be checked 
1200: 69 6e 20 74 68 65 20 69 6e 6e 65 72 20 6c 6f 6f  in the inner loo
1210: 70 0a 6f 66 20 74 68 65 20 5b 62 79 74 65 63 6f  p.of the [byteco
1220: 64 65 20 65 6e 67 69 6e 65 5d 2e 20 20 42 79 20  de engine].  By 
1230: 6f 6d 69 74 74 69 6e 67 20 74 68 69 73 20 69 6e  omitting this in
1240: 74 65 72 66 61 63 65 2c 20 61 20 73 69 6e 67 6c  terface, a singl
1250: 65 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 0a 69 73  e conditional.is
1260: 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68   removed from th
1270: 65 20 69 6e 6e 65 72 20 6c 6f 6f 70 20 6f 66 20  e inner loop of 
1280: 74 68 65 20 5b 62 79 74 65 63 6f 64 65 20 65 6e  the [bytecode en
1290: 67 69 6e 65 5d 2c 20 68 65 6c 70 69 6e 67 20 53  gine], helping S
12a0: 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 0a 74 6f  QL statements.to
12b0: 20 72 75 6e 20 73 6c 69 67 68 74 6c 79 20 66 61   run slightly fa
12c0: 73 74 65 72 2e 0a 0a 3c 6c 69 3e 3c 70 3e 3c 62  ster...<li><p><b
12d0: 3e 5b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48  >[SQLITE_OMIT_SH
12e0: 41 52 45 44 5f 43 41 43 48 45 5d 3c 2f 62 3e 2e  ARED_CACHE]</b>.
12f0: 0a 4f 6d 69 74 74 69 6e 67 20 74 68 65 20 70 6f  .Omitting the po
1300: 73 73 69 62 69 6c 69 74 79 20 6f 66 20 75 73 69  ssibility of usi
1310: 6e 67 20 5b 73 68 61 72 65 64 20 63 61 63 68 65  ng [shared cache
1320: 5d 20 61 6c 6c 6f 77 73 20 6d 61 6e 79 20 63 6f  ] allows many co
1330: 6e 64 69 74 69 6f 6e 61 6c 73 0a 69 6e 20 70 65  nditionals.in pe
1340: 72 66 6f 72 6d 61 6e 63 65 2d 63 72 69 74 69 63  rformance-critic
1350: 61 6c 20 73 65 63 74 69 6f 6e 73 20 6f 66 20 74  al sections of t
1360: 68 65 20 63 6f 64 65 20 74 6f 20 62 65 20 65 6c  he code to be el
1370: 69 6d 69 6e 61 74 65 64 2e 20 20 54 68 69 73 20  iminated.  This 
1380: 63 61 6e 0a 67 69 76 65 20 61 20 6e 6f 74 69 63  can.give a notic
1390: 61 62 6c 65 20 69 6d 70 72 6f 76 65 6d 65 6e 74  able improvement
13a0: 20 69 6e 20 70 65 72 66 6f 72 6d 61 6e 63 65 2e   in performance.
13b0: 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 57 68 65 6e 20  .</ol>..<p>When 
13c0: 61 6c 6c 20 6f 66 20 74 68 65 20 72 65 63 6f 6d  all of the recom
13d0: 6d 65 6e 64 65 64 20 63 6f 6d 70 69 6c 65 2d 74  mended compile-t
13e0: 69 6d 65 20 6f 70 74 69 6f 6e 73 20 61 62 6f 76  ime options abov
13f0: 65 20 61 72 65 20 75 73 65 64 2c 0a 74 68 65 20  e are used,.the 
1400: 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 20 77  SQLite library w
1410: 69 6c 6c 20 62 65 20 61 70 70 72 6f 78 69 6d 61  ill be approxima
1420: 74 65 6c 79 20 33 25 20 73 6d 61 6c 6c 65 72 20  tely 3% smaller 
1430: 61 6e 64 20 75 73 65 20 61 62 6f 75 74 20 35 25  and use about 5%
1440: 20 66 65 77 65 72 0a 43 50 55 20 63 79 63 6c 65   fewer.CPU cycle
1450: 73 2e 20 20 53 6f 20 74 68 65 73 65 20 6f 70 74  s.  So these opt
1460: 69 6f 6e 73 20 64 6f 20 6e 6f 74 20 6d 61 6b 65  ions do not make
1470: 20 61 20 68 75 67 65 20 64 69 66 66 65 72 65 6e   a huge differen
1480: 63 65 2e 20 20 42 75 74 20 69 6e 20 0a 73 6f 6d  ce.  But in .som
1490: 65 20 64 65 73 69 67 6e 20 73 69 74 75 61 74 69  e design situati
14a0: 6f 6e 73 2c 20 65 76 65 72 79 20 6c 69 74 74 6c  ons, every littl
14b0: 65 20 62 69 74 20 68 65 6c 70 73 2e 0a 0a 3c 61  e bit helps...<a
14c0: 20 6e 61 6d 65 3d 22 6f 73 63 6f 6e 66 69 67 22   name="osconfig"
14d0: 3e 3c 2f 61 3e 0a 3c 68 31 3e 20 50 6c 61 74 66  ></a>.<h1> Platf
14e0: 6f 72 6d 20 43 6f 6e 66 69 67 75 72 61 74 69 6f  orm Configuratio
14f0: 6e 3c 2f 68 31 3e 0a 0a 3c 74 63 6c 3e 0a 43 4f  n</h1>..<tcl>.CO
1500: 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 5f 48  MPILE_OPTION {_H
1510: 41 56 45 5f 53 51 4c 49 54 45 5f 43 4f 4e 46 49  AVE_SQLITE_CONFI
1520: 47 5f 48 7d 20 7b 0a 20 20 49 66 20 74 68 65 20  G_H} {.  If the 
1530: 5f 48 41 56 45 5f 53 51 4c 49 54 45 5f 43 4f 4e  _HAVE_SQLITE_CON
1540: 46 49 47 5f 48 20 6d 61 63 72 6f 20 69 73 20 64  FIG_H macro is d
1550: 65 66 69 6e 65 64 0a 20 20 74 68 65 6e 20 74 68  efined.  then th
1560: 65 20 53 51 4c 69 74 65 20 73 6f 75 72 63 65 20  e SQLite source 
1570: 63 6f 64 65 20 77 69 6c 6c 20 61 74 74 65 6d 70  code will attemp
1580: 74 20 74 6f 20 23 69 6e 63 6c 75 64 65 20 61 20  t to #include a 
1590: 66 69 6c 65 20 6e 61 6d 65 64 20 22 63 6f 6e 66  file named "conf
15a0: 69 67 2e 68 22 2e 0a 20 20 54 68 65 20 22 63 6f  ig.h"..  The "co
15b0: 6e 66 69 67 2e 68 22 20 66 69 6c 65 20 75 73 75  nfig.h" file usu
15c0: 61 6c 6c 79 20 63 6f 6e 74 61 69 6e 73 20 6f 74  ally contains ot
15d0: 68 65 72 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  her configuratio
15e0: 6e 20 6f 70 74 69 6f 6e 73 2c 20 65 73 70 65 63  n options, espec
15f0: 69 61 6c 6c 79 0a 20 20 22 48 41 56 45 5f 3c 69  ially.  "HAVE_<i
1600: 3e 49 4e 54 45 52 46 41 43 45 3c 2f 69 3e 22 20  >INTERFACE</i>" 
1610: 74 79 70 65 20 6f 70 74 69 6f 6e 73 20 67 65 6e  type options gen
1620: 65 72 61 74 65 64 20 62 79 20 61 75 74 6f 63 6f  erated by autoco
1630: 6e 66 20 73 63 72 69 70 74 73 2e 0a 7d 0a 0a 43  nf scripts..}..C
1640: 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 48  OMPILE_OPTION {H
1650: 41 56 45 5f 46 44 41 54 41 53 59 4e 43 7d 20 7b  AVE_FDATASYNC} {
1660: 0a 20 20 49 66 20 74 68 65 20 48 41 56 45 5f 46  .  If the HAVE_F
1670: 44 41 54 41 53 59 4e 43 20 63 6f 6d 70 69 6c 65  DATASYNC compile
1680: 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20  -time option is 
1690: 74 72 75 65 2c 20 74 68 65 6e 20 74 68 65 20 64  true, then the d
16a0: 65 66 61 75 6c 74 20 5b 56 46 53 5d 0a 20 20 66  efault [VFS].  f
16b0: 6f 72 20 75 6e 69 78 20 73 79 73 74 65 6d 73 20  or unix systems 
16c0: 77 69 6c 6c 20 61 74 74 65 6d 70 74 20 74 6f 20  will attempt to 
16d0: 75 73 65 20 66 64 61 74 61 73 79 6e 63 28 29 20  use fdatasync() 
16e0: 69 6e 73 74 65 61 64 20 6f 66 20 66 73 79 6e 63  instead of fsync
16f0: 28 29 20 77 68 65 72 65 0a 20 20 61 70 70 72 6f  () where.  appro
1700: 70 72 69 61 74 65 2e 20 20 49 66 20 74 68 69 73  priate.  If this
1710: 20 66 6c 61 67 20 69 73 20 6d 69 73 73 69 6e 67   flag is missing
1720: 20 6f 72 20 66 61 6c 73 65 2c 20 74 68 65 6e 20   or false, then 
1730: 66 73 79 6e 63 28 29 20 69 73 20 61 6c 77 61 79  fsync() is alway
1740: 73 20 75 73 65 64 2e 0a 7d 0a 0a 43 4f 4d 50 49  s used..}..COMPI
1750: 4c 45 5f 4f 50 54 49 4f 4e 20 7b 48 41 56 45 5f  LE_OPTION {HAVE_
1760: 47 4d 54 49 4d 45 5f 52 7d 20 7b 0a 20 20 49 66  GMTIME_R} {.  If
1770: 20 74 68 65 20 48 41 56 45 5f 47 4d 54 49 4d 45   the HAVE_GMTIME
1780: 5f 52 20 6f 70 74 69 6f 6e 20 69 73 20 74 72 75  _R option is tru
1790: 65 20 61 6e 64 20 69 66 20 5b 53 51 4c 49 54 45  e and if [SQLITE
17a0: 5f 4f 4d 49 54 5f 44 41 54 45 54 49 4d 45 5f 46  _OMIT_DATETIME_F
17b0: 55 4e 43 53 5d 20 69 73 20 74 72 75 65 2c 0a 20  UNCS] is true,. 
17c0: 20 74 68 65 6e 20 74 68 65 20 43 55 52 52 45 4e   then the CURREN
17d0: 54 5f 54 49 4d 45 2c 20 43 55 52 52 45 4e 54 5f  T_TIME, CURRENT_
17e0: 44 41 54 45 2c 20 61 6e 64 20 43 55 52 52 45 4e  DATE, and CURREN
17f0: 54 5f 54 49 4d 45 53 54 41 4d 50 20 6b 65 79 77  T_TIMESTAMP keyw
1800: 6f 72 64 73 20 77 69 6c 6c 20 75 73 65 0a 20 20  ords will use.  
1810: 74 68 65 20 74 68 72 65 61 64 73 61 66 65 20 22  the threadsafe "
1820: 67 6d 74 69 6d 65 5f 72 28 29 22 20 69 6e 74 65  gmtime_r()" inte
1830: 72 66 61 63 65 20 72 61 74 68 65 72 20 74 68 61  rface rather tha
1840: 6e 20 22 67 6d 74 69 6d 65 28 29 22 2e 20 20 49  n "gmtime()".  I
1850: 6e 20 74 68 65 20 75 73 75 61 6c 20 63 61 73 65  n the usual case
1860: 0a 20 20 77 68 65 72 65 20 5b 53 51 4c 49 54 45  .  where [SQLITE
1870: 5f 4f 4d 49 54 5f 44 41 54 45 54 49 4d 45 5f 46  _OMIT_DATETIME_F
1880: 55 4e 43 53 5d 20 69 73 20 6e 6f 74 20 64 65 66  UNCS] is not def
1890: 69 6e 65 64 20 6f 72 20 69 73 20 66 61 6c 73 65  ined or is false
18a0: 2c 20 74 68 65 6e 20 74 68 65 0a 20 20 62 75 69  , then the.  bui
18b0: 6c 74 2d 69 6e 20 5b 64 61 74 65 20 61 6e 64 20  lt-in [date and 
18c0: 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 5d 20  time functions] 
18d0: 61 72 65 20 75 73 65 64 20 74 6f 20 69 6d 70 6c  are used to impl
18e0: 65 6d 65 6e 74 20 74 68 65 20 43 55 52 52 45 4e  ement the CURREN
18f0: 54 5f 54 49 4d 45 2c 0a 20 20 43 55 52 52 45 4e  T_TIME,.  CURREN
1900: 54 5f 44 41 54 45 2c 20 61 6e 64 20 43 55 52 52  T_DATE, and CURR
1910: 45 4e 54 5f 54 49 4d 45 53 54 41 4d 50 20 6b 65  ENT_TIMESTAMP ke
1920: 79 77 6f 72 64 73 20 61 6e 64 20 6e 65 69 74 68  ywords and neith
1930: 65 72 20 67 6d 74 69 6d 65 5f 72 28 29 20 6e 6f  er gmtime_r() no
1940: 72 0a 20 20 67 6d 74 69 6d 65 28 29 20 69 73 20  r.  gmtime() is 
1950: 65 76 65 72 20 63 61 6c 6c 65 64 2e 0a 7d 0a 0a  ever called..}..
1960: 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b  COMPILE_OPTION {
1970: 48 41 56 45 5f 49 53 4e 41 4e 7d 20 7b 0a 20 20  HAVE_ISNAN} {.  
1980: 49 66 20 74 68 65 20 48 41 56 45 5f 49 53 4e 41  If the HAVE_ISNA
1990: 4e 20 6f 70 74 69 6f 6e 20 69 73 20 74 72 75 65  N option is true
19a0: 2c 20 74 68 65 6e 20 53 51 4c 69 74 65 20 69 6e  , then SQLite in
19b0: 76 6f 6b 65 73 20 74 68 65 20 73 79 73 74 65 6d  vokes the system
19c0: 20 6c 69 62 72 61 72 79 20 69 73 6e 61 6e 28 29   library isnan()
19d0: 0a 20 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 64  .  function to d
19e0: 65 74 65 72 6d 69 6e 65 20 69 66 20 61 20 64 6f  etermine if a do
19f0: 75 62 6c 65 2d 70 72 65 63 69 73 69 6f 6e 20 66  uble-precision f
1a00: 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61  loating point va
1a10: 6c 75 65 20 69 73 20 61 20 4e 61 4e 2e 0a 20 20  lue is a NaN..  
1a20: 49 66 20 48 41 56 45 5f 49 53 4e 41 4e 20 69 73  If HAVE_ISNAN is
1a30: 20 75 6e 64 65 66 69 6e 65 64 20 6f 72 20 66 61   undefined or fa
1a40: 6c 73 65 2c 20 74 68 65 6e 20 53 51 4c 69 74 65  lse, then SQLite
1a50: 20 73 75 62 73 74 69 74 75 74 65 73 20 69 74 73   substitutes its
1a60: 20 6f 77 6e 20 68 6f 6d 65 2d 67 72 6f 77 6e 0a   own home-grown.
1a70: 20 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e    implementation
1a80: 20 6f 66 20 69 73 6e 61 6e 28 29 2e 0a 7d 0a 0a   of isnan()..}..
1a90: 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b  COMPILE_OPTION {
1aa0: 48 41 56 45 5f 4c 4f 43 41 4c 54 49 4d 45 5f 52  HAVE_LOCALTIME_R
1ab0: 7d 20 7b 0a 20 20 49 66 20 74 68 65 20 48 41 56  } {.  If the HAV
1ac0: 45 5f 4c 4f 43 41 4c 54 49 4d 45 5f 52 20 6f 70  E_LOCALTIME_R op
1ad0: 74 69 6f 6e 20 69 73 20 74 72 75 65 2c 20 74 68  tion is true, th
1ae0: 65 6e 20 53 51 4c 69 74 65 20 75 73 65 73 20 74  en SQLite uses t
1af0: 68 65 20 74 68 72 65 61 64 73 61 66 65 0a 20 20  he threadsafe.  
1b00: 6c 6f 63 61 6c 74 69 6d 65 5f 72 28 29 20 6c 69  localtime_r() li
1b10: 62 72 61 72 79 20 72 6f 75 74 69 6e 65 20 69 6e  brary routine in
1b20: 73 74 65 61 64 20 6f 66 20 6c 6f 63 61 6c 74 69  stead of localti
1b30: 6d 65 28 29 0a 20 20 74 6f 20 68 65 6c 70 20 69  me().  to help i
1b40: 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20 5b 6c 6f  mplement the [lo
1b50: 63 61 6c 74 69 6d 65 20 6d 6f 64 69 66 69 65 72  caltime modifier
1b60: 5d 0a 20 20 74 6f 20 74 68 65 20 62 75 69 6c 74  ].  to the built
1b70: 2d 69 6e 20 5b 64 61 74 65 20 61 6e 64 20 74 69  -in [date and ti
1b80: 6d 65 20 66 75 6e 63 74 69 6f 6e 73 5d 2e 0a 7d  me functions]..}
1b90: 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e  ..COMPILE_OPTION
1ba0: 20 7b 48 41 56 45 5f 4c 4f 43 41 4c 54 49 4d 45   {HAVE_LOCALTIME
1bb0: 5f 53 7d 20 7b 0a 20 20 49 66 20 74 68 65 20 48  _S} {.  If the H
1bc0: 41 56 45 5f 4c 4f 43 41 4c 54 49 4d 45 5f 53 20  AVE_LOCALTIME_S 
1bd0: 6f 70 74 69 6f 6e 20 69 73 20 74 72 75 65 2c 20  option is true, 
1be0: 74 68 65 6e 20 53 51 4c 69 74 65 20 75 73 65 73  then SQLite uses
1bf0: 20 74 68 65 20 74 68 72 65 61 64 73 61 66 65 0a   the threadsafe.
1c00: 20 20 6c 6f 63 61 6c 74 69 6d 65 5f 73 28 29 20    localtime_s() 
1c10: 6c 69 62 72 61 72 79 20 72 6f 75 74 69 6e 65 20  library routine 
1c20: 69 6e 73 74 65 61 64 20 6f 66 20 6c 6f 63 61 6c  instead of local
1c30: 74 69 6d 65 28 29 0a 20 20 74 6f 20 68 65 6c 70  time().  to help
1c40: 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20 5b   implement the [
1c50: 6c 6f 63 61 6c 74 69 6d 65 20 6d 6f 64 69 66 69  localtime modifi
1c60: 65 72 5d 0a 20 20 74 6f 20 74 68 65 20 62 75 69  er].  to the bui
1c70: 6c 74 2d 69 6e 20 5b 64 61 74 65 20 61 6e 64 20  lt-in [date and 
1c80: 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 5d 2e  time functions].
1c90: 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49  .}..COMPILE_OPTI
1ca0: 4f 4e 20 7b 48 41 56 45 5f 4d 41 4c 4c 4f 43 5f  ON {HAVE_MALLOC_
1cb0: 55 53 41 42 4c 45 5f 53 49 5a 45 7d 20 7b 0a 20  USABLE_SIZE} {. 
1cc0: 20 49 66 20 74 68 65 20 48 41 56 45 5f 4d 41 4c   If the HAVE_MAL
1cd0: 4c 4f 43 5f 55 53 41 42 4c 45 5f 53 49 5a 45 20  LOC_USABLE_SIZE 
1ce0: 6f 70 74 69 6f 6e 20 69 73 20 74 72 75 65 2c 20  option is true, 
1cf0: 74 68 65 6e 20 53 51 4c 69 74 65 20 74 72 69 65  then SQLite trie
1d00: 73 20 75 73 65 73 20 74 68 65 0a 20 20 6d 61 6c  s uses the.  mal
1d10: 6c 6f 63 5f 75 73 61 62 6c 65 5f 73 69 7a 65 28  loc_usable_size(
1d20: 29 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20 66  ) interface to f
1d30: 69 6e 64 20 74 68 65 20 73 69 7a 65 20 6f 66 20  ind the size of 
1d40: 61 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  a memory allocat
1d50: 69 6f 6e 20 6f 62 74 61 69 6e 65 64 0a 20 20 66  ion obtained.  f
1d60: 72 6f 6d 20 74 68 65 20 73 74 61 6e 64 61 72 64  rom the standard
1d70: 2d 6c 69 62 72 61 72 79 20 6d 61 6c 6c 6f 63 28  -library malloc(
1d80: 29 20 6f 72 20 72 65 61 6c 6c 6f 63 28 29 20 72  ) or realloc() r
1d90: 6f 75 74 69 6e 65 73 2e 20 20 54 68 69 73 20 6f  outines.  This o
1da0: 70 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 0a 20 20  ption is only.  
1db0: 61 70 70 6c 69 63 61 62 6c 65 20 69 66 20 74 68  applicable if th
1dc0: 65 20 73 74 61 6e 64 61 72 64 2d 6c 69 62 72 61  e standard-libra
1dd0: 72 79 20 6d 61 6c 6c 6f 63 28 29 20 69 73 20 75  ry malloc() is u
1de0: 73 65 64 2e 20 20 4f 6e 20 41 70 70 6c 65 20 73  sed.  On Apple s
1df0: 79 73 74 65 6d 73 2c 0a 20 20 22 7a 6f 6e 65 20  ystems,.  "zone 
1e00: 6d 61 6c 6c 6f 63 22 20 69 73 20 75 73 65 64 20  malloc" is used 
1e10: 69 6e 73 74 65 61 64 2c 20 61 6e 64 20 73 6f 20  instead, and so 
1e20: 74 68 69 73 20 6f 70 74 69 6f 6e 20 69 73 20 6e  this option is n
1e30: 6f 74 20 61 70 70 6c 69 63 61 62 6c 65 2e 20 20  ot applicable.  
1e40: 41 6e 64 2c 20 6f 66 0a 20 20 63 6f 75 72 73 65  And, of.  course
1e50: 2c 20 69 66 20 74 68 65 20 61 70 70 6c 69 63 61  , if the applica
1e60: 74 69 6f 6e 20 73 75 70 70 6c 69 65 73 20 69 74  tion supplies it
1e70: 73 20 6f 77 6e 20 6d 61 6c 6c 6f 63 20 69 6d 70  s own malloc imp
1e80: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 75 73 69 6e  lementation usin
1e90: 67 0a 20 20 5b 53 51 4c 49 54 45 5f 43 4f 4e 46  g.  [SQLITE_CONF
1ea0: 49 47 5f 4d 41 4c 4c 4f 43 5d 20 74 68 65 6e 20  IG_MALLOC] then 
1eb0: 74 68 69 73 20 6f 70 74 69 6f 6e 20 68 61 73 20  this option has 
1ec0: 6e 6f 20 65 66 66 65 63 74 2e 0a 20 20 3c 70 3e  no effect..  <p>
1ed0: 0a 20 20 49 66 20 74 68 65 20 48 41 56 45 5f 4d  .  If the HAVE_M
1ee0: 41 4c 4c 4f 43 5f 55 53 41 42 4c 45 5f 53 49 5a  ALLOC_USABLE_SIZ
1ef0: 45 20 6f 70 74 69 6f 6e 20 69 73 20 6f 6d 69 74  E option is omit
1f00: 74 65 64 20 6f 72 20 69 73 20 66 61 6c 73 65 2c  ted or is false,
1f10: 20 74 68 65 6e 20 53 51 4c 69 74 65 20 0a 20 20   then SQLite .  
1f20: 75 73 65 73 20 61 20 77 72 61 70 70 65 72 20 61  uses a wrapper a
1f30: 72 6f 75 6e 64 20 73 79 73 74 65 6d 20 6d 61 6c  round system mal
1f40: 6c 6f 63 28 29 20 61 6e 64 20 72 65 61 6c 6c 6f  loc() and reallo
1f50: 63 28 29 20 74 68 61 74 20 65 6e 6c 61 72 67 65  c() that enlarge
1f60: 73 20 65 61 63 68 20 61 6c 6c 6f 63 61 74 69 6f  s each allocatio
1f70: 6e 0a 20 20 62 79 20 38 20 62 79 74 65 73 20 61  n.  by 8 bytes a
1f80: 6e 64 20 77 72 69 74 65 73 20 74 68 65 20 73 69  nd writes the si
1f90: 7a 65 20 6f 66 20 74 68 65 20 61 6c 6c 6f 63 61  ze of the alloca
1fa0: 74 69 6f 6e 20 69 6e 20 74 68 65 20 69 6e 69 74  tion in the init
1fb0: 69 61 6c 20 38 20 62 79 74 65 73 2c 20 61 6e 64  ial 8 bytes, and
1fc0: 0a 20 20 74 68 65 6e 20 53 51 4c 69 74 65 20 61  .  then SQLite a
1fd0: 6c 73 6f 20 69 6d 70 6c 65 6d 65 6e 74 73 20 69  lso implements i
1fe0: 74 73 20 6f 77 6e 20 68 6f 6d 65 2d 67 72 6f 77  ts own home-grow
1ff0: 6e 20 76 65 72 73 69 6f 6e 20 6f 66 20 6d 61 6c  n version of mal
2000: 6c 6f 63 5f 75 73 61 62 6c 65 5f 73 69 7a 65 28  loc_usable_size(
2010: 29 0a 20 20 74 68 61 74 20 63 6f 6e 73 75 6c 74  ).  that consult
2020: 73 20 74 68 61 74 20 38 2d 62 79 74 65 20 70 72  s that 8-byte pr
2030: 65 66 69 78 20 74 6f 20 66 69 6e 64 20 74 68 65  efix to find the
2040: 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73 69 7a 65   allocation size
2050: 2e 20 20 54 68 69 73 20 61 70 70 72 6f 61 63 68  .  This approach
2060: 0a 20 20 77 6f 72 6b 73 20 62 75 74 20 69 74 20  .  works but it 
2070: 69 73 20 73 75 62 6f 70 74 69 6d 61 6c 2e 20 20  is suboptimal.  
2080: 41 70 70 6c 69 63 61 74 69 6f 6e 73 20 61 72 65  Applications are
2090: 20 65 6e 63 6f 75 72 61 67 65 64 20 74 6f 20 75   encouraged to u
20a0: 73 65 0a 20 20 48 41 56 45 5f 4d 41 4c 4c 4f 43  se.  HAVE_MALLOC
20b0: 5f 55 53 41 42 4c 45 5f 53 49 5a 45 20 77 68 65  _USABLE_SIZE whe
20c0: 6e 65 76 65 72 20 70 6f 73 73 69 62 6c 65 2e 0a  never possible..
20d0: 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f  }..COMPILE_OPTIO
20e0: 4e 20 7b 48 41 56 45 5f 53 54 52 43 48 52 4e 55  N {HAVE_STRCHRNU
20f0: 4c 7d 20 7b 0a 20 20 49 66 20 74 68 65 20 48 41  L} {.  If the HA
2100: 56 45 5f 53 54 52 43 48 52 4e 55 4c 20 6f 70 74  VE_STRCHRNUL opt
2110: 69 6f 6e 20 69 73 20 74 72 75 65 2c 20 74 68 65  ion is true, the
2120: 6e 20 53 51 4c 69 74 65 20 75 73 65 73 20 74 68  n SQLite uses th
2130: 65 20 73 74 72 63 68 72 6e 75 6c 28 29 20 6c 69  e strchrnul() li
2140: 62 72 61 72 79 0a 20 20 66 75 6e 63 74 69 6f 6e  brary.  function
2150: 2e 20 20 49 66 20 74 68 69 73 20 6f 70 74 69 6f  .  If this optio
2160: 6e 20 69 73 20 6d 69 73 73 69 6e 67 20 6f 72 20  n is missing or 
2170: 66 61 6c 73 65 2c 20 74 68 65 6e 20 53 51 4c 69  false, then SQLi
2180: 74 65 20 73 75 62 73 74 69 74 75 74 65 73 20 69  te substitutes i
2190: 74 73 20 6f 77 6e 0a 20 20 68 6f 6d 65 2d 67 72  ts own.  home-gr
21a0: 6f 77 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  own implementati
21b0: 6f 6e 20 6f 66 20 73 74 72 63 68 72 6e 75 6c 28  on of strchrnul(
21c0: 29 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50  )..}..COMPILE_OP
21d0: 54 49 4f 4e 20 7b 48 41 56 45 5f 55 53 4c 45 45  TION {HAVE_USLEE
21e0: 50 7d 20 7b 0a 20 20 49 66 20 74 68 65 20 48 41  P} {.  If the HA
21f0: 56 45 5f 55 53 4c 45 45 50 20 6f 70 74 69 6f 6e  VE_USLEEP option
2200: 20 69 73 20 74 72 75 65 2c 20 74 68 65 6e 20 74   is true, then t
2210: 68 65 20 64 65 66 61 75 6c 74 20 75 6e 69 78 20  he default unix 
2220: 56 46 53 20 75 73 65 73 20 74 68 65 0a 20 20 75  VFS uses the.  u
2230: 73 6c 65 65 70 28 29 20 73 79 73 74 65 6d 20 63  sleep() system c
2240: 61 6c 6c 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74  all to implement
2250: 20 74 68 65 20 78 53 6c 65 65 70 20 6d 65 74 68   the xSleep meth
2260: 6f 64 2e 20 20 49 66 20 74 68 69 73 20 6f 70 74  od.  If this opt
2270: 69 6f 6e 20 69 73 0a 20 20 75 6e 64 65 66 69 6e  ion is.  undefin
2280: 65 64 20 6f 72 20 66 61 6c 73 65 2c 20 74 68 65  ed or false, the
2290: 6e 20 78 53 6c 65 65 70 20 6f 6e 20 75 6e 69 78  n xSleep on unix
22a0: 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20   is implemented 
22b0: 75 73 69 6e 67 20 73 6c 65 65 70 28 29 20 77 68  using sleep() wh
22c0: 69 63 68 0a 20 20 6d 65 61 6e 73 20 74 68 61 74  ich.  means that
22d0: 20 5b 73 71 6c 69 74 65 33 5f 73 6c 65 65 70 28   [sqlite3_sleep(
22e0: 29 5d 20 77 69 6c 6c 20 68 61 76 65 20 61 20 6d  )] will have a m
22f0: 69 6e 69 6d 75 6d 20 77 61 69 74 20 69 6e 74 65  inimum wait inte
2300: 72 76 61 6c 20 6f 66 20 31 30 30 30 0a 20 20 6d  rval of 1000.  m
2310: 69 6c 6c 69 73 65 63 6f 6e 64 73 20 72 65 67 61  illiseconds rega
2320: 72 64 6c 65 73 73 20 6f 66 20 69 74 73 20 61 72  rdless of its ar
2330: 67 75 6d 65 6e 74 2e 20 20 0a 7d 0a 0a 43 4f 4d  gument.  .}..COM
2340: 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 48 41 56  PILE_OPTION {HAV
2350: 45 5f 55 54 49 4d 45 7d 20 7b 0a 20 20 49 66 20  E_UTIME} {.  If 
2360: 74 68 65 20 48 41 56 45 5f 55 54 49 4d 45 20 6f  the HAVE_UTIME o
2370: 70 74 69 6f 6e 20 69 73 20 74 72 75 65 2c 20 74  ption is true, t
2380: 68 65 6e 20 74 68 65 20 62 75 69 6c 74 2d 69 6e  hen the built-in
2390: 20 62 75 74 20 6e 6f 6e 2d 73 74 61 6e 64 61 72   but non-standar
23a0: 64 0a 20 20 22 75 6e 69 78 2d 64 6f 74 66 69 6c  d.  "unix-dotfil
23b0: 65 22 20 56 46 53 20 77 69 6c 6c 20 75 73 65 20  e" VFS will use 
23c0: 74 68 65 20 75 74 69 6d 65 28 29 20 73 79 73 74  the utime() syst
23d0: 65 6d 20 63 61 6c 6c 2c 20 69 6e 73 74 65 61 64  em call, instead
23e0: 20 6f 66 20 75 74 69 6d 65 73 28 29 2c 0a 20 20   of utimes(),.  
23f0: 74 6f 20 73 65 74 20 74 68 65 20 6c 61 73 74 20  to set the last 
2400: 61 63 63 65 73 73 20 74 69 6d 65 20 6f 6e 20 74  access time on t
2410: 68 65 20 6c 6f 63 6b 20 66 69 6c 65 2e 0a 7d 0a  he lock file..}.
2420: 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20  .COMPILE_OPTION 
2430: 7b 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45  {SQLITE_BYTEORDE
2440: 52 3d 3c 69 3e 28 30 7c 31 32 33 34 7c 34 33 32  R=<i>(0|1234|432
2450: 31 29 3c 2f 69 3e 7d 20 7b 0a 20 20 53 51 4c 69  1)</i>} {.  SQLi
2460: 74 65 20 6e 65 65 64 73 20 74 6f 20 6b 6e 6f 77  te needs to know
2470: 20 69 66 20 74 68 65 20 6e 61 74 69 76 65 20 62   if the native b
2480: 79 74 65 20 6f 72 64 65 72 20 6f 66 20 74 68 65  yte order of the
2490: 20 74 61 72 67 65 74 20 43 50 55 20 69 73 0a 20   target CPU is. 
24a0: 20 62 69 67 2d 65 6e 64 69 61 6e 20 6f 72 20 6c   big-endian or l
24b0: 69 74 74 6c 65 2d 65 6e 64 69 6e 67 2e 20 20 54  ittle-ending.  T
24c0: 68 65 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52  he SQLITE_BYTEOR
24d0: 44 45 52 20 70 72 65 70 72 6f 63 65 73 73 6f 72  DER preprocessor
24e0: 20 69 73 20 73 65 74 0a 20 20 74 6f 20 34 33 32   is set.  to 432
24f0: 31 20 66 6f 72 20 62 69 67 2d 65 6e 64 69 61 6e  1 for big-endian
2500: 20 6d 61 63 68 69 6e 65 73 20 61 6e 64 20 31 32   machines and 12
2510: 33 34 20 66 6f 72 20 6c 69 74 74 6c 65 2d 65 6e  34 for little-en
2520: 64 69 61 6e 20 6d 61 63 68 69 6e 65 73 2c 20 6f  dian machines, o
2530: 72 0a 20 20 69 74 20 63 61 6e 20 62 65 20 30 20  r.  it can be 0 
2540: 74 6f 20 6d 65 61 6e 20 74 68 61 74 20 74 68 65  to mean that the
2550: 20 62 79 74 65 20 6f 72 64 65 72 20 6d 75 73 74   byte order must
2560: 20 62 65 20 64 65 74 65 72 6d 69 6e 65 64 20 61   be determined a
2570: 74 20 72 75 6e 2d 74 69 6d 65 2e 0a 20 20 54 68  t run-time..  Th
2580: 65 72 65 20 61 72 65 20 23 69 66 64 65 66 73 20  ere are #ifdefs 
2590: 69 6e 20 74 68 65 20 63 6f 64 65 20 74 68 61 74  in the code that
25a0: 20 73 65 74 20 53 51 4c 49 54 45 5f 42 59 54 45   set SQLITE_BYTE
25b0: 4f 52 44 45 52 20 61 75 74 6f 6d 61 74 69 63 61  ORDER automatica
25c0: 6c 6c 79 0a 20 20 66 6f 72 20 61 6c 6c 20 63 6f  lly.  for all co
25d0: 6d 6d 6f 6e 20 70 6c 61 74 66 6f 72 6d 73 20 61  mmon platforms a
25e0: 6e 64 20 63 6f 6d 70 69 6c 65 72 73 2e 20 20 48  nd compilers.  H
25f0: 6f 77 65 76 65 72 2c 20 69 74 20 6d 61 79 20 62  owever, it may b
2600: 65 20 61 64 76 61 6e 74 61 67 65 6f 75 73 0a 20  e advantageous. 
2610: 20 74 6f 20 73 65 74 20 53 51 4c 49 54 45 5f 42   to set SQLITE_B
2620: 59 54 45 4f 52 44 45 52 20 61 70 70 72 6f 70 72  YTEORDER appropr
2630: 69 61 74 65 6c 79 20 77 68 65 6e 20 63 6f 6d 70  iately when comp
2640: 69 6c 69 6e 67 20 53 51 4c 69 74 65 20 66 6f 72  iling SQLite for
2650: 20 6f 62 73 63 75 72 65 0a 20 20 74 61 72 67 65   obscure.  targe
2660: 74 73 2e 20 20 49 66 20 74 68 65 20 74 61 72 67  ts.  If the targ
2670: 65 74 20 62 79 74 65 20 6f 72 64 65 72 20 63 61  et byte order ca
2680: 6e 6e 6f 74 20 62 65 20 64 65 74 65 72 6d 69 6e  nnot be determin
2690: 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69  ed at compile-ti
26a0: 6d 65 2c 0a 20 20 74 68 65 6e 20 53 51 4c 69 74  me,.  then SQLit
26b0: 65 20 66 61 6c 6c 73 20 62 61 63 6b 20 74 6f 20  e falls back to 
26c0: 64 6f 69 6e 67 20 72 75 6e 2d 74 69 6d 65 20 63  doing run-time c
26d0: 68 65 63 6b 73 2c 20 77 68 69 63 68 20 61 6c 77  hecks, which alw
26e0: 61 79 73 20 77 6f 72 6b 2c 20 74 68 6f 75 67 68  ays work, though
26f0: 0a 20 20 77 69 74 68 20 61 20 73 6d 61 6c 6c 20  .  with a small 
2700: 70 65 72 66 6f 72 6d 61 6e 63 65 20 70 65 6e 61  performance pena
2710: 6c 74 79 2e 0a 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c  lty..}.</tcl>..<
2720: 61 20 6e 61 6d 65 3d 22 64 65 66 61 75 6c 74 73  a name="defaults
2730: 22 3e 3c 2f 61 3e 0a 3c 68 31 3e 20 4f 70 74 69  "></a>.<h1> Opti
2740: 6f 6e 73 20 54 6f 20 53 65 74 20 44 65 66 61 75  ons To Set Defau
2750: 6c 74 20 50 61 72 61 6d 65 74 65 72 20 56 61 6c  lt Parameter Val
2760: 75 65 73 3c 2f 68 31 3e 0a 0a 3c 74 63 6c 3e 0a  ues</h1>..<tcl>.
2770: 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20  .COMPILE_OPTION 
2780: 7b 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f  {SQLITE_DEFAULT_
2790: 41 55 54 4f 4d 41 54 49 43 5f 49 4e 44 45 58 3d  AUTOMATIC_INDEX=
27a0: 3c 69 3e 26 6c 74 3b 30 20 6f 72 20 31 26 67 74  <i>&lt;0 or 1&gt
27b0: 3b 3c 2f 69 3e 7d 20 7b 0a 20 20 54 68 69 73 20  ;</i>} {.  This 
27c0: 6d 61 63 72 6f 20 64 65 74 65 72 6d 69 6e 65 73  macro determines
27d0: 20 74 68 65 20 69 6e 69 74 69 61 6c 20 73 65 74   the initial set
27e0: 74 69 6e 67 20 66 6f 72 20 5b 50 52 41 47 4d 41  ting for [PRAGMA
27f0: 20 61 75 74 6f 6d 61 74 69 63 5f 69 6e 64 65 78   automatic_index
2800: 5d 0a 20 20 66 6f 72 20 6e 65 77 6c 79 20 6f 70  ].  for newly op
2810: 65 6e 65 64 20 5b 64 61 74 61 62 61 73 65 20 63  ened [database c
2820: 6f 6e 6e 65 63 74 69 6f 6e 73 5d 2e 0a 20 20 46  onnections]..  F
2830: 6f 72 20 61 6c 6c 20 76 65 72 73 69 6f 6e 73 20  or all versions 
2840: 6f 66 20 53 51 4c 69 74 65 20 74 68 72 6f 75 67  of SQLite throug
2850: 68 20 33 2e 37 2e 31 37 2c 0a 20 20 61 75 74 6f  h 3.7.17,.  auto
2860: 6d 61 74 69 63 20 69 6e 64 69 63 65 73 20 61 72  matic indices ar
2870: 65 20 6e 6f 72 6d 61 6c 6c 79 20 65 6e 61 62 6c  e normally enabl
2880: 65 64 20 66 6f 72 20 6e 65 77 20 64 61 74 61 62  ed for new datab
2890: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20  ase connections 
28a0: 69 66 0a 20 20 74 68 69 73 20 63 6f 6d 70 69 6c  if.  this compil
28b0: 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73  e-time option is
28c0: 20 6f 6d 69 74 74 65 64 2e 0a 20 20 48 6f 77 65   omitted..  Howe
28d0: 76 65 72 2c 20 74 68 61 74 20 6d 69 67 68 74 20  ver, that might 
28e0: 63 68 61 6e 67 65 20 69 6e 20 66 75 74 75 72 65  change in future
28f0: 20 72 65 6c 65 61 73 65 73 20 6f 66 20 53 51 4c   releases of SQL
2900: 69 74 65 2e 0a 20 20 3c 70 3e 53 65 65 20 61 6c  ite..  <p>See al
2910: 73 6f 3a 20 5b 53 51 4c 49 54 45 5f 4f 4d 49 54  so: [SQLITE_OMIT
2920: 5f 41 55 54 4f 4d 41 54 49 43 5f 49 4e 44 45 58  _AUTOMATIC_INDEX
2930: 5d 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54  ].}..COMPILE_OPT
2940: 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 44 45 46 41  ION {SQLITE_DEFA
2950: 55 4c 54 5f 41 55 54 4f 56 41 43 55 55 4d 3d 3c  ULT_AUTOVACUUM=<
2960: 69 3e 26 6c 74 3b 30 20 6f 72 20 31 20 6f 72 20  i>&lt;0 or 1 or 
2970: 32 26 67 74 3b 3c 2f 69 3e 7d 20 7b 0a 20 20 54  2&gt;</i>} {.  T
2980: 68 69 73 20 6d 61 63 72 6f 20 64 65 74 65 72 6d  his macro determ
2990: 69 6e 65 73 20 69 66 20 53 51 4c 69 74 65 20 63  ines if SQLite c
29a0: 72 65 61 74 65 73 20 64 61 74 61 62 61 73 65 73  reates databases
29b0: 20 77 69 74 68 20 74 68 65 20 0a 20 20 5b 61 75   with the .  [au
29c0: 74 6f 5f 76 61 63 75 75 6d 5d 20 66 6c 61 67 20  to_vacuum] flag 
29d0: 73 65 74 20 62 79 20 64 65 66 61 75 6c 74 20 74  set by default t
29e0: 6f 20 4f 46 46 20 28 30 29 2c 20 46 55 4c 4c 20  o OFF (0), FULL 
29f0: 28 31 29 2c 20 6f 72 0a 20 20 49 4e 43 52 45 4d  (1), or.  INCREM
2a00: 45 4e 54 41 4c 20 28 32 29 2e 20 54 68 65 20 64  ENTAL (2). The d
2a10: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 69 73 20  efault value is 
2a20: 30 20 6d 65 61 6e 69 6e 67 20 74 68 61 74 20 64  0 meaning that d
2a30: 61 74 61 62 61 73 65 73 0a 20 20 61 72 65 20 63  atabases.  are c
2a40: 72 65 61 74 65 64 20 77 69 74 68 20 61 75 74 6f  reated with auto
2a50: 2d 76 61 63 75 75 6d 20 74 75 72 6e 65 64 20 6f  -vacuum turned o
2a60: 66 66 2e 0a 20 20 49 6e 20 61 6e 79 20 63 61 73  ff..  In any cas
2a70: 65 20 74 68 65 20 63 6f 6d 70 69 6c 65 2d 74 69  e the compile-ti
2a80: 6d 65 20 64 65 66 61 75 6c 74 20 6d 61 79 20 62  me default may b
2a90: 65 20 6f 76 65 72 72 69 64 64 65 6e 20 62 79 20  e overridden by 
2aa0: 74 68 65 20 0a 20 20 5b 50 52 41 47 4d 41 20 61  the .  [PRAGMA a
2ab0: 75 74 6f 5f 76 61 63 75 75 6d 5d 20 63 6f 6d 6d  uto_vacuum] comm
2ac0: 61 6e 64 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f  and..}..COMPILE_
2ad0: 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 44  OPTION {SQLITE_D
2ae0: 45 46 41 55 4c 54 5f 43 41 43 48 45 5f 53 49 5a  EFAULT_CACHE_SIZ
2af0: 45 3d 3c 69 3e 26 6c 74 3b 4e 26 67 74 3b 3c 2f  E=<i>&lt;N&gt;</
2b00: 69 3e 7d 20 7b 0a 20 20 54 68 69 73 20 6d 61 63  i>} {.  This mac
2b10: 72 6f 20 73 65 74 73 20 74 68 65 20 64 65 66 61  ro sets the defa
2b20: 75 6c 74 20 6d 61 78 69 6d 75 6d 20 73 69 7a 65  ult maximum size
2b30: 20 6f 66 20 74 68 65 20 70 61 67 65 2d 63 61 63   of the page-cac
2b40: 68 65 20 66 6f 72 20 65 61 63 68 20 61 74 74 61  he for each atta
2b50: 63 68 65 64 0a 20 20 64 61 74 61 62 61 73 65 2e  ched.  database.
2b60: 20 20 41 20 70 6f 73 69 74 69 76 65 20 76 61 6c    A positive val
2b70: 75 65 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68  ue means that th
2b80: 65 20 6c 69 6d 69 74 20 69 73 20 4e 20 70 61 67  e limit is N pag
2b90: 65 2e 20 20 49 66 20 4e 20 69 73 20 6e 65 67 61  e.  If N is nega
2ba0: 74 69 76 65 0a 20 20 74 68 61 74 20 6d 65 61 6e  tive.  that mean
2bb0: 73 20 74 6f 20 6c 69 6d 69 74 20 74 68 65 20 63  s to limit the c
2bc0: 61 63 68 65 20 73 69 7a 65 20 74 6f 20 2d 4e 2a  ache size to -N*
2bd0: 31 30 32 34 20 62 79 74 65 73 2e 0a 20 20 54 68  1024 bytes..  Th
2be0: 65 20 73 75 67 67 65 73 74 65 64 20 6d 61 78 69  e suggested maxi
2bf0: 6d 75 6d 20 63 61 63 68 65 20 73 69 7a 65 20 63  mum cache size c
2c00: 61 6e 20 62 65 20 6f 76 65 72 72 69 64 64 65 6e  an be overridden
2c10: 20 62 79 20 74 68 65 20 0a 20 20 5b 50 52 41 47   by the .  [PRAG
2c20: 4d 41 20 63 61 63 68 65 5f 73 69 7a 65 5d 20 63  MA cache_size] c
2c30: 6f 6d 6d 61 6e 64 2e 20 54 68 65 20 64 65 66 61  ommand. The defa
2c40: 75 6c 74 20 76 61 6c 75 65 20 69 73 20 2d 32 30  ult value is -20
2c50: 30 30 2c 20 77 68 69 63 68 20 74 72 61 6e 73 6c  00, which transl
2c60: 61 74 65 73 0a 20 20 69 6e 74 6f 20 61 20 6d 61  ates.  into a ma
2c70: 78 69 6d 75 6d 20 6f 66 20 32 30 34 38 30 30 30  ximum of 2048000
2c80: 20 62 79 74 65 73 20 70 65 72 20 63 61 63 68 65   bytes per cache
2c90: 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54  ..}..COMPILE_OPT
2ca0: 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 44 45 46 41  ION {SQLITE_DEFA
2cb0: 55 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 3d  ULT_FILE_FORMAT=
2cc0: 3c 69 3e 26 6c 74 3b 31 20 6f 72 20 34 26 67 74  <i>&lt;1 or 4&gt
2cd0: 3b 3c 2f 69 3e 7d 20 7b 0a 20 20 54 68 65 20 64  ;</i>} {.  The d
2ce0: 65 66 61 75 6c 74 20 5b 73 63 68 65 6d 61 20 66  efault [schema f
2cf0: 6f 72 6d 61 74 20 6e 75 6d 62 65 72 5d 20 75 73  ormat number] us
2d00: 65 64 20 62 79 20 53 51 4c 69 74 65 20 77 68 65  ed by SQLite whe
2d10: 6e 20 63 72 65 61 74 69 6e 67 0a 20 20 6e 65 77  n creating.  new
2d20: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73 20   database files 
2d30: 69 73 20 73 65 74 20 62 79 20 74 68 69 73 20 6d  is set by this m
2d40: 61 63 72 6f 2e 20 20 54 68 65 20 73 63 68 65 6d  acro.  The schem
2d50: 61 20 66 6f 72 6d 61 74 73 20 61 72 65 20 61 6c  a formats are al
2d60: 6c 0a 20 20 76 65 72 79 20 73 69 6d 69 6c 61 72  l.  very similar
2d70: 2e 20 20 54 68 65 20 64 69 66 66 65 72 65 6e 63  .  The differenc
2d80: 65 20 62 65 74 77 65 65 6e 20 66 6f 72 6d 61 74  e between format
2d90: 73 20 31 20 61 6e 64 20 34 20 69 73 20 74 68 61  s 1 and 4 is tha
2da0: 74 20 66 6f 72 6d 61 74 0a 20 20 34 20 75 6e 64  t format.  4 und
2db0: 65 72 73 74 61 6e 64 73 20 5b 64 65 73 63 65 6e  erstands [descen
2dc0: 64 69 6e 67 20 69 6e 64 69 63 65 73 5d 20 61 6e  ding indices] an
2dd0: 64 20 68 61 73 20 61 20 74 69 67 68 74 65 72 20  d has a tighter 
2de0: 65 6e 63 6f 64 69 6e 67 20 66 6f 72 0a 20 20 62  encoding for.  b
2df0: 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 73 2e 0a 0a  oolean values...
2e00: 20 20 41 6c 6c 20 76 65 72 73 69 6f 6e 73 20 6f    All versions o
2e10: 66 20 53 51 4c 69 74 65 20 73 69 6e 63 65 20 33  f SQLite since 3
2e20: 2e 33 2e 30 20 28 32 30 30 36 2d 30 31 2d 31 30  .3.0 (2006-01-10
2e30: 29 0a 20 20 63 61 6e 20 72 65 61 64 20 61 6e 64  ).  can read and
2e40: 20 77 72 69 74 65 20 61 6e 79 20 73 63 68 65 6d   write any schem
2e50: 61 20 66 6f 72 6d 61 74 0a 20 20 62 65 74 77 65  a format.  betwe
2e60: 65 6e 20 31 20 61 6e 64 20 34 2e 20 20 42 75 74  en 1 and 4.  But
2e70: 20 6f 6c 64 65 72 20 76 65 72 73 69 6f 6e 73 20   older versions 
2e80: 6f 66 20 53 51 4c 69 74 65 20 6d 69 67 68 74 20  of SQLite might 
2e90: 6e 6f 74 20 62 65 20 61 62 6c 65 20 74 6f 0a 20  not be able to. 
2ea0: 20 72 65 61 64 20 66 6f 72 6d 61 74 73 20 67 72   read formats gr
2eb0: 65 61 74 65 72 20 74 68 61 6e 20 31 2e 20 20 53  eater than 1.  S
2ec0: 6f 20 74 68 61 74 20 6f 6c 64 65 72 20 76 65 72  o that older ver
2ed0: 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20  sions of SQLite 
2ee0: 77 69 6c 6c 0a 20 20 62 65 20 61 62 6c 65 20 74  will.  be able t
2ef0: 6f 20 72 65 61 64 20 61 6e 64 20 77 72 69 74 65  o read and write
2f00: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73 20   database files 
2f10: 63 72 65 61 74 65 64 20 62 79 20 6e 65 77 65 72  created by newer
2f20: 20 76 65 72 73 69 6f 6e 73 0a 20 20 6f 66 20 53   versions.  of S
2f30: 51 4c 69 74 65 2c 20 74 68 65 20 64 65 66 61 75  QLite, the defau
2f40: 6c 74 20 73 63 68 65 6d 61 20 66 6f 72 6d 61 74  lt schema format
2f50: 20 77 61 73 20 73 65 74 20 74 6f 20 31 20 66 6f   was set to 1 fo
2f60: 72 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e  r SQLite version
2f70: 73 0a 20 20 74 68 72 6f 75 67 68 20 33 2e 37 2e  s.  through 3.7.
2f80: 39 20 28 32 30 31 31 2d 31 31 2d 30 31 29 2e 20  9 (2011-11-01). 
2f90: 20 42 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20   Beginning with 
2fa0: 0a 20 20 5b 76 65 72 73 69 6f 6e 20 33 2e 37 2e  .  [version 3.7.
2fb0: 31 30 5d 20 28 5b 64 61 74 65 6f 66 3a 33 2e 37  10] ([dateof:3.7
2fc0: 2e 31 30 5d 29 2c 20 74 68 65 20 64 65 66 61 75  .10]), the defau
2fd0: 6c 74 0a 20 20 73 63 68 65 6d 61 20 66 6f 72 6d  lt.  schema form
2fe0: 61 74 20 69 73 20 34 2e 0a 0a 20 20 54 68 65 20  at is 4...  The 
2ff0: 73 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 6e 75  schema format nu
3000: 6d 62 65 72 20 66 6f 72 20 61 20 6e 65 77 20 64  mber for a new d
3010: 61 74 61 62 61 73 65 20 63 61 6e 20 62 65 20 73  atabase can be s
3020: 65 74 20 61 74 20 72 75 6e 74 69 6d 65 20 75 73  et at runtime us
3030: 69 6e 67 0a 20 20 74 68 65 20 5b 50 52 41 47 4d  ing.  the [PRAGM
3040: 41 20 6c 65 67 61 63 79 5f 66 69 6c 65 5f 66 6f  A legacy_file_fo
3050: 72 6d 61 74 5d 20 63 6f 6d 6d 61 6e 64 2e 0a 7d  rmat] command..}
3060: 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e  ..COMPILE_OPTION
3070: 20 7b 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54   {SQLITE_DEFAULT
3080: 5f 46 49 4c 45 5f 50 45 52 4d 49 53 53 49 4f 4e  _FILE_PERMISSION
3090: 53 3d 3c 69 3e 4e 3c 2f 69 3e 7d 20 7b 0a 20 20  S=<i>N</i>} {.  
30a0: 54 68 65 20 64 65 66 61 75 6c 74 20 6e 75 6d 65  The default nume
30b0: 72 69 63 20 66 69 6c 65 20 70 65 72 6d 69 73 73  ric file permiss
30c0: 69 6f 6e 73 20 66 6f 72 20 6e 65 77 6c 79 20 63  ions for newly c
30d0: 72 65 61 74 65 64 20 64 61 74 61 62 61 73 65 20  reated database 
30e0: 66 69 6c 65 73 0a 20 20 75 6e 64 65 72 20 75 6e  files.  under un
30f0: 69 78 2e 20 20 49 66 20 6e 6f 74 20 73 70 65 63  ix.  If not spec
3100: 69 66 69 65 64 2c 20 74 68 65 20 64 65 66 61 75  ified, the defau
3110: 6c 74 20 69 73 20 30 36 34 34 20 77 68 69 63 68  lt is 0644 which
3120: 20 6d 65 61 6e 73 20 74 68 61 74 0a 20 20 74 68   means that.  th
3130: 65 20 66 69 6c 65 73 20 69 73 20 67 6c 6f 62 61  e files is globa
3140: 6c 6c 79 20 72 65 61 64 61 62 6c 65 20 62 75 74  lly readable but
3150: 20 6f 6e 6c 79 20 77 72 69 74 61 62 6c 65 20 62   only writable b
3160: 79 20 74 68 65 20 63 72 65 61 74 6f 72 2e 0a 7d  y the creator..}
3170: 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e  ..COMPILE_OPTION
3180: 20 7b 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54   {SQLITE_DEFAULT
3190: 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 53 3d 3c 69  _FOREIGN_KEYS=<i
31a0: 3e 26 6c 74 3b 30 20 6f 72 20 31 26 67 74 3b 3c  >&lt;0 or 1&gt;<
31b0: 2f 69 3e 7d 20 7b 0a 20 20 54 68 69 73 20 6d 61  /i>} {.  This ma
31c0: 63 72 6f 20 64 65 74 65 72 6d 69 6e 65 73 20 77  cro determines w
31d0: 68 65 74 68 65 72 20 65 6e 66 6f 72 63 65 6d 65  hether enforceme
31e0: 6e 74 20 6f 66 20 0a 20 20 5b 66 6f 72 65 69 67  nt of .  [foreig
31f0: 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74  n key constraint
3200: 73 5d 20 69 73 20 65 6e 61 62 6c 65 64 20 6f 72  s] is enabled or
3210: 20 64 69 73 61 62 6c 65 64 20 62 79 20 64 65 66   disabled by def
3220: 61 75 6c 74 20 66 6f 72 0a 20 20 6e 65 77 20 64  ault for.  new d
3230: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
3240: 6f 6e 73 2e 20 20 45 61 63 68 20 64 61 74 61 62  ons.  Each datab
3250: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 63  ase connection c
3260: 61 6e 20 61 6c 77 61 79 73 20 74 75 72 6e 0a 20  an always turn. 
3270: 20 65 6e 66 6f 72 63 65 6d 65 6e 74 20 6f 66 20   enforcement of 
3280: 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73  foreign key cons
3290: 74 72 61 69 6e 74 73 20 6f 6e 20 61 6e 64 20 6f  traints on and o
32a0: 66 66 20 61 6e 64 20 72 75 6e 2d 74 69 6d 65 20  ff and run-time 
32b0: 75 73 69 6e 67 0a 20 20 74 68 65 20 5b 66 6f 72  using.  the [for
32c0: 65 69 67 6e 5f 6b 65 79 73 20 70 72 61 67 6d 61  eign_keys pragma
32d0: 5d 2e 20 20 45 6e 66 6f 72 63 65 6d 65 6e 74 20  ].  Enforcement 
32e0: 6f 66 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  of foreign key c
32f0: 6f 6e 73 74 72 61 69 6e 74 73 0a 20 20 69 73 20  onstraints.  is 
3300: 6e 6f 72 6d 61 6c 6c 79 20 6f 66 66 20 62 79 20  normally off by 
3310: 64 65 66 61 75 6c 74 2c 20 62 75 74 20 69 66 20  default, but if 
3320: 74 68 69 73 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  this compile-tim
3330: 65 20 70 61 72 61 6d 65 74 65 72 20 69 73 0a 20  e parameter is. 
3340: 20 73 65 74 20 74 6f 20 31 2c 20 65 6e 66 6f 72   set to 1, enfor
3350: 63 65 6d 65 6e 74 20 6f 66 20 66 6f 72 65 69 67  cement of foreig
3360: 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74  n key constraint
3370: 73 20 77 69 6c 6c 20 62 65 20 6f 6e 20 62 79 20  s will be on by 
3380: 64 65 66 61 75 6c 74 2e 0a 7d 0a 0a 43 4f 4d 50  default..}..COMP
3390: 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49  ILE_OPTION {SQLI
33a0: 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f  TE_DEFAULT_MMAP_
33b0: 53 49 5a 45 3d 3c 69 3e 4e 3c 2f 69 3e 7d 20 7b  SIZE=<i>N</i>} {
33c0: 0a 20 20 54 68 69 73 20 6d 61 63 72 6f 20 73 65  .  This macro se
33d0: 74 73 20 74 68 65 20 64 65 66 61 75 6c 74 20 6c  ts the default l
33e0: 69 6d 69 74 20 6f 6e 20 74 68 65 20 61 6d 6f 75  imit on the amou
33f0: 6e 74 20 6f 66 20 6d 65 6d 6f 72 79 20 74 68 61  nt of memory tha
3400: 74 0a 20 20 77 69 6c 6c 20 62 65 20 75 73 65 64  t.  will be used
3410: 20 66 6f 72 20 6d 65 6d 6f 72 79 2d 6d 61 70 70   for memory-mapp
3420: 65 64 20 49 2f 4f 0a 20 20 66 6f 72 20 65 61 63  ed I/O.  for eac
3430: 68 20 6f 70 65 6e 20 64 61 74 61 62 61 73 65 20  h open database 
3440: 66 69 6c 65 2e 20 20 49 66 20 74 68 65 20 3c 69  file.  If the <i
3450: 3e 4e 3c 2f 69 3e 0a 20 20 69 73 20 7a 65 72 6f  >N</i>.  is zero
3460: 2c 20 74 68 65 6e 20 6d 65 6d 6f 72 79 20 6d 61  , then memory ma
3470: 70 70 65 64 20 49 2f 4f 20 69 73 20 64 69 73 61  pped I/O is disa
3480: 62 6c 65 64 20 62 79 20 64 65 66 61 75 6c 74 2e  bled by default.
3490: 20 20 54 68 69 73 0a 20 20 63 6f 6d 70 69 6c 65    This.  compile
34a0: 2d 74 69 6d 65 20 6c 69 6d 69 74 20 61 6e 64 20  -time limit and 
34b0: 74 68 65 20 5b 53 51 4c 49 54 45 5f 4d 41 58 5f  the [SQLITE_MAX_
34c0: 4d 4d 41 50 5f 53 49 5a 45 5d 20 63 61 6e 20 62  MMAP_SIZE] can b
34d0: 65 20 6d 6f 64 69 66 69 65 64 20 0a 20 20 61 74  e modified .  at
34e0: 20 73 74 61 72 74 2d 74 69 6d 65 20 75 73 69 6e   start-time usin
34f0: 67 20 74 68 65 0a 20 20 5b 73 71 6c 69 74 65 33  g the.  [sqlite3
3500: 5f 63 6f 6e 66 69 67 5d 28 5b 53 51 4c 49 54 45  _config]([SQLITE
3510: 5f 43 4f 4e 46 49 47 5f 4d 4d 41 50 5f 53 49 5a  _CONFIG_MMAP_SIZ
3520: 45 5d 29 20 63 61 6c 6c 2c 20 6f 72 20 61 74 20  E]) call, or at 
3530: 72 75 6e 2d 74 69 6d 65 0a 20 20 75 73 69 6e 67  run-time.  using
3540: 20 74 68 65 20 5b 6d 6d 61 70 5f 73 69 7a 65 20   the [mmap_size 
3550: 70 72 61 67 6d 61 5d 2e 0a 7d 0a 0a 43 4f 4d 50  pragma]..}..COMP
3560: 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49  ILE_OPTION {SQLI
3570: 54 45 5f 44 45 46 41 55 4c 54 5f 4a 4f 55 52 4e  TE_DEFAULT_JOURN
3580: 41 4c 5f 53 49 5a 45 5f 4c 49 4d 49 54 3d 3c 69  AL_SIZE_LIMIT=<i
3590: 3e 26 6c 74 3b 62 79 74 65 73 26 67 74 3b 3c 2f  >&lt;bytes&gt;</
35a0: 69 3e 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70 74  i>} {.  This opt
35b0: 69 6f 6e 20 73 65 74 73 20 74 68 65 20 73 69 7a  ion sets the siz
35c0: 65 20 6c 69 6d 69 74 20 6f 6e 20 5b 72 6f 6c 6c  e limit on [roll
35d0: 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 5d 20 66 69  back journal] fi
35e0: 6c 65 73 20 69 6e 0a 20 20 5b 6a 6f 75 72 6e 61  les in.  [journa
35f0: 6c 5f 6d 6f 64 65 20 70 72 61 67 6d 61 20 7c 20  l_mode pragma | 
3600: 70 65 72 73 69 73 74 65 6e 74 20 6a 6f 75 72 6e  persistent journ
3610: 61 6c 20 6d 6f 64 65 5d 20 61 6e 64 0a 20 20 5b  al mode] and.  [
3620: 6c 6f 63 6b 69 6e 67 5f 6d 6f 64 65 20 7c 20 65  locking_mode | e
3630: 78 63 6c 75 73 69 76 65 20 6c 6f 63 6b 69 6e 67  xclusive locking
3640: 20 6d 6f 64 65 5d 20 61 6e 64 20 6f 6e 20 74 68   mode] and on th
3650: 65 20 73 69 7a 65 20 6f 66 20 74 68 65 0a 20 20  e size of the.  
3660: 77 72 69 74 65 2d 61 68 65 61 64 20 6c 6f 67 20  write-ahead log 
3670: 66 69 6c 65 20 69 6e 20 5b 57 41 4c 20 6d 6f 64  file in [WAL mod
3680: 65 5d 2e 20 57 68 65 6e 20 74 68 69 73 20 0a 20  e]. When this . 
3690: 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70   compile-time op
36a0: 74 69 6f 6e 20 69 73 20 6f 6d 69 74 74 65 64 20  tion is omitted 
36b0: 74 68 65 72 65 20 69 73 20 6e 6f 20 75 70 70 65  there is no uppe
36c0: 72 20 62 6f 75 6e 64 20 6f 6e 20 74 68 65 0a 20  r bound on the. 
36d0: 20 73 69 7a 65 20 6f 66 20 74 68 65 20 72 6f 6c   size of the rol
36e0: 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 73 20 6f  lback journals o
36f0: 72 20 77 72 69 74 65 2d 61 68 65 61 64 20 6c 6f  r write-ahead lo
3700: 67 73 2e 20 20 0a 20 20 54 68 65 20 6a 6f 75 72  gs.  .  The jour
3710: 6e 61 6c 20 66 69 6c 65 20 73 69 7a 65 20 6c 69  nal file size li
3720: 6d 69 74 0a 20 20 63 61 6e 20 62 65 20 63 68 61  mit.  can be cha
3730: 6e 67 65 64 20 61 74 20 72 75 6e 2d 74 69 6d 65  nged at run-time
3740: 20 75 73 69 6e 67 20 74 68 65 20 5b 6a 6f 75 72   using the [jour
3750: 6e 61 6c 5f 73 69 7a 65 5f 6c 69 6d 69 74 20 70  nal_size_limit p
3760: 72 61 67 6d 61 5d 2e 0a 7d 0a 0a 43 4f 4d 50 49  ragma]..}..COMPI
3770: 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54  LE_OPTION {SQLIT
3780: 45 5f 44 45 46 41 55 4c 54 5f 4c 4f 43 4b 49 4e  E_DEFAULT_LOCKIN
3790: 47 5f 4d 4f 44 45 3d 3c 69 3e 26 6c 74 3b 31 20  G_MODE=<i>&lt;1 
37a0: 6f 72 20 30 26 67 74 3b 3c 2f 69 3e 7d 20 7b 0a  or 0&gt;</i>} {.
37b0: 20 20 49 66 20 73 65 74 20 74 6f 20 31 2c 20 74    If set to 1, t
37c0: 68 65 6e 20 74 68 65 20 64 65 66 61 75 6c 74 20  hen the default 
37d0: 5b 6c 6f 63 6b 69 6e 67 5f 6d 6f 64 65 5d 20 69  [locking_mode] i
37e0: 73 20 73 65 74 20 74 6f 20 45 58 43 4c 55 53 49  s set to EXCLUSI
37f0: 56 45 2e 0a 20 20 49 66 20 6f 6d 69 74 74 65 64  VE..  If omitted
3800: 20 6f 72 20 73 65 74 20 74 6f 20 30 20 74 68 65   or set to 0 the
3810: 6e 20 74 68 65 20 64 65 66 61 75 6c 74 20 5b 6c  n the default [l
3820: 6f 63 6b 69 6e 67 5f 6d 6f 64 65 5d 20 69 73 20  ocking_mode] is 
3830: 4e 4f 52 4d 41 4c 2e 0a 7d 0a 0a 43 4f 4d 50 49  NORMAL..}..COMPI
3840: 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54  LE_OPTION {SQLIT
3850: 45 5f 44 45 46 41 55 4c 54 5f 4c 4f 4f 4b 41 53  E_DEFAULT_LOOKAS
3860: 49 44 45 3d 3c 69 3e 53 5a 2c 4e 3c 2f 69 3e 7d  IDE=<i>SZ,N</i>}
3870: 20 7b 0a 20 20 53 65 74 73 20 74 68 65 20 64 65   {.  Sets the de
3880: 66 61 75 6c 74 20 73 69 7a 65 20 6f 66 20 74 68  fault size of th
3890: 65 20 5b 6c 6f 6f 6b 61 73 69 64 65 20 6d 65 6d  e [lookaside mem
38a0: 6f 72 79 20 61 6c 6c 6f 63 61 74 6f 72 5d 20 6d  ory allocator] m
38b0: 65 6d 6f 72 79 20 70 6f 6f 6c 0a 20 20 74 6f 20  emory pool.  to 
38c0: 4e 20 65 6e 74 72 69 65 73 20 6f 66 20 53 5a 20  N entries of SZ 
38d0: 62 79 74 65 73 20 65 61 63 68 2e 20 20 54 68 69  bytes each.  Thi
38e0: 73 20 73 65 74 74 69 6e 67 20 63 61 6e 20 62 65  s setting can be
38f0: 20 6d 6f 64 69 66 69 65 64 20 61 74 0a 20 20 73   modified at.  s
3900: 74 61 72 74 2d 74 69 6d 65 20 75 73 69 6e 67 20  tart-time using 
3910: 5b 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 5d  [sqlite3_config]
3920: 28 5b 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f  ([SQLITE_CONFIG_
3930: 4c 4f 4f 4b 41 53 49 44 45 5d 29 20 61 6e 64 2f  LOOKASIDE]) and/
3940: 6f 72 0a 20 20 61 73 20 65 61 63 68 20 5b 64 61  or.  as each [da
3950: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
3960: 6e 5d 20 69 73 20 6f 70 65 6e 65 64 20 75 73 69  n] is opened usi
3970: 6e 67 0a 20 20 5b 73 71 6c 69 74 65 33 5f 64 62  ng.  [sqlite3_db
3980: 5f 63 6f 6e 66 69 67 5d 28 64 62 2c 20 5b 53 51  _config](db, [SQ
3990: 4c 49 54 45 5f 44 42 43 4f 4e 46 49 47 5f 4c 4f  LITE_DBCONFIG_LO
39a0: 4f 4b 41 53 49 44 45 5d 29 2e 0a 7d 0a 0a 43 4f  OKASIDE])..}..CO
39b0: 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51  MPILE_OPTION {SQ
39c0: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d  LITE_DEFAULT_MEM
39d0: 53 54 41 54 55 53 3d 3c 69 3e 26 6c 74 3b 31 20  STATUS=<i>&lt;1 
39e0: 6f 72 20 30 26 67 74 3b 3c 2f 69 3e 7d 20 7b 0a  or 0&gt;</i>} {.
39f0: 20 20 54 68 69 73 20 6d 61 63 72 6f 20 69 73 20    This macro is 
3a00: 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e  used to determin
3a10: 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  e whether or not
3a20: 20 74 68 65 20 66 65 61 74 75 72 65 73 20 65 6e   the features en
3a30: 61 62 6c 65 64 20 61 6e 64 0a 20 20 64 69 73 61  abled and.  disa
3a40: 62 6c 65 64 20 75 73 69 6e 67 20 74 68 65 20 53  bled using the S
3a50: 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4d 45 4d  QLITE_CONFIG_MEM
3a60: 53 54 41 54 55 53 20 61 72 67 75 6d 65 6e 74 20  STATUS argument 
3a70: 74 6f 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6e 66  to [sqlite3_conf
3a80: 69 67 28 29 5d 0a 20 20 61 72 65 20 61 76 61 69  ig()].  are avai
3a90: 6c 61 62 6c 65 20 62 79 20 64 65 66 61 75 6c 74  lable by default
3aa0: 2e 20 54 68 65 20 64 65 66 61 75 6c 74 20 76 61  . The default va
3ab0: 6c 75 65 20 69 73 20 31 20 28 5b 53 51 4c 49 54  lue is 1 ([SQLIT
3ac0: 45 5f 43 4f 4e 46 49 47 5f 4d 45 4d 53 54 41 54  E_CONFIG_MEMSTAT
3ad0: 55 53 5d 0a 20 20 72 65 6c 61 74 65 64 20 66 65  US].  related fe
3ae0: 61 74 75 72 65 73 20 65 6e 61 62 6c 65 64 29 2e  atures enabled).
3af0: 0a 20 20 3c 70 3e 0a 20 20 54 68 65 20 5b 73 71  .  <p>.  The [sq
3b00: 6c 69 74 65 33 5f 6d 65 6d 6f 72 79 5f 75 73 65  lite3_memory_use
3b10: 64 28 29 5d 20 61 6e 64 20 5b 73 71 6c 69 74 65  d()] and [sqlite
3b20: 33 5f 6d 65 6d 6f 72 79 5f 68 69 67 68 77 61 74  3_memory_highwat
3b30: 65 72 28 29 5d 20 69 6e 74 65 72 66 61 63 65 73  er()] interfaces
3b40: 2c 0a 20 20 74 68 65 20 5b 73 71 6c 69 74 65 33  ,.  the [sqlite3
3b50: 5f 73 74 61 74 75 73 36 34 5d 28 5b 53 51 4c 49  _status64]([SQLI
3b60: 54 45 5f 53 54 41 54 55 53 5f 4d 45 4d 4f 52 59  TE_STATUS_MEMORY
3b70: 5f 55 53 45 44 5d 29 20 69 6e 74 65 72 66 61 63  _USED]) interfac
3b80: 65 2c 0a 20 20 61 6e 64 20 74 68 65 20 5b 53 51  e,.  and the [SQ
3b90: 4c 49 54 45 5f 4d 41 58 5f 4d 45 4d 4f 52 59 5d  LITE_MAX_MEMORY]
3ba0: 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70   compile-time op
3bb0: 74 69 6f 6e 20 61 72 65 20 61 6c 6c 20 6e 6f 6e  tion are all non
3bc0: 2d 66 75 6e 63 74 69 6f 6e 61 6c 0a 20 20 77 68  -functional.  wh
3bd0: 65 6e 20 6d 65 6d 6f 72 79 20 75 73 61 67 65 20  en memory usage 
3be0: 74 72 61 63 6b 69 6e 67 20 69 73 20 64 69 73 61  tracking is disa
3bf0: 62 6c 65 64 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45  bled..}..COMPILE
3c00: 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f  _OPTION {SQLITE_
3c10: 44 45 46 41 55 4c 54 5f 50 43 41 43 48 45 5f 49  DEFAULT_PCACHE_I
3c20: 4e 49 54 53 5a 3d 3c 69 3e 4e 3c 2f 69 3e 7d 20  NITSZ=<i>N</i>} 
3c30: 7b 0a 20 20 54 68 69 73 20 6d 61 63 72 6f 20 64  {.  This macro d
3c40: 65 74 65 72 6d 69 6e 65 73 20 74 68 65 20 6e 75  etermines the nu
3c50: 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e  mber of pages in
3c60: 69 74 69 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65  itially allocate
3c70: 64 20 62 79 20 74 68 65 20 0a 20 20 70 61 67 65  d by the .  page
3c80: 20 63 61 63 68 65 20 6d 6f 64 75 6c 65 20 77 68   cache module wh
3c90: 65 6e 20 5b 53 51 4c 49 54 45 5f 43 4f 4e 46 49  en [SQLITE_CONFI
3ca0: 47 5f 50 41 47 45 43 41 43 48 45 5d 20 63 6f 6e  G_PAGECACHE] con
3cb0: 66 69 67 75 72 61 74 69 6f 6e 20 6f 70 74 69 6f  figuration optio
3cc0: 6e 20 69 73 0a 20 20 6e 6f 74 20 75 73 65 20 61  n is.  not use a
3cd0: 6e 64 20 6d 65 6d 6f 72 79 20 66 6f 72 20 74 68  nd memory for th
3ce0: 65 20 70 61 67 65 20 63 61 63 68 65 20 69 73 20  e page cache is 
3cf0: 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 5b 73  obtained from [s
3d00: 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 29 5d  qlite3_malloc()]
3d10: 0a 20 20 69 6e 73 74 65 61 64 2e 20 20 54 68 65  .  instead.  The
3d20: 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   number of pages
3d30: 20 73 65 74 20 62 79 20 74 68 69 73 20 6d 61 63   set by this mac
3d40: 72 6f 20 61 72 65 20 61 6c 6c 6f 63 61 74 65 64  ro are allocated
3d50: 20 69 6e 20 61 20 73 69 6e 67 6c 65 0a 20 20 61   in a single.  a
3d60: 6c 6c 6f 63 61 74 69 6f 6e 2c 20 77 68 69 63 68  llocation, which
3d70: 20 72 65 64 75 63 65 73 20 74 68 65 20 6c 6f 61   reduces the loa
3d80: 64 20 6f 6e 20 74 68 65 20 6d 65 6d 6f 72 79 20  d on the memory 
3d90: 61 6c 6c 6f 63 61 74 6f 72 2e 0a 7d 0a 0a 43 4f  allocator..}..CO
3da0: 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51  MPILE_OPTION {SQ
3db0: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 50 41 47  LITE_DEFAULT_PAG
3dc0: 45 5f 53 49 5a 45 3d 3c 69 3e 26 6c 74 3b 62 79  E_SIZE=<i>&lt;by
3dd0: 74 65 73 26 67 74 3b 3c 2f 69 3e 7d 20 7b 0a 20  tes&gt;</i>} {. 
3de0: 20 54 68 69 73 20 6d 61 63 72 6f 20 69 73 20 75   This macro is u
3df0: 73 65 64 20 74 6f 20 73 65 74 20 74 68 65 20 64  sed to set the d
3e00: 65 66 61 75 6c 74 20 70 61 67 65 2d 73 69 7a 65  efault page-size
3e10: 20 75 73 65 64 20 77 68 65 6e 20 61 0a 20 20 64   used when a.  d
3e20: 61 74 61 62 61 73 65 20 69 73 20 63 72 65 61 74  atabase is creat
3e30: 65 64 2e 20 54 68 65 20 76 61 6c 75 65 20 61 73  ed. The value as
3e40: 73 69 67 6e 65 64 20 6d 75 73 74 20 62 65 20 61  signed must be a
3e50: 20 70 6f 77 65 72 20 6f 66 20 32 2e 20 54 68 65   power of 2. The
3e60: 0a 20 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65  .  default value
3e70: 20 69 73 20 34 30 39 36 2e 20 54 68 65 20 63 6f   is 4096. The co
3e80: 6d 70 69 6c 65 2d 74 69 6d 65 20 64 65 66 61 75  mpile-time defau
3e90: 6c 74 20 6d 61 79 20 62 65 20 6f 76 65 72 72 69  lt may be overri
3ea0: 64 64 65 6e 20 61 74 20 0a 20 20 72 75 6e 74 69  dden at .  runti
3eb0: 6d 65 20 62 79 20 74 68 65 20 5b 50 52 41 47 4d  me by the [PRAGM
3ec0: 41 20 70 61 67 65 5f 73 69 7a 65 5d 20 63 6f 6d  A page_size] com
3ed0: 6d 61 6e 64 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45  mand..}..COMPILE
3ee0: 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f  _OPTION {SQLITE_
3ef0: 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e  DEFAULT_SYNCHRON
3f00: 4f 55 53 3d 3c 69 3e 26 6c 74 3b 30 2d 33 26 67  OUS=<i>&lt;0-3&g
3f10: 74 3b 3c 2f 69 3e 7d 20 7b 0a 20 20 54 68 69 73  t;</i>} {.  This
3f20: 20 6d 61 63 72 6f 20 64 65 74 65 72 6d 69 6e 65   macro determine
3f30: 73 20 74 68 65 20 64 65 66 61 75 6c 74 20 76 61  s the default va
3f40: 6c 75 65 20 6f 66 20 74 68 65 0a 20 20 5b 50 52  lue of the.  [PR
3f50: 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73  AGMA synchronous
3f60: 5d 20 73 65 74 74 69 6e 67 2e 20 20 49 66 20 6e  ] setting.  If n
3f70: 6f 74 20 6f 76 65 72 72 69 64 64 65 6e 20 61 74  ot overridden at
3f80: 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 2c 0a 20   compile-time,. 
3f90: 20 74 68 65 20 64 65 66 61 75 6c 74 20 73 65 74   the default set
3fa0: 74 69 6e 67 20 69 73 20 32 20 28 46 55 4c 4c 29  ting is 2 (FULL)
3fb0: 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54  ..}..COMPILE_OPT
3fc0: 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 44 45 46 41  ION {SQLITE_DEFA
3fd0: 55 4c 54 5f 57 41 4c 5f 53 59 4e 43 48 52 4f 4e  ULT_WAL_SYNCHRON
3fe0: 4f 55 53 3d 3c 69 3e 26 6c 74 3b 30 2d 33 26 67  OUS=<i>&lt;0-3&g
3ff0: 74 3b 3c 2f 69 3e 7d 20 7b 0a 20 20 54 68 69 73  t;</i>} {.  This
4000: 20 6d 61 63 72 6f 20 64 65 74 65 72 6d 69 6e 65   macro determine
4010: 73 20 74 68 65 20 64 65 66 61 75 6c 74 20 76 61  s the default va
4020: 6c 75 65 20 6f 66 20 74 68 65 0a 20 20 5b 50 52  lue of the.  [PR
4030: 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73  AGMA synchronous
4040: 5d 20 73 65 74 74 69 6e 67 20 66 6f 72 20 64 61  ] setting for da
4050: 74 61 62 61 73 65 20 66 69 6c 65 73 20 74 68 61  tabase files tha
4060: 74 20 6f 70 65 6e 20 69 6e 0a 20 20 5b 57 41 4c  t open in.  [WAL
4070: 20 6d 6f 64 65 5d 2e 20 20 49 66 20 6e 6f 74 20   mode].  If not 
4080: 6f 76 65 72 72 69 64 64 65 6e 20 61 74 20 63 6f  overridden at co
4090: 6d 70 69 6c 65 2d 74 69 6d 65 2c 20 74 68 69 73  mpile-time, this
40a0: 20 76 61 6c 75 65 20 69 73 20 74 68 65 0a 20 20   value is the.  
40b0: 73 61 6d 65 20 61 73 20 5b 53 51 4c 49 54 45 5f  same as [SQLITE_
40c0: 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e  DEFAULT_SYNCHRON
40d0: 4f 55 53 5d 2e 0a 20 20 3c 70 3e 0a 20 20 49 66  OUS]..  <p>.  If
40e0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
40f0: 57 41 4c 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20  WAL_SYNCHRONOUS 
4100: 64 69 66 66 65 72 73 20 66 72 6f 6d 20 53 51 4c  differs from SQL
4110: 49 54 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43  ITE_DEFAULT_SYNC
4120: 48 52 4f 4e 4f 55 53 2c 0a 20 20 61 6e 64 20 69  HRONOUS,.  and i
4130: 66 20 74 68 65 20 61 70 70 6c 69 63 61 74 69 6f  f the applicatio
4140: 6e 20 68 61 73 20 6e 6f 74 20 6d 6f 64 69 66 69  n has not modifi
4150: 65 64 20 74 68 65 20 73 79 6e 63 68 72 6f 6e 6f  ed the synchrono
4160: 75 73 20 73 65 74 74 69 6e 67 20 66 6f 72 0a 20  us setting for. 
4170: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
4180: 6c 65 20 75 73 69 6e 67 20 74 68 65 20 5b 50 52  le using the [PR
4190: 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73  AGMA synchronous
41a0: 5d 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65  ] statement, the
41b0: 6e 0a 20 20 74 68 65 20 73 79 6e 63 68 72 6f 6e  n.  the synchron
41c0: 6f 75 73 20 73 65 74 74 69 6e 67 20 69 73 20 63  ous setting is c
41d0: 68 61 6e 67 65 64 20 74 6f 20 76 61 6c 75 65 20  hanged to value 
41e0: 64 65 66 69 6e 65 64 20 62 79 0a 20 20 53 51 4c  defined by.  SQL
41f0: 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 41 4c 5f  ITE_DEFAULT_WAL_
4200: 53 59 4e 43 48 52 4f 4e 4f 55 53 20 77 68 65 6e  SYNCHRONOUS when
4210: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f   the database co
4220: 6e 6e 65 63 74 69 6f 6e 20 73 77 69 74 63 68 65  nnection switche
4230: 73 0a 20 20 69 6e 74 6f 20 57 41 4c 20 6d 6f 64  s.  into WAL mod
4240: 65 20 66 6f 72 20 74 68 65 20 66 69 72 73 74 20  e for the first 
4250: 74 69 6d 65 2e 0a 20 20 49 66 20 74 68 65 20 53  time..  If the S
4260: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 41  QLITE_DEFAULT_WA
4270: 4c 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20 76 61  L_SYNCHRONOUS va
4280: 6c 75 65 20 69 73 20 6e 6f 74 20 6f 76 65 72 72  lue is not overr
4290: 69 64 64 65 6e 20 61 74 0a 20 20 63 6f 6d 70 69  idden at.  compi
42a0: 6c 65 2d 74 69 6d 65 2c 20 74 68 65 6e 20 69 74  le-time, then it
42b0: 20 77 69 6c 6c 20 61 6c 77 61 79 73 20 62 65 20   will always be 
42c0: 74 68 65 20 73 61 6d 65 20 61 73 0a 20 20 5b 53  the same as.  [S
42d0: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53 59  QLITE_DEFAULT_SY
42e0: 4e 43 48 52 4f 4e 4f 55 53 5d 20 61 6e 64 20 73  NCHRONOUS] and s
42f0: 6f 20 6e 6f 20 61 75 74 6f 6d 61 74 69 63 20 73  o no automatic s
4300: 79 6e 63 68 72 6f 6e 6f 75 73 20 73 65 74 74 69  ynchronous setti
4310: 6e 67 0a 20 20 63 68 61 6e 67 65 73 20 77 69 6c  ng.  changes wil
4320: 6c 20 65 76 65 72 20 6f 63 63 75 72 2e 0a 7d 0a  l ever occur..}.
4330: 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20  .COMPILE_OPTION 
4340: 7b 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f  {SQLITE_DEFAULT_
4350: 57 41 4c 5f 41 55 54 4f 43 48 45 43 4b 50 4f 49  WAL_AUTOCHECKPOI
4360: 4e 54 3d 3c 69 3e 26 6c 74 3b 70 61 67 65 73 26  NT=<i>&lt;pages&
4370: 67 74 3b 3c 2f 69 3e 7d 20 7b 0a 20 20 54 68 69  gt;</i>} {.  Thi
4380: 73 20 6d 61 63 72 6f 20 73 65 74 73 20 74 68 65  s macro sets the
4390: 20 64 65 66 61 75 6c 74 20 70 61 67 65 20 63 6f   default page co
43a0: 75 6e 74 20 66 6f 72 20 74 68 65 20 5b 57 41 4c  unt for the [WAL
43b0: 5d 0a 20 20 5b 63 68 65 63 6b 70 6f 69 6e 74 69  ].  [checkpointi
43c0: 6e 67 20 7c 20 61 75 74 6f 6d 61 74 69 63 20 63  ng | automatic c
43d0: 68 65 63 6b 70 6f 69 6e 74 69 6e 67 5d 20 66 65  heckpointing] fe
43e0: 61 74 75 72 65 2e 20 20 49 66 20 75 6e 73 70 65  ature.  If unspe
43f0: 63 69 66 69 65 64 2c 0a 20 20 74 68 65 20 64 65  cified,.  the de
4400: 66 61 75 6c 74 20 70 61 67 65 20 63 6f 75 6e 74  fault page count
4410: 20 69 73 20 31 30 30 30 2e 0a 7d 0a 0a 43 4f 4d   is 1000..}..COM
4420: 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c  PILE_OPTION {SQL
4430: 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b  ITE_DEFAULT_WORK
4440: 45 52 5f 54 48 52 45 41 44 53 3d 3c 69 3e 4e 3c  ER_THREADS=<i>N<
4450: 2f 69 3e 7d 20 7b 0a 20 20 54 68 69 73 20 6d 61  /i>} {.  This ma
4460: 63 72 6f 20 73 65 74 73 20 74 68 65 20 64 65 66  cro sets the def
4470: 61 75 6c 74 20 76 61 6c 75 65 20 66 6f 72 0a 20  ault value for. 
4480: 20 74 68 65 20 5b 53 51 4c 49 54 45 5f 4c 49 4d   the [SQLITE_LIM
4490: 49 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  IT_WORKER_THREAD
44a0: 53 5d 20 70 61 72 61 6d 65 74 65 72 2e 20 20 54  S] parameter.  T
44b0: 68 65 20 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54  he [SQLITE_LIMIT
44c0: 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 5d  _WORKER_THREADS]
44d0: 0a 20 20 70 61 72 61 6d 65 74 65 72 20 73 65 74  .  parameter set
44e0: 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75  s the maximum nu
44f0: 6d 62 65 72 20 6f 66 20 61 75 78 69 6c 69 61 72  mber of auxiliar
4500: 79 20 74 68 72 65 61 64 73 20 74 68 61 74 20 61  y threads that a
4510: 20 73 69 6e 67 6c 65 0a 20 20 5b 70 72 65 70 61   single.  [prepa
4520: 72 65 64 20 73 74 61 74 65 6d 65 6e 74 5d 20 77  red statement] w
4530: 69 6c 6c 20 6c 61 75 6e 63 68 20 74 6f 20 61 73  ill launch to as
4540: 73 69 73 74 20 69 74 20 77 69 74 68 20 61 20 71  sist it with a q
4550: 75 65 72 79 2e 20 20 49 66 20 6e 6f 74 20 73 70  uery.  If not sp
4560: 65 63 69 66 69 65 64 2c 0a 20 20 74 68 65 20 64  ecified,.  the d
4570: 65 66 61 75 6c 74 20 6d 61 78 69 6d 75 6d 20 69  efault maximum i
4580: 73 20 30 2e 0a 20 20 54 68 65 20 76 61 6c 75 65  s 0..  The value
4590: 20 73 65 74 20 68 65 72 65 20 63 61 6e 6e 6f 74   set here cannot
45a0: 20 62 65 20 6d 6f 72 65 20 74 68 61 6e 20 5b 53   be more than [S
45b0: 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52  QLITE_MAX_WORKER
45c0: 5f 54 48 52 45 41 44 53 5d 2e 0a 7d 0a 0a 43 4f  _THREADS]..}..CO
45d0: 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51  MPILE_OPTION {SQ
45e0: 4c 49 54 45 5f 45 58 54 52 41 5f 44 55 52 41 42  LITE_EXTRA_DURAB
45f0: 4c 45 7d 20 7b 0a 20 20 54 68 65 20 53 51 4c 49  LE} {.  The SQLI
4600: 54 45 5f 45 58 54 52 41 5f 44 55 52 41 42 4c 45  TE_EXTRA_DURABLE
4610: 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70   compile-time op
4620: 74 69 6f 6e 20 74 68 61 74 20 75 73 65 64 20 74  tion that used t
4630: 6f 20 63 61 75 73 65 20 74 68 65 20 64 65 66 61  o cause the defa
4640: 75 6c 74 0a 20 20 5b 50 52 41 47 4d 41 20 73 79  ult.  [PRAGMA sy
4650: 6e 63 68 72 6f 6e 6f 75 73 5d 20 73 65 74 74 69  nchronous] setti
4660: 6e 67 20 74 6f 20 62 65 20 45 58 54 52 41 2c 20  ng to be EXTRA, 
4670: 72 61 74 68 65 72 20 74 68 61 6e 20 46 55 4c 4c  rather than FULL
4680: 2e 20 20 54 68 69 73 20 6f 70 74 69 6f 6e 0a 20  .  This option. 
4690: 20 69 73 20 6e 6f 20 6c 6f 6e 67 65 72 20 73 75   is no longer su
46a0: 70 70 6f 72 74 65 64 2e 20 20 55 73 65 0a 20 20  pported.  Use.  
46b0: 5b 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f  [SQLITE_DEFAULT_
46c0: 53 59 4e 43 48 52 4f 4e 4f 55 53 7c 53 51 4c 49  SYNCHRONOUS|SQLI
46d0: 54 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48  TE_DEFAULT_SYNCH
46e0: 52 4f 4e 4f 55 53 3d 33 5d 20 69 6e 73 74 65 61  RONOUS=3] instea
46f0: 64 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50  d..}..COMPILE_OP
4700: 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 46 54 53  TION {SQLITE_FTS
4710: 33 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50 54 48  3_MAX_EXPR_DEPTH
4720: 3d 3c 69 3e 4e 3c 2f 69 3e 7d 20 7b 0a 20 20 54  =<i>N</i>} {.  T
4730: 68 69 73 20 6d 61 63 72 6f 20 73 65 74 73 20 74  his macro sets t
4740: 68 65 20 6d 61 78 69 6d 75 6d 20 64 65 70 74 68  he maximum depth
4750: 20 6f 66 20 74 68 65 20 73 65 61 72 63 68 20 74   of the search t
4760: 72 65 65 20 74 68 61 74 20 63 6f 72 72 65 73 70  ree that corresp
4770: 6f 6e 64 73 20 74 6f 0a 20 20 74 68 65 20 72 69  onds to.  the ri
4780: 67 68 74 2d 68 61 6e 64 20 73 69 64 65 20 6f 66  ght-hand side of
4790: 20 74 68 65 20 4d 41 54 43 48 20 6f 70 65 72 61   the MATCH opera
47a0: 74 6f 72 20 69 6e 20 61 6e 20 5b 46 54 53 33 5d  tor in an [FTS3]
47b0: 20 6f 72 20 5b 46 54 53 34 5d 20 66 75 6c 6c 2d   or [FTS4] full-
47c0: 74 65 78 74 0a 20 20 69 6e 64 65 78 2e 20 20 54  text.  index.  T
47d0: 68 65 20 66 75 6c 6c 2d 74 65 78 74 20 73 65 61  he full-text sea
47e0: 72 63 68 20 75 73 65 73 20 61 20 72 65 63 75 72  rch uses a recur
47f0: 73 69 76 65 20 61 6c 67 6f 72 69 74 68 6d 2c 20  sive algorithm, 
4800: 73 6f 20 74 68 65 20 64 65 70 74 68 20 6f 66 0a  so the depth of.
4810: 20 20 74 68 65 20 74 72 65 65 20 69 73 20 6c 69    the tree is li
4820: 6d 69 74 65 64 20 74 6f 20 70 72 65 76 65 6e 74  mited to prevent
4830: 20 75 73 69 6e 67 20 74 6f 6f 20 6d 75 63 68 20   using too much 
4840: 73 74 61 63 6b 20 73 70 61 63 65 2e 20 20 54 68  stack space.  Th
4850: 65 20 64 65 66 61 75 6c 74 0a 20 20 6c 69 6d 69  e default.  limi
4860: 74 20 69 73 20 31 32 2e 20 20 54 68 69 73 20 6c  t is 12.  This l
4870: 69 6d 69 74 20 69 73 20 73 75 66 66 69 63 69 65  imit is sufficie
4880: 6e 74 20 66 6f 72 20 75 70 20 74 6f 20 34 30 39  nt for up to 409
4890: 35 20 73 65 61 72 63 68 20 74 65 72 6d 73 20 6f  5 search terms o
48a0: 6e 20 74 68 65 0a 20 20 72 69 67 68 74 2d 68 61  n the.  right-ha
48b0: 6e 64 20 73 69 64 65 20 6f 66 20 74 68 65 20 4d  nd side of the M
48c0: 41 54 43 48 20 6f 70 65 72 61 74 6f 72 20 61 6e  ATCH operator an
48d0: 64 20 69 74 20 68 6f 6c 64 73 20 73 74 61 63 6b  d it holds stack
48e0: 20 73 70 61 63 65 20 75 73 61 67 65 20 74 6f 20   space usage to 
48f0: 0a 20 20 6c 65 73 73 20 74 68 61 6e 20 32 30 30  .  less than 200
4900: 30 20 62 79 74 65 73 2e 0a 20 20 3c 70 3e 0a 20  0 bytes..  <p>. 
4910: 20 46 6f 72 20 6f 72 64 69 6e 61 72 79 20 46 54   For ordinary FT
4920: 53 33 2f 46 54 53 34 20 71 75 65 72 69 65 73 2c  S3/FTS4 queries,
4930: 20 74 68 65 20 73 65 61 72 63 68 20 74 72 65 65   the search tree
4940: 20 64 65 70 74 68 20 69 73 20 61 70 70 72 6f 78   depth is approx
4950: 69 6d 61 74 65 6c 79 0a 20 20 74 68 65 20 62 61  imately.  the ba
4960: 73 65 2d 32 20 6c 6f 67 61 72 69 74 68 6d 20 6f  se-2 logarithm o
4970: 66 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  f the number of 
4980: 74 65 72 6d 73 20 69 6e 20 74 68 65 20 72 69 67  terms in the rig
4990: 68 74 2d 68 61 6e 64 20 73 69 64 65 20 6f 66 20  ht-hand side of 
49a0: 74 68 65 0a 20 20 4d 41 54 43 48 20 6f 70 65 72  the.  MATCH oper
49b0: 61 74 6f 72 2e 20 20 48 6f 77 65 76 65 72 2c 20  ator.  However, 
49c0: 66 6f 72 20 5b 70 68 72 61 73 65 20 71 75 65 72  for [phrase quer
49d0: 69 65 73 5d 20 61 6e 64 20 5b 4e 45 41 52 20 71  ies] and [NEAR q
49e0: 75 65 72 69 65 73 5d 20 74 68 65 0a 20 20 73 65  ueries] the.  se
49f0: 61 72 63 68 20 74 72 65 65 20 64 65 70 74 68 20  arch tree depth 
4a00: 69 73 20 6c 69 6e 65 61 72 20 69 6e 20 74 68 65  is linear in the
4a10: 20 6e 75 6d 62 65 72 20 6f 66 20 72 69 67 68 74   number of right
4a20: 2d 68 61 6e 64 20 73 69 64 65 20 74 65 72 6d 73  -hand side terms
4a30: 2e 0a 20 20 53 6f 20 74 68 65 20 64 65 66 61 75  ..  So the defau
4a40: 6c 74 20 64 65 70 74 68 20 6c 69 6d 69 74 20 6f  lt depth limit o
4a50: 66 20 31 32 20 69 73 20 73 75 66 66 69 63 69 65  f 12 is sufficie
4a60: 6e 74 20 66 6f 72 20 75 70 20 74 6f 20 34 30 39  nt for up to 409
4a70: 35 20 6f 72 64 69 6e 61 72 79 0a 20 20 74 65 72  5 ordinary.  ter
4a80: 6d 73 20 6f 6e 20 61 20 4d 41 54 43 48 2c 20 69  ms on a MATCH, i
4a90: 74 20 69 73 20 6f 6e 6c 79 20 73 75 66 66 69 63  t is only suffic
4aa0: 69 65 6e 74 20 66 6f 72 20 31 31 20 6f 72 20 31  ient for 11 or 1
4ab0: 32 20 70 68 72 61 73 65 20 6f 72 20 4e 45 41 52  2 phrase or NEAR
4ac0: 0a 20 20 74 65 72 6d 73 2e 20 20 45 76 65 6e 20  .  terms.  Even 
4ad0: 73 6f 2c 20 74 68 65 20 64 65 66 61 75 6c 74 20  so, the default 
4ae0: 69 73 20 6d 6f 72 65 20 74 68 61 6e 20 65 6e 6f  is more than eno
4af0: 75 67 68 20 66 6f 72 20 6d 6f 73 74 20 61 70 70  ugh for most app
4b00: 6c 69 63 61 74 69 6f 6e 2e 0a 7d 0a 0a 43 4f 4d  lication..}..COM
4b10: 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c  PILE_OPTION {SQL
4b20: 49 54 45 5f 4c 49 4b 45 5f 44 4f 45 53 4e 54 5f  ITE_LIKE_DOESNT_
4b30: 4d 41 54 43 48 5f 42 4c 4f 42 53 7d 20 7b 0a 20  MATCH_BLOBS} {. 
4b40: 20 54 68 69 73 20 63 6f 6d 70 69 6c 65 2d 74 69   This compile-ti
4b50: 6d 65 20 6f 70 74 69 6f 6e 20 63 61 75 73 65 73  me option causes
4b60: 20 74 68 65 20 5b 4c 49 4b 45 5d 20 6f 70 65 72   the [LIKE] oper
4b70: 61 74 6f 72 20 74 6f 20 61 6c 77 61 79 73 20 72  ator to always r
4b80: 65 74 75 72 6e 20 0a 20 20 46 61 6c 73 65 20 69  eturn .  False i
4b90: 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64  f either operand
4ba0: 20 69 73 20 61 20 42 4c 4f 42 2e 20 20 54 68 65   is a BLOB.  The
4bb0: 20 64 65 66 61 75 6c 74 20 62 65 68 61 76 69 6f   default behavio
4bc0: 72 20 6f 66 20 5b 4c 49 4b 45 5d 20 0a 20 20 69  r of [LIKE] .  i
4bd0: 73 20 74 68 61 74 20 42 4c 4f 42 20 6f 70 65 72  s that BLOB oper
4be0: 61 6e 64 73 20 61 72 65 20 63 61 73 74 20 74 6f  ands are cast to
4bf0: 20 54 45 58 54 20 62 65 66 6f 72 65 20 74 68 65   TEXT before the
4c00: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 64   comparison is d
4c10: 6f 6e 65 2e 0a 20 20 3c 70 3e 0a 20 20 54 68 69  one..  <p>.  Thi
4c20: 73 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f  s compile-time o
4c30: 70 74 69 6f 6e 20 6d 61 6b 65 73 20 53 51 4c 69  ption makes SQLi
4c40: 74 65 20 72 75 6e 20 6d 6f 72 65 20 65 66 66 69  te run more effi
4c50: 63 69 65 6e 74 6c 79 20 77 68 65 6e 20 70 72 6f  ciently when pro
4c60: 63 65 73 73 69 6e 67 0a 20 20 71 75 65 72 69 65  cessing.  querie
4c70: 73 20 74 68 61 74 20 75 73 65 20 74 68 65 20 5b  s that use the [
4c80: 4c 49 4b 45 5d 20 6f 70 65 72 61 74 6f 72 2c 20  LIKE] operator, 
4c90: 61 74 20 74 68 65 20 65 78 70 65 6e 73 65 20 6f  at the expense o
4ca0: 66 20 62 72 65 61 6b 69 6e 67 20 62 61 63 6b 77  f breaking backw
4cb0: 61 72 64 73 0a 20 20 63 6f 6d 70 61 74 69 62 69  ards.  compatibi
4cc0: 6c 69 74 79 2e 20 20 48 6f 77 65 76 65 72 2c 20  lity.  However, 
4cd0: 74 68 65 20 62 61 63 6b 77 61 72 64 73 20 63 6f  the backwards co
4ce0: 6d 70 61 74 69 62 69 6c 69 74 79 20 62 72 65 61  mpatibility brea
4cf0: 6b 20 6d 61 79 20 62 65 20 6f 6e 6c 79 0a 20 20  k may be only.  
4d00: 61 20 74 65 63 68 6e 69 63 61 6c 69 74 79 2e 20  a technicality. 
4d10: 20 54 68 65 72 65 20 77 61 73 20 61 20 6c 6f 6e   There was a lon
4d20: 67 2d 73 74 61 6e 64 69 6e 67 20 62 75 67 20 69  g-standing bug i
4d30: 6e 20 74 68 65 20 5b 4c 49 4b 45 5d 20 70 72 6f  n the [LIKE] pro
4d40: 63 65 73 73 69 6e 67 20 6c 6f 67 69 63 0a 20 20  cessing logic.  
4d50: 28 73 65 65 20 5b 68 74 74 70 73 3a 2f 2f 77 77  (see [https://ww
4d60: 77 2e 73 71 6c 69 74 65 2e 6f 72 67 2f 73 72 63  w.sqlite.org/src
4d70: 2f 69 6e 66 6f 2f 30 35 66 34 33 62 65 38 66 64  /info/05f43be8fd
4d80: 64 61 39 66 5d 29 20 74 68 61 74 20 63 61 75 73  da9f]) that caus
4d90: 65 64 20 69 74 20 74 6f 0a 20 20 6d 69 73 62 65  ed it to.  misbe
4da0: 68 61 76 69 6f 72 20 66 6f 72 20 42 4c 4f 42 20  havior for BLOB 
4db0: 6f 70 65 72 61 6e 64 73 20 61 6e 64 20 6e 6f 62  operands and nob
4dc0: 6f 64 79 20 6f 62 73 65 72 76 65 64 20 74 68 61  ody observed tha
4dd0: 74 20 62 75 67 20 69 6e 20 6e 65 61 72 6c 79 0a  t bug in nearly.
4de0: 20 20 31 30 20 79 65 61 72 73 20 6f 66 20 61 63    10 years of ac
4df0: 74 69 76 65 20 75 73 65 2e 20 20 53 6f 20 66 6f  tive use.  So fo
4e00: 72 20 6d 6f 72 65 20 75 73 65 72 73 2c 20 69 74  r more users, it
4e10: 20 69 73 20 70 72 6f 62 61 62 6c 79 20 73 61 66   is probably saf
4e20: 65 20 74 6f 0a 20 20 65 6e 61 62 6c 65 20 74 68  e to.  enable th
4e30: 69 73 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  is compile-time 
4e40: 6f 70 74 69 6f 6e 20 61 6e 64 20 74 68 65 72 65  option and there
4e50: 62 79 20 73 61 76 65 20 61 20 6c 69 74 74 6c 65  by save a little
4e60: 20 43 50 55 20 74 69 6d 65 0a 20 20 6f 6e 20 4c   CPU time.  on L
4e70: 49 4b 45 20 71 75 65 72 69 65 73 2e 0a 20 20 3c  IKE queries..  <
4e80: 70 3e 0a 20 20 54 68 69 73 20 63 6f 6d 70 69 6c  p>.  This compil
4e90: 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 61 66  e-time option af
4ea0: 66 65 63 74 73 20 74 68 65 20 53 51 4c 20 5b 4c  fects the SQL [L
4eb0: 49 4b 45 5d 20 6f 70 65 72 61 74 6f 72 20 6f 6e  IKE] operator on
4ec0: 6c 79 20 61 6e 64 20 68 61 73 0a 20 20 6e 6f 20  ly and has.  no 
4ed0: 69 6d 70 61 63 74 20 6f 6e 20 74 68 65 20 5b 73  impact on the [s
4ee0: 71 6c 69 74 65 33 5f 73 74 72 6c 69 6b 65 28 29  qlite3_strlike()
4ef0: 5d 20 43 2d 6c 61 6e 67 75 61 67 65 20 69 6e 74  ] C-language int
4f00: 65 72 66 61 63 65 2e 0a 7d 0a 0a 43 4f 4d 50 49  erface..}..COMPI
4f10: 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54  LE_OPTION {SQLIT
4f20: 45 5f 4d 41 58 5f 4d 45 4d 4f 52 59 3d 3c 69 3e  E_MAX_MEMORY=<i>
4f30: 4e 3c 2f 69 3e 7d 20 7b 0a 20 20 54 68 69 73 20  N</i>} {.  This 
4f40: 6f 70 74 69 6f 6e 20 6c 69 6d 69 74 73 20 74 68  option limits th
4f50: 65 20 74 6f 74 61 6c 20 61 6d 6f 75 6e 74 20 6f  e total amount o
4f60: 66 20 6d 65 6d 6f 72 79 20 74 68 61 74 20 53 51  f memory that SQ
4f70: 4c 69 74 65 20 77 69 6c 6c 20 72 65 71 75 65 73  Lite will reques
4f80: 74 0a 20 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28  t.  from malloc(
4f90: 29 20 74 6f 20 3c 69 3e 4e 3c 2f 69 3e 20 62 79  ) to <i>N</i> by
4fa0: 74 65 73 2e 20 20 41 6e 79 20 61 74 74 65 6d 70  tes.  Any attemp
4fb0: 74 20 62 79 20 53 51 4c 69 74 65 20 74 6f 20 61  t by SQLite to a
4fc0: 6c 6c 6f 63 61 74 65 0a 20 20 6e 65 77 20 6d 65  llocate.  new me
4fd0: 6d 6f 72 79 20 74 68 61 74 20 77 6f 75 6c 64 20  mory that would 
4fe0: 63 61 75 73 65 20 74 68 65 20 73 75 6d 20 6f 66  cause the sum of
4ff0: 20 61 6c 6c 20 61 6c 6c 6f 63 61 74 69 6f 6e 73   all allocations
5000: 20 68 65 6c 64 20 62 79 20 53 51 4c 69 74 65 20   held by SQLite 
5010: 74 6f 20 65 78 63 65 65 64 0a 20 20 3c 69 3e 4e  to exceed.  <i>N
5020: 3c 2f 69 3e 20 62 79 74 65 73 20 77 69 6c 6c 20  </i> bytes will 
5030: 72 65 73 75 6c 74 20 69 6e 20 61 6e 20 6f 75 74  result in an out
5040: 2d 6f 66 2d 6d 65 6d 6f 72 79 20 65 72 72 6f 72  -of-memory error
5050: 2e 0a 20 20 54 68 69 73 20 69 73 20 61 20 68 61  ..  This is a ha
5060: 72 64 20 75 70 70 65 72 20 6c 69 6d 69 74 2e 20  rd upper limit. 
5070: 20 53 65 65 20 61 6c 73 6f 20 74 68 65 20 5b 73   See also the [s
5080: 71 6c 69 74 65 33 5f 73 6f 66 74 5f 68 65 61 70  qlite3_soft_heap
5090: 5f 6c 69 6d 69 74 28 29 5d 0a 20 20 69 6e 74 65  _limit()].  inte
50a0: 72 66 61 63 65 2e 0a 20 20 3c 70 3e 0a 20 20 54  rface..  <p>.  T
50b0: 68 69 73 20 6c 69 6d 69 74 20 69 73 20 6f 6e 6c  his limit is onl
50c0: 79 20 66 75 6e 63 74 69 6f 6e 61 6c 20 69 66 20  y functional if 
50d0: 6d 65 6d 6f 72 79 20 75 73 61 67 65 20 73 74 61  memory usage sta
50e0: 74 69 73 74 69 63 73 20 61 72 65 20 61 76 61 69  tistics are avai
50f0: 6c 61 62 6c 65 20 76 69 61 0a 20 20 74 68 65 20  lable via.  the 
5100: 5b 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72 79 5f  [sqlite3_memory_
5110: 75 73 65 64 28 29 5d 20 61 6e 64 20 5b 73 71 6c  used()] and [sql
5120: 69 74 65 33 5f 73 74 61 74 75 73 36 34 5d 28 5b  ite3_status64]([
5130: 53 51 4c 49 54 45 5f 53 54 41 54 55 53 5f 4d 45  SQLITE_STATUS_ME
5140: 4d 4f 52 59 5f 55 53 45 44 5d 29 0a 20 20 69 6e  MORY_USED]).  in
5150: 74 65 72 66 61 63 65 73 2e 20 20 57 69 74 68 6f  terfaces.  Witho
5160: 75 74 20 74 68 61 74 20 6d 65 6d 6f 72 79 20 75  ut that memory u
5170: 73 61 67 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  sage information
5180: 2c 20 53 51 4c 69 74 65 20 68 61 73 20 6e 6f 20  , SQLite has no 
5190: 77 61 79 20 6f 66 0a 20 20 6b 6e 6f 77 69 6e 67  way of.  knowing
51a0: 20 77 68 65 6e 20 69 74 20 69 73 20 61 62 6f 75   when it is abou
51b0: 74 20 74 6f 20 67 6f 20 6f 76 65 72 20 74 68 65  t to go over the
51c0: 20 6c 69 6d 69 74 2c 20 61 6e 64 20 74 68 75 73   limit, and thus
51d0: 20 69 73 20 75 6e 61 62 6c 65 20 74 6f 20 70 72   is unable to pr
51e0: 65 76 65 6e 74 0a 20 20 74 68 65 20 65 78 63 65  event.  the exce
51f0: 73 73 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  ss memory alloca
5200: 74 69 6f 6e 2e 20 20 4d 65 6d 6f 72 79 20 75 73  tion.  Memory us
5210: 61 67 65 20 74 72 61 63 6b 69 6e 67 20 69 73 20  age tracking is 
5220: 74 75 72 6e 65 64 20 6f 6e 20 62 79 20 64 65 66  turned on by def
5230: 61 75 6c 74 2c 0a 20 20 62 75 74 20 63 61 6e 20  ault,.  but can 
5240: 62 65 20 64 69 73 61 62 6c 65 64 20 61 74 20 63  be disabled at c
5250: 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 75 73 69 6e  ompile-time usin
5260: 67 20 74 68 65 20 5b 53 51 4c 49 54 45 5f 44 45  g the [SQLITE_DE
5270: 46 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53 5d  FAULT_MEMSTATUS]
5280: 20 6f 70 74 69 6f 6e 2c 0a 20 20 6f 72 20 61 74   option,.  or at
5290: 20 73 74 61 72 74 2d 74 69 6d 65 20 75 73 69 6e   start-time usin
52a0: 67 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69  g [sqlite3_confi
52b0: 67 5d 28 5b 53 51 4c 49 54 45 5f 43 4f 4e 46 49  g]([SQLITE_CONFI
52c0: 47 5f 4d 45 4d 53 54 41 54 55 53 5d 29 2e 0a 7d  G_MEMSTATUS])..}
52d0: 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e  ..COMPILE_OPTION
52e0: 20 7b 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41   {SQLITE_MAX_MMA
52f0: 50 5f 53 49 5a 45 3d 3c 69 3e 4e 3c 2f 69 3e 7d  P_SIZE=<i>N</i>}
5300: 20 7b 0a 20 20 54 68 69 73 20 6d 61 63 72 6f 20   {.  This macro 
5310: 73 65 74 73 20 61 20 68 61 72 64 20 75 70 70 65  sets a hard uppe
5320: 72 20 62 6f 75 6e 64 20 6f 6e 20 74 68 65 20 61  r bound on the a
5330: 6d 6f 75 6e 74 20 6f 66 20 61 64 64 72 65 73 73  mount of address
5340: 20 73 70 61 63 65 20 74 68 61 74 0a 20 20 63 61   space that.  ca
5350: 6e 20 62 65 20 75 73 65 64 20 62 79 20 61 6e 79  n be used by any
5360: 20 73 69 6e 67 6c 65 20 64 61 74 61 62 61 73 65   single database
5370: 20 66 6f 72 20 6d 65 6d 6f 72 79 2d 6d 61 70 70   for memory-mapp
5380: 65 64 20 49 2f 4f 2e 0a 20 20 53 65 74 74 69 6e  ed I/O..  Settin
5390: 67 20 74 68 69 73 20 76 61 6c 75 65 20 74 6f 20  g this value to 
53a0: 30 20 63 6f 6d 70 6c 65 74 65 6c 79 20 64 69 73  0 completely dis
53b0: 61 62 6c 65 73 20 6d 65 6d 6f 72 79 2d 6d 61 70  ables memory-map
53c0: 70 65 64 20 49 2f 4f 20 61 6e 64 0a 20 20 63 61  ped I/O and.  ca
53d0: 75 73 65 73 20 6c 6f 67 69 63 20 61 73 73 6f 63  uses logic assoc
53e0: 69 61 74 65 64 20 77 69 74 68 20 6d 65 6d 6f 72  iated with memor
53f0: 79 2d 6d 61 70 70 65 64 20 49 2f 4f 20 74 6f 20  y-mapped I/O to 
5400: 62 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20  be omitted from 
5410: 74 68 65 0a 20 20 62 75 69 6c 64 2e 20 20 54 68  the.  build.  Th
5420: 69 73 20 6f 70 74 69 6f 6e 20 64 6f 65 73 20 63  is option does c
5430: 68 61 6e 67 65 20 74 68 65 20 64 65 66 61 75 6c  hange the defaul
5440: 74 20 6d 65 6d 6f 72 79 2d 6d 61 70 70 65 64 20  t memory-mapped 
5450: 49 2f 4f 20 61 64 64 72 65 73 73 0a 20 20 73 70  I/O address.  sp
5460: 61 63 65 20 73 69 7a 65 20 28 73 65 74 20 62 79  ace size (set by
5470: 20 5b 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54   [SQLITE_DEFAULT
5480: 5f 4d 4d 41 50 5f 53 49 5a 45 5d 20 6f 72 0a 20  _MMAP_SIZE] or. 
5490: 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 28   sqlite3_config(
54a0: 5b 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4d  [SQLITE_CONFIG_M
54b0: 4d 41 50 5f 53 49 5a 45 5d 29 20 6f 72 20 74 68  MAP_SIZE]) or th
54c0: 65 0a 20 20 72 75 6e 2d 74 69 6d 65 20 6d 65 6d  e.  run-time mem
54d0: 6f 72 79 2d 6d 61 70 70 65 64 20 49 2f 4f 20 61  ory-mapped I/O a
54e0: 64 64 72 65 73 73 20 73 70 61 63 65 20 73 69 7a  ddress space siz
54f0: 65 20 28 73 65 74 20 62 79 0a 20 20 73 71 6c 69  e (set by.  sqli
5500: 74 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c  te3_file_control
5510: 28 5b 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 4d  ([SQLITE_FCNTL_M
5520: 4d 41 50 5f 53 49 5a 45 5d 29 20 6f 72 0a 20 20  MAP_SIZE]) or.  
5530: 5b 50 52 41 47 4d 41 20 6d 6d 61 70 5f 73 69 7a  [PRAGMA mmap_siz
5540: 65 5d 29 20 61 73 20 6c 6f 6e 67 20 61 73 20 74  e]) as long as t
5550: 68 6f 73 65 20 6f 74 68 65 72 20 73 65 74 74 69  hose other setti
5560: 6e 67 73 20 61 72 65 20 6c 65 73 73 20 74 68 61  ngs are less tha
5570: 6e 20 74 68 65 0a 20 20 6d 61 78 69 6d 75 6d 20  n the.  maximum 
5580: 76 61 6c 75 65 20 64 65 66 69 6e 65 64 20 68 65  value defined he
5590: 72 65 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f  re..}..COMPILE_O
55a0: 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 4d 41  PTION {SQLITE_MA
55b0: 58 5f 53 43 48 45 4d 41 5f 52 45 54 52 59 3d 3c  X_SCHEMA_RETRY=<
55c0: 69 3e 4e 3c 2f 69 3e 7d 20 7b 0a 20 20 57 68 65  i>N</i>} {.  Whe
55d0: 6e 65 76 65 72 20 74 68 65 20 64 61 74 61 62 61  never the databa
55e0: 73 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65  se schema change
55f0: 73 2c 20 70 72 65 70 61 72 65 64 20 73 74 61 74  s, prepared stat
5600: 65 6d 65 6e 74 73 20 61 72 65 20 61 75 74 6f 6d  ements are autom
5610: 61 74 69 63 61 6c 6c 79 0a 20 20 72 65 70 72 65  atically.  repre
5620: 70 61 72 65 64 20 74 6f 20 61 63 63 6f 6d 6d 6f  pared to accommo
5630: 64 61 74 65 20 74 68 65 20 6e 65 77 20 73 63 68  date the new sch
5640: 65 6d 61 2e 20 20 54 68 65 72 65 20 69 73 20 61  ema.  There is a
5650: 20 72 61 63 65 20 63 6f 6e 64 69 74 69 6f 6e 20   race condition 
5660: 68 65 72 65 0a 20 20 69 6e 20 74 68 61 74 20 69  here.  in that i
5670: 66 20 6f 6e 65 20 74 68 72 65 61 64 20 69 73 20  f one thread is 
5680: 63 6f 6e 73 74 61 6e 74 6c 79 20 63 68 61 6e 67  constantly chang
5690: 69 6e 67 20 74 68 65 20 73 63 68 65 6d 61 2c 20  ing the schema, 
56a0: 61 6e 6f 74 68 65 72 20 74 68 72 65 61 64 0a 20  another thread. 
56b0: 20 6d 69 67 68 74 20 73 70 69 6e 20 6f 6e 20 72   might spin on r
56c0: 65 70 61 72 73 65 73 20 61 6e 64 20 72 65 70 72  eparses and repr
56d0: 65 70 61 72 61 74 69 6f 6e 73 20 6f 66 20 61 20  eparations of a 
56e0: 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
56f0: 6e 74 20 61 6e 64 0a 20 20 6e 65 76 65 72 20 67  nt and.  never g
5700: 65 74 20 61 6e 79 20 72 65 61 6c 20 77 6f 72 6b  et any real work
5710: 20 64 6f 6e 65 2e 20 20 54 68 69 73 20 70 61 72   done.  This par
5720: 61 6d 65 74 65 72 20 70 72 65 76 65 6e 74 73 20  ameter prevents 
5730: 61 6e 20 69 6e 66 69 6e 69 74 65 20 6c 6f 6f 70  an infinite loop
5740: 0a 20 20 62 79 20 66 6f 72 63 69 6e 67 20 74 68  .  by forcing th
5750: 65 20 73 70 69 6e 6e 69 6e 67 20 74 68 72 65 61  e spinning threa
5760: 64 20 74 6f 20 67 69 76 65 20 75 70 20 61 66 74  d to give up aft
5770: 65 72 20 61 20 66 69 78 65 64 20 6e 75 6d 62 65  er a fixed numbe
5780: 72 20 6f 66 20 61 74 74 65 6d 70 74 73 0a 20 20  r of attempts.  
5790: 61 74 20 72 65 63 6f 6d 70 69 6c 69 6e 67 20 74  at recompiling t
57a0: 68 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74  he prepared stat
57b0: 65 6d 65 6e 74 2e 20 20 54 68 65 20 64 65 66 61  ement.  The defa
57c0: 75 6c 74 20 73 65 74 74 69 6e 67 20 69 73 20 35  ult setting is 5
57d0: 30 20 77 68 69 63 68 20 69 73 0a 20 20 6d 6f 72  0 which is.  mor
57e0: 65 20 74 68 61 6e 20 61 64 65 71 75 61 74 65 20  e than adequate 
57f0: 66 6f 72 20 6d 6f 73 74 20 61 70 70 6c 69 63 61  for most applica
5800: 74 69 6f 6e 73 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c  tions..}..COMPIL
5810: 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45  E_OPTION {SQLITE
5820: 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45  _MAX_WORKER_THRE
5830: 41 44 53 3d 3c 69 3e 4e 3c 2f 69 3e 7d 20 7b 0a  ADS=<i>N</i>} {.
5840: 20 20 53 65 74 20 61 6e 20 75 70 70 65 72 20 62    Set an upper b
5850: 6f 75 6e 64 20 6f 6e 20 74 68 65 20 5b 73 71 6c  ound on the [sql
5860: 69 74 65 33 5f 6c 69 6d 69 74 5d 28 64 62 2c 5b  ite3_limit](db,[
5870: 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 57 4f 52  SQLITE_LIMIT_WOR
5880: 4b 45 52 5f 54 48 52 45 41 44 53 5d 2c 4e 29 0a  KER_THREADS],N).
5890: 20 20 73 65 74 74 69 6e 67 20 74 68 61 74 20 64    setting that d
58a0: 65 74 65 72 6d 69 6e 65 73 20 74 68 65 20 6d 61  etermines the ma
58b0: 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20  ximum number of 
58c0: 61 75 78 69 6c 69 61 72 79 20 74 68 72 65 61 64  auxiliary thread
58d0: 73 20 74 68 61 74 20 61 20 73 69 6e 67 6c 65 0a  s that a single.
58e0: 20 20 5b 70 72 65 70 61 72 65 64 20 73 74 61 74    [prepared stat
58f0: 65 6d 65 6e 74 5d 20 77 69 6c 6c 20 75 73 65 20  ement] will use 
5900: 74 6f 20 61 69 64 20 77 69 74 68 20 43 50 55 2d  to aid with CPU-
5910: 69 6e 74 65 6e 73 69 76 65 20 63 6f 6d 70 75 74  intensive comput
5920: 61 74 69 6f 6e 73 0a 20 20 28 6d 6f 73 74 6c 79  ations.  (mostly
5930: 20 73 6f 72 74 69 6e 67 29 2e 20 20 53 65 65 20   sorting).  See 
5940: 61 6c 73 6f 20 74 68 65 20 5b 53 51 4c 49 54 45  also the [SQLITE
5950: 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f  _DEFAULT_WORKER_
5960: 54 48 52 45 41 44 53 5d 20 6f 70 74 69 6f 6e 73  THREADS] options
5970: 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54  ..}..COMPILE_OPT
5980: 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 4d 49 4e 49  ION {SQLITE_MINI
5990: 4d 55 4d 5f 46 49 4c 45 5f 44 45 53 43 52 49 50  MUM_FILE_DESCRIP
59a0: 54 4f 52 3d 3c 69 3e 4e 3c 2f 69 3e 7d 20 7b 0a  TOR=<i>N</i>} {.
59b0: 20 20 54 68 65 20 75 6e 69 78 20 5b 56 46 53 5d    The unix [VFS]
59c0: 20 77 69 6c 6c 20 6e 65 76 65 72 20 75 73 65 20   will never use 
59d0: 61 20 66 69 6c 65 20 64 65 73 63 72 69 70 74 6f  a file descripto
59e0: 72 20 6c 65 73 73 20 74 68 61 6e 20 3c 69 3e 4e  r less than <i>N
59f0: 3c 2f 69 3e 2e 20 20 54 68 65 0a 20 20 64 65 66  </i>.  The.  def
5a00: 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 3c 69  ault value of <i
5a10: 3e 4e 3c 2f 69 3e 20 69 73 20 33 2e 0a 20 20 3c  >N</i> is 3..  <
5a20: 70 3e 0a 20 20 41 76 6f 69 64 69 6e 67 20 74 68  p>.  Avoiding th
5a30: 65 20 75 73 65 20 6f 66 20 6c 6f 77 2d 6e 75 6d  e use of low-num
5a40: 62 65 72 65 64 20 66 69 6c 65 20 64 65 73 63 72  bered file descr
5a50: 69 70 74 6f 72 73 20 69 73 20 61 20 64 65 66 65  iptors is a defe
5a60: 6e 73 65 20 61 67 61 69 6e 73 74 0a 20 20 61 63  nse against.  ac
5a70: 63 69 64 65 6e 74 61 6c 20 64 61 74 61 62 61 73  cidental databas
5a80: 65 20 63 6f 72 72 75 70 74 69 6f 6e 2e 20 20 49  e corruption.  I
5a90: 66 20 61 20 64 61 74 61 62 61 73 65 20 66 69 6c  f a database fil
5aa0: 65 20 77 61 73 20 6f 70 65 6e 65 64 20 75 73 69  e was opened usi
5ab0: 6e 67 0a 20 20 66 69 6c 65 20 64 65 73 63 72 69  ng.  file descri
5ac0: 70 74 6f 72 20 32 2c 20 66 6f 72 20 65 78 61 6d  ptor 2, for exam
5ad0: 70 6c 65 2c 20 61 6e 64 20 74 68 65 6e 20 61 6e  ple, and then an
5ae0: 20 61 73 73 65 72 74 28 29 20 66 61 69 6c 65 64   assert() failed
5af0: 20 61 6e 64 20 69 6e 76 6f 6b 65 64 0a 20 20 77   and invoked.  w
5b00: 72 69 74 65 28 32 2c 2e 2e 2e 29 2c 20 74 68 61  rite(2,...), tha
5b10: 74 20 77 6f 75 6c 64 20 6c 69 6b 65 6c 79 20 63  t would likely c
5b20: 61 75 73 65 20 64 61 74 61 62 61 73 65 20 63 6f  ause database co
5b30: 72 72 75 70 74 69 6f 6e 20 62 79 20 6f 76 65 72  rruption by over
5b40: 77 72 69 74 69 6e 67 0a 20 20 70 61 72 74 20 6f  writing.  part o
5b50: 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  f the database f
5b60: 69 6c 65 20 77 69 74 68 20 74 68 65 20 61 73 73  ile with the ass
5b70: 65 72 74 69 6f 6e 20 65 72 72 6f 72 20 6d 65 73  ertion error mes
5b80: 73 61 67 65 2e 20 20 55 73 69 6e 67 20 6f 6e 6c  sage.  Using onl
5b90: 79 0a 20 20 68 69 67 68 65 72 2d 76 61 6c 75 65  y.  higher-value
5ba0: 64 20 66 69 6c 65 20 64 65 73 63 72 69 70 74 6f  d file descripto
5bb0: 72 73 20 61 76 6f 69 64 73 20 74 68 69 73 20 70  rs avoids this p
5bc0: 6f 74 65 6e 74 69 61 6c 20 70 72 6f 62 6c 65 6d  otential problem
5bd0: 2e 20 20 54 68 65 20 0a 20 20 70 72 6f 74 65 63  .  The .  protec
5be0: 74 69 6f 6e 20 61 67 61 69 6e 73 74 0a 20 20 75  tion against.  u
5bf0: 73 69 6e 67 20 6c 6f 77 2d 6e 75 6d 62 65 72 65  sing low-numbere
5c00: 64 20 66 69 6c 65 20 64 65 73 63 72 69 70 74 6f  d file descripto
5c10: 72 73 20 63 61 6e 20 62 65 20 64 69 73 61 62 6c  rs can be disabl
5c20: 65 64 20 62 79 20 73 65 74 74 69 6e 67 20 74 68  ed by setting th
5c30: 69 73 0a 20 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  is.  compile-tim
5c40: 65 20 6f 70 74 69 6f 6e 20 74 6f 20 30 2e 0a 7d  e option to 0..}
5c50: 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e  ..COMPILE_OPTION
5c60: 20 7b 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41   {SQLITE_POWERSA
5c70: 46 45 5f 4f 56 45 52 57 52 49 54 45 3d 3c 69 3e  FE_OVERWRITE=<i>
5c80: 26 6c 74 3b 30 20 6f 72 20 31 26 67 74 3b 3c 2f  &lt;0 or 1&gt;</
5c90: 69 3e 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70 74  i>} {.  This opt
5ca0: 69 6f 6e 20 63 68 61 6e 67 65 73 20 74 68 65 20  ion changes the 
5cb0: 64 65 66 61 75 6c 74 20 61 73 73 75 6d 70 74 69  default assumpti
5cc0: 6f 6e 20 61 62 6f 75 74 20 5b 70 6f 77 65 72 73  on about [powers
5cd0: 61 66 65 20 6f 76 65 72 77 72 69 74 65 5d 0a 20  afe overwrite]. 
5ce0: 20 66 6f 72 20 74 68 65 20 75 6e 64 65 72 6c 79   for the underly
5cf0: 69 6e 67 20 66 69 6c 65 73 79 73 74 65 6d 73 20  ing filesystems 
5d00: 66 6f 72 20 74 68 65 20 75 6e 69 78 20 61 6e 64  for the unix and
5d10: 20 77 69 6e 64 6f 77 73 20 5b 56 46 53 65 73 5d   windows [VFSes]
5d20: 2e 0a 20 20 53 65 74 74 69 6e 67 20 53 51 4c 49  ..  Setting SQLI
5d30: 54 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f 56 45  TE_POWERSAFE_OVE
5d40: 52 57 52 49 54 45 20 74 6f 20 31 20 63 61 75 73  RWRITE to 1 caus
5d50: 65 73 20 53 51 4c 69 74 65 20 74 6f 20 61 73 73  es SQLite to ass
5d60: 75 6d 65 20 74 68 61 74 0a 20 20 61 70 70 6c 69  ume that.  appli
5d70: 63 61 74 69 6f 6e 2d 6c 65 76 65 6c 20 77 72 69  cation-level wri
5d80: 74 65 73 20 63 61 6e 6e 6f 74 20 63 68 61 6e 67  tes cannot chang
5d90: 65 73 20 62 79 74 65 73 20 6f 75 74 73 69 64 65  es bytes outside
5da0: 20 74 68 65 20 72 61 6e 67 65 20 6f 66 0a 20 20   the range of.  
5db0: 62 79 74 65 73 20 77 72 69 74 74 65 6e 20 65 76  bytes written ev
5dc0: 65 6e 20 69 66 20 74 68 65 20 77 72 69 74 65 20  en if the write 
5dd0: 6f 63 63 75 72 73 20 6a 75 73 74 20 62 65 66 6f  occurs just befo
5de0: 72 65 20 61 20 70 6f 77 65 72 20 6c 6f 73 73 2e  re a power loss.
5df0: 0a 20 20 57 69 74 68 20 53 51 4c 49 54 45 5f 50  .  With SQLITE_P
5e00: 4f 57 45 52 53 41 46 45 5f 4f 56 45 52 57 52 49  OWERSAFE_OVERWRI
5e10: 54 45 20 73 65 74 20 74 6f 20 30 2c 20 53 51 4c  TE set to 0, SQL
5e20: 69 74 65 20 61 73 73 75 6d 65 73 20 74 68 61 74  ite assumes that
5e30: 20 6f 74 68 65 72 0a 20 20 62 79 74 65 73 20 69   other.  bytes i
5e40: 6e 20 74 68 65 20 73 61 6d 65 20 73 65 63 74 6f  n the same secto
5e50: 72 20 77 69 74 68 20 61 20 77 72 69 74 74 65 6e  r with a written
5e60: 20 62 79 74 65 20 6d 69 67 68 74 20 62 65 20 63   byte might be c
5e70: 68 61 6e 67 65 64 20 6f 72 20 0a 20 20 64 61 6d  hanged or .  dam
5e80: 61 67 65 64 20 62 79 20 61 20 70 6f 77 65 72 20  aged by a power 
5e90: 6c 6f 73 73 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45  loss..}..COMPILE
5ea0: 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f  _OPTION {SQLITE_
5eb0: 52 45 56 45 52 53 45 5f 55 4e 4f 52 44 45 52 45  REVERSE_UNORDERE
5ec0: 44 5f 53 45 4c 45 43 54 53 7d 20 7b 0a 20 20 54  D_SELECTS} {.  T
5ed0: 68 69 73 20 6f 70 74 69 6f 6e 20 63 61 75 73 65  his option cause
5ee0: 73 20 74 68 65 20 5b 50 52 41 47 4d 41 20 72 65  s the [PRAGMA re
5ef0: 76 65 72 73 65 5f 75 6e 6f 72 64 65 72 65 64 5f  verse_unordered_
5f00: 73 65 6c 65 63 74 73 5d 20 73 65 74 74 69 6e 67  selects] setting
5f10: 20 74 6f 20 62 65 0a 20 20 65 6e 61 62 6c 65 64   to be.  enabled
5f20: 20 62 79 20 64 65 66 61 75 6c 74 2e 20 20 57 68   by default.  Wh
5f30: 65 6e 20 65 6e 61 62 6c 65 64 2c 20 5b 53 45 4c  en enabled, [SEL
5f40: 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 73 20  ECT] statements 
5f50: 74 68 61 74 20 6c 61 63 6b 20 61 6e 0a 20 20 4f  that lack an.  O
5f60: 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 77  RDER BY clause w
5f70: 69 6c 6c 20 72 75 6e 20 69 6e 20 72 65 76 65 72  ill run in rever
5f80: 73 65 20 6f 72 64 65 72 2e 3c 70 3e 0a 20 20 54  se order.<p>.  T
5f90: 68 69 73 20 6f 70 74 69 6f 6e 20 69 73 20 75 73  his option is us
5fa0: 65 66 75 6c 20 66 6f 72 20 64 65 74 65 63 74 69  eful for detecti
5fb0: 6e 67 20 77 68 65 6e 20 61 70 70 6c 69 63 61 74  ng when applicat
5fc0: 69 6f 6e 73 20 28 69 6e 63 6f 72 72 65 63 74 6c  ions (incorrectl
5fd0: 79 29 0a 20 20 61 73 73 75 6d 65 20 74 68 61 74  y).  assume that
5fe0: 20 74 68 65 20 6f 72 64 65 72 20 6f 66 20 72 6f   the order of ro
5ff0: 77 73 20 69 6e 20 61 20 53 45 4c 45 43 54 20 77  ws in a SELECT w
6000: 69 74 68 6f 75 74 20 61 6e 20 4f 52 44 45 52 20  ithout an ORDER 
6010: 42 59 20 63 6c 61 75 73 65 0a 20 20 77 69 6c 6c  BY clause.  will
6020: 20 61 6c 77 61 79 73 20 62 65 20 74 68 65 20 73   always be the s
6030: 61 6d 65 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f  ame..}..COMPILE_
6040: 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 53  OPTION {SQLITE_S
6050: 4f 52 54 45 52 5f 50 4d 41 53 5a 3d 3c 69 3e 4e  ORTER_PMASZ=<i>N
6060: 3c 2f 69 3e 7d 20 7b 0a 20 20 49 66 20 6d 75 6c  </i>} {.  If mul
6070: 74 69 2d 74 68 72 65 61 64 65 64 20 70 72 6f 63  ti-threaded proc
6080: 65 73 73 69 6e 67 20 69 73 20 65 6e 61 62 6c 65  essing is enable
6090: 64 20 76 69 61 20 74 68 65 0a 20 20 5b 50 52 41  d via the.  [PRA
60a0: 47 4d 41 20 74 68 72 65 61 64 73 5d 20 73 65 74  GMA threads] set
60b0: 74 69 6e 67 2c 20 74 68 65 6e 20 73 6f 72 74 20  ting, then sort 
60c0: 6f 70 65 72 61 74 69 6f 6e 73 20 77 69 6c 6c 0a  operations will.
60d0: 20 20 61 74 74 65 6d 70 74 20 74 6f 20 73 74 61    attempt to sta
60e0: 72 74 20 68 65 6c 70 65 72 20 74 68 72 65 61 64  rt helper thread
60f0: 73 20 77 68 65 6e 20 74 68 65 20 61 6d 6f 75 6e  s when the amoun
6100: 74 20 6f 66 20 63 6f 6e 74 65 6e 74 0a 20 20 74  t of content.  t
6110: 6f 20 62 65 20 73 6f 72 74 65 64 20 65 78 63 65  o be sorted exce
6120: 65 64 73 20 74 68 65 20 6d 69 6e 69 6d 75 6d 20  eds the minimum 
6130: 6f 66 20 74 68 65 20 5b 63 61 63 68 65 5f 73 69  of the [cache_si
6140: 7a 65 5d 20 61 6e 64 20 50 4d 41 20 53 69 7a 65  ze] and PMA Size
6150: 0a 20 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79  .  determined by
6160: 20 74 68 65 20 5b 53 51 4c 49 54 45 5f 43 4f 4e   the [SQLITE_CON
6170: 46 49 47 5f 50 4d 41 53 5a 5d 20 73 74 61 72 74  FIG_PMASZ] start
6180: 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 2e 0a 20 20  -time option..  
6190: 54 68 69 73 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  This compile-tim
61a0: 65 20 6f 70 74 69 6f 6e 20 73 65 74 73 20 74 68  e option sets th
61b0: 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20  e default value 
61c0: 66 6f 72 20 74 68 65 0a 20 20 5b 53 51 4c 49 54  for the.  [SQLIT
61d0: 45 5f 43 4f 4e 46 49 47 5f 50 4d 41 53 5a 5d 20  E_CONFIG_PMASZ] 
61e0: 73 74 61 72 74 2d 74 69 6d 65 20 6f 70 74 69 6f  start-time optio
61f0: 6e 2e 0a 20 20 54 68 65 20 64 65 66 61 75 6c 74  n..  The default
6200: 20 76 61 6c 75 65 20 69 73 20 32 35 30 2e 0a 7d   value is 250..}
6210: 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e  ..COMPILE_OPTION
6220: 20 7b 53 51 4c 49 54 45 5f 53 54 4d 54 4a 52 4e   {SQLITE_STMTJRN
6230: 4c 5f 53 50 49 4c 4c 3d 3c 69 3e 4e 3c 2f 69 3e  L_SPILL=<i>N</i>
6240: 7d 20 7b 0a 20 20 54 68 65 20 53 51 4c 49 54 45  } {.  The SQLITE
6250: 5f 53 54 4d 54 4a 52 4e 4c 5f 53 50 49 4c 4c 20  _STMTJRNL_SPILL 
6260: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74  compile-time opt
6270: 69 6f 6e 20 64 65 74 65 72 6d 69 6e 65 73 20 74  ion determines t
6280: 68 65 0a 20 20 64 65 66 61 75 6c 74 20 73 65 74  he.  default set
6290: 74 69 6e 67 20 6f 66 20 74 68 65 20 5b 53 51 4c  ting of the [SQL
62a0: 49 54 45 5f 43 4f 4e 46 49 47 5f 53 54 4d 54 4a  ITE_CONFIG_STMTJ
62b0: 52 4e 4c 5f 53 50 49 4c 4c 5d 20 73 74 61 72 74  RNL_SPILL] start
62c0: 2d 74 69 6d 65 0a 20 20 73 65 74 74 69 6e 67 2e  -time.  setting.
62d0: 20 20 54 68 61 74 20 73 65 74 74 69 6e 67 20 64    That setting d
62e0: 65 74 65 72 6d 69 6e 65 73 20 74 68 65 20 73 69  etermines the si
62f0: 7a 65 20 74 68 72 65 73 68 6f 6c 64 20 61 62 6f  ze threshold abo
6300: 76 65 20 77 68 69 63 68 0a 20 20 5b 73 74 61 74  ve which.  [stat
6310: 65 6d 65 6e 74 20 6a 6f 75 72 6e 61 6c 73 5d 20  ement journals] 
6320: 61 72 65 20 6d 6f 76 65 64 20 66 72 6f 6d 20 6d  are moved from m
6330: 65 6d 6f 72 79 20 74 6f 20 64 69 73 6b 2e 0a 7d  emory to disk..}
6340: 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e  ..COMPILE_OPTION
6350: 20 7b 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d   {SQLITE_WIN32_M
6360: 41 4c 4c 4f 43 7d 20 7b 0a 20 20 54 68 69 73 20  ALLOC} {.  This 
6370: 6f 70 74 69 6f 6e 20 65 6e 61 62 6c 65 73 20 74  option enables t
6380: 68 65 20 75 73 65 20 6f 66 20 74 68 65 20 57 69  he use of the Wi
6390: 6e 64 6f 77 73 20 48 65 61 70 20 41 50 49 20 66  ndows Heap API f
63a0: 75 6e 63 74 69 6f 6e 73 20 66 6f 72 20 6d 65 6d  unctions for mem
63b0: 6f 72 79 0a 20 20 61 6c 6c 6f 63 61 74 69 6f 6e  ory.  allocation
63c0: 20 69 6e 73 74 65 61 64 20 6f 66 20 74 68 65 20   instead of the 
63d0: 73 74 61 6e 64 61 72 64 20 6c 69 62 72 61 72 79  standard library
63e0: 20 6d 61 6c 6c 6f 63 28 29 20 61 6e 64 20 66 72   malloc() and fr
63f0: 65 65 28 29 20 72 6f 75 74 69 6e 65 73 2e 0a 7d  ee() routines..}
6400: 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e  ..COMPILE_OPTION
6410: 20 7b 59 59 53 54 41 43 4b 44 45 50 54 48 3d 3c   {YYSTACKDEPTH=<
6420: 69 3e 26 6c 74 3b 6d 61 78 5f 64 65 70 74 68 26  i>&lt;max_depth&
6430: 67 74 3b 3c 2f 69 3e 7d 20 7b 0a 20 20 54 68 69  gt;</i>} {.  Thi
6440: 73 20 6d 61 63 72 6f 20 73 65 74 73 20 74 68 65  s macro sets the
6450: 20 6d 61 78 69 6d 75 6d 20 64 65 70 74 68 20 6f   maximum depth o
6460: 66 20 74 68 65 20 4c 41 4c 52 28 31 29 20 73 74  f the LALR(1) st
6470: 61 63 6b 20 75 73 65 64 20 62 79 0a 20 20 74 68  ack used by.  th
6480: 65 20 53 51 4c 20 70 61 72 73 65 72 20 77 69 74  e SQL parser wit
6490: 68 69 6e 20 53 51 4c 69 74 65 2e 20 20 54 68 65  hin SQLite.  The
64a0: 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 69   default value i
64b0: 73 20 31 30 30 2e 20 20 41 20 74 79 70 69 63 61  s 100.  A typica
64c0: 6c 0a 20 20 61 70 70 6c 69 63 61 74 69 6f 6e 20  l.  application 
64d0: 77 69 6c 6c 20 75 73 65 20 6c 65 73 73 20 74 68  will use less th
64e0: 61 6e 20 61 62 6f 75 74 20 32 30 20 6c 65 76 65  an about 20 leve
64f0: 6c 73 20 6f 66 20 74 68 65 20 73 74 61 63 6b 2e  ls of the stack.
6500: 0a 20 20 44 65 76 65 6c 6f 70 65 72 73 20 77 68  .  Developers wh
6510: 6f 73 65 20 61 70 70 6c 69 63 61 74 69 6f 6e 73  ose applications
6520: 20 63 6f 6e 74 61 69 6e 20 53 51 4c 20 73 74 61   contain SQL sta
6530: 74 65 6d 65 6e 74 73 20 74 68 61 74 20 0a 20 20  tements that .  
6540: 6e 65 65 64 20 6d 6f 72 65 20 74 68 61 6e 20 31  need more than 1
6550: 30 30 20 4c 41 4c 52 28 31 29 20 73 74 61 63 6b  00 LALR(1) stack
6560: 20 65 6e 74 72 69 65 73 20 73 68 6f 75 6c 64 20   entries should 
6570: 73 65 72 69 6f 75 73 6c 79 0a 20 20 63 6f 6e 73  seriously.  cons
6580: 69 64 65 72 20 72 65 66 61 63 74 6f 72 69 6e 67  ider refactoring
6590: 20 74 68 65 69 72 20 53 51 4c 20 61 73 20 69 74   their SQL as it
65a0: 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65   is likely to be
65b0: 20 77 65 6c 6c 20 62 65 79 6f 6e 64 0a 20 20 74   well beyond.  t
65c0: 68 65 20 61 62 69 6c 69 74 79 20 6f 66 20 61 6e  he ability of an
65d0: 79 20 68 75 6d 61 6e 20 74 6f 20 63 6f 6d 70 72  y human to compr
65e0: 65 68 65 6e 64 2e 0a 7d 0a 3c 2f 74 63 6c 3e 0a  ehend..}.</tcl>.
65f0: 0a 3c 68 31 3e 20 4f 70 74 69 6f 6e 73 20 54 6f  .<h1> Options To
6600: 20 53 65 74 20 53 69 7a 65 20 4c 69 6d 69 74 73   Set Size Limits
6610: 3c 2f 68 31 3e 0a 0a 3c 70 3e 54 68 65 72 65 20  </h1>..<p>There 
6620: 61 72 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  are compile-time
6630: 20 6f 70 74 69 6f 6e 73 20 74 68 61 74 20 77 69   options that wi
6640: 6c 6c 20 73 65 74 20 75 70 70 65 72 20 62 6f 75  ll set upper bou
6650: 6e 64 73 0a 6f 6e 20 74 68 65 20 73 69 7a 65 73  nds.on the sizes
6660: 20 6f 66 20 76 61 72 69 6f 75 73 20 73 74 72 75   of various stru
6670: 63 74 75 72 65 73 20 69 6e 20 53 51 4c 69 74 65  ctures in SQLite
6680: 2e 20 20 54 68 65 20 63 6f 6d 70 69 6c 65 2d 74  .  The compile-t
6690: 69 6d 65 0a 6f 70 74 69 6f 6e 73 20 6e 6f 72 6d  ime.options norm
66a0: 61 6c 6c 79 20 73 65 74 20 61 20 68 61 72 64 20  ally set a hard 
66b0: 75 70 70 65 72 20 62 6f 75 6e 64 20 74 68 61 74  upper bound that
66c0: 20 63 61 6e 20 62 65 20 63 68 61 6e 67 65 64 0a   can be changed.
66d0: 61 74 20 72 75 6e 2d 74 69 6d 65 20 6f 6e 20 69  at run-time on i
66e0: 6e 64 69 76 69 64 75 61 6c 20 5b 64 61 74 61 62  ndividual [datab
66f0: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 5d  ase connections]
6700: 20 75 73 69 6e 67 20 74 68 65 0a 5b 73 71 6c 69   using the.[sqli
6710: 74 65 33 5f 6c 69 6d 69 74 28 29 5d 20 69 6e 74  te3_limit()] int
6720: 65 72 66 61 63 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e  erface.</p>..<p>
6730: 54 68 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  The compile-time
6740: 20 6f 70 74 69 6f 6e 73 20 66 6f 72 20 73 65 74   options for set
6750: 74 69 6e 67 20 75 70 70 65 72 20 62 6f 75 6e 64  ting upper bound
6760: 73 20 61 72 65 0a 5b 6c 69 6d 69 74 73 20 7c 20  s are.[limits | 
6770: 64 6f 63 75 6d 65 6e 74 65 64 20 73 65 70 61 72  documented separ
6780: 61 74 65 6c 79 5d 2e 20 20 54 68 65 20 66 6f 6c  ately].  The fol
6790: 6c 6f 77 69 6e 67 20 69 73 20 61 20 6c 69 73 74  lowing is a list
67a0: 20 6f 66 0a 74 68 65 20 61 76 61 69 6c 61 62 6c   of.the availabl
67b0: 65 20 73 65 74 74 69 6e 67 73 3a 3c 2f 70 3e 0a  e settings:</p>.
67c0: 0a 3c 75 6c 3e 0a 3c 6c 69 3e 20 5b 53 51 4c 49  .<ul>.<li> [SQLI
67d0: 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 5d  TE_MAX_ATTACHED]
67e0: 20 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e 20 5b 53 51    </li>.<li> [SQ
67f0: 4c 49 54 45 5f 4d 41 58 5f 43 4f 4c 55 4d 4e 5d  LITE_MAX_COLUMN]
6800: 20 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e 20 5b 53 51    </li>.<li> [SQ
6810: 4c 49 54 45 5f 4d 41 58 5f 43 4f 4d 50 4f 55 4e  LITE_MAX_COMPOUN
6820: 44 5f 53 45 4c 45 43 54 5d 20 20 3c 2f 6c 69 3e  D_SELECT]  </li>
6830: 0a 3c 6c 69 3e 20 5b 53 51 4c 49 54 45 5f 4d 41  .<li> [SQLITE_MA
6840: 58 5f 45 58 50 52 5f 44 45 50 54 48 5d 20 20 3c  X_EXPR_DEPTH]  <
6850: 2f 6c 69 3e 0a 3c 6c 69 3e 20 5b 53 51 4c 49 54  /li>.<li> [SQLIT
6860: 45 5f 4d 41 58 5f 46 55 4e 43 54 49 4f 4e 5f 41  E_MAX_FUNCTION_A
6870: 52 47 5d 20 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e 20  RG]  </li>.<li> 
6880: 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47  [SQLITE_MAX_LENG
6890: 54 48 5d 20 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e 20  TH]  </li>.<li> 
68a0: 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 49 4b 45  [SQLITE_MAX_LIKE
68b0: 5f 50 41 54 54 45 52 4e 5f 4c 45 4e 47 54 48 5d  _PATTERN_LENGTH]
68c0: 20 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e 20 5b 53 51    </li>.<li> [SQ
68d0: 4c 49 54 45 5f 4d 41 58 5f 50 41 47 45 5f 43 4f  LITE_MAX_PAGE_CO
68e0: 55 4e 54 5d 20 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e  UNT]  </li>.<li>
68f0: 20 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 53 51 4c   [SQLITE_MAX_SQL
6900: 5f 4c 45 4e 47 54 48 5d 20 20 3c 2f 6c 69 3e 0a  _LENGTH]  </li>.
6910: 3c 6c 69 3e 20 5b 53 51 4c 49 54 45 5f 4d 41 58  <li> [SQLITE_MAX
6920: 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52  _VARIABLE_NUMBER
6930: 5d 20 20 3c 2f 6c 69 3e 0a 3c 2f 75 6c 3e 0a 0a  ]  </li>.</ul>..
6940: 3c 61 20 6e 61 6d 65 3d 22 63 6f 6e 74 72 6f 6c  <a name="control
6950: 66 65 61 74 75 72 65 73 22 3e 3c 2f 61 3e 0a 3c  features"></a>.<
6960: 68 31 3e 20 4f 70 74 69 6f 6e 73 20 54 6f 20 43  h1> Options To C
6970: 6f 6e 74 72 6f 6c 20 4f 70 65 72 61 74 69 6e 67  ontrol Operating
6980: 20 43 68 61 72 61 63 74 65 72 69 73 74 69 63 73   Characteristics
6990: 3c 2f 68 31 3e 0a 0a 3c 74 63 6c 3e 0a 43 4f 4d  </h1>..<tcl>.COM
69a0: 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c  PILE_OPTION {SQL
69b0: 49 54 45 5f 34 5f 42 59 54 45 5f 41 4c 49 47 4e  ITE_4_BYTE_ALIGN
69c0: 45 44 5f 4d 41 4c 4c 4f 43 7d 20 7b 0a 20 20 4f  ED_MALLOC} {.  O
69d0: 6e 20 6d 6f 73 74 20 73 79 73 74 65 6d 73 2c 20  n most systems, 
69e0: 74 68 65 20 6d 61 6c 6c 6f 63 28 29 20 73 79 73  the malloc() sys
69f0: 74 65 6d 20 63 61 6c 6c 20 72 65 74 75 72 6e 73  tem call returns
6a00: 20 61 20 62 75 66 66 65 72 20 74 68 61 74 20 69   a buffer that i
6a10: 73 0a 20 20 61 6c 69 67 6e 65 64 20 74 6f 20 61  s.  aligned to a
6a20: 6e 20 38 2d 62 79 74 65 20 62 6f 75 6e 64 61 72  n 8-byte boundar
6a30: 79 2e 20 20 42 75 74 20 6f 6e 20 73 6f 6d 65 20  y.  But on some 
6a40: 73 79 73 74 65 6d 73 20 28 65 78 3a 20 77 69 6e  systems (ex: win
6a50: 64 6f 77 73 29 20 6d 61 6c 6c 6f 63 28 29 0a 20  dows) malloc(). 
6a60: 20 72 65 74 75 72 6e 73 20 34 2d 62 79 74 65 20   returns 4-byte 
6a70: 61 6c 69 67 6e 65 64 20 70 6f 69 6e 74 65 72 2e  aligned pointer.
6a80: 20 20 54 68 69 73 20 63 6f 6d 70 69 6c 65 2d 74    This compile-t
6a90: 69 6d 65 20 6f 70 74 69 6f 6e 20 6d 75 73 74 20  ime option must 
6aa0: 62 65 20 75 73 65 64 0a 20 20 6f 6e 20 73 79 73  be used.  on sys
6ab0: 74 65 6d 73 20 74 68 61 74 20 72 65 74 75 72 6e  tems that return
6ac0: 20 34 2d 62 79 74 65 20 61 6c 69 67 6e 65 64 20   4-byte aligned 
6ad0: 70 6f 69 6e 74 65 72 73 20 66 72 6f 6d 20 6d 61  pointers from ma
6ae0: 6c 6c 6f 63 28 29 2e 0a 7d 0a 0a 43 4f 4d 50 49  lloc()..}..COMPI
6af0: 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54  LE_OPTION {SQLIT
6b00: 45 5f 43 41 53 45 5f 53 45 4e 53 49 54 49 56 45  E_CASE_SENSITIVE
6b10: 5f 4c 49 4b 45 7d 20 7b 0a 20 20 49 66 20 74 68  _LIKE} {.  If th
6b20: 69 73 20 6f 70 74 69 6f 6e 20 69 73 20 70 72 65  is option is pre
6b30: 73 65 6e 74 2c 20 74 68 65 6e 20 74 68 65 20 62  sent, then the b
6b40: 75 69 6c 74 2d 69 6e 20 5b 4c 49 4b 45 5d 20 6f  uilt-in [LIKE] o
6b50: 70 65 72 61 74 6f 72 20 77 69 6c 6c 20 62 65 0a  perator will be.
6b60: 20 20 63 61 73 65 20 73 65 6e 73 69 74 69 76 65    case sensitive
6b70: 2e 20 20 54 68 69 73 20 73 61 6d 65 20 65 66 66  .  This same eff
6b80: 65 63 74 20 63 61 6e 20 62 65 20 61 63 68 69 65  ect can be achie
6b90: 76 65 64 20 61 74 20 72 75 6e 2d 74 69 6d 65 20  ved at run-time 
6ba0: 75 73 69 6e 67 0a 20 20 74 68 65 20 5b 63 61 73  using.  the [cas
6bb0: 65 5f 73 65 6e 73 69 74 69 76 65 5f 6c 69 6b 65  e_sensitive_like
6bc0: 20 70 72 61 67 6d 61 5d 2e 0a 7d 0a 0a 43 4f 4d   pragma]..}..COM
6bd0: 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c  PILE_OPTION {SQL
6be0: 49 54 45 5f 44 49 52 45 43 54 5f 4f 56 45 52 46  ITE_DIRECT_OVERF
6bf0: 4c 4f 57 5f 52 45 41 44 7d 20 7b 0a 20 20 57 68  LOW_READ} {.  Wh
6c00: 65 6e 20 74 68 69 73 20 6f 70 74 69 6f 6e 20 69  en this option i
6c10: 73 20 70 72 65 73 65 6e 74 2c 20 63 6f 6e 74 65  s present, conte
6c20: 6e 74 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 0a  nt contained in.
6c30: 20 20 5b 6f 76 65 72 66 6c 6f 77 20 70 61 67 65    [overflow page
6c40: 73 5d 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  s] of the databa
6c50: 73 65 20 66 69 6c 65 20 69 73 20 72 65 61 64 20  se file is read 
6c60: 64 69 72 65 63 74 6c 79 20 66 72 6f 6d 20 64 69  directly from di
6c70: 73 6b 2c 0a 20 20 62 79 70 61 73 73 69 6e 67 20  sk,.  bypassing 
6c80: 74 68 65 20 5b 70 61 67 65 20 63 61 63 68 65 5d  the [page cache]
6c90: 2c 20 64 75 72 69 6e 67 20 72 65 61 64 20 74 72  , during read tr
6ca0: 61 6e 73 61 63 74 69 6f 6e 73 2e 20 20 49 6e 20  ansactions.  In 
6cb0: 61 70 70 6c 69 63 61 74 69 6f 6e 73 0a 20 20 74  applications.  t
6cc0: 68 61 74 20 64 6f 20 61 20 6c 6f 74 20 6f 66 20  hat do a lot of 
6cd0: 72 65 61 64 73 20 6f 66 20 6c 61 72 67 65 20 42  reads of large B
6ce0: 4c 4f 42 73 2c 20 74 68 69 73 20 6f 70 74 69 6f  LOBs, this optio
6cf0: 6e 20 6d 69 67 68 74 20 69 6d 70 72 6f 76 65 20  n might improve 
6d00: 72 65 61 64 0a 20 20 70 65 72 66 6f 72 6d 61 6e  read.  performan
6d10: 63 65 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f  ce..}..COMPILE_O
6d20: 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 48 41  PTION {SQLITE_HA
6d30: 56 45 5f 49 53 4e 41 4e 7d 20 7b 0a 20 20 49 66  VE_ISNAN} {.  If
6d40: 20 74 68 69 73 20 6f 70 74 69 6f 6e 20 69 73 20   this option is 
6d50: 70 72 65 73 65 6e 74 2c 20 74 68 65 6e 20 53 51  present, then SQ
6d60: 4c 69 74 65 20 77 69 6c 6c 20 75 73 65 20 74 68  Lite will use th
6d70: 65 20 69 73 6e 61 6e 28 29 20 66 75 6e 63 74 69  e isnan() functi
6d80: 6f 6e 20 66 72 6f 6d 0a 20 20 74 68 65 20 73 79  on from.  the sy
6d90: 73 74 65 6d 20 6d 61 74 68 20 6c 69 62 72 61 72  stem math librar
6da0: 79 2e 20 20 54 68 69 73 20 69 73 20 61 6e 20 61  y.  This is an a
6db0: 6c 69 61 73 20 66 6f 72 20 74 68 65 20 5b 48 41  lias for the [HA
6dc0: 56 45 5f 49 53 4e 41 4e 5d 20 63 6f 6e 66 69 67  VE_ISNAN] config
6dd0: 75 72 61 74 69 6f 6e 0a 20 20 6f 70 74 69 6f 6e  uration.  option
6de0: 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54  ..}..COMPILE_OPT
6df0: 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f 53 5f 4f  ION {SQLITE_OS_O
6e00: 54 48 45 52 3d 3c 69 3e 26 6c 74 3b 30 20 6f 72  THER=<i>&lt;0 or
6e10: 20 31 26 67 74 3b 3c 2f 69 3e 7d 20 7b 0a 20 20   1&gt;</i>} {.  
6e20: 54 68 65 20 6f 70 74 69 6f 6e 20 63 61 75 73 65  The option cause
6e30: 73 20 53 51 4c 69 74 65 20 74 6f 20 6f 6d 69 74  s SQLite to omit
6e40: 20 69 74 73 20 62 75 69 6c 74 2d 69 6e 20 6f 70   its built-in op
6e50: 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d 20 69  erating system i
6e60: 6e 74 65 72 66 61 63 65 73 0a 20 20 66 6f 72 20  nterfaces.  for 
6e70: 55 6e 69 78 2c 20 57 69 6e 64 6f 77 73 2c 20 61  Unix, Windows, a
6e80: 6e 64 20 4f 53 2f 32 2e 20 20 54 68 65 20 72 65  nd OS/2.  The re
6e90: 73 75 6c 74 69 6e 67 20 6c 69 62 72 61 72 79 20  sulting library 
6ea0: 77 69 6c 6c 20 68 61 76 65 20 6e 6f 20 64 65 66  will have no def
6eb0: 61 75 6c 74 0a 20 20 5b 73 71 6c 69 74 65 33 5f  ault.  [sqlite3_
6ec0: 76 66 73 20 7c 20 6f 70 65 72 61 74 69 6e 67 20  vfs | operating 
6ed0: 73 79 73 74 65 6d 20 69 6e 74 65 72 66 61 63 65  system interface
6ee0: 5d 2e 20 20 41 70 70 6c 69 63 61 74 69 6f 6e 73  ].  Applications
6ef0: 20 6d 75 73 74 20 75 73 65 0a 20 20 5b 73 71 6c   must use.  [sql
6f00: 69 74 65 33 5f 76 66 73 5f 72 65 67 69 73 74 65  ite3_vfs_registe
6f10: 72 28 29 5d 20 74 6f 20 72 65 67 69 73 74 65 72  r()] to register
6f20: 20 61 6e 20 61 70 70 72 6f 70 72 69 61 74 65 20   an appropriate 
6f30: 69 6e 74 65 72 66 61 63 65 20 62 65 66 6f 72 65  interface before
6f40: 0a 20 20 75 73 69 6e 67 20 53 51 4c 69 74 65 2e  .  using SQLite.
6f50: 20 20 41 70 70 6c 69 63 61 74 69 6f 6e 73 20 6d    Applications m
6f60: 75 73 74 20 61 6c 73 6f 20 73 75 70 70 6c 79 20  ust also supply 
6f70: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20  implementations 
6f80: 66 6f 72 20 74 68 65 0a 20 20 5b 73 71 6c 69 74  for the.  [sqlit
6f90: 65 33 5f 6f 73 5f 69 6e 69 74 28 29 5d 20 61 6e  e3_os_init()] an
6fa0: 64 20 5b 73 71 6c 69 74 65 33 5f 6f 73 5f 65 6e  d [sqlite3_os_en
6fb0: 64 28 29 5d 20 69 6e 74 65 72 66 61 63 65 73 2e  d()] interfaces.
6fc0: 20 20 54 68 65 20 75 73 75 61 6c 20 70 72 61 63    The usual prac
6fd0: 74 69 63 65 0a 20 20 69 73 20 66 6f 72 20 74 68  tice.  is for th
6fe0: 65 20 73 75 70 70 6c 69 65 64 20 5b 73 71 6c 69  e supplied [sqli
6ff0: 74 65 33 5f 6f 73 5f 69 6e 69 74 28 29 5d 20 74  te3_os_init()] t
7000: 6f 20 69 6e 76 6f 6b 65 20 5b 73 71 6c 69 74 65  o invoke [sqlite
7010: 33 5f 76 66 73 5f 72 65 67 69 73 74 65 72 28 29  3_vfs_register()
7020: 5d 2e 0a 20 20 53 51 4c 69 74 65 20 77 69 6c 6c  ]..  SQLite will
7030: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 69   automatically i
7040: 6e 76 6f 6b 65 20 5b 73 71 6c 69 74 65 33 5f 6f  nvoke [sqlite3_o
7050: 73 5f 69 6e 69 74 28 29 5d 20 77 68 65 6e 20 69  s_init()] when i
7060: 74 20 69 6e 69 74 69 61 6c 69 7a 65 73 2e 0a 0a  t initializes...
7070: 20 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 69 73    This option is
7080: 20 74 79 70 69 63 61 6c 6c 79 20 75 73 65 64 20   typically used 
7090: 77 68 65 6e 20 62 75 69 6c 64 69 6e 67 20 53 51  when building SQ
70a0: 4c 69 74 65 20 66 6f 72 20 61 6e 20 65 6d 62 65  Lite for an embe
70b0: 64 64 65 64 0a 20 20 70 6c 61 74 66 6f 72 6d 20  dded.  platform 
70c0: 77 69 74 68 20 61 20 63 75 73 74 6f 6d 20 6f 70  with a custom op
70d0: 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d 2e 0a  erating system..
70e0: 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f  }..COMPILE_OPTIO
70f0: 4e 20 7b 53 51 4c 49 54 45 5f 53 45 43 55 52 45  N {SQLITE_SECURE
7100: 5f 44 45 4c 45 54 45 7d 20 7b 0a 20 20 54 68 69  _DELETE} {.  Thi
7110: 73 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f  s compile-time o
7120: 70 74 69 6f 6e 20 63 68 61 6e 67 65 73 20 74 68  ption changes th
7130: 65 20 64 65 66 61 75 6c 74 20 73 65 74 74 69 6e  e default settin
7140: 67 20 6f 66 20 74 68 65 0a 20 20 5b 73 65 63 75  g of the.  [secu
7150: 72 65 5f 64 65 6c 65 74 65 20 70 72 61 67 6d 61  re_delete pragma
7160: 5d 2e 20 20 57 68 65 6e 20 74 68 69 73 20 6f 70  ].  When this op
7170: 74 69 6f 6e 20 69 73 20 6e 6f 74 20 75 73 65 64  tion is not used
7180: 2c 20 73 65 63 75 72 65 5f 64 65 6c 65 74 65 20  , secure_delete 
7190: 64 65 66 61 75 6c 74 73 0a 20 20 74 6f 20 6f 66  defaults.  to of
71a0: 66 2e 20 20 57 68 65 6e 20 74 68 69 73 20 6f 70  f.  When this op
71b0: 74 69 6f 6e 20 69 73 20 70 72 65 73 65 6e 74 2c  tion is present,
71c0: 20 73 65 63 75 72 65 5f 64 65 6c 65 74 65 20 64   secure_delete d
71d0: 65 66 61 75 6c 74 73 20 74 6f 20 6f 6e 2e 0a 0a  efaults to on...
71e0: 20 20 54 68 65 20 73 65 63 75 72 65 5f 64 65 6c    The secure_del
71f0: 65 74 65 20 73 65 74 74 69 6e 67 20 63 61 75 73  ete setting caus
7200: 65 73 20 64 65 6c 65 74 65 64 20 63 6f 6e 74 65  es deleted conte
7210: 6e 74 20 74 6f 20 62 65 20 6f 76 65 72 77 72 69  nt to be overwri
7220: 74 74 65 6e 20 77 69 74 68 0a 20 20 7a 65 72 6f  tten with.  zero
7230: 73 2e 20 20 54 68 65 72 65 20 69 73 20 61 20 73  s.  There is a s
7240: 6d 61 6c 6c 20 70 65 72 66 6f 72 6d 61 6e 63 65  mall performance
7250: 20 70 65 6e 61 6c 74 79 20 73 69 6e 63 65 20 61   penalty since a
7260: 64 64 69 74 69 6f 6e 61 6c 20 49 2f 4f 0a 20 20  dditional I/O.  
7270: 6d 75 73 74 20 6f 63 63 75 72 2e 20 20 4f 6e 20  must occur.  On 
7280: 74 68 65 20 6f 74 68 65 72 20 68 61 6e 64 2c 20  the other hand, 
7290: 73 65 63 75 72 65 5f 64 65 6c 65 74 65 20 63 61  secure_delete ca
72a0: 6e 20 70 72 65 76 65 6e 74 20 66 72 61 67 6d 65  n prevent fragme
72b0: 6e 74 73 20 6f 66 20 0a 20 20 73 65 6e 73 69 74  nts of .  sensit
72c0: 69 76 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ive information 
72d0: 66 72 6f 6d 20 6c 69 6e 67 65 72 69 6e 67 20 69  from lingering i
72e0: 6e 20 75 6e 75 73 65 64 20 70 61 72 74 73 20 6f  n unused parts o
72f0: 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  f the database f
7300: 69 6c 65 20 0a 20 20 61 66 74 65 72 20 69 74 20  ile .  after it 
7310: 68 61 73 20 62 65 65 6e 20 64 65 6c 65 74 65 64  has been deleted
7320: 2e 20 20 53 65 65 20 74 68 65 20 64 6f 63 75 6d  .  See the docum
7330: 65 6e 74 61 74 69 6f 6e 20 6f 6e 20 74 68 65 0a  entation on the.
7340: 20 20 5b 73 65 63 75 72 65 5f 64 65 6c 65 74 65    [secure_delete
7350: 20 70 72 61 67 6d 61 5d 20 66 6f 72 20 61 64 64   pragma] for add
7360: 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
7370: 69 6f 6e 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f  ion..}..COMPILE_
7380: 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 54  OPTION {SQLITE_T
7390: 48 52 45 41 44 53 41 46 45 3d 3c 69 3e 26 6c 74  HREADSAFE=<i>&lt
73a0: 3b 30 20 6f 72 20 31 20 6f 72 20 32 26 67 74 3b  ;0 or 1 or 2&gt;
73b0: 3c 2f 69 3e 7d 20 7b 0a 20 20 54 68 69 73 20 6f  </i>} {.  This o
73c0: 70 74 69 6f 6e 20 63 6f 6e 74 72 6f 6c 73 20 77  ption controls w
73d0: 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 63 6f  hether or not co
73e0: 64 65 20 69 73 20 69 6e 63 6c 75 64 65 64 20 69  de is included i
73f0: 6e 20 53 51 4c 69 74 65 20 74 6f 0a 20 20 65 6e  n SQLite to.  en
7400: 61 62 6c 65 20 69 74 20 74 6f 20 6f 70 65 72 61  able it to opera
7410: 74 65 20 73 61 66 65 6c 79 20 69 6e 20 61 20 6d  te safely in a m
7420: 75 6c 74 69 74 68 72 65 61 64 65 64 20 65 6e 76  ultithreaded env
7430: 69 72 6f 6e 6d 65 6e 74 2e 20 20 54 68 65 0a 20  ironment.  The. 
7440: 20 64 65 66 61 75 6c 74 20 69 73 20 53 51 4c 49   default is SQLI
7450: 54 45 5f 54 48 52 45 41 44 53 41 46 45 3d 31 20  TE_THREADSAFE=1 
7460: 77 68 69 63 68 20 69 73 20 73 61 66 65 20 66 6f  which is safe fo
7470: 72 20 75 73 65 20 69 6e 20 61 20 6d 75 6c 74 69  r use in a multi
7480: 74 68 72 65 61 64 65 64 0a 20 20 65 6e 76 69 72  threaded.  envir
7490: 6f 6e 6d 65 6e 74 2e 20 20 57 68 65 6e 20 63 6f  onment.  When co
74a0: 6d 70 69 6c 65 64 20 77 69 74 68 20 53 51 4c 49  mpiled with SQLI
74b0: 54 45 5f 54 48 52 45 41 44 53 41 46 45 3d 30 20  TE_THREADSAFE=0 
74c0: 61 6c 6c 20 6d 75 74 65 78 69 6e 67 20 63 6f 64  all mutexing cod
74d0: 65 0a 20 20 69 73 20 6f 6d 69 74 74 65 64 20 61  e.  is omitted a
74e0: 6e 64 20 69 74 20 69 73 20 75 6e 73 61 66 65 20  nd it is unsafe 
74f0: 74 6f 20 75 73 65 20 53 51 4c 69 74 65 20 69 6e  to use SQLite in
7500: 20 61 20 6d 75 6c 74 69 74 68 72 65 61 64 65 64   a multithreaded
7510: 20 70 72 6f 67 72 61 6d 2e 0a 20 20 57 68 65 6e   program..  When
7520: 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 53   compiled with S
7530: 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45  QLITE_THREADSAFE
7540: 3d 32 2c 20 53 51 4c 69 74 65 20 63 61 6e 20 62  =2, SQLite can b
7550: 65 20 75 73 65 64 20 69 6e 20 61 20 6d 75 6c 74  e used in a mult
7560: 69 74 68 72 65 61 64 65 64 0a 20 20 70 72 6f 67  ithreaded.  prog
7570: 72 61 6d 20 73 6f 20 6c 6f 6e 67 20 61 73 20 6e  ram so long as n
7580: 6f 20 74 77 6f 20 74 68 72 65 61 64 73 20 61 74  o two threads at
7590: 74 65 6d 70 74 20 74 6f 20 75 73 65 20 74 68 65  tempt to use the
75a0: 20 73 61 6d 65 0a 20 20 5b 64 61 74 61 62 61 73   same.  [databas
75b0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d 20 28 6f  e connection] (o
75c0: 72 20 61 6e 79 20 5b 70 72 65 70 61 72 65 64 20  r any [prepared 
75d0: 73 74 61 74 65 6d 65 6e 74 73 5d 20 64 65 72 69  statements] deri
75e0: 76 65 64 20 66 72 6f 6d 0a 20 20 74 68 61 74 20  ved from.  that 
75f0: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
7600: 69 6f 6e 29 20 61 74 20 74 68 65 20 73 61 6d 65  ion) at the same
7610: 20 74 69 6d 65 2e 0a 0a 20 20 54 6f 20 70 75 74   time...  To put
7620: 20 69 74 20 61 6e 6f 74 68 65 72 20 77 61 79 2c   it another way,
7630: 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41   SQLITE_THREADSA
7640: 46 45 3d 31 20 73 65 74 73 20 74 68 65 20 64 65  FE=1 sets the de
7650: 66 61 75 6c 74 0a 20 20 5b 74 68 72 65 61 64 69  fault.  [threadi
7660: 6e 67 20 6d 6f 64 65 5d 20 74 6f 20 53 65 72 69  ng mode] to Seri
7670: 61 6c 69 7a 65 64 2e 20 20 53 51 4c 49 54 45 5f  alized.  SQLITE_
7680: 54 48 52 45 41 44 53 41 46 45 3d 32 20 73 65 74  THREADSAFE=2 set
7690: 73 20 74 68 65 20 64 65 66 61 75 6c 74 0a 20 20  s the default.  
76a0: 5b 74 68 72 65 61 64 69 6e 67 20 6d 6f 64 65 5d  [threading mode]
76b0: 20 74 6f 20 4d 75 6c 74 69 2d 74 68 72 65 61 64   to Multi-thread
76c0: 65 64 2e 20 20 41 6e 64 20 53 51 4c 49 54 45 5f  ed.  And SQLITE_
76d0: 54 48 52 45 41 44 53 41 46 45 3d 30 20 73 65 74  THREADSAFE=0 set
76e0: 73 20 74 68 65 0a 20 20 5b 74 68 72 65 61 64 69  s the.  [threadi
76f0: 6e 67 20 6d 6f 64 65 5d 20 74 6f 20 53 69 6e 67  ng mode] to Sing
7700: 6c 65 2d 74 68 72 65 61 64 65 64 2e 0a 0a 20 20  le-threaded...  
7710: 54 68 65 20 76 61 6c 75 65 20 6f 66 20 53 51 4c  The value of SQL
7720: 49 54 45 5f 54 48 52 45 41 44 53 41 46 45 20 63  ITE_THREADSAFE c
7730: 61 6e 20 62 65 20 64 65 74 65 72 6d 69 6e 65 64  an be determined
7740: 20 61 74 20 72 75 6e 2d 74 69 6d 65 0a 20 20 75   at run-time.  u
7750: 73 69 6e 67 20 74 68 65 20 5b 73 71 6c 69 74 65  sing the [sqlite
7760: 33 5f 74 68 72 65 61 64 73 61 66 65 28 29 5d 20  3_threadsafe()] 
7770: 69 6e 74 65 72 66 61 63 65 2e 0a 0a 20 20 57 68  interface...  Wh
7780: 65 6e 20 53 51 4c 69 74 65 20 68 61 73 20 62 65  en SQLite has be
7790: 65 6e 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68  en compiled with
77a0: 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41   SQLITE_THREADSA
77b0: 46 45 3d 31 20 6f 72 0a 20 20 53 51 4c 49 54 45  FE=1 or.  SQLITE
77c0: 5f 54 48 52 45 41 44 53 41 46 45 3d 32 20 74 68  _THREADSAFE=2 th
77d0: 65 6e 20 74 68 65 20 5b 74 68 72 65 61 64 69 6e  en the [threadin
77e0: 67 20 6d 6f 64 65 5d 0a 20 20 63 61 6e 20 62 65  g mode].  can be
77f0: 20 61 6c 74 65 72 65 64 20 61 74 20 72 75 6e 2d   altered at run-
7800: 74 69 6d 65 20 75 73 69 6e 67 20 74 68 65 20 5b  time using the [
7810: 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 28 29  sqlite3_config()
7820: 5d 20 69 6e 74 65 72 66 61 63 65 20 74 6f 67 65  ] interface toge
7830: 74 68 65 72 0a 20 20 77 69 74 68 20 6f 6e 65 20  ther.  with one 
7840: 6f 66 20 74 68 65 73 65 20 76 65 72 62 73 3a 0a  of these verbs:.
7850: 0a 20 20 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 5b 53  .  <ul>.  <li>[S
7860: 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 53 49 4e  QLITE_CONFIG_SIN
7870: 47 4c 45 54 48 52 45 41 44 5d 0a 20 20 3c 6c 69  GLETHREAD].  <li
7880: 3e 5b 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f  >[SQLITE_CONFIG_
7890: 4d 55 4c 54 49 54 48 52 45 41 44 5d 0a 20 20 3c  MULTITHREAD].  <
78a0: 6c 69 3e 5b 53 51 4c 49 54 45 5f 43 4f 4e 46 49  li>[SQLITE_CONFI
78b0: 47 5f 53 45 52 49 41 4c 49 5a 45 44 5d 0a 20 20  G_SERIALIZED].  
78c0: 3c 2f 75 6c 3e 0a 0a 20 20 54 68 65 20 5b 53 51  </ul>..  The [SQ
78d0: 4c 49 54 45 5f 4f 50 45 4e 5f 4e 4f 4d 55 54 45  LITE_OPEN_NOMUTE
78e0: 58 5d 20 61 6e 64 0a 20 20 5b 53 51 4c 49 54 45  X] and.  [SQLITE
78f0: 5f 4f 50 45 4e 5f 46 55 4c 4c 4d 55 54 45 58 5d  _OPEN_FULLMUTEX]
7900: 20 66 6c 61 67 73 20 74 6f 20 5b 73 71 6c 69 74   flags to [sqlit
7910: 65 33 5f 6f 70 65 6e 5f 76 32 28 29 5d 20 63 61  e3_open_v2()] ca
7920: 6e 20 61 6c 73 6f 20 62 65 20 75 73 65 64 0a 20  n also be used. 
7930: 20 74 6f 20 61 64 6a 75 73 74 20 74 68 65 20 5b   to adjust the [
7940: 74 68 72 65 61 64 69 6e 67 20 6d 6f 64 65 5d 20  threading mode] 
7950: 6f 66 20 69 6e 64 69 76 69 64 75 61 6c 20 5b 64  of individual [d
7960: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
7970: 6f 6e 73 5d 0a 20 20 61 74 20 72 75 6e 2d 74 69  ons].  at run-ti
7980: 6d 65 2e 0a 0a 20 20 4e 6f 74 65 20 74 68 61 74  me...  Note that
7990: 20 77 68 65 6e 20 53 51 4c 69 74 65 20 69 73 20   when SQLite is 
79a0: 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 53 51  compiled with SQ
79b0: 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45 3d  LITE_THREADSAFE=
79c0: 30 2c 20 74 68 65 20 63 6f 64 65 0a 20 20 74 6f  0, the code.  to
79d0: 20 6d 61 6b 65 20 53 51 4c 69 74 65 20 74 68 72   make SQLite thr
79e0: 65 61 64 73 61 66 65 20 69 73 20 6f 6d 69 74 74  eadsafe is omitt
79f0: 65 64 20 66 72 6f 6d 20 74 68 65 20 62 75 69 6c  ed from the buil
7a00: 64 2e 20 20 57 68 65 6e 20 74 68 69 73 20 6f 63  d.  When this oc
7a10: 63 75 72 73 2c 0a 20 20 69 74 20 69 73 20 69 6d  curs,.  it is im
7a20: 70 6f 73 73 69 62 6c 65 20 74 6f 20 63 68 61 6e  possible to chan
7a30: 67 65 20 74 68 65 20 5b 74 68 72 65 61 64 69 6e  ge the [threadin
7a40: 67 20 6d 6f 64 65 5d 20 61 74 20 73 74 61 72 74  g mode] at start
7a50: 2d 74 69 6d 65 20 6f 72 20 72 75 6e 2d 74 69 6d  -time or run-tim
7a60: 65 2e 0a 0a 20 20 53 65 65 20 74 68 65 20 5b 74  e...  See the [t
7a70: 68 72 65 61 64 69 6e 67 20 6d 6f 64 65 5d 20 64  hreading mode] d
7a80: 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 66 6f 72  ocumentation for
7a90: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
7aa0: 72 6d 61 74 69 6f 6e 0a 20 20 6f 6e 20 61 73 70  rmation.  on asp
7ab0: 65 63 74 73 20 6f 66 20 75 73 69 6e 67 20 53 51  ects of using SQ
7ac0: 4c 69 74 65 20 69 6e 20 61 20 6d 75 6c 74 69 74  Lite in a multit
7ad0: 68 72 65 61 64 65 64 20 65 6e 76 69 72 6f 6e 6d  hreaded environm
7ae0: 65 6e 74 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f  ent..}..COMPILE_
7af0: 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 54  OPTION {SQLITE_T
7b00: 45 4d 50 5f 53 54 4f 52 45 3d 3c 69 3e 26 6c 74  EMP_STORE=<i>&lt
7b10: 3b 30 20 74 68 72 6f 75 67 68 20 33 26 67 74 3b  ;0 through 3&gt;
7b20: 3c 2f 69 3e 7d 20 7b 0a 20 20 54 68 69 73 20 6f  </i>} {.  This o
7b30: 70 74 69 6f 6e 20 63 6f 6e 74 72 6f 6c 73 20 77  ption controls w
7b40: 68 65 74 68 65 72 20 74 65 6d 70 6f 72 61 72 79  hether temporary
7b50: 20 66 69 6c 65 73 20 61 72 65 20 73 74 6f 72 65   files are store
7b60: 64 20 6f 6e 20 64 69 73 6b 20 6f 72 0a 20 20 69  d on disk or.  i
7b70: 6e 20 6d 65 6d 6f 72 79 2e 20 20 54 68 65 20 6d  n memory.  The m
7b80: 65 61 6e 69 6e 67 73 20 66 6f 72 20 76 61 72 69  eanings for vari
7b90: 6f 75 73 20 73 65 74 74 69 6e 67 73 20 6f 66 20  ous settings of 
7ba0: 74 68 69 73 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  this compile-tim
7bb0: 65 0a 20 20 6f 70 74 69 6f 6e 20 61 72 65 20 61  e.  option are a
7bc0: 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 20 20 3c 74  s follows:..  <t
7bd0: 61 62 6c 65 20 63 65 6c 6c 70 61 64 64 69 6e 67  able cellpadding
7be0: 3d 22 32 22 20 62 6f 72 64 65 72 3d 22 31 22 3e  ="2" border="1">
7bf0: 0a 20 20 3c 74 72 3e 3c 74 68 3e 53 51 4c 49 54  .  <tr><th>SQLIT
7c00: 45 5f 54 45 4d 50 5f 53 54 4f 52 45 3c 2f 74 68  E_TEMP_STORE</th
7c10: 3e 3c 74 68 3e 4d 65 61 6e 69 6e 67 3c 2f 74 68  ><th>Meaning</th
7c20: 3e 3c 2f 74 72 3e 0a 20 20 3c 74 72 3e 3c 74 64  ></tr>.  <tr><td
7c30: 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
7c40: 30 3c 2f 74 64 3e 3c 74 64 3e 41 6c 77 61 79 73  0</td><td>Always
7c50: 20 75 73 65 20 74 65 6d 70 6f 72 61 72 79 20 66   use temporary f
7c60: 69 6c 65 73 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 20  iles</td></tr>. 
7c70: 20 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 22   <tr><td align="
7c80: 63 65 6e 74 65 72 22 3e 31 3c 2f 74 64 3e 3c 74  center">1</td><t
7c90: 64 3e 55 73 65 20 66 69 6c 65 73 20 62 79 20 64  d>Use files by d
7ca0: 65 66 61 75 6c 74 20 62 75 74 20 61 6c 6c 6f 77  efault but allow
7cb0: 20 74 68 65 0a 20 20 5b 50 52 41 47 4d 41 20 74   the.  [PRAGMA t
7cc0: 65 6d 70 5f 73 74 6f 72 65 5d 20 63 6f 6d 6d 61  emp_store] comma
7cd0: 6e 64 20 74 6f 20 6f 76 65 72 72 69 64 65 3c 2f  nd to override</
7ce0: 74 64 3e 3c 2f 74 72 3e 0a 20 20 3c 74 72 3e 3c  td></tr>.  <tr><
7cf0: 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  td align="center
7d00: 22 3e 32 3c 2f 74 64 3e 3c 74 64 3e 55 73 65 20  ">2</td><td>Use 
7d10: 6d 65 6d 6f 72 79 20 62 79 20 64 65 66 61 75 6c  memory by defaul
7d20: 74 20 62 75 74 20 61 6c 6c 6f 77 20 74 68 65 0a  t but allow the.
7d30: 20 20 5b 50 52 41 47 4d 41 20 74 65 6d 70 5f 73    [PRAGMA temp_s
7d40: 74 6f 72 65 5d 20 63 6f 6d 6d 61 6e 64 20 74 6f  tore] command to
7d50: 20 6f 76 65 72 72 69 64 65 3c 2f 74 64 3e 3c 2f   override</td></
7d60: 74 72 3e 0a 20 20 3c 74 72 3e 3c 74 64 20 61 6c  tr>.  <tr><td al
7d70: 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 33 3c 2f  ign="center">3</
7d80: 74 64 3e 3c 74 64 3e 41 6c 77 61 79 73 20 75 73  td><td>Always us
7d90: 65 20 6d 65 6d 6f 72 79 3c 2f 74 64 3e 3c 2f 74  e memory</td></t
7da0: 72 3e 0a 20 20 3c 2f 74 61 62 6c 65 3e 0a 0a 20  r>.  </table>.. 
7db0: 20 54 68 65 20 64 65 66 61 75 6c 74 20 73 65 74   The default set
7dc0: 74 69 6e 67 20 69 73 20 31 2e 20 20 0a 20 20 41  ting is 1.  .  A
7dd0: 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
7de0: 61 74 69 6f 6e 20 63 61 6e 20 62 65 20 66 6f 75  ation can be fou
7df0: 6e 64 20 69 6e 20 5b 74 65 6d 70 73 74 6f 72 65  nd in [tempstore
7e00: 20 7c 20 74 65 6d 70 66 69 6c 65 73 2e 68 74 6d   | tempfiles.htm
7e10: 6c 5d 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f  l]..}..COMPILE_O
7e20: 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 54 52  PTION {SQLITE_TR
7e30: 41 43 45 5f 53 49 5a 45 5f 4c 49 4d 49 54 3d 3c  ACE_SIZE_LIMIT=<
7e40: 69 3e 4e 3c 2f 69 3e 7d 20 7b 0a 20 20 49 66 20  i>N</i>} {.  If 
7e50: 74 68 69 73 20 6d 61 63 72 6f 20 69 73 20 64 65  this macro is de
7e60: 66 69 6e 65 64 20 74 6f 20 61 20 70 6f 73 69 74  fined to a posit
7e70: 69 76 65 20 69 6e 74 65 67 65 72 20 3c 69 3e 4e  ive integer <i>N
7e80: 3c 2f 69 3e 2c 20 74 68 65 6e 20 74 68 65 20 6c  </i>, then the l
7e90: 65 6e 67 74 68 20 6f 66 0a 20 20 73 74 72 69 6e  ength of.  strin
7ea0: 67 73 20 61 6e 64 20 42 4c 4f 42 20 74 68 61 74  gs and BLOB that
7eb0: 20 61 72 65 20 65 78 70 61 6e 64 65 64 20 69 6e   are expanded in
7ec0: 74 6f 20 70 61 72 61 6d 65 74 65 72 73 20 69 6e  to parameters in
7ed0: 20 74 68 65 20 6f 75 74 70 75 74 20 6f 66 0a 20   the output of. 
7ee0: 20 5b 73 71 6c 69 74 65 33 5f 74 72 61 63 65 28   [sqlite3_trace(
7ef0: 29 5d 20 69 73 20 6c 69 6d 69 74 65 64 20 74 6f  )] is limited to
7f00: 20 3c 69 3e 4e 3c 2f 69 3e 20 62 79 74 65 73 2e   <i>N</i> bytes.
7f10: 20 20 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50    .}..COMPILE_OP
7f20: 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 55 53 45  TION {SQLITE_USE
7f30: 5f 55 52 49 7d 20 7b 0a 20 20 54 68 69 73 20 6f  _URI} {.  This o
7f40: 70 74 69 6f 6e 20 63 61 75 73 65 73 20 74 68 65  ption causes the
7f50: 20 5b 55 52 49 20 66 69 6c 65 6e 61 6d 65 5d 20   [URI filename] 
7f60: 70 72 6f 63 65 73 73 20 6c 6f 67 69 63 20 74 6f  process logic to
7f70: 20 62 65 20 65 6e 61 62 6c 65 64 20 62 79 20 0a   be enabled by .
7f80: 20 20 64 65 66 61 75 6c 74 2e 20 20 0a 7d 0a 0a    default.  .}..
7f90: 3c 2f 74 63 6c 3e 0a 0a 3c 61 20 6e 61 6d 65 3d  </tcl>..<a name=
7fa0: 22 65 6e 61 62 6c 65 66 65 61 74 75 72 65 73 22  "enablefeatures"
7fb0: 3e 3c 2f 61 3e 0a 3c 68 31 3e 20 4f 70 74 69 6f  ></a>.<h1> Optio
7fc0: 6e 73 20 54 6f 20 45 6e 61 62 6c 65 20 46 65 61  ns To Enable Fea
7fd0: 74 75 72 65 73 20 4e 6f 72 6d 61 6c 6c 79 20 54  tures Normally T
7fe0: 75 72 6e 65 64 20 4f 66 66 3c 2f 68 31 3e 0a 0a  urned Off</h1>..
7ff0: 3c 74 63 6c 3e 0a 43 4f 4d 50 49 4c 45 5f 4f 50  <tcl>.COMPILE_OP
8000: 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 41 4c 4c  TION {SQLITE_ALL
8010: 4f 57 5f 55 52 49 5f 41 55 54 48 4f 52 49 54 59  OW_URI_AUTHORITY
8020: 7d 20 7b 0a 20 20 5b 55 52 49 20 66 69 6c 65 6e  } {.  [URI filen
8030: 61 6d 65 73 5d 20 6e 6f 72 6d 61 6c 6c 79 20 74  ames] normally t
8040: 68 72 6f 77 73 20 61 6e 20 65 72 72 6f 72 20 69  hrows an error i
8050: 66 20 74 68 65 20 61 75 74 68 6f 72 69 74 79 20  f the authority 
8060: 73 65 63 74 69 6f 6e 20 69 73 0a 20 20 6e 6f 74  section is.  not
8070: 20 65 69 74 68 65 72 20 65 6d 70 74 79 20 6f 72   either empty or
8080: 20 22 6c 6f 63 61 6c 68 6f 73 74 22 2e 20 20 48   "localhost".  H
8090: 6f 77 65 76 65 72 2c 20 69 66 20 53 51 4c 69 74  owever, if SQLit
80a0: 65 20 69 73 20 63 6f 6d 70 69 6c 65 64 20 77 69  e is compiled wi
80b0: 74 68 0a 20 20 74 68 65 20 53 51 4c 49 54 45 5f  th.  the SQLITE_
80c0: 41 4c 4c 4f 57 5f 55 52 49 5f 41 55 54 48 4f 52  ALLOW_URI_AUTHOR
80d0: 49 54 59 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  ITY compile-time
80e0: 20 6f 70 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68   option, then th
80f0: 65 20 55 52 49 20 69 73 0a 20 20 63 6f 6e 76 65  e URI is.  conve
8100: 72 74 65 64 20 69 6e 74 6f 20 61 20 55 6e 69 66  rted into a Unif
8110: 6f 72 6d 20 4e 61 6d 69 6e 67 20 43 6f 6e 76 65  orm Naming Conve
8120: 6e 74 69 6f 6e 20 28 55 4e 43 29 20 66 69 6c 65  ntion (UNC) file
8130: 6e 61 6d 65 20 61 6e 64 20 70 61 73 73 65 64 0a  name and passed.
8140: 20 20 64 6f 77 6e 20 74 6f 20 74 68 65 20 75 6e    down to the un
8150: 64 65 72 6c 79 69 6e 67 20 6f 70 65 72 61 74 69  derlying operati
8160: 6e 67 20 73 79 73 74 65 6d 20 74 68 61 74 20 77  ng system that w
8170: 61 79 2e 20 20 0a 20 20 3c 70 3e 0a 20 20 53 6f  ay.  .  <p>.  So
8180: 6d 65 20 66 75 74 75 72 65 20 76 65 72 73 69 6f  me future versio
8190: 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 6d 61 79  ns of SQLite may
81a0: 20 63 68 61 6e 67 65 20 74 6f 20 65 6e 61 62 6c   change to enabl
81b0: 65 20 74 68 69 73 20 66 65 61 74 75 72 65 0a 20  e this feature. 
81c0: 20 62 79 20 64 65 66 61 75 6c 74 2e 0a 7d 0a 43   by default..}.C
81d0: 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53  OMPILE_OPTION {S
81e0: 51 4c 49 54 45 5f 41 4c 4c 4f 57 5f 43 4f 56 45  QLITE_ALLOW_COVE
81f0: 52 49 4e 47 5f 49 4e 44 45 58 5f 53 43 41 4e 3d  RING_INDEX_SCAN=
8200: 3c 69 3e 26 6c 74 3b 30 20 6f 72 20 31 26 67 74  <i>&lt;0 or 1&gt
8210: 3b 3c 2f 69 3e 7d 20 7b 0a 20 20 54 68 69 73 20  ;</i>} {.  This 
8220: 43 2d 70 72 65 70 72 6f 63 65 73 73 20 6d 61 63  C-preprocess mac
8230: 72 6f 20 64 65 74 65 72 6d 69 6e 65 73 20 74 68  ro determines th
8240: 65 20 64 65 66 61 75 6c 74 20 73 65 74 74 69 6e  e default settin
8250: 67 20 6f 66 20 74 68 65 0a 20 20 5b 53 51 4c 49  g of the.  [SQLI
8260: 54 45 5f 43 4f 4e 46 49 47 5f 43 4f 56 45 52 49  TE_CONFIG_COVERI
8270: 4e 47 5f 49 4e 44 45 58 5f 53 43 41 4e 5d 20 63  NG_INDEX_SCAN] c
8280: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 73 65 74  onfiguration set
8290: 74 69 6e 67 2e 20 20 49 74 20 64 65 66 61 75 6c  ting.  It defaul
82a0: 74 73 0a 20 20 74 6f 20 31 20 28 6f 6e 29 20 77  ts.  to 1 (on) w
82b0: 68 69 63 68 20 6d 65 61 6e 73 20 74 68 61 74 20  hich means that 
82c0: 63 6f 76 65 72 69 6e 67 20 69 6e 64 69 63 65 73  covering indices
82d0: 20 61 72 65 20 75 73 65 64 20 66 6f 72 20 66 75   are used for fu
82e0: 6c 6c 20 74 61 62 6c 65 0a 20 20 73 63 61 6e 73  ll table.  scans
82f0: 20 77 68 65 72 65 20 70 6f 73 73 69 62 6c 65 2c   where possible,
8300: 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 72 65 64   in order to red
8310: 75 63 65 20 49 2f 4f 20 61 6e 64 20 69 6d 70 72  uce I/O and impr
8320: 6f 76 65 20 70 65 72 66 6f 72 6d 61 6e 63 65 2e  ove performance.
8330: 0a 20 20 48 6f 77 65 76 65 72 2c 20 74 68 65 20  .  However, the 
8340: 75 73 65 20 6f 66 20 61 20 63 6f 76 65 72 69 6e  use of a coverin
8350: 67 20 69 6e 64 65 78 20 66 6f 72 20 61 20 66 75  g index for a fu
8360: 6c 6c 20 73 63 61 6e 20 77 69 6c 6c 20 63 61 75  ll scan will cau
8370: 73 65 20 72 65 73 75 6c 74 73 0a 20 20 74 6f 20  se results.  to 
8380: 61 70 70 65 61 72 20 69 6e 20 61 20 64 69 66 66  appear in a diff
8390: 65 72 65 6e 74 20 6f 72 64 65 72 20 66 72 6f 6d  erent order from
83a0: 20 6c 65 67 61 63 79 2c 20 77 68 69 63 68 20 63   legacy, which c
83b0: 6f 75 6c 64 20 63 61 75 73 65 20 73 6f 6d 65 0a  ould cause some.
83c0: 20 20 28 69 6e 63 6f 72 72 65 63 74 6c 79 2d 63    (incorrectly-c
83d0: 6f 64 65 64 29 20 6c 65 67 61 63 79 20 61 70 70  oded) legacy app
83e0: 6c 69 63 61 74 69 6f 6e 73 20 74 6f 20 62 72 65  lications to bre
83f0: 61 6b 2e 20 20 48 65 6e 63 65 2c 20 74 68 65 20  ak.  Hence, the 
8400: 63 6f 76 65 72 69 6e 67 0a 20 20 69 6e 64 65 78  covering.  index
8410: 20 73 63 61 6e 20 6f 70 74 69 6f 6e 20 63 61 6e   scan option can
8420: 20 62 65 20 64 69 73 61 62 6c 65 64 20 61 74 20   be disabled at 
8430: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 6e 20  compile-time on 
8440: 73 79 73 74 65 6d 73 20 74 68 61 74 20 77 68 61  systems that wha
8450: 74 0a 20 20 74 6f 20 6d 69 6e 69 6d 69 7a 65 20  t.  to minimize 
8460: 74 68 65 69 72 20 72 69 73 6b 20 6f 66 20 65 78  their risk of ex
8470: 70 6f 73 69 6e 67 20 65 72 72 6f 72 73 20 69 6e  posing errors in
8480: 20 6c 65 67 61 63 79 20 61 70 70 6c 69 63 61 74   legacy applicat
8490: 69 6f 6e 73 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45  ions..}..COMPILE
84a0: 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f  _OPTION {SQLITE_
84b0: 45 4e 41 42 4c 45 5f 38 5f 33 5f 4e 41 4d 45 53  ENABLE_8_3_NAMES
84c0: 3d 3c 69 3e 26 6c 74 3b 31 20 6f 72 20 32 26 67  =<i>&lt;1 or 2&g
84d0: 74 3b 3c 2f 69 3e 7d 20 7b 0a 20 20 49 66 20 74  t;</i>} {.  If t
84e0: 68 69 73 20 43 2d 70 72 65 70 72 6f 63 65 73 73  his C-preprocess
84f0: 6f 72 20 6d 61 63 72 6f 20 69 73 20 64 65 66 69  or macro is defi
8500: 6e 65 64 2c 20 74 68 65 6e 20 65 78 74 72 61 20  ned, then extra 
8510: 63 6f 64 65 20 69 73 0a 20 20 69 6e 63 6c 75 64  code is.  includ
8520: 65 64 20 74 68 61 74 20 61 6c 6c 6f 77 73 20 53  ed that allows S
8530: 51 4c 69 74 65 20 74 6f 20 66 75 6e 63 74 69 6f  QLite to functio
8540: 6e 20 6f 6e 20 61 20 66 69 6c 65 73 79 73 74 65  n on a filesyste
8550: 6d 20 74 68 61 74 0a 20 20 6f 6e 6c 79 20 73 75  m that.  only su
8560: 70 70 6f 72 74 20 38 2b 33 20 66 69 6c 65 6e 61  pport 8+3 filena
8570: 6d 65 73 2e 20 20 49 66 20 74 68 65 20 76 61 6c  mes.  If the val
8580: 75 65 20 6f 66 20 74 68 69 73 20 6d 61 63 72 6f  ue of this macro
8590: 20 69 73 20 31 2c 0a 20 20 74 68 65 6e 20 74 68   is 1,.  then th
85a0: 65 20 64 65 66 61 75 6c 74 20 62 65 68 61 76 69  e default behavi
85b0: 6f 72 20 69 73 20 74 6f 20 63 6f 6e 74 69 6e 75  or is to continu
85c0: 65 20 74 6f 20 75 73 65 20 6c 6f 6e 67 20 66 69  e to use long fi
85d0: 6c 65 6e 61 6d 65 73 20 61 6e 64 0a 20 20 74 6f  lenames and.  to
85e0: 20 6f 6e 6c 79 20 75 73 65 20 38 2b 33 20 66 69   only use 8+3 fi
85f0: 6c 65 6e 61 6d 65 73 20 69 66 20 74 68 65 20 0a  lenames if the .
8600: 20 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65    database conne
8610: 63 74 69 6f 6e 20 69 73 20 6f 70 65 6e 65 64 20  ction is opened 
8620: 75 73 69 6e 67 20 5b 55 52 49 20 66 69 6c 65 6e  using [URI filen
8630: 61 6d 65 73 5d 20 77 69 74 68 0a 20 20 74 68 65  ames] with.  the
8640: 20 22 3c 74 74 3e 38 5f 33 5f 6e 61 6d 65 73 3d   "<tt>8_3_names=
8650: 31 3c 2f 74 74 3e 22 20 71 75 65 72 79 20 70 61  1</tt>" query pa
8660: 72 61 6d 65 74 65 72 2e 20 20 49 66 20 74 68 65  rameter.  If the
8670: 20 76 61 6c 75 65 20 6f 66 0a 20 20 74 68 69 73   value of.  this
8680: 20 6d 61 63 72 6f 20 69 73 20 32 2c 20 74 68 65   macro is 2, the
8690: 6e 20 74 68 65 20 75 73 65 20 6f 66 20 38 2b 33  n the use of 8+3
86a0: 20 66 69 6c 65 6e 61 6d 65 73 20 62 65 63 6f 6d   filenames becom
86b0: 65 73 20 74 68 65 20 64 65 66 61 75 6c 74 0a 20  es the default. 
86c0: 20 62 75 74 20 6d 61 79 20 62 65 20 64 69 73 61   but may be disa
86d0: 62 6c 65 64 20 6f 6e 20 75 73 69 6e 67 20 74 68  bled on using th
86e0: 65 20 3c 74 74 3e 38 5f 33 5f 6e 61 6d 65 73 3d  e <tt>8_3_names=
86f0: 30 3c 2f 74 74 3e 20 71 75 65 72 79 20 70 61 72  0</tt> query par
8700: 61 6d 65 74 65 72 2e 0a 7d 0a 0a 43 4f 4d 50 49  ameter..}..COMPI
8710: 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54  LE_OPTION {SQLIT
8720: 45 5f 45 4e 41 42 4c 45 5f 41 50 49 5f 41 52 4d  E_ENABLE_API_ARM
8730: 4f 52 7d 20 7b 0a 20 20 57 68 65 6e 20 64 65 66  OR} {.  When def
8740: 69 6e 65 64 2c 20 74 68 69 73 20 43 2d 70 72 65  ined, this C-pre
8750: 70 72 6f 63 65 73 73 6f 72 20 6d 61 63 72 6f 20  processor macro 
8760: 61 63 74 69 76 61 74 65 73 20 65 78 74 72 61 20  activates extra 
8770: 63 6f 64 65 20 74 68 61 74 0a 20 20 61 74 74 65  code that.  atte
8780: 6d 70 74 73 20 74 6f 20 64 65 74 65 63 74 20 6d  mpts to detect m
8790: 69 73 75 73 65 20 6f 66 20 74 68 65 20 53 51 4c  isuse of the SQL
87a0: 69 74 65 20 41 50 49 2c 20 73 75 63 68 20 61 73  ite API, such as
87b0: 20 70 61 73 73 69 6e 67 20 69 6e 20 4e 55 4c 4c   passing in NULL
87c0: 0a 20 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 72  .  pointers to r
87d0: 65 71 75 69 72 65 64 20 70 61 72 61 6d 65 74 65  equired paramete
87e0: 72 73 20 6f 72 20 75 73 69 6e 67 20 6f 62 6a 65  rs or using obje
87f0: 63 74 73 20 61 66 74 65 72 20 74 68 65 79 20 68  cts after they h
8800: 61 76 65 20 62 65 65 6e 0a 20 20 64 65 73 74 72  ave been.  destr
8810: 6f 79 65 64 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45  oyed..}..COMPILE
8820: 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f  _OPTION {SQLITE_
8830: 45 4e 41 42 4c 45 5f 41 54 4f 4d 49 43 5f 57 52  ENABLE_ATOMIC_WR
8840: 49 54 45 7d 20 7b 0a 20 20 49 66 20 74 68 69 73  ITE} {.  If this
8850: 20 43 2d 70 72 65 70 72 6f 63 65 73 73 6f 72 20   C-preprocessor 
8860: 6d 61 63 72 6f 20 69 73 20 64 65 66 69 6e 65 64  macro is defined
8870: 20 61 6e 64 20 69 66 20 74 68 65 0a 20 20 78 44   and if the.  xD
8880: 65 76 69 63 65 43 68 61 72 61 63 74 65 72 69 73  eviceCharacteris
8890: 74 69 63 73 20 6d 65 74 68 6f 64 20 6f 66 20 5b  tics method of [
88a0: 73 71 6c 69 74 65 33 5f 69 6f 5f 6d 65 74 68 6f  sqlite3_io_metho
88b0: 64 73 5d 20 6f 62 6a 65 63 74 20 66 6f 72 0a 20  ds] object for. 
88c0: 20 61 20 64 61 74 61 62 61 73 65 20 66 69 6c 65   a database file
88d0: 20 72 65 70 6f 72 74 73 20 28 76 69 61 20 6f 6e   reports (via on
88e0: 65 20 6f 66 20 74 68 65 20 5b 53 51 4c 49 54 45  e of the [SQLITE
88f0: 5f 49 4f 43 41 50 5f 41 54 4f 4d 49 43 5d 20 62  _IOCAP_ATOMIC] b
8900: 69 74 73 29 0a 20 20 74 68 61 74 20 74 68 65 20  its).  that the 
8910: 66 69 6c 65 73 79 73 74 65 6d 20 73 75 70 70 6f  filesystem suppo
8920: 72 74 73 20 61 74 6f 6d 69 63 20 77 72 69 74 65  rts atomic write
8930: 73 20 61 6e 64 20 69 66 20 61 20 74 72 61 6e 73  s and if a trans
8940: 61 63 74 69 6f 6e 0a 20 20 69 6e 76 6f 6c 76 65  action.  involve
8950: 73 20 61 20 63 68 61 6e 67 65 20 74 6f 20 6f 6e  s a change to on
8960: 6c 79 20 61 20 73 69 6e 67 6c 65 20 70 61 67 65  ly a single page
8970: 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
8980: 20 66 69 6c 65 2c 0a 20 20 74 68 65 6e 20 74 68   file,.  then th
8990: 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 63 6f  e transaction co
89a0: 6d 6d 69 74 73 20 77 69 74 68 20 6a 75 73 74 20  mmits with just 
89b0: 61 20 73 69 6e 67 6c 65 20 77 72 69 74 65 20 72  a single write r
89c0: 65 71 75 65 73 74 20 6f 66 0a 20 20 61 20 73 69  equest of.  a si
89d0: 6e 67 6c 65 20 70 61 67 65 20 6f 66 20 74 68 65  ngle page of the
89e0: 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 6e 6f   database and no
89f0: 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61   rollback journa
8a00: 6c 20 69 73 20 63 72 65 61 74 65 64 0a 20 20 6f  l is created.  o
8a10: 72 20 77 72 69 74 74 65 6e 2e 20 20 4f 6e 20 66  r written.  On f
8a20: 69 6c 65 73 79 73 74 65 6d 73 20 74 68 61 74 20  ilesystems that 
8a30: 73 75 70 70 6f 72 74 20 61 74 6f 6d 69 63 20 77  support atomic w
8a40: 72 69 74 65 73 2c 20 74 68 69 73 0a 20 20 6f 70  rites, this.  op
8a50: 74 69 6d 69 7a 61 74 69 6f 6e 20 63 61 6e 20 72  timization can r
8a60: 65 73 75 6c 74 20 69 6e 20 73 69 67 6e 69 66 69  esult in signifi
8a70: 63 61 6e 74 20 73 70 65 65 64 20 69 6d 70 72 6f  cant speed impro
8a80: 76 65 6d 65 6e 74 73 20 66 6f 72 0a 20 20 73 6d  vements for.  sm
8a90: 61 6c 6c 20 75 70 64 61 74 65 73 2e 20 20 48 6f  all updates.  Ho
8aa0: 77 65 76 65 72 2c 20 66 65 77 20 66 69 6c 65 73  wever, few files
8ab0: 79 73 74 65 6d 73 20 73 75 70 70 6f 72 74 20 74  ystems support t
8ac0: 68 69 73 20 63 61 70 61 62 69 6c 69 74 79 0a 20  his capability. 
8ad0: 20 61 6e 64 20 74 68 65 20 63 6f 64 65 20 70 61   and the code pa
8ae0: 74 68 73 20 74 68 61 74 20 63 68 65 63 6b 20 66  ths that check f
8af0: 6f 72 20 74 68 69 73 20 63 61 70 61 62 69 6c 69  or this capabili
8b00: 74 79 20 73 6c 6f 77 20 64 6f 77 6e 20 77 72 69  ty slow down wri
8b10: 74 65 0a 20 20 70 65 72 66 6f 72 6d 61 6e 63 65  te.  performance
8b20: 20 6f 6e 20 73 79 73 74 65 6d 73 20 74 68 61 74   on systems that
8b30: 20 6c 61 63 6b 20 61 74 6f 6d 69 63 20 77 72 69   lack atomic wri
8b40: 74 65 20 63 61 70 61 62 69 6c 69 74 79 2c 20 73  te capability, s
8b50: 6f 20 74 68 69 73 0a 20 20 66 65 61 74 75 72 65  o this.  feature
8b60: 20 69 73 20 64 69 73 61 62 6c 65 64 20 62 79 20   is disabled by 
8b70: 64 65 66 61 75 6c 74 2e 0a 7d 0a 0a 43 4f 4d 50  default..}..COMP
8b80: 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49  ILE_OPTION {SQLI
8b90: 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e  TE_ENABLE_COLUMN
8ba0: 5f 4d 45 54 41 44 41 54 41 7d 20 7b 0a 20 20 57  _METADATA} {.  W
8bb0: 68 65 6e 20 74 68 69 73 20 43 2d 70 72 65 70 72  hen this C-prepr
8bc0: 6f 63 65 73 73 6f 72 20 6d 61 63 72 6f 20 69 73  ocessor macro is
8bd0: 20 64 65 66 69 6e 65 64 2c 20 53 51 4c 69 74 65   defined, SQLite
8be0: 20 69 6e 63 6c 75 64 65 73 20 73 6f 6d 65 0a 20   includes some. 
8bf0: 20 61 64 64 69 74 69 6f 6e 61 6c 20 41 50 49 73   additional APIs
8c00: 20 74 68 61 74 20 70 72 6f 76 69 64 65 20 63 6f   that provide co
8c10: 6e 76 65 6e 69 65 6e 74 20 61 63 63 65 73 73 20  nvenient access 
8c20: 74 6f 20 6d 65 74 61 2d 64 61 74 61 20 61 62 6f  to meta-data abo
8c30: 75 74 0a 20 20 74 61 62 6c 65 73 20 61 6e 64 20  ut.  tables and 
8c40: 71 75 65 72 69 65 73 2e 20 20 54 68 65 20 41 50  queries.  The AP
8c50: 49 73 20 74 68 61 74 20 61 72 65 20 65 6e 61 62  Is that are enab
8c60: 6c 65 64 20 62 79 20 74 68 69 73 20 6f 70 74 69  led by this opti
8c70: 6f 6e 20 61 72 65 3a 0a 0a 20 20 3c 75 6c 3e 0a  on are:..  <ul>.
8c80: 20 20 3c 6c 69 3e 20 5b 73 71 6c 69 74 65 33 5f    <li> [sqlite3_
8c90: 63 6f 6c 75 6d 6e 5f 64 61 74 61 62 61 73 65 5f  column_database_
8ca0: 6e 61 6d 65 28 29 5d 20 3c 2f 6c 69 3e 0a 20 20  name()] </li>.  
8cb0: 3c 6c 69 3e 20 5b 73 71 6c 69 74 65 33 5f 63 6f  <li> [sqlite3_co
8cc0: 6c 75 6d 6e 5f 64 61 74 61 62 61 73 65 5f 6e 61  lumn_database_na
8cd0: 6d 65 31 36 28 29 5d 20 3c 2f 6c 69 3e 0a 20 20  me16()] </li>.  
8ce0: 3c 6c 69 3e 20 5b 73 71 6c 69 74 65 33 5f 63 6f  <li> [sqlite3_co
8cf0: 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65 28  lumn_table_name(
8d00: 29 5d 20 3c 2f 6c 69 3e 0a 20 20 3c 6c 69 3e 20  )] </li>.  <li> 
8d10: 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  [sqlite3_column_
8d20: 74 61 62 6c 65 5f 6e 61 6d 65 31 36 28 29 5d 20  table_name16()] 
8d30: 3c 2f 6c 69 3e 0a 20 20 3c 6c 69 3e 20 5b 73 71  </li>.  <li> [sq
8d40: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69  lite3_column_ori
8d50: 67 69 6e 5f 6e 61 6d 65 28 29 5d 20 3c 2f 6c 69  gin_name()] </li
8d60: 3e 0a 20 20 3c 6c 69 3e 20 5b 73 71 6c 69 74 65  >.  <li> [sqlite
8d70: 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f  3_column_origin_
8d80: 6e 61 6d 65 31 36 28 29 5d 20 3c 2f 6c 69 3e 0a  name16()] </li>.
8d90: 20 20 3c 2f 75 6c 3e 0a 7d 0a 0a 43 4f 4d 50 49    </ul>.}..COMPI
8da0: 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54  LE_OPTION {SQLIT
8db0: 45 5f 45 4e 41 42 4c 45 5f 44 42 53 54 41 54 5f  E_ENABLE_DBSTAT_
8dc0: 56 54 41 42 7d 20 7b 0a 20 20 54 68 69 73 20 6f  VTAB} {.  This o
8dd0: 70 74 69 6f 6e 20 65 6e 61 62 6c 65 73 20 74 68  ption enables th
8de0: 65 20 5b 64 62 73 74 61 74 20 76 69 72 74 75 61  e [dbstat virtua
8df0: 6c 20 74 61 62 6c 65 5d 2e 0a 7d 0a 0a 43 4f 4d  l table]..}..COM
8e00: 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c  PILE_OPTION {SQL
8e10: 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41  ITE_ENABLE_EXPLA
8e20: 49 4e 5f 43 4f 4d 4d 45 4e 54 53 7d 20 7b 0a 20  IN_COMMENTS} {. 
8e30: 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 61 64 64   This option add
8e40: 73 20 65 78 74 72 61 20 6c 6f 67 69 63 20 74 6f  s extra logic to
8e50: 20 53 51 4c 69 74 65 20 74 68 61 74 20 69 6e 73   SQLite that ins
8e60: 65 72 74 73 20 63 6f 6d 6d 65 6e 74 20 74 65 78  erts comment tex
8e70: 74 20 69 6e 74 6f 20 74 68 65 0a 20 20 6f 75 74  t into the.  out
8e80: 70 75 74 20 6f 66 20 5b 45 58 50 4c 41 49 4e 5d  put of [EXPLAIN]
8e90: 2e 20 20 54 68 65 73 65 20 65 78 74 72 61 20 63  .  These extra c
8ea0: 6f 6d 6d 65 6e 74 73 20 75 73 65 20 65 78 74 72  omments use extr
8eb0: 61 20 6d 65 6d 6f 72 79 2c 20 74 68 75 73 0a 20  a memory, thus. 
8ec0: 20 6d 61 6b 69 6e 67 20 5b 70 72 65 70 61 72 65   making [prepare
8ed0: 64 20 73 74 61 74 65 6d 65 6e 74 73 5d 20 6c 61  d statements] la
8ee0: 72 67 65 72 20 61 6e 64 20 76 65 72 79 20 73 6c  rger and very sl
8ef0: 69 67 68 74 6c 79 20 73 6c 6f 77 65 72 2c 20 61  ightly slower, a
8f00: 6e 64 20 73 6f 20 74 68 65 79 20 61 72 65 0a 20  nd so they are. 
8f10: 20 74 75 72 6e 65 64 20 6f 66 66 20 62 79 20 64   turned off by d
8f20: 65 66 61 75 6c 74 20 61 6e 64 20 69 6e 20 6d 6f  efault and in mo
8f30: 73 74 20 61 70 70 6c 69 63 61 74 69 6f 6e 2e 20  st application. 
8f40: 20 42 75 74 20 73 6f 6d 65 20 61 70 70 6c 69 63   But some applic
8f50: 61 74 69 6f 6e 73 2c 20 73 75 63 68 0a 20 20 61  ations, such.  a
8f60: 73 20 74 68 65 20 5b 63 6f 6d 6d 61 6e 64 2d 6c  s the [command-l
8f70: 69 6e 65 20 73 68 65 6c 6c 5d 20 66 6f 72 20 53  ine shell] for S
8f80: 51 4c 69 74 65 2c 20 76 61 6c 75 65 20 63 6c 61  QLite, value cla
8f90: 72 69 74 79 20 6f 66 20 45 58 50 4c 41 49 4e 20  rity of EXPLAIN 
8fa0: 6f 75 74 70 75 74 0a 20 20 6f 76 65 72 20 72 61  output.  over ra
8fb0: 77 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 61 6e  w performance an
8fc0: 64 20 73 6f 20 74 68 69 73 20 63 6f 6d 70 69 6c  d so this compil
8fd0: 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73  e-time option is
8fe0: 20 61 76 61 69 6c 61 62 6c 65 20 74 6f 20 74 68   available to th
8ff0: 65 6d 2e 0a 20 20 54 68 65 20 53 51 4c 49 54 45  em..  The SQLITE
9000: 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e 5f  _ENABLE_EXPLAIN_
9010: 43 4f 4d 4d 45 4e 54 53 20 63 6f 6d 70 69 6c 65  COMMENTS compile
9020: 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20  -time option is 
9030: 61 6c 73 6f 20 65 6e 61 62 6c 65 64 0a 20 20 61  also enabled.  a
9040: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 69 66 20  utomatically if 
9050: 5b 53 51 4c 49 54 45 5f 44 45 42 55 47 5d 20 69  [SQLITE_DEBUG] i
9060: 73 20 65 6e 61 62 6c 65 64 2e 0a 7d 0a 0a 0a 43  s enabled..}...C
9070: 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53  OMPILE_OPTION {S
9080: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
9090: 33 7d 20 7b 0a 20 20 57 68 65 6e 20 74 68 69 73  3} {.  When this
90a0: 20 6f 70 74 69 6f 6e 20 69 73 20 64 65 66 69 6e   option is defin
90b0: 65 64 20 69 6e 20 74 68 65 20 5b 61 6d 61 6c 67  ed in the [amalg
90c0: 61 6d 61 74 69 6f 6e 5d 2c 20 76 65 72 73 69 6f  amation], versio
90d0: 6e 20 33 0a 20 20 6f 66 20 74 68 65 20 66 75 6c  n 3.  of the ful
90e0: 6c 2d 74 65 78 74 20 73 65 61 72 63 68 20 65 6e  l-text search en
90f0: 67 69 6e 65 20 69 73 20 61 64 64 65 64 20 74 6f  gine is added to
9100: 20 74 68 65 20 62 75 69 6c 64 20 61 75 74 6f 6d   the build autom
9110: 61 74 69 63 61 6c 6c 79 2e 0a 7d 0a 0a 43 4f 4d  atically..}..COM
9120: 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c  PILE_OPTION {SQL
9130: 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 5f  ITE_ENABLE_FTS3_
9140: 50 41 52 45 4e 54 48 45 53 49 53 7d 20 7b 0a 20  PARENTHESIS} {. 
9150: 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 6d 6f 64   This option mod
9160: 69 66 69 65 73 20 74 68 65 20 71 75 65 72 79 20  ifies the query 
9170: 70 61 74 74 65 72 6e 20 70 61 72 73 65 72 20 69  pattern parser i
9180: 6e 20 46 54 53 33 20 73 75 63 68 20 74 68 61 74  n FTS3 such that
9190: 20 69 74 0a 20 20 73 75 70 70 6f 72 74 73 20 6f   it.  supports o
91a0: 70 65 72 61 74 6f 72 73 20 41 4e 44 20 61 6e 64  perators AND and
91b0: 20 4e 4f 54 20 28 69 6e 20 61 64 64 69 74 69 6f   NOT (in additio
91c0: 6e 20 74 6f 20 74 68 65 20 75 73 75 61 6c 20 4f  n to the usual O
91d0: 52 20 61 6e 64 20 4e 45 41 52 29 0a 20 20 61 6e  R and NEAR).  an
91e0: 64 20 61 6c 73 6f 20 61 6c 6c 6f 77 73 20 71 75  d also allows qu
91f0: 65 72 79 20 65 78 70 72 65 73 73 69 6f 6e 73 20  ery expressions 
9200: 74 6f 20 63 6f 6e 74 61 69 6e 20 6e 65 73 74 65  to contain neste
9210: 64 20 70 61 72 65 6e 74 68 65 73 69 73 2e 0a 7d  d parenthesis..}
9220: 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e  ..COMPILE_OPTION
9230: 20 7b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f   {SQLITE_ENABLE_
9240: 46 54 53 33 5f 54 4f 4b 45 4e 49 5a 45 52 7d 20  FTS3_TOKENIZER} 
9250: 7b 0a 20 20 54 68 69 73 20 6f 70 74 69 6f 6e 20  {.  This option 
9260: 65 6e 61 62 6c 65 73 20 74 68 65 20 74 77 6f 2d  enables the two-
9270: 61 72 67 75 6d 65 6e 74 20 76 65 72 73 69 6f 6e  argument version
9280: 20 6f 66 20 74 68 65 20 5b 66 74 73 33 5f 74 6f   of the [fts3_to
9290: 6b 65 6e 69 7a 65 72 28 29 5d 0a 20 20 69 6e 74  kenizer()].  int
92a0: 65 72 66 61 63 65 2e 20 20 54 68 65 20 73 65 63  erface.  The sec
92b0: 6f 6e 64 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  ond argument to 
92c0: 66 74 73 33 5f 74 6f 6b 65 6e 69 7a 65 72 28 29  fts3_tokenizer()
92d0: 20 69 73 20 73 75 70 70 6f 73 65 20 74 6f 20 62   is suppose to b
92e0: 65 20 61 0a 20 20 70 6f 69 6e 74 65 72 20 74 6f  e a.  pointer to
92f0: 20 61 20 66 75 6e 63 74 69 6f 6e 20 28 65 6e 63   a function (enc
9300: 6f 64 65 64 20 61 73 20 61 20 42 4c 4f 42 29 20  oded as a BLOB) 
9310: 74 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74 73 20  that implements 
9320: 61 6e 0a 20 20 61 70 70 6c 69 63 61 74 69 6f 6e  an.  application
9330: 20 64 65 66 69 6e 65 64 20 74 6f 6b 65 6e 69 7a   defined tokeniz
9340: 65 72 2e 20 20 49 66 20 68 6f 73 74 69 6c 65 20  er.  If hostile 
9350: 61 63 74 6f 72 73 20 61 72 65 20 61 62 6c 65 20  actors are able 
9360: 74 6f 20 72 75 6e 0a 20 20 74 68 65 20 74 77 6f  to run.  the two
9370: 2d 61 72 67 75 6d 65 6e 74 20 76 65 72 73 69 6f  -argument versio
9380: 6e 20 6f 66 20 66 74 73 33 5f 74 6f 6b 65 6e 69  n of fts3_tokeni
9390: 7a 65 72 28 29 20 77 69 74 68 20 61 6e 20 61 72  zer() with an ar
93a0: 62 69 74 72 61 72 79 20 73 65 63 6f 6e 64 0a 20  bitrary second. 
93b0: 20 61 72 67 75 6d 65 6e 74 2c 20 74 68 65 79 20   argument, they 
93c0: 63 6f 75 6c 64 20 75 73 65 20 63 72 61 73 68 20  could use crash 
93d0: 6f 72 20 74 61 6b 65 20 63 6f 6e 74 72 6f 6c 20  or take control 
93e0: 6f 66 20 74 68 65 20 70 72 6f 63 65 73 73 2e 20  of the process. 
93f0: 0a 20 20 3c 70 3e 0a 20 20 42 65 63 61 75 73 65  .  <p>.  Because
9400: 20 6f 66 20 73 65 63 75 72 69 74 79 20 63 6f 6e   of security con
9410: 63 65 72 6e 73 2c 20 74 68 65 20 74 77 6f 2d 61  cerns, the two-a
9420: 72 67 75 6d 65 6e 74 20 66 74 73 33 5f 74 6f 6b  rgument fts3_tok
9430: 65 6e 69 7a 65 72 28 29 20 66 65 61 74 75 72 65  enizer() feature
9440: 20 0a 20 20 77 61 73 20 64 69 73 61 62 6c 65 64   .  was disabled
9450: 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20   beginning with 
9460: 5b 56 65 72 73 69 6f 6e 20 33 2e 31 31 2e 30 5d  [Version 3.11.0]
9470: 20 28 5b 64 61 74 65 6f 66 3a 33 2e 31 31 2e 30   ([dateof:3.11.0
9480: 5d 29 0a 20 20 75 6e 6c 65 73 73 20 74 68 69 73  ]).  unless this
9490: 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70   compile-time op
94a0: 74 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a 20 20  tion is used..  
94b0: 5b 56 65 72 73 69 6f 6e 20 33 2e 31 32 2e 30 5d  [Version 3.12.0]
94c0: 20 28 5b 64 61 74 65 6f 66 3a 33 2e 31 32 2e 30   ([dateof:3.12.0
94d0: 5d 29 20 61 64 64 65 64 20 74 68 65 20 0a 20 20  ]) added the .  
94e0: 5b 73 71 6c 69 74 65 33 5f 64 62 5f 63 6f 6e 66  [sqlite3_db_conf
94f0: 69 67 5d 28 64 62 2c 5b 53 51 4c 49 54 45 5f 44  ig](db,[SQLITE_D
9500: 42 43 4f 4e 46 49 47 5f 45 4e 41 42 4c 45 5f 46  BCONFIG_ENABLE_F
9510: 54 53 33 5f 54 4f 4b 45 4e 49 5a 45 52 5d 2c 31  TS3_TOKENIZER],1
9520: 2c 30 29 20 69 6e 74 65 72 66 61 63 65 0a 20 20  ,0) interface.  
9530: 74 68 61 74 20 61 63 74 69 76 61 74 65 73 20 74  that activates t
9540: 68 65 20 74 77 6f 2d 61 72 67 75 6d 65 6e 74 20  he two-argument 
9550: 76 65 72 73 69 6f 6e 20 6f 66 20 5b 66 74 73 33  version of [fts3
9560: 5f 74 6f 6b 65 6e 69 7a 65 72 28 29 5d 0a 20 20  _tokenizer()].  
9570: 66 6f 72 20 61 20 73 70 65 63 69 66 69 63 20 5b  for a specific [
9580: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
9590: 69 6f 6e 5d 20 61 74 20 72 75 6e 2d 74 69 6d 65  ion] at run-time
95a0: 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54  ..}..COMPILE_OPT
95b0: 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 45 4e 41 42  ION {SQLITE_ENAB
95c0: 4c 45 5f 46 54 53 34 7d 20 7b 0a 20 20 57 68 65  LE_FTS4} {.  Whe
95d0: 6e 20 74 68 69 73 20 6f 70 74 69 6f 6e 20 69 73  n this option is
95e0: 20 64 65 66 69 6e 65 64 20 69 6e 20 74 68 65 20   defined in the 
95f0: 5b 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 5d 2c 20  [amalgamation], 
9600: 76 65 72 73 69 6f 6e 73 20 33 20 61 6e 64 20 34  versions 3 and 4
9610: 0a 20 20 6f 66 20 74 68 65 20 66 75 6c 6c 2d 74  .  of the full-t
9620: 65 78 74 20 73 65 61 72 63 68 20 65 6e 67 69 6e  ext search engin
9630: 65 20 69 73 20 61 64 64 65 64 20 74 6f 20 74 68  e is added to th
9640: 65 20 62 75 69 6c 64 20 61 75 74 6f 6d 61 74 69  e build automati
9650: 63 61 6c 6c 79 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c  cally..}..COMPIL
9660: 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45  E_OPTION {SQLITE
9670: 5f 45 4e 41 42 4c 45 5f 46 54 53 35 7d 20 7b 0a  _ENABLE_FTS5} {.
9680: 20 20 57 68 65 6e 20 74 68 69 73 20 6f 70 74 69    When this opti
9690: 6f 6e 20 69 73 20 64 65 66 69 6e 65 64 20 69 6e  on is defined in
96a0: 20 74 68 65 20 5b 61 6d 61 6c 67 61 6d 61 74 69   the [amalgamati
96b0: 6f 6e 5d 2c 20 76 65 72 73 69 6f 6e 73 20 35 0a  on], versions 5.
96c0: 20 20 6f 66 20 74 68 65 20 66 75 6c 6c 2d 74 65    of the full-te
96d0: 78 74 20 73 65 61 72 63 68 20 65 6e 67 69 6e 65  xt search engine
96e0: 20 28 5b 66 74 73 35 5d 29 20 69 73 20 61 64 64   ([fts5]) is add
96f0: 65 64 20 74 6f 20 74 68 65 20 62 75 69 6c 64 20  ed to the build 
9700: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a 7d  automatically..}
9710: 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e  ..COMPILE_OPTION
9720: 20 7b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f   {SQLITE_ENABLE_
9730: 49 43 55 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70  ICU} {.  This op
9740: 74 69 6f 6e 20 63 61 75 73 65 73 20 74 68 65 20  tion causes the 
9750: 0a 20 20 5b 68 74 74 70 3a 2f 2f 77 77 77 2e 69  .  [http://www.i
9760: 63 75 2d 70 72 6f 6a 65 63 74 2e 6f 72 67 2f 20  cu-project.org/ 
9770: 7c 20 49 6e 74 65 72 6e 61 74 69 6f 6e 61 6c 20  | International 
9780: 43 6f 6d 70 6f 6e 65 6e 74 73 20 66 6f 72 20 55  Components for U
9790: 6e 69 63 6f 64 65 5d 0a 20 20 6f 72 20 22 49 43  nicode].  or "IC
97a0: 55 22 20 65 78 74 65 6e 73 69 6f 6e 20 74 6f 20  U" extension to 
97b0: 53 51 4c 69 74 65 20 74 6f 20 62 65 20 61 64 64  SQLite to be add
97c0: 65 64 20 74 6f 20 74 68 65 20 62 75 69 6c 64 2e  ed to the build.
97d0: 20 20 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50    .}..COMPILE_OP
97e0: 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 45 4e 41  TION {SQLITE_ENA
97f0: 42 4c 45 5f 49 4f 54 52 41 43 45 7d 20 7b 0a 20  BLE_IOTRACE} {. 
9800: 20 57 68 65 6e 20 62 6f 74 68 20 74 68 65 20 53   When both the S
9810: 51 4c 69 74 65 20 63 6f 72 65 20 61 6e 64 20 74  QLite core and t
9820: 68 65 20 5b 43 6f 6d 6d 61 6e 64 20 4c 69 6e 65  he [Command Line
9830: 20 49 6e 74 65 72 66 61 63 65 5d 20 28 43 4c 49   Interface] (CLI
9840: 29 20 61 72 65 20 62 6f 74 68 20 0a 20 20 63 6f  ) are both .  co
9850: 6d 70 69 6c 65 64 20 77 69 74 68 20 74 68 69 73  mpiled with this
9860: 20 6f 70 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68   option, then th
9870: 65 20 43 4c 49 20 70 72 6f 76 69 64 65 73 20 61  e CLI provides a
9880: 6e 20 65 78 74 72 61 20 63 6f 6d 6d 61 6e 64 0a  n extra command.
9890: 20 20 6e 61 6d 65 64 20 22 2e 69 6f 74 72 61 63    named ".iotrac
98a0: 65 22 20 74 68 61 74 20 70 72 6f 76 69 64 65 73  e" that provides
98b0: 20 61 20 6c 6f 77 2d 6c 65 76 65 6c 20 6c 6f 67   a low-level log
98c0: 20 6f 66 20 49 2f 4f 20 61 63 74 69 76 69 74 79   of I/O activity
98d0: 2e 0a 20 20 54 68 69 73 20 6f 70 74 69 6f 6e 20  ..  This option 
98e0: 69 73 20 65 78 70 65 72 69 6d 65 6e 74 61 6c 20  is experimental 
98f0: 61 6e 64 20 6d 61 79 20 62 65 20 64 69 73 63 6f  and may be disco
9900: 6e 74 69 6e 75 65 64 20 69 6e 20 61 20 66 75 74  ntinued in a fut
9910: 75 72 65 20 72 65 6c 65 61 73 65 2e 0a 7d 0a 0a  ure release..}..
9920: 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b  COMPILE_OPTION {
9930: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4a 53  SQLITE_ENABLE_JS
9940: 4f 4e 31 7d 20 7b 0a 20 20 57 68 65 6e 20 74 68  ON1} {.  When th
9950: 69 73 20 6f 70 74 69 6f 6e 20 69 73 20 64 65 66  is option is def
9960: 69 6e 65 64 20 69 6e 20 74 68 65 20 5b 61 6d 61  ined in the [ama
9970: 6c 67 61 6d 61 74 69 6f 6e 5d 2c 20 74 68 65 0a  lgamation], the.
9980: 20 20 5b 4a 53 4f 4e 20 53 51 4c 20 66 75 6e 63    [JSON SQL func
9990: 74 69 6f 6e 73 5d 20 61 72 65 20 61 64 64 65 64  tions] are added
99a0: 20 74 6f 20 74 68 65 20 62 75 69 6c 64 20 61 75   to the build au
99b0: 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a 7d 0a 0a  tomatically..}..
99c0: 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b  COMPILE_OPTION {
99d0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f  SQLITE_ENABLE_LO
99e0: 43 4b 49 4e 47 5f 53 54 59 4c 45 7d 20 7b 0a 20  CKING_STYLE} {. 
99f0: 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 65 6e 61   This option ena
9a00: 62 6c 65 73 20 61 64 64 69 74 69 6f 6e 61 6c 20  bles additional 
9a10: 6c 6f 67 69 63 20 69 6e 20 74 68 65 20 4f 53 20  logic in the OS 
9a20: 69 6e 74 65 72 66 61 63 65 20 6c 61 79 65 72 20  interface layer 
9a30: 66 6f 72 0a 20 20 4d 61 63 20 4f 53 20 58 2e 20  for.  Mac OS X. 
9a40: 54 68 65 20 61 64 64 69 74 69 6f 6e 61 6c 20 6c  The additional l
9a50: 6f 67 69 63 20 61 74 74 65 6d 70 74 73 20 74 6f  ogic attempts to
9a60: 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 74   determine the t
9a70: 79 70 65 20 6f 66 20 74 68 65 0a 20 20 75 6e 64  ype of the.  und
9a80: 65 72 6c 79 69 6e 67 20 66 69 6c 65 73 79 73 74  erlying filesyst
9a90: 65 6d 20 61 6e 64 20 63 68 6f 6f 73 65 20 61 6e  em and choose an
9aa0: 64 20 61 6c 74 65 72 6e 61 74 69 76 65 20 6c 6f  d alternative lo
9ab0: 63 6b 69 6e 67 20 73 74 72 61 74 65 67 79 0a 20  cking strategy. 
9ac0: 20 74 68 61 74 20 77 6f 72 6b 73 20 63 6f 72 72   that works corr
9ad0: 65 63 74 6c 79 20 66 6f 72 20 74 68 61 74 20 66  ectly for that f
9ae0: 69 6c 65 73 79 73 74 65 6d 20 74 79 70 65 2e 20  ilesystem type. 
9af0: 46 69 76 65 20 6c 6f 63 6b 69 6e 67 20 73 74 72  Five locking str
9b00: 61 74 65 67 69 65 73 20 0a 20 20 61 72 65 20 61  ategies .  are a
9b10: 76 61 69 6c 61 62 6c 65 3a 0a 0a 20 20 3c 75 6c  vailable:..  <ul
9b20: 3e 0a 20 20 20 20 3c 6c 69 3e 20 50 4f 53 49 58  >.    <li> POSIX
9b30: 20 6c 6f 63 6b 69 6e 67 20 73 74 79 6c 65 2e 20   locking style. 
9b40: 54 68 69 73 20 69 73 20 74 68 65 20 64 65 66 61  This is the defa
9b50: 75 6c 74 20 6c 6f 63 6b 69 6e 67 20 73 74 79 6c  ult locking styl
9b60: 65 20 61 6e 64 20 74 68 65 0a 20 20 20 20 20 20  e and the.      
9b70: 20 20 20 73 74 79 6c 65 20 75 73 65 64 20 62 79     style used by
9b80: 20 6f 74 68 65 72 20 28 6e 6f 6e 20 4d 61 63 20   other (non Mac 
9b90: 4f 53 20 58 29 20 55 6e 69 78 65 73 2e 20 4c 6f  OS X) Unixes. Lo
9ba0: 63 6b 73 20 61 72 65 20 6f 62 74 61 69 6e 65 64  cks are obtained
9bb0: 20 61 6e 64 20 0a 20 20 20 20 20 20 20 20 20 72   and .         r
9bc0: 65 6c 65 61 73 65 64 20 75 73 69 6e 67 20 74 68  eleased using th
9bd0: 65 20 66 63 6e 74 6c 28 29 20 73 79 73 74 65 6d  e fcntl() system
9be0: 20 63 61 6c 6c 2e 0a 0a 20 20 20 20 3c 6c 69 3e   call...    <li>
9bf0: 20 41 46 50 20 6c 6f 63 6b 69 6e 67 20 73 74 79   AFP locking sty
9c00: 6c 65 2e 20 54 68 69 73 20 6c 6f 63 6b 69 6e 67  le. This locking
9c10: 20 73 74 79 6c 65 20 69 73 20 75 73 65 64 20 66   style is used f
9c20: 6f 72 20 6e 65 74 77 6f 72 6b 20 66 69 6c 65 20  or network file 
9c30: 0a 20 20 20 20 20 20 20 20 20 73 79 73 74 65 6d  .         system
9c40: 73 20 74 68 61 74 20 75 73 65 20 74 68 65 20 41  s that use the A
9c50: 46 50 20 28 41 70 70 6c 65 20 46 69 6c 69 6e 67  FP (Apple Filing
9c60: 20 50 72 6f 74 6f 63 6f 6c 29 20 70 72 6f 74 6f   Protocol) proto
9c70: 63 6f 6c 2e 20 4c 6f 63 6b 73 0a 20 20 20 20 20  col. Locks.     
9c80: 20 20 20 20 61 72 65 20 6f 62 74 61 69 6e 65 64      are obtained
9c90: 20 62 79 20 63 61 6c 6c 69 6e 67 20 74 68 65 20   by calling the 
9ca0: 6c 69 62 72 61 72 79 20 66 75 6e 63 74 69 6f 6e  library function
9cb0: 20 5f 41 46 50 46 53 53 65 74 4c 6f 63 6b 28 29   _AFPFSSetLock()
9cc0: 2e 0a 0a 20 20 20 20 3c 6c 69 3e 20 46 6c 6f 63  ...    <li> Floc
9cd0: 6b 20 6c 6f 63 6b 69 6e 67 20 73 74 79 6c 65 2e  k locking style.
9ce0: 20 54 68 69 73 20 69 73 20 75 73 65 64 20 66 6f   This is used fo
9cf0: 72 20 66 69 6c 65 2d 73 79 73 74 65 6d 73 20 74  r file-systems t
9d00: 68 61 74 20 64 6f 20 6e 6f 74 0a 20 20 20 20 20  hat do not.     
9d10: 20 20 20 20 73 75 70 70 6f 72 74 20 50 4f 53 49      support POSI
9d20: 58 20 6c 6f 63 6b 69 6e 67 20 73 74 79 6c 65 2e  X locking style.
9d30: 20 4c 6f 63 6b 73 20 61 72 65 20 6f 62 74 61 69   Locks are obtai
9d40: 6e 65 64 20 61 6e 64 20 72 65 6c 65 61 73 65 64  ned and released
9d50: 20 75 73 69 6e 67 0a 20 20 20 20 20 20 20 20 20   using.         
9d60: 74 68 65 20 66 6c 6f 63 6b 28 29 20 73 79 73 74  the flock() syst
9d70: 65 6d 20 63 61 6c 6c 2e 0a 0a 20 20 20 20 3c 6c  em call...    <l
9d80: 69 3e 20 44 6f 74 2d 66 69 6c 65 20 6c 6f 63 6b  i> Dot-file lock
9d90: 69 6e 67 20 73 74 79 6c 65 2e 20 54 68 69 73 20  ing style. This 
9da0: 6c 6f 63 6b 69 6e 67 20 73 74 79 6c 65 20 69 73  locking style is
9db0: 20 75 73 65 64 20 77 68 65 6e 20 6e 65 69 74 68   used when neith
9dc0: 65 72 0a 20 20 20 20 20 20 20 20 20 66 6c 6f 63  er.         floc
9dd0: 6b 20 6e 6f 72 20 50 4f 53 49 58 20 6c 6f 63 6b  k nor POSIX lock
9de0: 69 6e 67 20 73 74 79 6c 65 73 20 61 72 65 20 73  ing styles are s
9df0: 75 70 70 6f 72 74 65 64 20 62 79 20 74 68 65 20  upported by the 
9e00: 66 69 6c 65 20 73 79 73 74 65 6d 2e 0a 20 20 20  file system..   
9e10: 20 20 20 20 20 20 44 61 74 61 62 61 73 65 20 6c        Database l
9e20: 6f 63 6b 73 20 61 72 65 20 6f 62 74 61 69 6e 65  ocks are obtaine
9e30: 64 20 62 79 20 63 72 65 61 74 69 6e 67 20 61 6e  d by creating an
9e40: 64 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20 66  d entry in the f
9e50: 69 6c 65 2d 73 79 73 74 65 6d 0a 20 20 20 20 20  ile-system.     
9e60: 20 20 20 20 61 74 20 61 20 77 65 6c 6c 2d 6b 6e      at a well-kn
9e70: 6f 77 6e 20 6c 6f 63 61 74 69 6f 6e 20 72 65 6c  own location rel
9e80: 61 74 69 76 65 20 74 6f 20 74 68 65 20 64 61 74  ative to the dat
9e90: 61 62 61 73 65 20 66 69 6c 65 20 28 61 20 22 64  abase file (a "d
9ea0: 6f 74 2d 66 69 6c 65 22 29 0a 20 20 20 20 20 20  ot-file").      
9eb0: 20 20 20 61 6e 64 20 72 65 6c 69 6e 71 75 69 73     and relinquis
9ec0: 68 65 64 20 62 79 20 64 65 6c 65 74 69 6e 67 20  hed by deleting 
9ed0: 74 68 65 20 73 61 6d 65 20 66 69 6c 65 2e 0a 0a  the same file...
9ee0: 20 20 20 20 3c 6c 69 3e 20 4e 6f 20 6c 6f 63 6b      <li> No lock
9ef0: 69 6e 67 20 73 74 79 6c 65 2e 20 49 66 20 6e 6f  ing style. If no
9f00: 6e 65 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20  ne of the above 
9f10: 63 61 6e 20 62 65 20 73 75 70 70 6f 72 74 65 64  can be supported
9f20: 2c 20 74 68 69 73 20 0a 20 20 20 20 20 20 20 20  , this .        
9f30: 20 6c 6f 63 6b 69 6e 67 20 73 74 79 6c 65 20 69   locking style i
9f40: 73 20 75 73 65 64 2e 20 4e 6f 20 64 61 74 61 62  s used. No datab
9f50: 61 73 65 20 6c 6f 63 6b 69 6e 67 20 6d 65 63 68  ase locking mech
9f60: 61 6e 69 73 6d 20 69 73 20 75 73 65 64 2e 20 57  anism is used. W
9f70: 68 65 6e 0a 20 20 20 20 20 20 20 20 20 74 68 69  hen.         thi
9f80: 73 20 73 79 73 74 65 6d 20 69 73 20 75 73 65 64  s system is used
9f90: 20 69 74 20 69 73 20 6e 6f 74 20 73 61 66 65 20   it is not safe 
9fa0: 66 6f 72 20 61 20 73 69 6e 67 6c 65 20 64 61 74  for a single dat
9fb0: 61 62 61 73 65 20 74 6f 20 62 65 0a 20 20 20 20  abase to be.    
9fc0: 20 20 20 20 20 61 63 63 65 73 73 65 64 20 62 79       accessed by
9fd0: 20 6d 75 6c 74 69 70 6c 65 20 63 6c 69 65 6e 74   multiple client
9fe0: 73 2e 0a 20 20 3c 2f 75 6c 3e 0a 0a 20 20 41 64  s..  </ul>..  Ad
9ff0: 64 69 74 69 6f 6e 61 6c 6c 79 2c 20 66 69 76 65  ditionally, five
a000: 20 65 78 74 72 61 20 5b 56 46 53 5d 20 69 6d 70   extra [VFS] imp
a010: 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20 61 72 65  lementations are
a020: 20 70 72 6f 76 69 64 65 64 20 61 73 20 77 65 6c   provided as wel
a030: 6c 20 61 73 20 74 68 65 0a 20 20 64 65 66 61 75  l as the.  defau
a040: 6c 74 2e 20 42 79 20 73 70 65 63 69 66 79 69 6e  lt. By specifyin
a050: 67 20 6f 6e 65 20 6f 66 20 74 68 65 20 65 78 74  g one of the ext
a060: 72 61 20 56 46 53 20 69 6d 70 6c 65 6d 65 6e 74  ra VFS implement
a070: 61 74 69 6f 6e 73 20 0a 20 20 77 68 65 6e 20 63  ations .  when c
a080: 61 6c 6c 69 6e 67 20 5b 73 71 6c 69 74 65 33 5f  alling [sqlite3_
a090: 6f 70 65 6e 5f 76 32 28 29 5d 2c 20 61 6e 20 61  open_v2()], an a
a0a0: 70 70 6c 69 63 61 74 69 6f 6e 20 6d 61 79 20 62  pplication may b
a0b0: 79 70 61 73 73 20 74 68 65 20 66 69 6c 65 2d 73  ypass the file-s
a0c0: 79 73 74 65 6d 0a 20 20 64 65 74 65 63 74 69 6f  ystem.  detectio
a0d0: 6e 20 6c 6f 67 69 63 20 61 6e 64 20 65 78 70 6c  n logic and expl
a0e0: 69 63 69 74 6c 79 20 73 65 6c 65 63 74 20 6f 6e  icitly select on
a0f0: 65 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20 6c  e of the above l
a100: 6f 63 6b 69 6e 67 20 73 74 79 6c 65 73 2e 20 54  ocking styles. T
a110: 68 65 0a 20 20 66 69 76 65 20 65 78 74 72 61 20  he.  five extra 
a120: 5b 56 46 53 5d 20 69 6d 70 6c 65 6d 65 6e 74 61  [VFS] implementa
a130: 74 69 6f 6e 73 20 61 72 65 20 63 61 6c 6c 65 64  tions are called
a140: 20 22 75 6e 69 78 2d 70 6f 73 69 78 22 2c 20 22   "unix-posix", "
a150: 75 6e 69 78 2d 61 66 70 22 2c 0a 20 20 22 75 6e  unix-afp",.  "un
a160: 69 78 2d 66 6c 6f 63 6b 22 2c 20 22 75 6e 69 78  ix-flock", "unix
a170: 2d 64 6f 74 66 69 6c 65 22 20 61 6e 64 20 22 75  -dotfile" and "u
a180: 6e 69 78 2d 6e 6f 6e 65 22 2e 0a 7d 0a 0a 43 4f  nix-none"..}..CO
a190: 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51  MPILE_OPTION {SQ
a1a0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 4f  LITE_ENABLE_MEMO
a1b0: 52 59 5f 4d 41 4e 41 47 45 4d 45 4e 54 7d 20 7b  RY_MANAGEMENT} {
a1c0: 0a 20 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 61  .  This option a
a1d0: 64 64 73 20 65 78 74 72 61 20 6c 6f 67 69 63 20  dds extra logic 
a1e0: 74 6f 20 53 51 4c 69 74 65 20 74 68 61 74 20 61  to SQLite that a
a1f0: 6c 6c 6f 77 73 20 69 74 20 74 6f 20 72 65 6c 65  llows it to rele
a200: 61 73 65 20 75 6e 75 73 65 64 0a 20 20 6d 65 6d  ase unused.  mem
a210: 6f 72 79 20 75 70 6f 6e 20 72 65 71 75 65 73 74  ory upon request
a220: 2e 20 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 6d  .  This option m
a230: 75 73 74 20 62 65 20 65 6e 61 62 6c 65 64 20 69  ust be enabled i
a240: 6e 20 6f 72 64 65 72 20 66 6f 72 20 74 68 65 0a  n order for the.
a250: 20 20 5b 73 71 6c 69 74 65 33 5f 72 65 6c 65 61    [sqlite3_relea
a260: 73 65 5f 6d 65 6d 6f 72 79 28 29 5d 20 69 6e 74  se_memory()] int
a270: 65 72 66 61 63 65 20 74 6f 20 77 6f 72 6b 2e 20  erface to work. 
a280: 20 49 66 20 74 68 69 73 20 63 6f 6d 70 69 6c 65   If this compile
a290: 2d 74 69 6d 65 0a 20 20 6f 70 74 69 6f 6e 20 69  -time.  option i
a2a0: 73 20 6e 6f 74 20 75 73 65 64 2c 20 74 68 65 20  s not used, the 
a2b0: 5b 73 71 6c 69 74 65 33 5f 72 65 6c 65 61 73 65  [sqlite3_release
a2c0: 5f 6d 65 6d 6f 72 79 28 29 5d 20 69 6e 74 65 72  _memory()] inter
a2d0: 66 61 63 65 20 69 73 20 61 20 0a 20 20 6e 6f 2d  face is a .  no-
a2e0: 6f 70 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f  op..}..COMPILE_O
a2f0: 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 45 4e  PTION {SQLITE_EN
a300: 41 42 4c 45 5f 4d 45 4d 53 59 53 33 7d 20 7b 0a  ABLE_MEMSYS3} {.
a310: 20 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 69 6e    This option in
a320: 63 6c 75 64 65 73 20 63 6f 64 65 20 69 6e 20 53  cludes code in S
a330: 51 4c 69 74 65 20 74 68 61 74 20 69 6d 70 6c 65  QLite that imple
a340: 6d 65 6e 74 73 20 61 6e 20 61 6c 74 65 72 6e 61  ments an alterna
a350: 74 69 76 65 0a 20 20 6d 65 6d 6f 72 79 20 61 6c  tive.  memory al
a360: 6c 6f 63 61 74 6f 72 2e 20 20 54 68 69 73 20 61  locator.  This a
a370: 6c 74 65 72 6e 61 74 69 76 65 20 6d 65 6d 6f 72  lternative memor
a380: 79 20 61 6c 6c 6f 63 61 74 6f 72 20 69 73 20 6f  y allocator is o
a390: 6e 6c 79 20 65 6e 67 61 67 65 64 0a 20 20 77 68  nly engaged.  wh
a3a0: 65 6e 20 74 68 65 20 5b 53 51 4c 49 54 45 5f 43  en the [SQLITE_C
a3b0: 4f 4e 46 49 47 5f 48 45 41 50 5d 20 6f 70 74 69  ONFIG_HEAP] opti
a3c0: 6f 6e 20 74 6f 20 5b 73 71 6c 69 74 65 33 5f 63  on to [sqlite3_c
a3d0: 6f 6e 66 69 67 28 29 5d 20 69 73 20 75 73 65 64  onfig()] is used
a3e0: 20 74 6f 0a 20 20 73 75 70 70 6c 79 20 61 20 6c   to.  supply a l
a3f0: 61 72 67 65 20 63 68 75 6e 6b 20 6f 66 20 6d 65  arge chunk of me
a400: 6d 6f 72 79 20 66 72 6f 6d 20 77 68 69 63 68 20  mory from which 
a410: 61 6c 6c 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  all memory alloc
a420: 61 74 69 6f 6e 73 20 61 72 65 0a 20 20 74 61 6b  ations are.  tak
a430: 65 6e 2e 0a 20 20 54 68 65 20 4d 45 4d 53 59 53  en..  The MEMSYS
a440: 33 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  3 memory allocat
a450: 6f 72 20 75 73 65 73 20 61 20 68 79 62 72 69 64  or uses a hybrid
a460: 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 61 6c 67 6f   allocation algo
a470: 72 69 74 68 6d 20 0a 20 20 70 61 74 74 65 72 6e  rithm .  pattern
a480: 65 64 20 61 66 74 65 72 20 64 6c 6d 61 6c 6c 6f  ed after dlmallo
a490: 63 28 29 2e 20 20 20 4f 6e 6c 79 20 6f 6e 65 20  c().   Only one 
a4a0: 6f 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  of SQLITE_ENABLE
a4b0: 5f 4d 45 4d 53 59 53 33 20 61 6e 64 20 0a 20 20  _MEMSYS3 and .  
a4c0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45  SQLITE_ENABLE_ME
a4d0: 4d 53 59 53 35 20 6d 61 79 20 62 65 20 65 6e 61  MSYS5 may be ena
a4e0: 62 6c 65 64 20 61 74 20 6f 6e 63 65 2e 0a 7d 0a  bled at once..}.
a4f0: 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20  .COMPILE_OPTION 
a500: 7b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d  {SQLITE_ENABLE_M
a510: 45 4d 53 59 53 35 7d 20 7b 0a 20 20 54 68 69 73  EMSYS5} {.  This
a520: 20 6f 70 74 69 6f 6e 20 69 6e 63 6c 75 64 65 73   option includes
a530: 20 63 6f 64 65 20 69 6e 20 53 51 4c 69 74 65 20   code in SQLite 
a540: 74 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74 73 20  that implements 
a550: 61 6e 20 61 6c 74 65 72 6e 61 74 69 76 65 0a 20  an alternative. 
a560: 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 6f   memory allocato
a570: 72 2e 20 20 54 68 69 73 20 61 6c 74 65 72 6e 61  r.  This alterna
a580: 74 69 76 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  tive memory allo
a590: 63 61 74 6f 72 20 69 73 20 6f 6e 6c 79 20 65 6e  cator is only en
a5a0: 67 61 67 65 64 0a 20 20 77 68 65 6e 20 74 68 65  gaged.  when the
a5b0: 20 5b 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f   [SQLITE_CONFIG_
a5c0: 48 45 41 50 5d 20 6f 70 74 69 6f 6e 20 74 6f 20  HEAP] option to 
a5d0: 5b 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 28  [sqlite3_config(
a5e0: 29 5d 20 69 73 20 75 73 65 64 20 74 6f 0a 20 20  )] is used to.  
a5f0: 73 75 70 70 6c 79 20 61 20 6c 61 72 67 65 20 63  supply a large c
a600: 68 75 6e 6b 20 6f 66 20 6d 65 6d 6f 72 79 20 66  hunk of memory f
a610: 72 6f 6d 20 77 68 69 63 68 20 61 6c 6c 20 6d 65  rom which all me
a620: 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  mory allocations
a630: 20 61 72 65 0a 20 20 74 61 6b 65 6e 2e 0a 20 20   are.  taken..  
a640: 54 68 65 20 4d 45 4d 53 59 53 35 20 6d 6f 64 75  The MEMSYS5 modu
a650: 6c 65 20 72 6f 75 6e 64 73 20 61 6c 6c 20 61 6c  le rounds all al
a660: 6c 6f 63 61 74 69 6f 6e 73 20 75 70 20 74 6f 20  locations up to 
a670: 74 68 65 20 6e 65 78 74 20 70 6f 77 65 72 0a 20  the next power. 
a680: 20 6f 66 20 74 77 6f 20 61 6e 64 20 75 73 65 73   of two and uses
a690: 20 61 20 66 69 72 73 74 2d 66 69 74 2c 20 62 75   a first-fit, bu
a6a0: 64 64 79 2d 61 6c 6c 6f 63 61 74 6f 72 20 61 6c  ddy-allocator al
a6b0: 67 6f 72 69 74 68 6d 0a 20 20 74 68 61 74 20 70  gorithm.  that p
a6c0: 72 6f 76 69 64 65 73 20 73 74 72 6f 6e 67 20 67  rovides strong g
a6d0: 75 61 72 61 6e 74 65 65 73 20 61 67 61 69 6e 73  uarantees agains
a6e0: 74 20 66 72 61 67 6d 65 6e 74 61 74 69 6f 6e 20  t fragmentation 
a6f0: 61 6e 64 20 62 72 65 61 6b 64 6f 77 6e 0a 20 20  and breakdown.  
a700: 73 75 62 6a 65 63 74 20 74 6f 20 63 65 72 74 61  subject to certa
a710: 69 6e 20 6f 70 65 72 61 74 69 6e 67 20 63 6f 6e  in operating con
a720: 73 74 72 61 69 6e 74 73 2e 0a 7d 0a 0a 43 4f 4d  straints..}..COM
a730: 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c  PILE_OPTION {SQL
a740: 49 54 45 5f 45 4e 41 42 4c 45 5f 4e 55 4c 4c 5f  ITE_ENABLE_NULL_
a750: 54 52 49 4d 7d 20 7b 0a 20 20 54 68 69 73 20 6f  TRIM} {.  This o
a760: 70 74 69 6f 6e 20 65 6e 61 62 6c 65 73 20 61 6e  ption enables an
a770: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 74 68   optimization th
a780: 61 74 20 6f 6d 69 74 73 20 4e 55 4c 4c 20 63 6f  at omits NULL co
a790: 6c 75 6d 6e 73 20 61 74 0a 20 20 74 68 65 20 65  lumns at.  the e
a7a0: 6e 64 73 20 6f 66 20 72 6f 77 73 2c 20 66 6f 72  nds of rows, for
a7b0: 20 61 20 73 70 61 63 65 20 73 61 76 69 6e 67 73   a space savings
a7c0: 20 6f 6e 20 64 69 73 6b 2e 0a 20 20 3c 70 3e 0a   on disk..  <p>.
a7d0: 20 20 44 61 74 61 62 61 73 65 73 20 67 65 6e 65    Databases gene
a7e0: 72 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20  rated with this 
a7f0: 6f 70 74 69 6f 6e 20 65 6e 61 62 6c 65 64 20 61  option enabled a
a800: 72 65 20 6e 6f 74 20 72 65 61 64 61 62 6c 65 0a  re not readable.
a810: 20 20 62 79 20 53 51 4c 69 74 65 20 76 65 72 73    by SQLite vers
a820: 69 6f 6e 20 33 2e 31 2e 36 20 28 5b 64 61 74 65  ion 3.1.6 ([date
a830: 6f 66 3a 33 2e 31 2e 36 5d 29 20 61 6e 64 20 65  of:3.1.6]) and e
a840: 61 72 6c 69 65 72 2e 20 20 41 6c 73 6f 2c 0a 20  arlier.  Also,. 
a850: 20 64 61 74 61 62 61 73 65 73 20 67 65 6e 65 72   databases gener
a860: 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20 6f  ated with this o
a870: 70 74 69 6f 6e 20 65 6e 61 62 6c 65 64 20 61 72  ption enabled ar
a880: 65 20 70 72 6f 6e 65 20 74 6f 0a 20 20 74 72 69  e prone to.  tri
a890: 67 67 65 72 69 6e 67 20 74 68 65 0a 20 20 5b 68  ggering the.  [h
a8a0: 74 74 70 73 3a 2f 2f 77 77 77 2e 73 71 6c 69 74  ttps://www.sqlit
a8b0: 65 2e 6f 72 67 2f 73 72 63 2f 69 6e 66 6f 2f 65  e.org/src/info/e
a8c0: 36 65 39 36 32 64 36 62 30 66 30 36 66 34 36 65  6e962d6b0f06f46e
a8d0: 7c 65 36 65 39 36 32 64 36 62 30 66 30 36 66 34  |e6e962d6b0f06f4
a8e0: 36 5d 0a 20 20 62 75 67 20 69 6e 20 74 68 65 20  6].  bug in the 
a8f0: 5b 73 71 6c 69 74 65 33 5f 62 6c 6f 62 5f 72 65  [sqlite3_blob_re
a900: 6f 70 65 6e 28 29 5d 20 69 6e 74 65 72 66 61 63  open()] interfac
a910: 65 2e 20 20 46 6f 72 20 74 68 6f 73 65 20 72 65  e.  For those re
a920: 61 73 6f 6e 73 2c 0a 20 20 74 68 69 73 20 6f 70  asons,.  this op
a930: 74 69 6d 69 7a 61 74 69 6f 6e 20 69 73 20 64 69  timization is di
a940: 73 61 62 6c 65 64 20 62 79 20 64 65 66 61 75 6c  sabled by defaul
a950: 74 2e 20 20 48 6f 77 65 76 65 72 2c 20 74 68 69  t.  However, thi
a960: 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 0a 20  s optimization. 
a970: 20 6d 61 79 20 62 65 20 65 6e 61 62 6c 65 64 20   may be enabled 
a980: 62 79 20 64 65 66 61 75 6c 74 20 69 6e 20 61 20  by default in a 
a990: 66 75 74 75 72 65 20 72 65 6c 65 61 73 65 20 6f  future release o
a9a0: 66 20 53 51 4c 69 74 65 2e 0a 7d 0a 0a 43 4f 4d  f SQLite..}..COM
a9b0: 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c  PILE_OPTION {SQL
a9c0: 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55 50  ITE_ENABLE_PREUP
a9d0: 44 41 54 45 5f 48 4f 4f 4b 7d 20 7b 0a 20 20 54  DATE_HOOK} {.  T
a9e0: 68 69 73 20 6f 70 74 69 6f 6e 20 65 6e 61 62 6c  his option enabl
a9f0: 65 73 20 0a 20 20 5b 73 71 6c 69 74 65 33 5f 70  es .  [sqlite3_p
aa00: 72 65 75 70 64 61 74 65 5f 68 6f 6f 6b 7c 73 65  reupdate_hook|se
aa10: 76 65 72 61 6c 20 6e 65 77 20 41 50 49 73 5d 20  veral new APIs] 
aa20: 74 68 61 74 20 70 72 6f 76 69 64 65 20 63 61 6c  that provide cal
aa30: 6c 62 61 63 6b 73 0a 20 20 70 72 69 6f 72 20 74  lbacks.  prior t
aa40: 6f 20 61 6e 79 20 63 68 61 6e 67 65 20 74 6f 20  o any change to 
aa50: 61 20 5b 72 6f 77 69 64 20 74 61 62 6c 65 5d 2e  a [rowid table].
aa60: 20 20 54 68 65 20 63 61 6c 6c 62 61 63 6b 73 20    The callbacks 
aa70: 63 61 6e 20 62 65 20 75 73 65 64 0a 20 20 74 6f  can be used.  to
aa80: 20 72 65 63 6f 72 64 20 74 68 65 20 73 74 61 74   record the stat
aa90: 65 20 6f 66 20 74 68 65 20 72 6f 77 20 62 65 66  e of the row bef
aaa0: 6f 72 65 20 74 68 65 20 63 68 61 6e 67 65 20 6f  ore the change o
aab0: 63 63 75 72 73 2e 0a 20 20 3c 70 3e 54 68 65 20  ccurs..  <p>The 
aac0: 61 63 74 69 6f 6e 20 6f 66 20 74 68 65 20 70 72  action of the pr
aad0: 65 75 70 64 61 74 65 20 68 6f 6f 6b 20 69 73 20  eupdate hook is 
aae0: 73 69 6d 69 6c 61 72 20 74 6f 20 74 68 65 0a 20  similar to the. 
aaf0: 20 5b 73 71 6c 69 74 65 33 5f 75 70 64 61 74 65   [sqlite3_update
ab00: 5f 68 6f 6f 6b 7c 75 70 64 61 74 65 20 68 6f 6f  _hook|update hoo
ab10: 6b 5d 20 65 78 63 65 70 74 20 74 68 61 74 20 74  k] except that t
ab20: 68 65 20 63 61 6c 6c 62 61 63 6b 20 69 73 0a 20  he callback is. 
ab30: 20 69 6e 76 6f 6b 65 64 20 62 65 66 6f 72 65 20   invoked before 
ab40: 74 68 65 20 63 68 61 6e 67 65 2c 20 6e 6f 74 20  the change, not 
ab50: 61 66 74 65 72 77 61 72 64 73 2c 20 61 6e 64 20  afterwards, and 
ab60: 74 68 65 20 70 72 65 75 70 64 61 74 65 0a 20 20  the preupdate.  
ab70: 68 6f 6f 6b 20 69 6e 74 65 72 66 61 63 65 73 20  hook interfaces 
ab80: 61 72 65 20 6f 6d 69 74 74 65 64 20 75 6e 6c 65  are omitted unle
ab90: 73 73 20 74 68 69 73 20 63 6f 6d 70 69 6c 65 2d  ss this compile-
aba0: 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 0a 20  time option is. 
abb0: 20 75 73 65 64 2e 0a 20 20 3c 70 3e 54 68 65 20   used..  <p>The 
abc0: 70 72 65 75 70 64 61 74 65 20 68 6f 6f 6b 20 69  preupdate hook i
abd0: 6e 74 65 72 66 61 63 65 73 20 77 65 72 65 20 6f  nterfaces were o
abe0: 72 69 67 69 6e 61 6c 6c 79 20 61 64 64 65 64 20  riginally added 
abf0: 74 6f 0a 20 20 73 75 70 70 6f 72 74 20 74 68 65  to.  support the
ac00: 20 5b 73 65 73 73 69 6f 6e 5d 20 65 78 74 65 6e   [session] exten
ac10: 73 69 6f 6e 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45  sion..}..COMPILE
ac20: 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f  _OPTION {SQLITE_
ac30: 45 4e 41 42 4c 45 5f 52 42 55 7d 20 7b 0a 20 20  ENABLE_RBU} {.  
ac40: 45 6e 61 62 6c 65 20 74 68 65 20 63 6f 64 65 20  Enable the code 
ac50: 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74  the implements t
ac60: 68 65 20 5b 52 42 55 20 65 78 74 65 6e 73 69 6f  he [RBU extensio
ac70: 6e 5d 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f  n]..}..COMPILE_O
ac80: 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 45 4e  PTION {SQLITE_EN
ac90: 41 42 4c 45 5f 52 54 52 45 45 7d 20 7b 0a 20 20  ABLE_RTREE} {.  
aca0: 54 68 69 73 20 6f 70 74 69 6f 6e 20 63 61 75 73  This option caus
acb0: 65 73 20 53 51 4c 69 74 65 20 74 6f 20 69 6e 63  es SQLite to inc
acc0: 6c 75 64 65 20 73 75 70 70 6f 72 74 20 66 6f 72  lude support for
acd0: 20 74 68 65 0a 20 20 5b 72 74 72 65 65 20 7c 20   the.  [rtree | 
ace0: 52 2a 54 72 65 65 20 69 6e 64 65 78 20 65 78 74  R*Tree index ext
acf0: 65 6e 73 69 6f 6e 5d 2e 0a 7d 0a 0a 43 4f 4d 50  ension]..}..COMP
ad00: 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49  ILE_OPTION {SQLI
ad10: 54 45 5f 45 4e 41 42 4c 45 5f 53 45 53 53 49 4f  TE_ENABLE_SESSIO
ad20: 4e 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70 74 69  N} {.  This opti
ad30: 6f 6e 20 65 6e 61 62 6c 65 73 20 74 68 65 20 5b  on enables the [
ad40: 73 65 73 73 69 6f 6e 20 65 78 74 65 6e 73 69 6f  session extensio
ad50: 6e 5d 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f  n]..}..COMPILE_O
ad60: 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 45 4e  PTION {SQLITE_EN
ad70: 41 42 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54  ABLE_STMT_SCANST
ad80: 41 54 55 53 7d 20 7b 0a 20 20 54 68 69 73 20 6f  ATUS} {.  This o
ad90: 70 74 69 6f 6e 20 65 6e 61 62 6c 65 73 20 74 68  ption enables th
ada0: 65 20 5b 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f  e [sqlite3_stmt_
adb0: 73 63 61 6e 73 74 61 74 75 73 28 29 5d 20 69 6e  scanstatus()] in
adc0: 74 65 72 66 61 63 65 2e 20 20 54 68 65 0a 20 20  terface.  The.  
add0: 5b 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f 73 63  [sqlite3_stmt_sc
ade0: 61 6e 73 74 61 74 75 73 28 29 5d 20 69 6e 74 65  anstatus()] inte
adf0: 72 66 61 63 65 20 69 73 20 6e 6f 72 6d 61 6c 6c  rface is normall
ae00: 79 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74  y omitted from t
ae10: 68 65 20 62 75 69 6c 64 0a 20 20 62 65 63 61 75  he build.  becau
ae20: 73 65 20 69 74 20 69 6d 70 6f 73 65 73 20 61 20  se it imposes a 
ae30: 73 6d 61 6c 6c 20 70 65 72 66 6f 72 6d 61 6e 63  small performanc
ae40: 65 20 70 65 6e 61 6c 74 79 2c 20 65 76 65 6e 20  e penalty, even 
ae50: 6f 6e 20 73 74 61 74 65 6d 65 6e 74 73 20 74 68  on statements th
ae60: 61 74 0a 20 20 64 6f 20 6e 6f 74 20 75 73 65 20  at.  do not use 
ae70: 74 68 65 20 66 65 61 74 75 72 65 2e 0a 7d 0a 0a  the feature..}..
ae80: 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b  COMPILE_OPTION {
ae90: 53 51 4c 49 54 45 5f 52 54 52 45 45 5f 49 4e 54  SQLITE_RTREE_INT
aea0: 5f 4f 4e 4c 59 7d 20 7b 0a 20 20 49 66 20 74 68  _ONLY} {.  If th
aeb0: 69 73 20 6f 70 74 69 6f 6e 20 69 73 20 75 73 65  is option is use
aec0: 64 20 74 6f 67 65 74 68 65 72 20 77 69 74 68 20  d together with 
aed0: 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 52  [SQLITE_ENABLE_R
aee0: 54 52 45 45 5d 20 74 68 65 6e 20 74 68 65 0a 20  TREE] then the. 
aef0: 20 5b 72 74 72 65 65 20 7c 20 52 2a 54 72 65 65   [rtree | R*Tree
af00: 20 65 78 74 65 6e 73 69 6f 6e 5d 20 77 69 6c 6c   extension] will
af10: 20 6f 6e 6c 79 20 73 74 6f 72 65 20 33 32 2d 62   only store 32-b
af20: 69 74 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65  it signed intege
af30: 72 0a 20 20 63 6f 6f 72 64 69 6e 61 74 65 73 20  r.  coordinates 
af40: 61 6e 64 20 61 6c 6c 20 69 6e 74 65 72 6e 61 6c  and all internal
af50: 20 63 6f 6d 70 75 74 61 74 69 6f 6e 73 20 77 69   computations wi
af60: 6c 6c 20 62 65 20 64 6f 6e 65 20 75 73 69 6e 67  ll be done using
af70: 20 69 6e 74 65 67 65 72 73 0a 20 20 69 6e 73 74   integers.  inst
af80: 65 61 64 20 6f 66 20 66 6c 6f 61 74 69 6e 67 20  ead of floating 
af90: 70 6f 69 6e 74 20 6e 75 6d 62 65 72 73 2e 0a 7d  point numbers..}
afa0: 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e  ..COMPILE_OPTION
afb0: 20 7b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f   {SQLITE_ENABLE_
afc0: 53 51 4c 4c 4f 47 7d 20 7b 0a 20 20 54 68 69 73  SQLLOG} {.  This
afd0: 20 6f 70 74 69 6f 6e 20 65 6e 61 62 6c 65 73 20   option enables 
afe0: 65 78 74 72 61 20 63 6f 64 65 20 28 65 73 70 65  extra code (espe
aff0: 63 69 61 6c 6c 79 20 74 68 65 20 5b 53 51 4c 49  cially the [SQLI
b000: 54 45 5f 43 4f 4e 46 49 47 5f 53 51 4c 4c 4f 47  TE_CONFIG_SQLLOG
b010: 5d 0a 20 20 6f 70 74 69 6f 6e 20 74 6f 20 5b 73  ].  option to [s
b020: 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 28 29 5d  qlite3_config()]
b030: 29 20 74 68 61 74 20 63 61 6e 20 62 65 20 75 73  ) that can be us
b040: 65 64 20 74 6f 20 63 72 65 61 74 65 20 6c 6f 67  ed to create log
b050: 73 20 6f 66 20 61 6c 6c 0a 20 20 53 51 4c 69 74  s of all.  SQLit
b060: 65 20 70 72 6f 63 65 73 73 69 6e 67 20 70 65 72  e processing per
b070: 66 6f 72 6d 65 64 20 62 79 20 61 6e 20 61 70 70  formed by an app
b080: 6c 69 63 61 74 69 6f 6e 2e 20 20 54 68 65 73 65  lication.  These
b090: 20 6c 6f 67 73 20 63 61 6e 20 62 65 20 75 73 65   logs can be use
b0a0: 66 75 6c 0a 20 20 69 6e 20 64 6f 69 6e 67 20 6f  ful.  in doing o
b0b0: 66 66 2d 6c 69 6e 65 20 61 6e 61 6c 79 73 69 73  ff-line analysis
b0c0: 20 6f 66 20 74 68 65 20 62 65 68 61 76 69 6f 72   of the behavior
b0d0: 20 6f 66 20 61 6e 20 61 70 70 6c 69 63 61 74 69   of an applicati
b0e0: 6f 6e 2c 20 61 6e 64 20 65 73 70 65 63 69 61 6c  on, and especial
b0f0: 6c 79 0a 20 20 66 6f 72 20 70 65 72 66 6f 72 6d  ly.  for perform
b100: 61 6e 63 65 20 61 6e 61 6c 79 73 69 73 2e 20 20  ance analysis.  
b110: 49 6e 20 6f 72 64 65 72 20 66 6f 72 20 74 68 65  In order for the
b120: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
b130: 51 4c 4c 4f 47 20 6f 70 74 69 6f 6e 20 74 6f 20  QLLOG option to 
b140: 0a 20 20 62 65 20 75 73 65 66 75 6c 2c 20 73 6f  .  be useful, so
b150: 6d 65 20 65 78 74 72 61 20 63 6f 64 65 20 69 73  me extra code is
b160: 20 72 65 71 75 69 72 65 64 2e 20 20 54 68 65 20   required.  The 
b170: 0a 20 20 3c 61 20 68 72 65 66 3d 22 68 74 74 70  .  <a href="http
b180: 3a 2f 2f 77 77 77 2e 73 71 6c 69 74 65 2e 6f 72  ://www.sqlite.or
b190: 67 2f 73 72 63 2f 64 6f 63 2f 74 72 75 6e 6b 2f  g/src/doc/trunk/
b1a0: 73 72 63 2f 74 65 73 74 5f 73 71 6c 6c 6f 67 2e  src/test_sqllog.
b1b0: 63 22 3e 22 74 65 73 74 5f 73 71 6c 6c 6f 67 2e  c">"test_sqllog.
b1c0: 63 22 3c 2f 61 3e 0a 20 20 73 6f 75 72 63 65 20  c"</a>.  source 
b1d0: 63 6f 64 65 0a 20 20 66 69 6c 65 20 69 6e 20 74  code.  file in t
b1e0: 68 65 20 53 51 4c 69 74 65 20 73 6f 75 72 63 65  he SQLite source
b1f0: 20 74 72 65 65 20 69 73 20 61 20 77 6f 72 6b 69   tree is a worki
b200: 6e 67 20 65 78 61 6d 70 6c 65 20 6f 66 20 74 68  ng example of th
b210: 65 20 72 65 71 75 69 72 65 64 20 65 78 74 72 61  e required extra
b220: 0a 20 20 63 6f 64 65 2e 20 20 4f 6e 20 75 6e 69  .  code.  On uni
b230: 78 20 61 6e 64 20 77 69 6e 64 6f 77 73 20 73 79  x and windows sy
b240: 73 74 65 6d 73 2c 20 61 20 64 65 76 65 6c 6f 70  stems, a develop
b250: 65 72 20 63 61 6e 20 61 70 70 65 6e 64 20 74 68  er can append th
b260: 65 20 74 65 78 74 20 6f 66 20 74 68 65 0a 20 20  e text of the.  
b270: 22 74 65 73 74 5f 73 71 6c 6c 6f 67 2e 63 22 20  "test_sqllog.c" 
b280: 73 6f 75 72 63 65 20 63 6f 64 65 20 66 69 6c 65  source code file
b290: 20 74 6f 20 74 68 65 20 65 6e 64 20 6f 66 20 61   to the end of a
b2a0: 6e 20 22 73 71 6c 69 74 65 33 2e 63 22 20 61 6d  n "sqlite3.c" am
b2b0: 61 6c 67 61 6d 61 74 69 6f 6e 2c 0a 20 20 72 65  algamation,.  re
b2c0: 63 6f 6d 70 69 6c 65 20 74 68 65 20 61 70 70 6c  compile the appl
b2d0: 69 63 61 74 69 6f 6e 20 75 73 69 6e 67 20 74 68  ication using th
b2e0: 65 20 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42 4c  e -DSQLITE_ENABL
b2f0: 45 5f 53 51 4c 4c 4f 47 20 6f 70 74 69 6f 6e 2c  E_SQLLOG option,
b300: 20 74 68 65 6e 20 0a 20 20 63 6f 6e 74 72 6f 6c   then .  control
b310: 20 6c 6f 67 67 69 6e 67 20 75 73 69 6e 67 20 65   logging using e
b320: 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69 61  nvironment varia
b330: 62 6c 65 73 2e 20 20 53 65 65 20 74 68 65 20 68  bles.  See the h
b340: 65 61 64 65 72 20 63 6f 6d 6d 65 6e 74 20 6f 6e  eader comment on
b350: 20 0a 20 20 74 68 65 20 22 74 65 73 74 5f 73 71   .  the "test_sq
b360: 6c 6c 6f 67 2e 63 22 20 73 6f 75 72 63 65 20 66  llog.c" source f
b370: 69 6c 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ile for addition
b380: 61 6c 20 64 65 74 61 69 6c 2e 20 20 0a 7d 0a 0a  al detail.  .}..
b390: 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b  COMPILE_OPTION {
b3a0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
b3b0: 41 54 32 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70  AT2} {.  This op
b3c0: 74 69 6f 6e 20 75 73 65 64 20 74 6f 20 63 61 75  tion used to cau
b3d0: 73 65 20 74 68 65 20 5b 41 4e 41 4c 59 5a 45 5d  se the [ANALYZE]
b3e0: 20 63 6f 6d 6d 61 6e 64 20 74 6f 20 63 6f 6c 6c   command to coll
b3f0: 65 63 74 0a 20 20 69 6e 64 65 78 20 68 69 73 74  ect.  index hist
b400: 6f 67 72 61 6d 20 64 61 74 61 20 69 6e 20 74 68  ogram data in th
b410: 65 20 3c 62 3e 73 71 6c 69 74 65 5f 73 74 61 74  e <b>sqlite_stat
b420: 32 3c 2f 62 3e 20 74 61 62 6c 65 2e 20 20 42 75  2</b> table.  Bu
b430: 74 20 74 68 61 74 0a 20 20 66 75 6e 63 74 69 6f  t that.  functio
b440: 6e 61 6c 69 74 79 20 77 61 73 20 73 75 70 65 72  nality was super
b450: 63 65 64 65 64 20 62 79 20 5b 53 51 4c 49 54 45  ceded by [SQLITE
b460: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5d 20 61  _ENABLE_STAT3] a
b470: 73 20 6f 66 0a 20 20 53 51 4c 69 74 65 20 5b 76  s of.  SQLite [v
b480: 65 72 73 69 6f 6e 20 33 2e 37 2e 39 5d 20 28 5b  ersion 3.7.9] ([
b490: 64 61 74 65 6f 66 3a 33 2e 37 2e 39 5d 29 2e 20  dateof:3.7.9]). 
b4a0: 20 0a 20 20 54 68 65 20 53 51 4c 49 54 45 5f 45   .  The SQLITE_E
b4b0: 4e 41 42 4c 45 5f 53 54 41 54 32 20 63 6f 6d 70  NABLE_STAT2 comp
b4c0: 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 0a  ile-time option.
b4d0: 20 20 69 73 20 6e 6f 77 20 61 20 6e 6f 2d 6f 70    is now a no-op
b4e0: 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54  ..}..COMPILE_OPT
b4f0: 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 45 4e 41 42  ION {SQLITE_ENAB
b500: 4c 45 5f 53 54 41 54 33 7d 20 7b 0a 20 20 54 68  LE_STAT3} {.  Th
b510: 69 73 20 6f 70 74 69 6f 6e 20 61 64 64 73 20 61  is option adds a
b520: 64 64 69 74 69 6f 6e 61 6c 20 6c 6f 67 69 63 20  dditional logic 
b530: 74 6f 20 74 68 65 20 5b 41 4e 41 4c 59 5a 45 5d  to the [ANALYZE]
b540: 20 63 6f 6d 6d 61 6e 64 20 61 6e 64 20 74 6f 0a   command and to.
b550: 20 20 74 68 65 20 5b 71 75 65 72 79 20 70 6c 61    the [query pla
b560: 6e 6e 65 72 5d 20 74 68 61 74 20 63 61 6e 20 68  nner] that can h
b570: 65 6c 70 20 53 51 4c 69 74 65 20 74 6f 20 63 68  elp SQLite to ch
b580: 6f 73 65 20 61 20 62 65 74 74 65 72 20 71 75 65  ose a better que
b590: 72 79 20 70 6c 61 6e 0a 20 20 75 6e 64 65 72 20  ry plan.  under 
b5a0: 63 65 72 74 61 69 6e 20 73 69 74 75 61 74 69 6f  certain situatio
b5b0: 6e 73 2e 20 20 54 68 65 20 5b 41 4e 41 4c 59 5a  ns.  The [ANALYZ
b5c0: 45 5d 20 63 6f 6d 6d 61 6e 64 20 69 73 20 65 6e  E] command is en
b5d0: 68 61 6e 63 65 64 20 74 6f 20 63 6f 6c 6c 65 63  hanced to collec
b5e0: 74 0a 20 20 68 69 73 74 6f 67 72 61 6d 20 64 61  t.  histogram da
b5f0: 74 61 20 66 72 6f 6d 20 74 68 65 20 6c 65 66 74  ta from the left
b600: 2d 6d 6f 73 74 20 63 6f 6c 75 6d 6e 20 6f 66 20  -most column of 
b610: 65 61 63 68 20 69 6e 64 65 78 20 61 6e 64 20 73  each index and s
b620: 74 6f 72 65 20 74 68 61 74 20 64 61 74 61 0a 20  tore that data. 
b630: 20 69 6e 20 74 68 65 20 5b 73 71 6c 69 74 65 5f   in the [sqlite_
b640: 73 74 61 74 33 5d 20 74 61 62 6c 65 2e 20 20 54  stat3] table.  T
b650: 68 65 20 71 75 65 72 79 20 70 6c 61 6e 6e 65 72  he query planner
b660: 20 77 69 6c 6c 20 74 68 65 6e 20 75 73 65 20 74   will then use t
b670: 68 65 0a 20 20 68 69 73 74 6f 67 72 61 6d 20 64  he.  histogram d
b680: 61 74 61 20 74 6f 20 68 65 6c 70 20 69 74 20 6d  ata to help it m
b690: 61 6b 65 20 62 65 74 74 65 72 20 69 6e 64 65 78  ake better index
b6a0: 20 63 68 6f 69 63 65 73 2e 20 20 4e 6f 74 65 2c   choices.  Note,
b6b0: 20 68 6f 77 65 76 65 72 2c 0a 20 20 74 68 61 74   however,.  that
b6c0: 20 74 68 65 20 75 73 65 20 6f 66 20 68 69 73 74   the use of hist
b6d0: 6f 67 72 61 6d 20 64 61 74 61 20 69 6e 20 71 75  ogram data in qu
b6e0: 65 72 79 20 70 6c 61 6e 6e 65 72 20 76 69 6f 6c  ery planner viol
b6f0: 61 74 65 73 20 74 68 65 0a 20 20 5b 71 75 65 72  ates the.  [quer
b700: 79 20 70 6c 61 6e 6e 65 72 20 73 74 61 62 69 6c  y planner stabil
b710: 69 74 79 20 67 75 61 72 61 6e 74 65 65 5d 20 77  ity guarantee] w
b720: 68 69 63 68 20 69 73 20 69 6d 70 6f 72 74 61 6e  hich is importan
b730: 74 20 74 6f 20 73 6f 6d 65 20 61 70 70 6c 69 63  t to some applic
b740: 61 74 69 6f 6e 73 2e 0a 20 20 3c 70 3e 0a 7d 0a  ations..  <p>.}.
b750: 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20  .COMPILE_OPTION 
b760: 7b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53  {SQLITE_ENABLE_S
b770: 54 41 54 34 7d 20 7b 0a 20 20 54 68 69 73 20 6f  TAT4} {.  This o
b780: 70 74 69 6f 6e 20 61 64 64 73 20 61 64 64 69 74  ption adds addit
b790: 69 6f 6e 61 6c 20 6c 6f 67 69 63 20 74 6f 20 74  ional logic to t
b7a0: 68 65 20 5b 41 4e 41 4c 59 5a 45 5d 20 63 6f 6d  he [ANALYZE] com
b7b0: 6d 61 6e 64 20 61 6e 64 20 74 6f 0a 20 20 74 68  mand and to.  th
b7c0: 65 20 5b 71 75 65 72 79 20 70 6c 61 6e 6e 65 72  e [query planner
b7d0: 5d 20 74 68 61 74 20 63 61 6e 20 68 65 6c 70 20  ] that can help 
b7e0: 53 51 4c 69 74 65 20 74 6f 20 63 68 6f 73 65 20  SQLite to chose 
b7f0: 61 20 62 65 74 74 65 72 20 71 75 65 72 79 20 70  a better query p
b800: 6c 61 6e 0a 20 20 75 6e 64 65 72 20 63 65 72 74  lan.  under cert
b810: 61 69 6e 20 73 69 74 75 61 74 69 6f 6e 73 2e 20  ain situations. 
b820: 20 54 68 65 20 5b 41 4e 41 4c 59 5a 45 5d 20 63   The [ANALYZE] c
b830: 6f 6d 6d 61 6e 64 20 69 73 20 65 6e 68 61 6e 63  ommand is enhanc
b840: 65 64 20 74 6f 20 63 6f 6c 6c 65 63 74 0a 20 20  ed to collect.  
b850: 68 69 73 74 6f 67 72 61 6d 20 64 61 74 61 20 66  histogram data f
b860: 72 6f 6d 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20  rom all columns 
b870: 6f 66 20 65 76 65 72 79 20 69 6e 64 65 78 20 61  of every index a
b880: 6e 64 20 73 74 6f 72 65 20 74 68 61 74 20 64 61  nd store that da
b890: 74 61 0a 20 20 69 6e 20 74 68 65 20 5b 73 71 6c  ta.  in the [sql
b8a0: 69 74 65 5f 73 74 61 74 34 5d 20 74 61 62 6c 65  ite_stat4] table
b8b0: 2e 20 20 54 68 65 20 71 75 65 72 79 20 70 6c 61  .  The query pla
b8c0: 6e 6e 65 72 20 77 69 6c 6c 20 74 68 65 6e 20 75  nner will then u
b8d0: 73 65 20 74 68 65 0a 20 20 68 69 73 74 6f 67 72  se the.  histogr
b8e0: 61 6d 20 64 61 74 61 20 74 6f 20 68 65 6c 70 20  am data to help 
b8f0: 69 74 20 6d 61 6b 65 20 62 65 74 74 65 72 20 69  it make better i
b900: 6e 64 65 78 20 63 68 6f 69 63 65 73 2e 20 20 54  ndex choices.  T
b910: 68 65 20 64 6f 77 6e 73 69 64 65 20 6f 66 0a 20  he downside of. 
b920: 20 74 68 69 73 20 63 6f 6d 70 69 6c 65 2d 74 69   this compile-ti
b930: 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20 74 68 61  me option is tha
b940: 74 20 69 74 20 76 69 6f 6c 61 74 65 73 20 74 68  t it violates th
b950: 65 0a 20 20 5b 71 75 65 72 79 20 70 6c 61 6e 6e  e.  [query plann
b960: 65 72 20 73 74 61 62 69 6c 69 74 79 20 67 75 61  er stability gua
b970: 72 61 6e 74 65 65 5d 20 6d 61 6b 69 6e 67 20 69  rantee] making i
b980: 74 20 6d 6f 72 65 20 64 69 66 66 69 63 75 6c 74  t more difficult
b990: 20 74 6f 20 65 6e 73 75 72 65 0a 20 20 63 6f 6e   to ensure.  con
b9a0: 73 69 73 74 65 6e 74 20 70 65 72 66 6f 72 6d 61  sistent performa
b9b0: 6e 63 65 20 69 6e 20 6d 61 73 73 2d 70 72 6f 64  nce in mass-prod
b9c0: 75 63 65 64 20 61 70 70 6c 69 63 61 74 69 6f 6e  uced application
b9d0: 73 2e 0a 20 20 3c 70 3e 0a 20 20 53 51 4c 49 54  s..  <p>.  SQLIT
b9e0: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 20 69  E_ENABLE_STAT4 i
b9f0: 73 20 61 6e 20 65 6e 68 61 6e 63 65 6d 65 6e 74  s an enhancement
ba00: 20 6f 66 20 5b 53 51 4c 49 54 45 5f 45 4e 41 42   of [SQLITE_ENAB
ba10: 4c 45 5f 53 54 41 54 33 5d 2e 20 20 53 54 41 54  LE_STAT3].  STAT
ba20: 33 0a 20 20 6f 6e 6c 79 20 72 65 63 6f 72 64 65  3.  only recorde
ba30: 64 20 68 69 73 74 6f 67 72 61 6d 20 64 61 74 61  d histogram data
ba40: 20 66 6f 72 20 74 68 65 20 6c 65 66 74 2d 6d 6f   for the left-mo
ba50: 73 74 20 63 6f 6c 75 6d 6e 20 6f 66 20 65 61 63  st column of eac
ba60: 68 20 69 6e 64 65 78 0a 20 20 77 68 65 72 65 61  h index.  wherea
ba70: 73 20 74 68 65 20 53 54 41 54 34 20 65 6e 68 61  s the STAT4 enha
ba80: 6e 63 65 6d 65 6e 74 20 72 65 63 6f 72 64 73 20  ncement records 
ba90: 68 69 73 74 6f 67 72 61 6d 20 64 61 74 61 20 66  histogram data f
baa0: 72 6f 6d 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 0a  rom all columns.
bab0: 20 20 6f 66 20 65 61 63 68 20 69 6e 64 65 78 2e    of each index.
bac0: 0a 20 20 54 68 65 20 5b 53 51 4c 49 54 45 5f 45  .  The [SQLITE_E
bad0: 4e 41 42 4c 45 5f 53 54 41 54 33 5d 20 63 6f 6d  NABLE_STAT3] com
bae0: 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
baf0: 20 69 73 20 61 20 6e 6f 2d 6f 70 20 61 6e 64 20   is a no-op and 
bb00: 69 73 20 69 67 6e 6f 72 65 64 0a 20 20 69 66 20  is ignored.  if 
bb10: 74 68 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  the SQLITE_ENABL
bb20: 45 5f 53 54 41 54 34 20 63 6f 6d 70 69 6c 65 2d  E_STAT4 compile-
bb30: 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20 75  time option is u
bb40: 73 65 64 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f  sed..}..COMPILE_
bb50: 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 45  OPTION {SQLITE_E
bb60: 4e 41 42 4c 45 5f 54 52 45 45 5f 45 58 50 4c 41  NABLE_TREE_EXPLA
bb70: 49 4e 7d 20 7b 0a 20 20 54 68 69 73 20 63 6f 6d  IN} {.  This com
bb80: 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
bb90: 20 69 73 20 6e 6f 20 6c 6f 6e 67 65 72 20 75 73   is no longer us
bba0: 65 64 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f  ed..}..COMPILE_O
bbb0: 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 45 4e  PTION {SQLITE_EN
bbc0: 41 42 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c 45  ABLE_UPDATE_DELE
bbd0: 54 45 5f 4c 49 4d 49 54 7d 20 7b 0a 20 20 54 68  TE_LIMIT} {.  Th
bbe0: 69 73 20 6f 70 74 69 6f 6e 20 65 6e 61 62 6c 65  is option enable
bbf0: 73 20 61 6e 20 6f 70 74 69 6f 6e 61 6c 20 4f 52  s an optional OR
bc00: 44 45 52 20 42 59 20 61 6e 64 20 4c 49 4d 49 54  DER BY and LIMIT
bc10: 20 63 6c 61 75 73 65 20 6f 6e 20 0a 20 20 5b 55   clause on .  [U
bc20: 50 44 41 54 45 5d 20 61 6e 64 20 5b 44 45 4c 45  PDATE] and [DELE
bc30: 54 45 5d 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a  TE] statements..
bc40: 0a 20 20 3c 70 3e 49 66 20 74 68 69 73 20 6f 70  .  <p>If this op
bc50: 74 69 6f 6e 20 69 73 20 64 65 66 69 6e 65 64 2c  tion is defined,
bc60: 20 74 68 65 6e 20 69 74 20 6d 75 73 74 20 61 6c   then it must al
bc70: 73 6f 20 62 65 20 0a 20 20 64 65 66 69 6e 65 64  so be .  defined
bc80: 20 77 68 65 6e 20 75 73 69 6e 67 20 74 68 65 20   when using the 
bc90: 27 6c 65 6d 6f 6e 27 20 74 6f 6f 6c 20 74 6f 20  'lemon' tool to 
bca0: 67 65 6e 65 72 61 74 65 20 61 20 70 61 72 73 65  generate a parse
bcb0: 2e 63 0a 20 20 66 69 6c 65 2e 20 42 65 63 61 75  .c.  file. Becau
bcc0: 73 65 20 6f 66 20 74 68 69 73 2c 20 74 68 69 73  se of this, this
bcd0: 20 6f 70 74 69 6f 6e 20 6d 61 79 20 6f 6e 6c 79   option may only
bce0: 20 62 65 20 75 73 65 64 20 77 68 65 6e 20 74 68   be used when th
bcf0: 65 20 6c 69 62 72 61 72 79 20 69 73 20 62 75 69  e library is bui
bd00: 6c 74 0a 20 20 66 72 6f 6d 20 73 6f 75 72 63 65  lt.  from source
bd10: 2c 20 6e 6f 74 20 66 72 6f 6d 20 74 68 65 20 5b  , not from the [
bd20: 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 5d 20 6f 72  amalgamation] or
bd30: 20 66 72 6f 6d 20 74 68 65 20 63 6f 6c 6c 65 63   from the collec
bd40: 74 69 6f 6e 20 6f 66 0a 20 20 70 72 65 2d 70 61  tion of.  pre-pa
bd50: 63 6b 61 67 65 64 20 43 20 66 69 6c 65 73 20 70  ckaged C files p
bd60: 72 6f 76 69 64 65 64 20 66 6f 72 20 6e 6f 6e 2d  rovided for non-
bd70: 55 6e 69 78 20 6c 69 6b 65 20 70 6c 61 74 66 6f  Unix like platfo
bd80: 72 6d 73 20 6f 6e 20 74 68 65 20 77 65 62 73 69  rms on the websi
bd90: 74 65 2e 0a 20 20 3c 2f 70 3e 0a 7d 0a 0a 43 4f  te..  </p>.}..CO
bda0: 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51  MPILE_OPTION {SQ
bdb0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 4e 4b 4e  LITE_ENABLE_UNKN
bdc0: 4f 57 4e 5f 53 51 4c 5f 46 55 4e 43 54 49 4f 4e  OWN_SQL_FUNCTION
bdd0: 7d 20 7b 0a 20 20 57 68 65 6e 20 74 68 65 20 53  } {.  When the S
bde0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 4e 4b  QLITE_ENABLE_UNK
bdf0: 4e 4f 57 4e 5f 53 51 4c 5f 46 55 4e 43 54 49 4f  NOWN_SQL_FUNCTIO
be00: 4e 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f  N compile-time o
be10: 70 74 69 6f 6e 20 69 73 0a 20 20 61 63 74 69 76  ption is.  activ
be20: 61 74 65 64 2c 20 53 51 4c 69 74 65 20 77 69 6c  ated, SQLite wil
be30: 6c 20 73 75 70 70 72 65 73 73 20 22 75 6e 6b 6e  l suppress "unkn
be40: 6f 77 6e 20 66 75 6e 63 74 69 6f 6e 22 20 65 72  own function" er
be50: 72 6f 72 73 20 77 68 65 6e 20 72 75 6e 6e 69 6e  rors when runnin
be60: 67 0a 20 20 61 6e 20 5b 45 58 50 4c 41 49 4e 5d  g.  an [EXPLAIN]
be70: 20 6f 72 20 5b 45 58 50 4c 41 49 4e 20 51 55 45   or [EXPLAIN QUE
be80: 52 59 20 50 4c 41 4e 5d 2e 20 20 49 6e 73 74 65  RY PLAN].  Inste
be90: 61 64 20 6f 66 20 74 68 72 6f 77 69 6e 67 20 61  ad of throwing a
bea0: 6e 20 65 72 72 6f 72 2c 0a 20 20 53 51 4c 69 74  n error,.  SQLit
beb0: 65 20 77 69 6c 6c 20 69 6e 73 65 72 74 20 61 20  e will insert a 
bec0: 73 75 62 73 74 69 74 75 74 65 20 6e 6f 2d 6f 70  substitute no-op
bed0: 20 66 75 6e 63 74 69 6f 6e 20 6e 61 6d 65 64 20   function named 
bee0: 22 75 6e 6b 6e 6f 77 6e 28 29 22 2e 0a 20 20 54  "unknown()"..  T
bef0: 68 65 20 73 75 62 73 74 69 74 75 74 69 6f 6e 20  he substitution 
bf00: 6f 66 20 22 75 6e 6b 6e 6f 77 6e 28 29 22 20 69  of "unknown()" i
bf10: 6e 20 70 6c 61 63 65 20 6f 66 20 75 6e 72 65 63  n place of unrec
bf20: 6f 67 6e 69 7a 65 64 20 66 75 6e 63 74 69 6f 6e  ognized function
bf30: 73 0a 20 20 6f 6e 6c 79 20 6f 63 63 75 72 73 20  s.  only occurs 
bf40: 6f 6e 20 5b 45 58 50 4c 41 49 4e 5d 20 61 6e 64  on [EXPLAIN] and
bf50: 20 5b 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20   [EXPLAIN QUERY 
bf60: 50 4c 41 4e 5d 2c 20 6e 6f 74 20 6f 6e 20 6f 72  PLAN], not on or
bf70: 64 69 6e 61 72 79 0a 20 20 73 74 61 74 65 6d 65  dinary.  stateme
bf80: 6e 74 73 2e 0a 20 20 3c 70 3e 0a 20 20 57 68 65  nts..  <p>.  Whe
bf90: 6e 20 75 73 65 64 20 69 6e 20 74 68 65 20 5b 63  n used in the [c
bfa0: 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 73 68 65 6c  ommand-line shel
bfb0: 6c 5d 2c 20 74 68 65 0a 20 20 53 51 4c 49 54 45  l], the.  SQLITE
bfc0: 5f 45 4e 41 42 4c 45 5f 55 4e 4b 4e 4f 57 4e 5f  _ENABLE_UNKNOWN_
bfd0: 53 51 4c 5f 46 55 4e 43 54 49 4f 4e 20 66 65 61  SQL_FUNCTION fea
bfe0: 74 75 72 65 20 61 6c 6c 6f 77 73 20 53 51 4c 20  ture allows SQL 
bff0: 74 65 78 74 20 74 68 61 74 20 63 6f 6e 74 61 69  text that contai
c000: 6e 73 0a 20 20 61 70 70 6c 69 63 61 74 69 6f 6e  ns.  application
c010: 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f  -defined functio
c020: 6e 73 20 74 6f 20 62 65 20 70 61 73 74 65 64 20  ns to be pasted 
c030: 69 6e 74 6f 20 74 68 65 20 73 68 65 6c 6c 20 66  into the shell f
c040: 6f 72 20 0a 20 20 61 6e 61 6c 79 73 69 73 20 61  or .  analysis a
c050: 6e 64 20 64 65 62 75 67 67 69 6e 67 20 77 69 74  nd debugging wit
c060: 68 6f 75 74 20 68 61 76 69 6e 67 20 74 6f 20 63  hout having to c
c070: 72 65 61 74 65 20 61 6e 64 20 6c 6f 61 64 20 61  reate and load a
c080: 6e 0a 20 20 65 78 74 65 6e 73 69 6f 6e 20 74 68  n.  extension th
c090: 61 74 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68  at implements th
c0a0: 65 20 61 70 70 6c 69 63 61 74 69 6f 6e 2d 64 65  e application-de
c0b0: 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73 2e  fined functions.
c0c0: 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49  .}..COMPILE_OPTI
c0d0: 4f 4e 20 7b 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ON {SQLITE_ENABL
c0e0: 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 7d  E_UNLOCK_NOTIFY}
c0f0: 20 7b 0a 20 20 54 68 69 73 20 6f 70 74 69 6f 6e   {.  This option
c100: 20 65 6e 61 62 6c 65 73 20 74 68 65 20 5b 73 71   enables the [sq
c110: 6c 69 74 65 33 5f 75 6e 6c 6f 63 6b 5f 6e 6f 74  lite3_unlock_not
c120: 69 66 79 28 29 5d 20 69 6e 74 65 72 66 61 63 65  ify()] interface
c130: 20 61 6e 64 0a 20 20 69 74 73 20 61 73 73 6f 63   and.  its assoc
c140: 69 61 74 65 64 20 66 75 6e 63 74 69 6f 6e 61 6c  iated functional
c150: 69 74 79 2e 20 20 53 65 65 20 74 68 65 20 64 6f  ity.  See the do
c160: 63 75 6d 65 6e 74 61 74 69 6f 6e 20 74 69 74 6c  cumentation titl
c170: 65 64 0a 20 20 5b 55 73 69 6e 67 20 74 68 65 20  ed.  [Using the 
c180: 53 51 4c 69 74 65 20 55 6e 6c 6f 63 6b 20 4e 6f  SQLite Unlock No
c190: 74 69 66 69 63 61 74 69 6f 6e 20 46 65 61 74 75  tification Featu
c1a0: 72 65 5d 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  re] for addition
c1b0: 61 6c 0a 20 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  al.  information
c1c0: 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54  ..}..COMPILE_OPT
c1d0: 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 53 4f 55 4e  ION {SQLITE_SOUN
c1e0: 44 45 58 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70  DEX} {.  This op
c1f0: 74 69 6f 6e 20 65 6e 61 62 6c 65 73 20 74 68 65  tion enables the
c200: 20 5b 73 6f 75 6e 64 65 78 28 29 20 53 51 4c 20   [soundex() SQL 
c210: 66 75 6e 63 74 69 6f 6e 5d 2e 0a 7d 0a 0a 43 4f  function]..}..CO
c220: 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51  MPILE_OPTION {SQ
c230: 4c 49 54 45 5f 55 53 45 5f 46 43 4e 54 4c 5f 54  LITE_USE_FCNTL_T
c240: 52 41 43 45 7d 20 7b 0a 20 20 54 68 69 73 20 6f  RACE} {.  This o
c250: 70 74 69 6f 6e 20 63 61 75 73 65 73 20 53 51 4c  ption causes SQL
c260: 69 74 65 20 74 6f 20 69 73 73 75 65 20 65 78 74  ite to issue ext
c270: 72 61 20 5b 53 51 4c 49 54 45 5f 46 43 4e 54 4c  ra [SQLITE_FCNTL
c280: 5f 54 52 41 43 45 5d 20 66 69 6c 65 20 63 6f 6e  _TRACE] file con
c290: 74 72 6f 6c 73 0a 20 20 74 6f 20 70 72 6f 76 69  trols.  to provi
c2a0: 64 65 20 73 75 70 70 6c 65 6d 65 6e 74 61 72 79  de supplementary
c2b0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 6f 20   information to 
c2c0: 74 68 65 20 56 46 53 2e 20 20 54 68 65 20 22 76  the VFS.  The "v
c2d0: 66 73 6c 6f 67 2e 63 22 20 65 78 74 65 6e 73 69  fslog.c" extensi
c2e0: 6f 6e 0a 20 20 6d 61 6b 65 73 20 75 73 65 20 6f  on.  makes use o
c2f0: 66 20 74 68 69 73 20 74 6f 20 70 72 6f 76 69 64  f this to provid
c300: 65 20 65 6e 68 61 6e 63 65 64 20 6c 6f 67 73 20  e enhanced logs 
c310: 6f 66 20 56 46 53 20 61 63 74 69 76 69 74 79 2e  of VFS activity.
c320: 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49  .}..COMPILE_OPTI
c330: 4f 4e 20 7b 59 59 54 52 41 43 4b 4d 41 58 53 54  ON {YYTRACKMAXST
c340: 41 43 4b 44 45 50 54 48 7d 20 7b 0a 20 20 54 68  ACKDEPTH} {.  Th
c350: 69 73 20 6f 70 74 69 6f 6e 20 63 61 75 73 65 73  is option causes
c360: 20 74 68 65 20 4c 41 4c 52 28 31 29 20 70 61 72   the LALR(1) par
c370: 73 65 72 20 73 74 61 63 6b 20 64 65 70 74 68 20  ser stack depth 
c380: 74 6f 20 62 65 20 74 72 61 63 6b 65 64 0a 20 20  to be tracked.  
c390: 61 6e 64 20 72 65 70 6f 72 74 65 64 20 75 73 69  and reported usi
c3a0: 6e 67 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f  ng the [sqlite3_
c3b0: 73 74 61 74 75 73 5d 28 5b 53 51 4c 49 54 45 5f  status]([SQLITE_
c3c0: 53 54 41 54 55 53 5f 50 41 52 53 45 52 5f 53 54  STATUS_PARSER_ST
c3d0: 41 43 4b 5d 2c 2e 2e 2e 29 0a 20 20 69 6e 74 65  ACK],...).  inte
c3e0: 72 66 61 63 65 2e 20 20 53 51 4c 69 74 65 27 73  rface.  SQLite's
c3f0: 20 4c 41 4c 52 28 31 29 20 70 61 72 73 65 72 20   LALR(1) parser 
c400: 68 61 73 20 61 20 66 69 78 65 64 20 73 74 61 63  has a fixed stac
c410: 6b 20 64 65 70 74 68 0a 20 20 28 64 65 74 65 72  k depth.  (deter
c420: 6d 69 6e 65 64 20 61 74 20 63 6f 6d 70 69 6c 65  mined at compile
c430: 2d 74 69 6d 65 20 75 73 69 6e 67 20 74 68 65 20  -time using the 
c440: 5b 59 59 53 54 41 43 4b 44 45 50 54 48 5d 20 6f  [YYSTACKDEPTH] o
c450: 70 74 69 6f 6e 73 29 2e 0a 20 20 54 68 69 73 20  ptions)..  This 
c460: 6f 70 74 69 6f 6e 20 63 61 6e 20 62 65 20 75 73  option can be us
c470: 65 64 20 74 6f 20 68 65 6c 70 20 64 65 74 65 72  ed to help deter
c480: 6d 69 6e 65 20 69 66 20 61 6e 20 61 70 70 6c 69  mine if an appli
c490: 63 61 74 69 6f 6e 20 69 73 0a 20 20 67 65 74 74  cation is.  gett
c4a0: 69 6e 67 20 63 6c 6f 73 65 20 74 6f 20 65 78 63  ing close to exc
c4b0: 65 65 64 69 6e 67 20 74 68 65 20 6d 61 78 69 6d  eeding the maxim
c4c0: 75 6d 20 4c 41 4c 52 28 31 29 20 73 74 61 63 6b  um LALR(1) stack
c4d0: 20 64 65 70 74 68 2e 0a 7d 0a 3c 2f 74 63 6c 3e   depth..}.</tcl>
c4e0: 0a 0a 3c 61 20 6e 61 6d 65 3d 22 64 69 73 61 62  ..<a name="disab
c4f0: 6c 65 66 65 61 74 75 72 65 73 22 3e 3c 2f 61 3e  lefeatures"></a>
c500: 0a 3c 68 31 3e 20 4f 70 74 69 6f 6e 73 20 54 6f  .<h1> Options To
c510: 20 44 69 73 61 62 6c 65 20 46 65 61 74 75 72 65   Disable Feature
c520: 73 20 4e 6f 72 6d 61 6c 6c 79 20 54 75 72 6e 65  s Normally Turne
c530: 64 20 4f 6e 3c 2f 68 31 3e 0a 0a 3c 74 63 6c 3e  d On</h1>..<tcl>
c540: 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20  .COMPILE_OPTION 
c550: 7b 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f  {SQLITE_DISABLE_
c560: 4c 46 53 7d 20 7b 0a 20 20 49 66 20 74 68 69 73  LFS} {.  If this
c570: 20 43 2d 70 72 65 70 72 6f 63 65 73 73 6f 72 20   C-preprocessor 
c580: 6d 61 63 72 6f 20 69 73 20 64 65 66 69 6e 65 64  macro is defined
c590: 2c 20 6c 61 72 67 65 20 66 69 6c 65 20 73 75 70  , large file sup
c5a0: 70 6f 72 74 0a 20 20 69 73 20 64 69 73 61 62 6c  port.  is disabl
c5b0: 65 64 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f  ed..}..COMPILE_O
c5c0: 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 44 49  PTION {SQLITE_DI
c5d0: 53 41 42 4c 45 5f 44 49 52 53 59 4e 43 7d 20 7b  SABLE_DIRSYNC} {
c5e0: 0a 20 20 49 66 20 74 68 69 73 20 43 2d 70 72 65  .  If this C-pre
c5f0: 70 72 6f 63 65 73 73 6f 72 20 6d 61 63 72 6f 20  processor macro 
c600: 69 73 20 64 65 66 69 6e 65 64 2c 20 64 69 72 65  is defined, dire
c610: 63 74 6f 72 79 20 73 79 6e 63 73 0a 20 20 61 72  ctory syncs.  ar
c620: 65 20 64 69 73 61 62 6c 65 64 2e 20 20 53 51 4c  e disabled.  SQL
c630: 69 74 65 20 74 79 70 69 63 61 6c 6c 79 20 61 74  ite typically at
c640: 74 65 6d 70 74 73 20 74 6f 20 73 79 6e 63 20 74  tempts to sync t
c650: 68 65 20 70 61 72 65 6e 74 0a 20 20 64 69 72 65  he parent.  dire
c660: 63 74 6f 72 79 20 77 68 65 6e 20 61 20 66 69 6c  ctory when a fil
c670: 65 20 69 73 20 64 65 6c 65 74 65 64 20 74 6f 20  e is deleted to 
c680: 65 6e 73 75 72 65 20 74 68 65 20 64 69 72 65 63  ensure the direc
c690: 74 6f 72 79 0a 20 20 65 6e 74 72 69 65 73 20 61  tory.  entries a
c6a0: 72 65 20 75 70 64 61 74 65 64 20 69 6d 6d 65 64  re updated immed
c6b0: 69 61 74 65 6c 79 20 6f 6e 20 64 69 73 6b 2e 0a  iately on disk..
c6c0: 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f  }..COMPILE_OPTIO
c6d0: 4e 20 7b 53 51 4c 49 54 45 5f 44 49 53 41 42 4c  N {SQLITE_DISABL
c6e0: 45 5f 46 54 53 33 5f 55 4e 49 43 4f 44 45 7d 20  E_FTS3_UNICODE} 
c6f0: 7b 0a 20 20 49 66 20 74 68 69 73 20 43 2d 70 72  {.  If this C-pr
c700: 65 70 72 6f 63 65 73 73 6f 72 20 6d 61 63 72 6f  eprocessor macro
c710: 20 69 73 20 64 65 66 69 6e 65 64 2c 20 74 68 65   is defined, the
c720: 20 5b 75 6e 69 63 6f 64 65 36 31 5d 20 74 6f 6b   [unicode61] tok
c730: 65 6e 69 7a 65 72 0a 20 20 69 6e 20 5b 46 54 53  enizer.  in [FTS
c740: 33 5d 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72  3] is omitted fr
c750: 6f 6d 20 74 68 65 20 62 75 69 6c 64 20 61 6e 64  om the build and
c760: 20 69 73 20 75 6e 61 76 61 69 6c 61 62 6c 65 20   is unavailable 
c770: 74 6f 20 0a 20 20 61 70 70 6c 69 63 61 74 69 6f  to .  applicatio
c780: 6e 73 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f  ns..}..COMPILE_O
c790: 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 44 49  PTION {SQLITE_DI
c7a0: 53 41 42 4c 45 5f 46 54 53 34 5f 44 45 46 45 52  SABLE_FTS4_DEFER
c7b0: 52 45 44 7d 20 7b 0a 20 20 49 66 20 74 68 69 73  RED} {.  If this
c7c0: 20 43 2d 70 72 65 70 72 6f 63 65 73 73 6f 72 20   C-preprocessor 
c7d0: 6d 61 63 72 6f 20 64 69 73 61 62 6c 65 73 20 74  macro disables t
c7e0: 68 65 20 22 64 65 66 65 72 72 65 64 20 74 6f 6b  he "deferred tok
c7f0: 65 6e 22 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  en" optimization
c800: 0a 20 20 69 6e 20 5b 46 54 53 34 5d 2e 20 20 54  .  in [FTS4].  T
c810: 68 65 20 22 64 65 66 65 72 72 65 64 20 74 6f 6b  he "deferred tok
c820: 65 6e 22 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  en" optimization
c830: 20 61 76 6f 69 64 73 20 6c 6f 61 64 69 6e 67 20   avoids loading 
c840: 6d 61 73 73 69 76 65 0a 20 20 70 6f 73 74 69 6e  massive.  postin
c850: 67 20 6c 69 73 74 73 20 66 6f 72 20 74 65 72 6d  g lists for term
c860: 73 20 74 68 61 74 20 61 72 65 20 69 6e 20 6d 6f  s that are in mo
c870: 73 74 20 64 6f 63 75 6d 65 6e 74 73 20 6f 66 20  st documents of 
c880: 74 68 65 20 63 6f 6c 6c 65 63 74 69 6f 6e 0a 20  the collection. 
c890: 20 61 6e 64 20 69 6e 73 74 65 61 64 20 73 69 6d   and instead sim
c8a0: 70 6c 79 20 73 63 61 6e 73 20 66 6f 72 20 74 68  ply scans for th
c8b0: 6f 73 65 20 74 6f 6b 65 6e 73 20 69 6e 20 74 68  ose tokens in th
c8c0: 65 20 64 6f 63 75 6d 65 6e 74 20 73 6f 75 72 63  e document sourc
c8d0: 65 2e 20 20 5b 46 54 53 34 5d 0a 20 20 73 68 6f  e.  [FTS4].  sho
c8e0: 75 6c 64 20 67 65 74 20 65 78 61 63 74 6c 79 20  uld get exactly 
c8f0: 74 68 65 20 73 61 6d 65 20 61 6e 73 77 65 72 20  the same answer 
c900: 62 6f 74 68 20 77 69 74 68 20 61 6e 64 20 77 69  both with and wi
c910: 74 68 6f 75 74 20 74 68 69 73 20 6f 70 74 69 6d  thout this optim
c920: 69 7a 61 74 69 6f 6e 2e 0a 7d 0a 0a 43 4f 4d 50  ization..}..COMP
c930: 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49  ILE_OPTION {SQLI
c940: 54 45 5f 44 49 53 41 42 4c 45 5f 49 4e 54 52 49  TE_DISABLE_INTRI
c950: 4e 53 49 43 7d 20 7b 0a 20 20 54 68 69 73 20 6f  NSIC} {.  This o
c960: 70 74 69 6f 6e 20 64 69 73 61 62 6c 65 73 20 74  ption disables t
c970: 68 65 20 75 73 65 20 6f 66 20 63 6f 6d 70 69 6c  he use of compil
c980: 65 72 2d 73 70 65 63 69 66 69 63 20 62 75 69 6c  er-specific buil
c990: 74 2d 69 6e 20 66 75 6e 63 74 69 6f 6e 73 0a 20  t-in functions. 
c9a0: 20 73 75 63 68 20 61 73 20 5f 5f 62 75 69 6c 74   such as __built
c9b0: 69 6e 5f 62 73 77 61 70 33 32 28 29 20 61 6e 64  in_bswap32() and
c9c0: 20 5f 5f 62 75 69 6c 74 69 6e 5f 61 64 64 5f 6f   __builtin_add_o
c9d0: 76 65 72 66 6c 6f 77 28 29 20 69 6e 20 47 43 43  verflow() in GCC
c9e0: 20 61 6e 64 20 43 6c 61 6e 67 2c 20 0a 20 20 6f   and Clang, .  o
c9f0: 72 20 5f 62 79 74 65 73 77 61 70 5f 75 6c 6f 6e  r _byteswap_ulon
ca00: 67 28 29 20 61 6e 64 20 5f 52 65 61 64 57 72 69  g() and _ReadWri
ca10: 74 65 42 61 72 72 69 65 72 28 29 20 77 69 74 68  teBarrier() with
ca20: 20 4d 53 56 43 2e 20 20 0a 7d 0a 3c 2f 74 63 6c   MSVC.  .}.</tcl
ca30: 3e 0a 0a 3c 74 63 6c 3e 0a 20 20 68 64 5f 66 72  >..<tcl>.  hd_fr
ca40: 61 67 6d 65 6e 74 20 22 6f 6d 69 74 66 65 61 74  agment "omitfeat
ca50: 75 72 65 73 22 0a 20 20 68 64 5f 6b 65 79 77 6f  ures".  hd_keywo
ca60: 72 64 73 20 22 6f 6d 69 74 66 65 61 74 75 72 65  rds "omitfeature
ca70: 73 22 0a 3c 2f 74 63 6c 3e 0a 3c 68 31 3e 20 4f  s".</tcl>.<h1> O
ca80: 70 74 69 6f 6e 73 20 54 6f 20 4f 6d 69 74 20 46  ptions To Omit F
ca90: 65 61 74 75 72 65 73 3c 2f 68 31 3e 0a 0a 3c 70  eatures</h1>..<p
caa0: 3e 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6f  >The following o
cab0: 70 74 69 6f 6e 73 20 63 61 6e 20 62 65 20 75 73  ptions can be us
cac0: 65 64 20 74 6f 20 0a 5b 72 65 6c 66 6f 6f 74 70  ed to .[relfootp
cad0: 72 69 6e 74 20 7c 20 72 65 64 75 63 65 20 74 68  rint | reduce th
cae0: 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 63 6f  e size of the co
caf0: 6d 70 69 6c 65 64 20 6c 69 62 72 61 72 79 5d 0a  mpiled library].
cb00: 62 79 20 6f 6d 69 74 74 69 6e 67 20 75 6e 75 73  by omitting unus
cb10: 65 64 20 66 65 61 74 75 72 65 73 2e 20 54 68 69  ed features. Thi
cb20: 73 20 69 73 20 70 72 6f 62 61 62 6c 79 20 6f 6e  s is probably on
cb30: 6c 79 20 75 73 65 66 75 6c 0a 69 6e 20 65 6d 62  ly useful.in emb
cb40: 65 64 64 65 64 20 73 79 73 74 65 6d 73 20 77 68  edded systems wh
cb50: 65 72 65 20 73 70 61 63 65 20 69 73 20 65 73 70  ere space is esp
cb60: 65 63 69 61 6c 6c 79 20 74 69 67 68 74 2c 20 61  ecially tight, a
cb70: 73 20 65 76 65 6e 20 77 69 74 68 20 61 6c 6c 0a  s even with all.
cb80: 66 65 61 74 75 72 65 73 20 69 6e 63 6c 75 64 65  features include
cb90: 64 20 74 68 65 20 53 51 4c 69 74 65 20 6c 69 62  d the SQLite lib
cba0: 72 61 72 79 20 69 73 20 72 65 6c 61 74 69 76 65  rary is relative
cbb0: 6c 79 20 73 6d 61 6c 6c 2e 20 44 6f 6e 27 74 20  ly small. Don't 
cbc0: 66 6f 72 67 65 74 0a 74 6f 20 74 65 6c 6c 20 79  forget.to tell y
cbd0: 6f 75 72 20 63 6f 6d 70 69 6c 65 72 20 74 6f 20  our compiler to 
cbe0: 6f 70 74 69 6d 69 7a 65 20 66 6f 72 20 62 69 6e  optimize for bin
cbf0: 61 72 79 20 73 69 7a 65 21 20 28 74 68 65 20 2d  ary size! (the -
cc00: 4f 73 20 6f 70 74 69 6f 6e 20 69 66 0a 75 73 69  Os option if.usi
cc10: 6e 67 20 47 43 43 29 2e 20 20 54 65 6c 6c 69 6e  ng GCC).  Tellin
cc20: 67 20 79 6f 75 72 20 63 6f 6d 70 69 6c 65 72 20  g your compiler 
cc30: 74 6f 20 6f 70 74 69 6d 69 7a 65 20 66 6f 72 20  to optimize for 
cc40: 73 69 7a 65 20 75 73 75 61 6c 6c 79 20 68 61 73  size usually has
cc50: 0a 61 20 6d 75 63 68 20 6c 61 72 67 65 72 20 69  .a much larger i
cc60: 6d 70 61 63 74 20 6f 6e 20 6c 69 62 72 61 72 79  mpact on library
cc70: 20 66 6f 6f 74 70 72 69 6e 74 20 74 68 61 6e 20   footprint than 
cc80: 65 6d 70 6c 6f 79 69 6e 67 20 61 6e 79 20 6f 66  employing any of
cc90: 20 74 68 65 73 65 0a 63 6f 6d 70 69 6c 65 2d 74   these.compile-t
cca0: 69 6d 65 20 6f 70 74 69 6f 6e 73 2e 20 20 59 6f  ime options.  Yo
ccb0: 75 20 73 68 6f 75 6c 64 20 61 6c 73 6f 20 76 65  u should also ve
ccc0: 72 69 66 79 20 74 68 61 74 20 0a 3c 61 20 68 72  rify that .<a hr
ccd0: 65 66 3d 22 23 64 65 62 75 67 6f 70 74 69 6f 6e  ef="#debugoption
cce0: 73 22 3e 64 65 62 75 67 67 69 6e 67 20 6f 70 74  s">debugging opt
ccf0: 69 6f 6e 73 3c 2f 61 3e 20 61 72 65 20 64 69 73  ions</a> are dis
cd00: 61 62 6c 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54  abled.</p>..<p>T
cd10: 68 65 20 6d 61 63 72 6f 73 20 69 6e 20 74 68 69  he macros in thi
cd20: 73 20 73 65 63 74 69 6f 6e 20 64 6f 20 6e 6f 74  s section do not
cd30: 20 72 65 71 75 69 72 65 20 76 61 6c 75 65 73 2e   require values.
cd40: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 0a   The following .
cd50: 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 73 77 69 74  compilation swit
cd60: 63 68 65 73 20 61 6c 6c 20 68 61 76 65 20 74 68  ches all have th
cd70: 65 20 73 61 6d 65 20 65 66 66 65 63 74 3a 3c 62  e same effect:<b
cd80: 72 3e 0a 2d 44 53 51 4c 49 54 45 5f 4f 4d 49 54  r>.-DSQLITE_OMIT
cd90: 5f 41 4c 54 45 52 54 41 42 4c 45 3c 62 72 3e 0a  _ALTERTABLE<br>.
cda0: 2d 44 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c  -DSQLITE_OMIT_AL
cdb0: 54 45 52 54 41 42 4c 45 3d 31 3c 62 72 3e 0a 2d  TERTABLE=1<br>.-
cdc0: 44 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54  DSQLITE_OMIT_ALT
cdd0: 45 52 54 41 42 4c 45 3d 30 0a 3c 2f 70 3e 0a 0a  ERTABLE=0.</p>..
cde0: 3c 70 3e 49 66 20 61 6e 79 20 6f 66 20 74 68 65  <p>If any of the
cdf0: 73 65 20 6f 70 74 69 6f 6e 73 20 61 72 65 20 64  se options are d
ce00: 65 66 69 6e 65 64 2c 20 74 68 65 6e 20 74 68 65  efined, then the
ce10: 20 73 61 6d 65 20 73 65 74 20 6f 66 20 53 51 4c   same set of SQL
ce20: 49 54 45 5f 4f 4d 49 54 5f 2a 0a 6f 70 74 69 6f  ITE_OMIT_*.optio
ce30: 6e 73 20 6d 75 73 74 20 61 6c 73 6f 20 62 65 20  ns must also be 
ce40: 64 65 66 69 6e 65 64 20 77 68 65 6e 20 75 73 69  defined when usi
ce50: 6e 67 20 74 68 65 20 27 6c 65 6d 6f 6e 27 20 74  ng the 'lemon' t
ce60: 6f 6f 6c 20 74 6f 20 67 65 6e 65 72 61 74 65 20  ool to generate 
ce70: 74 68 65 0a 70 61 72 73 65 2e 63 20 66 69 6c 65  the.parse.c file
ce80: 20 61 6e 64 20 77 68 65 6e 20 63 6f 6d 70 69 6c   and when compil
ce90: 69 6e 67 20 74 68 65 20 27 6d 6b 6b 65 79 77 6f  ing the 'mkkeywo
cea0: 72 64 68 61 73 68 27 20 74 6f 6f 6c 20 77 68 69  rdhash' tool whi
ceb0: 63 68 20 67 65 6e 65 72 61 74 65 73 20 0a 74 68  ch generates .th
cec0: 65 20 6b 65 79 77 6f 72 64 68 61 73 68 2e 68 20  e keywordhash.h 
ced0: 66 69 6c 65 2e 0a 42 65 63 61 75 73 65 20 6f 66  file..Because of
cee0: 20 74 68 69 73 2c 20 74 68 65 73 65 20 6f 70 74   this, these opt
cef0: 69 6f 6e 73 20 6d 61 79 20 6f 6e 6c 79 20 62 65  ions may only be
cf00: 20 75 73 65 64 20 77 68 65 6e 20 74 68 65 20 6c   used when the l
cf10: 69 62 72 61 72 79 20 69 73 20 62 75 69 6c 74 0a  ibrary is built.
cf20: 66 72 6f 6d 20 63 61 6e 6f 6e 69 63 61 6c 20 73  from canonical s
cf30: 6f 75 72 63 65 2c 20 6e 6f 74 20 66 72 6f 6d 20  ource, not from 
cf40: 74 68 65 20 5b 61 6d 61 6c 67 61 6d 61 74 69 6f  the [amalgamatio
cf50: 6e 5d 2e 0a 53 6f 6d 65 20 53 51 4c 49 54 45 5f  n]..Some SQLITE_
cf60: 4f 4d 49 54 5f 2a 20 6f 70 74 69 6f 6e 73 20 6d  OMIT_* options m
cf70: 69 67 68 74 20 77 6f 72 6b 2c 20 6f 72 20 61 70  ight work, or ap
cf80: 70 65 61 72 20 74 6f 20 77 6f 72 6b 2c 20 77 68  pear to work, wh
cf90: 65 6e 20 75 73 65 64 20 77 69 74 68 0a 74 68 65  en used with.the
cfa0: 20 5b 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 5d 2e   [amalgamation].
cfb0: 20 20 42 75 74 20 74 68 69 73 20 69 73 20 6e 6f    But this is no
cfc0: 74 20 67 75 61 72 61 6e 74 65 65 64 2e 20 20 49  t guaranteed.  I
cfd0: 6e 20 67 65 6e 65 72 61 6c 2c 20 61 6c 77 61 79  n general, alway
cfe0: 73 20 63 6f 6d 70 69 6c 65 0a 66 72 6f 6d 20 63  s compile.from c
cff0: 61 6e 6f 6e 69 63 61 6c 20 73 6f 75 72 63 65 73  anonical sources
d000: 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 74 61 6b   in order to tak
d010: 65 20 61 64 76 61 6e 74 61 67 65 20 6f 66 20 53  e advantage of S
d020: 51 4c 49 54 45 5f 4f 4d 49 54 5f 2a 20 6f 70 74  QLITE_OMIT_* opt
d030: 69 6f 6e 73 2e 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f  ions..</p>..<blo
d040: 63 6b 71 75 6f 74 65 3e 0a 3c 69 3e 3c 62 3e 49  ckquote>.<i><b>I
d050: 6d 70 6f 72 74 61 6e 74 20 4e 6f 74 65 3a 3c 2f  mportant Note:</
d060: 62 3e 20 54 68 65 20 53 51 4c 49 54 45 5f 4f 4d  b> The SQLITE_OM
d070: 49 54 5f 2a 20 6f 70 74 69 6f 6e 73 20 6d 61 79  IT_* options may
d080: 20 6e 6f 74 20 77 6f 72 6b 20 77 69 74 68 20 74   not work with t
d090: 68 65 0a 5b 61 6d 61 6c 67 61 6d 61 74 69 6f 6e  he.[amalgamation
d0a0: 5d 2e 20 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ].  SQLITE_OMIT_
d0b0: 2a 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 0a 6f  * compile-time.o
d0c0: 70 74 69 6f 6e 73 20 75 73 75 61 6c 6c 79 20 77  ptions usually w
d0d0: 6f 72 6b 20 63 6f 72 72 65 63 74 6c 79 20 6f 6e  ork correctly on
d0e0: 6c 79 20 77 68 65 6e 20 53 51 4c 69 74 65 20 69  ly when SQLite i
d0f0: 73 20 62 75 69 6c 74 20 66 72 6f 6d 20 63 61 6e  s built from can
d100: 6f 6e 69 63 61 6c 20 0a 73 6f 75 72 63 65 20 66  onical .source f
d110: 69 6c 65 73 2e 0a 3c 2f 69 3e 0a 3c 2f 62 6c 6f  iles..</i>.</blo
d120: 63 6b 71 75 6f 74 65 3e 0a 0a 0a 3c 70 3e 53 70  ckquote>...<p>Sp
d130: 65 63 69 61 6c 20 76 65 72 73 69 6f 6e 73 20 6f  ecial versions o
d140: 66 20 74 68 65 20 53 51 4c 69 74 65 20 61 6d 61  f the SQLite ama
d150: 6c 67 61 6d 61 74 69 6f 6e 20 74 68 61 74 20 64  lgamation that d
d160: 6f 20 77 6f 72 6b 20 77 69 74 68 20 61 0a 70 72  o work with a.pr
d170: 65 64 65 74 65 72 6d 69 6e 65 64 20 73 65 74 20  edetermined set 
d180: 6f 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 2a  of SQLITE_OMIT_*
d190: 20 6f 70 74 69 6f 6e 73 20 63 61 6e 20 62 65 20   options can be 
d1a0: 67 65 6e 65 72 61 74 65 64 2e 20 20 54 6f 20 64  generated.  To d
d1b0: 6f 20 73 6f 2c 0a 6d 61 6b 65 20 61 20 63 6f 70  o so,.make a cop
d1c0: 79 20 6f 66 20 74 68 65 20 4d 61 6b 65 66 69 6c  y of the Makefil
d1d0: 65 2e 6c 69 6e 75 78 2d 67 63 63 20 6d 61 6b 65  e.linux-gcc make
d1e0: 66 69 6c 65 20 74 65 6d 70 6c 61 74 65 20 69 6e  file template in
d1f0: 20 74 68 65 20 63 61 6e 6f 6e 69 63 61 6c 0a 73   the canonical.s
d200: 6f 75 72 63 65 20 63 6f 64 65 20 64 69 73 74 72  ource code distr
d210: 69 62 75 74 69 6f 6e 2e 20 20 43 68 61 6e 67 65  ibution.  Change
d220: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 79 6f 75   the name of you
d230: 72 20 63 6f 70 79 20 74 6f 20 73 69 6d 70 6c 79  r copy to simply
d240: 20 22 4d 61 6b 65 66 69 6c 65 22 2e 0a 54 68 65   "Makefile"..The
d250: 6e 20 65 64 69 74 20 22 4d 61 6b 65 66 69 6c 65  n edit "Makefile
d260: 22 20 74 6f 20 73 65 74 20 75 70 20 61 70 70 72  " to set up appr
d270: 6f 70 72 69 61 74 65 20 63 6f 6d 70 69 6c 65 2d  opriate compile-
d280: 74 69 6d 65 20 6f 70 74 69 6f 6e 73 2e 20 20 54  time options.  T
d290: 68 65 6e 0a 74 79 70 65 3a 0a 3c 63 6f 64 65 62  hen.type:.<codeb
d2a0: 6c 6f 63 6b 3e 0a 6d 61 6b 65 20 63 6c 65 61 6e  lock>.make clean
d2b0: 3b 20 6d 61 6b 65 20 73 71 6c 69 74 65 33 2e 63  ; make sqlite3.c
d2c0: 0a 3c 2f 63 6f 64 65 62 6c 6f 63 6b 3e 0a 3c 70  .</codeblock>.<p
d2d0: 3e 54 68 65 20 72 65 73 75 6c 74 69 6e 67 20 22  >The resulting "
d2e0: 73 71 6c 69 74 65 33 2e 63 22 20 61 6d 61 6c 67  sqlite3.c" amalg
d2f0: 61 6d 61 74 69 6f 6e 20 63 6f 64 65 20 66 69 6c  amation code fil
d300: 65 20 28 61 6e 64 20 69 74 73 20 61 73 73 6f 63  e (and its assoc
d310: 69 61 74 65 64 0a 68 65 61 64 65 72 20 66 69 6c  iated.header fil
d320: 65 20 22 73 71 6c 69 74 65 33 2e 68 22 29 20 63  e "sqlite3.h") c
d330: 61 6e 20 74 68 65 6e 20 62 65 20 6d 6f 76 65 64  an then be moved
d340: 20 74 6f 20 61 20 6e 6f 6e 2d 75 6e 69 78 20 70   to a non-unix p
d350: 6c 61 74 66 6f 72 6d 0a 66 6f 72 20 66 69 6e 61  latform.for fina
d360: 6c 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 75 73  l compilation us
d370: 69 6e 67 20 61 20 6e 61 74 69 76 65 20 63 6f 6d  ing a native com
d380: 70 69 6c 65 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54  piler.</p>..<p>T
d390: 68 65 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 2a  he SQLITE_OMIT_*
d3a0: 20 6f 70 74 69 6f 6e 73 20 61 72 65 20 75 6e 73   options are uns
d3b0: 75 70 70 6f 72 74 65 64 2e 20 20 42 79 20 74 68  upported.  By th
d3c0: 69 73 20 77 65 20 6d 65 61 6e 20 74 68 61 74 0a  is we mean that.
d3d0: 61 6e 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 2a  an SQLITE_OMIT_*
d3e0: 20 6f 70 74 69 6f 6e 20 74 68 61 74 20 6f 6d 69   option that omi
d3f0: 74 73 20 63 6f 64 65 20 66 72 6f 6d 20 74 68 65  ts code from the
d400: 20 62 75 69 6c 64 20 69 6e 20 74 68 65 20 63 75   build in the cu
d410: 72 72 65 6e 74 0a 72 65 6c 65 61 73 65 20 6d 69  rrent.release mi
d420: 67 68 74 20 62 65 63 6f 6d 65 20 61 20 6e 6f 2d  ght become a no-
d430: 6f 70 20 69 6e 20 74 68 65 20 6e 65 78 74 20 72  op in the next r
d440: 65 6c 65 61 73 65 2e 20 20 4f 72 20 74 68 65 20  elease.  Or the 
d450: 6f 74 68 65 72 20 77 61 79 20 61 72 6f 75 6e 64  other way around
d460: 3a 0a 61 6e 20 53 51 4c 49 54 45 5f 4f 4d 49 54  :.an SQLITE_OMIT
d470: 5f 2a 20 74 68 61 74 20 69 73 20 61 20 6e 6f 2d  _* that is a no-
d480: 6f 70 20 69 6e 20 74 68 65 20 63 75 72 72 65 6e  op in the curren
d490: 74 20 72 65 6c 65 61 73 65 20 6d 69 67 68 74 20  t release might 
d4a0: 63 61 75 73 65 20 63 6f 64 65 0a 74 6f 20 62 65  cause code.to be
d4b0: 20 65 78 63 6c 75 64 65 64 20 69 6e 20 74 68 65   excluded in the
d4c0: 20 6e 65 78 74 20 72 65 6c 65 61 73 65 2e 20 20   next release.  
d4d0: 41 6c 73 6f 2c 20 6e 6f 74 20 61 6c 6c 20 53 51  Also, not all SQ
d4e0: 4c 49 54 45 5f 4f 4d 49 54 5f 2a 20 6f 70 74 69  LITE_OMIT_* opti
d4f0: 6f 6e 73 0a 61 72 65 20 74 65 73 74 65 64 2e 20  ons.are tested. 
d500: 20 53 6f 6d 65 20 53 51 4c 49 54 45 5f 4f 4d 49   Some SQLITE_OMI
d510: 54 5f 2a 20 6f 70 74 69 6f 6e 73 20 6d 69 67 68  T_* options migh
d520: 74 20 63 61 75 73 65 20 53 51 4c 69 74 65 20 74  t cause SQLite t
d530: 6f 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 0a 61 6e  o malfunction.an
d540: 64 2f 6f 72 20 70 72 6f 76 69 64 65 20 69 6e 63  d/or provide inc
d550: 6f 72 72 65 63 74 20 61 6e 73 77 65 72 73 2e 0a  orrect answers..
d560: 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 69  .<blockquote>.<i
d570: 3e 3c 62 3e 49 6d 70 6f 72 74 61 6e 74 20 4e 6f  ><b>Important No
d580: 74 65 3a 3c 2f 62 3e 0a 54 68 65 20 53 51 4c 49  te:</b>.The SQLI
d590: 54 45 5f 4f 4d 49 54 5f 2a 20 63 6f 6d 70 69 6c  TE_OMIT_* compil
d5a0: 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20 61  e-time options a
d5b0: 72 65 20 6d 6f 73 74 6c 79 20 75 6e 73 75 70 70  re mostly unsupp
d5c0: 6f 72 74 65 64 2e 0a 3c 2f 69 3e 3c 2f 62 6c 6f  orted..</i></blo
d5d0: 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65  ckquote>..<p>The
d5e0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20 74   following are t
d5f0: 68 65 20 61 76 61 69 6c 61 62 6c 65 20 4f 4d 49  he available OMI
d600: 54 20 6f 70 74 69 6f 6e 73 3a 0a 0a 3c 74 63 6c  T options:..<tcl
d610: 3e 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e  >.COMPILE_OPTION
d620: 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c   {SQLITE_OMIT_AL
d630: 54 45 52 54 41 42 4c 45 7d 20 7b 0a 20 20 57 68  TERTABLE} {.  Wh
d640: 65 6e 20 74 68 69 73 20 6f 70 74 69 6f 6e 20 69  en this option i
d650: 73 20 64 65 66 69 6e 65 64 2c 20 74 68 65 20 0a  s defined, the .
d660: 20 20 5b 41 4c 54 45 52 20 54 41 42 4c 45 5d 20    [ALTER TABLE] 
d670: 63 6f 6d 6d 61 6e 64 20 69 73 20 6e 6f 74 20 69  command is not i
d680: 6e 63 6c 75 64 65 64 20 69 6e 20 74 68 65 20 0a  ncluded in the .
d690: 20 20 6c 69 62 72 61 72 79 2e 20 45 78 65 63 75    library. Execu
d6a0: 74 69 6e 67 20 61 6e 20 5b 41 4c 54 45 52 20 54  ting an [ALTER T
d6b0: 41 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74 20  ABLE] statement 
d6c0: 63 61 75 73 65 73 20 61 20 70 61 72 73 65 20 65  causes a parse e
d6d0: 72 72 6f 72 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45  rror..}..COMPILE
d6e0: 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f  _OPTION {SQLITE_
d6f0: 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45 7d 20 7b 0a  OMIT_ANALYZE} {.
d700: 20 20 57 68 65 6e 20 74 68 69 73 20 6f 70 74 69    When this opti
d710: 6f 6e 20 69 73 20 64 65 66 69 6e 65 64 2c 20 74  on is defined, t
d720: 68 65 20 5b 41 4e 41 4c 59 5a 45 5d 20 63 6f 6d  he [ANALYZE] com
d730: 6d 61 6e 64 20 69 73 20 6f 6d 69 74 74 65 64 20  mand is omitted 
d740: 66 72 6f 6d 0a 20 20 74 68 65 20 62 75 69 6c 64  from.  the build
d750: 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54  ..}..COMPILE_OPT
d760: 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54  ION {SQLITE_OMIT
d770: 5f 41 54 54 41 43 48 7d 20 7b 0a 20 20 57 68 65  _ATTACH} {.  Whe
d780: 6e 20 74 68 69 73 20 6f 70 74 69 6f 6e 20 69 73  n this option is
d790: 20 64 65 66 69 6e 65 64 2c 20 74 68 65 20 5b 41   defined, the [A
d7a0: 54 54 41 43 48 5d 20 61 6e 64 20 5b 44 45 54 41  TTACH] and [DETA
d7b0: 43 48 5d 20 63 6f 6d 6d 61 6e 64 73 20 61 72 65  CH] commands are
d7c0: 0a 20 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20  .  omitted from 
d7d0: 74 68 65 20 62 75 69 6c 64 2e 0a 7d 0a 0a 43 4f  the build..}..CO
d7e0: 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51  MPILE_OPTION {SQ
d7f0: 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52  LITE_OMIT_AUTHOR
d800: 49 5a 41 54 49 4f 4e 7d 20 7b 0a 20 20 44 65 66  IZATION} {.  Def
d810: 69 6e 69 6e 67 20 74 68 69 73 20 6f 70 74 69 6f  ining this optio
d820: 6e 20 6f 6d 69 74 73 20 74 68 65 20 61 75 74 68  n omits the auth
d830: 6f 72 69 7a 61 74 69 6f 6e 20 63 61 6c 6c 62 61  orization callba
d840: 63 6b 20 66 65 61 74 75 72 65 20 66 72 6f 6d 20  ck feature from 
d850: 74 68 65 0a 20 20 6c 69 62 72 61 72 79 2e 20 54  the.  library. T
d860: 68 65 20 5b 73 71 6c 69 74 65 33 5f 73 65 74 5f  he [sqlite3_set_
d870: 61 75 74 68 6f 72 69 7a 65 72 28 29 5d 20 41 50  authorizer()] AP
d880: 49 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 6e 6f  I function is no
d890: 74 20 70 72 65 73 65 6e 74 0a 20 20 69 6e 20 74  t present.  in t
d8a0: 68 65 20 6c 69 62 72 61 72 79 2e 0a 7d 0a 0a 43  he library..}..C
d8b0: 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53  OMPILE_OPTION {S
d8c0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49  QLITE_OMIT_AUTOI
d8d0: 4e 43 52 45 4d 45 4e 54 7d 20 7b 0a 20 20 54 68  NCREMENT} {.  Th
d8e0: 69 73 20 6f 70 74 69 6f 6e 20 69 73 20 6f 6d 69  is option is omi
d8f0: 74 73 20 74 68 65 20 5b 41 55 54 4f 49 4e 43 52  ts the [AUTOINCR
d900: 45 4d 45 4e 54 5d 20 66 65 61 74 75 72 65 2e 20  EMENT] feature. 
d910: 0a 20 20 57 68 65 6e 20 74 68 69 73 20 69 73 20  .  When this is 
d920: 6d 61 63 72 6f 20 69 73 20 64 65 66 69 6e 65 64  macro is defined
d930: 2c 20 63 6f 6c 75 6d 6e 73 20 64 65 63 6c 61 72  , columns declar
d940: 65 64 20 61 73 20 0a 20 20 22 5b 49 4e 54 45 47  ed as .  "[INTEG
d950: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 5d 20  ER PRIMARY KEY] 
d960: 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 22 0a 20  AUTOINCREMENT". 
d970: 20 62 65 68 61 76 65 20 69 6e 20 74 68 65 20 73   behave in the s
d980: 61 6d 65 20 77 61 79 20 61 73 20 63 6f 6c 75 6d  ame way as colum
d990: 6e 73 20 64 65 63 6c 61 72 65 64 20 61 73 20 22  ns declared as "
d9a0: 5b 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59  [INTEGER PRIMARY
d9b0: 20 4b 45 59 5d 22 20 77 68 65 6e 20 61 20 0a 20   KEY]" when a . 
d9c0: 20 4e 55 4c 4c 20 69 73 20 69 6e 73 65 72 74 65   NULL is inserte
d9d0: 64 2e 20 54 68 65 20 73 71 6c 69 74 65 5f 73 65  d. The sqlite_se
d9e0: 71 75 65 6e 63 65 20 73 79 73 74 65 6d 20 74 61  quence system ta
d9f0: 62 6c 65 20 69 73 20 6e 65 69 74 68 65 72 20 63  ble is neither c
da00: 72 65 61 74 65 64 2c 20 6e 6f 72 0a 20 20 72 65  reated, nor.  re
da10: 73 70 65 63 74 65 64 20 69 66 20 69 74 20 61 6c  spected if it al
da20: 72 65 61 64 79 20 65 78 69 73 74 73 2e 0a 7d 0a  ready exists..}.
da30: 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20  .COMPILE_OPTION 
da40: 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54  {SQLITE_OMIT_AUT
da50: 4f 49 4e 49 54 7d 20 7b 0a 20 20 46 6f 72 20 62  OINIT} {.  For b
da60: 61 63 6b 77 61 72 64 73 20 63 6f 6d 70 61 74 69  ackwards compati
da70: 62 69 6c 69 74 79 20 77 69 74 68 20 6f 6c 64 65  bility with olde
da80: 72 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51  r versions of SQ
da90: 4c 69 74 65 20 74 68 61 74 20 6c 61 63 6b 0a 20  Lite that lack. 
daa0: 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 69 6e   the [sqlite3_in
dab0: 69 74 69 61 6c 69 7a 65 28 29 5d 20 69 6e 74 65  itialize()] inte
dac0: 72 66 61 63 65 2c 20 74 68 65 20 5b 73 71 6c 69  rface, the [sqli
dad0: 74 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65 28 29  te3_initialize()
dae0: 5d 20 69 6e 74 65 72 66 61 63 65 0a 20 20 69 73  ] interface.  is
daf0: 20 63 61 6c 6c 65 64 20 61 75 74 6f 6d 61 74 69   called automati
db00: 63 61 6c 6c 79 20 75 70 6f 6e 20 65 6e 74 72 79  cally upon entry
db10: 20 74 6f 20 63 65 72 74 61 69 6e 20 6b 65 79 20   to certain key 
db20: 69 6e 74 65 72 66 61 63 65 73 20 73 75 63 68 20  interfaces such 
db30: 61 73 0a 20 20 5b 73 71 6c 69 74 65 33 5f 6f 70  as.  [sqlite3_op
db40: 65 6e 28 29 5d 2c 20 5b 73 71 6c 69 74 65 33 5f  en()], [sqlite3_
db50: 76 66 73 5f 72 65 67 69 73 74 65 72 28 29 5d 2c  vfs_register()],
db60: 20 61 6e 64 20 5b 73 71 6c 69 74 65 33 5f 6d 70   and [sqlite3_mp
db70: 72 69 6e 74 66 28 29 5d 2e 0a 20 20 54 68 65 20  rintf()]..  The 
db80: 6f 76 65 72 68 65 61 64 20 6f 66 20 69 6e 76 6f  overhead of invo
db90: 6b 69 6e 67 20 5b 73 71 6c 69 74 65 33 5f 69 6e  king [sqlite3_in
dba0: 69 74 69 61 6c 69 7a 65 28 29 5d 20 61 75 74 6f  itialize()] auto
dbb0: 6d 61 74 69 63 61 6c 6c 79 20 69 6e 20 74 68 69  matically in thi
dbc0: 73 0a 20 20 77 61 79 20 6d 61 79 20 62 65 20 6f  s.  way may be o
dbd0: 6d 69 74 74 65 64 20 62 79 20 62 75 69 6c 64 69  mitted by buildi
dbe0: 6e 67 20 53 51 4c 69 74 65 20 77 69 74 68 20 74  ng SQLite with t
dbf0: 68 65 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  he SQLITE_OMIT_A
dc00: 55 54 4f 49 4e 49 54 0a 20 20 43 2d 70 72 65 70  UTOINIT.  C-prep
dc10: 72 6f 63 65 73 73 6f 72 20 6d 61 63 72 6f 2e 20  rocessor macro. 
dc20: 20 57 68 65 6e 20 62 75 69 6c 74 20 75 73 69 6e   When built usin
dc30: 67 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  g SQLITE_OMIT_AU
dc40: 54 4f 49 4e 49 54 2c 20 53 51 4c 69 74 65 0a 20  TOINIT, SQLite. 
dc50: 20 77 69 6c 6c 20 6e 6f 74 20 61 75 74 6f 6d 61   will not automa
dc60: 74 69 63 61 6c 6c 79 20 69 6e 69 74 69 61 6c 69  tically initiali
dc70: 7a 65 20 69 74 73 65 6c 66 20 61 6e 64 20 74 68  ze itself and th
dc80: 65 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 69 73  e application is
dc90: 20 72 65 71 75 69 72 65 64 0a 20 20 74 6f 20 69   required.  to i
dca0: 6e 76 6f 6b 65 20 5b 73 71 6c 69 74 65 33 5f 69  nvoke [sqlite3_i
dcb0: 6e 69 74 69 61 6c 69 7a 65 28 29 5d 20 64 69 72  nitialize()] dir
dcc0: 65 63 74 6c 79 20 70 72 69 6f 72 20 74 6f 20 62  ectly prior to b
dcd0: 65 67 69 6e 6e 69 6e 67 20 75 73 65 20 6f 66 20  eginning use of 
dce0: 74 68 65 0a 20 20 53 51 4c 69 74 65 20 6c 69 62  the.  SQLite lib
dcf0: 72 61 72 79 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45  rary..}..COMPILE
dd00: 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f  _OPTION {SQLITE_
dd10: 4f 4d 49 54 5f 41 55 54 4f 4d 41 54 49 43 5f 49  OMIT_AUTOMATIC_I
dd20: 4e 44 45 58 7d 20 7b 0a 20 20 54 68 69 73 20 6f  NDEX} {.  This o
dd30: 70 74 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f  ption is used to
dd40: 20 6f 6d 69 74 20 74 68 65 20 0a 20 20 5b 61 75   omit the .  [au
dd50: 74 6f 6d 61 74 69 63 20 69 6e 64 65 78 69 6e 67  tomatic indexing
dd60: 5d 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 2e  ] functionality.
dd70: 0a 20 20 53 65 65 20 61 6c 73 6f 3a 20 5b 53 51  .  See also: [SQ
dd80: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 41 55 54  LITE_DEFAULT_AUT
dd90: 4f 4d 41 54 49 43 5f 49 4e 44 45 58 5d 2e 0a 7d  OMATIC_INDEX]..}
dda0: 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e  ..COMPILE_OPTION
ddb0: 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55   {SQLITE_OMIT_AU
ddc0: 54 4f 52 45 53 45 54 7d 20 7b 0a 20 20 42 79 20  TORESET} {.  By 
ddd0: 64 65 66 61 75 6c 74 2c 20 74 68 65 20 5b 73 71  default, the [sq
dde0: 6c 69 74 65 33 5f 73 74 65 70 28 29 5d 20 69 6e  lite3_step()] in
ddf0: 74 65 72 66 61 63 65 20 77 69 6c 6c 20 61 75 74  terface will aut
de00: 6f 6d 61 74 69 63 61 6c 6c 79 20 69 6e 76 6f 6b  omatically invok
de10: 65 0a 20 20 5b 73 71 6c 69 74 65 33 5f 72 65 73  e.  [sqlite3_res
de20: 65 74 28 29 5d 20 74 6f 20 72 65 73 65 74 20 74  et()] to reset t
de30: 68 65 20 5b 70 72 65 70 61 72 65 64 20 73 74 61  he [prepared sta
de40: 74 65 6d 65 6e 74 5d 20 69 66 20 6e 65 63 65 73  tement] if neces
de50: 73 61 72 79 2e 20 20 54 68 69 73 0a 20 20 63 6f  sary.  This.  co
de60: 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
de70: 6e 20 63 68 61 6e 67 65 73 20 74 68 61 74 20 62  n changes that b
de80: 65 68 61 76 69 6f 72 20 73 6f 20 74 68 61 74 20  ehavior so that 
de90: 5b 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 5d  [sqlite3_step()]
dea0: 20 77 69 6c 6c 0a 20 20 72 65 74 75 72 6e 20 5b   will.  return [
deb0: 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 5d 20 69  SQLITE_MISUSE] i
dec0: 66 20 69 74 20 63 61 6c 6c 65 64 20 61 67 61 69  f it called agai
ded0: 6e 20 61 66 74 65 72 20 72 65 74 75 72 6e 69 6e  n after returnin
dee0: 67 20 61 6e 79 74 68 69 6e 67 20 6f 74 68 65 72  g anything other
def0: 0a 20 20 74 68 61 6e 20 5b 53 51 4c 49 54 45 5f  .  than [SQLITE_
df00: 52 4f 57 5d 2c 20 5b 53 51 4c 49 54 45 5f 42 55  ROW], [SQLITE_BU
df10: 53 59 5d 2c 20 6f 72 20 5b 53 51 4c 49 54 45 5f  SY], or [SQLITE_
df20: 4c 4f 43 4b 45 44 5d 20 75 6e 6c 65 73 73 20 74  LOCKED] unless t
df30: 68 65 72 65 20 77 61 73 20 61 6e 0a 20 20 69 6e  here was an.  in
df40: 74 65 72 76 65 6e 69 6e 67 20 63 61 6c 6c 20 74  tervening call t
df50: 6f 20 5b 73 71 6c 69 74 65 33 5f 72 65 73 65 74  o [sqlite3_reset
df60: 28 29 5d 2e 0a 0a 20 20 49 6e 20 53 51 4c 69 74  ()]...  In SQLit
df70: 65 20 5b 76 65 72 73 69 6f 6e 20 33 2e 36 2e 32  e [version 3.6.2
df80: 33 2e 31 5d 20 28 5b 64 61 74 65 6f 66 3a 33 2e  3.1] ([dateof:3.
df90: 36 2e 32 33 2e 31 5d 29 0a 20 20 61 6e 64 20 65  6.23.1]).  and e
dfa0: 61 72 6c 69 65 72 2c 20 5b 73 71 6c 69 74 65 33  arlier, [sqlite3
dfb0: 5f 73 74 65 70 28 29 5d 20 75 73 65 64 20 74 6f  _step()] used to
dfc0: 20 61 6c 77 61 79 73 0a 20 20 72 65 74 75 72 6e   always.  return
dfd0: 20 5b 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 5d   [SQLITE_MISUSE]
dfe0: 20 69 66 20 69 74 20 77 61 73 20 69 6e 76 6f 6b   if it was invok
dff0: 65 64 20 61 67 61 69 6e 20 61 66 74 65 72 20 72  ed again after r
e000: 65 74 75 72 6e 69 6e 67 20 61 6e 79 74 68 69 6e  eturning anythin
e010: 67 0a 20 20 6f 74 68 65 72 20 74 68 61 6e 20 5b  g.  other than [
e020: 53 51 4c 49 54 45 5f 52 4f 57 5d 20 77 69 74 68  SQLITE_ROW] with
e030: 6f 75 74 20 61 6e 20 69 6e 74 65 72 76 65 6e 69  out an interveni
e040: 6e 67 20 63 61 6c 6c 20 74 6f 20 5b 73 71 6c 69  ng call to [sqli
e050: 74 65 33 5f 72 65 73 65 74 28 29 5d 2e 0a 20 20  te3_reset()]..  
e060: 54 68 69 73 20 63 61 75 73 65 64 20 70 72 6f 62  This caused prob
e070: 6c 65 6d 73 20 6f 6e 20 73 6f 6d 65 20 70 6f 6f  lems on some poo
e080: 72 6c 79 20 77 72 69 74 74 65 6e 20 73 6d 61 72  rly written smar
e090: 74 70 68 6f 6e 65 20 61 70 70 6c 69 63 61 74 69  tphone applicati
e0a0: 6f 6e 73 20 77 68 69 63 68 0a 20 20 64 69 64 20  ons which.  did 
e0b0: 6e 6f 74 20 63 6f 72 72 65 63 74 6c 79 20 68 61  not correctly ha
e0c0: 6e 64 6c 65 20 74 68 65 20 5b 53 51 4c 49 54 45  ndle the [SQLITE
e0d0: 5f 4c 4f 43 4b 45 44 5d 20 61 6e 64 20 5b 53 51  _LOCKED] and [SQ
e0e0: 4c 49 54 45 5f 42 55 53 59 5d 20 65 72 72 6f 72  LITE_BUSY] error
e0f0: 20 0a 20 20 72 65 74 75 72 6e 73 2e 20 20 52 61   .  returns.  Ra
e100: 74 68 65 72 20 74 68 61 6e 20 66 69 78 20 74 68  ther than fix th
e110: 65 20 6d 61 6e 79 20 64 65 66 65 63 74 69 76 65  e many defective
e120: 20 73 6d 61 72 74 70 68 6f 6e 65 20 61 70 70 6c   smartphone appl
e130: 69 63 61 74 69 6f 6e 73 2c 20 0a 20 20 74 68 65  ications, .  the
e140: 20 62 65 68 61 76 69 6f 72 20 6f 66 20 53 51 4c   behavior of SQL
e150: 69 74 65 20 77 61 73 20 63 68 61 6e 67 65 64 20  ite was changed 
e160: 69 6e 20 33 2e 36 2e 32 33 2e 32 20 74 6f 20 61  in 3.6.23.2 to a
e170: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 72 65 73  utomatically res
e180: 65 74 0a 20 20 74 68 65 20 70 72 65 70 61 72 65  et.  the prepare
e190: 64 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 42 75  d statement.  Bu
e1a0: 74 20 74 68 61 74 20 63 68 61 6e 67 65 64 20 63  t that changed c
e1b0: 61 75 73 65 64 20 69 73 73 75 65 73 20 69 6e 20  aused issues in 
e1c0: 6f 74 68 65 72 20 0a 20 20 69 6d 70 72 6f 70 65  other .  imprope
e1d0: 72 6c 79 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20  rly implemented 
e1e0: 61 70 70 6c 69 63 61 74 69 6f 6e 73 20 74 68 61  applications tha
e1f0: 74 20 77 65 72 65 20 61 63 74 75 61 6c 6c 79 20  t were actually 
e200: 6c 6f 6f 6b 69 6e 67 0a 20 20 66 6f 72 20 61 6e  looking.  for an
e210: 20 5b 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 5d   [SQLITE_MISUSE]
e220: 20 72 65 74 75 72 6e 20 74 6f 20 74 65 72 6d 69   return to termi
e230: 6e 61 74 65 20 74 68 65 69 72 20 71 75 65 72 79  nate their query
e240: 20 6c 6f 6f 70 73 2e 20 20 28 41 6e 79 74 69 6d   loops.  (Anytim
e250: 65 0a 20 20 61 6e 20 61 70 70 6c 69 63 61 74 69  e.  an applicati
e260: 6f 6e 20 67 65 74 73 20 61 6e 20 53 51 4c 49 54  on gets an SQLIT
e270: 45 5f 4d 49 53 55 53 45 20 65 72 72 6f 72 20 63  E_MISUSE error c
e280: 6f 64 65 20 66 72 6f 6d 20 53 51 4c 69 74 65 2c  ode from SQLite,
e290: 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 65 0a   that means the.
e2a0: 20 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 69 73    application is
e2b0: 20 6d 69 73 75 73 69 6e 67 20 74 68 65 20 53 51   misusing the SQ
e2c0: 4c 69 74 65 20 69 6e 74 65 72 66 61 63 65 20 61  Lite interface a
e2d0: 6e 64 20 69 73 20 74 68 75 73 20 69 6e 63 6f 72  nd is thus incor
e2e0: 72 65 63 74 6c 79 0a 20 20 69 6d 70 6c 65 6d 65  rectly.  impleme
e2f0: 6e 74 65 64 2e 29 20 20 54 68 65 20 53 51 4c 49  nted.)  The SQLI
e300: 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 52 45 53 45  TE_OMIT_AUTORESE
e310: 54 20 69 6e 74 65 72 66 61 63 65 20 77 61 73 20  T interface was 
e320: 61 64 64 65 64 20 74 6f 20 53 51 4c 69 74 65 0a  added to SQLite.
e330: 20 20 5b 76 65 72 73 69 6f 6e 20 33 2e 37 2e 35    [version 3.7.5
e340: 5d 20 28 5b 64 61 74 65 6f 66 3a 33 2e 37 2e 35  ] ([dateof:3.7.5
e350: 5d 29 20 69 6e 20 61 6e 20 65 66 66 6f 72 74 20  ]) in an effort 
e360: 74 6f 20 67 65 74 20 61 6c 6c 20 6f 66 20 74 68  to get all of th
e370: 65 20 28 62 72 6f 6b 65 6e 29 0a 20 20 61 70 70  e (broken).  app
e380: 6c 69 63 61 74 69 6f 6e 73 20 74 6f 20 77 6f 72  lications to wor
e390: 6b 20 61 67 61 69 6e 20 77 69 74 68 6f 75 74 20  k again without 
e3a0: 68 61 76 69 6e 67 20 74 6f 20 61 63 74 75 61 6c  having to actual
e3b0: 6c 79 20 66 69 78 20 74 68 65 20 61 70 70 6c 69  ly fix the appli
e3c0: 63 61 74 69 6f 6e 73 2e 0a 7d 0a 0a 43 4f 4d 50  cations..}..COMP
e3d0: 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49  ILE_OPTION {SQLI
e3e0: 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55  TE_OMIT_AUTOVACU
e3f0: 55 4d 7d 20 7b 0a 20 20 49 66 20 74 68 69 73 20  UM} {.  If this 
e400: 6f 70 74 69 6f 6e 20 69 73 20 64 65 66 69 6e 65  option is define
e410: 64 2c 20 74 68 65 20 6c 69 62 72 61 72 79 20 63  d, the library c
e420: 61 6e 6e 6f 74 20 63 72 65 61 74 65 20 6f 72 20  annot create or 
e430: 77 72 69 74 65 20 74 6f 20 0a 20 20 64 61 74 61  write to .  data
e440: 62 61 73 65 73 20 74 68 61 74 20 73 75 70 70 6f  bases that suppo
e450: 72 74 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d  rt [auto_vacuum]
e460: 2e 0a 20 20 45 78 65 63 75 74 69 6e 67 20 61 20  ..  Executing a 
e470: 5b 50 52 41 47 4d 41 20 61 75 74 6f 5f 76 61 63  [PRAGMA auto_vac
e480: 75 75 6d 5d 20 73 74 61 74 65 6d 65 6e 74 20 69  uum] statement i
e490: 73 20 6e 6f 74 20 61 6e 20 65 72 72 6f 72 0a 20  s not an error. 
e4a0: 20 28 73 69 6e 63 65 20 75 6e 6b 6e 6f 77 6e 20   (since unknown 
e4b0: 50 52 41 47 4d 41 73 20 61 72 65 20 73 69 6c 65  PRAGMAs are sile
e4c0: 6e 74 6c 79 20 69 67 6e 6f 72 65 64 29 2c 20 62  ntly ignored), b
e4d0: 75 74 20 64 6f 65 73 20 6e 6f 74 20 72 65 74 75  ut does not retu
e4e0: 72 6e 20 61 20 76 61 6c 75 65 0a 20 20 6f 72 20  rn a value.  or 
e4f0: 6d 6f 64 69 66 79 20 74 68 65 20 61 75 74 6f 2d  modify the auto-
e500: 76 61 63 75 75 6d 20 66 6c 61 67 20 69 6e 20 74  vacuum flag in t
e510: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
e520: 2e 20 49 66 20 61 20 64 61 74 61 62 61 73 65 20  . If a database 
e530: 74 68 61 74 0a 20 20 73 75 70 70 6f 72 74 73 20  that.  supports 
e540: 61 75 74 6f 2d 76 61 63 75 75 6d 20 69 73 20 6f  auto-vacuum is o
e550: 70 65 6e 65 64 20 62 79 20 61 20 6c 69 62 72 61  pened by a libra
e560: 72 79 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68  ry compiled with
e570: 20 74 68 69 73 20 6f 70 74 69 6f 6e 2c 20 69 74   this option, it
e580: 0a 20 20 69 73 20 61 75 74 6f 6d 61 74 69 63 61  .  is automatica
e590: 6c 6c 79 20 6f 70 65 6e 65 64 20 69 6e 20 72 65  lly opened in re
e5a0: 61 64 2d 6f 6e 6c 79 20 6d 6f 64 65 2e 0a 7d 0a  ad-only mode..}.
e5b0: 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20  .COMPILE_OPTION 
e5c0: 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 45 54  {SQLITE_OMIT_BET
e5d0: 57 45 45 4e 5f 4f 50 54 49 4d 49 5a 41 54 49 4f  WEEN_OPTIMIZATIO
e5e0: 4e 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70 74 69  N} {.  This opti
e5f0: 6f 6e 20 64 69 73 61 62 6c 65 73 20 74 68 65 20  on disables the 
e600: 75 73 65 20 6f 66 20 69 6e 64 69 63 65 73 20 77  use of indices w
e610: 69 74 68 20 57 48 45 52 45 20 63 6c 61 75 73 65  ith WHERE clause
e620: 20 74 65 72 6d 73 0a 20 20 74 68 61 74 20 65 6d   terms.  that em
e630: 70 6c 6f 79 20 74 68 65 20 42 45 54 57 45 45 4e  ploy the BETWEEN
e640: 20 6f 70 65 72 61 74 6f 72 2e 0a 7d 0a 0a 43 4f   operator..}..CO
e650: 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51  MPILE_OPTION {SQ
e660: 4c 49 54 45 5f 4f 4d 49 54 5f 42 4c 4f 42 5f 4c  LITE_OMIT_BLOB_L
e670: 49 54 45 52 41 4c 7d 20 7b 0a 20 20 57 68 65 6e  ITERAL} {.  When
e680: 20 74 68 69 73 20 6f 70 74 69 6f 6e 20 69 73 20   this option is 
e690: 64 65 66 69 6e 65 64 2c 20 69 74 20 69 73 20 6e  defined, it is n
e6a0: 6f 74 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 73  ot possible to s
e6b0: 70 65 63 69 66 79 20 61 20 62 6c 6f 62 20 69 6e  pecify a blob in
e6c0: 0a 20 20 61 6e 20 53 51 4c 20 73 74 61 74 65 6d  .  an SQL statem
e6d0: 65 6e 74 20 75 73 69 6e 67 20 74 68 65 20 58 27  ent using the X'
e6e0: 41 42 43 44 27 20 73 79 6e 74 61 78 2e 0a 7d 0a  ABCD' syntax..}.
e6f0: 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20  .COMPILE_OPTION 
e700: 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 54 52  {SQLITE_OMIT_BTR
e710: 45 45 43 4f 55 4e 54 7d 20 7b 0a 20 20 57 68 65  EECOUNT} {.  Whe
e720: 6e 20 74 68 69 73 20 6f 70 74 69 6f 6e 20 69 73  n this option is
e730: 20 64 65 66 69 6e 65 64 2c 20 61 6e 20 6f 70 74   defined, an opt
e740: 69 6d 69 7a 61 74 69 6f 6e 20 74 68 61 74 20 61  imization that a
e750: 63 63 65 6c 65 72 61 74 65 73 20 63 6f 75 6e 74  ccelerates count
e760: 69 6e 67 0a 20 20 61 6c 6c 20 65 6e 74 72 69 65  ing.  all entrie
e770: 73 20 69 6e 20 61 20 74 61 62 6c 65 20 28 69 6e  s in a table (in
e780: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 61 6e   other words, an
e790: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 74 68   optimization th
e7a0: 61 74 20 68 65 6c 70 73 0a 20 20 22 53 45 4c 45  at helps.  "SELE
e7b0: 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d  CT count(*) FROM
e7c0: 20 74 61 62 6c 65 22 20 72 75 6e 20 66 61 73 74   table" run fast
e7d0: 65 72 29 20 69 73 20 6f 6d 69 74 74 65 64 2e 0a  er) is omitted..
e7e0: 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f  }..COMPILE_OPTIO
e7f0: 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42  N {SQLITE_OMIT_B
e800: 55 49 4c 54 49 4e 5f 54 45 53 54 7d 20 7b 0a 20  UILTIN_TEST} {. 
e810: 20 54 68 69 73 20 63 6f 6d 70 69 6c 65 2d 74 69   This compile-ti
e820: 6d 65 20 6f 70 74 69 6f 6e 20 68 61 73 20 62 65  me option has be
e830: 65 6e 20 72 65 6e 61 6d 65 64 20 74 6f 20 5b 53  en renamed to [S
e840: 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45  QLITE_UNTESTABLE
e850: 5d 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50  ]..}..COMPILE_OP
e860: 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d 49  TION {SQLITE_OMI
e870: 54 5f 43 41 53 54 7d 20 7b 0a 20 20 54 68 69 73  T_CAST} {.  This
e880: 20 6f 70 74 69 6f 6e 20 63 61 75 73 65 73 20 53   option causes S
e890: 51 4c 69 74 65 20 74 6f 20 6f 6d 69 74 20 73 75  QLite to omit su
e8a0: 70 70 6f 72 74 20 66 6f 72 20 74 68 65 20 43 41  pport for the CA
e8b0: 53 54 20 6f 70 65 72 61 74 6f 72 2e 0a 7d 0a 0a  ST operator..}..
e8c0: 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b  COMPILE_OPTION {
e8d0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 48 45 43  SQLITE_OMIT_CHEC
e8e0: 4b 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70 74 69  K} {.  This opti
e8f0: 6f 6e 20 63 61 75 73 65 73 20 53 51 4c 69 74 65  on causes SQLite
e900: 20 74 6f 20 6f 6d 69 74 20 73 75 70 70 6f 72 74   to omit support
e910: 20 66 6f 72 20 43 48 45 43 4b 20 63 6f 6e 73 74   for CHECK const
e920: 72 61 69 6e 74 73 2e 0a 20 20 54 68 65 20 70 61  raints..  The pa
e930: 72 73 65 72 20 77 69 6c 6c 20 73 74 69 6c 6c 20  rser will still 
e940: 61 63 63 65 70 74 20 43 48 45 43 4b 20 63 6f 6e  accept CHECK con
e950: 73 74 72 61 69 6e 74 73 20 69 6e 20 53 51 4c 20  straints in SQL 
e960: 73 74 61 74 65 6d 65 6e 74 73 2c 0a 20 20 74 68  statements,.  th
e970: 65 79 20 77 69 6c 6c 20 6a 75 73 74 20 6e 6f 74  ey will just not
e980: 20 62 65 20 65 6e 66 6f 72 63 65 64 2e 0a 7d 0a   be enforced..}.
e990: 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20  .COMPILE_OPTION 
e9a0: 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d  {SQLITE_OMIT_COM
e9b0: 50 49 4c 45 4f 50 54 49 4f 4e 5f 44 49 41 47 53  PILEOPTION_DIAGS
e9c0: 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70 74 69 6f  } {.  This optio
e9d0: 6e 20 69 73 20 75 73 65 64 20 74 6f 20 6f 6d 69  n is used to omi
e9e0: 74 20 74 68 65 20 63 6f 6d 70 69 6c 65 2d 74 69  t the compile-ti
e9f0: 6d 65 20 6f 70 74 69 6f 6e 20 64 69 61 67 6e 6f  me option diagno
ea00: 73 74 69 63 73 20 61 76 61 69 6c 61 62 6c 65 0a  stics available.
ea10: 20 20 69 6e 20 53 51 4c 69 74 65 2c 20 69 6e 63    in SQLite, inc
ea20: 6c 75 64 69 6e 67 20 74 68 65 20 5b 73 71 6c 69  luding the [sqli
ea30: 74 65 33 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f  te3_compileoptio
ea40: 6e 5f 75 73 65 64 28 29 5d 20 61 6e 64 0a 20 20  n_used()] and.  
ea50: 5b 73 71 6c 69 74 65 33 5f 63 6f 6d 70 69 6c 65  [sqlite3_compile
ea60: 6f 70 74 69 6f 6e 5f 67 65 74 28 29 5d 20 43 2f  option_get()] C/
ea70: 43 2b 2b 20 66 75 6e 63 74 69 6f 6e 73 2c 20 74  C++ functions, t
ea80: 68 65 0a 20 20 5b 73 71 6c 69 74 65 5f 63 6f 6d  he.  [sqlite_com
ea90: 70 69 6c 65 6f 70 74 69 6f 6e 5f 75 73 65 64 28  pileoption_used(
eaa0: 29 5d 20 61 6e 64 20 5b 73 71 6c 69 74 65 5f 63  )] and [sqlite_c
eab0: 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 67 65 74  ompileoption_get
eac0: 28 29 5d 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e  ()] SQL function
ead0: 73 2c 0a 20 20 61 6e 64 20 74 68 65 20 5b 63 6f  s,.  and the [co
eae0: 6d 70 69 6c 65 5f 6f 70 74 69 6f 6e 73 20 70 72  mpile_options pr
eaf0: 61 67 6d 61 5d 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c  agma]..}..COMPIL
eb00: 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45  E_OPTION {SQLITE
eb10: 5f 4f 4d 49 54 5f 43 4f 4d 50 4c 45 54 45 7d 20  _OMIT_COMPLETE} 
eb20: 7b 0a 20 20 54 68 69 73 20 6f 70 74 69 6f 6e 20  {.  This option 
eb30: 63 61 75 73 65 73 20 74 68 65 20 5b 73 71 6c 69  causes the [sqli
eb40: 74 65 33 5f 63 6f 6d 70 6c 65 74 65 28 29 5d 20  te3_complete()] 
eb50: 61 6e 64 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6d  and [sqlite3_com
eb60: 70 6c 65 74 65 31 36 28 29 5d 0a 20 20 69 6e 74  plete16()].  int
eb70: 65 72 66 61 63 65 73 20 74 6f 20 62 65 20 6f 6d  erfaces to be om
eb80: 69 74 74 65 64 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c  itted..}..COMPIL
eb90: 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45  E_OPTION {SQLITE
eba0: 5f 4f 4d 49 54 5f 43 4f 4d 50 4f 55 4e 44 5f 53  _OMIT_COMPOUND_S
ebb0: 45 4c 45 43 54 7d 20 7b 0a 20 20 54 68 69 73 20  ELECT} {.  This 
ebc0: 6f 70 74 69 6f 6e 20 69 73 20 75 73 65 64 20 74  option is used t
ebd0: 6f 20 6f 6d 69 74 20 74 68 65 20 63 6f 6d 70 6f  o omit the compo
ebe0: 75 6e 64 20 5b 53 45 4c 45 43 54 5d 20 66 75 6e  und [SELECT] fun
ebf0: 63 74 69 6f 6e 61 6c 69 74 79 2e 20 0a 20 20 5b  ctionality. .  [
ec00: 53 45 4c 45 43 54 5d 20 73 74 61 74 65 6d 65 6e  SELECT] statemen
ec10: 74 73 20 74 68 61 74 20 75 73 65 20 74 68 65 20  ts that use the 
ec20: 0a 20 20 55 4e 49 4f 4e 2c 20 55 4e 49 4f 4e 20  .  UNION, UNION 
ec30: 41 4c 4c 2c 20 49 4e 54 45 52 53 45 43 54 20 6f  ALL, INTERSECT o
ec40: 72 20 45 58 43 45 50 54 20 63 6f 6d 70 6f 75 6e  r EXCEPT compoun
ec50: 64 20 53 45 4c 45 43 54 20 6f 70 65 72 61 74 6f  d SELECT operato
ec60: 72 73 20 77 69 6c 6c 20 0a 20 20 63 61 75 73 65  rs will .  cause
ec70: 20 61 20 70 61 72 73 65 20 65 72 72 6f 72 2e 0a   a parse error..
ec80: 0a 20 20 41 6e 20 5b 49 4e 53 45 52 54 5d 20 73  .  An [INSERT] s
ec90: 74 61 74 65 6d 65 6e 74 20 77 69 74 68 20 6d 75  tatement with mu
eca0: 6c 74 69 70 6c 65 20 76 61 6c 75 65 73 20 69 6e  ltiple values in
ecb0: 20 74 68 65 20 56 41 4c 55 45 53 20 63 6c 61 75   the VALUES clau
ecc0: 73 65 20 69 73 0a 20 20 69 6d 70 6c 65 6d 65 6e  se is.  implemen
ecd0: 74 65 64 20 69 6e 74 65 72 6e 61 6c 6c 79 20 61  ted internally a
ece0: 73 20 61 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c  s a compound SEL
ecf0: 45 43 54 2e 20 20 48 65 6e 63 65 2c 20 74 68 69  ECT.  Hence, thi
ed00: 73 20 6f 70 74 69 6f 6e 20 61 6c 73 6f 0a 20 20  s option also.  
ed10: 64 69 73 61 62 6c 65 73 20 74 68 65 20 61 62 69  disables the abi
ed20: 6c 69 74 79 20 74 6f 20 69 6e 73 65 72 74 20 6d  lity to insert m
ed30: 6f 72 65 20 74 68 61 6e 20 61 20 73 69 6e 67 6c  ore than a singl
ed40: 65 20 72 6f 77 20 75 73 69 6e 67 20 61 6e 0a 20  e row using an. 
ed50: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e   INSERT INTO ...
ed60: 20 56 41 4c 55 45 53 20 2e 2e 2e 20 73 74 61 74   VALUES ... stat
ed70: 65 6d 65 6e 74 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c  ement..}..COMPIL
ed80: 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45  E_OPTION {SQLITE
ed90: 5f 4f 4d 49 54 5f 43 54 45 7d 20 7b 0a 20 20 54  _OMIT_CTE} {.  T
eda0: 68 69 73 20 6f 70 74 69 6f 6e 20 63 61 75 73 65  his option cause
edb0: 73 20 73 75 70 70 6f 72 74 20 66 6f 72 20 5b 63  s support for [c
edc0: 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72  ommon table expr
edd0: 65 73 73 69 6f 6e 73 5d 20 74 6f 20 62 65 20 6f  essions] to be o
ede0: 6d 69 74 74 65 64 2e 0a 7d 0a 0a 0a 0a 43 4f 4d  mitted..}....COM
edf0: 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c  PILE_OPTION {SQL
ee00: 49 54 45 5f 4f 4d 49 54 5f 44 41 54 45 54 49 4d  ITE_OMIT_DATETIM
ee10: 45 5f 46 55 4e 43 53 7d 20 7b 0a 20 20 49 66 20  E_FUNCS} {.  If 
ee20: 74 68 69 73 20 6f 70 74 69 6f 6e 20 69 73 20 64  this option is d
ee30: 65 66 69 6e 65 64 2c 20 53 51 4c 69 74 65 27 73  efined, SQLite's
ee40: 20 62 75 69 6c 74 2d 69 6e 20 64 61 74 65 20 61   built-in date a
ee50: 6e 64 20 74 69 6d 65 20 6d 61 6e 69 70 75 6c 61  nd time manipula
ee60: 74 69 6f 6e 0a 20 20 66 75 6e 63 74 69 6f 6e 73  tion.  functions
ee70: 20 61 72 65 20 6f 6d 69 74 74 65 64 2e 20 53 70   are omitted. Sp
ee80: 65 63 69 66 69 63 61 6c 6c 79 2c 20 74 68 65 20  ecifically, the 
ee90: 53 51 4c 20 66 75 6e 63 74 69 6f 6e 73 20 6a 75  SQL functions ju
eea0: 6c 69 61 6e 64 61 79 28 29 2c 20 64 61 74 65 28  lianday(), date(
eeb0: 29 2c 0a 20 20 74 69 6d 65 28 29 2c 20 64 61 74  ),.  time(), dat
eec0: 65 74 69 6d 65 28 29 20 61 6e 64 20 73 74 72 66  etime() and strf
eed0: 74 69 6d 65 28 29 20 61 72 65 20 6e 6f 74 20 61  time() are not a
eee0: 76 61 69 6c 61 62 6c 65 2e 20 54 68 65 20 64 65  vailable. The de
eef0: 66 61 75 6c 74 20 63 6f 6c 75 6d 6e 0a 20 20 76  fault column.  v
ef00: 61 6c 75 65 73 20 43 55 52 52 45 4e 54 5f 54 49  alues CURRENT_TI
ef10: 4d 45 2c 20 43 55 52 52 45 4e 54 5f 44 41 54 45  ME, CURRENT_DATE
ef20: 20 61 6e 64 20 43 55 52 52 45 4e 54 5f 54 49 4d   and CURRENT_TIM
ef30: 45 53 54 41 4d 50 20 61 72 65 20 73 74 69 6c 6c  ESTAMP are still
ef40: 20 61 76 61 69 6c 61 62 6c 65 2e 0a 7d 0a 0a 43   available..}..C
ef50: 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53  OMPILE_OPTION {S
ef60: 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 45 43 4c 54  QLITE_OMIT_DECLT
ef70: 59 50 45 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70  YPE} {.  This op
ef80: 74 69 6f 6e 20 63 61 75 73 65 73 20 53 51 4c 69  tion causes SQLi
ef90: 74 65 20 74 6f 20 6f 6d 69 74 20 73 75 70 70 6f  te to omit suppo
efa0: 72 74 20 66 6f 72 20 74 68 65 0a 20 20 5b 73 71  rt for the.  [sq
efb0: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63  lite3_column_dec
efc0: 6c 74 79 70 65 28 29 5d 20 61 6e 64 20 5b 73 71  ltype()] and [sq
efd0: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63  lite3_column_dec
efe0: 6c 74 79 70 65 31 36 28 29 5d 0a 20 20 69 6e 74  ltype16()].  int
eff0: 65 72 66 61 63 65 73 2e 0a 7d 0a 0a 43 4f 4d 50  erfaces..}..COMP
f000: 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49  ILE_OPTION {SQLI
f010: 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41 54  TE_OMIT_DEPRECAT
f020: 45 44 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70 74  ED} {.  This opt
f030: 69 6f 6e 20 63 61 75 73 65 73 20 53 51 4c 69 74  ion causes SQLit
f040: 65 20 74 6f 20 6f 6d 69 74 20 73 75 70 70 6f 72  e to omit suppor
f050: 74 20 66 6f 72 20 69 6e 74 65 72 66 61 63 65 73  t for interfaces
f060: 0a 20 20 6d 61 72 6b 65 64 20 61 73 20 64 65 70  .  marked as dep
f070: 72 65 63 61 74 65 64 2e 20 20 54 68 69 73 20 69  recated.  This i
f080: 6e 63 6c 75 64 65 73 20 0a 20 20 5b 73 71 6c 69  ncludes .  [sqli
f090: 74 65 33 5f 61 67 67 72 65 67 61 74 65 5f 63 6f  te3_aggregate_co
f0a0: 75 6e 74 28 29 5d 2c 0a 20 20 5b 73 71 6c 69 74  unt()],.  [sqlit
f0b0: 65 33 5f 65 78 70 69 72 65 64 28 29 5d 2c 0a 20  e3_expired()],. 
f0c0: 20 5b 73 71 6c 69 74 65 33 5f 74 72 61 6e 73 66   [sqlite3_transf
f0d0: 65 72 5f 62 69 6e 64 69 6e 67 73 28 29 5d 2c 0a  er_bindings()],.
f0e0: 20 20 5b 73 71 6c 69 74 65 33 5f 67 6c 6f 62 61    [sqlite3_globa
f0f0: 6c 5f 72 65 63 6f 76 65 72 28 29 5d 2c 0a 20 20  l_recover()],.  
f100: 5b 73 71 6c 69 74 65 33 5f 74 68 72 65 61 64 5f  [sqlite3_thread_
f110: 63 6c 65 61 6e 75 70 28 29 5d 20 61 6e 64 0a 20  cleanup()] and. 
f120: 20 5b 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72 79   [sqlite3_memory
f130: 5f 61 6c 61 72 6d 28 29 5d 20 69 6e 74 65 72 66  _alarm()] interf
f140: 61 63 65 73 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45  aces..}..COMPILE
f150: 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f  _OPTION {SQLITE_
f160: 4f 4d 49 54 5f 44 49 53 4b 49 4f 7d 20 7b 0a 20  OMIT_DISKIO} {. 
f170: 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 6f 6d 69   This option omi
f180: 74 73 20 61 6c 6c 20 73 75 70 70 6f 72 74 20 66  ts all support f
f190: 6f 72 20 77 72 69 74 69 6e 67 20 74 6f 20 74 68  or writing to th
f1a0: 65 20 64 69 73 6b 20 61 6e 64 20 66 6f 72 63 65  e disk and force
f1b0: 73 0a 20 20 64 61 74 61 62 61 73 65 73 20 74 6f  s.  databases to
f1c0: 20 65 78 69 73 74 20 69 6e 20 6d 65 6d 6f 72 79   exist in memory
f1d0: 20 6f 6e 6c 79 2e 20 20 54 68 69 73 20 6f 70 74   only.  This opt
f1e0: 69 6f 6e 20 68 61 73 20 6e 6f 74 20 62 65 65 6e  ion has not been
f1f0: 20 0a 20 20 6d 61 69 6e 74 61 69 6e 65 64 20 61   .  maintained a
f200: 6e 64 20 70 72 6f 62 61 62 6c 79 20 64 6f 65 73  nd probably does
f210: 20 6e 6f 74 20 77 6f 72 6b 20 77 69 74 68 20 6e   not work with n
f220: 65 77 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66  ewer versions of
f230: 20 53 51 4c 69 74 65 2e 0a 7d 0a 0a 43 4f 4d 50   SQLite..}..COMP
f240: 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49  ILE_OPTION {SQLI
f250: 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 7d  TE_OMIT_EXPLAIN}
f260: 20 7b 0a 20 20 44 65 66 69 6e 69 6e 67 20 74 68   {.  Defining th
f270: 69 73 20 6f 70 74 69 6f 6e 20 63 61 75 73 65 73  is option causes
f280: 20 74 68 65 20 5b 45 58 50 4c 41 49 4e 5d 20 63   the [EXPLAIN] c
f290: 6f 6d 6d 61 6e 64 20 74 6f 20 62 65 20 6f 6d 69  ommand to be omi
f2a0: 74 74 65 64 20 66 72 6f 6d 20 74 68 65 0a 20 20  tted from the.  
f2b0: 6c 69 62 72 61 72 79 2e 20 41 74 74 65 6d 70 74  library. Attempt
f2c0: 69 6e 67 20 74 6f 20 65 78 65 63 75 74 65 20 61  ing to execute a
f2d0: 6e 20 5b 45 58 50 4c 41 49 4e 5d 20 73 74 61 74  n [EXPLAIN] stat
f2e0: 65 6d 65 6e 74 20 77 69 6c 6c 20 63 61 75 73 65  ement will cause
f2f0: 20 61 20 70 61 72 73 65 0a 20 20 65 72 72 6f 72   a parse.  error
f300: 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54  ..}..COMPILE_OPT
f310: 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54  ION {SQLITE_OMIT
f320: 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53 7d 20 7b  _FLAG_PRAGMAS} {
f330: 0a 20 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 6f  .  This option o
f340: 6d 69 74 73 20 73 75 70 70 6f 72 74 20 66 6f 72  mits support for
f350: 20 61 20 73 75 62 73 65 74 20 6f 66 20 5b 50 52   a subset of [PR
f360: 41 47 4d 41 5d 20 63 6f 6d 6d 61 6e 64 73 20 74  AGMA] commands t
f370: 68 61 74 0a 20 20 71 75 65 72 79 20 61 6e 64 20  hat.  query and 
f380: 73 65 74 20 62 6f 6f 6c 65 61 6e 20 70 72 6f 70  set boolean prop
f390: 65 72 74 69 65 73 2e 0a 7d 0a 0a 43 4f 4d 50 49  erties..}..COMPI
f3a0: 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54  LE_OPTION {SQLIT
f3b0: 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
f3c0: 50 4f 49 4e 54 7d 20 7b 0a 20 20 54 68 69 73 20  POINT} {.  This 
f3d0: 6f 70 74 69 6f 6e 20 69 73 20 75 73 65 64 20 74  option is used t
f3e0: 6f 20 6f 6d 69 74 20 66 6c 6f 61 74 69 6e 67 2d  o omit floating-
f3f0: 70 6f 69 6e 74 20 6e 75 6d 62 65 72 20 73 75 70  point number sup
f400: 70 6f 72 74 20 66 72 6f 6d 20 74 68 65 20 53 51  port from the SQ
f410: 4c 69 74 65 0a 20 20 6c 69 62 72 61 72 79 2e 20  Lite.  library. 
f420: 57 68 65 6e 20 73 70 65 63 69 66 69 65 64 2c 20  When specified, 
f430: 73 70 65 63 69 66 79 69 6e 67 20 61 20 66 6c 6f  specifying a flo
f440: 61 74 69 6e 67 20 70 6f 69 6e 74 20 6e 75 6d 62  ating point numb
f450: 65 72 20 61 73 20 61 20 6c 69 74 65 72 61 6c 20  er as a literal 
f460: 0a 20 20 28 69 2e 65 2e 20 22 31 2e 30 31 22 29  .  (i.e. "1.01")
f470: 20 72 65 73 75 6c 74 73 20 69 6e 20 61 20 70 61   results in a pa
f480: 72 73 65 20 65 72 72 6f 72 2e 0a 0a 20 20 3c 70  rse error...  <p
f490: 3e 49 6e 20 74 68 65 20 66 75 74 75 72 65 2c 20  >In the future, 
f4a0: 74 68 69 73 20 6f 70 74 69 6f 6e 20 6d 61 79 20  this option may 
f4b0: 61 6c 73 6f 20 64 69 73 61 62 6c 65 20 6f 74 68  also disable oth
f4c0: 65 72 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e  er floating poin
f4d0: 74 20 0a 20 20 66 75 6e 63 74 69 6f 6e 61 6c 69  t .  functionali
f4e0: 74 79 2c 20 66 6f 72 20 65 78 61 6d 70 6c 65 20  ty, for example 
f4f0: 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 72 65 73  the [sqlite3_res
f500: 75 6c 74 5f 64 6f 75 62 6c 65 28 29 5d 2c 20 0a  ult_double()], .
f510: 20 20 5b 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f    [sqlite3_bind_
f520: 64 6f 75 62 6c 65 28 29 5d 2c 20 5b 73 71 6c 69  double()], [sqli
f530: 74 65 33 5f 76 61 6c 75 65 5f 64 6f 75 62 6c 65  te3_value_double
f540: 28 29 5d 20 61 6e 64 0a 20 20 5b 73 71 6c 69 74  ()] and.  [sqlit
f550: 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65  e3_column_double
f560: 28 29 5d 20 41 50 49 20 66 75 6e 63 74 69 6f 6e  ()] API function
f570: 73 2e 0a 20 20 3c 2f 70 3e 0a 7d 0a 0a 43 4f 4d  s..  </p>.}..COM
f580: 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c  PILE_OPTION {SQL
f590: 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e  ITE_OMIT_FOREIGN
f5a0: 5f 4b 45 59 7d 20 7b 0a 20 20 49 66 20 74 68 69  _KEY} {.  If thi
f5b0: 73 20 6f 70 74 69 6f 6e 20 69 73 20 64 65 66 69  s option is defi
f5c0: 6e 65 64 2c 20 74 68 65 6e 20 5b 66 6f 72 65 69  ned, then [forei
f5d0: 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
f5e0: 74 5d 20 73 79 6e 74 61 78 20 69 73 0a 20 20 6e  t] syntax is.  n
f5f0: 6f 74 20 72 65 63 6f 67 6e 69 7a 65 64 2e 0a 7d  ot recognized..}
f600: 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e  ..COMPILE_OPTION
f610: 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 47 45   {SQLITE_OMIT_GE
f620: 54 5f 54 41 42 4c 45 7d 20 7b 0a 20 20 54 68 69  T_TABLE} {.  Thi
f630: 73 20 6f 70 74 69 6f 6e 20 63 61 75 73 65 73 20  s option causes 
f640: 73 75 70 70 6f 72 74 20 66 6f 72 20 5b 73 71 6c  support for [sql
f650: 69 74 65 33 5f 67 65 74 5f 74 61 62 6c 65 28 29  ite3_get_table()
f660: 5d 20 61 6e 64 0a 20 20 5b 73 71 6c 69 74 65 33  ] and.  [sqlite3
f670: 5f 66 72 65 65 5f 74 61 62 6c 65 28 29 5d 20 74  _free_table()] t
f680: 6f 20 62 65 20 6f 6d 69 74 74 65 64 2e 0a 7d 0a  o be omitted..}.
f690: 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20  .COMPILE_OPTION 
f6a0: 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 43  {SQLITE_OMIT_INC
f6b0: 52 42 4c 4f 42 7d 20 7b 0a 20 20 54 68 69 73 20  RBLOB} {.  This 
f6c0: 6f 70 74 69 6f 6e 20 63 61 75 73 65 73 20 73 75  option causes su
f6d0: 70 70 6f 72 74 20 66 6f 72 20 5b 73 71 6c 69 74  pport for [sqlit
f6e0: 65 33 5f 62 6c 6f 62 20 7c 20 69 6e 63 72 65 6d  e3_blob | increm
f6f0: 65 6e 74 61 6c 20 42 4c 4f 42 20 49 2f 4f 5d 0a  ental BLOB I/O].
f700: 20 20 74 6f 20 62 65 20 6f 6d 69 74 74 65 64 2e    to be omitted.
f710: 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49  .}..COMPILE_OPTI
f720: 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ON {SQLITE_OMIT_
f730: 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b 7d  INTEGRITY_CHECK}
f740: 20 7b 0a 20 20 54 68 69 73 20 6f 70 74 69 6f 6e   {.  This option
f750: 20 6f 6d 69 74 73 20 73 75 70 70 6f 72 74 20 66   omits support f
f760: 6f 72 20 74 68 65 20 5b 69 6e 74 65 67 72 69 74  or the [integrit
f770: 79 5f 63 68 65 63 6b 20 70 72 61 67 6d 61 5d 2e  y_check pragma].
f780: 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49  .}..COMPILE_OPTI
f790: 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ON {SQLITE_OMIT_
f7a0: 4c 49 4b 45 5f 4f 50 54 49 4d 49 5a 41 54 49 4f  LIKE_OPTIMIZATIO
f7b0: 4e 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70 74 69  N} {.  This opti
f7c0: 6f 6e 20 64 69 73 61 62 6c 65 73 20 74 68 65 20  on disables the 
f7d0: 61 62 69 6c 69 74 79 20 6f 66 20 53 51 4c 69 74  ability of SQLit
f7e0: 65 20 74 6f 20 75 73 65 20 69 6e 64 69 63 65 73  e to use indices
f7f0: 20 74 6f 20 68 65 6c 70 0a 20 20 72 65 73 6f 6c   to help.  resol
f800: 76 65 20 5b 4c 49 4b 45 5d 20 61 6e 64 20 5b 47  ve [LIKE] and [G
f810: 4c 4f 42 5d 20 6f 70 65 72 61 74 6f 72 73 20 69  LOB] operators i
f820: 6e 20 61 20 57 48 45 52 45 20 63 6c 61 75 73 65  n a WHERE clause
f830: 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54  ..}..COMPILE_OPT
f840: 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54  ION {SQLITE_OMIT
f850: 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e 7d  _LOAD_EXTENSION}
f860: 20 7b 0a 20 20 54 68 69 73 20 6f 70 74 69 6f 6e   {.  This option
f870: 20 6f 6d 69 74 73 20 74 68 65 20 65 6e 74 69 72   omits the entir
f880: 65 20 65 78 74 65 6e 73 69 6f 6e 20 6c 6f 61 64  e extension load
f890: 69 6e 67 20 6d 65 63 68 61 6e 69 73 6d 20 66 72  ing mechanism fr
f8a0: 6f 6d 0a 20 20 53 51 4c 69 74 65 2c 20 69 6e 63  om.  SQLite, inc
f8b0: 6c 75 64 69 6e 67 20 5b 73 71 6c 69 74 65 33 5f  luding [sqlite3_
f8c0: 65 6e 61 62 6c 65 5f 6c 6f 61 64 5f 65 78 74 65  enable_load_exte
f8d0: 6e 73 69 6f 6e 28 29 5d 20 61 6e 64 0a 20 20 5b  nsion()] and.  [
f8e0: 73 71 6c 69 74 65 33 5f 6c 6f 61 64 5f 65 78 74  sqlite3_load_ext
f8f0: 65 6e 73 69 6f 6e 28 29 5d 20 69 6e 74 65 72 66  ension()] interf
f900: 61 63 65 73 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45  aces..}..COMPILE
f910: 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f  _OPTION {SQLITE_
f920: 4f 4d 49 54 5f 4c 4f 43 41 4c 54 49 4d 45 7d 20  OMIT_LOCALTIME} 
f930: 7b 0a 20 20 54 68 69 73 20 6f 70 74 69 6f 6e 20  {.  This option 
f940: 6f 6d 69 74 73 20 74 68 65 20 22 6c 6f 63 61 6c  omits the "local
f950: 74 69 6d 65 22 20 6d 6f 64 69 66 69 65 72 20 66  time" modifier f
f960: 72 6f 6d 20 74 68 65 20 64 61 74 65 20 61 6e 64  rom the date and
f970: 20 74 69 6d 65 0a 20 20 66 75 6e 63 74 69 6f 6e   time.  function
f980: 73 2e 20 20 54 68 69 73 20 6f 70 74 69 6f 6e 20  s.  This option 
f990: 69 73 20 73 6f 6d 65 74 69 6d 65 73 20 75 73 65  is sometimes use
f9a0: 66 75 6c 20 77 68 65 6e 20 74 72 79 69 6e 67 20  ful when trying 
f9b0: 74 6f 20 63 6f 6d 70 69 6c 65 0a 20 20 74 68 65  to compile.  the
f9c0: 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 66   date and time f
f9d0: 75 6e 63 74 69 6f 6e 73 20 6f 6e 20 61 20 70 6c  unctions on a pl
f9e0: 61 74 66 6f 72 6d 20 74 68 61 74 20 64 6f 65 73  atform that does
f9f0: 20 6e 6f 74 20 73 75 70 70 6f 72 74 20 74 68 65   not support the
fa00: 0a 20 20 63 6f 6e 63 65 70 74 20 6f 66 20 6c 6f  .  concept of lo
fa10: 63 61 6c 20 74 69 6d 65 2e 0a 7d 0a 0a 43 4f 4d  cal time..}..COM
fa20: 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c  PILE_OPTION {SQL
fa30: 49 54 45 5f 4f 4d 49 54 5f 4c 4f 4f 4b 41 53 49  ITE_OMIT_LOOKASI
fa40: 44 45 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70 74  DE} {.  This opt
fa50: 69 6f 6e 20 6f 6d 69 74 73 20 74 68 65 20 5b 6c  ion omits the [l
fa60: 6f 6f 6b 61 73 69 64 65 20 6d 65 6d 6f 72 79 20  ookaside memory 
fa70: 61 6c 6c 6f 63 61 74 6f 72 5d 2e 0a 7d 0a 0a 43  allocator]..}..C
fa80: 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53  OMPILE_OPTION {S
fa90: 51 4c 49 54 45 5f 4f 4d 49 54 5f 4d 45 4d 4f 52  QLITE_OMIT_MEMOR
faa0: 59 44 42 7d 20 7b 0a 20 20 57 68 65 6e 20 74 68  YDB} {.  When th
fab0: 69 73 20 69 73 20 64 65 66 69 6e 65 64 2c 20 74  is is defined, t
fac0: 68 65 20 6c 69 62 72 61 72 79 20 64 6f 65 73 20  he library does 
fad0: 6e 6f 74 20 72 65 73 70 65 63 74 20 74 68 65 20  not respect the 
fae0: 73 70 65 63 69 61 6c 20 64 61 74 61 62 61 73 65  special database
faf0: 0a 20 20 6e 61 6d 65 20 22 3a 6d 65 6d 6f 72 79  .  name ":memory
fb00: 3a 22 20 28 6e 6f 72 6d 61 6c 6c 79 20 75 73 65  :" (normally use
fb10: 64 20 74 6f 20 63 72 65 61 74 65 20 61 6e 20 5b  d to create an [
fb20: 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 61  in-memory databa
fb30: 73 65 5d 29 2e 20 49 66 20 0a 20 20 22 3a 6d 65  se]). If .  ":me
fb40: 6d 6f 72 79 3a 22 20 69 73 20 70 61 73 73 65 64  mory:" is passed
fb50: 20 74 6f 20 5b 73 71 6c 69 74 65 33 5f 6f 70 65   to [sqlite3_ope
fb60: 6e 28 29 5d 2c 20 5b 73 71 6c 69 74 65 33 5f 6f  n()], [sqlite3_o
fb70: 70 65 6e 31 36 28 29 5d 2c 20 6f 72 0a 20 20 5b  pen16()], or.  [
fb80: 73 71 6c 69 74 65 33 5f 6f 70 65 6e 5f 76 32 28  sqlite3_open_v2(
fb90: 29 5d 2c 20 61 20 66 69 6c 65 20 77 69 74 68 20  )], a file with 
fba0: 74 68 69 73 20 6e 61 6d 65 20 77 69 6c 6c 20 62  this name will b
fbb0: 65 20 0a 20 20 6f 70 65 6e 65 64 20 6f 72 20 63  e .  opened or c
fbc0: 72 65 61 74 65 64 2e 0a 7d 0a 0a 43 4f 4d 50 49  reated..}..COMPI
fbd0: 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54  LE_OPTION {SQLIT
fbe0: 45 5f 4f 4d 49 54 5f 4f 52 5f 4f 50 54 49 4d 49  E_OMIT_OR_OPTIMI
fbf0: 5a 41 54 49 4f 4e 7d 20 7b 0a 20 20 54 68 69 73  ZATION} {.  This
fc00: 20 6f 70 74 69 6f 6e 20 64 69 73 61 62 6c 65 73   option disables
fc10: 20 74 68 65 20 61 62 69 6c 69 74 79 20 6f 66 20   the ability of 
fc20: 53 51 4c 69 74 65 20 74 6f 20 75 73 65 20 61 6e  SQLite to use an
fc30: 20 69 6e 64 65 78 20 74 6f 67 65 74 68 65 72 0a   index together.
fc40: 20 20 77 69 74 68 20 74 65 72 6d 73 20 6f 66 20    with terms of 
fc50: 61 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 63  a WHERE clause c
fc60: 6f 6e 6e 65 63 74 65 64 20 62 79 20 74 68 65 20  onnected by the 
fc70: 4f 52 20 6f 70 65 72 61 74 6f 72 2e 0a 7d 0a 0a  OR operator..}..
fc80: 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b  COMPILE_OPTION {
fc90: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45  SQLITE_OMIT_PAGE
fca0: 52 5f 50 52 41 47 4d 41 53 7d 20 7b 0a 20 20 44  R_PRAGMAS} {.  D
fcb0: 65 66 69 6e 69 6e 67 20 74 68 69 73 20 6f 70 74  efining this opt
fcc0: 69 6f 6e 20 6f 6d 69 74 73 20 70 72 61 67 6d 61  ion omits pragma
fcd0: 73 20 72 65 6c 61 74 65 64 20 74 6f 20 74 68 65  s related to the
fce0: 20 70 61 67 65 72 20 73 75 62 73 79 73 74 65 6d   pager subsystem
fcf0: 20 66 72 6f 6d 20 0a 20 20 74 68 65 20 62 75 69   from .  the bui
fd00: 6c 64 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f  ld..}..COMPILE_O
fd10: 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d  PTION {SQLITE_OM
fd20: 49 54 5f 50 52 41 47 4d 41 7d 20 7b 0a 20 20 54  IT_PRAGMA} {.  T
fd30: 68 69 73 20 6f 70 74 69 6f 6e 20 69 73 20 75 73  his option is us
fd40: 65 64 20 74 6f 20 6f 6d 69 74 20 74 68 65 20 5b  ed to omit the [
fd50: 50 52 41 47 4d 41 5d 20 63 6f 6d 6d 61 6e 64 0a  PRAGMA] command.
fd60: 20 20 66 72 6f 6d 20 74 68 65 20 6c 69 62 72 61    from the libra
fd70: 72 79 2e 20 4e 6f 74 65 20 74 68 61 74 20 69 74  ry. Note that it
fd80: 20 69 73 20 75 73 65 66 75 6c 20 74 6f 20 64 65   is useful to de
fd90: 66 69 6e 65 20 74 68 65 20 6d 61 63 72 6f 73 20  fine the macros 
fda0: 74 68 61 74 20 6f 6d 69 74 0a 20 20 73 70 65 63  that omit.  spec
fdb0: 69 66 69 63 20 70 72 61 67 6d 61 73 20 69 6e 20  ific pragmas in 
fdc0: 61 64 64 69 74 69 6f 6e 20 74 6f 20 74 68 69 73  addition to this
fdd0: 2c 20 61 73 20 74 68 65 79 20 6d 61 79 20 61 6c  , as they may al
fde0: 73 6f 20 72 65 6d 6f 76 65 20 73 75 70 70 6f 72  so remove suppor
fdf0: 74 69 6e 67 20 63 6f 64 65 0a 20 20 69 6e 20 6f  ting code.  in o
fe00: 74 68 65 72 20 73 75 62 2d 73 79 73 74 65 6d 73  ther sub-systems
fe10: 2e 20 54 68 69 73 20 6d 61 63 72 6f 20 72 65 6d  . This macro rem
fe20: 6f 76 65 73 20 74 68 65 20 5b 50 52 41 47 4d 41  oves the [PRAGMA
fe30: 5d 20 63 6f 6d 6d 61 6e 64 20 6f 6e 6c 79 2e 0a  ] command only..
fe40: 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f  }..COMPILE_OPTIO
fe50: 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  N {SQLITE_OMIT_P
fe60: 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b  ROGRESS_CALLBACK
fe70: 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70 74 69 6f  } {.  This optio
fe80: 6e 20 6d 61 79 20 62 65 20 64 65 66 69 6e 65 64  n may be defined
fe90: 20 74 6f 20 6f 6d 69 74 20 74 68 65 20 63 61 70   to omit the cap
fea0: 61 62 69 6c 69 74 79 20 74 6f 20 69 73 73 75 65  ability to issue
feb0: 20 22 70 72 6f 67 72 65 73 73 22 20 0a 20 20 63   "progress" .  c
fec0: 61 6c 6c 62 61 63 6b 73 20 64 75 72 69 6e 67 20  allbacks during 
fed0: 6c 6f 6e 67 2d 72 75 6e 6e 69 6e 67 20 53 51 4c  long-running SQL
fee0: 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 54 68 65   statements. The
fef0: 20 0a 20 20 5b 73 71 6c 69 74 65 33 5f 70 72 6f   .  [sqlite3_pro
ff00: 67 72 65 73 73 5f 68 61 6e 64 6c 65 72 28 29 5d  gress_handler()]
ff10: 0a 20 20 41 50 49 20 66 75 6e 63 74 69 6f 6e 20  .  API function 
ff20: 69 73 20 6e 6f 74 20 70 72 65 73 65 6e 74 20 69  is not present i
ff30: 6e 20 74 68 65 20 6c 69 62 72 61 72 79 2e 0a 7d  n the library..}
ff40: 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e  ..COMPILE_OPTION
ff50: 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 51 55   {SQLITE_OMIT_QU
ff60: 49 43 4b 42 41 4c 41 4e 43 45 7d 20 7b 0a 20 20  ICKBALANCE} {.  
ff70: 54 68 69 73 20 6f 70 74 69 6f 6e 20 6f 6d 69 74  This option omit
ff80: 73 20 61 6e 20 61 6c 74 65 72 6e 61 74 69 76 65  s an alternative
ff90: 2c 20 66 61 73 74 65 72 20 42 2d 54 72 65 65 20  , faster B-Tree 
ffa0: 62 61 6c 61 6e 63 69 6e 67 20 72 6f 75 74 69 6e  balancing routin
ffb0: 65 2e 0a 20 20 55 73 69 6e 67 20 74 68 69 73 20  e..  Using this 
ffc0: 6f 70 74 69 6f 6e 20 6d 61 6b 65 73 20 53 51 4c  option makes SQL
ffd0: 69 74 65 20 73 6c 69 67 68 74 6c 79 20 73 6d 61  ite slightly sma
ffe0: 6c 6c 65 72 20 61 74 20 74 68 65 20 65 78 70 65  ller at the expe
fff0: 6e 73 65 20 6f 66 0a 20 20 6d 61 6b 69 6e 67 20  nse of.  making 
10000 69 74 20 72 75 6e 20 73 6c 69 67 68 74 6c 79 20  it run slightly 
10010 73 6c 6f 77 65 72 2e 0a 7d 0a 0a 43 4f 4d 50 49  slower..}..COMPI
10020 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54  LE_OPTION {SQLIT
10030 45 5f 4f 4d 49 54 5f 52 45 49 4e 44 45 58 7d 20  E_OMIT_REINDEX} 
10040 7b 0a 20 20 57 68 65 6e 20 74 68 69 73 20 6f 70  {.  When this op
10050 74 69 6f 6e 20 69 73 20 64 65 66 69 6e 65 64 2c  tion is defined,
10060 20 74 68 65 20 5b 52 45 49 4e 44 45 58 5d 0a 20   the [REINDEX]. 
10070 20 63 6f 6d 6d 61 6e 64 20 69 73 20 6e 6f 74 20   command is not 
10080 69 6e 63 6c 75 64 65 64 20 69 6e 20 74 68 65 20  included in the 
10090 6c 69 62 72 61 72 79 2e 0a 20 20 45 78 65 63 75  library..  Execu
100a0 74 69 6e 67 20 61 20 5b 52 45 49 4e 44 45 58 5d  ting a [REINDEX]
100b0 20 73 74 61 74 65 6d 65 6e 74 20 63 61 75 73 65   statement cause
100c0 73 20 0a 20 20 61 20 70 61 72 73 65 20 65 72 72  s .  a parse err
100d0 6f 72 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f  or..}..COMPILE_O
100e0 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d  PTION {SQLITE_OM
100f0 49 54 5f 53 43 48 45 4d 41 5f 50 52 41 47 4d 41  IT_SCHEMA_PRAGMA
10100 53 7d 20 7b 0a 20 20 44 65 66 69 6e 69 6e 67 20  S} {.  Defining 
10110 74 68 69 73 20 6f 70 74 69 6f 6e 20 6f 6d 69 74  this option omit
10120 73 20 70 72 61 67 6d 61 73 20 66 6f 72 20 71 75  s pragmas for qu
10130 65 72 79 69 6e 67 20 74 68 65 20 64 61 74 61 62  erying the datab
10140 61 73 65 20 73 63 68 65 6d 61 20 66 72 6f 6d 20  ase schema from 
10150 0a 20 20 74 68 65 20 62 75 69 6c 64 2e 0a 7d 0a  .  the build..}.
10160 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20  .COMPILE_OPTION 
10170 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48  {SQLITE_OMIT_SCH
10180 45 4d 41 5f 56 45 52 53 49 4f 4e 5f 50 52 41 47  EMA_VERSION_PRAG
10190 4d 41 53 7d 20 7b 0a 20 20 44 65 66 69 6e 69 6e  MAS} {.  Definin
101a0 67 20 74 68 69 73 20 6f 70 74 69 6f 6e 20 6f 6d  g this option om
101b0 69 74 73 20 70 72 61 67 6d 61 73 20 66 6f 72 20  its pragmas for 
101c0 71 75 65 72 79 69 6e 67 20 61 6e 64 20 6d 6f 64  querying and mod
101d0 69 66 79 69 6e 67 20 74 68 65 20 0a 20 20 64 61  ifying the .  da
101e0 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 76 65  tabase schema ve
101f0 72 73 69 6f 6e 20 61 6e 64 20 75 73 65 72 20 76  rsion and user v
10200 65 72 73 69 6f 6e 20 66 72 6f 6d 20 74 68 65 20  ersion from the 
10210 62 75 69 6c 64 2e 20 53 70 65 63 69 66 69 63 61  build. Specifica
10220 6c 6c 79 2c 20 74 68 65 20 0a 20 20 5b 73 63 68  lly, the .  [sch
10230 65 6d 61 5f 76 65 72 73 69 6f 6e 5d 20 61 6e 64  ema_version] and
10240 20 5b 75 73 65 72 5f 76 65 72 73 69 6f 6e 5d 20   [user_version] 
10250 50 52 41 47 4d 41 73 20 61 72 65 20 6f 6d 69 74  PRAGMAs are omit
10260 74 65 64 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f  ted..}..COMPILE_
10270 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f  OPTION {SQLITE_O
10280 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45  MIT_SHARED_CACHE
10290 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70 74 69 6f  } {.  This optio
102a0 6e 20 62 75 69 6c 64 73 20 53 51 4c 69 74 65 20  n builds SQLite 
102b0 77 69 74 68 6f 75 74 20 73 75 70 70 6f 72 74 20  without support 
102c0 66 6f 72 20 73 68 61 72 65 64 2d 63 61 63 68 65  for shared-cache
102d0 20 6d 6f 64 65 2e 0a 20 20 54 68 65 20 5b 73 71   mode..  The [sq
102e0 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f 73 68 61  lite3_enable_sha
102f0 72 65 64 5f 63 61 63 68 65 28 29 5d 20 69 73 20  red_cache()] is 
10300 6f 6d 69 74 74 65 64 20 61 6c 6f 6e 67 20 77 69  omitted along wi
10310 74 68 20 61 20 66 61 69 72 0a 20 20 61 6d 6f 75  th a fair.  amou
10320 6e 74 20 6f 66 20 6c 6f 67 69 63 20 77 69 74 68  nt of logic with
10330 69 6e 20 74 68 65 20 42 2d 54 72 65 65 20 73 75  in the B-Tree su
10340 62 73 79 73 74 65 6d 20 61 73 73 6f 63 69 61 74  bsystem associat
10350 65 64 20 77 69 74 68 20 73 68 61 72 65 64 0a 20  ed with shared. 
10360 20 63 61 63 68 65 20 6d 61 6e 61 67 65 6d 65 6e   cache managemen
10370 74 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50  t..}..COMPILE_OP
10380 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d 49  TION {SQLITE_OMI
10390 54 5f 53 55 42 51 55 45 52 59 7d 20 7b 0a 20 20  T_SUBQUERY} {.  
103a0 49 66 20 64 65 66 69 6e 65 64 2c 20 73 75 70 70  If defined, supp
103b0 6f 72 74 20 66 6f 72 20 73 75 62 2d 73 65 6c 65  ort for sub-sele
103c0 63 74 73 20 61 6e 64 20 74 68 65 20 49 4e 28 29  cts and the IN()
103d0 20 6f 70 65 72 61 74 6f 72 20 61 72 65 20 6f 6d   operator are om
103e0 69 74 74 65 64 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c  itted..}..COMPIL
103f0 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45  E_OPTION {SQLITE
10400 5f 4f 4d 49 54 5f 54 43 4c 5f 56 41 52 49 41 42  _OMIT_TCL_VARIAB
10410 4c 45 7d 20 7b 0a 20 20 49 66 20 74 68 69 73 20  LE} {.  If this 
10420 6d 61 63 72 6f 20 69 73 20 64 65 66 69 6e 65 64  macro is defined
10430 2c 20 74 68 65 6e 20 74 68 65 20 73 70 65 63 69  , then the speci
10440 61 6c 20 22 24 3c 76 61 72 69 61 62 6c 65 2d 6e  al "$<variable-n
10450 61 6d 65 3e 22 20 73 79 6e 74 61 78 0a 20 20 75  ame>" syntax.  u
10460 73 65 64 20 74 6f 20 61 75 74 6f 6d 61 74 69 63  sed to automatic
10470 61 6c 6c 79 20 62 69 6e 64 20 53 51 4c 20 76 61  ally bind SQL va
10480 72 69 61 62 6c 65 73 20 74 6f 20 54 43 4c 20 76  riables to TCL v
10490 61 72 69 61 62 6c 65 73 20 69 73 20 6f 6d 69 74  ariables is omit
104a0 74 65 64 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f  ted..}..COMPILE_
104b0 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f  OPTION {SQLITE_O
104c0 4d 49 54 5f 54 45 4d 50 44 42 7d 20 7b 0a 20 20  MIT_TEMPDB} {.  
104d0 54 68 69 73 20 6f 70 74 69 6f 6e 20 6f 6d 69 74  This option omit
104e0 73 20 73 75 70 70 6f 72 74 20 66 6f 72 20 54 45  s support for TE
104f0 4d 50 20 6f 72 20 54 45 4d 50 4f 52 41 52 59 20  MP or TEMPORARY 
10500 74 61 62 6c 65 73 2e 0a 7d 0a 0a 43 4f 4d 50 49  tables..}..COMPI
10510 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54  LE_OPTION {SQLIT
10520 45 5f 4f 4d 49 54 5f 54 52 41 43 45 7d 20 7b 0a  E_OMIT_TRACE} {.
10530 20 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 6f 6d    This option om
10540 69 74 73 20 73 75 70 70 6f 72 74 20 66 6f 72 20  its support for 
10550 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 70 72 6f  the [sqlite3_pro
10560 66 69 6c 65 28 29 5d 20 61 6e 64 0a 20 20 5b 73  file()] and.  [s
10570 71 6c 69 74 65 33 5f 74 72 61 63 65 28 29 5d 20  qlite3_trace()] 
10580 69 6e 74 65 72 66 61 63 65 73 20 61 6e 64 20 74  interfaces and t
10590 68 65 69 72 20 61 73 73 6f 63 69 61 74 65 64 20  heir associated 
105a0 6c 6f 67 69 63 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c  logic..}..COMPIL
105b0 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45  E_OPTION {SQLITE
105c0 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 7d 20 7b  _OMIT_TRIGGER} {
105d0 0a 20 20 44 65 66 69 6e 69 6e 67 20 74 68 69 73  .  Defining this
105e0 20 6f 70 74 69 6f 6e 20 6f 6d 69 74 73 20 73 75   option omits su
105f0 70 70 6f 72 74 20 66 6f 72 20 54 52 49 47 47 45  pport for TRIGGE
10600 52 20 6f 62 6a 65 63 74 73 2e 20 4e 65 69 74 68  R objects. Neith
10610 65 72 20 74 68 65 20 0a 20 20 5b 43 52 45 41 54  er the .  [CREAT
10620 45 20 54 52 49 47 47 45 52 5d 20 6f 72 20 5b 44  E TRIGGER] or [D
10630 52 4f 50 20 54 52 49 47 47 45 52 5d 0a 20 20 63  ROP TRIGGER].  c
10640 6f 6d 6d 61 6e 64 73 20 61 72 65 20 61 76 61 69  ommands are avai
10650 6c 61 62 6c 65 20 69 6e 20 74 68 69 73 20 63 61  lable in this ca
10660 73 65 2c 20 61 6e 64 20 61 74 74 65 6d 70 74 69  se, and attempti
10670 6e 67 20 74 6f 20 65 78 65 63 75 74 65 0a 20 20  ng to execute.  
10680 65 69 74 68 65 72 20 77 69 6c 6c 20 72 65 73 75  either will resu
10690 6c 74 20 69 6e 20 61 20 70 61 72 73 65 20 65 72  lt in a parse er
106a0 72 6f 72 2e 0a 20 20 54 68 69 73 20 6f 70 74 69  ror..  This opti
106b0 6f 6e 20 61 6c 73 6f 20 64 69 73 61 62 6c 65 73  on also disables
106c0 20 65 6e 66 6f 72 63 65 6d 65 6e 74 20 6f 66 20   enforcement of 
106d0 5b 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e  [foreign key con
106e0 73 74 72 61 69 6e 74 73 5d 2c 0a 20 20 73 69 6e  straints],.  sin
106f0 63 65 20 74 68 65 20 63 6f 64 65 20 74 68 61 74  ce the code that
10700 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74 72 69 67   implements trig
10710 67 65 72 73 20 61 6e 64 20 77 68 69 63 68 20 69  gers and which i
10720 73 20 6f 6d 69 74 74 65 64 20 62 79 20 74 68 69  s omitted by thi
10730 73 0a 20 20 6f 70 74 69 6f 6e 20 69 73 20 61 6c  s.  option is al
10740 73 6f 20 75 73 65 64 20 74 6f 20 69 6d 70 6c 65  so used to imple
10750 6d 65 6e 74 20 5b 66 6f 72 65 69 67 6e 20 6b 65  ment [foreign ke
10760 79 20 61 63 74 69 6f 6e 73 5d 2e 0a 7d 0a 0a 43  y actions]..}..C
10770 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53  OMPILE_OPTION {S
10780 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 55 4e 43  QLITE_OMIT_TRUNC
10790 41 54 45 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e  ATE_OPTIMIZATION
107a0 7d 20 7b 0a 20 20 41 20 64 65 66 61 75 6c 74 20  } {.  A default 
107b0 62 75 69 6c 64 20 6f 66 20 53 51 4c 69 74 65 2c  build of SQLite,
107c0 20 69 66 20 61 20 5b 44 45 4c 45 54 45 5d 20 73   if a [DELETE] s
107d0 74 61 74 65 6d 65 6e 74 20 68 61 73 20 6e 6f 20  tatement has no 
107e0 57 48 45 52 45 20 63 6c 61 75 73 65 0a 20 20 61  WHERE clause.  a
107f0 6e 64 20 6f 70 65 72 61 74 65 73 20 6f 6e 20 61  nd operates on a
10800 20 74 61 62 6c 65 20 77 69 74 68 20 6e 6f 20 74   table with no t
10810 72 69 67 67 65 72 73 2c 20 61 6e 20 6f 70 74 69  riggers, an opti
10820 6d 69 7a 61 74 69 6f 6e 20 6f 63 63 75 72 73 20  mization occurs 
10830 74 68 61 74 0a 20 20 63 61 75 73 65 73 20 74 68  that.  causes th
10840 65 20 44 45 4c 45 54 45 20 74 6f 20 6f 63 63 75  e DELETE to occu
10850 72 20 62 79 20 64 72 6f 70 70 69 6e 67 20 61 6e  r by dropping an
10860 64 20 72 65 63 72 65 61 74 69 6e 67 20 74 68 65  d recreating the
10870 20 74 61 62 6c 65 2e 20 20 0a 20 20 44 72 6f 70   table.  .  Drop
10880 70 69 6e 67 20 61 6e 64 20 72 65 63 72 65 61 74  ping and recreat
10890 69 6e 67 20 61 20 74 61 62 6c 65 20 69 73 20 75  ing a table is u
108a0 73 75 61 6c 6c 79 20 6d 75 63 68 20 66 61 73 74  sually much fast
108b0 65 72 20 74 68 61 6e 20 64 65 6c 65 74 69 6e 67  er than deleting
108c0 0a 20 20 74 68 65 20 74 61 62 6c 65 20 63 6f 6e  .  the table con
108d0 74 65 6e 74 20 72 6f 77 20 62 79 20 72 6f 77 2e  tent row by row.
108e0 20 20 54 68 69 73 20 69 73 20 74 68 65 20 22 74    This is the "t
108f0 72 75 6e 63 61 74 65 20 6f 70 74 69 6d 69 7a 61  runcate optimiza
10900 74 69 6f 6e 22 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c  tion"..}..COMPIL
10910 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45  E_OPTION {SQLITE
10920 5f 4f 4d 49 54 5f 55 54 46 31 36 7d 20 7b 0a 20  _OMIT_UTF16} {. 
10930 20 54 68 69 73 20 6d 61 63 72 6f 20 69 73 20 75   This macro is u
10940 73 65 64 20 74 6f 20 6f 6d 69 74 20 73 75 70 70  sed to omit supp
10950 6f 72 74 20 66 6f 72 20 55 54 46 31 36 20 74 65  ort for UTF16 te
10960 78 74 20 65 6e 63 6f 64 69 6e 67 2e 20 57 68 65  xt encoding. Whe
10970 6e 20 74 68 69 73 20 69 73 0a 20 20 64 65 66 69  n this is.  defi
10980 6e 65 64 20 61 6c 6c 20 41 50 49 20 66 75 6e 63  ned all API func
10990 74 69 6f 6e 73 20 74 68 61 74 20 72 65 74 75 72  tions that retur
109a0 6e 20 6f 72 20 61 63 63 65 70 74 20 55 54 46 31  n or accept UTF1
109b0 36 20 65 6e 63 6f 64 65 64 20 74 65 78 74 20 61  6 encoded text a
109c0 72 65 0a 20 20 75 6e 61 76 61 69 6c 61 62 6c 65  re.  unavailable
109d0 2e 20 54 68 65 73 65 20 66 75 6e 63 74 69 6f 6e  . These function
109e0 73 20 63 61 6e 20 62 65 20 69 64 65 6e 74 69 66  s can be identif
109f0 69 65 64 20 62 79 20 74 68 65 20 66 61 63 74 20  ied by the fact 
10a00 74 68 61 74 20 74 68 65 79 20 65 6e 64 0a 20 20  that they end.  
10a10 77 69 74 68 20 27 31 36 27 2c 20 66 6f 72 20 65  with '16', for e
10a20 78 61 6d 70 6c 65 20 5b 73 71 6c 69 74 65 33 5f  xample [sqlite3_
10a30 70 72 65 70 61 72 65 31 36 28 29 5d 2c 20 5b 73  prepare16()], [s
10a40 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
10a50 78 74 31 36 28 29 5d 20 61 6e 64 0a 20 20 5b 73  xt16()] and.  [s
10a60 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74  qlite3_bind_text
10a70 31 36 28 29 5d 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c  16()]..}..COMPIL
10a80 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45  E_OPTION {SQLITE
10a90 5f 4f 4d 49 54 5f 56 41 43 55 55 4d 7d 20 7b 0a  _OMIT_VACUUM} {.
10aa0 20 20 57 68 65 6e 20 74 68 69 73 20 6f 70 74 69    When this opti
10ab0 6f 6e 20 69 73 20 64 65 66 69 6e 65 64 2c 20 74  on is defined, t
10ac0 68 65 20 5b 56 41 43 55 55 4d 5d 0a 20 20 63 6f  he [VACUUM].  co
10ad0 6d 6d 61 6e 64 20 69 73 20 6e 6f 74 20 69 6e 63  mmand is not inc
10ae0 6c 75 64 65 64 20 69 6e 20 74 68 65 20 6c 69 62  luded in the lib
10af0 72 61 72 79 2e 0a 20 20 45 78 65 63 75 74 69 6e  rary..  Executin
10b00 67 20 61 20 5b 56 41 43 55 55 4d 5d 20 73 74 61  g a [VACUUM] sta
10b10 74 65 6d 65 6e 74 20 63 61 75 73 65 73 20 0a 20  tement causes . 
10b20 20 61 20 70 61 72 73 65 20 65 72 72 6f 72 2e 0a   a parse error..
10b30 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f  }..COMPILE_OPTIO
10b40 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  N {SQLITE_OMIT_V
10b50 49 45 57 7d 20 7b 0a 20 20 44 65 66 69 6e 69 6e  IEW} {.  Definin
10b60 67 20 74 68 69 73 20 6f 70 74 69 6f 6e 20 6f 6d  g this option om
10b70 69 74 73 20 73 75 70 70 6f 72 74 20 66 6f 72 20  its support for 
10b80 56 49 45 57 20 6f 62 6a 65 63 74 73 2e 20 4e 65  VIEW objects. Ne
10b90 69 74 68 65 72 20 74 68 65 20 0a 20 20 5b 43 52  ither the .  [CR
10ba0 45 41 54 45 20 56 49 45 57 5d 20 6e 6f 72 20 74  EATE VIEW] nor t
10bb0 68 65 20 5b 44 52 4f 50 20 56 49 45 57 5d 0a 20  he [DROP VIEW]. 
10bc0 20 63 6f 6d 6d 61 6e 64 73 20 61 72 65 20 61 76   commands are av
10bd0 61 69 6c 61 62 6c 65 20 69 6e 20 74 68 69 73 20  ailable in this 
10be0 63 61 73 65 2c 20 61 6e 64 0a 20 20 61 74 74 65  case, and.  atte
10bf0 6d 70 74 69 6e 67 20 74 6f 20 65 78 65 63 75 74  mpting to execut
10c00 65 20 65 69 74 68 65 72 20 77 69 6c 6c 20 72 65  e either will re
10c10 73 75 6c 74 20 69 6e 20 61 20 70 61 72 73 65 20  sult in a parse 
10c20 65 72 72 6f 72 2e 0a 0a 20 20 57 41 52 4e 49 4e  error...  WARNIN
10c30 47 3a 20 49 66 20 74 68 69 73 20 6d 61 63 72 6f  G: If this macro
10c40 20 69 73 20 64 65 66 69 6e 65 64 2c 20 69 74 20   is defined, it 
10c50 77 69 6c 6c 20 6e 6f 74 20 62 65 20 70 6f 73 73  will not be poss
10c60 69 62 6c 65 20 74 6f 20 6f 70 65 6e 20 61 20 64  ible to open a d
10c70 61 74 61 62 61 73 65 0a 20 20 66 6f 72 20 77 68  atabase.  for wh
10c80 69 63 68 20 74 68 65 20 73 63 68 65 6d 61 20 63  ich the schema c
10c90 6f 6e 74 61 69 6e 73 20 56 49 45 57 20 6f 62 6a  ontains VIEW obj
10ca0 65 63 74 73 2e 20 0a 7d 0a 0a 43 4f 4d 50 49 4c  ects. .}..COMPIL
10cb0 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45  E_OPTION {SQLITE
10cc0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
10cd0 4c 45 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70 74  LE} {.  This opt
10ce0 69 6f 6e 20 6f 6d 69 74 73 20 73 75 70 70 6f 72  ion omits suppor
10cf0 74 20 66 6f 72 20 74 68 65 20 5b 73 71 6c 69 74  t for the [sqlit
10d00 65 33 5f 76 74 61 62 20 7c 20 56 69 72 74 75 61  e3_vtab | Virtua
10d10 6c 20 54 61 62 6c 65 5d 0a 20 20 6d 65 63 68 61  l Table].  mecha
10d20 6e 69 73 6d 20 69 6e 20 53 51 4c 69 74 65 2e 0a  nism in SQLite..
10d30 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f  }..COMPILE_OPTIO
10d40 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  N {SQLITE_OMIT_W
10d50 41 4c 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70 74  AL} {.  This opt
10d60 69 6f 6e 20 6f 6d 69 74 73 20 74 68 65 20 22 5b  ion omits the "[
10d70 77 72 69 74 65 2d 61 68 65 61 64 20 6c 6f 67 5d  write-ahead log]
10d80 22 20 28 61 2e 6b 2e 61 2e 20 22 5b 57 41 4c 5d  " (a.k.a. "[WAL]
10d90 22 29 20 63 61 70 61 62 69 6c 69 74 79 2e 0a 7d  ") capability..}
10da0 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e  ..COMPILE_OPTION
10db0 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53   {SQLITE_OMIT_WS
10dc0 44 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70 74 69  D} {.  This opti
10dd0 6f 6e 20 62 75 69 6c 64 73 20 61 20 76 65 72 73  on builds a vers
10de0 69 6f 6e 20 6f 66 20 74 68 65 20 53 51 4c 69 74  ion of the SQLit
10df0 65 20 6c 69 62 72 61 72 79 20 74 68 61 74 20 63  e library that c
10e00 6f 6e 74 61 69 6e 73 20 6e 6f 0a 20 20 57 72 69  ontains no.  Wri
10e10 74 61 62 6c 65 20 53 74 61 74 69 63 20 44 61 74  table Static Dat
10e20 61 20 28 57 53 44 29 2e 20 20 57 53 44 20 69 73  a (WSD).  WSD is
10e30 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65   global variable
10e40 73 20 61 6e 64 2f 6f 72 20 73 74 61 74 69 63 0a  s and/or static.
10e50 20 20 76 61 72 69 61 62 6c 65 73 2e 20 20 53 6f    variables.  So
10e60 6d 65 20 70 6c 61 74 66 6f 72 6d 73 20 64 6f 20  me platforms do 
10e70 6e 6f 74 20 73 75 70 70 6f 72 74 20 57 53 44 2c  not support WSD,
10e80 20 61 6e 64 20 74 68 69 73 20 6f 70 74 69 6f 6e   and this option
10e90 20 69 73 20 6e 65 63 65 73 73 61 72 79 0a 20 20   is necessary.  
10ea0 69 6e 20 6f 72 64 65 72 20 66 6f 72 20 53 51 4c  in order for SQL
10eb0 69 74 65 20 74 6f 20 77 6f 72 6b 20 74 68 6f 73  ite to work thos
10ec0 65 20 70 6c 61 74 66 6f 72 6d 73 2e 20 20 0a 0a  e platforms.  ..
10ed0 20 20 55 6e 6c 69 6b 65 20 6f 74 68 65 72 20 4f    Unlike other O
10ee0 4d 49 54 20 6f 70 74 69 6f 6e 73 20 77 68 69 63  MIT options whic
10ef0 68 20 6d 61 6b 65 20 74 68 65 20 53 51 4c 69 74  h make the SQLit
10f00 65 20 6c 69 62 72 61 72 79 20 73 6d 61 6c 6c 65  e library smalle
10f10 72 2c 0a 20 20 74 68 69 73 20 6f 70 74 69 6f 6e  r,.  this option
10f20 20 61 63 74 75 61 6c 6c 79 20 69 6e 63 72 65 61   actually increa
10f30 73 65 73 20 74 68 65 20 73 69 7a 65 20 6f 66 20  ses the size of 
10f40 53 51 4c 69 74 65 20 61 6e 64 20 6d 61 6b 65 73  SQLite and makes
10f50 20 69 74 20 72 75 6e 0a 20 20 61 20 6c 69 74 74   it run.  a litt
10f60 6c 65 20 73 6c 6f 77 65 72 2e 20 20 4f 6e 6c 79  le slower.  Only
10f70 20 75 73 65 20 74 68 69 73 20 6f 70 74 69 6f 6e   use this option
10f80 20 69 66 20 53 51 4c 69 74 65 20 69 73 20 62 65   if SQLite is be
10f90 69 6e 67 20 62 75 69 6c 74 20 66 6f 72 20 61 6e  ing built for an
10fa0 0a 20 20 65 6d 62 65 64 64 65 64 20 74 61 72 67  .  embedded targ
10fb0 65 74 20 74 68 61 74 20 64 6f 65 73 20 6e 6f 74  et that does not
10fc0 20 73 75 70 70 6f 72 74 20 57 53 44 2e 0a 7d 0a   support WSD..}.
10fd0 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20  .COMPILE_OPTION 
10fe0 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 58 46 45  {SQLITE_OMIT_XFE
10ff0 52 5f 4f 50 54 7d 20 7b 0a 20 20 54 68 69 73 20  R_OPT} {.  This 
11000 6f 70 74 69 6f 6e 20 6f 6d 69 74 73 20 73 75 70  option omits sup
11010 70 6f 72 74 20 66 6f 72 20 6f 70 74 69 6d 69 7a  port for optimiz
11020 61 74 69 6f 6e 73 20 74 68 61 74 20 68 65 6c 70  ations that help
11030 20 73 74 61 74 65 6d 65 6e 74 73 0a 20 20 6f 66   statements.  of
11040 20 74 68 65 20 66 6f 72 6d 20 22 49 4e 53 45 52   the form "INSER
11050 54 20 49 4e 54 4f 20 2e 2e 2e 20 53 45 4c 45 43  T INTO ... SELEC
11060 54 20 2e 2e 2e 22 20 72 75 6e 20 66 61 73 74 65  T ..." run faste
11070 72 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50  r..}..COMPILE_OP
11080 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 55 4e 54  TION {SQLITE_UNT
11090 45 53 54 41 42 4c 45 7d 20 7b 0a 20 20 41 20 73  ESTABLE} {.  A s
110a0 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 62  tandard SQLite b
110b0 75 69 6c 64 20 69 6e 63 6c 75 64 65 73 20 61 20  uild includes a 
110c0 73 6d 61 6c 6c 20 61 6d 6f 75 6e 74 20 6f 66 20  small amount of 
110d0 6c 6f 67 69 63 20 61 73 73 6f 63 69 61 74 65 64  logic associated
110e0 0a 20 20 77 69 74 68 20 5b 73 71 6c 69 74 65 33  .  with [sqlite3
110f0 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 29 5d  _test_control()]
11100 20 74 6f 20 65 78 65 72 63 69 73 65 0a 20 20 70   to exercise.  p
11110 61 72 74 73 20 6f 66 20 74 68 65 20 53 51 4c 69  arts of the SQLi
11120 74 65 20 63 6f 72 65 20 74 68 61 74 20 61 72 65  te core that are
11130 20 6f 74 68 65 72 77 69 73 65 20 64 69 66 66 69   otherwise diffi
11140 63 75 6c 74 20 74 6f 20 76 61 6c 69 64 61 74 65  cult to validate
11150 2e 0a 20 20 54 68 69 73 20 63 6f 6d 70 69 6c 65  ..  This compile
11160 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 6f 6d 69  -time option omi
11170 74 73 20 74 68 61 74 20 65 78 74 72 61 20 74 65  ts that extra te
11180 73 74 69 6e 67 20 6c 6f 67 69 63 2e 20 20 54 68  sting logic.  Th
11190 69 73 0a 20 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  is.  compile-tim
111a0 65 20 6f 70 74 69 6f 6e 20 77 61 73 20 63 61 6c  e option was cal
111b0 6c 65 64 20 22 53 51 4c 49 54 45 5f 4f 4d 49 54  led "SQLITE_OMIT
111c0 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 22 20 70  _BUILTIN_TEST" p
111d0 72 69 6f 72 0a 20 20 74 6f 20 53 51 4c 69 74 65  rior.  to SQLite
111e0 20 76 65 72 73 69 6f 6e 20 33 2e 31 36 2e 30 20   version 3.16.0 
111f0 28 5b 64 61 74 65 6f 66 3a 33 2e 31 36 2e 30 5d  ([dateof:3.16.0]
11200 29 2e 20 20 54 68 65 20 6e 61 6d 65 20 77 61 73  ).  The name was
11210 20 63 68 61 6e 67 65 64 0a 20 20 74 6f 20 62 65   changed.  to be
11220 74 74 65 72 20 64 65 73 63 72 69 62 65 20 74 68  tter describe th
11230 65 20 69 6d 70 6c 69 63 61 74 69 6f 6e 73 20 6f  e implications o
11240 66 20 75 73 69 6e 67 20 69 74 2e 0a 20 20 3c 70  f using it..  <p
11250 3e 0a 20 20 53 65 74 74 69 6e 67 20 74 68 69 73  >.  Setting this
11260 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70   compile-time op
11270 74 69 6f 6e 20 70 72 65 76 65 6e 74 73 20 53 51  tion prevents SQ
11280 4c 69 74 65 20 66 72 6f 6d 20 62 65 69 6e 67 20  Lite from being 
11290 66 75 6c 6c 79 0a 20 20 74 65 73 74 61 62 6c 65  fully.  testable
112a0 2e 20 20 42 72 61 6e 63 68 20 74 65 73 74 20 63  .  Branch test c
112b0 6f 76 65 72 61 67 65 20 64 72 6f 70 73 20 66 72  overage drops fr
112c0 6f 6d 20 31 30 30 25 20 64 6f 77 6e 20 74 6f 20  om 100% down to 
112d0 61 62 6f 75 74 20 39 35 25 2e 0a 20 20 3c 70 3e  about 95%..  <p>
112e0 0a 20 20 53 51 4c 69 74 65 20 64 65 76 65 6c 6f  .  SQLite develo
112f0 70 65 72 73 20 66 6f 6c 6c 6f 77 20 74 68 65 20  pers follow the 
11300 4e 41 53 41 20 70 72 69 6e 63 69 70 6c 65 20 6f  NASA principle o
11310 66 0a 20 20 22 66 6c 79 20 77 68 61 74 20 79 6f  f.  "fly what yo
11320 75 20 74 65 73 74 20 61 6e 64 20 74 65 73 74 20  u test and test 
11330 77 68 61 74 20 79 6f 75 20 66 6c 79 22 2e 20 20  what you fly".  
11340 54 68 69 73 20 70 72 69 6e 63 69 70 6c 65 20 69  This principle i
11350 73 20 76 69 6f 6c 61 74 65 64 0a 20 20 69 66 20  s violated.  if 
11360 74 68 69 73 20 6f 70 74 69 6f 6e 20 69 73 20 65  this option is e
11370 6e 61 62 6c 65 64 20 66 6f 72 20 64 65 6c 69 76  nabled for deliv
11380 65 72 79 20 62 75 74 20 64 69 73 61 62 6c 65 64  ery but disabled
11390 20 66 6f 72 20 74 65 73 74 69 6e 67 2e 0a 20 20   for testing..  
113a0 42 75 74 20 69 66 20 74 68 69 73 20 6f 70 74 69  But if this opti
113b0 6f 6e 20 69 73 20 65 6e 61 62 6c 65 64 20 64 75  on is enabled du
113c0 72 69 6e 67 20 74 65 73 74 69 6e 67 2c 20 6e 6f  ring testing, no
113d0 74 20 61 6c 6c 20 62 72 61 6e 63 68 65 73 20 61  t all branches a
113e0 72 65 20 0a 20 20 72 65 61 63 68 61 62 6c 65 2e  re .  reachable.
113f0 20 20 54 68 65 72 65 66 6f 72 65 2c 20 74 68 65    Therefore, the
11400 20 75 73 65 20 6f 66 20 74 68 69 73 20 63 6f 6d   use of this com
11410 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
11420 20 69 73 20 64 69 73 63 6f 75 72 61 67 65 64 2e   is discouraged.
11430 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49  .}..COMPILE_OPTI
11440 4f 4e 20 7b 53 51 4c 49 54 45 5f 5a 45 52 4f 5f  ON {SQLITE_ZERO_
11450 4d 41 4c 4c 4f 43 7d 20 7b 0a 20 20 54 68 69 73  MALLOC} {.  This
11460 20 6f 70 74 69 6f 6e 20 6f 6d 69 74 73 20 62 6f   option omits bo
11470 74 68 20 74 68 65 20 5b 64 65 66 61 75 6c 74 20  th the [default 
11480 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 6f 72  memory allocator
11490 5d 20 61 6e 64 20 74 68 65 0a 20 20 5b 64 65 62  ] and the.  [deb
114a0 75 67 67 69 6e 67 20 6d 65 6d 6f 72 79 20 61 6c  ugging memory al
114b0 6c 6f 63 61 74 6f 72 5d 20 66 72 6f 6d 20 74 68  locator] from th
114c0 65 20 62 75 69 6c 64 20 61 6e 64 20 73 75 62 73  e build and subs
114d0 74 69 74 75 74 65 73 20 61 20 73 74 75 62 0a 20  titutes a stub. 
114e0 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 6f   memory allocato
114f0 72 20 74 68 61 74 20 61 6c 77 61 79 73 20 66 61  r that always fa
11500 69 6c 73 2e 20 20 53 51 4c 69 74 65 20 77 69 6c  ils.  SQLite wil
11510 6c 20 6e 6f 74 20 72 75 6e 20 77 69 74 68 20 74  l not run with t
11520 68 69 73 0a 20 20 73 74 75 62 20 6d 65 6d 6f 72  his.  stub memor
11530 79 20 61 6c 6c 6f 63 61 74 6f 72 20 73 69 6e 63  y allocator sinc
11540 65 20 69 74 20 77 69 6c 6c 20 62 65 20 75 6e 61  e it will be una
11550 62 6c 65 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20  ble to allocate 
11560 6d 65 6d 6f 72 79 2e 20 20 42 75 74 0a 20 20 74  memory.  But.  t
11570 68 69 73 20 73 74 75 62 20 63 61 6e 20 62 65 20  his stub can be 
11580 72 65 70 6c 61 63 65 64 20 61 74 20 73 74 61 72  replaced at star
11590 74 2d 74 69 6d 65 20 75 73 69 6e 67 0a 20 20 5b  t-time using.  [
115a0 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 5d 28  sqlite3_config](
115b0 5b 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4d  [SQLITE_CONFIG_M
115c0 41 4c 4c 4f 43 5d 2c 2e 2e 2e 29 20 6f 72 0a 20  ALLOC],...) or. 
115d0 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67   [sqlite3_config
115e0 5d 28 5b 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47  ]([SQLITE_CONFIG
115f0 5f 48 45 41 50 5d 2c 2e 2e 2e 29 2e 0a 20 20 53  _HEAP],...)..  S
11600 6f 20 74 68 65 20 6e 65 74 20 65 66 66 65 63 74  o the net effect
11610 20 6f 66 20 74 68 69 73 20 63 6f 6d 70 69 6c 65   of this compile
11620 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20  -time option is 
11630 74 68 61 74 20 69 74 20 61 6c 6c 6f 77 73 20 53  that it allows S
11640 51 4c 69 74 65 0a 20 20 74 6f 20 62 65 20 63 6f  QLite.  to be co
11650 6d 70 69 6c 65 64 20 61 6e 64 20 6c 69 6e 6b 65  mpiled and linke
11660 64 20 61 67 61 69 6e 73 74 20 61 20 73 79 73 74  d against a syst
11670 65 6d 20 6c 69 62 72 61 72 79 20 74 68 61 74 20  em library that 
11680 64 6f 65 73 20 6e 6f 74 20 73 75 70 70 6f 72 74  does not support
11690 0a 20 20 6d 61 6c 6c 6f 63 28 29 2c 20 66 72 65  .  malloc(), fre
116a0 65 28 29 2c 20 61 6e 64 2f 6f 72 20 72 65 61 6c  e(), and/or real
116b0 6c 6f 63 28 29 2e 0a 7d 0a 0a 3c 2f 74 63 6c 3e  loc()..}..</tcl>
116c0 0a 3c 61 20 6e 61 6d 65 3d 22 64 65 62 75 67 6f  .<a name="debugo
116d0 70 74 69 6f 6e 73 22 3e 3c 2f 61 3e 0a 3c 68 31  ptions"></a>.<h1
116e0 3e 20 41 6e 61 6c 79 73 69 73 20 61 6e 64 20 44  > Analysis and D
116f0 65 62 75 67 67 69 6e 67 20 4f 70 74 69 6f 6e 73  ebugging Options
11700 3c 2f 68 31 3e 0a 3c 74 63 6c 3e 0a 0a 43 4f 4d  </h1>.<tcl>..COM
11710 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c  PILE_OPTION {SQL
11720 49 54 45 5f 44 45 42 55 47 7d 20 7b 0a 20 20 54  ITE_DEBUG} {.  T
11730 68 65 20 53 51 4c 69 74 65 20 73 6f 75 72 63 65  he SQLite source
11740 20 63 6f 64 65 20 63 6f 6e 74 61 69 6e 73 20 6c   code contains l
11750 69 74 65 72 61 6c 6c 79 20 74 68 6f 75 73 61 6e  iterally thousan
11760 64 73 20 6f 66 20 61 73 73 65 72 74 28 29 20 73  ds of assert() s
11770 74 61 74 65 6d 65 6e 74 73 0a 20 20 75 73 65 64  tatements.  used
11780 20 74 6f 20 76 65 72 69 66 79 20 69 6e 74 65 72   to verify inter
11790 6e 61 6c 20 61 73 73 75 6d 70 74 69 6f 6e 73 20  nal assumptions 
117a0 61 6e 64 20 73 75 62 72 6f 75 74 69 6e 65 20 70  and subroutine p
117b0 72 65 63 6f 6e 64 69 74 69 6f 6e 73 20 61 6e 64  reconditions and
117c0 0a 20 20 70 6f 73 74 63 6f 6e 64 69 74 69 6f 6e  .  postcondition
117d0 73 2e 20 20 54 68 65 73 65 20 61 73 73 65 72 74  s.  These assert
117e0 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20 61 72  () statements ar
117f0 65 20 6e 6f 72 6d 61 6c 6c 79 20 74 75 72 6e 65  e normally turne
11800 64 20 6f 66 66 0a 20 20 28 74 68 65 79 20 67 65  d off.  (they ge
11810 6e 65 72 61 74 65 20 6e 6f 20 63 6f 64 65 29 20  nerate no code) 
11820 73 69 6e 63 65 20 74 75 72 6e 69 6e 67 20 74 68  since turning th
11830 65 6d 20 6f 6e 20 6d 61 6b 65 73 20 53 51 4c 69  em on makes SQLi
11840 74 65 20 72 75 6e 20 61 70 70 72 6f 78 69 6d 61  te run approxima
11850 74 65 6c 79 0a 20 20 74 68 72 65 65 20 74 69 6d  tely.  three tim
11860 65 73 20 73 6c 6f 77 65 72 2e 20 20 42 75 74 20  es slower.  But 
11870 66 6f 72 20 74 65 73 74 69 6e 67 20 61 6e 64 20  for testing and 
11880 61 6e 61 6c 79 73 69 73 2c 20 69 74 20 69 73 20  analysis, it is 
11890 75 73 65 66 75 6c 20 74 6f 20 74 75 72 6e 0a 20  useful to turn. 
118a0 20 74 68 65 20 61 73 73 65 72 74 28 29 20 73 74   the assert() st
118b0 61 74 65 6d 65 6e 74 73 20 6f 6e 2e 20 20 54 68  atements on.  Th
118c0 65 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 63  e SQLITE_DEBUG c
118d0 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69  ompile-time opti
118e0 6f 6e 20 64 6f 65 73 20 74 68 69 73 2e 0a 20 20  on does this..  
118f0 3c 70 3e 53 51 4c 49 54 45 5f 44 45 42 55 47 20  <p>SQLITE_DEBUG 
11900 61 6c 73 6f 20 65 6e 61 62 6c 65 73 20 73 6f 6d  also enables som
11910 65 20 6f 74 68 65 72 20 64 65 62 75 67 67 69 6e  e other debuggin
11920 67 20 66 65 61 74 75 72 65 73 2c 20 73 75 63 68  g features, such
11930 20 61 73 0a 20 20 73 70 65 63 69 61 6c 20 5b 50   as.  special [P
11940 52 41 47 4d 41 5d 20 73 74 61 74 65 6d 65 6e 74  RAGMA] statement
11950 73 20 74 68 61 74 20 74 75 72 6e 20 6f 6e 20 74  s that turn on t
11960 72 61 63 69 6e 67 20 61 6e 64 20 6c 69 73 74 69  racing and listi
11970 6e 67 20 66 65 61 74 75 72 65 73 0a 20 20 75 73  ng features.  us
11980 65 64 20 66 6f 72 20 74 72 6f 75 62 6c 65 73 68  ed for troublesh
11990 6f 6f 74 69 6e 67 20 61 6e 64 20 61 6e 61 6c 79  ooting and analy
119a0 73 69 73 20 6f 66 20 74 68 65 20 5b 56 44 42 45  sis of the [VDBE
119b0 5d 20 61 6e 64 20 63 6f 64 65 20 67 65 6e 65 72  ] and code gener
119c0 61 74 6f 72 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45  ator..}..COMPILE
119d0 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f  _OPTION {SQLITE_
119e0 4d 45 4d 44 45 42 55 47 7d 20 7b 0a 20 20 54 68  MEMDEBUG} {.  Th
119f0 65 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  e SQLITE_MEMDEBU
11a00 47 20 6f 70 74 69 6f 6e 20 63 61 75 73 65 73 20  G option causes 
11a10 61 6e 20 69 6e 73 74 72 75 6d 65 6e 74 65 64 20  an instrumented 
11a20 0a 20 20 5b 64 65 62 75 67 67 69 6e 67 20 6d 65  .  [debugging me
11a30 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 6f 72 5d 0a  mory allocator].
11a40 20 20 74 6f 20 62 65 20 75 73 65 64 20 61 73 20    to be used as 
11a50 74 68 65 20 64 65 66 61 75 6c 74 20 6d 65 6d 6f  the default memo
11a60 72 79 20 61 6c 6c 6f 63 61 74 6f 72 20 77 69 74  ry allocator wit
11a70 68 69 6e 20 53 51 4c 69 74 65 2e 20 20 54 68 65  hin SQLite.  The
11a80 0a 20 20 69 6e 73 74 72 75 6d 65 6e 74 65 64 20  .  instrumented 
11a90 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 6f 72  memory allocator
11aa0 20 63 68 65 63 6b 73 20 66 6f 72 20 6d 69 73 75   checks for misu
11ab0 73 65 20 6f 66 20 64 79 6e 61 6d 69 63 61 6c 6c  se of dynamicall
11ac0 79 20 61 6c 6c 6f 63 61 74 65 64 0a 20 20 6d 65  y allocated.  me
11ad0 6d 6f 72 79 2e 20 20 45 78 61 6d 70 6c 65 73 20  mory.  Examples 
11ae0 6f 66 20 6d 69 73 75 73 65 20 69 6e 63 6c 75 64  of misuse includ
11af0 65 20 75 73 69 6e 67 20 6d 65 6d 6f 72 79 20 61  e using memory a
11b00 66 74 65 72 20 69 74 20 69 73 20 66 72 65 65 64  fter it is freed
11b10 2c 0a 20 20 77 72 69 74 69 6e 67 20 6f 66 66 20  ,.  writing off 
11b20 74 68 65 20 65 6e 64 73 20 6f 66 20 61 20 6d 65  the ends of a me
11b30 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2c  mory allocation,
11b40 20 66 72 65 65 69 6e 67 20 6d 65 6d 6f 72 79 20   freeing memory 
11b50 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 0a 20  not previously. 
11b60 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 74   obtained from t
11b70 68 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  he memory alloca
11b80 74 6f 72 2c 20 6f 72 20 66 61 69 6c 69 6e 67 20  tor, or failing 
11b90 74 6f 20 69 6e 69 74 69 61 6c 69 7a 65 20 6e 65  to initialize ne
11ba0 77 6c 79 0a 20 20 61 6c 6c 6f 63 61 74 65 64 20  wly.  allocated 
11bb0 6d 65 6d 6f 72 79 2e 0a 7d 0a 0a 3c 2f 74 63 6c  memory..}..</tcl
11bc0 3e 0a 3c 61 20 6e 61 6d 65 3d 22 77 69 6e 33 32  >.<a name="win32
11bd0 6f 70 74 69 6f 6e 73 22 3e 3c 2f 61 3e 0a 3c 68  options"></a>.<h
11be0 31 3e 20 57 69 6e 64 6f 77 73 2d 53 70 65 63 69  1> Windows-Speci
11bf0 66 69 63 20 4f 70 74 69 6f 6e 73 3c 2f 68 31 3e  fic Options</h1>
11c00 0a 3c 74 63 6c 3e 0a 0a 43 4f 4d 50 49 4c 45 5f  .<tcl>..COMPILE_
11c10 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 57  OPTION {SQLITE_W
11c20 49 4e 33 32 5f 48 45 41 50 5f 43 52 45 41 54 45  IN32_HEAP_CREATE
11c30 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70 74 69 6f  } {.  This optio
11c40 6e 20 66 6f 72 63 65 73 20 74 68 65 20 57 69 6e  n forces the Win
11c50 33 32 20 6e 61 74 69 76 65 20 6d 65 6d 6f 72 79  32 native memory
11c60 20 61 6c 6c 6f 63 61 74 6f 72 2c 20 77 68 65 6e   allocator, when
11c70 20 65 6e 61 62 6c 65 64 2c 20 74 6f 0a 20 20 63   enabled, to.  c
11c80 72 65 61 74 65 20 61 20 70 72 69 76 61 74 65 20  reate a private 
11c90 68 65 61 70 20 74 6f 20 68 6f 6c 64 20 61 6c 6c  heap to hold all
11ca0 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
11cb0 6f 6e 73 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f  ons..}..COMPILE_
11cc0 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 57  OPTION {SQLITE_W
11cd0 49 4e 33 32 5f 4d 41 4c 4c 4f 43 5f 56 41 4c 49  IN32_MALLOC_VALI
11ce0 44 41 54 45 7d 20 7b 0a 20 20 54 68 69 73 20 6f  DATE} {.  This o
11cf0 70 74 69 6f 6e 20 66 6f 72 63 65 73 20 74 68 65  ption forces the
11d00 20 57 69 6e 33 32 20 6e 61 74 69 76 65 20 6d 65   Win32 native me
11d10 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 6f 72 2c 20  mory allocator, 
11d20 77 68 65 6e 20 65 6e 61 62 6c 65 64 2c 20 74 6f  when enabled, to
11d30 0a 20 20 6d 61 6b 65 20 73 74 72 61 74 65 67 69  .  make strategi
11d40 63 20 63 61 6c 6c 73 20 69 6e 74 6f 20 74 68 65  c calls into the
11d50 20 48 65 61 70 56 61 6c 69 64 61 74 65 28 29 20   HeapValidate() 
11d60 66 75 6e 63 74 69 6f 6e 20 69 66 20 61 73 73 65  function if asse
11d70 72 74 28 29 20 69 73 20 61 6c 73 6f 0a 20 20 65  rt() is also.  e
11d80 6e 61 62 6c 65 64 2e 0a 7d 0a 0a 3c 2f 74 63 6c  nabled..}..</tcl
11d90 3e 0a 3c 61 20 6e 61 6d 65 3d 22 6c 69 6e 6b 61  >.<a name="linka
11da0 67 65 22 3e 3c 2f 61 3e 0a 3c 68 31 3e 43 6f 6d  ge"></a>.<h1>Com
11db0 70 69 6c 65 72 20 4c 69 6e 6b 61 67 65 20 43 6f  piler Linkage Co
11dc0 6e 74 72 6f 6c 3c 2f 68 31 3e 0a 0a 3c 70 3e 54  ntrol</h1>..<p>T
11dd0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63  he following mac
11de0 72 6f 73 20 73 70 65 63 69 66 79 0a 69 6e 74 65  ros specify.inte
11df0 72 66 61 63 65 20 6c 69 6e 6b 61 67 65 20 66 6f  rface linkage fo
11e00 72 20 63 65 72 74 61 69 6e 20 6b 69 6e 64 73 20  r certain kinds 
11e10 6f 66 20 53 51 4c 69 74 65 20 62 75 69 6c 64 73  of SQLite builds
11e20 2e 20 20 54 68 65 20 4d 61 6b 65 66 69 6c 65 73  .  The Makefiles
11e30 20 77 69 6c 6c 20 6e 6f 72 6d 61 6c 6c 79 0a 68   will normally.h
11e40 61 6e 64 6c 65 20 73 65 74 74 69 6e 67 20 74 68  andle setting th
11e50 65 73 65 20 6d 61 63 72 6f 73 20 61 75 74 6f 6d  ese macros autom
11e60 61 74 69 63 61 6c 6c 79 2e 20 20 41 70 70 6c 69  atically.  Appli
11e70 63 61 74 69 6f 6e 20 64 65 76 65 6c 6f 70 65 72  cation developer
11e80 73 20 73 68 6f 75 6c 64 0a 6e 6f 74 20 6e 65 65  s should.not nee
11e90 64 20 74 6f 20 77 6f 72 72 79 20 77 69 74 68 20  d to worry with 
11ea0 74 68 65 73 65 20 6d 61 63 72 6f 73 2e 20 20 54  these macros.  T
11eb0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 64 6f 63  he following doc
11ec0 75 6d 65 6e 74 61 74 69 6f 6e 20 61 62 6f 75 74  umentation about
11ed0 20 74 68 65 73 65 20 0a 6d 61 63 72 6f 73 20 69   these .macros i
11ee0 73 20 69 6e 63 6c 75 64 65 64 20 63 6f 6d 70 6c  s included compl
11ef0 65 74 65 6e 65 73 73 2e 3c 2f 70 3e 0a 0a 3c 74  eteness.</p>..<t
11f00 63 6c 3e 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49  cl>.COMPILE_OPTI
11f10 4f 4e 20 7b 53 51 4c 49 54 45 5f 41 50 49 7d 20  ON {SQLITE_API} 
11f20 7b 0a 20 20 54 68 69 73 20 6d 61 63 72 6f 20 69  {.  This macro i
11f30 64 65 6e 74 69 66 69 65 73 20 61 20 65 78 74 65  dentifies a exte
11f40 72 6e 61 6c 6c 79 20 76 69 73 69 62 6c 65 20 69  rnally visible i
11f50 6e 74 65 72 66 61 63 65 20 66 6f 72 20 53 51 4c  nterface for SQL
11f60 69 74 65 2e 0a 20 20 54 68 69 73 20 6d 61 63 72  ite..  This macr
11f70 6f 20 69 73 20 73 6f 6d 65 74 69 6d 65 73 20 73  o is sometimes s
11f80 65 74 20 74 6f 20 22 65 78 74 65 72 6e 22 2e 20  et to "extern". 
11f90 20 42 75 74 20 74 68 65 20 64 65 66 69 6e 69 74   But the definit
11fa0 69 6f 6e 20 69 73 0a 20 20 63 6f 6d 70 69 6c 65  ion is.  compile
11fb0 72 2d 73 70 65 63 69 66 69 63 2e 0a 7d 0a 0a 43  r-specific..}..C
11fc0 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53  OMPILE_OPTION {S
11fd0 51 4c 49 54 45 5f 41 50 49 43 41 4c 4c 7d 20 7b  QLITE_APICALL} {
11fe0 0a 20 20 54 68 69 73 20 6d 61 63 72 6f 20 69 64  .  This macro id
11ff0 65 6e 74 69 66 69 65 73 20 74 68 65 20 63 61 6c  entifies the cal
12000 6c 69 6e 67 20 63 6f 6e 76 65 6e 74 69 6f 6e 20  ling convention 
12010 75 73 65 64 20 62 79 20 70 75 62 6c 69 63 20 69  used by public i
12020 6e 74 65 72 66 61 63 65 0a 20 20 72 6f 75 74 69  nterface.  routi
12030 6e 65 73 20 69 6e 20 53 51 4c 69 74 65 2e 20 20  nes in SQLite.  
12040 54 68 69 73 20 6d 61 63 72 6f 20 69 73 20 6e 6f  This macro is no
12050 72 6d 61 6c 6c 79 20 64 65 66 69 6e 65 64 20 74  rmally defined t
12060 6f 20 62 65 20 6e 6f 74 68 69 6e 67 2c 0a 20 20  o be nothing,.  
12070 74 68 6f 75 67 68 20 6f 6e 20 57 69 6e 64 6f 77  though on Window
12080 73 20 62 75 69 6c 64 73 20 69 74 20 63 61 6e 20  s builds it can 
12090 73 6f 6d 65 74 69 6d 65 73 20 62 65 20 73 65 74  sometimes be set
120a0 20 74 6f 20 22 5f 5f 63 64 65 63 6c 22 20 6f 72   to "__cdecl" or
120b0 20 22 5f 5f 73 74 64 63 61 6c 6c 22 2e 0a 20 20   "__stdcall"..  
120c0 54 68 65 20 22 5f 5f 63 64 65 63 6c 22 20 73 65  The "__cdecl" se
120d0 74 74 69 6e 67 20 69 73 20 74 68 65 20 64 65 66  tting is the def
120e0 61 75 6c 74 2c 20 62 75 74 20 22 5f 5f 73 74 64  ault, but "__std
120f0 63 61 6c 6c 22 20 69 73 20 75 73 65 64 20 77 68  call" is used wh
12100 65 6e 20 53 51 4c 69 74 65 0a 20 20 69 73 20 69  en SQLite.  is i
12110 6e 74 65 6e 64 65 64 20 74 6f 20 62 65 20 63 6f  ntended to be co
12120 6d 70 69 6c 65 64 20 61 73 20 61 20 57 69 6e 64  mpiled as a Wind
12130 6f 77 73 20 73 79 73 74 65 6d 20 6c 69 62 72 61  ows system libra
12140 72 79 2e 0a 20 20 3c 70 3e 0a 20 20 41 20 73 69  ry..  <p>.  A si
12150 6e 67 6c 65 20 66 75 6e 63 74 69 6f 6e 20 64 65  ngle function de
12160 63 6c 61 72 61 74 69 6f 6e 20 73 68 6f 75 6c 64  claration should
12170 20 63 6f 6e 74 61 69 6e 20 6e 6f 20 6d 6f 72 65   contain no more
12180 20 74 68 61 6e 20 6f 6e 65 20 6f 66 0a 20 20 74   than one of.  t
12190 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 3a 20 20 5b  he following:  [
121a0 53 51 4c 49 54 45 5f 41 50 49 43 41 4c 4c 5d 2c  SQLITE_APICALL],
121b0 20 5b 53 51 4c 49 54 45 5f 43 41 4c 4c 42 41 43   [SQLITE_CALLBAC
121c0 4b 5d 2c 20 5b 53 51 4c 49 54 45 5f 43 44 45 43  K], [SQLITE_CDEC
121d0 4c 5d 2c 0a 20 20 6f 72 20 5b 53 51 4c 49 54 45  L],.  or [SQLITE
121e0 5f 53 59 53 43 41 4c 4c 5d 2e 0a 7d 0a 0a 43 4f  _SYSCALL]..}..CO
121f0 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51  MPILE_OPTION {SQ
12200 4c 49 54 45 5f 43 41 4c 4c 42 41 43 4b 7d 20 7b  LITE_CALLBACK} {
12210 0a 20 20 54 68 69 73 20 6d 61 63 72 6f 20 73 70  .  This macro sp
12220 65 63 69 66 69 65 73 20 74 68 65 20 63 61 6c 6c  ecifies the call
12230 69 6e 67 20 63 6f 6e 76 65 6e 74 69 6f 6e 20 75  ing convention u
12240 73 65 64 20 62 79 20 63 61 6c 6c 62 61 63 6b 20  sed by callback 
12250 70 6f 69 6e 74 65 72 73 0a 20 20 69 6e 20 53 51  pointers.  in SQ
12260 4c 69 74 65 2e 20 20 54 68 69 73 20 6d 61 63 72  Lite.  This macr
12270 6f 20 69 73 20 6e 6f 72 6d 61 6c 6c 79 20 64 65  o is normally de
12280 66 69 6e 65 64 20 74 6f 20 62 65 20 6e 6f 74 68  fined to be noth
12290 69 6e 67 2c 20 74 68 6f 75 67 68 20 6f 6e 20 57  ing, though on W
122a0 69 6e 64 6f 77 73 0a 20 20 62 75 69 6c 64 73 20  indows.  builds 
122b0 69 74 20 63 61 6e 20 73 6f 6d 65 74 69 6d 65 73  it can sometimes
122c0 20 62 65 20 73 65 74 20 74 6f 20 22 5f 5f 63 64   be set to "__cd
122d0 65 63 6c 22 20 6f 72 20 22 5f 5f 73 74 64 63 61  ecl" or "__stdca
122e0 6c 6c 22 2e 20 20 54 68 65 0a 20 20 22 5f 5f 63  ll".  The.  "__c
122f0 64 65 63 6c 22 20 73 65 74 74 69 6e 67 20 69 73  decl" setting is
12300 20 74 68 65 20 64 65 66 61 75 6c 74 2c 20 62 75   the default, bu
12310 74 20 22 5f 5f 73 74 64 63 61 6c 6c 22 20 69 73  t "__stdcall" is
12320 20 75 73 65 64 20 77 68 65 6e 20 53 51 4c 69 74   used when SQLit
12330 65 0a 20 20 69 73 20 69 6e 74 65 6e 64 65 64 20  e.  is intended 
12340 74 6f 20 62 65 20 63 6f 6d 70 69 6c 65 64 20 61  to be compiled a
12350 73 20 61 20 57 69 6e 64 6f 77 73 20 73 79 73 74  s a Windows syst
12360 65 6d 20 6c 69 62 72 61 72 79 2e 0a 20 20 3c 70  em library..  <p
12370 3e 0a 20 20 41 20 73 69 6e 67 6c 65 20 66 75 6e  >.  A single fun
12380 63 74 69 6f 6e 20 64 65 63 6c 61 72 61 74 69 6f  ction declaratio
12390 6e 20 73 68 6f 75 6c 64 20 63 6f 6e 74 61 69 6e  n should contain
123a0 20 6e 6f 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e   no more than on
123b0 65 20 6f 66 0a 20 20 74 68 65 20 66 6f 6c 6c 6f  e of.  the follo
123c0 77 69 6e 67 3a 20 20 5b 53 51 4c 49 54 45 5f 41  wing:  [SQLITE_A
123d0 50 49 43 41 4c 4c 5d 2c 20 5b 53 51 4c 49 54 45  PICALL], [SQLITE
123e0 5f 43 41 4c 4c 42 41 43 4b 5d 2c 20 5b 53 51 4c  _CALLBACK], [SQL
123f0 49 54 45 5f 43 44 45 43 4c 5d 2c 0a 20 20 6f 72  ITE_CDECL],.  or
12400 20 5b 53 51 4c 49 54 45 5f 53 59 53 43 41 4c 4c   [SQLITE_SYSCALL
12410 5d 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50  ]..}..COMPILE_OP
12420 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 43 44 45  TION {SQLITE_CDE
12430 43 4c 7d 20 7b 0a 20 20 54 68 69 73 20 6d 61 63  CL} {.  This mac
12440 72 6f 20 73 70 65 63 69 66 69 65 73 20 74 68 65  ro specifies the
12450 20 63 61 6c 6c 69 6e 67 20 63 6f 6e 76 65 6e 74   calling convent
12460 69 6f 6e 20 75 73 65 64 20 62 79 20 76 61 72 61  ion used by vara
12470 72 67 73 20 69 6e 74 65 72 66 61 63 65 0a 20 20  rgs interface.  
12480 72 6f 75 74 69 6e 65 73 20 69 6e 20 53 51 4c 69  routines in SQLi
12490 74 65 2e 20 20 54 68 69 73 20 6d 61 63 72 6f 20  te.  This macro 
124a0 69 73 20 6e 6f 72 6d 61 6c 6c 79 20 64 65 66 69  is normally defi
124b0 6e 65 64 20 74 6f 20 62 65 20 6e 6f 74 68 69 6e  ned to be nothin
124c0 67 2c 0a 20 20 74 68 6f 75 67 68 20 6f 6e 20 57  g,.  though on W
124d0 69 6e 64 6f 77 73 20 62 75 69 6c 64 73 20 69 74  indows builds it
124e0 20 63 61 6e 20 73 6f 6d 65 74 69 6d 65 73 20 62   can sometimes b
124f0 65 20 73 65 74 20 74 6f 20 22 5f 5f 63 64 65 63  e set to "__cdec
12500 6c 22 2e 20 20 54 68 69 73 0a 20 20 6d 61 63 72  l".  This.  macr
12510 6f 20 69 73 20 75 73 65 64 20 6f 6e 20 76 61 72  o is used on var
12520 61 72 67 73 20 72 6f 75 74 69 6e 65 73 20 61 6e  args routines an
12530 64 20 73 6f 20 63 61 6e 6e 6f 74 20 62 65 20 73  d so cannot be s
12540 65 74 20 74 6f 20 22 5f 5f 73 74 64 63 61 6c 6c  et to "__stdcall
12550 22 0a 20 20 73 69 6e 63 65 20 74 68 65 20 5f 5f  ".  since the __
12560 73 74 64 63 61 6c 6c 20 63 61 6c 6c 69 6e 67 20  stdcall calling 
12570 63 6f 6e 76 65 6e 74 69 6f 6e 20 64 6f 65 73 20  convention does 
12580 6e 6f 74 20 73 75 70 70 6f 72 74 20 76 61 72 61  not support vara
12590 72 67 73 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 20  rgs functions.. 
125a0 20 3c 70 3e 0a 20 20 41 20 73 69 6e 67 6c 65 20   <p>.  A single 
125b0 66 75 6e 63 74 69 6f 6e 20 64 65 63 6c 61 72 61  function declara
125c0 74 69 6f 6e 20 73 68 6f 75 6c 64 20 63 6f 6e 74  tion should cont
125d0 61 69 6e 20 6e 6f 20 6d 6f 72 65 20 74 68 61 6e  ain no more than
125e0 20 6f 6e 65 20 6f 66 0a 20 20 74 68 65 20 66 6f   one of.  the fo
125f0 6c 6c 6f 77 69 6e 67 3a 20 20 5b 53 51 4c 49 54  llowing:  [SQLIT
12600 45 5f 41 50 49 43 41 4c 4c 5d 2c 20 5b 53 51 4c  E_APICALL], [SQL
12610 49 54 45 5f 43 41 4c 4c 42 41 43 4b 5d 2c 20 5b  ITE_CALLBACK], [
12620 53 51 4c 49 54 45 5f 43 44 45 43 4c 5d 2c 0a 20  SQLITE_CDECL],. 
12630 20 6f 72 20 5b 53 51 4c 49 54 45 5f 53 59 53 43   or [SQLITE_SYSC
12640 41 4c 4c 5d 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45  ALL]..}..COMPILE
12650 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f  _OPTION {SQLITE_
12660 53 59 53 43 41 4c 4c 7d 20 7b 0a 20 20 54 68 69  SYSCALL} {.  Thi
12670 73 20 6d 61 63 72 6f 20 69 64 65 6e 74 69 66 69  s macro identifi
12680 65 73 20 74 68 65 20 63 61 6c 6c 69 6e 67 20 63  es the calling c
12690 6f 6e 76 65 6e 74 69 6f 6e 20 75 73 65 64 20 62  onvention used b
126a0 79 20 6f 70 65 72 61 74 69 6e 67 20 73 79 73 74  y operating syst
126b0 65 6d 0a 20 20 69 6e 74 65 72 66 61 63 65 73 20  em.  interfaces 
126c0 66 6f 72 20 74 61 72 67 65 74 20 74 68 65 20 70  for target the p
126d0 6c 61 74 66 6f 72 6d 20 66 6f 72 20 61 6e 20 53  latform for an S
126e0 51 4c 69 74 65 20 62 75 69 6c 64 2e 0a 20 20 54  QLite build..  T
126f0 68 69 73 20 6d 61 63 72 6f 20 69 73 20 6e 6f 72  his macro is nor
12700 6d 61 6c 6c 79 20 64 65 66 69 6e 65 64 20 74 6f  mally defined to
12710 20 62 65 20 6e 6f 74 68 69 6e 67 2c 20 74 68 6f   be nothing, tho
12720 75 67 68 20 6f 6e 20 57 69 6e 64 6f 77 73 0a 20  ugh on Windows. 
12730 20 62 75 69 6c 64 73 20 69 74 20 63 61 6e 20 73   builds it can s
12740 6f 6d 65 74 69 6d 65 73 20 62 65 20 73 65 74 20  ometimes be set 
12750 74 6f 20 22 5f 5f 73 74 64 63 61 6c 6c 22 2e 0a  to "__stdcall"..
12760 20 20 3c 70 3e 0a 20 20 41 20 73 69 6e 67 6c 65    <p>.  A single
12770 20 66 75 6e 63 74 69 6f 6e 20 64 65 63 6c 61 72   function declar
12780 61 74 69 6f 6e 20 73 68 6f 75 6c 64 20 63 6f 6e  ation should con
12790 74 61 69 6e 20 6e 6f 20 6d 6f 72 65 20 74 68 61  tain no more tha
127a0 6e 20 6f 6e 65 20 6f 66 0a 20 20 74 68 65 20 66  n one of.  the f
127b0 6f 6c 6c 6f 77 69 6e 67 3a 20 20 5b 53 51 4c 49  ollowing:  [SQLI
127c0 54 45 5f 41 50 49 43 41 4c 4c 5d 2c 20 5b 53 51  TE_APICALL], [SQ
127d0 4c 49 54 45 5f 43 41 4c 4c 42 41 43 4b 5d 2c 20  LITE_CALLBACK], 
127e0 5b 53 51 4c 49 54 45 5f 43 44 45 43 4c 5d 2c 0a  [SQLITE_CDECL],.
127f0 20 20 6f 72 20 5b 53 51 4c 49 54 45 5f 53 59 53    or [SQLITE_SYS
12800 43 41 4c 4c 5d 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c  CALL]..}..COMPIL
12810 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45  E_OPTION {SQLITE
12820 5f 54 43 4c 41 50 49 7d 20 7b 0a 20 20 54 68 69  _TCLAPI} {.  Thi
12830 73 20 6d 61 63 72 6f 20 73 70 65 63 69 66 69 65  s macro specifie
12840 73 20 74 68 65 20 63 61 6c 6c 69 6e 67 20 63 6f  s the calling co
12850 6e 76 65 6e 74 69 6f 6e 20 75 73 65 64 20 62 79  nvention used by
12860 20 74 68 65 20 0a 20 20 5b 68 74 74 70 3a 2f 2f   the .  [http://
12870 77 77 77 2e 74 63 6c 2e 74 6b 20 7c 20 54 43 4c  www.tcl.tk | TCL
12880 5d 20 6c 69 62 72 61 72 79 20 69 6e 74 65 72 66  ] library interf
12890 61 63 65 20 72 6f 75 74 69 6e 65 73 2e 0a 20 20  ace routines..  
128a0 54 68 69 73 20 6d 61 63 72 6f 20 69 73 20 6e 6f  This macro is no
128b0 74 20 75 73 65 64 20 62 79 20 74 68 65 20 53 51  t used by the SQ
128c0 4c 69 74 65 20 63 6f 72 65 2c 20 62 75 74 20 6f  Lite core, but o
128d0 6e 6c 79 20 62 79 20 74 68 65 20 5b 54 43 4c 20  nly by the [TCL 
128e0 49 6e 74 65 72 66 61 63 65 5d 0a 20 20 61 6e 64  Interface].  and
128f0 20 5b 54 43 4c 20 74 65 73 74 20 73 75 69 74 65   [TCL test suite
12900 5d 2e 0a 20 20 54 68 69 73 20 6d 61 63 72 6f 20  ]..  This macro 
12910 69 73 20 6e 6f 72 6d 61 6c 6c 79 20 64 65 66 69  is normally defi
12920 6e 65 64 20 74 6f 20 62 65 20 6e 6f 74 68 69 6e  ned to be nothin
12930 67 2c 0a 20 20 74 68 6f 75 67 68 20 6f 6e 20 57  g,.  though on W
12940 69 6e 64 6f 77 73 20 62 75 69 6c 64 73 20 69 74  indows builds it
12950 20 63 61 6e 20 73 6f 6d 65 74 69 6d 65 73 20 62   can sometimes b
12960 65 20 73 65 74 20 74 6f 20 22 5f 5f 63 64 65 63  e set to "__cdec
12970 6c 22 2e 20 20 54 68 69 73 0a 20 20 6d 61 63 72  l".  This.  macr
12980 6f 20 69 73 20 75 73 65 64 20 6f 6e 20 54 43 4c  o is used on TCL
12990 20 6c 69 62 72 61 72 79 20 69 6e 74 65 72 66 61   library interfa
129a0 63 65 20 72 6f 75 74 69 6e 65 73 20 77 68 69 63  ce routines whic
129b0 68 20 61 72 65 20 61 6c 77 61 79 73 20 63 6f 6d  h are always com
129c0 70 69 6c 65 64 0a 20 20 61 73 20 5f 5f 63 64 65  piled.  as __cde
129d0 63 6c 2c 20 65 76 65 6e 20 6f 6e 20 70 6c 61 74  cl, even on plat
129e0 66 6f 72 6d 73 20 74 68 61 74 20 70 72 65 66 65  forms that prefe
129f0 72 20 74 6f 20 75 73 65 20 5f 5f 73 74 64 63 61  r to use __stdca
12a00 6c 6c 2c 20 73 6f 20 74 68 69 73 0a 20 20 6d 61  ll, so this.  ma
12a10 63 72 6f 20 73 68 6f 75 6c 64 20 6e 6f 74 20 62  cro should not b
12a20 65 20 73 65 74 20 74 6f 20 5f 5f 73 74 64 63 61  e set to __stdca
12a30 6c 6c 20 75 6e 6c 65 73 73 20 74 68 65 20 70 6c  ll unless the pl
12a40 61 74 66 6f 72 6d 20 61 73 20 61 20 63 75 73 74  atform as a cust
12a50 6f 6d 0a 20 20 54 43 4c 20 6c 69 62 72 61 72 79  om.  TCL library
12a60 20 62 75 69 6c 64 20 74 68 61 74 20 73 75 70 70   build that supp
12a70 6f 72 74 73 20 5f 5f 73 74 64 63 61 6c 6c 2e 0a  orts __stdcall..
12a80 20 20 3c 70 3e 0a 20 20 54 68 69 73 20 6d 61 63    <p>.  This mac
12a90 72 6f 20 6d 61 79 20 6e 6f 74 20 62 65 20 75 73  ro may not be us
12aa0 65 64 20 69 6e 20 63 6f 6d 62 69 6e 61 74 69 6f  ed in combinatio
12ab0 6e 20 77 69 74 68 20 61 6e 79 20 6f 66 20 5b 53  n with any of [S
12ac0 51 4c 49 54 45 5f 41 50 49 43 41 4c 4c 5d 2c 0a  QLITE_APICALL],.
12ad0 20 20 5b 53 51 4c 49 54 45 5f 43 41 4c 4c 42 41    [SQLITE_CALLBA
12ae0 43 4b 5d 2c 20 5b 53 51 4c 49 54 45 5f 43 44 45  CK], [SQLITE_CDE
12af0 43 4c 5d 2c 20 6f 72 20 5b 53 51 4c 49 54 45 5f  CL], or [SQLITE_
12b00 53 59 53 43 41 4c 4c 5d 2e 0a 7d 0a 0a 0a 3c 2f  SYSCALL]..}...</
12b10 74 63 6c 3e 0a                                   tcl>.