Documentation Source Text

Hex Artifact Content
Login

Artifact 7bda10301b8a5305b5ff4490a8012ff1ffbce6e6:


0000: 3c 74 69 74 6c 65 3e 43 6f 6d 70 69 6c 61 74 69  <title>Compilati
0010: 6f 6e 20 4f 70 74 69 6f 6e 73 20 46 6f 72 20 53  on Options For S
0020: 51 4c 69 74 65 3c 2f 74 69 74 6c 65 3e 0a 3c 74  QLite</title>.<t
0030: 63 6c 3e 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b  cl>hd_keywords {
0040: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74  compile-time opt
0050: 69 6f 6e 73 7d 3c 2f 74 63 6c 3e 0a 0a 3c 68 31  ions}</tcl>..<h1
0060: 3e 31 2e 30 20 43 6f 6d 70 69 6c 61 74 69 6f 6e  >1.0 Compilation
0070: 20 4f 70 74 69 6f 6e 73 20 46 6f 72 20 53 51 4c   Options For SQL
0080: 69 74 65 3c 2f 68 31 3e 0a 0a 3c 70 3e 0a 46 6f  ite</h1>..<p>.Fo
0090: 72 20 6d 6f 73 74 20 70 75 72 70 6f 73 65 73 2c  r most purposes,
00a0: 20 53 51 4c 69 74 65 20 63 61 6e 20 62 65 20 62   SQLite can be b
00b0: 75 69 6c 74 20 6a 75 73 74 20 66 69 6e 65 20 75  uilt just fine u
00c0: 73 69 6e 67 20 74 68 65 20 64 65 66 61 75 6c 74  sing the default
00d0: 0a 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 6f 70 74  .compilation opt
00e0: 69 6f 6e 73 2e 20 48 6f 77 65 76 65 72 2c 20 69  ions. However, i
00f0: 66 20 72 65 71 75 69 72 65 64 2c 20 74 68 65 20  f required, the 
0100: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74  compile-time opt
0110: 69 6f 6e 73 0a 64 6f 63 75 6d 65 6e 74 65 64 20  ions.documented 
0120: 62 65 6c 6f 77 20 63 61 6e 20 62 65 20 75 73 65  below can be use
0130: 64 20 74 6f 20 0a 3c 61 20 68 72 65 66 3d 22 23  d to .<a href="#
0140: 6f 6d 69 74 66 65 61 74 75 72 65 73 22 3e 6f 6d  omitfeatures">om
0150: 69 74 20 53 51 4c 69 74 65 20 66 65 61 74 75 72  it SQLite featur
0160: 65 73 3c 2f 61 3e 20 28 72 65 73 75 6c 74 69 6e  es</a> (resultin
0170: 67 20 69 6e 0a 61 20 5b 72 65 6c 66 6f 6f 74 70  g in.a [relfootp
0180: 72 69 6e 74 20 7c 20 73 6d 61 6c 6c 65 72 20 63  rint | smaller c
0190: 6f 6d 70 69 6c 65 64 20 6c 69 62 72 61 72 79 20  ompiled library 
01a0: 73 69 7a 65 5d 29 20 6f 72 20 74 6f 20 63 68 61  size]) or to cha
01b0: 6e 67 65 20 74 68 65 0a 3c 61 20 68 72 65 66 3d  nge the.<a href=
01c0: 22 23 64 65 66 61 75 6c 74 73 22 3e 64 65 66 61  "#defaults">defa
01d0: 75 6c 74 20 76 61 6c 75 65 73 3c 2f 61 3e 20 6f  ult values</a> o
01e0: 66 20 73 6f 6d 65 20 70 61 72 61 6d 65 74 65 72  f some parameter
01f0: 73 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 45 76 65  s..</p>..<p>.Eve
0200: 72 79 20 65 66 66 6f 72 74 20 68 61 73 20 62 65  ry effort has be
0210: 65 6e 20 6d 61 64 65 20 74 6f 20 65 6e 73 75 72  en made to ensur
0220: 65 20 74 68 61 74 20 74 68 65 20 76 61 72 69 6f  e that the vario
0230: 75 73 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 73 0a  us combinations.
0240: 6f 66 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 6f  of compilation o
0250: 70 74 69 6f 6e 73 20 77 6f 72 6b 20 68 61 72 6d  ptions work harm
0260: 6f 6e 69 6f 75 73 6c 79 20 61 6e 64 20 70 72 6f  oniously and pro
0270: 64 75 63 65 20 61 20 77 6f 72 6b 69 6e 67 20 6c  duce a working l
0280: 69 62 72 61 72 79 2e 0a 4e 65 76 65 72 74 68 65  ibrary..Neverthe
0290: 6c 65 73 73 2c 20 69 74 20 69 73 20 73 74 72 6f  less, it is stro
02a0: 6e 67 6c 79 20 72 65 63 6f 6d 6d 65 6e 64 65 64  ngly recommended
02b0: 20 74 68 61 74 20 74 68 65 20 53 51 4c 69 74 65   that the SQLite
02c0: 20 74 65 73 74 2d 73 75 69 74 65 0a 62 65 20 65   test-suite.be e
02d0: 78 65 63 75 74 65 64 20 74 6f 20 63 68 65 63 6b  xecuted to check
02e0: 20 66 6f 72 20 65 72 72 6f 72 73 20 62 65 66 6f   for errors befo
02f0: 72 65 20 75 73 69 6e 67 20 61 6e 20 53 51 4c 69  re using an SQLi
0300: 74 65 20 6c 69 62 72 61 72 79 20 62 75 69 6c 74  te library built
0310: 0a 77 69 74 68 20 6e 6f 6e 2d 73 74 61 6e 64 61  .with non-standa
0320: 72 64 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 6f  rd compilation o
0330: 70 74 69 6f 6e 73 2e 0a 3c 2f 70 3e 0a 3c 61 20  ptions..</p>.<a 
0340: 6e 61 6d 65 3d 22 64 65 66 61 75 6c 74 73 22 3e  name="defaults">
0350: 3c 2f 61 3e 0a 3c 68 32 3e 31 2e 31 20 4f 70 74  </a>.<h2>1.1 Opt
0360: 69 6f 6e 73 20 54 6f 20 53 65 74 20 44 65 66 61  ions To Set Defa
0370: 75 6c 74 20 50 61 72 61 6d 65 74 65 72 20 56 61  ult Parameter Va
0380: 6c 75 65 73 3c 2f 68 32 3e 0a 0a 3c 74 63 6c 3e  lues</h2>..<tcl>
0390: 0a 70 72 6f 63 20 43 4f 4d 50 49 4c 45 5f 4f 50  .proc COMPILE_OP
03a0: 54 49 4f 4e 20 7b 6e 61 6d 65 20 74 65 78 74 7d  TION {name text}
03b0: 20 7b 0a 20 20 69 66 20 7b 5b 72 65 67 65 78 70   {.  if {[regexp
03c0: 20 7b 53 51 4c 49 54 45 5f 28 5b 41 2d 5a 30 2d   {SQLITE_([A-Z0-
03d0: 39 5f 5d 2b 29 7d 20 24 6e 61 6d 65 20 61 6c 6c  9_]+)} $name all
03e0: 20 6c 61 62 65 6c 5d 7d 20 7b 0a 20 20 20 20 68   label]} {.    h
03f0: 64 5f 66 72 61 67 6d 65 6e 74 20 5b 73 74 72 69  d_fragment [stri
0400: 6e 67 20 74 6f 6c 6f 77 65 72 20 24 6c 61 62 65  ng tolower $labe
0410: 6c 5d 0a 20 20 20 20 68 64 5f 6b 65 79 77 6f 72  l].    hd_keywor
0420: 64 73 20 24 61 6c 6c 0a 20 20 7d 0a 20 20 69 66  ds $all.  }.  if
0430: 20 7b 5b 72 65 67 65 78 70 20 7b 5e 59 59 28 5b   {[regexp {^YY([
0440: 41 2d 5a 30 2d 39 5f 5d 2b 29 7d 20 24 6e 61 6d  A-Z0-9_]+)} $nam
0450: 65 20 61 6c 6c 20 6c 61 62 65 6c 5d 7d 20 7b 0a  e all label]} {.
0460: 20 20 20 20 68 64 5f 66 72 61 67 6d 65 6e 74 20      hd_fragment 
0470: 5b 73 74 72 69 6e 67 20 74 6f 6c 6f 77 65 72 20  [string tolower 
0480: 24 61 6c 6c 5d 0a 20 20 20 20 68 64 5f 6b 65 79  $all].    hd_key
0490: 77 6f 72 64 73 20 24 61 6c 6c 0a 20 20 7d 0a 20  words $all.  }. 
04a0: 20 68 64 5f 70 75 74 73 20 3c 70 3e 3c 62 3e 24   hd_puts <p><b>$
04b0: 6e 61 6d 65 3c 2f 62 3e 3c 2f 70 3e 0a 20 20 72  name</b></p>.  r
04c0: 65 67 73 75 62 20 2d 61 6c 6c 20 22 5c 6e 5c 5c  egsub -all "\n\\
04d0: 73 2a 5c 6e 22 20 24 74 65 78 74 20 22 3c 2f 70  s*\n" $text "</p
04e0: 3e 5c 6e 5c 6e 3c 70 3e 22 20 74 65 78 74 0a 20  >\n\n<p>" text. 
04f0: 20 68 64 5f 72 65 73 6f 6c 76 65 20 3c 62 6c 6f   hd_resolve <blo
0500: 63 6b 71 75 6f 74 65 3e 3c 70 3e 24 74 65 78 74  ckquote><p>$text
0510: 3c 2f 70 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  </p></blockquote
0520: 3e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54  >.}..COMPILE_OPT
0530: 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 44 45 46 41  ION {SQLITE_DEFA
0540: 55 4c 54 5f 41 55 54 4f 56 41 43 55 55 4d 3d 3c  ULT_AUTOVACUUM=<
0550: 69 3e 26 6c 74 3b 30 20 6f 72 20 31 20 6f 72 20  i>&lt;0 or 1 or 
0560: 32 26 67 74 3b 3c 2f 69 3e 7d 20 7b 0a 20 20 54  2&gt;</i>} {.  T
0570: 68 69 73 20 6d 61 63 72 6f 20 64 65 74 65 72 6d  his macro determ
0580: 69 6e 65 73 20 69 66 20 53 51 4c 69 74 65 20 63  ines if SQLite c
0590: 72 65 61 74 65 73 20 64 61 74 61 62 61 73 65 73  reates databases
05a0: 20 77 69 74 68 20 74 68 65 20 0a 20 20 5b 61 75   with the .  [au
05b0: 74 6f 5f 76 61 63 75 75 6d 5d 20 66 6c 61 67 20  to_vacuum] flag 
05c0: 73 65 74 20 62 79 20 64 65 66 61 75 6c 74 20 74  set by default t
05d0: 6f 20 4f 46 46 20 28 30 29 2c 20 46 55 4c 4c 20  o OFF (0), FULL 
05e0: 28 31 29 2c 20 6f 72 0a 20 20 49 4e 43 52 45 4d  (1), or.  INCREM
05f0: 45 4e 54 41 4c 20 28 32 29 2e 20 54 68 65 20 64  ENTAL (2). The d
0600: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 69 73 20  efault value is 
0610: 30 20 6d 65 61 6e 69 6e 67 20 74 68 61 74 20 64  0 meaning that d
0620: 61 74 61 62 61 73 65 73 0a 20 20 61 72 65 20 63  atabases.  are c
0630: 72 65 61 74 65 64 20 77 69 74 68 20 61 75 74 6f  reated with auto
0640: 2d 76 61 63 75 75 6d 20 74 75 72 6e 65 64 20 6f  -vacuum turned o
0650: 66 66 2e 0a 20 20 49 6e 20 61 6e 79 20 63 61 73  ff..  In any cas
0660: 65 20 74 68 65 20 63 6f 6d 70 69 6c 65 2d 74 69  e the compile-ti
0670: 6d 65 20 64 65 66 61 75 6c 74 20 6d 61 79 20 62  me default may b
0680: 65 20 6f 76 65 72 72 69 64 64 65 6e 20 62 79 20  e overridden by 
0690: 74 68 65 20 0a 20 20 5b 50 52 41 47 4d 41 20 61  the .  [PRAGMA a
06a0: 75 74 6f 5f 76 61 63 75 75 6d 5d 20 63 6f 6d 6d  uto_vacuum] comm
06b0: 61 6e 64 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f  and..}..COMPILE_
06c0: 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 44  OPTION {SQLITE_D
06d0: 45 46 41 55 4c 54 5f 43 41 43 48 45 5f 53 49 5a  EFAULT_CACHE_SIZ
06e0: 45 3d 3c 69 3e 26 6c 74 3b 70 61 67 65 73 26 67  E=<i>&lt;pages&g
06f0: 74 3b 3c 2f 69 3e 7d 20 7b 0a 20 20 54 68 69 73  t;</i>} {.  This
0700: 20 6d 61 63 72 6f 20 73 65 74 73 20 74 68 65 20   macro sets the 
0710: 64 65 66 61 75 6c 74 20 73 69 7a 65 20 6f 66 20  default size of 
0720: 74 68 65 20 70 61 67 65 2d 63 61 63 68 65 20 66  the page-cache f
0730: 6f 72 20 65 61 63 68 20 61 74 74 61 63 68 65 64  or each attached
0740: 0a 20 20 64 61 74 61 62 61 73 65 2c 20 69 6e 20  .  database, in 
0750: 70 61 67 65 73 2e 20 54 68 69 73 20 63 61 6e 20  pages. This can 
0760: 62 65 20 6f 76 65 72 72 69 64 64 65 6e 20 62 79  be overridden by
0770: 20 74 68 65 20 0a 20 20 5b 50 52 41 47 4d 41 20   the .  [PRAGMA 
0780: 63 61 63 68 65 5f 73 69 7a 65 5d 20 63 6f 6d 6d  cache_size] comm
0790: 61 6e 64 2e 20 54 68 65 20 64 65 66 61 75 6c 74  and. The default
07a0: 20 76 61 6c 75 65 20 69 73 20 32 30 30 30 2e 0a   value is 2000..
07b0: 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f  }..COMPILE_OPTIO
07c0: 4e 20 7b 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  N {SQLITE_DEFAUL
07d0: 54 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 3d 3c 69  T_FILE_FORMAT=<i
07e0: 3e 26 6c 74 3b 31 20 6f 72 20 34 26 67 74 3b 3c  >&lt;1 or 4&gt;<
07f0: 2f 69 3e 7d 20 7b 0a 20 20 54 68 65 20 64 65 66  /i>} {.  The def
0800: 61 75 6c 74 20 5b 73 63 68 65 6d 61 20 66 6f 72  ault [schema for
0810: 6d 61 74 20 6e 75 6d 62 65 72 5d 20 75 73 65 64  mat number] used
0820: 20 62 79 20 53 51 4c 69 74 65 20 77 68 65 6e 20   by SQLite when 
0830: 63 72 65 61 74 69 6e 67 0a 20 20 6e 65 77 20 64  creating.  new d
0840: 61 74 61 62 61 73 65 20 66 69 6c 65 73 20 69 73  atabase files is
0850: 20 73 65 74 20 62 79 20 74 68 69 73 20 6d 61 63   set by this mac
0860: 72 6f 2e 20 20 54 68 65 20 73 63 68 65 6d 61 20  ro.  The schema 
0870: 66 6f 72 6d 61 74 73 20 61 72 65 20 61 6c 6c 0a  formats are all.
0880: 20 20 76 65 72 79 20 73 69 6d 69 6c 61 72 2e 20    very similar. 
0890: 20 54 68 65 20 64 69 66 66 65 72 65 6e 63 65 20   The difference 
08a0: 62 65 74 77 65 65 6e 20 66 6f 72 6d 61 74 73 20  between formats 
08b0: 31 20 61 6e 64 20 34 20 69 73 20 74 68 61 74 20  1 and 4 is that 
08c0: 66 6f 72 6d 61 74 0a 20 20 34 20 75 6e 64 65 72  format.  4 under
08d0: 73 74 61 6e 64 73 20 5b 64 65 73 63 65 6e 64 69  stands [descendi
08e0: 6e 67 20 69 6e 64 69 63 65 73 5d 20 61 6e 64 20  ng indices] and 
08f0: 68 61 73 20 61 20 74 69 67 68 74 65 72 20 65 6e  has a tighter en
0900: 63 6f 64 69 6e 67 20 66 6f 72 0a 20 20 62 6f 6f  coding for.  boo
0910: 6c 65 61 6e 20 76 61 6c 75 65 73 2e 0a 0a 20 20  lean values...  
0920: 41 6c 6c 20 76 65 72 73 69 6f 6e 73 20 6f 66 20  All versions of 
0930: 53 51 4c 69 74 65 20 73 69 6e 63 65 20 33 2e 33  SQLite since 3.3
0940: 2e 30 20 28 32 30 30 36 2d 30 31 2d 31 30 29 0a  .0 (2006-01-10).
0950: 20 20 63 61 6e 20 72 65 61 64 20 61 6e 64 20 77    can read and w
0960: 72 69 74 65 20 61 6e 79 20 73 63 68 65 6d 61 20  rite any schema 
0970: 66 6f 72 6d 61 74 0a 20 20 62 65 74 77 65 65 6e  format.  between
0980: 20 31 20 61 6e 64 20 34 2e 20 20 42 75 74 20 6f   1 and 4.  But o
0990: 6c 64 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66  lder versions of
09a0: 20 53 51 4c 69 74 65 20 6d 69 67 68 74 20 6e 6f   SQLite might no
09b0: 74 20 62 65 20 61 62 6c 65 20 74 6f 0a 20 20 72  t be able to.  r
09c0: 65 61 64 20 66 6f 72 6d 61 74 73 20 67 72 65 61  ead formats grea
09d0: 74 65 72 20 74 68 61 6e 20 31 2e 20 20 53 6f 20  ter than 1.  So 
09e0: 74 68 61 74 20 6f 6c 64 65 72 20 76 65 72 73 69  that older versi
09f0: 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 77 69  ons of SQLite wi
0a00: 6c 6c 0a 20 20 62 65 20 61 62 6c 65 20 74 6f 20  ll.  be able to 
0a10: 72 65 61 64 20 61 6e 64 20 77 72 69 74 65 20 64  read and write d
0a20: 61 74 61 62 61 73 65 20 66 69 6c 65 73 20 63 72  atabase files cr
0a30: 65 61 74 65 64 20 62 79 20 6e 65 77 65 72 20 76  eated by newer v
0a40: 65 72 73 69 6f 6e 73 0a 20 20 6f 66 20 53 51 4c  ersions.  of SQL
0a50: 69 74 65 2c 20 74 68 65 20 64 65 66 61 75 6c 74  ite, the default
0a60: 20 73 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 77   schema format w
0a70: 61 73 20 73 65 74 20 74 6f 20 31 20 66 6f 72 20  as set to 1 for 
0a80: 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 73 0a  SQLite versions.
0a90: 20 20 74 68 72 6f 75 67 68 20 33 2e 37 2e 39 20    through 3.7.9 
0aa0: 28 32 30 31 31 2d 31 31 2d 30 31 29 2e 20 20 42  (2011-11-01).  B
0ab0: 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 76 65  eginning with ve
0ac0: 72 73 69 6f 6e 20 33 2e 37 2e 31 30 2c 20 74 68  rsion 3.7.10, th
0ad0: 65 20 64 65 66 61 75 6c 74 0a 20 20 73 63 68 65  e default.  sche
0ae0: 6d 61 20 66 6f 72 6d 61 74 20 69 73 20 34 2e 0a  ma format is 4..
0af0: 0a 20 20 54 68 65 20 73 63 68 65 6d 61 20 66 6f  .  The schema fo
0b00: 72 6d 61 74 20 6e 75 6d 62 65 72 20 66 6f 72 20  rmat number for 
0b10: 61 20 6e 65 77 20 64 61 74 61 62 61 73 65 20 63  a new database c
0b20: 61 6e 20 62 65 20 73 65 74 20 61 74 20 72 75 6e  an be set at run
0b30: 74 69 6d 65 20 75 73 69 6e 67 0a 20 20 74 68 65  time using.  the
0b40: 20 5b 50 52 41 47 4d 41 20 6c 65 67 61 63 79 5f   [PRAGMA legacy_
0b50: 66 69 6c 65 5f 66 6f 72 6d 61 74 5d 20 63 6f 6d  file_format] com
0b60: 6d 61 6e 64 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45  mand..}..COMPILE
0b70: 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f  _OPTION {SQLITE_
0b80: 44 45 46 41 55 4c 54 5f 46 49 4c 45 5f 50 45 52  DEFAULT_FILE_PER
0b90: 4d 49 53 53 49 4f 4e 53 3d 3c 69 3e 4e 3c 2f 69  MISSIONS=<i>N</i
0ba0: 3e 7d 20 7b 0a 20 20 54 68 65 20 64 65 66 61 75  >} {.  The defau
0bb0: 6c 74 20 6e 75 6d 65 72 69 63 20 66 69 6c 65 20  lt numeric file 
0bc0: 70 65 72 6d 69 73 73 69 6f 6e 73 20 66 6f 72 20  permissions for 
0bd0: 6e 65 77 6c 79 20 63 72 65 61 74 65 64 20 64 61  newly created da
0be0: 74 61 62 61 73 65 20 66 69 6c 65 73 0a 20 20 75  tabase files.  u
0bf0: 6e 64 65 72 20 75 6e 69 78 2e 20 20 49 66 20 6e  nder unix.  If n
0c00: 6f 74 20 73 70 65 63 69 66 69 65 64 2c 20 74 68  ot specified, th
0c10: 65 20 64 65 66 61 75 6c 74 20 69 73 20 30 36 34  e default is 064
0c20: 34 20 77 68 69 63 68 20 6d 65 61 6e 73 20 74 68  4 which means th
0c30: 61 74 0a 20 20 74 68 65 20 66 69 6c 65 73 20 69  at.  the files i
0c40: 73 20 67 6c 6f 62 61 6c 6c 79 20 72 65 61 64 61  s globally reada
0c50: 62 6c 65 20 62 75 74 20 6f 6e 6c 79 20 77 72 69  ble but only wri
0c60: 74 61 62 6c 65 20 62 79 20 74 68 65 20 63 72 65  table by the cre
0c70: 61 74 6f 72 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45  ator..}..COMPILE
0c80: 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f  _OPTION {SQLITE_
0c90: 44 45 46 41 55 4c 54 5f 46 4f 52 45 49 47 4e 5f  DEFAULT_FOREIGN_
0ca0: 4b 45 59 53 3d 3c 69 3e 26 6c 74 3b 30 20 6f 72  KEYS=<i>&lt;0 or
0cb0: 20 31 26 67 74 3b 3c 2f 69 3e 7d 20 7b 0a 20 20   1&gt;</i>} {.  
0cc0: 54 68 69 73 20 6d 61 63 72 6f 20 64 65 74 65 72  This macro deter
0cd0: 6d 69 6e 65 73 20 77 68 65 74 68 65 72 20 65 6e  mines whether en
0ce0: 66 6f 72 63 65 6d 65 6e 74 20 6f 66 20 0a 20 20  forcement of .  
0cf0: 5b 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e  [foreign key con
0d00: 73 74 72 61 69 6e 74 73 5d 20 69 73 20 65 6e 61  straints] is ena
0d10: 62 6c 65 64 20 6f 72 20 64 69 73 61 62 6c 65 64  bled or disabled
0d20: 20 62 79 20 64 65 66 61 75 6c 74 20 66 6f 72 0a   by default for.
0d30: 20 20 6e 65 77 20 64 61 74 61 62 61 73 65 20 63    new database c
0d40: 6f 6e 6e 65 63 74 69 6f 6e 73 2e 20 20 45 61 63  onnections.  Eac
0d50: 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  h database conne
0d60: 63 74 69 6f 6e 20 63 61 6e 20 61 6c 77 61 79 73  ction can always
0d70: 20 74 75 72 6e 0a 20 20 65 6e 66 6f 72 63 65 6d   turn.  enforcem
0d80: 65 6e 74 20 6f 66 20 66 6f 72 65 69 67 6e 20 6b  ent of foreign k
0d90: 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 6f  ey constraints o
0da0: 6e 20 61 6e 64 20 6f 66 66 20 61 6e 64 20 72 75  n and off and ru
0db0: 6e 2d 74 69 6d 65 20 75 73 69 6e 67 0a 20 20 74  n-time using.  t
0dc0: 68 65 20 5b 66 6f 72 65 69 67 6e 5f 6b 65 79 73  he [foreign_keys
0dd0: 20 70 72 61 67 6d 61 5d 2e 20 20 45 6e 66 6f 72   pragma].  Enfor
0de0: 63 65 6d 65 6e 74 20 6f 66 20 66 6f 72 65 69 67  cement of foreig
0df0: 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74  n key constraint
0e00: 73 0a 20 20 69 73 20 6e 6f 72 6d 61 6c 6c 79 20  s.  is normally 
0e10: 6f 66 66 20 62 79 20 64 65 66 61 75 6c 74 2c 20  off by default, 
0e20: 62 75 74 20 69 66 20 74 68 69 73 20 63 6f 6d 70  but if this comp
0e30: 69 6c 65 2d 74 69 6d 65 20 70 61 72 61 6d 65 74  ile-time paramet
0e40: 65 72 20 69 73 0a 20 20 73 65 74 20 74 6f 20 31  er is.  set to 1
0e50: 2c 20 65 6e 66 6f 72 63 65 6d 65 6e 74 20 6f 66  , enforcement of
0e60: 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e   foreign key con
0e70: 73 74 72 61 69 6e 74 73 20 77 69 6c 6c 20 62 65  straints will be
0e80: 20 6f 6e 20 62 79 20 64 65 66 61 75 6c 74 2e 0a   on by default..
0e90: 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f  }..COMPILE_OPTIO
0ea0: 4e 20 7b 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  N {SQLITE_DEFAUL
0eb0: 54 5f 4a 4f 55 52 4e 41 4c 5f 53 49 5a 45 5f 4c  T_JOURNAL_SIZE_L
0ec0: 49 4d 49 54 3d 3c 69 3e 26 6c 74 3b 62 79 74 65  IMIT=<i>&lt;byte
0ed0: 73 26 67 74 3b 3c 2f 69 3e 7d 20 7b 0a 20 20 54  s&gt;</i>} {.  T
0ee0: 68 69 73 20 6f 70 74 69 6f 6e 20 73 65 74 73 20  his option sets 
0ef0: 74 68 65 20 73 69 7a 65 20 6c 69 6d 69 74 20 6f  the size limit o
0f00: 6e 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e  n rollback journ
0f10: 61 6c 20 66 69 6c 65 73 20 69 6e 0a 20 20 5b 6a  al files in.  [j
0f20: 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20 70 72 61 67  ournal_mode prag
0f30: 6d 61 20 7c 20 70 65 72 73 69 73 74 65 6e 74 20  ma | persistent 
0f40: 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 5d 2e 20 20  journal mode].  
0f50: 57 68 65 6e 20 74 68 69 73 20 0a 20 20 63 6f 6d  When this .  com
0f60: 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
0f70: 20 69 73 20 6f 6d 69 74 74 65 64 20 74 68 65 72   is omitted ther
0f80: 65 20 69 73 20 6e 6f 20 75 70 70 65 72 20 62 6f  e is no upper bo
0f90: 75 6e 64 20 6f 6e 20 74 68 65 0a 20 20 73 69 7a  und on the.  siz
0fa0: 65 20 6f 66 20 74 68 65 20 72 6f 6c 6c 62 61 63  e of the rollbac
0fb0: 6b 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 2e 20  k journal file. 
0fc0: 20 54 68 65 20 6a 6f 75 72 6e 61 6c 20 66 69 6c   The journal fil
0fd0: 65 20 73 69 7a 65 20 6c 69 6d 69 74 0a 20 20 63  e size limit.  c
0fe0: 61 6e 20 62 65 20 63 68 61 6e 67 65 64 20 61 74  an be changed at
0ff0: 20 72 75 6e 2d 74 69 6d 65 20 75 73 69 6e 67 20   run-time using 
1000: 74 68 65 20 5b 6a 6f 75 72 6e 61 6c 5f 73 69 7a  the [journal_siz
1010: 65 5f 6c 69 6d 69 74 20 70 72 61 67 6d 61 5d 2e  e_limit pragma].
1020: 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49  .}..COMPILE_OPTI
1030: 4f 4e 20 7b 53 51 4c 49 54 45 5f 44 45 46 41 55  ON {SQLITE_DEFAU
1040: 4c 54 5f 4c 4f 43 4b 49 4e 47 5f 4d 4f 44 45 3d  LT_LOCKING_MODE=
1050: 3c 69 3e 26 6c 74 3b 31 20 6f 72 20 30 26 67 74  <i>&lt;1 or 0&gt
1060: 3b 3c 2f 69 3e 7d 20 7b 0a 20 20 49 66 20 73 65  ;</i>} {.  If se
1070: 74 20 74 6f 20 31 2c 20 74 68 65 6e 20 74 68 65  t to 1, then the
1080: 20 64 65 66 61 75 6c 74 20 5b 6c 6f 63 6b 69 6e   default [lockin
1090: 67 5f 6d 6f 64 65 5d 20 69 73 20 73 65 74 20 74  g_mode] is set t
10a0: 6f 20 45 58 43 4c 55 53 49 56 45 2e 0a 20 20 49  o EXCLUSIVE..  I
10b0: 66 20 6f 6d 69 74 74 65 64 20 6f 72 20 73 65 74  f omitted or set
10c0: 20 74 6f 20 30 20 74 68 65 6e 20 74 68 65 20 64   to 0 then the d
10d0: 65 66 61 75 6c 74 20 5b 6c 6f 63 6b 69 6e 67 5f  efault [locking_
10e0: 6d 6f 64 65 5d 20 69 73 20 4e 4f 52 4d 41 4c 2e  mode] is NORMAL.
10f0: 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49  .}..COMPILE_OPTI
1100: 4f 4e 20 7b 53 51 4c 49 54 45 5f 44 45 46 41 55  ON {SQLITE_DEFAU
1110: 4c 54 5f 4d 45 4d 53 54 41 54 55 53 3d 3c 69 3e  LT_MEMSTATUS=<i>
1120: 26 6c 74 3b 31 20 6f 72 20 30 26 67 74 3b 3c 2f  &lt;1 or 0&gt;</
1130: 69 3e 7d 20 7b 0a 20 20 54 68 69 73 20 6d 61 63  i>} {.  This mac
1140: 72 6f 20 69 73 20 75 73 65 64 20 74 6f 20 64 65  ro is used to de
1150: 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20  termine whether 
1160: 6f 72 20 6e 6f 74 20 74 68 65 20 66 65 61 74 75  or not the featu
1170: 72 65 73 20 65 6e 61 62 6c 65 64 20 61 6e 64 0a  res enabled and.
1180: 20 20 64 69 73 61 62 6c 65 64 20 75 73 69 6e 67    disabled using
1190: 20 74 68 65 20 53 51 4c 49 54 45 5f 43 4f 4e 46   the SQLITE_CONF
11a0: 49 47 5f 4d 45 4d 53 54 41 54 55 53 20 61 72 67  IG_MEMSTATUS arg
11b0: 75 6d 65 6e 74 20 74 6f 20 5b 73 71 6c 69 74 65  ument to [sqlite
11c0: 33 5f 63 6f 6e 66 69 67 28 29 5d 0a 20 20 61 72  3_config()].  ar
11d0: 65 20 61 76 61 69 6c 61 62 6c 65 20 62 79 20 64  e available by d
11e0: 65 66 61 75 6c 74 2e 20 54 68 65 20 64 65 66 61  efault. The defa
11f0: 75 6c 74 20 76 61 6c 75 65 20 69 73 20 31 20 28  ult value is 1 (
1200: 5b 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4d  [SQLITE_CONFIG_M
1210: 45 4d 53 54 41 54 55 53 5d 0a 20 20 72 65 6c 61  EMSTATUS].  rela
1220: 74 65 64 20 66 65 61 74 75 72 65 73 20 65 6e 61  ted features ena
1230: 62 6c 65 64 29 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c  bled)..}..COMPIL
1240: 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45  E_OPTION {SQLITE
1250: 5f 44 45 46 41 55 4c 54 5f 50 41 47 45 5f 53 49  _DEFAULT_PAGE_SI
1260: 5a 45 3d 3c 69 3e 26 6c 74 3b 62 79 74 65 73 26  ZE=<i>&lt;bytes&
1270: 67 74 3b 3c 2f 69 3e 7d 20 7b 0a 20 20 54 68 69  gt;</i>} {.  Thi
1280: 73 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20  s macro is used 
1290: 74 6f 20 73 65 74 20 74 68 65 20 64 65 66 61 75  to set the defau
12a0: 6c 74 20 70 61 67 65 2d 73 69 7a 65 20 75 73 65  lt page-size use
12b0: 64 20 77 68 65 6e 20 61 0a 20 20 64 61 74 61 62  d when a.  datab
12c0: 61 73 65 20 69 73 20 63 72 65 61 74 65 64 2e 20  ase is created. 
12d0: 54 68 65 20 76 61 6c 75 65 20 61 73 73 69 67 6e  The value assign
12e0: 65 64 20 6d 75 73 74 20 62 65 20 61 20 70 6f 77  ed must be a pow
12f0: 65 72 20 6f 66 20 32 2e 20 54 68 65 0a 20 20 64  er of 2. The.  d
1300: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 69 73 20  efault value is 
1310: 31 30 32 34 2e 20 54 68 65 20 63 6f 6d 70 69 6c  1024. The compil
1320: 65 2d 74 69 6d 65 20 64 65 66 61 75 6c 74 20 6d  e-time default m
1330: 61 79 20 62 65 20 6f 76 65 72 72 69 64 64 65 6e  ay be overridden
1340: 20 61 74 20 0a 20 20 72 75 6e 74 69 6d 65 20 62   at .  runtime b
1350: 79 20 74 68 65 20 5b 50 52 41 47 4d 41 20 70 61  y the [PRAGMA pa
1360: 67 65 5f 73 69 7a 65 5d 20 63 6f 6d 6d 61 6e 64  ge_size] command
1370: 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54  ..}..COMPILE_OPT
1380: 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 44 45 46 41  ION {SQLITE_DEFA
1390: 55 4c 54 5f 54 45 4d 50 5f 43 41 43 48 45 5f 53  ULT_TEMP_CACHE_S
13a0: 49 5a 45 3d 3c 69 3e 26 6c 74 3b 70 61 67 65 73  IZE=<i>&lt;pages
13b0: 26 67 74 3b 3c 2f 69 3e 7d 20 7b 0a 20 20 54 68  &gt;</i>} {.  Th
13c0: 69 73 20 6d 61 63 72 6f 20 73 65 74 73 20 74 68  is macro sets th
13d0: 65 20 64 65 66 61 75 6c 74 20 73 69 7a 65 20 6f  e default size o
13e0: 66 20 74 68 65 20 70 61 67 65 2d 63 61 63 68 65  f the page-cache
13f0: 20 66 6f 72 20 74 65 6d 70 6f 72 61 72 79 20 66   for temporary f
1400: 69 6c 65 73 0a 20 20 63 72 65 61 74 65 64 20 62  iles.  created b
1410: 79 20 53 51 4c 69 74 65 20 74 6f 20 73 74 6f 72  y SQLite to stor
1420: 65 20 69 6e 74 65 72 6d 65 64 69 61 74 65 20 72  e intermediate r
1430: 65 73 75 6c 74 73 2c 20 69 6e 20 70 61 67 65 73  esults, in pages
1440: 2e 20 49 74 20 64 6f 65 73 0a 20 20 6e 6f 74 20  . It does.  not 
1450: 61 66 66 65 63 74 20 74 68 65 20 70 61 67 65 2d  affect the page-
1460: 63 61 63 68 65 20 66 6f 72 20 74 68 65 20 74 65  cache for the te
1470: 6d 70 20 64 61 74 61 62 61 73 65 2c 20 77 68 65  mp database, whe
1480: 72 65 20 74 61 62 6c 65 73 20 63 72 65 61 74 65  re tables create
1490: 64 0a 20 20 75 73 69 6e 67 20 5b 43 52 45 41 54  d.  using [CREAT
14a0: 45 20 54 41 42 4c 45 20 7c 20 43 52 45 41 54 45  E TABLE | CREATE
14b0: 20 54 45 4d 50 20 54 41 42 4c 45 5d 20 61 72 65   TEMP TABLE] are
14c0: 20 73 74 6f 72 65 64 2e 20 54 68 65 20 64 65 66   stored. The def
14d0: 61 75 6c 74 20 76 61 6c 75 65 0a 20 20 69 73 20  ault value.  is 
14e0: 35 30 30 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f  500..}..COMPILE_
14f0: 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 44  OPTION {SQLITE_D
1500: 45 46 41 55 4c 54 5f 57 41 4c 5f 41 55 54 4f 43  EFAULT_WAL_AUTOC
1510: 48 45 43 4b 50 4f 49 4e 54 3d 3c 69 3e 26 6c 74  HECKPOINT=<i>&lt
1520: 3b 70 61 67 65 73 26 67 74 3b 3c 2f 69 3e 7d 20  ;pages&gt;</i>} 
1530: 7b 0a 20 20 54 68 69 73 20 6d 61 63 72 6f 20 73  {.  This macro s
1540: 65 74 73 20 74 68 65 20 64 65 66 61 75 6c 74 20  ets the default 
1550: 70 61 67 65 20 63 6f 75 6e 74 20 66 6f 72 20 74  page count for t
1560: 68 65 20 5b 57 41 4c 5d 0a 20 20 5b 63 68 65 63  he [WAL].  [chec
1570: 6b 70 6f 69 6e 74 69 6e 67 20 7c 20 61 75 74 6f  kpointing | auto
1580: 6d 61 74 69 63 20 63 68 65 63 6b 70 6f 69 6e 74  matic checkpoint
1590: 69 6e 67 5d 20 66 65 61 74 75 72 65 2e 20 20 49  ing] feature.  I
15a0: 66 20 75 6e 73 70 65 63 69 66 69 65 64 2c 0a 20  f unspecified,. 
15b0: 20 74 68 65 20 64 65 66 61 75 6c 74 20 70 61 67   the default pag
15c0: 65 20 63 6f 75 6e 74 20 69 73 20 31 30 30 30 2e  e count is 1000.
15d0: 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49  .}..COMPILE_OPTI
15e0: 4f 4e 20 7b 53 51 4c 49 54 45 5f 4d 41 58 5f 53  ON {SQLITE_MAX_S
15f0: 43 48 45 4d 41 5f 52 45 54 52 59 3d 3c 69 3e 4e  CHEMA_RETRY=<i>N
1600: 3c 2f 69 3e 7d 20 7b 0a 20 20 57 68 65 6e 65 76  </i>} {.  Whenev
1610: 65 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20  er the database 
1620: 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73 2c 20  schema changes, 
1630: 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
1640: 6e 74 73 20 61 72 65 20 61 75 74 6f 6d 61 74 69  nts are automati
1650: 63 61 6c 6c 79 0a 20 20 72 65 70 72 65 70 61 72  cally.  reprepar
1660: 65 64 20 74 6f 20 61 63 63 6f 6d 6d 6f 64 61 74  ed to accommodat
1670: 65 20 74 68 65 20 6e 65 77 20 73 63 68 65 6d 61  e the new schema
1680: 2e 20 20 54 68 65 72 65 20 69 73 20 61 20 72 61  .  There is a ra
1690: 63 65 20 63 6f 6e 64 69 74 69 6f 6e 20 68 65 72  ce condition her
16a0: 65 0a 20 20 69 6e 20 74 68 61 74 20 69 66 20 6f  e.  in that if o
16b0: 6e 65 20 74 68 72 65 61 64 20 69 73 20 63 6f 6e  ne thread is con
16c0: 73 74 61 6e 74 6c 79 20 63 68 61 6e 67 69 6e 67  stantly changing
16d0: 20 74 68 65 20 73 63 68 65 6d 61 2c 20 61 6e 6f   the schema, ano
16e0: 74 68 65 72 20 74 68 72 65 61 64 0a 20 20 6d 69  ther thread.  mi
16f0: 67 68 74 20 73 70 69 6e 20 6f 6e 20 72 65 70 61  ght spin on repa
1700: 72 73 65 73 20 61 6e 64 20 72 65 70 72 65 70 61  rses and reprepa
1710: 72 61 74 69 6f 6e 73 20 6f 66 20 61 20 70 72 65  rations of a pre
1720: 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20  pared statement 
1730: 61 6e 64 0a 20 20 6e 65 76 65 72 20 67 65 74 20  and.  never get 
1740: 61 6e 79 20 72 65 61 6c 20 77 6f 72 6b 20 64 6f  any real work do
1750: 6e 65 2e 20 20 54 68 69 73 20 70 61 72 61 6d 65  ne.  This parame
1760: 74 65 72 20 70 72 65 76 65 6e 74 73 20 61 6e 20  ter prevents an 
1770: 69 6e 66 69 6e 69 74 65 20 6c 6f 6f 70 0a 20 20  infinite loop.  
1780: 62 79 20 66 6f 72 63 69 6e 67 20 74 68 65 20 73  by forcing the s
1790: 70 69 6e 6e 69 6e 67 20 74 68 72 65 61 64 20 74  pinning thread t
17a0: 6f 20 67 69 76 65 20 75 70 20 61 66 74 65 72 20  o give up after 
17b0: 61 20 66 69 78 65 64 20 6e 75 6d 62 65 72 20 6f  a fixed number o
17c0: 66 20 61 74 74 65 6d 70 74 73 0a 20 20 61 74 20  f attempts.  at 
17d0: 72 65 63 6f 6d 70 69 6c 69 6e 67 20 74 68 65 20  recompiling the 
17e0: 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
17f0: 6e 74 2e 20 20 54 68 65 20 64 65 66 61 75 6c 74  nt.  The default
1800: 20 73 65 74 74 69 6e 67 20 69 73 20 35 20 77 68   setting is 5 wh
1810: 69 63 68 20 69 73 0a 20 20 6d 6f 72 65 20 74 68  ich is.  more th
1820: 61 6e 20 61 64 65 71 75 61 74 65 20 66 6f 72 20  an adequate for 
1830: 6d 6f 73 74 20 61 70 70 6c 69 63 61 74 69 6f 6e  most application
1840: 73 2e 20 20 42 75 74 20 69 6e 20 73 6f 6d 65 20  s.  But in some 
1850: 6f 62 73 63 75 72 65 20 63 61 73 65 73 2c 20 69  obscure cases, i
1860: 74 0a 20 20 69 73 20 75 73 65 66 75 6c 20 74 6f  t.  is useful to
1870: 20 72 61 69 73 65 20 74 68 69 73 20 70 61 72 61   raise this para
1880: 6d 65 74 65 72 20 74 6f 20 31 30 30 20 6f 72 20  meter to 100 or 
1890: 6d 6f 72 65 20 74 6f 20 70 72 65 76 65 6e 74 20  more to prevent 
18a0: 73 70 75 72 69 6f 75 73 0a 20 20 5b 53 51 4c 49  spurious.  [SQLI
18b0: 54 45 5f 53 43 48 45 4d 41 5d 20 65 72 72 6f 72  TE_SCHEMA] error
18c0: 73 20 77 68 65 6e 20 72 75 6e 6e 69 6e 67 20 5b  s when running [
18d0: 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 5d 2e  sqlite3_step()].
18e0: 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49  .}..COMPILE_OPTI
18f0: 4f 4e 20 7b 59 59 53 54 41 43 4b 44 45 50 54 48  ON {YYSTACKDEPTH
1900: 3d 3c 69 3e 26 6c 74 3b 6d 61 78 5f 64 65 70 74  =<i>&lt;max_dept
1910: 68 26 67 74 3b 3c 2f 69 3e 7d 20 7b 0a 20 20 54  h&gt;</i>} {.  T
1920: 68 69 73 20 6d 61 63 72 6f 20 73 65 74 73 20 74  his macro sets t
1930: 68 65 20 6d 61 78 69 6d 75 6d 20 64 65 70 74 68  he maximum depth
1940: 20 6f 66 20 74 68 65 20 4c 41 4c 52 28 31 29 20   of the LALR(1) 
1950: 73 74 61 63 6b 20 75 73 65 64 20 62 79 0a 20 20  stack used by.  
1960: 74 68 65 20 53 51 4c 20 70 61 72 73 65 72 20 77  the SQL parser w
1970: 69 74 68 69 6e 20 53 51 4c 69 74 65 2e 20 20 54  ithin SQLite.  T
1980: 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65  he default value
1990: 20 69 73 20 31 30 30 2e 20 20 41 20 74 79 70 69   is 100.  A typi
19a0: 63 61 6c 0a 20 20 61 70 70 6c 69 63 61 74 69 6f  cal.  applicatio
19b0: 6e 20 77 69 6c 6c 20 75 73 65 20 6c 65 73 73 20  n will use less 
19c0: 74 68 61 6e 20 61 62 6f 75 74 20 32 30 20 6c 65  than about 20 le
19d0: 76 65 6c 73 20 6f 66 20 74 68 65 20 73 74 61 63  vels of the stac
19e0: 6b 2e 0a 20 20 44 65 76 65 6c 6f 70 65 72 73 20  k..  Developers 
19f0: 77 68 6f 73 65 20 61 70 70 6c 69 63 61 74 69 6f  whose applicatio
1a00: 6e 73 20 63 6f 6e 74 61 69 6e 20 53 51 4c 20 73  ns contain SQL s
1a10: 74 61 74 65 6d 65 6e 74 73 20 74 68 61 74 20 0a  tatements that .
1a20: 20 20 6e 65 65 64 20 6d 6f 72 65 20 74 68 61 6e    need more than
1a30: 20 31 30 30 20 4c 41 4c 52 28 31 29 20 73 74 61   100 LALR(1) sta
1a40: 63 6b 20 65 6e 74 72 69 65 73 20 73 68 6f 75 6c  ck entries shoul
1a50: 64 20 73 65 72 69 6f 75 73 6c 79 0a 20 20 63 6f  d seriously.  co
1a60: 6e 73 69 64 65 72 20 72 65 66 61 63 74 6f 72 69  nsider refactori
1a70: 6e 67 20 74 68 65 69 72 20 53 51 4c 20 61 73 20  ng their SQL as 
1a80: 69 74 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20  it is likely to 
1a90: 62 65 20 77 65 6c 6c 20 62 65 79 6f 6e 64 0a 20  be well beyond. 
1aa0: 20 74 68 65 20 61 62 69 6c 69 74 79 20 6f 66 20   the ability of 
1ab0: 61 6e 79 20 68 75 6d 61 6e 20 74 6f 20 63 6f 6d  any human to com
1ac0: 70 72 65 68 65 6e 64 2e 0a 7d 0a 3c 2f 74 63 6c  prehend..}.</tcl
1ad0: 3e 0a 0a 3c 68 32 3e 31 2e 32 20 4f 70 74 69 6f  >..<h2>1.2 Optio
1ae0: 6e 73 20 54 6f 20 53 65 74 20 53 69 7a 65 20 4c  ns To Set Size L
1af0: 69 6d 69 74 73 3c 2f 68 32 3e 0a 0a 3c 70 3e 54  imits</h2>..<p>T
1b00: 68 65 72 65 20 61 72 65 20 63 6f 6d 70 69 6c 65  here are compile
1b10: 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20 74 68  -time options th
1b20: 61 74 20 77 69 6c 6c 20 73 65 74 20 75 70 70 65  at will set uppe
1b30: 72 20 62 6f 75 6e 64 73 0a 6f 6e 20 74 68 65 20  r bounds.on the 
1b40: 73 69 7a 65 73 20 6f 66 20 76 61 72 69 6f 75 73  sizes of various
1b50: 20 73 74 72 75 63 74 75 72 65 73 20 69 6e 20 53   structures in S
1b60: 51 4c 69 74 65 2e 20 20 54 68 65 20 63 6f 6d 70  QLite.  The comp
1b70: 69 6c 65 2d 74 69 6d 65 0a 6f 70 74 69 6f 6e 73  ile-time.options
1b80: 20 6e 6f 72 6d 61 6c 6c 79 20 73 65 74 20 61 20   normally set a 
1b90: 68 61 72 64 20 75 70 70 65 72 20 62 6f 75 6e 64  hard upper bound
1ba0: 20 74 68 61 74 20 63 61 6e 20 62 65 20 63 68 61   that can be cha
1bb0: 6e 67 65 64 0a 61 74 20 72 75 6e 2d 74 69 6d 65  nged.at run-time
1bc0: 20 6f 6e 20 69 6e 64 69 76 69 64 75 61 6c 20 5b   on individual [
1bd0: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
1be0: 69 6f 6e 73 5d 20 75 73 69 6e 67 20 74 68 65 0a  ions] using the.
1bf0: 5b 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28 29  [sqlite3_limit()
1c00: 5d 20 69 6e 74 65 72 66 61 63 65 2e 3c 2f 70 3e  ] interface.</p>
1c10: 0a 0a 3c 70 3e 54 68 65 20 63 6f 6d 70 69 6c 65  ..<p>The compile
1c20: 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20 66 6f  -time options fo
1c30: 72 20 73 65 74 74 69 6e 67 20 75 70 70 65 72 20  r setting upper 
1c40: 62 6f 75 6e 64 73 20 61 72 65 0a 5b 6c 69 6d 69  bounds are.[limi
1c50: 74 73 20 7c 20 64 6f 63 75 6d 65 6e 74 65 64 20  ts | documented 
1c60: 73 65 70 61 72 61 74 65 6c 79 5d 2e 20 20 54 68  separately].  Th
1c70: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 73 20 61  e following is a
1c80: 20 6c 69 73 74 20 6f 66 0a 74 68 65 20 61 76 61   list of.the ava
1c90: 69 6c 61 62 6c 65 20 73 65 74 74 69 6e 67 73 3a  ilable settings:
1ca0: 3c 2f 70 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 20  </p>..<ul>.<li> 
1cb0: 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41  [SQLITE_MAX_ATTA
1cc0: 43 48 45 44 5d 20 20 3c 2f 6c 69 3e 0a 3c 6c 69  CHED]  </li>.<li
1cd0: 3e 20 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 43 4f  > [SQLITE_MAX_CO
1ce0: 4c 55 4d 4e 5d 20 20 3c 2f 6c 69 3e 0a 3c 6c 69  LUMN]  </li>.<li
1cf0: 3e 20 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 43 4f  > [SQLITE_MAX_CO
1d00: 4d 50 4f 55 4e 44 5f 53 45 4c 45 43 54 5d 20 20  MPOUND_SELECT]  
1d10: 3c 2f 6c 69 3e 0a 3c 6c 69 3e 20 5b 53 51 4c 49  </li>.<li> [SQLI
1d20: 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50 54  TE_MAX_EXPR_DEPT
1d30: 48 5d 20 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e 20 5b  H]  </li>.<li> [
1d40: 53 51 4c 49 54 45 5f 4d 41 58 5f 46 55 4e 43 54  SQLITE_MAX_FUNCT
1d50: 49 4f 4e 5f 41 52 47 5d 20 20 3c 2f 6c 69 3e 0a  ION_ARG]  </li>.
1d60: 3c 6c 69 3e 20 5b 53 51 4c 49 54 45 5f 4d 41 58  <li> [SQLITE_MAX
1d70: 5f 4c 45 4e 47 54 48 5d 20 20 3c 2f 6c 69 3e 0a  _LENGTH]  </li>.
1d80: 3c 6c 69 3e 20 5b 53 51 4c 49 54 45 5f 4d 41 58  <li> [SQLITE_MAX
1d90: 5f 4c 49 4b 45 5f 50 41 54 54 45 52 4e 5f 4c 45  _LIKE_PATTERN_LE
1da0: 4e 47 54 48 5d 20 20 3c 2f 6c 69 3e 0a 3c 6c 69  NGTH]  </li>.<li
1db0: 3e 20 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 50 41  > [SQLITE_MAX_PA
1dc0: 47 45 5f 43 4f 55 4e 54 5d 20 20 3c 2f 6c 69 3e  GE_COUNT]  </li>
1dd0: 0a 3c 6c 69 3e 20 5b 53 51 4c 49 54 45 5f 4d 41  .<li> [SQLITE_MA
1de0: 58 5f 53 51 4c 5f 4c 45 4e 47 54 48 5d 20 20 3c  X_SQL_LENGTH]  <
1df0: 2f 6c 69 3e 0a 3c 6c 69 3e 20 5b 53 51 4c 49 54  /li>.<li> [SQLIT
1e00: 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e  E_MAX_VARIABLE_N
1e10: 55 4d 42 45 52 5d 20 20 3c 2f 6c 69 3e 0a 3c 2f  UMBER]  </li>.</
1e20: 75 6c 3e 0a 0a 3c 61 20 6e 61 6d 65 3d 22 63 6f  ul>..<a name="co
1e30: 6e 74 72 6f 6c 66 65 61 74 75 72 65 73 22 3e 3c  ntrolfeatures"><
1e40: 2f 61 3e 0a 3c 68 32 3e 31 2e 33 20 4f 70 74 69  /a>.<h2>1.3 Opti
1e50: 6f 6e 73 20 54 6f 20 43 6f 6e 74 72 6f 6c 20 4f  ons To Control O
1e60: 70 65 72 61 74 69 6e 67 20 43 68 61 72 61 63 74  perating Charact
1e70: 65 72 69 73 74 69 63 73 3c 2f 68 32 3e 0a 0a 3c  eristics</h2>..<
1e80: 74 63 6c 3e 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54  tcl>.COMPILE_OPT
1e90: 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 34 5f 42 59  ION {SQLITE_4_BY
1ea0: 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f  TE_ALIGNED_MALLO
1eb0: 43 7d 20 7b 0a 20 20 4f 6e 20 6d 6f 73 74 20 73  C} {.  On most s
1ec0: 79 73 74 65 6d 73 2c 20 74 68 65 20 6d 61 6c 6c  ystems, the mall
1ed0: 6f 63 28 29 20 73 79 73 74 65 6d 20 63 61 6c 6c  oc() system call
1ee0: 20 72 65 74 75 72 6e 73 20 61 20 62 75 66 66 65   returns a buffe
1ef0: 72 20 74 68 61 74 20 69 73 0a 20 20 61 6c 69 67  r that is.  alig
1f00: 6e 65 64 20 74 6f 20 61 6e 20 38 2d 62 79 74 65  ned to an 8-byte
1f10: 20 62 6f 75 6e 64 61 72 79 2e 20 20 42 75 74 20   boundary.  But 
1f20: 6f 6e 20 73 6f 6d 65 20 73 79 73 74 65 6d 73 20  on some systems 
1f30: 28 65 78 3a 20 77 69 6e 64 6f 77 73 29 20 6d 61  (ex: windows) ma
1f40: 6c 6c 6f 63 28 29 0a 20 20 72 65 74 75 72 6e 73  lloc().  returns
1f50: 20 34 2d 62 79 74 65 20 61 6c 69 67 6e 65 64 20   4-byte aligned 
1f60: 70 6f 69 6e 74 65 72 2e 20 20 54 68 69 73 20 63  pointer.  This c
1f70: 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69  ompile-time opti
1f80: 6f 6e 20 6d 75 73 74 20 62 65 20 75 73 65 64 0a  on must be used.
1f90: 20 20 6f 6e 20 73 79 73 74 65 6d 73 20 74 68 61    on systems tha
1fa0: 74 20 72 65 74 75 72 6e 20 34 2d 62 79 74 65 20  t return 4-byte 
1fb0: 61 6c 69 67 6e 65 64 20 70 6f 69 6e 74 65 72 73  aligned pointers
1fc0: 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 2e 0a   from malloc()..
1fd0: 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f  }..COMPILE_OPTIO
1fe0: 4e 20 7b 53 51 4c 49 54 45 5f 43 41 53 45 5f 53  N {SQLITE_CASE_S
1ff0: 45 4e 53 49 54 49 56 45 5f 4c 49 4b 45 7d 20 7b  ENSITIVE_LIKE} {
2000: 0a 20 20 49 66 20 74 68 69 73 20 6f 70 74 69 6f  .  If this optio
2010: 6e 20 69 73 20 70 72 65 73 65 6e 74 2c 20 74 68  n is present, th
2020: 65 6e 20 74 68 65 20 62 75 69 6c 74 2d 69 6e 20  en the built-in 
2030: 5b 4c 49 4b 45 5d 20 6f 70 65 72 61 74 6f 72 20  [LIKE] operator 
2040: 77 69 6c 6c 20 62 65 0a 20 20 63 61 73 65 20 73  will be.  case s
2050: 65 6e 73 69 74 69 76 65 2e 20 20 54 68 69 73 20  ensitive.  This 
2060: 73 61 6d 65 20 65 66 66 65 63 74 20 63 61 6e 20  same effect can 
2070: 62 65 20 61 63 68 69 65 76 65 64 20 61 74 20 72  be achieved at r
2080: 75 6e 2d 74 69 6d 65 20 75 73 69 6e 67 0a 20 20  un-time using.  
2090: 74 68 65 20 5b 63 61 73 65 5f 73 65 6e 73 69 74  the [case_sensit
20a0: 69 76 65 5f 6c 69 6b 65 20 70 72 61 67 6d 61 5d  ive_like pragma]
20b0: 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54  ..}..COMPILE_OPT
20c0: 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 44 49 52 45  ION {SQLITE_DIRE
20d0: 43 54 5f 4f 56 45 52 46 4c 4f 57 5f 52 45 41 44  CT_OVERFLOW_READ
20e0: 7d 20 7b 0a 20 20 57 68 65 6e 20 74 68 69 73 20  } {.  When this 
20f0: 6f 70 74 69 6f 6e 20 69 73 20 70 72 65 73 65 6e  option is presen
2100: 74 2c 20 63 6f 6e 74 65 6e 74 20 63 6f 6e 74 61  t, content conta
2110: 69 6e 65 64 20 69 6e 0a 20 20 5b 6f 76 65 72 66  ined in.  [overf
2120: 6c 6f 77 20 70 61 67 65 73 5d 20 6f 66 20 74 68  low pages] of th
2130: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
2140: 69 73 20 72 65 61 64 20 64 69 72 65 63 74 6c 79  is read directly
2150: 20 66 72 6f 6d 20 64 69 73 6b 2c 0a 20 20 62 79   from disk,.  by
2160: 70 61 73 73 69 6e 67 20 74 68 65 20 5b 70 61 67  passing the [pag
2170: 65 20 63 61 63 68 65 5d 2c 20 64 75 72 69 6e 67  e cache], during
2180: 20 72 65 61 64 20 74 72 61 6e 73 61 63 74 69 6f   read transactio
2190: 6e 73 2e 20 20 49 6e 20 61 70 70 6c 69 63 61 74  ns.  In applicat
21a0: 69 6f 6e 73 0a 20 20 74 68 61 74 20 64 6f 20 61  ions.  that do a
21b0: 20 6c 6f 74 20 6f 66 20 72 65 61 64 73 20 6f 66   lot of reads of
21c0: 20 6c 61 72 67 65 20 42 4c 4f 42 73 2c 20 74 68   large BLOBs, th
21d0: 69 73 20 6f 70 74 69 6f 6e 20 6d 69 67 68 74 20  is option might 
21e0: 69 6d 70 72 6f 76 65 20 72 65 61 64 0a 20 20 70  improve read.  p
21f0: 65 72 66 6f 72 6d 61 6e 63 65 2e 0a 7d 0a 0a 43  erformance..}..C
2200: 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53  OMPILE_OPTION {S
2210: 51 4c 49 54 45 5f 48 41 56 45 5f 49 53 4e 41 4e  QLITE_HAVE_ISNAN
2220: 7d 20 7b 0a 20 20 49 66 20 74 68 69 73 20 6f 70  } {.  If this op
2230: 74 69 6f 6e 20 69 73 20 70 72 65 73 65 6e 74 2c  tion is present,
2240: 20 74 68 65 6e 20 53 51 4c 69 74 65 20 77 69 6c   then SQLite wil
2250: 6c 20 75 73 65 20 74 68 65 20 69 73 6e 61 6e 28  l use the isnan(
2260: 29 20 66 75 6e 63 74 69 6f 6e 20 66 72 6f 6d 0a  ) function from.
2270: 20 20 74 68 65 20 73 79 73 74 65 6d 20 6d 61 74    the system mat
2280: 68 20 6c 69 62 72 61 72 79 2e 20 20 57 69 74 68  h library.  With
2290: 6f 75 74 20 74 68 69 73 20 6f 70 74 69 6f 6e 20  out this option 
22a0: 28 74 68 65 20 64 65 66 61 75 6c 74 20 62 65 68  (the default beh
22b0: 61 76 69 6f 72 29 0a 20 20 53 51 4c 69 74 65 20  avior).  SQLite 
22c0: 75 73 65 73 20 69 74 73 20 6f 77 6e 20 69 6e 74  uses its own int
22d0: 65 72 6e 61 6c 20 69 6d 70 6c 65 6d 65 6e 74 61  ernal implementa
22e0: 74 69 6f 6e 20 6f 66 20 69 73 6e 61 6e 28 29 2e  tion of isnan().
22f0: 20 20 53 51 4c 69 74 65 20 75 73 65 73 0a 20 20    SQLite uses.  
2300: 69 74 73 20 6f 77 6e 20 69 6e 74 65 72 6e 61 6c  its own internal
2310: 20 69 73 6e 61 6e 28 29 20 69 6d 70 6c 65 6d 65   isnan() impleme
2320: 6e 74 61 74 69 6f 6e 20 62 79 20 64 65 66 61 75  ntation by defau
2330: 6c 74 20 62 65 63 61 75 73 65 20 6f 66 20 70 61  lt because of pa
2340: 73 74 0a 20 20 70 72 6f 62 6c 65 6d 73 20 77 69  st.  problems wi
2350: 74 68 20 73 79 73 74 65 6d 20 69 73 6e 61 6e 28  th system isnan(
2360: 29 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 7d 0a 0a  ) functions..}..
2370: 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b  COMPILE_OPTION {
2380: 53 51 4c 49 54 45 5f 4f 53 5f 4f 54 48 45 52 3d  SQLITE_OS_OTHER=
2390: 3c 69 3e 26 6c 74 3b 30 20 6f 72 20 31 26 67 74  <i>&lt;0 or 1&gt
23a0: 3b 3c 2f 69 3e 7d 20 7b 0a 20 20 54 68 65 20 6f  ;</i>} {.  The o
23b0: 70 74 69 6f 6e 20 63 61 75 73 65 73 20 53 51 4c  ption causes SQL
23c0: 69 74 65 20 74 6f 20 6f 6d 69 74 20 69 74 73 20  ite to omit its 
23d0: 62 75 69 6c 74 2d 69 6e 20 6f 70 65 72 61 74 69  built-in operati
23e0: 6e 67 20 73 79 73 74 65 6d 20 69 6e 74 65 72 66  ng system interf
23f0: 61 63 65 73 0a 20 20 66 6f 72 20 55 6e 69 78 2c  aces.  for Unix,
2400: 20 57 69 6e 64 6f 77 73 2c 20 61 6e 64 20 4f 53   Windows, and OS
2410: 2f 32 2e 20 20 54 68 65 20 72 65 73 75 6c 74 69  /2.  The resulti
2420: 6e 67 20 6c 69 62 72 61 72 79 20 77 69 6c 6c 20  ng library will 
2430: 68 61 76 65 20 6e 6f 20 64 65 66 61 75 6c 74 0a  have no default.
2440: 20 20 5b 73 71 6c 69 74 65 33 5f 76 66 73 20 7c    [sqlite3_vfs |
2450: 20 6f 70 65 72 61 74 69 6e 67 20 73 79 73 74 65   operating syste
2460: 6d 20 69 6e 74 65 72 66 61 63 65 5d 2e 20 20 41  m interface].  A
2470: 70 70 6c 69 63 61 74 69 6f 6e 73 20 6d 75 73 74  pplications must
2480: 20 75 73 65 0a 20 20 5b 73 71 6c 69 74 65 33 5f   use.  [sqlite3_
2490: 76 66 73 5f 72 65 67 69 73 74 65 72 28 29 5d 20  vfs_register()] 
24a0: 74 6f 20 72 65 67 69 73 74 65 72 20 61 6e 20 61  to register an a
24b0: 70 70 72 6f 70 72 69 61 74 65 20 69 6e 74 65 72  ppropriate inter
24c0: 66 61 63 65 20 62 65 66 6f 72 65 0a 20 20 75 73  face before.  us
24d0: 69 6e 67 20 53 51 4c 69 74 65 2e 20 20 41 70 70  ing SQLite.  App
24e0: 6c 69 63 61 74 69 6f 6e 73 20 6d 75 73 74 20 61  lications must a
24f0: 6c 73 6f 20 73 75 70 70 6c 79 20 69 6d 70 6c 65  lso supply imple
2500: 6d 65 6e 74 61 74 69 6f 6e 73 20 66 6f 72 20 74  mentations for t
2510: 68 65 0a 20 20 5b 73 71 6c 69 74 65 33 5f 6f 73  he.  [sqlite3_os
2520: 5f 69 6e 69 74 28 29 5d 20 61 6e 64 20 5b 73 71  _init()] and [sq
2530: 6c 69 74 65 33 5f 6f 73 5f 65 6e 64 28 29 5d 20  lite3_os_end()] 
2540: 69 6e 74 65 72 66 61 63 65 73 2e 20 20 54 68 65  interfaces.  The
2550: 20 75 73 75 61 6c 20 70 72 61 63 74 69 63 65 0a   usual practice.
2560: 20 20 69 73 20 66 6f 72 20 74 68 65 20 73 75 70    is for the sup
2570: 70 6c 69 65 64 20 5b 73 71 6c 69 74 65 33 5f 6f  plied [sqlite3_o
2580: 73 5f 69 6e 69 74 28 29 5d 20 74 6f 20 69 6e 76  s_init()] to inv
2590: 6f 6b 65 20 5b 73 71 6c 69 74 65 33 5f 76 66 73  oke [sqlite3_vfs
25a0: 5f 72 65 67 69 73 74 65 72 28 29 5d 2e 0a 20 20  _register()]..  
25b0: 53 51 4c 69 74 65 20 77 69 6c 6c 20 61 75 74 6f  SQLite will auto
25c0: 6d 61 74 69 63 61 6c 6c 79 20 69 6e 76 6f 6b 65  matically invoke
25d0: 20 5b 73 71 6c 69 74 65 33 5f 6f 73 5f 69 6e 69   [sqlite3_os_ini
25e0: 74 28 29 5d 20 77 68 65 6e 20 69 74 20 69 6e 69  t()] when it ini
25f0: 74 69 61 6c 69 7a 65 73 2e 0a 0a 20 20 54 68 69  tializes...  Thi
2600: 73 20 6f 70 74 69 6f 6e 20 69 73 20 74 79 70 69  s option is typi
2610: 63 61 6c 6c 79 20 75 73 65 64 20 77 68 65 6e 20  cally used when 
2620: 62 75 69 6c 64 69 6e 67 20 53 51 4c 69 74 65 20  building SQLite 
2630: 66 6f 72 20 61 6e 20 65 6d 62 65 64 64 65 64 0a  for an embedded.
2640: 20 20 70 6c 61 74 66 6f 72 6d 20 77 69 74 68 20    platform with 
2650: 61 20 63 75 73 74 6f 6d 20 6f 70 65 72 61 74 69  a custom operati
2660: 6e 67 20 73 79 73 74 65 6d 2e 0a 7d 0a 0a 43 4f  ng system..}..CO
2670: 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51  MPILE_OPTION {SQ
2680: 4c 49 54 45 5f 53 45 43 55 52 45 5f 44 45 4c 45  LITE_SECURE_DELE
2690: 54 45 7d 20 7b 0a 20 20 54 68 69 73 20 63 6f 6d  TE} {.  This com
26a0: 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
26b0: 20 63 68 61 6e 67 65 73 20 74 68 65 20 64 65 66   changes the def
26c0: 61 75 6c 74 20 73 65 74 74 69 6e 67 20 6f 66 20  ault setting of 
26d0: 74 68 65 0a 20 20 5b 73 65 63 75 72 65 5f 64 65  the.  [secure_de
26e0: 6c 65 74 65 20 70 72 61 67 6d 61 5d 2e 20 20 57  lete pragma].  W
26f0: 68 65 6e 20 74 68 69 73 20 6f 70 74 69 6f 6e 20  hen this option 
2700: 69 73 20 6e 6f 74 20 75 73 65 64 2c 20 73 65 63  is not used, sec
2710: 75 72 65 5f 64 65 6c 65 74 65 20 64 65 66 61 75  ure_delete defau
2720: 6c 74 73 0a 20 20 74 6f 20 6f 66 66 2e 20 20 57  lts.  to off.  W
2730: 68 65 6e 20 74 68 69 73 20 6f 70 74 69 6f 6e 20  hen this option 
2740: 69 73 20 70 72 65 73 65 6e 74 2c 20 73 65 63 75  is present, secu
2750: 72 65 5f 64 65 6c 65 74 65 20 64 65 66 61 75 6c  re_delete defaul
2760: 74 73 20 74 6f 20 6f 6e 2e 0a 0a 20 20 54 68 65  ts to on...  The
2770: 20 73 65 63 75 72 65 5f 64 65 6c 65 74 65 20 73   secure_delete s
2780: 65 74 74 69 6e 67 20 63 61 75 73 65 73 20 64 65  etting causes de
2790: 6c 65 74 65 64 20 63 6f 6e 74 65 6e 74 20 74 6f  leted content to
27a0: 20 62 65 20 6f 76 65 72 77 72 69 74 74 65 6e 20   be overwritten 
27b0: 77 69 74 68 0a 20 20 7a 65 72 6f 73 2e 20 20 54  with.  zeros.  T
27c0: 68 65 72 65 20 69 73 20 61 20 73 6d 61 6c 6c 20  here is a small 
27d0: 70 65 72 66 6f 72 6d 61 6e 63 65 20 70 65 6e 61  performance pena
27e0: 6c 74 79 20 66 6f 72 20 74 68 69 73 20 73 69 6e  lty for this sin
27f0: 63 65 20 61 64 64 69 74 69 6f 6e 61 6c 20 49 2f  ce additional I/
2800: 4f 0a 20 20 6d 75 73 74 20 6f 63 63 75 72 2e 20  O.  must occur. 
2810: 20 4f 6e 20 74 68 65 20 6f 74 68 65 72 20 68 61   On the other ha
2820: 6e 64 2c 20 73 65 63 75 72 65 5f 64 65 6c 65 74  nd, secure_delet
2830: 65 20 63 61 6e 20 70 72 65 76 65 6e 74 20 73 65  e can prevent se
2840: 6e 73 69 74 69 76 65 20 0a 20 20 69 6e 66 6f 72  nsitive .  infor
2850: 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 6c 69 6e 67  mation from ling
2860: 65 72 69 6e 67 20 69 6e 20 75 6e 75 73 65 64 20  ering in unused 
2870: 70 61 72 74 73 20 6f 66 20 74 68 65 20 64 61 74  parts of the dat
2880: 61 62 61 73 65 20 66 69 6c 65 20 61 66 74 65 72  abase file after
2890: 20 69 74 0a 20 20 68 61 73 20 61 6c 6c 65 67 65   it.  has allege
28a0: 64 6c 79 20 62 65 65 6e 20 64 65 6c 65 74 65 64  dly been deleted
28b0: 2e 20 20 53 65 65 20 74 68 65 20 64 6f 63 75 6d  .  See the docum
28c0: 65 6e 74 61 74 69 6f 6e 20 6f 6e 20 74 68 65 0a  entation on the.
28d0: 20 20 5b 73 65 63 75 72 65 5f 64 65 6c 65 74 65    [secure_delete
28e0: 20 70 72 61 67 6d 61 5d 20 66 6f 72 20 61 64 64   pragma] for add
28f0: 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
2900: 69 6f 6e 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f  ion..}..COMPILE_
2910: 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 54  OPTION {SQLITE_T
2920: 48 52 45 41 44 53 41 46 45 3d 3c 69 3e 26 6c 74  HREADSAFE=<i>&lt
2930: 3b 30 20 6f 72 20 31 20 6f 72 20 32 26 67 74 3b  ;0 or 1 or 2&gt;
2940: 3c 2f 69 3e 7d 20 7b 0a 20 20 54 68 69 73 20 6f  </i>} {.  This o
2950: 70 74 69 6f 6e 20 63 6f 6e 74 72 6f 6c 73 20 77  ption controls w
2960: 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 63 6f  hether or not co
2970: 64 65 20 69 73 20 69 6e 63 6c 75 64 65 64 20 69  de is included i
2980: 6e 20 53 51 4c 69 74 65 20 74 6f 0a 20 20 65 6e  n SQLite to.  en
2990: 61 62 6c 65 20 69 74 20 74 6f 20 6f 70 65 72 61  able it to opera
29a0: 74 65 20 73 61 66 65 6c 79 20 69 6e 20 61 20 6d  te safely in a m
29b0: 75 6c 74 69 74 68 72 65 61 64 65 64 20 65 6e 76  ultithreaded env
29c0: 69 72 6f 6e 6d 65 6e 74 2e 20 20 54 68 65 0a 20  ironment.  The. 
29d0: 20 64 65 66 61 75 6c 74 20 69 73 20 53 51 4c 49   default is SQLI
29e0: 54 45 5f 54 48 52 45 41 44 53 41 46 45 3d 31 20  TE_THREADSAFE=1 
29f0: 77 68 69 63 68 20 69 73 20 73 61 66 65 20 66 6f  which is safe fo
2a00: 72 20 75 73 65 20 69 6e 20 61 20 6d 75 6c 74 69  r use in a multi
2a10: 74 68 72 65 61 64 65 64 0a 20 20 65 6e 76 69 72  threaded.  envir
2a20: 6f 6e 6d 65 6e 74 2e 20 20 57 68 65 6e 20 63 6f  onment.  When co
2a30: 6d 70 69 6c 65 64 20 77 69 74 68 20 53 51 4c 49  mpiled with SQLI
2a40: 54 45 5f 54 48 52 45 41 44 53 41 46 45 3d 30 20  TE_THREADSAFE=0 
2a50: 61 6c 6c 20 6d 75 74 65 78 69 6e 67 20 63 6f 64  all mutexing cod
2a60: 65 0a 20 20 69 73 20 6f 6d 69 74 74 65 64 20 61  e.  is omitted a
2a70: 6e 64 20 69 74 20 69 73 20 75 6e 73 61 66 65 20  nd it is unsafe 
2a80: 74 6f 20 75 73 65 20 53 51 4c 69 74 65 20 69 6e  to use SQLite in
2a90: 20 61 20 6d 75 6c 74 69 74 68 72 65 61 64 65 64   a multithreaded
2aa0: 20 70 72 6f 67 72 61 6d 2e 0a 20 20 57 68 65 6e   program..  When
2ab0: 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 53   compiled with S
2ac0: 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45  QLITE_THREADSAFE
2ad0: 3d 32 2c 20 53 51 4c 69 74 65 20 63 61 6e 20 62  =2, SQLite can b
2ae0: 65 20 75 73 65 64 20 69 6e 20 61 20 6d 75 6c 74  e used in a mult
2af0: 69 74 68 72 65 61 64 65 64 0a 20 20 70 72 6f 67  ithreaded.  prog
2b00: 72 61 6d 20 73 6f 20 6c 6f 6e 67 20 61 73 20 6e  ram so long as n
2b10: 6f 20 74 77 6f 20 74 68 72 65 61 64 73 20 61 74  o two threads at
2b20: 74 65 6d 70 74 20 74 6f 20 75 73 65 20 74 68 65  tempt to use the
2b30: 20 73 61 6d 65 0a 20 20 5b 64 61 74 61 62 61 73   same.  [databas
2b40: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d 20 61 74  e connection] at
2b50: 20 74 68 65 20 73 61 6d 65 20 74 69 6d 65 2e 0a   the same time..
2b60: 0a 20 20 54 6f 20 70 75 74 20 69 74 20 61 6e 6f  .  To put it ano
2b70: 74 68 65 72 20 77 61 79 2c 20 53 51 4c 49 54 45  ther way, SQLITE
2b80: 5f 54 48 52 45 41 44 53 41 46 45 3d 31 20 73 65  _THREADSAFE=1 se
2b90: 74 73 20 74 68 65 20 64 65 66 61 75 6c 74 0a 20  ts the default. 
2ba0: 20 5b 74 68 72 65 61 64 69 6e 67 20 6d 6f 64 65   [threading mode
2bb0: 5d 20 74 6f 20 53 65 72 69 61 6c 69 7a 65 64 2e  ] to Serialized.
2bc0: 20 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53    SQLITE_THREADS
2bd0: 41 46 45 3d 32 20 73 65 74 73 20 74 68 65 20 64  AFE=2 sets the d
2be0: 65 66 61 75 6c 74 0a 20 20 5b 74 68 72 65 61 64  efault.  [thread
2bf0: 69 6e 67 20 6d 6f 64 65 5d 20 74 6f 20 4d 75 6c  ing mode] to Mul
2c00: 74 69 2d 74 68 72 65 61 64 65 64 2e 20 20 41 6e  ti-threaded.  An
2c10: 64 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53  d SQLITE_THREADS
2c20: 41 46 45 3d 30 20 73 65 74 73 20 74 68 65 0a 20  AFE=0 sets the. 
2c30: 20 5b 74 68 72 65 61 64 69 6e 67 20 6d 6f 64 65   [threading mode
2c40: 5d 20 74 6f 20 53 69 6e 67 6c 65 2d 74 68 72 65  ] to Single-thre
2c50: 61 64 65 64 2e 0a 0a 20 20 54 68 65 20 76 61 6c  aded...  The val
2c60: 75 65 20 6f 66 20 53 51 4c 49 54 45 5f 54 48 52  ue of SQLITE_THR
2c70: 45 41 44 53 41 46 45 20 63 61 6e 20 62 65 20 64  EADSAFE can be d
2c80: 65 74 65 72 6d 69 6e 65 64 20 61 74 20 72 75 6e  etermined at run
2c90: 2d 74 69 6d 65 0a 20 20 75 73 69 6e 67 20 74 68  -time.  using th
2ca0: 65 20 5b 73 71 6c 69 74 65 33 5f 74 68 72 65 61  e [sqlite3_threa
2cb0: 64 73 61 66 65 28 29 5d 20 69 6e 74 65 72 66 61  dsafe()] interfa
2cc0: 63 65 2e 0a 0a 20 20 57 68 65 6e 20 53 51 4c 69  ce...  When SQLi
2cd0: 74 65 20 68 61 73 20 62 65 65 6e 20 63 6f 6d 70  te has been comp
2ce0: 69 6c 65 64 20 77 69 74 68 20 53 51 4c 49 54 45  iled with SQLITE
2cf0: 5f 54 48 52 45 41 44 53 41 46 45 3d 31 20 6f 72  _THREADSAFE=1 or
2d00: 0a 20 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44  .  SQLITE_THREAD
2d10: 53 41 46 45 3d 32 20 74 68 65 6e 20 74 68 65 20  SAFE=2 then the 
2d20: 5b 74 68 72 65 61 64 69 6e 67 20 6d 6f 64 65 5d  [threading mode]
2d30: 0a 20 20 63 61 6e 20 62 65 20 61 6c 74 65 72 65  .  can be altere
2d40: 64 20 61 74 20 72 75 6e 2d 74 69 6d 65 20 75 73  d at run-time us
2d50: 69 6e 67 20 74 68 65 20 5b 73 71 6c 69 74 65 33  ing the [sqlite3
2d60: 5f 63 6f 6e 66 69 67 28 29 5d 20 69 6e 74 65 72  _config()] inter
2d70: 66 61 63 65 20 74 6f 67 65 74 68 65 72 0a 20 20  face together.  
2d80: 77 69 74 68 20 6f 6e 65 20 6f 66 20 74 68 65 73  with one of thes
2d90: 65 20 76 65 72 62 73 3a 0a 0a 20 20 3c 75 6c 3e  e verbs:..  <ul>
2da0: 0a 20 20 3c 6c 69 3e 5b 53 51 4c 49 54 45 5f 43  .  <li>[SQLITE_C
2db0: 4f 4e 46 49 47 5f 53 49 4e 47 4c 45 54 48 52 45  ONFIG_SINGLETHRE
2dc0: 41 44 5d 0a 20 20 3c 6c 69 3e 5b 53 51 4c 49 54  AD].  <li>[SQLIT
2dd0: 45 5f 43 4f 4e 46 49 47 5f 4d 55 4c 54 49 54 48  E_CONFIG_MULTITH
2de0: 52 45 41 44 5d 0a 20 20 3c 6c 69 3e 5b 53 51 4c  READ].  <li>[SQL
2df0: 49 54 45 5f 43 4f 4e 46 49 47 5f 53 45 52 49 41  ITE_CONFIG_SERIA
2e00: 4c 49 5a 45 44 5d 0a 20 20 3c 2f 75 6c 3e 0a 0a  LIZED].  </ul>..
2e10: 20 20 54 68 65 20 5b 53 51 4c 49 54 45 5f 4f 50    The [SQLITE_OP
2e20: 45 4e 5f 4e 4f 4d 55 54 45 58 5d 20 61 6e 64 0a  EN_NOMUTEX] and.
2e30: 20 20 5b 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 46    [SQLITE_OPEN_F
2e40: 55 4c 4c 4d 55 54 45 58 5d 20 66 6c 61 67 73 20  ULLMUTEX] flags 
2e50: 74 6f 20 5b 73 71 6c 69 74 65 33 5f 6f 70 65 6e  to [sqlite3_open
2e60: 5f 76 32 28 29 5d 20 63 61 6e 20 61 6c 73 6f 20  _v2()] can also 
2e70: 62 65 20 75 73 65 64 0a 20 20 74 6f 20 61 64 6a  be used.  to adj
2e80: 75 73 74 20 74 68 65 20 5b 74 68 72 65 61 64 69  ust the [threadi
2e90: 6e 67 20 6d 6f 64 65 5d 20 6f 66 20 69 6e 64 69  ng mode] of indi
2ea0: 76 69 64 75 61 6c 20 5b 64 61 74 61 62 61 73 65  vidual [database
2eb0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 5d 0a 20 20   connections].  
2ec0: 61 74 20 72 75 6e 2d 74 69 6d 65 2e 0a 0a 20 20  at run-time...  
2ed0: 4e 6f 74 65 20 74 68 61 74 20 77 68 65 6e 20 53  Note that when S
2ee0: 51 4c 69 74 65 20 69 73 20 63 6f 6d 70 69 6c 65  QLite is compile
2ef0: 64 20 77 69 74 68 20 53 51 4c 49 54 45 5f 54 48  d with SQLITE_TH
2f00: 52 45 41 44 53 41 46 45 3d 30 2c 20 74 68 65 20  READSAFE=0, the 
2f10: 63 6f 64 65 0a 20 20 74 6f 20 6d 61 6b 65 20 53  code.  to make S
2f20: 51 4c 69 74 65 20 74 68 72 65 61 64 73 61 66 65  QLite threadsafe
2f30: 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d   is omitted from
2f40: 20 74 68 65 20 62 75 69 6c 64 2e 20 20 57 68 65   the build.  Whe
2f50: 6e 20 74 68 69 73 20 6f 63 63 75 72 73 2c 0a 20  n this occurs,. 
2f60: 20 69 74 20 69 73 20 69 6d 70 6f 73 73 69 62 6c   it is impossibl
2f70: 65 20 74 6f 20 63 68 61 6e 67 65 20 74 68 65 20  e to change the 
2f80: 5b 74 68 72 65 61 64 69 6e 67 20 6d 6f 64 65 5d  [threading mode]
2f90: 20 61 74 20 73 74 61 72 74 2d 74 69 6d 65 20 6f   at start-time o
2fa0: 72 20 72 75 6e 2d 74 69 6d 65 2e 0a 0a 20 20 53  r run-time...  S
2fb0: 65 65 20 74 68 65 20 5b 74 68 72 65 61 64 69 6e  ee the [threadin
2fc0: 67 20 6d 6f 64 65 5d 20 64 6f 63 75 6d 65 6e 74  g mode] document
2fd0: 61 74 69 6f 6e 20 66 6f 72 20 61 64 64 69 74 69  ation for additi
2fe0: 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
2ff0: 0a 20 20 6f 6e 20 61 73 70 65 63 74 73 20 6f 66  .  on aspects of
3000: 20 75 73 69 6e 67 20 53 51 4c 69 74 65 20 69 6e   using SQLite in
3010: 20 61 20 6d 75 6c 74 69 74 68 72 65 61 64 65 64   a multithreaded
3020: 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 2e 0a 7d 0a   environment..}.
3030: 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20  .COMPILE_OPTION 
3040: 7b 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f  {SQLITE_TEMP_STO
3050: 52 45 3d 3c 69 3e 26 6c 74 3b 30 20 74 68 72 6f  RE=<i>&lt;0 thro
3060: 75 67 68 20 33 26 67 74 3b 3c 2f 69 3e 7d 20 7b  ugh 3&gt;</i>} {
3070: 0a 20 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 63  .  This option c
3080: 6f 6e 74 72 6f 6c 73 20 77 68 65 74 68 65 72 20  ontrols whether 
3090: 74 65 6d 70 6f 72 61 72 79 20 66 69 6c 65 73 20  temporary files 
30a0: 61 72 65 20 73 74 6f 72 65 64 20 6f 6e 20 64 69  are stored on di
30b0: 73 6b 20 6f 72 0a 20 20 69 6e 20 6d 65 6d 6f 72  sk or.  in memor
30c0: 79 2e 20 20 54 68 65 20 6d 65 61 6e 69 6e 67 73  y.  The meanings
30d0: 20 66 6f 72 20 76 61 72 69 6f 75 73 20 73 65 74   for various set
30e0: 74 69 6e 67 73 20 6f 66 20 74 68 69 73 20 63 6f  tings of this co
30f0: 6d 70 69 6c 65 2d 74 69 6d 65 0a 20 20 6f 70 74  mpile-time.  opt
3100: 69 6f 6e 20 61 72 65 20 61 73 20 66 6f 6c 6c 6f  ion are as follo
3110: 77 73 3a 0a 0a 20 20 3c 74 61 62 6c 65 20 63 65  ws:..  <table ce
3120: 6c 6c 70 61 64 64 69 6e 67 3d 22 32 22 20 62 6f  llpadding="2" bo
3130: 72 64 65 72 3d 22 31 22 3e 0a 20 20 3c 74 72 3e  rder="1">.  <tr>
3140: 3c 74 68 3e 53 51 4c 49 54 45 5f 54 45 4d 50 5f  <th>SQLITE_TEMP_
3150: 53 54 4f 52 45 3c 2f 74 68 3e 3c 74 68 3e 4d 65  STORE</th><th>Me
3160: 61 6e 69 6e 67 3c 2f 74 68 3e 3c 2f 74 72 3e 0a  aning</th></tr>.
3170: 20 20 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d    <tr><td align=
3180: 22 63 65 6e 74 65 72 22 3e 30 3c 2f 74 64 3e 3c  "center">0</td><
3190: 74 64 3e 41 6c 77 61 79 73 20 75 73 65 20 74 65  td>Always use te
31a0: 6d 70 6f 72 61 72 79 20 66 69 6c 65 73 3c 2f 74  mporary files</t
31b0: 64 3e 3c 2f 74 72 3e 0a 20 20 3c 74 72 3e 3c 74  d></tr>.  <tr><t
31c0: 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
31d0: 3e 31 3c 2f 74 64 3e 3c 74 64 3e 55 73 65 20 66  >1</td><td>Use f
31e0: 69 6c 65 73 20 62 79 20 64 65 66 61 75 6c 74 20  iles by default 
31f0: 62 75 74 20 61 6c 6c 6f 77 20 74 68 65 0a 20 20  but allow the.  
3200: 5b 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f  [PRAGMA temp_sto
3210: 72 65 5d 20 63 6f 6d 6d 61 6e 64 20 74 6f 20 6f  re] command to o
3220: 76 65 72 72 69 64 65 3c 2f 74 64 3e 3c 2f 74 72  verride</td></tr
3230: 3e 0a 20 20 3c 74 72 3e 3c 74 64 20 61 6c 69 67  >.  <tr><td alig
3240: 6e 3d 22 63 65 6e 74 65 72 22 3e 32 3c 2f 74 64  n="center">2</td
3250: 3e 3c 74 64 3e 55 73 65 20 6d 65 6d 6f 72 79 20  ><td>Use memory 
3260: 62 79 20 64 65 66 61 75 6c 74 20 62 75 74 20 61  by default but a
3270: 6c 6c 6f 77 20 74 68 65 0a 20 20 5b 50 52 41 47  llow the.  [PRAG
3280: 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 5d 20 63  MA temp_store] c
3290: 6f 6d 6d 61 6e 64 20 74 6f 20 6f 76 65 72 72 69  ommand to overri
32a0: 64 65 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 20 20 3c  de</td></tr>.  <
32b0: 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  tr><td align="ce
32c0: 6e 74 65 72 22 3e 33 3c 2f 74 64 3e 3c 74 64 3e  nter">3</td><td>
32d0: 41 6c 77 61 79 73 20 75 73 65 20 6d 65 6d 6f 72  Always use memor
32e0: 79 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 20 20 3c 2f  y</td></tr>.  </
32f0: 74 61 62 6c 65 3e 0a 0a 20 20 54 68 65 20 64 65  table>..  The de
3300: 66 61 75 6c 74 20 73 65 74 74 69 6e 67 20 69 73  fault setting is
3310: 20 31 2e 20 20 0a 20 20 41 64 64 69 74 69 6f 6e   1.  .  Addition
3320: 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 63  al information c
3330: 61 6e 20 62 65 20 66 6f 75 6e 64 20 69 6e 20 5b  an be found in [
3340: 74 65 6d 70 73 74 6f 72 65 20 7c 20 74 65 6d 70  tempstore | temp
3350: 66 69 6c 65 73 2e 68 74 6d 6c 5d 2e 0a 7d 0a 0a  files.html]..}..
3360: 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b  COMPILE_OPTION {
3370: 53 51 4c 49 54 45 5f 55 53 45 5f 55 52 49 7d 20  SQLITE_USE_URI} 
3380: 7b 0a 20 20 54 68 69 73 20 6f 70 74 69 6f 6e 20  {.  This option 
3390: 63 61 75 73 65 73 20 74 68 65 20 5b 55 52 49 20  causes the [URI 
33a0: 66 69 6c 65 6e 61 6d 65 5d 20 70 72 6f 63 65 73  filename] proces
33b0: 73 20 6c 6f 67 69 63 20 74 6f 20 62 65 20 65 6e  s logic to be en
33c0: 61 62 6c 65 64 20 62 79 20 0a 20 20 64 65 66 61  abled by .  defa
33d0: 75 6c 74 2e 20 20 0a 7d 0a 0a 3c 2f 74 63 6c 3e  ult.  .}..</tcl>
33e0: 0a 0a 3c 61 20 6e 61 6d 65 3d 22 65 6e 61 62 6c  ..<a name="enabl
33f0: 65 66 65 61 74 75 72 65 73 22 3e 3c 2f 61 3e 0a  efeatures"></a>.
3400: 3c 68 32 3e 31 2e 34 20 4f 70 74 69 6f 6e 73 20  <h2>1.4 Options 
3410: 54 6f 20 45 6e 61 62 6c 65 20 46 65 61 74 75 72  To Enable Featur
3420: 65 73 20 4e 6f 72 6d 61 6c 6c 79 20 54 75 72 6e  es Normally Turn
3430: 65 64 20 4f 66 66 3c 2f 68 32 3e 0a 0a 3c 74 63  ed Off</h2>..<tc
3440: 6c 3e 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f  l>.COMPILE_OPTIO
3450: 4e 20 7b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  N {SQLITE_ENABLE
3460: 5f 38 5f 33 5f 4e 41 4d 45 53 3d 3c 69 3e 26 6c  _8_3_NAMES=<i>&l
3470: 74 3b 31 20 6f 72 20 32 26 67 74 3b 3c 2f 69 3e  t;1 or 2&gt;</i>
3480: 7d 20 7b 0a 20 20 49 66 20 74 68 69 73 20 43 2d  } {.  If this C-
3490: 70 72 65 70 72 6f 63 65 73 73 6f 72 20 6d 61 63  preprocessor mac
34a0: 72 6f 20 69 73 20 64 65 66 69 6e 65 64 2c 20 74  ro is defined, t
34b0: 68 65 6e 20 65 78 74 72 61 20 63 6f 64 65 20 69  hen extra code i
34c0: 73 0a 20 20 69 6e 63 6c 75 64 65 64 20 74 68 61  s.  included tha
34d0: 74 20 61 6c 6c 6f 77 73 20 53 51 4c 69 74 65 20  t allows SQLite 
34e0: 74 6f 20 66 75 6e 63 74 69 6f 6e 20 6f 6e 20 61  to function on a
34f0: 20 66 69 6c 65 73 79 73 74 65 6d 20 74 68 61 74   filesystem that
3500: 0a 20 20 6f 6e 6c 79 20 73 75 70 70 6f 72 74 20  .  only support 
3510: 38 2b 33 20 66 69 6c 65 6e 61 6d 65 73 2e 20 20  8+3 filenames.  
3520: 49 66 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  If the value of 
3530: 74 68 69 73 20 6d 61 63 72 6f 20 69 73 20 31 2c  this macro is 1,
3540: 0a 20 20 74 68 65 6e 20 74 68 65 20 64 65 66 61  .  then the defa
3550: 75 6c 74 20 62 65 68 61 76 69 6f 72 20 69 73 20  ult behavior is 
3560: 74 6f 20 63 6f 6e 74 69 6e 75 65 20 74 6f 20 75  to continue to u
3570: 73 65 20 6c 6f 6e 67 20 66 69 6c 65 6e 61 6d 65  se long filename
3580: 73 20 61 6e 64 0a 20 20 74 6f 20 6f 6e 6c 79 20  s and.  to only 
3590: 75 73 65 20 38 2b 33 20 66 69 6c 65 6e 61 6d 65  use 8+3 filename
35a0: 73 20 69 66 20 74 68 65 20 0a 20 20 64 61 74 61  s if the .  data
35b0: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
35c0: 69 73 20 6f 70 65 6e 65 64 20 75 73 69 6e 67 20  is opened using 
35d0: 5b 55 52 49 20 66 69 6c 65 6e 61 6d 65 73 5d 20  [URI filenames] 
35e0: 77 69 74 68 0a 20 20 74 68 65 20 22 3c 74 74 3e  with.  the "<tt>
35f0: 38 5f 33 5f 6e 61 6d 65 73 3d 31 3c 2f 74 74 3e  8_3_names=1</tt>
3600: 22 20 71 75 65 72 79 20 70 61 72 61 6d 65 74 65  " query paramete
3610: 72 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65  r.  If the value
3620: 20 6f 66 0a 20 20 74 68 69 73 20 6d 61 63 72 6f   of.  this macro
3630: 20 69 73 20 32 2c 20 74 68 65 6e 20 74 68 65 20   is 2, then the 
3640: 75 73 65 20 6f 66 20 38 2b 33 20 66 69 6c 65 6e  use of 8+3 filen
3650: 61 6d 65 73 20 62 65 63 6f 6d 65 73 20 74 68 65  ames becomes the
3660: 20 64 65 66 61 75 6c 74 0a 20 20 62 75 74 20 6d   default.  but m
3670: 61 79 20 62 65 20 64 69 73 61 62 6c 65 64 20 6f  ay be disabled o
3680: 6e 20 75 73 69 6e 67 20 74 68 65 20 3c 74 74 3e  n using the <tt>
3690: 38 5f 33 5f 6e 61 6d 65 73 3d 30 3c 2f 74 74 3e  8_3_names=0</tt>
36a0: 20 71 75 65 72 79 20 70 61 72 61 6d 65 74 65 72   query parameter
36b0: 2e 0a 20 20 53 65 65 20 0a 7d 0a 0a 43 4f 4d 50  ..  See .}..COMP
36c0: 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49  ILE_OPTION {SQLI
36d0: 54 45 5f 45 4e 41 42 4c 45 5f 41 54 4f 4d 49 43  TE_ENABLE_ATOMIC
36e0: 5f 57 52 49 54 45 7d 20 7b 0a 20 20 49 66 20 74  _WRITE} {.  If t
36f0: 68 69 73 20 43 2d 70 72 65 70 72 6f 63 65 73 73  his C-preprocess
3700: 6f 72 20 6d 61 63 72 6f 20 69 73 20 64 65 66 69  or macro is defi
3710: 6e 65 64 20 61 6e 64 20 69 66 20 74 68 65 0a 20  ned and if the. 
3720: 20 78 44 65 76 69 63 65 43 68 61 72 61 63 74 65   xDeviceCharacte
3730: 72 69 73 74 69 63 73 20 6d 65 74 68 6f 64 20 6f  ristics method o
3740: 66 20 5b 73 71 6c 69 74 65 33 5f 69 6f 5f 6d 65  f [sqlite3_io_me
3750: 74 68 6f 64 73 5d 20 6f 62 6a 65 63 74 20 66 6f  thods] object fo
3760: 72 0a 20 20 61 20 64 61 74 61 62 61 73 65 20 66  r.  a database f
3770: 69 6c 65 20 72 65 70 6f 72 74 73 20 28 76 69 61  ile reports (via
3780: 20 6f 6e 65 20 6f 66 20 74 68 65 20 5b 53 51 4c   one of the [SQL
3790: 49 54 45 5f 49 4f 43 41 50 5f 41 54 4f 4d 49 43  ITE_IOCAP_ATOMIC
37a0: 5d 20 62 69 74 73 29 0a 20 20 74 68 61 74 20 74  ] bits).  that t
37b0: 68 65 20 66 69 6c 65 73 79 73 74 65 6d 20 73 75  he filesystem su
37c0: 70 70 6f 72 74 73 20 61 74 6f 6d 69 63 20 77 72  pports atomic wr
37d0: 69 74 65 73 20 61 6e 64 20 69 66 20 61 20 74 72  ites and if a tr
37e0: 61 6e 73 61 63 74 69 6f 6e 0a 20 20 69 6e 76 6f  ansaction.  invo
37f0: 6c 76 65 73 20 61 20 63 68 61 6e 67 65 20 74 6f  lves a change to
3800: 20 6f 6e 6c 79 20 61 20 73 69 6e 67 6c 65 20 70   only a single p
3810: 61 67 65 20 6f 66 20 74 68 65 20 64 61 74 61 62  age of the datab
3820: 61 73 65 20 66 69 6c 65 2c 0a 20 20 74 68 65 6e  ase file,.  then
3830: 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
3840: 20 63 6f 6d 6d 69 74 73 20 77 69 74 68 20 6a 75   commits with ju
3850: 73 74 20 61 20 73 69 6e 67 6c 65 20 77 72 69 74  st a single writ
3860: 65 20 72 65 71 75 65 73 74 20 6f 66 0a 20 20 61  e request of.  a
3870: 20 73 69 6e 67 6c 65 20 70 61 67 65 20 6f 66 20   single page of 
3880: 74 68 65 20 64 61 74 61 62 61 73 65 20 61 6e 64  the database and
3890: 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75   no rollback jou
38a0: 72 6e 61 6c 20 69 73 20 63 72 65 61 74 65 64 0a  rnal is created.
38b0: 20 20 6f 72 20 77 72 69 74 74 65 6e 2e 20 20 4f    or written.  O
38c0: 6e 20 66 69 6c 65 73 79 73 74 65 6d 73 20 74 68  n filesystems th
38d0: 61 74 20 73 75 70 70 6f 72 74 20 61 74 6f 6d 69  at support atomi
38e0: 63 20 77 72 69 74 65 73 2c 20 74 68 69 73 0a 20  c writes, this. 
38f0: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 63 61   optimization ca
3900: 6e 20 72 65 73 75 6c 74 20 69 6e 20 73 69 67 6e  n result in sign
3910: 69 66 69 63 61 6e 74 20 73 70 65 65 64 20 69 6d  ificant speed im
3920: 70 72 6f 76 65 6d 65 6e 74 73 20 66 6f 72 0a 20  provements for. 
3930: 20 73 6d 61 6c 6c 20 75 70 64 61 74 65 73 2e 20   small updates. 
3940: 20 48 6f 77 65 76 65 72 2c 20 66 65 77 20 66 69   However, few fi
3950: 6c 65 73 79 73 74 65 6d 73 20 73 75 70 70 6f 72  lesystems suppor
3960: 74 20 74 68 69 73 20 63 61 70 61 62 69 6c 69 74  t this capabilit
3970: 79 0a 20 20 61 6e 64 20 74 68 65 20 63 6f 64 65  y.  and the code
3980: 20 70 61 74 68 73 20 74 68 61 74 20 63 68 65 63   paths that chec
3990: 6b 20 66 6f 72 20 74 68 69 73 20 63 61 70 61 62  k for this capab
39a0: 69 6c 69 74 79 20 73 6c 6f 77 20 64 6f 77 6e 20  ility slow down 
39b0: 77 72 69 74 65 0a 20 20 70 65 72 66 6f 72 6d 61  write.  performa
39c0: 6e 63 65 20 6f 6e 20 73 79 73 74 65 6d 73 20 74  nce on systems t
39d0: 68 61 74 20 6c 61 63 6b 20 61 74 6f 6d 69 63 20  hat lack atomic 
39e0: 77 72 69 74 65 20 63 61 70 61 62 69 6c 69 74 79  write capability
39f0: 2c 20 73 6f 20 74 68 69 73 0a 20 20 66 65 61 74  , so this.  feat
3a00: 75 72 65 20 69 73 20 64 69 73 61 62 6c 65 64 20  ure is disabled 
3a10: 62 79 20 64 65 66 61 75 6c 74 2e 0a 7d 0a 0a 43  by default..}..C
3a20: 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53  OMPILE_OPTION {S
3a30: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c  QLITE_ENABLE_COL
3a40: 55 4d 4e 5f 4d 45 54 41 44 41 54 41 7d 20 7b 0a  UMN_METADATA} {.
3a50: 20 20 57 68 65 6e 20 74 68 69 73 20 43 2d 70 72    When this C-pr
3a60: 65 70 72 6f 63 65 73 73 6f 72 20 6d 61 63 72 6f  eprocessor macro
3a70: 20 69 73 20 64 65 66 69 6e 65 64 2c 20 53 51 4c   is defined, SQL
3a80: 69 74 65 20 69 6e 63 6c 75 64 65 73 20 73 6f 6d  ite includes som
3a90: 65 0a 20 20 61 64 64 69 74 69 6f 6e 61 6c 20 41  e.  additional A
3aa0: 50 49 73 20 74 68 61 74 20 70 72 6f 76 69 64 65  PIs that provide
3ab0: 20 63 6f 6e 76 65 6e 69 65 6e 74 20 61 63 63 65   convenient acce
3ac0: 73 73 20 74 6f 20 6d 65 74 61 2d 64 61 74 61 20  ss to meta-data 
3ad0: 61 62 6f 75 74 0a 20 20 74 61 62 6c 65 73 20 61  about.  tables a
3ae0: 6e 64 20 71 75 65 72 69 65 73 2e 20 20 54 68 65  nd queries.  The
3af0: 20 41 50 49 73 20 74 68 61 74 20 61 72 65 20 65   APIs that are e
3b00: 6e 61 62 6c 65 64 20 62 79 20 74 68 69 73 20 6f  nabled by this o
3b10: 70 74 69 6f 6e 20 61 72 65 3a 0a 0a 20 20 3c 75  ption are:..  <u
3b20: 6c 3e 0a 20 20 3c 6c 69 3e 20 5b 73 71 6c 69 74  l>.  <li> [sqlit
3b30: 65 33 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61 62 61  e3_column_databa
3b40: 73 65 5f 6e 61 6d 65 28 29 5d 20 3c 2f 6c 69 3e  se_name()] </li>
3b50: 0a 20 20 3c 6c 69 3e 20 5b 73 71 6c 69 74 65 33  .  <li> [sqlite3
3b60: 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61 62 61 73 65  _column_database
3b70: 5f 6e 61 6d 65 31 36 28 29 5d 20 3c 2f 6c 69 3e  _name16()] </li>
3b80: 0a 20 20 3c 6c 69 3e 20 5b 73 71 6c 69 74 65 33  .  <li> [sqlite3
3b90: 5f 63 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61  _column_table_na
3ba0: 6d 65 28 29 5d 20 3c 2f 6c 69 3e 0a 20 20 3c 6c  me()] </li>.  <l
3bb0: 69 3e 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75  i> [sqlite3_colu
3bc0: 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65 31 36 28  mn_table_name16(
3bd0: 29 5d 20 3c 2f 6c 69 3e 0a 20 20 3c 6c 69 3e 20  )] </li>.  <li> 
3be0: 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  [sqlite3_column_
3bf0: 6f 72 69 67 69 6e 5f 6e 61 6d 65 28 29 5d 20 3c  origin_name()] <
3c00: 2f 6c 69 3e 0a 20 20 3c 6c 69 3e 20 5b 73 71 6c  /li>.  <li> [sql
3c10: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67  ite3_column_orig
3c20: 69 6e 5f 6e 61 6d 65 31 36 28 29 5d 20 3c 2f 6c  in_name16()] </l
3c30: 69 3e 0a 20 20 3c 6c 69 3e 20 5b 73 71 6c 69 74  i>.  <li> [sqlit
3c40: 65 33 5f 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e 5f  e3_table_column_
3c50: 6d 65 74 61 64 61 74 61 28 29 5d 20 3c 2f 6c 69  metadata()] </li
3c60: 3e 0a 20 20 3c 2f 75 6c 3e 0a 7d 0a 0a 43 4f 4d  >.  </ul>.}..COM
3c70: 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c  PILE_OPTION {SQL
3c80: 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 7d  ITE_ENABLE_FTS3}
3c90: 20 7b 0a 20 20 57 68 65 6e 20 74 68 69 73 20 6f   {.  When this o
3ca0: 70 74 69 6f 6e 20 69 73 20 64 65 66 69 6e 65 64  ption is defined
3cb0: 20 69 6e 20 74 68 65 20 5b 61 6d 61 6c 67 61 6d   in the [amalgam
3cc0: 61 74 69 6f 6e 5d 2c 20 76 65 72 73 69 6f 6e 20  ation], version 
3cd0: 33 0a 20 20 6f 66 20 74 68 65 20 66 75 6c 6c 2d  3.  of the full-
3ce0: 74 65 78 74 20 73 65 61 72 63 68 20 65 6e 67 69  text search engi
3cf0: 6e 65 20 69 73 20 61 64 64 65 64 20 74 6f 20 74  ne is added to t
3d00: 68 65 20 62 75 69 6c 64 20 61 75 74 6f 6d 61 74  he build automat
3d10: 69 63 61 6c 6c 79 2e 0a 7d 0a 0a 43 4f 4d 50 49  ically..}..COMPI
3d20: 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54  LE_OPTION {SQLIT
3d30: 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 5f 50 41  E_ENABLE_FTS3_PA
3d40: 52 45 4e 54 48 45 53 49 53 7d 20 7b 0a 20 20 54  RENTHESIS} {.  T
3d50: 68 69 73 20 6f 70 74 69 6f 6e 20 6d 6f 64 69 66  his option modif
3d60: 69 65 73 20 74 68 65 20 71 75 65 72 79 20 70 61  ies the query pa
3d70: 74 74 65 72 6e 20 70 61 72 73 65 72 20 69 6e 20  ttern parser in 
3d80: 46 54 53 33 20 73 75 63 68 20 74 68 61 74 20 69  FTS3 such that i
3d90: 74 0a 20 20 73 75 70 70 6f 72 74 73 20 6f 70 65  t.  supports ope
3da0: 72 61 74 6f 72 73 20 41 4e 44 20 61 6e 64 20 4e  rators AND and N
3db0: 4f 54 20 28 69 6e 20 61 64 64 69 74 69 6f 6e 20  OT (in addition 
3dc0: 74 6f 20 74 68 65 20 75 73 75 61 6c 20 4f 52 20  to the usual OR 
3dd0: 61 6e 64 20 4e 45 41 52 29 0a 20 20 61 6e 64 20  and NEAR).  and 
3de0: 61 6c 73 6f 20 61 6c 6c 6f 77 73 20 71 75 65 72  also allows quer
3df0: 79 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74 6f  y expressions to
3e00: 20 63 6f 6e 74 61 69 6e 20 6e 65 73 74 65 64 20   contain nested 
3e10: 70 61 72 65 6e 74 68 65 73 69 73 2e 0a 7d 0a 0a  parenthesis..}..
3e20: 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b  COMPILE_OPTION {
3e30: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
3e40: 53 34 7d 20 7b 0a 20 20 57 68 65 6e 20 74 68 69  S4} {.  When thi
3e50: 73 20 6f 70 74 69 6f 6e 20 69 73 20 64 65 66 69  s option is defi
3e60: 6e 65 64 20 69 6e 20 74 68 65 20 5b 61 6d 61 6c  ned in the [amal
3e70: 67 61 6d 61 74 69 6f 6e 5d 2c 20 76 65 72 73 69  gamation], versi
3e80: 6f 6e 73 20 33 20 61 6e 64 20 34 0a 20 20 6f 66  ons 3 and 4.  of
3e90: 20 74 68 65 20 66 75 6c 6c 2d 74 65 78 74 20 73   the full-text s
3ea0: 65 61 72 63 68 20 65 6e 67 69 6e 65 20 69 73 20  earch engine is 
3eb0: 61 64 64 65 64 20 74 6f 20 74 68 65 20 62 75 69  added to the bui
3ec0: 6c 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  ld automatically
3ed0: 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54  ..}..COMPILE_OPT
3ee0: 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 45 4e 41 42  ION {SQLITE_ENAB
3ef0: 4c 45 5f 49 43 55 7d 20 7b 0a 20 20 54 68 69 73  LE_ICU} {.  This
3f00: 20 6f 70 74 69 6f 6e 20 63 61 75 73 65 73 20 74   option causes t
3f10: 68 65 20 0a 20 20 5b 68 74 74 70 3a 2f 2f 77 77  he .  [http://ww
3f20: 77 2e 69 63 75 2d 70 72 6f 6a 65 63 74 2e 6f 72  w.icu-project.or
3f30: 67 2f 20 7c 20 49 6e 74 65 72 6e 61 74 69 6f 6e  g/ | Internation
3f40: 61 6c 20 43 6f 6d 70 6f 6e 65 6e 74 73 20 66 6f  al Components fo
3f50: 72 20 55 6e 69 63 6f 64 65 5d 0a 20 20 6f 72 20  r Unicode].  or 
3f60: 22 49 43 55 22 20 65 78 74 65 6e 73 69 6f 6e 20  "ICU" extension 
3f70: 74 6f 20 53 51 4c 69 74 65 20 74 6f 20 62 65 20  to SQLite to be 
3f80: 61 64 64 65 64 20 74 6f 20 74 68 65 20 62 75 69  added to the bui
3f90: 6c 64 2e 20 20 0a 7d 0a 0a 43 4f 4d 50 49 4c 45  ld.  .}..COMPILE
3fa0: 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f  _OPTION {SQLITE_
3fb0: 45 4e 41 42 4c 45 5f 49 4f 54 52 41 43 45 7d 20  ENABLE_IOTRACE} 
3fc0: 7b 0a 20 20 57 68 65 6e 20 62 6f 74 68 20 74 68  {.  When both th
3fd0: 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 61 6e  e SQLite core an
3fe0: 64 20 74 68 65 20 5b 43 6f 6d 6d 61 6e 64 20 4c  d the [Command L
3ff0: 69 6e 65 20 49 6e 74 65 72 66 61 63 65 5d 20 28  ine Interface] (
4000: 43 4c 49 29 20 61 72 65 20 62 6f 74 68 20 0a 20  CLI) are both . 
4010: 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 74   compiled with t
4020: 68 69 73 20 6f 70 74 69 6f 6e 2c 20 74 68 65 6e  his option, then
4030: 20 74 68 65 20 43 4c 49 20 70 72 6f 76 69 64 65   the CLI provide
4040: 73 20 61 6e 20 65 78 74 72 61 20 63 6f 6d 6d 61  s an extra comma
4050: 6e 64 0a 20 20 6e 61 6d 65 64 20 22 2e 69 6f 74  nd.  named ".iot
4060: 72 61 63 65 22 20 74 68 61 74 20 70 72 6f 76 69  race" that provi
4070: 64 65 73 20 61 20 6c 6f 77 2d 6c 65 76 65 6c 20  des a low-level 
4080: 6c 6f 67 20 6f 66 20 49 2f 4f 20 61 63 74 69 76  log of I/O activ
4090: 69 74 79 2e 0a 20 20 54 68 69 73 20 6f 70 74 69  ity..  This opti
40a0: 6f 6e 20 69 73 20 65 78 70 65 72 69 6d 65 6e 74  on is experiment
40b0: 61 6c 20 61 6e 64 20 6d 61 79 20 62 65 20 64 69  al and may be di
40c0: 73 63 6f 6e 74 69 6e 75 65 64 20 69 6e 20 61 20  scontinued in a 
40d0: 66 75 74 75 72 65 20 72 65 6c 65 61 73 65 2e 0a  future release..
40e0: 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f  }..COMPILE_OPTIO
40f0: 4e 20 7b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  N {SQLITE_ENABLE
4100: 5f 4c 4f 43 4b 49 4e 47 5f 53 54 59 4c 45 7d 20  _LOCKING_STYLE} 
4110: 7b 0a 20 20 54 68 69 73 20 6f 70 74 69 6f 6e 20  {.  This option 
4120: 65 6e 61 62 6c 65 73 20 61 64 64 69 74 69 6f 6e  enables addition
4130: 61 6c 20 6c 6f 67 69 63 20 69 6e 20 74 68 65 20  al logic in the 
4140: 4f 53 20 69 6e 74 65 72 66 61 63 65 20 6c 61 79  OS interface lay
4150: 65 72 20 66 6f 72 0a 20 20 4d 61 63 20 4f 53 20  er for.  Mac OS 
4160: 58 2e 20 54 68 65 20 61 64 64 69 74 69 6f 6e 61  X. The additiona
4170: 6c 20 6c 6f 67 69 63 20 61 74 74 65 6d 70 74 73  l logic attempts
4180: 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68   to determine th
4190: 65 20 74 79 70 65 20 6f 66 20 74 68 65 0a 20 20  e type of the.  
41a0: 75 6e 64 65 72 6c 79 69 6e 67 20 66 69 6c 65 73  underlying files
41b0: 79 73 74 65 6d 20 61 6e 64 20 63 68 6f 6f 73 65  ystem and choose
41c0: 20 61 6e 64 20 61 6c 74 65 72 6e 61 74 69 76 65   and alternative
41d0: 20 6c 6f 63 6b 69 6e 67 20 73 74 72 61 74 65 67   locking strateg
41e0: 79 0a 20 20 74 68 61 74 20 77 6f 72 6b 73 20 63  y.  that works c
41f0: 6f 72 72 65 63 74 6c 79 20 66 6f 72 20 74 68 61  orrectly for tha
4200: 74 20 66 69 6c 65 73 79 73 74 65 6d 20 74 79 70  t filesystem typ
4210: 65 2e 20 46 69 76 65 20 6c 6f 63 6b 69 6e 67 20  e. Five locking 
4220: 73 74 72 61 74 65 67 69 65 73 20 0a 20 20 61 72  strategies .  ar
4230: 65 20 61 76 61 69 6c 61 62 6c 65 3a 0a 0a 20 20  e available:..  
4240: 3c 75 6c 3e 0a 20 20 20 20 3c 6c 69 3e 20 50 4f  <ul>.    <li> PO
4250: 53 49 58 20 6c 6f 63 6b 69 6e 67 20 73 74 79 6c  SIX locking styl
4260: 65 2e 20 54 68 69 73 20 69 73 20 74 68 65 20 64  e. This is the d
4270: 65 66 61 75 6c 74 20 6c 6f 63 6b 69 6e 67 20 73  efault locking s
4280: 74 79 6c 65 20 61 6e 64 20 74 68 65 0a 20 20 20  tyle and the.   
4290: 20 20 20 20 20 20 73 74 79 6c 65 20 75 73 65 64        style used
42a0: 20 62 79 20 6f 74 68 65 72 20 28 6e 6f 6e 20 4d   by other (non M
42b0: 61 63 20 4f 53 20 58 29 20 55 6e 69 78 65 73 2e  ac OS X) Unixes.
42c0: 20 4c 6f 63 6b 73 20 61 72 65 20 6f 62 74 61 69   Locks are obtai
42d0: 6e 65 64 20 61 6e 64 20 0a 20 20 20 20 20 20 20  ned and .       
42e0: 20 20 72 65 6c 65 61 73 65 64 20 75 73 69 6e 67    released using
42f0: 20 74 68 65 20 66 63 6e 74 6c 28 29 20 73 79 73   the fcntl() sys
4300: 74 65 6d 20 63 61 6c 6c 2e 0a 0a 20 20 20 20 3c  tem call...    <
4310: 6c 69 3e 20 41 46 50 20 6c 6f 63 6b 69 6e 67 20  li> AFP locking 
4320: 73 74 79 6c 65 2e 20 54 68 69 73 20 6c 6f 63 6b  style. This lock
4330: 69 6e 67 20 73 74 79 6c 65 20 69 73 20 75 73 65  ing style is use
4340: 64 20 66 6f 72 20 6e 65 74 77 6f 72 6b 20 66 69  d for network fi
4350: 6c 65 20 0a 20 20 20 20 20 20 20 20 20 73 79 73  le .         sys
4360: 74 65 6d 73 20 74 68 61 74 20 75 73 65 20 74 68  tems that use th
4370: 65 20 41 46 50 20 28 41 70 70 6c 65 20 46 69 6c  e AFP (Apple Fil
4380: 69 6e 67 20 50 72 6f 74 6f 63 6f 6c 29 20 70 72  ing Protocol) pr
4390: 6f 74 6f 63 6f 6c 2e 20 4c 6f 63 6b 73 0a 20 20  otocol. Locks.  
43a0: 20 20 20 20 20 20 20 61 72 65 20 6f 62 74 61 69         are obtai
43b0: 6e 65 64 20 62 79 20 63 61 6c 6c 69 6e 67 20 74  ned by calling t
43c0: 68 65 20 6c 69 62 72 61 72 79 20 66 75 6e 63 74  he library funct
43d0: 69 6f 6e 20 5f 41 46 50 46 53 53 65 74 4c 6f 63  ion _AFPFSSetLoc
43e0: 6b 28 29 2e 0a 0a 20 20 20 20 3c 6c 69 3e 20 46  k()...    <li> F
43f0: 6c 6f 63 6b 20 6c 6f 63 6b 69 6e 67 20 73 74 79  lock locking sty
4400: 6c 65 2e 20 54 68 69 73 20 69 73 20 75 73 65 64  le. This is used
4410: 20 66 6f 72 20 66 69 6c 65 2d 73 79 73 74 65 6d   for file-system
4420: 73 20 74 68 61 74 20 64 6f 20 6e 6f 74 0a 20 20  s that do not.  
4430: 20 20 20 20 20 20 20 73 75 70 70 6f 72 74 20 50         support P
4440: 4f 53 49 58 20 6c 6f 63 6b 69 6e 67 20 73 74 79  OSIX locking sty
4450: 6c 65 2e 20 4c 6f 63 6b 73 20 61 72 65 20 6f 62  le. Locks are ob
4460: 74 61 69 6e 65 64 20 61 6e 64 20 72 65 6c 65 61  tained and relea
4470: 73 65 64 20 75 73 69 6e 67 0a 20 20 20 20 20 20  sed using.      
4480: 20 20 20 74 68 65 20 66 6c 6f 63 6b 28 29 20 73     the flock() s
4490: 79 73 74 65 6d 20 63 61 6c 6c 2e 0a 0a 20 20 20  ystem call...   
44a0: 20 3c 6c 69 3e 20 44 6f 74 2d 66 69 6c 65 20 6c   <li> Dot-file l
44b0: 6f 63 6b 69 6e 67 20 73 74 79 6c 65 2e 20 54 68  ocking style. Th
44c0: 69 73 20 6c 6f 63 6b 69 6e 67 20 73 74 79 6c 65  is locking style
44d0: 20 69 73 20 75 73 65 64 20 77 68 65 6e 20 6e 65   is used when ne
44e0: 69 74 68 65 72 0a 20 20 20 20 20 20 20 20 20 66  ither.         f
44f0: 6c 6f 63 6b 20 6e 6f 72 20 50 4f 53 49 58 20 6c  lock nor POSIX l
4500: 6f 63 6b 69 6e 67 20 73 74 79 6c 65 73 20 61 72  ocking styles ar
4510: 65 20 73 75 70 70 6f 72 74 65 64 20 62 79 20 74  e supported by t
4520: 68 65 20 66 69 6c 65 20 73 79 73 74 65 6d 2e 0a  he file system..
4530: 20 20 20 20 20 20 20 20 20 44 61 74 61 62 61 73           Databas
4540: 65 20 6c 6f 63 6b 73 20 61 72 65 20 6f 62 74 61  e locks are obta
4550: 69 6e 65 64 20 62 79 20 63 72 65 61 74 69 6e 67  ined by creating
4560: 20 61 6e 64 20 65 6e 74 72 79 20 69 6e 20 74 68   and entry in th
4570: 65 20 66 69 6c 65 2d 73 79 73 74 65 6d 0a 20 20  e file-system.  
4580: 20 20 20 20 20 20 20 61 74 20 61 20 77 65 6c 6c         at a well
4590: 2d 6b 6e 6f 77 6e 20 6c 6f 63 61 74 69 6f 6e 20  -known location 
45a0: 72 65 6c 61 74 69 76 65 20 74 6f 20 74 68 65 20  relative to the 
45b0: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 28 61  database file (a
45c0: 20 22 64 6f 74 2d 66 69 6c 65 22 29 0a 20 20 20   "dot-file").   
45d0: 20 20 20 20 20 20 61 6e 64 20 72 65 6c 69 6e 71        and relinq
45e0: 75 69 73 68 65 64 20 62 79 20 64 65 6c 65 74 69  uished by deleti
45f0: 6e 67 20 74 68 65 20 73 61 6d 65 20 66 69 6c 65  ng the same file
4600: 2e 0a 0a 20 20 20 20 3c 6c 69 3e 20 4e 6f 20 6c  ...    <li> No l
4610: 6f 63 6b 69 6e 67 20 73 74 79 6c 65 2e 20 49 66  ocking style. If
4620: 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 61 62 6f   none of the abo
4630: 76 65 20 63 61 6e 20 62 65 20 73 75 70 70 6f 72  ve can be suppor
4640: 74 65 64 2c 20 74 68 69 73 20 0a 20 20 20 20 20  ted, this .     
4650: 20 20 20 20 6c 6f 63 6b 69 6e 67 20 73 74 79 6c      locking styl
4660: 65 20 69 73 20 75 73 65 64 2e 20 4e 6f 20 64 61  e is used. No da
4670: 74 61 62 61 73 65 20 6c 6f 63 6b 69 6e 67 20 6d  tabase locking m
4680: 65 63 68 61 6e 69 73 6d 20 69 73 20 75 73 65 64  echanism is used
4690: 2e 20 57 68 65 6e 0a 20 20 20 20 20 20 20 20 20  . When.         
46a0: 74 68 69 73 20 73 79 73 74 65 6d 20 69 73 20 75  this system is u
46b0: 73 65 64 20 69 74 20 69 73 20 6e 6f 74 20 73 61  sed it is not sa
46c0: 66 65 20 66 6f 72 20 61 20 73 69 6e 67 6c 65 20  fe for a single 
46d0: 64 61 74 61 62 61 73 65 20 74 6f 20 62 65 0a 20  database to be. 
46e0: 20 20 20 20 20 20 20 20 61 63 63 65 73 73 65 64          accessed
46f0: 20 62 79 20 6d 75 6c 74 69 70 6c 65 20 63 6c 69   by multiple cli
4700: 65 6e 74 73 2e 0a 20 20 3c 2f 75 6c 3e 0a 0a 20  ents..  </ul>.. 
4710: 20 41 64 64 69 74 69 6f 6e 61 6c 6c 79 2c 20 66   Additionally, f
4720: 69 76 65 20 65 78 74 72 61 20 5b 56 46 53 5d 20  ive extra [VFS] 
4730: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20  implementations 
4740: 61 72 65 20 70 72 6f 76 69 64 65 64 20 61 73 20  are provided as 
4750: 77 65 6c 6c 20 61 73 20 74 68 65 0a 20 20 64 65  well as the.  de
4760: 66 61 75 6c 74 2e 20 42 79 20 73 70 65 63 69 66  fault. By specif
4770: 79 69 6e 67 20 6f 6e 65 20 6f 66 20 74 68 65 20  ying one of the 
4780: 65 78 74 72 61 20 56 46 53 20 69 6d 70 6c 65 6d  extra VFS implem
4790: 65 6e 74 61 74 69 6f 6e 73 20 0a 20 20 77 68 65  entations .  whe
47a0: 6e 20 63 61 6c 6c 69 6e 67 20 5b 73 71 6c 69 74  n calling [sqlit
47b0: 65 33 5f 6f 70 65 6e 5f 76 32 28 29 5d 2c 20 61  e3_open_v2()], a
47c0: 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 6d 61  n application ma
47d0: 79 20 62 79 70 61 73 73 20 74 68 65 20 66 69 6c  y bypass the fil
47e0: 65 2d 73 79 73 74 65 6d 0a 20 20 64 65 74 65 63  e-system.  detec
47f0: 74 69 6f 6e 20 6c 6f 67 69 63 20 61 6e 64 20 65  tion logic and e
4800: 78 70 6c 69 63 69 74 6c 79 20 73 65 6c 65 63 74  xplicitly select
4810: 20 6f 6e 65 20 6f 66 20 74 68 65 20 61 62 6f 76   one of the abov
4820: 65 20 6c 6f 63 6b 69 6e 67 20 73 74 79 6c 65 73  e locking styles
4830: 2e 20 54 68 65 0a 20 20 66 69 76 65 20 65 78 74  . The.  five ext
4840: 72 61 20 5b 56 46 53 5d 20 69 6d 70 6c 65 6d 65  ra [VFS] impleme
4850: 6e 74 61 74 69 6f 6e 73 20 61 72 65 20 63 61 6c  ntations are cal
4860: 6c 65 64 20 22 75 6e 69 78 2d 70 6f 73 69 78 22  led "unix-posix"
4870: 2c 20 22 75 6e 69 78 2d 61 66 70 22 2c 0a 20 20  , "unix-afp",.  
4880: 22 75 6e 69 78 2d 66 6c 6f 63 6b 22 2c 20 22 75  "unix-flock", "u
4890: 6e 69 78 2d 64 6f 74 66 69 6c 65 22 20 61 6e 64  nix-dotfile" and
48a0: 20 22 75 6e 69 78 2d 6e 6f 6e 65 22 2e 0a 7d 0a   "unix-none"..}.
48b0: 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20  .COMPILE_OPTION 
48c0: 7b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d  {SQLITE_ENABLE_M
48d0: 45 4d 4f 52 59 5f 4d 41 4e 41 47 45 4d 45 4e 54  EMORY_MANAGEMENT
48e0: 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70 74 69 6f  } {.  This optio
48f0: 6e 20 61 64 64 73 20 65 78 74 72 61 20 6c 6f 67  n adds extra log
4900: 69 63 20 74 6f 20 53 51 4c 69 74 65 20 74 68 61  ic to SQLite tha
4910: 74 20 61 6c 6c 6f 77 73 20 69 74 20 74 6f 20 72  t allows it to r
4920: 65 6c 65 61 73 65 20 75 6e 75 73 65 64 0a 20 20  elease unused.  
4930: 6d 65 6d 6f 72 79 20 75 70 6f 6e 20 72 65 71 75  memory upon requ
4940: 65 73 74 2e 20 20 54 68 69 73 20 6f 70 74 69 6f  est.  This optio
4950: 6e 20 6d 75 73 74 20 62 65 20 65 6e 61 62 6c 65  n must be enable
4960: 64 20 69 6e 20 6f 72 64 65 72 20 66 6f 72 20 74  d in order for t
4970: 68 65 0a 20 20 5b 73 71 6c 69 74 65 33 5f 72 65  he.  [sqlite3_re
4980: 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28 29 5d 20  lease_memory()] 
4990: 69 6e 74 65 72 66 61 63 65 20 74 6f 20 77 6f 72  interface to wor
49a0: 6b 2e 20 20 49 66 20 74 68 69 73 20 63 6f 6d 70  k.  If this comp
49b0: 69 6c 65 2d 74 69 6d 65 0a 20 20 6f 70 74 69 6f  ile-time.  optio
49c0: 6e 20 69 73 20 6e 6f 74 20 75 73 65 64 2c 20 74  n is not used, t
49d0: 68 65 20 5b 73 71 6c 69 74 65 33 5f 72 65 6c 65  he [sqlite3_rele
49e0: 61 73 65 5f 6d 65 6d 6f 72 79 28 29 5d 20 69 6e  ase_memory()] in
49f0: 74 65 72 66 61 63 65 20 69 73 20 61 20 0a 20 20  terface is a .  
4a00: 6e 6f 2d 6f 70 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c  no-op..}..COMPIL
4a10: 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45  E_OPTION {SQLITE
4a20: 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 33 7d  _ENABLE_MEMSYS3}
4a30: 20 7b 0a 20 20 54 68 69 73 20 6f 70 74 69 6f 6e   {.  This option
4a40: 20 69 6e 63 6c 75 64 65 73 20 63 6f 64 65 20 69   includes code i
4a50: 6e 20 53 51 4c 69 74 65 20 74 68 61 74 20 69 6d  n SQLite that im
4a60: 70 6c 65 6d 65 6e 74 73 20 61 6e 20 61 6c 74 65  plements an alte
4a70: 72 6e 61 74 69 76 65 0a 20 20 6d 65 6d 6f 72 79  rnative.  memory
4a80: 20 61 6c 6c 6f 63 61 74 6f 72 2e 20 20 54 68 69   allocator.  Thi
4a90: 73 20 61 6c 74 65 72 6e 61 74 69 76 65 20 6d 65  s alternative me
4aa0: 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 6f 72 20 69  mory allocator i
4ab0: 73 20 6f 6e 6c 79 20 65 6e 67 61 67 65 64 0a 20  s only engaged. 
4ac0: 20 77 68 65 6e 20 74 68 65 20 5b 53 51 4c 49 54   when the [SQLIT
4ad0: 45 5f 43 4f 4e 46 49 47 5f 48 45 41 50 5d 20 6f  E_CONFIG_HEAP] o
4ae0: 70 74 69 6f 6e 20 74 6f 20 5b 73 71 6c 69 74 65  ption to [sqlite
4af0: 33 5f 63 6f 6e 66 69 67 28 29 5d 20 69 73 20 75  3_config()] is u
4b00: 73 65 64 20 74 6f 0a 20 20 73 75 70 70 6c 79 20  sed to.  supply 
4b10: 61 20 6c 61 72 67 65 20 63 68 75 6e 6b 20 6f 66  a large chunk of
4b20: 20 6d 65 6d 6f 72 79 20 66 72 6f 6d 20 77 68 69   memory from whi
4b30: 63 68 20 61 6c 6c 20 6d 65 6d 6f 72 79 20 61 6c  ch all memory al
4b40: 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 0a 20 20  locations are.  
4b50: 74 61 6b 65 6e 2e 0a 20 20 54 68 65 20 4d 45 4d  taken..  The MEM
4b60: 53 59 53 33 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  SYS3 memory allo
4b70: 63 61 74 6f 72 20 75 73 65 73 20 61 20 68 79 62  cator uses a hyb
4b80: 72 69 64 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 61  rid allocation a
4b90: 6c 67 6f 72 69 74 68 6d 20 0a 20 20 70 61 74 74  lgorithm .  patt
4ba0: 65 72 6e 65 64 20 61 66 74 65 72 20 64 6c 6d 61  erned after dlma
4bb0: 6c 6c 6f 63 28 29 2e 20 20 20 4f 6e 6c 79 20 6f  lloc().   Only o
4bc0: 6e 65 20 6f 66 20 53 51 4c 49 54 45 5f 45 4e 41  ne of SQLITE_ENA
4bd0: 42 4c 45 5f 4d 45 4d 53 59 53 33 20 61 6e 64 20  BLE_MEMSYS3 and 
4be0: 0a 20 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  .  SQLITE_ENABLE
4bf0: 5f 4d 45 4d 53 59 53 35 20 6d 61 79 20 62 65 20  _MEMSYS5 may be 
4c00: 65 6e 61 62 6c 65 64 20 61 74 20 6f 6e 63 65 2e  enabled at once.
4c10: 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49  .}..COMPILE_OPTI
4c20: 4f 4e 20 7b 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ON {SQLITE_ENABL
4c30: 45 5f 4d 45 4d 53 59 53 35 7d 20 7b 0a 20 20 54  E_MEMSYS5} {.  T
4c40: 68 69 73 20 6f 70 74 69 6f 6e 20 69 6e 63 6c 75  his option inclu
4c50: 64 65 73 20 63 6f 64 65 20 69 6e 20 53 51 4c 69  des code in SQLi
4c60: 74 65 20 74 68 61 74 20 69 6d 70 6c 65 6d 65 6e  te that implemen
4c70: 74 73 20 61 6e 20 61 6c 74 65 72 6e 61 74 69 76  ts an alternativ
4c80: 65 0a 20 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  e.  memory alloc
4c90: 61 74 6f 72 2e 20 20 54 68 69 73 20 61 6c 74 65  ator.  This alte
4ca0: 72 6e 61 74 69 76 65 20 6d 65 6d 6f 72 79 20 61  rnative memory a
4cb0: 6c 6c 6f 63 61 74 6f 72 20 69 73 20 6f 6e 6c 79  llocator is only
4cc0: 20 65 6e 67 61 67 65 64 0a 20 20 77 68 65 6e 20   engaged.  when 
4cd0: 74 68 65 20 5b 53 51 4c 49 54 45 5f 43 4f 4e 46  the [SQLITE_CONF
4ce0: 49 47 5f 48 45 41 50 5d 20 6f 70 74 69 6f 6e 20  IG_HEAP] option 
4cf0: 74 6f 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6e 66  to [sqlite3_conf
4d00: 69 67 28 29 5d 20 69 73 20 75 73 65 64 20 74 6f  ig()] is used to
4d10: 0a 20 20 73 75 70 70 6c 79 20 61 20 6c 61 72 67  .  supply a larg
4d20: 65 20 63 68 75 6e 6b 20 6f 66 20 6d 65 6d 6f 72  e chunk of memor
4d30: 79 20 66 72 6f 6d 20 77 68 69 63 68 20 61 6c 6c  y from which all
4d40: 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
4d50: 6f 6e 73 20 61 72 65 0a 20 20 74 61 6b 65 6e 2e  ons are.  taken.
4d60: 0a 20 20 54 68 65 20 4d 45 4d 53 59 53 35 20 6d  .  The MEMSYS5 m
4d70: 6f 64 75 6c 65 20 72 6f 75 6e 64 73 20 61 6c 6c  odule rounds all
4d80: 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 75 70 20   allocations up 
4d90: 74 6f 20 74 68 65 20 6e 65 78 74 20 70 6f 77 65  to the next powe
4da0: 72 0a 20 20 6f 66 20 74 77 6f 20 61 6e 64 20 75  r.  of two and u
4db0: 73 65 73 20 61 20 66 69 72 73 74 2d 66 69 74 2c  ses a first-fit,
4dc0: 20 62 75 64 64 79 2d 61 6c 6c 6f 63 61 74 6f 72   buddy-allocator
4dd0: 20 61 6c 67 6f 72 69 74 68 6d 0a 20 20 74 68 61   algorithm.  tha
4de0: 74 20 70 72 6f 76 69 64 65 73 20 73 74 72 6f 6e  t provides stron
4df0: 67 20 67 75 61 72 61 6e 74 65 65 73 20 61 67 61  g guarantees aga
4e00: 69 6e 73 74 20 66 72 61 67 6d 65 6e 74 61 74 69  inst fragmentati
4e10: 6f 6e 20 61 6e 64 20 62 72 65 61 6b 64 6f 77 6e  on and breakdown
4e20: 0a 20 20 73 75 62 6a 65 63 74 20 74 6f 20 63 65  .  subject to ce
4e30: 72 74 61 69 6e 20 6f 70 65 72 61 74 69 6e 67 20  rtain operating 
4e40: 63 6f 6e 73 74 72 61 69 6e 74 73 2e 0a 7d 0a 0a  constraints..}..
4e50: 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b  COMPILE_OPTION {
4e60: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 52 54  SQLITE_ENABLE_RT
4e70: 52 45 45 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70  REE} {.  This op
4e80: 74 69 6f 6e 20 63 61 75 73 65 73 20 53 51 4c 69  tion causes SQLi
4e90: 74 65 20 74 6f 20 69 6e 63 6c 75 64 65 20 73 75  te to include su
4ea0: 70 70 6f 72 74 20 66 6f 72 20 74 68 65 0a 20 20  pport for the.  
4eb0: 5b 72 74 72 65 65 20 7c 20 52 2a 54 72 65 65 20  [rtree | R*Tree 
4ec0: 69 6e 64 65 78 20 65 78 74 65 6e 73 69 6f 6e 5d  index extension]
4ed0: 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54  ..}..COMPILE_OPT
4ee0: 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 45 4e 41 42  ION {SQLITE_ENAB
4ef0: 4c 45 5f 53 54 41 54 32 7d 20 7b 0a 20 20 54 68  LE_STAT2} {.  Th
4f00: 69 73 20 6f 70 74 69 6f 6e 20 75 73 65 64 20 74  is option used t
4f10: 6f 20 63 61 75 73 65 20 74 68 65 20 5b 41 4e 41  o cause the [ANA
4f20: 4c 59 5a 45 5d 20 63 6f 6d 6d 61 6e 64 20 74 6f  LYZE] command to
4f30: 20 63 6f 6c 6c 65 63 74 0a 20 20 69 6e 64 65 78   collect.  index
4f40: 20 68 69 73 74 6f 67 72 61 6d 20 64 61 74 61 20   histogram data 
4f50: 69 6e 20 74 68 65 20 3c 62 3e 73 71 6c 69 74 65  in the <b>sqlite
4f60: 5f 73 74 61 74 32 3c 2f 62 3e 20 74 61 62 6c 65  _stat2</b> table
4f70: 2e 20 20 42 75 74 20 74 68 61 74 0a 20 20 66 75  .  But that.  fu
4f80: 6e 63 74 69 6f 6e 61 6c 69 74 79 20 77 61 73 20  nctionality was 
4f90: 73 75 70 65 72 63 65 64 65 64 20 62 79 20 5b 53  superceded by [S
4fa0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
4fb0: 54 33 5d 20 61 73 20 6f 66 0a 20 20 53 51 4c 69  T3] as of.  SQLi
4fc0: 74 65 20 76 65 72 73 69 6f 6e 20 33 2e 37 2e 39  te version 3.7.9
4fd0: 2e 20 20 54 68 65 20 53 51 4c 49 54 45 5f 45 4e  .  The SQLITE_EN
4fe0: 41 42 4c 45 5f 53 54 41 54 32 20 63 6f 6d 70 69  ABLE_STAT2 compi
4ff0: 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 0a 20  le-time option. 
5000: 20 69 73 20 6e 6f 77 20 61 20 6e 6f 2d 6f 70 2e   is now a no-op.
5010: 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49  .}..COMPILE_OPTI
5020: 4f 4e 20 7b 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ON {SQLITE_ENABL
5030: 45 5f 53 54 41 54 33 7d 20 7b 0a 20 20 54 68 69  E_STAT3} {.  Thi
5040: 73 20 6f 70 74 69 6f 6e 20 61 64 64 73 20 61 64  s option adds ad
5050: 64 69 74 69 6f 6e 61 6c 20 6c 6f 67 69 63 20 74  ditional logic t
5060: 6f 20 74 68 65 20 5b 41 4e 41 4c 59 5a 45 5d 20  o the [ANALYZE] 
5070: 63 6f 6d 6d 61 6e 64 20 61 6e 64 20 74 6f 0a 20  command and to. 
5080: 20 74 68 65 20 5b 71 75 65 72 79 20 70 6c 61 6e   the [query plan
5090: 6e 65 72 5d 20 74 68 61 74 20 63 61 6e 20 68 65  ner] that can he
50a0: 6c 70 20 53 51 4c 69 74 65 20 74 6f 20 63 68 6f  lp SQLite to cho
50b0: 73 65 20 61 20 62 65 74 74 65 72 20 71 75 65 72  se a better quer
50c0: 79 20 70 6c 61 6e 0a 20 20 75 6e 64 65 72 20 63  y plan.  under c
50d0: 65 72 74 61 69 6e 20 73 69 74 75 61 74 69 6f 6e  ertain situation
50e0: 73 2e 20 20 54 68 65 20 5b 41 4e 41 4c 59 5a 45  s.  The [ANALYZE
50f0: 5d 20 63 6f 6d 6d 61 6e 64 20 69 73 20 65 6e 68  ] command is enh
5100: 61 6e 63 65 64 20 74 6f 20 63 6f 6c 6c 65 63 74  anced to collect
5110: 0a 20 20 68 69 73 74 6f 67 72 61 6d 20 64 61 74  .  histogram dat
5120: 61 20 66 72 6f 6d 20 65 61 63 68 20 69 6e 64 65  a from each inde
5130: 78 20 61 6e 64 20 73 74 6f 72 65 20 74 68 61 74  x and store that
5140: 20 64 61 74 61 0a 20 20 69 6e 20 74 68 65 20 3c   data.  in the <
5150: 62 3e 73 71 6c 69 74 65 5f 73 74 61 74 33 3c 2f  b>sqlite_stat3</
5160: 62 3e 20 74 61 62 6c 65 2e 20 20 54 68 65 20 71  b> table.  The q
5170: 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 77 69 6c  uery planner wil
5180: 6c 20 74 68 65 6e 20 75 73 65 20 74 68 65 0a 20  l then use the. 
5190: 20 68 69 73 74 6f 67 72 61 6d 20 64 61 74 61 20   histogram data 
51a0: 74 6f 20 68 65 6c 70 20 69 74 20 6d 61 6b 65 20  to help it make 
51b0: 62 65 74 74 65 72 20 69 6e 64 65 78 20 63 68 6f  better index cho
51c0: 69 63 65 73 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45  ices..}..COMPILE
51d0: 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f  _OPTION {SQLITE_
51e0: 45 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f 44 45  ENABLE_UPDATE_DE
51f0: 4c 45 54 45 5f 4c 49 4d 49 54 7d 20 7b 0a 20 20  LETE_LIMIT} {.  
5200: 54 68 69 73 20 6f 70 74 69 6f 6e 20 65 6e 61 62  This option enab
5210: 6c 65 73 20 61 6e 20 6f 70 74 69 6f 6e 61 6c 20  les an optional 
5220: 4f 52 44 45 52 20 42 59 20 61 6e 64 20 4c 49 4d  ORDER BY and LIM
5230: 49 54 20 63 6c 61 75 73 65 20 6f 6e 20 0a 20 20  IT clause on .  
5240: 5b 55 50 44 41 54 45 5d 20 61 6e 64 20 5b 44 45  [UPDATE] and [DE
5250: 4c 45 54 45 5d 20 73 74 61 74 65 6d 65 6e 74 73  LETE] statements
5260: 2e 0a 0a 20 20 3c 70 3e 49 66 20 74 68 69 73 20  ...  <p>If this 
5270: 6f 70 74 69 6f 6e 20 69 73 20 64 65 66 69 6e 65  option is define
5280: 64 2c 20 74 68 65 6e 20 69 74 20 6d 75 73 74 20  d, then it must 
5290: 61 6c 73 6f 20 62 65 20 0a 20 20 64 65 66 69 6e  also be .  defin
52a0: 65 64 20 77 68 65 6e 20 75 73 69 6e 67 20 74 68  ed when using th
52b0: 65 20 27 6c 65 6d 6f 6e 27 20 74 6f 6f 6c 20 74  e 'lemon' tool t
52c0: 6f 20 67 65 6e 65 72 61 74 65 20 61 20 70 61 72  o generate a par
52d0: 73 65 2e 63 0a 20 20 66 69 6c 65 2e 20 42 65 63  se.c.  file. Bec
52e0: 61 75 73 65 20 6f 66 20 74 68 69 73 2c 20 74 68  ause of this, th
52f0: 69 73 20 6f 70 74 69 6f 6e 20 6d 61 79 20 6f 6e  is option may on
5300: 6c 79 20 62 65 20 75 73 65 64 20 77 68 65 6e 20  ly be used when 
5310: 74 68 65 20 6c 69 62 72 61 72 79 20 69 73 20 62  the library is b
5320: 75 69 6c 74 0a 20 20 66 72 6f 6d 20 73 6f 75 72  uilt.  from sour
5330: 63 65 2c 20 6e 6f 74 20 66 72 6f 6d 20 74 68 65  ce, not from the
5340: 20 5b 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 5d 20   [amalgamation] 
5350: 6f 72 20 66 72 6f 6d 20 74 68 65 20 63 6f 6c 6c  or from the coll
5360: 65 63 74 69 6f 6e 20 6f 66 0a 20 20 70 72 65 2d  ection of.  pre-
5370: 70 61 63 6b 61 67 65 64 20 43 20 66 69 6c 65 73  packaged C files
5380: 20 70 72 6f 76 69 64 65 64 20 66 6f 72 20 6e 6f   provided for no
5390: 6e 2d 55 6e 69 78 20 6c 69 6b 65 20 70 6c 61 74  n-Unix like plat
53a0: 66 6f 72 6d 73 20 6f 6e 20 74 68 65 20 77 65 62  forms on the web
53b0: 73 69 74 65 2e 0a 20 20 3c 2f 70 3e 0a 7d 0a 0a  site..  </p>.}..
53c0: 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b  COMPILE_OPTION {
53d0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 4e  SQLITE_ENABLE_UN
53e0: 4c 4f 43 4b 5f 4e 4f 54 49 46 59 7d 20 7b 0a 20  LOCK_NOTIFY} {. 
53f0: 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 65 6e 61   This option ena
5400: 62 6c 65 73 20 74 68 65 20 5b 73 71 6c 69 74 65  bles the [sqlite
5410: 33 5f 75 6e 6c 6f 63 6b 5f 6e 6f 74 69 66 79 28  3_unlock_notify(
5420: 29 5d 20 69 6e 74 65 72 66 61 63 65 20 61 6e 64  )] interface and
5430: 0a 20 20 69 74 73 20 61 73 73 6f 63 69 61 74 65  .  its associate
5440: 64 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 2e  d functionality.
5450: 20 20 53 65 65 20 74 68 65 20 64 6f 63 75 6d 65    See the docume
5460: 6e 74 61 74 69 6f 6e 20 74 69 74 6c 65 64 0a 20  ntation titled. 
5470: 20 5b 55 73 69 6e 67 20 74 68 65 20 53 51 4c 69   [Using the SQLi
5480: 74 65 20 55 6e 6c 6f 63 6b 20 4e 6f 74 69 66 69  te Unlock Notifi
5490: 63 61 74 69 6f 6e 20 46 65 61 74 75 72 65 5d 20  cation Feature] 
54a0: 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 0a 20  for additional. 
54b0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 7d 0a   information..}.
54c0: 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20  .COMPILE_OPTION 
54d0: 7b 53 51 4c 49 54 45 5f 53 4f 55 4e 44 45 58 7d  {SQLITE_SOUNDEX}
54e0: 20 7b 0a 20 20 54 68 69 73 20 6f 70 74 69 6f 6e   {.  This option
54f0: 20 65 6e 61 62 6c 65 73 20 74 68 65 20 5b 73 6f   enables the [so
5500: 75 6e 64 65 78 28 29 20 53 51 4c 20 66 75 6e 63  undex() SQL func
5510: 74 69 6f 6e 5d 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c  tion]..}..COMPIL
5520: 45 5f 4f 50 54 49 4f 4e 20 7b 59 59 54 52 41 43  E_OPTION {YYTRAC
5530: 4b 4d 41 58 53 54 41 43 4b 44 45 50 54 48 7d 20  KMAXSTACKDEPTH} 
5540: 7b 0a 20 20 54 68 69 73 20 6f 70 74 69 6f 6e 20  {.  This option 
5550: 63 61 75 73 65 73 20 74 68 65 20 4c 41 4c 52 28  causes the LALR(
5560: 31 29 20 70 61 72 73 65 72 20 73 74 61 63 6b 20  1) parser stack 
5570: 64 65 70 74 68 20 74 6f 20 62 65 20 74 72 61 63  depth to be trac
5580: 6b 65 64 0a 20 20 61 6e 64 20 72 65 70 6f 72 74  ked.  and report
5590: 65 64 20 75 73 69 6e 67 20 74 68 65 20 5b 73 71  ed using the [sq
55a0: 6c 69 74 65 33 5f 73 74 61 74 75 73 5d 28 5b 53  lite3_status]([S
55b0: 51 4c 49 54 45 5f 53 54 41 54 55 53 5f 50 41 52  QLITE_STATUS_PAR
55c0: 53 45 52 5f 53 54 41 43 4b 5d 2c 2e 2e 2e 29 0a  SER_STACK],...).
55d0: 20 20 69 6e 74 65 72 66 61 63 65 2e 20 20 53 51    interface.  SQ
55e0: 4c 69 74 65 27 73 20 4c 41 4c 52 28 31 29 20 70  Lite's LALR(1) p
55f0: 61 72 73 65 72 20 68 61 73 20 61 20 66 69 78 65  arser has a fixe
5600: 64 20 73 74 61 63 6b 20 64 65 70 74 68 0a 20 20  d stack depth.  
5610: 28 64 65 74 65 72 6d 69 6e 65 64 20 61 74 20 63  (determined at c
5620: 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 75 73 69 6e  ompile-time usin
5630: 67 20 74 68 65 20 5b 59 59 53 54 41 43 4b 44 45  g the [YYSTACKDE
5640: 50 54 48 5d 20 6f 70 74 69 6f 6e 73 29 2e 0a 20  PTH] options).. 
5650: 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 63 61 6e   This option can
5660: 20 62 65 20 75 73 65 64 20 74 6f 20 68 65 6c 70   be used to help
5670: 20 64 65 74 65 72 6d 69 6e 65 20 69 66 20 61 6e   determine if an
5680: 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 69 73 0a   application is.
5690: 20 20 67 65 74 74 69 6e 67 20 63 6c 6f 73 65 20    getting close 
56a0: 74 6f 20 65 78 63 65 65 64 69 6e 67 20 74 68 65  to exceeding the
56b0: 20 6d 61 78 69 6d 75 6d 20 4c 41 4c 52 28 31 29   maximum LALR(1)
56c0: 20 73 74 61 63 6b 20 64 65 70 74 68 2e 0a 7d 0a   stack depth..}.
56d0: 3c 2f 74 63 6c 3e 0a 0a 3c 61 20 6e 61 6d 65 3d  </tcl>..<a name=
56e0: 22 64 69 73 61 62 6c 65 66 65 61 74 75 72 65 73  "disablefeatures
56f0: 22 3e 3c 2f 61 3e 0a 3c 68 32 3e 31 2e 35 20 4f  "></a>.<h2>1.5 O
5700: 70 74 69 6f 6e 73 20 54 6f 20 44 69 73 61 62 6c  ptions To Disabl
5710: 65 20 46 65 61 74 75 72 65 73 20 4e 6f 72 6d 61  e Features Norma
5720: 6c 6c 79 20 54 75 72 6e 65 64 20 4f 6e 3c 2f 68  lly Turned On</h
5730: 32 3e 0a 0a 3c 74 63 6c 3e 0a 43 4f 4d 50 49 4c  2>..<tcl>.COMPIL
5740: 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45  E_OPTION {SQLITE
5750: 5f 44 49 53 41 42 4c 45 5f 4c 46 53 7d 20 7b 0a  _DISABLE_LFS} {.
5760: 20 20 49 66 20 74 68 69 73 20 43 2d 70 72 65 70    If this C-prep
5770: 72 6f 63 65 73 73 6f 72 20 6d 61 63 72 6f 20 69  rocessor macro i
5780: 73 20 64 65 66 69 6e 65 64 2c 20 6c 61 72 67 65  s defined, large
5790: 20 66 69 6c 65 20 73 75 70 70 6f 72 74 0a 20 20   file support.  
57a0: 69 73 20 64 69 73 61 62 6c 65 64 2e 0a 7d 0a 0a  is disabled..}..
57b0: 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b  COMPILE_OPTION {
57c0: 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 44  SQLITE_DISABLE_D
57d0: 49 52 53 59 4e 43 7d 20 7b 0a 20 20 49 66 20 74  IRSYNC} {.  If t
57e0: 68 69 73 20 43 2d 70 72 65 70 72 6f 63 65 73 73  his C-preprocess
57f0: 6f 72 20 6d 61 63 72 6f 20 69 73 20 64 65 66 69  or macro is defi
5800: 6e 65 64 2c 20 64 69 72 65 63 74 6f 72 79 20 73  ned, directory s
5810: 79 6e 63 73 0a 20 20 61 72 65 20 64 69 73 61 62  yncs.  are disab
5820: 6c 65 64 2e 20 20 53 51 4c 69 74 65 20 74 79 70  led.  SQLite typ
5830: 69 63 61 6c 6c 79 20 61 74 74 65 6d 70 74 73 20  ically attempts 
5840: 74 6f 20 73 79 6e 63 20 74 68 65 20 70 61 72 65  to sync the pare
5850: 6e 74 0a 20 20 64 69 72 65 63 74 6f 72 79 20 77  nt.  directory w
5860: 68 65 6e 20 61 20 66 69 6c 65 20 69 73 20 64 65  hen a file is de
5870: 6c 65 74 65 64 20 74 6f 20 65 6e 73 75 72 65 20  leted to ensure 
5880: 74 68 65 20 64 69 72 65 63 74 6f 72 79 0a 20 20  the directory.  
5890: 65 6e 74 72 69 65 73 20 61 72 65 20 75 70 64 61  entries are upda
58a0: 74 65 64 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  ted immediately 
58b0: 6f 6e 20 64 69 73 6b 2e 0a 7d 0a 3c 2f 74 63 6c  on disk..}.</tcl
58c0: 3e 0a 0a 3c 74 63 6c 3e 0a 20 20 68 64 5f 66 72  >..<tcl>.  hd_fr
58d0: 61 67 6d 65 6e 74 20 22 6f 6d 69 74 66 65 61 74  agment "omitfeat
58e0: 75 72 65 73 22 0a 20 20 68 64 5f 6b 65 79 77 6f  ures".  hd_keywo
58f0: 72 64 73 20 22 6f 6d 69 74 66 65 61 74 75 72 65  rds "omitfeature
5900: 73 22 0a 3c 2f 74 63 6c 3e 0a 3c 68 32 3e 31 2e  s".</tcl>.<h2>1.
5910: 36 20 4f 70 74 69 6f 6e 73 20 54 6f 20 4f 6d 69  6 Options To Omi
5920: 74 20 46 65 61 74 75 72 65 73 3c 2f 68 32 3e 0a  t Features</h2>.
5930: 0a 3c 70 3e 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .<p>The followin
5940: 67 20 6f 70 74 69 6f 6e 73 20 63 61 6e 20 75 73  g options can us
5950: 65 64 20 74 6f 20 0a 5b 72 65 6c 66 6f 6f 74 70  ed to .[relfootp
5960: 72 69 6e 74 20 7c 20 72 65 64 75 63 65 20 74 68  rint | reduce th
5970: 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 63 6f  e size of the co
5980: 6d 70 69 6c 65 64 20 6c 69 62 72 61 72 79 5d 0a  mpiled library].
5990: 62 79 20 6f 6d 69 74 74 69 6e 67 20 75 6e 75 73  by omitting unus
59a0: 65 64 20 66 65 61 74 75 72 65 73 2e 20 54 68 69  ed features. Thi
59b0: 73 20 69 73 20 70 72 6f 62 61 62 6c 79 20 6f 6e  s is probably on
59c0: 6c 79 20 75 73 65 66 75 6c 0a 69 6e 20 65 6d 62  ly useful.in emb
59d0: 65 64 64 65 64 20 73 79 73 74 65 6d 73 20 77 68  edded systems wh
59e0: 65 72 65 20 73 70 61 63 65 20 69 73 20 65 73 70  ere space is esp
59f0: 65 63 69 61 6c 6c 79 20 74 69 67 68 74 2c 20 61  ecially tight, a
5a00: 73 20 65 76 65 6e 20 77 69 74 68 20 61 6c 6c 0a  s even with all.
5a10: 66 65 61 74 75 72 65 73 20 69 6e 63 6c 75 64 65  features include
5a20: 64 20 74 68 65 20 53 51 4c 69 74 65 20 6c 69 62  d the SQLite lib
5a30: 72 61 72 79 20 69 73 20 72 65 6c 61 74 69 76 65  rary is relative
5a40: 6c 79 20 73 6d 61 6c 6c 2e 20 44 6f 6e 27 74 20  ly small. Don't 
5a50: 66 6f 72 67 65 74 0a 74 6f 20 74 65 6c 6c 20 79  forget.to tell y
5a60: 6f 75 72 20 63 6f 6d 70 69 6c 65 72 20 74 6f 20  our compiler to 
5a70: 6f 70 74 69 6d 69 7a 65 20 66 6f 72 20 62 69 6e  optimize for bin
5a80: 61 72 79 20 73 69 7a 65 21 20 28 74 68 65 20 2d  ary size! (the -
5a90: 4f 73 20 6f 70 74 69 6f 6e 20 69 66 0a 75 73 69  Os option if.usi
5aa0: 6e 67 20 47 43 43 29 2e 20 20 54 65 6c 6c 69 6e  ng GCC).  Tellin
5ab0: 67 20 79 6f 75 72 20 63 6f 6d 70 69 6c 65 72 20  g your compiler 
5ac0: 74 6f 20 6f 70 74 69 6d 69 7a 65 20 66 6f 72 20  to optimize for 
5ad0: 73 69 7a 65 20 75 73 75 61 6c 6c 79 20 68 61 73  size usually has
5ae0: 0a 61 20 6d 75 63 68 20 6c 61 72 67 65 72 20 69  .a much larger i
5af0: 6d 70 61 63 74 20 6f 6e 20 6c 69 62 72 61 72 79  mpact on library
5b00: 20 66 6f 6f 74 70 72 69 6e 74 20 74 68 61 6e 20   footprint than 
5b10: 65 6d 70 6c 6f 79 69 6e 67 20 61 6e 79 20 6f 66  employing any of
5b20: 20 74 68 65 73 65 0a 63 6f 6d 70 69 6c 65 2d 74   these.compile-t
5b30: 69 6d 65 20 6f 70 74 69 6f 6e 73 2e 20 20 59 6f  ime options.  Yo
5b40: 75 20 73 68 6f 75 6c 64 20 61 6c 73 6f 20 76 65  u should also ve
5b50: 72 69 66 79 20 74 68 61 74 20 0a 3c 61 20 68 72  rify that .<a hr
5b60: 65 66 3d 22 23 64 65 62 75 67 6f 70 74 69 6f 6e  ef="#debugoption
5b70: 73 22 3e 64 65 62 75 67 67 69 6e 67 20 6f 70 74  s">debugging opt
5b80: 69 6f 6e 73 3c 2f 61 3e 20 61 72 65 20 64 69 73  ions</a> are dis
5b90: 61 62 6c 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54  abled.</p>..<p>T
5ba0: 68 65 20 6d 61 63 72 6f 73 20 69 6e 20 74 68 69  he macros in thi
5bb0: 73 20 73 65 63 74 69 6f 6e 20 64 6f 20 6e 6f 74  s section do not
5bc0: 20 72 65 71 75 69 72 65 20 76 61 6c 75 65 73 2e   require values.
5bd0: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 0a   The following .
5be0: 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 73 77 69 74  compilation swit
5bf0: 63 68 65 73 20 61 6c 6c 20 68 61 76 65 20 74 68  ches all have th
5c00: 65 20 73 61 6d 65 20 65 66 66 65 63 74 3a 3c 62  e same effect:<b
5c10: 72 3e 0a 2d 44 53 51 4c 49 54 45 5f 4f 4d 49 54  r>.-DSQLITE_OMIT
5c20: 5f 41 4c 54 45 52 54 41 42 4c 45 3c 62 72 3e 0a  _ALTERTABLE<br>.
5c30: 2d 44 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c  -DSQLITE_OMIT_AL
5c40: 54 45 52 54 41 42 4c 45 3d 31 3c 62 72 3e 0a 2d  TERTABLE=1<br>.-
5c50: 44 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54  DSQLITE_OMIT_ALT
5c60: 45 52 54 41 42 4c 45 3d 30 0a 3c 2f 70 3e 0a 0a  ERTABLE=0.</p>..
5c70: 3c 70 3e 49 66 20 61 6e 79 20 6f 66 20 74 68 65  <p>If any of the
5c80: 73 65 20 6f 70 74 69 6f 6e 73 20 61 72 65 20 64  se options are d
5c90: 65 66 69 6e 65 64 2c 20 74 68 65 6e 20 74 68 65  efined, then the
5ca0: 20 73 61 6d 65 20 73 65 74 20 6f 66 20 53 51 4c   same set of SQL
5cb0: 49 54 45 5f 4f 4d 49 54 5f 2a 0a 6f 70 74 69 6f  ITE_OMIT_*.optio
5cc0: 6e 73 20 6d 75 73 74 20 61 6c 73 6f 20 62 65 20  ns must also be 
5cd0: 64 65 66 69 6e 65 64 20 77 68 65 6e 20 75 73 69  defined when usi
5ce0: 6e 67 20 74 68 65 20 27 6c 65 6d 6f 6e 27 20 74  ng the 'lemon' t
5cf0: 6f 6f 6c 20 74 6f 20 67 65 6e 65 72 61 74 65 20  ool to generate 
5d00: 74 68 65 0a 70 61 72 73 65 2e 63 20 66 69 6c 65  the.parse.c file
5d10: 20 61 6e 64 20 77 68 65 6e 20 63 6f 6d 70 69 6c   and when compil
5d20: 69 6e 67 20 74 68 65 20 27 6d 6b 6b 65 79 77 6f  ing the 'mkkeywo
5d30: 72 64 68 61 73 68 27 20 74 6f 6f 6c 20 77 68 69  rdhash' tool whi
5d40: 63 68 20 67 65 6e 65 72 61 74 65 73 20 0a 74 68  ch generates .th
5d50: 65 20 6b 65 79 77 6f 72 64 68 61 73 68 2e 68 20  e keywordhash.h 
5d60: 66 69 6c 65 2e 0a 42 65 63 61 75 73 65 20 6f 66  file..Because of
5d70: 20 74 68 69 73 2c 20 74 68 65 73 65 20 6f 70 74   this, these opt
5d80: 69 6f 6e 73 20 6d 61 79 20 6f 6e 6c 79 20 62 65  ions may only be
5d90: 20 75 73 65 64 20 77 68 65 6e 20 74 68 65 20 6c   used when the l
5da0: 69 62 72 61 72 79 20 69 73 20 62 75 69 6c 74 0a  ibrary is built.
5db0: 66 72 6f 6d 20 63 61 6e 6f 6e 69 63 61 6c 20 73  from canonical s
5dc0: 6f 75 72 63 65 2c 20 6e 6f 74 20 66 72 6f 6d 20  ource, not from 
5dd0: 74 68 65 20 5b 61 6d 61 6c 67 61 6d 61 74 69 6f  the [amalgamatio
5de0: 6e 5d 20 6f 72 20 66 72 6f 6d 20 74 68 65 20 63  n] or from the c
5df0: 6f 6c 6c 65 63 74 69 6f 6e 20 6f 66 0a 70 72 65  ollection of.pre
5e00: 2d 70 61 63 6b 61 67 65 64 20 43 20 66 69 6c 65  -packaged C file
5e10: 73 20 70 72 6f 76 69 64 65 64 20 66 6f 72 20 6e  s provided for n
5e20: 6f 6e 2d 55 6e 69 78 20 6c 69 6b 65 20 70 6c 61  on-Unix like pla
5e30: 74 66 6f 72 6d 73 20 6f 6e 20 74 68 65 20 77 65  tforms on the we
5e40: 62 73 69 74 65 2e 0a 41 6e 79 20 53 51 4c 49 54  bsite..Any SQLIT
5e50: 45 5f 4f 4d 49 54 5f 2a 20 6f 70 74 69 6f 6e 73  E_OMIT_* options
5e60: 20 77 68 69 63 68 20 63 61 6e 20 62 65 20 75 73   which can be us
5e70: 65 64 20 64 69 72 65 63 74 6c 79 20 77 69 74 68  ed directly with
5e80: 20 74 68 65 20 5b 61 6d 61 6c 67 61 6d 61 74 69   the [amalgamati
5e90: 6f 6e 5d 20 0a 61 72 65 20 6c 69 73 74 65 64 20  on] .are listed 
5ea0: 62 65 6c 6f 77 2c 20 68 6f 77 65 76 65 72 2c 20  below, however, 
5eb0: 74 68 65 20 77 61 72 6e 69 6e 67 73 20 69 6e 20  the warnings in 
5ec0: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 70 61  the following pa
5ed0: 72 61 67 72 61 70 68 20 73 68 6f 75 6c 64 20 62  ragraph should b
5ee0: 65 20 6e 6f 74 65 64 2e 0a 3c 2f 70 3e 0a 0a 3c  e noted..</p>..<
5ef0: 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 69 3e 3c  blockquote>.<i><
5f00: 62 3e 49 6d 70 6f 72 74 61 6e 74 20 4e 6f 74 65  b>Important Note
5f10: 3a 3c 2f 62 3e 20 54 68 65 20 53 51 4c 49 54 45  :</b> The SQLITE
5f20: 5f 4f 4d 49 54 5f 2a 20 6f 70 74 69 6f 6e 73 20  _OMIT_* options 
5f30: 64 6f 20 6e 6f 74 20 77 6f 72 6b 20 77 69 74 68  do not work with
5f40: 20 74 68 65 0a 5b 61 6d 61 6c 67 61 6d 61 74 69   the.[amalgamati
5f50: 6f 6e 5d 20 6f 72 20 77 69 74 68 20 70 72 65 2d  on] or with pre-
5f60: 70 61 63 6b 61 67 65 64 20 43 20 63 6f 64 65 20  packaged C code 
5f70: 66 69 6c 65 73 2e 20 20 53 51 4c 49 54 45 5f 4f  files.  SQLITE_O
5f80: 4d 49 54 5f 2a 20 63 6f 6d 70 69 6c 65 2d 74 69  MIT_* compile-ti
5f90: 6d 65 0a 6f 70 74 69 6f 6e 73 20 6f 6e 6c 79 20  me.options only 
5fa0: 77 6f 72 6b 20 63 6f 72 72 65 63 74 6c 79 20 77  work correctly w
5fb0: 68 65 6e 20 53 51 4c 69 74 65 20 69 73 20 62 75  hen SQLite is bu
5fc0: 69 6c 74 20 66 72 6f 6d 20 63 61 6e 6f 6e 69 63  ilt from canonic
5fd0: 61 6c 20 73 6f 75 72 63 65 20 66 69 6c 65 73 2e  al source files.
5fe0: 0a 3c 2f 69 3e 0a 3c 2f 62 6c 6f 63 6b 71 75 6f  .</i>.</blockquo
5ff0: 74 65 3e 0a 0a 0a 3c 70 3e 53 70 65 63 69 61 6c  te>...<p>Special
6000: 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 74 68 65   versions of the
6010: 20 53 51 4c 69 74 65 20 61 6d 61 6c 67 61 6d 61   SQLite amalgama
6020: 74 69 6f 6e 20 74 68 61 74 20 64 6f 20 77 6f 72  tion that do wor
6030: 6b 20 77 69 74 68 20 61 0a 70 72 65 64 65 74 65  k with a.predete
6040: 72 6d 69 6e 65 64 20 73 65 74 20 6f 66 20 53 51  rmined set of SQ
6050: 4c 49 54 45 5f 4f 4d 49 54 5f 2a 20 6f 70 74 69  LITE_OMIT_* opti
6060: 6f 6e 73 20 63 61 6e 20 62 65 20 67 65 6e 65 72  ons can be gener
6070: 61 74 65 64 2e 20 20 54 6f 20 64 6f 20 73 6f 2c  ated.  To do so,
6080: 0a 6d 61 6b 65 20 61 20 63 6f 70 79 20 6f 66 20  .make a copy of 
6090: 74 68 65 20 4d 61 6b 65 66 69 6c 65 2e 6c 69 6e  the Makefile.lin
60a0: 75 78 2d 67 63 63 20 6d 61 6b 65 66 69 6c 65 20  ux-gcc makefile 
60b0: 74 65 6d 70 6c 61 74 65 20 69 6e 20 74 68 65 20  template in the 
60c0: 63 61 6e 6f 6e 69 63 61 6c 0a 73 6f 75 72 63 65  canonical.source
60d0: 20 63 6f 64 65 20 64 69 73 74 72 69 62 75 74 69   code distributi
60e0: 6f 6e 2e 20 20 43 68 61 6e 67 65 20 74 68 65 20  on.  Change the 
60f0: 6e 61 6d 65 20 6f 66 20 79 6f 75 72 20 63 6f 70  name of your cop
6100: 79 20 74 6f 20 73 69 6d 70 6c 79 20 22 4d 61 6b  y to simply "Mak
6110: 65 66 69 6c 65 22 2e 0a 54 68 65 6e 20 65 64 69  efile"..Then edi
6120: 74 20 22 4d 61 6b 65 66 69 6c 65 22 20 74 6f 20  t "Makefile" to 
6130: 73 65 74 20 75 70 20 61 70 70 72 6f 70 72 69 61  set up appropria
6140: 74 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  te compile-time 
6150: 6f 70 74 69 6f 6e 73 2e 20 20 54 68 65 6e 0a 74  options.  Then.t
6160: 79 70 65 3a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  ype:.<blockquote
6170: 3e 3c 74 74 3e 6d 61 6b 65 20 63 6c 65 61 6e 3b  ><tt>make clean;
6180: 20 6d 61 6b 65 20 73 71 6c 69 74 65 33 2e 63 3c   make sqlite3.c<
6190: 2f 74 74 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  /tt></blockquote
61a0: 3e 0a 54 68 65 20 72 65 73 75 6c 74 69 6e 67 20  >.The resulting 
61b0: 22 73 71 6c 69 74 65 33 2e 63 22 20 61 6d 61 6c  "sqlite3.c" amal
61c0: 67 61 6d 61 74 69 6f 6e 20 63 6f 64 65 20 66 69  gamation code fi
61d0: 6c 65 20 28 61 6e 64 20 69 74 73 20 61 73 73 6f  le (and its asso
61e0: 63 69 61 74 65 64 0a 68 65 61 64 65 72 20 66 69  ciated.header fi
61f0: 6c 65 20 22 73 71 6c 69 74 65 33 2e 68 22 29 20  le "sqlite3.h") 
6200: 63 61 6e 20 74 68 65 6e 20 62 65 20 6d 6f 76 65  can then be move
6210: 64 20 74 6f 20 61 20 6e 6f 6e 2d 75 6e 69 78 20  d to a non-unix 
6220: 70 6c 61 74 66 6f 72 6d 0a 66 6f 72 20 66 69 6e  platform.for fin
6230: 61 6c 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 75  al compilation u
6240: 73 69 6e 67 20 61 20 6e 61 74 69 76 65 20 63 6f  sing a native co
6250: 6d 70 69 6c 65 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e  mpiler.</p>..<p>
6260: 41 6c 6c 20 6f 66 20 74 68 65 20 53 51 4c 49 54  All of the SQLIT
6270: 45 5f 4f 4d 49 54 5f 2a 20 6f 70 74 69 6f 6e 73  E_OMIT_* options
6280: 20 61 72 65 20 75 6e 73 75 70 70 6f 72 74 65 64   are unsupported
6290: 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  .</p>..<blockquo
62a0: 74 65 3e 0a 3c 69 3e 3c 62 3e 49 6d 70 6f 72 74  te>.<i><b>Import
62b0: 61 6e 74 20 4e 6f 74 65 3a 3c 2f 62 3e 0a 54 68  ant Note:</b>.Th
62c0: 65 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 2a 20  e SQLITE_OMIT_* 
62d0: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74  compile-time opt
62e0: 69 6f 6e 73 20 61 72 65 20 75 6e 73 75 70 70 6f  ions are unsuppo
62f0: 72 74 65 64 2e 0a 3c 2f 69 3e 3c 2f 62 6c 6f 63  rted..</i></bloc
6300: 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 0a 54 68 65  kquote>..<p>.The
6310: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 2a 20 63   SQLITE_OMIT_* c
6320: 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69  ompile-time opti
6330: 6f 6e 73 20 61 72 65 20 75 73 75 61 6c 6c 79 20  ons are usually 
6340: 75 6e 74 65 73 74 65 64 20 61 6e 64 0a 61 72 65  untested and.are
6350: 20 61 6c 6d 6f 73 74 20 63 65 72 74 61 69 6e 6c   almost certainl
6360: 79 20 75 6e 74 65 73 74 65 64 20 69 6e 20 63 6f  y untested in co
6370: 6d 62 69 6e 61 74 69 6f 6e 2e 0a 41 6e 79 20 6f  mbination..Any o
6380: 72 20 61 6c 6c 20 6f 66 20 74 68 65 73 65 20 6f  r all of these o
6390: 70 74 69 6f 6e 73 20 6d 61 79 20 62 65 20 72 65  ptions may be re
63a0: 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68 65 20 63  moved from the c
63b0: 6f 64 65 20 69 6e 20 66 75 74 75 72 65 20 72 65  ode in future re
63c0: 6c 65 61 73 65 73 0a 61 6e 64 20 77 69 74 68 6f  leases.and witho
63d0: 75 74 20 77 61 72 6e 69 6e 67 2e 20 20 46 6f 72  ut warning.  For
63e0: 20 61 6e 79 20 70 61 72 74 69 63 75 6c 61 72 20   any particular 
63f0: 72 65 6c 65 61 73 65 2c 20 73 6f 6d 65 20 6f 66  release, some of
6400: 20 74 68 65 73 65 0a 6f 70 74 69 6f 6e 73 20 6d   these.options m
6410: 61 79 20 63 61 75 73 65 20 63 6f 6d 70 69 6c 65  ay cause compile
6420: 2d 74 69 6d 65 20 6f 72 20 72 75 6e 2d 74 69 6d  -time or run-tim
6430: 65 20 66 61 69 6c 75 72 65 73 2c 20 70 61 72 74  e failures, part
6440: 69 63 75 6c 61 72 6c 79 0a 77 68 65 6e 20 75 73  icularly.when us
6450: 65 64 20 69 6e 20 63 6f 6d 62 69 6e 61 74 69 6f  ed in combinatio
6460: 6e 20 77 69 74 68 20 6f 74 68 65 72 20 6f 70 74  n with other opt
6470: 69 6f 6e 73 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  ions.</p>..<tcl>
6480: 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20  .COMPILE_OPTION 
6490: 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54  {SQLITE_OMIT_ALT
64a0: 45 52 54 41 42 4c 45 7d 20 7b 0a 20 20 57 68 65  ERTABLE} {.  Whe
64b0: 6e 20 74 68 69 73 20 6f 70 74 69 6f 6e 20 69 73  n this option is
64c0: 20 64 65 66 69 6e 65 64 2c 20 74 68 65 20 0a 20   defined, the . 
64d0: 20 5b 41 4c 54 45 52 20 54 41 42 4c 45 5d 20 63   [ALTER TABLE] c
64e0: 6f 6d 6d 61 6e 64 20 69 73 20 6e 6f 74 20 69 6e  ommand is not in
64f0: 63 6c 75 64 65 64 20 69 6e 20 74 68 65 20 0a 20  cluded in the . 
6500: 20 6c 69 62 72 61 72 79 2e 20 45 78 65 63 75 74   library. Execut
6510: 69 6e 67 20 61 6e 20 5b 41 4c 54 45 52 20 54 41  ing an [ALTER TA
6520: 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74 20 63  BLE] statement c
6530: 61 75 73 65 73 20 61 20 70 61 72 73 65 20 65 72  auses a parse er
6540: 72 6f 72 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f  ror..}..COMPILE_
6550: 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f  OPTION {SQLITE_O
6560: 4d 49 54 5f 41 4e 41 4c 59 5a 45 7d 20 7b 0a 20  MIT_ANALYZE} {. 
6570: 20 57 68 65 6e 20 74 68 69 73 20 6f 70 74 69 6f   When this optio
6580: 6e 20 69 73 20 64 65 66 69 6e 65 64 2c 20 74 68  n is defined, th
6590: 65 20 5b 41 4e 41 4c 59 5a 45 5d 20 63 6f 6d 6d  e [ANALYZE] comm
65a0: 61 6e 64 20 69 73 20 6f 6d 69 74 74 65 64 20 66  and is omitted f
65b0: 72 6f 6d 0a 20 20 74 68 65 20 62 75 69 6c 64 2e  rom.  the build.
65c0: 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49  .}..COMPILE_OPTI
65d0: 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ON {SQLITE_OMIT_
65e0: 41 54 54 41 43 48 7d 20 7b 0a 20 20 57 68 65 6e  ATTACH} {.  When
65f0: 20 74 68 69 73 20 6f 70 74 69 6f 6e 20 69 73 20   this option is 
6600: 64 65 66 69 6e 65 64 2c 20 74 68 65 20 5b 41 54  defined, the [AT
6610: 54 41 43 48 5d 20 61 6e 64 20 5b 44 45 54 41 43  TACH] and [DETAC
6620: 48 5d 20 63 6f 6d 6d 61 6e 64 73 20 61 72 65 0a  H] commands are.
6630: 20 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74    omitted from t
6640: 68 65 20 62 75 69 6c 64 2e 0a 7d 0a 0a 43 4f 4d  he build..}..COM
6650: 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c  PILE_OPTION {SQL
6660: 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49  ITE_OMIT_AUTHORI
6670: 5a 41 54 49 4f 4e 7d 20 7b 0a 20 20 44 65 66 69  ZATION} {.  Defi
6680: 6e 69 6e 67 20 74 68 69 73 20 6f 70 74 69 6f 6e  ning this option
6690: 20 6f 6d 69 74 73 20 74 68 65 20 61 75 74 68 6f   omits the autho
66a0: 72 69 7a 61 74 69 6f 6e 20 63 61 6c 6c 62 61 63  rization callbac
66b0: 6b 20 66 65 61 74 75 72 65 20 66 72 6f 6d 20 74  k feature from t
66c0: 68 65 0a 20 20 6c 69 62 72 61 72 79 2e 20 54 68  he.  library. Th
66d0: 65 20 5b 73 71 6c 69 74 65 33 5f 73 65 74 5f 61  e [sqlite3_set_a
66e0: 75 74 68 6f 72 69 7a 65 72 28 29 5d 20 41 50 49  uthorizer()] API
66f0: 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 6e 6f 74   function is not
6700: 20 70 72 65 73 65 6e 74 0a 20 20 69 6e 20 74 68   present.  in th
6710: 65 20 6c 69 62 72 61 72 79 2e 0a 7d 0a 0a 43 4f  e library..}..CO
6720: 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51  MPILE_OPTION {SQ
6730: 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e  LITE_OMIT_AUTOIN
6740: 43 52 45 4d 45 4e 54 7d 20 7b 0a 20 20 54 68 69  CREMENT} {.  Thi
6750: 73 20 6f 70 74 69 6f 6e 20 69 73 20 75 73 65 64  s option is used
6760: 20 74 6f 20 6f 6d 69 74 20 74 68 65 20 0a 20 20   to omit the .  
6770: 5b 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 5d 20  [AUTOINCREMENT] 
6780: 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 2e 20 57  functionality. W
6790: 68 65 6e 20 74 68 69 73 20 0a 20 20 69 73 20 6d  hen this .  is m
67a0: 61 63 72 6f 20 69 73 20 64 65 66 69 6e 65 64 2c  acro is defined,
67b0: 20 63 6f 6c 75 6d 6e 73 20 64 65 63 6c 61 72 65   columns declare
67c0: 64 20 61 73 20 0a 20 20 22 5b 49 4e 54 45 47 45  d as .  "[INTEGE
67d0: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 5d 20 41  R PRIMARY KEY] A
67e0: 55 54 4f 49 4e 43 52 45 4d 45 4e 54 22 0a 20 20  UTOINCREMENT".  
67f0: 62 65 68 61 76 65 20 69 6e 20 74 68 65 20 73 61  behave in the sa
6800: 6d 65 20 77 61 79 20 61 73 20 63 6f 6c 75 6d 6e  me way as column
6810: 73 20 64 65 63 6c 61 72 65 64 20 61 73 20 22 5b  s declared as "[
6820: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
6830: 4b 45 59 5d 22 20 77 68 65 6e 20 61 20 0a 20 20  KEY]" when a .  
6840: 4e 55 4c 4c 20 69 73 20 69 6e 73 65 72 74 65 64  NULL is inserted
6850: 2e 20 54 68 65 20 73 71 6c 69 74 65 5f 73 65 71  . The sqlite_seq
6860: 75 65 6e 63 65 20 73 79 73 74 65 6d 20 74 61 62  uence system tab
6870: 6c 65 20 69 73 20 6e 65 69 74 68 65 72 20 63 72  le is neither cr
6880: 65 61 74 65 64 2c 20 6e 6f 72 0a 20 20 72 65 73  eated, nor.  res
6890: 70 65 63 74 65 64 20 69 66 20 69 74 20 61 6c 72  pected if it alr
68a0: 65 61 64 79 20 65 78 69 73 74 73 2e 0a 7d 0a 0a  eady exists..}..
68b0: 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b  COMPILE_OPTION {
68c0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f  SQLITE_OMIT_AUTO
68d0: 49 4e 49 54 7d 20 7b 0a 20 20 46 6f 72 20 62 61  INIT} {.  For ba
68e0: 63 6b 77 61 72 64 73 20 63 6f 6d 70 61 74 69 62  ckwards compatib
68f0: 69 6c 69 74 79 20 77 69 74 68 20 6f 6c 64 65 72  ility with older
6900: 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c   versions of SQL
6910: 69 74 65 20 74 68 61 74 20 6c 61 63 6b 0a 20 20  ite that lack.  
6920: 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 69 6e 69  the [sqlite3_ini
6930: 74 69 61 6c 69 7a 65 28 29 5d 20 69 6e 74 65 72  tialize()] inter
6940: 66 61 63 65 2c 20 74 68 65 20 5b 73 71 6c 69 74  face, the [sqlit
6950: 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65 28 29 5d  e3_initialize()]
6960: 20 69 6e 74 65 72 66 61 63 65 0a 20 20 69 73 20   interface.  is 
6970: 63 61 6c 6c 65 64 20 61 75 74 6f 6d 61 74 69 63  called automatic
6980: 61 6c 6c 79 20 75 70 6f 6e 20 65 6e 74 72 79 20  ally upon entry 
6990: 74 6f 20 63 65 72 74 61 69 6e 20 6b 65 79 20 69  to certain key i
69a0: 6e 74 65 72 66 61 63 65 73 20 73 75 63 68 20 61  nterfaces such a
69b0: 73 0a 20 20 5b 73 71 6c 69 74 65 33 5f 6f 70 65  s.  [sqlite3_ope
69c0: 6e 28 29 5d 2c 20 5b 73 71 6c 69 74 65 33 5f 76  n()], [sqlite3_v
69d0: 66 73 5f 72 65 67 69 73 74 65 72 28 29 5d 2c 20  fs_register()], 
69e0: 61 6e 64 20 5b 73 71 6c 69 74 65 33 5f 6d 70 72  and [sqlite3_mpr
69f0: 69 6e 74 66 28 29 5d 2e 0a 20 20 54 68 65 20 6f  intf()]..  The o
6a00: 76 65 72 68 65 61 64 20 6f 66 20 69 6e 76 6f 6b  verhead of invok
6a10: 69 6e 67 20 5b 73 71 6c 69 74 65 33 5f 69 6e 69  ing [sqlite3_ini
6a20: 74 69 61 6c 69 7a 65 28 29 5d 20 61 75 74 6f 6d  tialize()] autom
6a30: 61 74 69 63 61 6c 6c 79 20 69 6e 20 74 68 69 73  atically in this
6a40: 0a 20 20 77 61 79 20 6d 61 79 20 62 65 20 6f 6d  .  way may be om
6a50: 69 74 74 65 64 20 62 79 20 62 75 69 6c 64 69 6e  itted by buildin
6a60: 67 20 53 51 4c 69 74 65 20 77 69 74 68 20 74 68  g SQLite with th
6a70: 65 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  e SQLITE_OMIT_AU
6a80: 54 4f 49 4e 49 54 0a 20 20 43 2d 70 72 65 70 72  TOINIT.  C-prepr
6a90: 6f 63 65 73 73 6f 72 20 6d 61 63 72 6f 2e 20 20  ocessor macro.  
6aa0: 57 68 65 6e 20 62 75 69 6c 74 20 75 73 69 6e 67  When built using
6ab0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
6ac0: 4f 49 4e 49 54 2c 20 53 51 4c 69 74 65 0a 20 20  OINIT, SQLite.  
6ad0: 77 69 6c 6c 20 6e 6f 74 20 61 75 74 6f 6d 61 74  will not automat
6ae0: 69 63 61 6c 6c 79 20 69 6e 69 74 69 61 6c 69 7a  ically initializ
6af0: 65 20 69 74 73 65 6c 66 20 61 6e 64 20 74 68 65  e itself and the
6b00: 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 69 73 20   application is 
6b10: 72 65 71 75 69 72 65 64 0a 20 20 74 6f 20 69 6e  required.  to in
6b20: 76 6f 6b 65 20 5b 73 71 6c 69 74 65 33 5f 69 6e  voke [sqlite3_in
6b30: 69 74 69 61 6c 69 7a 65 28 29 5d 20 64 69 72 65  itialize()] dire
6b40: 63 74 6c 79 20 70 72 69 6f 72 20 74 6f 20 62 65  ctly prior to be
6b50: 67 69 6e 6e 69 6e 67 20 75 73 65 20 6f 66 20 74  ginning use of t
6b60: 68 65 0a 20 20 53 51 4c 69 74 65 20 6c 69 62 72  he.  SQLite libr
6b70: 61 72 79 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f  ary..}..COMPILE_
6b80: 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f  OPTION {SQLITE_O
6b90: 4d 49 54 5f 41 55 54 4f 4d 41 54 49 43 5f 49 4e  MIT_AUTOMATIC_IN
6ba0: 44 45 58 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70  DEX} {.  This op
6bb0: 74 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20  tion is used to 
6bc0: 6f 6d 69 74 20 74 68 65 20 0a 20 20 5b 61 75 74  omit the .  [aut
6bd0: 6f 6d 61 74 69 63 20 69 6e 64 65 78 69 6e 67 5d  omatic indexing]
6be0: 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 2e 0a   functionality..
6bf0: 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f  }..COMPILE_OPTIO
6c00: 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  N {SQLITE_OMIT_A
6c10: 55 54 4f 52 45 53 45 54 7d 20 7b 0a 20 20 42 79  UTORESET} {.  By
6c20: 20 64 65 66 61 75 6c 74 2c 20 74 68 65 20 5b 73   default, the [s
6c30: 71 6c 69 74 65 33 5f 73 74 65 70 28 29 5d 20 69  qlite3_step()] i
6c40: 6e 74 65 72 66 61 63 65 20 77 69 6c 6c 20 61 75  nterface will au
6c50: 74 6f 6d 61 74 69 63 61 6c 6c 79 20 69 6e 76 6f  tomatically invo
6c60: 6b 65 0a 20 20 5b 73 71 6c 69 74 65 33 5f 72 65  ke.  [sqlite3_re
6c70: 73 65 74 28 29 5d 20 74 6f 20 72 65 73 65 74 20  set()] to reset 
6c80: 74 68 65 20 5b 70 72 65 70 61 72 65 64 20 73 74  the [prepared st
6c90: 61 74 65 6d 65 6e 74 5d 20 69 66 20 6e 65 63 65  atement] if nece
6ca0: 73 73 61 72 79 2e 20 20 54 68 69 73 0a 20 20 63  ssary.  This.  c
6cb0: 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69  ompile-time opti
6cc0: 6f 6e 20 63 68 61 6e 67 65 73 20 74 68 61 74 20  on changes that 
6cd0: 62 65 68 61 76 69 6f 72 20 73 6f 20 74 68 61 74  behavior so that
6ce0: 20 5b 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29   [sqlite3_step()
6cf0: 5d 20 77 69 6c 6c 0a 20 20 72 65 74 75 72 6e 20  ] will.  return 
6d00: 5b 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 5d 20  [SQLITE_MISUSE] 
6d10: 69 66 20 69 74 20 63 61 6c 6c 65 64 20 61 67 61  if it called aga
6d20: 69 6e 20 61 66 74 65 72 20 72 65 74 75 72 6e 69  in after returni
6d30: 6e 67 20 61 6e 79 74 68 69 6e 67 20 6f 74 68 65  ng anything othe
6d40: 72 0a 20 20 74 68 61 6e 20 5b 53 51 4c 49 54 45  r.  than [SQLITE
6d50: 5f 52 4f 57 5d 2c 20 5b 53 51 4c 49 54 45 5f 42  _ROW], [SQLITE_B
6d60: 55 53 59 5d 2c 20 6f 72 20 5b 53 51 4c 49 54 45  USY], or [SQLITE
6d70: 5f 4c 4f 43 4b 45 44 5d 20 75 6e 6c 65 73 73 20  _LOCKED] unless 
6d80: 74 68 65 72 65 20 77 61 73 20 61 6e 0a 20 20 69  there was an.  i
6d90: 6e 74 65 72 76 65 6e 69 6e 67 20 63 61 6c 6c 20  ntervening call 
6da0: 74 6f 20 5b 73 71 6c 69 74 65 33 5f 72 65 73 65  to [sqlite3_rese
6db0: 74 28 29 5d 2e 0a 0a 20 20 49 6e 20 53 51 4c 69  t()]...  In SQLi
6dc0: 74 65 20 76 65 72 73 69 6f 6e 20 33 2e 36 2e 32  te version 3.6.2
6dd0: 33 2e 31 20 61 6e 64 20 65 61 72 6c 69 65 72 2c  3.1 and earlier,
6de0: 20 5b 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29   [sqlite3_step()
6df0: 5d 20 75 73 65 64 20 74 6f 20 61 6c 77 61 79 73  ] used to always
6e00: 0a 20 20 72 65 74 75 72 6e 20 5b 53 51 4c 49 54  .  return [SQLIT
6e10: 45 5f 4d 49 53 55 53 45 5d 20 69 66 20 69 74 20  E_MISUSE] if it 
6e20: 77 61 73 20 69 6e 76 6f 6b 65 64 20 61 67 61 69  was invoked agai
6e30: 6e 20 61 66 74 65 72 20 72 65 74 75 72 6e 69 6e  n after returnin
6e40: 67 20 61 6e 79 74 68 69 6e 67 0a 20 20 6f 74 68  g anything.  oth
6e50: 65 72 20 74 68 61 6e 20 5b 53 51 4c 49 54 45 5f  er than [SQLITE_
6e60: 52 4f 57 5d 20 77 69 74 68 6f 75 74 20 61 6e 20  ROW] without an 
6e70: 69 6e 74 65 72 76 65 6e 69 6e 67 20 63 61 6c 6c  intervening call
6e80: 20 74 6f 20 5b 73 71 6c 69 74 65 33 5f 72 65 73   to [sqlite3_res
6e90: 65 74 28 29 5d 2e 0a 20 20 54 68 69 73 20 63 61  et()]..  This ca
6ea0: 75 73 65 64 20 70 72 6f 62 6c 65 6d 73 20 6f 6e  used problems on
6eb0: 20 73 6f 6d 65 20 70 6f 6f 72 6c 79 20 77 72 69   some poorly wri
6ec0: 74 74 65 6e 20 73 6d 61 72 74 70 68 6f 6e 65 20  tten smartphone 
6ed0: 61 70 70 6c 69 63 61 74 69 6f 6e 73 20 77 68 69  applications whi
6ee0: 63 68 0a 20 20 64 69 64 20 6e 6f 74 20 63 6f 72  ch.  did not cor
6ef0: 72 65 63 74 6c 79 20 68 61 6e 64 6c 65 20 74 68  rectly handle th
6f00: 65 20 5b 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44  e [SQLITE_LOCKED
6f10: 5d 20 61 6e 64 20 5b 53 51 4c 49 54 45 5f 42 55  ] and [SQLITE_BU
6f20: 53 59 5d 20 65 72 72 6f 72 20 0a 20 20 72 65 74  SY] error .  ret
6f30: 75 72 6e 73 2e 20 20 52 61 74 68 65 72 20 74 68  urns.  Rather th
6f40: 61 6e 20 66 69 78 20 74 68 65 20 6d 61 6e 79 20  an fix the many 
6f50: 64 65 66 65 63 74 69 76 65 20 73 6d 61 72 74 70  defective smartp
6f60: 68 6f 6e 65 20 61 70 70 6c 69 63 61 74 69 6f 6e  hone application
6f70: 73 2c 20 0a 20 20 74 68 65 20 62 65 68 61 76 69  s, .  the behavi
6f80: 6f 72 20 6f 66 20 53 51 4c 69 74 65 20 77 61 73  or of SQLite was
6f90: 20 63 68 61 6e 67 65 64 20 69 6e 20 33 2e 36 2e   changed in 3.6.
6fa0: 32 33 2e 32 20 74 6f 20 61 75 74 6f 6d 61 74 69  23.2 to automati
6fb0: 63 61 6c 6c 79 20 72 65 73 65 74 0a 20 20 74 68  cally reset.  th
6fc0: 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  e prepared state
6fd0: 6d 65 6e 74 2e 20 20 42 75 74 20 74 68 61 74 20  ment.  But that 
6fe0: 63 68 61 6e 67 65 64 20 63 61 75 73 65 64 20 69  changed caused i
6ff0: 73 73 75 65 73 20 69 6e 20 6f 74 68 65 72 20 0a  ssues in other .
7000: 20 20 69 6d 70 72 6f 70 65 72 6c 79 20 69 6d 70    improperly imp
7010: 6c 65 6d 65 6e 74 65 64 20 61 70 70 6c 69 63 61  lemented applica
7020: 74 69 6f 6e 73 20 74 68 61 74 20 77 65 72 65 20  tions that were 
7030: 61 63 74 75 61 6c 6c 79 20 6c 6f 6f 6b 69 6e 67  actually looking
7040: 0a 20 20 66 6f 72 20 61 6e 20 5b 53 51 4c 49 54  .  for an [SQLIT
7050: 45 5f 4d 49 53 55 53 45 5d 20 72 65 74 75 72 6e  E_MISUSE] return
7060: 20 74 6f 20 74 65 72 6d 69 6e 61 74 65 20 74 68   to terminate th
7070: 65 69 72 20 71 75 65 72 79 20 6c 6f 6f 70 73 2e  eir query loops.
7080: 20 20 28 41 6e 79 74 69 6d 65 0a 20 20 61 6e 20    (Anytime.  an 
7090: 61 70 70 6c 69 63 61 74 69 6f 6e 20 67 65 74 73  application gets
70a0: 20 61 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53   an SQLITE_MISUS
70b0: 45 20 65 72 72 6f 72 20 63 6f 64 65 20 66 72 6f  E error code fro
70c0: 6d 20 53 51 4c 69 74 65 2c 20 74 68 61 74 20 6d  m SQLite, that m
70d0: 65 61 6e 73 20 74 68 65 0a 20 20 61 70 70 6c 69  eans the.  appli
70e0: 63 61 74 69 6f 6e 20 69 73 20 6d 69 73 75 73 69  cation is misusi
70f0: 6e 67 20 74 68 65 20 53 51 4c 69 74 65 20 69 6e  ng the SQLite in
7100: 74 65 72 66 61 63 65 20 61 6e 64 20 69 73 20 74  terface and is t
7110: 68 75 73 20 69 6e 63 6f 72 72 65 63 74 6c 79 0a  hus incorrectly.
7120: 20 20 69 6d 70 6c 65 6d 65 6e 74 65 64 2e 29 20    implemented.) 
7130: 20 54 68 65 20 53 51 4c 49 54 45 5f 4f 4d 49 54   The SQLITE_OMIT
7140: 5f 41 55 54 4f 52 45 53 45 54 20 69 6e 74 65 72  _AUTORESET inter
7150: 66 61 63 65 20 77 61 73 20 61 64 64 65 64 20 74  face was added t
7160: 6f 20 53 51 4c 69 74 65 0a 20 20 76 65 72 73 69  o SQLite.  versi
7170: 6f 6e 20 33 2e 37 2e 35 20 69 6e 20 61 6e 20 65  on 3.7.5 in an e
7180: 66 66 6f 72 74 20 74 6f 20 67 65 74 20 61 6c 6c  ffort to get all
7190: 20 6f 66 20 74 68 65 20 28 62 72 6f 6b 65 6e 29   of the (broken)
71a0: 0a 20 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 20  .  applications 
71b0: 74 6f 20 77 6f 72 6b 20 61 67 61 69 6e 20 77 69  to work again wi
71c0: 74 68 6f 75 74 20 68 61 76 69 6e 67 20 74 6f 20  thout having to 
71d0: 61 63 74 75 61 6c 6c 79 20 66 69 78 20 74 68 65  actually fix the
71e0: 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 2e 0a 7d   applications..}
71f0: 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e  ..COMPILE_OPTION
7200: 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55   {SQLITE_OMIT_AU
7210: 54 4f 56 41 43 55 55 4d 7d 20 7b 0a 20 20 49 66  TOVACUUM} {.  If
7220: 20 74 68 69 73 20 6f 70 74 69 6f 6e 20 69 73 20   this option is 
7230: 64 65 66 69 6e 65 64 2c 20 74 68 65 20 6c 69 62  defined, the lib
7240: 72 61 72 79 20 63 61 6e 6e 6f 74 20 63 72 65 61  rary cannot crea
7250: 74 65 20 6f 72 20 77 72 69 74 65 20 74 6f 20 0a  te or write to .
7260: 20 20 64 61 74 61 62 61 73 65 73 20 74 68 61 74    databases that
7270: 20 73 75 70 70 6f 72 74 20 5b 61 75 74 6f 5f 76   support [auto_v
7280: 61 63 75 75 6d 5d 2e 0a 20 20 45 78 65 63 75 74  acuum]..  Execut
7290: 69 6e 67 20 61 20 5b 50 52 41 47 4d 41 20 61 75  ing a [PRAGMA au
72a0: 74 6f 5f 76 61 63 75 75 6d 5d 20 73 74 61 74 65  to_vacuum] state
72b0: 6d 65 6e 74 20 69 73 20 6e 6f 74 20 61 6e 20 65  ment is not an e
72c0: 72 72 6f 72 0a 20 20 28 73 69 6e 63 65 20 75 6e  rror.  (since un
72d0: 6b 6e 6f 77 6e 20 50 52 41 47 4d 41 73 20 61 72  known PRAGMAs ar
72e0: 65 20 73 69 6c 65 6e 74 6c 79 20 69 67 6e 6f 72  e silently ignor
72f0: 65 64 29 2c 20 62 75 74 20 64 6f 65 73 20 6e 6f  ed), but does no
7300: 74 20 72 65 74 75 72 6e 20 61 20 76 61 6c 75 65  t return a value
7310: 0a 20 20 6f 72 20 6d 6f 64 69 66 79 20 74 68 65  .  or modify the
7320: 20 61 75 74 6f 2d 76 61 63 75 75 6d 20 66 6c 61   auto-vacuum fla
7330: 67 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  g in the databas
7340: 65 20 66 69 6c 65 2e 20 49 66 20 61 20 64 61 74  e file. If a dat
7350: 61 62 61 73 65 20 74 68 61 74 0a 20 20 73 75 70  abase that.  sup
7360: 70 6f 72 74 73 20 61 75 74 6f 2d 76 61 63 75 75  ports auto-vacuu
7370: 6d 20 69 73 20 6f 70 65 6e 65 64 20 62 79 20 61  m is opened by a
7380: 20 6c 69 62 72 61 72 79 20 63 6f 6d 70 69 6c 65   library compile
7390: 64 20 77 69 74 68 20 74 68 69 73 20 6f 70 74 69  d with this opti
73a0: 6f 6e 2c 20 69 74 0a 20 20 69 73 20 61 75 74 6f  on, it.  is auto
73b0: 6d 61 74 69 63 61 6c 6c 79 20 6f 70 65 6e 65 64  matically opened
73c0: 20 69 6e 20 72 65 61 64 2d 6f 6e 6c 79 20 6d 6f   in read-only mo
73d0: 64 65 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f  de..}..COMPILE_O
73e0: 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d  PTION {SQLITE_OM
73f0: 49 54 5f 42 45 54 57 45 45 4e 5f 4f 50 54 49 4d  IT_BETWEEN_OPTIM
7400: 49 5a 41 54 49 4f 4e 7d 20 7b 0a 20 20 54 68 69  IZATION} {.  Thi
7410: 73 20 6f 70 74 69 6f 6e 20 64 69 73 61 62 6c 65  s option disable
7420: 73 20 74 68 65 20 75 73 65 20 6f 66 20 69 6e 64  s the use of ind
7430: 69 63 65 73 20 77 69 74 68 20 57 48 45 52 45 20  ices with WHERE 
7440: 63 6c 61 75 73 65 20 74 65 72 6d 73 0a 20 20 74  clause terms.  t
7450: 68 61 74 20 65 6d 70 6c 6f 79 20 74 68 65 20 42  hat employ the B
7460: 45 54 57 45 45 4e 20 6f 70 65 72 61 74 6f 72 2e  ETWEEN operator.
7470: 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49  .}..COMPILE_OPTI
7480: 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ON {SQLITE_OMIT_
7490: 42 4c 4f 42 5f 4c 49 54 45 52 41 4c 7d 20 7b 0a  BLOB_LITERAL} {.
74a0: 20 20 57 68 65 6e 20 74 68 69 73 20 6f 70 74 69    When this opti
74b0: 6f 6e 20 69 73 20 64 65 66 69 6e 65 64 2c 20 69  on is defined, i
74c0: 74 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c  t is not possibl
74d0: 65 20 74 6f 20 73 70 65 63 69 66 79 20 61 20 62  e to specify a b
74e0: 6c 6f 62 20 69 6e 0a 20 20 61 6e 20 53 51 4c 20  lob in.  an SQL 
74f0: 73 74 61 74 65 6d 65 6e 74 20 75 73 69 6e 67 20  statement using 
7500: 74 68 65 20 58 27 41 42 43 44 27 20 73 79 6e 74  the X'ABCD' synt
7510: 61 78 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f  ax..}..COMPILE_O
7520: 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d  PTION {SQLITE_OM
7530: 49 54 5f 42 54 52 45 45 43 4f 55 4e 54 7d 20 7b  IT_BTREECOUNT} {
7540: 0a 20 20 57 68 65 6e 20 74 68 69 73 20 6f 70 74  .  When this opt
7550: 69 6f 6e 20 69 73 20 64 65 66 69 6e 65 64 2c 20  ion is defined, 
7560: 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20  an optimization 
7570: 74 68 61 74 20 61 63 63 65 6c 65 72 61 74 65 73  that accelerates
7580: 20 63 6f 75 6e 74 69 6e 67 0a 20 20 61 6c 6c 20   counting.  all 
7590: 65 6e 74 72 69 65 73 20 69 6e 20 61 20 74 61 62  entries in a tab
75a0: 6c 65 20 28 69 6e 20 6f 74 68 65 72 20 77 6f 72  le (in other wor
75b0: 64 73 2c 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74  ds, an optimizat
75c0: 69 6f 6e 20 74 68 61 74 20 68 65 6c 70 73 0a 20  ion that helps. 
75d0: 20 22 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a   "SELECT count(*
75e0: 29 20 46 52 4f 4d 20 74 61 62 6c 65 22 20 72 75  ) FROM table" ru
75f0: 6e 20 66 61 73 74 65 72 29 20 69 73 20 6f 6d 69  n faster) is omi
7600: 74 74 65 64 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45  tted..}..COMPILE
7610: 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f  _OPTION {SQLITE_
7620: 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53  OMIT_BUILTIN_TES
7630: 54 7d 20 7b 0a 20 20 41 20 73 74 61 6e 64 61 72  T} {.  A standar
7640: 64 20 53 51 4c 69 74 65 20 62 75 69 6c 64 20 69  d SQLite build i
7650: 6e 63 6c 75 64 65 73 20 61 20 73 6d 61 6c 6c 20  ncludes a small 
7660: 61 6d 6f 75 6e 74 20 6f 66 20 6c 6f 67 69 63 20  amount of logic 
7670: 63 6f 6e 74 72 6f 6c 6c 65 64 0a 20 20 62 79 20  controlled.  by 
7680: 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 74 65 73  the [sqlite3_tes
7690: 74 5f 63 6f 6e 74 72 6f 6c 28 29 5d 20 69 6e 74  t_control()] int
76a0: 65 72 66 61 63 65 20 74 68 61 74 20 69 73 20 75  erface that is u
76b0: 73 65 64 20 74 6f 20 65 78 65 72 63 69 73 65 0a  sed to exercise.
76c0: 20 20 70 61 72 74 73 20 6f 66 20 74 68 65 20 53    parts of the S
76d0: 51 4c 69 74 65 20 63 6f 72 65 20 74 68 61 74 20  QLite core that 
76e0: 61 72 65 20 64 69 66 66 69 63 75 6c 74 20 74 6f  are difficult to
76f0: 20 63 6f 6e 74 72 6f 6c 20 61 6e 64 20 6d 65 61   control and mea
7700: 73 75 72 65 20 75 73 69 6e 67 0a 20 20 74 68 65  sure using.  the
7710: 20 73 74 61 6e 64 61 72 64 20 41 50 49 2e 20 20   standard API.  
7720: 54 68 69 73 20 6f 70 74 69 6f 6e 20 6f 6d 69 74  This option omit
7730: 73 20 74 68 61 74 20 62 75 69 6c 74 2d 69 6e 20  s that built-in 
7740: 74 65 73 74 20 6c 6f 67 69 63 2e 0a 7d 0a 0a 43  test logic..}..C
7750: 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53  OMPILE_OPTION {S
7760: 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54 7d  QLITE_OMIT_CAST}
7770: 20 7b 0a 20 20 54 68 69 73 20 6f 70 74 69 6f 6e   {.  This option
7780: 20 63 61 75 73 65 73 20 53 51 4c 69 74 65 20 74   causes SQLite t
7790: 6f 20 6f 6d 69 74 20 73 75 70 70 6f 72 74 20 66  o omit support f
77a0: 6f 72 20 74 68 65 20 43 41 53 54 20 6f 70 65 72  or the CAST oper
77b0: 61 74 6f 72 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45  ator..}..COMPILE
77c0: 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f  _OPTION {SQLITE_
77d0: 4f 4d 49 54 5f 43 48 45 43 4b 7d 20 7b 0a 20 20  OMIT_CHECK} {.  
77e0: 54 68 69 73 20 6f 70 74 69 6f 6e 20 63 61 75 73  This option caus
77f0: 65 73 20 53 51 4c 69 74 65 20 74 6f 20 6f 6d 69  es SQLite to omi
7800: 74 20 73 75 70 70 6f 72 74 20 66 6f 72 20 43 48  t support for CH
7810: 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e  ECK constraints.
7820: 0a 20 20 54 68 65 20 70 61 72 73 65 72 20 77 69  .  The parser wi
7830: 6c 6c 20 73 74 69 6c 6c 20 61 63 63 65 70 74 20  ll still accept 
7840: 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74  CHECK constraint
7850: 73 20 69 6e 20 53 51 4c 20 73 74 61 74 65 6d 65  s in SQL stateme
7860: 6e 74 73 2c 0a 20 20 74 68 65 79 20 77 69 6c 6c  nts,.  they will
7870: 20 6a 75 73 74 20 6e 6f 74 20 62 65 20 65 6e 66   just not be enf
7880: 6f 72 63 65 64 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c  orced..}..COMPIL
7890: 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45  E_OPTION {SQLITE
78a0: 5f 4f 4d 49 54 5f 43 4f 4d 50 49 4c 45 4f 50 54  _OMIT_COMPILEOPT
78b0: 49 4f 4e 5f 44 49 41 47 53 7d 20 7b 0a 20 20 54  ION_DIAGS} {.  T
78c0: 68 69 73 20 6f 70 74 69 6f 6e 20 69 73 20 75 73  his option is us
78d0: 65 64 20 74 6f 20 6f 6d 69 74 20 74 68 65 20 63  ed to omit the c
78e0: 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69  ompile-time opti
78f0: 6f 6e 20 64 69 61 67 6e 6f 73 74 69 63 73 20 61  on diagnostics a
7900: 76 61 69 6c 61 62 6c 65 0a 20 20 69 6e 20 53 51  vailable.  in SQ
7910: 4c 69 74 65 2c 20 69 6e 63 6c 75 64 69 6e 67 20  Lite, including 
7920: 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6d  the [sqlite3_com
7930: 70 69 6c 65 6f 70 74 69 6f 6e 5f 75 73 65 64 28  pileoption_used(
7940: 29 5d 20 61 6e 64 0a 20 20 5b 73 71 6c 69 74 65  )] and.  [sqlite
7950: 33 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f  3_compileoption_
7960: 67 65 74 28 29 5d 20 43 2f 43 2b 2b 20 66 75 6e  get()] C/C++ fun
7970: 63 74 69 6f 6e 73 2c 20 74 68 65 0a 20 20 5b 73  ctions, the.  [s
7980: 71 6c 69 74 65 5f 63 6f 6d 70 69 6c 65 6f 70 74  qlite_compileopt
7990: 69 6f 6e 5f 75 73 65 64 28 29 5d 20 61 6e 64 20  ion_used()] and 
79a0: 5b 73 71 6c 69 74 65 5f 63 6f 6d 70 69 6c 65 6f  [sqlite_compileo
79b0: 70 74 69 6f 6e 5f 67 65 74 28 29 5d 20 53 51 4c  ption_get()] SQL
79c0: 20 66 75 6e 63 74 69 6f 6e 73 2c 0a 20 20 61 6e   functions,.  an
79d0: 64 20 74 68 65 20 5b 63 6f 6d 70 69 6c 65 5f 6f  d the [compile_o
79e0: 70 74 69 6f 6e 73 20 70 72 61 67 6d 61 5d 2e 0a  ptions pragma]..
79f0: 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f  }..COMPILE_OPTIO
7a00: 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43  N {SQLITE_OMIT_C
7a10: 4f 4d 50 4c 45 54 45 7d 20 7b 0a 20 20 54 68 69  OMPLETE} {.  Thi
7a20: 73 20 6f 70 74 69 6f 6e 20 63 61 75 73 65 73 20  s option causes 
7a30: 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6d  the [sqlite3_com
7a40: 70 6c 65 74 65 28 29 5d 20 61 6e 64 20 5b 73 71  plete()] and [sq
7a50: 6c 69 74 65 33 5f 63 6f 6d 70 6c 65 74 65 31 36  lite3_complete16
7a60: 28 29 5d 0a 20 20 69 6e 74 65 72 66 61 63 65 73  ()].  interfaces
7a70: 20 74 6f 20 62 65 20 6f 6d 69 74 74 65 64 2e 0a   to be omitted..
7a80: 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f  }..COMPILE_OPTIO
7a90: 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43  N {SQLITE_OMIT_C
7aa0: 4f 4d 50 4f 55 4e 44 5f 53 45 4c 45 43 54 7d 20  OMPOUND_SELECT} 
7ab0: 7b 0a 20 20 54 68 69 73 20 6f 70 74 69 6f 6e 20  {.  This option 
7ac0: 69 73 20 75 73 65 64 20 74 6f 20 6f 6d 69 74 20  is used to omit 
7ad0: 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20 5b 53 45  the compound [SE
7ae0: 4c 45 43 54 5d 20 66 75 6e 63 74 69 6f 6e 61 6c  LECT] functional
7af0: 69 74 79 2e 20 0a 20 20 5b 53 45 4c 45 43 54 5d  ity. .  [SELECT]
7b00: 20 73 74 61 74 65 6d 65 6e 74 73 20 74 68 61 74   statements that
7b10: 20 75 73 65 20 74 68 65 20 0a 20 20 55 4e 49 4f   use the .  UNIO
7b20: 4e 2c 20 55 4e 49 4f 4e 20 41 4c 4c 2c 20 49 4e  N, UNION ALL, IN
7b30: 54 45 52 53 45 43 54 20 6f 72 20 45 58 43 45 50  TERSECT or EXCEP
7b40: 54 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43  T compound SELEC
7b50: 54 20 6f 70 65 72 61 74 6f 72 73 20 77 69 6c 6c  T operators will
7b60: 20 0a 20 20 63 61 75 73 65 20 61 20 70 61 72 73   .  cause a pars
7b70: 65 20 65 72 72 6f 72 2e 0a 7d 0a 0a 43 4f 4d 50  e error..}..COMP
7b80: 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49  ILE_OPTION {SQLI
7b90: 54 45 5f 4f 4d 49 54 5f 44 41 54 45 54 49 4d 45  TE_OMIT_DATETIME
7ba0: 5f 46 55 4e 43 53 7d 20 7b 0a 20 20 49 66 20 74  _FUNCS} {.  If t
7bb0: 68 69 73 20 6f 70 74 69 6f 6e 20 69 73 20 64 65  his option is de
7bc0: 66 69 6e 65 64 2c 20 53 51 4c 69 74 65 27 73 20  fined, SQLite's 
7bd0: 62 75 69 6c 74 2d 69 6e 20 64 61 74 65 20 61 6e  built-in date an
7be0: 64 20 74 69 6d 65 20 6d 61 6e 69 70 75 6c 61 74  d time manipulat
7bf0: 69 6f 6e 0a 20 20 66 75 6e 63 74 69 6f 6e 73 20  ion.  functions 
7c00: 61 72 65 20 6f 6d 69 74 74 65 64 2e 20 53 70 65  are omitted. Spe
7c10: 63 69 66 69 63 61 6c 6c 79 2c 20 74 68 65 20 53  cifically, the S
7c20: 51 4c 20 66 75 6e 63 74 69 6f 6e 73 20 6a 75 6c  QL functions jul
7c30: 69 61 6e 64 61 79 28 29 2c 20 64 61 74 65 28 29  ianday(), date()
7c40: 2c 0a 20 20 74 69 6d 65 28 29 2c 20 64 61 74 65  ,.  time(), date
7c50: 74 69 6d 65 28 29 20 61 6e 64 20 73 74 72 66 74  time() and strft
7c60: 69 6d 65 28 29 20 61 72 65 20 6e 6f 74 20 61 76  ime() are not av
7c70: 61 69 6c 61 62 6c 65 2e 20 54 68 65 20 64 65 66  ailable. The def
7c80: 61 75 6c 74 20 63 6f 6c 75 6d 6e 0a 20 20 76 61  ault column.  va
7c90: 6c 75 65 73 20 43 55 52 52 45 4e 54 5f 54 49 4d  lues CURRENT_TIM
7ca0: 45 2c 20 43 55 52 52 45 4e 54 5f 44 41 54 45 20  E, CURRENT_DATE 
7cb0: 61 6e 64 20 43 55 52 52 45 4e 54 5f 54 49 4d 45  and CURRENT_TIME
7cc0: 53 54 41 4d 50 20 61 72 65 20 73 74 69 6c 6c 20  STAMP are still 
7cd0: 61 76 61 69 6c 61 62 6c 65 2e 0a 7d 0a 0a 43 4f  available..}..CO
7ce0: 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51  MPILE_OPTION {SQ
7cf0: 4c 49 54 45 5f 4f 4d 49 54 5f 44 45 43 4c 54 59  LITE_OMIT_DECLTY
7d00: 50 45 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70 74  PE} {.  This opt
7d10: 69 6f 6e 20 63 61 75 73 65 73 20 53 51 4c 69 74  ion causes SQLit
7d20: 65 20 74 6f 20 6f 6d 69 74 20 73 75 70 70 6f 72  e to omit suppor
7d30: 74 20 66 6f 72 20 74 68 65 0a 20 20 5b 73 71 6c  t for the.  [sql
7d40: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c  ite3_column_decl
7d50: 74 79 70 65 28 29 5d 20 61 6e 64 20 5b 73 71 6c  type()] and [sql
7d60: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c  ite3_column_decl
7d70: 74 79 70 65 31 36 28 29 5d 0a 20 20 69 6e 74 65  type16()].  inte
7d80: 72 66 61 63 65 73 2e 0a 7d 0a 0a 43 4f 4d 50 49  rfaces..}..COMPI
7d90: 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54  LE_OPTION {SQLIT
7da0: 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41 54 45  E_OMIT_DEPRECATE
7db0: 44 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70 74 69  D} {.  This opti
7dc0: 6f 6e 20 63 61 75 73 65 73 20 53 51 4c 69 74 65  on causes SQLite
7dd0: 20 74 6f 20 6f 6d 69 74 20 73 75 70 70 6f 72 74   to omit support
7de0: 20 66 6f 72 20 69 6e 74 65 72 66 61 63 65 73 0a   for interfaces.
7df0: 20 20 6d 61 72 6b 65 64 20 61 73 20 64 65 70 72    marked as depr
7e00: 65 63 61 74 65 64 2e 20 20 54 68 69 73 20 69 6e  ecated.  This in
7e10: 63 6c 75 64 65 73 20 0a 20 20 5b 73 71 6c 69 74  cludes .  [sqlit
7e20: 65 33 5f 61 67 67 72 65 67 61 74 65 5f 63 6f 75  e3_aggregate_cou
7e30: 6e 74 28 29 5d 2c 0a 20 20 5b 73 71 6c 69 74 65  nt()],.  [sqlite
7e40: 33 5f 65 78 70 69 72 65 64 28 29 5d 2c 0a 20 20  3_expired()],.  
7e50: 5b 73 71 6c 69 74 65 33 5f 74 72 61 6e 73 66 65  [sqlite3_transfe
7e60: 72 5f 62 69 6e 64 69 6e 67 73 28 29 5d 2c 0a 20  r_bindings()],. 
7e70: 20 5b 73 71 6c 69 74 65 33 5f 67 6c 6f 62 61 6c   [sqlite3_global
7e80: 5f 72 65 63 6f 76 65 72 28 29 5d 2c 0a 20 20 5b  _recover()],.  [
7e90: 73 71 6c 69 74 65 33 5f 74 68 72 65 61 64 5f 63  sqlite3_thread_c
7ea0: 6c 65 61 6e 75 70 28 29 5d 20 61 6e 64 0a 20 20  leanup()] and.  
7eb0: 5b 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72 79 5f  [sqlite3_memory_
7ec0: 61 6c 61 72 6d 28 29 5d 20 69 6e 74 65 72 66 61  alarm()] interfa
7ed0: 63 65 73 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f  ces..}..COMPILE_
7ee0: 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f  OPTION {SQLITE_O
7ef0: 4d 49 54 5f 44 49 53 4b 49 4f 7d 20 7b 0a 20 20  MIT_DISKIO} {.  
7f00: 54 68 69 73 20 6f 70 74 69 6f 6e 20 6f 6d 69 74  This option omit
7f10: 73 20 61 6c 6c 20 73 75 70 70 6f 72 74 20 66 6f  s all support fo
7f20: 72 20 77 72 69 74 69 6e 67 20 74 6f 20 74 68 65  r writing to the
7f30: 20 64 69 73 6b 20 61 6e 64 20 66 6f 72 63 65 73   disk and forces
7f40: 0a 20 20 64 61 74 61 62 61 73 65 73 20 74 6f 20  .  databases to 
7f50: 65 78 69 73 74 20 69 6e 20 6d 65 6d 6f 72 79 20  exist in memory 
7f60: 6f 6e 6c 79 2e 20 20 54 68 69 73 20 6f 70 74 69  only.  This opti
7f70: 6f 6e 20 68 61 73 20 6e 6f 74 20 62 65 65 6e 20  on has not been 
7f80: 0a 20 20 6d 61 69 6e 74 61 69 6e 65 64 20 61 6e  .  maintained an
7f90: 64 20 70 72 6f 62 61 62 6c 79 20 64 6f 65 73 20  d probably does 
7fa0: 6e 6f 74 20 77 6f 72 6b 20 77 69 74 68 20 6e 65  not work with ne
7fb0: 77 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66 20  wer versions of 
7fc0: 53 51 4c 69 74 65 2e 0a 7d 0a 0a 43 4f 4d 50 49  SQLite..}..COMPI
7fd0: 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54  LE_OPTION {SQLIT
7fe0: 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 7d 20  E_OMIT_EXPLAIN} 
7ff0: 7b 0a 20 20 44 65 66 69 6e 69 6e 67 20 74 68 69  {.  Defining thi
8000: 73 20 6f 70 74 69 6f 6e 20 63 61 75 73 65 73 20  s option causes 
8010: 74 68 65 20 5b 45 58 50 4c 41 49 4e 5d 20 63 6f  the [EXPLAIN] co
8020: 6d 6d 61 6e 64 20 74 6f 20 62 65 20 6f 6d 69 74  mmand to be omit
8030: 74 65 64 20 66 72 6f 6d 20 74 68 65 0a 20 20 6c  ted from the.  l
8040: 69 62 72 61 72 79 2e 20 41 74 74 65 6d 70 74 69  ibrary. Attempti
8050: 6e 67 20 74 6f 20 65 78 65 63 75 74 65 20 61 6e  ng to execute an
8060: 20 5b 45 58 50 4c 41 49 4e 5d 20 73 74 61 74 65   [EXPLAIN] state
8070: 6d 65 6e 74 20 77 69 6c 6c 20 63 61 75 73 65 20  ment will cause 
8080: 61 20 70 61 72 73 65 0a 20 20 65 72 72 6f 72 2e  a parse.  error.
8090: 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49  .}..COMPILE_OPTI
80a0: 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ON {SQLITE_OMIT_
80b0: 46 4c 41 47 5f 50 52 41 47 4d 41 53 7d 20 7b 0a  FLAG_PRAGMAS} {.
80c0: 20 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 6f 6d    This option om
80d0: 69 74 73 20 73 75 70 70 6f 72 74 20 66 6f 72 20  its support for 
80e0: 61 20 73 75 62 73 65 74 20 6f 66 20 5b 50 52 41  a subset of [PRA
80f0: 47 4d 41 5d 20 63 6f 6d 6d 61 6e 64 73 20 74 68  GMA] commands th
8100: 61 74 0a 20 20 71 75 65 72 79 20 61 6e 64 20 73  at.  query and s
8110: 65 74 20 62 6f 6f 6c 65 61 6e 20 70 72 6f 70 65  et boolean prope
8120: 72 74 69 65 73 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c  rties..}..COMPIL
8130: 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45  E_OPTION {SQLITE
8140: 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50  _OMIT_FLOATING_P
8150: 4f 49 4e 54 7d 20 7b 0a 20 20 54 68 69 73 20 6f  OINT} {.  This o
8160: 70 74 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f  ption is used to
8170: 20 6f 6d 69 74 20 66 6c 6f 61 74 69 6e 67 2d 70   omit floating-p
8180: 6f 69 6e 74 20 6e 75 6d 62 65 72 20 73 75 70 70  oint number supp
8190: 6f 72 74 20 66 72 6f 6d 20 74 68 65 20 53 51 4c  ort from the SQL
81a0: 69 74 65 0a 20 20 6c 69 62 72 61 72 79 2e 20 57  ite.  library. W
81b0: 68 65 6e 20 73 70 65 63 69 66 69 65 64 2c 20 73  hen specified, s
81c0: 70 65 63 69 66 79 69 6e 67 20 61 20 66 6c 6f 61  pecifying a floa
81d0: 74 69 6e 67 20 70 6f 69 6e 74 20 6e 75 6d 62 65  ting point numbe
81e0: 72 20 61 73 20 61 20 6c 69 74 65 72 61 6c 20 0a  r as a literal .
81f0: 20 20 28 69 2e 65 2e 20 22 31 2e 30 31 22 29 20    (i.e. "1.01") 
8200: 72 65 73 75 6c 74 73 20 69 6e 20 61 20 70 61 72  results in a par
8210: 73 65 20 65 72 72 6f 72 2e 0a 0a 20 20 3c 70 3e  se error...  <p>
8220: 49 6e 20 74 68 65 20 66 75 74 75 72 65 2c 20 74  In the future, t
8230: 68 69 73 20 6f 70 74 69 6f 6e 20 6d 61 79 20 61  his option may a
8240: 6c 73 6f 20 64 69 73 61 62 6c 65 20 6f 74 68 65  lso disable othe
8250: 72 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74  r floating point
8260: 20 0a 20 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74   .  functionalit
8270: 79 2c 20 66 6f 72 20 65 78 61 6d 70 6c 65 20 74  y, for example t
8280: 68 65 20 5b 73 71 6c 69 74 65 33 5f 72 65 73 75  he [sqlite3_resu
8290: 6c 74 5f 64 6f 75 62 6c 65 28 29 5d 2c 20 0a 20  lt_double()], . 
82a0: 20 5b 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64   [sqlite3_bind_d
82b0: 6f 75 62 6c 65 28 29 5d 2c 20 5b 73 71 6c 69 74  ouble()], [sqlit
82c0: 65 33 5f 76 61 6c 75 65 5f 64 6f 75 62 6c 65 28  e3_value_double(
82d0: 29 5d 20 61 6e 64 0a 20 20 5b 73 71 6c 69 74 65  )] and.  [sqlite
82e0: 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65 28  3_column_double(
82f0: 29 5d 20 41 50 49 20 66 75 6e 63 74 69 6f 6e 73  )] API functions
8300: 2e 0a 20 20 3c 2f 70 3e 0a 7d 0a 0a 43 4f 4d 50  ..  </p>.}..COMP
8310: 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49  ILE_OPTION {SQLI
8320: 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  TE_OMIT_FOREIGN_
8330: 4b 45 59 7d 20 7b 0a 20 20 49 66 20 74 68 69 73  KEY} {.  If this
8340: 20 6f 70 74 69 6f 6e 20 69 73 20 64 65 66 69 6e   option is defin
8350: 65 64 2c 20 74 68 65 6e 20 5b 66 6f 72 65 69 67  ed, then [foreig
8360: 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74  n key constraint
8370: 5d 20 73 79 6e 74 61 78 20 69 73 0a 20 20 6e 6f  ] syntax is.  no
8380: 74 20 72 65 63 6f 67 6e 69 7a 65 64 2e 0a 7d 0a  t recognized..}.
8390: 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20  .COMPILE_OPTION 
83a0: 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 47 45 54  {SQLITE_OMIT_GET
83b0: 5f 54 41 42 4c 45 7d 20 7b 0a 20 20 54 68 69 73  _TABLE} {.  This
83c0: 20 6f 70 74 69 6f 6e 20 63 61 75 73 65 73 20 73   option causes s
83d0: 75 70 70 6f 72 74 20 66 6f 72 20 5b 73 71 6c 69  upport for [sqli
83e0: 74 65 33 5f 67 65 74 5f 74 61 62 6c 65 28 29 5d  te3_get_table()]
83f0: 20 61 6e 64 0a 20 20 5b 73 71 6c 69 74 65 33 5f   and.  [sqlite3_
8400: 66 72 65 65 5f 74 61 62 6c 65 28 29 5d 20 74 6f  free_table()] to
8410: 20 62 65 20 6f 6d 69 74 74 65 64 2e 0a 7d 0a 0a   be omitted..}..
8420: 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b  COMPILE_OPTION {
8430: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 43 52  SQLITE_OMIT_INCR
8440: 42 4c 4f 42 7d 20 7b 0a 20 20 54 68 69 73 20 6f  BLOB} {.  This o
8450: 70 74 69 6f 6e 20 63 61 75 73 65 73 20 73 75 70  ption causes sup
8460: 70 6f 72 74 20 66 6f 72 20 5b 73 71 6c 69 74 65  port for [sqlite
8470: 33 5f 62 6c 6f 62 20 7c 20 69 6e 63 72 65 6d 65  3_blob | increme
8480: 6e 74 61 6c 20 42 4c 4f 42 20 49 2f 4f 5d 0a 20  ntal BLOB I/O]. 
8490: 20 74 6f 20 62 65 20 6f 6d 69 74 74 65 64 2e 0a   to be omitted..
84a0: 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f  }..COMPILE_OPTIO
84b0: 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49  N {SQLITE_OMIT_I
84c0: 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b 7d 20  NTEGRITY_CHECK} 
84d0: 7b 0a 20 20 54 68 69 73 20 6f 70 74 69 6f 6e 20  {.  This option 
84e0: 6f 6d 69 74 73 20 73 75 70 70 6f 72 74 20 66 6f  omits support fo
84f0: 72 20 74 68 65 20 5b 69 6e 74 65 67 72 69 74 79  r the [integrity
8500: 5f 63 68 65 63 6b 20 70 72 61 67 6d 61 5d 2e 0a  _check pragma]..
8510: 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f  }..COMPILE_OPTIO
8520: 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c  N {SQLITE_OMIT_L
8530: 49 4b 45 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e  IKE_OPTIMIZATION
8540: 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70 74 69 6f  } {.  This optio
8550: 6e 20 64 69 73 61 62 6c 65 73 20 74 68 65 20 61  n disables the a
8560: 62 69 6c 69 74 79 20 6f 66 20 53 51 4c 69 74 65  bility of SQLite
8570: 20 74 6f 20 75 73 65 20 69 6e 64 69 63 65 73 20   to use indices 
8580: 74 6f 20 68 65 6c 70 0a 20 20 72 65 73 6f 6c 76  to help.  resolv
8590: 65 20 5b 4c 49 4b 45 5d 20 61 6e 64 20 5b 47 4c  e [LIKE] and [GL
85a0: 4f 42 5d 20 6f 70 65 72 61 74 6f 72 73 20 69 6e  OB] operators in
85b0: 20 61 20 57 48 45 52 45 20 63 6c 61 75 73 65 2e   a WHERE clause.
85c0: 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49  .}..COMPILE_OPTI
85d0: 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ON {SQLITE_OMIT_
85e0: 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e 7d 20  LOAD_EXTENSION} 
85f0: 7b 0a 20 20 54 68 69 73 20 6f 70 74 69 6f 6e 20  {.  This option 
8600: 6f 6d 69 74 73 20 74 68 65 20 65 6e 74 69 72 65  omits the entire
8610: 20 65 78 74 65 6e 73 69 6f 6e 20 6c 6f 61 64 69   extension loadi
8620: 6e 67 20 6d 65 63 68 61 6e 69 73 6d 20 66 72 6f  ng mechanism fro
8630: 6d 0a 20 20 53 51 4c 69 74 65 2c 20 69 6e 63 6c  m.  SQLite, incl
8640: 75 64 69 6e 67 20 5b 73 71 6c 69 74 65 33 5f 65  uding [sqlite3_e
8650: 6e 61 62 6c 65 5f 6c 6f 61 64 5f 65 78 74 65 6e  nable_load_exten
8660: 73 69 6f 6e 28 29 5d 20 61 6e 64 0a 20 20 5b 73  sion()] and.  [s
8670: 71 6c 69 74 65 33 5f 6c 6f 61 64 5f 65 78 74 65  qlite3_load_exte
8680: 6e 73 69 6f 6e 28 29 5d 20 69 6e 74 65 72 66 61  nsion()] interfa
8690: 63 65 73 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f  ces..}..COMPILE_
86a0: 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f  OPTION {SQLITE_O
86b0: 4d 49 54 5f 4c 4f 43 41 4c 54 49 4d 45 7d 20 7b  MIT_LOCALTIME} {
86c0: 0a 20 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 6f  .  This option o
86d0: 6d 69 74 73 20 74 68 65 20 22 6c 6f 63 61 6c 74  mits the "localt
86e0: 69 6d 65 22 20 6d 6f 64 69 66 69 65 72 20 66 72  ime" modifier fr
86f0: 6f 6d 20 74 68 65 20 64 61 74 65 20 61 6e 64 20  om the date and 
8700: 74 69 6d 65 0a 20 20 66 75 6e 63 74 69 6f 6e 73  time.  functions
8710: 2e 20 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 69  .  This option i
8720: 73 20 73 6f 6d 65 74 69 6d 65 73 20 75 73 65 66  s sometimes usef
8730: 75 6c 20 77 68 65 6e 20 74 72 79 69 6e 67 20 74  ul when trying t
8740: 6f 20 63 6f 6d 70 69 6c 65 0a 20 20 74 68 65 20  o compile.  the 
8750: 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 66 75  date and time fu
8760: 6e 63 74 69 6f 6e 73 20 6f 6e 20 61 20 70 6c 61  nctions on a pla
8770: 74 66 6f 72 6d 20 74 68 61 74 20 64 6f 65 73 20  tform that does 
8780: 6e 6f 74 20 73 75 70 70 6f 72 74 20 74 68 65 0a  not support the.
8790: 20 20 63 6f 6e 63 65 70 74 20 6f 66 20 6c 6f 63    concept of loc
87a0: 61 6c 20 74 69 6d 65 2e 0a 7d 0a 0a 43 4f 4d 50  al time..}..COMP
87b0: 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49  ILE_OPTION {SQLI
87c0: 54 45 5f 4f 4d 49 54 5f 4c 4f 4f 4b 41 53 49 44  TE_OMIT_LOOKASID
87d0: 45 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70 74 69  E} {.  This opti
87e0: 6f 6e 20 6f 6d 69 74 73 20 74 68 65 20 5b 6c 6f  on omits the [lo
87f0: 6f 6b 61 73 69 64 65 20 6d 65 6d 6f 72 79 20 61  okaside memory a
8800: 6c 6c 6f 63 61 74 6f 72 5d 2e 0a 7d 0a 0a 43 4f  llocator]..}..CO
8810: 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51  MPILE_OPTION {SQ
8820: 4c 49 54 45 5f 4f 4d 49 54 5f 4d 45 4d 4f 52 59  LITE_OMIT_MEMORY
8830: 44 42 7d 20 7b 0a 20 20 57 68 65 6e 20 74 68 69  DB} {.  When thi
8840: 73 20 69 73 20 64 65 66 69 6e 65 64 2c 20 74 68  s is defined, th
8850: 65 20 6c 69 62 72 61 72 79 20 64 6f 65 73 20 6e  e library does n
8860: 6f 74 20 72 65 73 70 65 63 74 20 74 68 65 20 73  ot respect the s
8870: 70 65 63 69 61 6c 20 64 61 74 61 62 61 73 65 0a  pecial database.
8880: 20 20 6e 61 6d 65 20 22 3a 6d 65 6d 6f 72 79 3a    name ":memory:
8890: 22 20 28 6e 6f 72 6d 61 6c 6c 79 20 75 73 65 64  " (normally used
88a0: 20 74 6f 20 63 72 65 61 74 65 20 61 6e 20 5b 69   to create an [i
88b0: 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 73  n-memory databas
88c0: 65 5d 29 2e 20 49 66 20 0a 20 20 22 3a 6d 65 6d  e]). If .  ":mem
88d0: 6f 72 79 3a 22 20 69 73 20 70 61 73 73 65 64 20  ory:" is passed 
88e0: 74 6f 20 5b 73 71 6c 69 74 65 33 5f 6f 70 65 6e  to [sqlite3_open
88f0: 28 29 5d 2c 20 5b 73 71 6c 69 74 65 33 5f 6f 70  ()], [sqlite3_op
8900: 65 6e 31 36 28 29 5d 2c 20 6f 72 0a 20 20 5b 73  en16()], or.  [s
8910: 71 6c 69 74 65 33 5f 6f 70 65 6e 5f 76 32 28 29  qlite3_open_v2()
8920: 5d 2c 20 61 20 66 69 6c 65 20 77 69 74 68 20 74  ], a file with t
8930: 68 69 73 20 6e 61 6d 65 20 77 69 6c 6c 20 62 65  his name will be
8940: 20 0a 20 20 6f 70 65 6e 65 64 20 6f 72 20 63 72   .  opened or cr
8950: 65 61 74 65 64 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c  eated..}..COMPIL
8960: 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45  E_OPTION {SQLITE
8970: 5f 4f 4d 49 54 5f 4d 45 52 47 45 5f 53 4f 52 54  _OMIT_MERGE_SORT
8980: 7d 20 7b 0a 20 20 42 65 67 69 6e 6e 69 6e 67 20  } {.  Beginning 
8990: 77 69 74 68 20 53 51 4c 69 74 65 20 5b 76 65 72  with SQLite [ver
89a0: 73 69 6f 6e 20 33 2e 37 2e 38 5d 2c 20 6c 61 72  sion 3.7.8], lar
89b0: 67 65 20 73 6f 72 74 20 6f 70 65 72 61 74 69 6f  ge sort operatio
89c0: 6e 73 20 73 75 63 68 20 61 73 0a 20 20 75 73 65  ns such as.  use
89d0: 64 20 62 79 20 5b 43 52 45 41 54 45 20 49 4e 44  d by [CREATE IND
89e0: 45 58 5d 20 63 6f 6d 6d 61 6e 64 73 20 61 72 65  EX] commands are
89f0: 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 75 73 69   implemented usi
8a00: 6e 67 20 61 6e 20 65 78 74 65 72 6e 61 6c 0a 20  ng an external. 
8a10: 20 6d 65 72 67 65 20 73 6f 72 74 20 72 61 74 68   merge sort rath
8a20: 65 72 20 74 68 61 6e 20 69 6e 73 65 72 74 69 6f  er than insertio
8a30: 6e 73 20 69 6e 74 6f 20 61 20 42 2d 54 72 65 65  ns into a B-Tree
8a40: 2e 20 20 54 68 69 73 20 72 65 73 75 6c 74 73 20  .  This results 
8a50: 69 6e 20 62 65 74 74 65 72 0a 20 20 63 61 63 68  in better.  cach
8a60: 65 20 6c 6f 63 61 6c 69 74 79 20 61 6e 64 20 61  e locality and a
8a70: 6e 20 6f 72 64 65 72 2d 6f 66 2d 6d 61 67 6e 69  n order-of-magni
8a80: 74 75 64 65 20 73 70 65 65 64 20 69 6d 70 72 6f  tude speed impro
8a90: 76 65 6d 65 6e 74 20 66 6f 72 20 73 6f 72 74 73  vement for sorts
8aa0: 20 74 68 61 74 0a 20 20 61 72 65 20 6c 61 72 67   that.  are larg
8ab0: 65 72 20 74 68 61 6e 20 74 68 65 20 66 69 6c 65  er than the file
8ac0: 73 79 73 74 65 6d 20 63 61 63 68 65 2e 20 20 4f  system cache.  O
8ad0: 6e 20 74 68 65 20 6f 74 68 65 72 20 68 61 6e 64  n the other hand
8ae0: 2c 20 74 68 65 20 6d 65 72 67 65 20 73 6f 72 74  , the merge sort
8af0: 0a 20 20 6c 6f 67 69 63 20 75 73 65 73 20 73 6f  .  logic uses so
8b00: 6d 65 20 63 6f 64 65 20 73 70 61 63 65 20 61 6e  me code space an
8b10: 64 20 69 73 20 73 6c 69 67 68 74 6c 79 20 28 31  d is slightly (1
8b20: 25 29 20 73 6c 6f 77 65 72 20 66 6f 72 20 5b 43  %) slower for [C
8b30: 52 45 41 54 45 20 49 4e 44 45 58 5d 0a 20 20 6f  REATE INDEX].  o
8b40: 6e 20 73 6d 61 6c 6c 20 74 61 62 6c 65 73 2e 20  n small tables. 
8b50: 20 54 68 65 20 65 78 74 65 72 6e 61 6c 20 6d 65   The external me
8b60: 72 67 65 20 73 6f 72 74 20 63 61 6e 20 62 65 20  rge sort can be 
8b70: 64 69 73 61 62 6c 65 64 20 75 73 69 6e 67 20 74  disabled using t
8b80: 68 69 73 0a 20 20 63 6f 6d 70 69 6c 65 2d 74 69  his.  compile-ti
8b90: 6d 65 20 6f 70 74 69 6f 6e 2e 0a 7d 0a 0a 43 4f  me option..}..CO
8ba0: 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51  MPILE_OPTION {SQ
8bb0: 4c 49 54 45 5f 4f 4d 49 54 5f 4f 52 5f 4f 50 54  LITE_OMIT_OR_OPT
8bc0: 49 4d 49 5a 41 54 49 4f 4e 7d 20 7b 0a 20 20 54  IMIZATION} {.  T
8bd0: 68 69 73 20 6f 70 74 69 6f 6e 20 64 69 73 61 62  his option disab
8be0: 6c 65 73 20 74 68 65 20 61 62 69 6c 69 74 79 20  les the ability 
8bf0: 6f 66 20 53 51 4c 69 74 65 20 74 6f 20 75 73 65  of SQLite to use
8c00: 20 61 6e 20 69 6e 64 65 78 20 74 6f 67 65 74 68   an index togeth
8c10: 65 72 0a 20 20 77 69 74 68 20 74 65 72 6d 73 20  er.  with terms 
8c20: 6f 66 20 61 20 57 48 45 52 45 20 63 6c 61 75 73  of a WHERE claus
8c30: 65 20 63 6f 6e 6e 65 63 74 65 64 20 62 79 20 74  e connected by t
8c40: 68 65 20 4f 52 20 6f 70 65 72 61 74 6f 72 2e 0a  he OR operator..
8c50: 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f  }..COMPILE_OPTIO
8c60: 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  N {SQLITE_OMIT_P
8c70: 41 47 45 52 5f 50 52 41 47 4d 41 53 7d 20 7b 0a  AGER_PRAGMAS} {.
8c80: 20 20 44 65 66 69 6e 69 6e 67 20 74 68 69 73 20    Defining this 
8c90: 6f 70 74 69 6f 6e 20 6f 6d 69 74 73 20 70 72 61  option omits pra
8ca0: 67 6d 61 73 20 72 65 6c 61 74 65 64 20 74 6f 20  gmas related to 
8cb0: 74 68 65 20 70 61 67 65 72 20 73 75 62 73 79 73  the pager subsys
8cc0: 74 65 6d 20 66 72 6f 6d 20 0a 20 20 74 68 65 20  tem from .  the 
8cd0: 62 75 69 6c 64 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c  build..}..COMPIL
8ce0: 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45  E_OPTION {SQLITE
8cf0: 5f 4f 4d 49 54 5f 50 52 41 47 4d 41 7d 20 7b 0a  _OMIT_PRAGMA} {.
8d00: 20 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 69 73    This option is
8d10: 20 75 73 65 64 20 74 6f 20 6f 6d 69 74 20 74 68   used to omit th
8d20: 65 20 5b 50 52 41 47 4d 41 5d 20 63 6f 6d 6d 61  e [PRAGMA] comma
8d30: 6e 64 0a 20 20 66 72 6f 6d 20 74 68 65 20 6c 69  nd.  from the li
8d40: 62 72 61 72 79 2e 20 4e 6f 74 65 20 74 68 61 74  brary. Note that
8d50: 20 69 74 20 69 73 20 75 73 65 66 75 6c 20 74 6f   it is useful to
8d60: 20 64 65 66 69 6e 65 20 74 68 65 20 6d 61 63 72   define the macr
8d70: 6f 73 20 74 68 61 74 20 6f 6d 69 74 0a 20 20 73  os that omit.  s
8d80: 70 65 63 69 66 69 63 20 70 72 61 67 6d 61 73 20  pecific pragmas 
8d90: 69 6e 20 61 64 64 69 74 69 6f 6e 20 74 6f 20 74  in addition to t
8da0: 68 69 73 2c 20 61 73 20 74 68 65 79 20 6d 61 79  his, as they may
8db0: 20 61 6c 73 6f 20 72 65 6d 6f 76 65 20 73 75 70   also remove sup
8dc0: 70 6f 72 74 69 6e 67 20 63 6f 64 65 0a 20 20 69  porting code.  i
8dd0: 6e 20 6f 74 68 65 72 20 73 75 62 2d 73 79 73 74  n other sub-syst
8de0: 65 6d 73 2e 20 54 68 69 73 20 6d 61 63 72 6f 20  ems. This macro 
8df0: 72 65 6d 6f 76 65 73 20 74 68 65 20 5b 50 52 41  removes the [PRA
8e00: 47 4d 41 5d 20 63 6f 6d 6d 61 6e 64 20 6f 6e 6c  GMA] command onl
8e10: 79 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50  y..}..COMPILE_OP
8e20: 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d 49  TION {SQLITE_OMI
8e30: 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42  T_PROGRESS_CALLB
8e40: 41 43 4b 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70  ACK} {.  This op
8e50: 74 69 6f 6e 20 6d 61 79 20 62 65 20 64 65 66 69  tion may be defi
8e60: 6e 65 64 20 74 6f 20 6f 6d 69 74 20 74 68 65 20  ned to omit the 
8e70: 63 61 70 61 62 69 6c 69 74 79 20 74 6f 20 69 73  capability to is
8e80: 73 75 65 20 22 70 72 6f 67 72 65 73 73 22 20 0a  sue "progress" .
8e90: 20 20 63 61 6c 6c 62 61 63 6b 73 20 64 75 72 69    callbacks duri
8ea0: 6e 67 20 6c 6f 6e 67 2d 72 75 6e 6e 69 6e 67 20  ng long-running 
8eb0: 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 2e 20  SQL statements. 
8ec0: 54 68 65 20 0a 20 20 5b 73 71 6c 69 74 65 33 5f  The .  [sqlite3_
8ed0: 70 72 6f 67 72 65 73 73 5f 68 61 6e 64 6c 65 72  progress_handler
8ee0: 28 29 5d 0a 20 20 41 50 49 20 66 75 6e 63 74 69  ()].  API functi
8ef0: 6f 6e 20 69 73 20 6e 6f 74 20 70 72 65 73 65 6e  on is not presen
8f00: 74 20 69 6e 20 74 68 65 20 6c 69 62 72 61 72 79  t in the library
8f10: 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54  ..}..COMPILE_OPT
8f20: 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54  ION {SQLITE_OMIT
8f30: 5f 51 55 49 43 4b 42 41 4c 41 4e 43 45 7d 20 7b  _QUICKBALANCE} {
8f40: 0a 20 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 6f  .  This option o
8f50: 6d 69 74 73 20 61 6e 20 61 6c 74 65 72 6e 61 74  mits an alternat
8f60: 69 76 65 2c 20 66 61 73 74 65 72 20 42 2d 54 72  ive, faster B-Tr
8f70: 65 65 20 62 61 6c 61 6e 63 69 6e 67 20 72 6f 75  ee balancing rou
8f80: 74 69 6e 65 2e 0a 20 20 55 73 69 6e 67 20 74 68  tine..  Using th
8f90: 69 73 20 6f 70 74 69 6f 6e 20 6d 61 6b 65 73 20  is option makes 
8fa0: 53 51 4c 69 74 65 20 73 6c 69 67 68 74 6c 79 20  SQLite slightly 
8fb0: 73 6d 61 6c 6c 65 72 20 61 74 20 74 68 65 20 65  smaller at the e
8fc0: 78 70 65 6e 73 65 20 6f 66 0a 20 20 6d 61 6b 69  xpense of.  maki
8fd0: 6e 67 20 69 74 20 72 75 6e 20 73 6c 69 67 68 74  ng it run slight
8fe0: 6c 79 20 73 6c 6f 77 65 72 2e 0a 7d 0a 0a 43 4f  ly slower..}..CO
8ff0: 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51  MPILE_OPTION {SQ
9000: 4c 49 54 45 5f 4f 4d 49 54 5f 52 45 49 4e 44 45  LITE_OMIT_REINDE
9010: 58 7d 20 7b 0a 20 20 57 68 65 6e 20 74 68 69 73  X} {.  When this
9020: 20 6f 70 74 69 6f 6e 20 69 73 20 64 65 66 69 6e   option is defin
9030: 65 64 2c 20 74 68 65 20 5b 52 45 49 4e 44 45 58  ed, the [REINDEX
9040: 5d 0a 20 20 63 6f 6d 6d 61 6e 64 20 69 73 20 6e  ].  command is n
9050: 6f 74 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 74  ot included in t
9060: 68 65 20 6c 69 62 72 61 72 79 2e 0a 20 20 45 78  he library..  Ex
9070: 65 63 75 74 69 6e 67 20 61 20 5b 52 45 49 4e 44  ecuting a [REIND
9080: 45 58 5d 20 73 74 61 74 65 6d 65 6e 74 20 63 61  EX] statement ca
9090: 75 73 65 73 20 0a 20 20 61 20 70 61 72 73 65 20  uses .  a parse 
90a0: 65 72 72 6f 72 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c  error..}..COMPIL
90b0: 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45  E_OPTION {SQLITE
90c0: 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 50 52 41  _OMIT_SCHEMA_PRA
90d0: 47 4d 41 53 7d 20 7b 0a 20 20 44 65 66 69 6e 69  GMAS} {.  Defini
90e0: 6e 67 20 74 68 69 73 20 6f 70 74 69 6f 6e 20 6f  ng this option o
90f0: 6d 69 74 73 20 70 72 61 67 6d 61 73 20 66 6f 72  mits pragmas for
9100: 20 71 75 65 72 79 69 6e 67 20 74 68 65 20 64 61   querying the da
9110: 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 66 72  tabase schema fr
9120: 6f 6d 20 0a 20 20 74 68 65 20 62 75 69 6c 64 2e  om .  the build.
9130: 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49  .}..COMPILE_OPTI
9140: 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ON {SQLITE_OMIT_
9150: 53 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e 5f 50  SCHEMA_VERSION_P
9160: 52 41 47 4d 41 53 7d 20 7b 0a 20 20 44 65 66 69  RAGMAS} {.  Defi
9170: 6e 69 6e 67 20 74 68 69 73 20 6f 70 74 69 6f 6e  ning this option
9180: 20 6f 6d 69 74 73 20 70 72 61 67 6d 61 73 20 66   omits pragmas f
9190: 6f 72 20 71 75 65 72 79 69 6e 67 20 61 6e 64 20  or querying and 
91a0: 6d 6f 64 69 66 79 69 6e 67 20 74 68 65 20 0a 20  modifying the . 
91b0: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
91c0: 20 76 65 72 73 69 6f 6e 20 61 6e 64 20 75 73 65   version and use
91d0: 72 20 76 65 72 73 69 6f 6e 20 66 72 6f 6d 20 74  r version from t
91e0: 68 65 20 62 75 69 6c 64 2e 20 53 70 65 63 69 66  he build. Specif
91f0: 69 63 61 6c 6c 79 2c 20 74 68 65 20 0a 20 20 5b  ically, the .  [
9200: 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 5d 20  schema_version] 
9210: 61 6e 64 20 5b 75 73 65 72 5f 76 65 72 73 69 6f  and [user_versio
9220: 6e 5d 20 50 52 41 47 4d 41 73 20 61 72 65 20 6f  n] PRAGMAs are o
9230: 6d 69 74 74 65 64 2e 0a 7d 0a 0a 43 4f 4d 50 49  mitted..}..COMPI
9240: 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54  LE_OPTION {SQLIT
9250: 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41  E_OMIT_SHARED_CA
9260: 43 48 45 7d 20 7b 0a 20 20 54 68 69 73 20 6f 70  CHE} {.  This op
9270: 74 69 6f 6e 20 62 75 69 6c 64 73 20 53 51 4c 69  tion builds SQLi
9280: 74 65 20 77 69 74 68 6f 75 74 20 73 75 70 70 6f  te without suppo
9290: 72 74 20 66 6f 72 20 73 68 61 72 65 64 2d 63 61  rt for shared-ca
92a0: 63 68 65 20 6d 6f 64 65 2e 0a 20 20 54 68 65 20  che mode..  The 
92b0: 5b 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f  [sqlite3_enable_
92c0: 73 68 61 72 65 64 5f 63 61 63 68 65 28 29 5d 20  shared_cache()] 
92d0: 69 73 20 6f 6d 69 74 74 65 64 20 61 6c 6f 6e 67  is omitted along
92e0: 20 77 69 74 68 20 61 20 66 61 69 72 0a 20 20 61   with a fair.  a
92f0: 6d 6f 75 6e 74 20 6f 66 20 6c 6f 67 69 63 20 77  mount of logic w
9300: 69 74 68 69 6e 20 74 68 65 20 42 2d 54 72 65 65  ithin the B-Tree
9310: 20 73 75 62 73 79 73 74 65 6d 20 61 73 73 6f 63   subsystem assoc
9320: 69 61 74 65 64 20 77 69 74 68 20 73 68 61 72 65  iated with share
9330: 64 0a 20 20 63 61 63 68 65 20 6d 61 6e 61 67 65  d.  cache manage
9340: 6d 65 6e 74 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45  ment..}..COMPILE
9350: 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f  _OPTION {SQLITE_
9360: 4f 4d 49 54 5f 53 55 42 51 55 45 52 59 7d 20 7b  OMIT_SUBQUERY} {
9370: 0a 20 20 49 66 20 64 65 66 69 6e 65 64 2c 20 73  .  If defined, s
9380: 75 70 70 6f 72 74 20 66 6f 72 20 73 75 62 2d 73  upport for sub-s
9390: 65 6c 65 63 74 73 20 61 6e 64 20 74 68 65 20 49  elects and the I
93a0: 4e 28 29 20 6f 70 65 72 61 74 6f 72 20 61 72 65  N() operator are
93b0: 20 6f 6d 69 74 74 65 64 2e 0a 7d 0a 0a 43 4f 4d   omitted..}..COM
93c0: 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c  PILE_OPTION {SQL
93d0: 49 54 45 5f 4f 4d 49 54 5f 54 43 4c 5f 56 41 52  ITE_OMIT_TCL_VAR
93e0: 49 41 42 4c 45 7d 20 7b 0a 20 20 49 66 20 74 68  IABLE} {.  If th
93f0: 69 73 20 6d 61 63 72 6f 20 69 73 20 64 65 66 69  is macro is defi
9400: 6e 65 64 2c 20 74 68 65 6e 20 74 68 65 20 73 70  ned, then the sp
9410: 65 63 69 61 6c 20 22 24 3c 76 61 72 69 61 62 6c  ecial "$<variabl
9420: 65 2d 6e 61 6d 65 3e 22 20 73 79 6e 74 61 78 0a  e-name>" syntax.
9430: 20 20 75 73 65 64 20 74 6f 20 61 75 74 6f 6d 61    used to automa
9440: 74 69 63 61 6c 6c 79 20 62 69 6e 64 20 53 51 4c  tically bind SQL
9450: 20 76 61 72 69 61 62 6c 65 73 20 74 6f 20 54 43   variables to TC
9460: 4c 20 76 61 72 69 61 62 6c 65 73 20 69 73 20 6f  L variables is o
9470: 6d 69 74 74 65 64 2e 0a 7d 0a 0a 43 4f 4d 50 49  mitted..}..COMPI
9480: 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54  LE_OPTION {SQLIT
9490: 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 7d 20 7b  E_OMIT_TEMPDB} {
94a0: 0a 20 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 6f  .  This option o
94b0: 6d 69 74 73 20 73 75 70 70 6f 72 74 20 66 6f 72  mits support for
94c0: 20 54 45 4d 50 20 6f 72 20 54 45 4d 50 4f 52 41   TEMP or TEMPORA
94d0: 52 59 20 74 61 62 6c 65 73 2e 0a 7d 0a 0a 43 4f  RY tables..}..CO
94e0: 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51  MPILE_OPTION {SQ
94f0: 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45 7d  LITE_OMIT_TRACE}
9500: 20 7b 0a 20 20 54 68 69 73 20 6f 70 74 69 6f 6e   {.  This option
9510: 20 6f 6d 69 74 73 20 73 75 70 70 6f 72 74 20 66   omits support f
9520: 6f 72 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f  or the [sqlite3_
9530: 70 72 6f 66 69 6c 65 28 29 5d 20 61 6e 64 0a 20  profile()] and. 
9540: 20 5b 73 71 6c 69 74 65 33 5f 74 72 61 63 65 28   [sqlite3_trace(
9550: 29 5d 20 69 6e 74 65 72 66 61 63 65 73 20 61 6e  )] interfaces an
9560: 64 20 74 68 65 69 72 20 61 73 73 6f 63 69 61 74  d their associat
9570: 65 64 20 6c 6f 67 69 63 2e 0a 7d 0a 0a 43 4f 4d  ed logic..}..COM
9580: 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c  PILE_OPTION {SQL
9590: 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52  ITE_OMIT_TRIGGER
95a0: 7d 20 7b 0a 20 20 44 65 66 69 6e 69 6e 67 20 74  } {.  Defining t
95b0: 68 69 73 20 6f 70 74 69 6f 6e 20 6f 6d 69 74 73  his option omits
95c0: 20 73 75 70 70 6f 72 74 20 66 6f 72 20 54 52 49   support for TRI
95d0: 47 47 45 52 20 6f 62 6a 65 63 74 73 2e 20 4e 65  GGER objects. Ne
95e0: 69 74 68 65 72 20 74 68 65 20 0a 20 20 5b 43 52  ither the .  [CR
95f0: 45 41 54 45 20 54 52 49 47 47 45 52 5d 20 6f 72  EATE TRIGGER] or
9600: 20 5b 44 52 4f 50 20 54 52 49 47 47 45 52 5d 0a   [DROP TRIGGER].
9610: 20 20 63 6f 6d 6d 61 6e 64 73 20 61 72 65 20 61    commands are a
9620: 76 61 69 6c 61 62 6c 65 20 69 6e 20 74 68 69 73  vailable in this
9630: 20 63 61 73 65 2c 20 61 6e 64 20 61 74 74 65 6d   case, and attem
9640: 70 74 69 6e 67 20 74 6f 20 65 78 65 63 75 74 65  pting to execute
9650: 0a 20 20 65 69 74 68 65 72 20 77 69 6c 6c 20 72  .  either will r
9660: 65 73 75 6c 74 20 69 6e 20 61 20 70 61 72 73 65  esult in a parse
9670: 20 65 72 72 6f 72 2e 0a 20 20 54 68 69 73 20 6f   error..  This o
9680: 70 74 69 6f 6e 20 61 6c 73 6f 20 64 69 73 61 62  ption also disab
9690: 6c 65 73 20 65 6e 66 6f 72 63 65 6d 65 6e 74 20  les enforcement 
96a0: 6f 66 20 5b 66 6f 72 65 69 67 6e 20 6b 65 79 20  of [foreign key 
96b0: 63 6f 6e 73 74 72 61 69 6e 74 73 5d 2c 0a 20 20  constraints],.  
96c0: 73 69 6e 63 65 20 74 68 65 20 63 6f 64 65 20 74  since the code t
96d0: 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74  hat implements t
96e0: 72 69 67 67 65 72 73 20 61 6e 64 20 77 68 69 63  riggers and whic
96f0: 68 20 69 73 20 6f 6d 69 74 74 65 64 20 62 79 20  h is omitted by 
9700: 74 68 69 73 0a 20 20 6f 70 74 69 6f 6e 20 69 73  this.  option is
9710: 20 61 6c 73 6f 20 75 73 65 64 20 74 6f 20 69 6d   also used to im
9720: 70 6c 65 6d 65 6e 74 20 5b 66 6f 72 65 69 67 6e  plement [foreign
9730: 20 6b 65 79 20 61 63 74 69 6f 6e 73 5d 2e 0a 7d   key actions]..}
9740: 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e  ..COMPILE_OPTION
9750: 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52   {SQLITE_OMIT_TR
9760: 55 4e 43 41 54 45 5f 4f 50 54 49 4d 49 5a 41 54  UNCATE_OPTIMIZAT
9770: 49 4f 4e 7d 20 7b 0a 20 20 41 20 64 65 66 61 75  ION} {.  A defau
9780: 6c 74 20 62 75 69 6c 64 20 6f 66 20 53 51 4c 69  lt build of SQLi
9790: 74 65 2c 20 69 66 20 61 20 5b 44 45 4c 45 54 45  te, if a [DELETE
97a0: 5d 20 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20  ] statement has 
97b0: 6e 6f 20 57 48 45 52 45 20 63 6c 61 75 73 65 0a  no WHERE clause.
97c0: 20 20 61 6e 64 20 6f 70 65 72 61 74 65 73 20 6f    and operates o
97d0: 6e 20 61 20 74 61 62 6c 65 20 77 69 74 68 20 6e  n a table with n
97e0: 6f 20 74 72 69 67 67 65 72 73 2c 20 61 6e 20 6f  o triggers, an o
97f0: 70 74 69 6d 69 7a 61 74 69 6f 6e 20 6f 63 63 75  ptimization occu
9800: 72 73 20 74 68 61 74 0a 20 20 63 61 75 73 65 73  rs that.  causes
9810: 20 74 68 65 20 44 45 4c 45 54 45 20 74 6f 20 6f   the DELETE to o
9820: 63 63 75 72 20 62 79 20 64 72 6f 70 70 69 6e 67  ccur by dropping
9830: 20 61 6e 64 20 72 65 63 72 65 61 74 69 6e 67 20   and recreating 
9840: 74 68 65 20 74 61 62 6c 65 2e 20 20 0a 20 20 44  the table.  .  D
9850: 72 6f 70 70 69 6e 67 20 61 6e 64 20 72 65 63 72  ropping and recr
9860: 65 61 74 69 6e 67 20 61 20 74 61 62 6c 65 20 69  eating a table i
9870: 73 20 75 73 75 61 6c 6c 79 20 6d 75 63 68 20 66  s usually much f
9880: 61 73 74 65 72 20 74 68 61 6e 20 64 65 6c 65 74  aster than delet
9890: 69 6e 67 0a 20 20 74 68 65 20 74 61 62 6c 65 20  ing.  the table 
98a0: 63 6f 6e 74 65 6e 74 20 72 6f 77 20 62 79 20 72  content row by r
98b0: 6f 77 2e 20 20 54 68 69 73 20 69 73 20 74 68 65  ow.  This is the
98c0: 20 22 74 72 75 6e 63 61 74 65 20 6f 70 74 69 6d   "truncate optim
98d0: 69 7a 61 74 69 6f 6e 22 2e 0a 7d 0a 0a 43 4f 4d  ization"..}..COM
98e0: 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c  PILE_OPTION {SQL
98f0: 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 7d 20  ITE_OMIT_UTF16} 
9900: 7b 0a 20 20 54 68 69 73 20 6d 61 63 72 6f 20 69  {.  This macro i
9910: 73 20 75 73 65 64 20 74 6f 20 6f 6d 69 74 20 73  s used to omit s
9920: 75 70 70 6f 72 74 20 66 6f 72 20 55 54 46 31 36  upport for UTF16
9930: 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 2e 20   text encoding. 
9940: 57 68 65 6e 20 74 68 69 73 20 69 73 0a 20 20 64  When this is.  d
9950: 65 66 69 6e 65 64 20 61 6c 6c 20 41 50 49 20 66  efined all API f
9960: 75 6e 63 74 69 6f 6e 73 20 74 68 61 74 20 72 65  unctions that re
9970: 74 75 72 6e 20 6f 72 20 61 63 63 65 70 74 20 55  turn or accept U
9980: 54 46 31 36 20 65 6e 63 6f 64 65 64 20 74 65 78  TF16 encoded tex
9990: 74 20 61 72 65 0a 20 20 75 6e 61 76 61 69 6c 61  t are.  unavaila
99a0: 62 6c 65 2e 20 54 68 65 73 65 20 66 75 6e 63 74  ble. These funct
99b0: 69 6f 6e 73 20 63 61 6e 20 62 65 20 69 64 65 6e  ions can be iden
99c0: 74 69 66 69 65 64 20 62 79 20 74 68 65 20 66 61  tified by the fa
99d0: 63 74 20 74 68 61 74 20 74 68 65 79 20 65 6e 64  ct that they end
99e0: 0a 20 20 77 69 74 68 20 27 31 36 27 2c 20 66 6f  .  with '16', fo
99f0: 72 20 65 78 61 6d 70 6c 65 20 5b 73 71 6c 69 74  r example [sqlit
9a00: 65 33 5f 70 72 65 70 61 72 65 31 36 28 29 5d 2c  e3_prepare16()],
9a10: 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e   [sqlite3_column
9a20: 5f 74 65 78 74 31 36 28 29 5d 20 61 6e 64 0a 20  _text16()] and. 
9a30: 20 5b 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74   [sqlite3_bind_t
9a40: 65 78 74 31 36 28 29 5d 2e 0a 7d 0a 0a 43 4f 4d  ext16()]..}..COM
9a50: 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c  PILE_OPTION {SQL
9a60: 49 54 45 5f 4f 4d 49 54 5f 56 41 43 55 55 4d 7d  ITE_OMIT_VACUUM}
9a70: 20 7b 0a 20 20 57 68 65 6e 20 74 68 69 73 20 6f   {.  When this o
9a80: 70 74 69 6f 6e 20 69 73 20 64 65 66 69 6e 65 64  ption is defined
9a90: 2c 20 74 68 65 20 5b 56 41 43 55 55 4d 5d 0a 20  , the [VACUUM]. 
9aa0: 20 63 6f 6d 6d 61 6e 64 20 69 73 20 6e 6f 74 20   command is not 
9ab0: 69 6e 63 6c 75 64 65 64 20 69 6e 20 74 68 65 20  included in the 
9ac0: 6c 69 62 72 61 72 79 2e 0a 20 20 45 78 65 63 75  library..  Execu
9ad0: 74 69 6e 67 20 61 20 5b 56 41 43 55 55 4d 5d 20  ting a [VACUUM] 
9ae0: 73 74 61 74 65 6d 65 6e 74 20 63 61 75 73 65 73  statement causes
9af0: 20 0a 20 20 61 20 70 61 72 73 65 20 65 72 72 6f   .  a parse erro
9b00: 72 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50  r..}..COMPILE_OP
9b10: 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d 49  TION {SQLITE_OMI
9b20: 54 5f 56 49 45 57 7d 20 7b 0a 20 20 44 65 66 69  T_VIEW} {.  Defi
9b30: 6e 69 6e 67 20 74 68 69 73 20 6f 70 74 69 6f 6e  ning this option
9b40: 20 6f 6d 69 74 73 20 73 75 70 70 6f 72 74 20 66   omits support f
9b50: 6f 72 20 56 49 45 57 20 6f 62 6a 65 63 74 73 2e  or VIEW objects.
9b60: 20 4e 65 69 74 68 65 72 20 74 68 65 20 0a 20 20   Neither the .  
9b70: 5b 43 52 45 41 54 45 20 56 49 45 57 5d 20 6e 6f  [CREATE VIEW] no
9b80: 72 20 74 68 65 20 5b 44 52 4f 50 20 56 49 45 57  r the [DROP VIEW
9b90: 5d 0a 20 20 63 6f 6d 6d 61 6e 64 73 20 61 72 65  ].  commands are
9ba0: 20 61 76 61 69 6c 61 62 6c 65 20 69 6e 20 74 68   available in th
9bb0: 69 73 20 63 61 73 65 2c 20 61 6e 64 0a 20 20 61  is case, and.  a
9bc0: 74 74 65 6d 70 74 69 6e 67 20 74 6f 20 65 78 65  ttempting to exe
9bd0: 63 75 74 65 20 65 69 74 68 65 72 20 77 69 6c 6c  cute either will
9be0: 20 72 65 73 75 6c 74 20 69 6e 20 61 20 70 61 72   result in a par
9bf0: 73 65 20 65 72 72 6f 72 2e 0a 0a 20 20 57 41 52  se error...  WAR
9c00: 4e 49 4e 47 3a 20 49 66 20 74 68 69 73 20 6d 61  NING: If this ma
9c10: 63 72 6f 20 69 73 20 64 65 66 69 6e 65 64 2c 20  cro is defined, 
9c20: 69 74 20 77 69 6c 6c 20 6e 6f 74 20 62 65 20 70  it will not be p
9c30: 6f 73 73 69 62 6c 65 20 74 6f 20 6f 70 65 6e 20  ossible to open 
9c40: 61 20 64 61 74 61 62 61 73 65 0a 20 20 66 6f 72  a database.  for
9c50: 20 77 68 69 63 68 20 74 68 65 20 73 63 68 65 6d   which the schem
9c60: 61 20 63 6f 6e 74 61 69 6e 73 20 56 49 45 57 20  a contains VIEW 
9c70: 6f 62 6a 65 63 74 73 2e 20 0a 7d 0a 0a 43 4f 4d  objects. .}..COM
9c80: 50 49 4c 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c  PILE_OPTION {SQL
9c90: 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
9ca0: 54 41 42 4c 45 7d 20 7b 0a 20 20 54 68 69 73 20  TABLE} {.  This 
9cb0: 6f 70 74 69 6f 6e 20 6f 6d 69 74 73 20 73 75 70  option omits sup
9cc0: 70 6f 72 74 20 66 6f 72 20 74 68 65 20 5b 73 71  port for the [sq
9cd0: 6c 69 74 65 33 5f 76 74 61 62 20 7c 20 56 69 72  lite3_vtab | Vir
9ce0: 74 75 61 6c 20 54 61 62 6c 65 5d 0a 20 20 6d 65  tual Table].  me
9cf0: 63 68 61 6e 69 73 6d 20 69 6e 20 53 51 4c 69 74  chanism in SQLit
9d00: 65 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50  e..}..COMPILE_OP
9d10: 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d 49  TION {SQLITE_OMI
9d20: 54 5f 57 41 4c 7d 20 7b 0a 20 20 54 68 69 73 20  T_WAL} {.  This 
9d30: 6f 70 74 69 6f 6e 20 6f 6d 69 74 73 20 74 68 65  option omits the
9d40: 20 22 5b 77 72 69 74 65 2d 61 68 65 61 64 20 6c   "[write-ahead l
9d50: 6f 67 5d 22 20 28 61 2e 6b 2e 61 2e 20 22 5b 57  og]" (a.k.a. "[W
9d60: 41 4c 5d 22 29 20 63 61 70 61 62 69 6c 69 74 79  AL]") capability
9d70: 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54  ..}..COMPILE_OPT
9d80: 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54  ION {SQLITE_OMIT
9d90: 5f 57 53 44 7d 20 7b 0a 20 20 54 68 69 73 20 6f  _WSD} {.  This o
9da0: 70 74 69 6f 6e 73 20 62 75 69 6c 64 73 20 61 20  ptions builds a 
9db0: 76 65 72 73 69 6f 6e 20 6f 66 20 74 68 65 20 53  version of the S
9dc0: 51 4c 69 74 65 20 6c 69 62 72 61 72 79 20 74 68  QLite library th
9dd0: 61 74 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 0a 20  at contains no. 
9de0: 20 57 72 69 74 61 62 6c 65 20 53 74 61 74 69 63   Writable Static
9df0: 20 44 61 74 61 20 28 57 53 44 29 2e 20 20 57 53   Data (WSD).  WS
9e00: 44 20 69 73 20 67 6c 6f 62 61 6c 20 76 61 72 69  D is global vari
9e10: 61 62 6c 65 73 20 61 6e 64 2f 6f 72 20 73 74 61  ables and/or sta
9e20: 74 69 63 0a 20 20 76 61 72 69 61 62 6c 65 73 2e  tic.  variables.
9e30: 20 20 53 6f 6d 65 20 70 6c 61 74 66 6f 72 6d 73    Some platforms
9e40: 20 64 6f 20 6e 6f 74 20 73 75 70 70 6f 72 74 20   do not support 
9e50: 57 53 44 2c 20 61 6e 64 20 74 68 69 73 20 6f 70  WSD, and this op
9e60: 74 69 6f 6e 20 69 73 20 6e 65 63 65 73 73 61 72  tion is necessar
9e70: 79 0a 20 20 69 6e 20 6f 72 64 65 72 20 66 6f 72  y.  in order for
9e80: 20 53 51 4c 69 74 65 20 74 6f 20 77 6f 72 6b 20   SQLite to work 
9e90: 74 68 6f 73 65 20 70 6c 61 74 66 6f 72 6d 73 2e  those platforms.
9ea0: 20 20 0a 0a 20 20 55 6e 6c 69 6b 65 20 6f 74 68    ..  Unlike oth
9eb0: 65 72 20 4f 4d 49 54 20 6f 70 74 69 6f 6e 73 20  er OMIT options 
9ec0: 77 68 69 63 68 20 6d 61 6b 65 20 74 68 65 20 53  which make the S
9ed0: 51 4c 69 74 65 20 6c 69 62 72 61 72 79 20 73 6d  QLite library sm
9ee0: 61 6c 6c 65 72 2c 0a 20 20 74 68 69 73 20 6f 70  aller,.  this op
9ef0: 74 69 6f 6e 20 61 63 74 75 61 6c 6c 79 20 69 6e  tion actually in
9f00: 63 72 65 61 73 65 73 20 74 68 65 20 73 69 7a 65  creases the size
9f10: 20 6f 66 20 53 51 4c 69 74 65 20 61 6e 64 20 6d   of SQLite and m
9f20: 61 6b 65 73 20 69 74 20 72 75 6e 0a 20 20 61 20  akes it run.  a 
9f30: 6c 69 74 74 6c 65 20 73 6c 6f 77 65 72 2e 20 20  little slower.  
9f40: 4f 6e 6c 79 20 75 73 65 20 74 68 69 73 20 6f 70  Only use this op
9f50: 74 69 6f 6e 20 69 66 20 53 51 4c 69 74 65 20 69  tion if SQLite i
9f60: 73 20 62 65 69 6e 67 20 62 75 69 6c 74 20 66 6f  s being built fo
9f70: 72 20 61 6e 0a 20 20 65 6d 62 65 64 64 65 64 20  r an.  embedded 
9f80: 74 61 72 67 65 74 20 74 68 61 74 20 64 6f 65 73  target that does
9f90: 20 6e 6f 74 20 73 75 70 70 6f 72 74 20 57 53 44   not support WSD
9fa0: 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50 54  ..}..COMPILE_OPT
9fb0: 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 4f 4d 49 54  ION {SQLITE_OMIT
9fc0: 5f 58 46 45 52 5f 4f 50 54 7d 20 7b 0a 20 20 54  _XFER_OPT} {.  T
9fd0: 68 69 73 20 6f 70 74 69 6f 6e 20 6f 6d 69 74 73  his option omits
9fe0: 20 73 75 70 70 6f 72 74 20 66 6f 72 20 6f 70 74   support for opt
9ff0: 69 6d 69 7a 61 74 69 6f 6e 73 20 74 68 61 74 20  imizations that 
a000: 68 65 6c 70 20 73 74 61 74 65 6d 65 6e 74 73 0a  help statements.
a010: 20 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 49    of the form "I
a020: 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 53  NSERT INTO ... S
a030: 45 4c 45 43 54 20 2e 2e 2e 22 20 72 75 6e 20 66  ELECT ..." run f
a040: 61 73 74 65 72 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c  aster..}..COMPIL
a050: 45 5f 4f 50 54 49 4f 4e 20 7b 53 51 4c 49 54 45  E_OPTION {SQLITE
a060: 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 7d 20 7b 0a  _ZERO_MALLOC} {.
a070: 20 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 6f 6d    This option om
a080: 69 74 73 20 62 6f 74 68 20 74 68 65 20 5b 64 65  its both the [de
a090: 66 61 75 6c 74 20 6d 65 6d 6f 72 79 20 61 6c 6c  fault memory all
a0a0: 6f 63 61 74 6f 72 5d 20 61 6e 64 20 74 68 65 0a  ocator] and the.
a0b0: 20 20 5b 64 65 62 75 67 67 69 6e 67 20 6d 65 6d    [debugging mem
a0c0: 6f 72 79 20 61 6c 6c 6f 63 61 74 6f 72 5d 20 66  ory allocator] f
a0d0: 72 6f 6d 20 74 68 65 20 62 75 69 6c 64 20 61 6e  rom the build an
a0e0: 64 20 73 75 62 73 74 69 74 75 74 65 73 20 61 20  d substitutes a 
a0f0: 73 74 75 62 0a 20 20 6d 65 6d 6f 72 79 20 61 6c  stub.  memory al
a100: 6c 6f 63 61 74 6f 72 20 74 68 61 74 20 61 6c 77  locator that alw
a110: 61 79 73 20 66 61 69 6c 73 2e 20 20 53 51 4c 69  ays fails.  SQLi
a120: 74 65 20 77 69 6c 6c 20 6e 6f 74 20 72 75 6e 20  te will not run 
a130: 77 69 74 68 20 74 68 69 73 0a 20 20 73 74 75 62  with this.  stub
a140: 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 6f   memory allocato
a150: 72 20 73 69 6e 63 65 20 69 74 20 77 69 6c 6c 20  r since it will 
a160: 62 65 20 75 6e 61 62 6c 65 20 74 6f 20 61 6c 6c  be unable to all
a170: 6f 63 61 74 65 20 6d 65 6d 6f 72 79 2e 20 20 42  ocate memory.  B
a180: 75 74 0a 20 20 74 68 69 73 20 73 74 75 62 20 63  ut.  this stub c
a190: 61 6e 20 62 65 20 72 65 70 6c 61 63 65 64 20 61  an be replaced a
a1a0: 74 20 73 74 61 72 74 2d 74 69 6d 65 20 75 73 69  t start-time usi
a1b0: 6e 67 0a 20 20 5b 73 71 6c 69 74 65 33 5f 63 6f  ng.  [sqlite3_co
a1c0: 6e 66 69 67 5d 28 5b 53 51 4c 49 54 45 5f 43 4f  nfig]([SQLITE_CO
a1d0: 4e 46 49 47 5f 4d 41 4c 4c 4f 43 5d 2c 2e 2e 2e  NFIG_MALLOC],...
a1e0: 29 20 6f 72 0a 20 20 5b 73 71 6c 69 74 65 33 5f  ) or.  [sqlite3_
a1f0: 63 6f 6e 66 69 67 5d 28 5b 53 51 4c 49 54 45 5f  config]([SQLITE_
a200: 43 4f 4e 46 49 47 5f 48 45 41 50 5d 2c 2e 2e 2e  CONFIG_HEAP],...
a210: 29 2e 0a 20 20 53 6f 20 74 68 65 20 6e 65 74 20  )..  So the net 
a220: 65 66 66 65 63 74 20 6f 66 20 74 68 69 73 20 63  effect of this c
a230: 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69  ompile-time opti
a240: 6f 6e 20 69 73 20 74 68 61 74 20 69 74 20 61 6c  on is that it al
a250: 6c 6f 77 73 20 53 51 4c 69 74 65 0a 20 20 74 6f  lows SQLite.  to
a260: 20 62 65 20 63 6f 6d 70 69 6c 65 64 20 61 6e 64   be compiled and
a270: 20 6c 69 6e 6b 65 64 20 61 67 61 69 6e 73 74 20   linked against 
a280: 61 20 73 79 73 74 65 6d 20 6c 69 62 72 61 72 79  a system library
a290: 20 74 68 61 74 20 64 6f 65 73 20 6e 6f 74 20 73   that does not s
a2a0: 75 70 70 6f 72 74 0a 20 20 6d 61 6c 6c 6f 63 28  upport.  malloc(
a2b0: 29 2c 20 66 72 65 65 28 29 2c 20 61 6e 64 2f 6f  ), free(), and/o
a2c0: 72 20 72 65 61 6c 6c 6f 63 28 29 2e 0a 7d 0a 0a  r realloc()..}..
a2d0: 3c 2f 74 63 6c 3e 0a 3c 61 20 6e 61 6d 65 3d 22  </tcl>.<a name="
a2e0: 64 65 62 75 67 6f 70 74 69 6f 6e 73 22 3e 3c 2f  debugoptions"></
a2f0: 61 3e 0a 3c 68 32 3e 31 2e 37 20 41 6e 61 6c 79  a>.<h2>1.7 Analy
a300: 73 69 73 20 61 6e 64 20 44 65 62 75 67 67 69 6e  sis and Debuggin
a310: 67 20 4f 70 74 69 6f 6e 73 3c 2f 68 32 3e 0a 3c  g Options</h2>.<
a320: 74 63 6c 3e 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50  tcl>..COMPILE_OP
a330: 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 44 45 42  TION {SQLITE_DEB
a340: 55 47 7d 20 7b 0a 20 20 54 68 65 20 53 51 4c 69  UG} {.  The SQLi
a350: 74 65 20 73 6f 75 72 63 65 20 63 6f 64 65 20 63  te source code c
a360: 6f 6e 74 61 69 6e 73 20 6c 69 74 65 72 61 6c 6c  ontains literall
a370: 79 20 74 68 6f 75 73 61 6e 64 73 20 6f 66 20 61  y thousands of a
a380: 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e  ssert() statemen
a390: 74 73 0a 20 20 75 73 65 64 20 74 6f 20 76 65 72  ts.  used to ver
a3a0: 69 66 79 20 69 6e 74 65 72 6e 61 6c 20 61 73 73  ify internal ass
a3b0: 75 6d 70 74 69 6f 6e 73 20 61 6e 64 20 73 75 62  umptions and sub
a3c0: 72 6f 75 74 69 6e 65 20 70 72 65 63 6f 6e 64 69  routine precondi
a3d0: 74 69 6f 6e 73 20 61 6e 64 0a 20 20 70 6f 73 74  tions and.  post
a3e0: 63 6f 6e 64 69 74 69 6f 6e 73 2e 20 20 54 68 65  conditions.  The
a3f0: 73 65 20 61 73 73 65 72 74 28 29 20 73 74 61 74  se assert() stat
a400: 65 6d 65 6e 74 73 20 61 72 65 20 6e 6f 72 6d 61  ements are norma
a410: 6c 6c 79 20 74 75 72 6e 65 64 20 6f 66 66 0a 20  lly turned off. 
a420: 20 28 74 68 65 79 20 67 65 6e 65 72 61 74 65 20   (they generate 
a430: 6e 6f 20 63 6f 64 65 29 20 73 69 6e 63 65 20 74  no code) since t
a440: 75 72 6e 69 6e 67 20 74 68 65 6d 20 6f 6e 20 6d  urning them on m
a450: 61 6b 65 73 20 53 51 4c 69 74 65 20 72 75 6e 20  akes SQLite run 
a460: 61 70 70 72 6f 78 69 6d 61 74 65 6c 79 0a 20 20  approximately.  
a470: 74 68 72 65 65 20 74 69 6d 65 73 20 73 6c 6f 77  three times slow
a480: 65 72 2e 20 20 42 75 74 20 66 6f 72 20 74 65 73  er.  But for tes
a490: 74 69 6e 67 20 61 6e 64 20 61 6e 61 6c 79 73 69  ting and analysi
a4a0: 73 2c 20 69 74 20 69 73 20 75 73 65 66 75 6c 20  s, it is useful 
a4b0: 74 6f 20 74 75 72 6e 0a 20 20 74 68 65 20 61 73  to turn.  the as
a4c0: 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74  sert() statement
a4d0: 73 20 6f 6e 2e 20 20 54 68 65 20 53 51 4c 49 54  s on.  The SQLIT
a4e0: 45 5f 44 45 42 55 47 20 63 6f 6d 70 69 6c 65 2d  E_DEBUG compile-
a4f0: 74 69 6d 65 20 6f 70 74 69 6f 6e 20 64 6f 65 73  time option does
a500: 20 74 68 69 73 2e 0a 20 20 53 51 4c 49 54 45 5f   this..  SQLITE_
a510: 44 45 42 55 47 20 61 6c 73 6f 20 74 75 72 6e 73  DEBUG also turns
a520: 20 6f 6e 20 73 6f 6d 65 20 6f 74 68 65 72 20 64   on some other d
a530: 65 62 75 67 67 69 6e 67 20 66 65 61 74 75 72 65  ebugging feature
a540: 73 2e 0a 7d 0a 0a 43 4f 4d 50 49 4c 45 5f 4f 50  s..}..COMPILE_OP
a550: 54 49 4f 4e 20 7b 53 51 4c 49 54 45 5f 4d 45 4d  TION {SQLITE_MEM
a560: 44 45 42 55 47 7d 20 7b 0a 20 20 54 68 65 20 53  DEBUG} {.  The S
a570: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 20 6f  QLITE_MEMDEBUG o
a580: 70 74 69 6f 6e 20 63 61 75 73 65 73 20 61 6e 20  ption causes an 
a590: 69 6e 73 74 72 75 6d 65 6e 74 65 64 20 0a 20 20  instrumented .  
a5a0: 5b 64 65 62 75 67 67 69 6e 67 20 6d 65 6d 6f 72  [debugging memor
a5b0: 79 20 61 6c 6c 6f 63 61 74 6f 72 5d 0a 20 20 74  y allocator].  t
a5c0: 6f 20 62 65 20 75 73 65 64 20 61 73 20 74 68 65  o be used as the
a5d0: 20 64 65 66 61 75 6c 74 20 6d 65 6d 6f 72 79 20   default memory 
a5e0: 61 6c 6c 6f 63 61 74 6f 72 20 77 69 74 68 69 6e  allocator within
a5f0: 20 53 51 4c 69 74 65 2e 20 20 54 68 65 0a 20 20   SQLite.  The.  
a600: 69 6e 73 74 72 75 6d 65 6e 74 65 64 20 6d 65 6d  instrumented mem
a610: 6f 72 79 20 61 6c 6c 6f 63 61 74 6f 72 20 63 68  ory allocator ch
a620: 65 63 6b 73 20 66 6f 72 20 6d 69 73 75 73 65 20  ecks for misuse 
a630: 6f 66 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61  of dynamically a
a640: 6c 6c 6f 63 61 74 65 64 0a 20 20 6d 65 6d 6f 72  llocated.  memor
a650: 79 2e 20 20 45 78 61 6d 70 6c 65 73 20 6f 66 20  y.  Examples of 
a660: 6d 69 73 75 73 65 20 69 6e 63 6c 75 64 65 20 75  misuse include u
a670: 73 69 6e 67 20 6d 65 6d 6f 72 79 20 61 66 74 65  sing memory afte
a680: 72 20 69 74 20 69 73 20 66 72 65 65 64 2c 0a 20  r it is freed,. 
a690: 20 77 72 69 74 69 6e 67 20 6f 66 66 20 74 68 65   writing off the
a6a0: 20 65 6e 64 73 20 6f 66 20 61 20 6d 65 6d 6f 72   ends of a memor
a6b0: 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2c 20 66 72  y allocation, fr
a6c0: 65 65 69 6e 67 20 6d 65 6d 6f 72 79 20 6e 6f 74  eeing memory not
a6d0: 20 70 72 65 76 69 6f 75 73 6c 79 0a 20 20 6f 62   previously.  ob
a6e0: 74 61 69 6e 65 64 20 66 72 6f 6d 20 74 68 65 20  tained from the 
a6f0: 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 6f 72  memory allocator
a700: 2c 20 6f 72 20 66 61 69 6c 69 6e 67 20 74 6f 20  , or failing to 
a710: 69 6e 69 74 69 61 6c 69 7a 65 20 6e 65 77 6c 79  initialize newly
a720: 0a 20 20 61 6c 6c 6f 63 61 74 65 64 20 6d 65 6d  .  allocated mem
a730: 6f 72 79 2e 0a 7d 0a 0a 3c 2f 74 63 6c 3e 0a     ory..}..</tcl>.