Documentation Source Text

Hex Artifact Content
Login

Artifact 7db47493957219a0ed1d4a8d8b0d39c82deaa5f5:


0000: 3c 74 69 74 6c 65 3e 46 69 6c 65 20 46 6f 72 6d  <title>File Form
0010: 61 74 20 46 6f 72 20 53 51 4c 69 74 65 20 44 61  at For SQLite Da
0020: 74 61 62 61 73 65 73 3c 2f 74 69 74 6c 65 3e 0a  tabases</title>.
0030: 3c 74 63 6c 3e 68 64 5f 6b 65 79 77 6f 72 64 73  <tcl>hd_keywords
0040: 20 7b 66 69 6c 65 20 66 6f 72 6d 61 74 7d 20 7b   {file format} {
0050: 73 65 63 6f 6e 64 20 65 64 69 74 69 6f 6e 20 66  second edition f
0060: 69 6c 65 20 66 6f 72 6d 61 74 20 64 6f 63 75 6d  ile format docum
0070: 65 6e 74 7d 3c 2f 74 63 6c 3e 0a 0a 3c 68 31 20  ent}</tcl>..<h1 
0080: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 0a 54 68  align=center>.Th
0090: 65 20 53 51 4c 69 74 65 20 44 61 74 61 62 61 73  e SQLite Databas
00a0: 65 20 46 69 6c 65 20 46 6f 72 6d 61 74 0a 3c 2f  e File Format.</
00b0: 68 31 3e 0a 0a 3c 70 3e 54 68 69 73 20 64 6f 63  h1>..<p>This doc
00c0: 75 6d 65 6e 74 20 64 65 73 63 72 69 62 65 73 20  ument describes 
00d0: 61 6e 64 20 64 65 66 69 6e 65 73 20 74 68 65 20  and defines the 
00e0: 6f 6e 2d 64 69 73 6b 20 64 61 74 61 62 61 73 65  on-disk database
00f0: 20 66 69 6c 65 0a 66 6f 72 6d 61 74 20 75 73 65   file.format use
0100: 64 20 62 79 20 53 51 4c 69 74 65 2e 3c 2f 70 3e  d by SQLite.</p>
0110: 0a 0a 3c 70 3e 54 68 69 73 20 69 73 20 74 68 65  ..<p>This is the
0120: 20 73 65 63 6f 6e 64 20 64 6f 63 75 6d 65 6e 74   second document
0130: 20 74 6f 20 64 65 66 69 6e 65 20 74 68 65 20 53   to define the S
0140: 51 4c 69 74 65 20 64 61 74 61 62 61 73 65 20 66  QLite database f
0150: 69 6c 65 20 66 6f 72 6d 61 74 2e 0a 54 68 65 20  ile format..The 
0160: 5b 66 69 72 73 74 20 65 64 69 74 69 6f 6e 20 66  [first edition f
0170: 69 6c 65 20 66 6f 72 6d 61 74 20 64 6f 63 75 6d  ile format docum
0180: 65 6e 74 5d 20 64 69 66 66 65 72 73 20 66 72 6f  ent] differs fro
0190: 6d 20 74 68 69 73 20 6f 6e 65 20 69 6e 20 74 68  m this one in th
01a0: 61 74 20 69 74 20 69 73 0a 77 72 69 74 74 65 6e  at it is.written
01b0: 20 69 6e 20 61 20 66 6f 72 6d 61 6c 20 73 74 79   in a formal sty
01c0: 6c 65 20 77 68 65 72 65 61 73 20 74 68 69 73 20  le whereas this 
01d0: 64 6f 63 75 6d 65 6e 74 20 61 74 74 65 6d 70 74  document attempt
01e0: 73 20 74 6f 20 62 65 20 6d 6f 72 65 0a 63 6f 6e  s to be more.con
01f0: 76 65 72 73 61 74 69 6f 6e 61 6c 2e 20 20 54 68  versational.  Th
0200: 65 20 74 77 6f 20 64 6f 63 75 6d 65 6e 74 73 20  e two documents 
0210: 77 65 72 65 20 69 6e 64 65 70 65 6e 64 65 6e 74  were independent
0220: 6c 79 20 77 72 69 74 74 65 6e 20 28 74 68 65 79  ly written (they
0230: 20 68 61 76 65 0a 64 69 66 66 65 72 65 6e 74 20   have.different 
0240: 61 75 74 68 6f 72 73 29 20 61 6e 64 20 68 65 6e  authors) and hen
0250: 63 65 20 73 65 72 76 65 20 61 73 20 63 72 6f 73  ce serve as cros
0260: 73 2d 63 68 65 63 6b 73 20 66 6f 72 20 6f 6e 65  s-checks for one
0270: 20 61 6e 6f 74 68 65 72 2e 0a 42 6f 74 68 20 64   another..Both d
0280: 6f 63 75 6d 65 6e 74 73 20 73 68 6f 75 6c 64 20  ocuments should 
0290: 64 65 73 63 72 69 62 65 20 65 78 61 63 74 6c 79  describe exactly
02a0: 20 74 68 65 20 73 61 6d 65 20 66 69 6c 65 20 66   the same file f
02b0: 6f 72 6d 61 74 2e 20 20 0a 41 6e 79 20 69 6e 63  ormat.  .Any inc
02c0: 6f 6d 70 61 74 69 62 69 6c 69 74 69 65 73 20 62  ompatibilities b
02d0: 65 74 77 65 65 6e 20 74 68 65 20 74 77 6f 20 64  etween the two d
02e0: 6f 63 75 6d 65 6e 74 73 20 73 68 6f 75 6c 64 20  ocuments should 
02f0: 62 65 20 63 6f 6e 73 69 64 65 72 65 64 20 61 20  be considered a 
0300: 62 75 67 2e 3c 2f 70 3e 0a 0a 3c 68 32 3e 31 2e  bug.</p>..<h2>1.
0310: 30 20 54 68 65 20 44 61 74 61 62 61 73 65 20 46  0 The Database F
0320: 69 6c 65 3c 2f 68 32 3e 0a 0a 3c 70 3e 4d 6f 73  ile</h2>..<p>Mos
0330: 74 20 6f 66 20 74 68 65 20 74 69 6d 65 20 74 68  t of the time th
0340: 65 20 63 6f 6d 70 6c 65 74 65 20 73 74 61 74 65  e complete state
0350: 20 6f 66 20 61 6e 20 53 51 4c 69 74 65 20 64 61   of an SQLite da
0360: 74 61 62 61 73 65 20 0a 69 73 20 63 6f 6e 74 61  tabase .is conta
0370: 69 6e 65 64 20 61 20 73 69 6e 67 6c 65 20 66 69  ined a single fi
0380: 6c 65 20 6f 6e 20 64 69 73 6b 20 63 61 6c 6c 65  le on disk calle
0390: 64 20 74 68 65 20 22 6d 61 69 6e 20 64 61 74 61  d the "main data
03a0: 62 61 73 65 20 66 69 6c 65 22 2e 3c 2f 70 3e 0a  base file".</p>.
03b0: 0a 3c 70 3e 57 68 69 6c 65 20 70 65 72 66 6f 72  .<p>While perfor
03c0: 6d 69 6e 67 20 61 20 74 72 61 6e 73 61 63 74 69  ming a transacti
03d0: 6f 6e 2c 20 53 51 4c 69 74 65 20 73 74 6f 72 65  on, SQLite store
03e0: 73 20 73 6f 6d 65 20 74 65 6d 70 6f 72 61 72 79  s some temporary
03f0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 69 6e 20   information.in 
0400: 61 20 73 65 63 6f 6e 64 20 66 69 6c 65 20 63 61  a second file ca
0410: 6c 6c 65 64 20 74 68 65 20 22 72 6f 6c 6c 62 61  lled the "rollba
0420: 63 6b 20 6a 6f 75 72 6e 61 6c 22 2e 20 20 49 66  ck journal".  If
0430: 20 74 68 65 20 61 70 70 6c 69 63 61 74 69 6f 6e   the application
0440: 20 6f 72 0a 68 6f 73 74 20 63 6f 6d 70 75 74 65   or.host compute
0450: 72 20 63 72 61 73 68 65 73 20 62 65 66 6f 72 65  r crashes before
0460: 20 63 6f 6d 70 6c 65 74 69 6e 67 20 74 68 65 20   completing the 
0470: 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65  transaction, the
0480: 6e 20 74 68 65 20 72 6f 6c 6c 62 61 63 6b 0a 6a  n the rollback.j
0490: 6f 75 72 6e 61 6c 20 63 6f 6e 74 61 69 6e 73 20  ournal contains 
04a0: 63 72 69 74 69 63 61 6c 20 73 74 61 74 65 20 69  critical state i
04b0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65  nformation neede
04c0: 64 20 74 6f 20 72 65 73 74 6f 72 65 20 74 68 65  d to restore the
04d0: 0a 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65 20  .content of the 
04e0: 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
04f0: 6c 65 2e 20 20 57 68 65 6e 20 61 20 72 6f 6c 6c  le.  When a roll
0500: 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 63 6f 6e  back journal con
0510: 74 61 69 6e 73 0a 69 6e 66 6f 72 6d 61 74 69 6f  tains.informatio
0520: 6e 20 6e 65 63 65 73 73 61 72 79 20 66 6f 72 20  n necessary for 
0530: 72 65 63 6f 76 65 72 69 6e 67 20 74 68 65 20 73  recovering the s
0540: 74 61 74 65 20 6f 66 20 74 68 65 20 64 61 74 61  tate of the data
0550: 62 61 73 65 2c 20 77 65 20 73 61 79 0a 74 68 61  base, we say.tha
0560: 74 20 69 74 20 69 73 20 61 20 22 68 6f 74 20 6a  t it is a "hot j
0570: 6f 75 72 6e 61 6c 22 2e 20 20 48 6f 74 20 6a 6f  ournal".  Hot jo
0580: 75 72 6e 61 6c 73 20 6f 6e 6c 79 20 63 6f 6d 65  urnals only come
0590: 20 75 70 20 69 6e 20 61 6e 20 65 72 72 6f 72 20   up in an error 
05a0: 72 65 63 6f 76 65 72 79 0a 73 63 65 6e 61 72 69  recovery.scenari
05b0: 6f 20 61 6e 64 20 73 6f 20 61 72 65 20 75 6e 63  o and so are unc
05c0: 6f 6d 6d 6f 6e 2c 20 62 75 74 20 74 68 65 79 20  ommon, but they 
05d0: 61 72 65 20 70 61 72 74 20 6f 66 20 74 68 65 20  are part of the 
05e0: 73 74 61 74 65 20 6f 66 20 61 6e 20 53 51 4c 69  state of an SQLi
05f0: 74 65 0a 64 61 74 61 62 61 73 65 20 61 6e 64 20  te.database and 
0600: 73 6f 20 73 68 6f 75 6c 64 20 6e 6f 74 20 62 65  so should not be
0610: 20 69 67 6e 6f 72 65 64 2e 20 20 54 68 69 73 20   ignored.  This 
0620: 64 6f 63 75 6d 65 6e 74 20 77 69 6c 6c 20 64 65  document will de
0630: 66 69 6e 65 20 74 68 65 20 66 6f 72 6d 61 74 0a  fine the format.
0640: 6f 66 20 61 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f  of a rollback jo
0650: 75 72 6e 61 6c 2c 20 62 75 74 20 6d 6f 73 74 20  urnal, but most 
0660: 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  of the content o
0670: 66 20 74 68 69 73 20 64 6f 63 75 6d 65 6e 74 20  f this document 
0680: 77 69 6c 6c 20 66 6f 63 75 73 0a 6f 6e 20 74 68  will focus.on th
0690: 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
06a0: 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 31  file.</p>..<h3>1
06b0: 2e 31 20 50 61 67 65 73 3c 2f 68 33 3e 0a 0a 3c  .1 Pages</h3>..<
06c0: 70 3e 54 68 65 20 6d 61 69 6e 20 64 61 74 61 62  p>The main datab
06d0: 61 73 65 20 66 69 6c 65 20 63 6f 6e 73 69 73 74  ase file consist
06e0: 73 20 6f 66 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  s of one or more
06f0: 20 70 61 67 65 73 2e 20 20 5e 54 68 65 20 73 69   pages.  ^The si
0700: 7a 65 20 6f 66 20 61 0a 70 61 67 65 20 69 73 20  ze of a.page is 
0710: 61 20 70 6f 77 65 72 20 6f 66 20 74 77 6f 20 62  a power of two b
0720: 65 74 77 65 65 6e 20 35 31 32 20 61 6e 64 20 36  etween 512 and 6
0730: 35 35 33 36 20 69 6e 63 6c 75 73 69 76 65 2e 20  5536 inclusive. 
0740: 20 41 6c 6c 20 70 61 67 65 73 20 77 69 74 68 69   All pages withi
0750: 6e 0a 74 68 65 20 73 61 6d 65 20 64 61 74 61 62  n.the same datab
0760: 61 73 65 20 61 72 65 20 74 68 65 20 73 61 6d 65  ase are the same
0770: 20 73 69 7a 65 2e 20 20 5e 54 68 65 20 70 61 67   size.  ^The pag
0780: 65 20 73 69 7a 65 20 66 6f 72 20 61 20 64 61 74  e size for a dat
0790: 61 62 61 73 65 20 66 69 6c 65 0a 69 73 20 64 65  abase file.is de
07a0: 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20  termined by the 
07b0: 32 2d 62 79 74 65 20 69 6e 74 65 67 65 72 20 6c  2-byte integer l
07c0: 6f 63 61 74 65 64 20 61 74 20 61 6e 20 6f 66 66  ocated at an off
07d0: 73 65 74 20 6f 66 0a 31 36 20 62 79 74 65 73 20  set of.16 bytes 
07e0: 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69  from the beginni
07f0: 6e 67 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ng of the databa
0800: 73 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70  se file.</p>..<p
0810: 3e 50 61 67 65 73 20 61 72 65 20 6e 75 6d 62 65  >Pages are numbe
0820: 72 65 64 20 62 65 67 69 6e 6e 69 6e 67 20 77 69  red beginning wi
0830: 74 68 20 31 2e 20 20 54 68 65 20 6d 61 78 69 6d  th 1.  The maxim
0840: 75 6d 20 70 61 67 65 20 6e 75 6d 62 65 72 20 69  um page number i
0850: 73 0a 32 31 34 37 34 38 33 36 34 36 20 28 32 3c  s.2147483646 (2<
0860: 73 75 70 3e 3c 73 6d 61 6c 6c 3e 33 31 3c 2f 73  sup><small>31</s
0870: 6d 61 6c 6c 3e 3c 2f 73 75 70 3e 20 2d 20 32 29  mall></sup> - 2)
0880: 2e 20 20 54 68 65 20 6d 69 6e 69 6d 75 6d 20 73  .  The minimum s
0890: 69 7a 65 0a 53 51 4c 69 74 65 20 64 61 74 61 62  ize.SQLite datab
08a0: 61 73 65 20 69 73 20 61 20 73 69 6e 67 6c 65 20  ase is a single 
08b0: 35 31 32 2d 62 79 74 65 20 70 61 67 65 2e 0a 54  512-byte page..T
08c0: 68 65 20 6d 61 78 69 6d 75 6d 20 73 69 7a 65 20  he maximum size 
08d0: 64 61 74 61 62 61 73 65 20 77 6f 75 6c 64 20 62  database would b
08e0: 65 20 32 31 34 37 34 38 33 36 34 36 20 70 61 67  e 2147483646 pag
08f0: 65 73 20 61 74 20 36 35 35 33 36 20 62 79 74 65  es at 65536 byte
0900: 73 20 70 65 72 0a 70 61 67 65 20 6f 72 20 31 34  s per.page or 14
0910: 30 2c 37 33 37 2c 34 38 38 2c 32 32 34 2c 32 35  0,737,488,224,25
0920: 36 20 62 79 74 65 73 20 28 61 62 6f 75 74 20 31  6 bytes (about 1
0930: 34 30 20 74 65 72 61 62 79 74 65 73 29 2e 20 20  40 terabytes).  
0940: 55 73 75 61 6c 6c 79 20 53 51 4c 69 74 65 20 77  Usually SQLite w
0950: 69 6c 6c 0a 68 69 74 20 74 68 65 20 6d 61 78 69  ill.hit the maxi
0960: 6d 75 6d 20 66 69 6c 65 20 73 69 7a 65 20 6c 69  mum file size li
0970: 6d 69 74 20 6f 66 20 74 68 65 20 75 6e 64 65 72  mit of the under
0980: 6c 79 69 6e 67 20 66 69 6c 65 73 79 73 74 65 6d  lying filesystem
0990: 20 6f 72 20 64 69 73 6b 0a 68 61 72 64 77 61 72   or disk.hardwar
09a0: 65 20 73 69 7a 65 20 6c 69 6d 69 74 20 6c 6f 6e  e size limit lon
09b0: 67 20 62 65 66 6f 72 65 20 69 74 20 68 69 74 73  g before it hits
09c0: 20 69 74 73 20 6f 77 6e 20 69 6e 74 65 72 6e 61   its own interna
09d0: 6c 20 73 69 7a 65 20 6c 69 6d 69 74 2e 3c 2f 70  l size limit.</p
09e0: 3e 0a 0a 3c 70 3e 49 6e 20 63 6f 6d 6d 6f 6e 20  >..<p>In common 
09f0: 75 73 65 2c 20 53 51 4c 69 74 65 20 64 61 74 61  use, SQLite data
0a00: 62 61 73 65 73 20 74 65 6e 64 20 74 6f 20 72 61  bases tend to ra
0a10: 6e 67 65 20 69 6e 20 73 69 7a 65 20 66 72 6f 6d  nge in size from
0a20: 20 61 20 66 65 77 20 6b 69 6c 6f 62 79 74 65 73   a few kilobytes
0a30: 0a 74 6f 20 61 20 66 65 77 20 67 69 67 61 62 79  .to a few gigaby
0a40: 74 65 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 74 20  tes.</p>..<p>At 
0a50: 61 6e 79 20 70 6f 69 6e 74 20 69 6e 20 74 69 6d  any point in tim
0a60: 65 2c 20 65 76 65 72 79 20 70 61 67 65 20 69 6e  e, every page in
0a70: 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
0a80: 73 65 20 68 61 73 20 61 20 73 69 6e 67 6c 65 0a  se has a single.
0a90: 75 73 65 20 77 68 69 63 68 20 69 73 20 6f 6e 65  use which is one
0aa0: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
0ab0: 67 3a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 54 68 65 20  g:.<ul>.<li>The 
0ac0: 6c 6f 63 6b 2d 62 79 74 65 20 70 61 67 65 0a 3c  lock-byte page.<
0ad0: 6c 69 3e 41 20 66 72 65 65 6c 69 73 74 20 70 61  li>A freelist pa
0ae0: 67 65 0a 3c 75 6c 3e 0a 3c 6c 69 3e 41 20 66 72  ge.<ul>.<li>A fr
0af0: 65 65 6c 69 73 74 20 74 72 75 6e 6b 20 70 61 67  eelist trunk pag
0b00: 65 0a 3c 6c 69 3e 41 20 66 72 65 65 6c 69 73 74  e.<li>A freelist
0b10: 20 6c 65 61 66 20 70 61 67 65 0a 3c 2f 75 6c 3e   leaf page.</ul>
0b20: 0a 3c 6c 69 3e 41 20 62 2d 74 72 65 65 20 70 61  .<li>A b-tree pa
0b30: 67 65 0a 3c 75 6c 3e 0a 3c 6c 69 3e 41 20 74 61  ge.<ul>.<li>A ta
0b40: 62 6c 65 20 62 2d 74 72 65 65 20 69 6e 74 65 72  ble b-tree inter
0b50: 69 6f 72 20 70 61 67 65 0a 3c 6c 69 3e 41 20 74  ior page.<li>A t
0b60: 61 62 6c 65 20 62 2d 74 72 65 65 20 6c 65 61 66  able b-tree leaf
0b70: 20 70 61 67 65 0a 3c 6c 69 3e 41 6e 20 69 6e 64   page.<li>An ind
0b80: 65 78 20 62 2d 74 72 65 65 20 69 6e 74 65 72 69  ex b-tree interi
0b90: 6f 72 20 70 61 67 65 0a 3c 6c 69 3e 41 6e 20 69  or page.<li>An i
0ba0: 6e 64 65 78 20 62 2d 74 72 65 65 20 6c 65 61 66  ndex b-tree leaf
0bb0: 20 70 61 67 65 0a 3c 2f 75 6c 3e 0a 3c 6c 69 3e   page.</ul>.<li>
0bc0: 41 20 70 61 79 6c 6f 61 64 20 6f 76 65 72 66 6c  A payload overfl
0bd0: 6f 77 20 70 61 67 65 0a 3c 6c 69 3e 41 20 70 6f  ow page.<li>A po
0be0: 69 6e 74 65 72 20 6d 61 70 20 70 61 67 65 0a 3c  inter map page.<
0bf0: 2f 75 6c 3e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41  /ul>.</p>..<p>^A
0c00: 6c 6c 20 72 65 61 64 73 20 66 72 6f 6d 20 61 6e  ll reads from an
0c10: 64 20 77 72 69 74 65 73 20 74 6f 20 74 68 65 20  d writes to the 
0c20: 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
0c30: 6c 65 20 62 65 67 69 6e 20 61 74 20 61 20 70 61  le begin at a pa
0c40: 67 65 0a 62 6f 75 6e 64 61 72 79 20 61 6e 64 20  ge.boundary and 
0c50: 61 6c 6c 20 77 72 69 74 65 73 20 61 72 65 20 61  all writes are a
0c60: 6e 20 69 6e 74 65 67 65 72 20 6e 75 6d 62 65 72  n integer number
0c70: 20 6f 66 20 70 61 67 65 73 20 69 6e 20 73 69 7a   of pages in siz
0c80: 65 2e 20 20 5e 52 65 61 64 73 0a 61 72 65 20 61  e.  ^Reads.are a
0c90: 6c 73 6f 20 75 73 75 61 6c 6c 79 20 61 6e 20 69  lso usually an i
0ca0: 6e 74 65 67 65 72 20 6e 75 6d 62 65 72 20 6f 66  nteger number of
0cb0: 20 70 61 67 65 73 20 69 6e 20 73 69 7a 65 2c 20   pages in size, 
0cc0: 77 69 74 68 20 74 68 65 20 6f 6e 65 20 65 78 63  with the one exc
0cd0: 65 70 74 69 6f 6e 0a 74 68 61 74 20 77 68 65 6e  eption.that when
0ce0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73   the database is
0cf0: 20 66 69 72 73 74 20 6f 70 65 6e 65 64 2c 20 74   first opened, t
0d00: 68 65 20 66 69 72 73 74 20 31 30 30 20 62 79 74  he first 100 byt
0d10: 65 73 20 6f 66 20 74 68 65 0a 64 61 74 61 62 61  es of the.databa
0d20: 73 65 20 66 69 6c 65 20 28 74 68 65 20 64 61 74  se file (the dat
0d30: 61 62 61 73 65 20 66 69 6c 65 20 68 65 61 64 65  abase file heade
0d40: 72 29 20 61 72 65 20 72 65 61 64 20 61 73 20 61  r) are read as a
0d50: 20 73 75 62 2d 70 61 67 65 20 73 69 7a 65 20 75   sub-page size u
0d60: 6e 69 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 42 65  nit.</p>..<p>^Be
0d70: 66 6f 72 65 20 61 6e 79 20 69 6e 66 6f 72 6d 61  fore any informa
0d80: 74 69 6f 6e 2d 62 65 61 72 69 6e 67 20 70 61 67  tion-bearing pag
0d90: 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  e of the databas
0da0: 65 20 69 73 20 6d 6f 64 69 66 69 65 64 2c 20 0a  e is modified, .
0db0: 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 75 6e 6d  the original unm
0dc0: 6f 64 69 66 69 65 64 20 63 6f 6e 74 65 6e 74 20  odified content 
0dd0: 6f 66 20 74 68 61 74 20 70 61 67 65 20 69 73 20  of that page is 
0de0: 77 72 69 74 74 65 6e 20 69 6e 74 6f 20 74 68 65  written into the
0df0: 20 0a 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e   .rollback journ
0e00: 61 6c 2e 20 20 49 66 20 61 20 74 72 61 6e 73 61  al.  If a transa
0e10: 63 74 69 6f 6e 20 69 73 20 69 6e 74 65 72 72 75  ction is interru
0e20: 70 74 65 64 20 61 6e 64 20 6e 65 65 64 73 20 74  pted and needs t
0e30: 6f 20 62 65 20 0a 72 6f 6c 6c 65 64 20 62 61 63  o be .rolled bac
0e40: 6b 2c 20 74 68 65 20 72 6f 6c 6c 62 61 63 6b 20  k, the rollback 
0e50: 6a 6f 75 72 6e 61 6c 20 63 61 6e 20 74 68 65 6e  journal can then
0e60: 20 62 65 20 75 73 65 64 20 74 6f 20 72 65 73 74   be used to rest
0e70: 6f 72 65 20 74 68 65 0a 64 61 74 61 62 61 73 65  ore the.database
0e80: 20 74 6f 20 69 74 73 20 6f 72 69 67 69 6e 61 6c   to its original
0e90: 20 73 74 61 74 65 2e 20 20 5e 46 72 65 65 6c 69   state.  ^Freeli
0ea0: 73 74 20 6c 65 61 66 20 70 61 67 65 73 20 62 65  st leaf pages be
0eb0: 61 72 20 6e 6f 0a 69 6e 66 6f 72 6d 61 74 69 6f  ar no.informatio
0ec0: 6e 20 74 68 61 74 20 77 6f 75 6c 64 20 6e 65 65  n that would nee
0ed0: 64 20 74 6f 20 62 65 20 72 65 73 74 6f 72 65 64  d to be restored
0ee0: 20 6f 6e 20 61 20 72 6f 6c 6c 62 61 63 6b 20 61   on a rollback a
0ef0: 6e 64 20 73 6f 20 74 68 65 79 0a 61 72 65 20 6e  nd so they.are n
0f00: 6f 74 20 77 72 69 74 74 65 6e 20 74 6f 20 74 68  ot written to th
0f10: 65 20 6a 6f 75 72 6e 61 6c 20 70 72 69 6f 72 20  e journal prior 
0f20: 74 6f 20 6d 6f 64 69 66 69 63 61 74 69 6f 6e 2c  to modification,
0f30: 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 72 65 64   in order to.red
0f40: 75 63 65 20 64 69 73 6b 20 49 2f 4f 2e 3c 2f 70  uce disk I/O.</p
0f50: 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
0f60: 65 6e 74 20 64 61 74 61 62 61 73 65 5f 68 65 61  ent database_hea
0f70: 64 65 72 20 7b 64 61 74 61 62 61 73 65 20 68 65  der {database he
0f80: 61 64 65 72 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e  ader}</tcl>.<h3>
0f90: 31 2e 32 20 54 68 65 20 44 61 74 61 62 61 73 65  1.2 The Database
0fa0: 20 48 65 61 64 65 72 3c 2f 68 33 3e 0a 0a 3c 70   Header</h3>..<p
0fb0: 3e 54 68 65 20 66 69 72 73 74 20 31 30 30 20 62  >The first 100 b
0fc0: 79 74 65 73 20 6f 66 20 74 68 65 20 64 61 74 61  ytes of the data
0fd0: 62 61 73 65 20 66 69 6c 65 20 63 6f 6d 70 72 69  base file compri
0fe0: 73 65 20 74 68 65 20 64 61 74 61 62 61 73 65 20  se the database 
0ff0: 66 69 6c 65 20 0a 68 65 61 64 65 72 2e 20 20 54  file .header.  T
1000: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
1010: 20 68 65 61 64 65 72 20 69 73 20 64 69 76 69 64   header is divid
1020: 65 64 20 69 6e 74 6f 20 66 69 65 6c 64 73 20 61  ed into fields a
1030: 73 20 73 68 6f 77 6e 20 62 79 0a 74 68 65 20 74  s shown by.the t
1040: 61 62 6c 65 20 62 65 6c 6f 77 2e 20 20 41 6c 6c  able below.  All
1050: 20 6d 75 6c 74 69 62 79 74 65 20 66 69 65 6c 64   multibyte field
1060: 73 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  s in the databas
1070: 65 20 66 69 6c 65 20 68 65 61 64 65 72 20 61 72  e file header ar
1080: 65 0a 73 74 6f 72 65 64 20 77 69 74 68 20 74 68  e.stored with th
1090: 65 20 6d 75 73 74 20 73 69 67 6e 69 66 69 63 61  e must significa
10a0: 6e 74 20 62 79 74 65 20 66 69 72 73 74 20 28 62  nt byte first (b
10b0: 69 67 2d 65 6e 64 69 61 6e 29 2e 3c 2f 70 3e 0a  ig-endian).</p>.
10c0: 0a 3c 63 65 6e 74 65 72 3e 0a 3c 69 3e 44 61 74  .<center>.<i>Dat
10d0: 61 62 61 73 65 20 48 65 61 64 65 72 20 46 6f 72  abase Header For
10e0: 6d 61 74 3c 2f 69 3e 3c 62 72 3e 0a 3c 74 61 62  mat</i><br>.<tab
10f0: 6c 65 20 77 69 64 74 68 3d 22 38 30 25 22 20 62  le width="80%" b
1100: 6f 72 64 65 72 3d 31 3e 0a 3c 74 72 3e 3c 74 68  order=1>.<tr><th
1110: 3e 4f 66 66 73 65 74 3c 74 68 3e 53 69 7a 65 3c  >Offset<th>Size<
1120: 74 68 3e 44 65 73 63 72 69 70 74 69 6f 6e 0a 3c  th>Description.<
1130: 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
1140: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 30  p align=center>0
1150: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
1160: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 36 3c 74  lign=center>16<t
1170: 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 54 68  d align=left>.Th
1180: 65 20 68 65 61 64 65 72 20 73 74 72 69 6e 67 3a  e header string:
1190: 20 22 53 51 4c 69 74 65 20 66 6f 72 6d 61 74 20   "SQLite format 
11a0: 33 5c 30 30 30 22 0a 3c 74 72 3e 3c 74 64 20 76  3\000".<tr><td v
11b0: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
11c0: 63 65 6e 74 65 72 3e 31 36 3c 74 64 20 76 61 6c  center>16<td val
11d0: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
11e0: 6e 74 65 72 3e 32 3c 74 64 20 61 6c 69 67 6e 3d  nter>2<td align=
11f0: 6c 65 66 74 3e 0a 54 68 65 20 64 61 74 61 62 61  left>.The databa
1200: 73 65 20 70 61 67 65 20 73 69 7a 65 20 69 6e 20  se page size in 
1210: 62 79 74 65 73 2e 20 20 4d 75 73 74 20 62 65 20  bytes.  Must be 
1220: 61 20 70 6f 77 65 72 20 6f 66 20 74 77 6f 20 62  a power of two b
1230: 65 74 77 65 65 6e 20 35 31 32 0a 61 6e 64 20 33  etween 512.and 3
1240: 32 37 36 38 20 69 6e 63 6c 75 73 69 76 65 2c 20  2768 inclusive, 
1250: 6f 72 20 74 68 65 20 76 61 6c 75 65 20 31 20 72  or the value 1 r
1260: 65 70 72 65 73 65 6e 74 69 6e 67 20 61 20 70 61  epresenting a pa
1270: 67 65 20 73 69 7a 65 20 6f 66 20 36 35 35 33 36  ge size of 65536
1280: 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  ..<tr><td valign
1290: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
12a0: 72 3e 31 38 3c 74 64 20 76 61 6c 69 67 6e 3d 74  r>18<td valign=t
12b0: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
12c0: 31 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e  1<td align=left>
12d0: 0a 46 69 6c 65 20 66 6f 72 6d 61 74 20 77 72 69  .File format wri
12e0: 74 65 20 76 65 72 73 69 6f 6e 2e 20 20 31 20 66  te version.  1 f
12f0: 6f 72 20 6c 65 67 61 63 79 3b 20 32 20 66 6f 72  or legacy; 2 for
1300: 20 5b 57 41 4c 5d 2e 0a 3c 74 72 3e 3c 74 64 20   [WAL]..<tr><td 
1310: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
1320: 3d 63 65 6e 74 65 72 3e 31 39 3c 74 64 20 76 61  =center>19<td va
1330: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
1340: 65 6e 74 65 72 3e 31 3c 74 64 20 61 6c 69 67 6e  enter>1<td align
1350: 3d 6c 65 66 74 3e 0a 46 69 6c 65 20 66 6f 72 6d  =left>.File form
1360: 61 74 20 72 65 61 64 20 76 65 72 73 69 6f 6e 2e  at read version.
1370: 20 20 31 20 66 6f 72 20 6c 65 67 61 63 79 3b 20    1 for legacy; 
1380: 32 20 66 6f 72 20 5b 57 41 4c 5d 2e 0a 3c 74 72  2 for [WAL]..<tr
1390: 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
13a0: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32 30 3c  align=center>20<
13b0: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
13c0: 69 67 6e 3d 63 65 6e 74 65 72 3e 31 3c 74 64 20  ign=center>1<td 
13d0: 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 42 79 74 65  align=left>.Byte
13e0: 73 20 6f 66 20 75 6e 75 73 65 64 20 22 72 65 73  s of unused "res
13f0: 65 72 76 65 64 22 20 73 70 61 63 65 20 61 74 20  erved" space at 
1400: 74 68 65 20 65 6e 64 20 6f 66 20 65 61 63 68 20  the end of each 
1410: 70 61 67 65 2e 20 20 55 73 75 61 6c 6c 79 20 30  page.  Usually 0
1420: 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  ..<tr><td valign
1430: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
1440: 72 3e 32 31 3c 74 64 20 76 61 6c 69 67 6e 3d 74  r>21<td valign=t
1450: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
1460: 31 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e  1<td align=left>
1470: 0a 4d 61 78 69 6d 75 6d 20 65 6d 62 65 64 64 65  .Maximum embedde
1480: 64 20 70 61 79 6c 6f 61 64 20 66 72 61 63 74 69  d payload fracti
1490: 6f 6e 2e 20 20 4d 75 73 74 20 62 65 20 36 34 2e  on.  Must be 64.
14a0: 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d  .<tr><td valign=
14b0: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
14c0: 3e 32 32 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  >22<td valign=to
14d0: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31  p align=center>1
14e0: 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a  <td align=left>.
14f0: 4d 69 6e 69 6d 75 6d 20 65 6d 62 65 64 64 65 64  Minimum embedded
1500: 20 70 61 79 6c 6f 61 64 20 66 72 61 63 74 69 6f   payload fractio
1510: 6e 2e 20 20 4d 75 73 74 20 62 65 20 33 32 2e 0a  n.  Must be 32..
1520: 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74  <tr><td valign=t
1530: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
1540: 32 33 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  23<td valign=top
1550: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 3c   align=center>1<
1560: 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 4c  td align=left>.L
1570: 65 61 66 20 70 61 79 6c 6f 61 64 20 66 72 61 63  eaf payload frac
1580: 74 69 6f 6e 2e 20 20 4d 75 73 74 20 62 65 20 33  tion.  Must be 3
1590: 32 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  2..<tr><td valig
15a0: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
15b0: 65 72 3e 32 34 3c 74 64 20 76 61 6c 69 67 6e 3d  er>24<td valign=
15c0: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
15d0: 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74  >4<td align=left
15e0: 3e 0a 46 69 6c 65 20 63 68 61 6e 67 65 20 63 6f  >.File change co
15f0: 75 6e 74 65 72 2e 0a 3c 74 72 3e 3c 74 64 20 76  unter..<tr><td v
1600: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
1610: 63 65 6e 74 65 72 3e 32 38 3c 74 64 20 76 61 6c  center>28<td val
1620: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
1630: 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d  nter>4<td align=
1640: 6c 65 66 74 3e 0a 53 69 7a 65 20 6f 66 20 74 68  left>.Size of th
1650: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
1660: 69 6e 20 70 61 67 65 73 2e 20 20 54 68 65 20 22  in pages.  The "
1670: 69 6e 2d 68 65 61 64 65 72 20 64 61 74 61 62 61  in-header databa
1680: 73 65 20 73 69 7a 65 22 2e 0a 3c 74 72 3e 3c 74  se size"..<tr><t
1690: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
16a0: 67 6e 3d 63 65 6e 74 65 72 3e 33 32 3c 74 64 20  gn=center>32<td 
16b0: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
16c0: 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69  =center>4<td ali
16d0: 67 6e 3d 6c 65 66 74 3e 0a 50 61 67 65 20 6e 75  gn=left>.Page nu
16e0: 6d 62 65 72 20 6f 66 20 74 68 65 20 66 69 72 73  mber of the firs
16f0: 74 20 66 72 65 65 6c 69 73 74 20 74 72 75 6e 6b  t freelist trunk
1700: 20 70 61 67 65 2e 0a 3c 74 72 3e 3c 74 64 20 76   page..<tr><td v
1710: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
1720: 63 65 6e 74 65 72 3e 33 36 3c 74 64 20 76 61 6c  center>36<td val
1730: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
1740: 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d  nter>4<td align=
1750: 6c 65 66 74 3e 0a 54 6f 74 61 6c 20 6e 75 6d 62  left>.Total numb
1760: 65 72 20 6f 66 20 66 72 65 65 6c 69 73 74 20 70  er of freelist p
1770: 61 67 65 73 2e 0a 3c 74 72 3e 3c 74 64 20 76 61  ages..<tr><td va
1780: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
1790: 65 6e 74 65 72 3e 34 30 3c 74 64 20 76 61 6c 69  enter>40<td vali
17a0: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
17b0: 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c  ter>4<td align=l
17c0: 65 66 74 3e 0a 54 68 65 20 73 63 68 65 6d 61 20  eft>.The schema 
17d0: 63 6f 6f 6b 69 65 2e 0a 3c 74 72 3e 3c 74 64 20  cookie..<tr><td 
17e0: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
17f0: 3d 63 65 6e 74 65 72 3e 34 34 3c 74 64 20 76 61  =center>44<td va
1800: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
1810: 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e  enter>4<td align
1820: 3d 6c 65 66 74 3e 0a 54 68 65 20 73 63 68 65 6d  =left>.The schem
1830: 61 20 66 6f 72 6d 61 74 20 6e 75 6d 62 65 72 2e  a format number.
1840: 20 20 53 75 70 70 6f 72 74 65 64 20 73 63 68 65    Supported sche
1850: 6d 61 20 66 6f 72 6d 61 74 73 20 61 72 65 20 31  ma formats are 1
1860: 2c 20 32 2c 20 33 2c 20 61 6e 64 20 34 2e 0a 3c  , 2, 3, and 4..<
1870: 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
1880: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34  p align=center>4
1890: 38 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  8<td valign=top 
18a0: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 3c 74  align=center>4<t
18b0: 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 44 65  d align=left>.De
18c0: 66 61 75 6c 74 20 70 61 67 65 20 63 61 63 68 65  fault page cache
18d0: 20 73 69 7a 65 2e 0a 3c 74 72 3e 3c 74 64 20 76   size..<tr><td v
18e0: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
18f0: 63 65 6e 74 65 72 3e 35 32 3c 74 64 20 76 61 6c  center>52<td val
1900: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
1910: 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d  nter>4<td align=
1920: 6c 65 66 74 3e 0a 54 68 65 20 70 61 67 65 20 6e  left>.The page n
1930: 75 6d 62 65 72 20 6f 66 20 74 68 65 20 6c 61 72  umber of the lar
1940: 67 65 73 74 20 72 6f 6f 74 20 62 2d 74 72 65 65  gest root b-tree
1950: 20 70 61 67 65 20 77 68 65 6e 20 69 6e 20 61 75   page when in au
1960: 74 6f 2d 76 61 63 75 75 6d 20 6f 72 0a 69 6e 63  to-vacuum or.inc
1970: 72 65 6d 65 6e 74 61 6c 2d 76 61 63 75 75 6d 20  remental-vacuum 
1980: 6d 6f 64 65 73 2c 20 6f 72 20 7a 65 72 6f 20 6f  modes, or zero o
1990: 74 68 65 72 77 69 73 65 2e 0a 3c 74 72 3e 3c 74  therwise..<tr><t
19a0: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
19b0: 67 6e 3d 63 65 6e 74 65 72 3e 35 36 3c 74 64 20  gn=center>56<td 
19c0: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
19d0: 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69  =center>4<td ali
19e0: 67 6e 3d 6c 65 66 74 3e 0a 54 68 65 20 64 61 74  gn=left>.The dat
19f0: 61 62 61 73 65 20 74 65 78 74 20 65 6e 63 6f 64  abase text encod
1a00: 69 6e 67 2e 20 20 41 20 76 61 6c 75 65 20 6f 66  ing.  A value of
1a10: 20 31 20 6d 65 61 6e 73 20 55 54 46 2d 38 2e 20   1 means UTF-8. 
1a20: 20 41 20 76 61 6c 75 65 20 6f 66 20 32 0a 6d 65   A value of 2.me
1a30: 61 6e 73 20 55 54 46 2d 31 36 6c 65 2e 20 20 41  ans UTF-16le.  A
1a40: 20 76 61 6c 75 65 20 6f 66 20 33 20 6d 65 61 6e   value of 3 mean
1a50: 73 20 55 54 46 2d 31 36 62 65 2e 0a 3c 74 72 3e  s UTF-16be..<tr>
1a60: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
1a70: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 36 30 3c 74  lign=center>60<t
1a80: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
1a90: 67 6e 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20 61  gn=center>4<td a
1aa0: 6c 69 67 6e 3d 6c 65 66 74 3e 0a 54 68 65 20 22  lign=left>.The "
1ab0: 75 73 65 72 20 76 65 72 73 69 6f 6e 22 20 61 73  user version" as
1ac0: 20 72 65 61 64 20 61 6e 64 20 73 65 74 20 62 79   read and set by
1ad0: 20 74 68 65 20 5b 75 73 65 72 5f 76 65 72 73 69   the [user_versi
1ae0: 6f 6e 20 70 72 61 67 6d 61 5d 2e 0a 3c 74 72 3e  on pragma]..<tr>
1af0: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
1b00: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 36 34 3c 74  lign=center>64<t
1b10: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
1b20: 67 6e 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20 61  gn=center>4<td a
1b30: 6c 69 67 6e 3d 6c 65 66 74 3e 0a 54 72 75 65 20  lign=left>.True 
1b40: 28 6e 6f 6e 2d 7a 65 72 6f 29 20 66 6f 72 20 69  (non-zero) for i
1b50: 6e 63 72 65 6d 65 6e 74 61 6c 2d 76 61 63 75 75  ncremental-vacuu
1b60: 6d 20 6d 6f 64 65 2e 20 20 46 61 6c 73 65 20 28  m mode.  False (
1b70: 7a 65 72 6f 29 20 6f 74 68 65 72 77 69 73 65 2e  zero) otherwise.
1b80: 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d  .<tr><td valign=
1b90: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
1ba0: 3e 36 38 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  >68<td valign=to
1bb0: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32  p align=center>2
1bc0: 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e  4<td align=left>
1bd0: 0a 52 65 73 65 72 76 65 64 20 66 6f 72 20 65 78  .Reserved for ex
1be0: 70 61 6e 73 69 6f 6e 2e 20 20 4d 75 73 74 20 62  pansion.  Must b
1bf0: 65 20 7a 65 72 6f 2e 0a 3c 74 72 3e 3c 74 64 20  e zero..<tr><td 
1c00: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
1c10: 3d 63 65 6e 74 65 72 3e 39 32 3c 74 64 20 76 61  =center>92<td va
1c20: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
1c30: 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e  enter>4<td align
1c40: 3d 6c 65 66 74 3e 0a 54 68 65 20 5b 76 65 72 73  =left>.The [vers
1c50: 69 6f 6e 2d 76 61 6c 69 64 2d 66 6f 72 20 6e 75  ion-valid-for nu
1c60: 6d 62 65 72 5d 2e 0a 3c 74 72 3e 3c 74 64 20 76  mber]..<tr><td v
1c70: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
1c80: 63 65 6e 74 65 72 3e 39 36 3c 74 64 20 76 61 6c  center>96<td val
1c90: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
1ca0: 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d  nter>4<td align=
1cb0: 6c 65 66 74 3e 0a 5b 53 51 4c 49 54 45 5f 56 45  left>.[SQLITE_VE
1cc0: 52 53 49 4f 4e 5f 4e 55 4d 42 45 52 5d 0a 3c 2f  RSION_NUMBER].</
1cd0: 74 61 62 6c 65 3e 3c 2f 63 65 6e 74 65 72 3e 0a  table></center>.
1ce0: 0a 3c 68 34 3e 31 2e 32 2e 31 20 4d 61 67 69 63  .<h4>1.2.1 Magic
1cf0: 20 48 65 61 64 65 72 20 53 74 72 69 6e 67 3c 2f   Header String</
1d00: 68 34 3e 0a 0a 3c 70 3e 5e 45 76 65 72 79 20 76  h4>..<p>^Every v
1d10: 61 6c 69 64 20 53 51 4c 69 74 65 20 64 61 74 61  alid SQLite data
1d20: 62 61 73 65 20 66 69 6c 65 20 62 65 67 69 6e 73  base file begins
1d30: 20 77 69 74 68 20 74 68 65 20 66 6f 6c 6c 6f 77   with the follow
1d40: 69 6e 67 20 31 36 20 62 79 74 65 73 20 0a 28 69  ing 16 bytes .(i
1d50: 6e 20 68 65 78 29 3a 20 35 33 20 35 31 20 34 63  n hex): 53 51 4c
1d60: 20 36 39 20 37 34 20 36 35 20 32 30 20 36 36 20   69 74 65 20 66 
1d70: 36 66 20 37 32 20 36 64 20 36 31 20 37 34 20 32  6f 72 6d 61 74 2
1d80: 30 20 33 33 20 30 30 2e 20 20 54 68 69 73 20 62  0 33 00.  This b
1d90: 79 74 65 20 73 65 71 75 65 6e 63 65 0a 63 6f 72  yte sequence.cor
1da0: 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20  responds to the 
1db0: 55 54 46 2d 38 20 73 74 72 69 6e 67 20 22 53 51  UTF-8 string "SQ
1dc0: 4c 69 74 65 20 66 6f 72 6d 61 74 20 33 22 20 69  Lite format 3" i
1dd0: 6e 63 6c 75 64 69 6e 67 20 74 68 65 20 6e 75 6c  ncluding the nul
1de0: 0a 74 65 72 6d 69 6e 61 74 6f 72 20 63 68 61 72  .terminator char
1df0: 61 63 74 65 72 20 61 74 20 74 68 65 20 65 6e 64  acter at the end
1e00: 2e 3c 2f 70 3e 0a 0a 3c 68 34 3e 31 2e 32 2e 32  .</p>..<h4>1.2.2
1e10: 20 50 61 67 65 20 53 69 7a 65 3c 2f 68 34 3e 0a   Page Size</h4>.
1e20: 0a 3c 70 3e 54 68 65 20 74 77 6f 2d 62 79 74 65  .<p>The two-byte
1e30: 20 76 61 6c 75 65 20 62 65 67 69 6e 6e 69 6e 67   value beginning
1e40: 20 61 74 20 6f 66 66 73 65 74 20 31 36 20 64 65   at offset 16 de
1e50: 74 65 72 6d 69 6e 65 73 20 74 68 65 20 70 61 67  termines the pag
1e60: 65 20 73 69 7a 65 20 6f 66 20 0a 74 68 65 20 64  e size of .the d
1e70: 61 74 61 62 61 73 65 2e 20 20 46 6f 72 20 53 51  atabase.  For SQ
1e80: 4c 69 74 65 20 76 65 72 73 69 6f 6e 73 20 33 2e  Lite versions 3.
1e90: 37 2e 30 2e 31 20 61 6e 64 20 65 61 72 6c 69 65  7.0.1 and earlie
1ea0: 72 2c 20 74 68 69 73 20 76 61 6c 75 65 20 69 73  r, this value is
1eb0: 20 0a 69 6e 74 65 72 70 72 65 74 65 64 20 61 73   .interpreted as
1ec0: 20 61 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e   a big-endian in
1ed0: 74 65 67 65 72 20 61 6e 64 20 6d 75 73 74 20 62  teger and must b
1ee0: 65 20 61 20 70 6f 77 65 72 20 6f 66 20 74 77 6f  e a power of two
1ef0: 20 62 65 74 77 65 65 6e 0a 35 31 32 20 61 6e 64   between.512 and
1f00: 20 33 32 37 36 38 2c 20 69 6e 63 6c 75 73 69 76   32768, inclusiv
1f10: 65 2e 20 20 42 65 67 69 6e 6e 69 6e 67 20 77 69  e.  Beginning wi
1f20: 74 68 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f  th SQLite versio
1f30: 6e 20 33 2e 37 2e 31 2c 20 61 20 70 61 67 65 0a  n 3.7.1, a page.
1f40: 73 69 7a 65 20 6f 66 20 36 35 35 33 36 20 62 79  size of 65536 by
1f50: 74 65 73 20 69 73 20 73 75 70 70 6f 72 74 65 64  tes is supported
1f60: 2e 20 20 54 68 65 20 76 61 6c 75 65 20 36 35 35  .  The value 655
1f70: 33 36 20 77 69 6c 6c 20 6e 6f 74 20 66 69 74 20  36 will not fit 
1f80: 69 6e 20 61 0a 74 77 6f 2d 62 79 74 65 20 69 6e  in a.two-byte in
1f90: 74 65 67 65 72 2c 20 73 6f 20 74 6f 20 73 70 65  teger, so to spe
1fa0: 63 69 66 79 20 61 20 36 35 35 33 36 2d 62 79 74  cify a 65536-byt
1fb0: 65 20 70 61 67 65 20 73 69 7a 65 2c 20 74 68 65  e page size, the
1fc0: 20 76 61 6c 75 65 20 69 73 0a 61 74 20 6f 66 66   value is.at off
1fd0: 73 65 74 20 31 36 20 69 73 20 30 78 30 30 20 30  set 16 is 0x00 0
1fe0: 78 30 31 2e 0a 54 68 69 73 20 76 61 6c 75 65 20  x01..This value 
1ff0: 63 61 6e 20 62 65 20 69 6e 74 65 72 70 72 65 74  can be interpret
2000: 65 64 20 61 73 20 61 20 62 69 67 2d 65 6e 64 69  ed as a big-endi
2010: 61 6e 0a 31 20 61 6e 64 20 74 68 6f 75 67 68 74  an.1 and thought
2020: 20 6f 66 20 69 73 20 61 73 20 61 20 6d 61 67 69   of is as a magi
2030: 63 20 6e 75 6d 62 65 72 20 74 6f 20 72 65 70 72  c number to repr
2040: 65 73 65 6e 74 20 74 68 65 20 36 35 35 33 36 20  esent the 65536 
2050: 70 61 67 65 20 73 69 7a 65 2e 0a 4f 72 20 6f 6e  page size..Or on
2060: 65 20 63 61 6e 20 76 69 65 77 20 74 68 65 20 74  e can view the t
2070: 77 6f 2d 62 79 74 65 20 66 69 65 6c 64 20 61 73  wo-byte field as
2080: 20 61 20 6c 69 74 74 6c 65 20 65 6e 64 69 61 6e   a little endian
2090: 20 6e 75 6d 62 65 72 20 61 6e 64 20 73 61 79 0a   number and say.
20a0: 74 68 61 74 20 69 74 20 72 65 70 72 65 73 65 6e  that it represen
20b0: 74 73 20 74 68 65 20 70 61 67 65 20 73 69 7a 65  ts the page size
20c0: 20 64 69 76 69 64 65 64 20 62 79 20 32 35 36 2e   divided by 256.
20d0: 20 20 54 68 65 73 65 20 74 77 6f 20 0a 69 6e 74    These two .int
20e0: 65 72 70 72 65 74 61 74 69 6f 6e 73 20 6f 66 20  erpretations of 
20f0: 74 68 65 20 70 61 67 65 2d 73 69 7a 65 20 66 69  the page-size fi
2100: 65 6c 64 20 61 72 65 20 65 71 75 69 76 61 6c 65  eld are equivale
2110: 6e 74 2e 3c 2f 70 3e 0a 0a 3c 68 34 3e 31 2e 32  nt.</p>..<h4>1.2
2120: 2e 33 20 46 69 6c 65 20 66 6f 72 6d 61 74 20 76  .3 File format v
2130: 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 73 3c 2f  ersion numbers</
2140: 68 34 3e 0a 0a 3c 70 3e 54 68 65 20 66 69 6c 65  h4>..<p>The file
2150: 20 66 6f 72 6d 61 74 20 77 72 69 74 65 20 76 65   format write ve
2160: 72 73 69 6f 6e 20 61 6e 64 20 66 69 6c 65 20 66  rsion and file f
2170: 6f 72 6d 61 74 20 72 65 61 64 20 76 65 72 73 69  ormat read versi
2180: 6f 6e 20 61 74 20 6f 66 66 73 65 74 73 0a 31 38  on at offsets.18
2190: 20 61 6e 64 20 31 39 20 61 72 65 20 69 6e 74 65   and 19 are inte
21a0: 6e 64 65 64 20 74 6f 20 61 6c 6c 6f 77 20 66 6f  nded to allow fo
21b0: 72 20 65 6e 68 61 6e 63 65 6d 65 6e 74 73 20 6f  r enhancements o
21c0: 66 20 74 68 65 20 66 69 6c 65 20 66 6f 72 6d 61  f the file forma
21d0: 74 0a 69 6e 20 66 75 74 75 72 65 20 76 65 72 73  t.in future vers
21e0: 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 2e 20  ions of SQLite. 
21f0: 20 49 6e 20 63 75 72 72 65 6e 74 20 76 65 72 73   In current vers
2200: 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 2c 20  ions of SQLite, 
2210: 62 6f 74 68 20 6f 66 0a 74 68 65 73 65 20 76 61  both of.these va
2220: 6c 75 65 73 20 61 72 65 20 31 20 66 6f 72 20 72  lues are 1 for r
2230: 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 6c  ollback journall
2240: 69 6e 67 20 6d 6f 64 65 73 20 61 6e 64 20 32 20  ing modes and 2 
2250: 66 6f 72 20 5b 57 41 4c 5d 0a 6a 6f 75 72 6e 61  for [WAL].journa
2260: 6c 6c 69 6e 67 20 6d 6f 64 65 2e 20 20 49 66 20  lling mode.  If 
2270: 61 20 76 65 72 73 69 6f 6e 20 6f 66 20 53 51 4c  a version of SQL
2280: 69 74 65 20 63 6f 64 65 64 20 74 6f 20 74 68 65  ite coded to the
2290: 20 63 75 72 72 65 6e 74 0a 66 69 6c 65 20 66 6f   current.file fo
22a0: 72 6d 61 74 20 73 70 65 63 69 66 69 63 61 74 69  rmat specificati
22b0: 6f 6e 20 65 6e 63 6f 75 6e 74 65 72 73 20 61 20  on encounters a 
22c0: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 77 68  database file wh
22d0: 65 72 65 20 74 68 65 20 72 65 61 64 0a 76 65 72  ere the read.ver
22e0: 73 69 6f 6e 20 69 73 20 31 20 6f 72 20 32 20 62  sion is 1 or 2 b
22f0: 75 74 20 74 68 65 20 77 72 69 74 65 20 76 65 72  ut the write ver
2300: 73 69 6f 6e 20 69 73 20 67 72 65 61 74 65 72 20  sion is greater 
2310: 74 68 61 6e 20 32 2c 20 74 68 65 6e 20 74 68 65  than 2, then the
2320: 20 64 61 74 61 62 61 73 65 0a 66 69 6c 65 20 6d   database.file m
2330: 75 73 74 20 62 65 20 74 72 65 61 74 65 64 20 61  ust be treated a
2340: 73 20 72 65 61 64 2d 6f 6e 6c 79 2e 20 20 49 66  s read-only.  If
2350: 20 61 20 64 61 74 61 62 61 73 65 20 66 69 6c 65   a database file
2360: 20 77 69 74 68 20 61 20 72 65 61 64 20 76 65 72   with a read ver
2370: 73 69 6f 6e 0a 67 72 65 61 74 65 72 20 74 68 61  sion.greater tha
2380: 6e 20 32 20 69 73 20 65 6e 63 6f 75 6e 74 65 72  n 2 is encounter
2390: 2c 20 74 68 65 6e 20 74 68 61 74 20 64 61 74 61  , then that data
23a0: 62 61 73 65 20 63 61 6e 6e 6f 74 20 62 65 20 72  base cannot be r
23b0: 65 61 64 20 6f 72 20 77 72 69 74 74 65 6e 2e 3c  ead or written.<
23c0: 2f 70 3e 0a 0a 3c 68 34 3e 31 2e 32 2e 34 20 52  /p>..<h4>1.2.4 R
23d0: 65 73 65 72 76 65 64 20 62 79 74 65 73 20 70 65  eserved bytes pe
23e0: 72 20 70 61 67 65 3c 2f 68 34 3e 0a 0a 3c 70 3e  r page</h4>..<p>
23f0: 53 51 4c 69 74 65 20 68 61 73 20 74 68 65 20 61  SQLite has the a
2400: 62 69 6c 69 74 79 20 74 6f 20 73 65 74 20 61 73  bility to set as
2410: 69 64 65 20 61 20 73 6d 61 6c 6c 20 6e 75 6d 62  ide a small numb
2420: 65 72 20 6f 66 20 65 78 74 72 61 20 62 79 74 65  er of extra byte
2430: 73 20 61 74 0a 74 68 65 20 65 6e 64 20 6f 66 20  s at.the end of 
2440: 65 76 65 72 79 20 70 61 67 65 20 66 6f 72 20 75  every page for u
2450: 73 65 20 62 79 20 65 78 74 65 6e 73 69 6f 6e 73  se by extensions
2460: 2e 20 20 54 68 65 73 65 20 65 78 74 72 61 20 62  .  These extra b
2470: 79 74 65 73 20 61 72 65 0a 75 73 65 64 2c 20 66  ytes are.used, f
2480: 6f 72 20 65 78 61 6d 70 6c 65 2c 20 62 79 20 74  or example, by t
2490: 68 65 20 53 51 4c 69 74 65 20 45 6e 63 72 79 70  he SQLite Encryp
24a0: 74 69 6f 6e 20 45 78 74 65 6e 73 69 6f 6e 20 74  tion Extension t
24b0: 6f 20 73 74 6f 72 65 20 61 20 6e 6f 6e 63 65 0a  o store a nonce.
24c0: 61 6e 64 2f 6f 72 20 63 72 79 70 74 6f 67 72 61  and/or cryptogra
24d0: 70 68 69 63 20 63 68 65 63 6b 73 75 6d 20 61 73  phic checksum as
24e0: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 65 61  sociated with ea
24f0: 63 68 20 70 61 67 65 2e 20 20 5e 54 68 65 20 0a  ch page.  ^The .
2500: 22 72 65 73 65 72 76 65 64 20 73 70 61 63 65 22  "reserved space"
2510: 20 73 69 7a 65 20 69 6e 20 74 68 65 20 31 2d 62   size in the 1-b
2520: 79 74 65 20 69 6e 74 65 67 65 72 20 61 74 20 6f  yte integer at o
2530: 66 66 73 65 74 20 32 30 20 69 73 20 74 68 65 20  ffset 20 is the 
2540: 6e 75 6d 62 65 72 0a 6f 66 20 62 79 74 65 73 20  number.of bytes 
2550: 6f 66 20 73 70 61 63 65 20 61 74 20 74 68 65 20  of space at the 
2560: 65 6e 64 20 6f 66 20 65 61 63 68 20 70 61 67 65  end of each page
2570: 20 74 6f 20 72 65 73 65 72 76 65 20 66 6f 72 20   to reserve for 
2580: 65 78 74 65 6e 73 69 6f 6e 73 2e 0a 54 68 69 73  extensions..This
2590: 20 76 61 6c 75 65 20 69 73 20 75 73 75 61 6c 6c   value is usuall
25a0: 79 20 30 2e 20 20 54 68 65 20 76 61 6c 75 65 20  y 0.  The value 
25b0: 63 61 6e 20 62 65 20 6f 64 64 2e 3c 2f 70 3e 0a  can be odd.</p>.
25c0: 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
25d0: 74 20 75 73 61 62 6c 65 5f 73 69 7a 65 20 7b 75  t usable_size {u
25e0: 73 61 62 6c 65 20 73 69 7a 65 7d 3c 2f 74 63 6c  sable size}</tcl
25f0: 3e 0a 3c 70 3e 54 68 65 20 22 75 73 61 62 6c 65  >.<p>The "usable
2600: 20 73 69 7a 65 22 20 6f 66 20 61 20 64 61 74 61   size" of a data
2610: 62 61 73 65 20 70 61 67 65 20 69 73 20 74 68 65  base page is the
2620: 20 70 61 67 65 20 73 69 7a 65 20 73 70 65 63 69   page size speci
2630: 66 79 20 62 79 20 74 68 65 0a 32 2d 62 79 74 65  fy by the.2-byte
2640: 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73   integer at offs
2650: 65 74 20 31 36 20 69 6e 20 74 68 65 20 68 65 61  et 16 in the hea
2660: 64 65 72 20 6c 65 73 73 20 74 68 65 20 22 72 65  der less the "re
2670: 73 65 72 76 65 64 22 20 73 70 61 63 65 20 73 69  served" space si
2680: 7a 65 0a 72 65 63 6f 72 64 65 64 20 69 6e 20 74  ze.recorded in t
2690: 68 65 20 31 2d 62 79 74 65 20 69 6e 74 65 67 65  he 1-byte intege
26a0: 72 20 61 74 20 6f 66 66 73 65 74 20 32 30 20 69  r at offset 20 i
26b0: 6e 20 74 68 65 20 68 65 61 64 65 72 2e 20 20 54  n the header.  T
26c0: 68 65 20 75 73 61 62 6c 65 0a 73 69 7a 65 20 6f  he usable.size o
26d0: 66 20 61 20 70 61 67 65 20 6d 69 67 68 74 20 62  f a page might b
26e0: 65 20 61 6e 20 6f 64 64 20 6e 75 6d 62 65 72 2e  e an odd number.
26f0: 20 20 5e 28 48 6f 77 65 76 65 72 2c 20 74 68 65    ^(However, the
2700: 20 75 73 61 62 6c 65 20 73 69 7a 65 20 69 73 20   usable size is 
2710: 6e 6f 74 0a 61 6c 6c 6f 77 65 64 20 74 6f 20 62  not.allowed to b
2720: 65 20 6c 65 73 73 20 74 68 61 6e 20 34 38 30 2e  e less than 480.
2730: 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
2740: 2c 20 69 66 20 74 68 65 20 70 61 67 65 20 73 69  , if the page si
2750: 7a 65 20 69 73 20 35 31 32 2c 0a 74 68 65 6e 20  ze is 512,.then 
2760: 74 68 65 20 72 65 73 65 72 76 65 64 20 73 70 61  the reserved spa
2770: 63 65 20 73 69 7a 65 20 63 61 6e 6e 6f 74 20 65  ce size cannot e
2780: 78 63 65 65 64 20 33 32 2e 29 5e 3c 2f 70 3e 0a  xceed 32.)^</p>.
2790: 0a 3c 68 34 3e 31 2e 32 2e 35 20 50 61 79 6c 6f  .<h4>1.2.5 Paylo
27a0: 61 64 20 66 72 61 63 74 69 6f 6e 73 3c 2f 68 34  ad fractions</h4
27b0: 3e 0a 0a 3c 70 3e 5e 54 68 65 20 6d 61 78 69 6d  >..<p>^The maxim
27c0: 75 6d 20 61 6e 64 20 6d 69 6e 69 6d 75 6d 20 65  um and minimum e
27d0: 6d 62 65 64 64 65 64 20 70 61 79 6c 6f 61 64 20  mbedded payload 
27e0: 66 72 61 63 74 69 6f 6e 73 20 61 6e 64 20 74 68  fractions and th
27f0: 65 20 6c 65 61 66 0a 70 61 79 6c 6f 61 64 20 66  e leaf.payload f
2800: 72 61 63 74 69 6f 6e 20 76 61 6c 75 65 73 20 6d  raction values m
2810: 75 73 74 20 62 65 20 36 34 2c 20 33 32 2c 20 61  ust be 64, 32, a
2820: 6e 64 20 33 32 2e 20 20 54 68 65 73 65 20 76 61  nd 32.  These va
2830: 6c 75 65 73 20 77 65 72 65 0a 6f 72 69 67 69 6e  lues were.origin
2840: 61 6c 6c 79 20 69 6e 74 65 6e 64 65 64 20 74 6f  ally intended to
2850: 20 61 73 20 74 75 6e 61 62 6c 65 20 70 61 72 61   as tunable para
2860: 6d 65 74 65 72 73 20 74 68 61 74 20 63 6f 75 6c  meters that coul
2870: 64 20 62 65 20 75 73 65 64 20 74 6f 0a 6d 6f 64  d be used to.mod
2880: 69 66 79 20 74 68 65 20 73 74 6f 72 61 67 65 20  ify the storage 
2890: 66 6f 72 6d 61 74 20 6f 66 20 74 68 65 20 62 2d  format of the b-
28a0: 74 72 65 65 20 61 6c 67 6f 72 69 74 68 6d 2e 20  tree algorithm. 
28b0: 20 48 6f 77 65 76 65 72 2c 20 74 68 61 74 0a 66   However, that.f
28c0: 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73 20  unctionality is 
28d0: 6e 6f 74 20 73 75 70 70 6f 72 74 65 64 20 61 6e  not supported an
28e0: 64 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 63  d there are no c
28f0: 75 72 72 65 6e 74 20 70 6c 61 6e 73 20 74 6f 20  urrent plans to 
2900: 61 64 64 0a 73 75 70 70 6f 72 74 20 69 6e 20 74  add.support in t
2910: 68 65 20 66 75 74 75 72 65 2e 20 20 48 65 6e 63  he future.  Henc
2920: 65 2c 20 74 68 65 73 65 20 74 68 72 65 65 20 62  e, these three b
2930: 79 74 65 73 20 61 72 65 20 66 69 78 65 64 20 61  ytes are fixed a
2940: 74 20 74 68 65 0a 76 61 6c 75 65 73 20 73 70 65  t the.values spe
2950: 63 69 66 69 65 64 2e 3c 2f 70 3e 0a 0a 3c 68 34  cified.</p>..<h4
2960: 3e 31 2e 32 2e 36 20 46 69 6c 65 20 63 68 61 6e  >1.2.6 File chan
2970: 67 65 20 63 6f 75 6e 74 65 72 3c 2f 68 34 3e 0a  ge counter</h4>.
2980: 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
2990: 74 20 63 68 6e 67 63 74 72 20 7b 63 68 61 6e 67  t chngctr {chang
29a0: 65 20 63 6f 75 6e 74 65 72 7d 3c 2f 74 63 6c 3e  e counter}</tcl>
29b0: 0a 3c 70 3e 5e 54 68 65 20 66 69 6c 65 20 63 68  .<p>^The file ch
29c0: 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69 73 20  ange counter is 
29d0: 61 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64  a 4-byte big-end
29e0: 69 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69 63  ian integer whic
29f0: 68 20 69 73 0a 69 6e 63 72 65 6d 65 6e 74 65 64  h is.incremented
2a00: 20 77 68 65 6e 65 76 65 72 20 74 68 65 20 64 61   whenever the da
2a10: 74 61 62 61 73 65 20 66 69 6c 65 20 69 73 20 75  tabase file is u
2a20: 6e 6c 6f 63 6b 65 64 20 61 66 74 65 72 20 68 61  nlocked after ha
2a30: 76 69 6e 67 0a 62 65 65 6e 20 6d 6f 64 69 66 69  ving.been modifi
2a40: 65 64 2e 0a 57 68 65 6e 20 74 77 6f 20 6f 72 20  ed..When two or 
2a50: 6d 6f 72 65 20 70 72 6f 63 65 73 73 65 73 20 61  more processes a
2a60: 72 65 20 72 65 61 64 69 6e 67 20 74 68 65 20 73  re reading the s
2a70: 61 6d 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  ame database fil
2a80: 65 2c 20 65 61 63 68 20 0a 70 72 6f 63 65 73 73  e, each .process
2a90: 20 63 61 6e 20 64 65 74 65 63 74 20 64 61 74 61   can detect data
2aa0: 62 61 73 65 20 63 68 61 6e 67 65 73 20 66 72 6f  base changes fro
2ab0: 6d 20 6f 74 68 65 72 20 70 72 6f 63 65 73 73 65  m other processe
2ac0: 73 20 62 79 20 6d 6f 6e 69 74 6f 72 69 6e 67 20  s by monitoring 
2ad0: 0a 74 68 65 20 63 68 61 6e 67 65 20 63 6f 75 6e  .the change coun
2ae0: 74 65 72 2e 0a 41 20 70 72 6f 63 65 73 73 20 77  ter..A process w
2af0: 69 6c 6c 20 6e 6f 72 6d 61 6c 6c 79 20 77 61 6e  ill normally wan
2b00: 74 20 74 6f 20 66 6c 75 73 68 20 69 74 73 20 64  t to flush its d
2b10: 61 74 61 62 61 73 65 20 70 61 67 65 20 63 61 63  atabase page cac
2b20: 68 65 20 77 68 65 6e 0a 61 6e 6f 74 68 65 72 20  he when.another 
2b30: 70 72 6f 63 65 73 73 20 6d 6f 64 69 66 69 65 64  process modified
2b40: 20 74 68 65 20 64 61 74 61 62 61 73 65 2c 20 73   the database, s
2b50: 69 6e 63 65 20 74 68 65 20 63 61 63 68 65 20 68  ince the cache h
2b60: 61 73 20 62 65 63 6f 6d 65 20 73 74 61 6c 65 2e  as become stale.
2b70: 0a 54 68 65 20 66 69 6c 65 20 63 68 61 6e 67 65  .The file change
2b80: 20 63 6f 75 6e 74 65 72 20 66 61 63 69 6c 69 74   counter facilit
2b90: 61 74 65 73 20 74 68 69 73 2e 3c 2f 70 3e 0a 0a  ates this.</p>..
2ba0: 3c 70 3e 49 6e 20 57 41 4c 20 6d 6f 64 65 2c 20  <p>In WAL mode, 
2bb0: 63 68 61 6e 67 65 73 20 74 6f 20 74 68 65 20 64  changes to the d
2bc0: 61 74 61 62 61 73 65 20 61 72 65 20 64 65 74 65  atabase are dete
2bd0: 63 74 65 64 20 75 73 69 6e 67 20 74 68 65 20 77  cted using the w
2be0: 61 6c 2d 69 6e 64 65 78 0a 61 6e 64 20 73 6f 20  al-index.and so 
2bf0: 74 68 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74  the change count
2c00: 65 72 20 69 73 20 6e 6f 74 20 6e 65 65 64 65 64  er is not needed
2c10: 2e 20 20 48 65 6e 63 65 2c 20 74 68 65 20 63 68  .  Hence, the ch
2c20: 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 6d 69 67  ange counter mig
2c30: 68 74 0a 6e 6f 74 20 62 65 20 69 6e 63 72 65 6d  ht.not be increm
2c40: 65 6e 74 65 64 20 6f 6e 20 65 61 63 68 20 74 72  ented on each tr
2c50: 61 6e 73 61 63 74 69 6f 6e 20 69 6e 20 57 41 4c  ansaction in WAL
2c60: 20 6d 6f 64 65 2e 3c 2f 70 3e 0a 0a 3c 68 34 3e   mode.</p>..<h4>
2c70: 31 2e 32 2e 37 20 49 6e 2d 68 65 61 64 65 72 20  1.2.7 In-header 
2c80: 64 61 74 61 62 61 73 65 20 73 69 7a 65 3c 2f 68  database size</h
2c90: 34 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  4>..<tcl>hd_frag
2ca0: 6d 65 6e 74 20 66 69 6c 65 73 69 7a 65 20 7b 69  ment filesize {i
2cb0: 6e 2d 68 65 61 64 65 72 20 64 61 74 61 62 61 73  n-header databas
2cc0: 65 20 73 69 7a 65 7d 3c 2f 74 63 6c 3e 0a 3c 70  e size}</tcl>.<p
2cd0: 3e 5e 54 68 65 20 34 2d 62 79 74 65 20 62 69 67  >^The 4-byte big
2ce0: 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20  -endian integer 
2cf0: 61 74 20 6f 66 66 73 65 74 20 32 38 20 69 6e 74  at offset 28 int
2d00: 6f 20 74 68 65 20 68 65 61 64 65 72 20 0a 73 74  o the header .st
2d10: 6f 72 65 73 20 74 68 65 20 73 69 7a 65 20 6f 66  ores the size of
2d20: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
2d30: 6c 65 20 69 6e 20 70 61 67 65 73 2e 20 20 5e 49  le in pages.  ^I
2d40: 66 20 74 68 69 73 20 69 6e 2d 68 65 61 64 65 72  f this in-header
2d50: 0a 64 61 74 61 73 69 7a 65 20 73 69 7a 65 20 69  .datasize size i
2d60: 73 20 6e 6f 74 20 76 61 6c 69 64 20 28 73 65 65  s not valid (see
2d70: 20 74 68 65 20 6e 65 78 74 20 70 61 72 61 67 72   the next paragr
2d80: 61 70 68 29 2c 20 74 68 65 6e 20 74 68 65 20 64  aph), then the d
2d90: 61 74 61 62 61 73 65 20 0a 73 69 7a 65 20 69 73  atabase .size is
2da0: 20 63 6f 6d 70 75 74 65 64 20 62 79 20 6c 6f 6f   computed by loo
2db0: 6b 69 6e 67 0a 61 74 20 74 68 65 20 61 63 74 75  king.at the actu
2dc0: 61 6c 20 73 69 7a 65 20 6f 66 20 74 68 65 20 64  al size of the d
2dd0: 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 4f 6c  atabase file. Ol
2de0: 64 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66 20  der versions of 
2df0: 53 51 4c 69 74 65 0a 69 67 6e 6f 72 65 64 20 74  SQLite.ignored t
2e00: 68 65 20 69 6e 2d 68 65 61 64 65 72 20 64 61 74  he in-header dat
2e10: 61 62 61 73 65 20 73 69 7a 65 20 61 6e 64 20 75  abase size and u
2e20: 73 65 64 20 74 68 65 20 61 63 74 75 61 6c 20 66  sed the actual f
2e30: 69 6c 65 20 73 69 7a 65 0a 65 78 63 6c 75 73 69  ile size.exclusi
2e40: 76 65 6c 79 2e 20 20 5e 4e 65 77 65 72 20 76 65  vely.  ^Newer ve
2e50: 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65  rsions of SQLite
2e60: 20 75 73 65 20 74 68 65 20 69 6e 2d 68 65 61 64   use the in-head
2e70: 65 72 20 64 61 74 61 62 61 73 65 0a 73 69 7a 65  er database.size
2e80: 20 69 66 20 69 74 20 69 73 20 61 76 61 69 6c 61   if it is availa
2e90: 62 6c 65 20 62 75 74 20 66 61 6c 6c 20 62 61 63  ble but fall bac
2ea0: 6b 20 74 6f 20 74 68 65 20 61 63 74 75 61 6c 20  k to the actual 
2eb0: 66 69 6c 65 20 73 69 7a 65 20 69 66 0a 74 68 65  file size if.the
2ec0: 20 69 6e 2d 68 65 61 64 65 72 20 64 61 74 61 62   in-header datab
2ed0: 61 73 65 20 73 69 7a 65 20 69 73 20 6e 6f 74 20  ase size is not 
2ee0: 76 61 6c 69 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  valid.</p>..<p>^
2ef0: 54 68 65 20 69 6e 2d 68 65 61 64 65 72 20 64 61  The in-header da
2f00: 74 61 62 61 73 65 20 73 69 7a 65 20 69 73 20 6f  tabase size is o
2f10: 6e 6c 79 20 63 6f 6e 73 69 64 65 72 65 64 20 74  nly considered t
2f20: 6f 20 62 65 20 76 61 6c 69 64 20 69 66 0a 69 74  o be valid if.it
2f30: 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 20 61 6e 64   is non-zero and
2f40: 20 69 66 20 74 68 65 20 34 2d 62 79 74 65 20 5b   if the 4-byte [
2f50: 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 5d 20  change counter] 
2f60: 61 74 20 6f 66 66 73 65 74 20 32 34 0a 65 78 61  at offset 24.exa
2f70: 63 74 6c 79 20 6d 61 74 63 68 65 73 20 74 68 65  ctly matches the
2f80: 20 34 2d 62 79 74 65 20 5b 76 65 72 73 69 6f 6e   4-byte [version
2f90: 2d 76 61 6c 69 64 2d 66 6f 72 20 6e 75 6d 62 65  -valid-for numbe
2fa0: 72 5d 20 61 74 20 6f 66 66 73 65 74 20 39 32 2e  r] at offset 92.
2fb0: 0a 5e 54 68 65 20 69 6e 2d 68 65 61 64 65 72 20  .^The in-header 
2fc0: 64 61 74 61 62 61 73 65 20 73 69 7a 65 20 69 73  database size is
2fd0: 20 61 6c 77 61 79 73 20 76 61 6c 69 64 20 0a 77   always valid .w
2fe0: 68 65 6e 20 74 68 65 20 64 61 74 61 62 61 73 65  hen the database
2ff0: 20 69 73 20 6f 6e 6c 79 20 6d 6f 64 69 66 69 65   is only modifie
3000: 64 20 75 73 69 6e 67 20 72 65 63 65 6e 74 20 76  d using recent v
3010: 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74  ersions of SQLit
3020: 65 0a 28 76 65 72 73 69 6f 6e 73 20 33 2e 37 2e  e.(versions 3.7.
3030: 30 20 61 6e 64 20 6c 61 74 65 72 29 2e 0a 49 66  0 and later)..If
3040: 20 61 20 6c 65 67 61 63 79 20 76 65 72 73 69 6f   a legacy versio
3050: 6e 20 6f 66 20 53 51 4c 69 74 65 20 77 72 69 74  n of SQLite writ
3060: 65 73 20 74 6f 20 74 68 65 20 64 61 74 61 62 61  es to the databa
3070: 73 65 2c 20 69 74 20 77 69 6c 6c 20 6e 6f 74 0a  se, it will not.
3080: 6b 6e 6f 77 20 74 6f 20 75 70 64 61 74 65 20 74  know to update t
3090: 68 65 20 69 6e 2d 68 65 61 64 65 72 20 64 61 74  he in-header dat
30a0: 61 62 61 73 65 20 73 69 7a 65 20 61 6e 64 20 73  abase size and s
30b0: 6f 20 74 68 65 20 69 6e 2d 68 65 61 64 65 72 0a  o the in-header.
30c0: 64 61 74 61 62 61 73 65 20 73 69 7a 65 20 63 6f  database size co
30d0: 75 6c 64 20 62 65 20 69 6e 63 6f 72 72 65 63 74  uld be incorrect
30e0: 2e 20 20 42 75 74 20 6c 65 67 61 63 79 20 76 65  .  But legacy ve
30f0: 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65  rsions of SQLite
3100: 0a 77 69 6c 6c 20 61 6c 73 6f 20 6c 65 61 76 65  .will also leave
3110: 20 74 68 65 20 76 65 72 73 69 6f 6e 2d 76 61 6c   the version-val
3120: 69 64 2d 66 6f 72 20 6e 75 6d 62 65 72 20 61 74  id-for number at
3130: 20 6f 66 66 73 65 74 20 39 32 20 75 6e 63 68 61   offset 92 uncha
3140: 6e 67 65 64 0a 73 6f 20 69 74 20 77 69 6c 6c 20  nged.so it will 
3150: 6e 6f 74 20 6d 61 74 63 68 20 74 68 65 20 63 68  not match the ch
3160: 61 6e 67 65 2d 63 6f 75 6e 74 65 72 2e 20 20 48  ange-counter.  H
3170: 65 6e 63 65 2c 20 69 6e 76 61 6c 69 64 20 69 6e  ence, invalid in
3180: 2d 68 65 61 64 65 72 0a 64 61 74 61 62 61 73 65  -header.database
3190: 20 73 69 7a 65 73 20 63 61 6e 20 62 65 20 64 65   sizes can be de
31a0: 74 65 63 74 65 64 20 28 61 6e 64 20 69 67 6e 6f  tected (and igno
31b0: 72 65 64 29 20 62 79 20 6f 62 73 65 72 76 69 6e  red) by observin
31c0: 67 20 77 68 65 6e 0a 74 68 65 20 63 68 61 6e 67  g when.the chang
31d0: 65 2d 63 6f 75 6e 74 65 72 20 64 6f 65 73 20 6e  e-counter does n
31e0: 6f 74 20 6d 61 74 63 68 20 74 68 65 20 76 65 72  ot match the ver
31f0: 73 69 6f 6e 2d 76 61 6c 69 64 2d 66 6f 72 20 6e  sion-valid-for n
3200: 75 6d 62 65 72 2e 3c 2f 70 3e 0a 0a 3c 68 34 3e  umber.</p>..<h4>
3210: 31 2e 32 2e 38 20 46 72 65 65 20 70 61 67 65 20  1.2.8 Free page 
3220: 6c 69 73 74 3c 2f 68 34 3e 0a 0a 3c 70 3e 55 6e  list</h4>..<p>Un
3230: 75 73 65 64 20 70 61 67 65 73 20 69 6e 20 74 68  used pages in th
3240: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
3250: 61 72 65 20 73 74 6f 72 65 64 20 6f 6e 20 61 20  are stored on a 
3260: 66 72 65 65 6c 69 73 74 2e 20 20 5e 54 68 65 0a  freelist.  ^The.
3270: 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61  4-byte big-endia
3280: 6e 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66  n integer at off
3290: 73 65 74 20 33 32 20 73 74 6f 72 65 73 20 74 68  set 32 stores th
32a0: 65 20 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66  e page number of
32b0: 0a 74 68 65 20 66 69 72 73 74 20 70 61 67 65 20  .the first page 
32c0: 6f 66 20 74 68 65 20 66 72 65 65 6c 69 73 74 2c  of the freelist,
32d0: 20 6f 72 20 7a 65 72 6f 20 69 66 20 74 68 65 20   or zero if the 
32e0: 66 72 65 65 6c 69 73 74 20 69 73 20 65 6d 70 74  freelist is empt
32f0: 79 2e 0a 5e 54 68 65 20 34 2d 62 79 74 65 20 62  y..^The 4-byte b
3300: 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65  ig-endian intege
3310: 72 20 61 74 20 6f 66 66 73 65 74 20 33 36 20 73  r at offset 36 s
3320: 74 6f 72 65 73 20 73 74 6f 72 65 73 20 74 68 65  tores stores the
3330: 20 74 6f 74 61 6c 20 0a 6e 75 6d 62 65 72 20 6f   total .number o
3340: 66 20 70 61 67 65 73 20 6f 6e 20 74 68 65 20 66  f pages on the f
3350: 72 65 65 6c 69 73 74 2e 3c 2f 70 3e 0a 0a 3c 68  reelist.</p>..<h
3360: 34 3e 31 2e 32 2e 39 20 53 63 68 65 6d 61 20 63  4>1.2.9 Schema c
3370: 6f 6f 6b 69 65 3c 2f 68 34 3e 0a 0a 3c 70 3e 5e  ookie</h4>..<p>^
3380: 54 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69  The schema cooki
3390: 65 20 69 73 20 61 20 34 2d 62 79 74 65 20 62 69  e is a 4-byte bi
33a0: 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72  g-endian integer
33b0: 20 61 74 20 6f 66 66 73 65 74 20 34 30 0a 74 68   at offset 40.th
33c0: 61 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65  at is incremente
33d0: 64 20 77 68 65 6e 65 76 65 72 20 74 68 65 20 64  d whenever the d
33e0: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 63  atabase schema c
33f0: 68 61 6e 67 65 73 2e 20 20 41 20 0a 70 72 65 70  hanges.  A .prep
3400: 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 69  ared statement i
3410: 73 20 63 6f 6d 70 69 6c 65 64 20 61 67 61 69 6e  s compiled again
3420: 73 74 20 61 20 73 70 65 63 69 66 69 63 20 76 65  st a specific ve
3430: 72 73 69 6f 6e 20 6f 66 20 74 68 65 0a 64 61 74  rsion of the.dat
3440: 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20 20 5e  abase schema.  ^
3450: 57 68 65 6e 65 76 65 72 20 74 68 65 20 64 61 74  Whenever the dat
3460: 61 62 61 73 65 20 73 63 68 65 6d 61 20 63 68 61  abase schema cha
3470: 6e 67 65 73 2c 20 74 68 65 20 73 74 61 74 65 6d  nges, the statem
3480: 65 6e 74 0a 6d 75 73 74 20 62 65 20 72 65 70 72  ent.must be repr
3490: 65 70 61 72 65 64 2e 20 20 5e 57 68 65 6e 65 76  epared.  ^Whenev
34a0: 65 72 20 61 20 70 72 65 70 61 72 65 64 20 73 74  er a prepared st
34b0: 61 74 65 6d 65 6e 74 20 72 75 6e 73 2c 20 69 74  atement runs, it
34c0: 20 66 69 72 73 74 20 63 68 65 63 6b 73 0a 74 68   first checks.th
34d0: 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20  e schema cookie 
34e0: 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 68 65  to make sure the
34f0: 20 76 61 6c 75 65 20 69 73 20 74 68 65 20 73 61   value is the sa
3500: 6d 65 20 61 73 20 77 68 65 6e 20 74 68 65 20 73  me as when the s
3510: 74 61 74 65 6d 65 6e 74 0a 77 61 73 20 70 72 65  tatement.was pre
3520: 70 61 72 65 64 20 61 6e 64 20 69 66 20 74 68 65  pared and if the
3530: 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 68   schema cookie h
3540: 61 73 20 63 68 61 6e 67 65 64 2c 20 74 68 65 20  as changed, the 
3550: 73 74 61 74 65 6d 65 6e 74 20 61 62 6f 72 74 73  statement aborts
3560: 0a 69 6e 20 6f 72 64 65 72 20 74 6f 20 66 6f 72  .in order to for
3570: 63 65 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  ce the statement
3580: 20 74 6f 20 62 65 20 72 65 70 72 65 70 61 72 65   to be reprepare
3590: 64 2e 3c 2f 70 3e 0a 0a 3c 68 34 3e 31 2e 32 2e  d.</p>..<h4>1.2.
35a0: 31 30 20 53 63 68 65 6d 61 20 66 6f 72 6d 61 74  10 Schema format
35b0: 20 6e 75 6d 62 65 72 3c 2f 68 34 3e 0a 0a 3c 70   number</h4>..<p
35c0: 3e 54 68 65 20 73 63 68 65 6d 61 20 66 6f 72 6d  >The schema form
35d0: 61 74 20 6e 75 6d 62 65 72 20 69 73 20 61 20 34  at number is a 4
35e0: 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e  -byte big-endian
35f0: 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73   integer at offs
3600: 65 74 20 34 34 2e 0a 54 68 65 20 73 63 68 65 6d  et 44..The schem
3610: 61 20 66 6f 72 6d 61 74 20 6e 75 6d 62 65 72 20  a format number 
3620: 69 73 20 73 69 6d 69 6c 61 72 20 74 6f 20 74 68  is similar to th
3630: 65 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 72 65  e file format re
3640: 61 64 20 61 6e 64 20 77 72 69 74 65 0a 76 65 72  ad and write.ver
3650: 73 69 6f 6e 20 6e 75 6d 62 65 72 73 20 61 74 20  sion numbers at 
3660: 6f 66 66 73 65 74 73 20 31 38 20 61 6e 64 20 31  offsets 18 and 1
3670: 39 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68  9 except that th
3680: 65 20 73 63 68 65 6d 61 20 66 6f 72 6d 61 74 20  e schema format 
3690: 6e 75 6d 62 65 72 0a 72 65 66 65 72 73 20 74 6f  number.refers to
36a0: 20 74 68 65 20 68 69 67 68 2d 6c 65 76 65 6c 20   the high-level 
36b0: 53 51 4c 20 66 6f 72 6d 61 74 74 69 6e 67 20 72  SQL formatting r
36c0: 61 74 68 65 72 20 74 68 61 6e 20 74 68 65 20 6c  ather than the l
36d0: 6f 77 2d 6c 65 76 65 6c 20 62 2d 74 72 65 65 0a  ow-level b-tree.
36e0: 66 6f 72 6d 61 74 74 69 6e 67 2e 20 20 46 6f 75  formatting.  Fou
36f0: 72 20 73 63 68 65 6d 61 20 66 6f 72 6d 61 74 20  r schema format 
3700: 6e 75 6d 62 65 72 73 20 61 72 65 20 63 75 72 72  numbers are curr
3710: 65 6e 74 6c 79 20 64 65 66 69 6e 65 64 3a 3c 2f  ently defined:</
3720: 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 20 76 61 6c  p>..<ol>.<li val
3730: 75 65 3d 31 3e 46 6f 72 6d 61 74 20 31 20 69 73  ue=1>Format 1 is
3740: 20 75 6e 64 65 72 73 74 6f 6f 64 20 62 79 20 61   understood by a
3750: 6c 6c 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53  ll versions of S
3760: 51 4c 69 74 65 20 62 61 63 6b 20 74 6f 0a 76 65  QLite back to.ve
3770: 72 73 69 6f 6e 20 33 2e 30 2e 30 2e 3c 2f 6c 69  rsion 3.0.0.</li
3780: 3e 0a 3c 6c 69 20 76 61 6c 75 65 3d 32 3e 46 6f  >.<li value=2>Fo
3790: 72 6d 61 74 20 32 20 61 64 64 73 20 74 68 65 20  rmat 2 adds the 
37a0: 61 62 69 6c 69 74 79 20 6f 66 20 72 6f 77 73 20  ability of rows 
37b0: 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d 65 20  within the same 
37c0: 74 61 62 6c 65 0a 74 6f 20 68 61 76 65 20 61 20  table.to have a 
37d0: 76 61 72 79 69 6e 67 20 6e 75 6d 62 65 72 20 6f  varying number o
37e0: 66 20 63 6f 6c 75 6d 6e 73 2c 20 69 6e 20 6f 72  f columns, in or
37f0: 64 65 72 20 74 6f 20 73 75 70 70 6f 72 74 20 74  der to support t
3800: 68 65 0a 5b 41 4c 54 45 52 20 54 41 42 4c 45 20  he.[ALTER TABLE 
3810: 7c 20 41 4c 54 45 52 20 54 41 42 4c 45 20 2e 2e  | ALTER TABLE ..
3820: 2e 20 41 44 44 20 43 4f 4c 55 4d 4e 5d 20 66 75  . ADD COLUMN] fu
3830: 6e 63 74 69 6f 6e 61 6c 69 74 79 2e 20 20 53 75  nctionality.  Su
3840: 70 70 6f 72 74 20 66 6f 72 0a 72 65 61 64 69 6e  pport for.readin
3850: 67 20 61 6e 64 20 77 72 69 74 69 6e 67 20 66 6f  g and writing fo
3860: 72 6d 61 74 20 32 20 77 61 73 20 61 64 64 65 64  rmat 2 was added
3870: 20 69 6e 20 53 51 4c 69 74 65 20 76 65 72 73 69   in SQLite versi
3880: 6f 6e 20 33 2e 31 2e 33 20 0a 6f 6e 20 32 30 30  on 3.1.3 .on 200
3890: 35 2d 30 32 2d 31 39 2e 3c 2f 6c 69 3e 0a 3c 6c  5-02-19.</li>.<l
38a0: 69 20 76 61 6c 75 65 3d 33 3e 46 6f 72 6d 61 74  i value=3>Format
38b0: 20 33 20 61 64 64 73 20 74 68 65 20 61 62 69 6c   3 adds the abil
38c0: 69 74 79 20 6f 66 20 65 78 74 72 61 20 63 6f 6c  ity of extra col
38d0: 75 6d 6e 73 20 61 64 64 65 64 20 62 79 0a 5b 41  umns added by.[A
38e0: 4c 54 45 52 20 54 41 42 4c 45 20 7c 20 41 4c 54  LTER TABLE | ALT
38f0: 45 52 20 54 41 42 4c 45 20 2e 2e 2e 20 41 44 44  ER TABLE ... ADD
3900: 20 43 4f 4c 55 4d 4e 5d 20 74 6f 20 68 61 76 65   COLUMN] to have
3910: 20 6e 6f 6e 2d 4e 55 4c 4c 20 64 65 66 61 75 6c   non-NULL defaul
3920: 74 0a 76 61 6c 75 65 73 2e 20 20 54 68 69 73 20  t.values.  This 
3930: 63 61 70 61 62 69 6c 69 74 79 20 77 61 73 20 61  capability was a
3940: 64 64 65 64 20 69 6e 20 53 51 4c 69 74 65 20 76  dded in SQLite v
3950: 65 72 73 69 6f 6e 20 33 2e 31 2e 34 20 0a 6f 6e  ersion 3.1.4 .on
3960: 20 32 30 30 35 2d 30 33 2d 31 31 2e 3c 2f 6c 69   2005-03-11.</li
3970: 3e 0a 3c 6c 69 20 76 61 6c 75 65 3d 34 3e 5e 46  >.<li value=4>^F
3980: 6f 72 6d 61 74 20 34 20 63 61 75 73 65 73 20 53  ormat 4 causes S
3990: 51 4c 69 74 65 20 74 6f 20 72 65 73 70 65 63 74  QLite to respect
39a0: 20 74 68 65 20 44 45 53 43 20 6b 65 79 77 6f 72   the DESC keywor
39b0: 64 20 6f 6e 0a 69 6e 64 65 78 20 64 65 63 6c 61  d on.index decla
39c0: 72 61 74 69 6f 6e 73 2e 20 20 28 5e 54 68 65 20  rations.  (^The 
39d0: 44 45 53 43 20 6b 65 79 77 6f 72 64 20 69 73 20  DESC keyword is 
39e0: 69 67 6e 6f 72 65 64 20 69 6e 20 69 6e 64 69 63  ignored in indic
39f0: 65 73 20 66 6f 72 20 0a 66 6f 72 6d 61 74 73 20  es for .formats 
3a00: 31 2c 20 32 2c 20 61 6e 64 20 33 2e 29 0a 5e 46  1, 2, and 3.).^F
3a10: 6f 72 6d 61 74 20 34 20 61 6c 73 6f 20 61 64 64  ormat 4 also add
3a20: 73 20 74 77 6f 20 6e 65 77 20 62 6f 6f 6c 65 61  s two new boolea
3a30: 6e 20 72 65 63 6f 72 64 20 74 79 70 65 20 76 61  n record type va
3a40: 6c 75 65 73 20 28 5b 73 65 72 69 61 6c 20 74 79  lues ([serial ty
3a50: 70 65 73 5d 0a 38 20 61 6e 64 20 39 2e 29 20 20  pes].8 and 9.)  
3a60: 53 75 70 70 6f 72 74 20 66 6f 72 20 66 6f 72 6d  Support for form
3a70: 61 74 20 34 20 77 61 73 20 61 64 64 65 64 20 69  at 4 was added i
3a80: 6e 20 53 51 4c 69 74 65 20 33 2e 33 2e 30 20 6f  n SQLite 3.3.0 o
3a90: 6e 0a 32 30 30 36 2d 30 31 2d 31 30 2e 3c 2f 6c  n.2006-01-10.</l
3aa0: 69 3e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 5e 4e 65  i>.</ol>..<p>^Ne
3ab0: 77 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73  w database files
3ac0: 20 63 72 65 61 74 65 64 20 62 79 20 53 51 4c 69   created by SQLi
3ad0: 74 65 20 75 73 65 20 66 6f 72 6d 61 74 20 31 20  te use format 1 
3ae0: 62 79 20 64 65 66 61 75 6c 74 2c 20 73 6f 0a 74  by default, so.t
3af0: 68 61 74 20 64 61 74 61 62 61 73 65 20 66 69 6c  hat database fil
3b00: 65 73 20 63 72 65 61 74 65 64 20 62 79 20 6e 65  es created by ne
3b10: 77 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66 20  wer versions of 
3b20: 53 51 4c 69 74 65 20 63 61 6e 20 73 74 69 6c 6c  SQLite can still
3b30: 0a 62 65 20 72 65 61 64 20 62 79 20 6f 6c 64 65  .be read by olde
3b40: 72 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51  r versions of SQ
3b50: 4c 69 74 65 2e 0a 5e 54 68 65 20 5b 6c 65 67 61  Lite..^The [lega
3b60: 63 79 5f 66 69 6c 65 5f 66 6f 72 6d 61 74 20 70  cy_file_format p
3b70: 72 61 67 6d 61 5d 20 63 61 6e 20 62 65 20 75 73  ragma] can be us
3b80: 65 64 20 74 6f 20 63 61 75 73 65 20 53 51 4c 69  ed to cause SQLi
3b90: 74 65 0a 74 6f 20 63 72 65 61 74 65 20 6e 65 77  te.to create new
3ba0: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73 20   database files 
3bb0: 75 73 69 6e 67 20 66 6f 72 6d 61 74 20 34 2e 20  using format 4. 
3bc0: 20 46 75 74 75 72 65 20 76 65 72 73 69 6f 6e 73   Future versions
3bd0: 20 6f 66 20 0a 53 51 4c 69 74 65 20 6d 61 79 20   of .SQLite may 
3be0: 62 65 67 69 6e 20 74 6f 20 63 72 65 61 74 65 20  begin to create 
3bf0: 66 69 6c 65 73 20 75 73 69 6e 67 20 66 6f 72 6d  files using form
3c00: 61 74 20 34 20 62 79 20 64 65 66 61 75 6c 74 2e  at 4 by default.
3c10: 3c 2f 70 3e 0a 0a 3c 68 34 3e 31 2e 32 2e 31 31  </p>..<h4>1.2.11
3c20: 20 53 75 67 67 65 73 74 65 64 20 63 61 63 68 65   Suggested cache
3c30: 20 73 69 7a 65 3c 2f 68 34 3e 0a 0a 3c 70 3e 54   size</h4>..<p>T
3c40: 68 65 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e  he 4-byte big-en
3c50: 64 69 61 6e 20 73 69 67 6e 65 64 20 69 6e 74 65  dian signed inte
3c60: 67 65 72 20 61 74 20 6f 66 66 73 65 74 20 34 38  ger at offset 48
3c70: 20 69 73 20 74 68 65 20 73 75 67 67 65 73 74 0a   is the suggest.
3c80: 63 61 63 68 65 20 73 69 7a 65 20 69 6e 20 70 61  cache size in pa
3c90: 67 65 73 20 66 6f 72 20 74 68 65 20 64 61 74 61  ges for the data
3ca0: 62 61 73 65 20 66 69 6c 65 2e 20 20 54 68 65 20  base file.  The 
3cb0: 76 61 6c 75 65 20 69 73 20 61 20 73 75 67 67 65  value is a sugge
3cc0: 73 74 69 6f 6e 0a 6f 6e 6c 79 20 61 6e 64 20 53  stion.only and S
3cd0: 51 4c 69 74 65 20 69 73 20 75 6e 64 65 72 20 6e  QLite is under n
3ce0: 6f 20 6f 62 6c 69 67 61 74 69 6f 6e 20 74 6f 20  o obligation to 
3cf0: 68 6f 6e 6f 72 20 69 74 2e 20 20 54 68 65 20 61  honor it.  The a
3d00: 62 73 6f 6c 75 74 65 20 76 61 6c 75 65 0a 6f 66  bsolute value.of
3d10: 20 74 68 65 20 69 6e 74 65 67 65 72 20 69 73 20   the integer is 
3d20: 75 73 65 64 20 61 73 20 74 68 65 20 73 75 67 67  used as the sugg
3d30: 65 73 74 65 64 20 73 69 7a 65 2e 20 20 54 68 65  ested size.  The
3d40: 20 73 75 67 67 65 73 74 65 64 20 63 61 63 68 65   suggested cache
3d50: 20 73 69 7a 65 0a 63 61 6e 20 62 65 20 73 65 74   size.can be set
3d60: 20 75 73 69 6e 67 20 74 68 65 20 5b 64 65 66 61   using the [defa
3d70: 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 20 70  ult_cache_size p
3d80: 72 61 67 6d 61 5d 2e 3c 2f 70 3e 0a 0a 3c 68 34  ragma].</p>..<h4
3d90: 3e 31 2e 32 2e 31 32 20 49 6e 63 72 65 6d 65 6e  >1.2.12 Incremen
3da0: 74 61 6c 20 76 61 63 75 75 6d 20 73 65 74 74 69  tal vacuum setti
3db0: 6e 67 73 3c 2f 68 34 3e 0a 0a 3c 70 3e 54 68 65  ngs</h4>..<p>The
3dc0: 20 74 77 6f 20 34 2d 62 79 74 65 20 62 69 67 2d   two 4-byte big-
3dd0: 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 73 20  endian integers 
3de0: 61 74 20 6f 66 66 73 65 74 73 20 35 32 20 61 6e  at offsets 52 an
3df0: 64 20 36 34 20 61 72 65 20 75 73 65 64 0a 74 6f  d 64 are used.to
3e00: 20 6d 61 6e 61 67 65 20 74 68 65 20 5b 61 75 74   manage the [aut
3e10: 6f 5f 76 61 63 75 75 6d 5d 20 61 6e 64 20 5b 69  o_vacuum] and [i
3e20: 6e 63 72 65 6d 65 6e 74 61 6c 5f 76 61 63 75 75  ncremental_vacuu
3e30: 6d 5d 20 6d 6f 64 65 73 2e 20 20 5e 49 66 0a 74  m] modes.  ^If.t
3e40: 68 65 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66  he integer at of
3e50: 66 73 65 74 20 35 32 20 69 73 20 7a 65 72 6f 20  fset 52 is zero 
3e60: 74 68 65 6e 20 70 6f 69 6e 74 65 72 2d 6d 61 70  then pointer-map
3e70: 20 28 70 74 72 6d 61 70 29 20 70 61 67 65 73 20   (ptrmap) pages 
3e80: 61 72 65 0a 6f 6d 69 74 74 65 64 20 66 72 6f 6d  are.omitted from
3e90: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
3ea0: 6c 65 20 61 6e 64 20 6e 65 69 74 68 65 72 20 61  le and neither a
3eb0: 75 74 6f 5f 76 61 63 75 75 6d 20 6e 6f 72 0a 69  uto_vacuum nor.i
3ec0: 6e 63 72 65 6d 65 6e 74 61 6c 5f 76 61 63 75 75  ncremental_vacuu
3ed0: 6d 20 61 72 65 20 73 75 70 70 6f 72 74 65 64 2e  m are supported.
3ee0: 20 20 5e 49 66 20 74 68 65 20 69 6e 74 65 67 65    ^If the intege
3ef0: 72 20 61 74 20 6f 66 66 73 65 74 20 35 32 20 69  r at offset 52 i
3f00: 73 0a 6e 6f 6e 2d 7a 65 72 6f 20 74 68 65 6e 20  s.non-zero then 
3f10: 69 74 20 69 73 20 74 68 65 20 70 61 67 65 20 6e  it is the page n
3f20: 75 6d 62 65 72 20 6f 66 20 74 68 65 20 6c 61 72  umber of the lar
3f30: 67 65 73 74 20 72 6f 6f 74 20 70 61 67 65 20 69  gest root page i
3f40: 6e 20 74 68 65 0a 64 61 74 61 62 61 73 65 20 66  n the.database f
3f50: 69 6c 65 2c 20 74 68 65 20 64 61 74 61 62 61 73  ile, the databas
3f60: 65 20 66 69 6c 65 20 63 6f 6e 74 61 69 6e 20 70  e file contain p
3f70: 74 72 6d 61 70 20 70 61 67 65 73 2c 20 61 6e 64  trmap pages, and
3f80: 20 74 68 65 0a 6d 6f 64 65 20 6d 75 73 74 20 62   the.mode must b
3f90: 65 20 65 69 74 68 65 72 20 61 75 74 6f 5f 76 61  e either auto_va
3fa0: 63 75 75 6d 20 6f 72 20 69 6e 63 72 65 6d 65 6e  cuum or incremen
3fb0: 74 61 6c 5f 76 61 63 75 75 6d 2e 20 20 5e 49 6e  tal_vacuum.  ^In
3fc0: 20 74 68 69 73 20 6c 61 74 74 65 72 0a 63 61 73   this latter.cas
3fd0: 65 2c 20 74 68 65 20 69 6e 74 65 67 65 72 20 61  e, the integer a
3fe0: 74 20 6f 66 66 73 65 74 20 36 34 20 69 73 20 74  t offset 64 is t
3ff0: 72 75 65 20 66 6f 72 20 69 6e 63 72 65 6d 65 6e  rue for incremen
4000: 74 61 6c 5f 76 61 63 75 75 6d 20 61 6e 64 0a 66  tal_vacuum and.f
4010: 61 6c 73 65 20 66 6f 72 20 61 75 74 6f 5f 76 61  alse for auto_va
4020: 63 75 75 6d 2e 20 20 5e 49 66 20 74 68 65 20 69  cuum.  ^If the i
4030: 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73 65 74  nteger at offset
4040: 20 35 32 20 69 73 20 7a 65 72 6f 20 74 68 65 6e   52 is zero then
4050: 0a 74 68 65 20 69 6e 74 65 67 65 72 20 61 74 20  .the integer at 
4060: 6f 66 66 73 65 74 20 36 34 20 6d 75 73 74 20 61  offset 64 must a
4070: 6c 73 6f 20 62 65 20 7a 65 72 6f 2e 3c 2f 70 3e  lso be zero.</p>
4080: 0a 0a 3c 68 34 3e 31 2e 32 2e 31 33 20 54 65 78  ..<h4>1.2.13 Tex
4090: 74 20 65 6e 63 6f 64 69 6e 67 3c 2f 68 34 3e 0a  t encoding</h4>.
40a0: 0a 3c 70 3e 5e 54 68 65 20 34 2d 62 79 74 65 20  .<p>^The 4-byte 
40b0: 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67  big-endian integ
40c0: 65 72 20 61 74 20 6f 66 66 73 65 74 20 35 36 20  er at offset 56 
40d0: 64 65 74 65 72 6d 69 6e 65 73 20 74 68 65 20 65  determines the e
40e0: 6e 63 6f 64 69 6e 67 0a 75 73 65 64 20 66 6f 72  ncoding.used for
40f0: 20 61 6c 6c 20 74 65 78 74 20 73 74 72 69 6e 67   all text string
4100: 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  s stored in the 
4110: 64 61 74 61 62 61 73 65 2e 20 20 5e 41 20 76 61  database.  ^A va
4120: 6c 75 65 20 6f 66 20 31 20 6d 65 61 6e 73 0a 55  lue of 1 means.U
4130: 54 46 2d 38 2e 20 20 5e 41 20 76 61 6c 75 65 20  TF-8.  ^A value 
4140: 6f 66 20 32 20 6d 65 61 6e 73 20 55 54 46 2d 31  of 2 means UTF-1
4150: 36 6c 65 2e 20 20 5e 41 20 76 61 6c 75 65 20 6f  6le.  ^A value o
4160: 66 20 33 20 6d 65 61 6e 73 20 55 54 46 2d 31 36  f 3 means UTF-16
4170: 62 65 2e 0a 4e 6f 20 6f 74 68 65 72 20 76 61 6c  be..No other val
4180: 75 65 73 20 61 72 65 20 61 6c 6c 6f 77 65 64 2e  ues are allowed.
4190: 3c 2f 70 3e 0a 0a 3c 68 34 3e 31 2e 32 2e 31 34  </p>..<h4>1.2.14
41a0: 20 55 73 65 72 20 76 65 72 73 69 6f 6e 20 6e 75   User version nu
41b0: 6d 62 65 72 3c 2f 68 34 3e 0a 0a 3c 70 3e 5e 54  mber</h4>..<p>^T
41c0: 68 65 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e  he 4-byte big-en
41d0: 64 69 61 6e 20 69 6e 74 65 67 65 72 20 61 74 20  dian integer at 
41e0: 6f 66 66 73 65 74 20 36 30 20 69 73 20 74 68 65  offset 60 is the
41f0: 20 75 73 65 72 20 76 65 72 73 69 6f 6e 20 77 68   user version wh
4200: 69 63 68 0a 69 73 20 73 65 74 20 61 6e 64 20 71  ich.is set and q
4210: 75 65 72 69 65 64 20 62 79 20 74 68 65 20 5b 75  ueried by the [u
4220: 73 65 72 5f 76 65 72 73 69 6f 6e 20 70 72 61 67  ser_version prag
4230: 6d 61 5d 2e 20 20 54 68 65 20 75 73 65 72 20 76  ma].  The user v
4240: 65 72 73 69 6f 6e 20 69 73 0a 6e 6f 74 20 75 73  ersion is.not us
4250: 65 64 20 62 79 20 53 51 4c 69 74 65 2e 3c 2f 70  ed by SQLite.</p
4260: 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
4270: 65 6e 74 20 76 61 6c 69 64 66 6f 72 20 7b 76 65  ent validfor {ve
4280: 72 73 69 6f 6e 2d 76 61 6c 69 64 2d 66 6f 72 20  rsion-valid-for 
4290: 6e 75 6d 62 65 72 7d 3c 2f 74 63 6c 3e 0a 3c 68  number}</tcl>.<h
42a0: 34 3e 31 2e 32 2e 31 35 20 57 72 69 74 65 20 6c  4>1.2.15 Write l
42b0: 69 62 72 61 72 79 20 76 65 72 73 69 6f 6e 20 6e  ibrary version n
42c0: 75 6d 62 65 72 20 61 6e 64 20 76 65 72 73 69 6f  umber and versio
42d0: 6e 2d 76 61 6c 69 64 2d 66 6f 72 20 6e 75 6d 62  n-valid-for numb
42e0: 65 72 3c 2f 68 34 3e 0a 0a 3c 70 3e 5e 54 68 65  er</h4>..<p>^The
42f0: 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69   4-byte big-endi
4300: 61 6e 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66  an integer at of
4310: 66 73 65 74 20 39 36 20 73 74 6f 72 65 73 20 74  fset 96 stores t
4320: 68 65 20 0a 5b 53 51 4c 49 54 45 5f 56 45 52 53  he .[SQLITE_VERS
4330: 49 4f 4e 5f 4e 55 4d 42 45 52 5d 20 76 61 6c 75  ION_NUMBER] valu
4340: 65 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65  e for the SQLite
4350: 20 6c 69 62 72 61 72 79 20 74 68 61 74 20 6d 6f   library that mo
4360: 73 74 0a 72 65 63 65 6e 74 6c 79 20 6d 6f 64 69  st.recently modi
4370: 66 69 65 64 20 74 68 65 20 64 61 74 61 62 61 73  fied the databas
4380: 65 20 66 69 6c 65 2e 20 20 5e 54 68 65 20 34 2d  e file.  ^The 4-
4390: 62 79 74 65 20 62 69 67 2d 65 6e 64 69 6e 67 20  byte big-ending 
43a0: 69 6e 74 65 67 65 72 20 61 74 0a 6f 66 66 73 65  integer at.offse
43b0: 74 20 39 32 20 69 73 20 74 68 65 20 76 61 6c 75  t 92 is the valu
43c0: 65 20 6f 66 20 74 68 65 20 5b 63 68 61 6e 67 65  e of the [change
43d0: 20 63 6f 75 6e 74 65 72 5d 20 77 68 65 6e 20 74   counter] when t
43e0: 68 65 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65  he version numbe
43f0: 72 0a 77 61 73 20 73 74 6f 72 65 64 2e 20 20 54  r.was stored.  T
4400: 68 65 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66  he integer at of
4410: 66 73 65 74 20 39 32 20 69 6e 64 69 63 61 74 65  fset 92 indicate
4420: 73 20 77 68 69 63 68 20 74 72 61 6e 73 61 63 74  s which transact
4430: 69 6f 6e 0a 74 68 65 20 76 65 72 73 69 6f 6e 20  ion.the version 
4440: 6e 75 6d 62 65 72 20 69 73 20 76 61 6c 69 64 20  number is valid 
4450: 66 6f 72 20 61 6e 64 20 69 73 20 73 6f 6d 65 74  for and is somet
4460: 69 6d 65 73 20 63 61 6c 6c 65 64 20 74 68 65 0a  imes called the.
4470: 22 76 65 72 73 69 6f 6e 2d 76 61 6c 69 64 2d 66  "version-valid-f
4480: 6f 72 20 6e 75 6d 62 65 72 22 2e 0a 0a 3c 68 34  or number"...<h4
4490: 3e 31 2e 32 2e 31 36 20 48 65 61 64 65 72 20 73  >1.2.16 Header s
44a0: 70 61 63 65 20 72 65 73 65 72 76 65 64 20 66 6f  pace reserved fo
44b0: 72 20 65 78 70 61 6e 73 69 6f 6e 3c 2f 68 34 3e  r expansion</h4>
44c0: 0a 0a 3c 70 3e 41 6c 6c 20 6f 74 68 65 72 20 62  ..<p>All other b
44d0: 79 74 65 73 20 6f 66 20 74 68 65 20 64 61 74 61  ytes of the data
44e0: 62 61 73 65 20 66 69 6c 65 20 68 65 61 64 65 72  base file header
44f0: 20 61 72 65 20 72 65 73 65 72 76 65 64 20 66 6f   are reserved fo
4500: 72 0a 66 75 74 75 72 65 20 65 78 70 61 6e 73 69  r.future expansi
4510: 6f 6e 20 61 6e 64 20 6d 75 73 74 20 62 65 20 73  on and must be s
4520: 65 74 20 74 6f 20 7a 65 72 6f 2e 3c 2f 70 3e 0a  et to zero.</p>.
4530: 0a 3c 68 33 3e 31 2e 33 20 54 68 65 20 4c 6f 63  .<h3>1.3 The Loc
4540: 6b 2d 42 79 74 65 20 50 61 67 65 3c 2f 68 33 3e  k-Byte Page</h3>
4550: 0a 0a 3c 70 3e 54 68 65 20 6c 6f 63 6b 2d 62 79  ..<p>The lock-by
4560: 74 65 20 70 61 67 65 20 69 73 20 74 68 65 20 73  te page is the s
4570: 69 6e 67 6c 65 20 70 61 67 65 20 6f 66 20 74 68  ingle page of th
4580: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a  e database file.
4590: 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68  that contains th
45a0: 65 20 62 79 74 65 73 20 61 74 20 6f 66 66 73 65  e bytes at offse
45b0: 74 73 20 62 65 74 77 65 65 6e 20 31 30 37 33 37  ts between 10737
45c0: 34 31 38 32 34 20 61 6e 64 20 31 30 37 33 37 34  41824 and 107374
45d0: 32 33 33 35 2c 0a 69 6e 63 6c 75 73 69 76 65 2e  2335,.inclusive.
45e0: 20 20 41 20 64 61 74 61 62 61 73 65 20 66 69 6c    A database fil
45f0: 65 20 74 68 61 74 20 69 73 20 6c 65 73 73 20 74  e that is less t
4600: 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
4610: 31 30 37 33 37 34 31 38 32 34 20 62 79 74 65 73  1073741824 bytes
4620: 20 0a 69 6e 20 73 69 7a 65 20 63 6f 6e 74 61 69   .in size contai
4630: 6e 73 20 6e 6f 20 6c 6f 63 6b 2d 62 79 74 65 20  ns no lock-byte 
4640: 70 61 67 65 2e 20 20 41 20 64 61 74 61 62 61 73  page.  A databas
4650: 65 20 66 69 6c 65 20 6c 61 72 67 65 72 20 74 68  e file larger th
4660: 61 6e 0a 31 30 37 33 37 34 31 38 32 34 20 63 6f  an.1073741824 co
4670: 6e 74 61 69 6e 73 20 65 78 61 63 74 6c 79 20 6f  ntains exactly o
4680: 6e 65 20 6c 6f 63 6b 2d 62 79 74 65 20 70 61 67  ne lock-byte pag
4690: 65 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  e..</p>..<p>The 
46a0: 6c 6f 63 6b 2d 62 79 74 65 20 70 61 67 65 20 69  lock-byte page i
46b0: 73 20 73 65 74 20 61 73 69 64 65 20 66 6f 72 20  s set aside for 
46c0: 75 73 65 20 62 79 20 74 68 65 20 6f 70 65 72 61  use by the opera
46d0: 74 69 6e 67 2d 73 79 73 74 65 6d 20 73 70 65 63  ting-system spec
46e0: 69 66 69 63 0a 56 46 53 20 69 6d 70 6c 65 6d 65  ific.VFS impleme
46f0: 6e 74 61 74 69 6f 6e 20 69 6e 20 69 6d 70 6c 65  ntation in imple
4700: 6d 65 6e 74 69 6e 67 20 74 68 65 20 64 61 74 61  menting the data
4710: 62 61 73 65 20 66 69 6c 65 20 6c 6f 63 6b 69 6e  base file lockin
4720: 67 20 70 72 69 6d 69 74 69 76 65 73 2e 0a 5e 53  g primitives..^S
4730: 51 4c 69 74 65 20 77 69 6c 6c 20 6e 6f 74 20 75  QLite will not u
4740: 73 65 20 74 68 65 20 6c 6f 63 6b 2d 62 79 74 65  se the lock-byte
4750: 20 70 61 67 65 3b 20 69 74 20 77 69 6c 6c 20 6e   page; it will n
4760: 65 76 65 72 20 62 65 20 72 65 61 64 20 6f 72 20  ever be read or 
4770: 77 72 69 74 74 65 6e 0a 62 79 20 74 68 65 20 53  written.by the S
4780: 51 4c 69 74 65 20 63 6f 72 65 2c 20 74 68 6f 75  QLite core, thou
4790: 67 68 20 6f 70 65 72 61 74 69 6e 67 2d 73 79 73  gh operating-sys
47a0: 74 65 6d 20 73 70 65 63 69 66 69 63 20 56 46 53  tem specific VFS
47b0: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73   implementations
47c0: 20 6d 61 79 0a 63 68 6f 6f 73 65 20 74 6f 20 72   may.choose to r
47d0: 65 61 64 20 6f 72 20 77 72 69 74 65 20 62 79 74  ead or write byt
47e0: 65 73 20 6f 6e 20 74 68 65 20 6c 6f 63 6b 2d 62  es on the lock-b
47f0: 79 74 65 20 70 61 67 65 20 61 63 63 6f 72 64 69  yte page accordi
4800: 6e 67 20 74 6f 20 74 68 65 20 0a 6e 65 65 64 73  ng to the .needs
4810: 20 61 6e 64 20 70 72 6f 63 6c 69 76 69 74 69 65   and proclivitie
4820: 73 20 6f 66 20 74 68 65 20 75 6e 64 65 72 6c 79  s of the underly
4830: 69 6e 67 20 73 79 73 74 65 6d 2e 20 20 54 68 65  ing system.  The
4840: 20 75 6e 69 78 20 61 6e 64 20 77 69 6e 33 32 0a   unix and win32.
4850: 56 46 53 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  VFS implementati
4860: 6f 6e 73 20 74 68 61 74 20 63 6f 6d 65 20 62 75  ons that come bu
4870: 69 6c 74 20 69 6e 74 6f 20 53 51 4c 69 74 65 20  ilt into SQLite 
4880: 64 6f 20 6e 6f 74 20 77 72 69 74 65 20 74 6f 20  do not write to 
4890: 74 68 65 0a 6c 6f 63 6b 2d 62 79 74 65 20 70 61  the.lock-byte pa
48a0: 67 65 2c 20 62 75 74 20 77 65 20 61 72 65 20 61  ge, but we are a
48b0: 77 61 72 65 20 6f 66 20 74 68 69 72 64 2d 70 61  ware of third-pa
48c0: 72 74 79 20 56 46 53 20 69 6d 70 6c 65 6d 65 6e  rty VFS implemen
48d0: 74 61 74 69 6f 6e 73 20 66 6f 72 0a 6f 74 68 65  tations for.othe
48e0: 72 20 6f 70 65 72 61 74 69 6e 67 20 73 79 73 74  r operating syst
48f0: 65 6d 73 20 74 68 61 74 20 64 6f 20 73 6f 6d 65  ems that do some
4900: 74 69 6d 65 73 20 77 72 69 74 65 20 74 6f 20 74  times write to t
4910: 68 65 20 6c 6f 63 6b 2d 62 79 74 65 20 70 61 67  he lock-byte pag
4920: 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f  e.</p>..<tcl>hd_
4930: 66 72 61 67 6d 65 6e 74 20 7b 66 72 65 65 6c 69  fragment {freeli
4940: 73 74 7d 20 7b 66 72 65 65 6c 69 73 74 7d 20 7b  st} {freelist} {
4950: 66 72 65 65 2d 70 61 67 65 20 6c 69 73 74 7d 3c  free-page list}<
4960: 2f 74 63 6c 3e 0a 3c 68 33 3e 31 2e 34 20 54 68  /tcl>.<h3>1.4 Th
4970: 65 20 46 72 65 65 6c 69 73 74 3c 2f 68 33 3e 0a  e Freelist</h3>.
4980: 0a 3c 70 3e 41 20 64 61 74 61 62 61 73 65 20 66  .<p>A database f
4990: 69 6c 65 20 6d 69 67 68 74 20 63 6f 6e 74 61 69  ile might contai
49a0: 6e 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 70 61  n one or more pa
49b0: 67 65 73 20 74 68 61 74 20 61 72 65 20 6e 6f 74  ges that are not
49c0: 20 69 6e 0a 61 63 74 69 76 65 20 75 73 65 2e 20   in.active use. 
49d0: 20 55 6e 75 73 65 64 20 70 61 67 65 73 20 63 61   Unused pages ca
49e0: 6e 20 63 6f 6d 65 20 61 62 6f 75 74 2c 20 66 6f  n come about, fo
49f0: 72 20 65 78 61 6d 70 6c 65 2c 20 77 68 65 6e 20  r example, when 
4a00: 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 69 73 20 64  information.is d
4a10: 65 6c 65 74 65 64 20 66 72 6f 6d 20 74 68 65 20  eleted from the 
4a20: 64 61 74 61 62 61 73 65 2e 20 20 55 6e 75 73 65  database.  Unuse
4a30: 64 20 70 61 67 65 73 20 61 72 65 20 73 74 6f 72  d pages are stor
4a40: 65 64 20 6f 6e 20 74 68 65 20 66 72 65 65 6c 69  ed on the freeli
4a50: 73 74 0a 61 6e 64 20 61 72 65 20 72 65 75 73 65  st.and are reuse
4a60: 64 20 77 68 65 6e 20 61 64 64 69 74 69 6f 6e 61  d when additiona
4a70: 6c 20 70 61 67 65 73 20 61 72 65 20 72 65 71 75  l pages are requ
4a80: 69 72 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  ired.</p>..<p>Th
4a90: 65 20 66 72 65 65 6c 69 73 74 20 69 73 20 6f 72  e freelist is or
4aa0: 67 61 6e 69 7a 65 64 20 61 73 20 61 20 6c 69 6e  ganized as a lin
4ab0: 6b 65 64 20 6c 69 73 74 20 6f 66 20 66 72 65 65  ked list of free
4ac0: 6c 69 73 74 20 74 72 75 6e 6b 20 70 61 67 65 73  list trunk pages
4ad0: 0a 77 69 74 68 20 65 61 63 68 20 74 72 75 6e 6b  .with each trunk
4ae0: 20 70 61 67 65 73 20 63 6f 6e 74 61 69 6e 69 6e   pages containin
4af0: 67 20 70 61 67 65 20 6e 75 6d 62 65 72 73 20 66  g page numbers f
4b00: 6f 72 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20  or zero or more 
4b10: 66 72 65 65 6c 69 73 74 0a 6c 65 61 66 20 70 61  freelist.leaf pa
4b20: 67 65 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 20 66  ges.</p>..<p>A f
4b30: 72 65 65 6c 69 73 74 20 74 72 75 6e 6b 20 70 61  reelist trunk pa
4b40: 67 65 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61  ge consists of a
4b50: 6e 20 61 72 72 61 79 20 6f 66 20 34 2d 62 79 74  n array of 4-byt
4b60: 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74  e big-endian int
4b70: 65 67 65 72 73 2e 0a 54 68 65 20 73 69 7a 65 20  egers..The size 
4b80: 6f 66 20 74 68 65 20 61 72 72 61 79 20 69 73 20  of the array is 
4b90: 61 73 20 6d 61 6e 79 20 69 6e 74 65 67 65 72 73  as many integers
4ba0: 20 61 73 20 77 69 6c 6c 20 66 69 74 20 69 6e 20   as will fit in 
4bb0: 74 68 65 20 75 73 61 62 6c 65 20 73 70 61 63 65  the usable space
4bc0: 0a 6f 66 20 61 20 70 61 67 65 2e 20 20 54 68 65  .of a page.  The
4bd0: 20 6d 69 6e 69 6d 75 6d 20 75 73 61 62 6c 65 20   minimum usable 
4be0: 73 70 61 63 65 20 69 73 20 34 38 30 20 62 79 74  space is 480 byt
4bf0: 65 73 20 73 6f 20 74 68 65 20 61 72 72 61 79 20  es so the array 
4c00: 77 69 6c 6c 20 61 6c 77 61 79 73 0a 62 65 20 61  will always.be a
4c10: 74 20 6c 65 61 73 74 20 31 32 30 20 65 6e 74 72  t least 120 entr
4c20: 69 65 73 20 69 6e 20 6c 65 6e 67 74 68 2e 20 20  ies in length.  
4c30: 5e 54 68 65 20 66 69 72 73 74 20 69 6e 74 65 67  ^The first integ
4c40: 65 72 20 69 6e 20 74 68 65 20 61 72 72 61 79 20  er in the array 
4c50: 0a 69 73 20 74 68 65 20 70 61 67 65 20 6e 75 6d  .is the page num
4c60: 62 65 72 20 6f 66 20 74 68 65 20 6e 65 78 74 20  ber of the next 
4c70: 66 72 65 65 6c 69 73 74 20 74 72 75 6e 6b 20 70  freelist trunk p
4c80: 61 67 65 20 69 6e 20 74 68 65 20 6c 69 73 74 20  age in the list 
4c90: 6f 72 20 7a 65 72 6f 20 0a 69 66 20 74 68 69 73  or zero .if this
4ca0: 20 69 73 20 74 68 65 20 6c 61 73 74 20 66 72 65   is the last fre
4cb0: 65 6c 69 73 74 20 74 72 75 6e 6b 20 70 61 67 65  elist trunk page
4cc0: 2e 20 20 5e 54 68 65 20 73 65 63 6f 6e 64 20 69  .  ^The second i
4cd0: 6e 74 65 67 65 72 20 69 6e 20 74 68 65 20 61 72  nteger in the ar
4ce0: 72 61 79 0a 69 73 20 74 68 65 20 6e 75 6d 62 65  ray.is the numbe
4cf0: 72 20 6f 66 20 6c 65 61 66 20 70 61 67 65 20 70  r of leaf page p
4d00: 6f 69 6e 74 65 72 73 20 74 6f 20 66 6f 6c 6c 6f  ointers to follo
4d10: 77 2e 20 20 43 61 6c 6c 20 74 68 65 20 73 65 63  w.  Call the sec
4d20: 6f 6e 64 20 69 6e 74 65 67 65 72 20 4c 2e 0a 5e  ond integer L..^
4d30: 49 66 20 4c 20 69 73 20 67 72 65 61 74 65 72 20  If L is greater 
4d40: 74 68 61 6e 20 7a 65 72 6f 20 74 68 65 6e 20 69  than zero then i
4d50: 6e 74 65 67 65 72 73 20 77 69 74 68 20 61 72 72  ntegers with arr
4d60: 61 79 20 69 6e 64 65 78 65 73 20 62 65 74 77 65  ay indexes betwe
4d70: 65 6e 20 32 20 61 6e 64 0a 4c 2b 31 20 69 6e 63  en 2 and.L+1 inc
4d80: 6c 75 73 69 76 65 20 63 6f 6e 74 61 69 6e 20 70  lusive contain p
4d90: 61 67 65 20 6e 75 6d 62 65 72 73 20 66 6f 72 20  age numbers for 
4da0: 66 72 65 65 6c 69 73 74 20 6c 65 61 66 20 70 61  freelist leaf pa
4db0: 67 65 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 46 72 65  ges.</p>..<p>Fre
4dc0: 65 6c 69 73 74 20 6c 65 61 66 20 70 61 67 65 73  elist leaf pages
4dd0: 20 63 6f 6e 74 61 69 6e 20 6e 6f 20 69 6e 66 6f   contain no info
4de0: 72 6d 61 74 69 6f 6e 2e 20 20 5e 53 51 4c 69 74  rmation.  ^SQLit
4df0: 65 20 61 76 6f 69 64 73 20 72 65 61 64 69 6e 67  e avoids reading
4e00: 20 6f 72 0a 77 72 69 74 69 6e 67 20 66 72 65 65   or.writing free
4e10: 6c 69 73 74 20 6c 65 61 66 20 70 61 67 65 73 20  list leaf pages 
4e20: 69 6e 20 6f 72 64 65 72 20 74 6f 20 72 65 64 75  in order to redu
4e30: 63 65 20 64 69 73 6b 20 49 2f 4f 2e 3c 2f 70 3e  ce disk I/O.</p>
4e40: 0a 0a 3c 70 3e 41 20 62 75 67 20 69 6e 20 53 51  ..<p>A bug in SQ
4e50: 4c 69 74 65 20 76 65 72 73 69 6f 6e 73 20 70 72  Lite versions pr
4e60: 69 6f 72 20 74 6f 20 33 2e 36 2e 30 20 63 61 75  ior to 3.6.0 cau
4e70: 73 65 64 20 74 68 65 20 64 61 74 61 62 61 73 65  sed the database
4e80: 20 74 6f 20 62 65 0a 72 65 70 6f 72 74 65 64 20   to be.reported 
4e90: 61 73 20 63 6f 72 72 75 70 74 20 69 66 20 61 6e  as corrupt if an
4ea0: 79 20 6c 61 73 74 20 36 20 65 6e 74 72 69 65 73  y last 6 entries
4eb0: 20 69 6e 20 74 68 65 20 66 72 65 65 6c 69 73 74   in the freelist
4ec0: 20 74 72 75 6e 6b 20 70 61 67 65 20 0a 61 72 72   trunk page .arr
4ed0: 61 79 20 63 6f 6e 74 61 69 6e 65 64 20 6e 6f 6e  ay contained non
4ee0: 2d 7a 65 72 6f 20 76 61 6c 75 65 73 2e 20 20 4e  -zero values.  N
4ef0: 65 77 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66  ewer versions of
4f00: 20 53 51 4c 69 74 65 20 64 6f 20 6e 6f 74 20 68   SQLite do not h
4f10: 61 76 65 0a 74 68 69 73 20 70 72 6f 62 6c 65 6d  ave.this problem
4f20: 2e 20 20 5e 48 6f 77 65 76 65 72 2c 20 6e 65 77  .  ^However, new
4f30: 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53  er versions of S
4f40: 51 4c 69 74 65 20 73 74 69 6c 6c 20 61 76 6f 69  QLite still avoi
4f50: 64 20 75 73 69 6e 67 20 74 68 65 20 0a 6c 61 73  d using the .las
4f60: 74 20 73 69 78 20 65 6e 74 72 69 65 73 20 69 6e  t six entries in
4f70: 20 74 68 65 20 66 72 65 65 6c 69 73 74 20 74 72   the freelist tr
4f80: 75 6e 6b 20 70 61 67 65 20 61 72 72 61 79 20 69  unk page array i
4f90: 6e 20 6f 72 64 65 72 20 74 68 61 74 20 64 61 74  n order that dat
4fa0: 61 62 61 73 65 0a 66 69 6c 65 73 20 63 72 65 61  abase.files crea
4fb0: 74 65 64 20 62 79 20 6e 65 77 65 72 20 76 65 72  ted by newer ver
4fc0: 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20  sions of SQLite 
4fd0: 63 61 6e 20 62 65 20 72 65 61 64 20 62 79 20 6f  can be read by o
4fe0: 6c 64 65 72 20 76 65 72 73 69 6f 6e 73 0a 6f 66  lder versions.of
4ff0: 20 53 51 4c 69 74 65 2e 3c 2f 70 3e 0a 0a 3c 70   SQLite.</p>..<p
5000: 3e 5e 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  >^The number of 
5010: 66 72 65 65 6c 69 73 74 20 70 61 67 65 73 20 69  freelist pages i
5020: 73 20 73 74 6f 72 65 64 20 61 73 20 61 20 34 2d  s stored as a 4-
5030: 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20  byte big-endian 
5040: 69 6e 74 65 67 65 72 0a 69 6e 20 74 68 65 20 64  integer.in the d
5050: 61 74 61 62 61 73 65 20 68 65 61 64 65 72 20 61  atabase header a
5060: 74 20 61 6e 20 6f 66 66 73 65 74 20 6f 66 20 33  t an offset of 3
5070: 36 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e  6 from the begin
5080: 6e 69 6e 67 20 6f 66 20 74 68 65 20 66 69 6c 65  ning of the file
5090: 2e 0a 5e 54 68 65 20 64 61 74 61 62 61 73 65 20  ..^The database 
50a0: 68 65 61 64 65 72 20 61 6c 73 6f 20 73 74 6f 72  header also stor
50b0: 65 73 20 74 68 65 20 70 61 67 65 20 6e 75 6d 62  es the page numb
50c0: 65 72 20 6f 66 20 74 68 65 20 66 69 72 73 74 20  er of the first 
50d0: 66 72 65 65 6c 69 73 74 20 74 72 75 6e 6b 0a 70  freelist trunk.p
50e0: 61 67 65 20 61 73 20 61 20 34 2d 62 79 74 65 20  age as a 4-byte 
50f0: 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67  big-endian integ
5100: 65 72 20 61 74 20 61 6e 20 6f 66 66 73 65 74 20  er at an offset 
5110: 6f 66 20 33 32 20 66 72 6f 6d 20 74 68 65 20 62  of 32 from the b
5120: 65 67 69 6e 6e 69 6e 67 0a 6f 66 20 74 68 65 20  eginning.of the 
5130: 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 31  file.</p>..<h3>1
5140: 2e 35 20 42 2d 74 72 65 65 20 50 61 67 65 73 3c  .5 B-tree Pages<
5150: 2f 68 33 3e 0a 0a 3c 70 3e 41 20 62 2d 74 72 65  /h3>..<p>A b-tre
5160: 65 20 70 61 67 65 20 69 73 20 65 69 74 68 65 72  e page is either
5170: 20 61 6e 20 69 6e 74 65 72 69 6f 72 20 70 61 67   an interior pag
5180: 65 20 6f 72 20 61 20 6c 65 61 66 20 70 61 67 65  e or a leaf page
5190: 2e 0a 41 20 6c 65 61 66 20 70 61 67 65 20 63 6f  ..A leaf page co
51a0: 6e 74 61 69 6e 73 20 6b 65 79 73 20 61 6e 64 20  ntains keys and 
51b0: 69 6e 20 74 68 65 20 63 61 73 65 20 6f 66 20 61  in the case of a
51c0: 20 74 61 62 6c 65 20 62 2d 74 72 65 65 20 65 61   table b-tree ea
51d0: 63 68 0a 6b 65 79 20 68 61 73 20 61 73 73 6f 63  ch.key has assoc
51e0: 69 61 74 65 64 20 63 6f 6e 74 65 6e 74 2e 20 20  iated content.  
51f0: 41 6e 20 69 6e 74 65 72 69 6f 72 20 70 61 67 65  An interior page
5200: 20 63 6f 6e 74 61 69 6e 73 0a 4b 20 6b 65 79 73   contains.K keys
5210: 20 77 69 74 68 6f 75 74 20 63 6f 6e 74 65 6e 74   without content
5220: 20 62 75 74 20 77 69 74 68 20 4b 2b 31 20 70 6f   but with K+1 po
5230: 69 6e 74 65 72 73 20 74 6f 20 63 68 69 6c 64 20  inters to child 
5240: 62 2d 74 72 65 65 20 70 61 67 65 73 2e 0a 41 20  b-tree pages..A 
5250: 22 70 6f 69 6e 74 65 72 22 20 69 6e 20 61 6e 20  "pointer" in an 
5260: 69 6e 74 65 72 69 6f 72 20 62 2d 74 72 65 65 20  interior b-tree 
5270: 70 61 67 65 20 69 73 20 6a 75 73 74 20 74 68 65  page is just the
5280: 20 33 31 2d 62 69 74 20 69 6e 74 65 67 65 72 0a   31-bit integer.
5290: 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74  page number of t
52a0: 68 65 20 63 68 69 6c 64 20 70 61 67 65 2e 3c 2f  he child page.</
52b0: 70 3e 0a 0a 0a 3c 70 3e 44 65 66 69 6e 65 20 74  p>...<p>Define t
52c0: 68 65 20 64 65 70 74 68 0a 6f 66 20 61 20 6c 65  he depth.of a le
52d0: 61 66 20 62 2d 74 72 65 65 20 74 6f 20 62 65 20  af b-tree to be 
52e0: 31 20 61 6e 64 20 74 68 65 20 74 68 65 20 64 65  1 and the the de
52f0: 70 74 68 20 6f 66 20 61 6e 79 20 69 6e 74 65 72  pth of any inter
5300: 69 6f 72 20 62 2d 74 72 65 65 20 74 6f 20 62 65  ior b-tree to be
5310: 20 6f 6e 65 0a 6d 6f 72 65 20 74 68 61 6e 20 74   one.more than t
5320: 68 65 20 6d 61 78 69 6d 75 6d 20 64 65 70 74 68  he maximum depth
5330: 20 6f 66 20 61 6e 79 20 6f 66 20 69 74 73 20 63   of any of its c
5340: 68 69 6c 64 72 65 6e 2e 20 20 5e 49 6e 20 61 20  hildren.  ^In a 
5350: 77 65 6c 6c 2d 66 6f 72 6d 65 64 0a 64 61 74 61  well-formed.data
5360: 62 61 73 65 2c 20 61 6c 6c 20 63 68 69 6c 64 72  base, all childr
5370: 65 6e 20 6f 66 20 61 6e 79 20 6f 6e 65 20 69 6e  en of any one in
5380: 74 65 72 69 6f 72 20 62 2d 74 72 65 65 20 68 61  terior b-tree ha
5390: 76 65 20 74 68 65 20 73 61 6d 65 20 64 65 70 74  ve the same dept
53a0: 68 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 6e 20 61 6e  h.</p>..<p>In an
53b0: 20 69 6e 74 65 72 69 6f 72 20 62 2d 74 72 65 65   interior b-tree
53c0: 20 70 61 67 65 2c 20 74 68 65 20 70 6f 69 6e 74   page, the point
53d0: 65 72 73 20 61 6e 64 20 6b 65 79 73 20 6c 6f 67  ers and keys log
53e0: 69 63 61 6c 6c 79 20 61 6c 74 65 72 6e 61 74 65  ically alternate
53f0: 20 0a 77 69 74 68 20 61 20 70 6f 69 6e 74 65 72   .with a pointer
5400: 20 6f 6e 20 62 6f 74 68 20 65 6e 64 73 2e 20 28   on both ends. (
5410: 54 68 65 20 70 72 65 76 69 6f 75 73 20 73 65 6e  The previous sen
5420: 74 65 6e 63 65 20 69 73 20 74 6f 20 62 65 20 75  tence is to be u
5430: 6e 64 65 72 73 74 6f 6f 64 0a 63 6f 6e 63 65 70  nderstood.concep
5440: 74 75 61 6c 6c 79 20 2d 20 74 68 65 20 61 63 74  tually - the act
5450: 75 61 6c 20 6c 61 79 6f 75 74 20 6f 66 20 74 68  ual layout of th
5460: 65 20 6b 65 79 73 20 61 6e 64 0a 70 6f 69 6e 74  e keys and.point
5470: 65 72 73 20 77 69 74 68 69 6e 20 74 68 65 20 70  ers within the p
5480: 61 67 65 20 69 73 20 6d 6f 72 65 20 63 6f 6d 70  age is more comp
5490: 6c 69 63 61 74 65 64 20 61 6e 64 20 77 69 6c 6c  licated and will
54a0: 20 62 65 20 64 65 73 63 72 69 62 65 64 20 69 6e   be described in
54b0: 0a 74 68 65 20 73 65 71 75 65 6c 2e 29 20 20 41  .the sequel.)  A
54c0: 6c 6c 20 6b 65 79 73 20 77 69 74 68 69 6e 20 74  ll keys within t
54d0: 68 65 20 73 61 6d 65 20 70 61 67 65 20 61 72 65  he same page are
54e0: 20 75 6e 69 71 75 65 20 61 6e 64 20 61 72 65 20   unique and are 
54f0: 6c 6f 67 69 63 61 6c 6c 79 0a 6f 72 67 61 6e 69  logically.organi
5500: 7a 65 64 20 69 6e 20 61 73 63 65 6e 64 69 6e 67  zed in ascending
5510: 20 6f 72 64 65 72 20 66 72 6f 6d 20 6c 65 66 74   order from left
5520: 20 74 6f 20 72 69 67 68 74 2e 20 20 28 41 67 61   to right.  (Aga
5530: 69 6e 2c 20 74 68 69 73 20 6f 72 64 65 72 69 6e  in, this orderin
5540: 67 0a 69 73 20 6c 6f 67 69 63 61 6c 2c 20 6e 6f  g.is logical, no
5550: 74 20 70 68 79 73 69 63 61 6c 2e 20 20 54 68 65  t physical.  The
5560: 20 61 63 74 75 61 6c 20 6c 6f 63 61 74 69 6f 6e   actual location
5570: 20 6f 66 20 6b 65 79 73 20 77 69 74 68 69 6e 20   of keys within 
5580: 74 68 65 20 70 61 67 65 0a 69 73 20 61 72 62 69  the page.is arbi
5590: 74 72 61 72 79 2e 29 20 5e 46 6f 72 20 61 6e 79  trary.) ^For any
55a0: 20 6b 65 79 20 58 2c 20 70 6f 69 6e 74 65 72 73   key X, pointers
55b0: 20 74 6f 20 74 68 65 20 6c 65 66 74 0a 6f 66 20   to the left.of 
55c0: 61 20 58 20 72 65 66 65 72 20 74 6f 20 62 2d 74  a X refer to b-t
55d0: 72 65 65 20 70 61 67 65 73 20 6f 6e 20 77 68 69  ree pages on whi
55e0: 63 68 20 61 6c 6c 20 6b 65 79 73 20 61 72 65 20  ch all keys are 
55f0: 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75  less than or equ
5600: 61 6c 20 74 6f 20 58 2e 0a 5e 50 6f 69 6e 74 65  al to X..^Pointe
5610: 72 73 20 74 6f 20 74 68 65 20 72 69 67 68 74 20  rs to the right 
5620: 6f 66 20 58 20 72 65 66 65 72 20 74 6f 20 70 61  of X refer to pa
5630: 67 65 73 20 77 68 65 72 65 20 61 6c 6c 20 6b 65  ges where all ke
5640: 79 73 20 61 72 65 20 0a 67 72 65 61 74 65 72 20  ys are .greater 
5650: 74 68 61 6e 20 58 2e 3c 2f 70 3e 0a 0a 3c 70 3e  than X.</p>..<p>
5660: 57 69 74 68 69 6e 20 61 6e 20 69 6e 74 65 72 69  Within an interi
5670: 6f 72 20 62 2d 74 72 65 65 20 70 61 67 65 2c 20  or b-tree page, 
5680: 65 61 63 68 20 6b 65 79 20 61 6e 64 20 74 68 65  each key and the
5690: 20 70 6f 69 6e 74 65 72 20 74 6f 20 69 74 73 0a   pointer to its.
56a0: 69 6d 6d 65 64 69 61 74 65 20 6c 65 66 74 20 61  immediate left a
56b0: 72 65 20 63 6f 6d 62 69 6e 65 64 20 69 6e 74 6f  re combined into
56c0: 20 61 20 73 74 72 75 63 74 75 72 65 20 63 61 6c   a structure cal
56d0: 6c 65 64 20 61 20 22 63 65 6c 6c 22 2e 20 20 54  led a "cell".  T
56e0: 68 65 0a 72 69 67 68 74 2d 6d 6f 73 74 20 70 6f  he.right-most po
56f0: 69 6e 74 65 72 20 69 73 20 68 65 6c 64 20 73 65  inter is held se
5700: 70 61 72 61 74 65 6c 79 2e 20 20 41 20 6c 65 61  parately.  A lea
5710: 66 20 62 2d 74 72 65 65 20 70 61 67 65 20 68 61  f b-tree page ha
5720: 73 20 6e 6f 0a 70 6f 69 6e 74 65 72 73 2c 20 62  s no.pointers, b
5730: 75 74 20 69 74 20 73 74 69 6c 6c 20 75 73 65 73  ut it still uses
5740: 20 74 68 65 20 63 65 6c 6c 20 73 74 72 75 63 74   the cell struct
5750: 75 72 65 20 74 6f 20 68 6f 6c 64 20 6b 65 79 73  ure to hold keys
5760: 20 66 6f 72 0a 69 6e 64 65 78 20 62 2d 74 72 65   for.index b-tre
5770: 65 73 20 6f 72 20 6b 65 79 73 20 61 6e 64 20 63  es or keys and c
5780: 6f 6e 74 65 6e 74 20 66 6f 72 20 74 61 62 6c 65  ontent for table
5790: 20 62 2d 74 72 65 65 73 2e 3c 2f 70 3e 0a 3c 2f   b-trees.</p>.</
57a0: 70 3e 0a 0a 3c 70 3e 45 76 65 72 79 20 62 2d 74  p>..<p>Every b-t
57b0: 72 65 65 20 70 61 67 65 20 68 61 73 20 61 74 20  ree page has at 
57c0: 6d 6f 73 74 20 6f 6e 65 20 70 61 72 65 6e 74 20  most one parent 
57d0: 62 2d 74 72 65 65 20 70 61 67 65 2e 0a 41 20 62  b-tree page..A b
57e0: 2d 74 72 65 65 20 70 61 67 65 20 77 69 74 68 6f  -tree page witho
57f0: 75 74 20 61 20 70 61 72 65 6e 74 20 69 73 20 63  ut a parent is c
5800: 61 6c 6c 65 64 20 61 20 72 6f 6f 74 20 70 61 67  alled a root pag
5810: 65 2e 20 20 41 20 72 6f 6f 74 20 62 2d 74 72 65  e.  A root b-tre
5820: 65 20 70 61 67 65 0a 74 6f 67 65 74 68 65 72 20  e page.together 
5830: 77 69 74 68 20 74 68 65 20 63 6c 6f 73 75 72 65  with the closure
5840: 20 6f 66 20 69 74 73 20 63 68 69 6c 64 72 65 6e   of its children
5850: 20 66 6f 72 6d 20 61 20 63 6f 6d 70 6c 65 74 65   form a complete
5860: 20 62 2d 74 72 65 65 2e 0a 49 74 20 69 73 20 70   b-tree..It is p
5870: 6f 73 73 69 62 6c 65 20 28 61 6e 64 20 69 6e 20  ossible (and in 
5880: 66 61 63 74 20 72 61 74 68 65 72 20 63 6f 6d 6d  fact rather comm
5890: 6f 6e 29 20 74 6f 20 68 61 76 65 20 61 20 63 6f  on) to have a co
58a0: 6d 70 6c 65 74 65 20 62 2d 74 72 65 65 0a 74 68  mplete b-tree.th
58b0: 61 74 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61  at consists of a
58c0: 20 73 69 6e 67 6c 65 20 70 61 67 65 20 74 68 61   single page tha
58d0: 74 20 69 73 20 62 6f 74 68 20 61 20 6c 65 61 66  t is both a leaf
58e0: 20 61 6e 64 20 74 68 65 20 72 6f 6f 74 2e 0a 42   and the root..B
58f0: 65 63 61 75 73 65 20 74 68 65 72 65 20 61 72 65  ecause there are
5900: 20 70 6f 69 6e 74 65 72 73 20 66 72 6f 6d 20 70   pointers from p
5910: 61 72 65 6e 74 73 20 74 6f 20 63 68 69 6c 64 72  arents to childr
5920: 65 6e 2c 20 65 76 65 72 79 20 70 61 67 65 20 6f  en, every page o
5930: 66 20 61 0a 63 6f 6d 70 6c 65 74 65 20 62 2d 74  f a.complete b-t
5940: 72 65 65 20 63 61 6e 20 62 65 20 6c 6f 63 61 74  ree can be locat
5950: 65 64 20 69 66 20 6f 6e 6c 79 20 74 68 65 20 72  ed if only the r
5960: 6f 6f 74 20 70 61 67 65 20 69 73 20 6b 6e 6f 77  oot page is know
5970: 6e 2e 20 20 48 65 6e 63 65 2c 0a 62 2d 74 72 65  n.  Hence,.b-tre
5980: 65 73 20 61 72 65 20 69 64 65 6e 74 69 66 69 65  es are identifie
5990: 64 20 62 79 20 74 68 65 69 72 20 72 6f 6f 74 20  d by their root 
59a0: 70 61 67 65 20 6e 75 6d 62 65 72 2e 3c 2f 70 3e  page number.</p>
59b0: 0a 0a 3c 70 3e 41 20 62 2d 74 72 65 65 20 70 61  ..<p>A b-tree pa
59c0: 67 65 20 69 73 20 65 69 74 68 65 72 20 61 20 74  ge is either a t
59d0: 61 62 6c 65 20 62 2d 74 72 65 65 20 70 61 67 65  able b-tree page
59e0: 20 6f 72 20 61 6e 20 69 6e 64 65 78 20 62 2d 74   or an index b-t
59f0: 72 65 65 20 70 61 67 65 2e 0a 41 6c 6c 20 70 61  ree page..All pa
5a00: 67 65 73 20 77 69 74 68 69 6e 20 65 61 63 68 20  ges within each 
5a10: 63 6f 6d 70 6c 65 74 65 20 62 2d 74 72 65 65 20  complete b-tree 
5a20: 61 72 65 20 6f 66 20 74 68 65 20 73 61 6d 65 20  are of the same 
5a30: 74 79 70 65 3a 20 65 69 74 68 65 72 20 74 61 62  type: either tab
5a40: 6c 65 0a 6f 72 20 69 6e 64 65 78 2e 20 20 54 68  le.or index.  Th
5a50: 65 72 65 20 69 73 20 61 20 6f 6e 65 2d 74 6f 2d  ere is a one-to-
5a60: 6f 6e 65 20 6d 61 70 70 69 6e 67 20 66 72 6f 6d  one mapping from
5a70: 20 74 61 62 6c 65 20 62 2d 74 72 65 65 73 20 69   table b-trees i
5a80: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 0a  n the database .
5a90: 66 69 6c 65 20 74 6f 20 28 6e 6f 6e 2d 76 69 72  file to (non-vir
5aa0: 74 75 61 6c 29 20 74 61 62 6c 65 73 20 69 6e 20  tual) tables in 
5ab0: 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
5ac0: 65 6d 61 2c 20 69 6e 63 6c 75 64 69 6e 67 20 73  ema, including s
5ad0: 79 73 74 65 6d 20 74 61 62 6c 65 73 0a 73 75 63  ystem tables.suc
5ae0: 68 20 61 73 20 73 71 6c 69 74 65 5f 6d 61 73 74  h as sqlite_mast
5af0: 65 72 2e 20 20 54 68 65 72 65 20 69 73 20 6f 6e  er.  There is on
5b00: 65 2d 74 6f 2d 6f 6e 65 20 6d 61 70 70 69 6e 67  e-to-one mapping
5b10: 20 62 65 74 77 65 65 6e 20 69 6e 64 65 78 20 62   between index b
5b20: 2d 74 72 65 65 73 0a 69 6e 20 74 68 65 20 64 61  -trees.in the da
5b30: 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20  tabase file and 
5b40: 69 6e 64 69 63 65 73 20 69 6e 20 74 68 65 20 73  indices in the s
5b50: 63 68 65 6d 61 2c 20 69 6e 63 6c 75 64 69 6e 67  chema, including
5b60: 20 69 6d 70 6c 69 65 64 20 69 6e 64 69 63 65 73   implied indices
5b70: 0a 63 72 65 61 74 65 64 20 62 79 20 75 6e 69 71  .created by uniq
5b80: 75 65 6e 65 73 73 20 63 6f 6e 73 74 72 61 69 6e  ueness constrain
5b90: 74 73 2e 20 20 54 68 65 20 62 2d 74 72 65 65 20  ts.  The b-tree 
5ba0: 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f  corresponding to
5bb0: 20 74 68 65 0a 73 71 6c 69 74 65 5f 6d 61 73 74   the.sqlite_mast
5bc0: 65 72 20 74 61 62 6c 65 20 61 6c 77 61 79 73 20  er table always 
5bd0: 68 61 73 20 69 74 73 20 72 6f 6f 74 20 70 61 67  has its root pag
5be0: 65 20 6f 6e 20 61 20 70 61 67 65 20 6e 75 6d 62  e on a page numb
5bf0: 65 72 20 6f 66 20 31 2e 0a 54 68 65 20 73 71 6c  er of 1..The sql
5c00: 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65  ite_master table
5c10: 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 72 6f   contains the ro
5c20: 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20 66  ot page number f
5c30: 6f 72 20 65 76 65 72 79 20 6f 74 68 65 72 20 0a  or every other .
5c40: 74 61 62 6c 65 20 61 6e 64 20 69 6e 64 65 78 20  table and index 
5c50: 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
5c60: 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 45 61  file.</p>..<p>Ea
5c70: 63 68 20 65 6e 74 72 79 20 69 6e 20 61 20 74 61  ch entry in a ta
5c80: 62 6c 65 20 62 2d 74 72 65 65 20 63 6f 6e 73 69  ble b-tree consi
5c90: 73 74 73 20 6f 66 20 61 20 36 34 2d 62 69 74 20  sts of a 64-bit 
5ca0: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 6b  signed integer k
5cb0: 65 79 0a 61 6e 64 20 75 70 20 74 6f 20 32 31 34  ey.and up to 214
5cc0: 37 34 38 33 36 34 37 20 62 79 74 65 73 20 6f 66  7483647 bytes of
5cd0: 20 61 72 62 69 74 72 61 72 79 20 64 61 74 61 2e   arbitrary data.
5ce0: 20 20 49 6e 74 65 72 69 6f 72 20 74 61 62 6c 65    Interior table
5cf0: 20 62 2d 74 72 65 65 73 0a 68 6f 6c 64 20 6f 6e   b-trees.hold on
5d00: 6c 79 20 6b 65 79 73 20 61 6e 64 20 70 6f 69 6e  ly keys and poin
5d10: 74 65 72 73 20 74 6f 20 63 68 69 6c 64 72 65 6e  ters to children
5d20: 2e 20 20 41 6c 6c 20 64 61 74 61 20 69 73 20 63  .  All data is c
5d30: 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 65 0a  ontained in the.
5d40: 74 61 62 6c 65 20 62 2d 74 72 65 65 20 6c 65 61  table b-tree lea
5d50: 76 65 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 45 61 63  ves.</p>..<p>Eac
5d60: 68 20 65 6e 74 72 79 20 69 6e 20 61 6e 20 69 6e  h entry in an in
5d70: 64 65 78 20 62 2d 74 72 65 65 20 63 6f 6e 73 69  dex b-tree consi
5d80: 73 74 73 20 6f 66 20 61 6e 20 61 72 62 69 74 72  sts of an arbitr
5d90: 61 72 79 20 6b 65 79 20 6f 66 20 75 70 0a 74 6f  ary key of up.to
5da0: 20 32 31 34 37 34 38 33 36 34 37 20 62 79 74 65   2147483647 byte
5db0: 73 20 69 6e 20 6c 65 6e 67 74 68 20 61 6e 64 20  s in length and 
5dc0: 6e 6f 20 64 61 74 61 2e 3c 2f 70 3e 0a 0a 3c 74  no data.</p>..<t
5dd0: 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 63  cl>hd_fragment c
5de0: 65 6c 6c 5f 70 61 79 6c 6f 61 64 20 7b 63 65 6c  ell_payload {cel
5df0: 6c 20 70 61 79 6c 6f 61 64 7d 3c 2f 74 63 6c 3e  l payload}</tcl>
5e00: 0a 3c 70 3e 44 65 66 69 6e 65 20 74 68 65 20 22  .<p>Define the "
5e10: 70 61 79 6c 6f 61 64 22 20 6f 66 20 61 20 63 65  payload" of a ce
5e20: 6c 6c 20 74 6f 20 62 65 20 74 68 65 20 61 72 62  ll to be the arb
5e30: 69 74 72 61 72 79 20 6c 65 6e 67 74 68 20 73 65  itrary length se
5e40: 63 74 69 6f 6e 0a 6f 66 20 74 68 65 20 63 65 6c  ction.of the cel
5e50: 6c 2e 20 20 46 6f 72 20 61 6e 20 69 6e 64 65 78  l.  For an index
5e60: 20 62 2d 74 72 65 65 2c 20 74 68 65 20 6b 65 79   b-tree, the key
5e70: 20 69 73 20 61 6c 77 61 79 73 20 61 72 62 69 74   is always arbit
5e80: 72 61 72 79 20 69 6e 20 6c 65 6e 67 74 68 0a 61  rary in length.a
5e90: 6e 64 20 68 65 6e 63 65 20 74 68 65 20 70 61 79  nd hence the pay
5ea0: 6c 6f 61 64 20 69 73 20 74 68 65 20 6b 65 79 2e  load is the key.
5eb0: 20 20 54 68 65 72 65 20 61 72 65 20 6e 6f 20 61    There are no a
5ec0: 72 62 69 74 72 61 72 79 20 6c 65 6e 67 74 68 20  rbitrary length 
5ed0: 65 6c 65 6d 65 6e 74 73 0a 69 6e 20 74 68 65 20  elements.in the 
5ee0: 63 65 6c 6c 73 20 6f 66 20 69 6e 74 65 72 69 6f  cells of interio
5ef0: 72 20 74 61 62 6c 65 20 62 2d 74 72 65 65 20 70  r table b-tree p
5f00: 61 67 65 73 20 61 6e 64 20 73 6f 20 74 68 6f 73  ages and so thos
5f10: 65 20 63 65 6c 6c 73 20 68 61 76 65 20 6e 6f 0a  e cells have no.
5f20: 70 61 79 6c 6f 61 64 2e 20 20 54 61 62 6c 65 20  payload.  Table 
5f30: 62 2d 74 72 65 65 20 6c 65 61 66 20 70 61 67 65  b-tree leaf page
5f40: 73 20 63 6f 6e 74 61 69 6e 20 61 72 62 69 74 72  s contain arbitr
5f50: 61 72 79 20 6c 65 6e 67 74 68 20 63 6f 6e 74 65  ary length conte
5f60: 6e 74 20 61 6e 64 0a 73 6f 20 66 6f 72 20 63 65  nt and.so for ce
5f70: 6c 6c 73 20 6f 6e 20 74 68 6f 73 65 20 70 61 67  lls on those pag
5f80: 65 73 20 74 68 65 20 70 61 79 6c 6f 61 64 20 69  es the payload i
5f90: 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 2e 0a 3c  s the content..<
5fa0: 70 3e 57 68 65 6e 20 74 68 65 20 73 69 7a 65 20  p>When the size 
5fb0: 6f 66 20 70 61 79 6c 6f 61 64 20 66 6f 72 20 61  of payload for a
5fc0: 20 63 65 6c 6c 20 65 78 63 65 65 64 73 20 61 20   cell exceeds a 
5fd0: 63 65 72 74 61 69 6e 20 74 68 72 65 73 68 6f 6c  certain threshol
5fe0: 64 20 28 74 6f 0a 62 65 20 64 65 66 69 6e 65 64  d (to.be defined
5ff0: 20 6c 61 74 65 72 29 20 74 68 65 6e 20 6f 6e 6c   later) then onl
6000: 79 20 74 68 65 20 66 69 72 73 74 20 66 65 77 20  y the first few 
6010: 62 79 74 65 73 20 6f 66 20 74 68 65 20 70 61 79  bytes of the pay
6020: 6c 6f 61 64 0a 61 72 65 20 73 74 6f 72 65 64 20  load.are stored 
6030: 6f 6e 20 74 68 65 20 62 2d 74 72 65 65 20 70 61  on the b-tree pa
6040: 67 65 20 61 6e 64 20 74 68 65 20 62 61 6c 61 6e  ge and the balan
6050: 63 65 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  ce is stored in 
6060: 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 0a 6f 66  a linked list.of
6070: 20 63 6f 6e 74 65 6e 74 20 6f 76 65 72 66 6c 6f   content overflo
6080: 77 20 70 61 67 65 73 2e 3c 2f 70 3e 0a 0a 3c 70  w pages.</p>..<p
6090: 3e 41 20 62 2d 74 72 65 65 20 70 61 67 65 20 69  >A b-tree page i
60a0: 73 20 64 69 76 69 64 65 64 20 69 6e 74 6f 20 72  s divided into r
60b0: 65 67 69 6f 6e 73 20 69 6e 20 74 68 65 20 66 6f  egions in the fo
60c0: 6c 6c 6f 77 69 6e 67 20 6f 72 64 65 72 3a 0a 0a  llowing order:..
60d0: 3c 6f 6c 3e 0a 3c 6c 69 3e 54 68 65 20 31 30 30  <ol>.<li>The 100
60e0: 2d 62 79 74 65 20 64 61 74 61 62 61 73 65 20 66  -byte database f
60f0: 69 6c 65 20 68 65 61 64 65 72 20 28 66 6f 75 6e  ile header (foun
6100: 64 20 6f 6e 20 70 61 67 65 20 31 20 6f 6e 6c 79  d on page 1 only
6110: 29 0a 3c 6c 69 3e 54 68 65 20 38 20 6f 72 20 31  ).<li>The 8 or 1
6120: 32 20 62 79 74 65 20 62 2d 74 72 65 65 20 70 61  2 byte b-tree pa
6130: 67 65 20 68 65 61 64 65 72 0a 3c 6c 69 3e 54 68  ge header.<li>Th
6140: 65 20 63 65 6c 6c 20 70 6f 69 6e 74 65 72 20 61  e cell pointer a
6150: 72 72 61 79 0a 3c 6c 69 3e 55 6e 61 6c 6c 6f 63  rray.<li>Unalloc
6160: 61 74 65 64 20 73 70 61 63 65 0a 3c 6c 69 3e 54  ated space.<li>T
6170: 68 65 20 63 65 6c 6c 20 63 6f 6e 74 65 6e 74 20  he cell content 
6180: 61 72 65 61 0a 3c 6c 69 3e 54 68 65 20 72 65 73  area.<li>The res
6190: 65 72 76 65 64 20 72 65 67 69 6f 6e 2e 0a 3c 2f  erved region..</
61a0: 6f 6c 3e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  ol>.</p>..<p>The
61b0: 20 31 30 30 2d 62 79 74 65 20 64 61 74 61 62 61   100-byte databa
61c0: 73 65 20 66 69 6c 65 20 68 65 61 64 65 72 20 69  se file header i
61d0: 73 20 66 6f 75 6e 64 20 6f 6e 6c 79 20 6f 6e 20  s found only on 
61e0: 70 61 67 65 20 31 2c 20 77 68 69 63 68 20 69 73  page 1, which is
61f0: 0a 61 6c 77 61 79 73 20 61 20 74 61 62 6c 65 20  .always a table 
6200: 62 2d 74 72 65 65 20 70 61 67 65 2e 20 20 41 6c  b-tree page.  Al
6210: 6c 20 6f 74 68 65 72 20 62 2d 74 72 65 65 20 70  l other b-tree p
6220: 61 67 65 73 20 69 6e 20 74 68 65 20 64 61 74 61  ages in the data
6230: 62 61 73 65 20 66 69 6c 65 0a 6f 6d 69 74 20 74  base file.omit t
6240: 68 69 73 20 31 30 30 2d 62 79 74 65 20 68 65 61  his 100-byte hea
6250: 64 65 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  der.</p>..<p>The
6260: 20 72 65 73 65 72 76 65 64 20 72 65 67 69 6f 6e   reserved region
6270: 20 69 73 20 61 6e 20 61 72 65 61 20 6f 66 20 75   is an area of u
6280: 6e 75 73 65 64 20 73 70 61 63 65 20 61 74 20 74  nused space at t
6290: 68 65 20 65 6e 64 20 6f 66 20 65 76 65 72 79 0a  he end of every.
62a0: 70 61 67 65 20 28 65 78 63 65 70 74 20 74 68 65  page (except the
62b0: 20 6c 6f 63 6b 69 6e 67 20 70 61 67 65 29 20 74   locking page) t
62c0: 68 61 74 20 65 78 74 65 6e 73 69 6f 6e 73 20 63  hat extensions c
62d0: 61 6e 20 75 73 65 20 74 6f 20 68 6f 6c 64 20 70  an use to hold p
62e0: 65 72 2d 70 61 67 65 0a 69 6e 66 6f 72 6d 61 74  er-page.informat
62f0: 69 6f 6e 2e 20 20 5e 54 68 65 20 73 69 7a 65 20  ion.  ^The size 
6300: 6f 66 20 74 68 65 20 72 65 73 65 72 76 65 64 20  of the reserved 
6310: 72 65 67 69 6f 6e 20 69 73 20 64 65 74 65 72 6d  region is determ
6320: 69 6e 65 64 20 62 79 20 74 68 65 20 6f 6e 65 2d  ined by the one-
6330: 62 79 74 65 0a 75 6e 73 69 67 6e 65 64 20 69 6e  byte.unsigned in
6340: 74 65 67 65 72 20 66 6f 75 6e 64 20 61 74 20 61  teger found at a
6350: 6e 20 6f 66 66 73 65 74 20 6f 66 20 32 30 20 69  n offset of 20 i
6360: 6e 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65  nto the database
6370: 20 66 69 6c 65 20 68 65 61 64 65 72 2e 0a 54 68   file header..Th
6380: 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 72 65  e size of the re
6390: 73 65 72 76 65 64 20 72 65 67 69 6f 6e 20 69 73  served region is
63a0: 20 75 73 75 61 6c 6c 79 20 7a 65 72 6f 2e 3c 2f   usually zero.</
63b0: 70 3e 0a 0a 3c 70 3e 54 68 65 20 62 2d 74 72 65  p>..<p>The b-tre
63c0: 65 20 70 61 67 65 20 68 65 61 64 65 72 20 69 73  e page header is
63d0: 20 38 20 62 79 74 65 73 20 69 6e 20 73 69 7a 65   8 bytes in size
63e0: 20 66 6f 72 20 6c 65 61 66 20 70 61 67 65 73 20   for leaf pages 
63f0: 61 6e 64 20 31 32 0a 62 79 74 65 73 20 66 6f 72  and 12.bytes for
6400: 20 69 6e 74 65 72 69 6f 72 20 70 61 67 65 73 2e   interior pages.
6410: 20 20 41 6c 6c 20 6d 75 6c 74 69 62 79 74 65 20    All multibyte 
6420: 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 70 61  values in the pa
6430: 67 65 20 68 65 61 64 65 72 0a 61 72 65 20 62 69  ge header.are bi
6440: 67 2d 65 6e 64 69 61 6e 2e 0a 54 68 65 20 62 2d  g-endian..The b-
6450: 74 72 65 65 20 70 61 67 65 20 68 65 61 64 65 72  tree page header
6460: 20 69 73 20 63 6f 6d 70 6f 73 65 64 20 6f 66 20   is composed of 
6470: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 66 69  the following fi
6480: 65 6c 64 73 3a 3c 2f 70 3e 0a 0a 3c 63 65 6e 74  elds:</p>..<cent
6490: 65 72 3e 0a 3c 69 3e 42 2d 74 72 65 65 20 50 61  er>.<i>B-tree Pa
64a0: 67 65 20 48 65 61 64 65 72 20 46 6f 72 6d 61 74  ge Header Format
64b0: 3c 2f 69 3e 3c 62 72 3e 0a 3c 74 61 62 6c 65 20  </i><br>.<table 
64c0: 62 6f 72 64 65 72 3d 31 20 77 69 64 74 68 3d 22  border=1 width="
64d0: 38 30 25 22 3e 0a 3c 74 72 3e 3c 74 68 3e 4f 66  80%">.<tr><th>Of
64e0: 66 73 65 74 3c 74 68 3e 53 69 7a 65 3c 74 68 3e  fset<th>Size<th>
64f0: 44 65 73 63 72 69 70 74 69 6f 6e 0a 3c 74 72 3e  Description.<tr>
6500: 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  <td align=center
6510: 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 30 3c 74 64   valign=top>0<td
6520: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61   align=center va
6530: 6c 69 67 6e 3d 74 6f 70 3e 31 3c 74 64 20 61 6c  lign=top>1<td al
6540: 69 67 6e 3d 6c 65 66 74 3e 0a 41 20 66 6c 61 67  ign=left>.A flag
6550: 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68 65 20   indicating the 
6560: 62 2d 74 72 65 65 20 70 61 67 65 20 74 79 70 65  b-tree page type
6570: 0a 5e 41 20 76 61 6c 75 65 20 6f 66 20 32 20 6d  .^A value of 2 m
6580: 65 61 6e 73 20 74 68 65 20 70 61 67 65 20 69 73  eans the page is
6590: 20 61 6e 20 69 6e 74 65 72 69 6f 72 20 69 6e 64   an interior ind
65a0: 65 78 20 62 2d 74 72 65 65 20 70 61 67 65 2e 0a  ex b-tree page..
65b0: 5e 41 20 76 61 6c 75 65 20 6f 66 20 35 20 6d 65  ^A value of 5 me
65c0: 61 6e 73 20 74 68 65 20 70 61 67 65 20 69 73 20  ans the page is 
65d0: 61 6e 20 69 6e 74 65 72 69 6f 72 20 74 61 62 6c  an interior tabl
65e0: 65 20 62 2d 74 72 65 65 20 70 61 67 65 2e 0a 5e  e b-tree page..^
65f0: 41 20 76 61 6c 75 65 20 6f 66 20 31 30 20 6d 65  A value of 10 me
6600: 61 6e 73 20 74 68 65 20 70 61 67 65 20 69 73 20  ans the page is 
6610: 61 20 6c 65 61 66 20 69 6e 64 65 78 20 62 2d 74  a leaf index b-t
6620: 72 65 65 20 70 61 67 65 2e 0a 5e 41 20 76 61 6c  ree page..^A val
6630: 75 65 20 6f 66 20 31 33 20 6d 65 61 6e 73 20 74  ue of 13 means t
6640: 68 65 20 70 61 67 65 20 69 73 20 61 20 6c 65 61  he page is a lea
6650: 66 20 74 61 62 6c 65 20 62 2d 74 72 65 65 20 70  f table b-tree p
6660: 61 67 65 2e 0a 5e 41 6e 79 20 6f 74 68 65 72 20  age..^Any other 
6670: 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20 62 2d  value for the b-
6680: 74 72 65 65 20 70 61 67 65 20 74 79 70 65 20 69  tree page type i
6690: 73 20 61 6e 20 65 72 72 6f 72 2e 0a 3c 74 72 3e  s an error..<tr>
66a0: 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  <td align=center
66b0: 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 31 3c 74 64   valign=top>1<td
66c0: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61   align=center va
66d0: 6c 69 67 6e 3d 74 6f 70 3e 32 3c 74 64 20 61 6c  lign=top>2<td al
66e0: 69 67 6e 3d 6c 65 66 74 3e 0a 42 79 74 65 20 6f  ign=left>.Byte o
66f0: 66 66 73 65 74 20 69 6e 74 6f 20 74 68 65 20 70  ffset into the p
6700: 61 67 65 20 6f 66 20 74 68 65 20 66 69 72 73 74  age of the first
6710: 20 66 72 65 65 62 6c 6f 63 6b 0a 3c 74 72 3e 3c   freeblock.<tr><
6720: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
6730: 76 61 6c 69 67 6e 3d 74 6f 70 3e 33 3c 74 64 20  valign=top>3<td 
6740: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c  align=center val
6750: 69 67 6e 3d 74 6f 70 3e 32 3c 74 64 20 61 6c 69  ign=top>2<td ali
6760: 67 6e 3d 6c 65 66 74 3e 0a 4e 75 6d 62 65 72 20  gn=left>.Number 
6770: 6f 66 20 63 65 6c 6c 73 20 6f 6e 20 74 68 69 73  of cells on this
6780: 20 70 61 67 65 0a 3c 74 72 3e 3c 74 64 20 61 6c   page.<tr><td al
6790: 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67  ign=center valig
67a0: 6e 3d 74 6f 70 3e 35 3c 74 64 20 61 6c 69 67 6e  n=top>5<td align
67b0: 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74  =center valign=t
67c0: 6f 70 3e 32 3c 74 64 20 61 6c 69 67 6e 3d 6c 65  op>2<td align=le
67d0: 66 74 3e 0a 4f 66 66 73 65 74 20 74 6f 20 74 68  ft>.Offset to th
67e0: 65 20 66 69 72 73 74 20 62 79 74 65 20 6f 66 20  e first byte of 
67f0: 74 68 65 20 63 65 6c 6c 20 63 6f 6e 74 65 6e 74  the cell content
6800: 20 61 72 65 61 2e 20 20 41 20 7a 65 72 6f 20 76   area.  A zero v
6810: 61 6c 75 65 20 69 73 20 75 73 65 64 20 74 6f 20  alue is used to 
6820: 72 65 70 72 65 73 65 6e 74 20 61 6e 20 6f 66 66  represent an off
6830: 73 65 74 20 6f 66 20 36 35 35 33 36 2c 20 77 68  set of 65536, wh
6840: 69 63 68 20 6f 63 63 75 72 73 20 6f 6e 20 61 6e  ich occurs on an
6850: 20 65 6d 70 74 79 20 72 6f 6f 74 20 70 61 67 65   empty root page
6860: 20 77 68 65 6e 20 75 73 69 6e 67 20 61 20 36 35   when using a 65
6870: 35 33 36 2d 62 79 74 65 20 70 61 67 65 20 73 69  536-byte page si
6880: 7a 65 2e 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67  ze..<tr><td alig
6890: 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d  n=center valign=
68a0: 74 6f 70 3e 37 3c 74 64 20 61 6c 69 67 6e 3d 63  top>7<td align=c
68b0: 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70  enter valign=top
68c0: 3e 31 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74  >1<td align=left
68d0: 3e 0a 4e 75 6d 62 65 72 20 6f 66 20 66 72 61 67  >.Number of frag
68e0: 6d 65 6e 74 65 64 20 66 72 65 65 20 62 79 74 65  mented free byte
68f0: 73 20 77 69 74 68 69 6e 20 74 68 65 20 63 65 6c  s within the cel
6900: 6c 20 63 6f 6e 74 65 6e 74 20 61 72 65 61 0a 3c  l content area.<
6910: 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e  tr><td align=cen
6920: 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 38  ter valign=top>8
6930: 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  <td align=center
6940: 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 34 3c 74 64   valign=top>4<td
6950: 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 54 68 65   align=left>.The
6960: 20 72 69 67 68 74 2d 6d 6f 73 74 20 70 6f 69 6e   right-most poin
6970: 74 65 72 20 28 69 6e 74 65 72 69 6f 72 20 62 2d  ter (interior b-
6980: 74 72 65 65 20 70 61 67 65 73 20 6f 6e 6c 79 29  tree pages only)
6990: 0a 3c 2f 74 61 62 6c 65 3e 3c 2f 62 6c 6f 63 6b  .</table></block
69a0: 71 75 6f 74 65 3e 3c 2f 63 65 6e 74 65 72 3e 0a  quote></center>.
69b0: 0a 3c 70 3e 5e 54 68 65 20 63 65 6c 6c 20 70 6f  .<p>^The cell po
69c0: 69 6e 74 65 72 20 61 72 72 61 79 20 6f 66 20 61  inter array of a
69d0: 20 62 2d 74 72 65 65 20 70 61 67 65 20 69 6d 6d   b-tree page imm
69e0: 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 73  ediately follows
69f0: 20 74 68 65 20 62 2d 74 72 65 65 0a 70 61 67 65   the b-tree.page
6a00: 20 68 65 61 64 65 72 2e 20 20 4c 65 74 20 4b 20   header.  Let K 
6a10: 62 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  be the number of
6a20: 20 63 65 6c 6c 73 20 6f 6e 20 74 68 65 20 62 74   cells on the bt
6a30: 72 65 65 2e 20 20 5e 54 68 65 20 63 65 6c 6c 20  ree.  ^The cell 
6a40: 70 6f 69 6e 74 65 72 0a 61 72 72 61 79 20 63 6f  pointer.array co
6a50: 6e 73 69 73 74 73 20 6f 66 20 4b 20 32 2d 62 79  nsists of K 2-by
6a60: 74 65 20 69 6e 74 65 67 65 72 20 6f 66 66 73 65  te integer offse
6a70: 74 73 20 74 6f 20 74 68 65 20 63 65 6c 6c 20 63  ts to the cell c
6a80: 6f 6e 74 65 6e 74 73 2e 20 20 5e 54 68 65 0a 63  ontents.  ^The.c
6a90: 65 6c 6c 20 70 6f 69 6e 74 65 72 73 20 61 72 65  ell pointers are
6aa0: 20 61 72 72 61 6e 67 65 64 20 69 6e 20 6b 65 79   arranged in key
6ab0: 20 6f 72 64 65 72 20 77 69 74 68 20 6c 65 66 74   order with left
6ac0: 2d 6d 6f 73 74 20 63 65 6c 6c 20 28 74 68 65 20  -most cell (the 
6ad0: 63 65 6c 6c 20 77 69 74 68 20 74 68 65 0a 73 6d  cell with the.sm
6ae0: 61 6c 6c 65 73 74 20 6b 65 79 29 20 66 69 72 73  allest key) firs
6af0: 74 20 61 6e 64 20 74 68 65 20 72 69 67 68 74 2d  t and the right-
6b00: 6d 6f 73 74 20 63 65 6c 6c 20 28 74 68 65 20 63  most cell (the c
6b10: 65 6c 6c 20 77 69 74 68 20 74 68 65 20 6c 61 72  ell with the lar
6b20: 67 65 73 74 0a 6b 65 79 29 20 6c 61 73 74 2e 3c  gest.key) last.<
6b30: 2f 70 3e 0a 0a 3c 70 3e 43 65 6c 6c 20 63 6f 6e  /p>..<p>Cell con
6b40: 74 65 6e 74 20 69 73 20 73 74 6f 72 65 64 20 69  tent is stored i
6b50: 6e 20 74 68 65 20 63 65 6c 6c 20 63 6f 6e 74 65  n the cell conte
6b60: 6e 74 20 72 65 67 69 6f 6e 20 6f 66 20 74 68 65  nt region of the
6b70: 20 62 2d 74 72 65 65 20 70 61 67 65 2e 0a 53 51   b-tree page..SQ
6b80: 4c 69 74 65 20 73 74 72 69 76 65 73 20 74 6f 20  Lite strives to 
6b90: 70 6c 61 63 65 20 63 65 6c 6c 73 20 61 73 20 66  place cells as f
6ba0: 61 72 20 74 6f 77 61 72 64 20 74 68 65 20 65 6e  ar toward the en
6bb0: 64 20 6f 66 20 74 68 65 20 62 2d 74 72 65 65 20  d of the b-tree 
6bc0: 70 61 67 65 20 61 73 0a 69 74 20 63 61 6e 2c 20  page as.it can, 
6bd0: 69 6e 20 6f 72 64 65 72 20 74 6f 20 6c 65 61 76  in order to leav
6be0: 65 20 73 70 61 63 65 20 66 6f 72 20 66 75 74 75  e space for futu
6bf0: 72 65 20 67 72 6f 77 74 68 20 6f 66 20 74 68 65  re growth of the
6c00: 20 63 65 6c 6c 20 70 6f 69 6e 74 65 72 20 61 72   cell pointer ar
6c10: 72 61 79 2e 0a 54 68 65 20 61 72 65 61 20 69 6e  ray..The area in
6c20: 20 62 65 74 77 65 65 6e 20 74 68 65 20 6c 61 73   between the las
6c30: 74 20 63 65 6c 6c 20 70 6f 69 6e 74 65 72 20 61  t cell pointer a
6c40: 72 72 61 79 20 65 6e 74 72 79 20 61 6e 64 20 74  rray entry and t
6c50: 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 0a  he beginning of.
6c60: 74 68 65 20 66 69 72 73 74 20 63 65 6c 6c 20 69  the first cell i
6c70: 73 20 74 68 65 20 75 6e 61 6c 6c 6f 63 61 74 65  s the unallocate
6c80: 64 20 72 65 67 69 6f 6e 2e 0a 3c 2f 70 3e 0a 0a  d region..</p>..
6c90: 3c 70 3e 5e 49 66 20 61 20 70 61 67 65 20 63 6f  <p>^If a page co
6ca0: 6e 74 61 69 6e 73 20 6e 6f 20 63 65 6c 6c 73 20  ntains no cells 
6cb0: 28 77 68 69 63 68 20 69 73 20 6f 6e 6c 79 20 70  (which is only p
6cc0: 6f 73 73 69 62 6c 65 20 66 6f 72 20 61 20 72 6f  ossible for a ro
6cd0: 6f 74 20 70 61 67 65 0a 6f 66 20 61 20 74 61 62  ot page.of a tab
6ce0: 6c 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73  le that contains
6cf0: 20 6e 6f 20 72 6f 77 73 29 20 74 68 65 6e 20 74   no rows) then t
6d00: 68 65 20 6f 66 66 73 65 74 20 74 6f 20 74 68 65  he offset to the
6d10: 20 63 65 6c 6c 20 63 6f 6e 74 65 6e 74 0a 61 72   cell content.ar
6d20: 65 61 20 77 69 6c 6c 20 65 71 75 61 6c 20 74 68  ea will equal th
6d30: 65 20 70 61 67 65 20 73 69 7a 65 20 6d 69 6e 75  e page size minu
6d40: 73 20 74 68 65 20 62 79 74 65 73 20 6f 66 20 72  s the bytes of r
6d50: 65 73 65 72 76 65 64 20 73 70 61 63 65 2e 20 20  eserved space.  
6d60: 5e 28 49 66 0a 74 68 65 20 64 61 74 61 62 61 73  ^(If.the databas
6d70: 65 20 75 73 65 73 20 61 20 36 35 35 33 36 2d 62  e uses a 65536-b
6d80: 79 74 65 20 70 61 67 65 20 73 69 7a 65 20 61 6e  yte page size an
6d90: 64 20 74 68 65 20 72 65 73 65 72 76 65 64 20 73  d the reserved s
6da0: 70 61 63 65 20 69 73 20 7a 65 72 6f 0a 28 74 68  pace is zero.(th
6db0: 65 20 75 73 75 61 6c 20 76 61 6c 75 65 20 66 6f  e usual value fo
6dc0: 72 20 72 65 73 65 72 76 65 64 20 73 70 61 63 65  r reserved space
6dd0: 29 20 74 68 65 6e 20 74 68 65 20 63 65 6c 6c 20  ) then the cell 
6de0: 63 6f 6e 74 65 6e 74 20 6f 66 66 73 65 74 20 6f  content offset o
6df0: 66 20 61 6e 0a 65 6d 70 74 79 20 70 61 67 65 20  f an.empty page 
6e00: 77 61 6e 74 73 20 74 6f 20 62 65 20 36 35 35 33  wants to be 6553
6e10: 36 2e 20 20 0a 48 6f 77 65 76 65 72 2c 20 74 68  6.  .However, th
6e20: 61 74 20 69 6e 74 65 67 65 72 20 69 73 20 74 6f  at integer is to
6e30: 6f 20 6c 61 72 67 65 20 74 6f 20 62 65 20 73 74  o large to be st
6e40: 6f 72 65 64 20 69 6e 20 61 0a 32 2d 62 79 74 65  ored in a.2-byte
6e50: 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65   unsigned intege
6e60: 72 2c 20 73 6f 20 61 20 76 61 6c 75 65 20 6f 66  r, so a value of
6e70: 20 30 20 69 73 20 75 73 65 64 20 69 6e 20 69 74   0 is used in it
6e80: 73 20 70 6c 61 63 65 2e 29 5e 0a 0a 3c 70 3e 41  s place.)^..<p>A
6e90: 20 66 72 65 65 62 6c 6f 63 6b 20 69 73 20 61 20   freeblock is a 
6ea0: 73 74 72 75 63 74 75 72 65 20 75 73 65 64 20 74  structure used t
6eb0: 6f 20 69 64 65 6e 74 69 66 79 20 75 6e 61 6c 6c  o identify unall
6ec0: 6f 63 61 74 65 64 20 73 70 61 63 65 20 77 69 74  ocated space wit
6ed0: 68 69 6e 0a 61 20 62 2d 74 72 65 65 20 70 61 67  hin.a b-tree pag
6ee0: 65 2e 20 20 46 72 65 65 62 6c 6f 63 6b 73 20 61  e.  Freeblocks a
6ef0: 72 65 20 6f 72 67 61 6e 69 7a 65 64 20 61 73 20  re organized as 
6f00: 61 20 63 68 61 69 6e 2e 20 20 5e 54 68 65 20 66  a chain.  ^The f
6f10: 69 72 73 74 20 32 20 62 79 74 65 73 20 6f 66 0a  irst 2 bytes of.
6f20: 61 20 66 72 65 65 62 6c 6f 63 6b 20 61 72 65 20  a freeblock are 
6f30: 61 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74  a big-endian int
6f40: 65 67 65 72 20 77 68 69 63 68 20 69 73 20 74 68  eger which is th
6f50: 65 20 6f 66 66 73 65 74 20 69 6e 20 74 68 65 20  e offset in the 
6f60: 62 2d 74 72 65 65 20 70 61 67 65 0a 6f 66 20 74  b-tree page.of t
6f70: 68 65 20 6e 65 78 74 20 66 72 65 65 62 6c 6f 63  he next freebloc
6f80: 6b 20 69 6e 20 74 68 65 20 63 68 61 69 6e 2c 20  k in the chain, 
6f90: 6f 72 20 7a 65 72 6f 20 69 66 20 74 68 65 20 66  or zero if the f
6fa0: 72 65 65 62 6c 6f 63 6b 20 69 73 20 74 68 65 20  reeblock is the 
6fb0: 6c 61 73 74 20 6f 6e 0a 74 68 65 20 63 68 61 69  last on.the chai
6fc0: 6e 2e 20 20 5e 54 68 65 20 74 68 69 72 64 20 61  n.  ^The third a
6fd0: 6e 64 20 66 6f 75 72 74 68 20 62 79 74 65 73 20  nd fourth bytes 
6fe0: 6f 66 20 65 61 63 68 20 66 72 65 65 62 6c 6f 63  of each freebloc
6ff0: 6b 20 66 6f 72 6d 0a 61 20 62 69 67 2d 65 6e 64  k form.a big-end
7000: 69 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69 63  ian integer whic
7010: 68 20 69 73 20 74 68 65 20 73 69 7a 65 20 6f 66  h is the size of
7020: 20 74 68 65 20 66 72 65 65 62 6c 6f 63 6b 20 69   the freeblock i
7030: 6e 20 62 79 74 65 73 2c 20 69 6e 63 6c 75 64 69  n bytes, includi
7040: 6e 67 0a 74 68 65 20 34 2d 62 79 74 65 20 68 65  ng.the 4-byte he
7050: 61 64 65 72 2e 20 20 5e 46 72 65 65 62 6c 6f 63  ader.  ^Freebloc
7060: 6b 73 20 61 72 65 20 61 6c 77 61 79 73 20 63 6f  ks are always co
7070: 6e 6e 65 63 74 65 64 20 69 6e 20 6f 72 64 65 72  nnected in order
7080: 20 0a 6f 66 20 69 6e 63 72 65 61 73 69 6e 67 20   .of increasing 
7090: 6f 66 66 73 65 74 2e 20 20 5e 54 68 65 20 73 65  offset.  ^The se
70a0: 63 6f 6e 64 20 66 69 65 6c 64 20 6f 66 20 74 68  cond field of th
70b0: 65 20 62 2d 74 72 65 65 20 70 61 67 65 20 68 65  e b-tree page he
70c0: 61 64 65 72 20 69 73 20 74 68 65 0a 6f 66 66 73  ader is the.offs
70d0: 65 74 20 6f 66 20 74 68 65 20 66 69 72 73 74 20  et of the first 
70e0: 66 72 65 65 62 6c 6f 63 6b 2c 20 6f 72 20 7a 65  freeblock, or ze
70f0: 72 6f 20 69 66 20 74 68 65 72 65 20 61 72 65 20  ro if there are 
7100: 6e 6f 20 66 72 65 65 62 6c 6f 63 6b 73 20 6f 6e  no freeblocks on
7110: 20 74 68 65 0a 70 61 67 65 2e 20 20 5e 49 6e 20   the.page.  ^In 
7120: 61 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 62 2d  a well-formed b-
7130: 74 72 65 65 20 70 61 67 65 2c 20 74 68 65 72 65  tree page, there
7140: 20 77 69 6c 6c 20 61 6c 77 61 79 73 20 62 65 20   will always be 
7150: 61 74 20 6c 65 61 73 74 20 6f 6e 65 20 63 65 6c  at least one cel
7160: 6c 0a 62 65 66 6f 72 65 20 74 68 65 20 66 69 72  l.before the fir
7170: 73 74 20 66 72 65 65 62 6c 6f 63 6b 2e 3c 2f 70  st freeblock.</p
7180: 3e 0a 0a 3c 70 3e 41 20 66 72 65 65 62 6c 6f 63  >..<p>A freebloc
7190: 6b 20 72 65 71 75 69 72 65 73 20 61 74 20 6c 65  k requires at le
71a0: 61 73 74 20 34 20 62 79 74 65 73 20 6f 66 20 73  ast 4 bytes of s
71b0: 70 61 63 65 2e 20 20 49 66 20 74 68 65 72 65 20  pace.  If there 
71c0: 69 73 20 61 6e 20 69 73 6f 6c 61 74 65 64 0a 67  is an isolated.g
71d0: 72 6f 75 70 20 6f 66 20 31 2c 20 32 2c 20 6f 72  roup of 1, 2, or
71e0: 20 33 20 75 6e 75 73 65 64 20 62 79 74 65 73 20   3 unused bytes 
71f0: 77 69 74 68 69 6e 20 74 68 65 20 63 65 6c 6c 20  within the cell 
7200: 63 6f 6e 74 65 6e 74 20 61 72 65 61 2c 20 74 68  content area, th
7210: 6f 73 65 20 62 79 74 65 73 0a 63 6f 6d 70 72 69  ose bytes.compri
7220: 73 65 20 61 20 66 72 61 67 6d 65 6e 74 2e 20 20  se a fragment.  
7230: 5e 54 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65  ^The total numbe
7240: 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20 61 6c  r of bytes in al
7250: 6c 20 66 72 61 67 6d 65 6e 74 73 20 69 73 20 73  l fragments is s
7260: 74 6f 72 65 64 0a 69 6e 20 74 68 65 20 66 69 66  tored.in the fif
7270: 74 68 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20  th field of the 
7280: 62 2d 74 72 65 65 20 70 61 67 65 20 68 65 61 64  b-tree page head
7290: 65 72 2e 20 20 5e 49 6e 20 61 20 77 65 6c 6c 2d  er.  ^In a well-
72a0: 66 6f 72 6d 65 64 20 62 2d 74 72 65 65 20 70 61  formed b-tree pa
72b0: 67 65 2c 0a 74 68 65 20 74 6f 74 61 6c 20 6e 75  ge,.the total nu
72c0: 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e  mber of bytes in
72d0: 20 66 72 61 67 6d 65 6e 74 73 20 6d 61 79 20 6e   fragments may n
72e0: 6f 74 20 65 78 63 65 65 64 20 36 30 2e 3c 2f 70  ot exceed 60.</p
72f0: 3e 0a 0a 3c 70 3e 54 68 65 20 74 6f 74 61 6c 20  >..<p>The total 
7300: 61 6d 6f 75 6e 74 20 6f 66 20 66 72 65 65 20 73  amount of free s
7310: 70 61 63 65 20 6f 6e 20 61 20 62 2d 74 72 65 65  pace on a b-tree
7320: 20 70 61 67 65 20 63 6f 6e 73 69 73 74 73 20 6f   page consists o
7330: 66 20 74 68 65 20 73 69 7a 65 0a 6f 66 20 74 68  f the size.of th
7340: 65 20 75 6e 61 6c 6c 6f 63 61 74 65 64 20 72 65  e unallocated re
7350: 67 69 6f 6e 20 70 6c 75 73 20 74 68 65 20 74 6f  gion plus the to
7360: 74 61 6c 20 73 69 7a 65 20 6f 66 20 61 6c 6c 20  tal size of all 
7370: 66 72 65 65 62 6c 6f 63 6b 73 20 70 6c 75 73 20  freeblocks plus 
7380: 74 68 65 0a 6e 75 6d 62 65 72 20 6f 66 20 66 72  the.number of fr
7390: 61 67 6d 65 6e 74 65 64 20 66 72 65 65 20 62 79  agmented free by
73a0: 74 65 73 2e 20 20 5e 53 51 4c 69 74 65 20 6d 61  tes.  ^SQLite ma
73b0: 79 20 66 72 6f 6d 20 74 69 6d 65 20 74 6f 20 74  y from time to t
73c0: 69 6d 65 20 72 65 6f 72 67 61 6e 69 7a 65 0a 61  ime reorganize.a
73d0: 20 62 2d 74 72 65 65 20 70 61 67 65 20 73 6f 20   b-tree page so 
73e0: 74 68 61 74 20 74 68 65 72 65 20 61 72 65 20 6e  that there are n
73f0: 6f 20 66 72 65 65 62 6c 6f 63 6b 73 20 6f 72 20  o freeblocks or 
7400: 66 72 61 67 6d 65 6e 74 20 62 79 74 65 73 2c 20  fragment bytes, 
7410: 61 6c 6c 0a 75 6e 75 73 65 64 20 62 79 74 65 73  all.unused bytes
7420: 20 61 72 65 20 63 6f 6e 74 61 69 6e 65 64 20 69   are contained i
7430: 6e 20 74 68 65 20 75 6e 61 6c 6c 6f 63 61 74 65  n the unallocate
7440: 64 20 73 70 61 63 65 20 72 65 67 69 6f 6e 2c 20  d space region, 
7450: 61 6e 64 20 61 6c 6c 0a 63 65 6c 6c 73 20 61 72  and all.cells ar
7460: 65 20 70 61 63 6b 65 64 20 74 69 67 68 74 6c 79  e packed tightly
7470: 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74   at the end of t
7480: 68 65 20 70 61 67 65 2e 20 20 54 68 69 73 20 69  he page.  This i
7490: 73 20 63 61 6c 6c 65 64 20 0a 22 64 65 66 72 61  s called ."defra
74a0: 67 6d 65 6e 74 69 6e 67 22 20 74 68 65 20 62 2d  gmenting" the b-
74b0: 74 72 65 65 20 70 61 67 65 2e 3c 2f 70 3e 0a 0a  tree page.</p>..
74c0: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
74d0: 20 76 61 72 69 6e 74 20 7b 76 61 72 69 61 62 6c   varint {variabl
74e0: 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67 65 72  e-length integer
74f0: 7d 20 7b 76 61 72 69 6e 74 7d 3c 2f 74 63 6c 3e  } {varint}</tcl>
7500: 0a 0a 3c 70 3e 41 20 76 61 72 69 61 62 6c 65 2d  ..<p>A variable-
7510: 6c 65 6e 67 74 68 20 69 6e 74 65 67 65 72 20 6f  length integer o
7520: 72 20 22 76 61 72 69 6e 74 22 20 69 73 20 61 20  r "varint" is a 
7530: 73 74 61 74 69 63 20 48 75 66 66 6d 61 6e 20 65  static Huffman e
7540: 6e 63 6f 64 69 6e 67 0a 6f 66 20 36 34 2d 62 69  ncoding.of 64-bi
7550: 74 20 74 77 6f 73 2d 63 6f 6d 70 6c 65 6d 65 6e  t twos-complemen
7560: 74 20 69 6e 74 65 67 65 72 73 20 74 68 61 74 20  t integers that 
7570: 75 73 65 73 20 6c 65 73 73 20 73 70 61 63 65 20  uses less space 
7580: 66 6f 72 20 73 6d 61 6c 6c 20 70 6f 73 69 74 69  for small positi
7590: 76 65 20 0a 76 61 6c 75 65 73 2e 20 0a 41 20 76  ve .values. .A v
75a0: 61 72 69 6e 74 20 69 73 20 62 65 74 77 65 65 6e  arint is between
75b0: 20 31 20 61 6e 64 20 39 20 62 79 74 65 73 20 69   1 and 9 bytes i
75c0: 6e 20 6c 65 6e 67 74 68 2e 20 20 54 68 65 20 76  n length.  The v
75d0: 61 72 69 6e 74 20 63 6f 6e 73 69 73 74 73 20 6f  arint consists o
75e0: 66 20 65 69 74 68 65 72 0a 7a 65 72 6f 20 6f 72  f either.zero or
75f0: 20 6d 6f 72 65 20 62 79 74 65 20 77 68 69 63 68   more byte which
7600: 20 68 61 76 65 20 74 68 65 20 68 69 67 68 2d 6f   have the high-o
7610: 72 64 65 72 20 62 69 74 20 73 65 74 20 66 6f 6c  rder bit set fol
7620: 6c 6f 77 65 64 20 62 79 20 61 20 73 69 6e 67 6c  lowed by a singl
7630: 65 20 62 79 74 65 0a 77 69 74 68 20 74 68 65 20  e byte.with the 
7640: 68 69 67 68 2d 6f 72 64 65 72 20 62 69 74 20 63  high-order bit c
7650: 6c 65 61 72 2c 20 6f 72 20 6e 69 6e 65 20 62 79  lear, or nine by
7660: 74 65 73 2c 20 77 68 69 63 68 65 76 65 72 20 69  tes, whichever i
7670: 73 20 73 68 6f 72 74 65 72 2e 0a 54 68 65 20 6c  s shorter..The l
7680: 6f 77 65 72 20 73 65 76 65 6e 20 62 69 74 73 20  ower seven bits 
7690: 6f 66 20 65 61 63 68 20 6f 66 20 74 68 65 20 66  of each of the f
76a0: 69 72 73 74 20 65 69 67 68 74 20 62 79 74 65 73  irst eight bytes
76b0: 20 61 6e 64 20 61 6c 6c 20 38 20 62 69 74 73 20   and all 8 bits 
76c0: 6f 66 0a 74 68 65 20 6e 69 6e 74 68 20 62 79 74  of.the ninth byt
76d0: 65 20 61 72 65 20 75 73 65 64 20 74 6f 20 72 65  e are used to re
76e0: 63 6f 6e 73 74 72 75 63 74 20 74 68 65 20 36 34  construct the 64
76f0: 2d 62 69 74 20 74 77 6f 73 2d 63 6f 6d 70 6c 65  -bit twos-comple
7700: 6d 65 6e 74 20 69 6e 74 65 67 65 72 2e 0a 56 61  ment integer..Va
7710: 72 69 6e 74 73 20 61 72 65 20 62 69 67 2d 65 6e  rints are big-en
7720: 64 69 61 6e 3a 20 62 69 74 73 20 74 61 6b 65 6e  dian: bits taken
7730: 20 66 72 6f 6d 20 74 68 65 20 65 61 72 6c 69 65   from the earlie
7740: 72 20 62 79 74 65 20 6f 66 20 74 68 65 20 76 61  r byte of the va
7750: 72 69 6e 74 0a 61 72 65 20 74 68 65 20 6d 6f 72  rint.are the mor
7760: 65 20 73 69 67 6e 69 66 69 63 61 6e 74 20 61 6e  e significant an
7770: 64 20 62 69 74 73 20 74 61 6b 65 6e 20 66 72 6f  d bits taken fro
7780: 6d 20 74 68 65 20 6c 61 74 65 72 20 62 79 74 65  m the later byte
7790: 73 2e 20 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  s. </p>..<p>The 
77a0: 66 6f 72 6d 61 74 20 6f 66 20 61 20 63 65 6c 6c  format of a cell
77b0: 20 64 65 70 65 6e 64 73 20 6f 6e 20 77 68 69 63   depends on whic
77c0: 68 20 6b 69 6e 64 20 6f 66 20 62 2d 74 72 65 65  h kind of b-tree
77d0: 20 70 61 67 65 20 74 68 65 20 63 65 6c 6c 0a 61   page the cell.a
77e0: 70 70 65 61 72 73 20 6f 6e 2e 20 20 54 68 65 20  ppears on.  The 
77f0: 66 6f 6c 6c 6f 77 69 6e 67 20 74 61 62 6c 65 20  following table 
7800: 73 68 6f 77 73 20 74 68 65 20 65 6c 65 6d 65 6e  shows the elemen
7810: 74 73 20 6f 66 20 61 20 63 65 6c 6c 2c 20 69 6e  ts of a cell, in
7820: 0a 6f 72 64 65 72 20 6f 66 20 61 70 70 65 61 72  .order of appear
7830: 61 6e 63 65 2c 20 66 6f 72 20 74 68 65 20 76 61  ance, for the va
7840: 72 69 6f 75 73 20 62 2d 74 72 65 65 20 70 61 67  rious b-tree pag
7850: 65 20 74 79 70 65 73 2e 3c 2f 70 3e 0a 0a 3c 62  e types.</p>..<b
7860: 6c 6f 63 6b 71 75 6f 74 65 3e 3c 64 6c 3e 0a 3c  lockquote><dl>.<
7870: 64 74 3e 3c 70 3e 54 61 62 6c 65 20 42 2d 54 72  dt><p>Table B-Tr
7880: 65 65 20 4c 65 61 66 20 43 65 6c 6c 3a 3c 2f 70  ee Leaf Cell:</p
7890: 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 3c 75  ></dt>.<dd><p><u
78a0: 6c 3e 0a 3c 6c 69 3e 41 20 76 61 72 69 6e 74 20  l>.<li>A varint 
78b0: 77 68 69 63 68 20 69 73 20 74 68 65 20 74 6f 74  which is the tot
78c0: 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74  al number of byt
78d0: 65 73 20 6f 66 20 70 61 79 6c 6f 61 64 2c 20 69  es of payload, i
78e0: 6e 63 6c 75 64 69 6e 67 20 61 6e 79 0a 6f 76 65  ncluding any.ove
78f0: 72 66 6c 6f 77 0a 3c 6c 69 3e 41 20 76 61 72 69  rflow.<li>A vari
7900: 6e 74 20 77 68 69 63 68 20 69 73 20 74 68 65 20  nt which is the 
7910: 69 6e 74 65 67 65 72 20 6b 65 79 2c 20 61 2e 6b  integer key, a.k
7920: 2e 61 2e 20 22 72 6f 77 69 64 22 0a 3c 6c 69 3e  .a. "rowid".<li>
7930: 54 68 65 20 69 6e 69 74 69 61 6c 20 70 6f 72 74  The initial port
7940: 69 6f 6e 20 6f 66 20 74 68 65 20 70 61 79 6c 6f  ion of the paylo
7950: 61 64 20 74 68 61 74 20 64 6f 65 73 20 6e 6f 74  ad that does not
7960: 20 73 70 69 6c 6c 20 74 6f 20 6f 76 65 72 66 6c   spill to overfl
7970: 6f 77 0a 70 61 67 65 73 2e 0a 3c 6c 69 3e 41 20  ow.pages..<li>A 
7980: 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61  4-byte big-endia
7990: 6e 20 69 6e 74 65 67 65 72 20 70 61 67 65 20 6e  n integer page n
79a0: 75 6d 62 65 72 20 66 6f 72 20 74 68 65 20 66 69  umber for the fi
79b0: 72 73 74 20 70 61 67 65 20 6f 66 20 74 68 65 0a  rst page of the.
79c0: 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 20 6c 69  overflow page li
79d0: 73 74 20 2d 20 6f 6d 69 74 74 65 64 20 69 66 20  st - omitted if 
79e0: 61 6c 6c 20 70 61 79 6c 6f 61 64 20 66 69 74 73  all payload fits
79f0: 20 6f 6e 20 74 68 65 20 62 2d 74 72 65 65 20 70   on the b-tree p
7a00: 61 67 65 2e 0a 3c 2f 75 6c 3e 3c 2f 70 3e 3c 2f  age..</ul></p></
7a10: 64 64 3e 0a 0a 3c 64 74 3e 3c 70 3e 54 61 62 6c  dd>..<dt><p>Tabl
7a20: 65 20 42 2d 54 72 65 65 20 49 6e 74 65 72 69 6f  e B-Tree Interio
7a30: 72 20 43 65 6c 6c 3a 3c 2f 70 3e 3c 2f 64 74 3e  r Cell:</p></dt>
7a40: 0a 3c 64 64 3e 3c 70 3e 3c 75 6c 3e 0a 3c 6c 69  .<dd><p><ul>.<li
7a50: 3e 41 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e  >A 4-byte big-en
7a60: 64 69 6e 67 20 70 61 67 65 20 6e 75 6d 62 65 72  ding page number
7a70: 20 77 68 69 63 68 20 69 73 20 74 68 65 20 6c 65   which is the le
7a80: 66 74 20 63 68 69 6c 64 20 70 6f 69 6e 74 65 72  ft child pointer
7a90: 2e 0a 3c 6c 69 3e 41 20 76 61 72 69 6e 74 20 77  ..<li>A varint w
7aa0: 68 69 63 68 20 69 73 20 74 68 65 20 69 6e 74 65  hich is the inte
7ab0: 67 65 72 20 6b 65 79 0a 3c 2f 75 6c 3e 3c 2f 70  ger key.</ul></p
7ac0: 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 70 3e 49  ></dd>..<dt><p>I
7ad0: 6e 64 65 78 20 42 2d 54 72 65 65 20 4c 65 61 66  ndex B-Tree Leaf
7ae0: 20 43 65 6c 6c 3a 3c 2f 70 3e 3c 2f 64 74 3e 0a   Cell:</p></dt>.
7af0: 3c 64 64 3e 3c 70 3e 3c 75 6c 3e 0a 3c 6c 69 3e  <dd><p><ul>.<li>
7b00: 41 20 76 61 72 69 6e 74 20 77 68 69 63 68 20 69  A varint which i
7b10: 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62  s the total numb
7b20: 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 6b  er of bytes of k
7b30: 65 79 20 70 61 79 6c 6f 61 64 2c 20 69 6e 63 6c  ey payload, incl
7b40: 75 64 69 6e 67 20 61 6e 79 0a 6f 76 65 72 66 6c  uding any.overfl
7b50: 6f 77 0a 3c 6c 69 3e 54 68 65 20 69 6e 69 74 69  ow.<li>The initi
7b60: 61 6c 20 70 6f 72 74 69 6f 6e 20 6f 66 20 74 68  al portion of th
7b70: 65 20 70 61 79 6c 6f 61 64 20 74 68 61 74 20 64  e payload that d
7b80: 6f 65 73 20 6e 6f 74 20 73 70 69 6c 6c 20 74 6f  oes not spill to
7b90: 20 6f 76 65 72 66 6c 6f 77 0a 70 61 67 65 73 2e   overflow.pages.
7ba0: 0a 3c 6c 69 3e 41 20 34 2d 62 79 74 65 20 62 69  .<li>A 4-byte bi
7bb0: 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72  g-endian integer
7bc0: 20 70 61 67 65 20 6e 75 6d 62 65 72 20 66 6f 72   page number for
7bd0: 20 74 68 65 20 66 69 72 73 74 20 70 61 67 65 20   the first page 
7be0: 6f 66 20 74 68 65 0a 6f 76 65 72 66 6c 6f 77 20  of the.overflow 
7bf0: 70 61 67 65 20 6c 69 73 74 20 2d 20 6f 6d 69 74  page list - omit
7c00: 74 65 64 20 69 66 20 61 6c 6c 20 70 61 79 6c 6f  ted if all paylo
7c10: 61 64 20 66 69 74 73 20 6f 6e 20 74 68 65 20 62  ad fits on the b
7c20: 2d 74 72 65 65 20 70 61 67 65 2e 0a 3c 2f 75 6c  -tree page..</ul
7c30: 3e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e  ></p></dd>..<dt>
7c40: 3c 70 3e 49 6e 64 65 78 20 42 2d 54 72 65 65 20  <p>Index B-Tree 
7c50: 49 6e 74 65 72 69 6f 72 20 43 65 6c 6c 3a 3c 2f  Interior Cell:</
7c60: 70 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 3c  p></dt>.<dd><p><
7c70: 75 6c 3e 0a 3c 6c 69 3e 41 20 34 2d 62 79 74 65  ul>.<li>A 4-byte
7c80: 20 62 69 67 2d 65 6e 64 69 6e 67 20 70 61 67 65   big-ending page
7c90: 20 6e 75 6d 62 65 72 20 77 68 69 63 68 20 69 73   number which is
7ca0: 20 74 68 65 20 6c 65 66 74 20 63 68 69 6c 64 20   the left child 
7cb0: 70 6f 69 6e 74 65 72 2e 0a 3c 6c 69 3e 41 20 76  pointer..<li>A v
7cc0: 61 72 69 6e 74 20 77 68 69 63 68 20 69 73 20 74  arint which is t
7cd0: 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20  he total number 
7ce0: 6f 66 20 62 79 74 65 73 20 6f 66 20 6b 65 79 20  of bytes of key 
7cf0: 70 61 79 6c 6f 61 64 2c 20 69 6e 63 6c 75 64 69  payload, includi
7d00: 6e 67 20 61 6e 79 0a 6f 76 65 72 66 6c 6f 77 0a  ng any.overflow.
7d10: 3c 6c 69 3e 54 68 65 20 69 6e 69 74 69 61 6c 20  <li>The initial 
7d20: 70 6f 72 74 69 6f 6e 20 6f 66 20 74 68 65 20 70  portion of the p
7d30: 61 79 6c 6f 61 64 20 74 68 61 74 20 64 6f 65 73  ayload that does
7d40: 20 6e 6f 74 20 73 70 69 6c 6c 20 74 6f 20 6f 76   not spill to ov
7d50: 65 72 66 6c 6f 77 0a 70 61 67 65 73 2e 0a 3c 6c  erflow.pages..<l
7d60: 69 3e 41 20 34 2d 62 79 74 65 20 62 69 67 2d 65  i>A 4-byte big-e
7d70: 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20 70 61  ndian integer pa
7d80: 67 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68  ge number for th
7d90: 65 20 66 69 72 73 74 20 70 61 67 65 20 6f 66 20  e first page of 
7da0: 74 68 65 0a 6f 76 65 72 66 6c 6f 77 20 70 61 67  the.overflow pag
7db0: 65 20 6c 69 73 74 20 2d 20 6f 6d 69 74 74 65 64  e list - omitted
7dc0: 20 69 66 20 61 6c 6c 20 70 61 79 6c 6f 61 64 20   if all payload 
7dd0: 66 69 74 73 20 6f 6e 20 74 68 65 20 62 2d 74 72  fits on the b-tr
7de0: 65 65 20 70 61 67 65 2e 0a 3c 2f 75 6c 3e 3c 2f  ee page..</ul></
7df0: 70 3e 3c 2f 64 64 3e 0a 3c 2f 64 6c 3e 3c 2f 62  p></dd>.</dl></b
7e00: 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54  lockquote>..<p>T
7e10: 68 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  he information a
7e20: 62 6f 76 65 20 63 61 6e 20 62 65 20 72 65 63 61  bove can be reca
7e30: 73 74 20 69 6e 74 6f 20 61 20 74 61 62 6c 65 20  st into a table 
7e40: 66 6f 72 6d 61 74 20 61 73 20 66 6f 6c 6c 6f 77  format as follow
7e50: 73 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f  s:</p>..<tcl>hd_
7e60: 66 72 61 67 6d 65 6e 74 20 63 65 6c 6c 66 6f 72  fragment cellfor
7e70: 6d 61 74 20 7b 63 65 6c 6c 20 66 6f 72 6d 61 74  mat {cell format
7e80: 20 73 75 6d 6d 61 72 79 7d 3c 2f 74 63 6c 3e 0a   summary}</tcl>.
7e90: 3c 63 65 6e 74 65 72 3e 0a 3c 69 3e 42 2d 74 72  <center>.<i>B-tr
7ea0: 65 65 20 43 65 6c 6c 20 46 6f 72 6d 61 74 3c 2f  ee Cell Format</
7eb0: 69 3e 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72  i>.<table border
7ec0: 3d 31 20 77 69 64 74 68 3d 22 38 30 25 22 3e 0a  =1 width="80%">.
7ed0: 3c 74 72 3e 3c 74 68 20 72 6f 77 73 70 61 6e 3d  <tr><th rowspan=
7ee0: 32 3e 44 61 74 61 74 79 70 65 0a 20 20 20 20 3c  2>Datatype.    <
7ef0: 74 68 20 63 6f 6c 73 70 61 6e 3d 34 3e 41 70 70  th colspan=4>App
7f00: 65 61 72 73 20 69 6e 2e 2e 2e 0a 20 20 20 20 3c  ears in....    <
7f10: 74 68 20 72 6f 77 73 70 61 6e 3d 32 3e 44 65 73  th rowspan=2>Des
7f20: 63 72 69 70 74 69 6f 6e 0a 3c 74 72 3e 3c 74 68  cription.<tr><th
7f30: 3e 54 61 62 6c 65 20 4c 65 61 66 0a 20 20 20 20  >Table Leaf.    
7f40: 3c 74 68 3e 54 61 62 6c 65 20 49 6e 74 65 72 69  <th>Table Interi
7f50: 6f 72 0a 20 20 20 20 3c 74 68 3e 49 6e 64 65 78  or.    <th>Index
7f60: 20 4c 65 61 66 0a 20 20 20 20 3c 74 68 3e 49 6e   Leaf.    <th>In
7f70: 64 65 78 20 49 6e 74 65 72 69 6f 72 0a 3c 74 72  dex Interior.<tr
7f80: 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65  ><td align=cente
7f90: 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 34 2d 62  r valign=top>4-b
7fa0: 79 74 65 20 69 6e 74 65 67 65 72 0a 20 20 20 20  yte integer.    
7fb0: 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  <td align=center
7fc0: 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 6e 62 73   valign=top>&nbs
7fd0: 70 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e  p;.    <td align
7fe0: 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74  =center valign=t
7ff0: 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20 20 20 20  op>&#x2714;.    
8000: 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  <td align=center
8010: 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 6e 62 73   valign=top>&nbs
8020: 70 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e  p;.    <td align
8030: 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74  =center valign=t
8040: 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20 20 20 20  op>&#x2714;.    
8050: 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 50  <td align=left>P
8060: 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 6c 65  age number of le
8070: 66 74 20 63 68 69 6c 64 0a 3c 74 72 3e 3c 74 64  ft child.<tr><td
8080: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61   align=center va
8090: 6c 69 67 6e 3d 74 6f 70 3e 76 61 72 69 6e 74 0a  lign=top>varint.
80a0: 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65      <td align=ce
80b0: 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e  nter valign=top>
80c0: 26 23 78 32 37 31 34 3b 0a 20 20 20 20 3c 74 64  &#x2714;.    <td
80d0: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61   align=center va
80e0: 6c 69 67 6e 3d 74 6f 70 3e 26 6e 62 73 70 3b 0a  lign=top>&nbsp;.
80f0: 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65      <td align=ce
8100: 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e  nter valign=top>
8110: 26 23 78 32 37 31 34 3b 0a 20 20 20 20 3c 74 64  &#x2714;.    <td
8120: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61   align=center va
8130: 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34  lign=top>&#x2714
8140: 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d  ;.    <td align=
8150: 6c 65 66 74 3e 4e 75 6d 62 65 72 20 6f 66 20 62  left>Number of b
8160: 79 74 65 73 20 6f 66 20 70 61 79 6c 6f 61 64 0a  ytes of payload.
8170: 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65  <tr><td align=ce
8180: 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e  nter valign=top>
8190: 76 61 72 69 6e 74 0a 20 20 20 20 3c 74 64 20 61  varint.    <td a
81a0: 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69  lign=center vali
81b0: 67 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a  gn=top>&#x2714;.
81c0: 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65      <td align=ce
81d0: 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e  nter valign=top>
81e0: 26 23 78 32 37 31 34 3b 0a 20 20 20 20 3c 74 64  &#x2714;.    <td
81f0: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61   align=center va
8200: 6c 69 67 6e 3d 74 6f 70 3e 26 6e 62 73 70 3b 0a  lign=top>&nbsp;.
8210: 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65      <td align=ce
8220: 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e  nter valign=top>
8230: 26 6e 62 73 70 3b 0a 20 20 20 20 3c 74 64 20 61  &nbsp;.    <td a
8240: 6c 69 67 6e 3d 6c 65 66 74 3e 52 6f 77 69 64 0a  lign=left>Rowid.
8250: 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65  <tr><td align=ce
8260: 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e  nter valign=top>
8270: 62 79 74 65 20 61 72 72 61 79 0a 20 20 20 20 3c  byte array.    <
8280: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
8290: 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37  valign=top>&#x27
82a0: 31 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67  14;.    <td alig
82b0: 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d  n=center valign=
82c0: 74 6f 70 3e 26 6e 62 73 70 3b 0a 20 20 20 20 3c  top>&nbsp;.    <
82d0: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
82e0: 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37  valign=top>&#x27
82f0: 31 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67  14;.    <td alig
8300: 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d  n=center valign=
8310: 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20 20 20  top>&#x2714;.   
8320: 20 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e   <td align=left>
8330: 50 61 79 6c 6f 61 64 0a 3c 74 72 3e 3c 74 64 20  Payload.<tr><td 
8340: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c  align=center val
8350: 69 67 6e 3d 74 6f 70 3e 34 2d 62 79 74 65 20 69  ign=top>4-byte i
8360: 6e 74 65 67 65 72 0a 20 20 20 20 3c 74 64 20 61  nteger.    <td a
8370: 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69  lign=center vali
8380: 67 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a  gn=top>&#x2714;.
8390: 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65      <td align=ce
83a0: 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e  nter valign=top>
83b0: 26 6e 62 73 70 3b 0a 20 20 20 20 3c 74 64 20 61  &nbsp;.    <td a
83c0: 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69  lign=center vali
83d0: 67 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a  gn=top>&#x2714;.
83e0: 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65      <td align=ce
83f0: 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e  nter valign=top>
8400: 26 23 78 32 37 31 34 3b 0a 20 20 20 20 3c 74 64  &#x2714;.    <td
8410: 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 50 61 67 65   align=left>Page
8420: 20 6e 75 6d 62 65 72 20 6f 66 20 66 69 72 73 74   number of first
8430: 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 0a 3c   overflow page.<
8440: 2f 74 61 62 6c 65 3e 3c 2f 63 65 6e 74 65 72 3e  /table></center>
8450: 0a 0a 0a 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67  ....<tr><td alig
8460: 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d  n=center valign=
8470: 74 6f 70 3e 0a 0a 3c 70 3e 54 68 65 20 61 6d 6f  top>..<p>The amo
8480: 75 6e 74 20 6f 66 20 70 61 79 6c 6f 61 64 20 74  unt of payload t
8490: 68 61 74 20 73 70 69 6c 6c 73 20 6f 6e 74 6f 20  hat spills onto 
84a0: 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 73 20 61  overflow pages a
84b0: 6c 73 6f 20 64 65 70 65 6e 64 73 20 6f 6e 0a 74  lso depends on.t
84c0: 68 65 20 70 61 67 65 20 74 79 70 65 2e 20 20 46  he page type.  F
84d0: 6f 72 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  or the following
84e0: 20 63 6f 6d 70 75 74 61 74 69 6f 6e 73 2c 20 6c   computations, l
84f0: 65 74 20 55 20 62 65 20 74 68 65 20 75 73 61 62  et U be the usab
8500: 6c 65 20 73 69 7a 65 0a 6f 66 20 61 20 64 61 74  le size.of a dat
8510: 61 62 61 73 65 20 70 61 67 65 2c 20 74 68 65 20  abase page, the 
8520: 74 6f 74 61 6c 20 70 61 67 65 20 73 69 7a 65 20  total page size 
8530: 6c 65 73 73 20 74 68 65 20 72 65 73 65 72 76 65  less the reserve
8540: 64 20 73 70 61 63 65 20 61 74 20 74 68 65 0a 65  d space at the.e
8550: 6e 64 20 6f 66 20 65 61 63 68 20 70 61 67 65 2e  nd of each page.
8560: 20 20 41 6e 64 20 6c 65 74 20 50 20 62 65 20 74    And let P be t
8570: 68 65 20 70 61 79 6c 6f 61 64 20 73 69 7a 65 2e  he payload size.
8580: 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  </p>..<blockquot
8590: 65 3e 3c 64 6c 3e 0a 3c 64 74 3e 54 61 62 6c 65  e><dl>.<dt>Table
85a0: 20 42 2d 54 72 65 65 20 4c 65 61 66 20 43 65 6c   B-Tree Leaf Cel
85b0: 6c 3a 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 0a  l:</dt>.<dd><p>.
85c0: 5e 49 66 20 74 68 65 20 70 61 79 6c 6f 61 64 20  ^If the payload 
85d0: 73 69 7a 65 20 50 20 69 73 20 6c 65 73 73 20 74  size P is less t
85e0: 68 61 6e 20 55 2d 33 36 20 74 68 65 6e 20 74 68  han U-36 then th
85f0: 65 20 65 6e 74 69 72 65 20 70 61 79 6c 6f 61 64  e entire payload
8600: 20 69 73 20 73 74 6f 72 65 64 0a 6f 6e 20 74 68   is stored.on th
8610: 65 20 62 2d 74 72 65 65 20 70 61 67 65 2e 20 20  e b-tree page.  
8620: 5e 28 4c 65 74 20 4d 20 62 65 20 28 28 55 2d 31  ^(Let M be ((U-1
8630: 32 29 2a 33 32 2f 32 35 35 29 2d 32 33 2e 20 20  2)*32/255)-23.  
8640: 49 66 20 50 20 69 73 20 67 72 65 61 74 65 72 20  If P is greater 
8650: 74 68 61 6e 20 55 2d 33 35 0a 74 68 65 6e 20 74  than U-35.then t
8660: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74  he number of byt
8670: 65 20 73 74 6f 72 65 64 20 6f 6e 20 74 68 65 20  e stored on the 
8680: 62 2d 74 72 65 65 20 70 61 67 65 20 69 73 20 74  b-tree page is t
8690: 68 65 20 6c 65 73 73 6f 72 20 6f 66 0a 4d 2b 28  he lessor of.M+(
86a0: 28 50 2d 4d 29 25 28 55 2d 34 29 29 20 61 6e 64  (P-M)%(U-4)) and
86b0: 20 55 2d 33 35 2e 29 5e 0a 3c 2f 70 3e 3c 2f 64   U-35.)^.</p></d
86c0: 64 3e 0a 0a 3c 64 74 3e 54 61 62 6c 65 20 42 2d  d>..<dt>Table B-
86d0: 54 72 65 65 20 49 6e 74 65 72 69 6f 72 20 43 65  Tree Interior Ce
86e0: 6c 6c 3a 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e  ll:</dt>.<dd><p>
86f0: 0a 49 6e 74 65 72 69 6f 72 20 70 61 67 65 73 20  .Interior pages 
8700: 6f 66 20 74 61 62 6c 65 20 62 2d 74 72 65 65 73  of table b-trees
8710: 20 68 61 76 65 20 6e 6f 20 70 61 79 6c 6f 61 64   have no payload
8720: 20 61 6e 64 20 73 6f 20 74 68 65 72 65 20 69 73   and so there is
8730: 20 6e 65 76 65 72 0a 61 6e 79 20 70 61 79 6c 6f   never.any paylo
8740: 61 64 20 74 6f 20 73 70 69 6c 6c 2e 0a 3c 2f 70  ad to spill..</p
8750: 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 49 6e 64 65  ></dd>..<dt>Inde
8760: 78 20 42 2d 54 72 65 65 20 4c 65 61 66 20 4f 72  x B-Tree Leaf Or
8770: 20 49 6e 74 65 72 69 6f 72 20 43 65 6c 6c 3a 3c   Interior Cell:<
8780: 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 0a 5e 49 66  /dt>.<dd><p>.^If
8790: 20 74 68 65 20 70 61 79 6c 6f 61 64 20 73 69 7a   the payload siz
87a0: 65 20 50 20 69 73 20 6c 65 73 73 20 74 68 61 6e  e P is less than
87b0: 20 28 28 55 2d 31 32 29 2a 36 34 2f 32 35 35 29   ((U-12)*64/255)
87c0: 2d 32 32 20 74 68 65 6e 20 74 68 65 20 65 6e 74  -22 then the ent
87d0: 69 72 65 0a 70 61 79 6c 6f 61 64 20 69 73 20 73  ire.payload is s
87e0: 74 6f 72 65 64 20 6f 6e 20 74 68 65 20 62 2d 74  tored on the b-t
87f0: 72 65 65 20 70 61 67 65 2e 20 20 0a 5e 28 4c 65  ree page.  .^(Le
8800: 74 20 4d 20 62 65 20 28 28 55 2d 31 32 29 2a 33  t M be ((U-12)*3
8810: 32 2f 32 35 35 29 2d 32 33 2e 20 20 49 66 20 50  2/255)-23.  If P
8820: 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e   is greater than
8830: 20 28 28 55 2d 31 32 29 2a 36 34 2f 32 35 35 29   ((U-12)*64/255)
8840: 2d 32 33 0a 74 68 65 6e 20 74 68 65 20 6e 75 6d  -23.then the num
8850: 62 65 72 20 6f 66 20 62 79 74 65 20 73 74 6f 72  ber of byte stor
8860: 65 64 20 6f 6e 20 74 68 65 20 62 2d 74 72 65 65  ed on the b-tree
8870: 20 70 61 67 65 20 69 73 20 74 68 65 20 6c 65 73   page is the les
8880: 73 6f 72 20 6f 66 0a 4d 2b 28 28 50 2d 4d 29 25  sor of.M+((P-M)%
8890: 28 55 2d 34 29 29 20 61 6e 64 20 28 28 55 2d 31  (U-4)) and ((U-1
88a0: 32 29 2a 36 34 2f 32 35 35 29 2d 32 33 2e 29 5e  2)*64/255)-23.)^
88b0: 0a 3c 2f 70 3e 3c 2f 64 64 3e 0a 3c 2f 64 6c 3e  .</p></dd>.</dl>
88c0: 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c  </blockquote>..<
88d0: 70 3e 54 68 65 20 6f 76 65 72 66 6c 6f 77 20 74  p>The overflow t
88e0: 68 72 65 73 68 6f 6c 64 73 20 61 72 65 20 64 65  hresholds are de
88f0: 73 69 67 6e 65 64 20 74 6f 20 67 69 76 65 20 61  signed to give a
8900: 20 6d 69 6e 69 6d 75 6d 20 66 61 6e 6f 75 74 20   minimum fanout 
8910: 6f 66 0a 34 20 66 6f 72 20 69 6e 64 65 78 20 62  of.4 for index b
8920: 2d 74 72 65 65 73 20 61 6e 64 20 74 6f 20 6d 61  -trees and to ma
8930: 6b 65 20 73 75 72 65 20 65 6e 6f 75 67 68 20 6f  ke sure enough o
8940: 66 20 74 68 65 20 70 61 79 6c 6f 61 64 0a 69 73  f the payload.is
8950: 20 6f 6e 20 74 68 65 20 62 2d 74 72 65 65 20 70   on the b-tree p
8960: 61 67 65 20 74 68 61 74 20 74 68 65 20 72 65 63  age that the rec
8970: 6f 72 64 20 68 65 61 64 65 72 20 63 61 6e 20 75  ord header can u
8980: 73 75 61 6c 6c 79 20 62 65 20 61 63 63 65 73 73  sually be access
8990: 65 64 0a 77 69 74 68 6f 75 74 20 63 6f 6e 73 75  ed.without consu
89a0: 6c 74 69 6e 67 20 61 6e 20 6f 76 65 72 66 6c 6f  lting an overflo
89b0: 77 20 70 61 67 65 2e 20 20 49 6e 20 68 69 6e 64  w page.  In hind
89c0: 73 69 67 68 74 2c 20 74 68 65 20 64 65 73 69 67  sight, the desig
89d0: 6e 65 72 73 20 6f 66 0a 74 68 65 20 53 51 4c 69  ners of.the SQLi
89e0: 74 65 20 62 2d 74 72 65 65 20 6c 6f 67 69 63 20  te b-tree logic 
89f0: 72 65 61 6c 69 7a 65 20 74 68 61 74 20 74 68 65  realize that the
8a00: 73 65 20 74 68 72 65 73 68 6f 6c 64 73 20 63 6f  se thresholds co
8a10: 75 6c 64 20 68 61 76 65 20 62 65 65 6e 0a 6d 61  uld have been.ma
8a20: 64 65 20 6d 75 63 68 20 73 69 6d 70 6c 65 72 2e  de much simpler.
8a30: 20 20 48 6f 77 65 76 65 72 2c 20 74 68 65 20 63    However, the c
8a40: 6f 6d 70 75 74 61 74 69 6f 6e 73 20 63 61 6e 6e  omputations cann
8a50: 6f 74 20 62 65 20 6e 6f 77 20 62 65 20 63 68 61  ot be now be cha
8a60: 6e 67 65 64 0a 77 69 74 68 6f 75 74 20 72 65 73  nged.without res
8a70: 75 6c 74 69 6e 67 20 69 6e 20 61 6e 20 69 6e 63  ulting in an inc
8a80: 6f 6d 70 61 74 69 62 6c 65 20 66 69 6c 65 20 66  ompatible file f
8a90: 6f 72 6d 61 74 2e 20 20 41 6e 64 20 74 68 65 20  ormat.  And the 
8aa0: 63 75 72 72 65 6e 74 20 63 6f 6d 70 75 74 61 74  current computat
8ab0: 69 6f 6e 73 0a 77 6f 72 6b 20 77 65 6c 6c 2c 20  ions.work well, 
8ac0: 65 76 65 6e 20 69 66 20 74 68 65 79 20 61 72 65  even if they are
8ad0: 20 61 20 6c 69 74 74 6c 65 20 63 6f 6d 70 6c 65   a little comple
8ae0: 78 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 31 2e 36 20  x.</p>..<h3>1.6 
8af0: 43 65 6c 6c 20 50 61 79 6c 6f 61 64 20 4f 76 65  Cell Payload Ove
8b00: 72 66 6c 6f 77 20 50 61 67 65 73 3c 2f 68 33 3e  rflow Pages</h3>
8b10: 0a 0a 3c 70 3e 5e 57 68 65 6e 20 74 68 65 20 70  ..<p>^When the p
8b20: 61 79 6c 6f 61 64 20 6f 66 20 61 20 62 2d 74 72  ayload of a b-tr
8b30: 65 65 20 63 65 6c 6c 20 69 73 20 74 6f 6f 20 6c  ee cell is too l
8b40: 61 72 67 65 20 66 6f 72 20 74 68 65 20 62 2d 74  arge for the b-t
8b50: 72 65 65 20 70 61 67 65 2c 0a 74 68 65 20 73 75  ree page,.the su
8b60: 72 70 6c 75 73 20 69 73 20 73 70 69 6c 6c 65 64  rplus is spilled
8b70: 20 6f 6e 74 6f 20 6f 76 65 72 66 6c 6f 77 20 70   onto overflow p
8b80: 61 67 65 73 2e 20 20 5e 4f 76 65 72 66 6c 6f 77  ages.  ^Overflow
8b90: 20 70 61 67 65 73 20 66 6f 72 6d 20 61 20 6c 69   pages form a li
8ba0: 6e 6b 65 64 0a 6c 69 73 74 2e 20 20 5e 54 68 65  nked.list.  ^The
8bb0: 20 66 69 72 73 74 20 66 6f 75 72 20 62 79 74 65   first four byte
8bc0: 73 20 6f 66 20 65 61 63 68 20 6f 76 65 72 66 6c  s of each overfl
8bd0: 6f 77 20 70 61 67 65 20 61 72 65 20 61 20 62 69  ow page are a bi
8be0: 67 2d 65 6e 64 69 61 6e 0a 69 6e 74 65 67 65 72  g-endian.integer
8bf0: 20 77 68 69 63 68 20 69 73 20 74 68 65 20 70 61   which is the pa
8c00: 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65  ge number of the
8c10: 20 6e 65 78 74 20 70 61 67 65 20 69 6e 20 74 68   next page in th
8c20: 65 20 63 68 61 69 6e 2c 20 6f 72 20 7a 65 72 6f  e chain, or zero
8c30: 0a 66 6f 72 20 74 68 65 20 66 69 6e 61 6c 20 70  .for the final p
8c40: 61 67 65 20 69 6e 20 74 68 65 20 63 68 61 69 6e  age in the chain
8c50: 2e 20 20 5e 54 68 65 20 66 69 66 74 68 20 62 79  .  ^The fifth by
8c60: 74 65 20 74 68 72 6f 75 67 68 20 74 68 65 20 6c  te through the l
8c70: 61 73 74 20 75 73 61 62 6c 65 0a 62 79 74 65 20  ast usable.byte 
8c80: 61 72 65 20 75 73 65 64 20 74 6f 20 68 6f 6c 64  are used to hold
8c90: 20 6f 76 65 72 66 6c 6f 77 20 63 6f 6e 74 65 6e   overflow conten
8ca0: 74 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 31 2e 37 20  t.</p>..<h3>1.7 
8cb0: 50 6f 69 6e 74 65 72 20 4d 61 70 20 6f 72 20 50  Pointer Map or P
8cc0: 74 72 6d 61 70 20 50 61 67 65 73 3c 2f 68 33 3e  trmap Pages</h3>
8cd0: 0a 0a 3c 70 3e 50 6f 69 6e 74 65 72 20 6d 61 70  ..<p>Pointer map
8ce0: 20 6f 72 20 70 74 72 6d 61 70 20 70 61 67 65 73   or ptrmap pages
8cf0: 20 61 72 65 20 65 78 74 72 61 20 70 61 67 65 73   are extra pages
8d00: 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 74   inserted into t
8d10: 68 65 20 64 61 74 61 62 61 73 65 0a 74 6f 20 6d  he database.to m
8d20: 61 6b 65 20 74 68 65 20 6f 70 65 72 61 74 69 6f  ake the operatio
8d30: 6e 20 6f 66 20 5b 61 75 74 6f 5f 76 61 63 75 75  n of [auto_vacuu
8d40: 6d 5d 20 61 6e 64 20 5b 69 6e 63 72 65 6d 65 6e  m] and [incremen
8d50: 74 61 6c 5f 76 61 63 75 75 6d 5d 20 6d 6f 64 65  tal_vacuum] mode
8d60: 73 0a 6d 6f 72 65 20 65 66 66 69 63 69 65 6e 74  s.more efficient
8d70: 2e 20 20 4f 74 68 65 72 20 70 61 67 65 20 74 79  .  Other page ty
8d80: 70 65 73 20 69 6e 20 74 68 65 20 64 61 74 61 62  pes in the datab
8d90: 61 73 65 20 74 79 70 69 63 61 6c 6c 79 20 68 61  ase typically ha
8da0: 76 65 20 70 6f 69 6e 74 65 72 73 0a 66 72 6f 6d  ve pointers.from
8db0: 20 70 61 72 65 6e 74 20 74 6f 20 63 68 69 6c 64   parent to child
8dc0: 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20  .  For example, 
8dd0: 61 20 69 6e 74 65 72 69 6f 72 20 62 2d 74 72 65  a interior b-tre
8de0: 65 20 70 61 67 65 20 63 6f 6e 74 61 69 6e 73 20  e page contains 
8df0: 70 6f 69 6e 74 65 72 73 0a 74 6f 20 69 74 73 20  pointers.to its 
8e00: 63 68 69 6c 64 20 62 2d 74 72 65 65 20 70 61 67  child b-tree pag
8e10: 65 73 20 61 6e 64 20 61 6e 20 6f 76 65 72 66 6c  es and an overfl
8e20: 6f 77 20 63 68 61 69 6e 20 68 61 73 20 61 20 70  ow chain has a p
8e30: 6f 69 6e 74 65 72 0a 66 72 6f 6d 20 65 61 72 6c  ointer.from earl
8e40: 69 65 72 20 74 6f 20 6c 61 74 65 72 20 6c 69 6e  ier to later lin
8e50: 6b 73 20 69 6e 20 74 68 65 20 63 68 61 69 6e 2e  ks in the chain.
8e60: 20 20 41 20 70 74 72 6d 61 70 20 70 61 67 65 20    A ptrmap page 
8e70: 63 6f 6e 74 61 69 6e 73 20 6c 69 6e 6b 61 67 65  contains linkage
8e80: 0a 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 67 6f 69  .information goi
8e90: 6e 67 20 69 6e 20 74 68 65 20 6f 70 70 6f 73 69  ng in the opposi
8ea0: 74 65 20 64 69 72 65 63 74 69 6f 6e 2c 20 66 72  te direction, fr
8eb0: 6f 6d 20 63 68 69 6c 64 20 74 6f 20 70 61 72 65  om child to pare
8ec0: 6e 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 50 74 72  nt.</p>..<p>^Ptr
8ed0: 6d 61 70 20 70 61 67 65 73 20 6d 75 73 74 20 65  map pages must e
8ee0: 78 69 73 74 20 69 6e 20 61 6e 79 20 64 61 74 61  xist in any data
8ef0: 62 61 73 65 20 66 69 6c 65 20 77 68 69 63 68 20  base file which 
8f00: 68 61 73 20 61 20 6e 6f 6e 2d 7a 65 72 6f 0a 6c  has a non-zero.l
8f10: 61 72 67 65 73 74 20 72 6f 6f 74 20 62 2d 74 72  argest root b-tr
8f20: 65 65 20 70 61 67 65 20 76 61 6c 75 65 20 61 74  ee page value at
8f30: 20 6f 66 66 73 65 74 20 35 32 20 69 6e 20 74 68   offset 52 in th
8f40: 65 20 64 61 74 61 62 61 73 65 20 68 65 61 64 65  e database heade
8f50: 72 2e 0a 5e 49 66 20 74 68 65 20 6c 61 72 67 65  r..^If the large
8f60: 73 74 20 72 6f 6f 74 20 62 2d 74 72 65 65 20 70  st root b-tree p
8f70: 61 67 65 20 76 61 6c 75 65 20 69 73 20 7a 65 72  age value is zer
8f80: 6f 2c 20 74 68 65 6e 20 74 68 65 20 64 61 74 61  o, then the data
8f90: 62 61 73 65 20 6d 75 73 74 20 6e 6f 74 0a 63 6f  base must not.co
8fa0: 6e 74 61 69 6e 20 70 74 72 6d 61 70 20 70 61 67  ntain ptrmap pag
8fb0: 65 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 6e 20  es.</p>..<p>^In 
8fc0: 61 20 64 61 74 61 62 61 73 65 20 77 69 74 68 20  a database with 
8fd0: 70 74 72 6d 61 70 20 70 61 67 65 73 2c 20 74 68  ptrmap pages, th
8fe0: 65 20 66 69 72 73 74 20 70 74 72 6d 61 70 20 70  e first ptrmap p
8ff0: 61 67 65 20 69 73 20 70 61 67 65 20 32 2e 0a 41  age is page 2..A
9000: 20 70 74 72 6d 61 70 20 70 61 67 65 20 63 6f 6e   ptrmap page con
9010: 73 69 73 74 73 20 6f 66 20 61 6e 20 61 72 72 61  sists of an arra
9020: 79 20 6f 66 20 35 2d 62 79 74 65 20 65 6e 74 72  y of 5-byte entr
9030: 69 65 73 2e 20 20 4c 65 74 20 4a 20 62 65 20 74  ies.  Let J be t
9040: 68 65 0a 6e 75 6d 62 65 72 20 6f 66 20 35 2d 62  he.number of 5-b
9050: 79 74 65 20 65 6e 74 72 69 65 73 20 74 68 61 74  yte entries that
9060: 20 77 69 6c 6c 20 66 69 74 20 69 6e 20 74 68 65   will fit in the
9070: 20 75 73 61 62 6c 65 20 73 70 61 63 65 20 6f 66   usable space of
9080: 20 61 20 70 61 67 65 2e 0a 28 49 6e 20 6f 74 68   a page..(In oth
9090: 65 72 20 77 6f 72 64 73 2c 20 4a 3d 55 2f 35 2e  er words, J=U/5.
90a0: 29 20 20 5e 54 68 65 20 66 69 72 73 74 20 70 74  )  ^The first pt
90b0: 72 6d 61 70 20 70 61 67 65 20 77 69 6c 6c 20 63  rmap page will c
90c0: 6f 6e 74 61 69 6e 20 62 61 63 6b 20 70 6f 69 6e  ontain back poin
90d0: 74 65 72 0a 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ter.information 
90e0: 66 6f 72 20 70 61 67 65 73 20 33 20 74 68 72 6f  for pages 3 thro
90f0: 75 67 68 20 4a 2b 32 2c 20 69 6e 63 6c 75 73 69  ugh J+2, inclusi
9100: 76 65 2e 20 20 5e 54 68 65 20 73 65 63 6f 6e 64  ve.  ^The second
9110: 20 70 6f 69 6e 74 65 72 20 6d 61 70 0a 70 61 67   pointer map.pag
9120: 65 20 77 69 6c 6c 20 62 65 20 6f 6e 20 70 61 67  e will be on pag
9130: 65 20 4a 2b 33 20 61 6e 64 20 74 68 61 74 20 70  e J+3 and that p
9140: 74 72 6d 61 70 20 70 61 67 65 20 77 69 6c 6c 20  trmap page will 
9150: 70 72 6f 76 69 64 65 20 62 61 63 6b 20 70 6f 69  provide back poi
9160: 6e 74 65 72 0a 69 6e 66 6f 72 6d 61 74 69 6f 6e  nter.information
9170: 20 66 6f 72 20 70 61 67 65 73 20 4a 2b 34 20 74   for pages J+4 t
9180: 68 72 6f 75 67 68 20 32 2a 4a 2b 33 20 69 6e 63  hrough 2*J+3 inc
9190: 6c 75 73 69 76 65 2e 20 20 41 6e 20 73 6f 20 66  lusive.  An so f
91a0: 6f 72 74 68 20 66 6f 72 0a 74 68 65 20 65 6e 74  orth for.the ent
91b0: 69 72 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  ire database fil
91c0: 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28 49 6e 20  e.</p>..<p>^(In 
91d0: 61 20 64 61 74 61 62 61 73 65 20 74 68 61 74 20  a database that 
91e0: 75 73 65 73 20 70 74 72 6d 61 70 20 70 61 67 65  uses ptrmap page
91f0: 73 2c 20 61 6c 6c 20 70 61 67 65 73 20 61 74 20  s, all pages at 
9200: 6c 6f 63 61 74 69 6f 6e 73 20 69 64 65 6e 74 69  locations identi
9210: 66 69 65 64 0a 62 79 20 74 68 65 20 63 6f 6d 70  fied.by the comp
9220: 75 74 61 74 69 6f 6e 20 69 6e 20 74 68 65 20 70  utation in the p
9230: 72 65 76 69 6f 75 73 20 70 61 72 61 67 72 61 70  revious paragrap
9240: 68 20 6d 75 73 74 20 62 65 20 70 74 72 6d 61 70  h must be ptrmap
9250: 20 70 61 67 65 20 61 6e 64 20 6e 6f 0a 6f 74 68   page and no.oth
9260: 65 72 20 70 61 67 65 20 6d 61 79 20 62 65 20 61  er page may be a
9270: 20 70 74 72 6d 61 70 20 70 61 67 65 2e 20 20 45   ptrmap page.  E
9280: 78 63 65 70 74 2c 20 69 66 20 74 68 65 20 62 79  xcept, if the by
9290: 74 65 2d 6c 6f 63 6b 20 70 61 67 65 20 68 61 70  te-lock page hap
92a0: 70 65 6e 73 20 74 6f 0a 66 61 6c 6c 20 6f 6e 20  pens to.fall on 
92b0: 74 68 65 20 73 61 6d 65 20 70 61 67 65 20 6e 75  the same page nu
92c0: 6d 62 65 72 20 61 73 20 61 20 70 74 72 6d 61 70  mber as a ptrmap
92d0: 20 70 61 67 65 2c 20 74 68 65 6e 20 74 68 65 20   page, then the 
92e0: 70 74 72 6d 61 70 20 69 73 20 6d 6f 76 65 64 0a  ptrmap is moved.
92f0: 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  to the following
9300: 20 70 61 67 65 20 66 6f 72 20 74 68 61 74 20 6f   page for that o
9310: 6e 65 20 63 61 73 65 2e 29 5e 3c 2f 70 3e 0a 0a  ne case.)^</p>..
9320: 3c 70 3e 45 61 63 68 20 35 2d 62 79 74 65 20 65  <p>Each 5-byte e
9330: 6e 74 72 79 20 6f 6e 20 61 20 70 74 72 6d 61 70  ntry on a ptrmap
9340: 20 70 61 67 65 20 70 72 6f 76 69 64 65 73 20 62   page provides b
9350: 61 63 6b 2d 6c 69 6e 6b 20 69 6e 66 6f 72 6d 61  ack-link informa
9360: 74 69 6f 6e 20 61 62 6f 75 74 20 0a 6f 6e 65 20  tion about .one 
9370: 6f 66 20 70 61 67 65 73 20 74 68 61 74 20 69 6d  of pages that im
9380: 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77  mediately follow
9390: 20 74 68 65 20 70 6f 69 6e 74 65 72 20 6d 61 70   the pointer map
93a0: 2e 20 20 5e 28 49 66 20 70 61 67 65 20 42 20 69  .  ^(If page B i
93b0: 73 20 61 0a 70 74 72 6d 61 70 20 70 61 67 65 20  s a.ptrmap page 
93c0: 74 68 65 6e 20 62 61 63 6b 2d 6c 69 6e 6b 20 69  then back-link i
93d0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
93e0: 20 70 61 67 65 20 42 2b 31 20 69 73 20 70 72 6f   page B+1 is pro
93f0: 76 69 64 65 64 20 62 79 0a 74 68 65 20 66 69 72  vided by.the fir
9400: 73 74 20 65 6e 74 72 79 20 6f 6e 20 74 68 65 20  st entry on the 
9410: 70 6f 69 6e 74 65 72 20 6d 61 70 2e 20 20 49 6e  pointer map.  In
9420: 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
9430: 70 61 67 65 20 42 2b 32 20 69 73 0a 70 72 6f 76  page B+2 is.prov
9440: 69 64 65 64 20 62 79 20 74 68 65 20 73 65 63 6f  ided by the seco
9450: 6e 64 20 65 6e 74 72 79 2e 20 20 41 6e 64 20 73  nd entry.  And s
9460: 6f 20 66 6f 72 74 68 2e 29 5e 3c 2f 70 3e 0a 0a  o forth.)^</p>..
9470: 3c 70 3e 45 61 63 68 20 35 2d 62 79 74 65 20 70  <p>Each 5-byte p
9480: 74 72 6d 61 70 20 65 6e 74 72 79 20 63 6f 6e 73  trmap entry cons
9490: 69 73 74 73 20 6f 66 20 6f 6e 65 20 62 79 74 65  ists of one byte
94a0: 20 6f 66 20 22 70 61 67 65 20 74 79 70 65 22 20   of "page type" 
94b0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 66 6f 6c 6c  information.foll
94c0: 6f 77 65 64 20 62 79 20 61 20 34 2d 62 79 74 65  owed by a 4-byte
94d0: 20 62 69 67 2d 65 6e 64 69 61 6e 20 70 61 67 65   big-endian page
94e0: 20 6e 75 6d 62 65 72 2e 20 20 46 69 76 65 20 70   number.  Five p
94f0: 61 67 65 20 74 79 70 65 73 20 61 72 65 20 72 65  age types are re
9500: 63 6f 67 6e 69 7a 65 64 3a 0a 3c 2f 70 3e 0a 0a  cognized:.</p>..
9510: 3c 6f 6c 3e 0a 3c 6c 69 3e 41 20 62 2d 74 72 65  <ol>.<li>A b-tre
9520: 65 20 72 6f 6f 74 20 70 61 67 65 2e 20 20 54 68  e root page.  Th
9530: 65 0a 70 61 67 65 20 6e 75 6d 62 65 72 20 73 68  e.page number sh
9540: 6f 75 6c 64 20 62 65 20 7a 65 72 6f 2e 0a 3c 6c  ould be zero..<l
9550: 69 3e 41 20 66 72 65 65 6c 69 73 74 20 70 61 67  i>A freelist pag
9560: 65 2e 20 20 54 68 65 20 70 61 67 65 20 6e 75 6d  e.  The page num
9570: 62 65 72 20 73 68 6f 75 6c 64 20 62 65 0a 7a 65  ber should be.ze
9580: 72 6f 2e 0a 3c 6c 69 3e 54 68 65 20 66 69 72 73  ro..<li>The firs
9590: 74 20 70 61 67 65 20 6f 66 20 61 0a 63 65 6c 6c  t page of a.cell
95a0: 20 70 61 79 6c 6f 61 64 20 6f 76 65 72 66 6c 6f   payload overflo
95b0: 77 20 63 68 61 69 6e 2e 20 20 54 68 65 20 70 61  w chain.  The pa
95c0: 67 65 20 6e 75 6d 62 65 72 20 69 73 20 74 68 65  ge number is the
95d0: 20 62 2d 74 72 65 65 20 70 61 67 65 20 74 68 61   b-tree page tha
95e0: 74 0a 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 63  t.contains the c
95f0: 65 6c 6c 20 77 68 6f 73 65 20 63 6f 6e 74 65 6e  ell whose conten
9600: 74 20 68 61 73 20 6f 76 65 72 66 6c 6f 77 65 64  t has overflowed
9610: 2e 0a 3c 6c 69 3e 41 20 70 61 67 65 20 69 6e 20  ..<li>A page in 
9620: 61 6e 20 6f 76 65 72 66 6c 6f 77 20 63 68 61 69  an overflow chai
9630: 6e 0a 6f 74 68 65 72 20 74 68 61 6e 20 74 68 65  n.other than the
9640: 20 66 69 72 73 74 20 70 61 67 65 2e 20 20 54 68   first page.  Th
9650: 65 20 70 61 67 65 20 6e 75 6d 62 65 72 20 69 73  e page number is
9660: 20 74 68 65 20 70 72 69 6f 72 20 70 61 67 65 20   the prior page 
9670: 6f 66 20 74 68 65 0a 6f 76 65 72 66 6c 6f 77 20  of the.overflow 
9680: 63 68 61 69 6e 2e 0a 3c 6c 69 3e 41 20 6e 6f 6e  chain..<li>A non
9690: 2d 72 6f 6f 74 20 62 2d 74 72 65 65 20 70 61 67  -root b-tree pag
96a0: 65 2e 20 20 54 68 65 0a 70 61 67 65 20 6e 75 6d  e.  The.page num
96b0: 62 65 72 20 69 73 20 74 68 65 20 70 61 72 65 6e  ber is the paren
96c0: 74 20 62 2d 74 72 65 65 20 70 61 67 65 2e 0a 3c  t b-tree page..<
96d0: 2f 6f 6c 3e 0a 0a 3c 70 3e 5e 49 6e 20 61 6e 79  /ol>..<p>^In any
96e0: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 74   database file t
96f0: 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 70 74 72  hat contains ptr
9700: 6d 61 70 20 70 61 67 65 73 2c 20 61 6c 6c 20 62  map pages, all b
9710: 2d 74 72 65 65 20 72 6f 6f 74 20 70 61 67 65 73  -tree root pages
9720: 20 0a 6d 75 73 74 20 63 6f 6d 65 20 62 65 66 6f   .must come befo
9730: 72 65 20 61 6e 79 20 6e 6f 6e 2d 72 6f 6f 74 20  re any non-root 
9740: 62 2d 74 72 65 65 20 70 61 67 65 2c 20 63 65 6c  b-tree page, cel
9750: 6c 20 70 61 79 6c 6f 61 64 20 6f 76 65 72 66 6c  l payload overfl
9760: 6f 77 20 70 61 67 65 2c 20 6f 72 0a 66 72 65 65  ow page, or.free
9770: 6c 69 73 74 20 70 61 67 65 2e 20 20 54 68 69 73  list page.  This
9780: 20 72 65 73 74 72 69 63 74 69 6f 6e 20 65 6e 73   restriction ens
9790: 75 72 65 73 20 74 68 61 74 20 61 20 72 6f 6f 74  ures that a root
97a0: 20 70 61 67 65 20 77 69 6c 6c 20 6e 65 76 65 72   page will never
97b0: 0a 62 65 20 6d 6f 76 65 64 20 64 75 72 69 6e 67  .be moved during
97c0: 20 61 6e 20 61 75 74 6f 2d 76 61 63 75 75 6d 20   an auto-vacuum 
97d0: 6f 72 20 69 6e 63 72 65 6d 65 6e 74 61 6c 2d 76  or incremental-v
97e0: 61 63 75 75 6d 2e 20 20 54 68 65 20 61 75 74 6f  acuum.  The auto
97f0: 2d 76 61 63 75 75 6d 0a 6c 6f 67 69 63 20 69 73  -vacuum.logic is
9800: 20 6e 6f 74 20 74 6f 20 75 70 64 61 74 65 20 74   not to update t
9810: 68 65 20 72 6f 6f 74 5f 70 61 67 65 20 66 69 65  he root_page fie
9820: 6c 64 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65  ld of the sqlite
9830: 5f 6d 61 73 74 65 72 0a 74 61 62 6c 65 20 61 6e  _master.table an
9840: 64 20 73 6f 20 69 74 20 69 73 20 6e 65 63 65 73  d so it is neces
9850: 73 61 72 79 20 74 6f 20 70 72 65 76 65 6e 74 20  sary to prevent 
9860: 72 6f 6f 74 20 70 61 67 65 73 20 66 72 6f 6d 20  root pages from 
9870: 62 65 69 6e 67 20 6d 6f 76 65 64 0a 64 75 72 69  being moved.duri
9880: 6e 67 20 61 6e 20 61 75 74 6f 2d 76 61 63 75 75  ng an auto-vacuu
9890: 6d 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 70 72  m in order to pr
98a0: 65 73 65 72 76 65 20 74 68 65 20 69 6e 74 65 67  eserve the integ
98b0: 72 69 74 79 20 6f 66 20 74 68 65 0a 73 71 6c 69  rity of the.sqli
98c0: 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 2e  te_master table.
98d0: 20 20 5e 52 6f 6f 74 20 70 61 67 65 73 20 61 72    ^Root pages ar
98e0: 65 20 6d 6f 76 65 64 20 74 6f 20 74 68 65 20 62  e moved to the b
98f0: 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 0a  eginning of the.
9900: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 62 79  database file by
9910: 20 74 68 65 20 43 52 45 41 54 45 20 54 41 42 4c   the CREATE TABL
9920: 45 2c 20 43 52 45 41 54 45 20 49 4e 44 45 58 2c  E, CREATE INDEX,
9930: 20 44 52 4f 50 20 54 41 42 4c 45 2c 20 61 6e 64   DROP TABLE, and
9940: 0a 44 52 4f 50 20 49 4e 44 45 58 20 6f 70 65 72  .DROP INDEX oper
9950: 61 74 69 6f 6e 73 2e 3c 2f 70 3e 0a 0a 3c 68 32  ations.</p>..<h2
9960: 3e 32 2e 30 20 53 63 68 65 6d 61 20 4c 61 79 65  >2.0 Schema Laye
9970: 72 3c 2f 68 32 3e 0a 0a 3c 70 3e 54 68 65 20 66  r</h2>..<p>The f
9980: 6f 72 65 67 6f 69 6e 67 20 74 65 78 74 20 64 65  oregoing text de
9990: 73 63 72 69 62 65 73 20 6c 6f 77 2d 6c 65 76 65  scribes low-leve
99a0: 6c 20 61 73 70 65 63 74 73 20 6f 66 20 74 68 65  l aspects of the
99b0: 20 53 51 4c 69 74 65 20 66 69 6c 65 0a 66 6f 72   SQLite file.for
99c0: 6d 61 74 2e 20 20 54 68 65 20 62 2d 74 72 65 65  mat.  The b-tree
99d0: 20 6d 65 63 68 61 6e 69 73 6d 20 70 72 6f 76 69   mechanism provi
99e0: 64 65 73 20 61 20 70 6f 77 65 72 66 75 6c 20 61  des a powerful a
99f0: 6e 64 20 65 66 66 69 63 69 65 6e 74 20 6d 65 61  nd efficient mea
9a00: 6e 73 20 6f 66 0a 61 63 63 65 73 73 69 6e 67 20  ns of.accessing 
9a10: 61 20 6c 61 72 67 65 20 64 61 74 61 20 73 65 74  a large data set
9a20: 2e 20 20 54 68 69 73 20 73 65 63 74 69 6f 6e 20  .  This section 
9a30: 77 69 6c 6c 20 64 65 73 63 72 69 62 65 20 68 6f  will describe ho
9a40: 77 20 74 68 65 0a 6c 6f 77 2d 6c 65 76 65 6c 20  w the.low-level 
9a50: 62 2d 74 72 65 65 20 6c 61 79 65 72 20 69 73 20  b-tree layer is 
9a60: 75 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e  used to implemen
9a70: 74 20 68 69 67 68 65 72 2d 6c 65 76 65 6c 20 53  t higher-level S
9a80: 51 4c 0a 63 61 70 61 62 69 6c 69 74 69 65 73 2e  QL.capabilities.
9a90: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  </p>..<tcl>hd_fr
9aa0: 61 67 6d 65 6e 74 20 72 65 63 6f 72 64 5f 66 6f  agment record_fo
9ab0: 72 6d 61 74 20 7b 72 65 63 6f 72 64 20 66 6f 72  rmat {record for
9ac0: 6d 61 74 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 32  mat}</tcl>.<h3>2
9ad0: 2e 31 20 52 65 63 6f 72 64 20 46 6f 72 6d 61 74  .1 Record Format
9ae0: 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 63 6f  </h3>..<p>The co
9af0: 6e 74 65 6e 74 20 6f 66 20 61 20 74 61 62 6c 65  ntent of a table
9b00: 20 62 2d 74 72 65 65 20 6c 65 61 66 20 70 61 67   b-tree leaf pag
9b10: 65 20 61 6e 64 20 74 68 65 20 6b 65 79 0a 6f 66  e and the key.of
9b20: 20 61 6e 79 20 69 6e 64 65 78 20 62 2d 74 72 65   any index b-tre
9b30: 65 20 70 61 67 65 20 77 61 73 20 63 68 61 72 61  e page was chara
9b40: 63 74 65 72 69 7a 65 64 20 61 62 6f 76 65 0a 61  cterized above.a
9b50: 73 20 61 6e 20 61 72 62 69 74 72 61 72 79 20 73  s an arbitrary s
9b60: 65 71 75 65 6e 63 65 20 6f 66 20 62 79 74 65 73  equence of bytes
9b70: 2e 0a 54 68 65 20 70 72 69 6f 72 20 64 69 73 63  ..The prior disc
9b80: 75 73 73 69 6f 6e 20 6d 65 6e 74 69 6f 6e 65 64  ussion mentioned
9b90: 20 6f 6e 65 20 6b 65 79 20 62 65 69 6e 67 20 6c   one key being l
9ba0: 65 73 73 20 74 68 61 6e 20 61 6e 6f 74 68 65 72  ess than another
9bb0: 2c 20 62 75 74 0a 64 69 64 20 6e 6f 74 20 64 65  , but.did not de
9bc0: 66 69 6e 65 20 77 68 61 74 20 22 6c 65 73 73 20  fine what "less 
9bd0: 74 68 61 6e 22 20 6d 65 61 6e 74 2e 20 20 54 68  than" meant.  Th
9be0: 65 20 63 75 72 72 65 6e 74 20 73 65 63 74 69 6f  e current sectio
9bf0: 6e 20 77 69 6c 6c 20 61 64 64 72 65 73 73 0a 74  n will address.t
9c00: 68 65 73 65 20 6f 6d 69 73 73 69 6f 6e 73 2e 3c  hese omissions.<
9c10: 2f 70 3e 0a 0a 3c 70 3e 50 61 79 6c 6f 61 64 2c  /p>..<p>Payload,
9c20: 20 62 65 20 69 74 20 74 61 62 6c 65 20 63 6f 6e   be it table con
9c30: 74 65 6e 74 20 6f 72 20 69 6e 64 65 78 20 6b 65  tent or index ke
9c40: 79 73 2c 20 69 73 20 61 6c 77 61 79 73 20 69 6e  ys, is always in
9c50: 20 74 68 65 20 22 72 65 63 6f 72 64 0a 66 6f 72   the "record.for
9c60: 6d 61 74 22 2e 20 20 54 68 65 20 72 65 63 6f 72  mat".  The recor
9c70: 64 20 66 6f 72 6d 61 74 20 64 65 66 69 6e 65 73  d format defines
9c80: 20 61 20 73 65 71 75 65 6e 63 65 20 6f 66 20 76   a sequence of v
9c90: 61 6c 75 65 73 20 63 6f 72 72 65 73 70 6f 6e 64  alues correspond
9ca0: 69 6e 67 20 74 6f 0a 74 6f 20 63 6f 6c 75 6d 6e  ing to.to column
9cb0: 73 20 69 6e 20 61 20 74 61 62 6c 65 20 6f 72 20  s in a table or 
9cc0: 69 6e 64 65 78 2e 20 20 54 68 65 20 72 65 63 6f  index.  The reco
9cd0: 72 64 20 66 6f 72 6d 61 74 20 73 70 65 63 69 66  rd format specif
9ce0: 69 65 73 20 74 68 65 20 6e 75 6d 62 65 72 0a 6f  ies the number.o
9cf0: 66 20 63 6f 6c 75 6d 6e 73 2c 20 74 68 65 20 64  f columns, the d
9d00: 61 74 61 74 79 70 65 20 6f 66 20 65 61 63 68 20  atatype of each 
9d10: 63 6f 6c 75 6d 6e 2c 20 61 6e 64 20 74 68 65 20  column, and the 
9d20: 63 6f 6e 74 65 6e 74 20 6f 66 20 65 61 63 68 20  content of each 
9d30: 63 6f 6c 75 6d 6e 2e 3c 2f 70 3e 0a 0a 3c 70 3e  column.</p>..<p>
9d40: 54 68 65 20 72 65 63 6f 72 64 20 66 6f 72 6d 61  The record forma
9d50: 74 20 6d 61 6b 65 73 20 65 78 74 65 6e 73 69 76  t makes extensiv
9d60: 65 20 75 73 65 20 6f 66 20 74 68 65 20 0a 5b 76  e use of the .[v
9d70: 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69  ariable-length i
9d80: 6e 74 65 67 65 72 5d 20 6f 72 20 5b 76 61 72 69  nteger] or [vari
9d90: 6e 74 5d 0a 72 65 70 72 65 73 65 6e 74 61 74 69  nt].representati
9da0: 6f 6e 20 6f 66 20 36 34 2d 62 69 74 20 73 69 67  on of 64-bit sig
9db0: 6e 65 64 20 69 6e 74 65 67 65 72 73 20 64 65 66  ned integers def
9dc0: 69 6e 65 64 20 61 62 6f 76 65 2e 3c 2f 70 3e 0a  ined above.</p>.
9dd0: 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
9de0: 74 20 73 65 72 69 61 6c 74 79 70 65 20 7b 73 65  t serialtype {se
9df0: 72 69 61 6c 20 74 79 70 65 7d 20 7b 73 65 72 69  rial type} {seri
9e00: 61 6c 20 74 79 70 65 73 7d 3c 2f 74 63 6c 3e 0a  al types}</tcl>.
9e10: 3c 70 3e 41 20 72 65 63 6f 72 64 20 63 6f 6e 74  <p>A record cont
9e20: 61 69 6e 73 20 61 20 68 65 61 64 65 72 20 61 6e  ains a header an
9e30: 64 20 61 20 62 6f 64 79 2c 20 69 6e 20 74 68 61  d a body, in tha
9e40: 74 20 6f 72 64 65 72 2e 20 20 0a 5e 28 54 68 65  t order.  .^(The
9e50: 20 68 65 61 64 65 72 20 62 65 67 69 6e 73 20 77   header begins w
9e60: 69 74 68 20 61 20 73 69 6e 67 6c 65 20 76 61 72  ith a single var
9e70: 69 6e 74 20 77 68 69 63 68 20 64 65 74 65 72 6d  int which determ
9e80: 69 6e 65 73 20 74 68 65 20 74 6f 74 61 6c 20 6e  ines the total n
9e90: 75 6d 62 65 72 0a 6f 66 20 62 79 74 65 73 20 69  umber.of bytes i
9ea0: 6e 20 74 68 65 20 68 65 61 64 65 72 2e 20 20 54  n the header.  T
9eb0: 68 65 20 76 61 72 69 6e 74 20 76 61 6c 75 65 20  he varint value 
9ec0: 69 73 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74  is the size of t
9ed0: 68 65 20 68 65 61 64 65 72 20 69 6e 0a 62 79 74  he header in.byt
9ee0: 65 73 20 69 6e 63 6c 75 64 69 6e 67 20 74 68 65  es including the
9ef0: 20 73 69 7a 65 20 76 61 72 69 6e 74 20 69 74 73   size varint its
9f00: 65 6c 66 2e 29 5e 20 20 5e 46 6f 6c 6c 6f 77 69  elf.)^  ^Followi
9f10: 6e 67 20 74 68 65 20 73 69 7a 65 20 76 61 72 69  ng the size vari
9f20: 6e 74 20 61 72 65 0a 6f 6e 65 20 6f 72 20 6d 6f  nt are.one or mo
9f30: 72 65 20 61 64 64 69 74 69 6f 6e 61 6c 20 76 61  re additional va
9f40: 72 69 6e 74 73 2c 20 6f 6e 65 20 70 65 72 20 63  rints, one per c
9f50: 6f 6c 75 6d 6e 2e 20 20 54 68 65 73 65 20 61 64  olumn.  These ad
9f60: 64 69 74 69 6f 6e 61 6c 20 76 61 72 69 6e 74 73  ditional varints
9f70: 0a 61 72 65 20 63 61 6c 6c 65 64 20 22 73 65 72  .are called "ser
9f80: 69 61 6c 20 74 79 70 65 22 20 6e 75 6d 62 65 72  ial type" number
9f90: 73 20 61 6e 64 0a 64 65 74 65 72 6d 69 6e 65 20  s and.determine 
9fa0: 74 68 65 20 64 61 74 61 74 79 70 65 20 6f 66 20  the datatype of 
9fb0: 65 61 63 68 20 63 6f 6c 75 6d 6e 2c 20 61 63 63  each column, acc
9fc0: 6f 72 64 69 6e 67 20 74 6f 20 74 68 65 20 66 6f  ording to the fo
9fd0: 6c 6c 6f 77 69 6e 67 20 6b 65 79 3a 3c 2f 70 3e  llowing key:</p>
9fe0: 0a 0a 3c 63 65 6e 74 65 72 3e 0a 5e 28 3c 69 3e  ..<center>.^(<i>
9ff0: 53 65 72 69 61 6c 20 54 79 70 65 20 43 6f 64 65  Serial Type Code
a000: 73 20 4f 66 20 54 68 65 20 52 65 63 6f 72 64 20  s Of The Record 
a010: 46 6f 72 6d 61 74 3c 2f 69 3e 3c 62 72 3e 0a 3c  Format</i><br>.<
a020: 74 61 62 6c 65 20 77 69 64 74 68 3d 22 38 30 25  table width="80%
a030: 22 20 62 6f 72 64 65 72 3d 31 3e 0a 3c 74 72 3e  " border=1>.<tr>
a040: 3c 74 68 3e 53 65 72 69 61 6c 20 54 79 70 65 3c  <th>Serial Type<
a050: 74 68 3e 43 6f 6e 74 65 6e 74 20 53 69 7a 65 3c  th>Content Size<
a060: 74 68 3e 4d 65 61 6e 69 6e 67 0a 3c 74 72 3e 3c  th>Meaning.<tr><
a070: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
a080: 69 67 6e 3d 63 65 6e 74 65 72 3e 30 3c 74 64 20  ign=center>0<td 
a090: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
a0a0: 3d 63 65 6e 74 65 72 3e 30 3c 74 64 20 61 6c 69  =center>0<td ali
a0b0: 67 6e 3d 6c 65 66 74 3e 0a 4e 55 4c 4c 0a 3c 74  gn=left>.NULL.<t
a0c0: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
a0d0: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 3c   align=center>1<
a0e0: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
a0f0: 69 67 6e 3d 63 65 6e 74 65 72 3e 31 3c 74 64 20  ign=center>1<td 
a100: 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 38 2d 62 69  align=left>.8-bi
a110: 74 20 74 77 6f 73 2d 63 6f 6d 70 6c 65 6d 65 6e  t twos-complemen
a120: 74 20 69 6e 74 65 67 65 72 0a 3c 74 72 3e 3c 74  t integer.<tr><t
a130: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
a140: 67 6e 3d 63 65 6e 74 65 72 3e 32 3c 74 64 20 76  gn=center>2<td v
a150: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
a160: 63 65 6e 74 65 72 3e 32 3c 74 64 20 61 6c 69 67  center>2<td alig
a170: 6e 3d 6c 65 66 74 3e 0a 42 69 67 2d 65 6e 64 69  n=left>.Big-endi
a180: 61 6e 20 31 36 2d 62 69 74 20 74 77 6f 73 2d 63  an 16-bit twos-c
a190: 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 74 65 67 65  omplement intege
a1a0: 72 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  r.<tr><td valign
a1b0: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
a1c0: 72 3e 33 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  r>3<td valign=to
a1d0: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 33  p align=center>3
a1e0: 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a  <td align=left>.
a1f0: 42 69 67 2d 65 6e 64 69 61 6e 20 32 34 2d 62 69  Big-endian 24-bi
a200: 74 20 74 77 6f 73 2d 63 6f 6d 70 6c 65 6d 65 6e  t twos-complemen
a210: 74 20 69 6e 74 65 67 65 72 0a 3c 74 72 3e 3c 74  t integer.<tr><t
a220: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
a230: 67 6e 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20 76  gn=center>4<td v
a240: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
a250: 63 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69 67  center>4<td alig
a260: 6e 3d 6c 65 66 74 3e 0a 42 69 67 2d 65 6e 64 69  n=left>.Big-endi
a270: 61 6e 20 33 32 2d 62 69 74 20 74 77 6f 73 2d 63  an 32-bit twos-c
a280: 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 74 65 67 65  omplement intege
a290: 72 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  r.<tr><td valign
a2a0: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
a2b0: 72 3e 35 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  r>5<td valign=to
a2c0: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 36  p align=center>6
a2d0: 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a  <td align=left>.
a2e0: 42 69 67 2d 65 6e 64 69 61 6e 20 34 38 2d 62 69  Big-endian 48-bi
a2f0: 74 20 74 77 6f 73 2d 63 6f 6d 70 6c 65 6d 65 6e  t twos-complemen
a300: 74 20 69 6e 74 65 67 65 72 0a 3c 74 72 3e 3c 74  t integer.<tr><t
a310: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
a320: 67 6e 3d 63 65 6e 74 65 72 3e 36 3c 74 64 20 76  gn=center>6<td v
a330: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
a340: 63 65 6e 74 65 72 3e 38 3c 74 64 20 61 6c 69 67  center>8<td alig
a350: 6e 3d 6c 65 66 74 3e 0a 42 69 67 2d 65 6e 64 69  n=left>.Big-endi
a360: 61 6e 20 36 34 2d 62 69 74 20 74 77 6f 73 2d 63  an 64-bit twos-c
a370: 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 74 65 67 65  omplement intege
a380: 72 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  r.<tr><td valign
a390: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
a3a0: 72 3e 37 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  r>7<td valign=to
a3b0: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 38  p align=center>8
a3c0: 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a  <td align=left>.
a3d0: 42 69 67 2d 65 6e 64 69 61 6e 20 49 45 45 45 20  Big-endian IEEE 
a3e0: 37 35 34 2d 32 30 30 38 20 36 34 2d 62 69 74 20  754-2008 64-bit 
a3f0: 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 6e  floating point n
a400: 75 6d 62 65 72 0a 3c 74 72 3e 3c 74 64 20 76 61  umber.<tr><td va
a410: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
a420: 65 6e 74 65 72 3e 38 3c 74 64 20 76 61 6c 69 67  enter>8<td valig
a430: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
a440: 65 72 3e 30 3c 74 64 20 61 6c 69 67 6e 3d 6c 65  er>0<td align=le
a450: 66 74 3e 0a 49 6e 74 65 67 65 72 20 63 6f 6e 73  ft>.Integer cons
a460: 74 61 6e 74 20 30 2e 20 20 4f 6e 6c 79 20 61 76  tant 0.  Only av
a470: 61 69 6c 61 62 6c 65 20 66 6f 72 20 73 63 68 65  ailable for sche
a480: 6d 61 20 66 6f 72 6d 61 74 20 34 20 61 6e 64 20  ma format 4 and 
a490: 68 69 67 68 65 72 2e 0a 3c 74 72 3e 3c 74 64 20  higher..<tr><td 
a4a0: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
a4b0: 3d 63 65 6e 74 65 72 3e 39 3c 74 64 20 76 61 6c  =center>9<td val
a4c0: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
a4d0: 6e 74 65 72 3e 30 3c 74 64 20 61 6c 69 67 6e 3d  nter>0<td align=
a4e0: 6c 65 66 74 3e 0a 49 6e 74 65 67 65 72 20 63 6f  left>.Integer co
a4f0: 6e 73 74 61 6e 74 20 31 2e 20 20 4f 6e 6c 79 20  nstant 1.  Only 
a500: 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 73 63  available for sc
a510: 68 65 6d 61 20 66 6f 72 6d 61 74 20 34 20 61 6e  hema format 4 an
a520: 64 20 68 69 67 68 65 72 2e 0a 3c 74 72 3e 3c 74  d higher..<tr><t
a530: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
a540: 67 6e 3d 63 65 6e 74 65 72 3e 31 30 2c 31 31 0a  gn=center>10,11.
a550: 20 20 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74      <td valign=t
a560: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
a570: 26 6e 62 73 70 3b 3c 74 64 20 61 6c 69 67 6e 3d  &nbsp;<td align=
a580: 6c 65 66 74 3e 0a 3c 69 3e 4e 6f 74 20 75 73 65  left>.<i>Not use
a590: 64 2e 20 20 52 65 73 65 72 76 65 64 20 66 6f 72  d.  Reserved for
a5a0: 20 65 78 70 61 6e 73 69 6f 6e 2e 3c 2f 69 3e 0a   expansion.</i>.
a5b0: 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74  <tr><td valign=t
a5c0: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
a5d0: 4e 26 23 78 32 32 36 35 3b 31 32 20 61 6e 64 20  N&#x2265;12 and 
a5e0: 65 76 65 6e 0a 20 20 20 20 3c 74 64 20 76 61 6c  even.    <td val
a5f0: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
a600: 6e 74 65 72 3e 28 4e 2d 31 32 29 2f 32 3c 74 64  nter>(N-12)/2<td
a610: 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 41 20 73   align=left>.A s
a620: 74 72 69 6e 67 20 69 6e 20 74 68 65 20 64 61 74  tring in the dat
a630: 61 62 61 73 65 20 65 6e 63 6f 64 69 6e 67 20 61  abase encoding a
a640: 6e 64 20 28 4e 2d 31 32 29 2f 32 20 62 79 74 65  nd (N-12)/2 byte
a650: 73 20 69 6e 20 6c 65 6e 67 74 68 2e 0a 54 68 65  s in length..The
a660: 20 6e 75 6c 20 74 65 72 6d 69 6e 61 74 6f 72 20   nul terminator 
a670: 69 73 20 6f 6d 69 74 74 65 64 2e 0a 3c 74 72 3e  is omitted..<tr>
a680: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
a690: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 4e 26 23 78  lign=center>N&#x
a6a0: 32 32 36 35 3b 31 33 20 61 6e 64 20 6f 64 64 0a  2265;13 and odd.
a6b0: 20 20 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74      <td valign=t
a6c0: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
a6d0: 28 4e 2d 31 33 29 2f 32 3c 74 64 20 61 6c 69 67  (N-13)/2<td alig
a6e0: 6e 3d 6c 65 66 74 3e 0a 41 20 42 4c 4f 42 20 74  n=left>.A BLOB t
a6f0: 68 61 74 20 69 73 20 28 4e 2d 31 33 29 2f 32 20  hat is (N-13)/2 
a700: 62 79 74 65 73 20 69 6e 20 6c 65 6e 67 74 68 0a  bytes in length.
a710: 3c 2f 74 61 62 6c 65 3e 3c 2f 63 65 6e 74 65 72  </table></center
a720: 3e 29 5e 0a 0a 3c 70 3e 4e 6f 74 65 20 74 68 61  >)^..<p>Note tha
a730: 74 20 62 65 63 61 75 73 65 20 6f 66 20 74 68 65  t because of the
a740: 20 77 61 79 20 76 61 72 69 6e 74 73 20 61 72 65   way varints are
a750: 20 64 65 66 69 6e 65 64 2c 20 74 68 65 20 68 65   defined, the he
a760: 61 64 65 72 20 73 69 7a 65 20 76 61 72 69 6e 74  ader size varint
a770: 0a 61 6e 64 20 73 65 72 69 61 6c 20 74 79 70 65  .and serial type
a780: 20 76 61 72 69 6e 74 73 20 77 69 6c 6c 20 75 73   varints will us
a790: 75 61 6c 6c 79 20 63 6f 6e 73 69 73 74 20 6f 66  ually consist of
a7a0: 20 61 20 73 69 6e 67 6c 65 20 62 79 74 65 2e 20   a single byte. 
a7b0: 20 54 68 65 0a 73 65 72 69 61 6c 20 74 79 70 65   The.serial type
a7c0: 20 76 61 72 69 6e 74 73 20 66 6f 72 20 6c 61 72   varints for lar
a7d0: 67 65 20 73 74 72 69 6e 67 73 20 61 6e 64 20 42  ge strings and B
a7e0: 4c 4f 42 73 20 6d 69 67 68 74 20 65 78 74 65 6e  LOBs might exten
a7f0: 64 20 74 6f 20 74 77 6f 20 6f 72 20 74 68 72 65  d to two or thre
a800: 65 0a 62 79 74 65 20 76 61 72 69 6e 74 73 2c 20  e.byte varints, 
a810: 62 75 74 20 74 68 61 74 20 69 73 20 74 68 65 20  but that is the 
a820: 65 78 63 65 70 74 69 6f 6e 20 72 61 74 68 65 72  exception rather
a830: 20 74 68 61 6e 20 74 68 65 20 72 75 6c 65 2e 20   than the rule. 
a840: 0a 54 68 65 20 76 61 72 69 6e 74 20 66 6f 72 6d  .The varint form
a850: 61 74 20 69 73 20 76 65 72 79 20 65 66 66 69 63  at is very effic
a860: 69 65 6e 74 20 61 74 20 63 6f 64 69 6e 67 20 74  ient at coding t
a870: 68 65 20 72 65 63 6f 72 64 20 68 65 61 64 65 72  he record header
a880: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 76 61  .</p>..<p>The va
a890: 6c 75 65 73 20 66 6f 72 20 65 61 63 68 20 63 6f  lues for each co
a8a0: 6c 75 6d 6e 20 69 6e 20 74 68 65 20 72 65 63 6f  lumn in the reco
a8b0: 72 64 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 66  rd immediately f
a8c0: 6f 6c 6c 6f 77 20 74 68 65 20 68 65 61 64 65 72  ollow the header
a8d0: 2e 0a 5e 28 4e 6f 74 65 20 74 68 61 74 20 66 6f  ..^(Note that fo
a8e0: 72 20 73 65 72 69 61 6c 20 74 79 70 65 73 20 30  r serial types 0
a8f0: 2c 20 38 2c 20 39 2c 20 31 32 2c 20 61 6e 64 20  , 8, 9, 12, and 
a900: 31 33 2c 20 74 68 65 20 76 61 6c 75 65 20 69 73  13, the value is
a910: 20 7a 65 72 6f 20 62 79 74 65 73 20 69 6e 0a 6c   zero bytes in.l
a920: 65 6e 67 74 68 2e 20 20 49 66 20 61 6c 6c 20 63  ength.  If all c
a930: 6f 6c 75 6d 6e 73 20 61 72 65 20 6f 66 20 74 68  olumns are of th
a940: 65 73 65 20 74 79 70 65 73 20 74 68 65 6e 20 74  ese types then t
a950: 68 65 20 62 6f 64 79 20 73 65 63 74 69 6f 6e 20  he body section 
a960: 6f 66 20 74 68 65 0a 72 65 63 6f 72 64 20 69 73  of the.record is
a970: 20 65 6d 70 74 79 2e 29 5e 3c 2f 70 3e 0a 0a 3c   empty.)^</p>..<
a980: 68 33 3e 32 2e 32 20 52 65 63 6f 72 64 20 53 6f  h3>2.2 Record So
a990: 72 74 20 4f 72 64 65 72 3c 2f 68 33 3e 0a 0a 3c  rt Order</h3>..<
a9a0: 70 3e 54 68 65 20 6f 72 64 65 72 20 6f 66 20 6b  p>The order of k
a9b0: 65 79 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20  eys in an index 
a9c0: 62 2d 74 72 65 65 20 69 73 20 64 65 74 65 72 6d  b-tree is determ
a9d0: 69 6e 65 64 20 62 79 20 74 68 65 20 73 6f 72 74  ined by the sort
a9e0: 20 6f 72 64 65 72 20 6f 66 0a 74 68 65 20 72 65   order of.the re
a9f0: 63 6f 72 64 73 20 74 68 61 74 20 74 68 65 20 6b  cords that the k
aa00: 65 79 73 20 72 65 70 72 65 73 65 6e 74 2e 20 20  eys represent.  
aa10: 52 65 63 6f 72 64 20 63 6f 6d 70 61 72 69 73 6f  Record compariso
aa20: 6e 20 70 72 6f 63 65 65 64 73 20 63 6f 6c 75 6d  n proceeds colum
aa30: 6e 0a 62 79 20 63 6f 6c 75 6d 6e 2e 20 20 43 6f  n.by column.  Co
aa40: 6c 75 6d 6e 73 20 6f 66 20 61 20 72 65 63 6f 72  lumns of a recor
aa50: 64 20 61 72 65 20 65 78 61 6d 69 6e 65 64 20 66  d are examined f
aa60: 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68  rom left to righ
aa70: 74 2e 20 20 54 68 65 0a 66 69 72 73 74 20 70 61  t.  The.first pa
aa80: 69 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 74 68  ir of columns th
aa90: 61 74 20 61 72 65 20 6e 6f 74 20 65 71 75 61 6c  at are not equal
aaa0: 20 64 65 74 65 72 6d 69 6e 65 73 20 74 68 65 20   determines the 
aab0: 72 65 6c 61 74 69 76 65 20 6f 72 64 65 72 0a 6f  relative order.o
aac0: 66 20 74 68 65 20 74 77 6f 20 72 65 63 6f 72 64  f the two record
aad0: 73 2e 20 20 54 68 65 20 73 6f 72 74 20 6f 72 64  s.  The sort ord
aae0: 65 72 20 6f 66 20 69 6e 64 69 76 69 64 75 61 6c  er of individual
aaf0: 20 63 6f 6c 75 6d 6e 73 20 69 73 20 61 73 0a 66   columns is as.f
ab00: 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 6f 6c  ollows:</p>..<ol
ab10: 3e 0a 3c 6c 69 3e 5e 4e 55 4c 4c 20 76 61 6c 75  >.<li>^NULL valu
ab20: 65 73 20 28 73 65 72 69 61 6c 20 74 79 70 65 20  es (serial type 
ab30: 30 29 20 73 6f 72 74 20 66 69 72 73 74 0a 3c 6c  0) sort first.<l
ab40: 69 3e 5e 4e 75 6d 65 72 69 63 20 76 61 6c 75 65  i>^Numeric value
ab50: 73 20 28 73 65 72 69 61 6c 20 74 79 70 65 73 20  s (serial types 
ab60: 31 20 74 68 72 6f 75 67 68 20 39 29 20 73 6f 72  1 through 9) sor
ab70: 74 20 6e 65 78 74 20 61 6e 64 20 69 6e 20 6e 75  t next and in nu
ab80: 6d 65 72 69 63 20 6f 72 64 65 72 0a 3c 6c 69 3e  meric order.<li>
ab90: 5e 54 65 78 74 20 76 61 6c 75 65 73 20 28 65 76  ^Text values (ev
aba0: 65 6e 20 73 65 72 69 61 6c 20 74 79 70 65 73 20  en serial types 
abb0: 31 32 20 61 6e 64 20 6c 61 72 67 65 72 29 20 73  12 and larger) s
abc0: 6f 72 74 20 6e 65 78 74 20 69 6e 20 74 68 65 20  ort next in the 
abd0: 6f 72 64 65 72 0a 20 20 20 20 64 65 74 65 72 6d  order.    determ
abe0: 69 6e 65 64 20 62 79 20 74 68 65 20 63 6f 6c 75  ined by the colu
abf0: 6d 6e 73 20 5b 63 6f 6c 6c 61 74 69 6e 67 20 66  mns [collating f
ac00: 75 6e 63 74 69 6f 6e 5d 0a 3c 6c 69 3e 5e 42 4c  unction].<li>^BL
ac10: 4f 42 20 76 61 6c 75 65 73 20 28 6f 64 64 20 73  OB values (odd s
ac20: 65 72 69 61 6c 20 74 79 70 65 73 20 31 33 20 61  erial types 13 a
ac30: 6e 64 20 6c 61 72 67 65 72 29 20 73 6f 72 74 20  nd larger) sort 
ac40: 6c 61 73 74 20 69 6e 20 6f 72 64 65 72 20 0a 20  last in order . 
ac50: 20 20 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79     determined by
ac60: 20 6d 65 6d 63 6d 70 28 29 2e 0a 3c 2f 6f 6c 3e   memcmp()..</ol>
ac70: 0a 0a 3c 70 3e 41 20 5b 63 6f 6c 6c 61 74 69 6e  ..<p>A [collatin
ac80: 67 20 66 75 6e 63 74 69 6f 6e 5d 20 66 6f 72 20  g function] for 
ac90: 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 73 20 6e  each column is n
aca0: 65 63 65 73 73 61 72 79 20 69 6e 20 6f 72 64 65  ecessary in orde
acb0: 72 20 74 6f 20 63 6f 6d 70 75 74 65 0a 74 68 65  r to compute.the
acc0: 20 6f 72 64 65 72 20 6f 66 20 74 65 78 74 20 66   order of text f
acd0: 69 65 6c 64 73 2e 20 20 5e 53 51 4c 69 74 65 20  ields.  ^SQLite 
ace0: 64 65 66 69 6e 65 73 20 74 68 72 65 65 20 62 75  defines three bu
acf0: 69 6c 74 2d 69 6e 20 63 6f 6c 6c 61 74 69 6e 67  ilt-in collating
ad00: 20 66 75 6e 63 74 69 6f 6e 73 3a 0a 3c 2f 70 3e   functions:.</p>
ad10: 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 74  ..<blockquote><t
ad20: 61 62 6c 65 20 62 6f 72 64 65 72 3d 30 20 63 65  able border=0 ce
ad30: 6c 6c 73 70 61 63 69 6e 67 3d 31 30 3e 0a 3c 74  llspacing=10>.<t
ad40: 72 3e 5e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  r>^<td valign=to
ad50: 70 3e 42 49 4e 41 52 59 0a 20 20 20 20 3c 74 64  p>BINARY.    <td
ad60: 3e 53 74 72 69 6e 67 73 20 61 72 65 20 63 6f 6d  >Strings are com
ad70: 70 61 72 65 64 20 62 79 74 65 20 62 79 20 62 79  pared byte by by
ad80: 74 65 20 75 73 69 6e 67 20 74 68 65 20 6d 65 6d  te using the mem
ad90: 63 6d 70 28 29 20 66 75 6e 63 74 69 6f 6e 0a 20  cmp() function. 
ada0: 20 20 20 20 20 20 20 66 72 6f 6d 20 74 68 65 20         from the 
adb0: 73 74 61 6e 64 61 72 64 20 43 20 6c 69 62 72 61  standard C libra
adc0: 72 79 2e 0a 3c 74 72 3e 5e 3c 74 64 20 76 61 6c  ry..<tr>^<td val
add0: 69 67 6e 3d 74 6f 70 3e 4e 4f 43 41 53 45 0a 20  ign=top>NOCASE. 
ade0: 20 20 20 3c 74 64 3e 4c 69 6b 65 20 42 49 4e 41     <td>Like BINA
adf0: 52 59 20 65 78 63 65 70 74 20 74 68 61 74 20 75  RY except that u
ae00: 70 70 65 72 63 61 73 65 20 41 53 43 49 49 20 63  ppercase ASCII c
ae10: 68 61 72 61 63 74 65 72 73 20 28 27 41 27 20 74  haracters ('A' t
ae20: 68 72 6f 75 67 68 20 27 5a 27 29 0a 20 20 20 20  hrough 'Z').    
ae30: 20 20 20 20 61 72 65 20 66 6f 6c 64 65 64 20 69      are folded i
ae40: 6e 74 6f 20 74 68 65 69 72 20 6c 6f 77 65 72 63  nto their lowerc
ae50: 61 73 65 20 65 71 75 69 76 61 6c 65 6e 74 73 20  ase equivalents 
ae60: 70 72 69 6f 72 20 74 6f 20 72 75 6e 6e 69 6e 67  prior to running
ae70: 20 74 68 65 0a 20 20 20 20 20 20 20 20 63 6f 6d   the.        com
ae80: 70 61 72 69 73 6f 6e 2e 20 20 4e 6f 74 65 20 74  parison.  Note t
ae90: 68 61 74 20 6f 6e 6c 79 20 41 53 43 49 49 20 63  hat only ASCII c
aea0: 68 61 72 61 63 74 65 72 73 20 61 72 65 20 63 61  haracters are ca
aeb0: 73 65 2d 66 6f 6c 64 65 64 2e 20 20 5e 4e 4f 43  se-folded.  ^NOC
aec0: 41 53 45 0a 20 20 20 20 20 20 20 20 64 6f 65 73  ASE.        does
aed0: 20 6e 6f 74 20 69 6d 70 6c 65 6d 65 6e 74 20 61   not implement a
aee0: 20 67 65 6e 65 72 61 6c 20 70 75 72 70 6f 73 65   general purpose
aef0: 20 75 6e 69 63 6f 64 65 20 63 61 73 65 6c 65 73   unicode caseles
af00: 73 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 0a 3c 74  s comparison..<t
af10: 72 3e 5e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  r>^<td valign=to
af20: 70 3e 52 54 52 49 4d 0a 20 20 20 20 3c 74 64 3e  p>RTRIM.    <td>
af30: 4c 69 6b 65 20 42 49 4e 41 52 59 20 65 78 63 65  Like BINARY exce
af40: 70 74 20 74 68 61 74 20 73 70 61 63 65 73 20 61  pt that spaces a
af50: 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  t the end of the
af60: 20 73 74 72 69 6e 67 20 61 72 65 20 65 6c 69 64   string are elid
af70: 65 64 0a 20 20 20 20 20 20 20 20 70 72 69 6f 72  ed.        prior
af80: 20 74 6f 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 0a   to comparison..
af90: 3c 2f 74 61 62 6c 65 3e 3c 2f 62 6c 6f 63 6b 71  </table></blockq
afa0: 75 6f 74 65 3e 0a 0a 3c 70 3e 5e 41 64 64 69 74  uote>..<p>^Addit
afb0: 69 6f 6e 61 6c 20 61 70 70 6c 69 63 61 74 69 6f  ional applicatio
afc0: 6e 2d 73 70 65 63 69 66 69 63 20 63 6f 6c 6c 61  n-specific colla
afd0: 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 73 20 63  ting functions c
afe0: 61 6e 20 62 65 20 61 64 64 65 64 20 74 6f 0a 53  an be added to.S
aff0: 51 4c 69 74 65 20 75 73 69 6e 67 20 74 68 65 20  QLite using the 
b000: 5b 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f  [sqlite3_create_
b010: 63 6f 6c 6c 61 74 69 6f 6e 28 29 5d 20 69 6e 74  collation()] int
b020: 65 72 66 61 63 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e  erface.</p>..<p>
b030: 5e 54 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6c  ^The default col
b040: 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20  lating function 
b050: 66 6f 72 20 61 6c 6c 20 73 74 72 69 6e 67 73 20  for all strings 
b060: 69 73 20 42 49 4e 41 52 59 2e 0a 5e 41 6c 74 65  is BINARY..^Alte
b070: 72 6e 61 74 69 76 65 20 63 6f 6c 6c 61 74 69 6e  rnative collatin
b080: 67 20 66 75 6e 63 74 69 6f 6e 73 20 66 6f 72 20  g functions for 
b090: 74 61 62 6c 65 20 63 6f 6c 75 6d 6e 73 20 63 61  table columns ca
b0a0: 6e 20 62 65 20 73 70 65 63 69 66 69 65 64 20 69  n be specified i
b0b0: 6e 20 74 68 65 0a 5b 43 52 45 41 54 45 20 54 41  n the.[CREATE TA
b0c0: 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74 20 75  BLE] statement u
b0d0: 73 69 6e 67 20 74 68 65 20 43 4f 4c 4c 41 54 45  sing the COLLATE
b0e0: 20 63 6c 61 75 73 65 20 6f 6e 20 74 68 65 20 5b   clause on the [
b0f0: 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f  column definitio
b100: 6e 5d 2e 0a 5e 57 68 65 6e 20 61 20 63 6f 6c 75  n]..^When a colu
b110: 6d 6e 20 69 73 20 69 6e 64 65 78 65 64 2c 20 74  mn is indexed, t
b120: 68 65 20 73 61 6d 65 20 63 6f 6c 6c 61 74 69 6e  he same collatin
b130: 67 20 66 75 6e 63 74 69 6f 6e 20 73 70 65 63 69  g function speci
b140: 66 69 65 64 20 69 6e 20 74 68 65 0a 5b 43 52 45  fied in the.[CRE
b150: 41 54 45 20 54 41 42 4c 45 5d 20 73 74 61 74 65  ATE TABLE] state
b160: 6d 65 6e 74 20 69 73 20 75 73 65 64 20 66 6f 72  ment is used for
b170: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 6e 20 74   the column in t
b180: 68 65 20 69 6e 64 65 78 2c 20 62 79 20 64 65 66  he index, by def
b190: 61 75 6c 74 2c 0a 74 68 6f 75 67 68 20 74 68 69  ault,.though thi
b1a0: 73 20 63 61 6e 20 62 65 20 6f 76 65 72 72 69 64  s can be overrid
b1b0: 64 65 6e 20 75 73 69 6e 67 20 61 20 43 4f 4c 4c  den using a COLL
b1c0: 41 54 45 20 63 6c 61 75 73 65 20 69 6e 20 74 68  ATE clause in th
b1d0: 65 20 0a 5b 43 52 45 41 54 45 20 49 4e 44 45 58  e .[CREATE INDEX
b1e0: 5d 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a 3c 68  ] statement...<h
b1f0: 33 3e 32 2e 33 20 52 65 70 72 65 73 65 6e 74 61  3>2.3 Representa
b200: 74 69 6f 6e 20 4f 66 20 53 51 4c 20 54 61 62 6c  tion Of SQL Tabl
b210: 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 45 61 63 68  es</h3>..<p>Each
b220: 20 6f 72 64 69 6e 61 72 79 20 53 51 4c 20 74 61   ordinary SQL ta
b230: 62 6c 65 20 69 6e 20 74 68 65 20 64 61 74 61 62  ble in the datab
b240: 61 73 65 20 73 63 68 65 6d 61 20 69 73 20 72 65  ase schema is re
b250: 70 72 65 73 65 6e 74 65 64 20 6f 6e 20 64 69 73  presented on dis
b260: 6b 0a 62 79 20 61 20 74 61 62 6c 65 20 62 2d 74  k.by a table b-t
b270: 72 65 65 2e 20 20 45 61 63 68 20 65 6e 74 72 79  ree.  Each entry
b280: 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 62 2d   in the table b-
b290: 74 72 65 65 20 63 6f 72 72 65 73 70 6f 6e 64 73  tree corresponds
b2a0: 20 74 6f 20 61 20 72 6f 77 0a 6f 66 20 74 68 65   to a row.of the
b2b0: 20 53 51 4c 20 74 61 62 6c 65 2e 20 20 54 68 65   SQL table.  The
b2c0: 20 5b 72 6f 77 69 64 5d 20 6f 66 20 74 68 65 20   [rowid] of the 
b2d0: 53 51 4c 20 74 61 62 6c 65 20 69 73 20 74 68 65  SQL table is the
b2e0: 20 36 34 2d 62 69 74 20 73 69 67 6e 65 64 0a 69   64-bit signed.i
b2f0: 6e 74 65 67 65 72 20 6b 65 79 20 66 6f 72 20 65  nteger key for e
b300: 61 63 68 20 65 6e 74 72 79 20 69 6e 20 74 68 65  ach entry in the
b310: 20 74 61 62 6c 65 20 62 2d 74 72 65 65 2e 3c 2f   table b-tree.</
b320: 70 3e 0a 0a 3c 70 3e 54 68 65 20 63 6f 6e 74 65  p>..<p>The conte
b330: 6e 74 20 6f 66 20 65 61 63 68 20 53 51 4c 20 74  nt of each SQL t
b340: 61 62 6c 65 20 72 6f 77 20 69 73 20 73 74 6f 72  able row is stor
b350: 65 64 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ed in the databa
b360: 73 65 20 66 69 6c 65 20 62 79 0a 66 69 72 73 74  se file by.first
b370: 20 63 6f 6d 62 69 6e 69 6e 67 20 74 68 65 20 76   combining the v
b380: 61 6c 75 65 73 20 69 6e 20 74 68 65 20 76 61 72  alues in the var
b390: 69 6f 75 73 20 63 6f 6c 75 6d 6e 73 20 69 6e 74  ious columns int
b3a0: 6f 20 61 20 62 79 74 65 20 61 72 72 61 79 0a 69  o a byte array.i
b3b0: 6e 20 74 68 65 20 72 65 63 6f 72 64 20 66 6f 72  n the record for
b3c0: 6d 61 74 2c 20 74 68 65 6e 20 73 74 6f 72 69 6e  mat, then storin
b3d0: 67 20 74 68 61 74 20 62 79 74 65 20 61 72 72 61  g that byte arra
b3e0: 79 20 61 73 20 74 68 65 20 70 61 79 6c 6f 61 64  y as the payload
b3f0: 20 69 6e 0a 61 6e 20 65 6e 74 72 79 20 69 6e 20   in.an entry in 
b400: 74 68 65 20 74 61 62 6c 65 20 62 2d 74 72 65 65  the table b-tree
b410: 2e 20 20 5e 54 68 65 20 6f 72 64 65 72 20 6f 66  .  ^The order of
b420: 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 72   values in the r
b430: 65 63 6f 72 64 20 69 73 0a 74 68 65 20 73 61 6d  ecord is.the sam
b440: 65 20 61 73 20 74 68 65 20 6f 72 64 65 72 20 6f  e as the order o
b450: 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  f columns in the
b460: 20 53 51 4c 20 74 61 62 6c 65 20 64 65 66 69 6e   SQL table defin
b470: 69 74 69 6f 6e 2e 0a 5e 57 68 65 6e 20 61 6e 20  ition..^When an 
b480: 53 51 4c 20 74 61 62 6c 65 20 74 68 61 74 20 69  SQL table that i
b490: 6e 63 6c 75 64 65 73 20 61 6e 0a 5b 49 4e 54 45  ncludes an.[INTE
b4a0: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 5d  GER PRIMARY KEY]
b4b0: 20 63 6f 6c 75 6d 6e 20 28 77 68 69 63 68 20 61   column (which a
b4c0: 6c 69 61 73 65 73 20 74 68 65 20 5b 72 6f 77 69  liases the [rowi
b4d0: 64 5d 29 20 74 68 65 6e 20 74 68 61 74 0a 63 6f  d]) then that.co
b4e0: 6c 75 6d 6e 20 61 70 70 65 61 72 73 20 69 6e 20  lumn appears in 
b4f0: 74 68 65 20 72 65 63 6f 72 64 20 61 73 20 61 20  the record as a 
b500: 4e 55 4c 4c 20 76 61 6c 75 65 2e 20 20 5e 53 51  NULL value.  ^SQ
b510: 4c 69 74 65 20 77 69 6c 6c 20 61 6c 77 61 79 73  Lite will always
b520: 20 75 73 65 0a 74 68 65 20 74 61 62 6c 65 20 62   use.the table b
b530: 2d 74 72 65 65 20 6b 65 79 20 72 61 74 68 65 72  -tree key rather
b540: 20 74 68 61 6e 20 74 68 65 20 4e 55 4c 4c 20 76   than the NULL v
b550: 61 6c 75 65 20 77 68 65 6e 20 72 65 66 65 72 65  alue when refere
b560: 6e 63 69 6e 67 20 74 68 65 0a 5b 49 4e 54 45 47  ncing the.[INTEG
b570: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 5d 20  ER PRIMARY KEY] 
b580: 63 6f 6c 75 6d 6e 2e 3c 2f 70 3e 0a 0a 3c 70 3e  column.</p>..<p>
b590: 5e 49 66 20 74 68 65 20 5b 61 66 66 69 6e 69 74  ^If the [affinit
b5a0: 79 5d 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 69  y] of a column i
b5b0: 73 20 52 45 41 4c 20 61 6e 64 20 74 68 61 74 20  s REAL and that 
b5c0: 63 6f 6c 75 6d 6e 20 63 6f 6e 74 61 69 6e 73 20  column contains 
b5d0: 61 0a 76 61 6c 75 65 20 74 68 61 74 20 63 61 6e  a.value that can
b5e0: 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20 74 6f   be converted to
b5f0: 20 61 6e 20 69 6e 74 65 67 65 72 20 77 69 74 68   an integer with
b600: 6f 75 74 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f  out loss of info
b610: 72 6d 61 74 69 6f 6e 0a 28 69 66 20 74 68 65 20  rmation.(if the 
b620: 76 61 6c 75 65 20 63 6f 6e 74 61 69 6e 73 20 6e  value contains n
b630: 6f 20 66 72 61 63 74 69 6f 6e 61 6c 20 70 61 72  o fractional par
b640: 74 20 61 6e 64 20 69 73 20 6e 6f 74 20 74 6f 6f  t and is not too
b650: 20 6c 61 72 67 65 20 74 6f 20 62 65 0a 72 65 70   large to be.rep
b660: 72 65 73 65 6e 74 65 64 20 61 73 20 61 6e 20 69  resented as an i
b670: 6e 74 65 67 65 72 29 20 74 68 65 6e 20 74 68 65  nteger) then the
b680: 20 63 6f 6c 75 6d 6e 20 6d 61 79 20 62 65 20 73   column may be s
b690: 74 6f 72 65 64 20 69 6e 20 74 68 65 20 72 65 63  tored in the rec
b6a0: 6f 72 64 0a 61 73 20 61 6e 20 69 6e 74 65 67 65  ord.as an intege
b6b0: 72 2e 20 20 5e 53 51 4c 69 74 65 20 77 69 6c 6c  r.  ^SQLite will
b6c0: 20 63 6f 6e 76 65 72 74 20 74 68 65 20 76 61 6c   convert the val
b6d0: 75 65 20 62 61 63 6b 20 74 6f 20 66 6c 6f 61 74  ue back to float
b6e0: 69 6e 67 0a 70 6f 69 6e 74 20 77 68 65 6e 20 65  ing.point when e
b6f0: 78 74 72 61 63 74 69 6e 67 20 69 74 20 66 72 6f  xtracting it fro
b700: 6d 20 74 68 65 20 72 65 63 6f 72 64 2e 3c 2f 70  m the record.</p
b710: 3e 0a 0a 0a 3c 68 33 3e 32 2e 34 20 52 65 70 72  >...<h3>2.4 Repr
b720: 65 73 65 6e 74 61 74 69 6f 6e 20 4f 66 20 53 51  esentation Of SQ
b730: 4c 20 49 6e 64 69 63 65 73 3c 2f 68 33 3e 0a 0a  L Indices</h3>..
b740: 3c 70 3e 5e 45 61 63 68 20 53 51 4c 20 69 6e 64  <p>^Each SQL ind
b750: 65 78 2c 20 77 68 65 74 68 65 72 20 65 78 70 6c  ex, whether expl
b760: 69 63 69 74 6c 79 20 64 65 63 6c 61 72 65 64 20  icitly declared 
b770: 76 69 61 20 61 20 5b 43 52 45 41 54 45 20 49 4e  via a [CREATE IN
b780: 44 45 58 5d 20 73 74 61 74 65 6d 65 6e 74 0a 6f  DEX] statement.o
b790: 72 20 69 6d 70 6c 69 65 64 20 62 79 20 61 20 55  r implied by a U
b7a0: 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74  NIQUE constraint
b7b0: 2c 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  , corresponds to
b7c0: 20 61 6e 20 69 6e 64 65 78 20 62 2d 74 72 65 65   an index b-tree
b7d0: 20 69 6e 20 74 68 65 0a 64 61 74 61 62 61 73 65   in the.database
b7e0: 20 66 69 6c 65 2e 0a 5e 54 68 65 72 65 20 69 73   file..^There is
b7f0: 20 6f 6e 65 20 65 6e 74 72 79 20 69 6e 20 69 6e   one entry in in
b800: 64 65 78 20 62 2d 74 72 65 65 20 66 6f 72 20 65  dex b-tree for e
b810: 61 63 68 20 72 6f 77 20 69 6e 20 74 68 65 20 63  ach row in the c
b820: 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 61 62  orresponding tab
b830: 6c 65 2e 0a 5e 54 68 65 20 6b 65 79 20 74 6f 20  le..^The key to 
b840: 61 6e 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20  an index b-tree 
b850: 69 73 0a 61 20 72 65 63 6f 72 64 20 63 6f 6d 70  is.a record comp
b860: 6f 73 65 64 20 6f 66 20 74 68 65 20 63 6f 6c 75  osed of the colu
b870: 6d 6e 73 20 74 68 61 74 20 61 72 65 20 62 65 69  mns that are bei
b880: 6e 67 20 69 6e 64 65 78 65 64 20 66 6f 6c 6c 6f  ng indexed follo
b890: 77 65 64 20 62 79 20 74 68 65 0a 5b 72 6f 77 69  wed by the.[rowi
b8a0: 64 5d 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  d] of the table 
b8b0: 72 6f 77 2e 20 20 42 65 63 61 75 73 65 20 65 76  row.  Because ev
b8c0: 65 72 79 20 72 6f 77 20 69 6e 20 61 20 74 61 62  ery row in a tab
b8d0: 6c 65 20 68 61 73 20 61 20 75 6e 69 71 75 65 0a  le has a unique.
b8e0: 72 6f 77 69 64 20 61 6e 64 20 61 6c 6c 20 6b 65  rowid and all ke
b8f0: 79 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 63  ys in an index c
b900: 6f 6e 74 61 69 6e 20 74 68 65 20 72 6f 77 69 64  ontain the rowid
b910: 2c 20 61 6c 6c 20 6b 65 79 73 20 69 6e 20 61 6e  , all keys in an
b920: 20 69 6e 64 65 78 0a 61 72 65 20 75 6e 69 71 75   index.are uniqu
b930: 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 72  e.</p>..<p>^Ther
b940: 65 20 69 73 20 61 20 6f 6e 65 2d 74 6f 2d 6f 6e  e is a one-to-on
b950: 65 20 6d 61 70 70 69 6e 67 20 62 65 74 77 65 65  e mapping betwee
b960: 6e 20 72 6f 77 73 20 69 6e 20 61 20 74 61 62 6c  n rows in a tabl
b970: 65 20 61 6e 64 0a 65 6e 74 72 69 65 73 20 69 6e  e and.entries in
b980: 20 65 61 63 68 20 69 6e 64 65 78 20 61 73 73 6f   each index asso
b990: 63 69 61 74 65 64 20 77 69 74 68 20 74 68 61 74  ciated with that
b9a0: 20 74 61 62 6c 65 2e 0a 5e 43 6f 72 72 65 73 70   table..^Corresp
b9b0: 6f 6e 64 69 6e 67 20 72 6f 77 73 20 69 6e 74 20  onding rows int 
b9c0: 74 68 65 20 69 6e 64 65 78 20 61 6e 64 20 74 61  the index and ta
b9d0: 62 6c 65 20 62 2d 74 72 65 65 73 20 73 68 61 72  ble b-trees shar
b9e0: 65 20 74 68 65 20 73 61 6d 65 20 72 6f 77 69 64  e the same rowid
b9f0: 0a 76 61 6c 75 65 2c 20 61 6e 64 20 63 6f 6e 74  .value, and cont
ba00: 61 69 6e 20 74 68 65 20 73 61 6d 65 20 76 61 6c  ain the same val
ba10: 75 65 20 66 6f 72 20 61 6c 6c 20 69 6e 64 65 78  ue for all index
ba20: 65 64 20 63 6f 6c 75 6d 6e 73 2e 3c 2f 70 3e 0a  ed columns.</p>.
ba30: 0a 3c 68 33 3e 32 2e 35 20 53 74 6f 72 61 67 65  .<h3>2.5 Storage
ba40: 20 4f 66 20 54 68 65 20 53 51 4c 20 44 61 74 61   Of The SQL Data
ba50: 62 61 73 65 20 53 63 68 65 6d 61 3c 2f 68 33 3e  base Schema</h3>
ba60: 0a 0a 3c 70 3e 5e 50 61 67 65 20 31 20 6f 66 20  ..<p>^Page 1 of 
ba70: 61 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  a database file 
ba80: 69 73 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65  is the root page
ba90: 20 6f 66 20 61 20 74 61 62 6c 65 20 62 2d 74 72   of a table b-tr
baa0: 65 65 20 74 68 61 74 0a 68 6f 6c 64 73 20 61 20  ee that.holds a 
bab0: 73 70 65 63 69 61 6c 20 74 61 62 6c 65 20 6e 61  special table na
bac0: 6d 65 64 20 22 73 71 6c 69 74 65 5f 6d 61 73 74  med "sqlite_mast
bad0: 65 72 22 20 28 6f 72 20 22 73 71 6c 69 74 65 5f  er" (or "sqlite_
bae0: 74 65 6d 70 5f 6d 61 73 74 65 72 22 20 69 6e 0a  temp_master" in.
baf0: 74 68 65 20 63 61 73 65 20 6f 66 20 61 20 54 45  the case of a TE
bb00: 4d 50 20 64 61 74 61 62 61 73 65 29 20 77 68 69  MP database) whi
bb10: 63 68 20 73 74 6f 72 65 73 20 74 68 65 20 63 6f  ch stores the co
bb20: 6d 70 6c 65 74 65 0a 64 61 74 61 62 61 73 65 20  mplete.database 
bb30: 73 63 68 65 6d 61 2e 20 20 5e 28 54 68 65 20 73  schema.  ^(The s
bb40: 74 72 75 63 74 75 72 65 20 6f 66 20 74 68 65 20  tructure of the 
bb50: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61  sqlite_master ta
bb60: 62 6c 65 20 69 73 20 61 73 0a 69 66 20 69 74 20  ble is as.if it 
bb70: 68 61 64 20 62 65 65 6e 20 63 72 65 61 74 65 64  had been created
bb80: 20 75 73 69 6e 67 20 74 68 65 20 66 6f 6c 6c 6f   using the follo
bb90: 77 69 6e 67 20 53 51 4c 3a 3c 2f 70 3e 0a 0a 3c  wing SQL:</p>..<
bba0: 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e  blockquote><pre>
bbb0: 0a 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 71  .CREATE TABLE sq
bbc0: 6c 69 74 65 5f 6d 61 73 74 65 72 28 0a 20 20 74  lite_master(.  t
bbd0: 79 70 65 20 74 65 78 74 2c 0a 20 20 6e 61 6d 65  ype text,.  name
bbe0: 20 74 65 78 74 2c 0a 20 20 74 62 6c 5f 6e 61 6d   text,.  tbl_nam
bbf0: 65 20 74 65 78 74 2c 0a 20 20 72 6f 6f 74 70 61  e text,.  rootpa
bc00: 67 65 20 69 6e 74 65 67 65 72 2c 0a 20 20 73 71  ge integer,.  sq
bc10: 6c 20 74 65 78 74 0a 29 3b 0a 3c 2f 70 72 65 3e  l text.);.</pre>
bc20: 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a  </blockquote>)^.
bc30: 0a 3c 70 3e 5e 54 68 65 20 73 71 6c 69 74 65 5f  .<p>^The sqlite_
bc40: 6d 61 73 74 65 72 20 74 61 62 6c 65 20 63 6f 6e  master table con
bc50: 74 61 69 6e 73 20 61 20 72 6f 77 20 66 6f 72 20  tains a row for 
bc60: 65 61 63 68 20 74 61 62 6c 65 2c 20 69 6e 64 65  each table, inde
bc70: 78 2c 20 76 69 65 77 2c 0a 61 6e 64 20 74 72 69  x, view,.and tri
bc80: 67 67 65 72 20 69 6e 20 74 68 65 20 64 61 74 61  gger in the data
bc90: 62 61 73 65 20 73 63 68 65 6d 61 2c 20 65 78 63  base schema, exc
bca0: 65 70 74 20 74 68 65 72 65 20 69 73 20 6e 6f 20  ept there is no 
bcb0: 65 6e 74 72 79 20 66 6f 72 20 74 68 65 0a 73 71  entry for the.sq
bcc0: 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c  lite_master tabl
bcd0: 65 20 69 74 73 65 6c 66 2e 3c 2f 70 3e 0a 0a 3c  e itself.</p>..<
bce0: 70 3e 5e 28 54 68 65 20 73 71 6c 69 74 65 5f 6d  p>^(The sqlite_m
bcf0: 61 73 74 65 72 2e 74 79 70 65 20 63 6f 6c 75 6d  aster.type colum
bd00: 6e 20 77 69 6c 6c 20 62 65 20 6f 6e 65 0a 6f 66  n will be one.of
bd10: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74   the following t
bd20: 65 78 74 20 73 74 72 69 6e 67 73 3a 20 20 27 74  ext strings:  't
bd30: 61 62 6c 65 27 2c 20 27 69 6e 64 65 78 27 2c 20  able', 'index', 
bd40: 27 76 69 65 77 27 2c 20 6f 72 20 27 74 72 69 67  'view', or 'trig
bd50: 67 65 72 27 0a 61 63 63 6f 72 64 69 6e 67 20 74  ger'.according t
bd60: 6f 20 74 68 65 20 74 79 70 65 20 6f 66 20 6f 62  o the type of ob
bd70: 6a 65 63 74 20 64 65 66 69 6e 65 64 2e 20 20 5e  ject defined.  ^
bd80: 54 68 65 20 27 74 61 62 6c 65 27 20 73 74 72 69  The 'table' stri
bd90: 6e 67 20 69 73 20 75 73 65 64 0a 66 6f 72 20 62  ng is used.for b
bda0: 6f 74 68 20 6f 72 64 69 6e 61 72 79 20 61 6e 64  oth ordinary and
bdb0: 20 5b 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73   [virtual tables
bdc0: 5d 2e 29 5e 3c 2f 70 3e 0a 0a 3c 2f 70 3e 5e 28  ].)^</p>..</p>^(
bdd0: 54 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  The sqlite_maste
bde0: 72 2e 6e 61 6d 65 20 63 6f 6c 75 6d 6e 20 77 69  r.name column wi
bdf0: 6c 6c 20 68 6f 6c 64 20 74 68 65 20 6e 61 6d 65  ll hold the name
be00: 20 6f 66 20 74 68 65 20 6f 62 6a 65 63 74 2e 0a   of the object..
be10: 5e 46 6f 72 20 69 6e 64 69 63 65 73 20 74 68 61  ^For indices tha
be20: 74 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63 61  t are automatica
be30: 6c 6c 79 20 63 72 65 61 74 65 64 20 62 79 20 55  lly created by U
be40: 4e 49 51 55 45 20 6f 72 20 50 52 49 4d 41 52 59  NIQUE or PRIMARY
be50: 20 4b 45 59 0a 63 6f 6e 73 74 72 61 69 6e 74 73   KEY.constraints
be60: 2c 20 74 68 65 20 6e 61 6d 65 20 69 73 20 22 73  , the name is "s
be70: 71 6c 69 74 65 5f 61 75 74 6f 69 6e 64 65 78 5f  qlite_autoindex_
be80: 54 41 42 4c 45 5f 4e 22 20 77 68 65 72 65 20 54  TABLE_N" where T
be90: 41 42 4c 45 20 69 73 20 0a 72 65 70 6c 61 63 65  ABLE is .replace
bea0: 64 20 62 79 20 74 68 65 20 6e 61 6d 65 20 6f 66  d by the name of
beb0: 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20   the table that 
bec0: 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 63 6f 6e  contains the con
bed0: 73 74 72 61 69 6e 74 20 61 6e 64 20 4e 20 0a 69  straint and N .i
bee0: 73 20 61 6e 20 69 6e 74 65 67 65 72 20 62 65 67  s an integer beg
bef0: 69 6e 6e 69 6e 67 0a 77 69 74 68 20 31 20 61 6e  inning.with 1 an
bf00: 64 20 69 6e 63 72 65 61 73 69 6e 67 20 62 79 20  d increasing by 
bf10: 6f 6e 65 20 77 69 74 68 20 65 61 63 68 20 63 6f  one with each co
bf20: 6e 73 74 72 61 69 6e 74 20 73 65 65 6e 2e 29 5e  nstraint seen.)^
bf30: 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 73 71 6c  </p>..<p>The sql
bf40: 69 74 65 5f 6d 61 73 74 65 72 2e 74 62 6c 5f 6e  ite_master.tbl_n
bf50: 61 6d 65 20 63 6f 6c 75 6d 6e 20 68 6f 6c 64 73  ame column holds
bf60: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 74   the name of a t
bf70: 61 62 6c 65 20 6f 72 20 76 69 65 77 0a 74 68 61  able or view.tha
bf80: 74 20 74 68 65 20 6f 62 6a 65 63 74 20 69 73 20  t the object is 
bf90: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 2e  associated with.
bfa0: 20 20 5e 46 6f 72 20 61 20 74 61 62 6c 65 20 6f    ^For a table o
bfb0: 72 20 76 69 65 77 2c 20 74 68 65 0a 74 62 6c 5f  r view, the.tbl_
bfc0: 6e 61 6d 65 20 63 6f 6c 75 6d 6e 20 69 73 20 61  name column is a
bfd0: 20 63 6f 70 79 20 6f 66 20 74 68 65 20 6e 61 6d   copy of the nam
bfe0: 65 20 63 6f 6c 75 6d 6e 2e 20 20 5e 46 6f 72 20  e column.  ^For 
bff0: 61 6e 20 69 6e 64 65 78 2c 20 74 68 65 20 74 62  an index, the tb
c000: 6c 5f 6e 61 6d 65 0a 69 73 20 74 68 65 20 6e 61  l_name.is the na
c010: 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
c020: 74 68 61 74 20 69 73 20 69 6e 64 65 78 65 64 2e  that is indexed.
c030: 20 20 5e 46 6f 72 20 61 20 74 72 69 67 67 65 72    ^For a trigger
c040: 2c 20 74 68 65 20 74 62 6c 5f 6e 61 6d 65 0a 63  , the tbl_name.c
c050: 6f 6c 75 6d 6e 20 73 74 6f 72 65 73 20 74 68 65  olumn stores the
c060: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
c070: 6c 65 20 6f 72 20 76 69 65 77 20 74 68 61 74 20  le or view that 
c080: 63 61 75 73 65 73 20 74 68 65 20 74 72 69 67 67  causes the trigg
c090: 65 72 20 0a 74 6f 20 66 69 72 65 2e 3c 2f 70 3e  er .to fire.</p>
c0a0: 0a 0a 3c 70 3e 5e 28 54 68 65 20 73 71 6c 69 74  ..<p>^(The sqlit
c0b0: 65 5f 6d 61 73 74 65 72 2e 72 6f 6f 74 70 61 67  e_master.rootpag
c0c0: 65 20 63 6f 6c 75 6d 6e 20 73 74 6f 72 65 73 20  e column stores 
c0d0: 74 68 65 20 70 61 67 65 20 6e 75 6d 62 65 72 20  the page number 
c0e0: 6f 66 20 74 68 65 20 72 6f 6f 74 0a 62 2d 74 72  of the root.b-tr
c0f0: 65 65 20 70 61 67 65 20 66 6f 72 20 74 61 62 6c  ee page for tabl
c100: 65 73 20 61 6e 64 20 69 6e 64 69 63 65 73 2e 29  es and indices.)
c110: 5e 20 20 5e 46 6f 72 20 72 6f 77 73 20 74 68 61  ^  ^For rows tha
c120: 74 20 64 65 66 69 6e 65 20 76 69 65 77 73 2c 20  t define views, 
c130: 74 72 69 67 67 65 72 73 2c 0a 61 6e 64 20 76 69  triggers,.and vi
c140: 72 74 75 61 6c 20 74 61 62 6c 65 73 2c 20 74 68  rtual tables, th
c150: 65 20 72 6f 6f 74 70 61 67 65 20 63 6f 6c 75 6d  e rootpage colum
c160: 6e 20 69 73 20 30 20 6f 72 20 4e 55 4c 4c 2e 3c  n is 0 or NULL.<
c170: 2f 70 3e 0a 0a 3c 70 3e 5e 28 54 68 65 20 73 71  /p>..<p>^(The sq
c180: 6c 69 74 65 5f 6d 61 73 74 65 72 2e 73 71 6c 20  lite_master.sql 
c190: 63 6f 6c 75 6d 6e 20 73 74 6f 72 65 73 20 53 51  column stores SQ
c1a0: 4c 20 74 65 78 74 20 74 68 61 74 20 64 65 73 63  L text that desc
c1b0: 72 69 62 65 73 20 74 68 65 0a 6f 62 6a 65 63 74  ribes the.object
c1c0: 2e 20 20 54 68 69 73 20 53 51 4c 20 74 65 78 74  .  This SQL text
c1d0: 20 69 73 20 61 20 5b 43 52 45 41 54 45 20 54 41   is a [CREATE TA
c1e0: 42 4c 45 5d 2c 20 5b 43 52 45 41 54 45 20 56 49  BLE], [CREATE VI
c1f0: 52 54 55 41 4c 20 54 41 42 4c 45 5d 2c 0a 5b 43  RTUAL TABLE],.[C
c200: 52 45 41 54 45 20 49 4e 44 45 58 5d 2c 0a 5b 43  REATE INDEX],.[C
c210: 52 45 41 54 45 20 56 49 45 57 5d 2c 20 6f 72 20  REATE VIEW], or 
c220: 5b 43 52 45 41 54 45 20 54 52 49 47 47 45 52 5d  [CREATE TRIGGER]
c230: 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20   statement that 
c240: 69 66 20 65 76 61 6c 75 61 74 65 64 20 61 67 61  if evaluated aga
c250: 69 6e 73 74 0a 74 68 65 20 64 61 74 61 62 61 73  inst.the databas
c260: 65 20 66 69 6c 65 20 77 68 65 6e 20 69 74 20 69  e file when it i
c270: 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  s the main datab
c280: 61 73 65 20 6f 66 20 61 20 5b 64 61 74 61 62 61  ase of a [databa
c290: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d 0a 77  se connection].w
c2a0: 6f 75 6c 64 20 72 65 63 72 65 61 74 65 64 20 74  ould recreated t
c2b0: 68 65 20 6f 62 6a 65 63 74 2e 29 20 20 54 68 65  he object.)  The
c2c0: 20 74 65 78 74 20 69 73 20 75 73 75 61 6c 6c 79   text is usually
c2d0: 20 61 20 63 6f 70 79 20 6f 66 20 74 68 65 20 6f   a copy of the o
c2e0: 72 69 67 69 6e 61 6c 0a 73 74 61 74 65 6d 65 6e  riginal.statemen
c2f0: 74 20 75 73 65 64 20 74 6f 20 63 72 65 61 74 65  t used to create
c300: 20 74 68 65 20 6f 62 6a 65 63 74 20 62 75 74 20   the object but 
c310: 77 69 74 68 20 6e 6f 72 6d 61 6c 69 7a 61 74 69  with normalizati
c320: 6f 6e 73 20 61 70 70 6c 69 65 64 20 73 6f 0a 74  ons applied so.t
c330: 68 61 74 20 74 68 65 20 74 65 78 74 20 63 6f 6e  hat the text con
c340: 66 6f 72 6d 73 20 74 6f 20 74 68 65 20 66 6f 6c  forms to the fol
c350: 6c 6f 77 69 6e 67 20 72 75 6c 65 73 3a 0a 0a 3c  lowing rules:..<
c360: 75 6c 3e 0a 3c 6c 69 3e 5e 54 68 65 20 43 52 45  ul>.<li>^The CRE
c370: 41 54 45 2c 20 54 41 42 4c 45 2c 20 56 49 45 57  ATE, TABLE, VIEW
c380: 2c 20 54 52 49 47 47 45 52 2c 20 61 6e 64 20 49  , TRIGGER, and I
c390: 4e 44 45 58 20 6b 65 79 77 6f 72 64 73 20 61 74  NDEX keywords at
c3a0: 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 0a 6f   the beginning.o
c3b0: 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20  f the statement 
c3c0: 61 72 65 20 63 6f 6e 76 65 72 74 65 64 20 74 6f  are converted to
c3d0: 20 61 6c 6c 20 75 70 70 65 72 20 63 61 73 65 20   all upper case 
c3e0: 6c 65 74 74 65 72 73 2e 0a 3c 6c 69 3e 5e 54 68  letters..<li>^Th
c3f0: 65 20 54 45 4d 50 20 6f 72 20 54 45 4d 50 4f 52  e TEMP or TEMPOR
c400: 41 52 59 20 6b 65 79 77 6f 72 64 20 69 73 20 72  ARY keyword is r
c410: 65 6d 6f 76 65 64 20 69 66 20 69 74 20 6f 63 63  emoved if it occ
c420: 75 72 73 20 61 66 74 65 72 20 74 68 65 20 0a 69  urs after the .i
c430: 6e 69 74 69 61 6c 20 43 52 45 41 54 45 20 6b 65  nitial CREATE ke
c440: 79 77 6f 72 64 2e 0a 3c 6c 69 3e 5e 41 6e 79 20  yword..<li>^Any 
c450: 64 61 74 61 62 61 73 65 20 6e 61 6d 65 20 71 75  database name qu
c460: 61 6c 69 66 69 65 72 20 74 68 61 74 20 6f 63 63  alifier that occ
c470: 75 72 73 20 70 72 69 6f 72 20 74 6f 20 74 68 65  urs prior to the
c480: 20 6e 61 6d 65 20 6f 66 20 74 68 65 0a 6f 62 6a   name of the.obj
c490: 65 63 74 20 62 65 69 6e 67 20 63 72 65 61 74 65  ect being create
c4a0: 64 20 69 73 20 72 65 6d 6f 76 65 64 2e 0a 3c 6c  d is removed..<l
c4b0: 69 3e 5e 4c 65 61 64 69 6e 67 20 73 70 61 63 65  i>^Leading space
c4c0: 73 20 61 72 65 20 72 65 6d 6f 76 65 64 2e 0a 3c  s are removed..<
c4d0: 6c 69 3e 5e 41 6c 6c 20 73 70 61 63 65 73 20 66  li>^All spaces f
c4e0: 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20 66 69 72  ollowing the fir
c4f0: 73 74 20 74 77 6f 20 6b 65 79 77 6f 72 64 73 20  st two keywords 
c500: 61 72 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e  are converted in
c510: 74 6f 20 61 20 73 69 6e 67 6c 65 0a 73 70 61 63  to a single.spac
c520: 65 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e 28 54  e..</ul>..<p>^(T
c530: 68 65 20 74 65 78 74 20 69 6e 20 74 68 65 20 73  he text in the s
c540: 71 6c 69 74 65 5f 6d 61 73 74 65 72 2e 73 71 6c  qlite_master.sql
c550: 20 63 6f 6c 75 6d 6e 20 69 73 20 61 20 63 6f 70   column is a cop
c560: 79 20 6f 66 20 74 68 65 20 6f 72 69 67 69 6e 61  y of the origina
c570: 6c 0a 43 52 45 41 54 45 20 73 74 61 74 65 6d 65  l.CREATE stateme
c580: 6e 74 20 74 65 78 74 20 74 68 61 74 20 63 72 65  nt text that cre
c590: 61 74 65 64 20 74 68 65 20 6f 62 6a 65 63 74 2c  ated the object,
c5a0: 20 65 78 63 65 70 74 20 6e 6f 72 6d 61 6c 69 7a   except normaliz
c5b0: 65 64 20 61 73 0a 64 65 73 63 72 69 62 65 64 20  ed as.described 
c5c0: 61 62 6f 76 65 20 61 6e 64 20 61 73 20 6d 6f 64  above and as mod
c5d0: 69 66 69 65 64 20 62 79 20 73 75 62 73 65 71 75  ified by subsequ
c5e0: 65 6e 74 20 5b 41 4c 54 45 52 20 54 41 42 4c 45  ent [ALTER TABLE
c5f0: 5d 20 73 74 61 74 65 6d 65 6e 74 73 2e 29 5e 3c  ] statements.)^<
c600: 2f 70 3e 0a 0a 3c 70 3e 5e 28 46 6f 72 20 69 6e  /p>..<p>^(For in
c610: 64 69 63 65 73 20 74 68 61 74 20 61 72 65 20 61  dices that are a
c620: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 72 65  utomatically cre
c630: 61 74 65 64 20 62 79 20 55 4e 49 51 55 45 20 6f  ated by UNIQUE o
c640: 72 0a 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6f  r.PRIMARY KEY co
c650: 6e 73 74 72 61 69 6e 74 73 2c 20 74 68 65 20 73  nstraints, the s
c660: 71 6c 69 74 65 5f 6d 61 73 74 65 72 2e 73 71 6c  qlite_master.sql
c670: 20 66 69 65 6c 64 20 69 73 20 4e 55 4c 4c 2e 29   field is NULL.)
c680: 5e 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e 68 64 5f  ^</p>...<tcl>hd_
c690: 66 72 61 67 6d 65 6e 74 20 72 6f 6c 6c 62 61 63  fragment rollbac
c6a0: 6b 6a 6f 75 72 6e 61 6c 20 7b 72 6f 6c 6c 62 61  kjournal {rollba
c6b0: 63 6b 20 6a 6f 75 72 6e 61 6c 20 66 6f 72 6d 61  ck journal forma
c6c0: 74 7d 3c 2f 74 63 6c 3e 0a 3c 68 32 3e 33 2e 30  t}</tcl>.<h2>3.0
c6d0: 20 54 68 65 20 52 6f 6c 6c 62 61 63 6b 20 4a 6f   The Rollback Jo
c6e0: 75 72 6e 61 6c 3c 2f 68 32 3e 0a 0a 3c 70 3e 54  urnal</h2>..<p>T
c6f0: 68 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72  he rollback jour
c700: 6e 61 6c 20 69 73 20 61 20 66 69 6c 65 20 61 73  nal is a file as
c710: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 65 61  sociated with ea
c720: 63 68 20 53 51 4c 69 74 65 20 64 61 74 61 62 61  ch SQLite databa
c730: 73 65 0a 66 61 69 6c 20 74 68 61 74 20 68 6f 6c  se.fail that hol
c740: 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73  d information us
c750: 65 64 20 74 6f 20 72 65 73 74 6f 72 65 20 74 68  ed to restore th
c760: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
c770: 74 6f 20 69 74 73 20 69 6e 69 74 69 61 6c 0a 73  to its initial.s
c780: 74 61 74 65 20 64 75 72 69 6e 67 20 74 68 65 20  tate during the 
c790: 63 6f 75 72 73 65 20 6f 66 20 61 20 74 72 61 6e  course of a tran
c7a0: 73 61 63 74 69 6f 6e 2e 0a 5e 54 68 65 20 72 6f  saction..^The ro
c7b0: 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 66  llback journal f
c7c0: 69 6c 65 20 69 73 20 61 6c 77 61 79 73 20 6c 6f  ile is always lo
c7d0: 63 61 74 65 64 20 69 6e 20 74 68 65 20 64 69 72  cated in the dir
c7e0: 65 63 74 6f 72 79 20 61 73 20 74 68 65 20 64 61  ectory as the da
c7f0: 74 61 62 61 73 65 0a 66 69 6c 65 20 61 6e 64 20  tabase.file and 
c800: 68 61 73 20 74 68 65 20 73 61 6d 65 20 6e 61 6d  has the same nam
c810: 65 20 61 73 20 74 68 65 20 64 61 74 61 62 61 73  e as the databas
c820: 65 20 66 69 6c 65 20 62 75 74 20 77 69 74 68 20  e file but with 
c830: 74 68 65 20 73 74 72 69 6e 67 0a 22 3c 74 74 3e  the string."<tt>
c840: 2d 6a 6f 75 72 6e 61 6c 3c 2f 74 74 3e 22 20 61  -journal</tt>" a
c850: 70 70 65 6e 64 65 64 2e 20 20 54 68 65 72 65 20  ppended.  There 
c860: 63 61 6e 20 6f 6e 6c 79 20 62 65 20 61 20 73 69  can only be a si
c870: 6e 67 6c 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f  ngle rollback jo
c880: 75 72 6e 61 6c 0a 61 73 73 6f 63 69 61 74 65 64  urnal.associated
c890: 20 77 69 74 68 20 61 20 67 69 76 65 20 64 61 74   with a give dat
c8a0: 61 62 61 73 65 20 61 6e 64 20 68 65 6e 63 65 20  abase and hence 
c8b0: 74 68 65 72 65 20 63 61 6e 20 6f 6e 6c 79 20 62  there can only b
c8c0: 65 20 6f 6e 65 20 77 72 69 74 65 0a 74 72 61 6e  e one write.tran
c8d0: 73 61 63 74 69 6f 6e 20 6f 70 65 6e 20 61 67 61  saction open aga
c8e0: 69 6e 73 74 20 61 20 73 69 6e 67 6c 65 20 64 61  inst a single da
c8f0: 74 61 62 61 73 65 20 61 74 20 6f 6e 65 20 74 69  tabase at one ti
c900: 6d 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 66 20 61  me.</p>..<p>If a
c910: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20   transaction is 
c920: 61 62 6f 72 74 65 64 20 64 75 65 20 74 6f 20 61  aborted due to a
c930: 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 63 72  n application cr
c940: 61 73 68 2c 20 61 6e 20 6f 70 65 72 61 74 69 6e  ash, an operatin
c950: 67 0a 73 79 73 74 65 6d 20 63 72 61 73 68 2c 20  g.system crash, 
c960: 6f 72 20 61 20 68 61 72 64 77 61 72 65 20 70 6f  or a hardware po
c970: 77 65 72 20 66 61 69 6c 75 72 65 20 6f 72 20 63  wer failure or c
c980: 72 61 73 68 2c 20 74 68 65 6e 20 74 68 65 20 64  rash, then the d
c990: 61 74 61 62 61 73 65 20 6d 61 79 0a 62 65 20 6c  atabase may.be l
c9a0: 65 66 74 20 69 6e 20 61 6e 20 69 6e 63 6f 6e 73  eft in an incons
c9b0: 69 73 74 65 6e 74 20 73 74 61 74 65 2e 20 20 5e  istent state.  ^
c9c0: 54 68 65 20 6e 65 78 74 20 74 69 6d 65 20 53 51  The next time SQ
c9d0: 4c 69 74 65 20 61 74 74 65 6d 70 74 73 20 74 6f  Lite attempts to
c9e0: 20 6f 70 65 6e 0a 74 68 65 20 64 61 74 61 62 61   open.the databa
c9f0: 73 65 20 66 69 6c 65 2c 20 74 68 65 20 70 72 65  se file, the pre
ca00: 73 65 6e 63 65 20 6f 66 20 74 68 65 20 72 6f 6c  sence of the rol
ca10: 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 66 69  lback journal fi
ca20: 6c 65 20 77 69 6c 6c 20 62 65 20 0a 64 65 74 65  le will be .dete
ca30: 63 74 65 64 20 61 6e 64 20 74 68 65 20 6a 6f 75  cted and the jou
ca40: 72 6e 61 6c 20 77 69 6c 6c 20 62 65 20 61 75 74  rnal will be aut
ca50: 6f 6d 61 74 69 63 61 6c 6c 79 20 70 6c 61 79 65  omatically playe
ca60: 64 20 62 61 63 6b 20 74 6f 20 72 65 73 74 6f 72  d back to restor
ca70: 65 20 74 68 65 0a 64 61 74 61 62 61 73 65 20 74  e the.database t
ca80: 6f 20 69 74 73 20 73 74 61 74 65 20 61 74 20 74  o its state at t
ca90: 68 65 20 73 74 61 72 74 20 6f 66 20 74 68 65 20  he start of the 
caa0: 69 6e 63 6f 6d 70 6c 65 74 65 20 74 72 61 6e 73  incomplete trans
cab0: 61 63 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 70 3e  action.</p>..<p>
cac0: 5e 41 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72  ^A rollback jour
cad0: 6e 61 6c 20 69 73 20 6f 6e 6c 79 20 63 6f 6e 73  nal is only cons
cae0: 69 64 65 72 65 64 20 74 6f 20 62 65 20 76 61 6c  idered to be val
caf0: 69 64 20 69 66 20 69 74 20 65 78 69 73 74 73 20  id if it exists 
cb00: 61 6e 64 0a 63 6f 6e 74 61 69 6e 73 20 61 20 76  and.contains a v
cb10: 61 6c 69 64 20 68 65 61 64 65 72 2e 20 20 48 65  alid header.  He
cb20: 6e 63 65 20 61 20 74 72 61 6e 73 61 63 74 69 6f  nce a transactio
cb30: 6e 20 63 61 6e 20 62 65 20 63 6f 6d 6d 69 74 74  n can be committ
cb40: 65 64 20 69 6e 20 6f 6e 65 0a 6f 66 20 74 68 72  ed in one.of thr
cb50: 65 65 20 77 61 79 73 3a 0a 3c 6f 6c 3e 0a 3c 6c  ee ways:.<ol>.<l
cb60: 69 3e 5e 54 68 65 20 72 6f 6c 6c 62 61 63 6b 20  i>^The rollback 
cb70: 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 20 63 61 6e  journal file can
cb80: 20 62 65 20 64 65 6c 65 74 65 64 2c 0a 3c 6c 69   be deleted,.<li
cb90: 3e 5e 54 68 65 20 72 6f 6c 6c 62 61 63 6b 20 6a  >^The rollback j
cba0: 6f 75 72 6e 61 6c 20 66 69 6c 65 20 63 61 6e 20  ournal file can 
cbb0: 62 65 20 74 72 75 6e 63 61 74 65 64 20 74 6f 20  be truncated to 
cbc0: 7a 65 72 6f 20 6c 65 6e 67 74 68 2c 20 6f 72 0a  zero length, or.
cbd0: 3c 6c 69 3e 5e 54 68 65 20 68 65 61 64 65 72 20  <li>^The header 
cbe0: 6f 66 20 74 68 65 20 72 6f 6c 6c 62 61 63 6b 20  of the rollback 
cbf0: 6a 6f 75 72 6e 61 6c 20 63 61 6e 20 62 65 20 6f  journal can be o
cc00: 76 65 72 77 72 69 74 74 65 6e 20 77 69 74 68 0a  verwritten with.
cc10: 69 6e 76 61 6c 69 64 20 68 65 61 64 65 72 20 74  invalid header t
cc20: 65 78 74 20 28 66 6f 72 20 65 78 61 6d 70 6c 65  ext (for example
cc30: 2c 20 61 6c 6c 20 7a 65 72 6f 73 29 2e 0a 3c 2f  , all zeros)..</
cc40: 6f 6c 3e 0a 5e 54 68 65 73 65 20 74 68 72 65 65  ol>.^These three
cc50: 20 77 61 79 73 20 6f 66 20 63 6f 6d 6d 69 74 74   ways of committ
cc60: 69 6e 67 20 61 20 74 72 61 6e 73 61 63 74 69 6f  ing a transactio
cc70: 6e 20 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20  n correspond to 
cc80: 74 68 65 20 44 45 4c 45 54 45 2c 0a 54 52 55 4e  the DELETE,.TRUN
cc90: 43 41 54 45 2c 20 61 6e 64 20 50 45 52 53 49 53  CATE, and PERSIS
cca0: 54 20 73 65 74 74 69 6e 67 73 2c 20 72 65 73 70  T settings, resp
ccb0: 65 63 74 69 76 65 6c 79 2c 20 6f 66 20 74 68 65  ectively, of the
ccc0: 20 5b 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20 70   [journal_mode p
ccd0: 72 61 67 6d 61 5d 2e 0a 3c 2f 70 3e 0a 0a 0a 3c  ragma]..</p>...<
cce0: 70 3e 41 20 76 61 6c 69 64 20 72 6f 6c 6c 62 61  p>A valid rollba
ccf0: 63 6b 20 6a 6f 75 72 6e 61 6c 20 62 65 67 69 6e  ck journal begin
cd00: 73 20 77 69 74 68 20 61 20 68 65 61 64 65 72 20  s with a header 
cd10: 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  in the following
cd20: 20 66 6f 72 6d 61 74 3a 3c 2f 70 3e 0a 0a 3c 63   format:</p>..<c
cd30: 65 6e 74 65 72 3e 0a 3c 69 3e 52 6f 6c 6c 62 61  enter>.<i>Rollba
cd40: 63 6b 20 4a 6f 75 72 6e 61 6c 20 48 65 61 64 65  ck Journal Heade
cd50: 72 20 46 6f 72 6d 61 74 3c 2f 69 3e 3c 62 72 3e  r Format</i><br>
cd60: 0a 3c 74 61 62 6c 65 20 77 69 64 74 68 3d 22 38  .<table width="8
cd70: 30 25 22 20 62 6f 72 64 65 72 3d 31 3e 0a 3c 74  0%" border=1>.<t
cd80: 72 3e 3c 74 68 3e 4f 66 66 73 65 74 3c 74 68 3e  r><th>Offset<th>
cd90: 53 69 7a 65 3c 74 68 3e 44 65 73 63 72 69 70 74  Size<th>Descript
cda0: 69 6f 6e 0a 3c 74 72 3e 5e 28 3c 74 64 20 76 61  ion.<tr>^(<td va
cdb0: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
cdc0: 65 6e 74 65 72 3e 30 0a 20 20 20 20 3c 74 64 20  enter>0.    <td 
cdd0: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
cde0: 3d 63 65 6e 74 65 72 3e 38 0a 20 20 20 20 3c 74  =center>8.    <t
cdf0: 64 3e 48 65 61 64 65 72 20 73 74 72 69 6e 67 3a  d>Header string:
ce00: 20 20 30 78 64 39 2c 20 30 78 64 35 2c 20 30 78    0xd9, 0xd5, 0x
ce10: 30 35 2c 20 30 78 66 39 2c 20 30 78 32 30 2c 20  05, 0xf9, 0x20, 
ce20: 30 78 61 31 2c 20 30 78 36 33 2c 20 30 78 64 37  0xa1, 0x63, 0xd7
ce30: 29 5e 0a 3c 74 72 3e 5e 28 3c 74 64 20 76 61 6c  )^.<tr>^(<td val
ce40: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
ce50: 6e 74 65 72 3e 38 0a 20 20 20 20 3c 74 64 20 76  nter>8.    <td v
ce60: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
ce70: 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64  center>4.    <td
ce80: 3e 54 68 65 20 22 50 61 67 65 20 43 6f 75 6e 74  >The "Page Count
ce90: 22 20 2d 20 54 68 65 20 6e 75 6d 62 65 72 20 6f  " - The number o
cea0: 66 20 70 61 67 65 73 20 69 6e 20 74 68 65 20 6e  f pages in the n
ceb0: 65 78 74 20 73 65 67 6d 65 6e 74 20 6f 66 20 74  ext segment of t
cec0: 68 65 20 0a 20 20 20 20 20 20 20 20 6a 6f 75 72  he .        jour
ced0: 6e 61 6c 2c 20 6f 72 20 2d 31 20 74 6f 0a 20 20  nal, or -1 to.  
cee0: 20 20 20 20 20 20 6d 65 61 6e 20 61 6c 6c 20 63        mean all c
cef0: 6f 6e 74 65 6e 74 20 74 6f 20 74 68 65 20 65 6e  ontent to the en
cf00: 64 20 6f 66 20 74 68 65 20 66 69 6c 65 29 5e 0a  d of the file)^.
cf10: 3c 74 72 3e 5e 28 3c 74 64 20 76 61 6c 69 67 6e  <tr>^(<td valign
cf20: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
cf30: 72 3e 31 32 0a 20 20 20 20 3c 74 64 20 76 61 6c  r>12.    <td val
cf40: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
cf50: 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 41  nter>4.    <td>A
cf60: 20 72 61 6e 64 6f 6d 20 6e 6f 6e 63 65 20 66 6f   random nonce fo
cf70: 72 20 74 68 65 20 63 68 65 63 6b 73 75 6d 29 5e  r the checksum)^
cf80: 0a 3c 74 72 3e 5e 28 3c 74 64 20 76 61 6c 69 67  .<tr>^(<td valig
cf90: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
cfa0: 65 72 3e 31 36 0a 20 20 20 20 3c 74 64 20 76 61  er>16.    <td va
cfb0: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
cfc0: 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e  enter>4.    <td>
cfd0: 49 6e 69 74 69 61 6c 20 73 69 7a 65 20 6f 66 20  Initial size of 
cfe0: 74 68 65 20 64 61 74 61 62 61 73 65 20 69 6e 20  the database in 
cff0: 70 61 67 65 73 29 5e 0a 3c 74 72 3e 5e 28 3c 74  pages)^.<tr>^(<t
d000: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
d010: 67 6e 3d 63 65 6e 74 65 72 3e 32 30 0a 20 20 20  gn=center>20.   
d020: 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20   <td valign=top 
d030: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20  align=center>4. 
d040: 20 20 20 3c 74 64 3e 53 69 7a 65 20 6f 66 20 61     <td>Size of a
d050: 20 64 69 73 6b 20 73 65 63 74 6f 72 20 61 73 73   disk sector ass
d060: 75 6d 65 64 20 62 79 20 74 68 65 20 70 72 6f 63  umed by the proc
d070: 65 73 73 20 74 68 61 74 20 77 72 6f 74 65 20 74  ess that wrote t
d080: 68 69 73 0a 20 20 20 20 20 20 20 20 6a 6f 75 72  his.        jour
d090: 6e 61 6c 2e 29 5e 0a 3c 74 72 3e 5e 28 3c 74 64  nal.)^.<tr>^(<td
d0a0: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
d0b0: 6e 3d 63 65 6e 74 65 72 3e 32 34 0a 20 20 20 20  n=center>24.    
d0c0: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
d0d0: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20  lign=center>4.  
d0e0: 20 20 3c 74 64 3e 53 69 7a 65 20 6f 66 20 70 61    <td>Size of pa
d0f0: 67 65 73 20 69 6e 20 74 68 69 73 20 6a 6f 75 72  ges in this jour
d100: 6e 61 6c 2e 29 5e 0a 3c 2f 74 61 62 6c 65 3e 0a  nal.)^.</table>.
d110: 3c 2f 63 65 6e 74 65 72 3e 0a 0a 3c 70 3e 5e 41  </center>..<p>^A
d120: 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61   rollback journa
d130: 6c 20 68 65 61 64 65 72 20 69 73 20 70 61 64 64  l header is padd
d140: 65 64 20 77 69 74 68 20 7a 65 72 6f 73 20 6f 75  ed with zeros ou
d150: 74 20 74 6f 20 74 68 65 20 73 69 7a 65 20 6f 66  t to the size of
d160: 20 61 20 0a 73 69 6e 67 6c 65 20 73 65 63 74 6f   a .single secto
d170: 72 20 28 61 73 20 64 65 66 69 6e 65 64 20 62 79  r (as defined by
d180: 20 74 68 65 20 73 65 63 74 6f 72 20 73 69 7a 65   the sector size
d190: 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73   integer at offs
d1a0: 65 74 20 32 30 29 2e 0a 54 68 65 20 68 65 61 64  et 20)..The head
d1b0: 65 72 20 69 73 20 69 6e 20 61 20 73 65 63 74 6f  er is in a secto
d1c0: 72 20 62 79 20 69 74 73 65 6c 66 20 73 6f 20 74  r by itself so t
d1d0: 68 61 74 20 69 66 20 61 20 70 6f 77 65 72 20 6c  hat if a power l
d1e0: 6f 73 73 20 6f 63 63 75 72 73 20 77 68 69 6c 65  oss occurs while
d1f0: 0a 77 72 69 74 69 6e 67 20 74 68 65 20 73 65 63  .writing the sec
d200: 74 6f 72 2c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  tor, information
d210: 20 74 68 61 74 20 66 6f 6c 6c 6f 77 73 20 74 68   that follows th
d220: 65 20 68 65 61 64 65 72 20 77 69 6c 6c 20 62 65  e header will be
d230: 0a 28 68 6f 70 65 66 75 6c 6c 79 29 20 75 6e 64  .(hopefully) und
d240: 61 6d 61 67 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e  amaged.</p>..<p>
d250: 5e 41 66 74 65 72 20 74 68 65 20 68 65 61 64 65  ^After the heade
d260: 72 20 61 6e 64 20 7a 65 72 6f 20 70 61 64 64 69  r and zero paddi
d270: 6e 67 20 61 72 65 20 7a 65 72 6f 20 6f 72 20 6d  ng are zero or m
d280: 6f 72 65 20 70 61 67 65 20 72 65 63 6f 72 64 73  ore page records
d290: 2e 20 20 5e 45 61 63 68 0a 70 61 67 65 20 72 65  .  ^Each.page re
d2a0: 63 6f 72 64 20 73 74 6f 72 65 73 20 61 20 63 6f  cord stores a co
d2b0: 70 79 20 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e  py of the conten
d2c0: 74 20 6f 66 20 61 20 70 61 67 65 20 66 72 6f 6d  t of a page from
d2d0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
d2e0: 6c 65 0a 62 65 66 6f 72 65 20 69 74 20 77 61 73  le.before it was
d2f0: 20 63 68 61 6e 67 65 64 2e 20 20 5e 54 68 65 20   changed.  ^The 
d300: 73 61 6d 65 20 70 61 67 65 20 6d 61 79 20 6e 6f  same page may no
d310: 74 20 61 70 70 65 61 72 20 6d 6f 72 65 20 74 68  t appear more th
d320: 61 6e 20 6f 6e 63 65 0a 77 69 74 68 69 6e 20 61  an once.within a
d330: 20 73 69 6e 67 6c 65 20 72 6f 6c 6c 62 61 63 6b   single rollback
d340: 20 6a 6f 75 72 6e 61 6c 2e 0a 54 6f 20 72 6f 6c   journal..To rol
d350: 6c 62 61 63 6b 20 61 6e 20 69 6e 63 6f 6d 70 6c  lback an incompl
d360: 65 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c  ete transaction,
d370: 20 61 20 70 72 6f 63 65 73 73 0a 68 61 73 20 6d   a process.has m
d380: 65 72 65 6c 79 20 74 6f 20 72 65 61 64 20 74 68  erely to read th
d390: 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e  e rollback journ
d3a0: 61 6c 20 66 72 6f 6d 20 62 65 67 69 6e 6e 69 6e  al from beginnin
d3b0: 67 20 74 6f 20 65 6e 64 20 61 6e 64 0a 77 72 69  g to end and.wri
d3c0: 74 65 20 70 61 67 65 73 20 66 6f 75 6e 64 20 69  te pages found i
d3d0: 6e 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20 62 61  n the journal ba
d3e0: 63 6b 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61  ck into the data
d3f0: 62 61 73 65 20 66 69 6c 65 20 61 74 20 74 68 65  base file at the
d400: 0a 61 70 70 72 6f 70 72 69 61 74 65 20 6c 6f 63  .appropriate loc
d410: 61 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 4c  ation.</p>..<p>L
d420: 65 74 20 74 68 65 20 64 61 74 61 62 61 73 65 20  et the database 
d430: 70 61 67 65 20 73 69 7a 65 20 28 74 68 65 20 76  page size (the v
d440: 61 6c 75 65 20 6f 66 20 74 68 65 20 69 6e 74 65  alue of the inte
d450: 67 65 72 20 61 74 20 6f 66 66 73 65 74 20 32 34  ger at offset 24
d460: 20 0a 69 6e 20 74 68 65 20 6a 6f 75 72 6e 61 6c   .in the journal
d470: 20 68 65 61 64 65 72 29 20 62 65 20 4e 2e 0a 54   header) be N..T
d480: 68 65 6e 20 74 68 65 20 66 6f 72 6d 61 74 20 6f  hen the format o
d490: 66 20 61 20 70 61 67 65 20 72 65 63 6f 72 64 20  f a page record 
d4a0: 69 73 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f  is as follows:</
d4b0: 70 3e 0a 0a 3c 63 65 6e 74 65 72 3e 0a 3c 69 3e  p>..<center>.<i>
d4c0: 52 6f 6c 6c 62 61 63 6b 20 4a 6f 75 72 6e 61 6c  Rollback Journal
d4d0: 20 50 61 67 65 20 52 65 63 6f 72 64 20 46 6f 72   Page Record For
d4e0: 6d 61 74 3c 2f 69 3e 3c 62 72 3e 0a 3c 74 61 62  mat</i><br>.<tab
d4f0: 6c 65 20 77 69 64 74 68 3d 22 38 30 25 22 20 62  le width="80%" b
d500: 6f 72 64 65 72 3d 31 3e 0a 3c 74 72 3e 3c 74 68  order=1>.<tr><th
d510: 3e 4f 66 66 73 65 74 3c 74 68 3e 53 69 7a 65 3c  >Offset<th>Size<
d520: 74 68 3e 44 65 73 63 72 69 70 74 69 6f 6e 0a 3c  th>Description.<
d530: 74 72 3e 5e 28 3c 74 64 20 76 61 6c 69 67 6e 3d  tr>^(<td valign=
d540: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
d550: 3e 30 0a 20 20 20 20 3c 74 64 20 76 61 6c 69 67  >0.    <td valig
d560: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
d570: 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 54 68 65  er>4.    <td>The
d580: 20 70 61 67 65 20 6e 75 6d 62 65 72 20 69 6e 20   page number in 
d590: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
d5a0: 65 29 5e 0a 3c 74 72 3e 5e 28 3c 74 64 20 76 61  e)^.<tr>^(<td va
d5b0: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
d5c0: 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 20  enter>4.    <td 
d5d0: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
d5e0: 3d 63 65 6e 74 65 72 3e 4e 0a 20 20 20 20 3c 74  =center>N.    <t
d5f0: 64 3e 4f 72 69 67 69 6e 61 6c 20 63 6f 6e 74 65  d>Original conte
d600: 6e 74 20 6f 66 20 74 68 65 20 70 61 67 65 20 70  nt of the page p
d610: 72 69 6f 72 20 74 6f 20 74 68 65 20 73 74 61 72  rior to the star
d620: 74 20 6f 66 20 74 68 65 20 74 72 61 6e 73 61 63  t of the transac
d630: 74 69 6f 6e 29 5e 0a 3c 74 72 3e 5e 28 3c 74 64  tion)^.<tr>^(<td
d640: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
d650: 6e 3d 63 65 6e 74 65 72 3e 4e 2b 34 0a 20 20 20  n=center>N+4.   
d660: 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20   <td valign=top 
d670: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20  align=center>4. 
d680: 20 20 20 3c 74 64 3e 43 68 65 63 6b 73 75 6d 29     <td>Checksum)
d690: 5e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 63 65 6e  ^.</table>.</cen
d6a0: 74 65 72 3e 0a 0a 0a 3c 70 3e 5e 28 54 68 65 20  ter>...<p>^(The 
d6b0: 63 68 65 63 6b 73 75 6d 20 69 73 20 61 6e 20 75  checksum is an u
d6c0: 6e 73 69 67 6e 65 64 20 33 32 2d 62 69 74 20 69  nsigned 32-bit i
d6d0: 6e 74 65 67 65 72 20 63 6f 6d 70 75 74 65 64 20  nteger computed 
d6e0: 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a  as follows:</p>.
d6f0: 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 49 6e 69 74 69 61  .<ol>.<li>Initia
d700: 6c 69 7a 65 20 74 68 65 20 63 68 65 63 6b 73 75  lize the checksu
d710: 6d 20 74 6f 20 74 68 65 20 63 68 65 63 6b 73 75  m to the checksu
d720: 6d 20 6e 6f 6e 63 65 20 76 61 6c 75 65 20 66 6f  m nonce value fo
d730: 75 6e 64 20 69 6e 20 74 68 65 0a 6a 6f 75 72 6e  und in the.journ
d740: 61 6c 20 68 65 61 64 65 72 20 61 74 20 6f 66 66  al header at off
d750: 73 65 74 20 31 32 2e 0a 3c 6c 69 3e 49 6e 69 74  set 12..<li>Init
d760: 69 61 6c 69 7a 65 20 69 6e 64 65 78 20 58 20 74  ialize index X t
d770: 6f 20 62 65 20 4e 2d 32 30 30 20 28 77 68 65 72  o be N-200 (wher
d780: 65 20 4e 20 69 73 20 74 68 65 20 73 69 7a 65 20  e N is the size 
d790: 6f 66 20 61 20 64 61 74 61 62 61 73 65 20 70 61  of a database pa
d7a0: 67 65 0a 69 6e 20 62 79 74 65 73 2e 0a 3c 6c 69  ge.in bytes..<li
d7b0: 3e 49 6e 74 65 72 70 72 65 74 20 74 68 65 20 66  >Interpret the f
d7c0: 6f 75 72 20 62 79 74 65 73 20 61 74 20 6f 66 66  our bytes at off
d7d0: 73 65 74 20 58 20 69 6e 74 6f 20 74 68 65 20 70  set X into the p
d7e0: 61 67 65 20 61 73 20 61 20 34 2d 62 79 74 65 20  age as a 4-byte 
d7f0: 62 69 67 2d 65 6e 64 69 61 6e 0a 75 6e 73 69 67  big-endian.unsig
d800: 6e 65 64 20 69 6e 74 65 67 65 72 2e 20 20 41 64  ned integer.  Ad
d810: 64 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  d the value of t
d820: 68 61 74 20 69 6e 74 65 67 65 72 20 74 6f 20 74  hat integer to t
d830: 68 65 20 63 68 65 63 6b 73 75 6d 2e 0a 3c 6c 69  he checksum..<li
d840: 3e 53 75 62 74 72 61 63 65 20 32 30 30 20 66 72  >Subtrace 200 fr
d850: 6f 6d 20 58 2e 0a 3c 6c 69 3e 49 66 20 58 20 69  om X..<li>If X i
d860: 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f  s greater than o
d870: 72 20 65 71 75 61 6c 20 74 6f 20 7a 65 72 6f 2c  r equal to zero,
d880: 20 67 6f 20 62 61 63 6b 20 74 6f 20 73 74 65 70   go back to step
d890: 20 33 2e 0a 3c 2f 6f 6c 3e 29 5e 0a 0a 3c 70 3e   3..</ol>)^..<p>
d8a0: 54 68 65 20 63 68 65 63 6b 73 75 6d 20 76 61 6c  The checksum val
d8b0: 75 65 20 69 73 20 75 73 65 64 20 74 6f 20 67 75  ue is used to gu
d8c0: 61 72 64 20 61 67 61 69 6e 73 74 20 69 6e 63 6f  ard against inco
d8d0: 6d 70 6c 65 74 65 20 77 72 69 74 65 73 20 6f 66  mplete writes of
d8e0: 0a 61 20 6a 6f 75 72 6e 61 6c 20 70 61 67 65 20  .a journal page 
d8f0: 72 65 63 6f 72 64 20 66 6f 6c 6c 6f 77 69 6e 67  record following
d900: 20 61 20 70 6f 77 65 72 20 66 61 69 6c 75 72 65   a power failure
d910: 2e 20 20 41 20 64 69 66 66 65 72 65 6e 74 20 72  .  A different r
d920: 61 6e 64 6f 6d 20 6e 6f 6e 63 65 0a 69 73 20 75  andom nonce.is u
d930: 73 65 64 20 65 61 63 68 20 74 69 6d 65 20 61 20  sed each time a 
d940: 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73  transaction is s
d950: 74 61 72 74 65 64 20 69 6e 20 6f 72 64 65 72 20  tarted in order 
d960: 74 6f 20 6d 69 6e 69 6d 69 7a 65 20 74 68 65 20  to minimize the 
d970: 72 69 73 6b 0a 74 68 61 74 20 75 6e 77 72 69 74  risk.that unwrit
d980: 74 65 6e 20 73 65 63 74 6f 72 73 20 6d 69 67 68  ten sectors migh
d990: 74 20 62 79 20 63 68 61 6e 63 65 20 63 6f 6e 74  t by chance cont
d9a0: 61 69 6e 20 64 61 74 61 20 66 72 6f 6d 20 74 68  ain data from th
d9b0: 65 20 73 61 6d 65 20 70 61 67 65 0a 74 68 61 74  e same page.that
d9c0: 20 77 61 73 20 61 20 70 61 72 74 20 6f 66 20 70   was a part of p
d9d0: 72 69 6f 72 20 6a 6f 75 72 6e 61 6c 73 2e 20 20  rior journals.  
d9e0: 42 79 20 63 68 61 6e 67 69 6e 67 20 74 68 65 20  By changing the 
d9f0: 6e 6f 6e 63 65 20 66 6f 72 20 65 61 63 68 0a 74  nonce for each.t
da00: 72 61 6e 73 61 63 74 69 6f 6e 2c 20 73 74 61 6c  ransaction, stal
da10: 65 20 64 61 74 61 20 6f 6e 20 64 69 73 6b 20 77  e data on disk w
da20: 69 6c 6c 20 73 74 69 6c 6c 20 67 65 6e 65 72 61  ill still genera
da30: 74 65 20 61 6e 20 69 6e 63 6f 72 72 65 63 74 20  te an incorrect 
da40: 63 68 65 63 6b 73 75 6d 0a 61 6e 64 20 62 65 20  checksum.and be 
da50: 64 65 74 65 63 74 65 64 20 77 69 74 68 20 68 69  detected with hi
da60: 67 68 20 70 72 6f 62 61 62 69 6c 69 74 79 2e 20  gh probability. 
da70: 20 54 68 65 20 63 68 65 63 6b 73 75 6d 20 6f 6e   The checksum on
da80: 6c 79 20 75 73 65 73 20 61 20 73 70 61 72 73 65  ly uses a sparse
da90: 20 73 61 6d 70 6c 65 0a 6f 66 20 33 32 2d 62 69   sample.of 32-bi
daa0: 74 20 77 6f 72 64 73 20 66 72 6f 6d 20 74 68 65  t words from the
dab0: 20 64 61 74 61 20 72 65 63 6f 72 64 20 66 6f 72   data record for
dac0: 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 72 65 61   performance rea
dad0: 73 6f 6e 73 20 2d 20 64 65 73 69 67 6e 20 73 74  sons - design st
dae0: 75 64 69 65 73 20 0a 64 75 72 69 6e 67 20 74 68  udies .during th
daf0: 65 20 70 6c 61 6e 6e 69 6e 67 20 70 68 61 73 65  e planning phase
db00: 73 20 6f 66 20 53 51 4c 69 74 65 20 33 2e 30 2e  s of SQLite 3.0.
db10: 30 20 73 68 6f 77 65 64 0a 61 20 73 69 67 6e 69  0 showed.a signi
db20: 66 69 63 61 6e 74 20 70 65 72 66 6f 72 6d 61 6e  ficant performan
db30: 63 65 20 68 69 74 20 69 6e 20 63 68 65 63 6b 73  ce hit in checks
db40: 75 6d 6d 69 6e 67 20 74 68 65 20 65 6e 74 69 72  umming the entir
db50: 65 20 70 61 67 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e  e page.</p>..<p>
db60: 4c 65 74 20 74 68 65 20 70 61 67 65 20 63 6f 75  Let the page cou
db70: 6e 74 20 76 61 6c 75 65 20 61 74 20 6f 66 66 73  nt value at offs
db80: 65 74 20 38 20 69 6e 20 74 68 65 20 6a 6f 75 72  et 8 in the jour
db90: 6e 61 6c 20 68 65 61 64 65 72 20 62 65 20 4d 2e  nal header be M.
dba0: 0a 5e 49 66 20 4d 20 69 73 20 67 72 65 61 74 65  .^If M is greate
dbb0: 72 20 74 68 61 6e 20 7a 65 72 6f 20 74 68 65 6e  r than zero then
dbc0: 20 61 66 74 65 72 20 4d 20 70 61 67 65 20 72 65   after M page re
dbd0: 63 6f 72 64 73 20 74 68 65 20 6a 6f 75 72 6e 61  cords the journa
dbe0: 6c 20 66 69 6c 65 0a 6d 61 79 20 62 65 20 7a 65  l file.may be ze
dbf0: 72 6f 20 70 61 64 64 65 64 20 6f 75 74 20 74 6f  ro padded out to
dc00: 20 74 68 65 20 6e 65 78 74 20 6d 75 6c 74 69 70   the next multip
dc10: 6c 65 20 6f 66 20 74 68 65 20 73 65 63 74 6f 72  le of the sector
dc20: 20 73 69 7a 65 20 61 6e 64 20 61 6e 6f 74 68 65   size and anothe
dc30: 72 0a 6a 6f 75 72 6e 61 6c 20 68 65 61 64 65 72  r.journal header
dc40: 20 6d 61 79 20 62 65 20 69 6e 73 65 72 74 65 64   may be inserted
dc50: 2e 20 20 5e 41 6c 6c 20 6a 6f 75 72 6e 61 6c 20  .  ^All journal 
dc60: 68 65 61 64 65 72 73 20 77 69 74 68 69 6e 20 74  headers within t
dc70: 68 65 20 73 61 6d 65 0a 6a 6f 75 72 6e 61 6c 20  he same.journal 
dc80: 6d 75 73 74 20 63 6f 6e 74 61 69 6e 20 74 68 65  must contain the
dc90: 20 73 61 6d 65 20 64 61 74 61 62 61 73 65 20 70   same database p
dca0: 61 67 65 20 73 69 7a 65 20 61 6e 64 20 73 65 63  age size and sec
dcb0: 74 6f 72 20 73 69 7a 65 2e 3c 2f 70 3e 0a 0a 3c  tor size.</p>..<
dcc0: 70 3e 5e 49 66 20 4d 20 69 73 20 2d 31 20 69 6e  p>^If M is -1 in
dcd0: 20 74 68 65 20 69 6e 69 74 69 61 6c 20 6a 6f 75   the initial jou
dce0: 72 6e 61 6c 20 68 65 61 64 65 72 2c 20 74 68 65  rnal header, the
dcf0: 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  n the number of 
dd00: 70 61 67 65 20 72 65 63 6f 72 64 73 0a 74 68 61  page records.tha
dd10: 74 20 66 6f 6c 6c 6f 77 20 69 73 20 63 6f 6d 70  t follow is comp
dd20: 75 74 65 64 20 62 79 20 63 6f 6d 70 75 74 69 6e  uted by computin
dd30: 67 20 68 6f 77 20 6d 61 6e 79 20 70 61 67 65 20  g how many page 
dd40: 72 65 63 6f 72 64 73 20 77 69 6c 6c 20 66 69 74  records will fit
dd50: 20 69 6e 0a 74 68 65 20 61 76 61 69 6c 61 62 6c   in.the availabl
dd60: 65 20 73 70 61 63 65 20 6f 66 20 74 68 65 20 72  e space of the r
dd70: 65 6d 61 69 6e 64 65 72 20 6f 66 20 74 68 65 20  emainder of the 
dd80: 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 2e 3c 2f 70  journal file.</p
dd90: 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
dda0: 65 6e 74 20 77 61 6c 66 6f 72 6d 61 74 20 7b 57  ent walformat {W
ddb0: 41 4c 20 66 6f 72 6d 61 74 7d 3c 2f 74 63 6c 3e  AL format}</tcl>
ddc0: 0a 3c 68 32 3e 34 2e 30 20 54 68 65 20 57 72 69  .<h2>4.0 The Wri
ddd0: 74 65 2d 41 68 65 61 64 20 4c 6f 67 3c 2f 68 32  te-Ahead Log</h2
dde0: 3e 0a 0a 3c 70 3e 42 65 67 69 6e 6e 69 6e 67 20  >..<p>Beginning 
ddf0: 77 69 74 68 20 5b 76 65 72 73 69 6f 6e 20 33 2e  with [version 3.
de00: 37 2e 30 5d 2c 20 53 51 4c 69 74 65 20 73 75 70  7.0], SQLite sup
de10: 70 6f 72 74 73 20 61 20 6e 65 77 20 74 72 61 6e  ports a new tran
de20: 73 61 63 74 69 6f 6e 0a 63 6f 6e 74 72 6f 6c 20  saction.control 
de30: 6d 65 63 68 61 6e 69 73 6d 20 63 61 6c 6c 65 64  mechanism called
de40: 20 22 5b 57 41 4c 20 7c 20 77 72 69 74 65 2d 61   "[WAL | write-a
de50: 68 65 61 64 20 6c 6f 67 5d 22 20 6f 72 20 22 5b  head log]" or "[
de60: 57 41 4c 5d 22 2e 0a 5e 57 68 65 6e 20 61 20 64  WAL]"..^When a d
de70: 61 74 61 62 61 73 65 20 69 73 20 69 6e 20 57 41  atabase is in WA
de80: 4c 20 6d 6f 64 65 2c 20 61 6c 6c 20 63 6f 6e 6e  L mode, all conn
de90: 65 63 74 69 6f 6e 73 20 74 6f 20 74 68 61 74 20  ections to that 
dea0: 64 61 74 61 62 61 73 65 20 6d 75 73 74 0a 75 73  database must.us
deb0: 65 20 74 68 65 20 57 41 4c 2e 20 20 5e 41 20 70  e the WAL.  ^A p
dec0: 61 72 74 69 63 75 6c 61 72 20 64 61 74 61 62 61  articular databa
ded0: 73 65 20 77 69 6c 6c 20 75 73 65 20 65 69 74 68  se will use eith
dee0: 65 72 20 61 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f  er a rollback jo
def0: 75 72 6e 61 6c 0a 6f 72 20 61 20 57 41 4c 2c 20  urnal.or a WAL, 
df00: 62 75 74 20 6e 6f 74 20 62 6f 74 68 20 61 74 20  but not both at 
df10: 74 68 65 20 73 61 6d 65 20 74 69 6d 65 2e 0a 5e  the same time..^
df20: 54 68 65 20 57 41 4c 20 69 73 20 61 6c 77 61 79  The WAL is alway
df30: 73 20 6c 6f 63 61 74 65 64 20 69 6e 20 74 68 65  s located in the
df40: 20 64 69 72 65 63 74 6f 72 79 20 61 73 20 74 68   directory as th
df50: 65 20 64 61 74 61 62 61 73 65 0a 66 69 6c 65 20  e database.file 
df60: 61 6e 64 20 68 61 73 20 74 68 65 20 73 61 6d 65  and has the same
df70: 20 6e 61 6d 65 20 61 73 20 74 68 65 20 64 61 74   name as the dat
df80: 61 62 61 73 65 20 66 69 6c 65 20 62 75 74 20 77  abase file but w
df90: 69 74 68 20 74 68 65 20 73 74 72 69 6e 67 0a 22  ith the string."
dfa0: 3c 74 74 3e 2d 77 61 6c 3c 2f 74 74 3e 22 20 61  <tt>-wal</tt>" a
dfb0: 70 70 65 6e 64 65 64 2e 3c 2f 70 3e 0a 0a 3c 68  ppended.</p>..<h
dfc0: 33 3e 34 2e 31 20 57 41 4c 20 46 69 6c 65 20 46  3>4.1 WAL File F
dfd0: 6f 72 6d 61 74 3c 2f 68 34 3e 0a 0a 3c 70 3e 41  ormat</h4>..<p>A
dfe0: 20 57 41 4c 20 66 69 6c 65 20 63 6f 6e 73 69 73   WAL file consis
dff0: 74 73 20 6f 66 20 61 20 68 65 61 64 65 72 20 66  ts of a header f
e000: 6f 6c 6c 6f 77 65 64 20 62 79 20 7a 65 72 6f 20  ollowed by zero 
e010: 6f 72 20 6d 6f 72 65 20 22 66 72 61 6d 65 73 22  or more "frames"
e020: 2e 0a 45 61 63 68 20 66 72 61 6d 65 20 72 65 63  ..Each frame rec
e030: 6f 72 64 73 20 74 68 65 20 72 65 76 69 73 65 64  ords the revised
e040: 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61 20 73 69   content of a si
e050: 6e 67 6c 65 20 70 61 67 65 20 66 72 6f 6d 20 74  ngle page from t
e060: 68 65 0a 64 61 74 61 62 61 73 65 20 66 69 6c 65  he.database file
e070: 2e 20 20 41 6c 6c 20 63 68 61 6e 67 65 73 20 74  .  All changes t
e080: 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61  o the database a
e090: 72 65 20 72 65 63 6f 72 64 65 64 20 62 79 20 77  re recorded by w
e0a0: 72 69 74 69 6e 67 0a 66 72 61 6d 65 73 20 69 6e  riting.frames in
e0b0: 74 6f 20 74 68 65 20 57 41 4c 2e 20 20 54 72 61  to the WAL.  Tra
e0c0: 6e 73 61 63 74 69 6f 6e 73 20 63 6f 6d 6d 69 74  nsactions commit
e0d0: 20 77 68 65 6e 20 61 20 66 72 61 6d 65 20 69 73   when a frame is
e0e0: 20 77 72 69 74 74 65 6e 20 74 68 61 74 0a 63 6f   written that.co
e0f0: 6e 74 61 69 6e 73 20 61 20 63 6f 6d 6d 69 74 20  ntains a commit 
e100: 6d 61 72 6b 65 72 2e 20 20 5e 41 20 73 69 6e 67  marker.  ^A sing
e110: 6c 65 20 57 41 4c 20 63 61 6e 20 61 6e 64 20 75  le WAL can and u
e120: 73 75 61 6c 6c 79 20 64 6f 65 73 20 72 65 63 6f  sually does reco
e130: 72 64 20 0a 6d 75 6c 74 69 70 6c 65 20 74 72 61  rd .multiple tra
e140: 6e 73 61 63 74 69 6f 6e 73 2e 20 20 50 65 72 69  nsactions.  Peri
e150: 6f 64 69 63 61 6c 6c 79 2c 20 74 68 65 20 63 6f  odically, the co
e160: 6e 74 65 6e 74 20 6f 66 20 74 68 65 20 57 41 4c  ntent of the WAL
e170: 20 69 73 0a 74 72 61 6e 73 66 65 72 72 65 64 20   is.transferred 
e180: 62 61 63 6b 20 69 6e 74 6f 20 74 68 65 20 64 61  back into the da
e190: 74 61 62 61 73 65 20 66 69 6c 65 20 69 6e 20 61  tabase file in a
e1a0: 6e 20 6f 70 65 72 61 74 69 6f 6e 20 63 61 6c 6c  n operation call
e1b0: 65 64 20 61 0a 22 63 68 65 63 6b 70 6f 69 6e 74  ed a."checkpoint
e1c0: 22 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 20 73 69  ".</p>..<p>^A si
e1d0: 6e 67 6c 65 20 57 41 4c 20 66 69 6c 65 20 63 61  ngle WAL file ca
e1e0: 6e 20 62 65 20 72 65 75 73 65 64 20 6d 75 6c 74  n be reused mult
e1f0: 69 70 6c 65 20 74 69 6d 65 73 2e 20 20 5e 49 6e  iple times.  ^In
e200: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
e210: 65 0a 57 41 4c 20 63 61 6e 20 66 69 6c 6c 20 75  e.WAL can fill u
e220: 70 20 77 69 74 68 20 66 72 61 6d 65 73 20 61 6e  p with frames an
e230: 64 20 74 68 65 6e 20 62 65 20 63 68 65 63 6b 70  d then be checkp
e240: 6f 69 6e 74 65 64 20 61 6e 64 20 74 68 65 6e 20  ointed and then 
e250: 6e 65 77 0a 66 72 61 6d 65 73 20 63 61 6e 20 6f  new.frames can o
e260: 76 65 72 77 72 69 74 65 20 74 68 65 20 6f 6c 64  verwrite the old
e270: 20 6f 6e 65 73 2e 20 20 5e 41 20 57 41 4c 20 61   ones.  ^A WAL a
e280: 6c 77 61 79 73 20 67 72 6f 77 73 20 66 72 6f 6d  lways grows from
e290: 20 62 65 67 69 6e 6e 69 6e 67 0a 74 6f 77 61 72   beginning.towar
e2a0: 64 20 74 68 65 20 65 6e 64 2e 20 20 43 68 65 63  d the end.  Chec
e2b0: 6b 73 75 6d 73 20 61 6e 64 20 63 6f 75 6e 74 65  ksums and counte
e2c0: 72 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 65  rs attached to e
e2d0: 61 63 68 20 66 72 61 6d 65 20 61 72 65 0a 75 73  ach frame are.us
e2e0: 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  ed to determine 
e2f0: 77 68 69 63 68 20 66 72 61 6d 65 73 20 77 69 74  which frames wit
e300: 68 69 6e 20 74 68 65 20 57 41 4c 20 61 72 65 20  hin the WAL are 
e310: 76 61 6c 69 64 20 61 6e 64 20 77 68 69 63 68 0a  valid and which.
e320: 61 72 65 20 6c 65 66 74 6f 76 65 72 73 20 66 72  are leftovers fr
e330: 6f 6d 20 70 72 69 6f 72 20 63 68 65 63 6b 70 6f  om prior checkpo
e340: 69 6e 74 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28  ints.</p>..<p>^(
e350: 54 68 65 20 57 41 4c 20 68 65 61 64 65 72 20 69  The WAL header i
e360: 73 20 33 32 20 62 79 74 65 73 20 69 6e 20 73 69  s 32 bytes in si
e370: 7a 65 20 61 6e 64 20 63 6f 6e 73 69 73 74 73 20  ze and consists 
e380: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
e390: 20 65 69 67 68 74 0a 62 69 67 2d 65 6e 64 69 61   eight.big-endia
e3a0: 6e 20 33 32 2d 62 69 74 20 75 6e 73 69 67 6e 65  n 32-bit unsigne
e3b0: 64 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 73  d integer values
e3c0: 3a 3c 2f 70 3e 0a 0a 3c 63 65 6e 74 65 72 3e 0a  :</p>..<center>.
e3d0: 3c 69 3e 57 41 4c 20 48 65 61 64 65 72 20 46 6f  <i>WAL Header Fo
e3e0: 72 6d 61 74 3c 2f 69 3e 3c 62 72 3e 0a 3c 74 61  rmat</i><br>.<ta
e3f0: 62 6c 65 20 77 69 64 74 68 3d 22 38 30 25 22 20  ble width="80%" 
e400: 62 6f 72 64 65 72 3d 31 3e 0a 3c 74 72 3e 3c 74  border=1>.<tr><t
e410: 68 3e 4f 66 66 73 65 74 3c 74 68 3e 53 69 7a 65  h>Offset<th>Size
e420: 3c 74 68 3e 44 65 73 63 72 69 70 74 69 6f 6e 0a  <th>Description.
e430: 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74  <tr><td valign=t
e440: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
e450: 30 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  0<td valign=top 
e460: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20  align=center>4. 
e470: 20 20 20 3c 74 64 3e 4d 61 67 69 63 20 6e 75 6d     <td>Magic num
e480: 62 65 72 2e 20 20 30 78 33 37 37 66 30 36 38 32  ber.  0x377f0682
e490: 20 6f 72 20 30 78 33 37 37 66 30 36 38 33 0a 3c   or 0x377f0683.<
e4a0: 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
e4b0: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34  p align=center>4
e4c0: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
e4d0: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20  lign=center>4.  
e4e0: 20 20 3c 74 64 3e 46 69 6c 65 20 66 6f 72 6d 61    <td>File forma
e4f0: 74 20 76 65 72 73 69 6f 6e 2e 20 20 43 75 72 72  t version.  Curr
e500: 65 6e 74 6c 79 20 33 30 30 37 30 30 30 2e 0a 3c  ently 3007000..<
e510: 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
e520: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 38  p align=center>8
e530: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
e540: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20  lign=center>4.  
e550: 20 20 3c 74 64 3e 44 61 74 61 62 61 73 65 20 70    <td>Database p
e560: 61 67 65 20 73 69 7a 65 2e 20 20 45 78 61 6d 70  age size.  Examp
e570: 6c 65 3a 20 31 30 32 34 0a 3c 74 72 3e 3c 74 64  le: 1024.<tr><td
e580: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
e590: 6e 3d 63 65 6e 74 65 72 3e 31 32 3c 74 64 20 76  n=center>12<td v
e5a0: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
e5b0: 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64  center>4.    <td
e5c0: 3e 43 68 65 63 6b 70 6f 69 6e 74 20 73 65 71 75  >Checkpoint sequ
e5d0: 65 6e 63 65 20 6e 75 6d 62 65 72 0a 3c 74 72 3e  ence number.<tr>
e5e0: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
e5f0: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 36 3c 74  lign=center>16<t
e600: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
e610: 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20  gn=center>4.    
e620: 3c 74 64 3e 53 61 6c 74 2d 31 3a 20 72 61 6e 64  <td>Salt-1: rand
e630: 6f 6d 20 69 6e 74 65 67 65 72 20 69 6e 63 72 65  om integer incre
e640: 6d 65 6e 74 65 64 20 77 69 74 68 20 65 61 63 68  mented with each
e650: 20 63 68 65 63 6b 70 6f 69 6e 74 0a 3c 74 72 3e   checkpoint.<tr>
e660: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
e670: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32 30 3c 74  lign=center>20<t
e680: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
e690: 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20  gn=center>4.    
e6a0: 3c 74 64 3e 53 61 6c 74 2d 32 3a 20 61 20 64 69  <td>Salt-2: a di
e6b0: 66 66 65 72 65 6e 74 20 72 61 6e 64 6f 6d 20 6e  fferent random n
e6c0: 75 6d 62 65 72 20 66 6f 72 20 65 61 63 68 20 63  umber for each c
e6d0: 68 65 63 6b 70 6f 69 6e 74 0a 3c 74 72 3e 3c 74  heckpoint.<tr><t
e6e0: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
e6f0: 67 6e 3d 63 65 6e 74 65 72 3e 32 34 3c 74 64 20  gn=center>24<td 
e700: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
e710: 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74  =center>4.    <t
e720: 64 3e 43 68 65 63 6b 73 75 6d 2d 31 3a 20 46 69  d>Checksum-1: Fi
e730: 72 73 74 20 70 61 72 74 20 6f 66 20 61 20 63 68  rst part of a ch
e740: 65 63 6b 73 75 6d 20 6f 6e 20 74 68 65 20 66 69  ecksum on the fi
e750: 72 73 74 20 32 34 20 62 79 74 65 73 20 6f 66 20  rst 24 bytes of 
e760: 68 65 61 64 65 72 0a 3c 74 72 3e 3c 74 64 20 76  header.<tr><td v
e770: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
e780: 63 65 6e 74 65 72 3e 32 38 3c 74 64 20 76 61 6c  center>28<td val
e790: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
e7a0: 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 43  nter>4.    <td>C
e7b0: 68 65 63 6b 73 75 6d 2d 32 3a 20 53 65 63 6f 6e  hecksum-2: Secon
e7c0: 64 20 70 61 72 74 20 6f 66 20 74 68 65 20 63 68  d part of the ch
e7d0: 65 63 6b 73 75 6d 20 6f 6e 20 74 68 65 20 66 69  ecksum on the fi
e7e0: 72 73 74 20 32 34 20 62 79 74 65 73 20 6f 66 20  rst 24 bytes of 
e7f0: 68 65 61 64 65 72 0a 3c 2f 74 61 62 6c 65 3e 0a  header.</table>.
e800: 3c 2f 63 65 6e 74 65 72 3e 29 5e 0a 0a 3c 70 3e  </center>)^..<p>
e810: 5e 49 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c  ^Immediately fol
e820: 6c 6f 77 69 6e 67 20 74 68 65 20 77 61 6c 2d 68  lowing the wal-h
e830: 65 61 64 65 72 20 61 72 65 20 7a 65 72 6f 20 6f  eader are zero o
e840: 72 20 6d 6f 72 65 20 66 72 61 6d 65 73 2e 20 5e  r more frames. ^
e850: 45 61 63 68 0a 66 72 61 6d 65 20 63 6f 6e 73 69  Each.frame consi
e860: 73 74 73 20 6f 66 20 61 20 32 34 2d 62 79 74 65  sts of a 24-byte
e870: 20 66 72 61 6d 65 2d 68 65 61 64 65 72 20 66 6f   frame-header fo
e880: 6c 6c 6f 77 65 64 20 62 79 20 61 20 3c 69 3e 70  llowed by a <i>p
e890: 61 67 65 2d 73 69 7a 65 3c 2f 69 3e 20 62 79 74  age-size</i> byt
e8a0: 65 73 0a 6f 66 20 70 61 67 65 20 64 61 74 61 2e  es.of page data.
e8b0: 20 5e 28 54 68 65 20 66 72 61 6d 65 2d 68 65 61   ^(The frame-hea
e8c0: 64 65 72 20 69 73 20 73 69 78 20 62 69 67 2d 65  der is six big-e
e8d0: 6e 64 69 61 6e 20 33 32 2d 62 69 74 20 75 6e 73  ndian 32-bit uns
e8e0: 69 67 6e 65 64 20 0a 69 6e 74 65 67 65 72 20 76  igned .integer v
e8f0: 61 6c 75 65 73 2c 20 61 73 20 66 6f 6c 6c 6f 77  alues, as follow
e900: 73 3a 0a 0a 3c 63 65 6e 74 65 72 3e 0a 3c 69 3e  s:..<center>.<i>
e910: 57 41 4c 20 46 72 61 6d 65 20 48 65 61 64 65 72  WAL Frame Header
e920: 20 46 6f 72 6d 61 74 3c 2f 69 3e 3c 62 72 3e 0a   Format</i><br>.
e930: 3c 74 61 62 6c 65 20 77 69 64 74 68 3d 22 38 30  <table width="80
e940: 25 22 20 62 6f 72 64 65 72 3d 31 3e 0a 3c 74 72  %" border=1>.<tr
e950: 3e 3c 74 68 3e 4f 66 66 73 65 74 3c 74 68 3e 53  ><th>Offset<th>S
e960: 69 7a 65 3c 74 68 3e 44 65 73 63 72 69 70 74 69  ize<th>Descripti
e970: 6f 6e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  on.<tr><td valig
e980: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
e990: 65 72 3e 30 3c 74 64 20 76 61 6c 69 67 6e 3d 74  er>0<td valign=t
e9a0: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
e9b0: 34 0a 20 20 20 20 3c 74 64 3e 50 61 67 65 20 6e  4.    <td>Page n
e9c0: 75 6d 62 65 72 0a 3c 74 72 3e 3c 74 64 20 76 61  umber.<tr><td va
e9d0: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
e9e0: 65 6e 74 65 72 3e 34 3c 74 64 20 76 61 6c 69 67  enter>4<td valig
e9f0: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
ea00: 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 46 6f 72  er>4.    <td>For
ea10: 20 63 6f 6d 6d 69 74 20 72 65 63 6f 72 64 73 2c   commit records,
ea20: 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65   the size of the
ea30: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
ea40: 6e 20 70 61 67 65 73 0a 20 20 20 20 20 20 20 20  n pages.        
ea50: 61 66 74 65 72 20 74 68 65 20 63 6f 6d 6d 69 74  after the commit
ea60: 2e 20 20 46 6f 72 20 61 6c 6c 20 6f 74 68 65 72  .  For all other
ea70: 20 72 65 63 6f 72 64 73 2c 20 7a 65 72 6f 2e 0a   records, zero..
ea80: 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74  <tr><td valign=t
ea90: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
eaa0: 38 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  8<td valign=top 
eab0: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20  align=center>4. 
eac0: 20 20 20 3c 74 64 3e 53 61 6c 74 2d 31 20 63 6f     <td>Salt-1 co
ead0: 70 69 65 64 20 66 72 6f 6d 20 74 68 65 20 57 41  pied from the WA
eae0: 4c 20 68 65 61 64 65 72 0a 3c 74 72 3e 3c 74 64  L header.<tr><td
eaf0: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
eb00: 6e 3d 63 65 6e 74 65 72 3e 31 32 3c 74 64 20 76  n=center>12<td v
eb10: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
eb20: 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64  center>4.    <td
eb30: 3e 53 61 6c 74 2d 32 20 63 6f 70 69 65 64 20 66  >Salt-2 copied f
eb40: 72 6f 6d 20 74 68 65 20 57 41 4c 20 68 65 61 64  rom the WAL head
eb50: 65 72 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  er.<tr><td valig
eb60: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
eb70: 65 72 3e 31 36 3c 74 64 20 76 61 6c 69 67 6e 3d  er>16<td valign=
eb80: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
eb90: 3e 34 0a 20 20 20 20 3c 74 64 3e 43 68 65 63 6b  >4.    <td>Check
eba0: 73 75 6d 2d 31 3a 20 20 43 75 6d 75 6c 61 74 69  sum-1:  Cumulati
ebb0: 76 65 20 63 68 65 63 6b 73 75 6d 20 75 70 20 74  ve checksum up t
ebc0: 68 72 6f 75 67 68 20 61 6e 64 20 69 6e 63 6c 75  hrough and inclu
ebd0: 64 69 6e 67 20 74 68 69 73 20 70 61 67 65 0a 3c  ding this page.<
ebe0: 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
ebf0: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32  p align=center>2
ec00: 30 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  0<td valign=top 
ec10: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20  align=center>4. 
ec20: 20 20 20 3c 74 64 3e 43 68 65 63 6b 73 75 6d 2d     <td>Checksum-
ec30: 32 3a 20 20 53 65 63 6f 6e 64 20 68 61 6c 66 20  2:  Second half 
ec40: 6f 66 20 74 68 65 20 63 75 6d 75 6c 61 74 69 76  of the cumulativ
ec50: 65 20 63 68 65 63 6b 73 75 6d 2e 0a 3c 2f 74 61  e checksum..</ta
ec60: 62 6c 65 3e 0a 3c 2f 63 65 6e 74 65 72 3e 29 5e  ble>.</center>)^
ec70: 0a 0a 5e 28 3c 70 3e 41 20 66 72 61 6d 65 20 69  ..^(<p>A frame i
ec80: 73 20 63 6f 6e 73 69 64 65 72 65 64 20 76 61 6c  s considered val
ec90: 69 64 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69  id if and only i
eca0: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
ecb0: 63 6f 6e 64 69 74 69 6f 6e 73 20 61 72 65 0a 74  conditions are.t
ecc0: 72 75 65 3a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c  rue:</p>..<ol>.<
ecd0: 6c 69 3e 3c 70 3e 54 68 65 20 73 61 6c 74 2d 31  li><p>The salt-1
ece0: 20 61 6e 64 20 73 61 6c 74 2d 32 20 76 61 6c 75   and salt-2 valu
ecf0: 65 73 20 69 6e 20 74 68 65 20 66 72 61 6d 65 2d  es in the frame-
ed00: 68 65 61 64 65 72 20 6d 61 74 63 68 0a 20 20 20  header match.   
ed10: 20 20 20 20 73 61 6c 74 20 76 61 6c 75 65 73 20      salt values 
ed20: 69 6e 20 74 68 65 20 77 61 6c 2d 68 65 61 64 65  in the wal-heade
ed30: 72 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e  r</p></li>..<li>
ed40: 3c 70 3e 54 68 65 20 63 68 65 63 6b 73 75 6d 20  <p>The checksum 
ed50: 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 66 69  values in the fi
ed60: 6e 61 6c 20 38 20 62 79 74 65 73 20 6f 66 20 74  nal 8 bytes of t
ed70: 68 65 20 66 72 61 6d 65 2d 68 65 61 64 65 72 0a  he frame-header.
ed80: 20 20 20 20 20 20 20 65 78 61 63 74 6c 79 20 6d         exactly m
ed90: 61 74 63 68 20 74 68 65 20 63 68 65 63 6b 73 75  atch the checksu
eda0: 6d 20 63 6f 6d 70 75 74 65 64 20 63 6f 6e 73 65  m computed conse
edb0: 63 75 74 69 76 65 6c 79 20 6f 6e 20 74 68 65 0a  cutively on the.
edc0: 20 20 20 20 20 20 20 57 41 4c 20 68 65 61 64 65         WAL heade
edd0: 72 20 61 6e 64 20 74 68 65 20 66 69 72 73 74 20  r and the first 
ede0: 38 20 62 79 74 65 73 20 61 6e 64 20 74 68 65 20  8 bytes and the 
edf0: 63 6f 6e 74 65 6e 74 20 6f 66 20 61 6c 6c 20 66  content of all f
ee00: 72 61 6d 65 73 0a 20 20 20 20 20 20 20 75 70 20  rames.       up 
ee10: 74 6f 20 61 6e 64 20 69 6e 63 6c 75 64 69 6e 67  to and including
ee20: 20 74 68 65 20 63 75 72 72 65 6e 74 20 66 72 61   the current fra
ee30: 6d 65 2e 3c 2f 70 3e 3c 2f 6c 69 3e 3c 2f 6c 69  me.</p></li></li
ee40: 3e 0a 3c 2f 6f 6c 3e 29 5e 0a 0a 3c 74 63 6c 3e  >.</ol>)^..<tcl>
ee50: 68 64 5f 66 72 61 67 6d 65 6e 74 20 77 61 6c 63  hd_fragment walc
ee60: 6b 73 6d 20 7b 57 41 4c 20 63 68 65 63 6b 73 75  ksm {WAL checksu
ee70: 6d 20 61 6c 67 6f 72 69 74 68 6d 7d 3c 2f 74 63  m algorithm}</tc
ee80: 6c 3e 0a 3c 68 33 3e 34 2e 32 20 43 68 65 63 6b  l>.<h3>4.2 Check
ee90: 73 75 6d 20 41 6c 67 6f 72 69 74 68 6d 3c 2f 68  sum Algorithm</h
eea0: 33 3e 0a 0a 3c 70 3e 54 68 65 20 63 68 65 63 6b  3>..<p>The check
eeb0: 73 75 6d 20 69 73 20 63 6f 6d 70 75 74 65 64 20  sum is computed 
eec0: 62 79 20 69 6e 74 65 72 70 72 65 74 69 6e 67 20  by interpreting 
eed0: 74 68 65 20 69 6e 70 75 74 20 61 73 0a 61 6e 20  the input as.an 
eee0: 65 76 65 6e 20 6e 75 6d 62 65 72 20 6f 66 20 75  even number of u
eef0: 6e 73 69 67 6e 65 64 20 33 32 2d 62 69 74 20 69  nsigned 32-bit i
ef00: 6e 74 65 67 65 72 73 3a 20 78 28 30 29 20 74 68  ntegers: x(0) th
ef10: 72 6f 75 67 68 20 78 28 4e 29 2e 0a 5e 54 68 65  rough x(N)..^The
ef20: 20 33 32 2d 62 69 74 20 69 6e 74 65 67 65 72 73   32-bit integers
ef30: 20 61 72 65 20 62 69 67 2d 65 6e 64 69 61 6e 20   are big-endian 
ef40: 69 66 20 74 68 65 0a 6d 61 67 69 63 20 6e 75 6d  if the.magic num
ef50: 62 65 72 20 69 6e 20 74 68 65 20 66 69 72 73 74  ber in the first
ef60: 20 34 20 62 79 74 65 73 20 6f 66 20 74 68 65 20   4 bytes of the 
ef70: 57 41 4c 20 68 65 61 64 65 72 20 69 73 20 30 78  WAL header is 0x
ef80: 33 37 37 66 30 36 38 33 20 61 6e 64 0a 74 68 65  377f0683 and.the
ef90: 20 69 6e 74 65 67 65 72 73 20 61 72 65 20 6c 69   integers are li
efa0: 74 74 6c 65 2d 65 6e 64 69 61 6e 20 74 68 65 20  ttle-endian the 
efb0: 6d 61 67 69 63 20 6e 75 6d 62 65 72 20 69 73 20  magic number is 
efc0: 30 78 33 37 37 66 30 36 38 32 2e 0a 5e 54 68 65  0x377f0682..^The
efd0: 20 63 68 65 63 6b 73 75 6d 20 76 61 6c 75 65 73   checksum values
efe0: 20 61 72 65 20 61 6c 77 61 79 73 20 73 74 6f 72   are always stor
eff0: 65 64 20 69 6e 20 74 68 65 20 66 72 61 6d 65 20  ed in the frame 
f000: 68 65 61 64 65 72 20 69 6e 20 61 0a 62 69 67 2d  header in a.big-
f010: 65 6e 64 69 61 6e 20 66 6f 72 6d 61 74 20 72 65  endian format re
f020: 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 69 63  gardless of whic
f030: 68 20 62 79 74 65 20 6f 72 64 65 72 20 69 73 20  h byte order is 
f040: 75 73 65 64 20 74 6f 20 63 6f 6d 70 75 74 65 0a  used to compute.
f050: 74 68 65 20 63 68 65 63 6b 73 75 6d 2e 3c 2f 70  the checksum.</p
f060: 3e 0a 0a 3c 70 3e 54 68 65 20 63 68 65 63 6b 73  >..<p>The checks
f070: 75 6d 20 61 6c 67 6f 72 69 74 68 6d 20 6f 6e 6c  um algorithm onl
f080: 79 20 77 6f 72 6b 73 20 66 6f 72 20 63 6f 6e 74  y works for cont
f090: 65 6e 74 20 77 68 69 63 68 20 69 73 20 61 20 6d  ent which is a m
f0a0: 75 6c 74 69 70 6c 65 20 6f 66 0a 38 20 62 79 74  ultiple of.8 byt
f0b0: 65 73 20 69 6e 20 6c 65 6e 67 74 68 2e 20 20 49  es in length.  I
f0c0: 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69  n other words, i
f0d0: 66 20 74 68 65 20 69 6e 70 75 74 73 20 61 72 65  f the inputs are
f0e0: 20 78 28 30 29 20 74 68 72 6f 75 67 68 20 78 28   x(0) through x(
f0f0: 4e 29 0a 74 68 65 6e 20 4e 20 6d 75 73 74 20 62  N).then N must b
f100: 65 20 6f 64 64 2e 0a 5e 28 54 68 65 20 63 68 65  e odd..^(The che
f110: 63 6b 73 75 6d 20 61 6c 67 6f 72 69 74 68 6d 20  cksum algorithm 
f120: 69 73 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a  is as follows:..
f130: 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65  <blockquote><pre
f140: 3e 20 0a 73 30 20 3d 20 73 31 20 3d 20 30 0a 66  > .s0 = s1 = 0.f
f150: 6f 72 20 69 20 66 72 6f 6d 20 30 20 74 6f 20 6e  or i from 0 to n
f160: 2d 31 20 73 74 65 70 20 32 3a 0a 20 20 20 73 30  -1 step 2:.   s0
f170: 20 2b 3d 20 78 28 69 29 20 2b 20 73 31 3b 0a 20   += x(i) + s1;. 
f180: 20 20 73 31 20 2b 3d 20 78 28 69 2b 31 29 20 2b    s1 += x(i+1) +
f190: 20 73 30 3b 0a 65 6e 64 66 6f 72 0a 23 20 72 65   s0;.endfor.# re
f1a0: 73 75 6c 74 20 69 6e 20 73 30 20 61 6e 64 20 73  sult in s0 and s
f1b0: 31 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71  1.</pre></blockq
f1c0: 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 5e 54 68 65  uote>)^..<p>^The
f1d0: 20 6f 75 74 70 75 74 73 20 73 30 20 61 6e 64 20   outputs s0 and 
f1e0: 73 31 20 61 72 65 20 62 6f 74 68 20 77 65 69 67  s1 are both weig
f1f0: 68 74 65 64 20 63 68 65 63 6b 73 75 6d 73 20 75  hted checksums u
f200: 73 69 6e 67 20 46 69 62 6f 6e 61 63 63 69 20 77  sing Fibonacci w
f210: 65 69 67 68 74 73 0a 69 6e 20 72 65 76 65 72 73  eights.in revers
f220: 65 20 6f 72 64 65 72 2e 20 20 28 5e 54 68 65 20  e order.  (^The 
f230: 6c 61 72 67 65 73 74 20 46 69 62 6f 6e 61 63 63  largest Fibonacc
f240: 69 20 77 65 69 67 68 74 20 6f 63 63 75 72 73 20  i weight occurs 
f250: 6f 6e 20 74 68 65 20 66 69 72 73 74 20 65 6c 65  on the first ele
f260: 6d 65 6e 74 0a 6f 66 20 74 68 65 20 73 65 71 75  ment.of the sequ
f270: 65 6e 63 65 20 62 65 69 6e 67 20 73 75 6d 6d 65  ence being summe
f280: 64 2e 29 20 20 5e 54 68 65 20 73 31 20 76 61 6c  d.)  ^The s1 val
f290: 75 65 20 73 70 61 6e 73 20 61 6c 6c 20 33 32 2d  ue spans all 32-
f2a0: 62 69 74 20 69 6e 74 65 67 65 72 0a 74 65 72 6d  bit integer.term
f2b0: 73 20 6f 66 20 74 68 65 20 73 65 71 75 65 6e 63  s of the sequenc
f2c0: 65 20 77 68 65 72 65 61 73 20 73 30 20 6f 6d 69  e whereas s0 omi
f2d0: 74 73 20 74 68 65 20 66 69 6e 61 6c 20 74 65 72  ts the final ter
f2e0: 6d 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 34 2e 33 20  m.</p>..<h3>4.3 
f2f0: 43 68 65 63 6b 70 6f 69 6e 74 20 41 6c 67 6f 72  Checkpoint Algor
f300: 69 74 68 6d 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 4f  ithm</h3>..<p>^O
f310: 6e 20 61 20 5b 63 68 65 63 6b 70 6f 69 6e 74 5d  n a [checkpoint]
f320: 2c 20 74 68 65 20 57 41 4c 20 69 73 20 66 69 72  , the WAL is fir
f330: 73 74 20 66 6c 75 73 68 65 64 20 74 6f 20 70 65  st flushed to pe
f340: 72 73 69 73 74 65 6e 74 20 73 74 6f 72 61 67 65  rsistent storage
f350: 20 75 73 69 6e 67 0a 74 68 65 20 78 53 79 6e 63   using.the xSync
f360: 20 6d 65 74 68 6f 64 20 6f 66 20 74 68 65 20 5b   method of the [
f370: 73 71 6c 69 74 65 33 5f 69 6f 5f 6d 65 74 68 6f  sqlite3_io_metho
f380: 64 73 20 7c 20 56 46 53 5d 2e 20 0a 5e 54 68 65  ds | VFS]. .^The
f390: 6e 20 76 61 6c 69 64 20 63 6f 6e 74 65 6e 74 20  n valid content 
f3a0: 6f 66 20 74 68 65 20 57 41 4c 20 69 73 20 74 72  of the WAL is tr
f3b0: 61 6e 73 66 65 72 72 65 64 20 69 6e 74 6f 20 74  ansferred into t
f3c0: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
f3d0: 2e 0a 5e 46 69 6e 61 6c 6c 79 2c 20 74 68 65 20  ..^Finally, the 
f3e0: 64 61 74 61 62 61 73 65 20 69 73 20 66 6c 75 73  database is flus
f3f0: 68 65 64 20 74 6f 20 70 65 72 73 69 73 74 65 6e  hed to persisten
f400: 74 20 73 74 6f 72 61 67 65 20 75 73 69 6e 67 20  t storage using 
f410: 61 6e 6f 74 68 65 72 0a 78 53 79 6e 63 20 6d 65  another.xSync me
f420: 74 68 6f 64 20 63 61 6c 6c 2e 0a 54 68 65 20 78  thod call..The x
f430: 53 79 6e 63 20 6f 70 65 72 61 74 69 6f 6e 73 20  Sync operations 
f440: 73 65 72 76 65 20 61 73 20 77 72 69 74 65 20 62  serve as write b
f450: 61 72 72 69 65 72 73 20 2d 20 61 6c 6c 20 77 72  arriers - all wr
f460: 69 74 65 73 20 6c 61 75 6e 63 68 65 64 0a 62 65  ites launched.be
f470: 66 6f 72 65 20 74 68 65 20 78 53 79 6e 63 20 6d  fore the xSync m
f480: 75 73 74 20 63 6f 6d 70 6c 65 74 65 20 62 65 66  ust complete bef
f490: 6f 72 65 20 61 6e 79 20 77 72 69 74 65 20 74 68  ore any write th
f4a0: 61 74 20 6c 61 75 6e 63 68 65 73 20 61 66 74 65  at launches afte
f4b0: 72 20 74 68 65 0a 78 53 79 6e 63 20 62 65 67 69  r the.xSync begi
f4c0: 6e 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 66 74  ns.</p>..<p>^Aft
f4d0: 65 72 20 65 61 63 68 20 63 68 65 63 6b 70 6f 69  er each checkpoi
f4e0: 6e 74 2c 20 74 68 65 20 57 41 4c 20 68 65 61 64  nt, the WAL head
f4f0: 65 72 20 73 61 6c 74 2d 31 20 76 61 6c 75 65 20  er salt-1 value 
f500: 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 61  is incremented a
f510: 6e 64 20 74 68 65 20 0a 73 61 6c 74 2d 32 20 76  nd the .salt-2 v
f520: 61 6c 75 65 20 69 73 20 72 61 6e 64 6f 6d 69 7a  alue is randomiz
f530: 65 64 2e 20 20 54 68 69 73 20 70 72 65 76 65 6e  ed.  This preven
f540: 74 73 20 6f 6c 64 20 61 6e 64 20 6e 65 77 20 66  ts old and new f
f550: 72 61 6d 65 73 20 69 6e 20 74 68 65 20 57 41 4c  rames in the WAL
f560: 20 66 72 6f 6d 0a 62 65 69 6e 67 20 63 6f 6e 73   from.being cons
f570: 69 64 65 72 65 64 20 76 61 6c 69 64 20 61 74 20  idered valid at 
f580: 74 68 65 20 73 61 6d 65 20 74 69 6d 65 20 61 6e  the same time an
f590: 64 20 62 65 69 6e 67 20 63 68 65 63 6b 70 6f 69  d being checkpoi
f5a0: 6e 74 69 6e 67 20 74 6f 67 65 74 68 65 72 0a 66  nting together.f
f5b0: 6f 6c 6c 6f 77 69 6e 67 20 61 20 63 72 61 73 68  ollowing a crash
f5c0: 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  .</p>..<tcl>hd_f
f5d0: 72 61 67 6d 65 6e 74 20 77 61 6c 72 65 61 64 20  ragment walread 
f5e0: 7b 57 41 4c 20 72 65 61 64 20 61 6c 67 6f 72 69  {WAL read algori
f5f0: 74 68 6d 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 34  thm}</tcl>.<h3>4
f600: 2e 34 20 52 65 61 64 65 72 20 41 6c 67 6f 72 69  .4 Reader Algori
f610: 74 68 6d 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 54  thm</h3>..<p>^(T
f620: 6f 20 72 65 61 64 20 61 20 70 61 67 65 20 66 72  o read a page fr
f630: 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20  om the database 
f640: 28 63 61 6c 6c 20 69 74 20 70 61 67 65 20 6e 75  (call it page nu
f650: 6d 62 65 72 20 50 29 2c 20 61 20 72 65 61 64 65  mber P), a reade
f660: 72 0a 66 69 72 73 74 20 63 68 65 63 6b 73 20 74  r.first checks t
f670: 68 65 20 57 41 4c 20 74 6f 20 73 65 65 20 69 66  he WAL to see if
f680: 20 69 74 20 63 6f 6e 74 61 69 6e 73 20 70 61 67   it contains pag
f690: 65 20 50 2e 20 20 49 66 20 73 6f 2c 20 74 68 65  e P.  If so, the
f6a0: 6e 20 74 68 65 0a 6c 61 73 74 20 76 61 6c 69 64  n the.last valid
f6b0: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 70 61 67   instance of pag
f6c0: 65 20 50 20 74 68 61 74 20 69 73 20 66 6f 6c 6c  e P that is foll
f6d0: 6f 77 65 64 20 62 79 20 61 20 63 6f 6d 6d 69 74  owed by a commit
f6e0: 20 66 72 61 6d 65 0a 6f 72 20 69 73 20 61 20 63   frame.or is a c
f6f0: 6f 6d 6d 69 74 20 66 72 61 6d 65 20 69 74 73 65  ommit frame itse
f700: 6c 66 20 62 65 63 6f 6d 65 73 20 74 68 65 20 76  lf becomes the v
f710: 61 6c 75 65 20 72 65 61 64 2e 29 5e 20 20 5e 49  alue read.)^  ^I
f720: 66 20 74 68 65 20 57 41 4c 0a 63 6f 6e 74 61 69  f the WAL.contai
f730: 6e 73 20 6e 6f 20 63 6f 70 69 65 73 20 6f 66 20  ns no copies of 
f740: 70 61 67 65 20 50 20 74 68 61 74 20 61 72 65 20  page P that are 
f750: 76 61 6c 69 64 20 61 6e 64 20 77 68 69 63 68 20  valid and which 
f760: 61 72 65 20 61 20 63 6f 6d 6d 69 74 0a 66 72 61  are a commit.fra
f770: 6d 65 20 6f 72 20 61 72 65 20 66 6f 6c 6c 6f 77  me or are follow
f780: 65 64 20 62 79 20 61 20 63 6f 6d 6d 69 74 20 66  ed by a commit f
f790: 72 61 6d 65 2c 20 74 68 65 6e 20 70 61 67 65 20  rame, then page 
f7a0: 50 20 69 73 20 72 65 61 64 20 66 72 6f 6d 0a 74  P is read from.t
f7b0: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
f7c0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 6f 20 73 74 61  .</p>..<p>To sta
f7d0: 72 74 20 61 20 72 65 61 64 20 74 72 61 6e 73 61  rt a read transa
f7e0: 63 74 69 6f 6e 2c 20 74 68 65 20 72 65 61 64 65  ction, the reade
f7f0: 72 20 72 65 63 6f 72 64 73 20 74 68 65 20 69 6e  r records the in
f800: 64 65 78 20 6f 66 20 74 68 65 20 6c 61 73 74 0a  dex of the last.
f810: 76 61 6c 69 64 20 66 72 61 6d 65 20 69 6e 20 74  valid frame in t
f820: 68 65 20 57 41 4c 2e 20 20 54 68 65 20 72 65 61  he WAL.  The rea
f830: 64 65 72 20 75 73 65 73 20 74 68 69 73 20 72 65  der uses this re
f840: 63 6f 72 64 65 64 20 22 6d 78 46 72 61 6d 65 22  corded "mxFrame"
f850: 20 76 61 6c 75 65 0a 66 6f 72 20 61 6c 6c 20 73   value.for all s
f860: 75 62 73 65 71 75 65 6e 74 20 72 65 61 64 20 6f  ubsequent read o
f870: 70 65 72 61 74 69 6f 6e 73 2e 20 20 4e 65 77 20  perations.  New 
f880: 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 63 61 6e  transactions can
f890: 20 62 65 20 61 70 70 65 6e 64 65 64 0a 74 6f 20   be appended.to 
f8a0: 74 68 65 20 57 41 4c 2c 20 62 75 74 20 61 73 20  the WAL, but as 
f8b0: 6c 6f 6e 67 20 61 73 20 74 68 65 20 72 65 61 64  long as the read
f8c0: 65 72 20 75 73 65 73 20 69 74 73 20 6f 72 69 67  er uses its orig
f8d0: 69 6e 61 6c 20 6d 78 46 72 61 6d 65 20 76 61 6c  inal mxFrame val
f8e0: 75 65 0a 61 6e 64 20 69 67 6e 6f 72 65 73 20 73  ue.and ignores s
f8f0: 75 62 73 65 71 75 65 6e 74 6c 79 20 61 70 70 65  ubsequently appe
f900: 6e 64 65 64 20 63 6f 6e 74 65 6e 74 2c 20 74 68  nded content, th
f910: 65 20 72 65 61 64 65 72 20 77 69 6c 6c 20 73 65  e reader will se
f920: 65 20 61 20 0a 63 6f 6e 73 69 73 74 65 6e 74 20  e a .consistent 
f930: 73 6e 61 70 73 68 6f 74 20 6f 66 20 74 68 65 20  snapshot of the 
f940: 64 61 74 61 62 61 73 65 20 66 72 6f 6d 20 61 20  database from a 
f950: 73 69 6e 67 6c 65 20 70 6f 69 6e 74 20 69 6e 20  single point in 
f960: 74 69 6d 65 2e 20 20 0a 5e 54 68 69 73 20 74 65  time.  .^This te
f970: 63 68 6e 69 71 75 65 20 61 6c 6c 6f 77 73 20 6d  chnique allows m
f980: 75 6c 74 69 70 6c 65 20 63 6f 6e 63 75 72 72 65  ultiple concurre
f990: 6e 74 20 72 65 61 64 65 72 73 20 74 6f 20 76 69  nt readers to vi
f9a0: 65 77 20 64 69 66 66 65 72 65 6e 74 20 0a 76 65  ew different .ve
f9b0: 72 73 69 6f 6e 73 20 6f 66 20 74 68 65 20 64 61  rsions of the da
f9c0: 74 61 62 61 73 65 20 63 6f 6e 74 65 6e 74 20 73  tabase content s
f9d0: 69 6d 75 6c 74 61 6e 65 6f 75 73 6c 79 2e 3c 2f  imultaneously.</
f9e0: 70 3e 0a 0a 3c 70 3e 54 68 65 20 72 65 61 64 65  p>..<p>The reade
f9f0: 72 20 61 6c 67 6f 72 69 74 68 6d 20 69 6e 20 74  r algorithm in t
fa00: 68 65 20 70 72 65 76 69 6f 75 73 20 70 61 72 61  he previous para
fa10: 67 72 61 70 68 73 20 77 6f 72 6b 73 20 63 6f 72  graphs works cor
fa20: 72 65 63 74 6c 79 2c 20 62 75 74 20 0a 62 65 63  rectly, but .bec
fa30: 61 75 73 65 20 66 72 61 6d 65 73 20 66 6f 72 20  ause frames for 
fa40: 70 61 67 65 20 50 20 63 61 6e 20 61 70 70 65 61  page P can appea
fa50: 72 20 61 6e 79 77 68 65 72 65 20 77 69 74 68 69  r anywhere withi
fa60: 6e 20 74 68 65 20 57 41 4c 2c 20 74 68 65 0a 72  n the WAL, the.r
fa70: 65 61 64 65 72 20 68 61 73 20 74 6f 20 73 63 61  eader has to sca
fa80: 6e 20 74 68 65 20 65 6e 74 69 72 65 20 57 41 4c  n the entire WAL
fa90: 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 70 61 67   looking for pag
faa0: 65 20 50 20 66 72 61 6d 65 73 2e 20 20 49 66 20  e P frames.  If 
fab0: 74 68 65 0a 57 41 4c 20 69 73 20 6c 61 72 67 65  the.WAL is large
fac0: 20 28 6d 75 6c 74 69 70 6c 65 20 6d 65 67 61 62   (multiple megab
fad0: 79 74 65 73 20 69 73 20 74 79 70 69 63 61 6c 29  ytes is typical)
fae0: 20 74 68 61 74 20 73 63 61 6e 20 63 61 6e 20 62   that scan can b
faf0: 65 20 73 6c 6f 77 2c 0a 61 6e 64 20 72 65 61 64  e slow,.and read
fb00: 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 73 75 66   performance suf
fb10: 66 65 72 73 2e 20 20 5e 54 6f 20 6f 76 65 72 63  fers.  ^To overc
fb20: 6f 6d 65 20 74 68 69 73 20 70 72 6f 62 6c 65 6d  ome this problem
fb30: 2c 20 61 20 73 65 70 61 72 61 74 65 0a 64 61 74  , a separate.dat
fb40: 61 20 73 74 72 75 63 74 75 72 65 20 63 61 6c 6c  a structure call
fb50: 65 64 20 74 68 65 20 77 61 6c 2d 69 6e 64 65 78  ed the wal-index
fb60: 20 69 73 20 6d 61 69 6e 74 61 69 6e 65 64 20 74   is maintained t
fb70: 6f 20 65 78 70 65 64 69 74 65 20 74 68 65 0a 73  o expedite the.s
fb80: 65 61 72 63 68 20 66 6f 72 20 66 72 61 6d 65 73  earch for frames
fb90: 20 6f 66 20 61 20 70 61 72 74 69 63 75 6c 61 72   of a particular
fba0: 20 70 61 67 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c   page.</p>..<tcl
fbb0: 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 77 61 6c  >hd_fragment wal
fbc0: 69 6e 64 65 78 66 6f 72 6d 61 74 20 7b 77 61 6c  indexformat {wal
fbd0: 2d 69 6e 64 65 78 7d 20 7b 57 41 4c 2d 69 6e 64  -index} {WAL-ind
fbe0: 65 78 20 66 6f 72 6d 61 74 7d 3c 2f 74 63 6c 3e  ex format}</tcl>
fbf0: 0a 3c 68 33 3e 34 2e 35 20 57 41 4c 2d 49 6e 64  .<h3>4.5 WAL-Ind
fc00: 65 78 20 46 6f 72 6d 61 74 3c 2f 68 33 3e 0a 0a  ex Format</h3>..
fc10: 3c 70 3e 43 6f 6e 63 65 70 74 75 61 6c 6c 79 2c  <p>Conceptually,
fc20: 20 74 68 65 20 77 61 6c 2d 69 6e 64 65 78 20 69   the wal-index i
fc30: 73 20 73 68 61 72 65 64 20 6d 65 6d 6f 72 79 2c  s shared memory,
fc40: 20 74 68 6f 75 67 68 20 74 68 65 20 63 75 72 72   though the curr
fc50: 65 6e 74 0a 56 46 53 20 69 6d 70 6c 65 6d 65 6e  ent.VFS implemen
fc60: 74 61 74 69 6f 6e 73 20 75 73 65 20 61 20 6d 6d  tations use a mm
fc70: 61 70 70 65 64 20 66 69 6c 65 20 66 6f 72 20 74  apped file for t
fc80: 68 65 20 77 61 6c 2d 69 6e 64 65 78 2e 20 20 5e  he wal-index.  ^
fc90: 54 68 65 20 6d 6d 61 70 70 65 64 0a 66 69 6c 65  The mmapped.file
fca0: 20 69 73 20 69 6e 20 74 68 65 20 73 61 6d 65 20   is in the same 
fcb0: 64 69 72 65 63 74 6f 72 79 20 61 73 20 74 68 65  directory as the
fcc0: 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 68 61   database and ha
fcd0: 73 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 0a  s the same name.
fce0: 61 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  as the database 
fcf0: 77 69 74 68 20 61 20 22 3c 74 74 3e 2d 73 68 6d  with a "<tt>-shm
fd00: 3c 2f 74 74 3e 22 20 73 75 66 66 69 78 20 61 70  </tt>" suffix ap
fd10: 70 65 6e 64 65 64 2e 20 20 42 65 63 61 75 73 65  pended.  Because
fd20: 0a 74 68 65 20 77 61 6c 2d 69 6e 64 65 78 20 69  .the wal-index i
fd30: 73 20 73 68 61 72 65 64 20 6d 65 6d 6f 72 79 2c  s shared memory,
fd40: 20 53 51 4c 69 74 65 20 64 6f 65 73 20 6e 6f 74   SQLite does not
fd50: 20 73 75 70 70 6f 72 74 20 0a 5b 50 52 41 47 4d   support .[PRAGM
fd60: 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20 7c  A journal_mode |
fd70: 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 3d 57 41   journal_mode=WA
fd80: 4c 5d 20 0a 6f 6e 20 61 20 6e 65 74 77 6f 72 6b  L] .on a network
fd90: 20 66 69 6c 65 73 79 73 74 65 6d 20 77 68 65 6e   filesystem when
fda0: 20 63 6c 69 65 6e 74 73 20 61 72 65 20 6f 6e 20   clients are on 
fdb0: 64 69 66 66 65 72 65 6e 74 20 6d 61 63 68 69 6e  different machin
fdc0: 65 73 2e 0a 41 6c 6c 20 75 73 65 72 73 20 6f 66  es..All users of
fdd0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 6d 75   the database mu
fde0: 73 74 20 62 65 20 61 62 6c 65 20 74 6f 20 73 68  st be able to sh
fdf0: 61 72 65 20 74 68 65 20 73 61 6d 65 20 6d 65 6d  are the same mem
fe00: 6f 72 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  ory.</p>..<p>The
fe10: 20 70 75 72 70 6f 73 65 20 6f 66 20 74 68 65 20   purpose of the 
fe20: 77 61 6c 2d 69 6e 64 65 78 20 69 73 20 74 6f 20  wal-index is to 
fe30: 61 6e 73 77 65 72 20 74 68 69 73 20 71 75 65 73  answer this ques
fe40: 74 69 6f 6e 20 71 75 69 63 6b 6c 79 3a 3c 2f 70  tion quickly:</p
fe50: 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c  >..<blockquote><
fe60: 69 3e 0a 47 69 76 65 6e 20 61 20 70 61 67 65 20  i>.Given a page 
fe70: 6e 75 6d 62 65 72 20 50 20 61 6e 64 20 61 20 6d  number P and a m
fe80: 61 78 69 6d 75 6d 20 57 41 4c 20 66 72 61 6d 65  aximum WAL frame
fe90: 20 69 6e 64 65 78 20 4d 2c 0a 72 65 74 75 72 6e   index M,.return
fea0: 20 74 68 65 20 6c 61 72 67 65 73 74 20 57 41 4c   the largest WAL
feb0: 20 66 72 61 6d 65 20 69 6e 64 65 78 20 66 6f 72   frame index for
fec0: 20 70 61 67 65 20 50 20 74 68 61 74 20 64 6f 65   page P that doe
fed0: 73 20 6e 6f 74 20 65 78 63 65 65 64 20 4d 2c 20  s not exceed M, 
fee0: 0a 6f 72 20 72 65 74 75 72 6e 20 4e 55 4c 4c 20  .or return NULL 
fef0: 69 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  if there are no 
ff00: 66 72 61 6d 65 73 20 66 6f 72 20 70 61 67 65 20  frames for page 
ff10: 50 20 74 68 61 74 20 64 6f 20 6e 6f 74 20 65 78  P that do not ex
ff20: 63 65 65 64 20 4d 2e 0a 3c 2f 69 3e 3c 2f 62 6c  ceed M..</i></bl
ff30: 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68  ockquote>..<p>Th
ff40: 65 20 3c 69 3e 4d 3c 2f 69 3e 20 76 61 6c 75 65  e <i>M</i> value
ff50: 20 69 6e 20 74 68 65 20 70 72 65 76 69 6f 75 73   in the previous
ff60: 20 70 61 72 61 67 72 61 70 68 20 69 73 20 74 68   paragraph is th
ff70: 65 20 22 6d 78 46 72 61 6d 65 22 20 76 61 6c 75  e "mxFrame" valu
ff80: 65 0a 64 65 66 69 6e 65 64 20 69 6e 20 5b 57 41  e.defined in [WA
ff90: 4c 20 72 65 61 64 20 61 6c 67 6f 72 69 74 68 6d  L read algorithm
ffa0: 20 7c 20 73 65 63 74 69 6f 6e 20 34 2e 34 5d 20   | section 4.4] 
ffb0: 74 68 61 74 20 69 73 20 72 65 61 64 20 61 74 20  that is read at 
ffc0: 74 68 65 20 73 74 61 72 74 20 0a 6f 66 20 61 20  the start .of a 
ffd0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6e 64 20  transaction and 
ffe0: 77 68 69 63 68 20 64 65 66 69 6e 65 73 20 74 68  which defines th
fff0: 65 20 6d 61 78 69 6d 75 6d 20 66 72 61 6d 65 20  e maximum frame 
10000 66 72 6f 6d 20 74 68 65 20 57 41 4c 20 74 68 61  from the WAL tha
10010 74 20 0a 74 68 65 20 72 65 61 64 65 72 20 77 69  t .the reader wi
10020 6c 6c 20 75 73 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e  ll use.</p>..<p>
10030 54 68 65 20 77 61 6c 2d 69 6e 64 65 78 20 69 73  The wal-index is
10040 20 74 72 61 6e 73 69 65 6e 74 2e 20 20 41 66 74   transient.  Aft
10050 65 72 20 61 20 63 72 61 73 68 2c 20 74 68 65 20  er a crash, the 
10060 77 61 6c 2d 69 6e 64 65 78 20 69 73 0a 72 65 63  wal-index is.rec
10070 6f 6e 73 74 72 75 63 74 65 64 20 66 72 6f 6d 20  onstructed from 
10080 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 57 41 4c  the original WAL
10090 20 66 69 6c 65 2e 20 20 5e 54 68 65 20 56 46 53   file.  ^The VFS
100a0 20 69 73 20 72 65 71 75 69 72 65 64 0a 74 6f 20   is required.to 
100b0 65 69 74 68 65 72 20 74 72 75 6e 63 61 74 65 20  either truncate 
100c0 6f 72 20 7a 65 72 6f 20 74 68 65 20 68 65 61 64  or zero the head
100d0 65 72 20 6f 66 20 74 68 65 20 77 61 6c 2d 69 6e  er of the wal-in
100e0 64 65 78 20 77 68 65 6e 20 74 68 65 20 6c 61 73  dex when the las
100f0 74 0a 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20  t.connection to 
10100 69 74 20 63 6c 6f 73 65 73 2e 20 20 42 65 63 61  it closes.  Beca
10110 75 73 65 20 74 68 65 20 77 61 6c 2d 69 6e 64 65  use the wal-inde
10120 78 20 69 73 20 74 72 61 6e 73 69 65 6e 74 2c 20  x is transient, 
10130 69 74 20 63 61 6e 0a 75 73 65 20 61 6e 20 61 72  it can.use an ar
10140 63 68 69 74 65 63 74 75 72 65 2d 73 70 65 63 69  chitecture-speci
10150 66 69 63 20 66 6f 72 6d 61 74 3b 20 69 74 20 64  fic format; it d
10160 6f 65 73 20 6e 6f 74 20 68 61 76 65 20 74 6f 20  oes not have to 
10170 62 65 20 63 72 6f 73 73 2d 70 6c 61 74 66 6f 72  be cross-platfor
10180 6d 2e 0a 48 65 6e 63 65 2c 20 75 6e 6c 69 6b 65  m..Hence, unlike
10190 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61 6e   the database an
101a0 64 20 57 41 4c 20 66 69 6c 65 20 66 6f 72 6d 61  d WAL file forma
101b0 74 73 20 77 68 69 63 68 20 73 74 6f 72 65 20 61  ts which store a
101c0 6c 6c 20 76 61 6c 75 65 73 0a 61 73 20 62 69 67  ll values.as big
101d0 20 65 6e 64 69 61 6e 2c 20 74 68 65 20 77 61 6c   endian, the wal
101e0 2d 69 6e 64 65 78 20 73 74 6f 72 65 73 20 6d 75  -index stores mu
101f0 6c 74 69 2d 62 79 74 65 20 76 61 6c 75 65 73 20  lti-byte values 
10200 69 6e 20 74 68 65 20 6e 61 74 69 76 65 0a 62 79  in the native.by
10210 74 65 20 6f 72 64 65 72 20 6f 66 20 74 68 65 20  te order of the 
10220 68 6f 73 74 20 63 6f 6d 70 75 74 65 72 2e 3c 2f  host computer.</
10230 70 3e 0a 0a 3c 70 3e 54 68 69 73 20 64 6f 63 75  p>..<p>This docu
10240 6d 65 6e 74 20 69 73 20 63 6f 6e 63 65 72 6e 65  ment is concerne
10250 64 20 77 69 74 68 20 74 68 65 20 70 65 72 73 69  d with the persi
10260 73 74 20 73 74 61 74 65 20 6f 66 20 74 68 65 20  st state of the 
10270 64 61 74 61 62 61 73 65 0a 66 69 6c 65 2c 20 61  database.file, a
10280 6e 64 20 73 69 6e 63 65 20 74 68 65 20 77 61 6c  nd since the wal
10290 2d 69 6e 64 65 78 20 69 73 20 61 20 74 72 61 6e  -index is a tran
102a0 73 69 65 6e 74 20 73 74 72 75 63 74 75 72 65 2c  sient structure,
102b0 20 6e 6f 20 66 75 72 74 68 65 72 20 0a 69 6e 66   no further .inf
102c0 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74  ormation about t
102d0 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 74 68 65  he format of the
102e0 20 77 61 6c 2d 69 6e 64 65 78 20 77 69 6c 6c 20   wal-index will 
102f0 62 65 20 70 72 6f 76 69 64 65 64 20 68 65 72 65  be provided here
10300 2e 0a 43 6f 6d 70 6c 65 74 65 20 64 65 74 61 69  ..Complete detai
10310 6c 73 20 6f 6e 20 74 68 65 20 66 6f 72 6d 61 74  ls on the format
10320 20 6f 66 20 74 68 65 20 77 61 6c 2d 69 6e 64 65   of the wal-inde
10330 78 20 61 72 65 20 63 6f 6e 74 61 69 6e 65 64 20  x are contained 
10340 77 69 74 68 69 6e 0a 63 6f 6d 6d 65 6e 74 73 20  within.comments 
10350 69 6e 20 53 51 4c 69 74 65 20 73 6f 75 72 63 65  in SQLite source
10360 20 63 6f 64 65 2e 3c 2f 70 3e 0a                  code.</p>.