Documentation Source Text

Hex Artifact Content
Login

Artifact 5e717b85d81ae6800f6ad00679974e3152fdd9fd6f202ca5ba45ffbb50438787:


0000: 3c 74 69 74 6c 65 3e 43 6f 6d 70 69 6c 65 2d 74  <title>Compile-t
0010: 69 6d 65 20 4f 70 74 69 6f 6e 73 3c 2f 74 69 74  ime Options</tit
0020: 6c 65 3e 0a 3c 74 63 6c 3e 68 64 5f 6b 65 79 77  le>.<tcl>hd_keyw
0030: 6f 72 64 73 20 7b 63 6f 6d 70 69 6c 65 2d 74 69  ords {compile-ti
0040: 6d 65 20 6f 70 74 69 6f 6e 73 7d 3c 2f 74 63 6c  me options}</tcl
0050: 3e 0a 0a 3c 74 61 62 6c 65 5f 6f 66 5f 63 6f 6e  >..<table_of_con
0060: 74 65 6e 74 73 3e 0a 0a 3c 68 31 3e 4f 76 65 72  tents>..<h1>Over
0070: 76 69 65 77 3c 2f 68 31 3e 0a 0a 3c 70 3e 0a 46  view</h1>..<p>.F
0080: 6f 72 20 6d 6f 73 74 20 70 75 72 70 6f 73 65 73  or most purposes
0090: 2c 20 53 51 4c 69 74 65 20 63 61 6e 20 62 65 20  , SQLite can be 
00a0: 62 75 69 6c 74 20 6a 75 73 74 20 66 69 6e 65 20  built just fine 
00b0: 75 73 69 6e 67 20 74 68 65 20 64 65 66 61 75 6c  using the defaul
00c0: 74 0a 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 6f 70  t.compilation op
00d0: 74 69 6f 6e 73 2e 20 48 6f 77 65 76 65 72 2c 20  tions. However, 
00e0: 69 66 20 72 65 71 75 69 72 65 64 2c 20 74 68 65  if required, the
00f0: 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70   compile-time op
0100: 74 69 6f 6e 73 0a 64 6f 63 75 6d 65 6e 74 65 64  tions.documented
0110: 20 62 65 6c 6f 77 20 63 61 6e 20 62 65 20 75 73   below can be us
0120: 65 64 20 74 6f 20 0a 3c 61 20 68 72 65 66 3d 22  ed to .<a href="
0130: 23 6f 6d 69 74 66 65 61 74 75 72 65 73 22 3e 6f  #omitfeatures">o
0140: 6d 69 74 20 53 51 4c 69 74 65 20 66 65 61 74 75  mit SQLite featu
0150: 72 65 73 3c 2f 61 3e 20 28 72 65 73 75 6c 74 69  res</a> (resulti
0160: 6e 67 20 69 6e 0a 61 20 5b 72 65 6c 66 6f 6f 74  ng in.a [relfoot
0170: 70 72 69 6e 74 20 7c 20 73 6d 61 6c 6c 65 72 20  print | smaller 
0180: 63 6f 6d 70 69 6c 65 64 20 6c 69 62 72 61 72 79  compiled library
0190: 20 73 69 7a 65 5d 29 20 6f 72 20 74 6f 20 63 68   size]) or to ch
01a0: 61 6e 67 65 20 74 68 65 0a 3c 61 20 68 72 65 66  ange the.<a href
01b0: 3d 22 23 64 65 66 61 75 6c 74 73 22 3e 64 65 66  ="#defaults">def
01c0: 61 75 6c 74 20 76 61 6c 75 65 73 3c 2f 61 3e 20  ault values</a> 
01d0: 6f 66 20 73 6f 6d 65 20 70 61 72 61 6d 65 74 65  of some paramete
01e0: 72 73 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 45 76  rs..</p>..<p>.Ev
01f0: 65 72 79 20 65 66 66 6f 72 74 20 68 61 73 20 62  ery effort has b
0200: 65 65 6e 20 6d 61 64 65 20 74 6f 20 65 6e 73 75  een made to ensu
0210: 72 65 20 74 68 61 74 20 74 68 65 20 76 61 72 69  re that the vari
0220: 6f 75 73 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 73  ous combinations
0230: 0a 6f 66 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20  .of compilation 
0240: 6f 70 74 69 6f 6e 73 20 77 6f 72 6b 20 68 61 72  options work har
0250: 6d 6f 6e 69 6f 75 73 6c 79 20 61 6e 64 20 70 72  moniously and pr
0260: 6f 64 75 63 65 20 61 20 77 6f 72 6b 69 6e 67 20  oduce a working 
0270: 6c 69 62 72 61 72 79 2e 0a 4e 65 76 65 72 74 68  library..Neverth
0280: 65 6c 65 73 73 2c 20 69 74 20 69 73 20 73 74 72  eless, it is str
0290: 6f 6e 67 6c 79 20 72 65 63 6f 6d 6d 65 6e 64 65  ongly recommende
02a0: 64 20 74 68 61 74 20 74 68 65 20 53 51 4c 69 74  d that the SQLit
02b0: 65 20 74 65 73 74 2d 73 75 69 74 65 0a 62 65 20  e test-suite.be 
02c0: 65 78 65 63 75 74 65 64 20 74 6f 20 63 68 65 63  executed to chec
02d0: 6b 20 66 6f 72 20 65 72 72 6f 72 73 20 62 65 66  k for errors bef
02e0: 6f 72 65 20 75 73 69 6e 67 20 61 6e 20 53 51 4c  ore using an SQL
02f0: 69 74 65 20 6c 69 62 72 61 72 79 20 62 75 69 6c  ite library buil
0300: 74 0a 77 69 74 68 20 6e 6f 6e 2d 73 74 61 6e 64  t.with non-stand
0310: 61 72 64 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20  ard compilation 
0320: 6f 70 74 69 6f 6e 73 2e 0a 3c 2f 70 3e 0a 0a 3c  options..</p>..<
0330: 74 63 6c 3e 0a 70 72 6f 63 20 43 4f 4d 50 49 4c  tcl>.proc COMPIL
0340: 45 5f 4f 50 54 49 4f 4e 20 7b 6e 61 6d 65 20 74  E_OPTION {name t
0350: 65 78 74 7d 20 7b 0a 20 20 69 66 20 7b 5b 72 65  ext} {.  if {[re
0360: 67 65 78 70 20 7b 28 53 51 4c 49 54 45 7c 48 41  gexp {(SQLITE|HA
0370: 56 45 29 5f 28 5b 41 2d 5a 30 2d 39 5f 5d 2b 29  VE)_([A-Z0-9_]+)
0380: 7d 20 24 6e 61 6d 65 20 61 6c 6c 20 70 72 65 66  } $name all pref
0390: 69 78 20 6c 61 62 65 6c 5d 7d 20 7b 0a 20 20 20  ix label]} {.   
03a0: 20 68 64 5f 66 72 61 67 6d 65 6e 74 20 5b 73 74   hd_fragment [st
03b0: 72 69 6e 67 20 74 6f 6c 6f 77 65 72 20 24 6c 61  ring tolower $la
03c0: 62 65 6c 5d 0a 20 20 20 20 68 64 5f 6b 65 79 77  bel].    hd_keyw
03d0: 6f 72 64 73 20 24 61 6c 6c 20 2d 44 24 61 6c 6c  ords $all -D$all
03e0: 0a 20 20 7d 0a 20 20 69 66 20 7b 5b 72 65 67 65  .  }.  if {[rege
03f0: 78 70 20 7b 5e 59 59 28 5b 41 2d 5a 30 2d 39 5f  xp {^YY([A-Z0-9_
0400: 5d 2b 29 7d 20 24 6e 61 6d 65 20 61 6c 6c 20 6c  ]+)} $name all l
0410: 61 62 65 6c 5d 7d 20 7b 0a 20 20 20 20 68 64 5f  abel]} {.    hd_
0420: 66 72 61 67 6d 65 6e 74 20 5b 73 74 72 69 6e 67  fragment [string
0430: 20 74 6f 6c 6f 77 65 72 20 24 61 6c 6c 5d 0a 20   tolower $all]. 
0440: 20 20 20 68 64 5f 6b 65 79 77 6f 72 64 73 20 24     hd_keywords $
0450: 61 6c 6c 0a 20 20 7d 0a 20 20 68 64 5f 70 75 74  all.  }.  hd_put
0460: 73 20 3c 70 3e 3c 62 3e 24 6e 61 6d 65 3c 2f 62  s <p><b>$name</b
0470: 3e 3c 2f 70 3e 0a 20 20 72 65 67 73 75 62 20 2d  ></p>.  regsub -
0480: 61 6c 6c 20 22 5c 6e 5c 5c 73 2a 5c 6e 22 20 24  all "\n\\s*\n" $
0490: 74 65 78 74 20 22 3c 2f 70 3e 5c 6e 5c 6e 3c 70  text "</p>\n\n<p
04a0: 3e 22 20 74 65 78 74 0a 20 20 68 64 5f 72 65 73  >" text.  hd_res
04b0: 6f 6c 76 65 20 3c 62 6c 6f 63 6b 71 75 6f 74 65  olve <blockquote
04c0: 3e 3c 70 3e 24 74 65 78 74 3c 2f 70 3e 3c 2f 62  ><p>$text</p></b
04d0: 6c 6f 63 6b 71 75 6f 74 65 3e 0a 7d 0a 0a 68 64  lockquote>.}..hd
04e0: 5f 66 72 61 67 6d 65 6e 74 20 72 63 6d 64 20 7b  _fragment rcmd {
04f0: 72 65 63 6f 6d 6d 65 6e 64 65 64 20 63 6f 6d 70  recommended comp
0500: 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73  ile-time options
0510: 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 68 31 3e 52 65  }.</tcl>..<h1>Re
0520: 63 6f 6d 6d 65 6e 64 65 64 20 43 6f 6d 70 69 6c  commended Compil
0530: 65 2d 74 69 6d 65 20 4f 70 74 69 6f 6e 73 3c 2f  e-time Options</
0540: 68 31 3e 0a 0a 3c 70 3e 54 68 65 20 66 6f 6c 6c  h1>..<p>The foll
0550: 6f 77 69 6e 67 20 63 6f 6d 70 69 6c 65 2d 74 69  owing compile-ti
0560: 6d 65 20 6f 70 74 69 6f 6e 73 20 61 72 65 20 72  me options are r
0570: 65 63 6f 6d 6d 65 6e 64 65 64 20 66 6f 72 20 61  ecommended for a
0580: 70 70 6c 69 63 61 74 69 6f 6e 73 20 74 68 61 74  pplications that
0590: 0a 61 72 65 20 61 62 6c 65 20 74 6f 20 75 73 65  .are able to use
05a0: 20 74 68 65 6d 2c 20 69 6e 20 6f 72 64 65 72 20   them, in order 
05b0: 74 6f 20 6d 69 6e 69 6d 69 7a 65 64 20 74 68 65  to minimized the
05c0: 20 6e 75 6d 62 65 72 20 6f 66 20 43 50 55 20 63   number of CPU c
05d0: 79 63 6c 65 73 20 61 6e 64 0a 74 68 65 20 62 79  ycles and.the by
05e0: 74 65 73 20 6f 66 20 6d 65 6d 6f 72 79 20 75 73  tes of memory us
05f0: 65 64 20 62 79 20 53 51 4c 69 74 65 2e 0a 4e 6f  ed by SQLite..No
0600: 74 20 61 6c 6c 20 6f 66 20 74 68 65 73 65 20 63  t all of these c
0610: 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69  ompile-time opti
0620: 6f 6e 73 20 61 72 65 20 75 73 61 62 6c 65 20 62  ons are usable b
0630: 79 20 65 76 65 72 79 20 61 70 70 6c 69 63 61 74  y every applicat
0640: 69 6f 6e 2e 0a 46 6f 72 20 65 78 61 6d 70 6c 65  ion..For example
0650: 2c 20 74 68 65 20 53 51 4c 49 54 45 5f 54 48 52  , the SQLITE_THR
0660: 45 41 44 53 41 46 45 3d 30 20 6f 70 74 69 6f 6e  EADSAFE=0 option
0670: 20 69 73 20 6f 6e 6c 79 20 75 73 61 62 6c 65 20   is only usable 
0680: 62 79 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 0a  by applications.
0690: 74 68 61 74 20 6e 65 76 65 72 20 61 63 63 65 73  that never acces
06a0: 73 20 53 51 4c 69 74 65 20 66 72 6f 6d 20 6d 6f  s SQLite from mo
06b0: 72 65 20 74 68 61 6e 20 6f 6e 65 20 74 68 72 65  re than one thre
06c0: 61 64 20 61 74 20 61 20 74 69 6d 65 2e 20 20 41  ad at a time.  A
06d0: 6e 64 20 74 68 65 0a 53 51 4c 49 54 45 5f 4f 4d  nd the.SQLITE_OM
06e0: 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c  IT_PROGRESS_CALL
06f0: 42 41 43 4b 20 6f 70 74 69 6f 6e 20 69 73 20 6f  BACK option is o
0700: 6e 6c 79 20 75 73 61 62 6c 65 20 62 79 20 61 70  nly usable by ap
0710: 70 6c 69 63 61 74 69 6f 6e 73 20 74 68 61 74 0a  plications that.
0720: 64 6f 65 20 6e 6f 74 20 75 73 65 20 74 68 65 20  doe not use the 
0730: 5b 73 71 6c 69 74 65 33 5f 70 72 6f 67 72 65 73  [sqlite3_progres
0740: 73 5f 68 61 6e 64 6c 65 72 28 29 5d 20 69 6e 74  s_handler()] int
0750: 65 72 66 61 63 65 2e 20 20 41 6e 64 20 73 6f 20  erface.  And so 
0760: 66 6f 72 74 68 2e 0a 0a 3c 70 3e 49 74 20 69 73  forth...<p>It is
0770: 20 69 6d 70 6f 73 73 69 62 6c 65 20 74 6f 20 74   impossible to t
0780: 65 73 74 20 65 76 65 72 79 20 70 6f 73 73 69 62  est every possib
0790: 6c 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f  le combination o
07a0: 66 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 0a 6f  f compile-time.o
07b0: 70 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c 69 74  ptions for SQLit
07c0: 65 2e 20 20 42 75 74 20 74 68 65 20 66 6f 6c 6c  e.  But the foll
07d0: 6f 77 69 6e 67 20 73 65 74 20 6f 66 20 63 6f 6d  owing set of com
07e0: 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
07f0: 73 20 69 73 0a 6f 6e 65 20 63 6f 6e 66 69 67 75  s is.one configu
0800: 72 61 74 69 6f 6e 20 74 68 61 74 20 69 73 20 61  ration that is a
0810: 6c 77 61 79 73 20 66 75 6c 6c 79 20 74 65 73 74  lways fully test
0820: 65 64 2e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 3c 70  ed...<ol>.<li><p
0830: 3e 3c 62 3e 5b 53 51 4c 49 54 45 5f 54 48 52 45  ><b>[SQLITE_THRE
0840: 41 44 53 41 46 45 3d 30 5d 3c 2f 62 3e 2e 0a 53  ADSAFE=0]</b>..S
0850: 65 74 74 69 6e 67 20 2d 44 53 51 4c 49 54 45 5f  etting -DSQLITE_
0860: 54 48 52 45 41 44 53 41 46 45 3d 30 20 63 61 75  THREADSAFE=0 cau
0870: 73 65 73 20 61 6c 6c 20 6f 66 20 74 68 65 20 6d  ses all of the m
0880: 75 74 65 78 20 61 6e 64 20 74 68 72 65 61 64 2d  utex and thread-
0890: 73 61 66 65 74 79 20 6c 6f 67 69 63 0a 69 6e 20  safety logic.in 
08a0: 53 51 4c 69 74 65 20 74 6f 20 62 65 20 6f 6d 69  SQLite to be omi
08b0: 74 74 65 64 2e 20 20 54 68 69 73 20 69 73 20 74  tted.  This is t
08c0: 68 65 20 73 69 6e 67 6c 65 20 63 6f 6d 70 69 6c  he single compil
08d0: 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 74 68  e-time option th
08e0: 61 74 20 6d 61 6b 65 73 0a 74 68 65 20 6d 6f 73  at makes.the mos
08f0: 74 20 64 69 66 66 65 72 65 6e 63 65 20 69 6e 20  t difference in 
0900: 6f 70 74 69 6d 69 7a 69 6e 67 20 74 68 65 20 70  optimizing the p
0910: 65 72 66 6f 72 6d 61 6e 63 65 20 6f 66 20 53 51  erformance of SQ
0920: 4c 69 74 65 2e 0a 0a 3c 6c 69 3e 3c 70 3e 3c 62  Lite...<li><p><b
0930: 3e 5b 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  >[SQLITE_DEFAULT
0940: 5f 4d 45 4d 53 54 41 54 55 53 3d 30 5d 3c 2f 62  _MEMSTATUS=0]</b
0950: 3e 2e 0a 54 68 69 73 20 73 65 74 74 69 6e 67 20  >..This setting 
0960: 63 61 75 73 65 73 20 74 68 65 20 5b 73 71 6c 69  causes the [sqli
0970: 74 65 33 5f 73 74 61 74 75 73 28 29 5d 20 69 6e  te3_status()] in
0980: 74 65 72 66 61 63 65 73 20 74 68 61 74 20 74 72  terfaces that tr
0990: 61 63 6b 20 6d 65 6d 6f 72 79 20 75 73 61 67 65  ack memory usage
09a0: 0a 74 6f 20 62 65 20 64 69 73 61 62 6c 65 64 2e  .to be disabled.
09b0: 20 20 54 68 69 73 20 68 65 6c 70 73 20 74 68 65    This helps the
09c0: 20 5b 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63   [sqlite3_malloc
09d0: 28 29 5d 20 72 6f 75 74 69 6e 65 73 20 72 75 6e  ()] routines run
09e0: 20 6d 75 63 68 20 66 61 73 74 65 72 2c 0a 61 6e   much faster,.an
09f0: 64 20 73 69 6e 63 65 20 53 51 4c 69 74 65 20 75  d since SQLite u
0a00: 73 65 73 20 5b 73 71 6c 69 74 65 33 5f 6d 61 6c  ses [sqlite3_mal
0a10: 6c 6f 63 28 29 5d 20 69 6e 74 65 72 6e 61 6c 6c  loc()] internall
0a20: 79 2c 20 74 68 69 73 20 68 65 6c 70 73 20 74 6f  y, this helps to
0a30: 20 6d 61 6b 65 20 74 68 65 0a 65 6e 74 69 72 65   make the.entire
0a40: 20 6c 69 62 72 61 72 79 20 66 61 73 74 65 72 2e   library faster.
0a50: 0a 0a 3c 6c 69 3e 3c 70 3e 3c 62 3e 5b 53 51 4c  ..<li><p><b>[SQL
0a60: 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 41 4c 5f  ITE_DEFAULT_WAL_
0a70: 53 59 4e 43 48 52 4f 4e 4f 55 53 3d 31 5d 3c 2f  SYNCHRONOUS=1]</
0a80: 62 3e 2e 0a 46 6f 72 20 6d 61 78 69 6d 75 6d 20  b>..For maximum 
0a90: 64 61 74 61 62 61 73 65 20 73 61 66 65 74 79 20  database safety 
0aa0: 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 70 6f 77 65  following a powe
0ab0: 72 20 6c 6f 73 65 2c 20 74 68 65 20 73 65 74 74  r lose, the sett
0ac0: 69 6e 67 20 6f 66 0a 5b 50 52 41 47 4d 41 20 73  ing of.[PRAGMA s
0ad0: 79 6e 63 68 72 6f 6e 6f 75 73 3d 46 55 4c 4c 5d  ynchronous=FULL]
0ae0: 20 69 73 20 72 65 63 6f 6d 6d 65 6e 64 65 64 2e   is recommended.
0af0: 20 20 48 6f 77 65 76 65 72 2c 20 69 6e 20 5b 57    However, in [W
0b00: 41 4c 20 6d 6f 64 65 5d 2c 20 63 6f 6d 70 6c 65  AL mode], comple
0b10: 74 65 0a 64 61 74 61 62 61 73 65 20 69 6e 74 65  te.database inte
0b20: 67 72 69 74 79 20 69 73 20 67 75 61 72 61 6e 74  grity is guarant
0b30: 65 65 64 20 77 69 74 68 20 5b 50 52 41 47 4d 41  eed with [PRAGMA
0b40: 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3d 4e 4f 52   synchronous=NOR
0b50: 4d 41 4c 5d 2e 20 20 57 69 74 68 0a 5b 50 52 41  MAL].  With.[PRA
0b60: 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3d  GMA synchronous=
0b70: 4e 4f 52 4d 41 4c 5d 20 69 6e 20 5b 57 41 4c 20  NORMAL] in [WAL 
0b80: 6d 6f 64 65 5d 2c 20 72 65 63 65 6e 74 20 63 68  mode], recent ch
0b90: 61 6e 67 65 73 20 74 6f 20 74 68 65 20 64 61 74  anges to the dat
0ba0: 61 62 61 73 65 20 6d 69 67 68 74 0a 62 65 20 72  abase might.be r
0bb0: 6f 6c 6c 65 64 20 62 61 63 6b 20 62 79 20 61 20  olled back by a 
0bc0: 70 6f 77 65 72 20 6c 6f 73 73 2c 20 62 75 74 20  power loss, but 
0bd0: 74 68 65 20 64 61 74 61 62 61 73 65 20 77 69 6c  the database wil
0be0: 6c 20 6e 6f 74 20 62 65 20 63 6f 72 72 75 70 74  l not be corrupt
0bf0: 65 64 2e 0a 46 75 72 74 68 65 72 6d 6f 72 65 2c  ed..Furthermore,
0c00: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 63 6f 6d   transaction com
0c10: 6d 69 74 20 69 73 20 6d 75 63 68 20 66 61 73 74  mit is much fast
0c20: 65 72 20 69 6e 20 57 41 4c 20 6d 6f 64 65 20 75  er in WAL mode u
0c30: 73 69 6e 67 0a 73 79 6e 63 68 72 6f 6e 6f 75 73  sing.synchronous
0c40: 3d 4e 4f 52 4d 41 4c 20 74 68 61 6e 20 77 69 74  =NORMAL than wit
0c50: 68 20 74 68 65 20 64 65 66 61 75 6c 74 20 73 79  h the default sy
0c60: 6e 63 68 72 6f 6e 6f 75 73 3d 46 55 4c 4c 2e 20  nchronous=FULL. 
0c70: 20 46 6f 72 20 74 68 65 73 65 0a 72 65 61 73 6f   For these.reaso
0c80: 6e 73 2c 20 69 74 20 69 73 20 72 65 63 6f 6d 6d  ns, it is recomm
0c90: 65 6e 64 65 64 20 74 68 61 74 20 74 68 65 20 73  ended that the s
0ca0: 79 6e 63 68 72 6f 6e 6f 75 73 20 73 65 74 74 69  ynchronous setti
0cb0: 6e 67 20 62 65 20 63 68 61 6e 67 65 64 20 66 72  ng be changed fr
0cc0: 6f 6d 0a 46 55 4c 4c 20 74 6f 20 4e 4f 52 4d 41  om.FULL to NORMA
0cd0: 4c 20 77 68 65 6e 20 73 77 69 74 63 68 69 6e 67  L when switching
0ce0: 20 74 6f 20 57 41 4c 20 6d 6f 64 65 2e 20 20 54   to WAL mode.  T
0cf0: 68 69 73 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  his compile-time
0d00: 20 6f 70 74 69 6f 6e 20 77 69 6c 6c 0a 61 63 63   option will.acc
0d10: 6f 6d 70 6c 69 73 68 20 74 68 61 74 2e 0a 0a 3c  omplish that...<
0d20: 6c 69 3e 3c 70 3e 3c 62 3e 5b 53 51 4c 49 54 45  li><p><b>[SQLITE
0d30: 5f 4c 49 4b 45 5f 44 4f 45 53 4e 54 5f 4d 41 54  _LIKE_DOESNT_MAT
0d40: 43 48 5f 42 4c 4f 42 53 5d 3c 2f 62 3e 2e 0a 48  CH_BLOBS]</b>..H
0d50: 69 73 74 6f 72 69 63 61 6c 6c 79 2c 20 53 51 4c  istorically, SQL
0d60: 69 74 65 20 68 61 73 20 61 6c 6c 6f 77 65 64 20  ite has allowed 
0d70: 42 4c 4f 42 20 6f 70 65 72 61 6e 64 73 20 74 6f  BLOB operands to
0d80: 20 74 68 65 20 5b 4c 49 4b 45 5d 20 61 6e 64 20   the [LIKE] and 
0d90: 5b 47 4c 4f 42 5d 0a 6f 70 65 72 61 74 6f 72 73  [GLOB].operators
0da0: 2e 20 20 42 75 74 20 68 61 76 69 6e 67 20 61 20  .  But having a 
0db0: 42 4c 4f 42 20 61 73 20 61 6e 20 6f 70 65 72 61  BLOB as an opera
0dc0: 6e 64 20 6f 66 20 5b 4c 49 4b 45 5d 20 6f 72 20  nd of [LIKE] or 
0dd0: 5b 47 4c 4f 42 5d 20 63 6f 6d 70 6c 69 63 61 74  [GLOB] complicat
0de0: 65 73 0a 61 6e 64 20 73 6c 6f 77 73 20 74 68 65  es.and slows the
0df0: 20 5b 4c 49 4b 45 20 6f 70 74 69 6d 69 7a 61 74   [LIKE optimizat
0e00: 69 6f 6e 5d 2e 20 20 57 68 65 6e 20 74 68 69 73  ion].  When this
0e10: 20 6f 70 74 69 6f 6e 20 69 73 20 73 65 74 2c 20   option is set, 
0e20: 69 74 20 6d 65 61 6e 73 20 74 68 61 74 0a 74 68  it means that.th
0e30: 65 20 4c 49 4b 45 20 61 6e 64 20 47 4c 4f 42 20  e LIKE and GLOB 
0e40: 6f 70 65 72 61 74 6f 72 73 20 61 6c 77 61 79 73  operators always
0e50: 20 72 65 74 75 72 6e 20 46 41 4c 53 45 20 69 66   return FALSE if
0e60: 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20   either operand 
0e70: 69 73 20 61 20 42 4c 4f 42 2e 0a 54 68 61 74 20  is a BLOB..That 
0e80: 73 69 6d 70 6c 69 66 69 65 73 20 74 68 65 20 69  simplifies the i
0e90: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66  mplementation of
0ea0: 20 74 68 65 20 5b 4c 49 4b 45 20 6f 70 74 69 6d   the [LIKE optim
0eb0: 69 7a 61 74 69 6f 6e 5d 20 61 6e 64 20 61 6c 6c  ization] and all
0ec0: 6f 77 73 0a 71 75 65 72 69 65 73 20 74 68 61 74  ows.queries that
0ed0: 20 75 73 65 20 74 68 65 20 5b 4c 49 4b 45 20 6f   use the [LIKE o
0ee0: 70 74 69 6d 69 7a 61 74 69 6f 6e 5d 20 74 6f 20  ptimization] to 
0ef0: 72 75 6e 20 66 61 73 74 65 72 2e 0a 0a 3c 6c 69  run faster...<li
0f00: 3e 3c 70 3e 3c 62 3e 5b 53 51 4c 49 54 45 5f 4d  ><p><b>[SQLITE_M
0f10: 41 58 5f 45 58 50 52 5f 44 45 50 54 48 3d 30 5d  AX_EXPR_DEPTH=0]
0f20: 3c 2f 62 3e 2e 0a 53 65 74 74 69 6e 67 20 74 68  </b>..Setting th
0f30: 65 20 6d 61 78 69 6d 75 6d 20 65 78 70 72 65 73  e maximum expres
0f40: 73 69 6f 6e 20 70 61 72 73 65 2d 74 72 65 65 20  sion parse-tree 
0f50: 64 65 70 74 68 20 74 6f 20 7a 65 72 6f 20 64 69  depth to zero di
0f60: 73 61 62 6c 65 73 20 61 6c 6c 20 63 68 65 63 6b  sables all check
0f70: 69 6e 67 0a 6f 66 20 74 68 65 20 65 78 70 72 65  ing.of the expre
0f80: 73 73 69 6f 6e 20 70 61 72 73 65 2d 74 72 65 65  ssion parse-tree
0f90: 20 64 65 70 74 68 2c 20 77 68 69 63 68 20 73 69   depth, which si
0fa0: 6d 70 6c 69 66 69 65 73 20 74 68 65 20 63 6f 64  mplifies the cod
0fb0: 65 20 72 65 73 75 6c 74 69 6e 67 20 69 6e 0a 66  e resulting in.f
0fc0: 61 73 74 65 72 20 65 78 65 63 75 74 69 6f 6e 2c  aster execution,
0fd0: 20 61 6e 64 20 68 65 6c 70 73 20 74 68 65 20 70   and helps the p
0fe0: 61 72 73 65 20 74 72 65 65 20 74 6f 20 75 73 65  arse tree to use
0ff0: 20 6c 65 73 73 20 6d 65 6d 6f 72 79 2e 0a 0a 3c   less memory...<
1000: 6c 69 3e 3c 70 3e 3c 62 3e 5b 53 51 4c 49 54 45  li><p><b>[SQLITE
1010: 5f 4f 4d 49 54 5f 44 45 43 4c 54 59 50 45 5d 3c  _OMIT_DECLTYPE]<
1020: 2f 62 3e 2e 0a 42 79 20 6f 6d 69 74 74 69 6e 67  /b>..By omitting
1030: 20 74 68 65 20 28 73 65 6c 64 6f 6d 2d 6e 65 65   the (seldom-nee
1040: 64 65 64 29 20 61 62 69 6c 69 74 79 20 74 6f 20  ded) ability to 
1050: 72 65 74 75 72 6e 20 74 68 65 20 64 65 63 6c 61  return the decla
1060: 72 65 64 20 74 79 70 65 20 6f 66 0a 63 6f 6c 75  red type of.colu
1070: 6d 6e 73 20 66 72 6f 6d 20 74 68 65 20 72 65 73  mns from the res
1080: 75 6c 74 20 73 65 74 20 6f 66 20 71 75 65 72 79  ult set of query
1090: 2c 20 5b 70 72 65 70 61 72 65 64 20 73 74 61 74  , [prepared stat
10a0: 65 6d 65 6e 74 73 5d 20 63 61 6e 20 62 65 20 6d  ements] can be m
10b0: 61 64 65 0a 74 6f 20 63 6f 6e 73 75 6d 65 20 6c  ade.to consume l
10c0: 65 73 73 20 6d 65 6d 6f 72 79 2e 0a 0a 3c 6c 69  ess memory...<li
10d0: 3e 3c 70 3e 3c 62 3e 5b 53 51 4c 49 54 45 5f 4f  ><p><b>[SQLITE_O
10e0: 4d 49 54 5f 44 45 50 52 45 43 41 54 45 44 5d 3c  MIT_DEPRECATED]<
10f0: 2f 62 3e 2e 0a 4f 6d 69 74 74 69 6e 67 20 64 65  /b>..Omitting de
1100: 70 72 65 63 61 74 65 64 20 69 6e 74 65 72 66 61  precated interfa
1110: 63 65 73 20 61 6e 64 20 66 65 61 74 75 72 65 73  ces and features
1120: 20 77 69 6c 6c 20 6e 6f 74 20 68 65 6c 70 20 53   will not help S
1130: 51 4c 69 74 65 20 74 6f 0a 72 75 6e 20 61 6e 79  QLite to.run any
1140: 20 66 61 73 74 65 72 2e 20 20 49 74 20 77 69 6c   faster.  It wil
1150: 6c 20 72 65 64 75 63 65 20 74 68 65 20 6c 69 62  l reduce the lib
1160: 72 61 72 79 20 66 6f 6f 74 70 72 69 6e 74 2c 20  rary footprint, 
1170: 68 6f 77 65 76 65 72 2e 20 20 41 6e 64 0a 69 74  however.  And.it
1180: 20 69 73 20 74 68 65 20 72 69 67 68 74 20 74 68   is the right th
1190: 69 6e 67 20 74 6f 20 64 6f 2e 0a 0a 3c 6c 69 3e  ing to do...<li>
11a0: 3c 70 3e 3c 62 3e 5b 53 51 4c 49 54 45 5f 4f 4d  <p><b>[SQLITE_OM
11b0: 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c  IT_PROGRESS_CALL
11c0: 42 41 43 4b 5d 3c 2f 62 3e 2e 0a 54 68 65 20 70  BACK]</b>..The p
11d0: 72 6f 67 72 65 73 73 20 68 61 6e 64 6c 65 72 20  rogress handler 
11e0: 63 61 6c 6c 62 61 63 6b 20 63 6f 75 6e 74 65 72  callback counter
11f0: 20 6d 75 73 74 20 62 65 20 63 68 65 63 6b 65 64   must be checked
1200: 20 69 6e 20 74 68 65 20 69 6e 6e 65 72 20 6c 6f   in the inner lo
1210: 6f 70 0a 6f 66 20 74 68 65 20 5b 62 79 74 65 63  op.of the [bytec
1220: 6f 64 65 20 65 6e 67 69 6e 65 5d 2e 20 20 42 79  ode engine].  By
1230: 20 6f 6d 69 74 74 69 6e 67 20 74 68 69 73 20 69   omitting this i
1240: 6e 74 65 72 66 61 63 65 2c 20 61 20 73 69 6e 67  nterface, a sing
1250: 6c 65 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 0a 69  le conditional.i
1260: 73 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d 20 74  s removed from t
1270: 68 65 20 69 6e 6e 65 72 20 6c 6f 6f 70 20 6f 66  he inner loop of
1280: 20 74 68 65 20 5b 62 79 74 65 63 6f 64 65 20 65   the [bytecode e
1290: 6e 67 69 6e 65 5d 2c 20 68 65 6c 70 69 6e 67 20  ngine], helping 
12a0: 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 0a 74  SQL statements.t
12b0: 6f 20 72 75 6e 20 73 6c 69 67 68 74 6c 79 20 66  o run slightly f
12c0: 61 73 74 65 72 2e 0a 0a 3c 6c 69 3e 3c 70 3e 3c  aster...<li><p><
12d0: 62 3e 5b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53  b>[SQLITE_OMIT_S
12e0: 48 41 52 45 44 5f 43 41 43 48 45 5d 3c 2f 62 3e  HARED_CACHE]</b>
12f0: 2e 0a 4f 6d 69 74 74 69 6e 67 20 74 68 65 20 70  ..Omitting the p
1300: 6f 73 73 69 62 69 6c 69 74 79 20 6f 66 20 75 73  ossibility of us
1310: 69 6e 67 20 5b 73 68 61 72 65 64 20 63 61 63 68  ing [shared cach
1320: 65 5d 20 61 6c 6c 6f 77 73 20 6d 61 6e 79 20 63  e] allows many c
1330: 6f 6e 64 69 74 69 6f 6e 61 6c 73 0a 69 6e 20 70  onditionals.in p
1340: 65 72 66 6f 72 6d 61 6e 63 65 2d 63 72 69 74 69  erformance-criti
1350: 63 61 6c 20 73 65 63 74 69 6f 6e 73 20 6f 66 20  cal sections of 
1360: 74 68 65 20 63 6f 64 65 20 74 6f 20 62 65 20 65  the code to be e
1370: 6c 69 6d 69 6e 61 74 65 64 2e 20 20 54 68 69 73  liminated.  This
1380: 20 63 61 6e 0a 67 69 76 65 20 61 20 6e 6f 74 69   can.give a noti
1390: 63 61 62 6c 65 20 69 6d 70 72 6f 76 65 6d 65 6e  cable improvemen
13a0: 74 20 69 6e 20 70 65 72 66 6f 72 6d 61 6e 63 65  t in performance
13b0: 2e 0a 0a 3c 6c 69 3e 3c 70 3e 3c 62 3e 5b 53 51  ...<li><p><b>[SQ
13c0: 4c 49 54 45 5f 55 53 45 5f 41 4c 4c 4f 43 41 5d  LITE_USE_ALLOCA]
13d0: 3c 2f 62 3e 2e 0a 4d 61 6b 65 20 75 73 65 20 6f  </b>..Make use o
13e0: 66 20 61 6c 6c 6f 63 61 28 29 20 66 6f 72 20 64  f alloca() for d
13f0: 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63  ynamically alloc
1400: 61 74 69 6e 67 20 74 65 6d 70 6f 72 61 72 79 20  ating temporary 
1410: 73 74 61 63 6b 20 73 70 61 63 65 20 66 6f 72 20  stack space for 
1420: 0a 75 73 65 20 77 69 74 68 69 6e 20 61 20 73 69  .use within a si
1430: 6e 67 6c 65 20 66 75 6e 63 74 69 6f 6e 2c 20 6f  ngle function, o
1440: 6e 20 73 79 73 74 65 6d 73 20 74 68 61 74 20 73  n systems that s
1450: 75 70 70 6f 72 74 20 61 6c 6c 6f 63 61 28 29 2e  upport alloca().
1460: 20 20 57 69 74 68 6f 75 74 0a 74 68 69 73 20 6f    Without.this o
1470: 70 74 69 6f 6e 2c 20 74 65 6d 70 6f 72 61 72 79  ption, temporary
1480: 20 73 70 61 63 65 20 69 73 20 61 6c 6c 6f 63 61   space is alloca
1490: 74 65 64 20 66 72 6f 6d 20 74 68 65 20 68 65 61  ted from the hea
14a0: 70 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 57 68 65  p..</ol>..<p>Whe
14b0: 6e 20 61 6c 6c 20 6f 66 20 74 68 65 20 72 65 63  n all of the rec
14c0: 6f 6d 6d 65 6e 64 65 64 20 63 6f 6d 70 69 6c 65  ommended compile
14d0: 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20 61 62  -time options ab
14e0: 6f 76 65 20 61 72 65 20 75 73 65 64 2c 0a 74 68  ove are used,.th
14f0: 65 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79  e SQLite library
1500: 20 77 69 6c 6c 20 62 65 20 61 70 70 72 6f 78 69   will be approxi
1510: 6d 61 74 65 6c 79 20 33 25 20 73 6d 61 6c 6c 65  mately 3% smalle
1520: 72 20 61 6e 64 20 75 73 65 20 61 62 6f 75 74 20  r and use about 
1530: 35 25 20 66 65 77 65 72 0a 43 50 55 20 63 79 63  5% fewer.CPU cyc
1540: 6c 65 73 2e 20 20 53 6f 20 74 68 65 73 65 20 6f  les.  So these o
1550: 70 74 69 6f 6e 73 20 64 6f 20 6e 6f 74 20 6d 61  ptions do not ma
1560: 6b 65 20 61 20 68 75 67 65 20 64 69 66 66 65 72  ke a huge differ
1570: 65 6e 63 65 2e 20 20 42 75 74 20 69 6e 20 0a 73  ence.  But in .s
1580: 6f 6d 65 20 64 65 73 69 67 6e 20 73 69 74 75 61  ome design situa
1590: 74 69 6f 6e 73 2c 20 65 76 65 72 79 20 6c 69 74  tions, every lit
15a0: 74 6c 65 20 62 69 74 20 68 65 6c 70 73 2e 0a 0a  tle bit helps...
15b0: 3c 61 20 6e 61 6d 65 3d 22 6f 73 63 6f 6e 66 69  <a name="osconfi
15c0: 67 22 3e 3c 2f 61 3e 0a 3c 68 31 3e 20 50 6c 61  g"></a>.<h1> Pla
15d0: 74 66 6f 72 6d 20 43 6f 6e 66 69 67 75 72 61 74  tform Configurat
15e0: 69 6f 6e 3c 2f 68 31 3e 0a 0a 3c 74 63 6c 3e 0a  ion</h1>..<tcl>.
15f0: 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b  COMPILE_OPTION {
1600: 5f 48 41 56 45 5f 53 51 4c 49 54 45 5f 43 4f 4e  _HAVE_SQLITE_CON
1610: 46 49 47 5f 48 7d 20 7b 0a 20 20 49 66 20 74 68  FIG_H} {.  If th
1620: 65 20 5f 48 41 56 45 5f 53 51 4c 49 54 45 5f 43  e _HAVE_SQLITE_C
1630: 4f 4e 46 49 47 5f 48 20 6d 61 63 72 6f 20 69 73  ONFIG_H macro is
1640: 20 64 65 66 69 6e 65 64 0a 20 20 74 68 65 6e 20   defined.  then 
1650: 74 68 65 20 53 51 4c 69 74 65 20 73 6f 75 72 63  the SQLite sourc
1660: 65 20 63 6f 64 65 20 77 69 6c 6c 20 61 74 74 65  e code will atte
1670: 6d 70 74 20 74 6f 20 23 69 6e 63 6c 75 64 65 20  mpt to #include 
1680: 61 20 66 69 6c 65 20 6e 61 6d 65 64 20 22 63 6f  a file named "co
1690: 6e 66 69 67 2e 68 22 2e 0a 20 20 54 68 65 20 22  nfig.h"..  The "
16a0: 63 6f 6e 66 69 67 2e 68 22 20 66 69 6c 65 20 75  config.h" file u
16b0: 73 75 61 6c 6c 79 20 63 6f 6e 74 61 69 6e 73 20  sually contains 
16c0: 6f 74 68 65 72 20 63 6f 6e 66 69 67 75 72 61 74  other configurat
16d0: 69 6f 6e 20 6f 70 74 69 6f 6e 73 2c 20 65 73 70  ion options, esp
16e0: 65 63 69 61 6c 6c 79 0a 20 20 22 48 41 56 45 5f  ecially.  "HAVE_
16f0: 3c 69 3e 49 4e 54 45 52 46 41 43 45 3c 2f 69 3e  <i>INTERFACE</i>
1700: 22 20 74 79 70 65 20 6f 70 74 69 6f 6e 73 20 67  " type options g
1710: 65 6e 65 72 61 74 65 64 20 62 79 20 61 75 74 6f  enerated by auto
1720: 63 6f 6e 66 20 73 63 72 69 70 74 73 2e 0a 7d 0a  conf scripts..}.
1730: 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20  .COMPILE_OPTION 
1740: 7b 48 41 56 45 5f 46 44 41 54 41 53 59 4e 43 7d  {HAVE_FDATASYNC}
1750: 20 7b 0a 20 20 49 66 20 74 68 65 20 48 41 56 45   {.  If the HAVE
1760: 5f 46 44 41 54 41 53 59 4e 43 20 63 6f 6d 70 69  _FDATASYNC compi
1770: 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69  le-time option i
1780: 73 20 74 72 75 65 2c 20 74 68 65 6e 20 74 68 65  s true, then the
1790: 20 64 65 66 61 75 6c 74 20 5b 56 46 53 5d 0a 20   default [VFS]. 
17a0: 20 66 6f 72 20 75 6e 69 78 20 73 79 73 74 65 6d   for unix system
17b0: 73 20 77 69 6c 6c 20 61 74 74 65 6d 70 74 20 74  s will attempt t
17c0: 6f 20 75 73 65 20 66 64 61 74 61 73 79 6e 63 28  o use fdatasync(
17d0: 29 20 69 6e 73 74 65 61 64 20 6f 66 20 66 73 79  ) instead of fsy
17e0: 6e 63 28 29 20 77 68 65 72 65 0a 20 20 61 70 70  nc() where.  app
17f0: 72 6f 70 72 69 61 74 65 2e 20 20 49 66 20 74 68  ropriate.  If th
1800: 69 73 20 66 6c 61 67 20 69 73 20 6d 69 73 73 69  is flag is missi
1810: 6e 67 20 6f 72 20 66 61 6c 73 65 2c 20 74 68 65  ng or false, the
1820: 6e 20 66 73 79 6e 63 28 29 20 69 73 20 61 6c 77  n fsync() is alw
1830: 61 79 73 20 75 73 65 64 2e 0a 7d 0a 0a 43 4f 4d  ays used..}..COM
1840: 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 48 41 56  PILE_OPTION {HAV
1850: 45 5f 47 4d 54 49 4d 45 5f 52 7d 20 7b 0a 20 20  E_GMTIME_R} {.  
1860: 49 66 20 74 68 65 20 48 41 56 45 5f 47 4d 54 49  If the HAVE_GMTI
1870: 4d 45 5f 52 20 6f 70 74 69 6f 6e 20 69 73 20 74  ME_R option is t
1880: 72 75 65 20 61 6e 64 20 69 66 20 5b 53 51 4c 49  rue and if [SQLI
1890: 54 45 5f 4f 4d 49 54 5f 44 41 54 45 54 49 4d 45  TE_OMIT_DATETIME
18a0: 5f 46 55 4e 43 53 5d 20 69 73 20 74 72 75 65 2c  _FUNCS] is true,
18b0: 0a 20 20 74 68 65 6e 20 74 68 65 20 43 55 52 52  .  then the CURR
18c0: 45 4e 54 5f 54 49 4d 45 2c 20 43 55 52 52 45 4e  ENT_TIME, CURREN
18d0: 54 5f 44 41 54 45 2c 20 61 6e 64 20 43 55 52 52  T_DATE, and CURR
18e0: 45 4e 54 5f 54 49 4d 45 53 54 41 4d 50 20 6b 65  ENT_TIMESTAMP ke
18f0: 79 77 6f 72 64 73 20 77 69 6c 6c 20 75 73 65 0a  ywords will use.
1900: 20 20 74 68 65 20 74 68 72 65 61 64 73 61 66 65    the threadsafe
1910: 20 22 67 6d 74 69 6d 65 5f 72 28 29 22 20 69 6e   "gmtime_r()" in
1920: 74 65 72 66 61 63 65 20 72 61 74 68 65 72 20 74  terface rather t
1930: 68 61 6e 20 22 67 6d 74 69 6d 65 28 29 22 2e 20  han "gmtime()". 
1940: 20 49 6e 20 74 68 65 20 75 73 75 61 6c 20 63 61   In the usual ca
1950: 73 65 0a 20 20 77 68 65 72 65 20 5b 53 51 4c 49  se.  where [SQLI
1960: 54 45 5f 4f 4d 49 54 5f 44 41 54 45 54 49 4d 45  TE_OMIT_DATETIME
1970: 5f 46 55 4e 43 53 5d 20 69 73 20 6e 6f 74 20 64  _FUNCS] is not d
1980: 65 66 69 6e 65 64 20 6f 72 20 69 73 20 66 61 6c  efined or is fal
1990: 73 65 2c 20 74 68 65 6e 20 74 68 65 0a 20 20 62  se, then the.  b
19a0: 75 69 6c 74 2d 69 6e 20 5b 64 61 74 65 20 61 6e  uilt-in [date an
19b0: 64 20 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73  d time functions
19c0: 5d 20 61 72 65 20 75 73 65 64 20 74 6f 20 69 6d  ] are used to im
19d0: 70 6c 65 6d 65 6e 74 20 74 68 65 20 43 55 52 52  plement the CURR
19e0: 45 4e 54 5f 54 49 4d 45 2c 0a 20 20 43 55 52 52  ENT_TIME,.  CURR
19f0: 45 4e 54 5f 44 41 54 45 2c 20 61 6e 64 20 43 55  ENT_DATE, and CU
1a00: 52 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d 50 20  RRENT_TIMESTAMP 
1a10: 6b 65 79 77 6f 72 64 73 20 61 6e 64 20 6e 65 69  keywords and nei
1a20: 74 68 65 72 20 67 6d 74 69 6d 65 5f 72 28 29 20  ther gmtime_r() 
1a30: 6e 6f 72 0a 20 20 67 6d 74 69 6d 65 28 29 20 69  nor.  gmtime() i
1a40: 73 20 65 76 65 72 20 63 61 6c 6c 65 64 2e 0a 7d  s ever called..}
1a50: 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e  ..COMPILE_OPTION
1a60: 20 7b 48 41 56 45 5f 49 53 4e 41 4e 7d 20 7b 0a   {HAVE_ISNAN} {.
1a70: 20 20 49 66 20 74 68 65 20 48 41 56 45 5f 49 53    If the HAVE_IS
1a80: 4e 41 4e 20 6f 70 74 69 6f 6e 20 69 73 20 74 72  NAN option is tr
1a90: 75 65 2c 20 74 68 65 6e 20 53 51 4c 69 74 65 20  ue, then SQLite 
1aa0: 69 6e 76 6f 6b 65 73 20 74 68 65 20 73 79 73 74  invokes the syst
1ab0: 65 6d 20 6c 69 62 72 61 72 79 20 69 73 6e 61 6e  em library isnan
1ac0: 28 29 0a 20 20 66 75 6e 63 74 69 6f 6e 20 74 6f  ().  function to
1ad0: 20 64 65 74 65 72 6d 69 6e 65 20 69 66 20 61 20   determine if a 
1ae0: 64 6f 75 62 6c 65 2d 70 72 65 63 69 73 69 6f 6e  double-precision
1af0: 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20   floating point 
1b00: 76 61 6c 75 65 20 69 73 20 61 20 4e 61 4e 2e 0a  value is a NaN..
1b10: 20 20 49 66 20 48 41 56 45 5f 49 53 4e 41 4e 20    If HAVE_ISNAN 
1b20: 69 73 20 75 6e 64 65 66 69 6e 65 64 20 6f 72 20  is undefined or 
1b30: 66 61 6c 73 65 2c 20 74 68 65 6e 20 53 51 4c 69  false, then SQLi
1b40: 74 65 20 73 75 62 73 74 69 74 75 74 65 73 20 69  te substitutes i
1b50: 74 73 20 6f 77 6e 20 68 6f 6d 65 2d 67 72 6f 77  ts own home-grow
1b60: 6e 0a 20 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  n.  implementati
1b70: 6f 6e 20 6f 66 20 69 73 6e 61 6e 28 29 2e 0a 7d  on of isnan()..}
1b80: 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e  ..COMPILE_OPTION
1b90: 20 7b 48 41 56 45 5f 4c 4f 43 41 4c 54 49 4d 45   {HAVE_LOCALTIME
1ba0: 5f 52 7d 20 7b 0a 20 20 49 66 20 74 68 65 20 48  _R} {.  If the H
1bb0: 41 56 45 5f 4c 4f 43 41 4c 54 49 4d 45 5f 52 20  AVE_LOCALTIME_R 
1bc0: 6f 70 74 69 6f 6e 20 69 73 20 74 72 75 65 2c 20  option is true, 
1bd0: 74 68 65 6e 20 53 51 4c 69 74 65 20 75 73 65 73  then SQLite uses
1be0: 20 74 68 65 20 74 68 72 65 61 64 73 61 66 65 0a   the threadsafe.
1bf0: 20 20 6c 6f 63 61 6c 74 69 6d 65 5f 72 28 29 20    localtime_r() 
1c00: 6c 69 62 72 61 72 79 20 72 6f 75 74 69 6e 65 20  library routine 
1c10: 69 6e 73 74 65 61 64 20 6f 66 20 6c 6f 63 61 6c  instead of local
1c20: 74 69 6d 65 28 29 0a 20 20 74 6f 20 68 65 6c 70  time().  to help
1c30: 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20 5b   implement the [
1c40: 6c 6f 63 61 6c 74 69 6d 65 20 6d 6f 64 69 66 69  localtime modifi
1c50: 65 72 5d 0a 20 20 74 6f 20 74 68 65 20 62 75 69  er].  to the bui
1c60: 6c 74 2d 69 6e 20 5b 64 61 74 65 20 61 6e 64 20  lt-in [date and 
1c70: 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 5d 2e  time functions].
1c80: 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49  .}..COMPILE_OPTI
1c90: 4f 4e 20 7b 48 41 56 45 5f 4c 4f 43 41 4c 54 49  ON {HAVE_LOCALTI
1ca0: 4d 45 5f 53 7d 20 7b 0a 20 20 49 66 20 74 68 65  ME_S} {.  If the
1cb0: 20 48 41 56 45 5f 4c 4f 43 41 4c 54 49 4d 45 5f   HAVE_LOCALTIME_
1cc0: 53 20 6f 70 74 69 6f 6e 20 69 73 20 74 72 75 65  S option is true
1cd0: 2c 20 74 68 65 6e 20 53 51 4c 69 74 65 20 75 73  , then SQLite us
1ce0: 65 73 20 74 68 65 20 74 68 72 65 61 64 73 61 66  es the threadsaf
1cf0: 65 0a 20 20 6c 6f 63 61 6c 74 69 6d 65 5f 73 28  e.  localtime_s(
1d00: 29 20 6c 69 62 72 61 72 79 20 72 6f 75 74 69 6e  ) library routin
1d10: 65 20 69 6e 73 74 65 61 64 20 6f 66 20 6c 6f 63  e instead of loc
1d20: 61 6c 74 69 6d 65 28 29 0a 20 20 74 6f 20 68 65  altime().  to he
1d30: 6c 70 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65  lp implement the
1d40: 20 5b 6c 6f 63 61 6c 74 69 6d 65 20 6d 6f 64 69   [localtime modi
1d50: 66 69 65 72 5d 0a 20 20 74 6f 20 74 68 65 20 62  fier].  to the b
1d60: 75 69 6c 74 2d 69 6e 20 5b 64 61 74 65 20 61 6e  uilt-in [date an
1d70: 64 20 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73  d time functions
1d80: 5d 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50  ]..}..COMPILE_OP
1d90: 54 49 4f 4e 20 7b 48 41 56 45 5f 4d 41 4c 4c 4f  TION {HAVE_MALLO
1da0: 43 5f 55 53 41 42 4c 45 5f 53 49 5a 45 7d 20 7b  C_USABLE_SIZE} {
1db0: 0a 20 20 49 66 20 74 68 65 20 48 41 56 45 5f 4d  .  If the HAVE_M
1dc0: 41 4c 4c 4f 43 5f 55 53 41 42 4c 45 5f 53 49 5a  ALLOC_USABLE_SIZ
1dd0: 45 20 6f 70 74 69 6f 6e 20 69 73 20 74 72 75 65  E option is true
1de0: 2c 20 74 68 65 6e 20 53 51 4c 69 74 65 20 74 72  , then SQLite tr
1df0: 69 65 73 20 75 73 65 73 20 74 68 65 0a 20 20 6d  ies uses the.  m
1e00: 61 6c 6c 6f 63 5f 75 73 61 62 6c 65 5f 73 69 7a  alloc_usable_siz
1e10: 65 28 29 20 69 6e 74 65 72 66 61 63 65 20 74 6f  e() interface to
1e20: 20 66 69 6e 64 20 74 68 65 20 73 69 7a 65 20 6f   find the size o
1e30: 66 20 61 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  f a memory alloc
1e40: 61 74 69 6f 6e 20 6f 62 74 61 69 6e 65 64 0a 20  ation obtained. 
1e50: 20 66 72 6f 6d 20 74 68 65 20 73 74 61 6e 64 61   from the standa
1e60: 72 64 2d 6c 69 62 72 61 72 79 20 6d 61 6c 6c 6f  rd-library mallo
1e70: 63 28 29 20 6f 72 20 72 65 61 6c 6c 6f 63 28 29  c() or realloc()
1e80: 20 72 6f 75 74 69 6e 65 73 2e 20 20 54 68 69 73   routines.  This
1e90: 20 6f 70 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 0a   option is only.
1ea0: 20 20 61 70 70 6c 69 63 61 62 6c 65 20 69 66 20    applicable if 
1eb0: 74 68 65 20 73 74 61 6e 64 61 72 64 2d 6c 69 62  the standard-lib
1ec0: 72 61 72 79 20 6d 61 6c 6c 6f 63 28 29 20 69 73  rary malloc() is
1ed0: 20 75 73 65 64 2e 20 20 4f 6e 20 41 70 70 6c 65   used.  On Apple
1ee0: 20 73 79 73 74 65 6d 73 2c 0a 20 20 22 7a 6f 6e   systems,.  "zon
1ef0: 65 20 6d 61 6c 6c 6f 63 22 20 69 73 20 75 73 65  e malloc" is use
1f00: 64 20 69 6e 73 74 65 61 64 2c 20 61 6e 64 20 73  d instead, and s
1f10: 6f 20 74 68 69 73 20 6f 70 74 69 6f 6e 20 69 73  o this option is
1f20: 20 6e 6f 74 20 61 70 70 6c 69 63 61 62 6c 65 2e   not applicable.
1f30: 20 20 41 6e 64 2c 20 6f 66 0a 20 20 63 6f 75 72    And, of.  cour
1f40: 73 65 2c 20 69 66 20 74 68 65 20 61 70 70 6c 69  se, if the appli
1f50: 63 61 74 69 6f 6e 20 73 75 70 70 6c 69 65 73 20  cation supplies 
1f60: 69 74 73 20 6f 77 6e 20 6d 61 6c 6c 6f 63 20 69  its own malloc i
1f70: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 75 73  mplementation us
1f80: 69 6e 67 0a 20 20 5b 53 51 4c 49 54 45 5f 43 4f  ing.  [SQLITE_CO
1f90: 4e 46 49 47 5f 4d 41 4c 4c 4f 43 5d 20 74 68 65  NFIG_MALLOC] the
1fa0: 6e 20 74 68 69 73 20 6f 70 74 69 6f 6e 20 68 61  n this option ha
1fb0: 73 20 6e 6f 20 65 66 66 65 63 74 2e 0a 20 20 3c  s no effect..  <
1fc0: 70 3e 0a 20 20 49 66 20 74 68 65 20 48 41 56 45  p>.  If the HAVE
1fd0: 5f 4d 41 4c 4c 4f 43 5f 55 53 41 42 4c 45 5f 53  _MALLOC_USABLE_S
1fe0: 49 5a 45 20 6f 70 74 69 6f 6e 20 69 73 20 6f 6d  IZE option is om
1ff0: 69 74 74 65 64 20 6f 72 20 69 73 20 66 61 6c 73  itted or is fals
2000: 65 2c 20 74 68 65 6e 20 53 51 4c 69 74 65 20 0a  e, then SQLite .
2010: 20 20 75 73 65 73 20 61 20 77 72 61 70 70 65 72    uses a wrapper
2020: 20 61 72 6f 75 6e 64 20 73 79 73 74 65 6d 20 6d   around system m
2030: 61 6c 6c 6f 63 28 29 20 61 6e 64 20 72 65 61 6c  alloc() and real
2040: 6c 6f 63 28 29 20 74 68 61 74 20 65 6e 6c 61 72  loc() that enlar
2050: 67 65 73 20 65 61 63 68 20 61 6c 6c 6f 63 61 74  ges each allocat
2060: 69 6f 6e 0a 20 20 62 79 20 38 20 62 79 74 65 73  ion.  by 8 bytes
2070: 20 61 6e 64 20 77 72 69 74 65 73 20 74 68 65 20   and writes the 
2080: 73 69 7a 65 20 6f 66 20 74 68 65 20 61 6c 6c 6f  size of the allo
2090: 63 61 74 69 6f 6e 20 69 6e 20 74 68 65 20 69 6e  cation in the in
20a0: 69 74 69 61 6c 20 38 20 62 79 74 65 73 2c 20 61  itial 8 bytes, a
20b0: 6e 64 0a 20 20 74 68 65 6e 20 53 51 4c 69 74 65  nd.  then SQLite
20c0: 20 61 6c 73 6f 20 69 6d 70 6c 65 6d 65 6e 74 73   also implements
20d0: 20 69 74 73 20 6f 77 6e 20 68 6f 6d 65 2d 67 72   its own home-gr
20e0: 6f 77 6e 20 76 65 72 73 69 6f 6e 20 6f 66 20 6d  own version of m
20f0: 61 6c 6c 6f 63 5f 75 73 61 62 6c 65 5f 73 69 7a  alloc_usable_siz
2100: 65 28 29 0a 20 20 74 68 61 74 20 63 6f 6e 73 75  e().  that consu
2110: 6c 74 73 20 74 68 61 74 20 38 2d 62 79 74 65 20  lts that 8-byte 
2120: 70 72 65 66 69 78 20 74 6f 20 66 69 6e 64 20 74  prefix to find t
2130: 68 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73 69  he allocation si
2140: 7a 65 2e 20 20 54 68 69 73 20 61 70 70 72 6f 61  ze.  This approa
2150: 63 68 0a 20 20 77 6f 72 6b 73 20 62 75 74 20 69  ch.  works but i
2160: 74 20 69 73 20 73 75 62 6f 70 74 69 6d 61 6c 2e  t is suboptimal.
2170: 20 20 41 70 70 6c 69 63 61 74 69 6f 6e 73 20 61    Applications a
2180: 72 65 20 65 6e 63 6f 75 72 61 67 65 64 20 74 6f  re encouraged to
2190: 20 75 73 65 0a 20 20 48 41 56 45 5f 4d 41 4c 4c   use.  HAVE_MALL
21a0: 4f 43 5f 55 53 41 42 4c 45 5f 53 49 5a 45 20 77  OC_USABLE_SIZE w
21b0: 68 65 6e 65 76 65 72 20 70 6f 73 73 69 62 6c 65  henever possible
21c0: 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54  ..}..COMPILE_OPT
21d0: 49 4f 4e 20 7b 48 41 56 45 5f 53 54 52 43 48 52  ION {HAVE_STRCHR
21e0: 4e 55 4c 7d 20 7b 0a 20 20 49 66 20 74 68 65 20  NUL} {.  If the 
21f0: 48 41 56 45 5f 53 54 52 43 48 52 4e 55 4c 20 6f  HAVE_STRCHRNUL o
2200: 70 74 69 6f 6e 20 69 73 20 74 72 75 65 2c 20 74  ption is true, t
2210: 68 65 6e 20 53 51 4c 69 74 65 20 75 73 65 73 20  hen SQLite uses 
2220: 74 68 65 20 73 74 72 63 68 72 6e 75 6c 28 29 20  the strchrnul() 
2230: 6c 69 62 72 61 72 79 0a 20 20 66 75 6e 63 74 69  library.  functi
2240: 6f 6e 2e 20 20 49 66 20 74 68 69 73 20 6f 70 74  on.  If this opt
2250: 69 6f 6e 20 69 73 20 6d 69 73 73 69 6e 67 20 6f  ion is missing o
2260: 72 20 66 61 6c 73 65 2c 20 74 68 65 6e 20 53 51  r false, then SQ
2270: 4c 69 74 65 20 73 75 62 73 74 69 74 75 74 65 73  Lite substitutes
2280: 20 69 74 73 20 6f 77 6e 0a 20 20 68 6f 6d 65 2d   its own.  home-
2290: 67 72 6f 77 6e 20 69 6d 70 6c 65 6d 65 6e 74 61  grown implementa
22a0: 74 69 6f 6e 20 6f 66 20 73 74 72 63 68 72 6e 75  tion of strchrnu
22b0: 6c 28 29 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f  l()..}..COMPILE_
22c0: 4f 50 54 49 4f 4e 20 7b 48 41 56 45 5f 55 53 4c  OPTION {HAVE_USL
22d0: 45 45 50 7d 20 7b 0a 20 20 49 66 20 74 68 65 20  EEP} {.  If the 
22e0: 48 41 56 45 5f 55 53 4c 45 45 50 20 6f 70 74 69  HAVE_USLEEP opti
22f0: 6f 6e 20 69 73 20 74 72 75 65 2c 20 74 68 65 6e  on is true, then
2300: 20 74 68 65 20 64 65 66 61 75 6c 74 20 75 6e 69   the default uni
2310: 78 20 56 46 53 20 75 73 65 73 20 74 68 65 0a 20  x VFS uses the. 
2320: 20 75 73 6c 65 65 70 28 29 20 73 79 73 74 65 6d   usleep() system
2330: 20 63 61 6c 6c 20 74 6f 20 69 6d 70 6c 65 6d 65   call to impleme
2340: 6e 74 20 74 68 65 20 78 53 6c 65 65 70 20 6d 65  nt the xSleep me
2350: 74 68 6f 64 2e 20 20 49 66 20 74 68 69 73 20 6f  thod.  If this o
2360: 70 74 69 6f 6e 20 69 73 0a 20 20 75 6e 64 65 66  ption is.  undef
2370: 69 6e 65 64 20 6f 72 20 66 61 6c 73 65 2c 20 74  ined or false, t
2380: 68 65 6e 20 78 53 6c 65 65 70 20 6f 6e 20 75 6e  hen xSleep on un
2390: 69 78 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65  ix is implemente
23a0: 64 20 75 73 69 6e 67 20 73 6c 65 65 70 28 29 20  d using sleep() 
23b0: 77 68 69 63 68 0a 20 20 6d 65 61 6e 73 20 74 68  which.  means th
23c0: 61 74 20 5b 73 71 6c 69 74 65 33 5f 73 6c 65 65  at [sqlite3_slee
23d0: 70 28 29 5d 20 77 69 6c 6c 20 68 61 76 65 20 61  p()] will have a
23e0: 20 6d 69 6e 69 6d 75 6d 20 77 61 69 74 20 69 6e   minimum wait in
23f0: 74 65 72 76 61 6c 20 6f 66 20 31 30 30 30 0a 20  terval of 1000. 
2400: 20 6d 69 6c 6c 69 73 65 63 6f 6e 64 73 20 72 65   milliseconds re
2410: 67 61 72 64 6c 65 73 73 20 6f 66 20 69 74 73 20  gardless of its 
2420: 61 72 67 75 6d 65 6e 74 2e 20 20 0a 7d 0a 0a 43  argument.  .}..C
2430: 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 48  OMPILE_OPTION {H
2440: 41 56 45 5f 55 54 49 4d 45 7d 20 7b 0a 20 20 49  AVE_UTIME} {.  I
2450: 66 20 74 68 65 20 48 41 56 45 5f 55 54 49 4d 45  f the HAVE_UTIME
2460: 20 6f 70 74 69 6f 6e 20 69 73 20 74 72 75 65 2c   option is true,
2470: 20 74 68 65 6e 20 74 68 65 20 62 75 69 6c 74 2d   then the built-
2480: 69 6e 20 62 75 74 20 6e 6f 6e 2d 73 74 61 6e 64  in but non-stand
2490: 61 72 64 0a 20 20 22 75 6e 69 78 2d 64 6f 74 66  ard.  "unix-dotf
24a0: 69 6c 65 22 20 56 46 53 20 77 69 6c 6c 20 75 73  ile" VFS will us
24b0: 65 20 74 68 65 20 75 74 69 6d 65 28 29 20 73 79  e the utime() sy
24c0: 73 74 65 6d 20 63 61 6c 6c 2c 20 69 6e 73 74 65  stem call, inste
24d0: 61 64 20 6f 66 20 75 74 69 6d 65 73 28 29 2c 0a  ad of utimes(),.
24e0: 20 20 74 6f 20 73 65 74 20 74 68 65 20 6c 61 73    to set the las
24f0: 74 20 61 63 63 65 73 73 20 74 69 6d 65 20 6f 6e  t access time on
2500: 20 74 68 65 20 6c 6f 63 6b 20 66 69 6c 65 2e 0a   the lock file..
2510: 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f  }..COMPILE_OPTIO
2520: 4e 20 7b 53 51 4c 49 54 45 5f 42 59 54 45 4f 52  N {SQLITE_BYTEOR
2530: 44 45 52 3d 3c 69 3e 28 30 7c 31 32 33 34 7c 34  DER=<i>(0|1234|4
2540: 33 32 31 29 3c 2f 69 3e 7d 20 7b 0a 20 20 53 51  321)</i>} {.  SQ
2550: 4c 69 74 65 20 6e 65 65 64 73 20 74 6f 20 6b 6e  Lite needs to kn
2560: 6f 77 20 69 66 20 74 68 65 20 6e 61 74 69 76 65  ow if the native
2570: 20 62 79 74 65 20 6f 72 64 65 72 20 6f 66 20 74   byte order of t
2580: 68 65 20 74 61 72 67 65 74 20 43 50 55 20 69 73  he target CPU is
2590: 0a 20 20 62 69 67 2d 65 6e 64 69 61 6e 20 6f 72  .  big-endian or
25a0: 20 6c 69 74 74 6c 65 2d 65 6e 64 69 6e 67 2e 20   little-ending. 
25b0: 20 54 68 65 20 53 51 4c 49 54 45 5f 42 59 54 45   The SQLITE_BYTE
25c0: 4f 52 44 45 52 20 70 72 65 70 72 6f 63 65 73 73  ORDER preprocess
25d0: 6f 72 20 69 73 20 73 65 74 0a 20 20 74 6f 20 34  or is set.  to 4
25e0: 33 32 31 20 66 6f 72 20 62 69 67 2d 65 6e 64 69  321 for big-endi
25f0: 61 6e 20 6d 61 63 68 69 6e 65 73 20 61 6e 64 20  an machines and 
2600: 31 32 33 34 20 66 6f 72 20 6c 69 74 74 6c 65 2d  1234 for little-
2610: 65 6e 64 69 61 6e 20 6d 61 63 68 69 6e 65 73 2c  endian machines,
2620: 20 6f 72 0a 20 20 69 74 20 63 61 6e 20 62 65 20   or.  it can be 
2630: 30 20 74 6f 20 6d 65 61 6e 20 74 68 61 74 20 74  0 to mean that t
2640: 68 65 20 62 79 74 65 20 6f 72 64 65 72 20 6d 75  he byte order mu
2650: 73 74 20 62 65 20 64 65 74 65 72 6d 69 6e 65 64  st be determined
2660: 20 61 74 20 72 75 6e 2d 74 69 6d 65 2e 0a 20 20   at run-time..  
2670: 54 68 65 72 65 20 61 72 65 20 23 69 66 64 65 66  There are #ifdef
2680: 73 20 69 6e 20 74 68 65 20 63 6f 64 65 20 74 68  s in the code th
2690: 61 74 20 73 65 74 20 53 51 4c 49 54 45 5f 42 59  at set SQLITE_BY
26a0: 54 45 4f 52 44 45 52 20 61 75 74 6f 6d 61 74 69  TEORDER automati
26b0: 63 61 6c 6c 79 0a 20 20 66 6f 72 20 61 6c 6c 20  cally.  for all 
26c0: 63 6f 6d 6d 6f 6e 20 70 6c 61 74 66 6f 72 6d 73  common platforms
26d0: 20 61 6e 64 20 63 6f 6d 70 69 6c 65 72 73 2e 20   and compilers. 
26e0: 20 48 6f 77 65 76 65 72 2c 20 69 74 20 6d 61 79   However, it may
26f0: 20 62 65 20 61 64 76 61 6e 74 61 67 65 6f 75 73   be advantageous
2700: 0a 20 20 74 6f 20 73 65 74 20 53 51 4c 49 54 45  .  to set SQLITE
2710: 5f 42 59 54 45 4f 52 44 45 52 20 61 70 70 72 6f  _BYTEORDER appro
2720: 70 72 69 61 74 65 6c 79 20 77 68 65 6e 20 63 6f  priately when co
2730: 6d 70 69 6c 69 6e 67 20 53 51 4c 69 74 65 20 66  mpiling SQLite f
2740: 6f 72 20 6f 62 73 63 75 72 65 0a 20 20 74 61 72  or obscure.  tar
2750: 67 65 74 73 2e 20 20 49 66 20 74 68 65 20 74 61  gets.  If the ta
2760: 72 67 65 74 20 62 79 74 65 20 6f 72 64 65 72 20  rget byte order 
2770: 63 61 6e 6e 6f 74 20 62 65 20 64 65 74 65 72 6d  cannot be determ
2780: 69 6e 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d  ined at compile-
2790: 74 69 6d 65 2c 0a 20 20 74 68 65 6e 20 53 51 4c  time,.  then SQL
27a0: 69 74 65 20 66 61 6c 6c 73 20 62 61 63 6b 20 74  ite falls back t
27b0: 6f 20 64 6f 69 6e 67 20 72 75 6e 2d 74 69 6d 65  o doing run-time
27c0: 20 63 68 65 63 6b 73 2c 20 77 68 69 63 68 20 61   checks, which a
27d0: 6c 77 61 79 73 20 77 6f 72 6b 2c 20 74 68 6f 75  lways work, thou
27e0: 67 68 0a 20 20 77 69 74 68 20 61 20 73 6d 61 6c  gh.  with a smal
27f0: 6c 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 70 65  l performance pe
2800: 6e 61 6c 74 79 2e 0a 7d 0a 3c 2f 74 63 6c 3e 0a  nalty..}.</tcl>.
2810: 0a 3c 61 20 6e 61 6d 65 3d 22 64 65 66 61 75 6c  .<a name="defaul
2820: 74 73 22 3e 3c 2f 61 3e 0a 3c 68 31 3e 20 4f 70  ts"></a>.<h1> Op
2830: 74 69 6f 6e 73 20 54 6f 20 53 65 74 20 44 65 66  tions To Set Def
2840: 61 75 6c 74 20 50 61 72 61 6d 65 74 65 72 20 56  ault Parameter V
2850: 61 6c 75 65 73 3c 2f 68 31 3e 0a 0a 3c 74 63 6c  alues</h1>..<tcl
2860: 3e 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f  >..COMPILE_OPTIO
2870: 4e 20 7b 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  N {SQLITE_DEFAUL
2880: 54 5f 41 55 54 4f 4d 41 54 49 43 5f 49 4e 44 45  T_AUTOMATIC_INDE
2890: 58 3d 3c 69 3e 26 6c 74 3b 30 20 6f 72 20 31 26  X=<i>&lt;0 or 1&
28a0: 67 74 3b 3c 2f 69 3e 7d 20 7b 0a 20 20 54 68 69  gt;</i>} {.  Thi
28b0: 73 20 6d 61 63 72 6f 20 64 65 74 65 72 6d 69 6e  s macro determin
28c0: 65 73 20 74 68 65 20 69 6e 69 74 69 61 6c 20 73  es the initial s
28d0: 65 74 74 69 6e 67 20 66 6f 72 20 5b 50 52 41 47  etting for [PRAG
28e0: 4d 41 20 61 75 74 6f 6d 61 74 69 63 5f 69 6e 64  MA automatic_ind
28f0: 65 78 5d 0a 20 20 66 6f 72 20 6e 65 77 6c 79 20  ex].  for newly 
2900: 6f 70 65 6e 65 64 20 5b 64 61 74 61 62 61 73 65  opened [database
2910: 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 5d 2e 0a 20   connections].. 
2920: 20 46 6f 72 20 61 6c 6c 20 76 65 72 73 69 6f 6e   For all version
2930: 73 20 6f 66 20 53 51 4c 69 74 65 20 74 68 72 6f  s of SQLite thro
2940: 75 67 68 20 33 2e 37 2e 31 37 2c 0a 20 20 61 75  ugh 3.7.17,.  au
2950: 74 6f 6d 61 74 69 63 20 69 6e 64 69 63 65 73 20  tomatic indices 
2960: 61 72 65 20 6e 6f 72 6d 61 6c 6c 79 20 65 6e 61  are normally ena
2970: 62 6c 65 64 20 66 6f 72 20 6e 65 77 20 64 61 74  bled for new dat
2980: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
2990: 73 20 69 66 0a 20 20 74 68 69 73 20 63 6f 6d 70  s if.  this comp
29a0: 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20  ile-time option 
29b0: 69 73 20 6f 6d 69 74 74 65 64 2e 0a 20 20 48 6f  is omitted..  Ho
29c0: 77 65 76 65 72 2c 20 74 68 61 74 20 6d 69 67 68  wever, that migh
29d0: 74 20 63 68 61 6e 67 65 20 69 6e 20 66 75 74 75  t change in futu
29e0: 72 65 20 72 65 6c 65 61 73 65 73 20 6f 66 20 53  re releases of S
29f0: 51 4c 69 74 65 2e 0a 20 20 3c 70 3e 53 65 65 20  QLite..  <p>See 
2a00: 61 6c 73 6f 3a 20 5b 53 51 4c 49 54 45 5f 4f 4d  also: [SQLITE_OM
2a10: 49 54 5f 41 55 54 4f 4d 41 54 49 43 5f 49 4e 44  IT_AUTOMATIC_IND
2a20: 45 58 5d 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f  EX].}..COMPILE_O
2a30: 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 44 45  PTION {SQLITE_DE
2a40: 46 41 55 4c 54 5f 41 55 54 4f 56 41 43 55 55 4d  FAULT_AUTOVACUUM
2a50: 3d 3c 69 3e 26 6c 74 3b 30 20 6f 72 20 31 20 6f  =<i>&lt;0 or 1 o
2a60: 72 20 32 26 67 74 3b 3c 2f 69 3e 7d 20 7b 0a 20  r 2&gt;</i>} {. 
2a70: 20 54 68 69 73 20 6d 61 63 72 6f 20 64 65 74 65   This macro dete
2a80: 72 6d 69 6e 65 73 20 69 66 20 53 51 4c 69 74 65  rmines if SQLite
2a90: 20 63 72 65 61 74 65 73 20 64 61 74 61 62 61 73   creates databas
2aa0: 65 73 20 77 69 74 68 20 74 68 65 20 0a 20 20 5b  es with the .  [
2ab0: 61 75 74 6f 5f 76 61 63 75 75 6d 5d 20 66 6c 61  auto_vacuum] fla
2ac0: 67 20 73 65 74 20 62 79 20 64 65 66 61 75 6c 74  g set by default
2ad0: 20 74 6f 20 4f 46 46 20 28 30 29 2c 20 46 55 4c   to OFF (0), FUL
2ae0: 4c 20 28 31 29 2c 20 6f 72 0a 20 20 49 4e 43 52  L (1), or.  INCR
2af0: 45 4d 45 4e 54 41 4c 20 28 32 29 2e 20 54 68 65  EMENTAL (2). The
2b00: 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 69   default value i
2b10: 73 20 30 20 6d 65 61 6e 69 6e 67 20 74 68 61 74  s 0 meaning that
2b20: 20 64 61 74 61 62 61 73 65 73 0a 20 20 61 72 65   databases.  are
2b30: 20 63 72 65 61 74 65 64 20 77 69 74 68 20 61 75   created with au
2b40: 74 6f 2d 76 61 63 75 75 6d 20 74 75 72 6e 65 64  to-vacuum turned
2b50: 20 6f 66 66 2e 0a 20 20 49 6e 20 61 6e 79 20 63   off..  In any c
2b60: 61 73 65 20 74 68 65 20 63 6f 6d 70 69 6c 65 2d  ase the compile-
2b70: 74 69 6d 65 20 64 65 66 61 75 6c 74 20 6d 61 79  time default may
2b80: 20 62 65 20 6f 76 65 72 72 69 64 64 65 6e 20 62   be overridden b
2b90: 79 20 74 68 65 20 0a 20 20 5b 50 52 41 47 4d 41  y the .  [PRAGMA
2ba0: 20 61 75 74 6f 5f 76 61 63 75 75 6d 5d 20 63 6f   auto_vacuum] co
2bb0: 6d 6d 61 6e 64 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c  mmand..}..COMPIL
2bc0: 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45  E_OPTION {SQLITE
2bd0: 5f 44 45 46 41 55 4c 54 5f 43 41 43 48 45 5f 53  _DEFAULT_CACHE_S
2be0: 49 5a 45 3d 3c 69 3e 26 6c 74 3b 4e 26 67 74 3b  IZE=<i>&lt;N&gt;
2bf0: 3c 2f 69 3e 7d 20 7b 0a 20 20 54 68 69 73 20 6d  </i>} {.  This m
2c00: 61 63 72 6f 20 73 65 74 73 20 74 68 65 20 64 65  acro sets the de
2c10: 66 61 75 6c 74 20 6d 61 78 69 6d 75 6d 20 73 69  fault maximum si
2c20: 7a 65 20 6f 66 20 74 68 65 20 70 61 67 65 2d 63  ze of the page-c
2c30: 61 63 68 65 20 66 6f 72 20 65 61 63 68 20 61 74  ache for each at
2c40: 74 61 63 68 65 64 0a 20 20 64 61 74 61 62 61 73  tached.  databas
2c50: 65 2e 20 20 41 20 70 6f 73 69 74 69 76 65 20 76  e.  A positive v
2c60: 61 6c 75 65 20 6d 65 61 6e 73 20 74 68 61 74 20  alue means that 
2c70: 74 68 65 20 6c 69 6d 69 74 20 69 73 20 4e 20 70  the limit is N p
2c80: 61 67 65 2e 20 20 49 66 20 4e 20 69 73 20 6e 65  age.  If N is ne
2c90: 67 61 74 69 76 65 0a 20 20 74 68 61 74 20 6d 65  gative.  that me
2ca0: 61 6e 73 20 74 6f 20 6c 69 6d 69 74 20 74 68 65  ans to limit the
2cb0: 20 63 61 63 68 65 20 73 69 7a 65 20 74 6f 20 2d   cache size to -
2cc0: 4e 2a 31 30 32 34 20 62 79 74 65 73 2e 0a 20 20  N*1024 bytes..  
2cd0: 54 68 65 20 73 75 67 67 65 73 74 65 64 20 6d 61  The suggested ma
2ce0: 78 69 6d 75 6d 20 63 61 63 68 65 20 73 69 7a 65  ximum cache size
2cf0: 20 63 61 6e 20 62 65 20 6f 76 65 72 72 69 64 64   can be overridd
2d00: 65 6e 20 62 79 20 74 68 65 20 0a 20 20 5b 50 52  en by the .  [PR
2d10: 41 47 4d 41 20 63 61 63 68 65 5f 73 69 7a 65 5d  AGMA cache_size]
2d20: 20 63 6f 6d 6d 61 6e 64 2e 20 54 68 65 20 64 65   command. The de
2d30: 66 61 75 6c 74 20 76 61 6c 75 65 20 69 73 20 2d  fault value is -
2d40: 32 30 30 30 2c 20 77 68 69 63 68 20 74 72 61 6e  2000, which tran
2d50: 73 6c 61 74 65 73 0a 20 20 69 6e 74 6f 20 61 20  slates.  into a 
2d60: 6d 61 78 69 6d 75 6d 20 6f 66 20 32 30 34 38 30  maximum of 20480
2d70: 30 30 20 62 79 74 65 73 20 70 65 72 20 63 61 63  00 bytes per cac
2d80: 68 65 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f  he..}..COMPILE_O
2d90: 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 44 45  PTION {SQLITE_DE
2da0: 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d 41  FAULT_FILE_FORMA
2db0: 54 3d 3c 69 3e 26 6c 74 3b 31 20 6f 72 20 34 26  T=<i>&lt;1 or 4&
2dc0: 67 74 3b 3c 2f 69 3e 7d 20 7b 0a 20 20 54 68 65  gt;</i>} {.  The
2dd0: 20 64 65 66 61 75 6c 74 20 5b 73 63 68 65 6d 61   default [schema
2de0: 20 66 6f 72 6d 61 74 20 6e 75 6d 62 65 72 5d 20   format number] 
2df0: 75 73 65 64 20 62 79 20 53 51 4c 69 74 65 20 77  used by SQLite w
2e00: 68 65 6e 20 63 72 65 61 74 69 6e 67 0a 20 20 6e  hen creating.  n
2e10: 65 77 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ew database file
2e20: 73 20 69 73 20 73 65 74 20 62 79 20 74 68 69 73  s is set by this
2e30: 20 6d 61 63 72 6f 2e 20 20 54 68 65 20 73 63 68   macro.  The sch
2e40: 65 6d 61 20 66 6f 72 6d 61 74 73 20 61 72 65 20  ema formats are 
2e50: 61 6c 6c 0a 20 20 76 65 72 79 20 73 69 6d 69 6c  all.  very simil
2e60: 61 72 2e 20 20 54 68 65 20 64 69 66 66 65 72 65  ar.  The differe
2e70: 6e 63 65 20 62 65 74 77 65 65 6e 20 66 6f 72 6d  nce between form
2e80: 61 74 73 20 31 20 61 6e 64 20 34 20 69 73 20 74  ats 1 and 4 is t
2e90: 68 61 74 20 66 6f 72 6d 61 74 0a 20 20 34 20 75  hat format.  4 u
2ea0: 6e 64 65 72 73 74 61 6e 64 73 20 5b 64 65 73 63  nderstands [desc
2eb0: 65 6e 64 69 6e 67 20 69 6e 64 69 63 65 73 5d 20  ending indices] 
2ec0: 61 6e 64 20 68 61 73 20 61 20 74 69 67 68 74 65  and has a tighte
2ed0: 72 20 65 6e 63 6f 64 69 6e 67 20 66 6f 72 0a 20  r encoding for. 
2ee0: 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 73 2e   boolean values.
2ef0: 0a 0a 20 20 41 6c 6c 20 76 65 72 73 69 6f 6e 73  ..  All versions
2f00: 20 6f 66 20 53 51 4c 69 74 65 20 73 69 6e 63 65   of SQLite since
2f10: 20 33 2e 33 2e 30 20 28 32 30 30 36 2d 30 31 2d   3.3.0 (2006-01-
2f20: 31 30 29 0a 20 20 63 61 6e 20 72 65 61 64 20 61  10).  can read a
2f30: 6e 64 20 77 72 69 74 65 20 61 6e 79 20 73 63 68  nd write any sch
2f40: 65 6d 61 20 66 6f 72 6d 61 74 0a 20 20 62 65 74  ema format.  bet
2f50: 77 65 65 6e 20 31 20 61 6e 64 20 34 2e 20 20 42  ween 1 and 4.  B
2f60: 75 74 20 6f 6c 64 65 72 20 76 65 72 73 69 6f 6e  ut older version
2f70: 73 20 6f 66 20 53 51 4c 69 74 65 20 6d 69 67 68  s of SQLite migh
2f80: 74 20 6e 6f 74 20 62 65 20 61 62 6c 65 20 74 6f  t not be able to
2f90: 0a 20 20 72 65 61 64 20 66 6f 72 6d 61 74 73 20  .  read formats 
2fa0: 67 72 65 61 74 65 72 20 74 68 61 6e 20 31 2e 20  greater than 1. 
2fb0: 20 53 6f 20 74 68 61 74 20 6f 6c 64 65 72 20 76   So that older v
2fc0: 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74  ersions of SQLit
2fd0: 65 20 77 69 6c 6c 0a 20 20 62 65 20 61 62 6c 65  e will.  be able
2fe0: 20 74 6f 20 72 65 61 64 20 61 6e 64 20 77 72 69   to read and wri
2ff0: 74 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  te database file
3000: 73 20 63 72 65 61 74 65 64 20 62 79 20 6e 65 77  s created by new
3010: 65 72 20 76 65 72 73 69 6f 6e 73 0a 20 20 6f 66  er versions.  of
3020: 20 53 51 4c 69 74 65 2c 20 74 68 65 20 64 65 66   SQLite, the def
3030: 61 75 6c 74 20 73 63 68 65 6d 61 20 66 6f 72 6d  ault schema form
3040: 61 74 20 77 61 73 20 73 65 74 20 74 6f 20 31 20  at was set to 1 
3050: 66 6f 72 20 53 51 4c 69 74 65 20 76 65 72 73 69  for SQLite versi
3060: 6f 6e 73 0a 20 20 74 68 72 6f 75 67 68 20 33 2e  ons.  through 3.
3070: 37 2e 39 20 28 32 30 31 31 2d 31 31 2d 30 31 29  7.9 (2011-11-01)
3080: 2e 20 20 42 65 67 69 6e 6e 69 6e 67 20 77 69 74  .  Beginning wit
3090: 68 20 0a 20 20 5b 76 65 72 73 69 6f 6e 20 33 2e  h .  [version 3.
30a0: 37 2e 31 30 5d 20 28 5b 64 61 74 65 6f 66 3a 33  7.10] ([dateof:3
30b0: 2e 37 2e 31 30 5d 29 2c 20 74 68 65 20 64 65 66  .7.10]), the def
30c0: 61 75 6c 74 0a 20 20 73 63 68 65 6d 61 20 66 6f  ault.  schema fo
30d0: 72 6d 61 74 20 69 73 20 34 2e 0a 0a 20 20 54 68  rmat is 4...  Th
30e0: 65 20 73 63 68 65 6d 61 20 66 6f 72 6d 61 74 20  e schema format 
30f0: 6e 75 6d 62 65 72 20 66 6f 72 20 61 20 6e 65 77  number for a new
3100: 20 64 61 74 61 62 61 73 65 20 63 61 6e 20 62 65   database can be
3110: 20 73 65 74 20 61 74 20 72 75 6e 74 69 6d 65 20   set at runtime 
3120: 75 73 69 6e 67 0a 20 20 74 68 65 20 5b 50 52 41  using.  the [PRA
3130: 47 4d 41 20 6c 65 67 61 63 79 5f 66 69 6c 65 5f  GMA legacy_file_
3140: 66 6f 72 6d 61 74 5d 20 63 6f 6d 6d 61 6e 64 2e  format] command.
3150: 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49  .}..COMPILE_OPTI
3160: 4f 4e 20 7b 53 51 4c 49 54 45 5f 44 45 46 41 55  ON {SQLITE_DEFAU
3170: 4c 54 5f 46 49 4c 45 5f 50 45 52 4d 49 53 53 49  LT_FILE_PERMISSI
3180: 4f 4e 53 3d 3c 69 3e 4e 3c 2f 69 3e 7d 20 7b 0a  ONS=<i>N</i>} {.
3190: 20 20 54 68 65 20 64 65 66 61 75 6c 74 20 6e 75    The default nu
31a0: 6d 65 72 69 63 20 66 69 6c 65 20 70 65 72 6d 69  meric file permi
31b0: 73 73 69 6f 6e 73 20 66 6f 72 20 6e 65 77 6c 79  ssions for newly
31c0: 20 63 72 65 61 74 65 64 20 64 61 74 61 62 61 73   created databas
31d0: 65 20 66 69 6c 65 73 0a 20 20 75 6e 64 65 72 20  e files.  under 
31e0: 75 6e 69 78 2e 20 20 49 66 20 6e 6f 74 20 73 70  unix.  If not sp
31f0: 65 63 69 66 69 65 64 2c 20 74 68 65 20 64 65 66  ecified, the def
3200: 61 75 6c 74 20 69 73 20 30 36 34 34 20 77 68 69  ault is 0644 whi
3210: 63 68 20 6d 65 61 6e 73 20 74 68 61 74 0a 20 20  ch means that.  
3220: 74 68 65 20 66 69 6c 65 73 20 69 73 20 67 6c 6f  the files is glo
3230: 62 61 6c 6c 79 20 72 65 61 64 61 62 6c 65 20 62  bally readable b
3240: 75 74 20 6f 6e 6c 79 20 77 72 69 74 61 62 6c 65  ut only writable
3250: 20 62 79 20 74 68 65 20 63 72 65 61 74 6f 72 2e   by the creator.
3260: 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49  .}..COMPILE_OPTI
3270: 4f 4e 20 7b 53 51 4c 49 54 45 5f 44 45 46 41 55  ON {SQLITE_DEFAU
3280: 4c 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 53 3d  LT_FOREIGN_KEYS=
3290: 3c 69 3e 26 6c 74 3b 30 20 6f 72 20 31 26 67 74  <i>&lt;0 or 1&gt
32a0: 3b 3c 2f 69 3e 7d 20 7b 0a 20 20 54 68 69 73 20  ;</i>} {.  This 
32b0: 6d 61 63 72 6f 20 64 65 74 65 72 6d 69 6e 65 73  macro determines
32c0: 20 77 68 65 74 68 65 72 20 65 6e 66 6f 72 63 65   whether enforce
32d0: 6d 65 6e 74 20 6f 66 20 0a 20 20 5b 66 6f 72 65  ment of .  [fore
32e0: 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
32f0: 6e 74 73 5d 20 69 73 20 65 6e 61 62 6c 65 64 20  nts] is enabled 
3300: 6f 72 20 64 69 73 61 62 6c 65 64 20 62 79 20 64  or disabled by d
3310: 65 66 61 75 6c 74 20 66 6f 72 0a 20 20 6e 65 77  efault for.  new
3320: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
3330: 74 69 6f 6e 73 2e 20 20 45 61 63 68 20 64 61 74  tions.  Each dat
3340: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
3350: 20 63 61 6e 20 61 6c 77 61 79 73 20 74 75 72 6e   can always turn
3360: 0a 20 20 65 6e 66 6f 72 63 65 6d 65 6e 74 20 6f  .  enforcement o
3370: 66 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f  f foreign key co
3380: 6e 73 74 72 61 69 6e 74 73 20 6f 6e 20 61 6e 64  nstraints on and
3390: 20 6f 66 66 20 61 6e 64 20 72 75 6e 2d 74 69 6d   off and run-tim
33a0: 65 20 75 73 69 6e 67 0a 20 20 74 68 65 20 5b 66  e using.  the [f
33b0: 6f 72 65 69 67 6e 5f 6b 65 79 73 20 70 72 61 67  oreign_keys prag
33c0: 6d 61 5d 2e 20 20 45 6e 66 6f 72 63 65 6d 65 6e  ma].  Enforcemen
33d0: 74 20 6f 66 20 66 6f 72 65 69 67 6e 20 6b 65 79  t of foreign key
33e0: 20 63 6f 6e 73 74 72 61 69 6e 74 73 0a 20 20 69   constraints.  i
33f0: 73 20 6e 6f 72 6d 61 6c 6c 79 20 6f 66 66 20 62  s normally off b
3400: 79 20 64 65 66 61 75 6c 74 2c 20 62 75 74 20 69  y default, but i
3410: 66 20 74 68 69 73 20 63 6f 6d 70 69 6c 65 2d 74  f this compile-t
3420: 69 6d 65 20 70 61 72 61 6d 65 74 65 72 20 69 73  ime parameter is
3430: 0a 20 20 73 65 74 20 74 6f 20 31 2c 20 65 6e 66  .  set to 1, enf
3440: 6f 72 63 65 6d 65 6e 74 20 6f 66 20 66 6f 72 65  orcement of fore
3450: 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
3460: 6e 74 73 20 77 69 6c 6c 20 62 65 20 6f 6e 20 62  nts will be on b
3470: 79 20 64 65 66 61 75 6c 74 2e 0a 7d 0a 0a 43 4f  y default..}..CO
3480: 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51  MPILE_OPTION {SQ
3490: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41  LITE_DEFAULT_MMA
34a0: 50 5f 53 49 5a 45 3d 3c 69 3e 4e 3c 2f 69 3e 7d  P_SIZE=<i>N</i>}
34b0: 20 7b 0a 20 20 54 68 69 73 20 6d 61 63 72 6f 20   {.  This macro 
34c0: 73 65 74 73 20 74 68 65 20 64 65 66 61 75 6c 74  sets the default
34d0: 20 6c 69 6d 69 74 20 6f 6e 20 74 68 65 20 61 6d   limit on the am
34e0: 6f 75 6e 74 20 6f 66 20 6d 65 6d 6f 72 79 20 74  ount of memory t
34f0: 68 61 74 0a 20 20 77 69 6c 6c 20 62 65 20 75 73  hat.  will be us
3500: 65 64 20 66 6f 72 20 6d 65 6d 6f 72 79 2d 6d 61  ed for memory-ma
3510: 70 70 65 64 20 49 2f 4f 0a 20 20 66 6f 72 20 65  pped I/O.  for e
3520: 61 63 68 20 6f 70 65 6e 20 64 61 74 61 62 61 73  ach open databas
3530: 65 20 66 69 6c 65 2e 20 20 49 66 20 74 68 65 20  e file.  If the 
3540: 3c 69 3e 4e 3c 2f 69 3e 0a 20 20 69 73 20 7a 65  <i>N</i>.  is ze
3550: 72 6f 2c 20 74 68 65 6e 20 6d 65 6d 6f 72 79 20  ro, then memory 
3560: 6d 61 70 70 65 64 20 49 2f 4f 20 69 73 20 64 69  mapped I/O is di
3570: 73 61 62 6c 65 64 20 62 79 20 64 65 66 61 75 6c  sabled by defaul
3580: 74 2e 20 20 54 68 69 73 0a 20 20 63 6f 6d 70 69  t.  This.  compi
3590: 6c 65 2d 74 69 6d 65 20 6c 69 6d 69 74 20 61 6e  le-time limit an
35a0: 64 20 74 68 65 20 5b 53 51 4c 49 54 45 5f 4d 41  d the [SQLITE_MA
35b0: 58 5f 4d 4d 41 50 5f 53 49 5a 45 5d 20 63 61 6e  X_MMAP_SIZE] can
35c0: 20 62 65 20 6d 6f 64 69 66 69 65 64 20 0a 20 20   be modified .  
35d0: 61 74 20 73 74 61 72 74 2d 74 69 6d 65 20 75 73  at start-time us
35e0: 69 6e 67 20 74 68 65 0a 20 20 5b 73 71 6c 69 74  ing the.  [sqlit
35f0: 65 33 5f 63 6f 6e 66 69 67 5d 28 5b 53 51 4c 49  e3_config]([SQLI
3600: 54 45 5f 43 4f 4e 46 49 47 5f 4d 4d 41 50 5f 53  TE_CONFIG_MMAP_S
3610: 49 5a 45 5d 29 20 63 61 6c 6c 2c 20 6f 72 20 61  IZE]) call, or a
3620: 74 20 72 75 6e 2d 74 69 6d 65 0a 20 20 75 73 69  t run-time.  usi
3630: 6e 67 20 74 68 65 20 5b 6d 6d 61 70 5f 73 69 7a  ng the [mmap_siz
3640: 65 20 70 72 61 67 6d 61 5d 2e 0a 7d 0a 0a 43 4f  e pragma]..}..CO
3650: 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51  MPILE_OPTION {SQ
3660: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4a 4f 55  LITE_DEFAULT_JOU
3670: 52 4e 41 4c 5f 53 49 5a 45 5f 4c 49 4d 49 54 3d  RNAL_SIZE_LIMIT=
3680: 3c 69 3e 26 6c 74 3b 62 79 74 65 73 26 67 74 3b  <i>&lt;bytes&gt;
3690: 3c 2f 69 3e 7d 20 7b 0a 20 20 54 68 69 73 20 6f  </i>} {.  This o
36a0: 70 74 69 6f 6e 20 73 65 74 73 20 74 68 65 20 73  ption sets the s
36b0: 69 7a 65 20 6c 69 6d 69 74 20 6f 6e 20 5b 72 6f  ize limit on [ro
36c0: 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 5d 20  llback journal] 
36d0: 66 69 6c 65 73 20 69 6e 0a 20 20 5b 6a 6f 75 72  files in.  [jour
36e0: 6e 61 6c 5f 6d 6f 64 65 20 70 72 61 67 6d 61 20  nal_mode pragma 
36f0: 7c 20 70 65 72 73 69 73 74 65 6e 74 20 6a 6f 75  | persistent jou
3700: 72 6e 61 6c 20 6d 6f 64 65 5d 20 61 6e 64 0a 20  rnal mode] and. 
3710: 20 5b 6c 6f 63 6b 69 6e 67 5f 6d 6f 64 65 20 7c   [locking_mode |
3720: 20 65 78 63 6c 75 73 69 76 65 20 6c 6f 63 6b 69   exclusive locki
3730: 6e 67 20 6d 6f 64 65 5d 20 61 6e 64 20 6f 6e 20  ng mode] and on 
3740: 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 0a  the size of the.
3750: 20 20 77 72 69 74 65 2d 61 68 65 61 64 20 6c 6f    write-ahead lo
3760: 67 20 66 69 6c 65 20 69 6e 20 5b 57 41 4c 20 6d  g file in [WAL m
3770: 6f 64 65 5d 2e 20 57 68 65 6e 20 74 68 69 73 20  ode]. When this 
3780: 0a 20 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  .  compile-time 
3790: 6f 70 74 69 6f 6e 20 69 73 20 6f 6d 69 74 74 65  option is omitte
37a0: 64 20 74 68 65 72 65 20 69 73 20 6e 6f 20 75 70  d there is no up
37b0: 70 65 72 20 62 6f 75 6e 64 20 6f 6e 20 74 68 65  per bound on the
37c0: 0a 20 20 73 69 7a 65 20 6f 66 20 74 68 65 20 72  .  size of the r
37d0: 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 73  ollback journals
37e0: 20 6f 72 20 77 72 69 74 65 2d 61 68 65 61 64 20   or write-ahead 
37f0: 6c 6f 67 73 2e 20 20 0a 20 20 54 68 65 20 6a 6f  logs.  .  The jo
3800: 75 72 6e 61 6c 20 66 69 6c 65 20 73 69 7a 65 20  urnal file size 
3810: 6c 69 6d 69 74 0a 20 20 63 61 6e 20 62 65 20 63  limit.  can be c
3820: 68 61 6e 67 65 64 20 61 74 20 72 75 6e 2d 74 69  hanged at run-ti
3830: 6d 65 20 75 73 69 6e 67 20 74 68 65 20 5b 6a 6f  me using the [jo
3840: 75 72 6e 61 6c 5f 73 69 7a 65 5f 6c 69 6d 69 74  urnal_size_limit
3850: 20 70 72 61 67 6d 61 5d 2e 0a 7d 0a 0a 43 4f 4d   pragma]..}..COM
3860: 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c  PILE_OPTION {SQL
3870: 49 54 45 5f 44 45 46 41 55 4c 54 5f 4c 4f 43 4b  ITE_DEFAULT_LOCK
3880: 49 4e 47 5f 4d 4f 44 45 3d 3c 69 3e 26 6c 74 3b  ING_MODE=<i>&lt;
3890: 31 20 6f 72 20 30 26 67 74 3b 3c 2f 69 3e 7d 20  1 or 0&gt;</i>} 
38a0: 7b 0a 20 20 49 66 20 73 65 74 20 74 6f 20 31 2c  {.  If set to 1,
38b0: 20 74 68 65 6e 20 74 68 65 20 64 65 66 61 75 6c   then the defaul
38c0: 74 20 5b 6c 6f 63 6b 69 6e 67 5f 6d 6f 64 65 5d  t [locking_mode]
38d0: 20 69 73 20 73 65 74 20 74 6f 20 45 58 43 4c 55   is set to EXCLU
38e0: 53 49 56 45 2e 0a 20 20 49 66 20 6f 6d 69 74 74  SIVE..  If omitt
38f0: 65 64 20 6f 72 20 73 65 74 20 74 6f 20 30 20 74  ed or set to 0 t
3900: 68 65 6e 20 74 68 65 20 64 65 66 61 75 6c 74 20  hen the default 
3910: 5b 6c 6f 63 6b 69 6e 67 5f 6d 6f 64 65 5d 20 69  [locking_mode] i
3920: 73 20 4e 4f 52 4d 41 4c 2e 0a 7d 0a 0a 43 4f 4d  s NORMAL..}..COM
3930: 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c  PILE_OPTION {SQL
3940: 49 54 45 5f 44 45 46 41 55 4c 54 5f 4c 4f 4f 4b  ITE_DEFAULT_LOOK
3950: 41 53 49 44 45 3d 3c 69 3e 53 5a 2c 4e 3c 2f 69  ASIDE=<i>SZ,N</i
3960: 3e 7d 20 7b 0a 20 20 53 65 74 73 20 74 68 65 20  >} {.  Sets the 
3970: 64 65 66 61 75 6c 74 20 73 69 7a 65 20 6f 66 20  default size of 
3980: 74 68 65 20 5b 6c 6f 6f 6b 61 73 69 64 65 20 6d  the [lookaside m
3990: 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 6f 72 5d  emory allocator]
39a0: 20 6d 65 6d 6f 72 79 20 70 6f 6f 6c 0a 20 20 74   memory pool.  t
39b0: 6f 20 4e 20 65 6e 74 72 69 65 73 20 6f 66 20 53  o N entries of S
39c0: 5a 20 62 79 74 65 73 20 65 61 63 68 2e 20 20 54  Z bytes each.  T
39d0: 68 69 73 20 73 65 74 74 69 6e 67 20 63 61 6e 20  his setting can 
39e0: 62 65 20 6d 6f 64 69 66 69 65 64 20 61 74 0a 20  be modified at. 
39f0: 20 73 74 61 72 74 2d 74 69 6d 65 20 75 73 69 6e   start-time usin
3a00: 67 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69  g [sqlite3_confi
3a10: 67 5d 28 5b 53 51 4c 49 54 45 5f 43 4f 4e 46 49  g]([SQLITE_CONFI
3a20: 47 5f 4c 4f 4f 4b 41 53 49 44 45 5d 29 20 61 6e  G_LOOKASIDE]) an
3a30: 64 2f 6f 72 0a 20 20 61 73 20 65 61 63 68 20 5b  d/or.  as each [
3a40: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
3a50: 69 6f 6e 5d 20 69 73 20 6f 70 65 6e 65 64 20 75  ion] is opened u
3a60: 73 69 6e 67 0a 20 20 5b 73 71 6c 69 74 65 33 5f  sing.  [sqlite3_
3a70: 64 62 5f 63 6f 6e 66 69 67 5d 28 64 62 2c 20 5b  db_config](db, [
3a80: 53 51 4c 49 54 45 5f 44 42 43 4f 4e 46 49 47 5f  SQLITE_DBCONFIG_
3a90: 4c 4f 4f 4b 41 53 49 44 45 5d 29 2e 0a 7d 0a 0a  LOOKASIDE])..}..
3aa0: 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b  COMPILE_OPTION {
3ab0: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d  SQLITE_DEFAULT_M
3ac0: 45 4d 53 54 41 54 55 53 3d 3c 69 3e 26 6c 74 3b  EMSTATUS=<i>&lt;
3ad0: 31 20 6f 72 20 30 26 67 74 3b 3c 2f 69 3e 7d 20  1 or 0&gt;</i>} 
3ae0: 7b 0a 20 20 54 68 69 73 20 6d 61 63 72 6f 20 69  {.  This macro i
3af0: 73 20 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d  s used to determ
3b00: 69 6e 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e  ine whether or n
3b10: 6f 74 20 74 68 65 20 66 65 61 74 75 72 65 73 20  ot the features 
3b20: 65 6e 61 62 6c 65 64 20 61 6e 64 0a 20 20 64 69  enabled and.  di
3b30: 73 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68 65  sabled using the
3b40: 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4d   SQLITE_CONFIG_M
3b50: 45 4d 53 54 41 54 55 53 20 61 72 67 75 6d 65 6e  EMSTATUS argumen
3b60: 74 20 74 6f 20 5b 73 71 6c 69 74 65 33 5f 63 6f  t to [sqlite3_co
3b70: 6e 66 69 67 28 29 5d 0a 20 20 61 72 65 20 61 76  nfig()].  are av
3b80: 61 69 6c 61 62 6c 65 20 62 79 20 64 65 66 61 75  ailable by defau
3b90: 6c 74 2e 20 54 68 65 20 64 65 66 61 75 6c 74 20  lt. The default 
3ba0: 76 61 6c 75 65 20 69 73 20 31 20 28 5b 53 51 4c  value is 1 ([SQL
3bb0: 49 54 45 5f 43 4f 4e 46 49 47 5f 4d 45 4d 53 54  ITE_CONFIG_MEMST
3bc0: 41 54 55 53 5d 0a 20 20 72 65 6c 61 74 65 64 20  ATUS].  related 
3bd0: 66 65 61 74 75 72 65 73 20 65 6e 61 62 6c 65 64  features enabled
3be0: 29 2e 0a 20 20 3c 70 3e 0a 20 20 54 68 65 20 5b  )..  <p>.  The [
3bf0: 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72 79 5f 75  sqlite3_memory_u
3c00: 73 65 64 28 29 5d 20 61 6e 64 20 5b 73 71 6c 69  sed()] and [sqli
3c10: 74 65 33 5f 6d 65 6d 6f 72 79 5f 68 69 67 68 77  te3_memory_highw
3c20: 61 74 65 72 28 29 5d 20 69 6e 74 65 72 66 61 63  ater()] interfac
3c30: 65 73 2c 0a 20 20 74 68 65 20 5b 73 71 6c 69 74  es,.  the [sqlit
3c40: 65 33 5f 73 74 61 74 75 73 36 34 5d 28 5b 53 51  e3_status64]([SQ
3c50: 4c 49 54 45 5f 53 54 41 54 55 53 5f 4d 45 4d 4f  LITE_STATUS_MEMO
3c60: 52 59 5f 55 53 45 44 5d 29 20 69 6e 74 65 72 66  RY_USED]) interf
3c70: 61 63 65 2c 0a 20 20 61 6e 64 20 74 68 65 20 5b  ace,.  and the [
3c80: 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 45 4d 4f 52  SQLITE_MAX_MEMOR
3c90: 59 5d 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  Y] compile-time 
3ca0: 6f 70 74 69 6f 6e 20 61 72 65 20 61 6c 6c 20 6e  option are all n
3cb0: 6f 6e 2d 66 75 6e 63 74 69 6f 6e 61 6c 0a 20 20  on-functional.  
3cc0: 77 68 65 6e 20 6d 65 6d 6f 72 79 20 75 73 61 67  when memory usag
3cd0: 65 20 74 72 61 63 6b 69 6e 67 20 69 73 20 64 69  e tracking is di
3ce0: 73 61 62 6c 65 64 2e 0a 7d 0a 0a 43 4f 4d 50 49  sabled..}..COMPI
3cf0: 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54  LE_OPTION {SQLIT
3d00: 45 5f 44 45 46 41 55 4c 54 5f 50 43 41 43 48 45  E_DEFAULT_PCACHE
3d10: 5f 49 4e 49 54 53 5a 3d 3c 69 3e 4e 3c 2f 69 3e  _INITSZ=<i>N</i>
3d20: 7d 20 7b 0a 20 20 54 68 69 73 20 6d 61 63 72 6f  } {.  This macro
3d30: 20 64 65 74 65 72 6d 69 6e 65 73 20 74 68 65 20   determines the 
3d40: 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20  number of pages 
3d50: 69 6e 69 74 69 61 6c 6c 79 20 61 6c 6c 6f 63 61  initially alloca
3d60: 74 65 64 20 62 79 20 74 68 65 20 0a 20 20 70 61  ted by the .  pa
3d70: 67 65 20 63 61 63 68 65 20 6d 6f 64 75 6c 65 20  ge cache module 
3d80: 77 68 65 6e 20 5b 53 51 4c 49 54 45 5f 43 4f 4e  when [SQLITE_CON
3d90: 46 49 47 5f 50 41 47 45 43 41 43 48 45 5d 20 63  FIG_PAGECACHE] c
3da0: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 6f 70 74  onfiguration opt
3db0: 69 6f 6e 20 69 73 0a 20 20 6e 6f 74 20 75 73 65  ion is.  not use
3dc0: 20 61 6e 64 20 6d 65 6d 6f 72 79 20 66 6f 72 20   and memory for 
3dd0: 74 68 65 20 70 61 67 65 20 63 61 63 68 65 20 69  the page cache i
3de0: 73 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20  s obtained from 
3df0: 5b 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28  [sqlite3_malloc(
3e00: 29 5d 0a 20 20 69 6e 73 74 65 61 64 2e 20 20 54  )].  instead.  T
3e10: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67  he number of pag
3e20: 65 73 20 73 65 74 20 62 79 20 74 68 69 73 20 6d  es set by this m
3e30: 61 63 72 6f 20 61 72 65 20 61 6c 6c 6f 63 61 74  acro are allocat
3e40: 65 64 20 69 6e 20 61 20 73 69 6e 67 6c 65 0a 20  ed in a single. 
3e50: 20 61 6c 6c 6f 63 61 74 69 6f 6e 2c 20 77 68 69   allocation, whi
3e60: 63 68 20 72 65 64 75 63 65 73 20 74 68 65 20 6c  ch reduces the l
3e70: 6f 61 64 20 6f 6e 20 74 68 65 20 6d 65 6d 6f 72  oad on the memor
3e80: 79 20 61 6c 6c 6f 63 61 74 6f 72 2e 0a 7d 0a 0a  y allocator..}..
3e90: 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b  COMPILE_OPTION {
3ea0: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 50  SQLITE_DEFAULT_P
3eb0: 41 47 45 5f 53 49 5a 45 3d 3c 69 3e 26 6c 74 3b  AGE_SIZE=<i>&lt;
3ec0: 62 79 74 65 73 26 67 74 3b 3c 2f 69 3e 7d 20 7b  bytes&gt;</i>} {
3ed0: 0a 20 20 54 68 69 73 20 6d 61 63 72 6f 20 69 73  .  This macro is
3ee0: 20 75 73 65 64 20 74 6f 20 73 65 74 20 74 68 65   used to set the
3ef0: 20 64 65 66 61 75 6c 74 20 70 61 67 65 2d 73 69   default page-si
3f00: 7a 65 20 75 73 65 64 20 77 68 65 6e 20 61 0a 20  ze used when a. 
3f10: 20 64 61 74 61 62 61 73 65 20 69 73 20 63 72 65   database is cre
3f20: 61 74 65 64 2e 20 54 68 65 20 76 61 6c 75 65 20  ated. The value 
3f30: 61 73 73 69 67 6e 65 64 20 6d 75 73 74 20 62 65  assigned must be
3f40: 20 61 20 70 6f 77 65 72 20 6f 66 20 32 2e 20 54   a power of 2. T
3f50: 68 65 0a 20 20 64 65 66 61 75 6c 74 20 76 61 6c  he.  default val
3f60: 75 65 20 69 73 20 34 30 39 36 2e 20 54 68 65 20  ue is 4096. The 
3f70: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 64 65 66  compile-time def
3f80: 61 75 6c 74 20 6d 61 79 20 62 65 20 6f 76 65 72  ault may be over
3f90: 72 69 64 64 65 6e 20 61 74 20 0a 20 20 72 75 6e  ridden at .  run
3fa0: 74 69 6d 65 20 62 79 20 74 68 65 20 5b 50 52 41  time by the [PRA
3fb0: 47 4d 41 20 70 61 67 65 5f 73 69 7a 65 5d 20 63  GMA page_size] c
3fc0: 6f 6d 6d 61 6e 64 2e 0a 7d 0a 0a 43 4f 4d 50 49  ommand..}..COMPI
3fd0: 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54  LE_OPTION {SQLIT
3fe0: 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52  E_DEFAULT_SYNCHR
3ff0: 4f 4e 4f 55 53 3d 3c 69 3e 26 6c 74 3b 30 2d 33  ONOUS=<i>&lt;0-3
4000: 26 67 74 3b 3c 2f 69 3e 7d 20 7b 0a 20 20 54 68  &gt;</i>} {.  Th
4010: 69 73 20 6d 61 63 72 6f 20 64 65 74 65 72 6d 69  is macro determi
4020: 6e 65 73 20 74 68 65 20 64 65 66 61 75 6c 74 20  nes the default 
4030: 76 61 6c 75 65 20 6f 66 20 74 68 65 0a 20 20 5b  value of the.  [
4040: 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f  PRAGMA synchrono
4050: 75 73 5d 20 73 65 74 74 69 6e 67 2e 20 20 49 66  us] setting.  If
4060: 20 6e 6f 74 20 6f 76 65 72 72 69 64 64 65 6e 20   not overridden 
4070: 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 2c  at compile-time,
4080: 0a 20 20 74 68 65 20 64 65 66 61 75 6c 74 20 73  .  the default s
4090: 65 74 74 69 6e 67 20 69 73 20 32 20 28 46 55 4c  etting is 2 (FUL
40a0: 4c 29 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f  L)..}..COMPILE_O
40b0: 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 44 45  PTION {SQLITE_DE
40c0: 46 41 55 4c 54 5f 57 41 4c 5f 53 59 4e 43 48 52  FAULT_WAL_SYNCHR
40d0: 4f 4e 4f 55 53 3d 3c 69 3e 26 6c 74 3b 30 2d 33  ONOUS=<i>&lt;0-3
40e0: 26 67 74 3b 3c 2f 69 3e 7d 20 7b 0a 20 20 54 68  &gt;</i>} {.  Th
40f0: 69 73 20 6d 61 63 72 6f 20 64 65 74 65 72 6d 69  is macro determi
4100: 6e 65 73 20 74 68 65 20 64 65 66 61 75 6c 74 20  nes the default 
4110: 76 61 6c 75 65 20 6f 66 20 74 68 65 0a 20 20 5b  value of the.  [
4120: 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f  PRAGMA synchrono
4130: 75 73 5d 20 73 65 74 74 69 6e 67 20 66 6f 72 20  us] setting for 
4140: 64 61 74 61 62 61 73 65 20 66 69 6c 65 73 20 74  database files t
4150: 68 61 74 20 6f 70 65 6e 20 69 6e 0a 20 20 5b 57  hat open in.  [W
4160: 41 4c 20 6d 6f 64 65 5d 2e 20 20 49 66 20 6e 6f  AL mode].  If no
4170: 74 20 6f 76 65 72 72 69 64 64 65 6e 20 61 74 20  t overridden at 
4180: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 2c 20 74 68  compile-time, th
4190: 69 73 20 76 61 6c 75 65 20 69 73 20 74 68 65 0a  is value is the.
41a0: 20 20 73 61 6d 65 20 61 73 20 5b 53 51 4c 49 54    same as [SQLIT
41b0: 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52  E_DEFAULT_SYNCHR
41c0: 4f 4e 4f 55 53 5d 2e 0a 20 20 3c 70 3e 0a 20 20  ONOUS]..  <p>.  
41d0: 49 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  If SQLITE_DEFAUL
41e0: 54 5f 57 41 4c 5f 53 59 4e 43 48 52 4f 4e 4f 55  T_WAL_SYNCHRONOU
41f0: 53 20 64 69 66 66 65 72 73 20 66 72 6f 6d 20 53  S differs from S
4200: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53 59  QLITE_DEFAULT_SY
4210: 4e 43 48 52 4f 4e 4f 55 53 2c 0a 20 20 61 6e 64  NCHRONOUS,.  and
4220: 20 69 66 20 74 68 65 20 61 70 70 6c 69 63 61 74   if the applicat
4230: 69 6f 6e 20 68 61 73 20 6e 6f 74 20 6d 6f 64 69  ion has not modi
4240: 66 69 65 64 20 74 68 65 20 73 79 6e 63 68 72 6f  fied the synchro
4250: 6e 6f 75 73 20 73 65 74 74 69 6e 67 20 66 6f 72  nous setting for
4260: 0a 20 20 74 68 65 20 64 61 74 61 62 61 73 65 20  .  the database 
4270: 66 69 6c 65 20 75 73 69 6e 67 20 74 68 65 20 5b  file using the [
4280: 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f  PRAGMA synchrono
4290: 75 73 5d 20 73 74 61 74 65 6d 65 6e 74 2c 20 74  us] statement, t
42a0: 68 65 6e 0a 20 20 74 68 65 20 73 79 6e 63 68 72  hen.  the synchr
42b0: 6f 6e 6f 75 73 20 73 65 74 74 69 6e 67 20 69 73  onous setting is
42c0: 20 63 68 61 6e 67 65 64 20 74 6f 20 76 61 6c 75   changed to valu
42d0: 65 20 64 65 66 69 6e 65 64 20 62 79 0a 20 20 53  e defined by.  S
42e0: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 41  QLITE_DEFAULT_WA
42f0: 4c 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20 77 68  L_SYNCHRONOUS wh
4300: 65 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  en the database 
4310: 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 77 69 74 63  connection switc
4320: 68 65 73 0a 20 20 69 6e 74 6f 20 57 41 4c 20 6d  hes.  into WAL m
4330: 6f 64 65 20 66 6f 72 20 74 68 65 20 66 69 72 73  ode for the firs
4340: 74 20 74 69 6d 65 2e 0a 20 20 49 66 20 74 68 65  t time..  If the
4350: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
4360: 57 41 4c 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20  WAL_SYNCHRONOUS 
4370: 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 6f 76 65  value is not ove
4380: 72 72 69 64 64 65 6e 20 61 74 0a 20 20 63 6f 6d  rridden at.  com
4390: 70 69 6c 65 2d 74 69 6d 65 2c 20 74 68 65 6e 20  pile-time, then 
43a0: 69 74 20 77 69 6c 6c 20 61 6c 77 61 79 73 20 62  it will always b
43b0: 65 20 74 68 65 20 73 61 6d 65 20 61 73 0a 20 20  e the same as.  
43c0: 5b 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f  [SQLITE_DEFAULT_
43d0: 53 59 4e 43 48 52 4f 4e 4f 55 53 5d 20 61 6e 64  SYNCHRONOUS] and
43e0: 20 73 6f 20 6e 6f 20 61 75 74 6f 6d 61 74 69 63   so no automatic
43f0: 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20 73 65 74   synchronous set
4400: 74 69 6e 67 0a 20 20 63 68 61 6e 67 65 73 20 77  ting.  changes w
4410: 69 6c 6c 20 65 76 65 72 20 6f 63 63 75 72 2e 0a  ill ever occur..
4420: 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f  }..COMPILE_OPTIO
4430: 4e 20 7b 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  N {SQLITE_DEFAUL
4440: 54 5f 57 41 4c 5f 41 55 54 4f 43 48 45 43 4b 50  T_WAL_AUTOCHECKP
4450: 4f 49 4e 54 3d 3c 69 3e 26 6c 74 3b 70 61 67 65  OINT=<i>&lt;page
4460: 73 26 67 74 3b 3c 2f 69 3e 7d 20 7b 0a 20 20 54  s&gt;</i>} {.  T
4470: 68 69 73 20 6d 61 63 72 6f 20 73 65 74 73 20 74  his macro sets t
4480: 68 65 20 64 65 66 61 75 6c 74 20 70 61 67 65 20  he default page 
4490: 63 6f 75 6e 74 20 66 6f 72 20 74 68 65 20 5b 57  count for the [W
44a0: 41 4c 5d 0a 20 20 5b 63 68 65 63 6b 70 6f 69 6e  AL].  [checkpoin
44b0: 74 69 6e 67 20 7c 20 61 75 74 6f 6d 61 74 69 63  ting | automatic
44c0: 20 63 68 65 63 6b 70 6f 69 6e 74 69 6e 67 5d 20   checkpointing] 
44d0: 66 65 61 74 75 72 65 2e 20 20 49 66 20 75 6e 73  feature.  If uns
44e0: 70 65 63 69 66 69 65 64 2c 0a 20 20 74 68 65 20  pecified,.  the 
44f0: 64 65 66 61 75 6c 74 20 70 61 67 65 20 63 6f 75  default page cou
4500: 6e 74 20 69 73 20 31 30 30 30 2e 0a 7d 0a 0a 43  nt is 1000..}..C
4510: 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53  OMPILE_OPTION {S
4520: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f  QLITE_DEFAULT_WO
4530: 52 4b 45 52 5f 54 48 52 45 41 44 53 3d 3c 69 3e  RKER_THREADS=<i>
4540: 4e 3c 2f 69 3e 7d 20 7b 0a 20 20 54 68 69 73 20  N</i>} {.  This 
4550: 6d 61 63 72 6f 20 73 65 74 73 20 74 68 65 20 64  macro sets the d
4560: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 66 6f 72  efault value for
4570: 0a 20 20 74 68 65 20 5b 53 51 4c 49 54 45 5f 4c  .  the [SQLITE_L
4580: 49 4d 49 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45  IMIT_WORKER_THRE
4590: 41 44 53 5d 20 70 61 72 61 6d 65 74 65 72 2e 20  ADS] parameter. 
45a0: 20 54 68 65 20 5b 53 51 4c 49 54 45 5f 4c 49 4d   The [SQLITE_LIM
45b0: 49 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  IT_WORKER_THREAD
45c0: 53 5d 0a 20 20 70 61 72 61 6d 65 74 65 72 20 73  S].  parameter s
45d0: 65 74 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20  ets the maximum 
45e0: 6e 75 6d 62 65 72 20 6f 66 20 61 75 78 69 6c 69  number of auxili
45f0: 61 72 79 20 74 68 72 65 61 64 73 20 74 68 61 74  ary threads that
4600: 20 61 20 73 69 6e 67 6c 65 0a 20 20 5b 70 72 65   a single.  [pre
4610: 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 5d  pared statement]
4620: 20 77 69 6c 6c 20 6c 61 75 6e 63 68 20 74 6f 20   will launch to 
4630: 61 73 73 69 73 74 20 69 74 20 77 69 74 68 20 61  assist it with a
4640: 20 71 75 65 72 79 2e 20 20 49 66 20 6e 6f 74 20   query.  If not 
4650: 73 70 65 63 69 66 69 65 64 2c 0a 20 20 74 68 65  specified,.  the
4660: 20 64 65 66 61 75 6c 74 20 6d 61 78 69 6d 75 6d   default maximum
4670: 20 69 73 20 30 2e 0a 20 20 54 68 65 20 76 61 6c   is 0..  The val
4680: 75 65 20 73 65 74 20 68 65 72 65 20 63 61 6e 6e  ue set here cann
4690: 6f 74 20 62 65 20 6d 6f 72 65 20 74 68 61 6e 20  ot be more than 
46a0: 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b  [SQLITE_MAX_WORK
46b0: 45 52 5f 54 48 52 45 41 44 53 5d 2e 0a 7d 0a 0a  ER_THREADS]..}..
46c0: 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b  COMPILE_OPTION {
46d0: 53 51 4c 49 54 45 5f 45 58 54 52 41 5f 44 55 52  SQLITE_EXTRA_DUR
46e0: 41 42 4c 45 7d 20 7b 0a 20 20 54 68 65 20 53 51  ABLE} {.  The SQ
46f0: 4c 49 54 45 5f 45 58 54 52 41 5f 44 55 52 41 42  LITE_EXTRA_DURAB
4700: 4c 45 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  LE compile-time 
4710: 6f 70 74 69 6f 6e 20 74 68 61 74 20 75 73 65 64  option that used
4720: 20 74 6f 20 63 61 75 73 65 20 74 68 65 20 64 65   to cause the de
4730: 66 61 75 6c 74 0a 20 20 5b 50 52 41 47 4d 41 20  fault.  [PRAGMA 
4740: 73 79 6e 63 68 72 6f 6e 6f 75 73 5d 20 73 65 74  synchronous] set
4750: 74 69 6e 67 20 74 6f 20 62 65 20 45 58 54 52 41  ting to be EXTRA
4760: 2c 20 72 61 74 68 65 72 20 74 68 61 6e 20 46 55  , rather than FU
4770: 4c 4c 2e 20 20 54 68 69 73 20 6f 70 74 69 6f 6e  LL.  This option
4780: 0a 20 20 69 73 20 6e 6f 20 6c 6f 6e 67 65 72 20  .  is no longer 
4790: 73 75 70 70 6f 72 74 65 64 2e 20 20 55 73 65 0a  supported.  Use.
47a0: 20 20 5b 53 51 4c 49 54 45 5f 44 45 46 41 55 4c    [SQLITE_DEFAUL
47b0: 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 7c 53 51  T_SYNCHRONOUS|SQ
47c0: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e  LITE_DEFAULT_SYN
47d0: 43 48 52 4f 4e 4f 55 53 3d 33 5d 20 69 6e 73 74  CHRONOUS=3] inst
47e0: 65 61 64 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f  ead..}..COMPILE_
47f0: 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 46  OPTION {SQLITE_F
4800: 54 53 33 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50  TS3_MAX_EXPR_DEP
4810: 54 48 3d 3c 69 3e 4e 3c 2f 69 3e 7d 20 7b 0a 20  TH=<i>N</i>} {. 
4820: 20 54 68 69 73 20 6d 61 63 72 6f 20 73 65 74 73   This macro sets
4830: 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 64 65 70   the maximum dep
4840: 74 68 20 6f 66 20 74 68 65 20 73 65 61 72 63 68  th of the search
4850: 20 74 72 65 65 20 74 68 61 74 20 63 6f 72 72 65   tree that corre
4860: 73 70 6f 6e 64 73 20 74 6f 0a 20 20 74 68 65 20  sponds to.  the 
4870: 72 69 67 68 74 2d 68 61 6e 64 20 73 69 64 65 20  right-hand side 
4880: 6f 66 20 74 68 65 20 4d 41 54 43 48 20 6f 70 65  of the MATCH ope
4890: 72 61 74 6f 72 20 69 6e 20 61 6e 20 5b 46 54 53  rator in an [FTS
48a0: 33 5d 20 6f 72 20 5b 46 54 53 34 5d 20 66 75 6c  3] or [FTS4] ful
48b0: 6c 2d 74 65 78 74 0a 20 20 69 6e 64 65 78 2e 20  l-text.  index. 
48c0: 20 54 68 65 20 66 75 6c 6c 2d 74 65 78 74 20 73   The full-text s
48d0: 65 61 72 63 68 20 75 73 65 73 20 61 20 72 65 63  earch uses a rec
48e0: 75 72 73 69 76 65 20 61 6c 67 6f 72 69 74 68 6d  ursive algorithm
48f0: 2c 20 73 6f 20 74 68 65 20 64 65 70 74 68 20 6f  , so the depth o
4900: 66 0a 20 20 74 68 65 20 74 72 65 65 20 69 73 20  f.  the tree is 
4910: 6c 69 6d 69 74 65 64 20 74 6f 20 70 72 65 76 65  limited to preve
4920: 6e 74 20 75 73 69 6e 67 20 74 6f 6f 20 6d 75 63  nt using too muc
4930: 68 20 73 74 61 63 6b 20 73 70 61 63 65 2e 20 20  h stack space.  
4940: 54 68 65 20 64 65 66 61 75 6c 74 0a 20 20 6c 69  The default.  li
4950: 6d 69 74 20 69 73 20 31 32 2e 20 20 54 68 69 73  mit is 12.  This
4960: 20 6c 69 6d 69 74 20 69 73 20 73 75 66 66 69 63   limit is suffic
4970: 69 65 6e 74 20 66 6f 72 20 75 70 20 74 6f 20 34  ient for up to 4
4980: 30 39 35 20 73 65 61 72 63 68 20 74 65 72 6d 73  095 search terms
4990: 20 6f 6e 20 74 68 65 0a 20 20 72 69 67 68 74 2d   on the.  right-
49a0: 68 61 6e 64 20 73 69 64 65 20 6f 66 20 74 68 65  hand side of the
49b0: 20 4d 41 54 43 48 20 6f 70 65 72 61 74 6f 72 20   MATCH operator 
49c0: 61 6e 64 20 69 74 20 68 6f 6c 64 73 20 73 74 61  and it holds sta
49d0: 63 6b 20 73 70 61 63 65 20 75 73 61 67 65 20 74  ck space usage t
49e0: 6f 20 0a 20 20 6c 65 73 73 20 74 68 61 6e 20 32  o .  less than 2
49f0: 30 30 30 20 62 79 74 65 73 2e 0a 20 20 3c 70 3e  000 bytes..  <p>
4a00: 0a 20 20 46 6f 72 20 6f 72 64 69 6e 61 72 79 20  .  For ordinary 
4a10: 46 54 53 33 2f 46 54 53 34 20 71 75 65 72 69 65  FTS3/FTS4 querie
4a20: 73 2c 20 74 68 65 20 73 65 61 72 63 68 20 74 72  s, the search tr
4a30: 65 65 20 64 65 70 74 68 20 69 73 20 61 70 70 72  ee depth is appr
4a40: 6f 78 69 6d 61 74 65 6c 79 0a 20 20 74 68 65 20  oximately.  the 
4a50: 62 61 73 65 2d 32 20 6c 6f 67 61 72 69 74 68 6d  base-2 logarithm
4a60: 20 6f 66 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   of the number o
4a70: 66 20 74 65 72 6d 73 20 69 6e 20 74 68 65 20 72  f terms in the r
4a80: 69 67 68 74 2d 68 61 6e 64 20 73 69 64 65 20 6f  ight-hand side o
4a90: 66 20 74 68 65 0a 20 20 4d 41 54 43 48 20 6f 70  f the.  MATCH op
4aa0: 65 72 61 74 6f 72 2e 20 20 48 6f 77 65 76 65 72  erator.  However
4ab0: 2c 20 66 6f 72 20 5b 70 68 72 61 73 65 20 71 75  , for [phrase qu
4ac0: 65 72 69 65 73 5d 20 61 6e 64 20 5b 4e 45 41 52  eries] and [NEAR
4ad0: 20 71 75 65 72 69 65 73 5d 20 74 68 65 0a 20 20   queries] the.  
4ae0: 73 65 61 72 63 68 20 74 72 65 65 20 64 65 70 74  search tree dept
4af0: 68 20 69 73 20 6c 69 6e 65 61 72 20 69 6e 20 74  h is linear in t
4b00: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 69 67  he number of rig
4b10: 68 74 2d 68 61 6e 64 20 73 69 64 65 20 74 65 72  ht-hand side ter
4b20: 6d 73 2e 0a 20 20 53 6f 20 74 68 65 20 64 65 66  ms..  So the def
4b30: 61 75 6c 74 20 64 65 70 74 68 20 6c 69 6d 69 74  ault depth limit
4b40: 20 6f 66 20 31 32 20 69 73 20 73 75 66 66 69 63   of 12 is suffic
4b50: 69 65 6e 74 20 66 6f 72 20 75 70 20 74 6f 20 34  ient for up to 4
4b60: 30 39 35 20 6f 72 64 69 6e 61 72 79 0a 20 20 74  095 ordinary.  t
4b70: 65 72 6d 73 20 6f 6e 20 61 20 4d 41 54 43 48 2c  erms on a MATCH,
4b80: 20 69 74 20 69 73 20 6f 6e 6c 79 20 73 75 66 66   it is only suff
4b90: 69 63 69 65 6e 74 20 66 6f 72 20 31 31 20 6f 72  icient for 11 or
4ba0: 20 31 32 20 70 68 72 61 73 65 20 6f 72 20 4e 45   12 phrase or NE
4bb0: 41 52 0a 20 20 74 65 72 6d 73 2e 20 20 45 76 65  AR.  terms.  Eve
4bc0: 6e 20 73 6f 2c 20 74 68 65 20 64 65 66 61 75 6c  n so, the defaul
4bd0: 74 20 69 73 20 6d 6f 72 65 20 74 68 61 6e 20 65  t is more than e
4be0: 6e 6f 75 67 68 20 66 6f 72 20 6d 6f 73 74 20 61  nough for most a
4bf0: 70 70 6c 69 63 61 74 69 6f 6e 2e 0a 7d 0a 0a 43  pplication..}..C
4c00: 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53  OMPILE_OPTION {S
4c10: 51 4c 49 54 45 5f 4c 49 4b 45 5f 44 4f 45 53 4e  QLITE_LIKE_DOESN
4c20: 54 5f 4d 41 54 43 48 5f 42 4c 4f 42 53 7d 20 7b  T_MATCH_BLOBS} {
4c30: 0a 20 20 54 68 69 73 20 63 6f 6d 70 69 6c 65 2d  .  This compile-
4c40: 74 69 6d 65 20 6f 70 74 69 6f 6e 20 63 61 75 73  time option caus
4c50: 65 73 20 74 68 65 20 5b 4c 49 4b 45 5d 20 6f 70  es the [LIKE] op
4c60: 65 72 61 74 6f 72 20 74 6f 20 61 6c 77 61 79 73  erator to always
4c70: 20 72 65 74 75 72 6e 20 0a 20 20 46 61 6c 73 65   return .  False
4c80: 20 69 66 20 65 69 74 68 65 72 20 6f 70 65 72 61   if either opera
4c90: 6e 64 20 69 73 20 61 20 42 4c 4f 42 2e 20 20 54  nd is a BLOB.  T
4ca0: 68 65 20 64 65 66 61 75 6c 74 20 62 65 68 61 76  he default behav
4cb0: 69 6f 72 20 6f 66 20 5b 4c 49 4b 45 5d 20 0a 20  ior of [LIKE] . 
4cc0: 20 69 73 20 74 68 61 74 20 42 4c 4f 42 20 6f 70   is that BLOB op
4cd0: 65 72 61 6e 64 73 20 61 72 65 20 63 61 73 74 20  erands are cast 
4ce0: 74 6f 20 54 45 58 54 20 62 65 66 6f 72 65 20 74  to TEXT before t
4cf0: 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73  he comparison is
4d00: 20 64 6f 6e 65 2e 0a 20 20 3c 70 3e 0a 20 20 54   done..  <p>.  T
4d10: 68 69 73 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  his compile-time
4d20: 20 6f 70 74 69 6f 6e 20 6d 61 6b 65 73 20 53 51   option makes SQ
4d30: 4c 69 74 65 20 72 75 6e 20 6d 6f 72 65 20 65 66  Lite run more ef
4d40: 66 69 63 69 65 6e 74 6c 79 20 77 68 65 6e 20 70  ficiently when p
4d50: 72 6f 63 65 73 73 69 6e 67 0a 20 20 71 75 65 72  rocessing.  quer
4d60: 69 65 73 20 74 68 61 74 20 75 73 65 20 74 68 65  ies that use the
4d70: 20 5b 4c 49 4b 45 5d 20 6f 70 65 72 61 74 6f 72   [LIKE] operator
4d80: 2c 20 61 74 20 74 68 65 20 65 78 70 65 6e 73 65  , at the expense
4d90: 20 6f 66 20 62 72 65 61 6b 69 6e 67 20 62 61 63   of breaking bac
4da0: 6b 77 61 72 64 73 0a 20 20 63 6f 6d 70 61 74 69  kwards.  compati
4db0: 62 69 6c 69 74 79 2e 20 20 48 6f 77 65 76 65 72  bility.  However
4dc0: 2c 20 74 68 65 20 62 61 63 6b 77 61 72 64 73 20  , the backwards 
4dd0: 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 62 72  compatibility br
4de0: 65 61 6b 20 6d 61 79 20 62 65 20 6f 6e 6c 79 0a  eak may be only.
4df0: 20 20 61 20 74 65 63 68 6e 69 63 61 6c 69 74 79    a technicality
4e00: 2e 20 20 54 68 65 72 65 20 77 61 73 20 61 20 6c  .  There was a l
4e10: 6f 6e 67 2d 73 74 61 6e 64 69 6e 67 20 62 75 67  ong-standing bug
4e20: 20 69 6e 20 74 68 65 20 5b 4c 49 4b 45 5d 20 70   in the [LIKE] p
4e30: 72 6f 63 65 73 73 69 6e 67 20 6c 6f 67 69 63 0a  rocessing logic.
4e40: 20 20 28 73 65 65 20 5b 68 74 74 70 73 3a 2f 2f    (see [https://
4e50: 77 77 77 2e 73 71 6c 69 74 65 2e 6f 72 67 2f 73  www.sqlite.org/s
4e60: 72 63 2f 69 6e 66 6f 2f 30 35 66 34 33 62 65 38  rc/info/05f43be8
4e70: 66 64 64 61 39 66 5d 29 20 74 68 61 74 20 63 61  fdda9f]) that ca
4e80: 75 73 65 64 20 69 74 20 74 6f 0a 20 20 6d 69 73  used it to.  mis
4e90: 62 65 68 61 76 69 6f 72 20 66 6f 72 20 42 4c 4f  behavior for BLO
4ea0: 42 20 6f 70 65 72 61 6e 64 73 20 61 6e 64 20 6e  B operands and n
4eb0: 6f 62 6f 64 79 20 6f 62 73 65 72 76 65 64 20 74  obody observed t
4ec0: 68 61 74 20 62 75 67 20 69 6e 20 6e 65 61 72 6c  hat bug in nearl
4ed0: 79 0a 20 20 31 30 20 79 65 61 72 73 20 6f 66 20  y.  10 years of 
4ee0: 61 63 74 69 76 65 20 75 73 65 2e 20 20 53 6f 20  active use.  So 
4ef0: 66 6f 72 20 6d 6f 72 65 20 75 73 65 72 73 2c 20  for more users, 
4f00: 69 74 20 69 73 20 70 72 6f 62 61 62 6c 79 20 73  it is probably s
4f10: 61 66 65 20 74 6f 0a 20 20 65 6e 61 62 6c 65 20  afe to.  enable 
4f20: 74 68 69 73 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  this compile-tim
4f30: 65 20 6f 70 74 69 6f 6e 20 61 6e 64 20 74 68 65  e option and the
4f40: 72 65 62 79 20 73 61 76 65 20 61 20 6c 69 74 74  reby save a litt
4f50: 6c 65 20 43 50 55 20 74 69 6d 65 0a 20 20 6f 6e  le CPU time.  on
4f60: 20 4c 49 4b 45 20 71 75 65 72 69 65 73 2e 0a 20   LIKE queries.. 
4f70: 20 3c 70 3e 0a 20 20 54 68 69 73 20 63 6f 6d 70   <p>.  This comp
4f80: 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20  ile-time option 
4f90: 61 66 66 65 63 74 73 20 74 68 65 20 53 51 4c 20  affects the SQL 
4fa0: 5b 4c 49 4b 45 5d 20 6f 70 65 72 61 74 6f 72 20  [LIKE] operator 
4fb0: 6f 6e 6c 79 20 61 6e 64 20 68 61 73 0a 20 20 6e  only and has.  n
4fc0: 6f 20 69 6d 70 61 63 74 20 6f 6e 20 74 68 65 20  o impact on the 
4fd0: 5b 73 71 6c 69 74 65 33 5f 73 74 72 6c 69 6b 65  [sqlite3_strlike
4fe0: 28 29 5d 20 43 2d 6c 61 6e 67 75 61 67 65 20 69  ()] C-language i
4ff0: 6e 74 65 72 66 61 63 65 2e 0a 7d 0a 0a 43 4f 4d  nterface..}..COM
5000: 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c  PILE_OPTION {SQL
5010: 49 54 45 5f 4d 41 58 5f 4d 45 4d 4f 52 59 3d 3c  ITE_MAX_MEMORY=<
5020: 69 3e 4e 3c 2f 69 3e 7d 20 7b 0a 20 20 54 68 69  i>N</i>} {.  Thi
5030: 73 20 6f 70 74 69 6f 6e 20 6c 69 6d 69 74 73 20  s option limits 
5040: 74 68 65 20 74 6f 74 61 6c 20 61 6d 6f 75 6e 74  the total amount
5050: 20 6f 66 20 6d 65 6d 6f 72 79 20 74 68 61 74 20   of memory that 
5060: 53 51 4c 69 74 65 20 77 69 6c 6c 20 72 65 71 75  SQLite will requ
5070: 65 73 74 0a 20 20 66 72 6f 6d 20 6d 61 6c 6c 6f  est.  from mallo
5080: 63 28 29 20 74 6f 20 3c 69 3e 4e 3c 2f 69 3e 20  c() to <i>N</i> 
5090: 62 79 74 65 73 2e 20 20 41 6e 79 20 61 74 74 65  bytes.  Any atte
50a0: 6d 70 74 20 62 79 20 53 51 4c 69 74 65 20 74 6f  mpt by SQLite to
50b0: 20 61 6c 6c 6f 63 61 74 65 0a 20 20 6e 65 77 20   allocate.  new 
50c0: 6d 65 6d 6f 72 79 20 74 68 61 74 20 77 6f 75 6c  memory that woul
50d0: 64 20 63 61 75 73 65 20 74 68 65 20 73 75 6d 20  d cause the sum 
50e0: 6f 66 20 61 6c 6c 20 61 6c 6c 6f 63 61 74 69 6f  of all allocatio
50f0: 6e 73 20 68 65 6c 64 20 62 79 20 53 51 4c 69 74  ns held by SQLit
5100: 65 20 74 6f 20 65 78 63 65 65 64 0a 20 20 3c 69  e to exceed.  <i
5110: 3e 4e 3c 2f 69 3e 20 62 79 74 65 73 20 77 69 6c  >N</i> bytes wil
5120: 6c 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 20 6f  l result in an o
5130: 75 74 2d 6f 66 2d 6d 65 6d 6f 72 79 20 65 72 72  ut-of-memory err
5140: 6f 72 2e 0a 20 20 54 68 69 73 20 69 73 20 61 20  or..  This is a 
5150: 68 61 72 64 20 75 70 70 65 72 20 6c 69 6d 69 74  hard upper limit
5160: 2e 20 20 53 65 65 20 61 6c 73 6f 20 74 68 65 20  .  See also the 
5170: 5b 73 71 6c 69 74 65 33 5f 73 6f 66 74 5f 68 65  [sqlite3_soft_he
5180: 61 70 5f 6c 69 6d 69 74 28 29 5d 0a 20 20 69 6e  ap_limit()].  in
5190: 74 65 72 66 61 63 65 2e 0a 20 20 3c 70 3e 0a 20  terface..  <p>. 
51a0: 20 54 68 69 73 20 6c 69 6d 69 74 20 69 73 20 6f   This limit is o
51b0: 6e 6c 79 20 66 75 6e 63 74 69 6f 6e 61 6c 20 69  nly functional i
51c0: 66 20 6d 65 6d 6f 72 79 20 75 73 61 67 65 20 73  f memory usage s
51d0: 74 61 74 69 73 74 69 63 73 20 61 72 65 20 61 76  tatistics are av
51e0: 61 69 6c 61 62 6c 65 20 76 69 61 0a 20 20 74 68  ailable via.  th
51f0: 65 20 5b 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72  e [sqlite3_memor
5200: 79 5f 75 73 65 64 28 29 5d 20 61 6e 64 20 5b 73  y_used()] and [s
5210: 71 6c 69 74 65 33 5f 73 74 61 74 75 73 36 34 5d  qlite3_status64]
5220: 28 5b 53 51 4c 49 54 45 5f 53 54 41 54 55 53 5f  ([SQLITE_STATUS_
5230: 4d 45 4d 4f 52 59 5f 55 53 45 44 5d 29 0a 20 20  MEMORY_USED]).  
5240: 69 6e 74 65 72 66 61 63 65 73 2e 20 20 57 69 74  interfaces.  Wit
5250: 68 6f 75 74 20 74 68 61 74 20 6d 65 6d 6f 72 79  hout that memory
5260: 20 75 73 61 67 65 20 69 6e 66 6f 72 6d 61 74 69   usage informati
5270: 6f 6e 2c 20 53 51 4c 69 74 65 20 68 61 73 20 6e  on, SQLite has n
5280: 6f 20 77 61 79 20 6f 66 0a 20 20 6b 6e 6f 77 69  o way of.  knowi
5290: 6e 67 20 77 68 65 6e 20 69 74 20 69 73 20 61 62  ng when it is ab
52a0: 6f 75 74 20 74 6f 20 67 6f 20 6f 76 65 72 20 74  out to go over t
52b0: 68 65 20 6c 69 6d 69 74 2c 20 61 6e 64 20 74 68  he limit, and th
52c0: 75 73 20 69 73 20 75 6e 61 62 6c 65 20 74 6f 20  us is unable to 
52d0: 70 72 65 76 65 6e 74 0a 20 20 74 68 65 20 65 78  prevent.  the ex
52e0: 63 65 73 73 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  cess memory allo
52f0: 63 61 74 69 6f 6e 2e 20 20 4d 65 6d 6f 72 79 20  cation.  Memory 
5300: 75 73 61 67 65 20 74 72 61 63 6b 69 6e 67 20 69  usage tracking i
5310: 73 20 74 75 72 6e 65 64 20 6f 6e 20 62 79 20 64  s turned on by d
5320: 65 66 61 75 6c 74 2c 0a 20 20 62 75 74 20 63 61  efault,.  but ca
5330: 6e 20 62 65 20 64 69 73 61 62 6c 65 64 20 61 74  n be disabled at
5340: 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 75 73   compile-time us
5350: 69 6e 67 20 74 68 65 20 5b 53 51 4c 49 54 45 5f  ing the [SQLITE_
5360: 44 45 46 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55  DEFAULT_MEMSTATU
5370: 53 5d 20 6f 70 74 69 6f 6e 2c 0a 20 20 6f 72 20  S] option,.  or 
5380: 61 74 20 73 74 61 72 74 2d 74 69 6d 65 20 75 73  at start-time us
5390: 69 6e 67 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6e  ing [sqlite3_con
53a0: 66 69 67 5d 28 5b 53 51 4c 49 54 45 5f 43 4f 4e  fig]([SQLITE_CON
53b0: 46 49 47 5f 4d 45 4d 53 54 41 54 55 53 5d 29 2e  FIG_MEMSTATUS]).
53c0: 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49  .}..COMPILE_OPTI
53d0: 4f 4e 20 7b 53 51 4c 49 54 45 5f 4d 41 58 5f 4d  ON {SQLITE_MAX_M
53e0: 4d 41 50 5f 53 49 5a 45 3d 3c 69 3e 4e 3c 2f 69  MAP_SIZE=<i>N</i
53f0: 3e 7d 20 7b 0a 20 20 54 68 69 73 20 6d 61 63 72  >} {.  This macr
5400: 6f 20 73 65 74 73 20 61 20 68 61 72 64 20 75 70  o sets a hard up
5410: 70 65 72 20 62 6f 75 6e 64 20 6f 6e 20 74 68 65  per bound on the
5420: 20 61 6d 6f 75 6e 74 20 6f 66 20 61 64 64 72 65   amount of addre
5430: 73 73 20 73 70 61 63 65 20 74 68 61 74 0a 20 20  ss space that.  
5440: 63 61 6e 20 62 65 20 75 73 65 64 20 62 79 20 61  can be used by a
5450: 6e 79 20 73 69 6e 67 6c 65 20 64 61 74 61 62 61  ny single databa
5460: 73 65 20 66 6f 72 20 6d 65 6d 6f 72 79 2d 6d 61  se for memory-ma
5470: 70 70 65 64 20 49 2f 4f 2e 0a 20 20 53 65 74 74  pped I/O..  Sett
5480: 69 6e 67 20 74 68 69 73 20 76 61 6c 75 65 20 74  ing this value t
5490: 6f 20 30 20 63 6f 6d 70 6c 65 74 65 6c 79 20 64  o 0 completely d
54a0: 69 73 61 62 6c 65 73 20 6d 65 6d 6f 72 79 2d 6d  isables memory-m
54b0: 61 70 70 65 64 20 49 2f 4f 20 61 6e 64 0a 20 20  apped I/O and.  
54c0: 63 61 75 73 65 73 20 6c 6f 67 69 63 20 61 73 73  causes logic ass
54d0: 6f 63 69 61 74 65 64 20 77 69 74 68 20 6d 65 6d  ociated with mem
54e0: 6f 72 79 2d 6d 61 70 70 65 64 20 49 2f 4f 20 74  ory-mapped I/O t
54f0: 6f 20 62 65 20 6f 6d 69 74 74 65 64 20 66 72 6f  o be omitted fro
5500: 6d 20 74 68 65 0a 20 20 62 75 69 6c 64 2e 20 20  m the.  build.  
5510: 54 68 69 73 20 6f 70 74 69 6f 6e 20 64 6f 65 73  This option does
5520: 20 63 68 61 6e 67 65 20 74 68 65 20 64 65 66 61   change the defa
5530: 75 6c 74 20 6d 65 6d 6f 72 79 2d 6d 61 70 70 65  ult memory-mappe
5540: 64 20 49 2f 4f 20 61 64 64 72 65 73 73 0a 20 20  d I/O address.  
5550: 73 70 61 63 65 20 73 69 7a 65 20 28 73 65 74 20  space size (set 
5560: 62 79 20 5b 53 51 4c 49 54 45 5f 44 45 46 41 55  by [SQLITE_DEFAU
5570: 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 5d 20 6f 72  LT_MMAP_SIZE] or
5580: 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69  .  sqlite3_confi
5590: 67 28 5b 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47  g([SQLITE_CONFIG
55a0: 5f 4d 4d 41 50 5f 53 49 5a 45 5d 29 20 6f 72 20  _MMAP_SIZE]) or 
55b0: 74 68 65 0a 20 20 72 75 6e 2d 74 69 6d 65 20 6d  the.  run-time m
55c0: 65 6d 6f 72 79 2d 6d 61 70 70 65 64 20 49 2f 4f  emory-mapped I/O
55d0: 20 61 64 64 72 65 73 73 20 73 70 61 63 65 20 73   address space s
55e0: 69 7a 65 20 28 73 65 74 20 62 79 0a 20 20 73 71  ize (set by.  sq
55f0: 6c 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72  lite3_file_contr
5600: 6f 6c 28 5b 53 51 4c 49 54 45 5f 46 43 4e 54 4c  ol([SQLITE_FCNTL
5610: 5f 4d 4d 41 50 5f 53 49 5a 45 5d 29 20 6f 72 0a  _MMAP_SIZE]) or.
5620: 20 20 5b 50 52 41 47 4d 41 20 6d 6d 61 70 5f 73    [PRAGMA mmap_s
5630: 69 7a 65 5d 29 20 61 73 20 6c 6f 6e 67 20 61 73  ize]) as long as
5640: 20 74 68 6f 73 65 20 6f 74 68 65 72 20 73 65 74   those other set
5650: 74 69 6e 67 73 20 61 72 65 20 6c 65 73 73 20 74  tings are less t
5660: 68 61 6e 20 74 68 65 0a 20 20 6d 61 78 69 6d 75  han the.  maximu
5670: 6d 20 76 61 6c 75 65 20 64 65 66 69 6e 65 64 20  m value defined 
5680: 68 65 72 65 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45  here..}..COMPILE
5690: 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f  _OPTION {SQLITE_
56a0: 4d 41 58 5f 53 43 48 45 4d 41 5f 52 45 54 52 59  MAX_SCHEMA_RETRY
56b0: 3d 3c 69 3e 4e 3c 2f 69 3e 7d 20 7b 0a 20 20 57  =<i>N</i>} {.  W
56c0: 68 65 6e 65 76 65 72 20 74 68 65 20 64 61 74 61  henever the data
56d0: 62 61 73 65 20 73 63 68 65 6d 61 20 63 68 61 6e  base schema chan
56e0: 67 65 73 2c 20 70 72 65 70 61 72 65 64 20 73 74  ges, prepared st
56f0: 61 74 65 6d 65 6e 74 73 20 61 72 65 20 61 75 74  atements are aut
5700: 6f 6d 61 74 69 63 61 6c 6c 79 0a 20 20 72 65 70  omatically.  rep
5710: 72 65 70 61 72 65 64 20 74 6f 20 61 63 63 6f 6d  repared to accom
5720: 6d 6f 64 61 74 65 20 74 68 65 20 6e 65 77 20 73  modate the new s
5730: 63 68 65 6d 61 2e 20 20 54 68 65 72 65 20 69 73  chema.  There is
5740: 20 61 20 72 61 63 65 20 63 6f 6e 64 69 74 69 6f   a race conditio
5750: 6e 20 68 65 72 65 0a 20 20 69 6e 20 74 68 61 74  n here.  in that
5760: 20 69 66 20 6f 6e 65 20 74 68 72 65 61 64 20 69   if one thread i
5770: 73 20 63 6f 6e 73 74 61 6e 74 6c 79 20 63 68 61  s constantly cha
5780: 6e 67 69 6e 67 20 74 68 65 20 73 63 68 65 6d 61  nging the schema
5790: 2c 20 61 6e 6f 74 68 65 72 20 74 68 72 65 61 64  , another thread
57a0: 0a 20 20 6d 69 67 68 74 20 73 70 69 6e 20 6f 6e  .  might spin on
57b0: 20 72 65 70 61 72 73 65 73 20 61 6e 64 20 72 65   reparses and re
57c0: 70 72 65 70 61 72 61 74 69 6f 6e 73 20 6f 66 20  preparations of 
57d0: 61 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  a prepared state
57e0: 6d 65 6e 74 20 61 6e 64 0a 20 20 6e 65 76 65 72  ment and.  never
57f0: 20 67 65 74 20 61 6e 79 20 72 65 61 6c 20 77 6f   get any real wo
5800: 72 6b 20 64 6f 6e 65 2e 20 20 54 68 69 73 20 70  rk done.  This p
5810: 61 72 61 6d 65 74 65 72 20 70 72 65 76 65 6e 74  arameter prevent
5820: 73 20 61 6e 20 69 6e 66 69 6e 69 74 65 20 6c 6f  s an infinite lo
5830: 6f 70 0a 20 20 62 79 20 66 6f 72 63 69 6e 67 20  op.  by forcing 
5840: 74 68 65 20 73 70 69 6e 6e 69 6e 67 20 74 68 72  the spinning thr
5850: 65 61 64 20 74 6f 20 67 69 76 65 20 75 70 20 61  ead to give up a
5860: 66 74 65 72 20 61 20 66 69 78 65 64 20 6e 75 6d  fter a fixed num
5870: 62 65 72 20 6f 66 20 61 74 74 65 6d 70 74 73 0a  ber of attempts.
5880: 20 20 61 74 20 72 65 63 6f 6d 70 69 6c 69 6e 67    at recompiling
5890: 20 74 68 65 20 70 72 65 70 61 72 65 64 20 73 74   the prepared st
58a0: 61 74 65 6d 65 6e 74 2e 20 20 54 68 65 20 64 65  atement.  The de
58b0: 66 61 75 6c 74 20 73 65 74 74 69 6e 67 20 69 73  fault setting is
58c0: 20 35 30 20 77 68 69 63 68 20 69 73 0a 20 20 6d   50 which is.  m
58d0: 6f 72 65 20 74 68 61 6e 20 61 64 65 71 75 61 74  ore than adequat
58e0: 65 20 66 6f 72 20 6d 6f 73 74 20 61 70 70 6c 69  e for most appli
58f0: 63 61 74 69 6f 6e 73 2e 0a 7d 0a 0a 43 4f 4d 50  cations..}..COMP
5900: 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49  ILE_OPTION {SQLI
5910: 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48  TE_MAX_WORKER_TH
5920: 52 45 41 44 53 3d 3c 69 3e 4e 3c 2f 69 3e 7d 20  READS=<i>N</i>} 
5930: 7b 0a 20 20 53 65 74 20 61 6e 20 75 70 70 65 72  {.  Set an upper
5940: 20 62 6f 75 6e 64 20 6f 6e 20 74 68 65 20 5b 73   bound on the [s
5950: 71 6c 69 74 65 33 5f 6c 69 6d 69 74 5d 28 64 62  qlite3_limit](db
5960: 2c 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 57  ,[SQLITE_LIMIT_W
5970: 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 5d 2c 4e  ORKER_THREADS],N
5980: 29 0a 20 20 73 65 74 74 69 6e 67 20 74 68 61 74  ).  setting that
5990: 20 64 65 74 65 72 6d 69 6e 65 73 20 74 68 65 20   determines the 
59a0: 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f  maximum number o
59b0: 66 20 61 75 78 69 6c 69 61 72 79 20 74 68 72 65  f auxiliary thre
59c0: 61 64 73 20 74 68 61 74 20 61 20 73 69 6e 67 6c  ads that a singl
59d0: 65 0a 20 20 5b 70 72 65 70 61 72 65 64 20 73 74  e.  [prepared st
59e0: 61 74 65 6d 65 6e 74 5d 20 77 69 6c 6c 20 75 73  atement] will us
59f0: 65 20 74 6f 20 61 69 64 20 77 69 74 68 20 43 50  e to aid with CP
5a00: 55 2d 69 6e 74 65 6e 73 69 76 65 20 63 6f 6d 70  U-intensive comp
5a10: 75 74 61 74 69 6f 6e 73 0a 20 20 28 6d 6f 73 74  utations.  (most
5a20: 6c 79 20 73 6f 72 74 69 6e 67 29 2e 20 20 53 65  ly sorting).  Se
5a30: 65 20 61 6c 73 6f 20 74 68 65 20 5b 53 51 4c 49  e also the [SQLI
5a40: 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45  TE_DEFAULT_WORKE
5a50: 52 5f 54 48 52 45 41 44 53 5d 20 6f 70 74 69 6f  R_THREADS] optio
5a60: 6e 73 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f  ns..}..COMPILE_O
5a70: 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 4d 49  PTION {SQLITE_MI
5a80: 4e 49 4d 55 4d 5f 46 49 4c 45 5f 44 45 53 43 52  NIMUM_FILE_DESCR
5a90: 49 50 54 4f 52 3d 3c 69 3e 4e 3c 2f 69 3e 7d 20  IPTOR=<i>N</i>} 
5aa0: 7b 0a 20 20 54 68 65 20 75 6e 69 78 20 5b 56 46  {.  The unix [VF
5ab0: 53 5d 20 77 69 6c 6c 20 6e 65 76 65 72 20 75 73  S] will never us
5ac0: 65 20 61 20 66 69 6c 65 20 64 65 73 63 72 69 70  e a file descrip
5ad0: 74 6f 72 20 6c 65 73 73 20 74 68 61 6e 20 3c 69  tor less than <i
5ae0: 3e 4e 3c 2f 69 3e 2e 20 20 54 68 65 0a 20 20 64  >N</i>.  The.  d
5af0: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20  efault value of 
5b00: 3c 69 3e 4e 3c 2f 69 3e 20 69 73 20 33 2e 0a 20  <i>N</i> is 3.. 
5b10: 20 3c 70 3e 0a 20 20 41 76 6f 69 64 69 6e 67 20   <p>.  Avoiding 
5b20: 74 68 65 20 75 73 65 20 6f 66 20 6c 6f 77 2d 6e  the use of low-n
5b30: 75 6d 62 65 72 65 64 20 66 69 6c 65 20 64 65 73  umbered file des
5b40: 63 72 69 70 74 6f 72 73 20 69 73 20 61 20 64 65  criptors is a de
5b50: 66 65 6e 73 65 20 61 67 61 69 6e 73 74 0a 20 20  fense against.  
5b60: 61 63 63 69 64 65 6e 74 61 6c 20 64 61 74 61 62  accidental datab
5b70: 61 73 65 20 63 6f 72 72 75 70 74 69 6f 6e 2e 20  ase corruption. 
5b80: 20 49 66 20 61 20 64 61 74 61 62 61 73 65 20 66   If a database f
5b90: 69 6c 65 20 77 61 73 20 6f 70 65 6e 65 64 20 75  ile was opened u
5ba0: 73 69 6e 67 0a 20 20 66 69 6c 65 20 64 65 73 63  sing.  file desc
5bb0: 72 69 70 74 6f 72 20 32 2c 20 66 6f 72 20 65 78  riptor 2, for ex
5bc0: 61 6d 70 6c 65 2c 20 61 6e 64 20 74 68 65 6e 20  ample, and then 
5bd0: 61 6e 20 61 73 73 65 72 74 28 29 20 66 61 69 6c  an assert() fail
5be0: 65 64 20 61 6e 64 20 69 6e 76 6f 6b 65 64 0a 20  ed and invoked. 
5bf0: 20 77 72 69 74 65 28 32 2c 2e 2e 2e 29 2c 20 74   write(2,...), t
5c00: 68 61 74 20 77 6f 75 6c 64 20 6c 69 6b 65 6c 79  hat would likely
5c10: 20 63 61 75 73 65 20 64 61 74 61 62 61 73 65 20   cause database 
5c20: 63 6f 72 72 75 70 74 69 6f 6e 20 62 79 20 6f 76  corruption by ov
5c30: 65 72 77 72 69 74 69 6e 67 0a 20 20 70 61 72 74  erwriting.  part
5c40: 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
5c50: 20 66 69 6c 65 20 77 69 74 68 20 74 68 65 20 61   file with the a
5c60: 73 73 65 72 74 69 6f 6e 20 65 72 72 6f 72 20 6d  ssertion error m
5c70: 65 73 73 61 67 65 2e 20 20 55 73 69 6e 67 20 6f  essage.  Using o
5c80: 6e 6c 79 0a 20 20 68 69 67 68 65 72 2d 76 61 6c  nly.  higher-val
5c90: 75 65 64 20 66 69 6c 65 20 64 65 73 63 72 69 70  ued file descrip
5ca0: 74 6f 72 73 20 61 76 6f 69 64 73 20 74 68 69 73  tors avoids this
5cb0: 20 70 6f 74 65 6e 74 69 61 6c 20 70 72 6f 62 6c   potential probl
5cc0: 65 6d 2e 20 20 54 68 65 20 0a 20 20 70 72 6f 74  em.  The .  prot
5cd0: 65 63 74 69 6f 6e 20 61 67 61 69 6e 73 74 0a 20  ection against. 
5ce0: 20 75 73 69 6e 67 20 6c 6f 77 2d 6e 75 6d 62 65   using low-numbe
5cf0: 72 65 64 20 66 69 6c 65 20 64 65 73 63 72 69 70  red file descrip
5d00: 74 6f 72 73 20 63 61 6e 20 62 65 20 64 69 73 61  tors can be disa
5d10: 62 6c 65 64 20 62 79 20 73 65 74 74 69 6e 67 20  bled by setting 
5d20: 74 68 69 73 0a 20 20 63 6f 6d 70 69 6c 65 2d 74  this.  compile-t
5d30: 69 6d 65 20 6f 70 74 69 6f 6e 20 74 6f 20 30 2e  ime option to 0.
5d40: 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49  .}..COMPILE_OPTI
5d50: 4f 4e 20 7b 53 51 4c 49 54 45 5f 50 4f 57 45 52  ON {SQLITE_POWER
5d60: 53 41 46 45 5f 4f 56 45 52 57 52 49 54 45 3d 3c  SAFE_OVERWRITE=<
5d70: 69 3e 26 6c 74 3b 30 20 6f 72 20 31 26 67 74 3b  i>&lt;0 or 1&gt;
5d80: 3c 2f 69 3e 7d 20 7b 0a 20 20 54 68 69 73 20 6f  </i>} {.  This o
5d90: 70 74 69 6f 6e 20 63 68 61 6e 67 65 73 20 74 68  ption changes th
5da0: 65 20 64 65 66 61 75 6c 74 20 61 73 73 75 6d 70  e default assump
5db0: 74 69 6f 6e 20 61 62 6f 75 74 20 5b 70 6f 77 65  tion about [powe
5dc0: 72 73 61 66 65 20 6f 76 65 72 77 72 69 74 65 5d  rsafe overwrite]
5dd0: 0a 20 20 66 6f 72 20 74 68 65 20 75 6e 64 65 72  .  for the under
5de0: 6c 79 69 6e 67 20 66 69 6c 65 73 79 73 74 65 6d  lying filesystem
5df0: 73 20 66 6f 72 20 74 68 65 20 75 6e 69 78 20 61  s for the unix a
5e00: 6e 64 20 77 69 6e 64 6f 77 73 20 5b 56 46 53 65  nd windows [VFSe
5e10: 73 5d 2e 0a 20 20 53 65 74 74 69 6e 67 20 53 51  s]..  Setting SQ
5e20: 4c 49 54 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f  LITE_POWERSAFE_O
5e30: 56 45 52 57 52 49 54 45 20 74 6f 20 31 20 63 61  VERWRITE to 1 ca
5e40: 75 73 65 73 20 53 51 4c 69 74 65 20 74 6f 20 61  uses SQLite to a
5e50: 73 73 75 6d 65 20 74 68 61 74 0a 20 20 61 70 70  ssume that.  app
5e60: 6c 69 63 61 74 69 6f 6e 2d 6c 65 76 65 6c 20 77  lication-level w
5e70: 72 69 74 65 73 20 63 61 6e 6e 6f 74 20 63 68 61  rites cannot cha
5e80: 6e 67 65 73 20 62 79 74 65 73 20 6f 75 74 73 69  nges bytes outsi
5e90: 64 65 20 74 68 65 20 72 61 6e 67 65 20 6f 66 0a  de the range of.
5ea0: 20 20 62 79 74 65 73 20 77 72 69 74 74 65 6e 20    bytes written 
5eb0: 65 76 65 6e 20 69 66 20 74 68 65 20 77 72 69 74  even if the writ
5ec0: 65 20 6f 63 63 75 72 73 20 6a 75 73 74 20 62 65  e occurs just be
5ed0: 66 6f 72 65 20 61 20 70 6f 77 65 72 20 6c 6f 73  fore a power los
5ee0: 73 2e 0a 20 20 57 69 74 68 20 53 51 4c 49 54 45  s..  With SQLITE
5ef0: 5f 50 4f 57 45 52 53 41 46 45 5f 4f 56 45 52 57  _POWERSAFE_OVERW
5f00: 52 49 54 45 20 73 65 74 20 74 6f 20 30 2c 20 53  RITE set to 0, S
5f10: 51 4c 69 74 65 20 61 73 73 75 6d 65 73 20 74 68  QLite assumes th
5f20: 61 74 20 6f 74 68 65 72 0a 20 20 62 79 74 65 73  at other.  bytes
5f30: 20 69 6e 20 74 68 65 20 73 61 6d 65 20 73 65 63   in the same sec
5f40: 74 6f 72 20 77 69 74 68 20 61 20 77 72 69 74 74  tor with a writt
5f50: 65 6e 20 62 79 74 65 20 6d 69 67 68 74 20 62 65  en byte might be
5f60: 20 63 68 61 6e 67 65 64 20 6f 72 20 0a 20 20 64   changed or .  d
5f70: 61 6d 61 67 65 64 20 62 79 20 61 20 70 6f 77 65  amaged by a powe
5f80: 72 20 6c 6f 73 73 2e 0a 7d 0a 0a 43 4f 4d 50 49  r loss..}..COMPI
5f90: 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54  LE_OPTION {SQLIT
5fa0: 45 5f 52 45 56 45 52 53 45 5f 55 4e 4f 52 44 45  E_REVERSE_UNORDE
5fb0: 52 45 44 5f 53 45 4c 45 43 54 53 7d 20 7b 0a 20  RED_SELECTS} {. 
5fc0: 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 63 61 75   This option cau
5fd0: 73 65 73 20 74 68 65 20 5b 50 52 41 47 4d 41 20  ses the [PRAGMA 
5fe0: 72 65 76 65 72 73 65 5f 75 6e 6f 72 64 65 72 65  reverse_unordere
5ff0: 64 5f 73 65 6c 65 63 74 73 5d 20 73 65 74 74 69  d_selects] setti
6000: 6e 67 20 74 6f 20 62 65 0a 20 20 65 6e 61 62 6c  ng to be.  enabl
6010: 65 64 20 62 79 20 64 65 66 61 75 6c 74 2e 20 20  ed by default.  
6020: 57 68 65 6e 20 65 6e 61 62 6c 65 64 2c 20 5b 53  When enabled, [S
6030: 45 4c 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74  ELECT] statement
6040: 73 20 74 68 61 74 20 6c 61 63 6b 20 61 6e 0a 20  s that lack an. 
6050: 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
6060: 20 77 69 6c 6c 20 72 75 6e 20 69 6e 20 72 65 76   will run in rev
6070: 65 72 73 65 20 6f 72 64 65 72 2e 3c 70 3e 0a 20  erse order.<p>. 
6080: 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 69 73 20   This option is 
6090: 75 73 65 66 75 6c 20 66 6f 72 20 64 65 74 65 63  useful for detec
60a0: 74 69 6e 67 20 77 68 65 6e 20 61 70 70 6c 69 63  ting when applic
60b0: 61 74 69 6f 6e 73 20 28 69 6e 63 6f 72 72 65 63  ations (incorrec
60c0: 74 6c 79 29 0a 20 20 61 73 73 75 6d 65 20 74 68  tly).  assume th
60d0: 61 74 20 74 68 65 20 6f 72 64 65 72 20 6f 66 20  at the order of 
60e0: 72 6f 77 73 20 69 6e 20 61 20 53 45 4c 45 43 54  rows in a SELECT
60f0: 20 77 69 74 68 6f 75 74 20 61 6e 20 4f 52 44 45   without an ORDE
6100: 52 20 42 59 20 63 6c 61 75 73 65 0a 20 20 77 69  R BY clause.  wi
6110: 6c 6c 20 61 6c 77 61 79 73 20 62 65 20 74 68 65  ll always be the
6120: 20 73 61 6d 65 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c   same..}..COMPIL
6130: 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45  E_OPTION {SQLITE
6140: 5f 53 4f 52 54 45 52 5f 50 4d 41 53 5a 3d 3c 69  _SORTER_PMASZ=<i
6150: 3e 4e 3c 2f 69 3e 7d 20 7b 0a 20 20 49 66 20 6d  >N</i>} {.  If m
6160: 75 6c 74 69 2d 74 68 72 65 61 64 65 64 20 70 72  ulti-threaded pr
6170: 6f 63 65 73 73 69 6e 67 20 69 73 20 65 6e 61 62  ocessing is enab
6180: 6c 65 64 20 76 69 61 20 74 68 65 0a 20 20 5b 50  led via the.  [P
6190: 52 41 47 4d 41 20 74 68 72 65 61 64 73 5d 20 73  RAGMA threads] s
61a0: 65 74 74 69 6e 67 2c 20 74 68 65 6e 20 73 6f 72  etting, then sor
61b0: 74 20 6f 70 65 72 61 74 69 6f 6e 73 20 77 69 6c  t operations wil
61c0: 6c 0a 20 20 61 74 74 65 6d 70 74 20 74 6f 20 73  l.  attempt to s
61d0: 74 61 72 74 20 68 65 6c 70 65 72 20 74 68 72 65  tart helper thre
61e0: 61 64 73 20 77 68 65 6e 20 74 68 65 20 61 6d 6f  ads when the amo
61f0: 75 6e 74 20 6f 66 20 63 6f 6e 74 65 6e 74 0a 20  unt of content. 
6200: 20 74 6f 20 62 65 20 73 6f 72 74 65 64 20 65 78   to be sorted ex
6210: 63 65 65 64 73 20 74 68 65 20 6d 69 6e 69 6d 75  ceeds the minimu
6220: 6d 20 6f 66 20 74 68 65 20 5b 63 61 63 68 65 5f  m of the [cache_
6230: 73 69 7a 65 5d 20 61 6e 64 20 50 4d 41 20 53 69  size] and PMA Si
6240: 7a 65 0a 20 20 64 65 74 65 72 6d 69 6e 65 64 20  ze.  determined 
6250: 62 79 20 74 68 65 20 5b 53 51 4c 49 54 45 5f 43  by the [SQLITE_C
6260: 4f 4e 46 49 47 5f 50 4d 41 53 5a 5d 20 73 74 61  ONFIG_PMASZ] sta
6270: 72 74 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 2e 0a  rt-time option..
6280: 20 20 54 68 69 73 20 63 6f 6d 70 69 6c 65 2d 74    This compile-t
6290: 69 6d 65 20 6f 70 74 69 6f 6e 20 73 65 74 73 20  ime option sets 
62a0: 74 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75  the default valu
62b0: 65 20 66 6f 72 20 74 68 65 0a 20 20 5b 53 51 4c  e for the.  [SQL
62c0: 49 54 45 5f 43 4f 4e 46 49 47 5f 50 4d 41 53 5a  ITE_CONFIG_PMASZ
62d0: 5d 20 73 74 61 72 74 2d 74 69 6d 65 20 6f 70 74  ] start-time opt
62e0: 69 6f 6e 2e 0a 20 20 54 68 65 20 64 65 66 61 75  ion..  The defau
62f0: 6c 74 20 76 61 6c 75 65 20 69 73 20 32 35 30 2e  lt value is 250.
6300: 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49  .}..COMPILE_OPTI
6310: 4f 4e 20 7b 53 51 4c 49 54 45 5f 53 54 4d 54 4a  ON {SQLITE_STMTJ
6320: 52 4e 4c 5f 53 50 49 4c 4c 3d 3c 69 3e 4e 3c 2f  RNL_SPILL=<i>N</
6330: 69 3e 7d 20 7b 0a 20 20 54 68 65 20 53 51 4c 49  i>} {.  The SQLI
6340: 54 45 5f 53 54 4d 54 4a 52 4e 4c 5f 53 50 49 4c  TE_STMTJRNL_SPIL
6350: 4c 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f  L compile-time o
6360: 70 74 69 6f 6e 20 64 65 74 65 72 6d 69 6e 65 73  ption determines
6370: 20 74 68 65 0a 20 20 64 65 66 61 75 6c 74 20 73   the.  default s
6380: 65 74 74 69 6e 67 20 6f 66 20 74 68 65 20 5b 53  etting of the [S
6390: 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 53 54 4d  QLITE_CONFIG_STM
63a0: 54 4a 52 4e 4c 5f 53 50 49 4c 4c 5d 20 73 74 61  TJRNL_SPILL] sta
63b0: 72 74 2d 74 69 6d 65 0a 20 20 73 65 74 74 69 6e  rt-time.  settin
63c0: 67 2e 20 20 54 68 61 74 20 73 65 74 74 69 6e 67  g.  That setting
63d0: 20 64 65 74 65 72 6d 69 6e 65 73 20 74 68 65 20   determines the 
63e0: 73 69 7a 65 20 74 68 72 65 73 68 6f 6c 64 20 61  size threshold a
63f0: 62 6f 76 65 20 77 68 69 63 68 0a 20 20 5b 73 74  bove which.  [st
6400: 61 74 65 6d 65 6e 74 20 6a 6f 75 72 6e 61 6c 73  atement journals
6410: 5d 20 61 72 65 20 6d 6f 76 65 64 20 66 72 6f 6d  ] are moved from
6420: 20 6d 65 6d 6f 72 79 20 74 6f 20 64 69 73 6b 2e   memory to disk.
6430: 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49  .}..COMPILE_OPTI
6440: 4f 4e 20 7b 53 51 4c 49 54 45 5f 57 49 4e 33 32  ON {SQLITE_WIN32
6450: 5f 4d 41 4c 4c 4f 43 7d 20 7b 0a 20 20 54 68 69  _MALLOC} {.  Thi
6460: 73 20 6f 70 74 69 6f 6e 20 65 6e 61 62 6c 65 73  s option enables
6470: 20 74 68 65 20 75 73 65 20 6f 66 20 74 68 65 20   the use of the 
6480: 57 69 6e 64 6f 77 73 20 48 65 61 70 20 41 50 49  Windows Heap API
6490: 20 66 75 6e 63 74 69 6f 6e 73 20 66 6f 72 20 6d   functions for m
64a0: 65 6d 6f 72 79 0a 20 20 61 6c 6c 6f 63 61 74 69  emory.  allocati
64b0: 6f 6e 20 69 6e 73 74 65 61 64 20 6f 66 20 74 68  on instead of th
64c0: 65 20 73 74 61 6e 64 61 72 64 20 6c 69 62 72 61  e standard libra
64d0: 72 79 20 6d 61 6c 6c 6f 63 28 29 20 61 6e 64 20  ry malloc() and 
64e0: 66 72 65 65 28 29 20 72 6f 75 74 69 6e 65 73 2e  free() routines.
64f0: 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49  .}..COMPILE_OPTI
6500: 4f 4e 20 7b 59 59 53 54 41 43 4b 44 45 50 54 48  ON {YYSTACKDEPTH
6510: 3d 3c 69 3e 26 6c 74 3b 6d 61 78 5f 64 65 70 74  =<i>&lt;max_dept
6520: 68 26 67 74 3b 3c 2f 69 3e 7d 20 7b 0a 20 20 54  h&gt;</i>} {.  T
6530: 68 69 73 20 6d 61 63 72 6f 20 73 65 74 73 20 74  his macro sets t
6540: 68 65 20 6d 61 78 69 6d 75 6d 20 64 65 70 74 68  he maximum depth
6550: 20 6f 66 20 74 68 65 20 4c 41 4c 52 28 31 29 20   of the LALR(1) 
6560: 73 74 61 63 6b 20 75 73 65 64 20 62 79 0a 20 20  stack used by.  
6570: 74 68 65 20 53 51 4c 20 70 61 72 73 65 72 20 77  the SQL parser w
6580: 69 74 68 69 6e 20 53 51 4c 69 74 65 2e 20 20 54  ithin SQLite.  T
6590: 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65  he default value
65a0: 20 69 73 20 31 30 30 2e 20 20 41 20 74 79 70 69   is 100.  A typi
65b0: 63 61 6c 0a 20 20 61 70 70 6c 69 63 61 74 69 6f  cal.  applicatio
65c0: 6e 20 77 69 6c 6c 20 75 73 65 20 6c 65 73 73 20  n will use less 
65d0: 74 68 61 6e 20 61 62 6f 75 74 20 32 30 20 6c 65  than about 20 le
65e0: 76 65 6c 73 20 6f 66 20 74 68 65 20 73 74 61 63  vels of the stac
65f0: 6b 2e 0a 20 20 44 65 76 65 6c 6f 70 65 72 73 20  k..  Developers 
6600: 77 68 6f 73 65 20 61 70 70 6c 69 63 61 74 69 6f  whose applicatio
6610: 6e 73 20 63 6f 6e 74 61 69 6e 20 53 51 4c 20 73  ns contain SQL s
6620: 74 61 74 65 6d 65 6e 74 73 20 74 68 61 74 20 0a  tatements that .
6630: 20 20 6e 65 65 64 20 6d 6f 72 65 20 74 68 61 6e    need more than
6640: 20 31 30 30 20 4c 41 4c 52 28 31 29 20 73 74 61   100 LALR(1) sta
6650: 63 6b 20 65 6e 74 72 69 65 73 20 73 68 6f 75 6c  ck entries shoul
6660: 64 20 73 65 72 69 6f 75 73 6c 79 0a 20 20 63 6f  d seriously.  co
6670: 6e 73 69 64 65 72 20 72 65 66 61 63 74 6f 72 69  nsider refactori
6680: 6e 67 20 74 68 65 69 72 20 53 51 4c 20 61 73 20  ng their SQL as 
6690: 69 74 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20  it is likely to 
66a0: 62 65 20 77 65 6c 6c 20 62 65 79 6f 6e 64 0a 20  be well beyond. 
66b0: 20 74 68 65 20 61 62 69 6c 69 74 79 20 6f 66 20   the ability of 
66c0: 61 6e 79 20 68 75 6d 61 6e 20 74 6f 20 63 6f 6d  any human to com
66d0: 70 72 65 68 65 6e 64 2e 0a 7d 0a 3c 2f 74 63 6c  prehend..}.</tcl
66e0: 3e 0a 0a 3c 68 31 3e 20 4f 70 74 69 6f 6e 73 20  >..<h1> Options 
66f0: 54 6f 20 53 65 74 20 53 69 7a 65 20 4c 69 6d 69  To Set Size Limi
6700: 74 73 3c 2f 68 31 3e 0a 0a 3c 70 3e 54 68 65 72  ts</h1>..<p>Ther
6710: 65 20 61 72 65 20 63 6f 6d 70 69 6c 65 2d 74 69  e are compile-ti
6720: 6d 65 20 6f 70 74 69 6f 6e 73 20 74 68 61 74 20  me options that 
6730: 77 69 6c 6c 20 73 65 74 20 75 70 70 65 72 20 62  will set upper b
6740: 6f 75 6e 64 73 0a 6f 6e 20 74 68 65 20 73 69 7a  ounds.on the siz
6750: 65 73 20 6f 66 20 76 61 72 69 6f 75 73 20 73 74  es of various st
6760: 72 75 63 74 75 72 65 73 20 69 6e 20 53 51 4c 69  ructures in SQLi
6770: 74 65 2e 20 20 54 68 65 20 63 6f 6d 70 69 6c 65  te.  The compile
6780: 2d 74 69 6d 65 0a 6f 70 74 69 6f 6e 73 20 6e 6f  -time.options no
6790: 72 6d 61 6c 6c 79 20 73 65 74 20 61 20 68 61 72  rmally set a har
67a0: 64 20 75 70 70 65 72 20 62 6f 75 6e 64 20 74 68  d upper bound th
67b0: 61 74 20 63 61 6e 20 62 65 20 63 68 61 6e 67 65  at can be change
67c0: 64 0a 61 74 20 72 75 6e 2d 74 69 6d 65 20 6f 6e  d.at run-time on
67d0: 20 69 6e 64 69 76 69 64 75 61 6c 20 5b 64 61 74   individual [dat
67e0: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
67f0: 73 5d 20 75 73 69 6e 67 20 74 68 65 0a 5b 73 71  s] using the.[sq
6800: 6c 69 74 65 33 5f 6c 69 6d 69 74 28 29 5d 20 69  lite3_limit()] i
6810: 6e 74 65 72 66 61 63 65 2e 3c 2f 70 3e 0a 0a 3c  nterface.</p>..<
6820: 70 3e 54 68 65 20 63 6f 6d 70 69 6c 65 2d 74 69  p>The compile-ti
6830: 6d 65 20 6f 70 74 69 6f 6e 73 20 66 6f 72 20 73  me options for s
6840: 65 74 74 69 6e 67 20 75 70 70 65 72 20 62 6f 75  etting upper bou
6850: 6e 64 73 20 61 72 65 0a 5b 6c 69 6d 69 74 73 20  nds are.[limits 
6860: 7c 20 64 6f 63 75 6d 65 6e 74 65 64 20 73 65 70  | documented sep
6870: 61 72 61 74 65 6c 79 5d 2e 20 20 54 68 65 20 66  arately].  The f
6880: 6f 6c 6c 6f 77 69 6e 67 20 69 73 20 61 20 6c 69  ollowing is a li
6890: 73 74 20 6f 66 0a 74 68 65 20 61 76 61 69 6c 61  st of.the availa
68a0: 62 6c 65 20 73 65 74 74 69 6e 67 73 3a 3c 2f 70  ble settings:</p
68b0: 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 20 5b 53 51  >..<ul>.<li> [SQ
68c0: 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45  LITE_MAX_ATTACHE
68d0: 44 5d 20 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e 20 5b  D]  </li>.<li> [
68e0: 53 51 4c 49 54 45 5f 4d 41 58 5f 43 4f 4c 55 4d  SQLITE_MAX_COLUM
68f0: 4e 5d 20 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e 20 5b  N]  </li>.<li> [
6900: 53 51 4c 49 54 45 5f 4d 41 58 5f 43 4f 4d 50 4f  SQLITE_MAX_COMPO
6910: 55 4e 44 5f 53 45 4c 45 43 54 5d 20 20 3c 2f 6c  UND_SELECT]  </l
6920: 69 3e 0a 3c 6c 69 3e 20 5b 53 51 4c 49 54 45 5f  i>.<li> [SQLITE_
6930: 4d 41 58 5f 45 58 50 52 5f 44 45 50 54 48 5d 20  MAX_EXPR_DEPTH] 
6940: 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e 20 5b 53 51 4c   </li>.<li> [SQL
6950: 49 54 45 5f 4d 41 58 5f 46 55 4e 43 54 49 4f 4e  ITE_MAX_FUNCTION
6960: 5f 41 52 47 5d 20 20 3c 2f 6c 69 3e 0a 3c 6c 69  _ARG]  </li>.<li
6970: 3e 20 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45  > [SQLITE_MAX_LE
6980: 4e 47 54 48 5d 20 20 3c 2f 6c 69 3e 0a 3c 6c 69  NGTH]  </li>.<li
6990: 3e 20 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 49  > [SQLITE_MAX_LI
69a0: 4b 45 5f 50 41 54 54 45 52 4e 5f 4c 45 4e 47 54  KE_PATTERN_LENGT
69b0: 48 5d 20 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e 20 5b  H]  </li>.<li> [
69c0: 53 51 4c 49 54 45 5f 4d 41 58 5f 50 41 47 45 5f  SQLITE_MAX_PAGE_
69d0: 43 4f 55 4e 54 5d 20 20 3c 2f 6c 69 3e 0a 3c 6c  COUNT]  </li>.<l
69e0: 69 3e 20 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 53  i> [SQLITE_MAX_S
69f0: 51 4c 5f 4c 45 4e 47 54 48 5d 20 20 3c 2f 6c 69  QL_LENGTH]  </li
6a00: 3e 0a 3c 6c 69 3e 20 5b 53 51 4c 49 54 45 5f 4d  >.<li> [SQLITE_M
6a10: 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42  AX_VARIABLE_NUMB
6a20: 45 52 5d 20 20 3c 2f 6c 69 3e 0a 3c 2f 75 6c 3e  ER]  </li>.</ul>
6a30: 0a 0a 3c 61 20 6e 61 6d 65 3d 22 63 6f 6e 74 72  ..<a name="contr
6a40: 6f 6c 66 65 61 74 75 72 65 73 22 3e 3c 2f 61 3e  olfeatures"></a>
6a50: 0a 3c 68 31 3e 20 4f 70 74 69 6f 6e 73 20 54 6f  .<h1> Options To
6a60: 20 43 6f 6e 74 72 6f 6c 20 4f 70 65 72 61 74 69   Control Operati
6a70: 6e 67 20 43 68 61 72 61 63 74 65 72 69 73 74 69  ng Characteristi
6a80: 63 73 3c 2f 68 31 3e 0a 0a 3c 74 63 6c 3e 0a 43  cs</h1>..<tcl>.C
6a90: 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53  OMPILE_OPTION {S
6aa0: 51 4c 49 54 45 5f 34 5f 42 59 54 45 5f 41 4c 49  QLITE_4_BYTE_ALI
6ab0: 47 4e 45 44 5f 4d 41 4c 4c 4f 43 7d 20 7b 0a 20  GNED_MALLOC} {. 
6ac0: 20 4f 6e 20 6d 6f 73 74 20 73 79 73 74 65 6d 73   On most systems
6ad0: 2c 20 74 68 65 20 6d 61 6c 6c 6f 63 28 29 20 73  , the malloc() s
6ae0: 79 73 74 65 6d 20 63 61 6c 6c 20 72 65 74 75 72  ystem call retur
6af0: 6e 73 20 61 20 62 75 66 66 65 72 20 74 68 61 74  ns a buffer that
6b00: 20 69 73 0a 20 20 61 6c 69 67 6e 65 64 20 74 6f   is.  aligned to
6b10: 20 61 6e 20 38 2d 62 79 74 65 20 62 6f 75 6e 64   an 8-byte bound
6b20: 61 72 79 2e 20 20 42 75 74 20 6f 6e 20 73 6f 6d  ary.  But on som
6b30: 65 20 73 79 73 74 65 6d 73 20 28 65 78 3a 20 77  e systems (ex: w
6b40: 69 6e 64 6f 77 73 29 20 6d 61 6c 6c 6f 63 28 29  indows) malloc()
6b50: 0a 20 20 72 65 74 75 72 6e 73 20 34 2d 62 79 74  .  returns 4-byt
6b60: 65 20 61 6c 69 67 6e 65 64 20 70 6f 69 6e 74 65  e aligned pointe
6b70: 72 2e 20 20 54 68 69 73 20 63 6f 6d 70 69 6c 65  r.  This compile
6b80: 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 6d 75 73  -time option mus
6b90: 74 20 62 65 20 75 73 65 64 0a 20 20 6f 6e 20 73  t be used.  on s
6ba0: 79 73 74 65 6d 73 20 74 68 61 74 20 72 65 74 75  ystems that retu
6bb0: 72 6e 20 34 2d 62 79 74 65 20 61 6c 69 67 6e 65  rn 4-byte aligne
6bc0: 64 20 70 6f 69 6e 74 65 72 73 20 66 72 6f 6d 20  d pointers from 
6bd0: 6d 61 6c 6c 6f 63 28 29 2e 0a 7d 0a 0a 43 4f 4d  malloc()..}..COM
6be0: 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c  PILE_OPTION {SQL
6bf0: 49 54 45 5f 43 41 53 45 5f 53 45 4e 53 49 54 49  ITE_CASE_SENSITI
6c00: 56 45 5f 4c 49 4b 45 7d 20 7b 0a 20 20 49 66 20  VE_LIKE} {.  If 
6c10: 74 68 69 73 20 6f 70 74 69 6f 6e 20 69 73 20 70  this option is p
6c20: 72 65 73 65 6e 74 2c 20 74 68 65 6e 20 74 68 65  resent, then the
6c30: 20 62 75 69 6c 74 2d 69 6e 20 5b 4c 49 4b 45 5d   built-in [LIKE]
6c40: 20 6f 70 65 72 61 74 6f 72 20 77 69 6c 6c 20 62   operator will b
6c50: 65 0a 20 20 63 61 73 65 20 73 65 6e 73 69 74 69  e.  case sensiti
6c60: 76 65 2e 20 20 54 68 69 73 20 73 61 6d 65 20 65  ve.  This same e
6c70: 66 66 65 63 74 20 63 61 6e 20 62 65 20 61 63 68  ffect can be ach
6c80: 69 65 76 65 64 20 61 74 20 72 75 6e 2d 74 69 6d  ieved at run-tim
6c90: 65 20 75 73 69 6e 67 0a 20 20 74 68 65 20 5b 63  e using.  the [c
6ca0: 61 73 65 5f 73 65 6e 73 69 74 69 76 65 5f 6c 69  ase_sensitive_li
6cb0: 6b 65 20 70 72 61 67 6d 61 5d 2e 0a 7d 0a 0a 43  ke pragma]..}..C
6cc0: 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53  OMPILE_OPTION {S
6cd0: 51 4c 49 54 45 5f 44 49 52 45 43 54 5f 4f 56 45  QLITE_DIRECT_OVE
6ce0: 52 46 4c 4f 57 5f 52 45 41 44 7d 20 7b 0a 20 20  RFLOW_READ} {.  
6cf0: 57 68 65 6e 20 74 68 69 73 20 6f 70 74 69 6f 6e  When this option
6d00: 20 69 73 20 70 72 65 73 65 6e 74 2c 20 63 6f 6e   is present, con
6d10: 74 65 6e 74 20 63 6f 6e 74 61 69 6e 65 64 20 69  tent contained i
6d20: 6e 0a 20 20 5b 6f 76 65 72 66 6c 6f 77 20 70 61  n.  [overflow pa
6d30: 67 65 73 5d 20 6f 66 20 74 68 65 20 64 61 74 61  ges] of the data
6d40: 62 61 73 65 20 66 69 6c 65 20 69 73 20 72 65 61  base file is rea
6d50: 64 20 64 69 72 65 63 74 6c 79 20 66 72 6f 6d 20  d directly from 
6d60: 64 69 73 6b 2c 0a 20 20 62 79 70 61 73 73 69 6e  disk,.  bypassin
6d70: 67 20 74 68 65 20 5b 70 61 67 65 20 63 61 63 68  g the [page cach
6d80: 65 5d 2c 20 64 75 72 69 6e 67 20 72 65 61 64 20  e], during read 
6d90: 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e 20 20 49  transactions.  I
6da0: 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 0a 20  n applications. 
6db0: 20 74 68 61 74 20 64 6f 20 61 20 6c 6f 74 20 6f   that do a lot o
6dc0: 66 20 72 65 61 64 73 20 6f 66 20 6c 61 72 67 65  f reads of large
6dd0: 20 42 4c 4f 42 73 2c 20 74 68 69 73 20 6f 70 74   BLOBs, this opt
6de0: 69 6f 6e 20 6d 69 67 68 74 20 69 6d 70 72 6f 76  ion might improv
6df0: 65 20 72 65 61 64 0a 20 20 70 65 72 66 6f 72 6d  e read.  perform
6e00: 61 6e 63 65 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45  ance..}..COMPILE
6e10: 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f  _OPTION {SQLITE_
6e20: 48 41 56 45 5f 49 53 4e 41 4e 7d 20 7b 0a 20 20  HAVE_ISNAN} {.  
6e30: 49 66 20 74 68 69 73 20 6f 70 74 69 6f 6e 20 69  If this option i
6e40: 73 20 70 72 65 73 65 6e 74 2c 20 74 68 65 6e 20  s present, then 
6e50: 53 51 4c 69 74 65 20 77 69 6c 6c 20 75 73 65 20  SQLite will use 
6e60: 74 68 65 20 69 73 6e 61 6e 28 29 20 66 75 6e 63  the isnan() func
6e70: 74 69 6f 6e 20 66 72 6f 6d 0a 20 20 74 68 65 20  tion from.  the 
6e80: 73 79 73 74 65 6d 20 6d 61 74 68 20 6c 69 62 72  system math libr
6e90: 61 72 79 2e 20 20 54 68 69 73 20 69 73 20 61 6e  ary.  This is an
6ea0: 20 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20 5b   alias for the [
6eb0: 48 41 56 45 5f 49 53 4e 41 4e 5d 20 63 6f 6e 66  HAVE_ISNAN] conf
6ec0: 69 67 75 72 61 74 69 6f 6e 0a 20 20 6f 70 74 69  iguration.  opti
6ed0: 6f 6e 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f  on..}..COMPILE_O
6ee0: 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f 53  PTION {SQLITE_OS
6ef0: 5f 4f 54 48 45 52 3d 3c 69 3e 26 6c 74 3b 30 20  _OTHER=<i>&lt;0 
6f00: 6f 72 20 31 26 67 74 3b 3c 2f 69 3e 7d 20 7b 0a  or 1&gt;</i>} {.
6f10: 20 20 54 68 65 20 6f 70 74 69 6f 6e 20 63 61 75    The option cau
6f20: 73 65 73 20 53 51 4c 69 74 65 20 74 6f 20 6f 6d  ses SQLite to om
6f30: 69 74 20 69 74 73 20 62 75 69 6c 74 2d 69 6e 20  it its built-in 
6f40: 6f 70 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d  operating system
6f50: 20 69 6e 74 65 72 66 61 63 65 73 0a 20 20 66 6f   interfaces.  fo
6f60: 72 20 55 6e 69 78 2c 20 57 69 6e 64 6f 77 73 2c  r Unix, Windows,
6f70: 20 61 6e 64 20 4f 53 2f 32 2e 20 20 54 68 65 20   and OS/2.  The 
6f80: 72 65 73 75 6c 74 69 6e 67 20 6c 69 62 72 61 72  resulting librar
6f90: 79 20 77 69 6c 6c 20 68 61 76 65 20 6e 6f 20 64  y will have no d
6fa0: 65 66 61 75 6c 74 0a 20 20 5b 73 71 6c 69 74 65  efault.  [sqlite
6fb0: 33 5f 76 66 73 20 7c 20 6f 70 65 72 61 74 69 6e  3_vfs | operatin
6fc0: 67 20 73 79 73 74 65 6d 20 69 6e 74 65 72 66 61  g system interfa
6fd0: 63 65 5d 2e 20 20 41 70 70 6c 69 63 61 74 69 6f  ce].  Applicatio
6fe0: 6e 73 20 6d 75 73 74 20 75 73 65 0a 20 20 5b 73  ns must use.  [s
6ff0: 71 6c 69 74 65 33 5f 76 66 73 5f 72 65 67 69 73  qlite3_vfs_regis
7000: 74 65 72 28 29 5d 20 74 6f 20 72 65 67 69 73 74  ter()] to regist
7010: 65 72 20 61 6e 20 61 70 70 72 6f 70 72 69 61 74  er an appropriat
7020: 65 20 69 6e 74 65 72 66 61 63 65 20 62 65 66 6f  e interface befo
7030: 72 65 0a 20 20 75 73 69 6e 67 20 53 51 4c 69 74  re.  using SQLit
7040: 65 2e 20 20 41 70 70 6c 69 63 61 74 69 6f 6e 73  e.  Applications
7050: 20 6d 75 73 74 20 61 6c 73 6f 20 73 75 70 70 6c   must also suppl
7060: 79 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  y implementation
7070: 73 20 66 6f 72 20 74 68 65 0a 20 20 5b 73 71 6c  s for the.  [sql
7080: 69 74 65 33 5f 6f 73 5f 69 6e 69 74 28 29 5d 20  ite3_os_init()] 
7090: 61 6e 64 20 5b 73 71 6c 69 74 65 33 5f 6f 73 5f  and [sqlite3_os_
70a0: 65 6e 64 28 29 5d 20 69 6e 74 65 72 66 61 63 65  end()] interface
70b0: 73 2e 20 20 54 68 65 20 75 73 75 61 6c 20 70 72  s.  The usual pr
70c0: 61 63 74 69 63 65 0a 20 20 69 73 20 66 6f 72 20  actice.  is for 
70d0: 74 68 65 20 73 75 70 70 6c 69 65 64 20 5b 73 71  the supplied [sq
70e0: 6c 69 74 65 33 5f 6f 73 5f 69 6e 69 74 28 29 5d  lite3_os_init()]
70f0: 20 74 6f 20 69 6e 76 6f 6b 65 20 5b 73 71 6c 69   to invoke [sqli
7100: 74 65 33 5f 76 66 73 5f 72 65 67 69 73 74 65 72  te3_vfs_register
7110: 28 29 5d 2e 0a 20 20 53 51 4c 69 74 65 20 77 69  ()]..  SQLite wi
7120: 6c 6c 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  ll automatically
7130: 20 69 6e 76 6f 6b 65 20 5b 73 71 6c 69 74 65 33   invoke [sqlite3
7140: 5f 6f 73 5f 69 6e 69 74 28 29 5d 20 77 68 65 6e  _os_init()] when
7150: 20 69 74 20 69 6e 69 74 69 61 6c 69 7a 65 73 2e   it initializes.
7160: 0a 0a 20 20 54 68 69 73 20 6f 70 74 69 6f 6e 20  ..  This option 
7170: 69 73 20 74 79 70 69 63 61 6c 6c 79 20 75 73 65  is typically use
7180: 64 20 77 68 65 6e 20 62 75 69 6c 64 69 6e 67 20  d when building 
7190: 53 51 4c 69 74 65 20 66 6f 72 20 61 6e 20 65 6d  SQLite for an em
71a0: 62 65 64 64 65 64 0a 20 20 70 6c 61 74 66 6f 72  bedded.  platfor
71b0: 6d 20 77 69 74 68 20 61 20 63 75 73 74 6f 6d 20  m with a custom 
71c0: 6f 70 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d  operating system
71d0: 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54  ..}..COMPILE_OPT
71e0: 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 53 45 43 55  ION {SQLITE_SECU
71f0: 52 45 5f 44 45 4c 45 54 45 7d 20 7b 0a 20 20 54  RE_DELETE} {.  T
7200: 68 69 73 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  his compile-time
7210: 20 6f 70 74 69 6f 6e 20 63 68 61 6e 67 65 73 20   option changes 
7220: 74 68 65 20 64 65 66 61 75 6c 74 20 73 65 74 74  the default sett
7230: 69 6e 67 20 6f 66 20 74 68 65 0a 20 20 5b 73 65  ing of the.  [se
7240: 63 75 72 65 5f 64 65 6c 65 74 65 20 70 72 61 67  cure_delete prag
7250: 6d 61 5d 2e 20 20 57 68 65 6e 20 74 68 69 73 20  ma].  When this 
7260: 6f 70 74 69 6f 6e 20 69 73 20 6e 6f 74 20 75 73  option is not us
7270: 65 64 2c 20 73 65 63 75 72 65 5f 64 65 6c 65 74  ed, secure_delet
7280: 65 20 64 65 66 61 75 6c 74 73 0a 20 20 74 6f 20  e defaults.  to 
7290: 6f 66 66 2e 20 20 57 68 65 6e 20 74 68 69 73 20  off.  When this 
72a0: 6f 70 74 69 6f 6e 20 69 73 20 70 72 65 73 65 6e  option is presen
72b0: 74 2c 20 73 65 63 75 72 65 5f 64 65 6c 65 74 65  t, secure_delete
72c0: 20 64 65 66 61 75 6c 74 73 20 74 6f 20 6f 6e 2e   defaults to on.
72d0: 0a 0a 20 20 54 68 65 20 73 65 63 75 72 65 5f 64  ..  The secure_d
72e0: 65 6c 65 74 65 20 73 65 74 74 69 6e 67 20 63 61  elete setting ca
72f0: 75 73 65 73 20 64 65 6c 65 74 65 64 20 63 6f 6e  uses deleted con
7300: 74 65 6e 74 20 74 6f 20 62 65 20 6f 76 65 72 77  tent to be overw
7310: 72 69 74 74 65 6e 20 77 69 74 68 0a 20 20 7a 65  ritten with.  ze
7320: 72 6f 73 2e 20 20 54 68 65 72 65 20 69 73 20 61  ros.  There is a
7330: 20 73 6d 61 6c 6c 20 70 65 72 66 6f 72 6d 61 6e   small performan
7340: 63 65 20 70 65 6e 61 6c 74 79 20 73 69 6e 63 65  ce penalty since
7350: 20 61 64 64 69 74 69 6f 6e 61 6c 20 49 2f 4f 0a   additional I/O.
7360: 20 20 6d 75 73 74 20 6f 63 63 75 72 2e 20 20 4f    must occur.  O
7370: 6e 20 74 68 65 20 6f 74 68 65 72 20 68 61 6e 64  n the other hand
7380: 2c 20 73 65 63 75 72 65 5f 64 65 6c 65 74 65 20  , secure_delete 
7390: 63 61 6e 20 70 72 65 76 65 6e 74 20 66 72 61 67  can prevent frag
73a0: 6d 65 6e 74 73 20 6f 66 20 0a 20 20 73 65 6e 73  ments of .  sens
73b0: 69 74 69 76 65 20 69 6e 66 6f 72 6d 61 74 69 6f  itive informatio
73c0: 6e 20 66 72 6f 6d 20 6c 69 6e 67 65 72 69 6e 67  n from lingering
73d0: 20 69 6e 20 75 6e 75 73 65 64 20 70 61 72 74 73   in unused parts
73e0: 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
73f0: 20 66 69 6c 65 20 0a 20 20 61 66 74 65 72 20 69   file .  after i
7400: 74 20 68 61 73 20 62 65 65 6e 20 64 65 6c 65 74  t has been delet
7410: 65 64 2e 20 20 53 65 65 20 74 68 65 20 64 6f 63  ed.  See the doc
7420: 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 6e 20 74 68  umentation on th
7430: 65 0a 20 20 5b 73 65 63 75 72 65 5f 64 65 6c 65  e.  [secure_dele
7440: 74 65 20 70 72 61 67 6d 61 5d 20 66 6f 72 20 61  te pragma] for a
7450: 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
7460: 61 74 69 6f 6e 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c  ation..}..COMPIL
7470: 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45  E_OPTION {SQLITE
7480: 5f 54 48 52 45 41 44 53 41 46 45 3d 3c 69 3e 26  _THREADSAFE=<i>&
7490: 6c 74 3b 30 20 6f 72 20 31 20 6f 72 20 32 26 67  lt;0 or 1 or 2&g
74a0: 74 3b 3c 2f 69 3e 7d 20 7b 0a 20 20 54 68 69 73  t;</i>} {.  This
74b0: 20 6f 70 74 69 6f 6e 20 63 6f 6e 74 72 6f 6c 73   option controls
74c0: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
74d0: 63 6f 64 65 20 69 73 20 69 6e 63 6c 75 64 65 64  code is included
74e0: 20 69 6e 20 53 51 4c 69 74 65 20 74 6f 0a 20 20   in SQLite to.  
74f0: 65 6e 61 62 6c 65 20 69 74 20 74 6f 20 6f 70 65  enable it to ope
7500: 72 61 74 65 20 73 61 66 65 6c 79 20 69 6e 20 61  rate safely in a
7510: 20 6d 75 6c 74 69 74 68 72 65 61 64 65 64 20 65   multithreaded e
7520: 6e 76 69 72 6f 6e 6d 65 6e 74 2e 20 20 54 68 65  nvironment.  The
7530: 0a 20 20 64 65 66 61 75 6c 74 20 69 73 20 53 51  .  default is SQ
7540: 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45 3d  LITE_THREADSAFE=
7550: 31 20 77 68 69 63 68 20 69 73 20 73 61 66 65 20  1 which is safe 
7560: 66 6f 72 20 75 73 65 20 69 6e 20 61 20 6d 75 6c  for use in a mul
7570: 74 69 74 68 72 65 61 64 65 64 0a 20 20 65 6e 76  tithreaded.  env
7580: 69 72 6f 6e 6d 65 6e 74 2e 20 20 57 68 65 6e 20  ironment.  When 
7590: 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 53 51  compiled with SQ
75a0: 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45 3d  LITE_THREADSAFE=
75b0: 30 20 61 6c 6c 20 6d 75 74 65 78 69 6e 67 20 63  0 all mutexing c
75c0: 6f 64 65 0a 20 20 69 73 20 6f 6d 69 74 74 65 64  ode.  is omitted
75d0: 20 61 6e 64 20 69 74 20 69 73 20 75 6e 73 61 66   and it is unsaf
75e0: 65 20 74 6f 20 75 73 65 20 53 51 4c 69 74 65 20  e to use SQLite 
75f0: 69 6e 20 61 20 6d 75 6c 74 69 74 68 72 65 61 64  in a multithread
7600: 65 64 20 70 72 6f 67 72 61 6d 2e 0a 20 20 57 68  ed program..  Wh
7610: 65 6e 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68  en compiled with
7620: 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41   SQLITE_THREADSA
7630: 46 45 3d 32 2c 20 53 51 4c 69 74 65 20 63 61 6e  FE=2, SQLite can
7640: 20 62 65 20 75 73 65 64 20 69 6e 20 61 20 6d 75   be used in a mu
7650: 6c 74 69 74 68 72 65 61 64 65 64 0a 20 20 70 72  ltithreaded.  pr
7660: 6f 67 72 61 6d 20 73 6f 20 6c 6f 6e 67 20 61 73  ogram so long as
7670: 20 6e 6f 20 74 77 6f 20 74 68 72 65 61 64 73 20   no two threads 
7680: 61 74 74 65 6d 70 74 20 74 6f 20 75 73 65 20 74  attempt to use t
7690: 68 65 20 73 61 6d 65 0a 20 20 5b 64 61 74 61 62  he same.  [datab
76a0: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d 20  ase connection] 
76b0: 28 6f 72 20 61 6e 79 20 5b 70 72 65 70 61 72 65  (or any [prepare
76c0: 64 20 73 74 61 74 65 6d 65 6e 74 73 5d 20 64 65  d statements] de
76d0: 72 69 76 65 64 20 66 72 6f 6d 0a 20 20 74 68 61  rived from.  tha
76e0: 74 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  t database conne
76f0: 63 74 69 6f 6e 29 20 61 74 20 74 68 65 20 73 61  ction) at the sa
7700: 6d 65 20 74 69 6d 65 2e 0a 0a 20 20 54 6f 20 70  me time...  To p
7710: 75 74 20 69 74 20 61 6e 6f 74 68 65 72 20 77 61  ut it another wa
7720: 79 2c 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44  y, SQLITE_THREAD
7730: 53 41 46 45 3d 31 20 73 65 74 73 20 74 68 65 20  SAFE=1 sets the 
7740: 64 65 66 61 75 6c 74 0a 20 20 5b 74 68 72 65 61  default.  [threa
7750: 64 69 6e 67 20 6d 6f 64 65 5d 20 74 6f 20 53 65  ding mode] to Se
7760: 72 69 61 6c 69 7a 65 64 2e 20 20 53 51 4c 49 54  rialized.  SQLIT
7770: 45 5f 54 48 52 45 41 44 53 41 46 45 3d 32 20 73  E_THREADSAFE=2 s
7780: 65 74 73 20 74 68 65 20 64 65 66 61 75 6c 74 0a  ets the default.
7790: 20 20 5b 74 68 72 65 61 64 69 6e 67 20 6d 6f 64    [threading mod
77a0: 65 5d 20 74 6f 20 4d 75 6c 74 69 2d 74 68 72 65  e] to Multi-thre
77b0: 61 64 65 64 2e 20 20 41 6e 64 20 53 51 4c 49 54  aded.  And SQLIT
77c0: 45 5f 54 48 52 45 41 44 53 41 46 45 3d 30 20 73  E_THREADSAFE=0 s
77d0: 65 74 73 20 74 68 65 0a 20 20 5b 74 68 72 65 61  ets the.  [threa
77e0: 64 69 6e 67 20 6d 6f 64 65 5d 20 74 6f 20 53 69  ding mode] to Si
77f0: 6e 67 6c 65 2d 74 68 72 65 61 64 65 64 2e 0a 0a  ngle-threaded...
7800: 20 20 54 68 65 20 76 61 6c 75 65 20 6f 66 20 53    The value of S
7810: 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45  QLITE_THREADSAFE
7820: 20 63 61 6e 20 62 65 20 64 65 74 65 72 6d 69 6e   can be determin
7830: 65 64 20 61 74 20 72 75 6e 2d 74 69 6d 65 0a 20  ed at run-time. 
7840: 20 75 73 69 6e 67 20 74 68 65 20 5b 73 71 6c 69   using the [sqli
7850: 74 65 33 5f 74 68 72 65 61 64 73 61 66 65 28 29  te3_threadsafe()
7860: 5d 20 69 6e 74 65 72 66 61 63 65 2e 0a 0a 20 20  ] interface...  
7870: 57 68 65 6e 20 53 51 4c 69 74 65 20 68 61 73 20  When SQLite has 
7880: 62 65 65 6e 20 63 6f 6d 70 69 6c 65 64 20 77 69  been compiled wi
7890: 74 68 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44  th SQLITE_THREAD
78a0: 53 41 46 45 3d 31 20 6f 72 0a 20 20 53 51 4c 49  SAFE=1 or.  SQLI
78b0: 54 45 5f 54 48 52 45 41 44 53 41 46 45 3d 32 20  TE_THREADSAFE=2 
78c0: 74 68 65 6e 20 74 68 65 20 5b 74 68 72 65 61 64  then the [thread
78d0: 69 6e 67 20 6d 6f 64 65 5d 0a 20 20 63 61 6e 20  ing mode].  can 
78e0: 62 65 20 61 6c 74 65 72 65 64 20 61 74 20 72 75  be altered at ru
78f0: 6e 2d 74 69 6d 65 20 75 73 69 6e 67 20 74 68 65  n-time using the
7900: 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67   [sqlite3_config
7910: 28 29 5d 20 69 6e 74 65 72 66 61 63 65 20 74 6f  ()] interface to
7920: 67 65 74 68 65 72 0a 20 20 77 69 74 68 20 6f 6e  gether.  with on
7930: 65 20 6f 66 20 74 68 65 73 65 20 76 65 72 62 73  e of these verbs
7940: 3a 0a 0a 20 20 3c 75 6c 3e 0a 20 20 3c 6c 69 3e  :..  <ul>.  <li>
7950: 5b 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 53  [SQLITE_CONFIG_S
7960: 49 4e 47 4c 45 54 48 52 45 41 44 5d 0a 20 20 3c  INGLETHREAD].  <
7970: 6c 69 3e 5b 53 51 4c 49 54 45 5f 43 4f 4e 46 49  li>[SQLITE_CONFI
7980: 47 5f 4d 55 4c 54 49 54 48 52 45 41 44 5d 0a 20  G_MULTITHREAD]. 
7990: 20 3c 6c 69 3e 5b 53 51 4c 49 54 45 5f 43 4f 4e   <li>[SQLITE_CON
79a0: 46 49 47 5f 53 45 52 49 41 4c 49 5a 45 44 5d 0a  FIG_SERIALIZED].
79b0: 20 20 3c 2f 75 6c 3e 0a 0a 20 20 54 68 65 20 5b    </ul>..  The [
79c0: 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 4e 4f 4d 55  SQLITE_OPEN_NOMU
79d0: 54 45 58 5d 20 61 6e 64 0a 20 20 5b 53 51 4c 49  TEX] and.  [SQLI
79e0: 54 45 5f 4f 50 45 4e 5f 46 55 4c 4c 4d 55 54 45  TE_OPEN_FULLMUTE
79f0: 58 5d 20 66 6c 61 67 73 20 74 6f 20 5b 73 71 6c  X] flags to [sql
7a00: 69 74 65 33 5f 6f 70 65 6e 5f 76 32 28 29 5d 20  ite3_open_v2()] 
7a10: 63 61 6e 20 61 6c 73 6f 20 62 65 20 75 73 65 64  can also be used
7a20: 0a 20 20 74 6f 20 61 64 6a 75 73 74 20 74 68 65  .  to adjust the
7a30: 20 5b 74 68 72 65 61 64 69 6e 67 20 6d 6f 64 65   [threading mode
7a40: 5d 20 6f 66 20 69 6e 64 69 76 69 64 75 61 6c 20  ] of individual 
7a50: 5b 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63  [database connec
7a60: 74 69 6f 6e 73 5d 0a 20 20 61 74 20 72 75 6e 2d  tions].  at run-
7a70: 74 69 6d 65 2e 0a 0a 20 20 4e 6f 74 65 20 74 68  time...  Note th
7a80: 61 74 20 77 68 65 6e 20 53 51 4c 69 74 65 20 69  at when SQLite i
7a90: 73 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20  s compiled with 
7aa0: 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46  SQLITE_THREADSAF
7ab0: 45 3d 30 2c 20 74 68 65 20 63 6f 64 65 0a 20 20  E=0, the code.  
7ac0: 74 6f 20 6d 61 6b 65 20 53 51 4c 69 74 65 20 74  to make SQLite t
7ad0: 68 72 65 61 64 73 61 66 65 20 69 73 20 6f 6d 69  hreadsafe is omi
7ae0: 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20 62 75  tted from the bu
7af0: 69 6c 64 2e 20 20 57 68 65 6e 20 74 68 69 73 20  ild.  When this 
7b00: 6f 63 63 75 72 73 2c 0a 20 20 69 74 20 69 73 20  occurs,.  it is 
7b10: 69 6d 70 6f 73 73 69 62 6c 65 20 74 6f 20 63 68  impossible to ch
7b20: 61 6e 67 65 20 74 68 65 20 5b 74 68 72 65 61 64  ange the [thread
7b30: 69 6e 67 20 6d 6f 64 65 5d 20 61 74 20 73 74 61  ing mode] at sta
7b40: 72 74 2d 74 69 6d 65 20 6f 72 20 72 75 6e 2d 74  rt-time or run-t
7b50: 69 6d 65 2e 0a 0a 20 20 53 65 65 20 74 68 65 20  ime...  See the 
7b60: 5b 74 68 72 65 61 64 69 6e 67 20 6d 6f 64 65 5d  [threading mode]
7b70: 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 66   documentation f
7b80: 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
7b90: 66 6f 72 6d 61 74 69 6f 6e 0a 20 20 6f 6e 20 61  formation.  on a
7ba0: 73 70 65 63 74 73 20 6f 66 20 75 73 69 6e 67 20  spects of using 
7bb0: 53 51 4c 69 74 65 20 69 6e 20 61 20 6d 75 6c 74  SQLite in a mult
7bc0: 69 74 68 72 65 61 64 65 64 20 65 6e 76 69 72 6f  ithreaded enviro
7bd0: 6e 6d 65 6e 74 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c  nment..}..COMPIL
7be0: 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45  E_OPTION {SQLITE
7bf0: 5f 54 45 4d 50 5f 53 54 4f 52 45 3d 3c 69 3e 26  _TEMP_STORE=<i>&
7c00: 6c 74 3b 30 20 74 68 72 6f 75 67 68 20 33 26 67  lt;0 through 3&g
7c10: 74 3b 3c 2f 69 3e 7d 20 7b 0a 20 20 54 68 69 73  t;</i>} {.  This
7c20: 20 6f 70 74 69 6f 6e 20 63 6f 6e 74 72 6f 6c 73   option controls
7c30: 20 77 68 65 74 68 65 72 20 74 65 6d 70 6f 72 61   whether tempora
7c40: 72 79 20 66 69 6c 65 73 20 61 72 65 20 73 74 6f  ry files are sto
7c50: 72 65 64 20 6f 6e 20 64 69 73 6b 20 6f 72 0a 20  red on disk or. 
7c60: 20 69 6e 20 6d 65 6d 6f 72 79 2e 20 20 54 68 65   in memory.  The
7c70: 20 6d 65 61 6e 69 6e 67 73 20 66 6f 72 20 76 61   meanings for va
7c80: 72 69 6f 75 73 20 73 65 74 74 69 6e 67 73 20 6f  rious settings o
7c90: 66 20 74 68 69 73 20 63 6f 6d 70 69 6c 65 2d 74  f this compile-t
7ca0: 69 6d 65 0a 20 20 6f 70 74 69 6f 6e 20 61 72 65  ime.  option are
7cb0: 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 20 20   as follows:..  
7cc0: 3c 74 61 62 6c 65 20 63 65 6c 6c 70 61 64 64 69  <table cellpaddi
7cd0: 6e 67 3d 22 32 22 20 62 6f 72 64 65 72 3d 22 31  ng="2" border="1
7ce0: 22 3e 0a 20 20 3c 74 72 3e 3c 74 68 3e 53 51 4c  ">.  <tr><th>SQL
7cf0: 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 3c 2f  ITE_TEMP_STORE</
7d00: 74 68 3e 3c 74 68 3e 4d 65 61 6e 69 6e 67 3c 2f  th><th>Meaning</
7d10: 74 68 3e 3c 2f 74 72 3e 0a 20 20 3c 74 72 3e 3c  th></tr>.  <tr><
7d20: 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  td align="center
7d30: 22 3e 30 3c 2f 74 64 3e 3c 74 64 3e 41 6c 77 61  ">0</td><td>Alwa
7d40: 79 73 20 75 73 65 20 74 65 6d 70 6f 72 61 72 79  ys use temporary
7d50: 20 66 69 6c 65 73 3c 2f 74 64 3e 3c 2f 74 72 3e   files</td></tr>
7d60: 0a 20 20 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e  .  <tr><td align
7d70: 3d 22 63 65 6e 74 65 72 22 3e 31 3c 2f 74 64 3e  ="center">1</td>
7d80: 3c 74 64 3e 55 73 65 20 66 69 6c 65 73 20 62 79  <td>Use files by
7d90: 20 64 65 66 61 75 6c 74 20 62 75 74 20 61 6c 6c   default but all
7da0: 6f 77 20 74 68 65 0a 20 20 5b 50 52 41 47 4d 41  ow the.  [PRAGMA
7db0: 20 74 65 6d 70 5f 73 74 6f 72 65 5d 20 63 6f 6d   temp_store] com
7dc0: 6d 61 6e 64 20 74 6f 20 6f 76 65 72 72 69 64 65  mand to override
7dd0: 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 20 20 3c 74 72  </td></tr>.  <tr
7de0: 3e 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74  ><td align="cent
7df0: 65 72 22 3e 32 3c 2f 74 64 3e 3c 74 64 3e 55 73  er">2</td><td>Us
7e00: 65 20 6d 65 6d 6f 72 79 20 62 79 20 64 65 66 61  e memory by defa
7e10: 75 6c 74 20 62 75 74 20 61 6c 6c 6f 77 20 74 68  ult but allow th
7e20: 65 0a 20 20 5b 50 52 41 47 4d 41 20 74 65 6d 70  e.  [PRAGMA temp
7e30: 5f 73 74 6f 72 65 5d 20 63 6f 6d 6d 61 6e 64 20  _store] command 
7e40: 74 6f 20 6f 76 65 72 72 69 64 65 3c 2f 74 64 3e  to override</td>
7e50: 3c 2f 74 72 3e 0a 20 20 3c 74 72 3e 3c 74 64 20  </tr>.  <tr><td 
7e60: 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 33  align="center">3
7e70: 3c 2f 74 64 3e 3c 74 64 3e 41 6c 77 61 79 73 20  </td><td>Always 
7e80: 75 73 65 20 6d 65 6d 6f 72 79 3c 2f 74 64 3e 3c  use memory</td><
7e90: 2f 74 72 3e 0a 20 20 3c 2f 74 61 62 6c 65 3e 0a  /tr>.  </table>.
7ea0: 0a 20 20 54 68 65 20 64 65 66 61 75 6c 74 20 73  .  The default s
7eb0: 65 74 74 69 6e 67 20 69 73 20 31 2e 20 20 0a 20  etting is 1.  . 
7ec0: 20 41 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   Additional info
7ed0: 72 6d 61 74 69 6f 6e 20 63 61 6e 20 62 65 20 66  rmation can be f
7ee0: 6f 75 6e 64 20 69 6e 20 5b 74 65 6d 70 73 74 6f  ound in [tempsto
7ef0: 72 65 20 7c 20 74 65 6d 70 66 69 6c 65 73 2e 68  re | tempfiles.h
7f00: 74 6d 6c 5d 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45  tml]..}..COMPILE
7f10: 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f  _OPTION {SQLITE_
7f20: 54 52 41 43 45 5f 53 49 5a 45 5f 4c 49 4d 49 54  TRACE_SIZE_LIMIT
7f30: 3d 3c 69 3e 4e 3c 2f 69 3e 7d 20 7b 0a 20 20 49  =<i>N</i>} {.  I
7f40: 66 20 74 68 69 73 20 6d 61 63 72 6f 20 69 73 20  f this macro is 
7f50: 64 65 66 69 6e 65 64 20 74 6f 20 61 20 70 6f 73  defined to a pos
7f60: 69 74 69 76 65 20 69 6e 74 65 67 65 72 20 3c 69  itive integer <i
7f70: 3e 4e 3c 2f 69 3e 2c 20 74 68 65 6e 20 74 68 65  >N</i>, then the
7f80: 20 6c 65 6e 67 74 68 20 6f 66 0a 20 20 73 74 72   length of.  str
7f90: 69 6e 67 73 20 61 6e 64 20 42 4c 4f 42 20 74 68  ings and BLOB th
7fa0: 61 74 20 61 72 65 20 65 78 70 61 6e 64 65 64 20  at are expanded 
7fb0: 69 6e 74 6f 20 70 61 72 61 6d 65 74 65 72 73 20  into parameters 
7fc0: 69 6e 20 74 68 65 20 6f 75 74 70 75 74 20 6f 66  in the output of
7fd0: 0a 20 20 5b 73 71 6c 69 74 65 33 5f 74 72 61 63  .  [sqlite3_trac
7fe0: 65 28 29 5d 20 69 73 20 6c 69 6d 69 74 65 64 20  e()] is limited 
7ff0: 74 6f 20 3c 69 3e 4e 3c 2f 69 3e 20 62 79 74 65  to <i>N</i> byte
8000: 73 2e 20 20 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f  s.  .}..COMPILE_
8010: 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 55  OPTION {SQLITE_U
8020: 53 45 5f 55 52 49 7d 20 7b 0a 20 20 54 68 69 73  SE_URI} {.  This
8030: 20 6f 70 74 69 6f 6e 20 63 61 75 73 65 73 20 74   option causes t
8040: 68 65 20 5b 55 52 49 20 66 69 6c 65 6e 61 6d 65  he [URI filename
8050: 5d 20 70 72 6f 63 65 73 73 20 6c 6f 67 69 63 20  ] process logic 
8060: 74 6f 20 62 65 20 65 6e 61 62 6c 65 64 20 62 79  to be enabled by
8070: 20 0a 20 20 64 65 66 61 75 6c 74 2e 20 20 0a 7d   .  default.  .}
8080: 0a 0a 3c 2f 74 63 6c 3e 0a 0a 3c 61 20 6e 61 6d  ..</tcl>..<a nam
8090: 65 3d 22 65 6e 61 62 6c 65 66 65 61 74 75 72 65  e="enablefeature
80a0: 73 22 3e 3c 2f 61 3e 0a 3c 68 31 3e 20 4f 70 74  s"></a>.<h1> Opt
80b0: 69 6f 6e 73 20 54 6f 20 45 6e 61 62 6c 65 20 46  ions To Enable F
80c0: 65 61 74 75 72 65 73 20 4e 6f 72 6d 61 6c 6c 79  eatures Normally
80d0: 20 54 75 72 6e 65 64 20 4f 66 66 3c 2f 68 31 3e   Turned Off</h1>
80e0: 0a 0a 3c 74 63 6c 3e 0a 43 4f 4d 50 49 4c 45 5f  ..<tcl>.COMPILE_
80f0: 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 41  OPTION {SQLITE_A
8100: 4c 4c 4f 57 5f 55 52 49 5f 41 55 54 48 4f 52 49  LLOW_URI_AUTHORI
8110: 54 59 7d 20 7b 0a 20 20 5b 55 52 49 20 66 69 6c  TY} {.  [URI fil
8120: 65 6e 61 6d 65 73 5d 20 6e 6f 72 6d 61 6c 6c 79  enames] normally
8130: 20 74 68 72 6f 77 73 20 61 6e 20 65 72 72 6f 72   throws an error
8140: 20 69 66 20 74 68 65 20 61 75 74 68 6f 72 69 74   if the authorit
8150: 79 20 73 65 63 74 69 6f 6e 20 69 73 0a 20 20 6e  y section is.  n
8160: 6f 74 20 65 69 74 68 65 72 20 65 6d 70 74 79 20  ot either empty 
8170: 6f 72 20 22 6c 6f 63 61 6c 68 6f 73 74 22 2e 20  or "localhost". 
8180: 20 48 6f 77 65 76 65 72 2c 20 69 66 20 53 51 4c   However, if SQL
8190: 69 74 65 20 69 73 20 63 6f 6d 70 69 6c 65 64 20  ite is compiled 
81a0: 77 69 74 68 0a 20 20 74 68 65 20 53 51 4c 49 54  with.  the SQLIT
81b0: 45 5f 41 4c 4c 4f 57 5f 55 52 49 5f 41 55 54 48  E_ALLOW_URI_AUTH
81c0: 4f 52 49 54 59 20 63 6f 6d 70 69 6c 65 2d 74 69  ORITY compile-ti
81d0: 6d 65 20 6f 70 74 69 6f 6e 2c 20 74 68 65 6e 20  me option, then 
81e0: 74 68 65 20 55 52 49 20 69 73 0a 20 20 63 6f 6e  the URI is.  con
81f0: 76 65 72 74 65 64 20 69 6e 74 6f 20 61 20 55 6e  verted into a Un
8200: 69 66 6f 72 6d 20 4e 61 6d 69 6e 67 20 43 6f 6e  iform Naming Con
8210: 76 65 6e 74 69 6f 6e 20 28 55 4e 43 29 20 66 69  vention (UNC) fi
8220: 6c 65 6e 61 6d 65 20 61 6e 64 20 70 61 73 73 65  lename and passe
8230: 64 0a 20 20 64 6f 77 6e 20 74 6f 20 74 68 65 20  d.  down to the 
8240: 75 6e 64 65 72 6c 79 69 6e 67 20 6f 70 65 72 61  underlying opera
8250: 74 69 6e 67 20 73 79 73 74 65 6d 20 74 68 61 74  ting system that
8260: 20 77 61 79 2e 20 20 0a 20 20 3c 70 3e 0a 20 20   way.  .  <p>.  
8270: 53 6f 6d 65 20 66 75 74 75 72 65 20 76 65 72 73  Some future vers
8280: 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 6d  ions of SQLite m
8290: 61 79 20 63 68 61 6e 67 65 20 74 6f 20 65 6e 61  ay change to ena
82a0: 62 6c 65 20 74 68 69 73 20 66 65 61 74 75 72 65  ble this feature
82b0: 0a 20 20 62 79 20 64 65 66 61 75 6c 74 2e 0a 7d  .  by default..}
82c0: 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20  .COMPILE_OPTION 
82d0: 7b 53 51 4c 49 54 45 5f 41 4c 4c 4f 57 5f 43 4f  {SQLITE_ALLOW_CO
82e0: 56 45 52 49 4e 47 5f 49 4e 44 45 58 5f 53 43 41  VERING_INDEX_SCA
82f0: 4e 3d 3c 69 3e 26 6c 74 3b 30 20 6f 72 20 31 26  N=<i>&lt;0 or 1&
8300: 67 74 3b 3c 2f 69 3e 7d 20 7b 0a 20 20 54 68 69  gt;</i>} {.  Thi
8310: 73 20 43 2d 70 72 65 70 72 6f 63 65 73 73 20 6d  s C-preprocess m
8320: 61 63 72 6f 20 64 65 74 65 72 6d 69 6e 65 73 20  acro determines 
8330: 74 68 65 20 64 65 66 61 75 6c 74 20 73 65 74 74  the default sett
8340: 69 6e 67 20 6f 66 20 74 68 65 0a 20 20 5b 53 51  ing of the.  [SQ
8350: 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 43 4f 56 45  LITE_CONFIG_COVE
8360: 52 49 4e 47 5f 49 4e 44 45 58 5f 53 43 41 4e 5d  RING_INDEX_SCAN]
8370: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 73   configuration s
8380: 65 74 74 69 6e 67 2e 20 20 49 74 20 64 65 66 61  etting.  It defa
8390: 75 6c 74 73 0a 20 20 74 6f 20 31 20 28 6f 6e 29  ults.  to 1 (on)
83a0: 20 77 68 69 63 68 20 6d 65 61 6e 73 20 74 68 61   which means tha
83b0: 74 20 63 6f 76 65 72 69 6e 67 20 69 6e 64 69 63  t covering indic
83c0: 65 73 20 61 72 65 20 75 73 65 64 20 66 6f 72 20  es are used for 
83d0: 66 75 6c 6c 20 74 61 62 6c 65 0a 20 20 73 63 61  full table.  sca
83e0: 6e 73 20 77 68 65 72 65 20 70 6f 73 73 69 62 6c  ns where possibl
83f0: 65 2c 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 72  e, in order to r
8400: 65 64 75 63 65 20 49 2f 4f 20 61 6e 64 20 69 6d  educe I/O and im
8410: 70 72 6f 76 65 20 70 65 72 66 6f 72 6d 61 6e 63  prove performanc
8420: 65 2e 0a 20 20 48 6f 77 65 76 65 72 2c 20 74 68  e..  However, th
8430: 65 20 75 73 65 20 6f 66 20 61 20 63 6f 76 65 72  e use of a cover
8440: 69 6e 67 20 69 6e 64 65 78 20 66 6f 72 20 61 20  ing index for a 
8450: 66 75 6c 6c 20 73 63 61 6e 20 77 69 6c 6c 20 63  full scan will c
8460: 61 75 73 65 20 72 65 73 75 6c 74 73 0a 20 20 74  ause results.  t
8470: 6f 20 61 70 70 65 61 72 20 69 6e 20 61 20 64 69  o appear in a di
8480: 66 66 65 72 65 6e 74 20 6f 72 64 65 72 20 66 72  fferent order fr
8490: 6f 6d 20 6c 65 67 61 63 79 2c 20 77 68 69 63 68  om legacy, which
84a0: 20 63 6f 75 6c 64 20 63 61 75 73 65 20 73 6f 6d   could cause som
84b0: 65 0a 20 20 28 69 6e 63 6f 72 72 65 63 74 6c 79  e.  (incorrectly
84c0: 2d 63 6f 64 65 64 29 20 6c 65 67 61 63 79 20 61  -coded) legacy a
84d0: 70 70 6c 69 63 61 74 69 6f 6e 73 20 74 6f 20 62  pplications to b
84e0: 72 65 61 6b 2e 20 20 48 65 6e 63 65 2c 20 74 68  reak.  Hence, th
84f0: 65 20 63 6f 76 65 72 69 6e 67 0a 20 20 69 6e 64  e covering.  ind
8500: 65 78 20 73 63 61 6e 20 6f 70 74 69 6f 6e 20 63  ex scan option c
8510: 61 6e 20 62 65 20 64 69 73 61 62 6c 65 64 20 61  an be disabled a
8520: 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f  t compile-time o
8530: 6e 20 73 79 73 74 65 6d 73 20 74 68 61 74 20 77  n systems that w
8540: 68 61 74 0a 20 20 74 6f 20 6d 69 6e 69 6d 69 7a  hat.  to minimiz
8550: 65 20 74 68 65 69 72 20 72 69 73 6b 20 6f 66 20  e their risk of 
8560: 65 78 70 6f 73 69 6e 67 20 65 72 72 6f 72 73 20  exposing errors 
8570: 69 6e 20 6c 65 67 61 63 79 20 61 70 70 6c 69 63  in legacy applic
8580: 61 74 69 6f 6e 73 2e 0a 7d 0a 0a 43 4f 4d 50 49  ations..}..COMPI
8590: 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54  LE_OPTION {SQLIT
85a0: 45 5f 45 4e 41 42 4c 45 5f 38 5f 33 5f 4e 41 4d  E_ENABLE_8_3_NAM
85b0: 45 53 3d 3c 69 3e 26 6c 74 3b 31 20 6f 72 20 32  ES=<i>&lt;1 or 2
85c0: 26 67 74 3b 3c 2f 69 3e 7d 20 7b 0a 20 20 49 66  &gt;</i>} {.  If
85d0: 20 74 68 69 73 20 43 2d 70 72 65 70 72 6f 63 65   this C-preproce
85e0: 73 73 6f 72 20 6d 61 63 72 6f 20 69 73 20 64 65  ssor macro is de
85f0: 66 69 6e 65 64 2c 20 74 68 65 6e 20 65 78 74 72  fined, then extr
8600: 61 20 63 6f 64 65 20 69 73 0a 20 20 69 6e 63 6c  a code is.  incl
8610: 75 64 65 64 20 74 68 61 74 20 61 6c 6c 6f 77 73  uded that allows
8620: 20 53 51 4c 69 74 65 20 74 6f 20 66 75 6e 63 74   SQLite to funct
8630: 69 6f 6e 20 6f 6e 20 61 20 66 69 6c 65 73 79 73  ion on a filesys
8640: 74 65 6d 20 74 68 61 74 0a 20 20 6f 6e 6c 79 20  tem that.  only 
8650: 73 75 70 70 6f 72 74 20 38 2b 33 20 66 69 6c 65  support 8+3 file
8660: 6e 61 6d 65 73 2e 20 20 49 66 20 74 68 65 20 76  names.  If the v
8670: 61 6c 75 65 20 6f 66 20 74 68 69 73 20 6d 61 63  alue of this mac
8680: 72 6f 20 69 73 20 31 2c 0a 20 20 74 68 65 6e 20  ro is 1,.  then 
8690: 74 68 65 20 64 65 66 61 75 6c 74 20 62 65 68 61  the default beha
86a0: 76 69 6f 72 20 69 73 20 74 6f 20 63 6f 6e 74 69  vior is to conti
86b0: 6e 75 65 20 74 6f 20 75 73 65 20 6c 6f 6e 67 20  nue to use long 
86c0: 66 69 6c 65 6e 61 6d 65 73 20 61 6e 64 0a 20 20  filenames and.  
86d0: 74 6f 20 6f 6e 6c 79 20 75 73 65 20 38 2b 33 20  to only use 8+3 
86e0: 66 69 6c 65 6e 61 6d 65 73 20 69 66 20 74 68 65  filenames if the
86f0: 20 0a 20 20 64 61 74 61 62 61 73 65 20 63 6f 6e   .  database con
8700: 6e 65 63 74 69 6f 6e 20 69 73 20 6f 70 65 6e 65  nection is opene
8710: 64 20 75 73 69 6e 67 20 5b 55 52 49 20 66 69 6c  d using [URI fil
8720: 65 6e 61 6d 65 73 5d 20 77 69 74 68 0a 20 20 74  enames] with.  t
8730: 68 65 20 22 3c 74 74 3e 38 5f 33 5f 6e 61 6d 65  he "<tt>8_3_name
8740: 73 3d 31 3c 2f 74 74 3e 22 20 71 75 65 72 79 20  s=1</tt>" query 
8750: 70 61 72 61 6d 65 74 65 72 2e 20 20 49 66 20 74  parameter.  If t
8760: 68 65 20 76 61 6c 75 65 20 6f 66 0a 20 20 74 68  he value of.  th
8770: 69 73 20 6d 61 63 72 6f 20 69 73 20 32 2c 20 74  is macro is 2, t
8780: 68 65 6e 20 74 68 65 20 75 73 65 20 6f 66 20 38  hen the use of 8
8790: 2b 33 20 66 69 6c 65 6e 61 6d 65 73 20 62 65 63  +3 filenames bec
87a0: 6f 6d 65 73 20 74 68 65 20 64 65 66 61 75 6c 74  omes the default
87b0: 0a 20 20 62 75 74 20 6d 61 79 20 62 65 20 64 69  .  but may be di
87c0: 73 61 62 6c 65 64 20 6f 6e 20 75 73 69 6e 67 20  sabled on using 
87d0: 74 68 65 20 3c 74 74 3e 38 5f 33 5f 6e 61 6d 65  the <tt>8_3_name
87e0: 73 3d 30 3c 2f 74 74 3e 20 71 75 65 72 79 20 70  s=0</tt> query p
87f0: 61 72 61 6d 65 74 65 72 2e 0a 7d 0a 0a 43 4f 4d  arameter..}..COM
8800: 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c  PILE_OPTION {SQL
8810: 49 54 45 5f 45 4e 41 42 4c 45 5f 41 50 49 5f 41  ITE_ENABLE_API_A
8820: 52 4d 4f 52 7d 20 7b 0a 20 20 57 68 65 6e 20 64  RMOR} {.  When d
8830: 65 66 69 6e 65 64 2c 20 74 68 69 73 20 43 2d 70  efined, this C-p
8840: 72 65 70 72 6f 63 65 73 73 6f 72 20 6d 61 63 72  reprocessor macr
8850: 6f 20 61 63 74 69 76 61 74 65 73 20 65 78 74 72  o activates extr
8860: 61 20 63 6f 64 65 20 74 68 61 74 0a 20 20 61 74  a code that.  at
8870: 74 65 6d 70 74 73 20 74 6f 20 64 65 74 65 63 74  tempts to detect
8880: 20 6d 69 73 75 73 65 20 6f 66 20 74 68 65 20 53   misuse of the S
8890: 51 4c 69 74 65 20 41 50 49 2c 20 73 75 63 68 20  QLite API, such 
88a0: 61 73 20 70 61 73 73 69 6e 67 20 69 6e 20 4e 55  as passing in NU
88b0: 4c 4c 0a 20 20 70 6f 69 6e 74 65 72 73 20 74 6f  LL.  pointers to
88c0: 20 72 65 71 75 69 72 65 64 20 70 61 72 61 6d 65   required parame
88d0: 74 65 72 73 20 6f 72 20 75 73 69 6e 67 20 6f 62  ters or using ob
88e0: 6a 65 63 74 73 20 61 66 74 65 72 20 74 68 65 79  jects after they
88f0: 20 68 61 76 65 20 62 65 65 6e 0a 20 20 64 65 73   have been.  des
8900: 74 72 6f 79 65 64 2e 0a 7d 0a 0a 43 4f 4d 50 49  troyed..}..COMPI
8910: 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54  LE_OPTION {SQLIT
8920: 45 5f 45 4e 41 42 4c 45 5f 41 54 4f 4d 49 43 5f  E_ENABLE_ATOMIC_
8930: 57 52 49 54 45 7d 20 7b 0a 20 20 49 66 20 74 68  WRITE} {.  If th
8940: 69 73 20 43 2d 70 72 65 70 72 6f 63 65 73 73 6f  is C-preprocesso
8950: 72 20 6d 61 63 72 6f 20 69 73 20 64 65 66 69 6e  r macro is defin
8960: 65 64 20 61 6e 64 20 69 66 20 74 68 65 0a 20 20  ed and if the.  
8970: 78 44 65 76 69 63 65 43 68 61 72 61 63 74 65 72  xDeviceCharacter
8980: 69 73 74 69 63 73 20 6d 65 74 68 6f 64 20 6f 66  istics method of
8990: 20 5b 73 71 6c 69 74 65 33 5f 69 6f 5f 6d 65 74   [sqlite3_io_met
89a0: 68 6f 64 73 5d 20 6f 62 6a 65 63 74 20 66 6f 72  hods] object for
89b0: 0a 20 20 61 20 64 61 74 61 62 61 73 65 20 66 69  .  a database fi
89c0: 6c 65 20 72 65 70 6f 72 74 73 20 28 76 69 61 20  le reports (via 
89d0: 6f 6e 65 20 6f 66 20 74 68 65 20 5b 53 51 4c 49  one of the [SQLI
89e0: 54 45 5f 49 4f 43 41 50 5f 41 54 4f 4d 49 43 5d  TE_IOCAP_ATOMIC]
89f0: 20 62 69 74 73 29 0a 20 20 74 68 61 74 20 74 68   bits).  that th
8a00: 65 20 66 69 6c 65 73 79 73 74 65 6d 20 73 75 70  e filesystem sup
8a10: 70 6f 72 74 73 20 61 74 6f 6d 69 63 20 77 72 69  ports atomic wri
8a20: 74 65 73 20 61 6e 64 20 69 66 20 61 20 74 72 61  tes and if a tra
8a30: 6e 73 61 63 74 69 6f 6e 0a 20 20 69 6e 76 6f 6c  nsaction.  invol
8a40: 76 65 73 20 61 20 63 68 61 6e 67 65 20 74 6f 20  ves a change to 
8a50: 6f 6e 6c 79 20 61 20 73 69 6e 67 6c 65 20 70 61  only a single pa
8a60: 67 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ge of the databa
8a70: 73 65 20 66 69 6c 65 2c 0a 20 20 74 68 65 6e 20  se file,.  then 
8a80: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
8a90: 63 6f 6d 6d 69 74 73 20 77 69 74 68 20 6a 75 73  commits with jus
8aa0: 74 20 61 20 73 69 6e 67 6c 65 20 77 72 69 74 65  t a single write
8ab0: 20 72 65 71 75 65 73 74 20 6f 66 0a 20 20 61 20   request of.  a 
8ac0: 73 69 6e 67 6c 65 20 70 61 67 65 20 6f 66 20 74  single page of t
8ad0: 68 65 20 64 61 74 61 62 61 73 65 20 61 6e 64 20  he database and 
8ae0: 6e 6f 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72  no rollback jour
8af0: 6e 61 6c 20 69 73 20 63 72 65 61 74 65 64 0a 20  nal is created. 
8b00: 20 6f 72 20 77 72 69 74 74 65 6e 2e 20 20 4f 6e   or written.  On
8b10: 20 66 69 6c 65 73 79 73 74 65 6d 73 20 74 68 61   filesystems tha
8b20: 74 20 73 75 70 70 6f 72 74 20 61 74 6f 6d 69 63  t support atomic
8b30: 20 77 72 69 74 65 73 2c 20 74 68 69 73 0a 20 20   writes, this.  
8b40: 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 63 61 6e  optimization can
8b50: 20 72 65 73 75 6c 74 20 69 6e 20 73 69 67 6e 69   result in signi
8b60: 66 69 63 61 6e 74 20 73 70 65 65 64 20 69 6d 70  ficant speed imp
8b70: 72 6f 76 65 6d 65 6e 74 73 20 66 6f 72 0a 20 20  rovements for.  
8b80: 73 6d 61 6c 6c 20 75 70 64 61 74 65 73 2e 20 20  small updates.  
8b90: 48 6f 77 65 76 65 72 2c 20 66 65 77 20 66 69 6c  However, few fil
8ba0: 65 73 79 73 74 65 6d 73 20 73 75 70 70 6f 72 74  esystems support
8bb0: 20 74 68 69 73 20 63 61 70 61 62 69 6c 69 74 79   this capability
8bc0: 0a 20 20 61 6e 64 20 74 68 65 20 63 6f 64 65 20  .  and the code 
8bd0: 70 61 74 68 73 20 74 68 61 74 20 63 68 65 63 6b  paths that check
8be0: 20 66 6f 72 20 74 68 69 73 20 63 61 70 61 62 69   for this capabi
8bf0: 6c 69 74 79 20 73 6c 6f 77 20 64 6f 77 6e 20 77  lity slow down w
8c00: 72 69 74 65 0a 20 20 70 65 72 66 6f 72 6d 61 6e  rite.  performan
8c10: 63 65 20 6f 6e 20 73 79 73 74 65 6d 73 20 74 68  ce on systems th
8c20: 61 74 20 6c 61 63 6b 20 61 74 6f 6d 69 63 20 77  at lack atomic w
8c30: 72 69 74 65 20 63 61 70 61 62 69 6c 69 74 79 2c  rite capability,
8c40: 20 73 6f 20 74 68 69 73 0a 20 20 66 65 61 74 75   so this.  featu
8c50: 72 65 20 69 73 20 64 69 73 61 62 6c 65 64 20 62  re is disabled b
8c60: 79 20 64 65 66 61 75 6c 74 2e 0a 7d 0a 0a 43 4f  y default..}..CO
8c70: 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51  MPILE_OPTION {SQ
8c80: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 42 41 54 43  LITE_ENABLE_BATC
8c90: 48 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45 7d 20  H_ATOMIC_WRITE} 
8ca0: 7b 0a 20 20 54 68 69 73 20 63 6f 6d 70 69 6c 65  {.  This compile
8cb0: 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 65 6e 61  -time option ena
8cc0: 62 6c 65 73 20 53 51 4c 69 74 65 20 74 6f 20 74  bles SQLite to t
8cd0: 61 6b 65 20 61 64 76 61 6e 74 61 67 65 20 62 61  ake advantage ba
8ce0: 74 63 68 0a 20 20 61 74 6f 6d 69 63 20 77 72 69  tch.  atomic wri
8cf0: 74 65 20 63 61 70 61 62 69 6c 69 74 69 65 73 20  te capabilities 
8d00: 69 6e 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e  in the underlyin
8d10: 67 20 66 69 6c 65 73 79 73 74 65 6d 2e 20 20 41  g filesystem.  A
8d20: 73 20 6f 66 0a 20 20 53 51 4c 69 74 65 20 76 65  s of.  SQLite ve
8d30: 72 73 69 6f 6e 20 33 2e 32 31 2e 30 20 28 5b 64  rsion 3.21.0 ([d
8d40: 61 74 65 6f 66 3a 33 2e 32 31 2e 30 5d 29 20 74  ateof:3.21.0]) t
8d50: 68 69 73 20 69 73 20 6f 6e 6c 79 20 73 75 70 70  his is only supp
8d60: 6f 72 74 65 64 20 6f 6e 0a 20 20 5b 68 74 74 70  orted on.  [http
8d70: 73 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61  s://en.wikipedia
8d80: 2e 6f 72 67 2f 77 69 6b 69 2f 46 32 46 53 7c 46  .org/wiki/F2FS|F
8d90: 32 46 53 5d 2e 20 20 48 6f 77 65 76 65 72 2c 20  2FS].  However, 
8da0: 74 68 65 20 69 6e 74 65 72 66 61 63 65 0a 20 20  the interface.  
8db0: 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 67  is implemented g
8dc0: 65 6e 65 72 69 63 61 6c 6c 79 2c 20 75 73 69 6e  enerically, usin
8dd0: 67 20 5b 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f  g [sqlite3_file_
8de0: 63 6f 6e 74 72 6f 6c 28 29 5d 20 77 69 74 68 0a  control()] with.
8df0: 20 20 5b 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f    [SQLITE_FCNTL_
8e00: 42 45 47 49 4e 5f 41 54 4f 4d 49 43 5f 57 52 49  BEGIN_ATOMIC_WRI
8e10: 54 45 5d 20 61 6e 64 20 5b 53 51 4c 49 54 45 5f  TE] and [SQLITE_
8e20: 46 43 4e 54 4c 5f 43 4f 4d 4d 49 54 5f 41 54 4f  FCNTL_COMMIT_ATO
8e30: 4d 49 43 5f 57 52 49 54 45 5d 0a 20 20 73 6f 20  MIC_WRITE].  so 
8e40: 74 68 65 20 63 61 70 61 62 69 6c 69 74 79 20 63  the capability c
8e50: 61 6e 20 62 65 20 61 64 64 65 64 20 74 6f 20 6f  an be added to o
8e60: 74 68 65 72 20 66 69 6c 65 73 79 73 74 65 6d 20  ther filesystem 
8e70: 74 69 6d 65 73 20 69 6e 20 74 68 65 0a 20 20 66  times in the.  f
8e80: 75 74 75 72 65 2e 20 20 57 68 65 6e 20 74 68 69  uture.  When thi
8e90: 73 20 6f 70 74 69 6f 6e 20 69 73 20 65 6e 61 62  s option is enab
8ea0: 6c 65 64 2c 20 53 51 4c 69 74 65 20 61 75 74 6f  led, SQLite auto
8eb0: 6d 61 74 69 63 61 6c 6c 79 20 64 65 74 65 63 74  matically detect
8ec0: 73 0a 20 20 74 68 61 74 20 74 68 65 20 75 6e 64  s.  that the und
8ed0: 65 72 6c 79 69 6e 67 20 66 69 6c 65 73 79 73 74  erlying filesyst
8ee0: 65 6d 20 73 75 70 70 6f 72 74 73 20 62 61 74 63  em supports batc
8ef0: 68 20 61 74 6f 6d 69 63 20 77 72 69 74 65 73 2c  h atomic writes,
8f00: 20 61 6e 64 0a 20 20 77 68 65 6e 20 69 74 20 64   and.  when it d
8f10: 6f 65 73 20 73 6f 20 69 74 20 61 76 6f 69 64 73  oes so it avoids
8f20: 20 77 72 69 74 69 6e 67 20 74 68 65 20 5b 72 6f   writing the [ro
8f30: 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 5d 20  llback journal] 
8f40: 66 6f 72 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a  for transaction.
8f50: 20 20 63 6f 6e 74 72 6f 6c 2e 20 20 54 68 69 73    control.  This
8f60: 20 63 61 6e 20 6d 61 6b 65 20 74 72 61 6e 73 61   can make transa
8f70: 63 74 69 6f 6e 73 20 6f 76 65 72 20 74 77 69 63  ctions over twic
8f80: 65 20 61 73 20 66 61 73 74 2c 20 77 68 69 6c 65  e as fast, while
8f90: 0a 20 20 73 69 6d 75 6c 74 61 6e 65 6f 75 73 6c  .  simultaneousl
8fa0: 79 20 72 65 64 75 63 69 6e 67 20 77 65 61 72 20  y reducing wear 
8fb0: 6f 6e 20 53 53 44 20 73 74 6f 72 61 67 65 20 64  on SSD storage d
8fc0: 65 76 69 63 65 73 2e 0a 3c 70 3e 0a 20 20 46 75  evices..<p>.  Fu
8fd0: 74 75 72 65 20 76 65 72 73 69 6f 6e 73 20 6f 66  ture versions of
8fe0: 20 53 51 4c 69 74 65 20 6d 69 67 68 74 20 65 6e   SQLite might en
8ff0: 61 62 6c 65 20 74 68 65 20 62 61 74 63 68 2d 61  able the batch-a
9000: 74 6f 6d 69 63 2d 77 72 69 74 65 0a 20 20 63 61  tomic-write.  ca
9010: 70 61 62 69 6c 69 74 79 20 62 79 20 64 65 66 61  pability by defa
9020: 75 6c 74 2c 20 61 74 20 77 68 69 63 68 20 70 6f  ult, at which po
9030: 69 6e 74 20 74 68 69 73 20 63 6f 6d 70 69 6c 65  int this compile
9040: 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 0a 20 20 77  -time option.  w
9050: 69 6c 6c 20 62 65 63 6f 6d 65 20 73 75 70 65 72  ill become super
9060: 66 6c 75 6f 75 73 2e 0a 7d 0a 0a 43 4f 4d 50 49  fluous..}..COMPI
9070: 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54  LE_OPTION {SQLIT
9080: 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f  E_ENABLE_COLUMN_
9090: 4d 45 54 41 44 41 54 41 7d 20 7b 0a 20 20 57 68  METADATA} {.  Wh
90a0: 65 6e 20 74 68 69 73 20 43 2d 70 72 65 70 72 6f  en this C-prepro
90b0: 63 65 73 73 6f 72 20 6d 61 63 72 6f 20 69 73 20  cessor macro is 
90c0: 64 65 66 69 6e 65 64 2c 20 53 51 4c 69 74 65 20  defined, SQLite 
90d0: 69 6e 63 6c 75 64 65 73 20 73 6f 6d 65 0a 20 20  includes some.  
90e0: 61 64 64 69 74 69 6f 6e 61 6c 20 41 50 49 73 20  additional APIs 
90f0: 74 68 61 74 20 70 72 6f 76 69 64 65 20 63 6f 6e  that provide con
9100: 76 65 6e 69 65 6e 74 20 61 63 63 65 73 73 20 74  venient access t
9110: 6f 20 6d 65 74 61 2d 64 61 74 61 20 61 62 6f 75  o meta-data abou
9120: 74 0a 20 20 74 61 62 6c 65 73 20 61 6e 64 20 71  t.  tables and q
9130: 75 65 72 69 65 73 2e 20 20 54 68 65 20 41 50 49  ueries.  The API
9140: 73 20 74 68 61 74 20 61 72 65 20 65 6e 61 62 6c  s that are enabl
9150: 65 64 20 62 79 20 74 68 69 73 20 6f 70 74 69 6f  ed by this optio
9160: 6e 20 61 72 65 3a 0a 0a 20 20 3c 75 6c 3e 0a 20  n are:..  <ul>. 
9170: 20 3c 6c 69 3e 20 5b 73 71 6c 69 74 65 33 5f 63   <li> [sqlite3_c
9180: 6f 6c 75 6d 6e 5f 64 61 74 61 62 61 73 65 5f 6e  olumn_database_n
9190: 61 6d 65 28 29 5d 20 3c 2f 6c 69 3e 0a 20 20 3c  ame()] </li>.  <
91a0: 6c 69 3e 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c  li> [sqlite3_col
91b0: 75 6d 6e 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d  umn_database_nam
91c0: 65 31 36 28 29 5d 20 3c 2f 6c 69 3e 0a 20 20 3c  e16()] </li>.  <
91d0: 6c 69 3e 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c  li> [sqlite3_col
91e0: 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65 28 29  umn_table_name()
91f0: 5d 20 3c 2f 6c 69 3e 0a 20 20 3c 6c 69 3e 20 5b  ] </li>.  <li> [
9200: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
9210: 61 62 6c 65 5f 6e 61 6d 65 31 36 28 29 5d 20 3c  able_name16()] <
9220: 2f 6c 69 3e 0a 20 20 3c 6c 69 3e 20 5b 73 71 6c  /li>.  <li> [sql
9230: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67  ite3_column_orig
9240: 69 6e 5f 6e 61 6d 65 28 29 5d 20 3c 2f 6c 69 3e  in_name()] </li>
9250: 0a 20 20 3c 6c 69 3e 20 5b 73 71 6c 69 74 65 33  .  <li> [sqlite3
9260: 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e  _column_origin_n
9270: 61 6d 65 31 36 28 29 5d 20 3c 2f 6c 69 3e 0a 20  ame16()] </li>. 
9280: 20 3c 2f 75 6c 3e 0a 7d 0a 0a 43 4f 4d 50 49 4c   </ul>.}..COMPIL
9290: 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45  E_OPTION {SQLITE
92a0: 5f 45 4e 41 42 4c 45 5f 44 42 50 41 47 45 5f 56  _ENABLE_DBPAGE_V
92b0: 54 41 42 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70  TAB} {.  This op
92c0: 74 69 6f 6e 20 65 6e 61 62 6c 65 73 20 74 68 65  tion enables the
92d0: 20 0a 20 20 5b 68 74 74 70 73 3a 2f 2f 73 71 6c   .  [https://sql
92e0: 69 74 65 2e 6f 72 67 2f 73 72 63 2f 66 69 6c 65  ite.org/src/file
92f0: 2f 73 72 63 2f 64 62 70 61 67 65 2e 63 7c 73 71  /src/dbpage.c|sq
9300: 6c 69 74 65 5f 64 62 70 61 67 65 20 76 69 72 74  lite_dbpage virt
9310: 75 61 6c 20 74 61 62 6c 65 5d 2e 0a 7d 0a 0a 43  ual table]..}..C
9320: 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53  OMPILE_OPTION {S
9330: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 44 42 53  QLITE_ENABLE_DBS
9340: 54 41 54 5f 56 54 41 42 7d 20 7b 0a 20 20 54 68  TAT_VTAB} {.  Th
9350: 69 73 20 6f 70 74 69 6f 6e 20 65 6e 61 62 6c 65  is option enable
9360: 73 20 74 68 65 20 5b 64 62 73 74 61 74 20 76 69  s the [dbstat vi
9370: 72 74 75 61 6c 20 74 61 62 6c 65 5d 2e 0a 7d 0a  rtual table]..}.
9380: 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20  .COMPILE_OPTION 
9390: 7b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 44  {SQLITE_ENABLE_D
93a0: 45 53 45 52 49 41 4c 49 5a 45 7d 20 7b 0a 20 20  ESERIALIZE} {.  
93b0: 54 68 69 73 20 6f 70 74 69 6f 6e 20 65 6e 61 62  This option enab
93c0: 6c 65 73 20 74 68 65 20 5b 73 71 6c 69 74 65 33  les the [sqlite3
93d0: 5f 73 65 72 69 61 6c 69 7a 65 28 29 5d 20 61 6e  _serialize()] an
93e0: 64 20 5b 73 71 6c 69 74 65 33 5f 64 65 73 65 72  d [sqlite3_deser
93f0: 69 61 6c 69 7a 65 28 29 5d 0a 20 20 69 6e 74 65  ialize()].  inte
9400: 72 66 61 63 65 73 2e 0a 20 20 3c 70 3e 0a 20 20  rfaces..  <p>.  
9410: 46 75 74 75 72 65 20 72 65 6c 65 61 73 65 73 20  Future releases 
9420: 6f 66 20 53 51 4c 69 74 65 20 6d 69 67 68 74 20  of SQLite might 
9430: 65 6e 61 62 6c 65 20 74 68 6f 73 65 20 69 6e 74  enable those int
9440: 65 72 66 61 63 65 73 20 62 79 20 64 65 66 61 75  erfaces by defau
9450: 6c 74 20 61 6e 64 0a 20 20 69 6e 73 74 65 61 64  lt and.  instead
9460: 20 6f 66 66 65 72 20 61 6e 20 53 51 4c 49 54 45   offer an SQLITE
9470: 5f 4f 4d 49 54 5f 44 45 53 45 52 49 41 4c 49 5a  _OMIT_DESERIALIZ
9480: 45 20 6f 70 74 69 6f 6e 20 74 6f 20 6c 65 61 76  E option to leav
9490: 65 20 74 68 65 6d 20 6f 75 74 2e 0a 7d 0a 0a 43  e them out..}..C
94a0: 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53  OMPILE_OPTION {S
94b0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50  QLITE_ENABLE_EXP
94c0: 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 7d 20 7b  LAIN_COMMENTS} {
94d0: 0a 20 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 61  .  This option a
94e0: 64 64 73 20 65 78 74 72 61 20 6c 6f 67 69 63 20  dds extra logic 
94f0: 74 6f 20 53 51 4c 69 74 65 20 74 68 61 74 20 69  to SQLite that i
9500: 6e 73 65 72 74 73 20 63 6f 6d 6d 65 6e 74 20 74  nserts comment t
9510: 65 78 74 20 69 6e 74 6f 20 74 68 65 0a 20 20 6f  ext into the.  o
9520: 75 74 70 75 74 20 6f 66 20 5b 45 58 50 4c 41 49  utput of [EXPLAI
9530: 4e 5d 2e 20 20 54 68 65 73 65 20 65 78 74 72 61  N].  These extra
9540: 20 63 6f 6d 6d 65 6e 74 73 20 75 73 65 20 65 78   comments use ex
9550: 74 72 61 20 6d 65 6d 6f 72 79 2c 20 74 68 75 73  tra memory, thus
9560: 0a 20 20 6d 61 6b 69 6e 67 20 5b 70 72 65 70 61  .  making [prepa
9570: 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73 5d 20  red statements] 
9580: 6c 61 72 67 65 72 20 61 6e 64 20 76 65 72 79 20  larger and very 
9590: 73 6c 69 67 68 74 6c 79 20 73 6c 6f 77 65 72 2c  slightly slower,
95a0: 20 61 6e 64 20 73 6f 20 74 68 65 79 20 61 72 65   and so they are
95b0: 0a 20 20 74 75 72 6e 65 64 20 6f 66 66 20 62 79  .  turned off by
95c0: 20 64 65 66 61 75 6c 74 20 61 6e 64 20 69 6e 20   default and in 
95d0: 6d 6f 73 74 20 61 70 70 6c 69 63 61 74 69 6f 6e  most application
95e0: 2e 20 20 42 75 74 20 73 6f 6d 65 20 61 70 70 6c  .  But some appl
95f0: 69 63 61 74 69 6f 6e 73 2c 20 73 75 63 68 0a 20  ications, such. 
9600: 20 61 73 20 74 68 65 20 5b 63 6f 6d 6d 61 6e 64   as the [command
9610: 2d 6c 69 6e 65 20 73 68 65 6c 6c 5d 20 66 6f 72  -line shell] for
9620: 20 53 51 4c 69 74 65 2c 20 76 61 6c 75 65 20 63   SQLite, value c
9630: 6c 61 72 69 74 79 20 6f 66 20 45 58 50 4c 41 49  larity of EXPLAI
9640: 4e 20 6f 75 74 70 75 74 0a 20 20 6f 76 65 72 20  N output.  over 
9650: 72 61 77 20 70 65 72 66 6f 72 6d 61 6e 63 65 20  raw performance 
9660: 61 6e 64 20 73 6f 20 74 68 69 73 20 63 6f 6d 70  and so this comp
9670: 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20  ile-time option 
9680: 69 73 20 61 76 61 69 6c 61 62 6c 65 20 74 6f 20  is available to 
9690: 74 68 65 6d 2e 0a 20 20 54 68 65 20 53 51 4c 49  them..  The SQLI
96a0: 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49  TE_ENABLE_EXPLAI
96b0: 4e 5f 43 4f 4d 4d 45 4e 54 53 20 63 6f 6d 70 69  N_COMMENTS compi
96c0: 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69  le-time option i
96d0: 73 20 61 6c 73 6f 20 65 6e 61 62 6c 65 64 0a 20  s also enabled. 
96e0: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 69   automatically i
96f0: 66 20 5b 53 51 4c 49 54 45 5f 44 45 42 55 47 5d  f [SQLITE_DEBUG]
9700: 20 69 73 20 65 6e 61 62 6c 65 64 2e 0a 7d 0a 0a   is enabled..}..
9710: 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20  .COMPILE_OPTION 
9720: 7b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46  {SQLITE_ENABLE_F
9730: 54 53 33 7d 20 7b 0a 20 20 57 68 65 6e 20 74 68  TS3} {.  When th
9740: 69 73 20 6f 70 74 69 6f 6e 20 69 73 20 64 65 66  is option is def
9750: 69 6e 65 64 20 69 6e 20 74 68 65 20 5b 61 6d 61  ined in the [ama
9760: 6c 67 61 6d 61 74 69 6f 6e 5d 2c 20 76 65 72 73  lgamation], vers
9770: 69 6f 6e 20 33 0a 20 20 6f 66 20 74 68 65 20 66  ion 3.  of the f
9780: 75 6c 6c 2d 74 65 78 74 20 73 65 61 72 63 68 20  ull-text search 
9790: 65 6e 67 69 6e 65 20 69 73 20 61 64 64 65 64 20  engine is added 
97a0: 74 6f 20 74 68 65 20 62 75 69 6c 64 20 61 75 74  to the build aut
97b0: 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a 7d 0a 0a 43  omatically..}..C
97c0: 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53  OMPILE_OPTION {S
97d0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
97e0: 33 5f 50 41 52 45 4e 54 48 45 53 49 53 7d 20 7b  3_PARENTHESIS} {
97f0: 0a 20 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 6d  .  This option m
9800: 6f 64 69 66 69 65 73 20 74 68 65 20 71 75 65 72  odifies the quer
9810: 79 20 70 61 74 74 65 72 6e 20 70 61 72 73 65 72  y pattern parser
9820: 20 69 6e 20 46 54 53 33 20 73 75 63 68 20 74 68   in FTS3 such th
9830: 61 74 20 69 74 0a 20 20 73 75 70 70 6f 72 74 73  at it.  supports
9840: 20 6f 70 65 72 61 74 6f 72 73 20 41 4e 44 20 61   operators AND a
9850: 6e 64 20 4e 4f 54 20 28 69 6e 20 61 64 64 69 74  nd NOT (in addit
9860: 69 6f 6e 20 74 6f 20 74 68 65 20 75 73 75 61 6c  ion to the usual
9870: 20 4f 52 20 61 6e 64 20 4e 45 41 52 29 0a 20 20   OR and NEAR).  
9880: 61 6e 64 20 61 6c 73 6f 20 61 6c 6c 6f 77 73 20  and also allows 
9890: 71 75 65 72 79 20 65 78 70 72 65 73 73 69 6f 6e  query expression
98a0: 73 20 74 6f 20 63 6f 6e 74 61 69 6e 20 6e 65 73  s to contain nes
98b0: 74 65 64 20 70 61 72 65 6e 74 68 65 73 69 73 2e  ted parenthesis.
98c0: 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49  .}..COMPILE_OPTI
98d0: 4f 4e 20 7b 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ON {SQLITE_ENABL
98e0: 45 5f 46 54 53 33 5f 54 4f 4b 45 4e 49 5a 45 52  E_FTS3_TOKENIZER
98f0: 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70 74 69 6f  } {.  This optio
9900: 6e 20 65 6e 61 62 6c 65 73 20 74 68 65 20 74 77  n enables the tw
9910: 6f 2d 61 72 67 75 6d 65 6e 74 20 76 65 72 73 69  o-argument versi
9920: 6f 6e 20 6f 66 20 74 68 65 20 5b 66 74 73 33 5f  on of the [fts3_
9930: 74 6f 6b 65 6e 69 7a 65 72 28 29 5d 0a 20 20 69  tokenizer()].  i
9940: 6e 74 65 72 66 61 63 65 2e 20 20 54 68 65 20 73  nterface.  The s
9950: 65 63 6f 6e 64 20 61 72 67 75 6d 65 6e 74 20 74  econd argument t
9960: 6f 20 66 74 73 33 5f 74 6f 6b 65 6e 69 7a 65 72  o fts3_tokenizer
9970: 28 29 20 69 73 20 73 75 70 70 6f 73 65 20 74 6f  () is suppose to
9980: 20 62 65 20 61 0a 20 20 70 6f 69 6e 74 65 72 20   be a.  pointer 
9990: 74 6f 20 61 20 66 75 6e 63 74 69 6f 6e 20 28 65  to a function (e
99a0: 6e 63 6f 64 65 64 20 61 73 20 61 20 42 4c 4f 42  ncoded as a BLOB
99b0: 29 20 74 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74  ) that implement
99c0: 73 20 61 6e 0a 20 20 61 70 70 6c 69 63 61 74 69  s an.  applicati
99d0: 6f 6e 20 64 65 66 69 6e 65 64 20 74 6f 6b 65 6e  on defined token
99e0: 69 7a 65 72 2e 20 20 49 66 20 68 6f 73 74 69 6c  izer.  If hostil
99f0: 65 20 61 63 74 6f 72 73 20 61 72 65 20 61 62 6c  e actors are abl
9a00: 65 20 74 6f 20 72 75 6e 0a 20 20 74 68 65 20 74  e to run.  the t
9a10: 77 6f 2d 61 72 67 75 6d 65 6e 74 20 76 65 72 73  wo-argument vers
9a20: 69 6f 6e 20 6f 66 20 66 74 73 33 5f 74 6f 6b 65  ion of fts3_toke
9a30: 6e 69 7a 65 72 28 29 20 77 69 74 68 20 61 6e 20  nizer() with an 
9a40: 61 72 62 69 74 72 61 72 79 20 73 65 63 6f 6e 64  arbitrary second
9a50: 0a 20 20 61 72 67 75 6d 65 6e 74 2c 20 74 68 65  .  argument, the
9a60: 79 20 63 6f 75 6c 64 20 75 73 65 20 63 72 61 73  y could use cras
9a70: 68 20 6f 72 20 74 61 6b 65 20 63 6f 6e 74 72 6f  h or take contro
9a80: 6c 20 6f 66 20 74 68 65 20 70 72 6f 63 65 73 73  l of the process
9a90: 2e 20 0a 20 20 3c 70 3e 0a 20 20 42 65 63 61 75  . .  <p>.  Becau
9aa0: 73 65 20 6f 66 20 73 65 63 75 72 69 74 79 20 63  se of security c
9ab0: 6f 6e 63 65 72 6e 73 2c 20 74 68 65 20 74 77 6f  oncerns, the two
9ac0: 2d 61 72 67 75 6d 65 6e 74 20 66 74 73 33 5f 74  -argument fts3_t
9ad0: 6f 6b 65 6e 69 7a 65 72 28 29 20 66 65 61 74 75  okenizer() featu
9ae0: 72 65 20 0a 20 20 77 61 73 20 64 69 73 61 62 6c  re .  was disabl
9af0: 65 64 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74  ed beginning wit
9b00: 68 20 5b 56 65 72 73 69 6f 6e 20 33 2e 31 31 2e  h [Version 3.11.
9b10: 30 5d 20 28 5b 64 61 74 65 6f 66 3a 33 2e 31 31  0] ([dateof:3.11
9b20: 2e 30 5d 29 0a 20 20 75 6e 6c 65 73 73 20 74 68  .0]).  unless th
9b30: 69 73 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  is compile-time 
9b40: 6f 70 74 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a  option is used..
9b50: 20 20 5b 56 65 72 73 69 6f 6e 20 33 2e 31 32 2e    [Version 3.12.
9b60: 30 5d 20 28 5b 64 61 74 65 6f 66 3a 33 2e 31 32  0] ([dateof:3.12
9b70: 2e 30 5d 29 20 61 64 64 65 64 20 74 68 65 20 0a  .0]) added the .
9b80: 20 20 5b 73 71 6c 69 74 65 33 5f 64 62 5f 63 6f    [sqlite3_db_co
9b90: 6e 66 69 67 5d 28 64 62 2c 5b 53 51 4c 49 54 45  nfig](db,[SQLITE
9ba0: 5f 44 42 43 4f 4e 46 49 47 5f 45 4e 41 42 4c 45  _DBCONFIG_ENABLE
9bb0: 5f 46 54 53 33 5f 54 4f 4b 45 4e 49 5a 45 52 5d  _FTS3_TOKENIZER]
9bc0: 2c 31 2c 30 29 20 69 6e 74 65 72 66 61 63 65 0a  ,1,0) interface.
9bd0: 20 20 74 68 61 74 20 61 63 74 69 76 61 74 65 73    that activates
9be0: 20 74 68 65 20 74 77 6f 2d 61 72 67 75 6d 65 6e   the two-argumen
9bf0: 74 20 76 65 72 73 69 6f 6e 20 6f 66 20 5b 66 74  t version of [ft
9c00: 73 33 5f 74 6f 6b 65 6e 69 7a 65 72 28 29 5d 0a  s3_tokenizer()].
9c10: 20 20 66 6f 72 20 61 20 73 70 65 63 69 66 69 63    for a specific
9c20: 20 5b 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65   [database conne
9c30: 63 74 69 6f 6e 5d 20 61 74 20 72 75 6e 2d 74 69  ction] at run-ti
9c40: 6d 65 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f  me..}..COMPILE_O
9c50: 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 45 4e  PTION {SQLITE_EN
9c60: 41 42 4c 45 5f 46 54 53 34 7d 20 7b 0a 20 20 57  ABLE_FTS4} {.  W
9c70: 68 65 6e 20 74 68 69 73 20 6f 70 74 69 6f 6e 20  hen this option 
9c80: 69 73 20 64 65 66 69 6e 65 64 20 69 6e 20 74 68  is defined in th
9c90: 65 20 5b 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 5d  e [amalgamation]
9ca0: 2c 20 76 65 72 73 69 6f 6e 73 20 33 20 61 6e 64  , versions 3 and
9cb0: 20 34 0a 20 20 6f 66 20 74 68 65 20 66 75 6c 6c   4.  of the full
9cc0: 2d 74 65 78 74 20 73 65 61 72 63 68 20 65 6e 67  -text search eng
9cd0: 69 6e 65 20 69 73 20 61 64 64 65 64 20 74 6f 20  ine is added to 
9ce0: 74 68 65 20 62 75 69 6c 64 20 61 75 74 6f 6d 61  the build automa
9cf0: 74 69 63 61 6c 6c 79 2e 0a 7d 0a 0a 43 4f 4d 50  tically..}..COMP
9d00: 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49  ILE_OPTION {SQLI
9d10: 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 35 7d 20  TE_ENABLE_FTS5} 
9d20: 7b 0a 20 20 57 68 65 6e 20 74 68 69 73 20 6f 70  {.  When this op
9d30: 74 69 6f 6e 20 69 73 20 64 65 66 69 6e 65 64 20  tion is defined 
9d40: 69 6e 20 74 68 65 20 5b 61 6d 61 6c 67 61 6d 61  in the [amalgama
9d50: 74 69 6f 6e 5d 2c 20 76 65 72 73 69 6f 6e 73 20  tion], versions 
9d60: 35 0a 20 20 6f 66 20 74 68 65 20 66 75 6c 6c 2d  5.  of the full-
9d70: 74 65 78 74 20 73 65 61 72 63 68 20 65 6e 67 69  text search engi
9d80: 6e 65 20 28 5b 66 74 73 35 5d 29 20 69 73 20 61  ne ([fts5]) is a
9d90: 64 64 65 64 20 74 6f 20 74 68 65 20 62 75 69 6c  dded to the buil
9da0: 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e  d automatically.
9db0: 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49  .}..COMPILE_OPTI
9dc0: 4f 4e 20 7b 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ON {SQLITE_ENABL
9dd0: 45 5f 49 43 55 7d 20 7b 0a 20 20 54 68 69 73 20  E_ICU} {.  This 
9de0: 6f 70 74 69 6f 6e 20 63 61 75 73 65 73 20 74 68  option causes th
9df0: 65 20 0a 20 20 5b 68 74 74 70 3a 2f 2f 77 77 77  e .  [http://www
9e00: 2e 69 63 75 2d 70 72 6f 6a 65 63 74 2e 6f 72 67  .icu-project.org
9e10: 2f 20 7c 20 49 6e 74 65 72 6e 61 74 69 6f 6e 61  / | Internationa
9e20: 6c 20 43 6f 6d 70 6f 6e 65 6e 74 73 20 66 6f 72  l Components for
9e30: 20 55 6e 69 63 6f 64 65 5d 0a 20 20 6f 72 20 22   Unicode].  or "
9e40: 49 43 55 22 20 65 78 74 65 6e 73 69 6f 6e 20 74  ICU" extension t
9e50: 6f 20 53 51 4c 69 74 65 20 74 6f 20 62 65 20 61  o SQLite to be a
9e60: 64 64 65 64 20 74 6f 20 74 68 65 20 62 75 69 6c  dded to the buil
9e70: 64 2e 20 20 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f  d.  .}..COMPILE_
9e80: 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 45  OPTION {SQLITE_E
9e90: 4e 41 42 4c 45 5f 49 4f 54 52 41 43 45 7d 20 7b  NABLE_IOTRACE} {
9ea0: 0a 20 20 57 68 65 6e 20 62 6f 74 68 20 74 68 65  .  When both the
9eb0: 20 53 51 4c 69 74 65 20 63 6f 72 65 20 61 6e 64   SQLite core and
9ec0: 20 74 68 65 20 5b 43 6f 6d 6d 61 6e 64 20 4c 69   the [Command Li
9ed0: 6e 65 20 49 6e 74 65 72 66 61 63 65 5d 20 28 43  ne Interface] (C
9ee0: 4c 49 29 20 61 72 65 20 62 6f 74 68 20 0a 20 20  LI) are both .  
9ef0: 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 74 68  compiled with th
9f00: 69 73 20 6f 70 74 69 6f 6e 2c 20 74 68 65 6e 20  is option, then 
9f10: 74 68 65 20 43 4c 49 20 70 72 6f 76 69 64 65 73  the CLI provides
9f20: 20 61 6e 20 65 78 74 72 61 20 63 6f 6d 6d 61 6e   an extra comman
9f30: 64 0a 20 20 6e 61 6d 65 64 20 22 2e 69 6f 74 72  d.  named ".iotr
9f40: 61 63 65 22 20 74 68 61 74 20 70 72 6f 76 69 64  ace" that provid
9f50: 65 73 20 61 20 6c 6f 77 2d 6c 65 76 65 6c 20 6c  es a low-level l
9f60: 6f 67 20 6f 66 20 49 2f 4f 20 61 63 74 69 76 69  og of I/O activi
9f70: 74 79 2e 0a 20 20 54 68 69 73 20 6f 70 74 69 6f  ty..  This optio
9f80: 6e 20 69 73 20 65 78 70 65 72 69 6d 65 6e 74 61  n is experimenta
9f90: 6c 20 61 6e 64 20 6d 61 79 20 62 65 20 64 69 73  l and may be dis
9fa0: 63 6f 6e 74 69 6e 75 65 64 20 69 6e 20 61 20 66  continued in a f
9fb0: 75 74 75 72 65 20 72 65 6c 65 61 73 65 2e 0a 7d  uture release..}
9fc0: 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e  ..COMPILE_OPTION
9fd0: 20 7b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f   {SQLITE_ENABLE_
9fe0: 4a 53 4f 4e 31 7d 20 7b 0a 20 20 57 68 65 6e 20  JSON1} {.  When 
9ff0: 74 68 69 73 20 6f 70 74 69 6f 6e 20 69 73 20 64  this option is d
a000: 65 66 69 6e 65 64 20 69 6e 20 74 68 65 20 5b 61  efined in the [a
a010: 6d 61 6c 67 61 6d 61 74 69 6f 6e 5d 2c 20 74 68  malgamation], th
a020: 65 0a 20 20 5b 4a 53 4f 4e 20 53 51 4c 20 66 75  e.  [JSON SQL fu
a030: 6e 63 74 69 6f 6e 73 5d 20 61 72 65 20 61 64 64  nctions] are add
a040: 65 64 20 74 6f 20 74 68 65 20 62 75 69 6c 64 20  ed to the build 
a050: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a 7d  automatically..}
a060: 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e  ..COMPILE_OPTION
a070: 20 7b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f   {SQLITE_ENABLE_
a080: 4c 4f 43 4b 49 4e 47 5f 53 54 59 4c 45 7d 20 7b  LOCKING_STYLE} {
a090: 0a 20 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 65  .  This option e
a0a0: 6e 61 62 6c 65 73 20 61 64 64 69 74 69 6f 6e 61  nables additiona
a0b0: 6c 20 6c 6f 67 69 63 20 69 6e 20 74 68 65 20 4f  l logic in the O
a0c0: 53 20 69 6e 74 65 72 66 61 63 65 20 6c 61 79 65  S interface laye
a0d0: 72 20 66 6f 72 0a 20 20 4d 61 63 20 4f 53 20 58  r for.  Mac OS X
a0e0: 2e 20 54 68 65 20 61 64 64 69 74 69 6f 6e 61 6c  . The additional
a0f0: 20 6c 6f 67 69 63 20 61 74 74 65 6d 70 74 73 20   logic attempts 
a100: 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65  to determine the
a110: 20 74 79 70 65 20 6f 66 20 74 68 65 0a 20 20 75   type of the.  u
a120: 6e 64 65 72 6c 79 69 6e 67 20 66 69 6c 65 73 79  nderlying filesy
a130: 73 74 65 6d 20 61 6e 64 20 63 68 6f 6f 73 65 20  stem and choose 
a140: 61 6e 64 20 61 6c 74 65 72 6e 61 74 69 76 65 20  and alternative 
a150: 6c 6f 63 6b 69 6e 67 20 73 74 72 61 74 65 67 79  locking strategy
a160: 0a 20 20 74 68 61 74 20 77 6f 72 6b 73 20 63 6f  .  that works co
a170: 72 72 65 63 74 6c 79 20 66 6f 72 20 74 68 61 74  rrectly for that
a180: 20 66 69 6c 65 73 79 73 74 65 6d 20 74 79 70 65   filesystem type
a190: 2e 20 46 69 76 65 20 6c 6f 63 6b 69 6e 67 20 73  . Five locking s
a1a0: 74 72 61 74 65 67 69 65 73 20 0a 20 20 61 72 65  trategies .  are
a1b0: 20 61 76 61 69 6c 61 62 6c 65 3a 0a 0a 20 20 3c   available:..  <
a1c0: 75 6c 3e 0a 20 20 20 20 3c 6c 69 3e 20 50 4f 53  ul>.    <li> POS
a1d0: 49 58 20 6c 6f 63 6b 69 6e 67 20 73 74 79 6c 65  IX locking style
a1e0: 2e 20 54 68 69 73 20 69 73 20 74 68 65 20 64 65  . This is the de
a1f0: 66 61 75 6c 74 20 6c 6f 63 6b 69 6e 67 20 73 74  fault locking st
a200: 79 6c 65 20 61 6e 64 20 74 68 65 0a 20 20 20 20  yle and the.    
a210: 20 20 20 20 20 73 74 79 6c 65 20 75 73 65 64 20       style used 
a220: 62 79 20 6f 74 68 65 72 20 28 6e 6f 6e 20 4d 61  by other (non Ma
a230: 63 20 4f 53 20 58 29 20 55 6e 69 78 65 73 2e 20  c OS X) Unixes. 
a240: 4c 6f 63 6b 73 20 61 72 65 20 6f 62 74 61 69 6e  Locks are obtain
a250: 65 64 20 61 6e 64 20 0a 20 20 20 20 20 20 20 20  ed and .        
a260: 20 72 65 6c 65 61 73 65 64 20 75 73 69 6e 67 20   released using 
a270: 74 68 65 20 66 63 6e 74 6c 28 29 20 73 79 73 74  the fcntl() syst
a280: 65 6d 20 63 61 6c 6c 2e 0a 0a 20 20 20 20 3c 6c  em call...    <l
a290: 69 3e 20 41 46 50 20 6c 6f 63 6b 69 6e 67 20 73  i> AFP locking s
a2a0: 74 79 6c 65 2e 20 54 68 69 73 20 6c 6f 63 6b 69  tyle. This locki
a2b0: 6e 67 20 73 74 79 6c 65 20 69 73 20 75 73 65 64  ng style is used
a2c0: 20 66 6f 72 20 6e 65 74 77 6f 72 6b 20 66 69 6c   for network fil
a2d0: 65 20 0a 20 20 20 20 20 20 20 20 20 73 79 73 74  e .         syst
a2e0: 65 6d 73 20 74 68 61 74 20 75 73 65 20 74 68 65  ems that use the
a2f0: 20 41 46 50 20 28 41 70 70 6c 65 20 46 69 6c 69   AFP (Apple Fili
a300: 6e 67 20 50 72 6f 74 6f 63 6f 6c 29 20 70 72 6f  ng Protocol) pro
a310: 74 6f 63 6f 6c 2e 20 4c 6f 63 6b 73 0a 20 20 20  tocol. Locks.   
a320: 20 20 20 20 20 20 61 72 65 20 6f 62 74 61 69 6e        are obtain
a330: 65 64 20 62 79 20 63 61 6c 6c 69 6e 67 20 74 68  ed by calling th
a340: 65 20 6c 69 62 72 61 72 79 20 66 75 6e 63 74 69  e library functi
a350: 6f 6e 20 5f 41 46 50 46 53 53 65 74 4c 6f 63 6b  on _AFPFSSetLock
a360: 28 29 2e 0a 0a 20 20 20 20 3c 6c 69 3e 20 46 6c  ()...    <li> Fl
a370: 6f 63 6b 20 6c 6f 63 6b 69 6e 67 20 73 74 79 6c  ock locking styl
a380: 65 2e 20 54 68 69 73 20 69 73 20 75 73 65 64 20  e. This is used 
a390: 66 6f 72 20 66 69 6c 65 2d 73 79 73 74 65 6d 73  for file-systems
a3a0: 20 74 68 61 74 20 64 6f 20 6e 6f 74 0a 20 20 20   that do not.   
a3b0: 20 20 20 20 20 20 73 75 70 70 6f 72 74 20 50 4f        support PO
a3c0: 53 49 58 20 6c 6f 63 6b 69 6e 67 20 73 74 79 6c  SIX locking styl
a3d0: 65 2e 20 4c 6f 63 6b 73 20 61 72 65 20 6f 62 74  e. Locks are obt
a3e0: 61 69 6e 65 64 20 61 6e 64 20 72 65 6c 65 61 73  ained and releas
a3f0: 65 64 20 75 73 69 6e 67 0a 20 20 20 20 20 20 20  ed using.       
a400: 20 20 74 68 65 20 66 6c 6f 63 6b 28 29 20 73 79    the flock() sy
a410: 73 74 65 6d 20 63 61 6c 6c 2e 0a 0a 20 20 20 20  stem call...    
a420: 3c 6c 69 3e 20 44 6f 74 2d 66 69 6c 65 20 6c 6f  <li> Dot-file lo
a430: 63 6b 69 6e 67 20 73 74 79 6c 65 2e 20 54 68 69  cking style. Thi
a440: 73 20 6c 6f 63 6b 69 6e 67 20 73 74 79 6c 65 20  s locking style 
a450: 69 73 20 75 73 65 64 20 77 68 65 6e 20 6e 65 69  is used when nei
a460: 74 68 65 72 0a 20 20 20 20 20 20 20 20 20 66 6c  ther.         fl
a470: 6f 63 6b 20 6e 6f 72 20 50 4f 53 49 58 20 6c 6f  ock nor POSIX lo
a480: 63 6b 69 6e 67 20 73 74 79 6c 65 73 20 61 72 65  cking styles are
a490: 20 73 75 70 70 6f 72 74 65 64 20 62 79 20 74 68   supported by th
a4a0: 65 20 66 69 6c 65 20 73 79 73 74 65 6d 2e 0a 20  e file system.. 
a4b0: 20 20 20 20 20 20 20 20 44 61 74 61 62 61 73 65          Database
a4c0: 20 6c 6f 63 6b 73 20 61 72 65 20 6f 62 74 61 69   locks are obtai
a4d0: 6e 65 64 20 62 79 20 63 72 65 61 74 69 6e 67 20  ned by creating 
a4e0: 61 6e 64 20 65 6e 74 72 79 20 69 6e 20 74 68 65  and entry in the
a4f0: 20 66 69 6c 65 2d 73 79 73 74 65 6d 0a 20 20 20   file-system.   
a500: 20 20 20 20 20 20 61 74 20 61 20 77 65 6c 6c 2d        at a well-
a510: 6b 6e 6f 77 6e 20 6c 6f 63 61 74 69 6f 6e 20 72  known location r
a520: 65 6c 61 74 69 76 65 20 74 6f 20 74 68 65 20 64  elative to the d
a530: 61 74 61 62 61 73 65 20 66 69 6c 65 20 28 61 20  atabase file (a 
a540: 22 64 6f 74 2d 66 69 6c 65 22 29 0a 20 20 20 20  "dot-file").    
a550: 20 20 20 20 20 61 6e 64 20 72 65 6c 69 6e 71 75       and relinqu
a560: 69 73 68 65 64 20 62 79 20 64 65 6c 65 74 69 6e  ished by deletin
a570: 67 20 74 68 65 20 73 61 6d 65 20 66 69 6c 65 2e  g the same file.
a580: 0a 0a 20 20 20 20 3c 6c 69 3e 20 4e 6f 20 6c 6f  ..    <li> No lo
a590: 63 6b 69 6e 67 20 73 74 79 6c 65 2e 20 49 66 20  cking style. If 
a5a0: 6e 6f 6e 65 20 6f 66 20 74 68 65 20 61 62 6f 76  none of the abov
a5b0: 65 20 63 61 6e 20 62 65 20 73 75 70 70 6f 72 74  e can be support
a5c0: 65 64 2c 20 74 68 69 73 20 0a 20 20 20 20 20 20  ed, this .      
a5d0: 20 20 20 6c 6f 63 6b 69 6e 67 20 73 74 79 6c 65     locking style
a5e0: 20 69 73 20 75 73 65 64 2e 20 4e 6f 20 64 61 74   is used. No dat
a5f0: 61 62 61 73 65 20 6c 6f 63 6b 69 6e 67 20 6d 65  abase locking me
a600: 63 68 61 6e 69 73 6d 20 69 73 20 75 73 65 64 2e  chanism is used.
a610: 20 57 68 65 6e 0a 20 20 20 20 20 20 20 20 20 74   When.         t
a620: 68 69 73 20 73 79 73 74 65 6d 20 69 73 20 75 73  his system is us
a630: 65 64 20 69 74 20 69 73 20 6e 6f 74 20 73 61 66  ed it is not saf
a640: 65 20 66 6f 72 20 61 20 73 69 6e 67 6c 65 20 64  e for a single d
a650: 61 74 61 62 61 73 65 20 74 6f 20 62 65 0a 20 20  atabase to be.  
a660: 20 20 20 20 20 20 20 61 63 63 65 73 73 65 64 20         accessed 
a670: 62 79 20 6d 75 6c 74 69 70 6c 65 20 63 6c 69 65  by multiple clie
a680: 6e 74 73 2e 0a 20 20 3c 2f 75 6c 3e 0a 0a 20 20  nts..  </ul>..  
a690: 41 64 64 69 74 69 6f 6e 61 6c 6c 79 2c 20 66 69  Additionally, fi
a6a0: 76 65 20 65 78 74 72 61 20 5b 56 46 53 5d 20 69  ve extra [VFS] i
a6b0: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20 61  mplementations a
a6c0: 72 65 20 70 72 6f 76 69 64 65 64 20 61 73 20 77  re provided as w
a6d0: 65 6c 6c 20 61 73 20 74 68 65 0a 20 20 64 65 66  ell as the.  def
a6e0: 61 75 6c 74 2e 20 42 79 20 73 70 65 63 69 66 79  ault. By specify
a6f0: 69 6e 67 20 6f 6e 65 20 6f 66 20 74 68 65 20 65  ing one of the e
a700: 78 74 72 61 20 56 46 53 20 69 6d 70 6c 65 6d 65  xtra VFS impleme
a710: 6e 74 61 74 69 6f 6e 73 20 0a 20 20 77 68 65 6e  ntations .  when
a720: 20 63 61 6c 6c 69 6e 67 20 5b 73 71 6c 69 74 65   calling [sqlite
a730: 33 5f 6f 70 65 6e 5f 76 32 28 29 5d 2c 20 61 6e  3_open_v2()], an
a740: 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 6d 61 79   application may
a750: 20 62 79 70 61 73 73 20 74 68 65 20 66 69 6c 65   bypass the file
a760: 2d 73 79 73 74 65 6d 0a 20 20 64 65 74 65 63 74  -system.  detect
a770: 69 6f 6e 20 6c 6f 67 69 63 20 61 6e 64 20 65 78  ion logic and ex
a780: 70 6c 69 63 69 74 6c 79 20 73 65 6c 65 63 74 20  plicitly select 
a790: 6f 6e 65 20 6f 66 20 74 68 65 20 61 62 6f 76 65  one of the above
a7a0: 20 6c 6f 63 6b 69 6e 67 20 73 74 79 6c 65 73 2e   locking styles.
a7b0: 20 54 68 65 0a 20 20 66 69 76 65 20 65 78 74 72   The.  five extr
a7c0: 61 20 5b 56 46 53 5d 20 69 6d 70 6c 65 6d 65 6e  a [VFS] implemen
a7d0: 74 61 74 69 6f 6e 73 20 61 72 65 20 63 61 6c 6c  tations are call
a7e0: 65 64 20 22 75 6e 69 78 2d 70 6f 73 69 78 22 2c  ed "unix-posix",
a7f0: 20 22 75 6e 69 78 2d 61 66 70 22 2c 0a 20 20 22   "unix-afp",.  "
a800: 75 6e 69 78 2d 66 6c 6f 63 6b 22 2c 20 22 75 6e  unix-flock", "un
a810: 69 78 2d 64 6f 74 66 69 6c 65 22 20 61 6e 64 20  ix-dotfile" and 
a820: 22 75 6e 69 78 2d 6e 6f 6e 65 22 2e 0a 7d 0a 0a  "unix-none"..}..
a830: 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b  COMPILE_OPTION {
a840: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45  SQLITE_ENABLE_ME
a850: 4d 4f 52 59 5f 4d 41 4e 41 47 45 4d 45 4e 54 7d  MORY_MANAGEMENT}
a860: 20 7b 0a 20 20 54 68 69 73 20 6f 70 74 69 6f 6e   {.  This option
a870: 20 61 64 64 73 20 65 78 74 72 61 20 6c 6f 67 69   adds extra logi
a880: 63 20 74 6f 20 53 51 4c 69 74 65 20 74 68 61 74  c to SQLite that
a890: 20 61 6c 6c 6f 77 73 20 69 74 20 74 6f 20 72 65   allows it to re
a8a0: 6c 65 61 73 65 20 75 6e 75 73 65 64 0a 20 20 6d  lease unused.  m
a8b0: 65 6d 6f 72 79 20 75 70 6f 6e 20 72 65 71 75 65  emory upon reque
a8c0: 73 74 2e 20 20 54 68 69 73 20 6f 70 74 69 6f 6e  st.  This option
a8d0: 20 6d 75 73 74 20 62 65 20 65 6e 61 62 6c 65 64   must be enabled
a8e0: 20 69 6e 20 6f 72 64 65 72 20 66 6f 72 20 74 68   in order for th
a8f0: 65 0a 20 20 5b 73 71 6c 69 74 65 33 5f 72 65 6c  e.  [sqlite3_rel
a900: 65 61 73 65 5f 6d 65 6d 6f 72 79 28 29 5d 20 69  ease_memory()] i
a910: 6e 74 65 72 66 61 63 65 20 74 6f 20 77 6f 72 6b  nterface to work
a920: 2e 20 20 49 66 20 74 68 69 73 20 63 6f 6d 70 69  .  If this compi
a930: 6c 65 2d 74 69 6d 65 0a 20 20 6f 70 74 69 6f 6e  le-time.  option
a940: 20 69 73 20 6e 6f 74 20 75 73 65 64 2c 20 74 68   is not used, th
a950: 65 20 5b 73 71 6c 69 74 65 33 5f 72 65 6c 65 61  e [sqlite3_relea
a960: 73 65 5f 6d 65 6d 6f 72 79 28 29 5d 20 69 6e 74  se_memory()] int
a970: 65 72 66 61 63 65 20 69 73 20 61 20 0a 20 20 6e  erface is a .  n
a980: 6f 2d 6f 70 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45  o-op..}..COMPILE
a990: 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f  _OPTION {SQLITE_
a9a0: 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 33 7d 20  ENABLE_MEMSYS3} 
a9b0: 7b 0a 20 20 54 68 69 73 20 6f 70 74 69 6f 6e 20  {.  This option 
a9c0: 69 6e 63 6c 75 64 65 73 20 63 6f 64 65 20 69 6e  includes code in
a9d0: 20 53 51 4c 69 74 65 20 74 68 61 74 20 69 6d 70   SQLite that imp
a9e0: 6c 65 6d 65 6e 74 73 20 61 6e 20 61 6c 74 65 72  lements an alter
a9f0: 6e 61 74 69 76 65 0a 20 20 6d 65 6d 6f 72 79 20  native.  memory 
aa00: 61 6c 6c 6f 63 61 74 6f 72 2e 20 20 54 68 69 73  allocator.  This
aa10: 20 61 6c 74 65 72 6e 61 74 69 76 65 20 6d 65 6d   alternative mem
aa20: 6f 72 79 20 61 6c 6c 6f 63 61 74 6f 72 20 69 73  ory allocator is
aa30: 20 6f 6e 6c 79 20 65 6e 67 61 67 65 64 0a 20 20   only engaged.  
aa40: 77 68 65 6e 20 74 68 65 20 5b 53 51 4c 49 54 45  when the [SQLITE
aa50: 5f 43 4f 4e 46 49 47 5f 48 45 41 50 5d 20 6f 70  _CONFIG_HEAP] op
aa60: 74 69 6f 6e 20 74 6f 20 5b 73 71 6c 69 74 65 33  tion to [sqlite3
aa70: 5f 63 6f 6e 66 69 67 28 29 5d 20 69 73 20 75 73  _config()] is us
aa80: 65 64 20 74 6f 0a 20 20 73 75 70 70 6c 79 20 61  ed to.  supply a
aa90: 20 6c 61 72 67 65 20 63 68 75 6e 6b 20 6f 66 20   large chunk of 
aaa0: 6d 65 6d 6f 72 79 20 66 72 6f 6d 20 77 68 69 63  memory from whic
aab0: 68 20 61 6c 6c 20 6d 65 6d 6f 72 79 20 61 6c 6c  h all memory all
aac0: 6f 63 61 74 69 6f 6e 73 20 61 72 65 0a 20 20 74  ocations are.  t
aad0: 61 6b 65 6e 2e 0a 20 20 54 68 65 20 4d 45 4d 53  aken..  The MEMS
aae0: 59 53 33 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  YS3 memory alloc
aaf0: 61 74 6f 72 20 75 73 65 73 20 61 20 68 79 62 72  ator uses a hybr
ab00: 69 64 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 61 6c  id allocation al
ab10: 67 6f 72 69 74 68 6d 20 0a 20 20 70 61 74 74 65  gorithm .  patte
ab20: 72 6e 65 64 20 61 66 74 65 72 20 64 6c 6d 61 6c  rned after dlmal
ab30: 6c 6f 63 28 29 2e 20 20 20 4f 6e 6c 79 20 6f 6e  loc().   Only on
ab40: 65 20 6f 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  e of SQLITE_ENAB
ab50: 4c 45 5f 4d 45 4d 53 59 53 33 20 61 6e 64 20 0a  LE_MEMSYS3 and .
ab60: 20 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f    SQLITE_ENABLE_
ab70: 4d 45 4d 53 59 53 35 20 6d 61 79 20 62 65 20 65  MEMSYS5 may be e
ab80: 6e 61 62 6c 65 64 20 61 74 20 6f 6e 63 65 2e 0a  nabled at once..
ab90: 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f  }..COMPILE_OPTIO
aba0: 4e 20 7b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  N {SQLITE_ENABLE
abb0: 5f 4d 45 4d 53 59 53 35 7d 20 7b 0a 20 20 54 68  _MEMSYS5} {.  Th
abc0: 69 73 20 6f 70 74 69 6f 6e 20 69 6e 63 6c 75 64  is option includ
abd0: 65 73 20 63 6f 64 65 20 69 6e 20 53 51 4c 69 74  es code in SQLit
abe0: 65 20 74 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74  e that implement
abf0: 73 20 61 6e 20 61 6c 74 65 72 6e 61 74 69 76 65  s an alternative
ac00: 0a 20 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  .  memory alloca
ac10: 74 6f 72 2e 20 20 54 68 69 73 20 61 6c 74 65 72  tor.  This alter
ac20: 6e 61 74 69 76 65 20 6d 65 6d 6f 72 79 20 61 6c  native memory al
ac30: 6c 6f 63 61 74 6f 72 20 69 73 20 6f 6e 6c 79 20  locator is only 
ac40: 65 6e 67 61 67 65 64 0a 20 20 77 68 65 6e 20 74  engaged.  when t
ac50: 68 65 20 5b 53 51 4c 49 54 45 5f 43 4f 4e 46 49  he [SQLITE_CONFI
ac60: 47 5f 48 45 41 50 5d 20 6f 70 74 69 6f 6e 20 74  G_HEAP] option t
ac70: 6f 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69  o [sqlite3_confi
ac80: 67 28 29 5d 20 69 73 20 75 73 65 64 20 74 6f 0a  g()] is used to.
ac90: 20 20 73 75 70 70 6c 79 20 61 20 6c 61 72 67 65    supply a large
aca0: 20 63 68 75 6e 6b 20 6f 66 20 6d 65 6d 6f 72 79   chunk of memory
acb0: 20 66 72 6f 6d 20 77 68 69 63 68 20 61 6c 6c 20   from which all 
acc0: 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
acd0: 6e 73 20 61 72 65 0a 20 20 74 61 6b 65 6e 2e 0a  ns are.  taken..
ace0: 20 20 54 68 65 20 4d 45 4d 53 59 53 35 20 6d 6f    The MEMSYS5 mo
acf0: 64 75 6c 65 20 72 6f 75 6e 64 73 20 61 6c 6c 20  dule rounds all 
ad00: 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 75 70 20 74  allocations up t
ad10: 6f 20 74 68 65 20 6e 65 78 74 20 70 6f 77 65 72  o the next power
ad20: 0a 20 20 6f 66 20 74 77 6f 20 61 6e 64 20 75 73  .  of two and us
ad30: 65 73 20 61 20 66 69 72 73 74 2d 66 69 74 2c 20  es a first-fit, 
ad40: 62 75 64 64 79 2d 61 6c 6c 6f 63 61 74 6f 72 20  buddy-allocator 
ad50: 61 6c 67 6f 72 69 74 68 6d 0a 20 20 74 68 61 74  algorithm.  that
ad60: 20 70 72 6f 76 69 64 65 73 20 73 74 72 6f 6e 67   provides strong
ad70: 20 67 75 61 72 61 6e 74 65 65 73 20 61 67 61 69   guarantees agai
ad80: 6e 73 74 20 66 72 61 67 6d 65 6e 74 61 74 69 6f  nst fragmentatio
ad90: 6e 20 61 6e 64 20 62 72 65 61 6b 64 6f 77 6e 0a  n and breakdown.
ada0: 20 20 73 75 62 6a 65 63 74 20 74 6f 20 63 65 72    subject to cer
adb0: 74 61 69 6e 20 6f 70 65 72 61 74 69 6e 67 20 63  tain operating c
adc0: 6f 6e 73 74 72 61 69 6e 74 73 2e 0a 7d 0a 0a 43  onstraints..}..C
add0: 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53  OMPILE_OPTION {S
ade0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4e 55 4c  QLITE_ENABLE_NUL
adf0: 4c 5f 54 52 49 4d 7d 20 7b 0a 20 20 54 68 69 73  L_TRIM} {.  This
ae00: 20 6f 70 74 69 6f 6e 20 65 6e 61 62 6c 65 73 20   option enables 
ae10: 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20  an optimization 
ae20: 74 68 61 74 20 6f 6d 69 74 73 20 4e 55 4c 4c 20  that omits NULL 
ae30: 63 6f 6c 75 6d 6e 73 20 61 74 0a 20 20 74 68 65  columns at.  the
ae40: 20 65 6e 64 73 20 6f 66 20 72 6f 77 73 2c 20 66   ends of rows, f
ae50: 6f 72 20 61 20 73 70 61 63 65 20 73 61 76 69 6e  or a space savin
ae60: 67 73 20 6f 6e 20 64 69 73 6b 2e 0a 20 20 3c 70  gs on disk..  <p
ae70: 3e 0a 20 20 44 61 74 61 62 61 73 65 73 20 67 65  >.  Databases ge
ae80: 6e 65 72 61 74 65 64 20 77 69 74 68 20 74 68 69  nerated with thi
ae90: 73 20 6f 70 74 69 6f 6e 20 65 6e 61 62 6c 65 64  s option enabled
aea0: 20 61 72 65 20 6e 6f 74 20 72 65 61 64 61 62 6c   are not readabl
aeb0: 65 0a 20 20 62 79 20 53 51 4c 69 74 65 20 76 65  e.  by SQLite ve
aec0: 72 73 69 6f 6e 20 33 2e 31 2e 36 20 28 5b 64 61  rsion 3.1.6 ([da
aed0: 74 65 6f 66 3a 33 2e 31 2e 36 5d 29 20 61 6e 64  teof:3.1.6]) and
aee0: 20 65 61 72 6c 69 65 72 2e 20 20 41 6c 73 6f 2c   earlier.  Also,
aef0: 0a 20 20 64 61 74 61 62 61 73 65 73 20 67 65 6e  .  databases gen
af00: 65 72 61 74 65 64 20 77 69 74 68 20 74 68 69 73  erated with this
af10: 20 6f 70 74 69 6f 6e 20 65 6e 61 62 6c 65 64 20   option enabled 
af20: 61 72 65 20 70 72 6f 6e 65 20 74 6f 0a 20 20 74  are prone to.  t
af30: 72 69 67 67 65 72 69 6e 67 20 74 68 65 0a 20 20  riggering the.  
af40: 5b 68 74 74 70 73 3a 2f 2f 77 77 77 2e 73 71 6c  [https://www.sql
af50: 69 74 65 2e 6f 72 67 2f 73 72 63 2f 69 6e 66 6f  ite.org/src/info
af60: 2f 65 36 65 39 36 32 64 36 62 30 66 30 36 66 34  /e6e962d6b0f06f4
af70: 36 65 7c 65 36 65 39 36 32 64 36 62 30 66 30 36  6e|e6e962d6b0f06
af80: 66 34 36 5d 0a 20 20 62 75 67 20 69 6e 20 74 68  f46].  bug in th
af90: 65 20 5b 73 71 6c 69 74 65 33 5f 62 6c 6f 62 5f  e [sqlite3_blob_
afa0: 72 65 6f 70 65 6e 28 29 5d 20 69 6e 74 65 72 66  reopen()] interf
afb0: 61 63 65 2e 20 20 46 6f 72 20 74 68 6f 73 65 20  ace.  For those 
afc0: 72 65 61 73 6f 6e 73 2c 0a 20 20 74 68 69 73 20  reasons,.  this 
afd0: 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 69 73 20  optimization is 
afe0: 64 69 73 61 62 6c 65 64 20 62 79 20 64 65 66 61  disabled by defa
aff0: 75 6c 74 2e 20 20 48 6f 77 65 76 65 72 2c 20 74  ult.  However, t
b000: 68 69 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  his optimization
b010: 0a 20 20 6d 61 79 20 62 65 20 65 6e 61 62 6c 65  .  may be enable
b020: 64 20 62 79 20 64 65 66 61 75 6c 74 20 69 6e 20  d by default in 
b030: 61 20 66 75 74 75 72 65 20 72 65 6c 65 61 73 65  a future release
b040: 20 6f 66 20 53 51 4c 69 74 65 2e 0a 7d 0a 0a 43   of SQLite..}..C
b050: 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53  OMPILE_OPTION {S
b060: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4f 46 46  QLITE_ENABLE_OFF
b070: 53 45 54 5f 53 51 4c 5f 46 55 4e 43 7d 20 7b 0a  SET_SQL_FUNC} {.
b080: 20 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 65 6e    This option en
b090: 61 62 6c 65 73 20 73 75 70 70 6f 72 74 20 66 6f  ables support fo
b0a0: 72 20 74 68 65 20 5b 73 71 6c 69 74 65 5f 6f 66  r the [sqlite_of
b0b0: 66 73 65 74 28 58 29 5d 20 53 51 4c 20 66 75 6e  fset(X)] SQL fun
b0c0: 63 74 69 6f 6e 2e 0a 20 20 3c 70 3e 0a 20 20 54  ction..  <p>.  T
b0d0: 68 65 20 5b 73 71 6c 69 74 65 5f 6f 66 66 73 65  he [sqlite_offse
b0e0: 74 28 58 29 5d 20 53 51 4c 20 66 75 6e 63 74 69  t(X)] SQL functi
b0f0: 6f 6e 20 72 65 71 75 69 72 65 73 20 61 20 6e 65  on requires a ne
b100: 77 20 69 6e 74 65 72 66 61 63 65 20 6f 6e 20 74  w interface on t
b110: 68 65 0a 20 20 42 2d 74 72 65 65 20 73 74 6f 72  he.  B-tree stor
b120: 61 67 65 20 65 6e 67 69 6e 65 2c 20 61 20 6e 65  age engine, a ne
b130: 77 20 6f 70 63 6f 64 65 20 69 6e 20 74 68 65 20  w opcode in the 
b140: 5b 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65  [virtual machine
b150: 5d 20 74 68 61 74 0a 20 20 72 75 6e 73 20 53 51  ] that.  runs SQ
b160: 4c 20 73 74 61 74 65 6d 65 6e 74 73 2c 20 61 6e  L statements, an
b170: 64 20 61 20 6e 65 77 20 63 6f 6e 64 69 74 69 6f  d a new conditio
b180: 6e 61 6c 20 69 6e 20 61 20 63 72 69 74 69 63 61  nal in a critica
b190: 6c 20 70 61 74 68 20 6f 66 20 74 68 65 0a 20 20  l path of the.  
b1a0: 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 2e 20  code generator. 
b1b0: 20 54 6f 20 61 76 6f 69 64 20 74 68 61 74 20 6f   To avoid that o
b1c0: 76 65 72 68 65 61 64 20 69 6e 20 61 70 70 6c 69  verhead in appli
b1d0: 63 61 74 69 6f 6e 73 20 74 68 61 74 20 64 6f 20  cations that do 
b1e0: 6e 6f 74 0a 20 20 6e 65 65 64 20 74 68 65 20 75  not.  need the u
b1f0: 74 69 6c 69 74 79 20 6f 66 20 73 71 6c 69 74 65  tility of sqlite
b200: 5f 6f 66 66 73 65 74 28 58 29 2c 20 74 68 65 20  _offset(X), the 
b210: 66 75 6e 63 74 69 6f 6e 20 69 73 20 64 69 73 61  function is disa
b220: 62 6c 65 64 20 62 79 0a 20 20 64 65 66 61 75 6c  bled by.  defaul
b230: 74 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50  t..}..COMPILE_OP
b240: 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 45 4e 41  TION {SQLITE_ENA
b250: 42 4c 45 5f 50 52 45 55 50 44 41 54 45 5f 48 4f  BLE_PREUPDATE_HO
b260: 4f 4b 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70 74  OK} {.  This opt
b270: 69 6f 6e 20 65 6e 61 62 6c 65 73 20 0a 20 20 5b  ion enables .  [
b280: 73 71 6c 69 74 65 33 5f 70 72 65 75 70 64 61 74  sqlite3_preupdat
b290: 65 5f 68 6f 6f 6b 7c 73 65 76 65 72 61 6c 20 6e  e_hook|several n
b2a0: 65 77 20 41 50 49 73 5d 20 74 68 61 74 20 70 72  ew APIs] that pr
b2b0: 6f 76 69 64 65 20 63 61 6c 6c 62 61 63 6b 73 0a  ovide callbacks.
b2c0: 20 20 70 72 69 6f 72 20 74 6f 20 61 6e 79 20 63    prior to any c
b2d0: 68 61 6e 67 65 20 74 6f 20 61 20 5b 72 6f 77 69  hange to a [rowi
b2e0: 64 20 74 61 62 6c 65 5d 2e 20 20 54 68 65 20 63  d table].  The c
b2f0: 61 6c 6c 62 61 63 6b 73 20 63 61 6e 20 62 65 20  allbacks can be 
b300: 75 73 65 64 0a 20 20 74 6f 20 72 65 63 6f 72 64  used.  to record
b310: 20 74 68 65 20 73 74 61 74 65 20 6f 66 20 74 68   the state of th
b320: 65 20 72 6f 77 20 62 65 66 6f 72 65 20 74 68 65  e row before the
b330: 20 63 68 61 6e 67 65 20 6f 63 63 75 72 73 2e 0a   change occurs..
b340: 20 20 3c 70 3e 54 68 65 20 61 63 74 69 6f 6e 20    <p>The action 
b350: 6f 66 20 74 68 65 20 70 72 65 75 70 64 61 74 65  of the preupdate
b360: 20 68 6f 6f 6b 20 69 73 20 73 69 6d 69 6c 61 72   hook is similar
b370: 20 74 6f 20 74 68 65 0a 20 20 5b 73 71 6c 69 74   to the.  [sqlit
b380: 65 33 5f 75 70 64 61 74 65 5f 68 6f 6f 6b 7c 75  e3_update_hook|u
b390: 70 64 61 74 65 20 68 6f 6f 6b 5d 20 65 78 63 65  pdate hook] exce
b3a0: 70 74 20 74 68 61 74 20 74 68 65 20 63 61 6c 6c  pt that the call
b3b0: 62 61 63 6b 20 69 73 0a 20 20 69 6e 76 6f 6b 65  back is.  invoke
b3c0: 64 20 62 65 66 6f 72 65 20 74 68 65 20 63 68 61  d before the cha
b3d0: 6e 67 65 2c 20 6e 6f 74 20 61 66 74 65 72 77 61  nge, not afterwa
b3e0: 72 64 73 2c 20 61 6e 64 20 74 68 65 20 70 72 65  rds, and the pre
b3f0: 75 70 64 61 74 65 0a 20 20 68 6f 6f 6b 20 69 6e  update.  hook in
b400: 74 65 72 66 61 63 65 73 20 61 72 65 20 6f 6d 69  terfaces are omi
b410: 74 74 65 64 20 75 6e 6c 65 73 73 20 74 68 69 73  tted unless this
b420: 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70   compile-time op
b430: 74 69 6f 6e 20 69 73 0a 20 20 75 73 65 64 2e 0a  tion is.  used..
b440: 20 20 3c 70 3e 54 68 65 20 70 72 65 75 70 64 61    <p>The preupda
b450: 74 65 20 68 6f 6f 6b 20 69 6e 74 65 72 66 61 63  te hook interfac
b460: 65 73 20 77 65 72 65 20 6f 72 69 67 69 6e 61 6c  es were original
b470: 6c 79 20 61 64 64 65 64 20 74 6f 0a 20 20 73 75  ly added to.  su
b480: 70 70 6f 72 74 20 74 68 65 20 5b 73 65 73 73 69  pport the [sessi
b490: 6f 6e 5d 20 65 78 74 65 6e 73 69 6f 6e 2e 0a 7d  on] extension..}
b4a0: 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e  ..COMPILE_OPTION
b4b0: 20 7b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f   {SQLITE_ENABLE_
b4c0: 51 50 53 47 7d 20 7b 0a 20 20 54 68 69 73 20 6f  QPSG} {.  This o
b4d0: 70 74 69 6f 6e 20 63 61 75 73 65 73 20 74 68 65  ption causes the
b4e0: 20 5b 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 20   [query planner 
b4f0: 73 74 61 62 69 6c 69 74 79 20 67 75 61 72 61 6e  stability guaran
b500: 74 65 65 5d 20 28 51 50 53 47 29 20 74 6f 0a 20  tee] (QPSG) to. 
b510: 20 62 65 20 6f 6e 20 62 79 20 64 65 66 61 75 6c   be on by defaul
b520: 74 2e 20 20 4e 6f 72 6d 61 6c 6c 79 20 74 68 65  t.  Normally the
b530: 20 51 50 53 47 20 69 73 20 6f 66 66 20 61 6e 64   QPSG is off and
b540: 20 6d 75 73 74 20 62 65 20 61 63 74 69 76 61 74   must be activat
b550: 65 64 0a 20 20 61 74 20 72 75 6e 2d 74 69 6d 65  ed.  at run-time
b560: 20 75 73 69 6e 67 20 74 68 65 20 5b 53 51 4c 49   using the [SQLI
b570: 54 45 5f 44 42 43 4f 4e 46 49 47 5f 45 4e 41 42  TE_DBCONFIG_ENAB
b580: 4c 45 5f 51 50 53 47 5d 20 6f 70 74 69 6f 6e 20  LE_QPSG] option 
b590: 74 6f 20 74 68 65 0a 20 20 5b 73 71 6c 69 74 65  to the.  [sqlite
b5a0: 33 5f 64 62 5f 63 6f 6e 66 69 67 28 29 5d 20 69  3_db_config()] i
b5b0: 6e 74 65 72 66 61 63 65 2e 0a 7d 0a 0a 43 4f 4d  nterface..}..COM
b5c0: 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c  PILE_OPTION {SQL
b5d0: 49 54 45 5f 45 4e 41 42 4c 45 5f 52 42 55 7d 20  ITE_ENABLE_RBU} 
b5e0: 7b 0a 20 20 45 6e 61 62 6c 65 20 74 68 65 20 63  {.  Enable the c
b5f0: 6f 64 65 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e  ode the implemen
b600: 74 73 20 74 68 65 20 5b 52 42 55 20 65 78 74 65  ts the [RBU exte
b610: 6e 73 69 6f 6e 5d 2e 0a 7d 0a 0a 43 4f 4d 50 49  nsion]..}..COMPI
b620: 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54  LE_OPTION {SQLIT
b630: 45 5f 45 4e 41 42 4c 45 5f 52 54 52 45 45 7d 20  E_ENABLE_RTREE} 
b640: 7b 0a 20 20 54 68 69 73 20 6f 70 74 69 6f 6e 20  {.  This option 
b650: 63 61 75 73 65 73 20 53 51 4c 69 74 65 20 74 6f  causes SQLite to
b660: 20 69 6e 63 6c 75 64 65 20 73 75 70 70 6f 72 74   include support
b670: 20 66 6f 72 20 74 68 65 0a 20 20 5b 72 74 72 65   for the.  [rtre
b680: 65 20 7c 20 52 2a 54 72 65 65 20 69 6e 64 65 78  e | R*Tree index
b690: 20 65 78 74 65 6e 73 69 6f 6e 5d 2e 0a 7d 0a 0a   extension]..}..
b6a0: 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b  COMPILE_OPTION {
b6b0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 45  SQLITE_ENABLE_SE
b6c0: 53 53 49 4f 4e 7d 20 7b 0a 20 20 54 68 69 73 20  SSION} {.  This 
b6d0: 6f 70 74 69 6f 6e 20 65 6e 61 62 6c 65 73 20 74  option enables t
b6e0: 68 65 20 5b 73 65 73 73 69 6f 6e 20 65 78 74 65  he [session exte
b6f0: 6e 73 69 6f 6e 5d 2e 0a 7d 0a 0a 43 4f 4d 50 49  nsion]..}..COMPI
b700: 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54  LE_OPTION {SQLIT
b710: 45 5f 45 4e 41 42 4c 45 5f 53 4f 52 54 45 52 5f  E_ENABLE_SORTER_
b720: 52 45 46 45 52 45 4e 43 45 53 7d 20 7b 0a 20 20  REFERENCES} {.  
b730: 54 68 69 73 20 6f 70 74 69 6f 6e 20 61 63 74 69  This option acti
b740: 76 61 74 65 73 20 61 6e 20 6f 70 74 69 6d 69 7a  vates an optimiz
b750: 61 74 69 6f 6e 20 74 68 61 74 20 72 65 64 75 63  ation that reduc
b760: 65 73 20 74 68 65 20 6d 65 6d 6f 72 79 20 72 65  es the memory re
b770: 71 75 69 72 65 64 0a 20 20 62 79 20 74 68 65 20  quired.  by the 
b780: 73 6f 72 74 65 72 20 61 74 20 74 68 65 20 63 6f  sorter at the co
b790: 73 74 20 6f 66 20 64 6f 69 6e 67 20 61 64 64 69  st of doing addi
b7a0: 74 69 6f 6e 61 6c 20 42 2d 74 72 65 65 20 6c 6f  tional B-tree lo
b7b0: 6f 6b 75 70 73 20 61 66 74 65 72 0a 20 20 74 68  okups after.  th
b7c0: 65 20 73 6f 72 74 20 68 61 73 20 6f 63 63 75 72  e sort has occur
b7d0: 72 65 64 2e 0a 20 20 3c 70 3e 0a 20 20 54 68 65  red..  <p>.  The
b7e0: 20 64 65 66 61 75 6c 74 20 73 6f 72 74 69 6e 67   default sorting
b7f0: 20 70 72 6f 63 65 64 75 72 65 20 69 73 20 74 6f   procedure is to
b800: 20 67 61 74 68 65 72 20 61 6c 6c 20 69 6e 66 6f   gather all info
b810: 72 6d 61 74 69 6f 6e 20 74 68 61 74 20 77 69 6c  rmation that wil
b820: 6c 0a 20 20 75 6c 74 69 6d 61 74 65 6c 79 20 62  l.  ultimately b
b830: 65 20 6f 75 74 70 75 74 20 69 6e 74 6f 20 61 20  e output into a 
b840: 22 72 65 63 6f 72 64 22 20 61 6e 64 20 70 61 73  "record" and pas
b850: 73 20 74 68 61 74 20 63 6f 6d 70 6c 65 74 65 20  s that complete 
b860: 72 65 63 6f 72 64 0a 20 20 74 6f 20 74 68 65 20  record.  to the 
b870: 73 6f 72 74 65 72 2e 20 20 42 75 74 20 69 6e 20  sorter.  But in 
b880: 73 6f 6d 65 20 63 61 73 65 73 2c 20 66 6f 72 20  some cases, for 
b890: 65 78 61 6d 70 6c 65 20 69 66 20 73 6f 6d 65 20  example if some 
b8a0: 6f 66 20 74 68 65 20 6f 75 74 70 75 74 0a 20 20  of the output.  
b8b0: 63 6f 6c 75 6d 6e 73 20 63 6f 6e 73 69 73 74 73  columns consists
b8c0: 20 6f 66 20 6c 61 72 67 65 20 42 4c 4f 42 20 76   of large BLOB v
b8d0: 61 6c 75 65 73 2c 20 74 68 65 20 73 69 7a 65 20  alues, the size 
b8e0: 6f 66 20 74 68 65 20 65 61 63 68 20 72 65 63 6f  of the each reco
b8f0: 72 64 0a 20 20 63 61 6e 20 62 65 20 6c 61 72 67  rd.  can be larg
b900: 65 2c 20 77 68 69 63 68 20 6d 65 61 6e 73 20 74  e, which means t
b910: 68 61 74 20 74 68 65 20 73 6f 72 74 65 72 20 68  hat the sorter h
b920: 61 73 20 74 6f 20 65 69 74 68 65 72 20 75 73 65  as to either use
b930: 20 6d 6f 72 65 20 6d 65 6d 6f 72 79 2c 0a 20 20   more memory,.  
b940: 61 6e 64 2f 6f 72 20 77 72 69 74 65 20 6d 6f 72  and/or write mor
b950: 65 20 63 6f 6e 74 65 6e 74 20 74 6f 20 74 65 6d  e content to tem
b960: 70 6f 72 61 72 79 20 73 74 6f 72 61 67 65 2e 0a  porary storage..
b970: 20 20 3c 70 3e 0a 20 20 57 68 65 6e 20 53 51 4c    <p>.  When SQL
b980: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 4f 52 54 45  ITE_ENABLE_SORTE
b990: 52 5f 50 52 45 46 45 52 45 4e 43 45 53 20 69 73  R_PREFERENCES is
b9a0: 20 65 6e 61 62 6c 65 64 2c 20 74 68 65 20 72 65   enabled, the re
b9b0: 63 6f 72 64 73 20 70 61 73 73 65 64 20 74 6f 0a  cords passed to.
b9c0: 20 20 74 68 65 20 73 6f 72 74 65 72 20 6f 66 74    the sorter oft
b9d0: 65 6e 20 63 6f 6e 74 61 69 6e 20 6f 6e 6c 79 20  en contain only 
b9e0: 61 20 5b 52 4f 57 49 44 5d 20 76 61 6c 75 65 2e  a [ROWID] value.
b9f0: 20 20 53 75 63 68 20 72 65 63 6f 72 64 73 20 61    Such records a
ba00: 72 65 20 6d 75 63 68 0a 20 20 73 6d 61 6c 6c 65  re much.  smalle
ba10: 72 2e 20 20 54 68 69 73 20 6d 65 61 6e 73 20 74  r.  This means t
ba20: 68 65 20 73 6f 72 74 65 72 20 68 61 73 20 6d 75  he sorter has mu
ba30: 63 68 20 6c 65 73 73 20 22 70 61 79 6c 6f 61 64  ch less "payload
ba40: 22 20 74 6f 20 64 65 61 6c 20 77 69 74 68 20 61  " to deal with a
ba50: 6e 64 0a 20 20 63 61 6e 20 72 75 6e 20 66 61 73  nd.  can run fas
ba60: 74 65 72 2e 20 20 41 66 74 65 72 20 73 6f 72 74  ter.  After sort
ba70: 69 6e 67 20 68 61 73 20 6f 63 63 75 72 72 65 64  ing has occurred
ba80: 2c 20 74 68 65 20 52 4f 57 49 44 20 69 73 20 75  , the ROWID is u
ba90: 73 65 64 20 74 6f 20 6c 6f 6f 6b 20 75 70 20 0a  sed to look up .
baa0: 20 20 74 68 65 20 6f 75 74 70 75 74 20 63 6f 6c    the output col
bab0: 75 6d 6e 20 76 61 6c 75 65 73 20 69 6e 20 74 68  umn values in th
bac0: 65 20 6f 72 69 67 69 6e 61 6c 20 74 61 62 6c 65  e original table
bad0: 2e 20 20 54 68 61 74 20 72 65 71 75 69 72 65 73  .  That requires
bae0: 20 61 6e 6f 74 68 65 72 0a 20 20 73 65 61 72 63   another.  searc
baf0: 68 20 69 6e 74 6f 20 74 68 65 20 74 61 62 6c 65  h into the table
bb00: 2c 20 61 6e 64 20 63 6f 75 6c 64 20 70 6f 74 65  , and could pote
bb10: 6e 74 69 61 6c 6c 79 20 72 65 73 75 6c 74 20 69  ntially result i
bb20: 6e 20 61 20 73 6c 6f 77 64 6f 77 6e 2e 20 20 4f  n a slowdown.  O
bb30: 72 2c 0a 20 20 69 74 20 6d 69 67 68 74 20 62 65  r,.  it might be
bb40: 20 61 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 77   a performance w
bb50: 69 6e 2c 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e  in, depending on
bb60: 20 68 6f 77 20 6c 61 72 67 65 20 74 68 65 20 76   how large the v
bb70: 61 6c 75 65 73 20 61 72 65 2e 0a 20 20 3c 70 3e  alues are..  <p>
bb80: 0a 20 20 45 76 65 6e 20 77 68 65 6e 20 74 68 65  .  Even when the
bb90: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
bba0: 4f 52 54 45 52 5f 50 52 45 46 45 52 45 4e 43 45  ORTER_PREFERENCE
bbb0: 53 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f  S compile-time o
bbc0: 70 74 69 6f 6e 20 69 73 20 6f 6e 2c 0a 20 20 73  ption is on,.  s
bbd0: 6f 72 74 65 72 20 72 65 66 65 72 65 6e 63 65 73  orter references
bbe0: 20 61 72 65 20 73 74 69 6c 6c 20 64 69 73 61 62   are still disab
bbf0: 6c 65 64 20 62 79 20 64 65 66 61 75 6c 74 2e 20  led by default. 
bc00: 20 54 6f 20 75 73 65 20 73 6f 72 74 65 72 20 72   To use sorter r
bc10: 65 66 65 72 65 6e 63 65 73 2c 0a 20 20 74 68 65  eferences,.  the
bc20: 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 6d 75 73   application mus
bc30: 74 20 73 65 74 20 61 20 73 6f 72 74 65 72 20 72  t set a sorter r
bc40: 65 66 65 72 65 6e 63 65 20 73 69 7a 65 20 74 68  eference size th
bc50: 72 65 73 68 6f 6c 64 20 75 73 69 6e 67 20 74 68  reshold using th
bc60: 65 0a 20 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6e  e.  [sqlite3_con
bc70: 66 69 67 5d 28 5b 53 51 4c 49 54 45 5f 43 4f 4e  fig]([SQLITE_CON
bc80: 46 49 47 5f 53 4f 52 54 45 52 52 45 46 5f 53 49  FIG_SORTERREF_SI
bc90: 5a 45 5d 29 20 69 6e 74 65 72 66 61 63 65 20 61  ZE]) interface a
bca0: 74 20 73 74 61 72 74 2d 74 69 6d 65 2e 0a 20 20  t start-time..  
bcb0: 3c 70 3e 0a 20 20 42 65 63 61 75 73 65 20 74 68  <p>.  Because th
bcc0: 65 20 53 51 4c 69 74 65 20 64 65 76 65 6c 6f 70  e SQLite develop
bcd0: 65 72 73 20 64 6f 20 6e 6f 74 20 6b 6e 6f 77 20  ers do not know 
bce0: 77 68 65 74 68 65 72 20 74 68 65 20 0a 20 20 53  whether the .  S
bcf0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 4f 52  QLITE_ENABLE_SOR
bd00: 54 45 52 5f 50 45 52 46 45 52 45 4e 43 45 53 20  TER_PERFERENCES 
bd10: 6f 70 74 69 6f 6e 20 77 69 6c 6c 20 68 65 6c 70  option will help
bd20: 20 6f 72 20 68 75 72 74 20 70 65 72 66 6f 72 6d   or hurt perform
bd30: 61 6e 63 65 2c 0a 20 20 69 74 20 69 73 20 64 69  ance,.  it is di
bd40: 73 61 62 6c 65 64 20 62 79 20 64 65 66 61 75 6c  sabled by defaul
bd50: 74 20 61 74 20 74 68 69 73 20 74 69 6d 65 20 28  t at this time (
bd60: 32 30 31 38 2d 30 35 2d 30 34 29 2e 20 20 49 74  2018-05-04).  It
bd70: 20 6d 69 67 68 74 20 62 65 20 65 6e 61 62 6c 65   might be enable
bd80: 64 0a 20 20 62 79 20 64 65 66 61 75 6c 74 20 69  d.  by default i
bd90: 6e 20 73 6f 6d 65 20 66 75 74 75 72 65 20 72 65  n some future re
bda0: 6c 65 61 73 65 2c 20 64 65 70 65 6e 64 69 6e 67  lease, depending
bdb0: 20 6f 6e 20 77 68 61 74 20 69 73 20 6c 65 61 72   on what is lear
bdc0: 6e 65 64 20 61 62 6f 75 74 20 69 74 73 0a 20 20  ned about its.  
bdd0: 69 6e 70 61 63 74 20 6f 6e 20 70 65 72 66 6f 72  inpact on perfor
bde0: 6d 61 6e 63 65 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c  mance..}..COMPIL
bdf0: 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45  E_OPTION {SQLITE
be00: 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53 43 41  _ENABLE_STMT_SCA
be10: 4e 53 54 41 54 55 53 7d 20 7b 0a 20 20 54 68 69  NSTATUS} {.  Thi
be20: 73 20 6f 70 74 69 6f 6e 20 65 6e 61 62 6c 65 73  s option enables
be30: 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 73 74   the [sqlite3_st
be40: 6d 74 5f 73 63 61 6e 73 74 61 74 75 73 28 29 5d  mt_scanstatus()]
be50: 20 69 6e 74 65 72 66 61 63 65 2e 20 20 54 68 65   interface.  The
be60: 0a 20 20 5b 73 71 6c 69 74 65 33 5f 73 74 6d 74  .  [sqlite3_stmt
be70: 5f 73 63 61 6e 73 74 61 74 75 73 28 29 5d 20 69  _scanstatus()] i
be80: 6e 74 65 72 66 61 63 65 20 69 73 20 6e 6f 72 6d  nterface is norm
be90: 61 6c 6c 79 20 6f 6d 69 74 74 65 64 20 66 72 6f  ally omitted fro
bea0: 6d 20 74 68 65 20 62 75 69 6c 64 0a 20 20 62 65  m the build.  be
beb0: 63 61 75 73 65 20 69 74 20 69 6d 70 6f 73 65 73  cause it imposes
bec0: 20 61 20 73 6d 61 6c 6c 20 70 65 72 66 6f 72 6d   a small perform
bed0: 61 6e 63 65 20 70 65 6e 61 6c 74 79 2c 20 65 76  ance penalty, ev
bee0: 65 6e 20 6f 6e 20 73 74 61 74 65 6d 65 6e 74 73  en on statements
bef0: 20 74 68 61 74 0a 20 20 64 6f 20 6e 6f 74 20 75   that.  do not u
bf00: 73 65 20 74 68 65 20 66 65 61 74 75 72 65 2e 0a  se the feature..
bf10: 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f  }..COMPILE_OPTIO
bf20: 4e 20 7b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  N {SQLITE_ENABLE
bf30: 5f 53 54 4d 54 56 54 41 42 7d 20 7b 0a 20 20 54  _STMTVTAB} {.  T
bf40: 68 69 73 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  his compile-time
bf50: 20 6f 70 74 69 6f 6e 20 65 6e 61 62 6c 65 73 20   option enables 
bf60: 74 68 65 20 5b 53 51 4c 49 54 45 5f 53 54 4d 54  the [SQLITE_STMT
bf70: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 5d 20   virtual table] 
bf80: 6c 6f 67 69 63 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c  logic..}..COMPIL
bf90: 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45  E_OPTION {SQLITE
bfa0: 5f 52 54 52 45 45 5f 49 4e 54 5f 4f 4e 4c 59 7d  _RTREE_INT_ONLY}
bfb0: 20 7b 0a 20 20 54 68 69 73 20 63 6f 6d 70 69 6c   {.  This compil
bfc0: 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73  e-time option is
bfd0: 20 64 65 70 72 65 63 61 74 65 64 20 61 6e 64 20   deprecated and 
bfe0: 75 6e 74 65 73 74 65 64 2e 0a 7d 0a 0a 43 4f 4d  untested..}..COM
bff0: 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c  PILE_OPTION {SQL
c000: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 51 4c 4c 4f  ITE_ENABLE_SQLLO
c010: 47 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70 74 69  G} {.  This opti
c020: 6f 6e 20 65 6e 61 62 6c 65 73 20 65 78 74 72 61  on enables extra
c030: 20 63 6f 64 65 20 28 65 73 70 65 63 69 61 6c 6c   code (especiall
c040: 79 20 74 68 65 20 5b 53 51 4c 49 54 45 5f 43 4f  y the [SQLITE_CO
c050: 4e 46 49 47 5f 53 51 4c 4c 4f 47 5d 0a 20 20 6f  NFIG_SQLLOG].  o
c060: 70 74 69 6f 6e 20 74 6f 20 5b 73 71 6c 69 74 65  ption to [sqlite
c070: 33 5f 63 6f 6e 66 69 67 28 29 5d 29 20 74 68 61  3_config()]) tha
c080: 74 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f  t can be used to
c090: 20 63 72 65 61 74 65 20 6c 6f 67 73 20 6f 66 20   create logs of 
c0a0: 61 6c 6c 0a 20 20 53 51 4c 69 74 65 20 70 72 6f  all.  SQLite pro
c0b0: 63 65 73 73 69 6e 67 20 70 65 72 66 6f 72 6d 65  cessing performe
c0c0: 64 20 62 79 20 61 6e 20 61 70 70 6c 69 63 61 74  d by an applicat
c0d0: 69 6f 6e 2e 20 20 54 68 65 73 65 20 6c 6f 67 73  ion.  These logs
c0e0: 20 63 61 6e 20 62 65 20 75 73 65 66 75 6c 0a 20   can be useful. 
c0f0: 20 69 6e 20 64 6f 69 6e 67 20 6f 66 66 2d 6c 69   in doing off-li
c100: 6e 65 20 61 6e 61 6c 79 73 69 73 20 6f 66 20 74  ne analysis of t
c110: 68 65 20 62 65 68 61 76 69 6f 72 20 6f 66 20 61  he behavior of a
c120: 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e 2c 20 61  n application, a
c130: 6e 64 20 65 73 70 65 63 69 61 6c 6c 79 0a 20 20  nd especially.  
c140: 66 6f 72 20 70 65 72 66 6f 72 6d 61 6e 63 65 20  for performance 
c150: 61 6e 61 6c 79 73 69 73 2e 20 20 49 6e 20 6f 72  analysis.  In or
c160: 64 65 72 20 66 6f 72 20 74 68 65 20 53 51 4c 49  der for the SQLI
c170: 54 45 5f 45 4e 41 42 4c 45 5f 53 51 4c 4c 4f 47  TE_ENABLE_SQLLOG
c180: 20 6f 70 74 69 6f 6e 20 74 6f 20 0a 20 20 62 65   option to .  be
c190: 20 75 73 65 66 75 6c 2c 20 73 6f 6d 65 20 65 78   useful, some ex
c1a0: 74 72 61 20 63 6f 64 65 20 69 73 20 72 65 71 75  tra code is requ
c1b0: 69 72 65 64 2e 20 20 54 68 65 20 0a 20 20 3c 61  ired.  The .  <a
c1c0: 20 68 72 65 66 3d 22 68 74 74 70 3a 2f 2f 77 77   href="http://ww
c1d0: 77 2e 73 71 6c 69 74 65 2e 6f 72 67 2f 73 72 63  w.sqlite.org/src
c1e0: 2f 64 6f 63 2f 74 72 75 6e 6b 2f 73 72 63 2f 74  /doc/trunk/src/t
c1f0: 65 73 74 5f 73 71 6c 6c 6f 67 2e 63 22 3e 22 74  est_sqllog.c">"t
c200: 65 73 74 5f 73 71 6c 6c 6f 67 2e 63 22 3c 2f 61  est_sqllog.c"</a
c210: 3e 0a 20 20 73 6f 75 72 63 65 20 63 6f 64 65 0a  >.  source code.
c220: 20 20 66 69 6c 65 20 69 6e 20 74 68 65 20 53 51    file in the SQ
c230: 4c 69 74 65 20 73 6f 75 72 63 65 20 74 72 65 65  Lite source tree
c240: 20 69 73 20 61 20 77 6f 72 6b 69 6e 67 20 65 78   is a working ex
c250: 61 6d 70 6c 65 20 6f 66 20 74 68 65 20 72 65 71  ample of the req
c260: 75 69 72 65 64 20 65 78 74 72 61 0a 20 20 63 6f  uired extra.  co
c270: 64 65 2e 20 20 4f 6e 20 75 6e 69 78 20 61 6e 64  de.  On unix and
c280: 20 77 69 6e 64 6f 77 73 20 73 79 73 74 65 6d 73   windows systems
c290: 2c 20 61 20 64 65 76 65 6c 6f 70 65 72 20 63 61  , a developer ca
c2a0: 6e 20 61 70 70 65 6e 64 20 74 68 65 20 74 65 78  n append the tex
c2b0: 74 20 6f 66 20 74 68 65 0a 20 20 22 74 65 73 74  t of the.  "test
c2c0: 5f 73 71 6c 6c 6f 67 2e 63 22 20 73 6f 75 72 63  _sqllog.c" sourc
c2d0: 65 20 63 6f 64 65 20 66 69 6c 65 20 74 6f 20 74  e code file to t
c2e0: 68 65 20 65 6e 64 20 6f 66 20 61 6e 20 22 73 71  he end of an "sq
c2f0: 6c 69 74 65 33 2e 63 22 20 61 6d 61 6c 67 61 6d  lite3.c" amalgam
c300: 61 74 69 6f 6e 2c 0a 20 20 72 65 63 6f 6d 70 69  ation,.  recompi
c310: 6c 65 20 74 68 65 20 61 70 70 6c 69 63 61 74 69  le the applicati
c320: 6f 6e 20 75 73 69 6e 67 20 74 68 65 20 2d 44 53  on using the -DS
c330: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 51 4c  QLITE_ENABLE_SQL
c340: 4c 4f 47 20 6f 70 74 69 6f 6e 2c 20 74 68 65 6e  LOG option, then
c350: 20 0a 20 20 63 6f 6e 74 72 6f 6c 20 6c 6f 67 67   .  control logg
c360: 69 6e 67 20 75 73 69 6e 67 20 65 6e 76 69 72 6f  ing using enviro
c370: 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c 65 73 2e  nment variables.
c380: 20 20 53 65 65 20 74 68 65 20 68 65 61 64 65 72    See the header
c390: 20 63 6f 6d 6d 65 6e 74 20 6f 6e 20 0a 20 20 74   comment on .  t
c3a0: 68 65 20 22 74 65 73 74 5f 73 71 6c 6c 6f 67 2e  he "test_sqllog.
c3b0: 63 22 20 73 6f 75 72 63 65 20 66 69 6c 65 20 66  c" source file f
c3c0: 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 64 65  or additional de
c3d0: 74 61 69 6c 2e 20 20 0a 7d 0a 0a 43 4f 4d 50 49  tail.  .}..COMPI
c3e0: 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54  LE_OPTION {SQLIT
c3f0: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 32 7d 20  E_ENABLE_STAT2} 
c400: 7b 0a 20 20 54 68 69 73 20 6f 70 74 69 6f 6e 20  {.  This option 
c410: 75 73 65 64 20 74 6f 20 63 61 75 73 65 20 74 68  used to cause th
c420: 65 20 5b 41 4e 41 4c 59 5a 45 5d 20 63 6f 6d 6d  e [ANALYZE] comm
c430: 61 6e 64 20 74 6f 20 63 6f 6c 6c 65 63 74 0a 20  and to collect. 
c440: 20 69 6e 64 65 78 20 68 69 73 74 6f 67 72 61 6d   index histogram
c450: 20 64 61 74 61 20 69 6e 20 74 68 65 20 3c 62 3e   data in the <b>
c460: 73 71 6c 69 74 65 5f 73 74 61 74 32 3c 2f 62 3e  sqlite_stat2</b>
c470: 20 74 61 62 6c 65 2e 20 20 42 75 74 20 74 68 61   table.  But tha
c480: 74 0a 20 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74  t.  functionalit
c490: 79 20 77 61 73 20 73 75 70 65 72 63 65 64 65 64  y was superceded
c4a0: 20 62 79 20 5b 53 51 4c 49 54 45 5f 45 4e 41 42   by [SQLITE_ENAB
c4b0: 4c 45 5f 53 54 41 54 33 5d 20 61 73 20 6f 66 0a  LE_STAT3] as of.
c4c0: 20 20 53 51 4c 69 74 65 20 5b 76 65 72 73 69 6f    SQLite [versio
c4d0: 6e 20 33 2e 37 2e 39 5d 20 28 5b 64 61 74 65 6f  n 3.7.9] ([dateo
c4e0: 66 3a 33 2e 37 2e 39 5d 29 2e 20 20 0a 20 20 54  f:3.7.9]).  .  T
c4f0: 68 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  he SQLITE_ENABLE
c500: 5f 53 54 41 54 32 20 63 6f 6d 70 69 6c 65 2d 74  _STAT2 compile-t
c510: 69 6d 65 20 6f 70 74 69 6f 6e 0a 20 20 69 73 20  ime option.  is 
c520: 6e 6f 77 20 61 20 6e 6f 2d 6f 70 2e 0a 7d 0a 0a  now a no-op..}..
c530: 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b  COMPILE_OPTION {
c540: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
c550: 41 54 33 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70  AT3} {.  This op
c560: 74 69 6f 6e 20 61 64 64 73 20 61 64 64 69 74 69  tion adds additi
c570: 6f 6e 61 6c 20 6c 6f 67 69 63 20 74 6f 20 74 68  onal logic to th
c580: 65 20 5b 41 4e 41 4c 59 5a 45 5d 20 63 6f 6d 6d  e [ANALYZE] comm
c590: 61 6e 64 20 61 6e 64 20 74 6f 0a 20 20 74 68 65  and and to.  the
c5a0: 20 5b 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 5d   [query planner]
c5b0: 20 74 68 61 74 20 63 61 6e 20 68 65 6c 70 20 53   that can help S
c5c0: 51 4c 69 74 65 20 74 6f 20 63 68 6f 73 65 20 61  QLite to chose a
c5d0: 20 62 65 74 74 65 72 20 71 75 65 72 79 20 70 6c   better query pl
c5e0: 61 6e 0a 20 20 75 6e 64 65 72 20 63 65 72 74 61  an.  under certa
c5f0: 69 6e 20 73 69 74 75 61 74 69 6f 6e 73 2e 20 20  in situations.  
c600: 54 68 65 20 5b 41 4e 41 4c 59 5a 45 5d 20 63 6f  The [ANALYZE] co
c610: 6d 6d 61 6e 64 20 69 73 20 65 6e 68 61 6e 63 65  mmand is enhance
c620: 64 20 74 6f 20 63 6f 6c 6c 65 63 74 0a 20 20 68  d to collect.  h
c630: 69 73 74 6f 67 72 61 6d 20 64 61 74 61 20 66 72  istogram data fr
c640: 6f 6d 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74  om the left-most
c650: 20 63 6f 6c 75 6d 6e 20 6f 66 20 65 61 63 68 20   column of each 
c660: 69 6e 64 65 78 20 61 6e 64 20 73 74 6f 72 65 20  index and store 
c670: 74 68 61 74 20 64 61 74 61 0a 20 20 69 6e 20 74  that data.  in t
c680: 68 65 20 5b 73 71 6c 69 74 65 5f 73 74 61 74 33  he [sqlite_stat3
c690: 5d 20 74 61 62 6c 65 2e 20 20 54 68 65 20 71 75  ] table.  The qu
c6a0: 65 72 79 20 70 6c 61 6e 6e 65 72 20 77 69 6c 6c  ery planner will
c6b0: 20 74 68 65 6e 20 75 73 65 20 74 68 65 0a 20 20   then use the.  
c6c0: 68 69 73 74 6f 67 72 61 6d 20 64 61 74 61 20 74  histogram data t
c6d0: 6f 20 68 65 6c 70 20 69 74 20 6d 61 6b 65 20 62  o help it make b
c6e0: 65 74 74 65 72 20 69 6e 64 65 78 20 63 68 6f 69  etter index choi
c6f0: 63 65 73 2e 20 20 4e 6f 74 65 2c 20 68 6f 77 65  ces.  Note, howe
c700: 76 65 72 2c 0a 20 20 74 68 61 74 20 74 68 65 20  ver,.  that the 
c710: 75 73 65 20 6f 66 20 68 69 73 74 6f 67 72 61 6d  use of histogram
c720: 20 64 61 74 61 20 69 6e 20 71 75 65 72 79 20 70   data in query p
c730: 6c 61 6e 6e 65 72 20 76 69 6f 6c 61 74 65 73 20  lanner violates 
c740: 74 68 65 0a 20 20 5b 71 75 65 72 79 20 70 6c 61  the.  [query pla
c750: 6e 6e 65 72 20 73 74 61 62 69 6c 69 74 79 20 67  nner stability g
c760: 75 61 72 61 6e 74 65 65 5d 20 77 68 69 63 68 20  uarantee] which 
c770: 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20  is important to 
c780: 73 6f 6d 65 20 61 70 70 6c 69 63 61 74 69 6f 6e  some application
c790: 73 2e 0a 20 20 3c 70 3e 0a 7d 0a 0a 43 4f 4d 50  s..  <p>.}..COMP
c7a0: 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49  ILE_OPTION {SQLI
c7b0: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 7d  TE_ENABLE_STAT4}
c7c0: 20 7b 0a 20 20 54 68 69 73 20 6f 70 74 69 6f 6e   {.  This option
c7d0: 20 61 64 64 73 20 61 64 64 69 74 69 6f 6e 61 6c   adds additional
c7e0: 20 6c 6f 67 69 63 20 74 6f 20 74 68 65 20 5b 41   logic to the [A
c7f0: 4e 41 4c 59 5a 45 5d 20 63 6f 6d 6d 61 6e 64 20  NALYZE] command 
c800: 61 6e 64 20 74 6f 0a 20 20 74 68 65 20 5b 71 75  and to.  the [qu
c810: 65 72 79 20 70 6c 61 6e 6e 65 72 5d 20 74 68 61  ery planner] tha
c820: 74 20 63 61 6e 20 68 65 6c 70 20 53 51 4c 69 74  t can help SQLit
c830: 65 20 74 6f 20 63 68 6f 73 65 20 61 20 62 65 74  e to chose a bet
c840: 74 65 72 20 71 75 65 72 79 20 70 6c 61 6e 0a 20  ter query plan. 
c850: 20 75 6e 64 65 72 20 63 65 72 74 61 69 6e 20 73   under certain s
c860: 69 74 75 61 74 69 6f 6e 73 2e 20 20 54 68 65 20  ituations.  The 
c870: 5b 41 4e 41 4c 59 5a 45 5d 20 63 6f 6d 6d 61 6e  [ANALYZE] comman
c880: 64 20 69 73 20 65 6e 68 61 6e 63 65 64 20 74 6f  d is enhanced to
c890: 20 63 6f 6c 6c 65 63 74 0a 20 20 68 69 73 74 6f   collect.  histo
c8a0: 67 72 61 6d 20 64 61 74 61 20 66 72 6f 6d 20 61  gram data from a
c8b0: 6c 6c 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 65 76  ll columns of ev
c8c0: 65 72 79 20 69 6e 64 65 78 20 61 6e 64 20 73 74  ery index and st
c8d0: 6f 72 65 20 74 68 61 74 20 64 61 74 61 0a 20 20  ore that data.  
c8e0: 69 6e 20 74 68 65 20 5b 73 71 6c 69 74 65 5f 73  in the [sqlite_s
c8f0: 74 61 74 34 5d 20 74 61 62 6c 65 2e 20 20 54 68  tat4] table.  Th
c900: 65 20 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 20  e query planner 
c910: 77 69 6c 6c 20 74 68 65 6e 20 75 73 65 20 74 68  will then use th
c920: 65 0a 20 20 68 69 73 74 6f 67 72 61 6d 20 64 61  e.  histogram da
c930: 74 61 20 74 6f 20 68 65 6c 70 20 69 74 20 6d 61  ta to help it ma
c940: 6b 65 20 62 65 74 74 65 72 20 69 6e 64 65 78 20  ke better index 
c950: 63 68 6f 69 63 65 73 2e 20 20 54 68 65 20 64 6f  choices.  The do
c960: 77 6e 73 69 64 65 20 6f 66 0a 20 20 74 68 69 73  wnside of.  this
c970: 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70   compile-time op
c980: 74 69 6f 6e 20 69 73 20 74 68 61 74 20 69 74 20  tion is that it 
c990: 76 69 6f 6c 61 74 65 73 20 74 68 65 0a 20 20 5b  violates the.  [
c9a0: 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 73 74  query planner st
c9b0: 61 62 69 6c 69 74 79 20 67 75 61 72 61 6e 74 65  ability guarante
c9c0: 65 5d 20 6d 61 6b 69 6e 67 20 69 74 20 6d 6f 72  e] making it mor
c9d0: 65 20 64 69 66 66 69 63 75 6c 74 20 74 6f 20 65  e difficult to e
c9e0: 6e 73 75 72 65 0a 20 20 63 6f 6e 73 69 73 74 65  nsure.  consiste
c9f0: 6e 74 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 69  nt performance i
ca00: 6e 20 6d 61 73 73 2d 70 72 6f 64 75 63 65 64 20  n mass-produced 
ca10: 61 70 70 6c 69 63 61 74 69 6f 6e 73 2e 0a 20 20  applications..  
ca20: 3c 70 3e 0a 20 20 53 51 4c 49 54 45 5f 45 4e 41  <p>.  SQLITE_ENA
ca30: 42 4c 45 5f 53 54 41 54 34 20 69 73 20 61 6e 20  BLE_STAT4 is an 
ca40: 65 6e 68 61 6e 63 65 6d 65 6e 74 20 6f 66 20 5b  enhancement of [
ca50: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
ca60: 41 54 33 5d 2e 20 20 53 54 41 54 33 0a 20 20 6f  AT3].  STAT3.  o
ca70: 6e 6c 79 20 72 65 63 6f 72 64 65 64 20 68 69 73  nly recorded his
ca80: 74 6f 67 72 61 6d 20 64 61 74 61 20 66 6f 72 20  togram data for 
ca90: 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 63 6f  the left-most co
caa0: 6c 75 6d 6e 20 6f 66 20 65 61 63 68 20 69 6e 64  lumn of each ind
cab0: 65 78 0a 20 20 77 68 65 72 65 61 73 20 74 68 65  ex.  whereas the
cac0: 20 53 54 41 54 34 20 65 6e 68 61 6e 63 65 6d 65   STAT4 enhanceme
cad0: 6e 74 20 72 65 63 6f 72 64 73 20 68 69 73 74 6f  nt records histo
cae0: 67 72 61 6d 20 64 61 74 61 20 66 72 6f 6d 20 61  gram data from a
caf0: 6c 6c 20 63 6f 6c 75 6d 6e 73 0a 20 20 6f 66 20  ll columns.  of 
cb00: 65 61 63 68 20 69 6e 64 65 78 2e 0a 20 20 54 68  each index..  Th
cb10: 65 20 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  e [SQLITE_ENABLE
cb20: 5f 53 54 41 54 33 5d 20 63 6f 6d 70 69 6c 65 2d  _STAT3] compile-
cb30: 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20 61  time option is a
cb40: 20 6e 6f 2d 6f 70 20 61 6e 64 20 69 73 20 69 67   no-op and is ig
cb50: 6e 6f 72 65 64 0a 20 20 69 66 20 74 68 65 20 53  nored.  if the S
cb60: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
cb70: 54 34 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  T4 compile-time 
cb80: 6f 70 74 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a  option is used..
cb90: 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f  }..COMPILE_OPTIO
cba0: 4e 20 7b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  N {SQLITE_ENABLE
cbb0: 5f 54 52 45 45 5f 45 58 50 4c 41 49 4e 7d 20 7b  _TREE_EXPLAIN} {
cbc0: 0a 20 20 54 68 69 73 20 63 6f 6d 70 69 6c 65 2d  .  This compile-
cbd0: 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20 6e  time option is n
cbe0: 6f 20 6c 6f 6e 67 65 72 20 75 73 65 64 2e 0a 7d  o longer used..}
cbf0: 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e  ..COMPILE_OPTION
cc00: 20 7b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f   {SQLITE_ENABLE_
cc10: 55 50 44 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49  UPDATE_DELETE_LI
cc20: 4d 49 54 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70  MIT} {.  This op
cc30: 74 69 6f 6e 20 65 6e 61 62 6c 65 73 20 61 6e 20  tion enables an 
cc40: 6f 70 74 69 6f 6e 61 6c 20 4f 52 44 45 52 20 42  optional ORDER B
cc50: 59 20 61 6e 64 20 4c 49 4d 49 54 20 63 6c 61 75  Y and LIMIT clau
cc60: 73 65 20 6f 6e 20 0a 20 20 5b 55 50 44 41 54 45  se on .  [UPDATE
cc70: 5d 20 61 6e 64 20 5b 44 45 4c 45 54 45 5d 20 73  ] and [DELETE] s
cc80: 74 61 74 65 6d 65 6e 74 73 2e 0a 0a 20 20 3c 70  tatements...  <p
cc90: 3e 49 66 20 74 68 69 73 20 6f 70 74 69 6f 6e 20  >If this option 
cca0: 69 73 20 64 65 66 69 6e 65 64 2c 20 74 68 65 6e  is defined, then
ccb0: 20 69 74 20 6d 75 73 74 20 61 6c 73 6f 20 62 65   it must also be
ccc0: 20 0a 20 20 64 65 66 69 6e 65 64 20 77 68 65 6e   .  defined when
ccd0: 20 75 73 69 6e 67 20 74 68 65 20 5b 4c 65 6d 6f   using the [Lemo
cce0: 6e 20 70 61 72 73 65 72 20 67 65 6e 65 72 61 74  n parser generat
ccf0: 6f 72 5d 20 74 6f 6f 6c 20 74 6f 20 67 65 6e 65  or] tool to gene
cd00: 72 61 74 65 20 61 20 70 61 72 73 65 2e 63 0a 20  rate a parse.c. 
cd10: 20 66 69 6c 65 2e 20 42 65 63 61 75 73 65 20 6f   file. Because o
cd20: 66 20 74 68 69 73 2c 20 74 68 69 73 20 6f 70 74  f this, this opt
cd30: 69 6f 6e 20 6d 61 79 20 6f 6e 6c 79 20 62 65 20  ion may only be 
cd40: 75 73 65 64 20 77 68 65 6e 20 74 68 65 20 6c 69  used when the li
cd50: 62 72 61 72 79 20 69 73 20 62 75 69 6c 74 0a 20  brary is built. 
cd60: 20 66 72 6f 6d 20 73 6f 75 72 63 65 2c 20 6e 6f   from source, no
cd70: 74 20 66 72 6f 6d 20 74 68 65 20 5b 61 6d 61 6c  t from the [amal
cd80: 67 61 6d 61 74 69 6f 6e 5d 20 6f 72 20 66 72 6f  gamation] or fro
cd90: 6d 20 74 68 65 20 63 6f 6c 6c 65 63 74 69 6f 6e  m the collection
cda0: 20 6f 66 0a 20 20 70 72 65 2d 70 61 63 6b 61 67   of.  pre-packag
cdb0: 65 64 20 43 20 66 69 6c 65 73 20 70 72 6f 76 69  ed C files provi
cdc0: 64 65 64 20 66 6f 72 20 6e 6f 6e 2d 55 6e 69 78  ded for non-Unix
cdd0: 20 6c 69 6b 65 20 70 6c 61 74 66 6f 72 6d 73 20   like platforms 
cde0: 6f 6e 20 74 68 65 20 77 65 62 73 69 74 65 2e 0a  on the website..
cdf0: 20 20 3c 2f 70 3e 0a 7d 0a 0a 43 4f 4d 50 49 4c    </p>.}..COMPIL
ce00: 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45  E_OPTION {SQLITE
ce10: 5f 45 4e 41 42 4c 45 5f 55 4e 4b 4e 4f 57 4e 5f  _ENABLE_UNKNOWN_
ce20: 53 51 4c 5f 46 55 4e 43 54 49 4f 4e 7d 20 7b 0a  SQL_FUNCTION} {.
ce30: 20 20 57 68 65 6e 20 74 68 65 20 53 51 4c 49 54    When the SQLIT
ce40: 45 5f 45 4e 41 42 4c 45 5f 55 4e 4b 4e 4f 57 4e  E_ENABLE_UNKNOWN
ce50: 5f 53 51 4c 5f 46 55 4e 43 54 49 4f 4e 20 63 6f  _SQL_FUNCTION co
ce60: 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
ce70: 6e 20 69 73 0a 20 20 61 63 74 69 76 61 74 65 64  n is.  activated
ce80: 2c 20 53 51 4c 69 74 65 20 77 69 6c 6c 20 73 75  , SQLite will su
ce90: 70 70 72 65 73 73 20 22 75 6e 6b 6e 6f 77 6e 20  ppress "unknown 
cea0: 66 75 6e 63 74 69 6f 6e 22 20 65 72 72 6f 72 73  function" errors
ceb0: 20 77 68 65 6e 20 72 75 6e 6e 69 6e 67 0a 20 20   when running.  
cec0: 61 6e 20 5b 45 58 50 4c 41 49 4e 5d 20 6f 72 20  an [EXPLAIN] or 
ced0: 5b 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50  [EXPLAIN QUERY P
cee0: 4c 41 4e 5d 2e 20 20 49 6e 73 74 65 61 64 20 6f  LAN].  Instead o
cef0: 66 20 74 68 72 6f 77 69 6e 67 20 61 6e 20 65 72  f throwing an er
cf00: 72 6f 72 2c 0a 20 20 53 51 4c 69 74 65 20 77 69  ror,.  SQLite wi
cf10: 6c 6c 20 69 6e 73 65 72 74 20 61 20 73 75 62 73  ll insert a subs
cf20: 74 69 74 75 74 65 20 6e 6f 2d 6f 70 20 66 75 6e  titute no-op fun
cf30: 63 74 69 6f 6e 20 6e 61 6d 65 64 20 22 75 6e 6b  ction named "unk
cf40: 6e 6f 77 6e 28 29 22 2e 0a 20 20 54 68 65 20 73  nown()"..  The s
cf50: 75 62 73 74 69 74 75 74 69 6f 6e 20 6f 66 20 22  ubstitution of "
cf60: 75 6e 6b 6e 6f 77 6e 28 29 22 20 69 6e 20 70 6c  unknown()" in pl
cf70: 61 63 65 20 6f 66 20 75 6e 72 65 63 6f 67 6e 69  ace of unrecogni
cf80: 7a 65 64 20 66 75 6e 63 74 69 6f 6e 73 0a 20 20  zed functions.  
cf90: 6f 6e 6c 79 20 6f 63 63 75 72 73 20 6f 6e 20 5b  only occurs on [
cfa0: 45 58 50 4c 41 49 4e 5d 20 61 6e 64 20 5b 45 58  EXPLAIN] and [EX
cfb0: 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e  PLAIN QUERY PLAN
cfc0: 5d 2c 20 6e 6f 74 20 6f 6e 20 6f 72 64 69 6e 61  ], not on ordina
cfd0: 72 79 0a 20 20 73 74 61 74 65 6d 65 6e 74 73 2e  ry.  statements.
cfe0: 0a 20 20 3c 70 3e 0a 20 20 57 68 65 6e 20 75 73  .  <p>.  When us
cff0: 65 64 20 69 6e 20 74 68 65 20 5b 63 6f 6d 6d 61  ed in the [comma
d000: 6e 64 2d 6c 69 6e 65 20 73 68 65 6c 6c 5d 2c 20  nd-line shell], 
d010: 74 68 65 0a 20 20 53 51 4c 49 54 45 5f 45 4e 41  the.  SQLITE_ENA
d020: 42 4c 45 5f 55 4e 4b 4e 4f 57 4e 5f 53 51 4c 5f  BLE_UNKNOWN_SQL_
d030: 46 55 4e 43 54 49 4f 4e 20 66 65 61 74 75 72 65  FUNCTION feature
d040: 20 61 6c 6c 6f 77 73 20 53 51 4c 20 74 65 78 74   allows SQL text
d050: 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 0a 20   that contains. 
d060: 20 61 70 70 6c 69 63 61 74 69 6f 6e 2d 64 65 66   application-def
d070: 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73 20 74  ined functions t
d080: 6f 20 62 65 20 70 61 73 74 65 64 20 69 6e 74 6f  o be pasted into
d090: 20 74 68 65 20 73 68 65 6c 6c 20 66 6f 72 20 0a   the shell for .
d0a0: 20 20 61 6e 61 6c 79 73 69 73 20 61 6e 64 20 64    analysis and d
d0b0: 65 62 75 67 67 69 6e 67 20 77 69 74 68 6f 75 74  ebugging without
d0c0: 20 68 61 76 69 6e 67 20 74 6f 20 63 72 65 61 74   having to creat
d0d0: 65 20 61 6e 64 20 6c 6f 61 64 20 61 6e 0a 20 20  e and load an.  
d0e0: 65 78 74 65 6e 73 69 6f 6e 20 74 68 61 74 20 69  extension that i
d0f0: 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 61 70  mplements the ap
d100: 70 6c 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65  plication-define
d110: 64 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 7d 0a 0a  d functions..}..
d120: 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b  COMPILE_OPTION {
d130: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 4e  SQLITE_ENABLE_UN
d140: 4c 4f 43 4b 5f 4e 4f 54 49 46 59 7d 20 7b 0a 20  LOCK_NOTIFY} {. 
d150: 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 65 6e 61   This option ena
d160: 62 6c 65 73 20 74 68 65 20 5b 73 71 6c 69 74 65  bles the [sqlite
d170: 33 5f 75 6e 6c 6f 63 6b 5f 6e 6f 74 69 66 79 28  3_unlock_notify(
d180: 29 5d 20 69 6e 74 65 72 66 61 63 65 20 61 6e 64  )] interface and
d190: 0a 20 20 69 74 73 20 61 73 73 6f 63 69 61 74 65  .  its associate
d1a0: 64 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 2e  d functionality.
d1b0: 20 20 53 65 65 20 74 68 65 20 64 6f 63 75 6d 65    See the docume
d1c0: 6e 74 61 74 69 6f 6e 20 74 69 74 6c 65 64 0a 20  ntation titled. 
d1d0: 20 5b 55 73 69 6e 67 20 74 68 65 20 53 51 4c 69   [Using the SQLi
d1e0: 74 65 20 55 6e 6c 6f 63 6b 20 4e 6f 74 69 66 69  te Unlock Notifi
d1f0: 63 61 74 69 6f 6e 20 46 65 61 74 75 72 65 5d 20  cation Feature] 
d200: 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 0a 20  for additional. 
d210: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 7d 0a   information..}.
d220: 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20  .COMPILE_OPTION 
d230: 7b 53 51 4c 49 54 45 5f 49 4e 54 52 4f 53 50 45  {SQLITE_INTROSPE
d240: 43 54 49 4f 4e 5f 50 52 41 47 4d 41 53 7d 20 7b  CTION_PRAGMAS} {
d250: 0a 20 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 61  .  This option a
d260: 64 64 73 20 73 6f 6d 65 20 65 78 74 72 61 20 50  dds some extra P
d270: 52 41 47 4d 41 20 73 74 61 74 65 6d 65 6e 74 73  RAGMA statements
d280: 20 73 75 63 68 20 61 73 0a 20 20 5b 50 52 41 47   such as.  [PRAG
d290: 4d 41 20 66 75 6e 63 74 69 6f 6e 5f 6c 69 73 74  MA function_list
d2a0: 5d 2c 20 5b 50 52 41 47 4d 41 20 6d 6f 64 75 6c  ], [PRAGMA modul
d2b0: 65 5f 6c 69 73 74 5d 2c 20 61 6e 64 0a 20 20 5b  e_list], and.  [
d2c0: 50 52 41 47 4d 41 20 70 72 61 67 6d 61 5f 6c 69  PRAGMA pragma_li
d2d0: 73 74 5d 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f  st]..}..COMPILE_
d2e0: 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 53  OPTION {SQLITE_S
d2f0: 4f 55 4e 44 45 58 7d 20 7b 0a 20 20 54 68 69 73  OUNDEX} {.  This
d300: 20 6f 70 74 69 6f 6e 20 65 6e 61 62 6c 65 73 20   option enables 
d310: 74 68 65 20 5b 73 6f 75 6e 64 65 78 28 29 20 53  the [soundex() S
d320: 51 4c 20 66 75 6e 63 74 69 6f 6e 5d 2e 0a 7d 0a  QL function]..}.
d330: 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20  .COMPILE_OPTION 
d340: 7b 53 51 4c 49 54 45 5f 55 53 45 5f 41 4c 4c 4f  {SQLITE_USE_ALLO
d350: 43 41 7d 20 7b 0a 20 20 49 66 20 74 68 69 73 20  CA} {.  If this 
d360: 6f 70 74 69 6f 6e 20 69 73 20 65 6e 61 62 6c 65  option is enable
d370: 64 2c 20 74 68 65 6e 20 74 68 65 20 61 6c 6c 6f  d, then the allo
d380: 63 61 28 29 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  ca() memory allo
d390: 63 61 74 6f 72 20 77 69 6c 6c 20 62 65 0a 20 20  cator will be.  
d3a0: 75 73 65 64 20 69 6e 20 61 20 66 65 77 20 73 69  used in a few si
d3b0: 74 75 61 74 69 6f 6e 73 20 77 68 65 72 65 20 69  tuations where i
d3c0: 74 20 69 73 20 61 70 70 72 6f 70 72 69 61 74 65  t is appropriate
d3d0: 2e 20 20 54 68 69 73 20 72 65 73 75 6c 74 73 20  .  This results 
d3e0: 69 6e 20 61 20 73 6c 69 67 68 74 6c 79 0a 20 20  in a slightly.  
d3f0: 73 6d 61 6c 6c 65 72 20 61 6e 64 20 66 61 73 74  smaller and fast
d400: 65 72 20 62 69 6e 61 72 79 2e 20 20 54 68 65 20  er binary.  The 
d410: 53 51 4c 49 54 45 5f 55 53 45 5f 41 4c 4c 4f 43  SQLITE_USE_ALLOC
d420: 41 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f  A compile-time o
d430: 6e 6c 79 20 6f 6e 6c 79 20 0a 20 20 77 6f 72 6b  nly only .  work
d440: 73 2c 20 6f 66 20 63 6f 75 72 73 65 2c 20 6f 6e  s, of course, on
d450: 20 73 79 73 74 65 6d 73 20 74 68 61 74 20 73 75   systems that su
d460: 70 70 6f 72 74 20 61 6c 6c 6f 63 61 28 29 2e 0a  pport alloca()..
d470: 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f  }..COMPILE_OPTIO
d480: 4e 20 7b 53 51 4c 49 54 45 5f 55 53 45 5f 46 43  N {SQLITE_USE_FC
d490: 4e 54 4c 5f 54 52 41 43 45 7d 20 7b 0a 20 20 54  NTL_TRACE} {.  T
d4a0: 68 69 73 20 6f 70 74 69 6f 6e 20 63 61 75 73 65  his option cause
d4b0: 73 20 53 51 4c 69 74 65 20 74 6f 20 69 73 73 75  s SQLite to issu
d4c0: 65 20 65 78 74 72 61 20 5b 53 51 4c 49 54 45 5f  e extra [SQLITE_
d4d0: 46 43 4e 54 4c 5f 54 52 41 43 45 5d 20 66 69 6c  FCNTL_TRACE] fil
d4e0: 65 20 63 6f 6e 74 72 6f 6c 73 0a 20 20 74 6f 20  e controls.  to 
d4f0: 70 72 6f 76 69 64 65 20 73 75 70 70 6c 65 6d 65  provide suppleme
d500: 6e 74 61 72 79 20 69 6e 66 6f 72 6d 61 74 69 6f  ntary informatio
d510: 6e 20 74 6f 20 74 68 65 20 56 46 53 2e 20 20 54  n to the VFS.  T
d520: 68 65 20 22 76 66 73 6c 6f 67 2e 63 22 20 65 78  he "vfslog.c" ex
d530: 74 65 6e 73 69 6f 6e 0a 20 20 6d 61 6b 65 73 20  tension.  makes 
d540: 75 73 65 20 6f 66 20 74 68 69 73 20 74 6f 20 70  use of this to p
d550: 72 6f 76 69 64 65 20 65 6e 68 61 6e 63 65 64 20  rovide enhanced 
d560: 6c 6f 67 73 20 6f 66 20 56 46 53 20 61 63 74 69  logs of VFS acti
d570: 76 69 74 79 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45  vity..}..COMPILE
d580: 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f  _OPTION {SQLITE_
d590: 55 53 45 5f 5a 4c 49 42 7d 20 7b 0a 20 20 54 68  USE_ZLIB} {.  Th
d5a0: 69 73 20 6f 70 74 69 6f 6e 20 63 61 75 73 65 73  is option causes
d5b0: 20 73 6f 6d 65 20 65 78 74 65 6e 73 69 6f 6e 73   some extensions
d5c0: 20 74 6f 20 6c 69 6e 6b 20 61 67 61 69 6e 73 74   to link against
d5d0: 20 74 68 65 20 0a 20 20 5b 68 74 74 70 73 3a 2f   the .  [https:/
d5e0: 2f 7a 6c 69 62 2e 6e 65 74 7c 7a 6c 69 62 20 63  /zlib.net|zlib c
d5f0: 6f 6d 70 72 65 73 73 69 6f 6e 20 6c 69 62 72 61  ompression libra
d600: 72 79 5d 2e 0a 20 20 3c 70 3e 0a 20 20 54 68 69  ry]..  <p>.  Thi
d610: 73 20 6f 70 74 69 6f 6e 20 68 61 73 20 6e 6f 20  s option has no 
d620: 61 66 66 65 63 74 20 6f 6e 20 74 68 65 20 53 51  affect on the SQ
d630: 4c 69 74 65 20 63 6f 72 65 2e 20 20 49 74 20 69  Lite core.  It i
d640: 73 20 6f 6e 6c 79 20 75 73 65 64 20 62 79 20 65  s only used by e
d650: 78 74 65 6e 73 69 6f 6e 73 2e 0a 20 20 54 68 69  xtensions..  Thi
d660: 73 20 69 73 20 6f 70 74 69 6f 6e 20 69 73 20 6e  s is option is n
d670: 65 63 65 73 73 61 72 79 20 66 6f 72 20 74 68 65  ecessary for the
d680: 20 63 6f 6d 6d 70 72 65 73 73 69 6f 6e 20 61 6e   commpression an
d690: 64 20 64 65 63 6f 6d 70 72 65 73 73 69 6f 6e 0a  d decompression.
d6a0: 20 20 66 75 6e 63 74 69 6f 6e 73 20 74 68 61 74    functions that
d6b0: 20 61 72 65 20 70 61 72 74 20 6f 66 20 5b 53 51   are part of [SQ
d6c0: 4c 20 41 72 63 68 69 76 65 5d 20 73 75 70 70 6f  L Archive] suppo
d6d0: 72 74 20 69 6e 20 74 68 65 0a 20 20 5b 63 6f 6d  rt in the.  [com
d6e0: 6d 61 6e 64 2d 6c 69 6e 65 20 73 68 65 6c 6c 5d  mand-line shell]
d6f0: 2e 0a 20 20 3c 70 3e 0a 20 20 57 68 65 6e 20 63  ..  <p>.  When c
d700: 6f 6d 70 69 6c 69 6e 67 20 77 69 74 68 20 74 68  ompiling with th
d710: 69 73 20 6f 70 74 69 6f 6e 2c 20 69 74 20 77 69  is option, it wi
d720: 6c 6c 20 6e 6f 72 6d 61 6c 6c 79 0a 20 20 62 65  ll normally.  be
d730: 20 6e 65 63 65 73 73 61 72 79 20 74 6f 20 61 64   necessary to ad
d740: 64 20 61 20 6c 69 6e 6b 65 72 20 6f 70 74 69 6f  d a linker optio
d750: 6e 20 74 6f 20 69 6e 63 6c 75 64 65 20 74 68 65  n to include the
d760: 20 7a 6c 69 62 20 6c 69 62 72 61 72 79 20 69 6e   zlib library in
d770: 20 74 68 65 0a 20 20 62 75 69 6c 64 2e 20 20 4e   the.  build.  N
d780: 6f 72 6d 61 6c 20 74 68 69 73 20 6f 70 74 69 6f  ormal this optio
d790: 6e 20 69 73 20 22 2d 6c 7a 22 20 62 75 74 20 6d  n is "-lz" but m
d7a0: 69 67 68 74 20 62 65 20 64 69 66 66 65 72 65 6e  ight be differen
d7b0: 74 20 6f 6e 20 64 69 66 66 65 72 65 6e 74 0a 20  t on different. 
d7c0: 20 73 79 73 74 65 6d 73 2e 0a 20 20 3c 70 3e 0a   systems..  <p>.
d7d0: 20 20 57 68 65 6e 20 62 75 69 6c 64 69 6e 67 20    When building 
d7e0: 77 69 74 68 20 4d 53 56 43 20 6f 6e 20 57 69 6e  with MSVC on Win
d7f0: 64 6f 77 73 20 73 79 73 74 65 6d 73 2c 20 6f 6e  dows systems, on
d800: 65 20 63 61 6e 20 70 75 74 20 74 68 65 20 7a 6c  e can put the zl
d810: 69 62 20 73 6f 75 72 63 65 0a 20 20 63 6f 64 65  ib source.  code
d820: 20 69 6e 20 74 68 65 20 63 6f 6d 70 61 74 2f 7a   in the compat/z
d830: 6c 69 62 20 73 75 62 64 69 72 65 63 74 6f 72 79  lib subdirectory
d840: 20 6f 66 20 74 68 65 20 73 6f 75 72 63 65 20 74   of the source t
d850: 72 65 65 20 61 6e 64 20 74 68 65 6e 20 61 64 64  ree and then add
d860: 0a 20 20 74 68 65 20 55 53 45 5f 5a 4c 49 42 3d  .  the USE_ZLIB=
d870: 31 20 6f 70 74 69 6f 6e 20 74 6f 20 74 68 65 20  1 option to the 
d880: 6e 6d 61 6b 65 20 63 6f 6d 6d 61 6e 64 20 74 6f  nmake command to
d890: 20 63 61 75 73 65 20 74 68 65 20 54 68 65 20 4d   cause the The M
d8a0: 61 6b 65 66 69 6c 65 2e 6d 73 63 0a 20 20 74 6f  akefile.msc.  to
d8b0: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 62   automatically b
d8c0: 75 69 6c 64 20 61 6e 64 20 75 73 65 20 61 6e 20  uild and use an 
d8d0: 61 70 70 72 6f 70 72 69 61 74 65 20 7a 6c 69 62  appropriate zlib
d8e0: 20 6c 69 62 72 61 72 79 20 69 6d 70 6c 65 6d 65   library impleme
d8f0: 6e 74 61 74 69 6f 6e 2e 0a 7d 0a 0a 43 4f 4d 50  ntation..}..COMP
d900: 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 59 59 54 52  ILE_OPTION {YYTR
d910: 41 43 4b 4d 41 58 53 54 41 43 4b 44 45 50 54 48  ACKMAXSTACKDEPTH
d920: 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70 74 69 6f  } {.  This optio
d930: 6e 20 63 61 75 73 65 73 20 74 68 65 20 4c 41 4c  n causes the LAL
d940: 52 28 31 29 20 70 61 72 73 65 72 20 73 74 61 63  R(1) parser stac
d950: 6b 20 64 65 70 74 68 20 74 6f 20 62 65 20 74 72  k depth to be tr
d960: 61 63 6b 65 64 0a 20 20 61 6e 64 20 72 65 70 6f  acked.  and repo
d970: 72 74 65 64 20 75 73 69 6e 67 20 74 68 65 20 5b  rted using the [
d980: 73 71 6c 69 74 65 33 5f 73 74 61 74 75 73 5d 28  sqlite3_status](
d990: 5b 53 51 4c 49 54 45 5f 53 54 41 54 55 53 5f 50  [SQLITE_STATUS_P
d9a0: 41 52 53 45 52 5f 53 54 41 43 4b 5d 2c 2e 2e 2e  ARSER_STACK],...
d9b0: 29 0a 20 20 69 6e 74 65 72 66 61 63 65 2e 20 20  ).  interface.  
d9c0: 53 51 4c 69 74 65 27 73 20 4c 41 4c 52 28 31 29  SQLite's LALR(1)
d9d0: 20 70 61 72 73 65 72 20 68 61 73 20 61 20 66 69   parser has a fi
d9e0: 78 65 64 20 73 74 61 63 6b 20 64 65 70 74 68 0a  xed stack depth.
d9f0: 20 20 28 64 65 74 65 72 6d 69 6e 65 64 20 61 74    (determined at
da00: 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 75 73   compile-time us
da10: 69 6e 67 20 74 68 65 20 5b 59 59 53 54 41 43 4b  ing the [YYSTACK
da20: 44 45 50 54 48 5d 20 6f 70 74 69 6f 6e 73 29 2e  DEPTH] options).
da30: 0a 20 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 63  .  This option c
da40: 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 68 65  an be used to he
da50: 6c 70 20 64 65 74 65 72 6d 69 6e 65 20 69 66 20  lp determine if 
da60: 61 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 69  an application i
da70: 73 0a 20 20 67 65 74 74 69 6e 67 20 63 6c 6f 73  s.  getting clos
da80: 65 20 74 6f 20 65 78 63 65 65 64 69 6e 67 20 74  e to exceeding t
da90: 68 65 20 6d 61 78 69 6d 75 6d 20 4c 41 4c 52 28  he maximum LALR(
daa0: 31 29 20 73 74 61 63 6b 20 64 65 70 74 68 2e 0a  1) stack depth..
dab0: 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 61 20 6e 61 6d  }.</tcl>..<a nam
dac0: 65 3d 22 64 69 73 61 62 6c 65 66 65 61 74 75 72  e="disablefeatur
dad0: 65 73 22 3e 3c 2f 61 3e 0a 3c 68 31 3e 20 4f 70  es"></a>.<h1> Op
dae0: 74 69 6f 6e 73 20 54 6f 20 44 69 73 61 62 6c 65  tions To Disable
daf0: 20 46 65 61 74 75 72 65 73 20 4e 6f 72 6d 61 6c   Features Normal
db00: 6c 79 20 54 75 72 6e 65 64 20 4f 6e 3c 2f 68 31  ly Turned On</h1
db10: 3e 0a 0a 3c 74 63 6c 3e 0a 43 4f 4d 50 49 4c 45  >..<tcl>.COMPILE
db20: 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f  _OPTION {SQLITE_
db30: 44 49 53 41 42 4c 45 5f 4c 46 53 7d 20 7b 0a 20  DISABLE_LFS} {. 
db40: 20 49 66 20 74 68 69 73 20 43 2d 70 72 65 70 72   If this C-prepr
db50: 6f 63 65 73 73 6f 72 20 6d 61 63 72 6f 20 69 73  ocessor macro is
db60: 20 64 65 66 69 6e 65 64 2c 20 6c 61 72 67 65 20   defined, large 
db70: 66 69 6c 65 20 73 75 70 70 6f 72 74 0a 20 20 69  file support.  i
db80: 73 20 64 69 73 61 62 6c 65 64 2e 0a 7d 0a 0a 43  s disabled..}..C
db90: 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53  OMPILE_OPTION {S
dba0: 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 44 49  QLITE_DISABLE_DI
dbb0: 52 53 59 4e 43 7d 20 7b 0a 20 20 49 66 20 74 68  RSYNC} {.  If th
dbc0: 69 73 20 43 2d 70 72 65 70 72 6f 63 65 73 73 6f  is C-preprocesso
dbd0: 72 20 6d 61 63 72 6f 20 69 73 20 64 65 66 69 6e  r macro is defin
dbe0: 65 64 2c 20 64 69 72 65 63 74 6f 72 79 20 73 79  ed, directory sy
dbf0: 6e 63 73 0a 20 20 61 72 65 20 64 69 73 61 62 6c  ncs.  are disabl
dc00: 65 64 2e 20 20 53 51 4c 69 74 65 20 74 79 70 69  ed.  SQLite typi
dc10: 63 61 6c 6c 79 20 61 74 74 65 6d 70 74 73 20 74  cally attempts t
dc20: 6f 20 73 79 6e 63 20 74 68 65 20 70 61 72 65 6e  o sync the paren
dc30: 74 0a 20 20 64 69 72 65 63 74 6f 72 79 20 77 68  t.  directory wh
dc40: 65 6e 20 61 20 66 69 6c 65 20 69 73 20 64 65 6c  en a file is del
dc50: 65 74 65 64 20 74 6f 20 65 6e 73 75 72 65 20 74  eted to ensure t
dc60: 68 65 20 64 69 72 65 63 74 6f 72 79 0a 20 20 65  he directory.  e
dc70: 6e 74 72 69 65 73 20 61 72 65 20 75 70 64 61 74  ntries are updat
dc80: 65 64 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 6f  ed immediately o
dc90: 6e 20 64 69 73 6b 2e 0a 7d 0a 0a 43 4f 4d 50 49  n disk..}..COMPI
dca0: 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54  LE_OPTION {SQLIT
dcb0: 45 5f 44 49 53 41 42 4c 45 5f 46 54 53 33 5f 55  E_DISABLE_FTS3_U
dcc0: 4e 49 43 4f 44 45 7d 20 7b 0a 20 20 49 66 20 74  NICODE} {.  If t
dcd0: 68 69 73 20 43 2d 70 72 65 70 72 6f 63 65 73 73  his C-preprocess
dce0: 6f 72 20 6d 61 63 72 6f 20 69 73 20 64 65 66 69  or macro is defi
dcf0: 6e 65 64 2c 20 74 68 65 20 5b 75 6e 69 63 6f 64  ned, the [unicod
dd00: 65 36 31 5d 20 74 6f 6b 65 6e 69 7a 65 72 0a 20  e61] tokenizer. 
dd10: 20 69 6e 20 5b 46 54 53 33 5d 20 69 73 20 6f 6d   in [FTS3] is om
dd20: 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20 62  itted from the b
dd30: 75 69 6c 64 20 61 6e 64 20 69 73 20 75 6e 61 76  uild and is unav
dd40: 61 69 6c 61 62 6c 65 20 74 6f 20 0a 20 20 61 70  ailable to .  ap
dd50: 70 6c 69 63 61 74 69 6f 6e 73 2e 0a 7d 0a 0a 43  plications..}..C
dd60: 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53  OMPILE_OPTION {S
dd70: 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 46 54  QLITE_DISABLE_FT
dd80: 53 34 5f 44 45 46 45 52 52 45 44 7d 20 7b 0a 20  S4_DEFERRED} {. 
dd90: 20 49 66 20 74 68 69 73 20 43 2d 70 72 65 70 72   If this C-prepr
dda0: 6f 63 65 73 73 6f 72 20 6d 61 63 72 6f 20 64 69  ocessor macro di
ddb0: 73 61 62 6c 65 73 20 74 68 65 20 22 64 65 66 65  sables the "defe
ddc0: 72 72 65 64 20 74 6f 6b 65 6e 22 20 6f 70 74 69  rred token" opti
ddd0: 6d 69 7a 61 74 69 6f 6e 0a 20 20 69 6e 20 5b 46  mization.  in [F
dde0: 54 53 34 5d 2e 20 20 54 68 65 20 22 64 65 66 65  TS4].  The "defe
ddf0: 72 72 65 64 20 74 6f 6b 65 6e 22 20 6f 70 74 69  rred token" opti
de00: 6d 69 7a 61 74 69 6f 6e 20 61 76 6f 69 64 73 20  mization avoids 
de10: 6c 6f 61 64 69 6e 67 20 6d 61 73 73 69 76 65 0a  loading massive.
de20: 20 20 70 6f 73 74 69 6e 67 20 6c 69 73 74 73 20    posting lists 
de30: 66 6f 72 20 74 65 72 6d 73 20 74 68 61 74 20 61  for terms that a
de40: 72 65 20 69 6e 20 6d 6f 73 74 20 64 6f 63 75 6d  re in most docum
de50: 65 6e 74 73 20 6f 66 20 74 68 65 20 63 6f 6c 6c  ents of the coll
de60: 65 63 74 69 6f 6e 0a 20 20 61 6e 64 20 69 6e 73  ection.  and ins
de70: 74 65 61 64 20 73 69 6d 70 6c 79 20 73 63 61 6e  tead simply scan
de80: 73 20 66 6f 72 20 74 68 6f 73 65 20 74 6f 6b 65  s for those toke
de90: 6e 73 20 69 6e 20 74 68 65 20 64 6f 63 75 6d 65  ns in the docume
dea0: 6e 74 20 73 6f 75 72 63 65 2e 20 20 5b 46 54 53  nt source.  [FTS
deb0: 34 5d 0a 20 20 73 68 6f 75 6c 64 20 67 65 74 20  4].  should get 
dec0: 65 78 61 63 74 6c 79 20 74 68 65 20 73 61 6d 65  exactly the same
ded0: 20 61 6e 73 77 65 72 20 62 6f 74 68 20 77 69 74   answer both wit
dee0: 68 20 61 6e 64 20 77 69 74 68 6f 75 74 20 74 68  h and without th
def0: 69 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 2e  is optimization.
df00: 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49  .}..COMPILE_OPTI
df10: 4f 4e 20 7b 53 51 4c 49 54 45 5f 44 49 53 41 42  ON {SQLITE_DISAB
df20: 4c 45 5f 49 4e 54 52 49 4e 53 49 43 7d 20 7b 0a  LE_INTRINSIC} {.
df30: 20 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 64 69    This option di
df40: 73 61 62 6c 65 73 20 74 68 65 20 75 73 65 20 6f  sables the use o
df50: 66 20 63 6f 6d 70 69 6c 65 72 2d 73 70 65 63 69  f compiler-speci
df60: 66 69 63 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e  fic built-in fun
df70: 63 74 69 6f 6e 73 0a 20 20 73 75 63 68 20 61 73  ctions.  such as
df80: 20 5f 5f 62 75 69 6c 74 69 6e 5f 62 73 77 61 70   __builtin_bswap
df90: 33 32 28 29 20 61 6e 64 20 5f 5f 62 75 69 6c 74  32() and __built
dfa0: 69 6e 5f 61 64 64 5f 6f 76 65 72 66 6c 6f 77 28  in_add_overflow(
dfb0: 29 20 69 6e 20 47 43 43 20 61 6e 64 20 43 6c 61  ) in GCC and Cla
dfc0: 6e 67 2c 20 0a 20 20 6f 72 20 5f 62 79 74 65 73  ng, .  or _bytes
dfd0: 77 61 70 5f 75 6c 6f 6e 67 28 29 20 61 6e 64 20  wap_ulong() and 
dfe0: 5f 52 65 61 64 57 72 69 74 65 42 61 72 72 69 65  _ReadWriteBarrie
dff0: 72 28 29 20 77 69 74 68 20 4d 53 56 43 2e 20 20  r() with MSVC.  
e000: 0a 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 74 63 6c 3e  .}.</tcl>..<tcl>
e010: 0a 20 20 68 64 5f 66 72 61 67 6d 65 6e 74 20 22  .  hd_fragment "
e020: 6f 6d 69 74 66 65 61 74 75 72 65 73 22 0a 20 20  omitfeatures".  
e030: 68 64 5f 6b 65 79 77 6f 72 64 73 20 22 6f 6d 69  hd_keywords "omi
e040: 74 66 65 61 74 75 72 65 73 22 0a 3c 2f 74 63 6c  tfeatures".</tcl
e050: 3e 0a 3c 68 31 3e 20 4f 70 74 69 6f 6e 73 20 54  >.<h1> Options T
e060: 6f 20 4f 6d 69 74 20 46 65 61 74 75 72 65 73 3c  o Omit Features<
e070: 2f 68 31 3e 0a 0a 3c 70 3e 54 68 65 20 66 6f 6c  /h1>..<p>The fol
e080: 6c 6f 77 69 6e 67 20 6f 70 74 69 6f 6e 73 20 63  lowing options c
e090: 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 0a 5b  an be used to .[
e0a0: 72 65 6c 66 6f 6f 74 70 72 69 6e 74 20 7c 20 72  relfootprint | r
e0b0: 65 64 75 63 65 20 74 68 65 20 73 69 7a 65 20 6f  educe the size o
e0c0: 66 20 74 68 65 20 63 6f 6d 70 69 6c 65 64 20 6c  f the compiled l
e0d0: 69 62 72 61 72 79 5d 0a 62 79 20 6f 6d 69 74 74  ibrary].by omitt
e0e0: 69 6e 67 20 75 6e 75 73 65 64 20 66 65 61 74 75  ing unused featu
e0f0: 72 65 73 2e 20 54 68 69 73 20 69 73 20 70 72 6f  res. This is pro
e100: 62 61 62 6c 79 20 6f 6e 6c 79 20 75 73 65 66 75  bably only usefu
e110: 6c 0a 69 6e 20 65 6d 62 65 64 64 65 64 20 73 79  l.in embedded sy
e120: 73 74 65 6d 73 20 77 68 65 72 65 20 73 70 61 63  stems where spac
e130: 65 20 69 73 20 65 73 70 65 63 69 61 6c 6c 79 20  e is especially 
e140: 74 69 67 68 74 2c 20 61 73 20 65 76 65 6e 20 77  tight, as even w
e150: 69 74 68 20 61 6c 6c 0a 66 65 61 74 75 72 65 73  ith all.features
e160: 20 69 6e 63 6c 75 64 65 64 20 74 68 65 20 53 51   included the SQ
e170: 4c 69 74 65 20 6c 69 62 72 61 72 79 20 69 73 20  Lite library is 
e180: 72 65 6c 61 74 69 76 65 6c 79 20 73 6d 61 6c 6c  relatively small
e190: 2e 20 44 6f 6e 27 74 20 66 6f 72 67 65 74 0a 74  . Don't forget.t
e1a0: 6f 20 74 65 6c 6c 20 79 6f 75 72 20 63 6f 6d 70  o tell your comp
e1b0: 69 6c 65 72 20 74 6f 20 6f 70 74 69 6d 69 7a 65  iler to optimize
e1c0: 20 66 6f 72 20 62 69 6e 61 72 79 20 73 69 7a 65   for binary size
e1d0: 21 20 28 74 68 65 20 2d 4f 73 20 6f 70 74 69 6f  ! (the -Os optio
e1e0: 6e 20 69 66 0a 75 73 69 6e 67 20 47 43 43 29 2e  n if.using GCC).
e1f0: 20 20 54 65 6c 6c 69 6e 67 20 79 6f 75 72 20 63    Telling your c
e200: 6f 6d 70 69 6c 65 72 20 74 6f 20 6f 70 74 69 6d  ompiler to optim
e210: 69 7a 65 20 66 6f 72 20 73 69 7a 65 20 75 73 75  ize for size usu
e220: 61 6c 6c 79 20 68 61 73 0a 61 20 6d 75 63 68 20  ally has.a much 
e230: 6c 61 72 67 65 72 20 69 6d 70 61 63 74 20 6f 6e  larger impact on
e240: 20 6c 69 62 72 61 72 79 20 66 6f 6f 74 70 72 69   library footpri
e250: 6e 74 20 74 68 61 6e 20 65 6d 70 6c 6f 79 69 6e  nt than employin
e260: 67 20 61 6e 79 20 6f 66 20 74 68 65 73 65 0a 63  g any of these.c
e270: 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69  ompile-time opti
e280: 6f 6e 73 2e 20 20 59 6f 75 20 73 68 6f 75 6c 64  ons.  You should
e290: 20 61 6c 73 6f 20 76 65 72 69 66 79 20 74 68 61   also verify tha
e2a0: 74 20 0a 3c 61 20 68 72 65 66 3d 22 23 64 65 62  t .<a href="#deb
e2b0: 75 67 6f 70 74 69 6f 6e 73 22 3e 64 65 62 75 67  ugoptions">debug
e2c0: 67 69 6e 67 20 6f 70 74 69 6f 6e 73 3c 2f 61 3e  ging options</a>
e2d0: 20 61 72 65 20 64 69 73 61 62 6c 65 64 2e 3c 2f   are disabled.</
e2e0: 70 3e 0a 0a 3c 70 3e 54 68 65 20 6d 61 63 72 6f  p>..<p>The macro
e2f0: 73 20 69 6e 20 74 68 69 73 20 73 65 63 74 69 6f  s in this sectio
e300: 6e 20 64 6f 20 6e 6f 74 20 72 65 71 75 69 72 65  n do not require
e310: 20 76 61 6c 75 65 73 2e 20 54 68 65 20 66 6f 6c   values. The fol
e320: 6c 6f 77 69 6e 67 20 0a 63 6f 6d 70 69 6c 61 74  lowing .compilat
e330: 69 6f 6e 20 73 77 69 74 63 68 65 73 20 61 6c 6c  ion switches all
e340: 20 68 61 76 65 20 74 68 65 20 73 61 6d 65 20 65   have the same e
e350: 66 66 65 63 74 3a 3c 62 72 3e 0a 2d 44 53 51 4c  ffect:<br>.-DSQL
e360: 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41  ITE_OMIT_ALTERTA
e370: 42 4c 45 3c 62 72 3e 0a 2d 44 53 51 4c 49 54 45  BLE<br>.-DSQLITE
e380: 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c 45  _OMIT_ALTERTABLE
e390: 3d 31 3c 62 72 3e 0a 2d 44 53 51 4c 49 54 45 5f  =1<br>.-DSQLITE_
e3a0: 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c 45 3d  OMIT_ALTERTABLE=
e3b0: 30 0a 3c 2f 70 3e 0a 0a 3c 70 3e 49 66 20 61 6e  0.</p>..<p>If an
e3c0: 79 20 6f 66 20 74 68 65 73 65 20 6f 70 74 69 6f  y of these optio
e3d0: 6e 73 20 61 72 65 20 64 65 66 69 6e 65 64 2c 20  ns are defined, 
e3e0: 74 68 65 6e 20 74 68 65 20 73 61 6d 65 20 73 65  then the same se
e3f0: 74 20 6f 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  t of SQLITE_OMIT
e400: 5f 2a 0a 6f 70 74 69 6f 6e 73 20 6d 75 73 74 20  _*.options must 
e410: 61 6c 73 6f 20 62 65 20 64 65 66 69 6e 65 64 20  also be defined 
e420: 77 68 65 6e 20 75 73 69 6e 67 20 74 68 65 20 5b  when using the [
e430: 4c 65 6d 6f 6e 20 70 61 72 73 65 72 20 67 65 6e  Lemon parser gen
e440: 65 72 61 74 6f 72 5d 0a 74 6f 6f 6c 20 74 6f 20  erator].tool to 
e450: 67 65 6e 65 72 61 74 65 20 74 68 65 0a 70 61 72  generate the.par
e460: 73 65 2e 63 20 66 69 6c 65 20 61 6e 64 20 77 68  se.c file and wh
e470: 65 6e 20 63 6f 6d 70 69 6c 69 6e 67 20 74 68 65  en compiling the
e480: 20 27 6d 6b 6b 65 79 77 6f 72 64 68 61 73 68 27   'mkkeywordhash'
e490: 20 74 6f 6f 6c 20 77 68 69 63 68 20 67 65 6e 65   tool which gene
e4a0: 72 61 74 65 73 20 0a 74 68 65 20 6b 65 79 77 6f  rates .the keywo
e4b0: 72 64 68 61 73 68 2e 68 20 66 69 6c 65 2e 0a 42  rdhash.h file..B
e4c0: 65 63 61 75 73 65 20 6f 66 20 74 68 69 73 2c 20  ecause of this, 
e4d0: 74 68 65 73 65 20 6f 70 74 69 6f 6e 73 20 6d 61  these options ma
e4e0: 79 20 6f 6e 6c 79 20 62 65 20 75 73 65 64 20 77  y only be used w
e4f0: 68 65 6e 20 74 68 65 20 6c 69 62 72 61 72 79 20  hen the library 
e500: 69 73 20 62 75 69 6c 74 0a 66 72 6f 6d 20 63 61  is built.from ca
e510: 6e 6f 6e 69 63 61 6c 20 73 6f 75 72 63 65 2c 20  nonical source, 
e520: 6e 6f 74 20 66 72 6f 6d 20 74 68 65 20 5b 61 6d  not from the [am
e530: 61 6c 67 61 6d 61 74 69 6f 6e 5d 2e 0a 53 6f 6d  algamation]..Som
e540: 65 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 2a 20  e SQLITE_OMIT_* 
e550: 6f 70 74 69 6f 6e 73 20 6d 69 67 68 74 20 77 6f  options might wo
e560: 72 6b 2c 20 6f 72 20 61 70 70 65 61 72 20 74 6f  rk, or appear to
e570: 20 77 6f 72 6b 2c 20 77 68 65 6e 20 75 73 65 64   work, when used
e580: 20 77 69 74 68 0a 74 68 65 20 5b 61 6d 61 6c 67   with.the [amalg
e590: 61 6d 61 74 69 6f 6e 5d 2e 20 20 42 75 74 20 74  amation].  But t
e5a0: 68 69 73 20 69 73 20 6e 6f 74 20 67 75 61 72 61  his is not guara
e5b0: 6e 74 65 65 64 2e 20 20 49 6e 20 67 65 6e 65 72  nteed.  In gener
e5c0: 61 6c 2c 20 61 6c 77 61 79 73 20 63 6f 6d 70 69  al, always compi
e5d0: 6c 65 0a 66 72 6f 6d 20 63 61 6e 6f 6e 69 63 61  le.from canonica
e5e0: 6c 20 73 6f 75 72 63 65 73 20 69 6e 20 6f 72 64  l sources in ord
e5f0: 65 72 20 74 6f 20 74 61 6b 65 20 61 64 76 61 6e  er to take advan
e600: 74 61 67 65 20 6f 66 20 53 51 4c 49 54 45 5f 4f  tage of SQLITE_O
e610: 4d 49 54 5f 2a 20 6f 70 74 69 6f 6e 73 2e 0a 3c  MIT_* options..<
e620: 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
e630: 3e 0a 3c 69 3e 3c 62 3e 49 6d 70 6f 72 74 61 6e  >.<i><b>Importan
e640: 74 20 4e 6f 74 65 3a 3c 2f 62 3e 20 54 68 65 20  t Note:</b> The 
e650: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 2a 20 6f 70  SQLITE_OMIT_* op
e660: 74 69 6f 6e 73 20 6d 61 79 20 6e 6f 74 20 77 6f  tions may not wo
e670: 72 6b 20 77 69 74 68 20 74 68 65 0a 5b 61 6d 61  rk with the.[ama
e680: 6c 67 61 6d 61 74 69 6f 6e 5d 2e 20 20 53 51 4c  lgamation].  SQL
e690: 49 54 45 5f 4f 4d 49 54 5f 2a 20 63 6f 6d 70 69  ITE_OMIT_* compi
e6a0: 6c 65 2d 74 69 6d 65 0a 6f 70 74 69 6f 6e 73 20  le-time.options 
e6b0: 75 73 75 61 6c 6c 79 20 77 6f 72 6b 20 63 6f 72  usually work cor
e6c0: 72 65 63 74 6c 79 20 6f 6e 6c 79 20 77 68 65 6e  rectly only when
e6d0: 20 53 51 4c 69 74 65 20 69 73 20 62 75 69 6c 74   SQLite is built
e6e0: 20 66 72 6f 6d 20 63 61 6e 6f 6e 69 63 61 6c 20   from canonical 
e6f0: 0a 73 6f 75 72 63 65 20 66 69 6c 65 73 2e 0a 3c  .source files..<
e700: 2f 69 3e 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  /i>.</blockquote
e710: 3e 0a 0a 0a 3c 70 3e 53 70 65 63 69 61 6c 20 76  >...<p>Special v
e720: 65 72 73 69 6f 6e 73 20 6f 66 20 74 68 65 20 53  ersions of the S
e730: 51 4c 69 74 65 20 61 6d 61 6c 67 61 6d 61 74 69  QLite amalgamati
e740: 6f 6e 20 74 68 61 74 20 64 6f 20 77 6f 72 6b 20  on that do work 
e750: 77 69 74 68 20 61 0a 70 72 65 64 65 74 65 72 6d  with a.predeterm
e760: 69 6e 65 64 20 73 65 74 20 6f 66 20 53 51 4c 49  ined set of SQLI
e770: 54 45 5f 4f 4d 49 54 5f 2a 20 6f 70 74 69 6f 6e  TE_OMIT_* option
e780: 73 20 63 61 6e 20 62 65 20 67 65 6e 65 72 61 74  s can be generat
e790: 65 64 2e 20 20 54 6f 20 64 6f 20 73 6f 2c 0a 6d  ed.  To do so,.m
e7a0: 61 6b 65 20 61 20 63 6f 70 79 20 6f 66 20 74 68  ake a copy of th
e7b0: 65 20 4d 61 6b 65 66 69 6c 65 2e 6c 69 6e 75 78  e Makefile.linux
e7c0: 2d 67 63 63 20 6d 61 6b 65 66 69 6c 65 20 74 65  -gcc makefile te
e7d0: 6d 70 6c 61 74 65 20 69 6e 20 74 68 65 20 63 61  mplate in the ca
e7e0: 6e 6f 6e 69 63 61 6c 0a 73 6f 75 72 63 65 20 63  nonical.source c
e7f0: 6f 64 65 20 64 69 73 74 72 69 62 75 74 69 6f 6e  ode distribution
e800: 2e 20 20 43 68 61 6e 67 65 20 74 68 65 20 6e 61  .  Change the na
e810: 6d 65 20 6f 66 20 79 6f 75 72 20 63 6f 70 79 20  me of your copy 
e820: 74 6f 20 73 69 6d 70 6c 79 20 22 4d 61 6b 65 66  to simply "Makef
e830: 69 6c 65 22 2e 0a 54 68 65 6e 20 65 64 69 74 20  ile"..Then edit 
e840: 22 4d 61 6b 65 66 69 6c 65 22 20 74 6f 20 73 65  "Makefile" to se
e850: 74 20 75 70 20 61 70 70 72 6f 70 72 69 61 74 65  t up appropriate
e860: 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70   compile-time op
e870: 74 69 6f 6e 73 2e 20 20 54 68 65 6e 0a 74 79 70  tions.  Then.typ
e880: 65 3a 0a 3c 63 6f 64 65 62 6c 6f 63 6b 3e 0a 6d  e:.<codeblock>.m
e890: 61 6b 65 20 63 6c 65 61 6e 3b 20 6d 61 6b 65 20  ake clean; make 
e8a0: 73 71 6c 69 74 65 33 2e 63 0a 3c 2f 63 6f 64 65  sqlite3.c.</code
e8b0: 62 6c 6f 63 6b 3e 0a 3c 70 3e 54 68 65 20 72 65  block>.<p>The re
e8c0: 73 75 6c 74 69 6e 67 20 22 73 71 6c 69 74 65 33  sulting "sqlite3
e8d0: 2e 63 22 20 61 6d 61 6c 67 61 6d 61 74 69 6f 6e  .c" amalgamation
e8e0: 20 63 6f 64 65 20 66 69 6c 65 20 28 61 6e 64 20   code file (and 
e8f0: 69 74 73 20 61 73 73 6f 63 69 61 74 65 64 0a 68  its associated.h
e900: 65 61 64 65 72 20 66 69 6c 65 20 22 73 71 6c 69  eader file "sqli
e910: 74 65 33 2e 68 22 29 20 63 61 6e 20 74 68 65 6e  te3.h") can then
e920: 20 62 65 20 6d 6f 76 65 64 20 74 6f 20 61 20 6e   be moved to a n
e930: 6f 6e 2d 75 6e 69 78 20 70 6c 61 74 66 6f 72 6d  on-unix platform
e940: 0a 66 6f 72 20 66 69 6e 61 6c 20 63 6f 6d 70 69  .for final compi
e950: 6c 61 74 69 6f 6e 20 75 73 69 6e 67 20 61 20 6e  lation using a n
e960: 61 74 69 76 65 20 63 6f 6d 70 69 6c 65 72 2e 3c  ative compiler.<
e970: 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 53 51 4c 49  /p>..<p>The SQLI
e980: 54 45 5f 4f 4d 49 54 5f 2a 20 6f 70 74 69 6f 6e  TE_OMIT_* option
e990: 73 20 61 72 65 20 75 6e 73 75 70 70 6f 72 74 65  s are unsupporte
e9a0: 64 2e 20 20 42 79 20 74 68 69 73 20 77 65 20 6d  d.  By this we m
e9b0: 65 61 6e 20 74 68 61 74 0a 61 6e 20 53 51 4c 49  ean that.an SQLI
e9c0: 54 45 5f 4f 4d 49 54 5f 2a 20 6f 70 74 69 6f 6e  TE_OMIT_* option
e9d0: 20 74 68 61 74 20 6f 6d 69 74 73 20 63 6f 64 65   that omits code
e9e0: 20 66 72 6f 6d 20 74 68 65 20 62 75 69 6c 64 20   from the build 
e9f0: 69 6e 20 74 68 65 20 63 75 72 72 65 6e 74 0a 72  in the current.r
ea00: 65 6c 65 61 73 65 20 6d 69 67 68 74 20 62 65 63  elease might bec
ea10: 6f 6d 65 20 61 20 6e 6f 2d 6f 70 20 69 6e 20 74  ome a no-op in t
ea20: 68 65 20 6e 65 78 74 20 72 65 6c 65 61 73 65 2e  he next release.
ea30: 20 20 4f 72 20 74 68 65 20 6f 74 68 65 72 20 77    Or the other w
ea40: 61 79 20 61 72 6f 75 6e 64 3a 0a 61 6e 20 53 51  ay around:.an SQ
ea50: 4c 49 54 45 5f 4f 4d 49 54 5f 2a 20 74 68 61 74  LITE_OMIT_* that
ea60: 20 69 73 20 61 20 6e 6f 2d 6f 70 20 69 6e 20 74   is a no-op in t
ea70: 68 65 20 63 75 72 72 65 6e 74 20 72 65 6c 65 61  he current relea
ea80: 73 65 20 6d 69 67 68 74 20 63 61 75 73 65 20 63  se might cause c
ea90: 6f 64 65 0a 74 6f 20 62 65 20 65 78 63 6c 75 64  ode.to be exclud
eaa0: 65 64 20 69 6e 20 74 68 65 20 6e 65 78 74 20 72  ed in the next r
eab0: 65 6c 65 61 73 65 2e 20 20 41 6c 73 6f 2c 20 6e  elease.  Also, n
eac0: 6f 74 20 61 6c 6c 20 53 51 4c 49 54 45 5f 4f 4d  ot all SQLITE_OM
ead0: 49 54 5f 2a 20 6f 70 74 69 6f 6e 73 0a 61 72 65  IT_* options.are
eae0: 20 74 65 73 74 65 64 2e 20 20 53 6f 6d 65 20 53   tested.  Some S
eaf0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 2a 20 6f 70 74  QLITE_OMIT_* opt
eb00: 69 6f 6e 73 20 6d 69 67 68 74 20 63 61 75 73 65  ions might cause
eb10: 20 53 51 4c 69 74 65 20 74 6f 20 6d 61 6c 66 75   SQLite to malfu
eb20: 6e 63 74 69 6f 6e 0a 61 6e 64 2f 6f 72 20 70 72  nction.and/or pr
eb30: 6f 76 69 64 65 20 69 6e 63 6f 72 72 65 63 74 20  ovide incorrect 
eb40: 61 6e 73 77 65 72 73 2e 0a 0a 3c 62 6c 6f 63 6b  answers...<block
eb50: 71 75 6f 74 65 3e 0a 3c 69 3e 3c 62 3e 49 6d 70  quote>.<i><b>Imp
eb60: 6f 72 74 61 6e 74 20 4e 6f 74 65 3a 3c 2f 62 3e  ortant Note:</b>
eb70: 0a 54 68 65 20 53 51 4c 49 54 45 5f 4f 4d 49 54  .The SQLITE_OMIT
eb80: 5f 2a 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  _* compile-time 
eb90: 6f 70 74 69 6f 6e 73 20 61 72 65 20 6d 6f 73 74  options are most
eba0: 6c 79 20 75 6e 73 75 70 70 6f 72 74 65 64 2e 0a  ly unsupported..
ebb0: 3c 2f 69 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  </i></blockquote
ebc0: 3e 0a 0a 3c 70 3e 54 68 65 20 66 6f 6c 6c 6f 77  >..<p>The follow
ebd0: 69 6e 67 20 61 72 65 20 74 68 65 20 61 76 61 69  ing are the avai
ebe0: 6c 61 62 6c 65 20 4f 4d 49 54 20 6f 70 74 69 6f  lable OMIT optio
ebf0: 6e 73 3a 0a 0a 3c 74 63 6c 3e 0a 43 4f 4d 50 49  ns:..<tcl>.COMPI
ec00: 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54  LE_OPTION {SQLIT
ec10: 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c  E_OMIT_ALTERTABL
ec20: 45 7d 20 7b 0a 20 20 57 68 65 6e 20 74 68 69 73  E} {.  When this
ec30: 20 6f 70 74 69 6f 6e 20 69 73 20 64 65 66 69 6e   option is defin
ec40: 65 64 2c 20 74 68 65 20 0a 20 20 5b 41 4c 54 45  ed, the .  [ALTE
ec50: 52 20 54 41 42 4c 45 5d 20 63 6f 6d 6d 61 6e 64  R TABLE] command
ec60: 20 69 73 20 6e 6f 74 20 69 6e 63 6c 75 64 65 64   is not included
ec70: 20 69 6e 20 74 68 65 20 0a 20 20 6c 69 62 72 61   in the .  libra
ec80: 72 79 2e 20 45 78 65 63 75 74 69 6e 67 20 61 6e  ry. Executing an
ec90: 20 5b 41 4c 54 45 52 20 54 41 42 4c 45 5d 20 73   [ALTER TABLE] s
eca0: 74 61 74 65 6d 65 6e 74 20 63 61 75 73 65 73 20  tatement causes 
ecb0: 61 20 70 61 72 73 65 20 65 72 72 6f 72 2e 0a 7d  a parse error..}
ecc0: 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e  ..COMPILE_OPTION
ecd0: 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e   {SQLITE_OMIT_AN
ece0: 41 4c 59 5a 45 7d 20 7b 0a 20 20 57 68 65 6e 20  ALYZE} {.  When 
ecf0: 74 68 69 73 20 6f 70 74 69 6f 6e 20 69 73 20 64  this option is d
ed00: 65 66 69 6e 65 64 2c 20 74 68 65 20 5b 41 4e 41  efined, the [ANA
ed10: 4c 59 5a 45 5d 20 63 6f 6d 6d 61 6e 64 20 69 73  LYZE] command is
ed20: 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 0a 20 20   omitted from.  
ed30: 74 68 65 20 62 75 69 6c 64 2e 0a 7d 0a 0a 43 4f  the build..}..CO
ed40: 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51  MPILE_OPTION {SQ
ed50: 4c 49 54 45 5f 4f 4d 49 54 5f 41 54 54 41 43 48  LITE_OMIT_ATTACH
ed60: 7d 20 7b 0a 20 20 57 68 65 6e 20 74 68 69 73 20  } {.  When this 
ed70: 6f 70 74 69 6f 6e 20 69 73 20 64 65 66 69 6e 65  option is define
ed80: 64 2c 20 74 68 65 20 5b 41 54 54 41 43 48 5d 20  d, the [ATTACH] 
ed90: 61 6e 64 20 5b 44 45 54 41 43 48 5d 20 63 6f 6d  and [DETACH] com
eda0: 6d 61 6e 64 73 20 61 72 65 0a 20 20 6f 6d 69 74  mands are.  omit
edb0: 74 65 64 20 66 72 6f 6d 20 74 68 65 20 62 75 69  ted from the bui
edc0: 6c 64 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f  ld..}..COMPILE_O
edd0: 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d  PTION {SQLITE_OM
ede0: 49 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e  IT_AUTHORIZATION
edf0: 7d 20 7b 0a 20 20 44 65 66 69 6e 69 6e 67 20 74  } {.  Defining t
ee00: 68 69 73 20 6f 70 74 69 6f 6e 20 6f 6d 69 74 73  his option omits
ee10: 20 74 68 65 20 61 75 74 68 6f 72 69 7a 61 74 69   the authorizati
ee20: 6f 6e 20 63 61 6c 6c 62 61 63 6b 20 66 65 61 74  on callback feat
ee30: 75 72 65 20 66 72 6f 6d 20 74 68 65 0a 20 20 6c  ure from the.  l
ee40: 69 62 72 61 72 79 2e 20 54 68 65 20 5b 73 71 6c  ibrary. The [sql
ee50: 69 74 65 33 5f 73 65 74 5f 61 75 74 68 6f 72 69  ite3_set_authori
ee60: 7a 65 72 28 29 5d 20 41 50 49 20 66 75 6e 63 74  zer()] API funct
ee70: 69 6f 6e 20 69 73 20 6e 6f 74 20 70 72 65 73 65  ion is not prese
ee80: 6e 74 0a 20 20 69 6e 20 74 68 65 20 6c 69 62 72  nt.  in the libr
ee90: 61 72 79 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f  ary..}..COMPILE_
eea0: 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f  OPTION {SQLITE_O
eeb0: 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e  MIT_AUTOINCREMEN
eec0: 54 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70 74 69  T} {.  This opti
eed0: 6f 6e 20 69 73 20 6f 6d 69 74 73 20 74 68 65 20  on is omits the 
eee0: 5b 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 5d 20  [AUTOINCREMENT] 
eef0: 66 65 61 74 75 72 65 2e 20 0a 20 20 57 68 65 6e  feature. .  When
ef00: 20 74 68 69 73 20 69 73 20 6d 61 63 72 6f 20 69   this is macro i
ef10: 73 20 64 65 66 69 6e 65 64 2c 20 63 6f 6c 75 6d  s defined, colum
ef20: 6e 73 20 64 65 63 6c 61 72 65 64 20 61 73 20 0a  ns declared as .
ef30: 20 20 22 5b 49 4e 54 45 47 45 52 20 50 52 49 4d    "[INTEGER PRIM
ef40: 41 52 59 20 4b 45 59 5d 20 41 55 54 4f 49 4e 43  ARY KEY] AUTOINC
ef50: 52 45 4d 45 4e 54 22 0a 20 20 62 65 68 61 76 65  REMENT".  behave
ef60: 20 69 6e 20 74 68 65 20 73 61 6d 65 20 77 61 79   in the same way
ef70: 20 61 73 20 63 6f 6c 75 6d 6e 73 20 64 65 63 6c   as columns decl
ef80: 61 72 65 64 20 61 73 20 22 5b 49 4e 54 45 47 45  ared as "[INTEGE
ef90: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 5d 22 20  R PRIMARY KEY]" 
efa0: 77 68 65 6e 20 61 20 0a 20 20 4e 55 4c 4c 20 69  when a .  NULL i
efb0: 73 20 69 6e 73 65 72 74 65 64 2e 20 54 68 65 20  s inserted. The 
efc0: 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 20  sqlite_sequence 
efd0: 73 79 73 74 65 6d 20 74 61 62 6c 65 20 69 73 20  system table is 
efe0: 6e 65 69 74 68 65 72 20 63 72 65 61 74 65 64 2c  neither created,
eff0: 20 6e 6f 72 0a 20 20 72 65 73 70 65 63 74 65 64   nor.  respected
f000: 20 69 66 20 69 74 20 61 6c 72 65 61 64 79 20 65   if it already e
f010: 78 69 73 74 73 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c  xists..}..COMPIL
f020: 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45  E_OPTION {SQLITE
f030: 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 49 54 7d 20  _OMIT_AUTOINIT} 
f040: 7b 0a 20 20 46 6f 72 20 62 61 63 6b 77 61 72 64  {.  For backward
f050: 73 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20  s compatibility 
f060: 77 69 74 68 20 6f 6c 64 65 72 20 76 65 72 73 69  with older versi
f070: 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 74 68  ons of SQLite th
f080: 61 74 20 6c 61 63 6b 0a 20 20 74 68 65 20 5b 73  at lack.  the [s
f090: 71 6c 69 74 65 33 5f 69 6e 69 74 69 61 6c 69 7a  qlite3_initializ
f0a0: 65 28 29 5d 20 69 6e 74 65 72 66 61 63 65 2c 20  e()] interface, 
f0b0: 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 69 6e 69  the [sqlite3_ini
f0c0: 74 69 61 6c 69 7a 65 28 29 5d 20 69 6e 74 65 72  tialize()] inter
f0d0: 66 61 63 65 0a 20 20 69 73 20 63 61 6c 6c 65 64  face.  is called
f0e0: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 75   automatically u
f0f0: 70 6f 6e 20 65 6e 74 72 79 20 74 6f 20 63 65 72  pon entry to cer
f100: 74 61 69 6e 20 6b 65 79 20 69 6e 74 65 72 66 61  tain key interfa
f110: 63 65 73 20 73 75 63 68 20 61 73 0a 20 20 5b 73  ces such as.  [s
f120: 71 6c 69 74 65 33 5f 6f 70 65 6e 28 29 5d 2c 20  qlite3_open()], 
f130: 5b 73 71 6c 69 74 65 33 5f 76 66 73 5f 72 65 67  [sqlite3_vfs_reg
f140: 69 73 74 65 72 28 29 5d 2c 20 61 6e 64 20 5b 73  ister()], and [s
f150: 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 29  qlite3_mprintf()
f160: 5d 2e 0a 20 20 54 68 65 20 6f 76 65 72 68 65 61  ]..  The overhea
f170: 64 20 6f 66 20 69 6e 76 6f 6b 69 6e 67 20 5b 73  d of invoking [s
f180: 71 6c 69 74 65 33 5f 69 6e 69 74 69 61 6c 69 7a  qlite3_initializ
f190: 65 28 29 5d 20 61 75 74 6f 6d 61 74 69 63 61 6c  e()] automatical
f1a0: 6c 79 20 69 6e 20 74 68 69 73 0a 20 20 77 61 79  ly in this.  way
f1b0: 20 6d 61 79 20 62 65 20 6f 6d 69 74 74 65 64 20   may be omitted 
f1c0: 62 79 20 62 75 69 6c 64 69 6e 67 20 53 51 4c 69  by building SQLi
f1d0: 74 65 20 77 69 74 68 20 74 68 65 20 53 51 4c 49  te with the SQLI
f1e0: 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 49 54  TE_OMIT_AUTOINIT
f1f0: 0a 20 20 43 2d 70 72 65 70 72 6f 63 65 73 73 6f  .  C-preprocesso
f200: 72 20 6d 61 63 72 6f 2e 20 20 57 68 65 6e 20 62  r macro.  When b
f210: 75 69 6c 74 20 75 73 69 6e 67 20 53 51 4c 49 54  uilt using SQLIT
f220: 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 49 54 2c  E_OMIT_AUTOINIT,
f230: 20 53 51 4c 69 74 65 0a 20 20 77 69 6c 6c 20 6e   SQLite.  will n
f240: 6f 74 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  ot automatically
f250: 20 69 6e 69 74 69 61 6c 69 7a 65 20 69 74 73 65   initialize itse
f260: 6c 66 20 61 6e 64 20 74 68 65 20 61 70 70 6c 69  lf and the appli
f270: 63 61 74 69 6f 6e 20 69 73 20 72 65 71 75 69 72  cation is requir
f280: 65 64 0a 20 20 74 6f 20 69 6e 76 6f 6b 65 20 5b  ed.  to invoke [
f290: 73 71 6c 69 74 65 33 5f 69 6e 69 74 69 61 6c 69  sqlite3_initiali
f2a0: 7a 65 28 29 5d 20 64 69 72 65 63 74 6c 79 20 70  ze()] directly p
f2b0: 72 69 6f 72 20 74 6f 20 62 65 67 69 6e 6e 69 6e  rior to beginnin
f2c0: 67 20 75 73 65 20 6f 66 20 74 68 65 0a 20 20 53  g use of the.  S
f2d0: 51 4c 69 74 65 20 6c 69 62 72 61 72 79 2e 0a 7d  QLite library..}
f2e0: 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e  ..COMPILE_OPTION
f2f0: 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55   {SQLITE_OMIT_AU
f300: 54 4f 4d 41 54 49 43 5f 49 4e 44 45 58 7d 20 7b  TOMATIC_INDEX} {
f310: 0a 20 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 69  .  This option i
f320: 73 20 75 73 65 64 20 74 6f 20 6f 6d 69 74 20 74  s used to omit t
f330: 68 65 20 0a 20 20 5b 61 75 74 6f 6d 61 74 69 63  he .  [automatic
f340: 20 69 6e 64 65 78 69 6e 67 5d 20 66 75 6e 63 74   indexing] funct
f350: 69 6f 6e 61 6c 69 74 79 2e 0a 20 20 53 65 65 20  ionality..  See 
f360: 61 6c 73 6f 3a 20 5b 53 51 4c 49 54 45 5f 44 45  also: [SQLITE_DE
f370: 46 41 55 4c 54 5f 41 55 54 4f 4d 41 54 49 43 5f  FAULT_AUTOMATIC_
f380: 49 4e 44 45 58 5d 2e 0a 7d 0a 0a 43 4f 4d 50 49  INDEX]..}..COMPI
f390: 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54  LE_OPTION {SQLIT
f3a0: 45 5f 4f 4d 49 54 5f 41 55 54 4f 52 45 53 45 54  E_OMIT_AUTORESET
f3b0: 7d 20 7b 0a 20 20 42 79 20 64 65 66 61 75 6c 74  } {.  By default
f3c0: 2c 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 73  , the [sqlite3_s
f3d0: 74 65 70 28 29 5d 20 69 6e 74 65 72 66 61 63 65  tep()] interface
f3e0: 20 77 69 6c 6c 20 61 75 74 6f 6d 61 74 69 63 61   will automatica
f3f0: 6c 6c 79 20 69 6e 76 6f 6b 65 0a 20 20 5b 73 71  lly invoke.  [sq
f400: 6c 69 74 65 33 5f 72 65 73 65 74 28 29 5d 20 74  lite3_reset()] t
f410: 6f 20 72 65 73 65 74 20 74 68 65 20 5b 70 72 65  o reset the [pre
f420: 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 5d  pared statement]
f430: 20 69 66 20 6e 65 63 65 73 73 61 72 79 2e 20 20   if necessary.  
f440: 54 68 69 73 0a 20 20 63 6f 6d 70 69 6c 65 2d 74  This.  compile-t
f450: 69 6d 65 20 6f 70 74 69 6f 6e 20 63 68 61 6e 67  ime option chang
f460: 65 73 20 74 68 61 74 20 62 65 68 61 76 69 6f 72  es that behavior
f470: 20 73 6f 20 74 68 61 74 20 5b 73 71 6c 69 74 65   so that [sqlite
f480: 33 5f 73 74 65 70 28 29 5d 20 77 69 6c 6c 0a 20  3_step()] will. 
f490: 20 72 65 74 75 72 6e 20 5b 53 51 4c 49 54 45 5f   return [SQLITE_
f4a0: 4d 49 53 55 53 45 5d 20 69 66 20 69 74 20 63 61  MISUSE] if it ca
f4b0: 6c 6c 65 64 20 61 67 61 69 6e 20 61 66 74 65 72  lled again after
f4c0: 20 72 65 74 75 72 6e 69 6e 67 20 61 6e 79 74 68   returning anyth
f4d0: 69 6e 67 20 6f 74 68 65 72 0a 20 20 74 68 61 6e  ing other.  than
f4e0: 20 5b 53 51 4c 49 54 45 5f 52 4f 57 5d 2c 20 5b   [SQLITE_ROW], [
f4f0: 53 51 4c 49 54 45 5f 42 55 53 59 5d 2c 20 6f 72  SQLITE_BUSY], or
f500: 20 5b 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 5d   [SQLITE_LOCKED]
f510: 20 75 6e 6c 65 73 73 20 74 68 65 72 65 20 77 61   unless there wa
f520: 73 20 61 6e 0a 20 20 69 6e 74 65 72 76 65 6e 69  s an.  interveni
f530: 6e 67 20 63 61 6c 6c 20 74 6f 20 5b 73 71 6c 69  ng call to [sqli
f540: 74 65 33 5f 72 65 73 65 74 28 29 5d 2e 0a 0a 20  te3_reset()]... 
f550: 20 49 6e 20 53 51 4c 69 74 65 20 5b 76 65 72 73   In SQLite [vers
f560: 69 6f 6e 20 33 2e 36 2e 32 33 2e 31 5d 20 28 5b  ion 3.6.23.1] ([
f570: 64 61 74 65 6f 66 3a 33 2e 36 2e 32 33 2e 31 5d  dateof:3.6.23.1]
f580: 29 0a 20 20 61 6e 64 20 65 61 72 6c 69 65 72 2c  ).  and earlier,
f590: 20 5b 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29   [sqlite3_step()
f5a0: 5d 20 75 73 65 64 20 74 6f 20 61 6c 77 61 79 73  ] used to always
f5b0: 0a 20 20 72 65 74 75 72 6e 20 5b 53 51 4c 49 54  .  return [SQLIT
f5c0: 45 5f 4d 49 53 55 53 45 5d 20 69 66 20 69 74 20  E_MISUSE] if it 
f5d0: 77 61 73 20 69 6e 76 6f 6b 65 64 20 61 67 61 69  was invoked agai
f5e0: 6e 20 61 66 74 65 72 20 72 65 74 75 72 6e 69 6e  n after returnin
f5f0: 67 20 61 6e 79 74 68 69 6e 67 0a 20 20 6f 74 68  g anything.  oth
f600: 65 72 20 74 68 61 6e 20 5b 53 51 4c 49 54 45 5f  er than [SQLITE_
f610: 52 4f 57 5d 20 77 69 74 68 6f 75 74 20 61 6e 20  ROW] without an 
f620: 69 6e 74 65 72 76 65 6e 69 6e 67 20 63 61 6c 6c  intervening call
f630: 20 74 6f 20 5b 73 71 6c 69 74 65 33 5f 72 65 73   to [sqlite3_res
f640: 65 74 28 29 5d 2e 0a 20 20 54 68 69 73 20 63 61  et()]..  This ca
f650: 75 73 65 64 20 70 72 6f 62 6c 65 6d 73 20 6f 6e  used problems on
f660: 20 73 6f 6d 65 20 70 6f 6f 72 6c 79 20 77 72 69   some poorly wri
f670: 74 74 65 6e 20 73 6d 61 72 74 70 68 6f 6e 65 20  tten smartphone 
f680: 61 70 70 6c 69 63 61 74 69 6f 6e 73 20 77 68 69  applications whi
f690: 63 68 0a 20 20 64 69 64 20 6e 6f 74 20 63 6f 72  ch.  did not cor
f6a0: 72 65 63 74 6c 79 20 68 61 6e 64 6c 65 20 74 68  rectly handle th
f6b0: 65 20 5b 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44  e [SQLITE_LOCKED
f6c0: 5d 20 61 6e 64 20 5b 53 51 4c 49 54 45 5f 42 55  ] and [SQLITE_BU
f6d0: 53 59 5d 20 65 72 72 6f 72 20 0a 20 20 72 65 74  SY] error .  ret
f6e0: 75 72 6e 73 2e 20 20 52 61 74 68 65 72 20 74 68  urns.  Rather th
f6f0: 61 6e 20 66 69 78 20 74 68 65 20 6d 61 6e 79 20  an fix the many 
f700: 64 65 66 65 63 74 69 76 65 20 73 6d 61 72 74 70  defective smartp
f710: 68 6f 6e 65 20 61 70 70 6c 69 63 61 74 69 6f 6e  hone application
f720: 73 2c 20 0a 20 20 74 68 65 20 62 65 68 61 76 69  s, .  the behavi
f730: 6f 72 20 6f 66 20 53 51 4c 69 74 65 20 77 61 73  or of SQLite was
f740: 20 63 68 61 6e 67 65 64 20 69 6e 20 33 2e 36 2e   changed in 3.6.
f750: 32 33 2e 32 20 74 6f 20 61 75 74 6f 6d 61 74 69  23.2 to automati
f760: 63 61 6c 6c 79 20 72 65 73 65 74 0a 20 20 74 68  cally reset.  th
f770: 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  e prepared state
f780: 6d 65 6e 74 2e 20 20 42 75 74 20 74 68 61 74 20  ment.  But that 
f790: 63 68 61 6e 67 65 64 20 63 61 75 73 65 64 20 69  changed caused i
f7a0: 73 73 75 65 73 20 69 6e 20 6f 74 68 65 72 20 0a  ssues in other .
f7b0: 20 20 69 6d 70 72 6f 70 65 72 6c 79 20 69 6d 70    improperly imp
f7c0: 6c 65 6d 65 6e 74 65 64 20 61 70 70 6c 69 63 61  lemented applica
f7d0: 74 69 6f 6e 73 20 74 68 61 74 20 77 65 72 65 20  tions that were 
f7e0: 61 63 74 75 61 6c 6c 79 20 6c 6f 6f 6b 69 6e 67  actually looking
f7f0: 0a 20 20 66 6f 72 20 61 6e 20 5b 53 51 4c 49 54  .  for an [SQLIT
f800: 45 5f 4d 49 53 55 53 45 5d 20 72 65 74 75 72 6e  E_MISUSE] return
f810: 20 74 6f 20 74 65 72 6d 69 6e 61 74 65 20 74 68   to terminate th
f820: 65 69 72 20 71 75 65 72 79 20 6c 6f 6f 70 73 2e  eir query loops.
f830: 20 20 28 41 6e 79 74 69 6d 65 0a 20 20 61 6e 20    (Anytime.  an 
f840: 61 70 70 6c 69 63 61 74 69 6f 6e 20 67 65 74 73  application gets
f850: 20 61 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53   an SQLITE_MISUS
f860: 45 20 65 72 72 6f 72 20 63 6f 64 65 20 66 72 6f  E error code fro
f870: 6d 20 53 51 4c 69 74 65 2c 20 74 68 61 74 20 6d  m SQLite, that m
f880: 65 61 6e 73 20 74 68 65 0a 20 20 61 70 70 6c 69  eans the.  appli
f890: 63 61 74 69 6f 6e 20 69 73 20 6d 69 73 75 73 69  cation is misusi
f8a0: 6e 67 20 74 68 65 20 53 51 4c 69 74 65 20 69 6e  ng the SQLite in
f8b0: 74 65 72 66 61 63 65 20 61 6e 64 20 69 73 20 74  terface and is t
f8c0: 68 75 73 20 69 6e 63 6f 72 72 65 63 74 6c 79 0a  hus incorrectly.
f8d0: 20 20 69 6d 70 6c 65 6d 65 6e 74 65 64 2e 29 20    implemented.) 
f8e0: 20 54 68 65 20 53 51 4c 49 54 45 5f 4f 4d 49 54   The SQLITE_OMIT
f8f0: 5f 41 55 54 4f 52 45 53 45 54 20 69 6e 74 65 72  _AUTORESET inter
f900: 66 61 63 65 20 77 61 73 20 61 64 64 65 64 20 74  face was added t
f910: 6f 20 53 51 4c 69 74 65 0a 20 20 5b 76 65 72 73  o SQLite.  [vers
f920: 69 6f 6e 20 33 2e 37 2e 35 5d 20 28 5b 64 61 74  ion 3.7.5] ([dat
f930: 65 6f 66 3a 33 2e 37 2e 35 5d 29 20 69 6e 20 61  eof:3.7.5]) in a
f940: 6e 20 65 66 66 6f 72 74 20 74 6f 20 67 65 74 20  n effort to get 
f950: 61 6c 6c 20 6f 66 20 74 68 65 20 28 62 72 6f 6b  all of the (brok
f960: 65 6e 29 0a 20 20 61 70 70 6c 69 63 61 74 69 6f  en).  applicatio
f970: 6e 73 20 74 6f 20 77 6f 72 6b 20 61 67 61 69 6e  ns to work again
f980: 20 77 69 74 68 6f 75 74 20 68 61 76 69 6e 67 20   without having 
f990: 74 6f 20 61 63 74 75 61 6c 6c 79 20 66 69 78 20  to actually fix 
f9a0: 74 68 65 20 61 70 70 6c 69 63 61 74 69 6f 6e 73  the applications
f9b0: 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54  ..}..COMPILE_OPT
f9c0: 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54  ION {SQLITE_OMIT
f9d0: 5f 41 55 54 4f 56 41 43 55 55 4d 7d 20 7b 0a 20  _AUTOVACUUM} {. 
f9e0: 20 49 66 20 74 68 69 73 20 6f 70 74 69 6f 6e 20   If this option 
f9f0: 69 73 20 64 65 66 69 6e 65 64 2c 20 74 68 65 20  is defined, the 
fa00: 6c 69 62 72 61 72 79 20 63 61 6e 6e 6f 74 20 63  library cannot c
fa10: 72 65 61 74 65 20 6f 72 20 77 72 69 74 65 20 74  reate or write t
fa20: 6f 20 0a 20 20 64 61 74 61 62 61 73 65 73 20 74  o .  databases t
fa30: 68 61 74 20 73 75 70 70 6f 72 74 20 5b 61 75 74  hat support [aut
fa40: 6f 5f 76 61 63 75 75 6d 5d 2e 0a 20 20 45 78 65  o_vacuum]..  Exe
fa50: 63 75 74 69 6e 67 20 61 20 5b 50 52 41 47 4d 41  cuting a [PRAGMA
fa60: 20 61 75 74 6f 5f 76 61 63 75 75 6d 5d 20 73 74   auto_vacuum] st
fa70: 61 74 65 6d 65 6e 74 20 69 73 20 6e 6f 74 20 61  atement is not a
fa80: 6e 20 65 72 72 6f 72 0a 20 20 28 73 69 6e 63 65  n error.  (since
fa90: 20 75 6e 6b 6e 6f 77 6e 20 50 52 41 47 4d 41 73   unknown PRAGMAs
faa0: 20 61 72 65 20 73 69 6c 65 6e 74 6c 79 20 69 67   are silently ig
fab0: 6e 6f 72 65 64 29 2c 20 62 75 74 20 64 6f 65 73  nored), but does
fac0: 20 6e 6f 74 20 72 65 74 75 72 6e 20 61 20 76 61   not return a va
fad0: 6c 75 65 0a 20 20 6f 72 20 6d 6f 64 69 66 79 20  lue.  or modify 
fae0: 74 68 65 20 61 75 74 6f 2d 76 61 63 75 75 6d 20  the auto-vacuum 
faf0: 66 6c 61 67 20 69 6e 20 74 68 65 20 64 61 74 61  flag in the data
fb00: 62 61 73 65 20 66 69 6c 65 2e 20 49 66 20 61 20  base file. If a 
fb10: 64 61 74 61 62 61 73 65 20 74 68 61 74 0a 20 20  database that.  
fb20: 73 75 70 70 6f 72 74 73 20 61 75 74 6f 2d 76 61  supports auto-va
fb30: 63 75 75 6d 20 69 73 20 6f 70 65 6e 65 64 20 62  cuum is opened b
fb40: 79 20 61 20 6c 69 62 72 61 72 79 20 63 6f 6d 70  y a library comp
fb50: 69 6c 65 64 20 77 69 74 68 20 74 68 69 73 20 6f  iled with this o
fb60: 70 74 69 6f 6e 2c 20 69 74 0a 20 20 69 73 20 61  ption, it.  is a
fb70: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 6f 70 65  utomatically ope
fb80: 6e 65 64 20 69 6e 20 72 65 61 64 2d 6f 6e 6c 79  ned in read-only
fb90: 20 6d 6f 64 65 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c   mode..}..COMPIL
fba0: 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45  E_OPTION {SQLITE
fbb0: 5f 4f 4d 49 54 5f 42 45 54 57 45 45 4e 5f 4f 50  _OMIT_BETWEEN_OP
fbc0: 54 49 4d 49 5a 41 54 49 4f 4e 7d 20 7b 0a 20 20  TIMIZATION} {.  
fbd0: 54 68 69 73 20 6f 70 74 69 6f 6e 20 64 69 73 61  This option disa
fbe0: 62 6c 65 73 20 74 68 65 20 75 73 65 20 6f 66 20  bles the use of 
fbf0: 69 6e 64 69 63 65 73 20 77 69 74 68 20 57 48 45  indices with WHE
fc00: 52 45 20 63 6c 61 75 73 65 20 74 65 72 6d 73 0a  RE clause terms.
fc10: 20 20 74 68 61 74 20 65 6d 70 6c 6f 79 20 74 68    that employ th
fc20: 65 20 42 45 54 57 45 45 4e 20 6f 70 65 72 61 74  e BETWEEN operat
fc30: 6f 72 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f  or..}..COMPILE_O
fc40: 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d  PTION {SQLITE_OM
fc50: 49 54 5f 42 4c 4f 42 5f 4c 49 54 45 52 41 4c 7d  IT_BLOB_LITERAL}
fc60: 20 7b 0a 20 20 57 68 65 6e 20 74 68 69 73 20 6f   {.  When this o
fc70: 70 74 69 6f 6e 20 69 73 20 64 65 66 69 6e 65 64  ption is defined
fc80: 2c 20 69 74 20 69 73 20 6e 6f 74 20 70 6f 73 73  , it is not poss
fc90: 69 62 6c 65 20 74 6f 20 73 70 65 63 69 66 79 20  ible to specify 
fca0: 61 20 62 6c 6f 62 20 69 6e 0a 20 20 61 6e 20 53  a blob in.  an S
fcb0: 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 75 73 69  QL statement usi
fcc0: 6e 67 20 74 68 65 20 58 27 41 42 43 44 27 20 73  ng the X'ABCD' s
fcd0: 79 6e 74 61 78 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c  yntax..}..COMPIL
fce0: 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45  E_OPTION {SQLITE
fcf0: 5f 4f 4d 49 54 5f 42 54 52 45 45 43 4f 55 4e 54  _OMIT_BTREECOUNT
fd00: 7d 20 7b 0a 20 20 57 68 65 6e 20 74 68 69 73 20  } {.  When this 
fd10: 6f 70 74 69 6f 6e 20 69 73 20 64 65 66 69 6e 65  option is define
fd20: 64 2c 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69  d, an optimizati
fd30: 6f 6e 20 74 68 61 74 20 61 63 63 65 6c 65 72 61  on that accelera
fd40: 74 65 73 20 63 6f 75 6e 74 69 6e 67 0a 20 20 61  tes counting.  a
fd50: 6c 6c 20 65 6e 74 72 69 65 73 20 69 6e 20 61 20  ll entries in a 
fd60: 74 61 62 6c 65 20 28 69 6e 20 6f 74 68 65 72 20  table (in other 
fd70: 77 6f 72 64 73 2c 20 61 6e 20 6f 70 74 69 6d 69  words, an optimi
fd80: 7a 61 74 69 6f 6e 20 74 68 61 74 20 68 65 6c 70  zation that help
fd90: 73 0a 20 20 22 53 45 4c 45 43 54 20 63 6f 75 6e  s.  "SELECT coun
fda0: 74 28 2a 29 20 46 52 4f 4d 20 74 61 62 6c 65 22  t(*) FROM table"
fdb0: 20 72 75 6e 20 66 61 73 74 65 72 29 20 69 73 20   run faster) is 
fdc0: 6f 6d 69 74 74 65 64 2e 0a 7d 0a 0a 43 4f 4d 50  omitted..}..COMP
fdd0: 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49  ILE_OPTION {SQLI
fde0: 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f  TE_OMIT_BUILTIN_
fdf0: 54 45 53 54 7d 20 7b 0a 20 20 54 68 69 73 20 63  TEST} {.  This c
fe00: 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69  ompile-time opti
fe10: 6f 6e 20 68 61 73 20 62 65 65 6e 20 72 65 6e 61  on has been rena
fe20: 6d 65 64 20 74 6f 20 5b 53 51 4c 49 54 45 5f 55  med to [SQLITE_U
fe30: 4e 54 45 53 54 41 42 4c 45 5d 2e 0a 7d 0a 0a 43  NTESTABLE]..}..C
fe40: 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53  OMPILE_OPTION {S
fe50: 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54 7d  QLITE_OMIT_CAST}
fe60: 20 7b 0a 20 20 54 68 69 73 20 6f 70 74 69 6f 6e   {.  This option
fe70: 20 63 61 75 73 65 73 20 53 51 4c 69 74 65 20 74   causes SQLite t
fe80: 6f 20 6f 6d 69 74 20 73 75 70 70 6f 72 74 20 66  o omit support f
fe90: 6f 72 20 74 68 65 20 43 41 53 54 20 6f 70 65 72  or the CAST oper
fea0: 61 74 6f 72 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45  ator..}..COMPILE
feb0: 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f  _OPTION {SQLITE_
fec0: 4f 4d 49 54 5f 43 48 45 43 4b 7d 20 7b 0a 20 20  OMIT_CHECK} {.  
fed0: 54 68 69 73 20 6f 70 74 69 6f 6e 20 63 61 75 73  This option caus
fee0: 65 73 20 53 51 4c 69 74 65 20 74 6f 20 6f 6d 69  es SQLite to omi
fef0: 74 20 73 75 70 70 6f 72 74 20 66 6f 72 20 43 48  t support for CH
ff00: 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e  ECK constraints.
ff10: 0a 20 20 54 68 65 20 70 61 72 73 65 72 20 77 69  .  The parser wi
ff20: 6c 6c 20 73 74 69 6c 6c 20 61 63 63 65 70 74 20  ll still accept 
ff30: 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74  CHECK constraint
ff40: 73 20 69 6e 20 53 51 4c 20 73 74 61 74 65 6d 65  s in SQL stateme
ff50: 6e 74 73 2c 0a 20 20 74 68 65 79 20 77 69 6c 6c  nts,.  they will
ff60: 20 6a 75 73 74 20 6e 6f 74 20 62 65 20 65 6e 66   just not be enf
ff70: 6f 72 63 65 64 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c  orced..}..COMPIL
ff80: 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45  E_OPTION {SQLITE
ff90: 5f 4f 4d 49 54 5f 43 4f 4d 50 49 4c 45 4f 50 54  _OMIT_COMPILEOPT
ffa0: 49 4f 4e 5f 44 49 41 47 53 7d 20 7b 0a 20 20 54  ION_DIAGS} {.  T
ffb0: 68 69 73 20 6f 70 74 69 6f 6e 20 69 73 20 75 73  his option is us
ffc0: 65 64 20 74 6f 20 6f 6d 69 74 20 74 68 65 20 63  ed to omit the c
ffd0: 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69  ompile-time opti
ffe0: 6f 6e 20 64 69 61 67 6e 6f 73 74 69 63 73 20 61  on diagnostics a
fff0: 76 61 69 6c 61 62 6c 65 0a 20 20 69 6e 20 53 51  vailable.  in SQ
10000 4c 69 74 65 2c 20 69 6e 63 6c 75 64 69 6e 67 20  Lite, including 
10010 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6d  the [sqlite3_com
10020 70 69 6c 65 6f 70 74 69 6f 6e 5f 75 73 65 64 28  pileoption_used(
10030 29 5d 20 61 6e 64 0a 20 20 5b 73 71 6c 69 74 65  )] and.  [sqlite
10040 33 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f  3_compileoption_
10050 67 65 74 28 29 5d 20 43 2f 43 2b 2b 20 66 75 6e  get()] C/C++ fun
10060 63 74 69 6f 6e 73 2c 20 74 68 65 0a 20 20 5b 73  ctions, the.  [s
10070 71 6c 69 74 65 5f 63 6f 6d 70 69 6c 65 6f 70 74  qlite_compileopt
10080 69 6f 6e 5f 75 73 65 64 28 29 5d 20 61 6e 64 20  ion_used()] and 
10090 5b 73 71 6c 69 74 65 5f 63 6f 6d 70 69 6c 65 6f  [sqlite_compileo
100a0 70 74 69 6f 6e 5f 67 65 74 28 29 5d 20 53 51 4c  ption_get()] SQL
100b0 20 66 75 6e 63 74 69 6f 6e 73 2c 0a 20 20 61 6e   functions,.  an
100c0 64 20 74 68 65 20 5b 63 6f 6d 70 69 6c 65 5f 6f  d the [compile_o
100d0 70 74 69 6f 6e 73 20 70 72 61 67 6d 61 5d 2e 0a  ptions pragma]..
100e0 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f  }..COMPILE_OPTIO
100f0 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43  N {SQLITE_OMIT_C
10100 4f 4d 50 4c 45 54 45 7d 20 7b 0a 20 20 54 68 69  OMPLETE} {.  Thi
10110 73 20 6f 70 74 69 6f 6e 20 63 61 75 73 65 73 20  s option causes 
10120 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6d  the [sqlite3_com
10130 70 6c 65 74 65 28 29 5d 20 61 6e 64 20 5b 73 71  plete()] and [sq
10140 6c 69 74 65 33 5f 63 6f 6d 70 6c 65 74 65 31 36  lite3_complete16
10150 28 29 5d 0a 20 20 69 6e 74 65 72 66 61 63 65 73  ()].  interfaces
10160 20 74 6f 20 62 65 20 6f 6d 69 74 74 65 64 2e 0a   to be omitted..
10170 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f  }..COMPILE_OPTIO
10180 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43  N {SQLITE_OMIT_C
10190 4f 4d 50 4f 55 4e 44 5f 53 45 4c 45 43 54 7d 20  OMPOUND_SELECT} 
101a0 7b 0a 20 20 54 68 69 73 20 6f 70 74 69 6f 6e 20  {.  This option 
101b0 69 73 20 75 73 65 64 20 74 6f 20 6f 6d 69 74 20  is used to omit 
101c0 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20 5b 53 45  the compound [SE
101d0 4c 45 43 54 5d 20 66 75 6e 63 74 69 6f 6e 61 6c  LECT] functional
101e0 69 74 79 2e 20 0a 20 20 5b 53 45 4c 45 43 54 5d  ity. .  [SELECT]
101f0 20 73 74 61 74 65 6d 65 6e 74 73 20 74 68 61 74   statements that
10200 20 75 73 65 20 74 68 65 20 0a 20 20 55 4e 49 4f   use the .  UNIO
10210 4e 2c 20 55 4e 49 4f 4e 20 41 4c 4c 2c 20 49 4e  N, UNION ALL, IN
10220 54 45 52 53 45 43 54 20 6f 72 20 45 58 43 45 50  TERSECT or EXCEP
10230 54 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43  T compound SELEC
10240 54 20 6f 70 65 72 61 74 6f 72 73 20 77 69 6c 6c  T operators will
10250 20 0a 20 20 63 61 75 73 65 20 61 20 70 61 72 73   .  cause a pars
10260 65 20 65 72 72 6f 72 2e 0a 0a 20 20 41 6e 20 5b  e error...  An [
10270 49 4e 53 45 52 54 5d 20 73 74 61 74 65 6d 65 6e  INSERT] statemen
10280 74 20 77 69 74 68 20 6d 75 6c 74 69 70 6c 65 20  t with multiple 
10290 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 56 41  values in the VA
102a0 4c 55 45 53 20 63 6c 61 75 73 65 20 69 73 0a 20  LUES clause is. 
102b0 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 69 6e 74   implemented int
102c0 65 72 6e 61 6c 6c 79 20 61 73 20 61 20 63 6f 6d  ernally as a com
102d0 70 6f 75 6e 64 20 53 45 4c 45 43 54 2e 20 20 48  pound SELECT.  H
102e0 65 6e 63 65 2c 20 74 68 69 73 20 6f 70 74 69 6f  ence, this optio
102f0 6e 20 61 6c 73 6f 0a 20 20 64 69 73 61 62 6c 65  n also.  disable
10300 73 20 74 68 65 20 61 62 69 6c 69 74 79 20 74 6f  s the ability to
10310 20 69 6e 73 65 72 74 20 6d 6f 72 65 20 74 68 61   insert more tha
10320 6e 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 75  n a single row u
10330 73 69 6e 67 20 61 6e 0a 20 20 49 4e 53 45 52 54  sing an.  INSERT
10340 20 49 4e 54 4f 20 2e 2e 2e 20 56 41 4c 55 45 53   INTO ... VALUES
10350 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2e 0a   ... statement..
10360 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f  }..COMPILE_OPTIO
10370 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43  N {SQLITE_OMIT_C
10380 54 45 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70 74  TE} {.  This opt
10390 69 6f 6e 20 63 61 75 73 65 73 20 73 75 70 70 6f  ion causes suppo
103a0 72 74 20 66 6f 72 20 5b 63 6f 6d 6d 6f 6e 20 74  rt for [common t
103b0 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 73  able expressions
103c0 5d 20 74 6f 20 62 65 20 6f 6d 69 74 74 65 64 2e  ] to be omitted.
103d0 0a 7d 0a 0a 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50  .}....COMPILE_OP
103e0 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d 49  TION {SQLITE_OMI
103f0 54 5f 44 41 54 45 54 49 4d 45 5f 46 55 4e 43 53  T_DATETIME_FUNCS
10400 7d 20 7b 0a 20 20 49 66 20 74 68 69 73 20 6f 70  } {.  If this op
10410 74 69 6f 6e 20 69 73 20 64 65 66 69 6e 65 64 2c  tion is defined,
10420 20 53 51 4c 69 74 65 27 73 20 62 75 69 6c 74 2d   SQLite's built-
10430 69 6e 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65  in date and time
10440 20 6d 61 6e 69 70 75 6c 61 74 69 6f 6e 0a 20 20   manipulation.  
10450 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 6f 6d  functions are om
10460 69 74 74 65 64 2e 20 53 70 65 63 69 66 69 63 61  itted. Specifica
10470 6c 6c 79 2c 20 74 68 65 20 53 51 4c 20 66 75 6e  lly, the SQL fun
10480 63 74 69 6f 6e 73 20 6a 75 6c 69 61 6e 64 61 79  ctions julianday
10490 28 29 2c 20 64 61 74 65 28 29 2c 0a 20 20 74 69  (), date(),.  ti
104a0 6d 65 28 29 2c 20 64 61 74 65 74 69 6d 65 28 29  me(), datetime()
104b0 20 61 6e 64 20 73 74 72 66 74 69 6d 65 28 29 20   and strftime() 
104c0 61 72 65 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c  are not availabl
104d0 65 2e 20 54 68 65 20 64 65 66 61 75 6c 74 20 63  e. The default c
104e0 6f 6c 75 6d 6e 0a 20 20 76 61 6c 75 65 73 20 43  olumn.  values C
104f0 55 52 52 45 4e 54 5f 54 49 4d 45 2c 20 43 55 52  URRENT_TIME, CUR
10500 52 45 4e 54 5f 44 41 54 45 20 61 6e 64 20 43 55  RENT_DATE and CU
10510 52 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d 50 20  RRENT_TIMESTAMP 
10520 61 72 65 20 73 74 69 6c 6c 20 61 76 61 69 6c 61  are still availa
10530 62 6c 65 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f  ble..}..COMPILE_
10540 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f  OPTION {SQLITE_O
10550 4d 49 54 5f 44 45 43 4c 54 59 50 45 7d 20 7b 0a  MIT_DECLTYPE} {.
10560 20 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 63 61    This option ca
10570 75 73 65 73 20 53 51 4c 69 74 65 20 74 6f 20 6f  uses SQLite to o
10580 6d 69 74 20 73 75 70 70 6f 72 74 20 66 6f 72 20  mit support for 
10590 74 68 65 0a 20 20 5b 73 71 6c 69 74 65 33 5f 63  the.  [sqlite3_c
105a0 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65 28 29  olumn_decltype()
105b0 5d 20 61 6e 64 20 5b 73 71 6c 69 74 65 33 5f 63  ] and [sqlite3_c
105c0 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65 31 36  olumn_decltype16
105d0 28 29 5d 0a 20 20 69 6e 74 65 72 66 61 63 65 73  ()].  interfaces
105e0 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54  ..}..COMPILE_OPT
105f0 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54  ION {SQLITE_OMIT
10600 5f 44 45 50 52 45 43 41 54 45 44 7d 20 7b 0a 20  _DEPRECATED} {. 
10610 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 63 61 75   This option cau
10620 73 65 73 20 53 51 4c 69 74 65 20 74 6f 20 6f 6d  ses SQLite to om
10630 69 74 20 73 75 70 70 6f 72 74 20 66 6f 72 20 69  it support for i
10640 6e 74 65 72 66 61 63 65 73 0a 20 20 6d 61 72 6b  nterfaces.  mark
10650 65 64 20 61 73 20 64 65 70 72 65 63 61 74 65 64  ed as deprecated
10660 2e 20 20 54 68 69 73 20 69 6e 63 6c 75 64 65 73  .  This includes
10670 20 0a 20 20 5b 73 71 6c 69 74 65 33 5f 61 67 67   .  [sqlite3_agg
10680 72 65 67 61 74 65 5f 63 6f 75 6e 74 28 29 5d 2c  regate_count()],
10690 0a 20 20 5b 73 71 6c 69 74 65 33 5f 65 78 70 69  .  [sqlite3_expi
106a0 72 65 64 28 29 5d 2c 0a 20 20 5b 73 71 6c 69 74  red()],.  [sqlit
106b0 65 33 5f 74 72 61 6e 73 66 65 72 5f 62 69 6e 64  e3_transfer_bind
106c0 69 6e 67 73 28 29 5d 2c 0a 20 20 5b 73 71 6c 69  ings()],.  [sqli
106d0 74 65 33 5f 67 6c 6f 62 61 6c 5f 72 65 63 6f 76  te3_global_recov
106e0 65 72 28 29 5d 2c 0a 20 20 5b 73 71 6c 69 74 65  er()],.  [sqlite
106f0 33 5f 74 68 72 65 61 64 5f 63 6c 65 61 6e 75 70  3_thread_cleanup
10700 28 29 5d 20 61 6e 64 0a 20 20 5b 73 71 6c 69 74  ()] and.  [sqlit
10710 65 33 5f 6d 65 6d 6f 72 79 5f 61 6c 61 72 6d 28  e3_memory_alarm(
10720 29 5d 20 69 6e 74 65 72 66 61 63 65 73 2e 0a 7d  )] interfaces..}
10730 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e  ..COMPILE_OPTION
10740 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 49   {SQLITE_OMIT_DI
10750 53 4b 49 4f 7d 20 7b 0a 20 20 54 68 69 73 20 6f  SKIO} {.  This o
10760 70 74 69 6f 6e 20 6f 6d 69 74 73 20 61 6c 6c 20  ption omits all 
10770 73 75 70 70 6f 72 74 20 66 6f 72 20 77 72 69 74  support for writ
10780 69 6e 67 20 74 6f 20 74 68 65 20 64 69 73 6b 20  ing to the disk 
10790 61 6e 64 20 66 6f 72 63 65 73 0a 20 20 64 61 74  and forces.  dat
107a0 61 62 61 73 65 73 20 74 6f 20 65 78 69 73 74 20  abases to exist 
107b0 69 6e 20 6d 65 6d 6f 72 79 20 6f 6e 6c 79 2e 20  in memory only. 
107c0 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 68 61 73   This option has
107d0 20 6e 6f 74 20 62 65 65 6e 20 0a 20 20 6d 61 69   not been .  mai
107e0 6e 74 61 69 6e 65 64 20 61 6e 64 20 70 72 6f 62  ntained and prob
107f0 61 62 6c 79 20 64 6f 65 73 20 6e 6f 74 20 77 6f  ably does not wo
10800 72 6b 20 77 69 74 68 20 6e 65 77 65 72 20 76 65  rk with newer ve
10810 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65  rsions of SQLite
10820 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54  ..}..COMPILE_OPT
10830 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54  ION {SQLITE_OMIT
10840 5f 45 58 50 4c 41 49 4e 7d 20 7b 0a 20 20 44 65  _EXPLAIN} {.  De
10850 66 69 6e 69 6e 67 20 74 68 69 73 20 6f 70 74 69  fining this opti
10860 6f 6e 20 63 61 75 73 65 73 20 74 68 65 20 5b 45  on causes the [E
10870 58 50 4c 41 49 4e 5d 20 63 6f 6d 6d 61 6e 64 20  XPLAIN] command 
10880 74 6f 20 62 65 20 6f 6d 69 74 74 65 64 20 66 72  to be omitted fr
10890 6f 6d 20 74 68 65 0a 20 20 6c 69 62 72 61 72 79  om the.  library
108a0 2e 20 41 74 74 65 6d 70 74 69 6e 67 20 74 6f 20  . Attempting to 
108b0 65 78 65 63 75 74 65 20 61 6e 20 5b 45 58 50 4c  execute an [EXPL
108c0 41 49 4e 5d 20 73 74 61 74 65 6d 65 6e 74 20 77  AIN] statement w
108d0 69 6c 6c 20 63 61 75 73 65 20 61 20 70 61 72 73  ill cause a pars
108e0 65 0a 20 20 65 72 72 6f 72 2e 0a 7d 0a 0a 43 4f  e.  error..}..CO
108f0 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51  MPILE_OPTION {SQ
10900 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50  LITE_OMIT_FLAG_P
10910 52 41 47 4d 41 53 7d 20 7b 0a 20 20 54 68 69 73  RAGMAS} {.  This
10920 20 6f 70 74 69 6f 6e 20 6f 6d 69 74 73 20 73 75   option omits su
10930 70 70 6f 72 74 20 66 6f 72 20 61 20 73 75 62 73  pport for a subs
10940 65 74 20 6f 66 20 5b 50 52 41 47 4d 41 5d 20 63  et of [PRAGMA] c
10950 6f 6d 6d 61 6e 64 73 20 74 68 61 74 0a 20 20 71  ommands that.  q
10960 75 65 72 79 20 61 6e 64 20 73 65 74 20 62 6f 6f  uery and set boo
10970 6c 65 61 6e 20 70 72 6f 70 65 72 74 69 65 73 2e  lean properties.
10980 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49  .}..COMPILE_OPTI
10990 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ON {SQLITE_OMIT_
109a0 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 7d 20  FLOATING_POINT} 
109b0 7b 0a 20 20 54 68 69 73 20 6f 70 74 69 6f 6e 20  {.  This option 
109c0 69 73 20 75 73 65 64 20 74 6f 20 6f 6d 69 74 20  is used to omit 
109d0 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 20 6e  floating-point n
109e0 75 6d 62 65 72 20 73 75 70 70 6f 72 74 20 66 72  umber support fr
109f0 6f 6d 20 74 68 65 20 53 51 4c 69 74 65 0a 20 20  om the SQLite.  
10a00 6c 69 62 72 61 72 79 2e 20 57 68 65 6e 20 73 70  library. When sp
10a10 65 63 69 66 69 65 64 2c 20 73 70 65 63 69 66 79  ecified, specify
10a20 69 6e 67 20 61 20 66 6c 6f 61 74 69 6e 67 20 70  ing a floating p
10a30 6f 69 6e 74 20 6e 75 6d 62 65 72 20 61 73 20 61  oint number as a
10a40 20 6c 69 74 65 72 61 6c 20 0a 20 20 28 69 2e 65   literal .  (i.e
10a50 2e 20 22 31 2e 30 31 22 29 20 72 65 73 75 6c 74  . "1.01") result
10a60 73 20 69 6e 20 61 20 70 61 72 73 65 20 65 72 72  s in a parse err
10a70 6f 72 2e 0a 0a 20 20 3c 70 3e 49 6e 20 74 68 65  or...  <p>In the
10a80 20 66 75 74 75 72 65 2c 20 74 68 69 73 20 6f 70   future, this op
10a90 74 69 6f 6e 20 6d 61 79 20 61 6c 73 6f 20 64 69  tion may also di
10aa0 73 61 62 6c 65 20 6f 74 68 65 72 20 66 6c 6f 61  sable other floa
10ab0 74 69 6e 67 20 70 6f 69 6e 74 20 0a 20 20 66 75  ting point .  fu
10ac0 6e 63 74 69 6f 6e 61 6c 69 74 79 2c 20 66 6f 72  nctionality, for
10ad0 20 65 78 61 6d 70 6c 65 20 74 68 65 20 5b 73 71   example the [sq
10ae0 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 64 6f 75  lite3_result_dou
10af0 62 6c 65 28 29 5d 2c 20 0a 20 20 5b 73 71 6c 69  ble()], .  [sqli
10b00 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 28  te3_bind_double(
10b10 29 5d 2c 20 5b 73 71 6c 69 74 65 33 5f 76 61 6c  )], [sqlite3_val
10b20 75 65 5f 64 6f 75 62 6c 65 28 29 5d 20 61 6e 64  ue_double()] and
10b30 0a 20 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75  .  [sqlite3_colu
10b40 6d 6e 5f 64 6f 75 62 6c 65 28 29 5d 20 41 50 49  mn_double()] API
10b50 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 20 20 3c 2f   functions..  </
10b60 70 3e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50  p>.}..COMPILE_OP
10b70 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d 49  TION {SQLITE_OMI
10b80 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 7d 20 7b  T_FOREIGN_KEY} {
10b90 0a 20 20 49 66 20 74 68 69 73 20 6f 70 74 69 6f  .  If this optio
10ba0 6e 20 69 73 20 64 65 66 69 6e 65 64 2c 20 74 68  n is defined, th
10bb0 65 6e 20 5b 66 6f 72 65 69 67 6e 20 6b 65 79 20  en [foreign key 
10bc0 63 6f 6e 73 74 72 61 69 6e 74 5d 20 73 79 6e 74  constraint] synt
10bd0 61 78 20 69 73 0a 20 20 6e 6f 74 20 72 65 63 6f  ax is.  not reco
10be0 67 6e 69 7a 65 64 2e 0a 7d 0a 0a 43 4f 4d 50 49  gnized..}..COMPI
10bf0 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54  LE_OPTION {SQLIT
10c00 45 5f 4f 4d 49 54 5f 47 45 54 5f 54 41 42 4c 45  E_OMIT_GET_TABLE
10c10 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70 74 69 6f  } {.  This optio
10c20 6e 20 63 61 75 73 65 73 20 73 75 70 70 6f 72 74  n causes support
10c30 20 66 6f 72 20 5b 73 71 6c 69 74 65 33 5f 67 65   for [sqlite3_ge
10c40 74 5f 74 61 62 6c 65 28 29 5d 20 61 6e 64 0a 20  t_table()] and. 
10c50 20 5b 73 71 6c 69 74 65 33 5f 66 72 65 65 5f 74   [sqlite3_free_t
10c60 61 62 6c 65 28 29 5d 20 74 6f 20 62 65 20 6f 6d  able()] to be om
10c70 69 74 74 65 64 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c  itted..}..COMPIL
10c80 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45  E_OPTION {SQLITE
10c90 5f 4f 4d 49 54 5f 49 4e 43 52 42 4c 4f 42 7d 20  _OMIT_INCRBLOB} 
10ca0 7b 0a 20 20 54 68 69 73 20 6f 70 74 69 6f 6e 20  {.  This option 
10cb0 63 61 75 73 65 73 20 73 75 70 70 6f 72 74 20 66  causes support f
10cc0 6f 72 20 5b 73 71 6c 69 74 65 33 5f 62 6c 6f 62  or [sqlite3_blob
10cd0 20 7c 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20 42   | incremental B
10ce0 4c 4f 42 20 49 2f 4f 5d 0a 20 20 74 6f 20 62 65  LOB I/O].  to be
10cf0 20 6f 6d 69 74 74 65 64 2e 0a 7d 0a 0a 43 4f 4d   omitted..}..COM
10d00 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c  PILE_OPTION {SQL
10d10 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49  ITE_OMIT_INTEGRI
10d20 54 59 5f 43 48 45 43 4b 7d 20 7b 0a 20 20 54 68  TY_CHECK} {.  Th
10d30 69 73 20 6f 70 74 69 6f 6e 20 6f 6d 69 74 73 20  is option omits 
10d40 73 75 70 70 6f 72 74 20 66 6f 72 20 74 68 65 20  support for the 
10d50 5b 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b  [integrity_check
10d60 20 70 72 61 67 6d 61 5d 2e 0a 7d 0a 0a 43 4f 4d   pragma]..}..COM
10d70 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c  PILE_OPTION {SQL
10d80 49 54 45 5f 4f 4d 49 54 5f 4c 49 4b 45 5f 4f 50  ITE_OMIT_LIKE_OP
10d90 54 49 4d 49 5a 41 54 49 4f 4e 7d 20 7b 0a 20 20  TIMIZATION} {.  
10da0 54 68 69 73 20 6f 70 74 69 6f 6e 20 64 69 73 61  This option disa
10db0 62 6c 65 73 20 74 68 65 20 61 62 69 6c 69 74 79  bles the ability
10dc0 20 6f 66 20 53 51 4c 69 74 65 20 74 6f 20 75 73   of SQLite to us
10dd0 65 20 69 6e 64 69 63 65 73 20 74 6f 20 68 65 6c  e indices to hel
10de0 70 0a 20 20 72 65 73 6f 6c 76 65 20 5b 4c 49 4b  p.  resolve [LIK
10df0 45 5d 20 61 6e 64 20 5b 47 4c 4f 42 5d 20 6f 70  E] and [GLOB] op
10e00 65 72 61 74 6f 72 73 20 69 6e 20 61 20 57 48 45  erators in a WHE
10e10 52 45 20 63 6c 61 75 73 65 2e 0a 7d 0a 0a 43 4f  RE clause..}..CO
10e20 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51  MPILE_OPTION {SQ
10e30 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41 44 5f 45  LITE_OMIT_LOAD_E
10e40 58 54 45 4e 53 49 4f 4e 7d 20 7b 0a 20 20 54 68  XTENSION} {.  Th
10e50 69 73 20 6f 70 74 69 6f 6e 20 6f 6d 69 74 73 20  is option omits 
10e60 74 68 65 20 65 6e 74 69 72 65 20 65 78 74 65 6e  the entire exten
10e70 73 69 6f 6e 20 6c 6f 61 64 69 6e 67 20 6d 65 63  sion loading mec
10e80 68 61 6e 69 73 6d 20 66 72 6f 6d 0a 20 20 53 51  hanism from.  SQ
10e90 4c 69 74 65 2c 20 69 6e 63 6c 75 64 69 6e 67 20  Lite, including 
10ea0 5b 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f  [sqlite3_enable_
10eb0 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 29  load_extension()
10ec0 5d 20 61 6e 64 0a 20 20 5b 73 71 6c 69 74 65 33  ] and.  [sqlite3
10ed0 5f 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28  _load_extension(
10ee0 29 5d 20 69 6e 74 65 72 66 61 63 65 73 2e 0a 7d  )] interfaces..}
10ef0 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e  ..COMPILE_OPTION
10f00 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f   {SQLITE_OMIT_LO
10f10 43 41 4c 54 49 4d 45 7d 20 7b 0a 20 20 54 68 69  CALTIME} {.  Thi
10f20 73 20 6f 70 74 69 6f 6e 20 6f 6d 69 74 73 20 74  s option omits t
10f30 68 65 20 22 6c 6f 63 61 6c 74 69 6d 65 22 20 6d  he "localtime" m
10f40 6f 64 69 66 69 65 72 20 66 72 6f 6d 20 74 68 65  odifier from the
10f50 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 0a 20   date and time. 
10f60 20 66 75 6e 63 74 69 6f 6e 73 2e 20 20 54 68 69   functions.  Thi
10f70 73 20 6f 70 74 69 6f 6e 20 69 73 20 73 6f 6d 65  s option is some
10f80 74 69 6d 65 73 20 75 73 65 66 75 6c 20 77 68 65  times useful whe
10f90 6e 20 74 72 79 69 6e 67 20 74 6f 20 63 6f 6d 70  n trying to comp
10fa0 69 6c 65 0a 20 20 74 68 65 20 64 61 74 65 20 61  ile.  the date a
10fb0 6e 64 20 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e  nd time function
10fc0 73 20 6f 6e 20 61 20 70 6c 61 74 66 6f 72 6d 20  s on a platform 
10fd0 74 68 61 74 20 64 6f 65 73 20 6e 6f 74 20 73 75  that does not su
10fe0 70 70 6f 72 74 20 74 68 65 0a 20 20 63 6f 6e 63  pport the.  conc
10ff0 65 70 74 20 6f 66 20 6c 6f 63 61 6c 20 74 69 6d  ept of local tim
11000 65 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50  e..}..COMPILE_OP
11010 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d 49  TION {SQLITE_OMI
11020 54 5f 4c 4f 4f 4b 41 53 49 44 45 7d 20 7b 0a 20  T_LOOKASIDE} {. 
11030 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 6f 6d 69   This option omi
11040 74 73 20 74 68 65 20 5b 6c 6f 6f 6b 61 73 69 64  ts the [lookasid
11050 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  e memory allocat
11060 6f 72 5d 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f  or]..}..COMPILE_
11070 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f  OPTION {SQLITE_O
11080 4d 49 54 5f 4d 45 4d 4f 52 59 44 42 7d 20 7b 0a  MIT_MEMORYDB} {.
11090 20 20 57 68 65 6e 20 74 68 69 73 20 69 73 20 64    When this is d
110a0 65 66 69 6e 65 64 2c 20 74 68 65 20 6c 69 62 72  efined, the libr
110b0 61 72 79 20 64 6f 65 73 20 6e 6f 74 20 72 65 73  ary does not res
110c0 70 65 63 74 20 74 68 65 20 73 70 65 63 69 61 6c  pect the special
110d0 20 64 61 74 61 62 61 73 65 0a 20 20 6e 61 6d 65   database.  name
110e0 20 22 3a 6d 65 6d 6f 72 79 3a 22 20 28 6e 6f 72   ":memory:" (nor
110f0 6d 61 6c 6c 79 20 75 73 65 64 20 74 6f 20 63 72  mally used to cr
11100 65 61 74 65 20 61 6e 20 5b 69 6e 2d 6d 65 6d 6f  eate an [in-memo
11110 72 79 20 64 61 74 61 62 61 73 65 5d 29 2e 20 49  ry database]). I
11120 66 20 0a 20 20 22 3a 6d 65 6d 6f 72 79 3a 22 20  f .  ":memory:" 
11130 69 73 20 70 61 73 73 65 64 20 74 6f 20 5b 73 71  is passed to [sq
11140 6c 69 74 65 33 5f 6f 70 65 6e 28 29 5d 2c 20 5b  lite3_open()], [
11150 73 71 6c 69 74 65 33 5f 6f 70 65 6e 31 36 28 29  sqlite3_open16()
11160 5d 2c 20 6f 72 0a 20 20 5b 73 71 6c 69 74 65 33  ], or.  [sqlite3
11170 5f 6f 70 65 6e 5f 76 32 28 29 5d 2c 20 61 20 66  _open_v2()], a f
11180 69 6c 65 20 77 69 74 68 20 74 68 69 73 20 6e 61  ile with this na
11190 6d 65 20 77 69 6c 6c 20 62 65 20 0a 20 20 6f 70  me will be .  op
111a0 65 6e 65 64 20 6f 72 20 63 72 65 61 74 65 64 2e  ened or created.
111b0 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49  .}..COMPILE_OPTI
111c0 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ON {SQLITE_OMIT_
111d0 4f 52 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 7d  OR_OPTIMIZATION}
111e0 20 7b 0a 20 20 54 68 69 73 20 6f 70 74 69 6f 6e   {.  This option
111f0 20 64 69 73 61 62 6c 65 73 20 74 68 65 20 61 62   disables the ab
11200 69 6c 69 74 79 20 6f 66 20 53 51 4c 69 74 65 20  ility of SQLite 
11210 74 6f 20 75 73 65 20 61 6e 20 69 6e 64 65 78 20  to use an index 
11220 74 6f 67 65 74 68 65 72 0a 20 20 77 69 74 68 20  together.  with 
11230 74 65 72 6d 73 20 6f 66 20 61 20 57 48 45 52 45  terms of a WHERE
11240 20 63 6c 61 75 73 65 20 63 6f 6e 6e 65 63 74 65   clause connecte
11250 64 20 62 79 20 74 68 65 20 4f 52 20 6f 70 65 72  d by the OR oper
11260 61 74 6f 72 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45  ator..}..COMPILE
11270 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f  _OPTION {SQLITE_
11280 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d  OMIT_PAGER_PRAGM
11290 41 53 7d 20 7b 0a 20 20 44 65 66 69 6e 69 6e 67  AS} {.  Defining
112a0 20 74 68 69 73 20 6f 70 74 69 6f 6e 20 6f 6d 69   this option omi
112b0 74 73 20 70 72 61 67 6d 61 73 20 72 65 6c 61 74  ts pragmas relat
112c0 65 64 20 74 6f 20 74 68 65 20 70 61 67 65 72 20  ed to the pager 
112d0 73 75 62 73 79 73 74 65 6d 20 66 72 6f 6d 20 0a  subsystem from .
112e0 20 20 74 68 65 20 62 75 69 6c 64 2e 0a 7d 0a 0a    the build..}..
112f0 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b  COMPILE_OPTION {
11300 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47  SQLITE_OMIT_PRAG
11310 4d 41 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70 74  MA} {.  This opt
11320 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20 6f  ion is used to o
11330 6d 69 74 20 74 68 65 20 5b 50 52 41 47 4d 41 5d  mit the [PRAGMA]
11340 20 63 6f 6d 6d 61 6e 64 0a 20 20 66 72 6f 6d 20   command.  from 
11350 74 68 65 20 6c 69 62 72 61 72 79 2e 20 4e 6f 74  the library. Not
11360 65 20 74 68 61 74 20 69 74 20 69 73 20 75 73 65  e that it is use
11370 66 75 6c 20 74 6f 20 64 65 66 69 6e 65 20 74 68  ful to define th
11380 65 20 6d 61 63 72 6f 73 20 74 68 61 74 20 6f 6d  e macros that om
11390 69 74 0a 20 20 73 70 65 63 69 66 69 63 20 70 72  it.  specific pr
113a0 61 67 6d 61 73 20 69 6e 20 61 64 64 69 74 69 6f  agmas in additio
113b0 6e 20 74 6f 20 74 68 69 73 2c 20 61 73 20 74 68  n to this, as th
113c0 65 79 20 6d 61 79 20 61 6c 73 6f 20 72 65 6d 6f  ey may also remo
113d0 76 65 20 73 75 70 70 6f 72 74 69 6e 67 20 63 6f  ve supporting co
113e0 64 65 0a 20 20 69 6e 20 6f 74 68 65 72 20 73 75  de.  in other su
113f0 62 2d 73 79 73 74 65 6d 73 2e 20 54 68 69 73 20  b-systems. This 
11400 6d 61 63 72 6f 20 72 65 6d 6f 76 65 73 20 74 68  macro removes th
11410 65 20 5b 50 52 41 47 4d 41 5d 20 63 6f 6d 6d 61  e [PRAGMA] comma
11420 6e 64 20 6f 6e 6c 79 2e 0a 7d 0a 0a 43 4f 4d 50  nd only..}..COMP
11430 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49  ILE_OPTION {SQLI
11440 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53  TE_OMIT_PROGRESS
11450 5f 43 41 4c 4c 42 41 43 4b 7d 20 7b 0a 20 20 54  _CALLBACK} {.  T
11460 68 69 73 20 6f 70 74 69 6f 6e 20 6d 61 79 20 62  his option may b
11470 65 20 64 65 66 69 6e 65 64 20 74 6f 20 6f 6d 69  e defined to omi
11480 74 20 74 68 65 20 63 61 70 61 62 69 6c 69 74 79  t the capability
11490 20 74 6f 20 69 73 73 75 65 20 22 70 72 6f 67 72   to issue "progr
114a0 65 73 73 22 20 0a 20 20 63 61 6c 6c 62 61 63 6b  ess" .  callback
114b0 73 20 64 75 72 69 6e 67 20 6c 6f 6e 67 2d 72 75  s during long-ru
114c0 6e 6e 69 6e 67 20 53 51 4c 20 73 74 61 74 65 6d  nning SQL statem
114d0 65 6e 74 73 2e 20 54 68 65 20 0a 20 20 5b 73 71  ents. The .  [sq
114e0 6c 69 74 65 33 5f 70 72 6f 67 72 65 73 73 5f 68  lite3_progress_h
114f0 61 6e 64 6c 65 72 28 29 5d 0a 20 20 41 50 49 20  andler()].  API 
11500 66 75 6e 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20  function is not 
11510 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20 6c  present in the l
11520 69 62 72 61 72 79 2e 0a 7d 0a 0a 43 4f 4d 50 49  ibrary..}..COMPI
11530 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54  LE_OPTION {SQLIT
11540 45 5f 4f 4d 49 54 5f 51 55 49 43 4b 42 41 4c 41  E_OMIT_QUICKBALA
11550 4e 43 45 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70  NCE} {.  This op
11560 74 69 6f 6e 20 6f 6d 69 74 73 20 61 6e 20 61 6c  tion omits an al
11570 74 65 72 6e 61 74 69 76 65 2c 20 66 61 73 74 65  ternative, faste
11580 72 20 42 2d 54 72 65 65 20 62 61 6c 61 6e 63 69  r B-Tree balanci
11590 6e 67 20 72 6f 75 74 69 6e 65 2e 0a 20 20 55 73  ng routine..  Us
115a0 69 6e 67 20 74 68 69 73 20 6f 70 74 69 6f 6e 20  ing this option 
115b0 6d 61 6b 65 73 20 53 51 4c 69 74 65 20 73 6c 69  makes SQLite sli
115c0 67 68 74 6c 79 20 73 6d 61 6c 6c 65 72 20 61 74  ghtly smaller at
115d0 20 74 68 65 20 65 78 70 65 6e 73 65 20 6f 66 0a   the expense of.
115e0 20 20 6d 61 6b 69 6e 67 20 69 74 20 72 75 6e 20    making it run 
115f0 73 6c 69 67 68 74 6c 79 20 73 6c 6f 77 65 72 2e  slightly slower.
11600 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49  .}..COMPILE_OPTI
11610 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ON {SQLITE_OMIT_
11620 52 45 49 4e 44 45 58 7d 20 7b 0a 20 20 57 68 65  REINDEX} {.  Whe
11630 6e 20 74 68 69 73 20 6f 70 74 69 6f 6e 20 69 73  n this option is
11640 20 64 65 66 69 6e 65 64 2c 20 74 68 65 20 5b 52   defined, the [R
11650 45 49 4e 44 45 58 5d 0a 20 20 63 6f 6d 6d 61 6e  EINDEX].  comman
11660 64 20 69 73 20 6e 6f 74 20 69 6e 63 6c 75 64 65  d is not include
11670 64 20 69 6e 20 74 68 65 20 6c 69 62 72 61 72 79  d in the library
11680 2e 0a 20 20 45 78 65 63 75 74 69 6e 67 20 61 20  ..  Executing a 
11690 5b 52 45 49 4e 44 45 58 5d 20 73 74 61 74 65 6d  [REINDEX] statem
116a0 65 6e 74 20 63 61 75 73 65 73 20 0a 20 20 61 20  ent causes .  a 
116b0 70 61 72 73 65 20 65 72 72 6f 72 2e 0a 7d 0a 0a  parse error..}..
116c0 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b  COMPILE_OPTION {
116d0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45  SQLITE_OMIT_SCHE
116e0 4d 41 5f 50 52 41 47 4d 41 53 7d 20 7b 0a 20 20  MA_PRAGMAS} {.  
116f0 44 65 66 69 6e 69 6e 67 20 74 68 69 73 20 6f 70  Defining this op
11700 74 69 6f 6e 20 6f 6d 69 74 73 20 70 72 61 67 6d  tion omits pragm
11710 61 73 20 66 6f 72 20 71 75 65 72 79 69 6e 67 20  as for querying 
11720 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
11730 65 6d 61 20 66 72 6f 6d 20 0a 20 20 74 68 65 20  ema from .  the 
11740 62 75 69 6c 64 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c  build..}..COMPIL
11750 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45  E_OPTION {SQLITE
11760 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 56 45 52  _OMIT_SCHEMA_VER
11770 53 49 4f 4e 5f 50 52 41 47 4d 41 53 7d 20 7b 0a  SION_PRAGMAS} {.
11780 20 20 44 65 66 69 6e 69 6e 67 20 74 68 69 73 20    Defining this 
11790 6f 70 74 69 6f 6e 20 6f 6d 69 74 73 20 70 72 61  option omits pra
117a0 67 6d 61 73 20 66 6f 72 20 71 75 65 72 79 69 6e  gmas for queryin
117b0 67 20 61 6e 64 20 6d 6f 64 69 66 79 69 6e 67 20  g and modifying 
117c0 74 68 65 20 0a 20 20 64 61 74 61 62 61 73 65 20  the .  database 
117d0 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 20 61  schema version a
117e0 6e 64 20 75 73 65 72 20 76 65 72 73 69 6f 6e 20  nd user version 
117f0 66 72 6f 6d 20 74 68 65 20 62 75 69 6c 64 2e 20  from the build. 
11800 53 70 65 63 69 66 69 63 61 6c 6c 79 2c 20 74 68  Specifically, th
11810 65 20 0a 20 20 5b 73 63 68 65 6d 61 5f 76 65 72  e .  [schema_ver
11820 73 69 6f 6e 5d 20 61 6e 64 20 5b 75 73 65 72 5f  sion] and [user_
11830 76 65 72 73 69 6f 6e 5d 20 50 52 41 47 4d 41 73  version] PRAGMAs
11840 20 61 72 65 20 6f 6d 69 74 74 65 64 2e 0a 7d 0a   are omitted..}.
11850 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20  .COMPILE_OPTION 
11860 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41  {SQLITE_OMIT_SHA
11870 52 45 44 5f 43 41 43 48 45 7d 20 7b 0a 20 20 54  RED_CACHE} {.  T
11880 68 69 73 20 6f 70 74 69 6f 6e 20 62 75 69 6c 64  his option build
11890 73 20 53 51 4c 69 74 65 20 77 69 74 68 6f 75 74  s SQLite without
118a0 20 73 75 70 70 6f 72 74 20 66 6f 72 20 73 68 61   support for sha
118b0 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 2e 0a  red-cache mode..
118c0 20 20 54 68 65 20 5b 73 71 6c 69 74 65 33 5f 65    The [sqlite3_e
118d0 6e 61 62 6c 65 5f 73 68 61 72 65 64 5f 63 61 63  nable_shared_cac
118e0 68 65 28 29 5d 20 69 73 20 6f 6d 69 74 74 65 64  he()] is omitted
118f0 20 61 6c 6f 6e 67 20 77 69 74 68 20 61 20 66 61   along with a fa
11900 69 72 0a 20 20 61 6d 6f 75 6e 74 20 6f 66 20 6c  ir.  amount of l
11910 6f 67 69 63 20 77 69 74 68 69 6e 20 74 68 65 20  ogic within the 
11920 42 2d 54 72 65 65 20 73 75 62 73 79 73 74 65 6d  B-Tree subsystem
11930 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
11940 20 73 68 61 72 65 64 0a 20 20 63 61 63 68 65 20   shared.  cache 
11950 6d 61 6e 61 67 65 6d 65 6e 74 2e 0a 7d 0a 0a 43  management..}..C
11960 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53  OMPILE_OPTION {S
11970 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 55 42 51 55  QLITE_OMIT_SUBQU
11980 45 52 59 7d 20 7b 0a 20 20 49 66 20 64 65 66 69  ERY} {.  If defi
11990 6e 65 64 2c 20 73 75 70 70 6f 72 74 20 66 6f 72  ned, support for
119a0 20 73 75 62 2d 73 65 6c 65 63 74 73 20 61 6e 64   sub-selects and
119b0 20 74 68 65 20 49 4e 28 29 20 6f 70 65 72 61 74   the IN() operat
119c0 6f 72 20 61 72 65 20 6f 6d 69 74 74 65 64 2e 0a  or are omitted..
119d0 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f  }..COMPILE_OPTIO
119e0 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  N {SQLITE_OMIT_T
119f0 43 4c 5f 56 41 52 49 41 42 4c 45 7d 20 7b 0a 20  CL_VARIABLE} {. 
11a00 20 49 66 20 74 68 69 73 20 6d 61 63 72 6f 20 69   If this macro i
11a10 73 20 64 65 66 69 6e 65 64 2c 20 74 68 65 6e 20  s defined, then 
11a20 74 68 65 20 73 70 65 63 69 61 6c 20 22 24 3c 76  the special "$<v
11a30 61 72 69 61 62 6c 65 2d 6e 61 6d 65 3e 22 20 73  ariable-name>" s
11a40 79 6e 74 61 78 0a 20 20 75 73 65 64 20 74 6f 20  yntax.  used to 
11a50 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 62 69  automatically bi
11a60 6e 64 20 53 51 4c 20 76 61 72 69 61 62 6c 65 73  nd SQL variables
11a70 20 74 6f 20 54 43 4c 20 76 61 72 69 61 62 6c 65   to TCL variable
11a80 73 20 69 73 20 6f 6d 69 74 74 65 64 2e 0a 7d 0a  s is omitted..}.
11a90 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20  .COMPILE_OPTION 
11aa0 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 45 4d  {SQLITE_OMIT_TEM
11ab0 50 44 42 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70  PDB} {.  This op
11ac0 74 69 6f 6e 20 6f 6d 69 74 73 20 73 75 70 70 6f  tion omits suppo
11ad0 72 74 20 66 6f 72 20 54 45 4d 50 20 6f 72 20 54  rt for TEMP or T
11ae0 45 4d 50 4f 52 41 52 59 20 74 61 62 6c 65 73 2e  EMPORARY tables.
11af0 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49  .}..COMPILE_OPTI
11b00 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ON {SQLITE_OMIT_
11b10 54 52 41 43 45 7d 20 7b 0a 20 20 54 68 69 73 20  TRACE} {.  This 
11b20 6f 70 74 69 6f 6e 20 6f 6d 69 74 73 20 73 75 70  option omits sup
11b30 70 6f 72 74 20 66 6f 72 20 74 68 65 20 5b 73 71  port for the [sq
11b40 6c 69 74 65 33 5f 70 72 6f 66 69 6c 65 28 29 5d  lite3_profile()]
11b50 20 61 6e 64 0a 20 20 5b 73 71 6c 69 74 65 33 5f   and.  [sqlite3_
11b60 74 72 61 63 65 28 29 5d 20 69 6e 74 65 72 66 61  trace()] interfa
11b70 63 65 73 20 61 6e 64 20 74 68 65 69 72 20 61 73  ces and their as
11b80 73 6f 63 69 61 74 65 64 20 6c 6f 67 69 63 2e 0a  sociated logic..
11b90 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f  }..COMPILE_OPTIO
11ba0 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  N {SQLITE_OMIT_T
11bb0 52 49 47 47 45 52 7d 20 7b 0a 20 20 44 65 66 69  RIGGER} {.  Defi
11bc0 6e 69 6e 67 20 74 68 69 73 20 6f 70 74 69 6f 6e  ning this option
11bd0 20 6f 6d 69 74 73 20 73 75 70 70 6f 72 74 20 66   omits support f
11be0 6f 72 20 54 52 49 47 47 45 52 20 6f 62 6a 65 63  or TRIGGER objec
11bf0 74 73 2e 20 4e 65 69 74 68 65 72 20 74 68 65 20  ts. Neither the 
11c00 0a 20 20 5b 43 52 45 41 54 45 20 54 52 49 47 47  .  [CREATE TRIGG
11c10 45 52 5d 20 6f 72 20 5b 44 52 4f 50 20 54 52 49  ER] or [DROP TRI
11c20 47 47 45 52 5d 0a 20 20 63 6f 6d 6d 61 6e 64 73  GGER].  commands
11c30 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20 69   are available i
11c40 6e 20 74 68 69 73 20 63 61 73 65 2c 20 61 6e 64  n this case, and
11c50 20 61 74 74 65 6d 70 74 69 6e 67 20 74 6f 20 65   attempting to e
11c60 78 65 63 75 74 65 0a 20 20 65 69 74 68 65 72 20  xecute.  either 
11c70 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20 61  will result in a
11c80 20 70 61 72 73 65 20 65 72 72 6f 72 2e 0a 20 20   parse error..  
11c90 54 68 69 73 20 6f 70 74 69 6f 6e 20 61 6c 73 6f  This option also
11ca0 20 64 69 73 61 62 6c 65 73 20 65 6e 66 6f 72 63   disables enforc
11cb0 65 6d 65 6e 74 20 6f 66 20 5b 66 6f 72 65 69 67  ement of [foreig
11cc0 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74  n key constraint
11cd0 73 5d 2c 0a 20 20 73 69 6e 63 65 20 74 68 65 20  s],.  since the 
11ce0 63 6f 64 65 20 74 68 61 74 20 69 6d 70 6c 65 6d  code that implem
11cf0 65 6e 74 73 20 74 72 69 67 67 65 72 73 20 61 6e  ents triggers an
11d00 64 20 77 68 69 63 68 20 69 73 20 6f 6d 69 74 74  d which is omitt
11d10 65 64 20 62 79 20 74 68 69 73 0a 20 20 6f 70 74  ed by this.  opt
11d20 69 6f 6e 20 69 73 20 61 6c 73 6f 20 75 73 65 64  ion is also used
11d30 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 5b 66   to implement [f
11d40 6f 72 65 69 67 6e 20 6b 65 79 20 61 63 74 69 6f  oreign key actio
11d50 6e 73 5d 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f  ns]..}..COMPILE_
11d60 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f  OPTION {SQLITE_O
11d70 4d 49 54 5f 54 52 55 4e 43 41 54 45 5f 4f 50 54  MIT_TRUNCATE_OPT
11d80 49 4d 49 5a 41 54 49 4f 4e 7d 20 7b 0a 20 20 41  IMIZATION} {.  A
11d90 20 64 65 66 61 75 6c 74 20 62 75 69 6c 64 20 6f   default build o
11da0 66 20 53 51 4c 69 74 65 2c 20 69 66 20 61 20 5b  f SQLite, if a [
11db0 44 45 4c 45 54 45 5d 20 73 74 61 74 65 6d 65 6e  DELETE] statemen
11dc0 74 20 68 61 73 20 6e 6f 20 57 48 45 52 45 20 63  t has no WHERE c
11dd0 6c 61 75 73 65 0a 20 20 61 6e 64 20 6f 70 65 72  lause.  and oper
11de0 61 74 65 73 20 6f 6e 20 61 20 74 61 62 6c 65 20  ates on a table 
11df0 77 69 74 68 20 6e 6f 20 74 72 69 67 67 65 72 73  with no triggers
11e00 2c 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f  , an optimizatio
11e10 6e 20 6f 63 63 75 72 73 20 74 68 61 74 0a 20 20  n occurs that.  
11e20 63 61 75 73 65 73 20 74 68 65 20 44 45 4c 45 54  causes the DELET
11e30 45 20 74 6f 20 6f 63 63 75 72 20 62 79 20 64 72  E to occur by dr
11e40 6f 70 70 69 6e 67 20 61 6e 64 20 72 65 63 72 65  opping and recre
11e50 61 74 69 6e 67 20 74 68 65 20 74 61 62 6c 65 2e  ating the table.
11e60 20 20 0a 20 20 44 72 6f 70 70 69 6e 67 20 61 6e    .  Dropping an
11e70 64 20 72 65 63 72 65 61 74 69 6e 67 20 61 20 74  d recreating a t
11e80 61 62 6c 65 20 69 73 20 75 73 75 61 6c 6c 79 20  able is usually 
11e90 6d 75 63 68 20 66 61 73 74 65 72 20 74 68 61 6e  much faster than
11ea0 20 64 65 6c 65 74 69 6e 67 0a 20 20 74 68 65 20   deleting.  the 
11eb0 74 61 62 6c 65 20 63 6f 6e 74 65 6e 74 20 72 6f  table content ro
11ec0 77 20 62 79 20 72 6f 77 2e 20 20 54 68 69 73 20  w by row.  This 
11ed0 69 73 20 74 68 65 20 22 74 72 75 6e 63 61 74 65  is the "truncate
11ee0 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 22 2e 0a   optimization"..
11ef0 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f  }..COMPILE_OPTIO
11f00 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  N {SQLITE_OMIT_U
11f10 54 46 31 36 7d 20 7b 0a 20 20 54 68 69 73 20 6d  TF16} {.  This m
11f20 61 63 72 6f 20 69 73 20 75 73 65 64 20 74 6f 20  acro is used to 
11f30 6f 6d 69 74 20 73 75 70 70 6f 72 74 20 66 6f 72  omit support for
11f40 20 55 54 46 31 36 20 74 65 78 74 20 65 6e 63 6f   UTF16 text enco
11f50 64 69 6e 67 2e 20 57 68 65 6e 20 74 68 69 73 20  ding. When this 
11f60 69 73 0a 20 20 64 65 66 69 6e 65 64 20 61 6c 6c  is.  defined all
11f70 20 41 50 49 20 66 75 6e 63 74 69 6f 6e 73 20 74   API functions t
11f80 68 61 74 20 72 65 74 75 72 6e 20 6f 72 20 61 63  hat return or ac
11f90 63 65 70 74 20 55 54 46 31 36 20 65 6e 63 6f 64  cept UTF16 encod
11fa0 65 64 20 74 65 78 74 20 61 72 65 0a 20 20 75 6e  ed text are.  un
11fb0 61 76 61 69 6c 61 62 6c 65 2e 20 54 68 65 73 65  available. These
11fc0 20 66 75 6e 63 74 69 6f 6e 73 20 63 61 6e 20 62   functions can b
11fd0 65 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20  e identified by 
11fe0 74 68 65 20 66 61 63 74 20 74 68 61 74 20 74 68  the fact that th
11ff0 65 79 20 65 6e 64 0a 20 20 77 69 74 68 20 27 31  ey end.  with '1
12000 36 27 2c 20 66 6f 72 20 65 78 61 6d 70 6c 65 20  6', for example 
12010 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65  [sqlite3_prepare
12020 31 36 28 29 5d 2c 20 5b 73 71 6c 69 74 65 33 5f  16()], [sqlite3_
12030 63 6f 6c 75 6d 6e 5f 74 65 78 74 31 36 28 29 5d  column_text16()]
12040 20 61 6e 64 0a 20 20 5b 73 71 6c 69 74 65 33 5f   and.  [sqlite3_
12050 62 69 6e 64 5f 74 65 78 74 31 36 28 29 5d 2e 0a  bind_text16()]..
12060 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f  }..COMPILE_OPTIO
12070 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  N {SQLITE_OMIT_V
12080 41 43 55 55 4d 7d 20 7b 0a 20 20 57 68 65 6e 20  ACUUM} {.  When 
12090 74 68 69 73 20 6f 70 74 69 6f 6e 20 69 73 20 64  this option is d
120a0 65 66 69 6e 65 64 2c 20 74 68 65 20 5b 56 41 43  efined, the [VAC
120b0 55 55 4d 5d 0a 20 20 63 6f 6d 6d 61 6e 64 20 69  UUM].  command i
120c0 73 20 6e 6f 74 20 69 6e 63 6c 75 64 65 64 20 69  s not included i
120d0 6e 20 74 68 65 20 6c 69 62 72 61 72 79 2e 0a 20  n the library.. 
120e0 20 45 78 65 63 75 74 69 6e 67 20 61 20 5b 56 41   Executing a [VA
120f0 43 55 55 4d 5d 20 73 74 61 74 65 6d 65 6e 74 20  CUUM] statement 
12100 63 61 75 73 65 73 20 0a 20 20 61 20 70 61 72 73  causes .  a pars
12110 65 20 65 72 72 6f 72 2e 0a 7d 0a 0a 43 4f 4d 50  e error..}..COMP
12120 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49  ILE_OPTION {SQLI
12130 54 45 5f 4f 4d 49 54 5f 56 49 45 57 7d 20 7b 0a  TE_OMIT_VIEW} {.
12140 20 20 44 65 66 69 6e 69 6e 67 20 74 68 69 73 20    Defining this 
12150 6f 70 74 69 6f 6e 20 6f 6d 69 74 73 20 73 75 70  option omits sup
12160 70 6f 72 74 20 66 6f 72 20 56 49 45 57 20 6f 62  port for VIEW ob
12170 6a 65 63 74 73 2e 20 4e 65 69 74 68 65 72 20 74  jects. Neither t
12180 68 65 20 0a 20 20 5b 43 52 45 41 54 45 20 56 49  he .  [CREATE VI
12190 45 57 5d 20 6e 6f 72 20 74 68 65 20 5b 44 52 4f  EW] nor the [DRO
121a0 50 20 56 49 45 57 5d 0a 20 20 63 6f 6d 6d 61 6e  P VIEW].  comman
121b0 64 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65  ds are available
121c0 20 69 6e 20 74 68 69 73 20 63 61 73 65 2c 20 61   in this case, a
121d0 6e 64 0a 20 20 61 74 74 65 6d 70 74 69 6e 67 20  nd.  attempting 
121e0 74 6f 20 65 78 65 63 75 74 65 20 65 69 74 68 65  to execute eithe
121f0 72 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e  r will result in
12200 20 61 20 70 61 72 73 65 20 65 72 72 6f 72 2e 0a   a parse error..
12210 0a 20 20 57 41 52 4e 49 4e 47 3a 20 49 66 20 74  .  WARNING: If t
12220 68 69 73 20 6d 61 63 72 6f 20 69 73 20 64 65 66  his macro is def
12230 69 6e 65 64 2c 20 69 74 20 77 69 6c 6c 20 6e 6f  ined, it will no
12240 74 20 62 65 20 70 6f 73 73 69 62 6c 65 20 74 6f  t be possible to
12250 20 6f 70 65 6e 20 61 20 64 61 74 61 62 61 73 65   open a database
12260 0a 20 20 66 6f 72 20 77 68 69 63 68 20 74 68 65  .  for which the
12270 20 73 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 73   schema contains
12280 20 56 49 45 57 20 6f 62 6a 65 63 74 73 2e 20 0a   VIEW objects. .
12290 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f  }..COMPILE_OPTIO
122a0 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  N {SQLITE_OMIT_V
122b0 49 52 54 55 41 4c 54 41 42 4c 45 7d 20 7b 0a 20  IRTUALTABLE} {. 
122c0 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 6f 6d 69   This option omi
122d0 74 73 20 73 75 70 70 6f 72 74 20 66 6f 72 20 74  ts support for t
122e0 68 65 20 5b 73 71 6c 69 74 65 33 5f 76 74 61 62  he [sqlite3_vtab
122f0 20 7c 20 56 69 72 74 75 61 6c 20 54 61 62 6c 65   | Virtual Table
12300 5d 0a 20 20 6d 65 63 68 61 6e 69 73 6d 20 69 6e  ].  mechanism in
12310 20 53 51 4c 69 74 65 2e 0a 7d 0a 0a 43 4f 4d 50   SQLite..}..COMP
12320 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49  ILE_OPTION {SQLI
12330 54 45 5f 4f 4d 49 54 5f 57 41 4c 7d 20 7b 0a 20  TE_OMIT_WAL} {. 
12340 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 6f 6d 69   This option omi
12350 74 73 20 74 68 65 20 22 5b 77 72 69 74 65 2d 61  ts the "[write-a
12360 68 65 61 64 20 6c 6f 67 5d 22 20 28 61 2e 6b 2e  head log]" (a.k.
12370 61 2e 20 22 5b 57 41 4c 5d 22 29 20 63 61 70 61  a. "[WAL]") capa
12380 62 69 6c 69 74 79 2e 0a 7d 0a 0a 43 4f 4d 50 49  bility..}..COMPI
12390 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54  LE_OPTION {SQLIT
123a0 45 5f 4f 4d 49 54 5f 57 53 44 7d 20 7b 0a 20 20  E_OMIT_WSD} {.  
123b0 54 68 69 73 20 6f 70 74 69 6f 6e 20 62 75 69 6c  This option buil
123c0 64 73 20 61 20 76 65 72 73 69 6f 6e 20 6f 66 20  ds a version of 
123d0 74 68 65 20 53 51 4c 69 74 65 20 6c 69 62 72 61  the SQLite libra
123e0 72 79 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73  ry that contains
123f0 20 6e 6f 0a 20 20 57 72 69 74 61 62 6c 65 20 53   no.  Writable S
12400 74 61 74 69 63 20 44 61 74 61 20 28 57 53 44 29  tatic Data (WSD)
12410 2e 20 20 57 53 44 20 69 73 20 67 6c 6f 62 61 6c  .  WSD is global
12420 20 76 61 72 69 61 62 6c 65 73 20 61 6e 64 2f 6f   variables and/o
12430 72 20 73 74 61 74 69 63 0a 20 20 76 61 72 69 61  r static.  varia
12440 62 6c 65 73 2e 20 20 53 6f 6d 65 20 70 6c 61 74  bles.  Some plat
12450 66 6f 72 6d 73 20 64 6f 20 6e 6f 74 20 73 75 70  forms do not sup
12460 70 6f 72 74 20 57 53 44 2c 20 61 6e 64 20 74 68  port WSD, and th
12470 69 73 20 6f 70 74 69 6f 6e 20 69 73 20 6e 65 63  is option is nec
12480 65 73 73 61 72 79 0a 20 20 69 6e 20 6f 72 64 65  essary.  in orde
12490 72 20 66 6f 72 20 53 51 4c 69 74 65 20 74 6f 20  r for SQLite to 
124a0 77 6f 72 6b 20 74 68 6f 73 65 20 70 6c 61 74 66  work those platf
124b0 6f 72 6d 73 2e 20 20 0a 0a 20 20 55 6e 6c 69 6b  orms.  ..  Unlik
124c0 65 20 6f 74 68 65 72 20 4f 4d 49 54 20 6f 70 74  e other OMIT opt
124d0 69 6f 6e 73 20 77 68 69 63 68 20 6d 61 6b 65 20  ions which make 
124e0 74 68 65 20 53 51 4c 69 74 65 20 6c 69 62 72 61  the SQLite libra
124f0 72 79 20 73 6d 61 6c 6c 65 72 2c 0a 20 20 74 68  ry smaller,.  th
12500 69 73 20 6f 70 74 69 6f 6e 20 61 63 74 75 61 6c  is option actual
12510 6c 79 20 69 6e 63 72 65 61 73 65 73 20 74 68 65  ly increases the
12520 20 73 69 7a 65 20 6f 66 20 53 51 4c 69 74 65 20   size of SQLite 
12530 61 6e 64 20 6d 61 6b 65 73 20 69 74 20 72 75 6e  and makes it run
12540 0a 20 20 61 20 6c 69 74 74 6c 65 20 73 6c 6f 77  .  a little slow
12550 65 72 2e 20 20 4f 6e 6c 79 20 75 73 65 20 74 68  er.  Only use th
12560 69 73 20 6f 70 74 69 6f 6e 20 69 66 20 53 51 4c  is option if SQL
12570 69 74 65 20 69 73 20 62 65 69 6e 67 20 62 75 69  ite is being bui
12580 6c 74 20 66 6f 72 20 61 6e 0a 20 20 65 6d 62 65  lt for an.  embe
12590 64 64 65 64 20 74 61 72 67 65 74 20 74 68 61 74  dded target that
125a0 20 64 6f 65 73 20 6e 6f 74 20 73 75 70 70 6f 72   does not suppor
125b0 74 20 57 53 44 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c  t WSD..}..COMPIL
125c0 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45  E_OPTION {SQLITE
125d0 5f 4f 4d 49 54 5f 58 46 45 52 5f 4f 50 54 7d 20  _OMIT_XFER_OPT} 
125e0 7b 0a 20 20 54 68 69 73 20 6f 70 74 69 6f 6e 20  {.  This option 
125f0 6f 6d 69 74 73 20 73 75 70 70 6f 72 74 20 66 6f  omits support fo
12600 72 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20  r optimizations 
12610 74 68 61 74 20 68 65 6c 70 20 73 74 61 74 65 6d  that help statem
12620 65 6e 74 73 0a 20 20 6f 66 20 74 68 65 20 66 6f  ents.  of the fo
12630 72 6d 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20  rm "INSERT INTO 
12640 2e 2e 2e 20 53 45 4c 45 43 54 20 2e 2e 2e 22 20  ... SELECT ..." 
12650 72 75 6e 20 66 61 73 74 65 72 2e 0a 7d 0a 0a 43  run faster..}..C
12660 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53  OMPILE_OPTION {S
12670 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45  QLITE_UNTESTABLE
12680 7d 20 7b 0a 20 20 41 20 73 74 61 6e 64 61 72 64  } {.  A standard
12690 20 53 51 4c 69 74 65 20 62 75 69 6c 64 20 69 6e   SQLite build in
126a0 63 6c 75 64 65 73 20 61 20 73 6d 61 6c 6c 20 61  cludes a small a
126b0 6d 6f 75 6e 74 20 6f 66 20 6c 6f 67 69 63 20 61  mount of logic a
126c0 73 73 6f 63 69 61 74 65 64 0a 20 20 77 69 74 68  ssociated.  with
126d0 20 5b 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63   [sqlite3_test_c
126e0 6f 6e 74 72 6f 6c 28 29 5d 20 74 6f 20 65 78 65  ontrol()] to exe
126f0 72 63 69 73 65 0a 20 20 70 61 72 74 73 20 6f 66  rcise.  parts of
12700 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65   the SQLite core
12710 20 74 68 61 74 20 61 72 65 20 6f 74 68 65 72 77   that are otherw
12720 69 73 65 20 64 69 66 66 69 63 75 6c 74 20 74 6f  ise difficult to
12730 20 76 61 6c 69 64 61 74 65 2e 0a 20 20 54 68 69   validate..  Thi
12740 73 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f  s compile-time o
12750 70 74 69 6f 6e 20 6f 6d 69 74 73 20 74 68 61 74  ption omits that
12760 20 65 78 74 72 61 20 74 65 73 74 69 6e 67 20 6c   extra testing l
12770 6f 67 69 63 2e 20 20 54 68 69 73 0a 20 20 63 6f  ogic.  This.  co
12780 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
12790 6e 20 77 61 73 20 63 61 6c 6c 65 64 20 22 53 51  n was called "SQ
127a0 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49  LITE_OMIT_BUILTI
127b0 4e 5f 54 45 53 54 22 20 70 72 69 6f 72 0a 20 20  N_TEST" prior.  
127c0 74 6f 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f  to SQLite versio
127d0 6e 20 33 2e 31 36 2e 30 20 28 5b 64 61 74 65 6f  n 3.16.0 ([dateo
127e0 66 3a 33 2e 31 36 2e 30 5d 29 2e 20 20 54 68 65  f:3.16.0]).  The
127f0 20 6e 61 6d 65 20 77 61 73 20 63 68 61 6e 67 65   name was change
12800 64 0a 20 20 74 6f 20 62 65 74 74 65 72 20 64 65  d.  to better de
12810 73 63 72 69 62 65 20 74 68 65 20 69 6d 70 6c 69  scribe the impli
12820 63 61 74 69 6f 6e 73 20 6f 66 20 75 73 69 6e 67  cations of using
12830 20 69 74 2e 0a 20 20 3c 70 3e 0a 20 20 53 65 74   it..  <p>.  Set
12840 74 69 6e 67 20 74 68 69 73 20 63 6f 6d 70 69 6c  ting this compil
12850 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 70 72  e-time option pr
12860 65 76 65 6e 74 73 20 53 51 4c 69 74 65 20 66 72  events SQLite fr
12870 6f 6d 20 62 65 69 6e 67 20 66 75 6c 6c 79 0a 20  om being fully. 
12880 20 74 65 73 74 61 62 6c 65 2e 20 20 42 72 61 6e   testable.  Bran
12890 63 68 20 74 65 73 74 20 63 6f 76 65 72 61 67 65  ch test coverage
128a0 20 64 72 6f 70 73 20 66 72 6f 6d 20 31 30 30 25   drops from 100%
128b0 20 64 6f 77 6e 20 74 6f 20 61 62 6f 75 74 20 39   down to about 9
128c0 35 25 2e 0a 20 20 3c 70 3e 0a 20 20 53 51 4c 69  5%..  <p>.  SQLi
128d0 74 65 20 64 65 76 65 6c 6f 70 65 72 73 20 66 6f  te developers fo
128e0 6c 6c 6f 77 20 74 68 65 20 4e 41 53 41 20 70 72  llow the NASA pr
128f0 69 6e 63 69 70 6c 65 20 6f 66 0a 20 20 22 66 6c  inciple of.  "fl
12900 79 20 77 68 61 74 20 79 6f 75 20 74 65 73 74 20  y what you test 
12910 61 6e 64 20 74 65 73 74 20 77 68 61 74 20 79 6f  and test what yo
12920 75 20 66 6c 79 22 2e 20 20 54 68 69 73 20 70 72  u fly".  This pr
12930 69 6e 63 69 70 6c 65 20 69 73 20 76 69 6f 6c 61  inciple is viola
12940 74 65 64 0a 20 20 69 66 20 74 68 69 73 20 6f 70  ted.  if this op
12950 74 69 6f 6e 20 69 73 20 65 6e 61 62 6c 65 64 20  tion is enabled 
12960 66 6f 72 20 64 65 6c 69 76 65 72 79 20 62 75 74  for delivery but
12970 20 64 69 73 61 62 6c 65 64 20 66 6f 72 20 74 65   disabled for te
12980 73 74 69 6e 67 2e 0a 20 20 42 75 74 20 69 66 20  sting..  But if 
12990 74 68 69 73 20 6f 70 74 69 6f 6e 20 69 73 20 65  this option is e
129a0 6e 61 62 6c 65 64 20 64 75 72 69 6e 67 20 74 65  nabled during te
129b0 73 74 69 6e 67 2c 20 6e 6f 74 20 61 6c 6c 20 62  sting, not all b
129c0 72 61 6e 63 68 65 73 20 61 72 65 20 0a 20 20 72  ranches are .  r
129d0 65 61 63 68 61 62 6c 65 2e 20 20 54 68 65 72 65  eachable.  There
129e0 66 6f 72 65 2c 20 74 68 65 20 75 73 65 20 6f 66  fore, the use of
129f0 20 74 68 69 73 20 63 6f 6d 70 69 6c 65 2d 74 69   this compile-ti
12a00 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20 64 69 73  me option is dis
12a10 63 6f 75 72 61 67 65 64 2e 0a 7d 0a 0a 43 4f 4d  couraged..}..COM
12a20 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c  PILE_OPTION {SQL
12a30 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 7d  ITE_ZERO_MALLOC}
12a40 20 7b 0a 20 20 54 68 69 73 20 6f 70 74 69 6f 6e   {.  This option
12a50 20 6f 6d 69 74 73 20 62 6f 74 68 20 74 68 65 20   omits both the 
12a60 5b 64 65 66 61 75 6c 74 20 6d 65 6d 6f 72 79 20  [default memory 
12a70 61 6c 6c 6f 63 61 74 6f 72 5d 20 61 6e 64 20 74  allocator] and t
12a80 68 65 0a 20 20 5b 64 65 62 75 67 67 69 6e 67 20  he.  [debugging 
12a90 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 6f 72  memory allocator
12aa0 5d 20 66 72 6f 6d 20 74 68 65 20 62 75 69 6c 64  ] from the build
12ab0 20 61 6e 64 20 73 75 62 73 74 69 74 75 74 65 73   and substitutes
12ac0 20 61 20 73 74 75 62 0a 20 20 6d 65 6d 6f 72 79   a stub.  memory
12ad0 20 61 6c 6c 6f 63 61 74 6f 72 20 74 68 61 74 20   allocator that 
12ae0 61 6c 77 61 79 73 20 66 61 69 6c 73 2e 20 20 53  always fails.  S
12af0 51 4c 69 74 65 20 77 69 6c 6c 20 6e 6f 74 20 72  QLite will not r
12b00 75 6e 20 77 69 74 68 20 74 68 69 73 0a 20 20 73  un with this.  s
12b10 74 75 62 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  tub memory alloc
12b20 61 74 6f 72 20 73 69 6e 63 65 20 69 74 20 77 69  ator since it wi
12b30 6c 6c 20 62 65 20 75 6e 61 62 6c 65 20 74 6f 20  ll be unable to 
12b40 61 6c 6c 6f 63 61 74 65 20 6d 65 6d 6f 72 79 2e  allocate memory.
12b50 20 20 42 75 74 0a 20 20 74 68 69 73 20 73 74 75    But.  this stu
12b60 62 20 63 61 6e 20 62 65 20 72 65 70 6c 61 63 65  b can be replace
12b70 64 20 61 74 20 73 74 61 72 74 2d 74 69 6d 65 20  d at start-time 
12b80 75 73 69 6e 67 0a 20 20 5b 73 71 6c 69 74 65 33  using.  [sqlite3
12b90 5f 63 6f 6e 66 69 67 5d 28 5b 53 51 4c 49 54 45  _config]([SQLITE
12ba0 5f 43 4f 4e 46 49 47 5f 4d 41 4c 4c 4f 43 5d 2c  _CONFIG_MALLOC],
12bb0 2e 2e 2e 29 20 6f 72 0a 20 20 5b 73 71 6c 69 74  ...) or.  [sqlit
12bc0 65 33 5f 63 6f 6e 66 69 67 5d 28 5b 53 51 4c 49  e3_config]([SQLI
12bd0 54 45 5f 43 4f 4e 46 49 47 5f 48 45 41 50 5d 2c  TE_CONFIG_HEAP],
12be0 2e 2e 2e 29 2e 0a 20 20 53 6f 20 74 68 65 20 6e  ...)..  So the n
12bf0 65 74 20 65 66 66 65 63 74 20 6f 66 20 74 68 69  et effect of thi
12c00 73 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f  s compile-time o
12c10 70 74 69 6f 6e 20 69 73 20 74 68 61 74 20 69 74  ption is that it
12c20 20 61 6c 6c 6f 77 73 20 53 51 4c 69 74 65 0a 20   allows SQLite. 
12c30 20 74 6f 20 62 65 20 63 6f 6d 70 69 6c 65 64 20   to be compiled 
12c40 61 6e 64 20 6c 69 6e 6b 65 64 20 61 67 61 69 6e  and linked again
12c50 73 74 20 61 20 73 79 73 74 65 6d 20 6c 69 62 72  st a system libr
12c60 61 72 79 20 74 68 61 74 20 64 6f 65 73 20 6e 6f  ary that does no
12c70 74 20 73 75 70 70 6f 72 74 0a 20 20 6d 61 6c 6c  t support.  mall
12c80 6f 63 28 29 2c 20 66 72 65 65 28 29 2c 20 61 6e  oc(), free(), an
12c90 64 2f 6f 72 20 72 65 61 6c 6c 6f 63 28 29 2e 0a  d/or realloc()..
12ca0 7d 0a 0a 3c 2f 74 63 6c 3e 0a 3c 61 20 6e 61 6d  }..</tcl>.<a nam
12cb0 65 3d 22 64 65 62 75 67 6f 70 74 69 6f 6e 73 22  e="debugoptions"
12cc0 3e 3c 2f 61 3e 0a 3c 68 31 3e 20 41 6e 61 6c 79  ></a>.<h1> Analy
12cd0 73 69 73 20 61 6e 64 20 44 65 62 75 67 67 69 6e  sis and Debuggin
12ce0 67 20 4f 70 74 69 6f 6e 73 3c 2f 68 31 3e 0a 3c  g Options</h1>.<
12cf0 74 63 6c 3e 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50  tcl>..COMPILE_OP
12d00 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 44 45 42  TION {SQLITE_DEB
12d10 55 47 7d 20 7b 0a 20 20 54 68 65 20 53 51 4c 69  UG} {.  The SQLi
12d20 74 65 20 73 6f 75 72 63 65 20 63 6f 64 65 20 63  te source code c
12d30 6f 6e 74 61 69 6e 73 20 6c 69 74 65 72 61 6c 6c  ontains literall
12d40 79 20 74 68 6f 75 73 61 6e 64 73 20 6f 66 20 61  y thousands of a
12d50 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e  ssert() statemen
12d60 74 73 0a 20 20 75 73 65 64 20 74 6f 20 76 65 72  ts.  used to ver
12d70 69 66 79 20 69 6e 74 65 72 6e 61 6c 20 61 73 73  ify internal ass
12d80 75 6d 70 74 69 6f 6e 73 20 61 6e 64 20 73 75 62  umptions and sub
12d90 72 6f 75 74 69 6e 65 20 70 72 65 63 6f 6e 64 69  routine precondi
12da0 74 69 6f 6e 73 20 61 6e 64 0a 20 20 70 6f 73 74  tions and.  post
12db0 63 6f 6e 64 69 74 69 6f 6e 73 2e 20 20 54 68 65  conditions.  The
12dc0 73 65 20 61 73 73 65 72 74 28 29 20 73 74 61 74  se assert() stat
12dd0 65 6d 65 6e 74 73 20 61 72 65 20 6e 6f 72 6d 61  ements are norma
12de0 6c 6c 79 20 74 75 72 6e 65 64 20 6f 66 66 0a 20  lly turned off. 
12df0 20 28 74 68 65 79 20 67 65 6e 65 72 61 74 65 20   (they generate 
12e00 6e 6f 20 63 6f 64 65 29 20 73 69 6e 63 65 20 74  no code) since t
12e10 75 72 6e 69 6e 67 20 74 68 65 6d 20 6f 6e 20 6d  urning them on m
12e20 61 6b 65 73 20 53 51 4c 69 74 65 20 72 75 6e 20  akes SQLite run 
12e30 61 70 70 72 6f 78 69 6d 61 74 65 6c 79 0a 20 20  approximately.  
12e40 74 68 72 65 65 20 74 69 6d 65 73 20 73 6c 6f 77  three times slow
12e50 65 72 2e 20 20 42 75 74 20 66 6f 72 20 74 65 73  er.  But for tes
12e60 74 69 6e 67 20 61 6e 64 20 61 6e 61 6c 79 73 69  ting and analysi
12e70 73 2c 20 69 74 20 69 73 20 75 73 65 66 75 6c 20  s, it is useful 
12e80 74 6f 20 74 75 72 6e 0a 20 20 74 68 65 20 61 73  to turn.  the as
12e90 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74  sert() statement
12ea0 73 20 6f 6e 2e 20 20 54 68 65 20 53 51 4c 49 54  s on.  The SQLIT
12eb0 45 5f 44 45 42 55 47 20 63 6f 6d 70 69 6c 65 2d  E_DEBUG compile-
12ec0 74 69 6d 65 20 6f 70 74 69 6f 6e 20 64 6f 65 73  time option does
12ed0 20 74 68 69 73 2e 0a 20 20 3c 70 3e 53 51 4c 49   this..  <p>SQLI
12ee0 54 45 5f 44 45 42 55 47 20 61 6c 73 6f 20 65 6e  TE_DEBUG also en
12ef0 61 62 6c 65 73 20 73 6f 6d 65 20 6f 74 68 65 72  ables some other
12f00 20 64 65 62 75 67 67 69 6e 67 20 66 65 61 74 75   debugging featu
12f10 72 65 73 2c 20 73 75 63 68 20 61 73 0a 20 20 73  res, such as.  s
12f20 70 65 63 69 61 6c 20 5b 50 52 41 47 4d 41 5d 20  pecial [PRAGMA] 
12f30 73 74 61 74 65 6d 65 6e 74 73 20 74 68 61 74 20  statements that 
12f40 74 75 72 6e 20 6f 6e 20 74 72 61 63 69 6e 67 20  turn on tracing 
12f50 61 6e 64 20 6c 69 73 74 69 6e 67 20 66 65 61 74  and listing feat
12f60 75 72 65 73 0a 20 20 75 73 65 64 20 66 6f 72 20  ures.  used for 
12f70 74 72 6f 75 62 6c 65 73 68 6f 6f 74 69 6e 67 20  troubleshooting 
12f80 61 6e 64 20 61 6e 61 6c 79 73 69 73 20 6f 66 20  and analysis of 
12f90 74 68 65 20 5b 56 44 42 45 5d 20 61 6e 64 20 63  the [VDBE] and c
12fa0 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 2e 0a 7d  ode generator..}
12fb0 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e  ..COMPILE_OPTION
12fc0 20 7b 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55   {SQLITE_MEMDEBU
12fd0 47 7d 20 7b 0a 20 20 54 68 65 20 53 51 4c 49 54  G} {.  The SQLIT
12fe0 45 5f 4d 45 4d 44 45 42 55 47 20 6f 70 74 69 6f  E_MEMDEBUG optio
12ff0 6e 20 63 61 75 73 65 73 20 61 6e 20 69 6e 73 74  n causes an inst
13000 72 75 6d 65 6e 74 65 64 20 0a 20 20 5b 64 65 62  rumented .  [deb
13010 75 67 67 69 6e 67 20 6d 65 6d 6f 72 79 20 61 6c  ugging memory al
13020 6c 6f 63 61 74 6f 72 5d 0a 20 20 74 6f 20 62 65  locator].  to be
13030 20 75 73 65 64 20 61 73 20 74 68 65 20 64 65 66   used as the def
13040 61 75 6c 74 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  ault memory allo
13050 63 61 74 6f 72 20 77 69 74 68 69 6e 20 53 51 4c  cator within SQL
13060 69 74 65 2e 20 20 54 68 65 0a 20 20 69 6e 73 74  ite.  The.  inst
13070 72 75 6d 65 6e 74 65 64 20 6d 65 6d 6f 72 79 20  rumented memory 
13080 61 6c 6c 6f 63 61 74 6f 72 20 63 68 65 63 6b 73  allocator checks
13090 20 66 6f 72 20 6d 69 73 75 73 65 20 6f 66 20 64   for misuse of d
130a0 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63  ynamically alloc
130b0 61 74 65 64 0a 20 20 6d 65 6d 6f 72 79 2e 20 20  ated.  memory.  
130c0 45 78 61 6d 70 6c 65 73 20 6f 66 20 6d 69 73 75  Examples of misu
130d0 73 65 20 69 6e 63 6c 75 64 65 20 75 73 69 6e 67  se include using
130e0 20 6d 65 6d 6f 72 79 20 61 66 74 65 72 20 69 74   memory after it
130f0 20 69 73 20 66 72 65 65 64 2c 0a 20 20 77 72 69   is freed,.  wri
13100 74 69 6e 67 20 6f 66 66 20 74 68 65 20 65 6e 64  ting off the end
13110 73 20 6f 66 20 61 20 6d 65 6d 6f 72 79 20 61 6c  s of a memory al
13120 6c 6f 63 61 74 69 6f 6e 2c 20 66 72 65 65 69 6e  location, freein
13130 67 20 6d 65 6d 6f 72 79 20 6e 6f 74 20 70 72 65  g memory not pre
13140 76 69 6f 75 73 6c 79 0a 20 20 6f 62 74 61 69 6e  viously.  obtain
13150 65 64 20 66 72 6f 6d 20 74 68 65 20 6d 65 6d 6f  ed from the memo
13160 72 79 20 61 6c 6c 6f 63 61 74 6f 72 2c 20 6f 72  ry allocator, or
13170 20 66 61 69 6c 69 6e 67 20 74 6f 20 69 6e 69 74   failing to init
13180 69 61 6c 69 7a 65 20 6e 65 77 6c 79 0a 20 20 61  ialize newly.  a
13190 6c 6c 6f 63 61 74 65 64 20 6d 65 6d 6f 72 79 2e  llocated memory.
131a0 0a 7d 0a 0a 3c 2f 74 63 6c 3e 0a 3c 61 20 6e 61  .}..</tcl>.<a na
131b0 6d 65 3d 22 77 69 6e 33 32 6f 70 74 69 6f 6e 73  me="win32options
131c0 22 3e 3c 2f 61 3e 0a 3c 68 31 3e 20 57 69 6e 64  "></a>.<h1> Wind
131d0 6f 77 73 2d 53 70 65 63 69 66 69 63 20 4f 70 74  ows-Specific Opt
131e0 69 6f 6e 73 3c 2f 68 31 3e 0a 3c 74 63 6c 3e 0a  ions</h1>.<tcl>.
131f0 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20  .COMPILE_OPTION 
13200 7b 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 48 45  {SQLITE_WIN32_HE
13210 41 50 5f 43 52 45 41 54 45 7d 20 7b 0a 20 20 54  AP_CREATE} {.  T
13220 68 69 73 20 6f 70 74 69 6f 6e 20 66 6f 72 63 65  his option force
13230 73 20 74 68 65 20 57 69 6e 33 32 20 6e 61 74 69  s the Win32 nati
13240 76 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  ve memory alloca
13250 74 6f 72 2c 20 77 68 65 6e 20 65 6e 61 62 6c 65  tor, when enable
13260 64 2c 20 74 6f 0a 20 20 63 72 65 61 74 65 20 61  d, to.  create a
13270 20 70 72 69 76 61 74 65 20 68 65 61 70 20 74 6f   private heap to
13280 20 68 6f 6c 64 20 61 6c 6c 20 6d 65 6d 6f 72 79   hold all memory
13290 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2e 0a 7d 0a   allocations..}.
132a0 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20  .COMPILE_OPTION 
132b0 7b 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41  {SQLITE_WIN32_MA
132c0 4c 4c 4f 43 5f 56 41 4c 49 44 41 54 45 7d 20 7b  LLOC_VALIDATE} {
132d0 0a 20 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 66  .  This option f
132e0 6f 72 63 65 73 20 74 68 65 20 57 69 6e 33 32 20  orces the Win32 
132f0 6e 61 74 69 76 65 20 6d 65 6d 6f 72 79 20 61 6c  native memory al
13300 6c 6f 63 61 74 6f 72 2c 20 77 68 65 6e 20 65 6e  locator, when en
13310 61 62 6c 65 64 2c 20 74 6f 0a 20 20 6d 61 6b 65  abled, to.  make
13320 20 73 74 72 61 74 65 67 69 63 20 63 61 6c 6c 73   strategic calls
13330 20 69 6e 74 6f 20 74 68 65 20 48 65 61 70 56 61   into the HeapVa
13340 6c 69 64 61 74 65 28 29 20 66 75 6e 63 74 69 6f  lidate() functio
13350 6e 20 69 66 20 61 73 73 65 72 74 28 29 20 69 73  n if assert() is
13360 20 61 6c 73 6f 0a 20 20 65 6e 61 62 6c 65 64 2e   also.  enabled.
13370 0a 7d 0a 0a 3c 2f 74 63 6c 3e 0a 3c 61 20 6e 61  .}..</tcl>.<a na
13380 6d 65 3d 22 6c 69 6e 6b 61 67 65 22 3e 3c 2f 61  me="linkage"></a
13390 3e 0a 3c 68 31 3e 43 6f 6d 70 69 6c 65 72 20 4c  >.<h1>Compiler L
133a0 69 6e 6b 61 67 65 20 43 6f 6e 74 72 6f 6c 3c 2f  inkage Control</
133b0 68 31 3e 0a 0a 3c 70 3e 54 68 65 20 66 6f 6c 6c  h1>..<p>The foll
133c0 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 73 70 65  owing macros spe
133d0 63 69 66 79 0a 69 6e 74 65 72 66 61 63 65 20 6c  cify.interface l
133e0 69 6e 6b 61 67 65 20 66 6f 72 20 63 65 72 74 61  inkage for certa
133f0 69 6e 20 6b 69 6e 64 73 20 6f 66 20 53 51 4c 69  in kinds of SQLi
13400 74 65 20 62 75 69 6c 64 73 2e 20 20 54 68 65 20  te builds.  The 
13410 4d 61 6b 65 66 69 6c 65 73 20 77 69 6c 6c 20 6e  Makefiles will n
13420 6f 72 6d 61 6c 6c 79 0a 68 61 6e 64 6c 65 20 73  ormally.handle s
13430 65 74 74 69 6e 67 20 74 68 65 73 65 20 6d 61 63  etting these mac
13440 72 6f 73 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  ros automaticall
13450 79 2e 20 20 41 70 70 6c 69 63 61 74 69 6f 6e 20  y.  Application 
13460 64 65 76 65 6c 6f 70 65 72 73 20 73 68 6f 75 6c  developers shoul
13470 64 0a 6e 6f 74 20 6e 65 65 64 20 74 6f 20 77 6f  d.not need to wo
13480 72 72 79 20 77 69 74 68 20 74 68 65 73 65 20 6d  rry with these m
13490 61 63 72 6f 73 2e 20 20 54 68 65 20 66 6f 6c 6c  acros.  The foll
134a0 6f 77 69 6e 67 20 64 6f 63 75 6d 65 6e 74 61 74  owing documentat
134b0 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 73 65 20  ion about these 
134c0 0a 6d 61 63 72 6f 73 20 69 73 20 69 6e 63 6c 75  .macros is inclu
134d0 64 65 64 20 63 6f 6d 70 6c 65 74 65 6e 65 73 73  ded completeness
134e0 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 43 4f 4d  .</p>..<tcl>.COM
134f0 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c  PILE_OPTION {SQL
13500 49 54 45 5f 41 50 49 7d 20 7b 0a 20 20 54 68 69  ITE_API} {.  Thi
13510 73 20 6d 61 63 72 6f 20 69 64 65 6e 74 69 66 69  s macro identifi
13520 65 73 20 61 20 65 78 74 65 72 6e 61 6c 6c 79 20  es a externally 
13530 76 69 73 69 62 6c 65 20 69 6e 74 65 72 66 61 63  visible interfac
13540 65 20 66 6f 72 20 53 51 4c 69 74 65 2e 0a 20 20  e for SQLite..  
13550 54 68 69 73 20 6d 61 63 72 6f 20 69 73 20 73 6f  This macro is so
13560 6d 65 74 69 6d 65 73 20 73 65 74 20 74 6f 20 22  metimes set to "
13570 65 78 74 65 72 6e 22 2e 20 20 42 75 74 20 74 68  extern".  But th
13580 65 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 73 0a  e definition is.
13590 20 20 63 6f 6d 70 69 6c 65 72 2d 73 70 65 63 69    compiler-speci
135a0 66 69 63 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f  fic..}..COMPILE_
135b0 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 41  OPTION {SQLITE_A
135c0 50 49 43 41 4c 4c 7d 20 7b 0a 20 20 54 68 69 73  PICALL} {.  This
135d0 20 6d 61 63 72 6f 20 69 64 65 6e 74 69 66 69 65   macro identifie
135e0 73 20 74 68 65 20 63 61 6c 6c 69 6e 67 20 63 6f  s the calling co
135f0 6e 76 65 6e 74 69 6f 6e 20 75 73 65 64 20 62 79  nvention used by
13600 20 70 75 62 6c 69 63 20 69 6e 74 65 72 66 61 63   public interfac
13610 65 0a 20 20 72 6f 75 74 69 6e 65 73 20 69 6e 20  e.  routines in 
13620 53 51 4c 69 74 65 2e 20 20 54 68 69 73 20 6d 61  SQLite.  This ma
13630 63 72 6f 20 69 73 20 6e 6f 72 6d 61 6c 6c 79 20  cro is normally 
13640 64 65 66 69 6e 65 64 20 74 6f 20 62 65 20 6e 6f  defined to be no
13650 74 68 69 6e 67 2c 0a 20 20 74 68 6f 75 67 68 20  thing,.  though 
13660 6f 6e 20 57 69 6e 64 6f 77 73 20 62 75 69 6c 64  on Windows build
13670 73 20 69 74 20 63 61 6e 20 73 6f 6d 65 74 69 6d  s it can sometim
13680 65 73 20 62 65 20 73 65 74 20 74 6f 20 22 5f 5f  es be set to "__
13690 63 64 65 63 6c 22 20 6f 72 20 22 5f 5f 73 74 64  cdecl" or "__std
136a0 63 61 6c 6c 22 2e 0a 20 20 54 68 65 20 22 5f 5f  call"..  The "__
136b0 63 64 65 63 6c 22 20 73 65 74 74 69 6e 67 20 69  cdecl" setting i
136c0 73 20 74 68 65 20 64 65 66 61 75 6c 74 2c 20 62  s the default, b
136d0 75 74 20 22 5f 5f 73 74 64 63 61 6c 6c 22 20 69  ut "__stdcall" i
136e0 73 20 75 73 65 64 20 77 68 65 6e 20 53 51 4c 69  s used when SQLi
136f0 74 65 0a 20 20 69 73 20 69 6e 74 65 6e 64 65 64  te.  is intended
13700 20 74 6f 20 62 65 20 63 6f 6d 70 69 6c 65 64 20   to be compiled 
13710 61 73 20 61 20 57 69 6e 64 6f 77 73 20 73 79 73  as a Windows sys
13720 74 65 6d 20 6c 69 62 72 61 72 79 2e 0a 20 20 3c  tem library..  <
13730 70 3e 0a 20 20 41 20 73 69 6e 67 6c 65 20 66 75  p>.  A single fu
13740 6e 63 74 69 6f 6e 20 64 65 63 6c 61 72 61 74 69  nction declarati
13750 6f 6e 20 73 68 6f 75 6c 64 20 63 6f 6e 74 61 69  on should contai
13760 6e 20 6e 6f 20 6d 6f 72 65 20 74 68 61 6e 20 6f  n no more than o
13770 6e 65 20 6f 66 0a 20 20 74 68 65 20 66 6f 6c 6c  ne of.  the foll
13780 6f 77 69 6e 67 3a 20 20 5b 53 51 4c 49 54 45 5f  owing:  [SQLITE_
13790 41 50 49 43 41 4c 4c 5d 2c 20 5b 53 51 4c 49 54  APICALL], [SQLIT
137a0 45 5f 43 41 4c 4c 42 41 43 4b 5d 2c 20 5b 53 51  E_CALLBACK], [SQ
137b0 4c 49 54 45 5f 43 44 45 43 4c 5d 2c 0a 20 20 6f  LITE_CDECL],.  o
137c0 72 20 5b 53 51 4c 49 54 45 5f 53 59 53 43 41 4c  r [SQLITE_SYSCAL
137d0 4c 5d 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f  L]..}..COMPILE_O
137e0 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 43 41  PTION {SQLITE_CA
137f0 4c 4c 42 41 43 4b 7d 20 7b 0a 20 20 54 68 69 73  LLBACK} {.  This
13800 20 6d 61 63 72 6f 20 73 70 65 63 69 66 69 65 73   macro specifies
13810 20 74 68 65 20 63 61 6c 6c 69 6e 67 20 63 6f 6e   the calling con
13820 76 65 6e 74 69 6f 6e 20 75 73 65 64 20 62 79 20  vention used by 
13830 63 61 6c 6c 62 61 63 6b 20 70 6f 69 6e 74 65 72  callback pointer
13840 73 0a 20 20 69 6e 20 53 51 4c 69 74 65 2e 20 20  s.  in SQLite.  
13850 54 68 69 73 20 6d 61 63 72 6f 20 69 73 20 6e 6f  This macro is no
13860 72 6d 61 6c 6c 79 20 64 65 66 69 6e 65 64 20 74  rmally defined t
13870 6f 20 62 65 20 6e 6f 74 68 69 6e 67 2c 20 74 68  o be nothing, th
13880 6f 75 67 68 20 6f 6e 20 57 69 6e 64 6f 77 73 0a  ough on Windows.
13890 20 20 62 75 69 6c 64 73 20 69 74 20 63 61 6e 20    builds it can 
138a0 73 6f 6d 65 74 69 6d 65 73 20 62 65 20 73 65 74  sometimes be set
138b0 20 74 6f 20 22 5f 5f 63 64 65 63 6c 22 20 6f 72   to "__cdecl" or
138c0 20 22 5f 5f 73 74 64 63 61 6c 6c 22 2e 20 20 54   "__stdcall".  T
138d0 68 65 0a 20 20 22 5f 5f 63 64 65 63 6c 22 20 73  he.  "__cdecl" s
138e0 65 74 74 69 6e 67 20 69 73 20 74 68 65 20 64 65  etting is the de
138f0 66 61 75 6c 74 2c 20 62 75 74 20 22 5f 5f 73 74  fault, but "__st
13900 64 63 61 6c 6c 22 20 69 73 20 75 73 65 64 20 77  dcall" is used w
13910 68 65 6e 20 53 51 4c 69 74 65 0a 20 20 69 73 20  hen SQLite.  is 
13920 69 6e 74 65 6e 64 65 64 20 74 6f 20 62 65 20 63  intended to be c
13930 6f 6d 70 69 6c 65 64 20 61 73 20 61 20 57 69 6e  ompiled as a Win
13940 64 6f 77 73 20 73 79 73 74 65 6d 20 6c 69 62 72  dows system libr
13950 61 72 79 2e 0a 20 20 3c 70 3e 0a 20 20 41 20 73  ary..  <p>.  A s
13960 69 6e 67 6c 65 20 66 75 6e 63 74 69 6f 6e 20 64  ingle function d
13970 65 63 6c 61 72 61 74 69 6f 6e 20 73 68 6f 75 6c  eclaration shoul
13980 64 20 63 6f 6e 74 61 69 6e 20 6e 6f 20 6d 6f 72  d contain no mor
13990 65 20 74 68 61 6e 20 6f 6e 65 20 6f 66 0a 20 20  e than one of.  
139a0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 3a 20 20  the following:  
139b0 5b 53 51 4c 49 54 45 5f 41 50 49 43 41 4c 4c 5d  [SQLITE_APICALL]
139c0 2c 20 5b 53 51 4c 49 54 45 5f 43 41 4c 4c 42 41  , [SQLITE_CALLBA
139d0 43 4b 5d 2c 20 5b 53 51 4c 49 54 45 5f 43 44 45  CK], [SQLITE_CDE
139e0 43 4c 5d 2c 0a 20 20 6f 72 20 5b 53 51 4c 49 54  CL],.  or [SQLIT
139f0 45 5f 53 59 53 43 41 4c 4c 5d 2e 0a 7d 0a 0a 43  E_SYSCALL]..}..C
13a00 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53  OMPILE_OPTION {S
13a10 51 4c 49 54 45 5f 43 44 45 43 4c 7d 20 7b 0a 20  QLITE_CDECL} {. 
13a20 20 54 68 69 73 20 6d 61 63 72 6f 20 73 70 65 63   This macro spec
13a30 69 66 69 65 73 20 74 68 65 20 63 61 6c 6c 69 6e  ifies the callin
13a40 67 20 63 6f 6e 76 65 6e 74 69 6f 6e 20 75 73 65  g convention use
13a50 64 20 62 79 20 76 61 72 61 72 67 73 20 69 6e 74  d by varargs int
13a60 65 72 66 61 63 65 0a 20 20 72 6f 75 74 69 6e 65  erface.  routine
13a70 73 20 69 6e 20 53 51 4c 69 74 65 2e 20 20 54 68  s in SQLite.  Th
13a80 69 73 20 6d 61 63 72 6f 20 69 73 20 6e 6f 72 6d  is macro is norm
13a90 61 6c 6c 79 20 64 65 66 69 6e 65 64 20 74 6f 20  ally defined to 
13aa0 62 65 20 6e 6f 74 68 69 6e 67 2c 0a 20 20 74 68  be nothing,.  th
13ab0 6f 75 67 68 20 6f 6e 20 57 69 6e 64 6f 77 73 20  ough on Windows 
13ac0 62 75 69 6c 64 73 20 69 74 20 63 61 6e 20 73 6f  builds it can so
13ad0 6d 65 74 69 6d 65 73 20 62 65 20 73 65 74 20 74  metimes be set t
13ae0 6f 20 22 5f 5f 63 64 65 63 6c 22 2e 20 20 54 68  o "__cdecl".  Th
13af0 69 73 0a 20 20 6d 61 63 72 6f 20 69 73 20 75 73  is.  macro is us
13b00 65 64 20 6f 6e 20 76 61 72 61 72 67 73 20 72 6f  ed on varargs ro
13b10 75 74 69 6e 65 73 20 61 6e 64 20 73 6f 20 63 61  utines and so ca
13b20 6e 6e 6f 74 20 62 65 20 73 65 74 20 74 6f 20 22  nnot be set to "
13b30 5f 5f 73 74 64 63 61 6c 6c 22 0a 20 20 73 69 6e  __stdcall".  sin
13b40 63 65 20 74 68 65 20 5f 5f 73 74 64 63 61 6c 6c  ce the __stdcall
13b50 20 63 61 6c 6c 69 6e 67 20 63 6f 6e 76 65 6e 74   calling convent
13b60 69 6f 6e 20 64 6f 65 73 20 6e 6f 74 20 73 75 70  ion does not sup
13b70 70 6f 72 74 20 76 61 72 61 72 67 73 20 66 75 6e  port varargs fun
13b80 63 74 69 6f 6e 73 2e 0a 20 20 3c 70 3e 0a 20 20  ctions..  <p>.  
13b90 41 20 73 69 6e 67 6c 65 20 66 75 6e 63 74 69 6f  A single functio
13ba0 6e 20 64 65 63 6c 61 72 61 74 69 6f 6e 20 73 68  n declaration sh
13bb0 6f 75 6c 64 20 63 6f 6e 74 61 69 6e 20 6e 6f 20  ould contain no 
13bc0 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 6f 66  more than one of
13bd0 0a 20 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  .  the following
13be0 3a 20 20 5b 53 51 4c 49 54 45 5f 41 50 49 43 41  :  [SQLITE_APICA
13bf0 4c 4c 5d 2c 20 5b 53 51 4c 49 54 45 5f 43 41 4c  LL], [SQLITE_CAL
13c00 4c 42 41 43 4b 5d 2c 20 5b 53 51 4c 49 54 45 5f  LBACK], [SQLITE_
13c10 43 44 45 43 4c 5d 2c 0a 20 20 6f 72 20 5b 53 51  CDECL],.  or [SQ
13c20 4c 49 54 45 5f 53 59 53 43 41 4c 4c 5d 2e 0a 7d  LITE_SYSCALL]..}
13c30 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e  ..COMPILE_OPTION
13c40 20 7b 53 51 4c 49 54 45 5f 53 59 53 43 41 4c 4c   {SQLITE_SYSCALL
13c50 7d 20 7b 0a 20 20 54 68 69 73 20 6d 61 63 72 6f  } {.  This macro
13c60 20 69 64 65 6e 74 69 66 69 65 73 20 74 68 65 20   identifies the 
13c70 63 61 6c 6c 69 6e 67 20 63 6f 6e 76 65 6e 74 69  calling conventi
13c80 6f 6e 20 75 73 65 64 20 62 79 20 6f 70 65 72 61  on used by opera
13c90 74 69 6e 67 20 73 79 73 74 65 6d 0a 20 20 69 6e  ting system.  in
13ca0 74 65 72 66 61 63 65 73 20 66 6f 72 20 74 61 72  terfaces for tar
13cb0 67 65 74 20 74 68 65 20 70 6c 61 74 66 6f 72 6d  get the platform
13cc0 20 66 6f 72 20 61 6e 20 53 51 4c 69 74 65 20 62   for an SQLite b
13cd0 75 69 6c 64 2e 0a 20 20 54 68 69 73 20 6d 61 63  uild..  This mac
13ce0 72 6f 20 69 73 20 6e 6f 72 6d 61 6c 6c 79 20 64  ro is normally d
13cf0 65 66 69 6e 65 64 20 74 6f 20 62 65 20 6e 6f 74  efined to be not
13d00 68 69 6e 67 2c 20 74 68 6f 75 67 68 20 6f 6e 20  hing, though on 
13d10 57 69 6e 64 6f 77 73 0a 20 20 62 75 69 6c 64 73  Windows.  builds
13d20 20 69 74 20 63 61 6e 20 73 6f 6d 65 74 69 6d 65   it can sometime
13d30 73 20 62 65 20 73 65 74 20 74 6f 20 22 5f 5f 73  s be set to "__s
13d40 74 64 63 61 6c 6c 22 2e 0a 20 20 3c 70 3e 0a 20  tdcall"..  <p>. 
13d50 20 41 20 73 69 6e 67 6c 65 20 66 75 6e 63 74 69   A single functi
13d60 6f 6e 20 64 65 63 6c 61 72 61 74 69 6f 6e 20 73  on declaration s
13d70 68 6f 75 6c 64 20 63 6f 6e 74 61 69 6e 20 6e 6f  hould contain no
13d80 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 6f   more than one o
13d90 66 0a 20 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  f.  the followin
13da0 67 3a 20 20 5b 53 51 4c 49 54 45 5f 41 50 49 43  g:  [SQLITE_APIC
13db0 41 4c 4c 5d 2c 20 5b 53 51 4c 49 54 45 5f 43 41  ALL], [SQLITE_CA
13dc0 4c 4c 42 41 43 4b 5d 2c 20 5b 53 51 4c 49 54 45  LLBACK], [SQLITE
13dd0 5f 43 44 45 43 4c 5d 2c 0a 20 20 6f 72 20 5b 53  _CDECL],.  or [S
13de0 51 4c 49 54 45 5f 53 59 53 43 41 4c 4c 5d 2e 0a  QLITE_SYSCALL]..
13df0 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f  }..COMPILE_OPTIO
13e00 4e 20 7b 53 51 4c 49 54 45 5f 54 43 4c 41 50 49  N {SQLITE_TCLAPI
13e10 7d 20 7b 0a 20 20 54 68 69 73 20 6d 61 63 72 6f  } {.  This macro
13e20 20 73 70 65 63 69 66 69 65 73 20 74 68 65 20 63   specifies the c
13e30 61 6c 6c 69 6e 67 20 63 6f 6e 76 65 6e 74 69 6f  alling conventio
13e40 6e 20 75 73 65 64 20 62 79 20 74 68 65 20 0a 20  n used by the . 
13e50 20 5b 68 74 74 70 3a 2f 2f 77 77 77 2e 74 63 6c   [http://www.tcl
13e60 2e 74 6b 20 7c 20 54 43 4c 5d 20 6c 69 62 72 61  .tk | TCL] libra
13e70 72 79 20 69 6e 74 65 72 66 61 63 65 20 72 6f 75  ry interface rou
13e80 74 69 6e 65 73 2e 0a 20 20 54 68 69 73 20 6d 61  tines..  This ma
13e90 63 72 6f 20 69 73 20 6e 6f 74 20 75 73 65 64 20  cro is not used 
13ea0 62 79 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f  by the SQLite co
13eb0 72 65 2c 20 62 75 74 20 6f 6e 6c 79 20 62 79 20  re, but only by 
13ec0 74 68 65 20 5b 54 43 4c 20 49 6e 74 65 72 66 61  the [TCL Interfa
13ed0 63 65 5d 0a 20 20 61 6e 64 20 5b 54 43 4c 20 74  ce].  and [TCL t
13ee0 65 73 74 20 73 75 69 74 65 5d 2e 0a 20 20 54 68  est suite]..  Th
13ef0 69 73 20 6d 61 63 72 6f 20 69 73 20 6e 6f 72 6d  is macro is norm
13f00 61 6c 6c 79 20 64 65 66 69 6e 65 64 20 74 6f 20  ally defined to 
13f10 62 65 20 6e 6f 74 68 69 6e 67 2c 0a 20 20 74 68  be nothing,.  th
13f20 6f 75 67 68 20 6f 6e 20 57 69 6e 64 6f 77 73 20  ough on Windows 
13f30 62 75 69 6c 64 73 20 69 74 20 63 61 6e 20 73 6f  builds it can so
13f40 6d 65 74 69 6d 65 73 20 62 65 20 73 65 74 20 74  metimes be set t
13f50 6f 20 22 5f 5f 63 64 65 63 6c 22 2e 20 20 54 68  o "__cdecl".  Th
13f60 69 73 0a 20 20 6d 61 63 72 6f 20 69 73 20 75 73  is.  macro is us
13f70 65 64 20 6f 6e 20 54 43 4c 20 6c 69 62 72 61 72  ed on TCL librar
13f80 79 20 69 6e 74 65 72 66 61 63 65 20 72 6f 75 74  y interface rout
13f90 69 6e 65 73 20 77 68 69 63 68 20 61 72 65 20 61  ines which are a
13fa0 6c 77 61 79 73 20 63 6f 6d 70 69 6c 65 64 0a 20  lways compiled. 
13fb0 20 61 73 20 5f 5f 63 64 65 63 6c 2c 20 65 76 65   as __cdecl, eve
13fc0 6e 20 6f 6e 20 70 6c 61 74 66 6f 72 6d 73 20 74  n on platforms t
13fd0 68 61 74 20 70 72 65 66 65 72 20 74 6f 20 75 73  hat prefer to us
13fe0 65 20 5f 5f 73 74 64 63 61 6c 6c 2c 20 73 6f 20  e __stdcall, so 
13ff0 74 68 69 73 0a 20 20 6d 61 63 72 6f 20 73 68 6f  this.  macro sho
14000 75 6c 64 20 6e 6f 74 20 62 65 20 73 65 74 20 74  uld not be set t
14010 6f 20 5f 5f 73 74 64 63 61 6c 6c 20 75 6e 6c 65  o __stdcall unle
14020 73 73 20 74 68 65 20 70 6c 61 74 66 6f 72 6d 20  ss the platform 
14030 61 73 20 61 20 63 75 73 74 6f 6d 0a 20 20 54 43  as a custom.  TC
14040 4c 20 6c 69 62 72 61 72 79 20 62 75 69 6c 64 20  L library build 
14050 74 68 61 74 20 73 75 70 70 6f 72 74 73 20 5f 5f  that supports __
14060 73 74 64 63 61 6c 6c 2e 0a 20 20 3c 70 3e 0a 20  stdcall..  <p>. 
14070 20 54 68 69 73 20 6d 61 63 72 6f 20 6d 61 79 20   This macro may 
14080 6e 6f 74 20 62 65 20 75 73 65 64 20 69 6e 20 63  not be used in c
14090 6f 6d 62 69 6e 61 74 69 6f 6e 20 77 69 74 68 20  ombination with 
140a0 61 6e 79 20 6f 66 20 5b 53 51 4c 49 54 45 5f 41  any of [SQLITE_A
140b0 50 49 43 41 4c 4c 5d 2c 0a 20 20 5b 53 51 4c 49  PICALL],.  [SQLI
140c0 54 45 5f 43 41 4c 4c 42 41 43 4b 5d 2c 20 5b 53  TE_CALLBACK], [S
140d0 51 4c 49 54 45 5f 43 44 45 43 4c 5d 2c 20 6f 72  QLITE_CDECL], or
140e0 20 5b 53 51 4c 49 54 45 5f 53 59 53 43 41 4c 4c   [SQLITE_SYSCALL
140f0 5d 2e 0a 7d 0a 0a 0a 3c 2f 74 63 6c 3e 0a        ]..}...</tcl>.