Documentation Source Text

Hex Artifact Content
Login

Artifact 2b5f03deefaaeda4ef00321743cfe1c5d4f2e003:


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 54 68 65 20 73 69 7a   pages.  The siz
0700: 65 20 6f 66 20 61 0a 70 61 67 65 20 69 73 20 61  e of a.page is a
0710: 20 70 6f 77 65 72 20 6f 66 20 74 77 6f 20 62 65   power of two be
0720: 74 77 65 65 6e 20 35 31 32 20 61 6e 64 20 33 32  tween 512 and 32
0730: 37 36 38 20 69 6e 63 6c 75 73 69 76 65 2e 20 20  768 inclusive.  
0740: 41 6c 6c 20 70 61 67 65 73 20 77 69 74 68 69 6e  All pages within
0750: 0a 74 68 65 20 73 61 6d 65 20 64 61 74 61 62 61  .the same databa
0760: 73 65 20 61 72 65 20 74 68 65 20 73 61 6d 65 20  se are the same 
0770: 73 69 7a 65 2e 20 20 54 68 65 20 70 61 67 65 20  size.  The page 
0780: 73 69 7a 65 20 66 6f 72 20 61 20 64 61 74 61 62  size for a datab
0790: 61 73 65 20 66 69 6c 65 0a 69 73 20 64 65 74 65  ase file.is dete
07a0: 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 32 2d  rmined by the 2-
07b0: 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20  byte big-endian 
07c0: 69 6e 74 65 67 65 72 20 6c 6f 63 61 74 65 64 20  integer located 
07d0: 61 74 20 61 6e 20 6f 66 66 73 65 74 20 6f 66 0a  at an offset of.
07e0: 31 36 20 62 79 74 65 73 20 66 72 6f 6d 20 74 68  16 bytes from th
07f0: 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74  e beginning of t
0800: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
0810: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 50 61 67 65 73 20  .</p>..<p>Pages 
0820: 61 72 65 20 6e 75 6d 62 65 72 65 64 20 62 65 67  are numbered beg
0830: 69 6e 6e 69 6e 67 20 77 69 74 68 20 31 2e 20 20  inning with 1.  
0840: 54 68 65 20 6d 61 78 69 6d 75 6d 20 70 61 67 65  The maximum page
0850: 20 6e 75 6d 62 65 72 20 69 73 0a 32 31 34 37 34   number is.21474
0860: 38 33 36 34 36 20 28 32 3c 73 75 70 3e 3c 73 6d  83646 (2<sup><sm
0870: 61 6c 6c 3e 33 31 3c 2f 73 6d 61 6c 6c 3e 3c 2f  all>31</small></
0880: 73 75 70 3e 20 2d 20 32 29 2e 20 20 54 68 65 20  sup> - 2).  The 
0890: 6d 69 6e 69 6d 75 6d 20 73 69 7a 65 0a 53 51 4c  minimum size.SQL
08a0: 69 74 65 20 64 61 74 61 62 61 73 65 20 69 73 20  ite database is 
08b0: 61 20 73 69 6e 67 6c 65 20 35 31 32 2d 62 79 74  a single 512-byt
08c0: 65 20 70 61 67 65 2e 0a 54 68 65 20 6d 61 78 69  e page..The maxi
08d0: 6d 75 6d 20 73 69 7a 65 20 64 61 74 61 62 61 73  mum size databas
08e0: 65 20 77 6f 75 6c 64 20 62 65 20 32 31 34 37 34  e would be 21474
08f0: 38 33 36 34 36 20 70 61 67 65 73 20 61 74 20 33  83646 pages at 3
0900: 32 37 36 38 20 62 79 74 65 73 20 70 65 72 0a 70  2768 bytes per.p
0910: 61 67 65 20 6f 72 20 37 30 2c 33 36 38 2c 37 34  age or 70,368,74
0920: 34 2c 31 31 32 2c 31 32 38 20 62 79 74 65 73 20  4,112,128 bytes 
0930: 28 61 62 6f 75 74 20 37 30 20 74 65 72 61 62 79  (about 70 teraby
0940: 74 65 73 29 2e 20 20 55 73 75 61 6c 6c 79 20 53  tes).  Usually S
0950: 51 4c 69 74 65 20 77 69 6c 6c 0a 68 69 74 20 74  QLite will.hit t
0960: 68 65 20 6d 61 78 69 6d 75 6d 20 66 69 6c 65 20  he maximum file 
0970: 73 69 7a 65 20 6c 69 6d 69 74 20 6f 66 20 74 68  size limit of th
0980: 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 66 69 6c  e underlying fil
0990: 65 73 79 73 74 65 6d 20 6f 72 20 64 69 73 6b 0a  esystem or disk.
09a0: 68 61 72 64 77 61 72 65 20 73 69 7a 65 20 6c 69  hardware size li
09b0: 6d 69 74 20 6c 6f 6e 67 20 62 65 66 6f 72 65 20  mit long before 
09c0: 69 74 20 68 69 74 73 20 69 74 73 20 6f 77 6e 20  it hits its own 
09d0: 69 6e 74 65 72 6e 61 6c 20 73 69 7a 65 20 6c 69  internal size li
09e0: 6d 69 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 6e 20  mit.</p>..<p>In 
09f0: 63 6f 6d 6d 6f 6e 20 75 73 65 2c 20 53 51 4c 69  common use, SQLi
0a00: 74 65 20 64 61 74 61 62 61 73 65 73 20 74 65 6e  te databases ten
0a10: 64 20 74 6f 20 72 61 6e 67 65 20 69 6e 20 73 69  d to range in si
0a20: 7a 65 20 66 72 6f 6d 20 61 20 66 65 77 20 6b 69  ze from a few ki
0a30: 6c 6f 62 79 74 65 73 0a 74 6f 20 61 20 66 65 77  lobytes.to a few
0a40: 20 67 69 67 61 62 79 74 65 73 2e 3c 2f 70 3e 0a   gigabytes.</p>.
0a50: 0a 3c 70 3e 41 74 20 61 6e 79 20 70 6f 69 6e 74  .<p>At any point
0a60: 20 69 6e 20 74 69 6d 65 2c 20 65 76 65 72 79 20   in time, every 
0a70: 70 61 67 65 20 69 6e 20 74 68 65 20 6d 61 69 6e  page in the main
0a80: 20 64 61 74 61 62 61 73 65 20 68 61 73 20 61 20   database has a 
0a90: 73 69 6e 67 6c 65 0a 75 73 65 20 77 68 69 63 68  single.use which
0aa0: 20 69 73 20 6f 6e 65 20 6f 66 20 74 68 65 20 66   is one of the f
0ab0: 6f 6c 6c 6f 77 69 6e 67 3a 0a 3c 75 6c 3e 0a 3c  ollowing:.<ul>.<
0ac0: 6c 69 3e 54 68 65 20 6c 6f 63 6b 2d 62 79 74 65  li>The lock-byte
0ad0: 20 70 61 67 65 0a 3c 6c 69 3e 41 20 66 72 65 65   page.<li>A free
0ae0: 6c 69 73 74 20 70 61 67 65 0a 3c 75 6c 3e 0a 3c  list page.<ul>.<
0af0: 6c 69 3e 41 20 66 72 65 65 6c 69 73 74 20 74 72  li>A freelist tr
0b00: 75 6e 6b 20 70 61 67 65 0a 3c 6c 69 3e 41 20 66  unk page.<li>A f
0b10: 72 65 65 6c 69 73 74 20 6c 65 61 66 20 70 61 67  reelist leaf pag
0b20: 65 0a 3c 2f 75 6c 3e 0a 3c 6c 69 3e 41 20 62 2d  e.</ul>.<li>A b-
0b30: 74 72 65 65 20 70 61 67 65 0a 3c 75 6c 3e 0a 3c  tree page.<ul>.<
0b40: 6c 69 3e 41 20 74 61 62 6c 65 20 62 2d 74 72 65  li>A table b-tre
0b50: 65 20 69 6e 74 65 72 69 6f 72 20 70 61 67 65 0a  e interior page.
0b60: 3c 6c 69 3e 41 20 74 61 62 6c 65 20 62 2d 74 72  <li>A table b-tr
0b70: 65 65 20 6c 65 61 66 20 70 61 67 65 0a 3c 6c 69  ee leaf page.<li
0b80: 3e 41 6e 20 69 6e 64 65 78 20 62 2d 74 72 65 65  >An index b-tree
0b90: 20 69 6e 74 65 72 69 6f 72 20 70 61 67 65 0a 3c   interior page.<
0ba0: 6c 69 3e 41 6e 20 69 6e 64 65 78 20 62 2d 74 72  li>An index b-tr
0bb0: 65 65 20 6c 65 61 66 20 70 61 67 65 0a 3c 2f 75  ee leaf page.</u
0bc0: 6c 3e 0a 3c 6c 69 3e 41 20 70 61 79 6c 6f 61 64  l>.<li>A payload
0bd0: 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 0a 3c   overflow page.<
0be0: 6c 69 3e 41 20 70 6f 69 6e 74 65 72 20 6d 61 70  li>A pointer map
0bf0: 20 70 61 67 65 0a 3c 2f 75 6c 3e 0a 3c 2f 70 3e   page.</ul>.</p>
0c00: 0a 0a 3c 70 3e 41 6c 6c 20 72 65 61 64 73 20 66  ..<p>All reads f
0c10: 72 6f 6d 20 61 6e 64 20 77 72 69 74 65 73 20 74  rom and writes t
0c20: 6f 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  o the main datab
0c30: 61 73 65 20 66 69 6c 65 20 62 65 67 69 6e 20 61  ase file begin a
0c40: 74 20 61 20 70 61 67 65 0a 62 6f 75 6e 64 61 72  t a page.boundar
0c50: 79 20 61 6e 64 20 61 6c 6c 20 77 72 69 74 65 73  y and all writes
0c60: 20 61 72 65 20 61 6e 20 69 6e 74 65 67 65 72 20   are an integer 
0c70: 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20  number of pages 
0c80: 69 6e 20 73 69 7a 65 2e 20 20 52 65 61 64 73 0a  in size.  Reads.
0c90: 61 72 65 20 61 6c 73 6f 20 75 73 75 61 6c 6c 79  are also usually
0ca0: 20 61 6e 20 69 6e 74 65 67 65 72 20 6e 75 6d 62   an integer numb
0cb0: 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 73  er of pages in s
0cc0: 69 7a 65 2c 20 77 69 74 68 20 74 68 65 20 6f 6e  ize, with the on
0cd0: 65 20 65 78 63 65 70 74 69 6f 6e 0a 74 68 61 74  e exception.that
0ce0: 20 77 68 65 6e 20 74 68 65 20 64 61 74 61 62 61   when the databa
0cf0: 73 65 20 69 73 20 66 69 72 73 74 20 6f 70 65 6e  se is first open
0d00: 65 64 2c 20 74 68 65 20 66 69 72 73 74 20 31 30  ed, the first 10
0d10: 30 20 62 79 74 65 73 20 6f 66 20 74 68 65 0a 64  0 bytes of the.d
0d20: 61 74 61 62 61 73 65 20 66 69 6c 65 20 28 74 68  atabase file (th
0d30: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
0d40: 68 65 61 64 65 72 29 20 61 72 65 20 72 65 61 64  header) are read
0d50: 20 61 73 20 61 20 73 75 62 2d 70 61 67 65 20 73   as a sub-page s
0d60: 69 7a 65 20 75 6e 69 74 2e 3c 2f 70 3e 0a 0a 3c  ize unit.</p>..<
0d70: 70 3e 42 65 66 6f 72 65 20 61 6e 79 20 69 6e 66  p>Before any inf
0d80: 6f 72 6d 61 74 69 6f 6e 2d 62 65 61 72 69 6e 67  ormation-bearing
0d90: 20 70 61 67 65 20 6f 66 20 74 68 65 20 64 61 74   page of the dat
0da0: 61 62 61 73 65 20 69 73 20 6d 6f 64 69 66 69 65  abase is modifie
0db0: 64 2c 20 0a 74 68 65 20 6f 72 69 67 69 6e 61 6c  d, .the original
0dc0: 20 75 6e 6d 6f 64 69 66 69 65 64 20 63 6f 6e 74   unmodified cont
0dd0: 65 6e 74 20 6f 66 20 74 68 61 74 20 70 61 67 65  ent of that page
0de0: 20 69 73 20 77 72 69 74 74 65 6e 20 69 6e 74 6f   is written into
0df0: 20 74 68 65 20 0a 72 6f 6c 6c 62 61 63 6b 20 6a   the .rollback j
0e00: 6f 75 72 6e 61 6c 2e 20 20 49 66 20 61 20 74 72  ournal.  If a tr
0e10: 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 69 6e 74  ansaction is int
0e20: 65 72 72 75 70 74 65 64 20 61 6e 64 20 6e 65 65  errupted and nee
0e30: 64 73 20 74 6f 20 62 65 20 0a 72 6f 6c 6c 65 64  ds to be .rolled
0e40: 20 62 61 63 6b 2c 20 74 68 65 20 72 6f 6c 6c 62   back, the rollb
0e50: 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 63 61 6e 20  ack journal can 
0e60: 74 68 65 6e 20 62 65 20 75 73 65 64 20 74 6f 20  then be used to 
0e70: 72 65 73 74 6f 72 65 20 74 68 65 0a 64 61 74 61  restore the.data
0e80: 62 61 73 65 20 74 6f 20 69 74 73 20 6f 72 69 67  base to its orig
0e90: 69 6e 61 6c 20 73 74 61 74 65 2e 20 20 46 72 65  inal state.  Fre
0ea0: 65 6c 69 73 74 20 6c 65 61 66 20 70 61 67 65 73  elist leaf pages
0eb0: 20 62 65 61 72 20 6e 6f 0a 69 6e 66 6f 72 6d 61   bear no.informa
0ec0: 74 69 6f 6e 20 74 68 61 74 20 77 6f 75 6c 64 20  tion that would 
0ed0: 6e 65 65 64 20 74 6f 20 62 65 20 72 65 73 74 6f  need to be resto
0ee0: 72 65 64 20 6f 6e 20 61 20 72 6f 6c 6c 62 61 63  red on a rollbac
0ef0: 6b 20 61 6e 64 20 73 6f 20 74 68 65 79 0a 61 72  k and so they.ar
0f00: 65 20 6e 6f 74 20 77 72 69 74 74 65 6e 20 74 6f  e not written to
0f10: 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20 70 72 69   the journal pri
0f20: 6f 72 20 74 6f 20 6d 6f 64 69 66 69 63 61 74 69  or to modificati
0f30: 6f 6e 2c 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a  on, in order to.
0f40: 72 65 64 75 63 65 20 64 69 73 6b 20 49 2f 4f 2e  reduce disk I/O.
0f50: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  </p>..<tcl>hd_fr
0f60: 61 67 6d 65 6e 74 20 64 61 74 61 62 61 73 65 5f  agment database_
0f70: 68 65 61 64 65 72 20 7b 64 61 74 61 62 61 73 65  header {database
0f80: 20 68 65 61 64 65 72 7d 3c 2f 74 63 6c 3e 0a 3c   header}</tcl>.<
0f90: 68 33 3e 31 2e 32 20 54 68 65 20 44 61 74 61 62  h3>1.2 The Datab
0fa0: 61 73 65 20 48 65 61 64 65 72 3c 2f 68 33 3e 0a  ase Header</h3>.
0fb0: 0a 3c 70 3e 54 68 65 20 66 69 72 73 74 20 31 30  .<p>The first 10
0fc0: 30 20 62 79 74 65 73 20 6f 66 20 74 68 65 20 64  0 bytes of the d
0fd0: 61 74 61 62 61 73 65 20 66 69 6c 65 20 63 6f 6d  atabase file com
0fe0: 70 72 69 73 65 20 74 68 65 20 64 61 74 61 62 61  prise the databa
0ff0: 73 65 20 66 69 6c 65 20 0a 68 65 61 64 65 72 2e  se file .header.
1000: 20 20 54 68 65 20 64 61 74 61 62 61 73 65 20 66    The database f
1010: 69 6c 65 20 68 65 61 64 65 72 20 69 73 20 64 69  ile header is di
1020: 76 69 64 65 64 20 69 6e 74 6f 20 66 69 65 6c 64  vided into field
1030: 73 20 61 73 20 73 68 6f 77 6e 20 62 79 0a 74 68  s as shown by.th
1040: 65 20 74 61 62 6c 65 20 62 65 6c 6f 77 2e 20 20  e table below.  
1050: 41 6c 6c 20 6d 75 6c 74 69 62 79 74 65 20 66 69  All multibyte fi
1060: 65 6c 64 73 20 69 6e 20 74 68 65 20 64 61 74 61  elds in the data
1070: 62 61 73 65 20 66 69 6c 65 20 68 65 61 64 65 72  base file header
1080: 20 61 72 65 0a 73 74 6f 72 65 64 20 77 69 74 68   are.stored with
1090: 20 74 68 65 20 6d 75 73 74 20 73 69 67 6e 69 66   the must signif
10a0: 69 63 61 6e 74 20 62 79 74 65 20 66 69 72 73 74  icant byte first
10b0: 20 28 62 69 67 2d 65 6e 64 69 61 6e 29 2e 3c 2f   (big-endian).</
10c0: 70 3e 0a 0a 3c 63 65 6e 74 65 72 3e 0a 3c 69 3e  p>..<center>.<i>
10d0: 44 61 74 61 62 61 73 65 20 48 65 61 64 65 72 20  Database Header 
10e0: 46 6f 72 6d 61 74 3c 2f 69 3e 3c 62 72 3e 0a 3c  Format</i><br>.<
10f0: 74 61 62 6c 65 20 77 69 64 74 68 3d 22 38 30 25  table width="80%
1100: 22 20 62 6f 72 64 65 72 3d 31 3e 0a 3c 74 72 3e  " border=1>.<tr>
1110: 3c 74 68 3e 4f 66 66 73 65 74 3c 74 68 3e 53 69  <th>Offset<th>Si
1120: 7a 65 3c 74 68 3e 44 65 73 63 72 69 70 74 69 6f  ze<th>Descriptio
1130: 6e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  n.<tr><td valign
1140: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
1150: 72 3e 30 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  r>0<td valign=to
1160: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31  p align=center>1
1170: 36 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e  6<td align=left>
1180: 0a 54 68 65 20 68 65 61 64 65 72 20 73 74 72 69  .The header stri
1190: 6e 67 3a 20 22 53 51 4c 69 74 65 20 66 6f 72 6d  ng: "SQLite form
11a0: 61 74 20 33 5c 30 30 30 22 0a 3c 74 72 3e 3c 74  at 3\000".<tr><t
11b0: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
11c0: 67 6e 3d 63 65 6e 74 65 72 3e 31 36 3c 74 64 20  gn=center>16<td 
11d0: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
11e0: 3d 63 65 6e 74 65 72 3e 32 3c 74 64 20 61 6c 69  =center>2<td ali
11f0: 67 6e 3d 6c 65 66 74 3e 0a 54 68 65 20 64 61 74  gn=left>.The dat
1200: 61 62 61 73 65 20 70 61 67 65 20 73 69 7a 65 20  abase page size 
1210: 69 6e 20 62 79 74 65 73 2e 20 20 4d 75 73 74 20  in bytes.  Must 
1220: 62 65 20 61 20 70 6f 77 65 72 20 6f 66 20 74 77  be a power of tw
1230: 6f 20 62 65 74 77 65 65 6e 20 35 31 32 0a 61 6e  o between 512.an
1240: 64 20 33 32 37 36 38 20 69 6e 63 6c 75 73 69 76  d 32768 inclusiv
1250: 65 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  e..<tr><td valig
1260: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
1270: 65 72 3e 31 38 3c 74 64 20 76 61 6c 69 67 6e 3d  er>18<td valign=
1280: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
1290: 3e 31 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74  >1<td align=left
12a0: 3e 0a 46 69 6c 65 20 66 6f 72 6d 61 74 20 77 72  >.File format wr
12b0: 69 74 65 20 76 65 72 73 69 6f 6e 2e 20 20 31 20  ite version.  1 
12c0: 66 6f 72 20 6c 65 67 61 63 79 3b 20 32 20 66 6f  for legacy; 2 fo
12d0: 72 20 5b 57 41 4c 5d 2e 0a 3c 74 72 3e 3c 74 64  r [WAL]..<tr><td
12e0: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
12f0: 6e 3d 63 65 6e 74 65 72 3e 31 39 3c 74 64 20 76  n=center>19<td v
1300: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
1310: 63 65 6e 74 65 72 3e 31 3c 74 64 20 61 6c 69 67  center>1<td alig
1320: 6e 3d 6c 65 66 74 3e 0a 46 69 6c 65 20 66 6f 72  n=left>.File for
1330: 6d 61 74 20 72 65 61 64 20 76 65 72 73 69 6f 6e  mat read version
1340: 2e 20 20 31 20 66 6f 72 20 6c 65 67 61 63 79 3b  .  1 for legacy;
1350: 20 32 20 66 6f 72 20 5b 57 41 4c 5d 2e 0a 3c 74   2 for [WAL]..<t
1360: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
1370: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32 30   align=center>20
1380: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
1390: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 3c 74 64  lign=center>1<td
13a0: 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 42 79 74   align=left>.Byt
13b0: 65 73 20 6f 66 20 75 6e 75 73 65 64 20 22 72 65  es of unused "re
13c0: 73 65 72 76 65 64 22 20 73 70 61 63 65 20 61 74  served" space at
13d0: 20 74 68 65 20 65 6e 64 20 6f 66 20 65 61 63 68   the end of each
13e0: 20 70 61 67 65 2e 20 20 55 73 75 61 6c 6c 79 20   page.  Usually 
13f0: 30 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  0..<tr><td valig
1400: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
1410: 65 72 3e 32 31 3c 74 64 20 76 61 6c 69 67 6e 3d  er>21<td valign=
1420: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
1430: 3e 31 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74  >1<td align=left
1440: 3e 0a 4d 61 78 69 6d 75 6d 20 65 6d 62 65 64 64  >.Maximum embedd
1450: 65 64 20 70 61 79 6c 6f 61 64 20 66 72 61 63 74  ed payload fract
1460: 69 6f 6e 2e 20 20 4d 75 73 74 20 62 65 20 36 34  ion.  Must be 64
1470: 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  ..<tr><td valign
1480: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
1490: 72 3e 32 32 3c 74 64 20 76 61 6c 69 67 6e 3d 74  r>22<td valign=t
14a0: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
14b0: 31 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e  1<td align=left>
14c0: 0a 4d 69 6e 69 6d 75 6d 20 65 6d 62 65 64 64 65  .Minimum embedde
14d0: 64 20 70 61 79 6c 6f 61 64 20 66 72 61 63 74 69  d payload fracti
14e0: 6f 6e 2e 20 20 4d 75 73 74 20 62 65 20 33 32 2e  on.  Must be 32.
14f0: 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d  .<tr><td valign=
1500: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
1510: 3e 32 33 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  >23<td valign=to
1520: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31  p align=center>1
1530: 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a  <td align=left>.
1540: 4c 65 61 66 20 70 61 79 6c 6f 61 64 20 66 72 61  Leaf payload fra
1550: 63 74 69 6f 6e 2e 20 20 4d 75 73 74 20 62 65 20  ction.  Must be 
1560: 33 32 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  32..<tr><td vali
1570: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
1580: 74 65 72 3e 32 34 3c 74 64 20 76 61 6c 69 67 6e  ter>24<td valign
1590: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
15a0: 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66  r>4<td align=lef
15b0: 74 3e 0a 46 69 6c 65 20 63 68 61 6e 67 65 20 63  t>.File change c
15c0: 6f 75 6e 74 65 72 2e 0a 3c 74 72 3e 3c 74 64 20  ounter..<tr><td 
15d0: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
15e0: 3d 63 65 6e 74 65 72 3e 32 38 3c 74 64 20 76 61  =center>28<td va
15f0: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
1600: 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e  enter>4<td align
1610: 3d 6c 65 66 74 3e 0a 53 69 7a 65 20 6f 66 20 74  =left>.Size of t
1620: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
1630: 20 69 6e 20 70 61 67 65 73 2e 20 20 54 68 65 20   in pages.  The 
1640: 22 69 6e 2d 68 65 61 64 65 72 20 64 61 74 61 62  "in-header datab
1650: 61 73 65 20 73 69 7a 65 22 2e 0a 3c 74 72 3e 3c  ase size"..<tr><
1660: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
1670: 69 67 6e 3d 63 65 6e 74 65 72 3e 33 32 3c 74 64  ign=center>32<td
1680: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
1690: 6e 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c  n=center>4<td al
16a0: 69 67 6e 3d 6c 65 66 74 3e 0a 50 61 67 65 20 6e  ign=left>.Page n
16b0: 75 6d 62 65 72 20 6f 66 20 74 68 65 20 66 69 72  umber of the fir
16c0: 73 74 20 66 72 65 65 6c 69 73 74 20 74 72 75 6e  st freelist trun
16d0: 6b 20 70 61 67 65 2e 0a 3c 74 72 3e 3c 74 64 20  k page..<tr><td 
16e0: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
16f0: 3d 63 65 6e 74 65 72 3e 33 36 3c 74 64 20 76 61  =center>36<td va
1700: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
1710: 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e  enter>4<td align
1720: 3d 6c 65 66 74 3e 0a 54 6f 74 61 6c 20 6e 75 6d  =left>.Total num
1730: 62 65 72 20 6f 66 20 66 72 65 65 6c 69 73 74 20  ber of freelist 
1740: 70 61 67 65 73 2e 0a 3c 74 72 3e 3c 74 64 20 76  pages..<tr><td v
1750: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
1760: 63 65 6e 74 65 72 3e 34 30 3c 74 64 20 76 61 6c  center>40<td val
1770: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
1780: 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d  nter>4<td align=
1790: 6c 65 66 74 3e 0a 54 68 65 20 73 63 68 65 6d 61  left>.The schema
17a0: 20 63 6f 6f 6b 69 65 2e 0a 3c 74 72 3e 3c 74 64   cookie..<tr><td
17b0: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
17c0: 6e 3d 63 65 6e 74 65 72 3e 34 34 3c 74 64 20 76  n=center>44<td v
17d0: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
17e0: 63 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69 67  center>4<td alig
17f0: 6e 3d 6c 65 66 74 3e 0a 54 68 65 20 73 63 68 65  n=left>.The sche
1800: 6d 61 20 66 6f 72 6d 61 74 20 6e 75 6d 62 65 72  ma format number
1810: 2e 20 20 53 75 70 70 6f 72 74 65 64 20 73 63 68  .  Supported sch
1820: 65 6d 61 20 66 6f 72 6d 61 74 73 20 61 72 65 20  ema formats are 
1830: 31 2c 20 32 2c 20 33 2c 20 61 6e 64 20 34 2e 0a  1, 2, 3, and 4..
1840: 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74  <tr><td valign=t
1850: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
1860: 34 38 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  48<td valign=top
1870: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 3c   align=center>4<
1880: 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 44  td align=left>.D
1890: 65 66 61 75 6c 74 20 70 61 67 65 20 63 61 63 68  efault page cach
18a0: 65 20 73 69 7a 65 2e 0a 3c 74 72 3e 3c 74 64 20  e size..<tr><td 
18b0: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
18c0: 3d 63 65 6e 74 65 72 3e 35 32 3c 74 64 20 76 61  =center>52<td va
18d0: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
18e0: 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e  enter>4<td align
18f0: 3d 6c 65 66 74 3e 0a 54 68 65 20 70 61 67 65 20  =left>.The page 
1900: 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 6c 61  number of the la
1910: 72 67 65 73 74 20 72 6f 6f 74 20 62 2d 74 72 65  rgest root b-tre
1920: 65 20 70 61 67 65 20 77 68 65 6e 20 69 6e 20 61  e page when in a
1930: 75 74 6f 2d 76 61 63 75 75 6d 20 6f 72 0a 69 6e  uto-vacuum or.in
1940: 63 72 65 6d 65 6e 74 61 6c 2d 76 61 63 75 75 6d  cremental-vacuum
1950: 20 6d 6f 64 65 73 2c 20 6f 72 20 7a 65 72 6f 20   modes, or zero 
1960: 6f 74 68 65 72 77 69 73 65 2e 0a 3c 74 72 3e 3c  otherwise..<tr><
1970: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
1980: 69 67 6e 3d 63 65 6e 74 65 72 3e 35 36 3c 74 64  ign=center>56<td
1990: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
19a0: 6e 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c  n=center>4<td al
19b0: 69 67 6e 3d 6c 65 66 74 3e 0a 54 68 65 20 64 61  ign=left>.The da
19c0: 74 61 62 61 73 65 20 74 65 78 74 20 65 6e 63 6f  tabase text enco
19d0: 64 69 6e 67 2e 20 20 41 20 76 61 6c 75 65 20 6f  ding.  A value o
19e0: 66 20 31 20 6d 65 61 6e 73 20 55 54 46 2d 38 2e  f 1 means UTF-8.
19f0: 20 20 41 20 76 61 6c 75 65 20 6f 66 20 32 0a 6d    A value of 2.m
1a00: 65 61 6e 73 20 55 54 46 2d 31 36 6c 65 2e 20 20  eans UTF-16le.  
1a10: 41 20 76 61 6c 75 65 20 6f 66 20 33 20 6d 65 61  A value of 3 mea
1a20: 6e 73 20 55 54 46 2d 31 36 62 65 2e 0a 3c 74 72  ns UTF-16be..<tr
1a30: 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
1a40: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 36 30 3c  align=center>60<
1a50: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
1a60: 69 67 6e 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20  ign=center>4<td 
1a70: 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 54 68 65 20  align=left>.The 
1a80: 22 75 73 65 72 20 76 65 72 73 69 6f 6e 22 20 61  "user version" a
1a90: 73 20 72 65 61 64 20 61 6e 64 20 73 65 74 20 62  s read and set b
1aa0: 79 20 74 68 65 20 5b 75 73 65 72 5f 76 65 72 73  y the [user_vers
1ab0: 69 6f 6e 20 70 72 61 67 6d 61 5d 2e 0a 3c 74 72  ion pragma]..<tr
1ac0: 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
1ad0: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 36 34 3c  align=center>64<
1ae0: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
1af0: 69 67 6e 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20  ign=center>4<td 
1b00: 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 54 72 75 65  align=left>.True
1b10: 20 28 6e 6f 6e 2d 7a 65 72 6f 29 20 66 6f 72 20   (non-zero) for 
1b20: 69 6e 63 72 65 6d 65 6e 74 61 6c 2d 76 61 63 75  incremental-vacu
1b30: 75 6d 20 6d 6f 64 65 2e 20 20 46 61 6c 73 65 20  um mode.  False 
1b40: 28 7a 65 72 6f 29 20 6f 74 68 65 72 77 69 73 65  (zero) otherwise
1b50: 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  ..<tr><td valign
1b60: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
1b70: 72 3e 36 38 3c 74 64 20 76 61 6c 69 67 6e 3d 74  r>68<td valign=t
1b80: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
1b90: 32 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74  24<td align=left
1ba0: 3e 0a 52 65 73 65 72 76 65 64 20 66 6f 72 20 65  >.Reserved for e
1bb0: 78 70 61 6e 73 69 6f 6e 2e 20 20 4d 75 73 74 20  xpansion.  Must 
1bc0: 62 65 20 7a 65 72 6f 2e 0a 3c 74 72 3e 3c 74 64  be zero..<tr><td
1bd0: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
1be0: 6e 3d 63 65 6e 74 65 72 3e 39 32 3c 74 64 20 76  n=center>92<td v
1bf0: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
1c00: 63 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69 67  center>4<td alig
1c10: 6e 3d 6c 65 66 74 3e 0a 54 68 65 20 5b 76 65 72  n=left>.The [ver
1c20: 73 69 6f 6e 2d 76 61 6c 69 64 2d 66 6f 72 20 6e  sion-valid-for n
1c30: 75 6d 62 65 72 5d 2e 0a 3c 74 72 3e 3c 74 64 20  umber]..<tr><td 
1c40: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
1c50: 3d 63 65 6e 74 65 72 3e 39 36 3c 74 64 20 76 61  =center>96<td va
1c60: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
1c70: 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e  enter>4<td align
1c80: 3d 6c 65 66 74 3e 0a 5b 53 51 4c 49 54 45 5f 56  =left>.[SQLITE_V
1c90: 45 52 53 49 4f 4e 5f 4e 55 4d 42 45 52 5d 0a 3c  ERSION_NUMBER].<
1ca0: 2f 74 61 62 6c 65 3e 3c 2f 63 65 6e 74 65 72 3e  /table></center>
1cb0: 0a 0a 3c 68 34 3e 31 2e 32 2e 31 20 4d 61 67 69  ..<h4>1.2.1 Magi
1cc0: 63 20 48 65 61 64 65 72 20 53 74 72 69 6e 67 3c  c Header String<
1cd0: 2f 68 34 3e 0a 0a 3c 70 3e 45 76 65 72 79 20 53  /h4>..<p>Every S
1ce0: 51 4c 69 74 65 20 64 61 74 61 62 61 73 65 20 66  QLite database f
1cf0: 69 6c 65 20 62 65 67 69 6e 73 20 77 69 74 68 20  ile begins with 
1d00: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 31 36  the following 16
1d10: 20 62 79 74 65 73 20 28 69 6e 20 68 65 78 29 3a   bytes (in hex):
1d20: 0a 35 33 20 35 31 20 34 63 20 36 39 20 37 34 20  .53 51 4c 69 74 
1d30: 36 35 20 32 30 20 36 36 20 36 66 20 37 32 20 36  65 20 66 6f 72 6
1d40: 64 20 36 31 20 37 34 20 32 30 20 33 33 20 30 30  d 61 74 20 33 00
1d50: 2e 20 20 54 68 69 73 20 62 79 74 65 20 73 65 71  .  This byte seq
1d60: 75 65 6e 63 65 0a 63 6f 72 72 65 73 70 6f 6e 64  uence.correspond
1d70: 73 20 74 6f 20 74 68 65 20 55 54 46 2d 38 20 73  s to the UTF-8 s
1d80: 74 72 69 6e 67 20 22 53 51 4c 69 74 65 20 66 6f  tring "SQLite fo
1d90: 72 6d 61 74 20 33 22 20 69 6e 63 6c 75 64 69 6e  rmat 3" includin
1da0: 67 20 74 68 65 20 6e 75 6c 0a 74 65 72 6d 69 6e  g the nul.termin
1db0: 61 74 6f 72 20 63 68 61 72 61 63 74 65 72 20 61  ator character a
1dc0: 74 20 74 68 65 20 65 6e 64 2e 3c 2f 70 3e 0a 0a  t the end.</p>..
1dd0: 3c 68 34 3e 31 2e 32 2e 32 20 46 69 6c 65 20 66  <h4>1.2.2 File f
1de0: 6f 72 6d 61 74 20 76 65 72 73 69 6f 6e 20 6e 75  ormat version nu
1df0: 6d 62 65 72 73 3c 2f 68 34 3e 0a 0a 3c 70 3e 54  mbers</h4>..<p>T
1e00: 68 65 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 77  he file format w
1e10: 72 69 74 65 20 76 65 72 73 69 6f 6e 20 61 6e 64  rite version and
1e20: 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 72 65 61   file format rea
1e30: 64 20 76 65 72 73 69 6f 6e 20 61 74 20 6f 66 66  d version at off
1e40: 73 65 74 73 0a 31 38 20 61 6e 64 20 31 39 20 61  sets.18 and 19 a
1e50: 72 65 20 69 6e 74 65 6e 64 65 64 20 74 6f 20 61  re intended to a
1e60: 6c 6c 6f 77 20 66 6f 72 20 65 6e 68 61 6e 63 65  llow for enhance
1e70: 6d 65 6e 74 73 20 6f 66 20 74 68 65 20 66 69 6c  ments of the fil
1e80: 65 20 66 6f 72 6d 61 74 0a 69 6e 20 66 75 74 75  e format.in futu
1e90: 72 65 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53  re versions of S
1ea0: 51 4c 69 74 65 2e 20 20 49 6e 20 63 75 72 72 65  QLite.  In curre
1eb0: 6e 74 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53  nt versions of S
1ec0: 51 4c 69 74 65 2c 20 62 6f 74 68 20 6f 66 0a 74  QLite, both of.t
1ed0: 68 65 73 65 20 76 61 6c 75 65 73 20 61 72 65 20  hese values are 
1ee0: 31 20 66 6f 72 20 72 6f 6c 6c 62 61 63 6b 20 6a  1 for rollback j
1ef0: 6f 75 72 6e 61 6c 6c 69 6e 67 20 6d 6f 64 65 73  ournalling modes
1f00: 20 61 6e 64 20 32 20 66 6f 72 20 5b 57 41 4c 5d   and 2 for [WAL]
1f10: 0a 6a 6f 75 72 6e 61 6c 6c 69 6e 67 20 6d 6f 64  .journalling mod
1f20: 65 2e 20 20 49 66 20 61 20 76 65 72 73 69 6f 6e  e.  If a version
1f30: 20 6f 66 20 53 51 4c 69 74 65 20 63 6f 64 65 64   of SQLite coded
1f40: 20 74 6f 20 74 68 65 20 63 75 72 72 65 6e 74 0a   to the current.
1f50: 66 69 6c 65 20 66 6f 72 6d 61 74 20 73 70 65 63  file format spec
1f60: 69 66 69 63 61 74 69 6f 6e 20 65 6e 63 6f 75 6e  ification encoun
1f70: 74 65 72 73 20 61 20 64 61 74 61 62 61 73 65 20  ters a database 
1f80: 66 69 6c 65 20 77 68 65 72 65 20 74 68 65 20 72  file where the r
1f90: 65 61 64 0a 76 65 72 73 69 6f 6e 20 69 73 20 31  ead.version is 1
1fa0: 20 6f 72 20 32 20 62 75 74 20 74 68 65 20 77 72   or 2 but the wr
1fb0: 69 74 65 20 76 65 72 73 69 6f 6e 20 69 73 20 67  ite version is g
1fc0: 72 65 61 74 65 72 20 74 68 61 6e 20 32 2c 20 74  reater than 2, t
1fd0: 68 65 6e 20 74 68 65 20 64 61 74 61 62 61 73 65  hen the database
1fe0: 0a 66 69 6c 65 20 6d 75 73 74 20 62 65 20 74 72  .file must be tr
1ff0: 65 61 74 65 64 20 61 73 20 72 65 61 64 2d 6f 6e  eated as read-on
2000: 6c 79 2e 20 20 49 66 20 61 20 64 61 74 61 62 61  ly.  If a databa
2010: 73 65 20 66 69 6c 65 20 77 69 74 68 20 61 20 72  se file with a r
2020: 65 61 64 20 76 65 72 73 69 6f 6e 0a 67 72 65 61  ead version.grea
2030: 74 65 72 20 74 68 61 6e 20 32 20 69 73 20 65 6e  ter than 2 is en
2040: 63 6f 75 6e 74 65 72 2c 20 74 68 65 6e 20 74 68  counter, then th
2050: 61 74 20 64 61 74 61 62 61 73 65 20 63 61 6e 6e  at database cann
2060: 6f 74 20 62 65 20 72 65 61 64 20 6f 72 20 77 72  ot be read or wr
2070: 69 74 74 65 6e 2e 3c 2f 70 3e 0a 0a 3c 68 34 3e  itten.</p>..<h4>
2080: 31 2e 32 2e 33 20 52 65 73 65 72 76 65 64 20 62  1.2.3 Reserved b
2090: 79 74 65 73 20 70 65 72 20 70 61 67 65 3c 2f 68  ytes per page</h
20a0: 34 3e 0a 0a 3c 70 3e 53 51 4c 69 74 65 20 68 61  4>..<p>SQLite ha
20b0: 73 20 74 68 65 20 61 62 69 6c 69 74 79 20 74 6f  s the ability to
20c0: 20 73 65 74 20 61 73 69 64 65 20 61 20 73 6d 61   set aside a sma
20d0: 6c 6c 20 6e 75 6d 62 65 72 20 6f 66 20 65 78 74  ll number of ext
20e0: 72 61 20 62 79 74 65 73 20 61 74 0a 74 68 65 20  ra bytes at.the 
20f0: 65 6e 64 20 6f 66 20 65 76 65 72 79 20 70 61 67  end of every pag
2100: 65 20 66 6f 72 20 75 73 65 20 62 79 20 65 78 74  e for use by ext
2110: 65 6e 73 69 6f 6e 73 2e 20 20 54 68 65 73 65 20  ensions.  These 
2120: 65 78 74 72 61 20 62 79 74 65 73 20 61 72 65 0a  extra bytes are.
2130: 75 73 65 64 2c 20 66 6f 72 20 65 78 61 6d 70 6c  used, for exampl
2140: 65 2c 20 62 79 20 74 68 65 20 53 51 4c 69 74 65  e, by the SQLite
2150: 20 45 6e 63 72 79 70 74 69 6f 6e 20 45 78 74 65   Encryption Exte
2160: 6e 73 69 6f 6e 20 74 6f 20 73 74 6f 72 65 20 61  nsion to store a
2170: 20 6e 6f 6e 63 65 0a 61 6e 64 2f 6f 72 20 63 72   nonce.and/or cr
2180: 79 70 74 6f 67 72 61 70 68 69 63 20 63 68 65 63  yptographic chec
2190: 6b 73 75 6d 20 61 73 73 6f 63 69 61 74 65 64 20  ksum associated 
21a0: 77 69 74 68 20 65 61 63 68 20 70 61 67 65 2e 20  with each page. 
21b0: 20 54 68 65 20 0a 22 72 65 73 65 72 76 65 64 20   The ."reserved 
21c0: 73 70 61 63 65 22 20 73 69 7a 65 20 69 6e 20 74  space" size in t
21d0: 68 65 20 31 2d 62 79 74 65 20 69 6e 74 65 67 65  he 1-byte intege
21e0: 72 20 61 74 20 6f 66 66 73 65 74 20 32 30 20 69  r at offset 20 i
21f0: 73 20 74 68 65 20 6e 75 6d 62 65 72 0a 6f 66 20  s the number.of 
2200: 62 79 74 65 73 20 6f 66 20 73 70 61 63 65 20 61  bytes of space a
2210: 74 20 74 68 65 20 65 6e 64 20 6f 66 20 65 61 63  t the end of eac
2220: 68 20 70 61 67 65 20 74 6f 20 72 65 73 65 72 76  h page to reserv
2230: 65 20 66 6f 72 20 65 78 74 65 6e 73 69 6f 6e 73  e for extensions
2240: 2e 0a 54 68 69 73 20 76 61 6c 75 65 20 69 73 20  ..This value is 
2250: 75 73 75 61 6c 6c 79 20 30 2e 20 20 54 68 65 20  usually 0.  The 
2260: 76 61 6c 75 65 20 63 61 6e 20 62 65 20 6f 64 64  value can be odd
2270: 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  .</p>..<tcl>hd_f
2280: 72 61 67 6d 65 6e 74 20 75 73 61 62 6c 65 5f 73  ragment usable_s
2290: 69 7a 65 20 7b 75 73 61 62 6c 65 20 73 69 7a 65  ize {usable size
22a0: 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 54 68 65 20 22  }</tcl>.<p>The "
22b0: 75 73 61 62 6c 65 20 73 69 7a 65 22 20 6f 66 20  usable size" of 
22c0: 61 20 64 61 74 61 62 61 73 65 20 70 61 67 65 20  a database page 
22d0: 69 73 20 74 68 65 20 70 61 67 65 20 73 69 7a 65  is the page size
22e0: 20 73 70 65 63 69 66 79 20 62 79 20 74 68 65 0a   specify by the.
22f0: 32 2d 62 79 74 65 20 69 6e 74 65 67 65 72 20 61  2-byte integer a
2300: 74 20 6f 66 66 73 65 74 20 31 36 20 69 6e 20 74  t offset 16 in t
2310: 68 65 20 68 65 61 64 65 72 20 6c 65 73 73 20 74  he header less t
2320: 68 65 20 22 72 65 73 65 72 76 65 64 22 20 73 70  he "reserved" sp
2330: 61 63 65 20 73 69 7a 65 0a 72 65 63 6f 72 64 65  ace size.recorde
2340: 64 20 69 6e 20 74 68 65 20 31 2d 62 79 74 65 20  d in the 1-byte 
2350: 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73 65  integer at offse
2360: 74 20 32 30 20 69 6e 20 74 68 65 20 68 65 61 64  t 20 in the head
2370: 65 72 2e 20 20 54 68 65 20 75 73 61 62 6c 65 0a  er.  The usable.
2380: 73 69 7a 65 20 6f 66 20 61 20 70 61 67 65 20 6d  size of a page m
2390: 69 67 68 74 20 62 65 20 61 6e 20 6f 64 64 20 6e  ight be an odd n
23a0: 75 6d 62 65 72 2e 20 20 48 6f 77 65 76 65 72 2c  umber.  However,
23b0: 20 74 68 65 20 75 73 61 62 6c 65 20 73 69 7a 65   the usable size
23c0: 20 69 73 20 6e 6f 74 0a 61 6c 6c 6f 77 65 64 20   is not.allowed 
23d0: 74 6f 20 62 65 20 6c 65 73 73 20 74 68 61 6e 20  to be less than 
23e0: 34 38 30 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  480.  In other w
23f0: 6f 72 64 73 2c 20 69 66 20 74 68 65 20 70 61 67  ords, if the pag
2400: 65 20 73 69 7a 65 20 69 73 20 35 31 32 2c 0a 74  e size is 512,.t
2410: 68 65 6e 20 74 68 65 20 72 65 73 65 72 76 65 64  hen the reserved
2420: 20 73 70 61 63 65 20 73 69 7a 65 20 63 61 6e 6e   space size cann
2430: 6f 74 20 65 78 63 65 65 64 20 33 32 2e 3c 2f 70  ot exceed 32.</p
2440: 3e 0a 0a 3c 68 34 3e 31 2e 32 2e 34 20 50 61 79  >..<h4>1.2.4 Pay
2450: 6c 6f 61 64 20 66 72 61 63 74 69 6f 6e 73 3c 2f  load fractions</
2460: 68 34 3e 0a 0a 3c 70 3e 54 68 65 20 6d 61 78 69  h4>..<p>The maxi
2470: 6d 75 6d 20 61 6e 64 20 6d 69 6e 69 6d 75 6d 20  mum and minimum 
2480: 65 6d 62 65 64 64 65 64 20 70 61 79 6c 6f 61 64  embedded payload
2490: 20 66 72 61 63 74 69 6f 6e 73 20 61 6e 64 20 74   fractions and t
24a0: 68 65 20 6c 65 61 66 0a 70 61 79 6c 6f 61 64 20  he leaf.payload 
24b0: 66 72 61 63 74 69 6f 6e 20 76 61 6c 75 65 73 20  fraction values 
24c0: 6d 75 73 74 20 62 65 20 36 34 2c 20 33 32 2c 20  must be 64, 32, 
24d0: 61 6e 64 20 33 32 2e 20 20 54 68 65 73 65 20 76  and 32.  These v
24e0: 61 6c 75 65 73 20 77 65 72 65 0a 6f 72 67 69 6e  alues were.orgin
24f0: 61 6c 6c 79 20 69 6e 74 65 6e 64 65 64 20 74 6f  ally intended to
2500: 20 61 73 20 74 75 6e 61 62 6c 65 20 70 61 72 61   as tunable para
2510: 6d 65 74 65 72 73 20 74 68 61 74 20 63 6f 75 6c  meters that coul
2520: 64 20 62 65 20 75 73 65 64 20 74 6f 0a 6d 6f 64  d be used to.mod
2530: 69 66 79 20 74 68 65 20 73 74 6f 72 61 67 65 20  ify the storage 
2540: 66 6f 72 6d 61 74 20 6f 66 20 74 68 65 20 62 2d  format of the b-
2550: 74 72 65 65 20 61 6c 67 6f 72 69 74 68 6d 2e 20  tree algorithm. 
2560: 20 48 6f 77 65 76 65 72 2c 20 74 68 61 74 0a 66   However, that.f
2570: 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73 20  unctionality is 
2580: 6e 6f 74 20 73 75 70 70 6f 72 74 65 64 20 61 6e  not supported an
2590: 64 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 63  d there are no c
25a0: 75 72 72 65 6e 74 20 70 6c 61 6e 73 20 74 6f 20  urrent plans to 
25b0: 61 64 64 0a 73 75 70 70 6f 72 74 20 69 6e 20 74  add.support in t
25c0: 68 65 20 66 75 74 75 72 65 2e 20 20 48 65 6e 63  he future.  Henc
25d0: 65 2c 20 74 68 65 73 65 20 74 68 72 65 65 20 62  e, these three b
25e0: 79 74 65 73 20 61 72 65 20 66 69 78 65 64 20 61  ytes are fixed a
25f0: 74 20 74 68 65 0a 76 61 6c 75 65 73 20 73 70 65  t the.values spe
2600: 63 69 66 69 65 64 2e 3c 2f 70 3e 0a 0a 3c 68 34  cified.</p>..<h4
2610: 3e 31 2e 32 2e 35 20 46 69 6c 65 20 63 68 61 6e  >1.2.5 File chan
2620: 67 65 20 63 6f 75 6e 74 65 72 3c 2f 68 34 3e 0a  ge counter</h4>.
2630: 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
2640: 74 20 63 68 6e 67 63 74 72 20 7b 63 68 61 6e 67  t chngctr {chang
2650: 65 20 63 6f 75 6e 74 65 72 7d 3c 2f 74 63 6c 3e  e counter}</tcl>
2660: 0a 3c 70 3e 54 68 65 20 66 69 6c 65 20 63 68 61  .<p>The file cha
2670: 6e 67 65 20 63 6f 75 6e 74 65 72 20 69 73 20 61  nge counter is a
2680: 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69   4-byte big-endi
2690: 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69 63 68  an integer which
26a0: 20 69 73 0a 69 6e 63 72 65 6d 65 6e 74 65 64 20   is.incremented 
26b0: 77 68 65 6e 65 76 65 72 20 74 68 65 20 64 61 74  whenever the dat
26c0: 61 62 61 73 65 20 66 69 6c 65 20 69 73 20 63 68  abase file is ch
26d0: 61 6e 67 65 64 20 69 6e 20 72 6f 6c 6c 62 61 63  anged in rollbac
26e0: 6b 20 6d 6f 64 65 2e 20 20 0a 57 68 65 6e 20 74  k mode.  .When t
26f0: 77 6f 20 6f 72 20 6d 6f 72 65 20 70 72 6f 63 65  wo or more proce
2700: 73 73 65 73 20 61 72 65 20 72 65 61 64 69 6e 67  sses are reading
2710: 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62 61   the same databa
2720: 73 65 20 66 69 6c 65 2c 20 65 61 63 68 20 0a 70  se file, each .p
2730: 72 6f 63 65 73 73 20 63 61 6e 20 64 65 74 65 63  rocess can detec
2740: 74 20 64 61 74 61 62 61 73 65 20 63 68 61 6e 67  t database chang
2750: 65 73 20 66 72 6f 6d 20 6f 74 68 65 72 20 70 72  es from other pr
2760: 6f 63 65 73 73 65 73 20 62 79 20 6d 6f 6e 69 74  ocesses by monit
2770: 6f 72 69 6e 67 20 0a 74 68 65 20 63 68 61 6e 67  oring .the chang
2780: 65 20 63 6f 75 6e 74 65 72 2e 0a 41 20 70 72 6f  e counter..A pro
2790: 63 65 73 73 20 77 69 6c 6c 20 6e 6f 72 6d 61 6c  cess will normal
27a0: 6c 79 20 77 61 6e 74 20 74 6f 20 66 6c 75 73 68  ly want to flush
27b0: 20 69 74 73 20 64 61 74 61 62 61 73 65 20 70 61   its database pa
27c0: 67 65 20 63 61 63 68 65 20 77 68 65 6e 0a 61 6e  ge cache when.an
27d0: 6f 74 68 65 72 20 70 72 6f 63 65 73 73 20 6d 6f  other process mo
27e0: 64 69 66 69 65 64 20 74 68 65 20 64 61 74 61 62  dified the datab
27f0: 61 73 65 2c 20 73 69 6e 63 65 20 74 68 65 20 63  ase, since the c
2800: 61 63 68 65 20 68 61 73 20 62 65 63 6f 6d 65 20  ache has become 
2810: 73 74 61 6c 65 2e 0a 54 68 65 20 66 69 6c 65 20  stale..The file 
2820: 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 66  change counter f
2830: 61 63 69 6c 69 74 61 74 65 73 20 74 68 69 73 2e  acilitates this.
2840: 3c 2f 70 3e 0a 0a 3c 70 3e 49 6e 20 57 41 4c 20  </p>..<p>In WAL 
2850: 6d 6f 64 65 2c 20 63 68 61 6e 67 65 73 20 74 6f  mode, changes to
2860: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61 72   the database ar
2870: 65 20 64 65 74 65 63 74 65 64 20 75 73 69 6e 67  e detected using
2880: 20 74 68 65 20 77 61 6c 2d 69 6e 64 65 78 0a 61   the wal-index.a
2890: 6e 64 20 73 6f 20 74 68 65 20 63 68 61 6e 67 65  nd so the change
28a0: 20 63 6f 75 6e 74 65 72 20 69 73 20 6e 6f 74 20   counter is not 
28b0: 6e 65 65 64 65 64 2e 20 20 48 65 6e 63 65 2c 20  needed.  Hence, 
28c0: 74 68 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74  the change count
28d0: 65 72 20 6d 69 67 68 74 0a 6e 6f 74 20 62 65 20  er might.not be 
28e0: 69 6e 63 72 65 6d 65 6e 74 65 64 20 6f 6e 20 65  incremented on e
28f0: 61 63 68 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ach transaction 
2900: 69 6e 20 57 41 4c 20 6d 6f 64 65 2e 3c 2f 70 3e  in WAL mode.</p>
2910: 0a 0a 3c 68 34 3e 31 2e 32 2e 36 20 49 6e 2d 68  ..<h4>1.2.6 In-h
2920: 65 61 64 65 72 20 64 61 74 61 62 61 73 65 20 73  eader database s
2930: 69 7a 65 3c 2f 68 34 3e 0a 0a 3c 74 63 6c 3e 68  ize</h4>..<tcl>h
2940: 64 5f 66 72 61 67 6d 65 6e 74 20 66 69 6c 65 73  d_fragment files
2950: 69 7a 65 20 7b 69 6e 2d 68 65 61 64 65 72 20 64  ize {in-header d
2960: 61 74 61 62 61 73 65 20 73 69 7a 65 7d 3c 2f 74  atabase size}</t
2970: 63 6c 3e 0a 3c 70 3e 54 68 65 20 34 2d 62 79 74  cl>.<p>The 4-byt
2980: 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74  e big-endian int
2990: 65 67 65 72 20 61 74 20 6f 66 66 73 65 74 20 32  eger at offset 2
29a0: 38 20 69 6e 74 6f 20 74 68 65 20 68 65 61 64 65  8 into the heade
29b0: 72 20 0a 73 74 6f 72 65 73 20 74 68 65 20 73 69  r .stores the si
29c0: 7a 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ze of the databa
29d0: 73 65 20 66 69 6c 65 20 69 6e 20 70 61 67 65 73  se file in pages
29e0: 2e 20 20 49 66 20 74 68 69 73 20 69 6e 2d 68 65  .  If this in-he
29f0: 61 64 65 72 0a 64 61 74 61 73 69 7a 65 20 73 69  ader.datasize si
2a00: 7a 65 20 69 73 20 6e 6f 74 20 76 61 6c 69 64 20  ze is not valid 
2a10: 28 73 65 65 20 74 68 65 20 6e 65 78 74 20 70 61  (see the next pa
2a20: 72 61 67 72 61 70 68 29 2c 20 74 68 65 6e 20 74  ragraph), then t
2a30: 68 65 20 64 61 74 61 62 61 73 65 20 0a 73 69 7a  he database .siz
2a40: 65 20 69 73 20 63 6f 6d 70 75 74 65 64 20 62 79  e is computed by
2a50: 20 6c 6f 6f 6b 69 6e 67 0a 61 74 20 74 68 65 20   looking.at the 
2a60: 61 63 74 75 61 6c 20 73 69 7a 65 20 6f 66 20 74  actual size of t
2a70: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
2a80: 2e 20 4f 6c 64 65 72 20 76 65 72 73 69 6f 6e 73  . Older versions
2a90: 20 6f 66 20 53 51 4c 69 74 65 0a 69 67 6e 6f 72   of SQLite.ignor
2aa0: 65 64 20 74 68 65 20 69 6e 2d 68 65 61 64 65 72  ed the in-header
2ab0: 20 64 61 74 61 62 61 73 65 20 73 69 7a 65 20 61   database size a
2ac0: 6e 64 20 75 73 65 64 20 74 68 65 20 61 63 74 75  nd used the actu
2ad0: 61 6c 20 66 69 6c 65 20 73 69 7a 65 0a 65 78 63  al file size.exc
2ae0: 6c 75 73 69 76 65 6c 79 2e 20 20 4e 65 77 65 72  lusively.  Newer
2af0: 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c   versions of SQL
2b00: 69 74 65 20 75 73 65 20 74 68 65 20 69 6e 2d 68  ite use the in-h
2b10: 65 61 64 65 72 20 64 61 74 61 62 61 73 65 0a 73  eader database.s
2b20: 69 7a 65 20 69 66 20 69 74 20 69 73 20 61 76 61  ize if it is ava
2b30: 69 6c 61 62 6c 65 20 62 75 74 20 66 61 6c 6c 20  ilable but fall 
2b40: 62 61 63 6b 20 74 6f 20 74 68 65 20 61 63 74 75  back to the actu
2b50: 61 6c 20 66 69 6c 65 20 73 69 7a 65 20 69 66 0a  al file size if.
2b60: 74 68 65 20 69 6e 2d 68 65 61 64 65 72 20 64 61  the in-header da
2b70: 74 61 62 61 73 65 20 73 69 7a 65 20 69 73 20 6e  tabase size is n
2b80: 6f 74 20 76 61 6c 69 64 2e 3c 2f 70 3e 0a 0a 3c  ot valid.</p>..<
2b90: 70 3e 54 68 65 20 69 6e 2d 68 65 61 64 65 72 20  p>The in-header 
2ba0: 64 61 74 61 62 61 73 65 20 73 69 7a 65 20 69 73  database size is
2bb0: 20 6f 6e 6c 79 20 63 6f 6e 73 69 64 65 72 65 64   only considered
2bc0: 20 74 6f 20 62 65 20 76 61 6c 69 64 20 69 66 0a   to be valid if.
2bd0: 69 74 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 20 61  it is non-zero a
2be0: 6e 64 20 69 66 20 74 68 65 20 34 2d 62 79 74 65  nd if the 4-byte
2bf0: 20 5b 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72   [change counter
2c00: 5d 20 61 74 20 6f 66 66 73 65 74 20 32 34 0a 65  ] at offset 24.e
2c10: 78 61 63 74 6c 79 20 6d 61 74 63 68 65 73 20 74  xactly matches t
2c20: 68 65 20 34 2d 62 79 74 65 20 5b 76 65 72 73 69  he 4-byte [versi
2c30: 6f 6e 2d 76 61 6c 69 64 2d 66 6f 72 20 6e 75 6d  on-valid-for num
2c40: 62 65 72 5d 20 61 74 20 6f 66 66 73 65 74 20 39  ber] at offset 9
2c50: 32 2e 0a 54 68 65 20 69 6e 2d 68 65 61 64 65 72  2..The in-header
2c60: 20 64 61 74 61 62 61 73 65 20 73 69 7a 65 20 73   database size s
2c70: 68 6f 75 6c 64 20 61 6c 77 61 79 73 20 62 65 20  hould always be 
2c80: 76 61 6c 69 64 20 0a 77 68 65 6e 20 74 68 65 20  valid .when the 
2c90: 64 61 74 61 62 61 73 65 20 69 73 20 6f 6e 6c 79  database is only
2ca0: 20 6d 6f 64 69 66 69 65 64 20 75 73 69 6e 67 20   modified using 
2cb0: 72 65 63 65 6e 74 20 76 65 72 73 69 6f 6e 73 20  recent versions 
2cc0: 6f 66 20 53 51 4c 69 74 65 0a 28 76 65 72 73 69  of SQLite.(versi
2cd0: 6f 6e 73 20 33 2e 37 2e 30 20 61 6e 64 20 6c 61  ons 3.7.0 and la
2ce0: 74 65 72 29 2e 0a 49 66 20 61 20 6c 65 67 61 63  ter)..If a legac
2cf0: 79 20 76 65 72 73 69 6f 6e 20 6f 66 20 53 51 4c  y version of SQL
2d00: 69 74 65 20 77 72 69 74 65 73 20 74 6f 20 74 68  ite writes to th
2d10: 65 20 64 61 74 61 62 61 73 65 2c 20 69 74 20 77  e database, it w
2d20: 69 6c 6c 20 6e 6f 74 0a 6b 6e 6f 77 20 74 6f 20  ill not.know to 
2d30: 75 70 64 61 74 65 20 74 68 65 20 69 6e 2d 68 65  update the in-he
2d40: 61 64 65 72 20 64 61 74 61 62 61 73 65 20 73 69  ader database si
2d50: 7a 65 20 61 6e 64 20 73 6f 20 74 68 65 20 69 6e  ze and so the in
2d60: 2d 68 65 61 64 65 72 0a 64 61 74 61 62 61 73 65  -header.database
2d70: 20 73 69 7a 65 20 63 6f 75 6c 64 20 62 65 20 69   size could be i
2d80: 6e 63 6f 72 72 65 63 74 2e 20 20 42 75 74 20 6c  ncorrect.  But l
2d90: 65 67 61 63 79 20 76 65 72 73 69 6f 6e 73 20 6f  egacy versions o
2da0: 66 20 53 51 4c 69 74 65 0a 77 69 6c 6c 20 61 6c  f SQLite.will al
2db0: 73 6f 20 6c 65 61 76 65 20 74 68 65 20 76 65 72  so leave the ver
2dc0: 73 69 6f 6e 2d 76 61 6c 69 64 2d 66 6f 72 20 6e  sion-valid-for n
2dd0: 75 6d 62 65 72 20 61 74 20 6f 66 66 73 65 74 20  umber at offset 
2de0: 39 32 20 75 6e 63 68 61 6e 67 65 64 0a 73 6f 20  92 unchanged.so 
2df0: 69 74 20 77 69 6c 6c 20 6e 6f 74 20 6d 61 74 63  it will not matc
2e00: 68 20 74 68 65 20 63 68 61 6e 67 65 2d 63 6f 75  h the change-cou
2e10: 6e 74 65 72 2e 20 20 48 65 6e 63 65 2c 20 69 6e  nter.  Hence, in
2e20: 76 61 6c 69 64 20 69 6e 2d 68 65 61 64 65 72 0a  valid in-header.
2e30: 64 61 74 61 62 61 73 65 20 73 69 7a 65 73 20 63  database sizes c
2e40: 61 6e 20 62 65 20 64 65 74 65 63 74 65 64 20 28  an be detected (
2e50: 61 6e 64 20 69 67 6e 6f 72 65 64 29 20 62 79 20  and ignored) by 
2e60: 6f 62 73 65 72 76 69 6e 67 20 77 68 65 6e 0a 74  observing when.t
2e70: 68 65 20 63 68 61 6e 67 65 2d 63 6f 75 6e 74 65  he change-counte
2e80: 72 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74 63 68  r does not match
2e90: 20 74 68 65 20 76 65 72 73 69 6f 6e 2d 76 61 6c   the version-val
2ea0: 69 64 2d 66 6f 72 20 6e 75 6d 62 65 72 2e 3c 2f  id-for number.</
2eb0: 70 3e 0a 0a 3c 68 34 3e 31 2e 32 2e 37 20 46 72  p>..<h4>1.2.7 Fr
2ec0: 65 65 20 70 61 67 65 20 6c 69 73 74 3c 2f 68 34  ee page list</h4
2ed0: 3e 0a 0a 3c 70 3e 55 6e 75 73 65 64 20 70 61 67  >..<p>Unused pag
2ee0: 65 73 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  es in the databa
2ef0: 73 65 20 66 69 6c 65 20 61 72 65 20 73 74 6f 72  se file are stor
2f00: 65 64 20 6f 6e 20 61 20 66 72 65 65 6c 69 73 74  ed on a freelist
2f10: 2e 20 20 54 68 65 0a 34 2d 62 79 74 65 20 62 69  .  The.4-byte bi
2f20: 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72  g-endian integer
2f30: 20 61 74 20 6f 66 66 73 65 74 20 33 32 20 73 74   at offset 32 st
2f40: 6f 72 65 73 20 74 68 65 20 70 61 67 65 20 6e 75  ores the page nu
2f50: 6d 62 65 72 20 6f 66 0a 74 68 65 20 66 69 72 73  mber of.the firs
2f60: 74 20 70 61 67 65 20 6f 66 20 74 68 65 20 66 72  t page of the fr
2f70: 65 65 6c 69 73 74 2c 20 6f 72 20 7a 65 72 6f 20  eelist, or zero 
2f80: 69 66 20 74 68 65 20 66 72 65 65 6c 69 73 74 20  if the freelist 
2f90: 69 73 20 65 6d 70 74 79 2e 0a 54 68 65 20 34 2d  is empty..The 4-
2fa0: 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20  byte big-endian 
2fb0: 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73 65  integer at offse
2fc0: 74 20 33 36 20 73 74 6f 72 65 73 20 73 74 6f 72  t 36 stores stor
2fd0: 65 73 20 74 68 65 20 74 6f 74 61 6c 20 0a 6e 75  es the total .nu
2fe0: 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 6f 6e  mber of pages on
2ff0: 20 74 68 65 20 66 72 65 65 6c 69 73 74 2e 3c 2f   the freelist.</
3000: 70 3e 0a 0a 3c 68 34 3e 31 2e 32 2e 38 20 53 63  p>..<h4>1.2.8 Sc
3010: 68 65 6d 61 20 63 6f 6f 6b 69 65 3c 2f 68 34 3e  hema cookie</h4>
3020: 0a 0a 3c 70 3e 54 68 65 20 73 63 68 65 6d 61 20  ..<p>The schema 
3030: 63 6f 6f 6b 69 65 20 69 73 20 61 20 34 2d 62 79  cookie is a 4-by
3040: 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e  te big-endian in
3050: 74 65 67 65 72 20 61 74 20 6f 66 66 73 65 74 20  teger at offset 
3060: 34 30 0a 74 68 61 74 20 69 73 20 69 6e 63 72 65  40.that is incre
3070: 6d 65 6e 74 65 64 20 77 68 65 6e 65 76 65 72 20  mented whenever 
3080: 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
3090: 65 6d 61 20 63 68 61 6e 67 65 73 2e 20 20 41 20  ema changes.  A 
30a0: 0a 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d  .prepared statem
30b0: 65 6e 74 20 69 73 20 63 6f 6d 70 69 6c 65 64 20  ent is compiled 
30c0: 61 67 61 69 6e 73 74 20 61 20 73 70 65 63 69 66  against a specif
30d0: 69 63 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 68  ic version of th
30e0: 65 0a 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e.database schem
30f0: 61 2e 20 20 57 68 65 6e 65 76 65 72 20 74 68 65  a.  Whenever the
3100: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
3110: 20 63 68 61 6e 67 65 73 2c 20 74 68 65 20 73 74   changes, the st
3120: 61 74 65 6d 65 6e 74 0a 6d 75 73 74 20 62 65 20  atement.must be 
3130: 72 65 70 72 65 70 61 72 65 64 2e 20 20 57 68 65  reprepared.  Whe
3140: 6e 65 76 65 72 20 61 20 70 72 65 70 61 72 65 64  never a prepared
3150: 20 73 74 61 74 65 6d 65 6e 74 20 72 75 6e 73 2c   statement runs,
3160: 20 69 74 20 66 69 72 73 74 20 63 68 65 63 6b 73   it first checks
3170: 0a 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b  .the schema cook
3180: 69 65 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20  ie to make sure 
3190: 74 68 65 20 76 61 6c 75 65 20 69 73 20 74 68 65  the value is the
31a0: 20 73 61 6d 65 20 61 73 20 77 68 65 6e 20 74 68   same as when th
31b0: 65 20 73 74 61 74 65 6d 65 6e 74 0a 77 61 73 20  e statement.was 
31c0: 70 72 65 70 61 72 65 64 20 61 6e 64 20 69 66 20  prepared and if 
31d0: 6e 6f 74 20 69 74 20 61 62 6f 72 74 73 20 74 6f  not it aborts to
31e0: 20 66 6f 72 63 65 20 74 68 65 20 73 74 61 74 65   force the state
31f0: 6d 65 6e 74 20 74 6f 20 62 65 20 72 65 70 72 65  ment to be repre
3200: 70 61 72 65 64 2e 3c 2f 70 3e 0a 0a 3c 68 34 3e  pared.</p>..<h4>
3210: 31 2e 32 2e 39 20 53 63 68 65 6d 61 20 66 6f 72  1.2.9 Schema for
3220: 6d 61 74 20 6e 75 6d 62 65 72 3c 2f 68 34 3e 0a  mat number</h4>.
3230: 0a 3c 70 3e 54 68 65 20 73 63 68 65 6d 61 20 66  .<p>The schema f
3240: 6f 72 6d 61 74 20 6e 75 6d 62 65 72 20 69 73 20  ormat number is 
3250: 61 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64  a 4-byte big-end
3260: 69 61 6e 20 69 6e 74 65 67 65 72 20 61 74 20 6f  ian integer at o
3270: 66 66 73 65 74 20 34 34 2e 0a 54 68 65 20 73 63  ffset 44..The sc
3280: 68 65 6d 61 20 66 6f 72 6d 61 74 20 6e 75 6d 62  hema format numb
3290: 65 72 20 69 73 20 73 69 6d 69 6c 61 72 20 74 6f  er is similar to
32a0: 20 74 68 65 20 66 69 6c 65 20 66 6f 72 6d 61 74   the file format
32b0: 20 72 65 61 64 20 61 6e 64 20 77 72 69 74 65 0a   read and write.
32c0: 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 73 20  version numbers 
32d0: 61 74 20 6f 66 66 73 65 74 73 20 31 38 20 61 6e  at offsets 18 an
32e0: 64 20 31 39 20 65 78 63 65 70 74 20 74 68 61 74  d 19 except that
32f0: 20 74 68 65 20 73 63 68 65 6d 61 20 66 6f 72 6d   the schema form
3300: 61 74 20 6e 75 6d 62 65 72 0a 72 65 66 65 72 73  at number.refers
3310: 20 74 6f 20 74 68 65 20 68 69 67 68 2d 6c 65 76   to the high-lev
3320: 65 6c 20 53 51 4c 20 66 6f 72 6d 61 74 74 69 6e  el SQL formattin
3330: 67 20 72 61 74 68 65 72 20 74 68 61 6e 20 74 68  g rather than th
3340: 65 20 6c 6f 77 2d 6c 65 76 65 6c 20 62 2d 74 72  e low-level b-tr
3350: 65 65 0a 66 6f 72 6d 61 74 74 69 6e 67 2e 20 20  ee.formatting.  
3360: 46 6f 75 72 20 73 63 68 65 6d 61 20 66 6f 72 6d  Four schema form
3370: 61 74 20 6e 75 6d 62 65 72 73 20 61 72 65 20 63  at numbers are c
3380: 75 72 72 65 6e 74 6c 79 20 64 65 66 69 6e 65 64  urrently defined
3390: 3a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 20  :</p>..<ol>.<li 
33a0: 76 61 6c 75 65 3d 31 3e 46 6f 72 6d 61 74 20 31  value=1>Format 1
33b0: 20 69 73 20 75 6e 64 65 72 73 74 6f 6f 64 20 62   is understood b
33c0: 79 20 61 6c 6c 20 76 65 72 73 69 6f 6e 73 20 6f  y all versions o
33d0: 66 20 53 51 4c 69 74 65 20 62 61 63 6b 20 74 6f  f SQLite back to
33e0: 0a 76 65 72 73 69 6f 6e 20 33 2e 30 2e 30 2e 3c  .version 3.0.0.<
33f0: 2f 6c 69 3e 0a 3c 6c 69 20 76 61 6c 75 65 3d 32  /li>.<li value=2
3400: 3e 46 6f 72 6d 61 74 20 32 20 61 64 64 73 20 74  >Format 2 adds t
3410: 68 65 20 61 62 69 6c 69 74 79 20 6f 66 20 72 6f  he ability of ro
3420: 77 73 20 77 69 74 68 69 6e 20 74 68 65 20 73 61  ws within the sa
3430: 6d 65 20 74 61 62 6c 65 0a 74 6f 20 68 61 76 65  me table.to have
3440: 20 61 20 76 61 72 69 6e 67 20 6e 75 6d 62 65 72   a varing number
3450: 20 6f 66 20 63 6f 6c 75 6d 6e 73 2c 20 69 6e 20   of columns, in 
3460: 6f 72 64 65 72 20 74 6f 20 73 75 70 70 6f 72 74  order to support
3470: 20 74 68 65 0a 5b 41 4c 54 45 52 20 54 41 42 4c   the.[ALTER TABL
3480: 45 20 7c 20 41 4c 54 45 52 20 54 41 42 4c 45 20  E | ALTER TABLE 
3490: 2e 2e 2e 20 41 44 44 20 43 4f 4c 55 4d 4e 5d 20  ... ADD COLUMN] 
34a0: 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 2e 20 20  functionality.  
34b0: 53 75 70 70 6f 72 74 20 66 6f 72 0a 72 65 61 64  Support for.read
34c0: 69 6e 67 20 61 6e 64 20 77 72 69 74 69 6e 67 20  ing and writing 
34d0: 66 6f 72 6d 61 74 20 32 20 77 61 73 20 61 64 64  format 2 was add
34e0: 65 64 20 69 6e 20 53 51 4c 69 74 65 20 76 65 72  ed in SQLite ver
34f0: 73 69 6f 6e 20 33 2e 31 2e 33 20 0a 6f 6e 20 32  sion 3.1.3 .on 2
3500: 30 30 35 2d 30 32 2d 31 39 2e 3c 2f 6c 69 3e 0a  005-02-19.</li>.
3510: 3c 6c 69 20 76 61 6c 75 65 3d 33 3e 46 6f 72 6d  <li value=3>Form
3520: 61 74 20 33 20 61 64 64 73 20 74 68 65 20 61 62  at 3 adds the ab
3530: 69 6c 69 74 79 20 6f 66 20 65 78 74 72 61 20 63  ility of extra c
3540: 6f 6c 75 6d 6e 73 20 61 64 64 65 64 20 62 79 0a  olumns added by.
3550: 5b 41 4c 54 45 52 20 54 41 42 4c 45 20 7c 20 41  [ALTER TABLE | A
3560: 4c 54 45 52 20 54 41 42 4c 45 20 2e 2e 2e 20 41  LTER TABLE ... A
3570: 44 44 20 43 4f 4c 55 4d 4e 5d 20 74 6f 20 68 61  DD COLUMN] to ha
3580: 76 65 20 6e 6f 6e 2d 4e 55 4c 4c 20 64 65 66 61  ve non-NULL defa
3590: 75 6c 74 0a 76 61 6c 75 65 73 2e 20 20 54 68 69  ult.values.  Thi
35a0: 73 20 63 61 70 61 62 69 6c 69 74 79 20 77 61 73  s capability was
35b0: 20 61 64 64 65 64 20 69 6e 20 53 51 4c 69 74 65   added in SQLite
35c0: 20 76 65 72 73 69 6f 6e 20 33 2e 31 2e 34 20 0a   version 3.1.4 .
35d0: 6f 6e 20 32 30 30 35 2d 30 33 2d 31 31 2e 3c 2f  on 2005-03-11.</
35e0: 6c 69 3e 0a 3c 6c 69 20 76 61 6c 75 65 3d 34 3e  li>.<li value=4>
35f0: 46 6f 72 6d 61 74 20 34 20 63 61 75 73 65 73 20  Format 4 causes 
3600: 53 51 4c 69 74 65 20 74 6f 20 72 65 73 70 65 63  SQLite to respec
3610: 74 20 74 68 65 20 44 45 53 43 20 6b 65 79 77 6f  t the DESC keywo
3620: 72 64 20 6f 6e 0a 69 6e 64 65 78 20 64 65 63 6c  rd on.index decl
3630: 61 72 61 74 69 6f 6e 73 2e 20 20 28 54 68 65 20  arations.  (The 
3640: 44 45 53 43 20 6b 65 79 77 6f 72 64 20 69 73 20  DESC keyword is 
3650: 69 67 6e 6f 72 65 64 20 69 6e 20 69 6e 64 69 63  ignored in indic
3660: 65 73 20 66 6f 72 20 0a 66 6f 72 6d 61 74 73 20  es for .formats 
3670: 31 2c 20 32 2c 20 61 6e 64 20 33 2e 29 0a 46 6f  1, 2, and 3.).Fo
3680: 72 6d 61 74 20 34 20 61 6c 73 6f 20 61 64 64 73  rmat 4 also adds
3690: 20 74 77 6f 20 6e 65 77 20 62 6f 6f 6c 65 61 6e   two new boolean
36a0: 20 72 65 63 6f 72 64 20 74 79 70 65 20 76 61 6c   record type val
36b0: 75 65 73 20 28 5b 73 65 72 69 61 6c 20 74 79 70  ues ([serial typ
36c0: 65 73 5d 0a 38 20 61 6e 64 20 39 2e 29 20 20 53  es].8 and 9.)  S
36d0: 75 70 70 6f 72 74 20 66 6f 72 20 66 6f 72 6d 61  upport for forma
36e0: 74 20 34 20 77 61 73 20 61 64 64 65 64 20 69 6e  t 4 was added in
36f0: 20 53 51 4c 69 74 65 20 33 2e 33 2e 30 20 6f 6e   SQLite 3.3.0 on
3700: 0a 32 30 30 36 2d 30 31 2d 31 30 2e 3c 2f 6c 69  .2006-01-10.</li
3710: 3e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 4e 65 77 20  >.</ol>..<p>New 
3720: 64 61 74 61 62 61 73 65 20 66 69 6c 65 73 20 63  database files c
3730: 72 65 61 74 65 64 20 62 79 20 53 51 4c 69 74 65  reated by SQLite
3740: 20 75 73 65 20 66 6f 72 6d 61 74 20 31 20 62 79   use format 1 by
3750: 20 64 65 66 61 75 6c 74 2c 20 73 6f 0a 74 68 61   default, so.tha
3760: 74 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73  t database files
3770: 20 63 72 65 61 74 65 64 20 62 79 20 6e 65 77 65   created by newe
3780: 72 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51  r versions of SQ
3790: 4c 69 74 65 20 63 61 6e 20 73 74 69 6c 6c 0a 62  Lite can still.b
37a0: 65 20 72 65 61 64 20 62 79 20 6f 6c 64 65 72 20  e read by older 
37b0: 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69  versions of SQLi
37c0: 74 65 2e 0a 54 68 65 20 5b 6c 65 67 61 63 79 5f  te..The [legacy_
37d0: 66 69 6c 65 5f 66 6f 72 6d 61 74 20 70 72 61 67  file_format prag
37e0: 6d 61 5d 20 63 61 6e 20 62 65 20 75 73 65 64 20  ma] can be used 
37f0: 74 6f 20 63 61 75 73 65 20 53 51 4c 69 74 65 0a  to cause SQLite.
3800: 74 6f 20 63 72 65 61 74 65 20 6e 65 77 20 64 61  to create new da
3810: 74 61 62 61 73 65 20 66 69 6c 65 73 20 75 73 69  tabase files usi
3820: 6e 67 20 66 6f 72 6d 61 74 20 34 2e 20 20 46 75  ng format 4.  Fu
3830: 74 75 72 65 20 76 65 72 73 69 6f 6e 73 20 6f 66  ture versions of
3840: 20 0a 53 51 4c 69 74 65 20 6d 61 79 20 62 65 67   .SQLite may beg
3850: 69 6e 20 74 6f 20 63 72 65 61 74 65 20 66 69 6c  in to create fil
3860: 65 73 20 75 73 69 6e 67 20 66 6f 72 6d 61 74 20  es using format 
3870: 34 20 62 79 20 64 65 66 61 75 6c 74 2e 3c 2f 70  4 by default.</p
3880: 3e 0a 0a 3c 68 34 3e 31 2e 32 2e 31 30 20 53 75  >..<h4>1.2.10 Su
3890: 67 67 65 73 74 65 64 20 63 61 63 68 65 20 73 69  ggested cache si
38a0: 7a 65 3c 2f 68 34 3e 0a 0a 3c 70 3e 54 68 65 20  ze</h4>..<p>The 
38b0: 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61  4-byte big-endia
38c0: 6e 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  n signed integer
38d0: 20 61 74 20 6f 66 66 73 65 74 20 34 38 20 69 73   at offset 48 is
38e0: 20 74 68 65 20 73 75 67 67 65 73 74 0a 63 61 63   the suggest.cac
38f0: 68 65 20 73 69 7a 65 20 69 6e 20 70 61 67 65 73  he size in pages
3900: 20 66 6f 72 20 74 68 65 20 64 61 74 61 62 61 73   for the databas
3910: 65 20 66 69 6c 65 2e 20 20 54 68 65 20 76 61 6c  e file.  The val
3920: 75 65 20 69 73 20 61 20 73 75 67 67 65 73 74 69  ue is a suggesti
3930: 6f 6e 0a 6f 6e 6c 79 20 61 6e 64 20 53 51 4c 69  on.only and SQLi
3940: 74 65 20 69 73 20 75 6e 64 65 72 20 6e 6f 20 6f  te is under no o
3950: 62 6c 69 67 61 74 69 6f 6e 20 74 6f 20 68 6f 6e  bligation to hon
3960: 6f 72 20 69 74 2e 20 20 54 68 65 20 61 62 73 6f  or it.  The abso
3970: 6c 75 74 65 20 76 61 6c 75 65 0a 6f 66 20 74 68  lute value.of th
3980: 65 20 69 6e 74 65 67 65 72 20 69 73 20 75 73 65  e integer is use
3990: 64 20 61 73 20 74 68 65 20 73 75 67 67 65 73 74  d as the suggest
39a0: 65 64 20 73 69 7a 65 2e 20 20 54 68 65 20 73 75  ed size.  The su
39b0: 67 67 65 73 74 65 64 20 63 61 63 68 65 20 73 69  ggested cache si
39c0: 7a 65 0a 63 61 6e 20 62 65 20 73 65 74 20 75 73  ze.can be set us
39d0: 69 6e 67 20 74 68 65 20 5b 64 65 66 61 75 6c 74  ing the [default
39e0: 5f 63 61 63 68 65 5f 73 69 7a 65 20 70 72 61 67  _cache_size prag
39f0: 6d 61 5d 2e 3c 2f 70 3e 0a 0a 3c 68 34 3e 31 2e  ma].</p>..<h4>1.
3a00: 32 2e 31 31 20 49 6e 63 72 65 6d 65 6e 74 61 6c  2.11 Incremental
3a10: 20 76 61 63 75 75 6d 20 73 65 74 74 69 6e 67 73   vacuum settings
3a20: 3c 2f 68 34 3e 0a 0a 3c 70 3e 54 68 65 20 74 77  </h4>..<p>The tw
3a30: 6f 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64  o 4-byte big-end
3a40: 69 61 6e 20 69 6e 74 65 67 65 72 73 20 61 74 20  ian integers at 
3a50: 6f 66 66 73 65 74 73 20 35 32 20 61 6e 64 20 36  offsets 52 and 6
3a60: 34 20 61 72 65 20 75 73 65 64 0a 74 6f 20 6d 61  4 are used.to ma
3a70: 6e 61 67 65 20 74 68 65 20 5b 61 75 74 6f 5f 76  nage the [auto_v
3a80: 61 63 75 75 6d 5d 20 61 6e 64 20 5b 69 6e 63 72  acuum] and [incr
3a90: 65 6d 65 6e 74 61 6c 5f 76 61 63 75 75 6d 5d 20  emental_vacuum] 
3aa0: 6d 6f 64 65 73 2e 20 20 49 66 0a 74 68 65 20 69  modes.  If.the i
3ab0: 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73 65 74  nteger at offset
3ac0: 20 35 32 20 69 73 20 7a 65 72 6f 20 74 68 65 6e   52 is zero then
3ad0: 20 70 6f 69 6e 74 65 72 2d 6d 61 70 20 28 70 74   pointer-map (pt
3ae0: 72 6d 61 70 29 20 70 61 67 65 73 20 61 72 65 0a  rmap) pages are.
3af0: 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65  omitted from the
3b00: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61   database file a
3b10: 6e 64 20 6e 65 69 74 68 65 72 20 61 75 74 6f 5f  nd neither auto_
3b20: 76 61 63 75 75 6d 20 6e 6f 72 0a 69 6e 63 72 65  vacuum nor.incre
3b30: 6d 65 6e 74 61 6c 5f 76 61 63 75 75 6d 20 61 72  mental_vacuum ar
3b40: 65 20 73 75 70 70 6f 72 74 65 64 2e 20 20 49 66  e supported.  If
3b50: 20 74 68 65 20 69 6e 74 65 67 65 72 20 61 74 20   the integer at 
3b60: 6f 66 66 73 65 74 20 35 32 20 69 73 0a 6e 6f 6e  offset 52 is.non
3b70: 2d 7a 65 72 6f 20 74 68 65 6e 20 69 74 20 69 73  -zero then it is
3b80: 20 74 68 65 20 70 61 67 65 20 6e 75 6d 62 65 72   the page number
3b90: 20 6f 66 20 74 68 65 20 6c 61 72 67 65 73 74 20   of the largest 
3ba0: 72 6f 6f 74 20 70 61 67 65 20 69 6e 20 74 68 65  root page in the
3bb0: 0a 64 61 74 61 62 61 73 65 20 66 69 6c 65 2c 20  .database file, 
3bc0: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
3bd0: 65 20 63 6f 6e 74 61 69 6e 20 70 74 72 6d 61 70  e contain ptrmap
3be0: 20 70 61 67 65 73 2c 20 61 6e 64 20 74 68 65 0a   pages, and the.
3bf0: 6d 6f 64 65 20 6d 75 73 74 20 62 65 20 65 69 74  mode must be eit
3c00: 68 65 72 20 61 75 74 6f 5f 76 61 63 75 75 6d 20  her auto_vacuum 
3c10: 6f 72 20 69 6e 63 72 65 6d 65 6e 74 61 6c 5f 76  or incremental_v
3c20: 61 63 75 75 6d 2e 20 20 49 6e 20 74 68 69 73 20  acuum.  In this 
3c30: 6c 61 74 74 65 72 0a 63 61 73 65 2c 20 74 68 65  latter.case, the
3c40: 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73   integer at offs
3c50: 65 74 20 36 34 20 69 73 20 74 72 75 65 20 66 6f  et 64 is true fo
3c60: 72 20 69 6e 63 72 65 6d 65 6e 74 61 6c 5f 76 61  r incremental_va
3c70: 63 75 75 6d 20 61 6e 64 0a 66 61 6c 73 65 20 66  cuum and.false f
3c80: 6f 72 20 61 75 74 6f 5f 76 61 63 75 75 6d 2e 20  or auto_vacuum. 
3c90: 20 49 66 20 74 68 65 20 69 6e 74 65 67 65 72 20   If the integer 
3ca0: 61 74 20 6f 66 66 73 65 74 20 35 32 20 69 73 20  at offset 52 is 
3cb0: 7a 65 72 6f 20 74 68 65 6e 0a 74 68 65 20 69 6e  zero then.the in
3cc0: 74 65 67 65 72 20 61 74 20 6f 66 66 73 65 74 20  teger at offset 
3cd0: 36 34 20 6d 75 73 74 20 61 6c 73 6f 20 62 65 20  64 must also be 
3ce0: 7a 65 72 6f 2e 3c 2f 70 3e 0a 0a 3c 68 34 3e 31  zero.</p>..<h4>1
3cf0: 2e 32 2e 31 32 20 54 65 78 74 20 65 6e 63 6f 64  .2.12 Text encod
3d00: 69 6e 67 3c 2f 68 34 3e 0a 0a 3c 70 3e 54 68 65  ing</h4>..<p>The
3d10: 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69   4-byte big-endi
3d20: 61 6e 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66  an integer at of
3d30: 66 73 65 74 20 35 36 20 64 65 74 65 72 6d 69 6e  fset 56 determin
3d40: 65 73 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 0a  es the encoding.
3d50: 75 73 65 64 20 66 6f 72 20 61 6c 6c 20 74 65 78  used for all tex
3d60: 74 20 73 74 72 69 6e 67 73 20 73 74 6f 72 65 64  t strings stored
3d70: 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
3d80: 2e 20 20 41 20 76 61 6c 75 65 20 6f 66 20 31 20  .  A value of 1 
3d90: 6d 65 61 6e 73 0a 55 54 46 2d 38 2e 20 20 41 20  means.UTF-8.  A 
3da0: 76 61 6c 75 65 20 6f 66 20 32 20 6d 65 61 6e 73  value of 2 means
3db0: 20 55 54 46 2d 31 36 6c 65 2e 20 20 41 20 76 61   UTF-16le.  A va
3dc0: 6c 75 65 20 6f 66 20 33 20 6d 65 61 6e 73 20 55  lue of 3 means U
3dd0: 54 46 2d 31 36 62 65 2e 0a 4e 6f 20 6f 74 68 65  TF-16be..No othe
3de0: 72 20 76 61 6c 75 65 73 20 61 72 65 20 61 6c 6c  r values are all
3df0: 6f 77 65 64 2e 3c 2f 70 3e 0a 0a 3c 68 34 3e 31  owed.</p>..<h4>1
3e00: 2e 32 2e 31 33 20 55 73 65 72 20 76 65 72 73 69  .2.13 User versi
3e10: 6f 6e 20 6e 75 6d 62 65 72 3c 2f 68 34 3e 0a 0a  on number</h4>..
3e20: 3c 70 3e 54 68 65 20 34 2d 62 79 74 65 20 62 69  <p>The 4-byte bi
3e30: 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72  g-endian integer
3e40: 20 61 74 20 6f 66 66 73 65 74 20 36 30 20 69 73   at offset 60 is
3e50: 20 74 68 65 20 75 73 65 72 20 76 65 72 73 69 6f   the user versio
3e60: 6e 20 77 68 69 63 68 0a 69 73 20 73 65 74 20 61  n which.is set a
3e70: 6e 64 20 71 75 65 72 69 65 64 20 62 79 20 74 68  nd queried by th
3e80: 65 20 5b 75 73 65 72 5f 76 65 72 73 69 6f 6e 20  e [user_version 
3e90: 70 72 61 67 6d 61 5d 2e 20 20 54 68 65 20 75 73  pragma].  The us
3ea0: 65 72 20 76 65 72 73 69 6f 6e 20 69 73 0a 6e 6f  er version is.no
3eb0: 74 20 75 73 65 64 20 62 79 20 53 51 4c 69 74 65  t used by SQLite
3ec0: 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  .</p>..<tcl>hd_f
3ed0: 72 61 67 6d 65 6e 74 20 76 61 6c 69 64 66 6f 72  ragment validfor
3ee0: 20 7b 76 65 72 73 69 6f 6e 2d 76 61 6c 69 64 2d   {version-valid-
3ef0: 66 6f 72 20 6e 75 6d 62 65 72 7d 3c 2f 74 63 6c  for number}</tcl
3f00: 3e 0a 3c 68 34 3e 31 2e 32 2e 31 34 20 57 72 69  >.<h4>1.2.14 Wri
3f10: 74 65 20 6c 69 62 72 61 72 79 20 76 65 72 73 69  te library versi
3f20: 6f 6e 20 6e 75 6d 62 65 72 20 61 6e 64 20 76 65  on number and ve
3f30: 72 73 69 6f 6e 2d 76 61 6c 69 64 2d 66 6f 72 20  rsion-valid-for 
3f40: 6e 75 6d 62 65 72 3c 2f 68 34 3e 0a 0a 3c 70 3e  number</h4>..<p>
3f50: 54 68 65 20 34 2d 62 79 74 65 20 62 69 67 2d 65  The 4-byte big-e
3f60: 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20 61 74  ndian integer at
3f70: 20 6f 66 66 73 65 74 20 39 36 20 73 74 6f 72 65   offset 96 store
3f80: 73 20 74 68 65 20 0a 5b 53 51 4c 49 54 45 5f 56  s the .[SQLITE_V
3f90: 45 52 53 49 4f 4e 5f 4e 55 4d 42 45 52 5d 20 76  ERSION_NUMBER] v
3fa0: 61 6c 75 65 2e 20 20 54 68 65 20 34 2d 62 79 74  alue.  The 4-byt
3fb0: 65 20 62 69 67 2d 65 6e 64 69 6e 67 20 69 6e 74  e big-ending int
3fc0: 65 67 65 72 20 61 74 0a 6f 66 66 73 65 74 20 39  eger at.offset 9
3fd0: 32 20 69 73 20 74 68 65 20 76 61 6c 75 65 20 6f  2 is the value o
3fe0: 66 20 74 68 65 20 5b 63 68 61 6e 67 65 20 63 6f  f the [change co
3ff0: 75 6e 74 65 72 5d 20 77 68 65 6e 20 74 68 65 20  unter] when the 
4000: 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 0a 77  version number.w
4010: 61 73 20 73 74 6f 72 65 64 2e 20 20 54 68 65 20  as stored.  The 
4020: 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73 65  integer at offse
4030: 74 20 39 32 20 69 6e 64 69 63 61 74 65 73 20 77  t 92 indicates w
4040: 68 69 63 68 20 74 72 61 6e 73 61 63 74 69 6f 6e  hich transaction
4050: 0a 74 68 65 20 76 65 72 73 69 6f 6e 20 6e 75 6d  .the version num
4060: 62 65 72 20 69 73 20 76 61 6c 69 64 20 66 6f 72  ber is valid for
4070: 20 61 6e 64 20 69 73 20 73 6f 6d 65 74 69 6d 65   and is sometime
4080: 73 20 63 61 6c 6c 65 64 20 74 68 65 0a 22 76 65  s called the."ve
4090: 72 73 69 6f 6e 2d 76 61 6c 69 64 2d 66 6f 72 20  rsion-valid-for 
40a0: 6e 75 6d 62 65 72 22 2e 0a 0a 3c 68 34 3e 31 2e  number"...<h4>1.
40b0: 32 2e 31 35 20 48 65 61 64 65 72 20 73 70 61 63  2.15 Header spac
40c0: 65 20 72 65 73 65 72 76 65 64 20 66 6f 72 20 65  e reserved for e
40d0: 78 70 61 6e 73 69 6f 6e 3c 2f 68 34 3e 0a 0a 3c  xpansion</h4>..<
40e0: 70 3e 41 6c 6c 20 6f 74 68 65 72 20 62 79 74 65  p>All other byte
40f0: 73 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  s of the databas
4100: 65 20 66 69 6c 65 20 68 65 61 64 65 72 20 61 72  e file header ar
4110: 65 20 72 65 73 65 72 76 65 64 20 66 6f 72 0a 66  e reserved for.f
4120: 75 74 75 72 65 20 65 78 70 61 6e 73 69 6f 6e 20  uture expansion 
4130: 61 6e 64 20 6d 75 73 74 20 62 65 20 73 65 74 20  and must be set 
4140: 74 6f 20 7a 65 72 6f 2e 3c 2f 70 3e 0a 0a 3c 68  to zero.</p>..<h
4150: 33 3e 31 2e 33 20 54 68 65 20 4c 6f 63 6b 2d 42  3>1.3 The Lock-B
4160: 79 74 65 20 50 61 67 65 3c 2f 68 33 3e 0a 0a 3c  yte Page</h3>..<
4170: 70 3e 54 68 65 20 6c 6f 63 6b 2d 62 79 74 65 20  p>The lock-byte 
4180: 70 61 67 65 20 69 73 20 74 68 65 20 73 69 6e 67  page is the sing
4190: 6c 65 20 70 61 67 65 20 6f 66 20 74 68 65 20 64  le page of the d
41a0: 61 74 61 62 61 73 65 20 66 69 6c 65 0a 74 68 61  atabase file.tha
41b0: 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 62  t contains the b
41c0: 79 74 65 73 20 61 74 20 6f 66 66 73 65 74 73 20  ytes at offsets 
41d0: 62 65 74 77 65 65 6e 20 31 30 37 33 37 34 31 38  between 10737418
41e0: 32 34 20 61 6e 64 20 31 30 37 33 37 34 32 33 33  24 and 107374233
41f0: 35 2c 0a 69 6e 63 6c 75 73 69 76 65 2e 20 20 41  5,.inclusive.  A
4200: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 74   database file t
4210: 68 61 74 20 69 73 20 6c 65 73 73 20 74 68 61 6e  hat is less than
4220: 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 31 30 37   or equal to 107
4230: 33 37 34 31 38 32 34 20 62 79 74 65 73 20 0a 69  3741824 bytes .i
4240: 6e 20 73 69 7a 65 20 63 6f 6e 74 61 69 6e 73 20  n size contains 
4250: 6e 6f 20 6c 6f 63 6b 2d 62 79 74 65 20 70 61 67  no lock-byte pag
4260: 65 2e 20 20 41 20 64 61 74 61 62 61 73 65 20 66  e.  A database f
4270: 69 6c 65 20 6c 61 72 67 65 72 20 74 68 61 6e 0a  ile larger than.
4280: 31 30 37 33 37 34 31 38 32 34 20 63 6f 6e 74 61  1073741824 conta
4290: 69 6e 73 20 65 78 61 63 74 6c 79 20 6f 6e 65 20  ins exactly one 
42a0: 6c 6f 63 6b 2d 62 79 74 65 20 70 61 67 65 2e 0a  lock-byte page..
42b0: 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 6c 6f 63  </p>..<p>The loc
42c0: 6b 2d 62 79 74 65 20 70 61 67 65 20 69 73 20 73  k-byte page is s
42d0: 65 74 20 61 73 69 64 65 20 66 6f 72 20 75 73 65  et aside for use
42e0: 20 62 79 20 74 68 65 20 6f 70 65 72 61 74 69 6e   by the operatin
42f0: 67 2d 73 79 73 74 65 6d 20 73 70 65 63 69 66 69  g-system specifi
4300: 63 0a 56 46 53 20 69 6d 70 6c 65 6d 65 6e 74 61  c.VFS implementa
4310: 74 69 6f 6e 20 69 6e 20 69 6d 70 6c 65 6d 65 6e  tion in implemen
4320: 74 69 6e 67 20 74 68 65 20 64 61 74 61 62 61 73  ting the databas
4330: 65 20 66 69 6c 65 20 6c 6f 63 6b 69 6e 67 20 70  e file locking p
4340: 72 69 6d 69 74 69 76 65 73 2e 0a 53 51 4c 69 74  rimitives..SQLit
4350: 65 20 77 69 6c 6c 20 6e 6f 74 20 75 73 65 20 74  e will not use t
4360: 68 65 20 6c 6f 63 6b 2d 62 79 74 65 20 70 61 67  he lock-byte pag
4370: 65 3b 20 69 74 20 77 69 6c 6c 20 6e 65 76 65 72  e; it will never
4380: 20 62 65 20 72 65 61 64 20 6f 72 20 77 72 69 74   be read or writ
4390: 74 65 6e 0a 62 79 20 74 68 65 20 53 51 4c 69 74  ten.by the SQLit
43a0: 65 20 63 6f 72 65 2c 20 74 68 6f 75 67 68 20 6f  e core, though o
43b0: 70 65 72 61 74 69 6e 67 2d 73 79 73 74 65 6d 20  perating-system 
43c0: 73 70 65 63 69 66 69 63 20 56 46 53 20 69 6d 70  specific VFS imp
43d0: 6c 65 6d 65 6e 74 69 6f 6e 73 20 6d 61 79 0a 63  lementions may.c
43e0: 68 6f 6f 73 65 20 74 6f 20 72 65 61 64 20 6f 72  hoose to read or
43f0: 20 77 72 69 74 65 20 62 79 74 65 73 20 6f 6e 20   write bytes on 
4400: 74 68 65 20 6c 6f 63 6b 2d 62 79 74 65 20 70 61  the lock-byte pa
4410: 67 65 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20  ge according to 
4420: 74 68 65 20 0a 6e 65 65 64 73 20 61 6e 64 20 70  the .needs and p
4430: 72 6f 63 6c 61 76 69 74 69 65 73 20 6f 66 20 74  roclavities of t
4440: 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 73 79  he underlying sy
4450: 73 74 65 6d 2e 20 20 54 68 65 20 75 6e 69 78 20  stem.  The unix 
4460: 61 6e 64 20 77 69 6e 33 32 0a 56 46 53 20 69 6d  and win32.VFS im
4470: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20 74 68  plementations th
4480: 61 74 20 63 6f 6d 65 20 62 75 69 6c 74 20 69 6e  at come built in
4490: 74 6f 20 53 51 4c 69 74 65 20 64 6f 20 6e 6f 74  to SQLite do not
44a0: 20 77 72 69 74 65 20 74 6f 20 74 68 65 0a 6c 6f   write to the.lo
44b0: 63 6b 2d 62 79 74 65 20 70 61 67 65 2c 20 62 75  ck-byte page, bu
44c0: 74 20 77 65 20 61 72 65 20 61 77 61 72 65 20 6f  t we are aware o
44d0: 66 20 74 68 69 72 64 2d 70 61 72 74 79 20 56 46  f third-party VF
44e0: 53 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  S implementation
44f0: 73 20 66 6f 72 0a 6f 74 68 65 72 20 6f 70 65 72  s for.other oper
4500: 61 74 69 6e 67 20 73 79 73 74 65 6d 73 20 74 68  ating systems th
4510: 61 74 20 64 6f 20 73 6f 6d 65 74 69 6d 65 73 20  at do sometimes 
4520: 77 72 69 74 65 20 74 6f 20 74 68 65 20 6c 6f 63  write to the loc
4530: 6b 2d 62 79 74 65 20 70 61 67 65 2e 3c 2f 70 3e  k-byte page.</p>
4540: 0a 0a 3c 68 33 3e 31 2e 34 20 54 68 65 20 46 72  ..<h3>1.4 The Fr
4550: 65 65 6c 69 73 74 3c 2f 68 33 3e 0a 0a 3c 70 3e  eelist</h3>..<p>
4560: 41 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  A database file 
4570: 6d 69 67 68 74 20 63 6f 6e 74 61 69 6e 20 6f 6e  might contain on
4580: 65 20 6f 72 20 6d 6f 72 65 20 70 61 67 65 73 20  e or more pages 
4590: 74 68 61 74 20 61 72 65 20 6e 6f 74 20 69 6e 0a  that are not in.
45a0: 61 63 74 69 76 65 20 75 73 65 2e 20 20 55 6e 75  active use.  Unu
45b0: 73 65 64 20 70 61 67 65 73 20 63 61 6e 20 63 6f  sed pages can co
45c0: 6d 65 20 61 62 6f 75 74 2c 20 66 6f 72 20 65 78  me about, for ex
45d0: 61 6d 70 6c 65 2c 20 77 68 65 6e 20 69 6e 66 6f  ample, when info
45e0: 72 6d 61 74 69 6f 6e 0a 69 73 20 64 65 6c 65 74  rmation.is delet
45f0: 65 64 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61  ed from the data
4600: 62 61 73 65 2e 20 20 55 6e 75 73 65 64 20 70 61  base.  Unused pa
4610: 67 65 73 20 61 72 65 20 73 74 6f 72 65 64 20 6f  ges are stored o
4620: 6e 20 74 68 65 20 66 72 65 65 6c 69 73 74 0a 61  n the freelist.a
4630: 6e 64 20 61 72 65 20 72 65 75 73 65 64 20 77 68  nd are reused wh
4640: 65 6e 20 61 64 64 69 74 69 6f 6e 61 6c 20 70 61  en additional pa
4650: 67 65 73 20 61 72 65 20 72 65 71 75 69 72 65 64  ges are required
4660: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 66 72  .</p>..<p>The fr
4670: 65 65 6c 69 73 74 20 69 73 20 6f 72 67 61 6e 69  eelist is organi
4680: 7a 65 64 20 61 73 20 61 20 6c 69 6e 6b 65 64 20  zed as a linked 
4690: 6c 69 73 74 20 6f 66 20 66 72 65 65 6c 69 73 74  list of freelist
46a0: 20 74 72 75 6e 6b 20 70 61 67 65 73 0a 77 69 74   trunk pages.wit
46b0: 68 20 65 61 63 68 20 74 72 75 6e 6b 20 70 61 67  h each trunk pag
46c0: 65 73 20 63 6f 6e 74 61 69 6e 69 6e 67 20 70 61  es containing pa
46d0: 67 65 20 6e 75 6d 62 65 72 73 20 66 6f 72 20 7a  ge numbers for z
46e0: 65 72 6f 20 6f 72 20 6d 6f 72 65 20 66 72 65 65  ero or more free
46f0: 6c 69 73 74 0a 6c 65 61 66 20 70 61 67 65 73 2e  list.leaf pages.
4700: 3c 2f 70 3e 0a 0a 3c 70 3e 41 20 66 72 65 65 6c  </p>..<p>A freel
4710: 69 73 74 20 74 72 75 6e 6b 20 70 61 67 65 20 63  ist trunk page c
4720: 6f 6e 73 69 73 74 73 20 6f 66 20 61 6e 20 61 72  onsists of an ar
4730: 72 61 79 20 6f 66 20 34 2d 62 79 74 65 20 62 69  ray of 4-byte bi
4740: 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72  g-endian integer
4750: 73 2e 0a 54 68 65 20 73 69 7a 65 20 6f 66 20 74  s..The size of t
4760: 68 65 20 61 72 72 61 79 20 69 73 20 61 73 20 6d  he array is as m
4770: 61 6e 79 20 69 6e 74 65 67 65 72 73 20 61 73 20  any integers as 
4780: 77 69 6c 6c 20 66 69 74 20 69 6e 20 74 68 65 20  will fit in the 
4790: 75 73 61 62 6c 65 20 73 70 61 63 65 0a 6f 66 20  usable space.of 
47a0: 61 20 70 61 67 65 2e 20 20 54 68 65 20 6d 69 6e  a page.  The min
47b0: 69 6d 75 6d 20 75 73 61 62 6c 65 20 73 70 61 63  imum usable spac
47c0: 65 20 69 73 20 34 38 30 20 62 79 74 65 73 20 73  e is 480 bytes s
47d0: 6f 20 74 68 65 20 61 72 72 61 79 20 77 69 6c 6c  o the array will
47e0: 20 61 6c 77 61 79 73 0a 62 65 20 61 74 20 6c 65   always.be at le
47f0: 61 73 74 20 31 32 30 20 65 6e 74 72 69 65 73 20  ast 120 entries 
4800: 69 6e 20 6c 65 6e 67 74 68 2e 20 20 54 68 65 20  in length.  The 
4810: 66 69 72 73 74 20 69 6e 74 65 67 65 72 20 69 6e  first integer in
4820: 20 74 68 65 20 61 72 72 61 79 20 0a 69 73 20 74   the array .is t
4830: 68 65 20 70 61 67 65 20 6e 75 6d 62 65 72 20 6f  he page number o
4840: 66 20 74 68 65 20 6e 65 78 74 20 66 72 65 65 6c  f the next freel
4850: 69 73 74 20 74 72 75 6e 6b 20 70 61 67 65 20 69  ist trunk page i
4860: 6e 20 74 68 65 20 6c 69 73 74 20 6f 72 20 7a 65  n the list or ze
4870: 72 6f 20 0a 69 66 20 74 68 69 73 20 69 73 20 74  ro .if this is t
4880: 68 65 20 6c 61 73 74 20 66 72 65 65 6c 69 73 74  he last freelist
4890: 20 74 72 75 6e 6b 20 70 61 67 65 2e 20 20 54 68   trunk page.  Th
48a0: 65 20 73 65 63 6f 6e 64 20 69 6e 74 65 67 65 72  e second integer
48b0: 20 69 6e 20 74 68 65 20 61 72 72 61 79 0a 69 73   in the array.is
48c0: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6c   the number of l
48d0: 65 61 66 20 70 61 67 65 20 70 6f 69 6e 74 65 72  eaf page pointer
48e0: 73 20 74 6f 20 66 6f 6c 6c 6f 77 2e 20 20 43 61  s to follow.  Ca
48f0: 6c 6c 20 74 68 65 20 73 65 63 6f 6e 64 20 69 6e  ll the second in
4900: 74 65 67 65 72 20 4c 2e 0a 49 66 20 4c 20 69 73  teger L..If L is
4910: 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 7a 65   greater than ze
4920: 72 6f 20 74 68 65 6e 20 69 6e 74 65 67 65 72 73  ro then integers
4930: 20 77 69 74 68 20 61 72 72 61 79 20 69 6e 64 65   with array inde
4940: 78 65 73 20 62 65 74 77 65 65 6e 20 32 20 61 6e  xes between 2 an
4950: 64 0a 4c 2b 31 20 69 6e 63 6c 75 73 69 76 65 20  d.L+1 inclusive 
4960: 63 6f 6e 74 61 69 6e 20 70 61 67 65 20 6e 75 6d  contain page num
4970: 62 65 72 73 20 66 6f 72 20 66 72 65 65 6c 69 73  bers for freelis
4980: 74 20 6c 65 61 66 20 70 61 67 65 73 2e 3c 2f 70  t leaf pages.</p
4990: 3e 0a 0a 3c 70 3e 46 72 65 65 6c 69 73 74 20 6c  >..<p>Freelist l
49a0: 65 61 66 20 70 61 67 65 73 20 63 6f 6e 74 61 69  eaf pages contai
49b0: 6e 20 6e 6f 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  n no information
49c0: 2e 20 20 53 51 4c 69 74 65 20 61 76 6f 69 64 20  .  SQLite avoid 
49d0: 72 65 61 64 69 6e 67 20 6f 72 0a 77 72 69 74 69  reading or.writi
49e0: 6e 67 20 66 72 65 65 6c 69 73 74 20 6c 65 61 66  ng freelist leaf
49f0: 20 70 61 67 65 73 20 69 6e 20 6f 72 64 65 72 20   pages in order 
4a00: 74 6f 20 72 65 64 75 63 65 20 64 69 73 6b 20 49  to reduce disk I
4a10: 2f 4f 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 20 62 75  /O.</p>..<p>A bu
4a20: 67 20 69 6e 20 53 51 4c 69 74 65 20 76 65 72 73  g in SQLite vers
4a30: 69 6f 6e 73 20 70 72 69 6f 72 20 74 6f 20 33 2e  ions prior to 3.
4a40: 36 2e 30 20 63 61 75 73 65 64 20 74 68 65 20 64  6.0 caused the d
4a50: 61 74 61 62 61 73 65 20 74 6f 20 62 65 0a 72 65  atabase to be.re
4a60: 70 6f 72 74 65 64 20 61 73 20 63 6f 72 72 75 70  ported as corrup
4a70: 74 20 69 66 20 61 6e 79 20 6c 61 73 74 20 36 20  t if any last 6 
4a80: 65 6e 74 72 69 65 73 20 69 6e 20 74 68 65 20 66  entries in the f
4a90: 72 65 65 6c 69 73 74 20 74 72 75 6e 6b 20 70 61  reelist trunk pa
4aa0: 67 65 20 0a 61 72 72 61 79 20 63 6f 6e 74 61 69  ge .array contai
4ab0: 6e 65 64 20 6e 6f 6e 2d 7a 65 72 6f 20 76 61 6c  ned non-zero val
4ac0: 75 65 73 2e 20 20 4e 65 77 65 72 20 76 65 72 73  ues.  Newer vers
4ad0: 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 64  ions of SQLite d
4ae0: 6f 20 6e 6f 74 20 68 61 76 65 0a 74 68 69 73 20  o not have.this 
4af0: 70 72 6f 62 6c 65 6d 2e 20 20 48 6f 77 65 76 65  problem.  Howeve
4b00: 72 2c 20 6e 65 77 65 72 20 76 65 72 73 69 6f 6e  r, newer version
4b10: 73 20 6f 66 20 53 51 4c 69 74 65 20 73 74 69 6c  s of SQLite stil
4b20: 6c 20 61 76 6f 69 64 20 75 73 69 6e 67 20 74 68  l avoid using th
4b30: 65 20 0a 6c 61 73 74 20 73 69 78 20 65 6e 74 72  e .last six entr
4b40: 69 65 73 20 69 6e 20 74 68 65 20 66 72 65 65 6c  ies in the freel
4b50: 69 73 74 20 74 72 75 6e 6b 20 70 61 67 65 20 61  ist trunk page a
4b60: 72 72 61 79 20 69 6e 20 6f 72 64 65 72 20 74 68  rray in order th
4b70: 61 74 20 64 61 74 61 62 61 73 65 0a 66 69 6c 65  at database.file
4b80: 73 20 63 72 65 61 74 65 64 20 62 79 20 6e 65 77  s created by new
4b90: 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53  er versions of S
4ba0: 51 4c 69 74 65 20 63 61 6e 20 62 65 20 72 65 61  QLite can be rea
4bb0: 64 20 62 79 20 6f 6c 64 65 72 20 76 65 72 73 69  d by older versi
4bc0: 6f 6e 73 0a 6f 66 20 53 51 4c 69 74 65 2e 3c 2f  ons.of SQLite.</
4bd0: 70 3e 0a 0a 3c 70 3e 54 68 65 20 6e 75 6d 62 65  p>..<p>The numbe
4be0: 72 20 6f 66 20 66 72 65 65 6c 69 73 74 20 70 61  r of freelist pa
4bf0: 67 65 73 20 69 73 20 73 74 6f 72 65 64 20 61 73  ges is stored as
4c00: 20 61 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e   a 4-byte big-en
4c10: 64 69 61 6e 20 69 6e 74 65 67 65 72 0a 69 6e 20  dian integer.in 
4c20: 74 68 65 20 64 61 74 61 62 61 73 65 20 68 65 61  the database hea
4c30: 64 65 72 20 61 74 20 61 6e 20 6f 66 66 73 65 74  der at an offset
4c40: 20 6f 66 20 33 36 20 66 72 6f 6d 20 74 68 65 20   of 36 from the 
4c50: 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65  beginning of the
4c60: 20 66 69 6c 65 2e 0a 54 68 65 20 64 61 74 61 62   file..The datab
4c70: 61 73 65 20 68 65 61 64 65 72 20 61 6c 73 6f 20  ase header also 
4c80: 73 74 6f 72 65 73 20 74 68 65 20 70 61 67 65 20  stores the page 
4c90: 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 66 69  number of the fi
4ca0: 72 73 74 20 66 72 65 65 6c 69 73 74 20 74 72 75  rst freelist tru
4cb0: 6e 6b 0a 70 61 67 65 20 61 73 20 61 20 34 2d 62  nk.page as a 4-b
4cc0: 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69  yte big-endian i
4cd0: 6e 74 65 67 65 72 20 61 74 20 61 6e 20 6f 66 66  nteger at an off
4ce0: 73 65 74 20 6f 66 20 33 32 20 66 72 6f 6d 20 74  set of 32 from t
4cf0: 68 65 20 62 65 67 69 6e 6e 69 6e 67 0a 6f 66 20  he beginning.of 
4d00: 74 68 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c  the file.</p>..<
4d10: 68 33 3e 31 2e 35 20 42 2d 74 72 65 65 20 50 61  h3>1.5 B-tree Pa
4d20: 67 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 41 20 62  ges</h3>..<p>A b
4d30: 2d 74 72 65 65 20 70 61 67 65 20 69 73 20 65 69  -tree page is ei
4d40: 74 68 65 72 20 61 6e 20 69 6e 74 65 72 69 6f 72  ther an interior
4d50: 20 70 61 67 65 20 6f 72 20 61 20 6c 65 61 66 20   page or a leaf 
4d60: 70 61 67 65 2e 0a 41 20 6c 65 61 66 20 70 61 67  page..A leaf pag
4d70: 65 20 63 6f 6e 74 61 69 6e 73 20 6b 65 79 73 20  e contains keys 
4d80: 61 6e 64 20 69 6e 20 74 68 65 20 63 61 73 65 20  and in the case 
4d90: 6f 66 20 61 20 74 61 62 6c 65 20 62 2d 74 72 65  of a table b-tre
4da0: 65 20 65 61 63 68 0a 6b 65 79 20 68 61 73 20 61  e each.key has a
4db0: 73 73 6f 63 69 61 74 65 64 20 63 6f 6e 74 65 6e  ssociated conten
4dc0: 74 2e 20 20 41 6e 20 69 6e 74 65 72 69 6f 72 20  t.  An interior 
4dd0: 70 61 67 65 20 63 6f 6e 74 61 69 6e 73 0a 4b 20  page contains.K 
4de0: 6b 65 79 73 20 77 69 74 68 6f 75 74 20 63 6f 6e  keys without con
4df0: 74 65 6e 74 20 62 75 74 20 77 69 74 68 20 4b 2b  tent but with K+
4e00: 31 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 63 68  1 pointers to ch
4e10: 69 6c 64 20 62 2d 74 72 65 65 20 70 61 67 65 73  ild b-tree pages
4e20: 2e 0a 41 20 22 70 6f 69 6e 74 65 72 22 20 69 6e  ..A "pointer" in
4e30: 20 61 6e 20 69 6e 74 65 72 69 6f 72 20 62 2d 74   an interior b-t
4e40: 72 65 65 20 70 61 67 65 20 69 73 20 6a 75 73 74  ree page is just
4e50: 20 74 68 65 20 33 31 2d 62 69 74 20 69 6e 74 65   the 31-bit inte
4e60: 67 65 72 0a 70 61 67 65 20 6e 75 6d 62 65 72 20  ger.page number 
4e70: 6f 66 20 74 68 65 20 63 68 69 6c 64 20 70 61 67  of the child pag
4e80: 65 2e 3c 2f 70 3e 0a 0a 0a 3c 70 3e 44 65 66 69  e.</p>...<p>Defi
4e90: 6e 65 20 74 68 65 20 64 65 70 74 68 0a 6f 66 20  ne the depth.of 
4ea0: 61 20 6c 65 61 66 20 62 2d 74 72 65 65 20 74 6f  a leaf b-tree to
4eb0: 20 62 65 20 31 20 61 6e 64 20 74 68 61 74 20 74   be 1 and that t
4ec0: 68 65 20 64 65 70 74 68 20 6f 66 20 61 6e 79 20  he depth of any 
4ed0: 69 6e 74 65 72 69 6f 72 20 62 2d 74 72 65 65 20  interior b-tree 
4ee0: 74 6f 20 62 65 20 6f 6e 65 0a 6d 6f 72 65 20 74  to be one.more t
4ef0: 68 61 6e 20 74 68 65 20 6d 61 78 69 6d 75 6d 20  han the maximum 
4f00: 64 65 70 74 68 20 6f 66 20 61 6e 79 20 6f 66 20  depth of any of 
4f10: 69 74 73 20 63 68 69 6c 64 72 65 6e 2e 20 20 49  its children.  I
4f20: 6e 20 61 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 0a  n a well-formed.
4f30: 64 61 74 61 62 61 73 65 2c 20 61 6c 6c 20 63 68  database, all ch
4f40: 69 6c 64 72 65 6e 20 6f 66 20 61 6e 79 20 6f 6e  ildren of any on
4f50: 65 20 69 6e 74 65 72 69 6f 72 20 62 2d 74 72 65  e interior b-tre
4f60: 65 20 68 61 76 65 20 74 68 65 20 73 61 6d 65 20  e have the same 
4f70: 64 65 70 74 68 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49  depth.</p>..<p>I
4f80: 6e 20 61 6e 20 69 6e 74 65 72 69 6f 72 20 62 2d  n an interior b-
4f90: 74 72 65 65 20 70 61 67 65 2c 20 74 68 65 20 70  tree page, the p
4fa0: 6f 69 6e 74 65 72 73 20 61 6e 64 20 6b 65 79 73  ointers and keys
4fb0: 20 6c 6f 67 69 63 61 6c 6c 79 20 61 6c 74 65 72   logically alter
4fc0: 6e 61 74 65 20 0a 77 69 74 68 20 61 20 70 6f 69  nate .with a poi
4fd0: 6e 74 65 72 20 6f 6e 20 62 6f 74 68 20 65 6e 64  nter on both end
4fe0: 73 2e 20 28 54 68 65 20 70 72 65 76 69 6f 75 73  s. (The previous
4ff0: 20 73 65 6e 74 65 6e 63 65 20 69 73 20 74 6f 20   sentence is to 
5000: 62 65 20 75 6e 64 65 72 73 74 6f 6f 64 0a 63 6f  be understood.co
5010: 6e 63 65 70 74 75 61 6c 6c 79 20 2d 20 74 68 65  nceptually - the
5020: 20 61 63 74 75 61 6c 20 6c 61 79 6f 75 74 20 6f   actual layout o
5030: 66 20 74 68 65 20 6b 65 79 73 20 61 6e 64 0a 70  f the keys and.p
5040: 6f 69 6e 74 65 72 73 20 77 69 74 68 69 6e 20 74  ointers within t
5050: 68 65 20 70 61 67 65 20 69 73 20 6d 6f 72 65 20  he page is more 
5060: 63 6f 6d 70 6c 69 63 61 74 65 64 20 61 6e 64 20  complicated and 
5070: 77 69 6c 6c 20 62 65 20 64 65 73 63 72 69 62 65  will be describe
5080: 64 20 69 6e 0a 74 68 65 20 73 65 71 75 65 6c 2e  d in.the sequel.
5090: 29 20 20 41 6c 6c 20 6b 65 79 73 20 77 69 74 68  )  All keys with
50a0: 69 6e 20 74 68 65 20 73 61 6d 65 20 70 61 67 65  in the same page
50b0: 20 61 72 65 20 75 6e 69 71 75 65 20 61 6e 64 20   are unique and 
50c0: 61 72 65 20 6f 72 67 61 6e 69 7a 65 64 0a 69 6e  are organized.in
50d0: 20 61 73 63 65 6e 64 69 6e 67 20 6f 72 64 65 72   ascending order
50e0: 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69   from left to ri
50f0: 67 68 74 2e 20 20 46 6f 72 20 61 6e 79 20 6b 65  ght.  For any ke
5100: 79 20 58 2c 20 70 6f 69 6e 74 65 72 73 20 74 6f  y X, pointers to
5110: 20 74 68 65 20 6c 65 66 74 0a 6f 66 20 61 20 58   the left.of a X
5120: 20 72 65 66 65 72 20 74 6f 20 62 2d 74 72 65 65   refer to b-tree
5130: 20 70 61 67 65 73 20 6f 6e 20 77 68 69 63 68 20   pages on which 
5140: 61 6c 6c 73 20 6b 65 79 73 20 61 72 65 20 6c 65  alls keys are le
5150: 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  ss than or equal
5160: 20 74 6f 20 58 2e 0a 50 6f 69 6e 74 65 72 73 20   to X..Pointers 
5170: 74 6f 20 74 68 65 20 72 69 67 68 74 20 6f 66 20  to the right of 
5180: 58 20 72 65 66 65 72 20 74 6f 20 70 61 67 65 73  X refer to pages
5190: 20 77 68 65 72 65 20 61 6c 6c 20 6b 65 79 73 20   where all keys 
51a0: 61 72 65 20 67 72 65 61 74 65 72 20 74 68 61 6e  are greater than
51b0: 20 58 2e 3c 2f 70 3e 0a 0a 3c 70 3e 57 69 74 68   X.</p>..<p>With
51c0: 69 6e 20 61 6e 20 69 6e 74 65 72 69 6f 72 20 62  in an interior b
51d0: 2d 74 72 65 65 20 70 61 67 65 2c 20 65 61 63 68  -tree page, each
51e0: 20 6b 65 79 20 61 6e 64 20 74 68 65 20 70 6f 69   key and the poi
51f0: 6e 74 65 72 20 74 6f 20 69 74 73 0a 69 6d 6d 65  nter to its.imme
5200: 64 69 61 74 65 20 6c 65 66 74 20 61 72 65 20 63  diate left are c
5210: 6f 6d 62 69 6e 65 64 20 69 6e 74 6f 20 61 20 73  ombined into a s
5220: 74 72 75 63 74 75 72 65 20 63 61 6c 6c 65 64 20  tructure called 
5230: 61 20 22 63 65 6c 6c 22 2e 20 20 54 68 65 0a 72  a "cell".  The.r
5240: 69 67 68 74 2d 6d 6f 73 74 20 70 6f 69 6e 74 65  ight-most pointe
5250: 72 20 69 73 20 68 65 6c 64 20 73 65 70 61 72 61  r is held separa
5260: 74 65 6c 79 2e 20 20 41 20 6c 65 61 66 20 62 2d  tely.  A leaf b-
5270: 74 72 65 65 20 70 61 67 65 20 68 61 73 20 6e 6f  tree page has no
5280: 0a 70 6f 69 6e 74 65 72 73 2c 20 62 75 74 20 69  .pointers, but i
5290: 74 20 73 74 69 6c 6c 20 75 73 65 73 20 74 68 65  t still uses the
52a0: 20 63 65 6c 6c 20 73 74 72 75 63 74 75 72 65 20   cell structure 
52b0: 74 6f 20 68 6f 6c 64 20 6b 65 79 73 20 66 6f 72  to hold keys for
52c0: 0a 69 6e 64 65 78 20 62 2d 74 72 65 65 73 20 6f  .index b-trees o
52d0: 72 20 6b 65 79 73 20 61 6e 64 20 63 6f 6e 74 65  r keys and conte
52e0: 6e 74 20 66 6f 72 20 74 61 62 6c 65 20 62 2d 74  nt for table b-t
52f0: 72 65 65 73 2e 3c 2f 70 3e 0a 3c 2f 70 3e 0a 0a  rees.</p>.</p>..
5300: 3c 70 3e 45 76 65 72 79 20 62 2d 74 72 65 65 20  <p>Every b-tree 
5310: 70 61 67 65 20 68 61 73 20 61 74 20 6d 6f 73 74  page has at most
5320: 20 6f 6e 65 20 70 61 72 65 6e 74 20 62 2d 74 72   one parent b-tr
5330: 65 65 20 70 61 67 65 2e 0a 41 20 62 2d 74 72 65  ee page..A b-tre
5340: 65 20 70 61 67 65 20 77 69 74 68 6f 75 74 20 61  e page without a
5350: 20 70 61 72 65 6e 74 20 69 73 20 63 61 6c 6c 65   parent is calle
5360: 64 20 61 20 72 6f 6f 74 20 70 61 67 65 2e 20 20  d a root page.  
5370: 41 20 72 6f 6f 74 20 62 2d 74 72 65 65 20 70 61  A root b-tree pa
5380: 67 65 0a 74 6f 67 65 74 68 65 72 20 77 69 74 68  ge.together with
5390: 20 74 68 65 20 63 6c 6f 73 75 72 65 20 6f 66 20   the closure of 
53a0: 69 74 73 20 63 68 69 6c 64 72 65 6e 20 66 6f 72  its children for
53b0: 6d 20 61 20 63 6f 6d 70 6c 65 74 65 20 62 2d 74  m a complete b-t
53c0: 72 65 65 2e 0a 49 74 20 69 73 20 70 6f 73 73 69  ree..It is possi
53d0: 62 6c 65 20 28 61 6e 64 20 69 6e 20 66 61 63 74  ble (and in fact
53e0: 20 72 61 74 68 65 72 20 63 6f 6d 6d 6f 6e 29 20   rather common) 
53f0: 74 6f 20 68 61 76 65 20 61 20 63 6f 6d 70 6c 65  to have a comple
5400: 74 65 20 62 2d 74 72 65 65 0a 74 68 61 74 20 63  te b-tree.that c
5410: 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 73 69 6e  onsists of a sin
5420: 67 6c 65 20 70 61 67 65 20 74 68 61 74 20 69 73  gle page that is
5430: 20 62 6f 74 68 20 61 20 6c 65 61 66 20 61 6e 64   both a leaf and
5440: 20 74 68 65 20 72 6f 6f 74 2e 0a 42 65 63 61 75   the root..Becau
5450: 73 65 20 74 68 65 72 65 20 61 72 65 20 70 6f 69  se there are poi
5460: 6e 74 65 72 73 20 66 72 6f 6d 20 70 61 72 65 6e  nters from paren
5470: 74 73 20 74 6f 20 63 68 69 6c 64 72 65 6e 2c 20  ts to children, 
5480: 65 76 65 72 79 20 70 61 67 65 20 6f 66 20 61 0a  every page of a.
5490: 63 6f 6d 70 6c 65 74 65 20 62 2d 74 72 65 65 20  complete b-tree 
54a0: 63 61 6e 20 62 65 20 6c 6f 63 61 74 65 64 20 69  can be located i
54b0: 66 20 6f 6e 6c 79 20 74 68 65 20 72 6f 6f 74 20  f only the root 
54c0: 70 61 67 65 20 69 73 20 6b 6e 6f 77 6e 2e 20 20  page is known.  
54d0: 48 65 6e 63 65 2c 0a 62 2d 74 72 65 65 73 20 61  Hence,.b-trees a
54e0: 72 65 20 69 64 65 6e 74 69 66 69 65 64 20 62 79  re identified by
54f0: 20 74 68 65 69 72 20 72 6f 6f 74 20 70 61 67 65   their root page
5500: 20 6e 75 6d 62 65 72 2e 3c 2f 70 3e 0a 0a 3c 70   number.</p>..<p
5510: 3e 41 20 62 2d 74 72 65 65 20 70 61 67 65 20 69  >A b-tree page i
5520: 73 20 65 69 74 68 65 72 20 61 20 74 61 62 6c 65  s either a table
5530: 20 62 2d 74 72 65 65 20 70 61 67 65 20 6f 72 20   b-tree page or 
5540: 61 6e 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20  an index b-tree 
5550: 70 61 67 65 2e 0a 41 6c 6c 20 70 61 67 65 73 20  page..All pages 
5560: 77 69 74 68 69 6e 20 65 61 63 68 20 63 6f 6d 70  within each comp
5570: 6c 65 74 65 20 62 2d 74 72 65 65 20 61 72 65 20  lete b-tree are 
5580: 6f 66 20 74 68 65 20 73 61 6d 65 20 74 79 70 65  of the same type
5590: 3a 20 65 69 74 68 65 72 20 74 61 62 6c 65 0a 6f  : either table.o
55a0: 72 20 69 6e 64 65 78 2e 20 20 54 68 65 72 65 20  r index.  There 
55b0: 69 73 20 61 20 6f 6e 65 2d 74 6f 2d 6f 6e 65 20  is a one-to-one 
55c0: 6d 61 70 70 69 6e 67 20 66 72 6f 6d 20 74 61 62  mapping from tab
55d0: 6c 65 20 62 2d 74 72 65 65 73 20 69 6e 20 74 68  le b-trees in th
55e0: 65 20 64 61 74 61 62 61 73 65 20 0a 66 69 6c 65  e database .file
55f0: 20 74 6f 20 28 6e 6f 6e 2d 76 69 72 74 75 61 6c   to (non-virtual
5600: 29 20 74 61 62 6c 65 73 20 69 6e 20 74 68 65 20  ) tables in the 
5610: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2c  database schema,
5620: 20 69 6e 63 6c 75 64 69 6e 67 20 73 79 73 74 65   including syste
5630: 6d 20 74 61 62 6c 65 73 0a 73 75 63 68 20 61 73  m tables.such as
5640: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 2e 20   sqlite_master. 
5650: 20 54 68 65 72 65 20 69 73 20 6f 6e 65 2d 74 6f   There is one-to
5660: 2d 6f 6e 65 20 6d 61 70 70 69 6e 67 20 62 65 74  -one mapping bet
5670: 77 65 65 6e 20 69 6e 64 65 78 20 62 2d 74 72 65  ween index b-tre
5680: 65 73 0a 69 6e 20 74 68 65 20 64 61 74 61 62 61  es.in the databa
5690: 73 65 20 66 69 6c 65 20 61 6e 64 20 69 6e 64 69  se file and indi
56a0: 63 65 73 20 69 6e 20 74 68 65 20 73 63 68 65 6d  ces in the schem
56b0: 61 2c 20 69 6e 63 6c 75 64 69 6e 67 20 69 6d 70  a, including imp
56c0: 6c 69 65 64 20 69 6e 64 69 63 65 73 0a 63 72 65  lied indices.cre
56d0: 61 74 65 64 20 62 79 20 75 6e 69 71 75 65 6e 65  ated by uniquene
56e0: 73 73 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e 20  ss constraints. 
56f0: 20 54 68 65 20 62 2d 74 72 65 65 20 63 6f 72 72   The b-tree corr
5700: 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 74 68 65  esponding to the
5710: 0a 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74  .sqlite_master t
5720: 61 62 6c 65 20 61 6c 77 61 79 73 20 68 61 73 20  able always has 
5730: 69 74 73 20 72 6f 6f 74 20 70 61 67 65 20 6f 6e  its root page on
5740: 20 61 20 70 61 67 65 20 6e 75 6d 62 65 72 20 6f   a page number o
5750: 66 20 31 2e 0a 54 68 65 20 73 71 6c 69 74 65 5f  f 1..The sqlite_
5760: 6d 61 73 74 65 72 20 74 61 62 6c 65 20 63 6f 6e  master table con
5770: 74 61 69 6e 73 20 74 68 65 20 72 6f 6f 74 20 70  tains the root p
5780: 61 67 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 65  age number for e
5790: 76 65 72 79 20 6f 74 68 65 72 20 0a 74 61 62 6c  very other .tabl
57a0: 65 20 61 6e 64 20 69 6e 64 65 78 20 69 6e 20 74  e and index in t
57b0: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
57c0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 45 61 63 68 20 65  .</p>..<p>Each e
57d0: 6e 74 72 79 20 69 6e 20 61 20 74 61 62 6c 65 20  ntry in a table 
57e0: 62 2d 74 72 65 65 20 63 6f 6e 73 69 73 74 73 20  b-tree consists 
57f0: 6f 66 20 61 20 36 34 2d 62 69 74 20 73 69 67 6e  of a 64-bit sign
5800: 65 64 20 69 6e 74 65 67 65 72 20 6b 65 79 0a 61  ed integer key.a
5810: 6e 64 20 75 70 20 74 6f 20 32 31 34 37 34 38 33  nd up to 2147483
5820: 36 34 37 20 62 79 74 65 73 20 6f 66 20 61 72 62  647 bytes of arb
5830: 69 74 72 61 72 79 20 64 61 74 61 2e 20 20 49 6e  itrary data.  In
5840: 74 65 72 69 6f 72 20 74 61 62 6c 65 20 62 2d 74  terior table b-t
5850: 72 65 65 73 0a 68 6f 6c 64 20 6f 6e 6c 79 20 6b  rees.hold only k
5860: 65 79 73 20 61 6e 64 20 70 6f 69 6e 74 65 72 73  eys and pointers
5870: 20 74 6f 20 63 68 69 6c 64 72 65 6e 2e 20 20 41   to children.  A
5880: 6c 6c 20 64 61 74 61 20 69 73 20 63 6f 6e 74 61  ll data is conta
5890: 69 6e 65 64 20 69 6e 20 74 68 65 0a 74 61 62 6c  ined in the.tabl
58a0: 65 20 62 2d 74 72 65 65 20 6c 65 61 76 65 73 2e  e b-tree leaves.
58b0: 3c 2f 70 3e 0a 0a 3c 70 3e 45 61 63 68 20 65 6e  </p>..<p>Each en
58c0: 74 72 79 20 69 6e 20 61 6e 20 69 6e 64 65 78 20  try in an index 
58d0: 62 2d 74 72 65 65 20 63 6f 6e 73 69 73 74 73 20  b-tree consists 
58e0: 6f 66 20 61 6e 20 61 72 62 69 74 72 61 72 79 20  of an arbitrary 
58f0: 6b 65 79 20 6f 66 20 75 70 0a 74 6f 20 32 31 34  key of up.to 214
5900: 37 34 38 33 36 34 37 20 62 79 74 65 73 20 69 6e  7483647 bytes in
5910: 20 6c 65 6e 67 74 68 20 61 6e 64 20 6e 6f 20 64   length and no d
5920: 61 74 61 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68  ata.</p>..<tcl>h
5930: 64 5f 66 72 61 67 6d 65 6e 74 20 63 65 6c 6c 5f  d_fragment cell_
5940: 70 61 79 6c 6f 61 64 20 7b 63 65 6c 6c 20 70 61  payload {cell pa
5950: 79 6c 6f 61 64 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e  yload}</tcl>.<p>
5960: 44 65 66 69 6e 65 20 74 68 65 20 22 70 61 79 6c  Define the "payl
5970: 6f 61 64 22 20 6f 66 20 61 20 63 65 6c 6c 20 74  oad" of a cell t
5980: 6f 20 62 65 20 74 68 65 20 61 72 62 69 74 72 61  o be the arbitra
5990: 72 79 20 6c 65 6e 67 74 68 20 73 65 63 74 69 6f  ry length sectio
59a0: 6e 0a 6f 66 20 74 68 65 20 63 65 6c 6c 2e 20 20  n.of the cell.  
59b0: 46 6f 72 20 61 6e 20 69 6e 64 65 78 20 62 2d 74  For an index b-t
59c0: 72 65 65 2c 20 74 68 65 20 6b 65 79 20 69 73 20  ree, the key is 
59d0: 61 6c 77 61 79 73 20 61 72 62 69 74 72 61 72 79  always arbitrary
59e0: 20 69 6e 20 6c 65 6e 67 74 68 0a 61 6e 64 20 68   in length.and h
59f0: 65 6e 63 65 20 74 68 65 20 70 61 79 6c 6f 61 64  ence the payload
5a00: 20 69 73 20 74 68 65 20 6b 65 79 2e 20 20 54 68   is the key.  Th
5a10: 65 72 65 20 61 72 65 20 6e 6f 20 61 72 62 69 74  ere are no arbit
5a20: 72 61 72 79 20 6c 65 6e 67 74 68 20 65 6c 65 6d  rary length elem
5a30: 65 6e 74 73 0a 69 6e 20 74 68 65 20 63 65 6c 6c  ents.in the cell
5a40: 73 20 6f 66 20 69 6e 74 65 72 69 6f 72 20 74 61  s of interior ta
5a50: 62 6c 65 20 62 2d 74 72 65 65 20 70 61 67 65 73  ble b-tree pages
5a60: 20 61 6e 64 20 73 6f 20 74 68 6f 73 65 20 63 65   and so those ce
5a70: 6c 6c 73 20 68 61 76 65 20 6e 6f 0a 70 61 79 6c  lls have no.payl
5a80: 6f 61 64 2e 20 20 54 61 62 6c 65 20 62 2d 74 72  oad.  Table b-tr
5a90: 65 65 20 6c 65 61 66 20 70 61 67 65 73 20 63 6f  ee leaf pages co
5aa0: 6e 74 61 69 6e 20 61 72 62 69 74 72 61 72 79 20  ntain arbitrary 
5ab0: 6c 65 6e 67 74 68 20 63 6f 6e 74 65 6e 74 20 61  length content a
5ac0: 6e 64 0a 73 6f 20 66 6f 72 20 63 65 6c 6c 73 20  nd.so for cells 
5ad0: 6f 6e 20 74 68 6f 73 65 20 70 61 67 65 73 20 74  on those pages t
5ae0: 68 65 20 70 61 79 6c 6f 61 64 20 69 73 20 74 68  he payload is th
5af0: 65 20 63 6f 6e 74 65 6e 74 2e 0a 3c 70 3e 57 68  e content..<p>Wh
5b00: 65 6e 20 74 68 65 20 73 69 7a 65 20 6f 66 20 70  en the size of p
5b10: 61 79 6c 6f 61 64 20 66 6f 72 20 61 20 63 65 6c  ayload for a cel
5b20: 6c 20 65 78 63 65 65 64 73 20 61 20 63 65 72 74  l exceeds a cert
5b30: 61 69 6e 20 74 68 72 65 73 68 6f 6c 64 20 28 74  ain threshold (t
5b40: 6f 0a 62 65 20 64 65 66 69 6e 65 64 20 6c 61 74  o.be defined lat
5b50: 65 72 29 20 74 68 65 6e 20 6f 6e 6c 79 20 74 68  er) then only th
5b60: 65 20 66 69 72 73 74 20 66 65 77 20 62 79 74 65  e first few byte
5b70: 73 20 6f 66 20 74 68 65 20 70 61 79 6c 6f 61 64  s of the payload
5b80: 0a 61 72 65 20 73 74 6f 72 65 64 20 6f 6e 20 74  .are stored on t
5b90: 68 65 20 62 2d 74 72 65 65 20 70 61 67 65 20 61  he b-tree page a
5ba0: 6e 64 20 74 68 65 20 62 61 6c 61 6e 63 65 20 69  nd the balance i
5bb0: 73 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6c 69  s stored in a li
5bc0: 6e 6b 65 64 20 6c 69 73 74 0a 6f 66 20 63 6f 6e  nked list.of con
5bd0: 74 65 6e 74 20 6f 76 65 72 66 6c 6f 77 20 70 61  tent overflow pa
5be0: 67 65 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 20 62  ges.</p>..<p>A b
5bf0: 2d 74 72 65 65 20 70 61 67 65 20 69 73 20 64 69  -tree page is di
5c00: 76 69 64 65 64 20 69 6e 74 6f 20 72 65 67 69 6f  vided into regio
5c10: 6e 73 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77  ns in the follow
5c20: 69 6e 67 20 6f 72 64 65 72 3a 0a 0a 3c 6f 6c 3e  ing order:..<ol>
5c30: 0a 3c 6c 69 3e 54 68 65 20 31 30 30 2d 62 79 74  .<li>The 100-byt
5c40: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
5c50: 68 65 61 64 65 72 20 28 66 6f 75 6e 64 20 6f 6e  header (found on
5c60: 20 70 61 67 65 20 31 20 6f 6e 6c 79 29 0a 3c 6c   page 1 only).<l
5c70: 69 3e 54 68 65 20 38 20 6f 72 20 31 32 20 62 79  i>The 8 or 12 by
5c80: 74 65 20 62 2d 74 72 65 65 20 70 61 67 65 20 68  te b-tree page h
5c90: 65 61 64 65 72 0a 3c 6c 69 3e 54 68 65 20 63 65  eader.<li>The ce
5ca0: 6c 6c 20 70 6f 69 6e 74 65 72 20 61 72 72 61 79  ll pointer array
5cb0: 0a 3c 6c 69 3e 55 6e 61 6c 6c 6f 63 61 74 65 64  .<li>Unallocated
5cc0: 20 73 70 61 63 65 0a 3c 6c 69 3e 54 68 65 20 63   space.<li>The c
5cd0: 65 6c 6c 20 63 6f 6e 74 65 6e 74 20 61 72 65 61  ell content area
5ce0: 0a 3c 6c 69 3e 54 68 65 20 72 65 73 65 72 76 65  .<li>The reserve
5cf0: 64 20 72 65 67 69 6f 6e 2e 0a 3c 2f 6f 6c 3e 0a  d region..</ol>.
5d00: 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 31 30 30  </p>..<p>The 100
5d10: 2d 62 79 74 65 20 64 61 74 61 62 61 73 65 20 66  -byte database f
5d20: 69 6c 65 20 68 65 61 64 65 72 20 69 73 20 66 6f  ile header is fo
5d30: 75 6e 64 20 6f 6e 6c 79 20 6f 6e 20 70 61 67 65  und only on page
5d40: 20 31 2c 20 77 68 69 63 68 20 69 73 0a 61 6c 77   1, which is.alw
5d50: 61 79 73 20 61 20 74 61 62 6c 65 20 62 2d 74 72  ays a table b-tr
5d60: 65 65 20 70 61 67 65 2e 20 20 41 6c 6c 20 6f 74  ee page.  All ot
5d70: 68 65 72 20 62 2d 74 72 65 65 20 70 61 67 65 73  her b-tree pages
5d80: 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
5d90: 20 66 69 6c 65 0a 6f 6d 69 74 20 74 68 69 73 20   file.omit this 
5da0: 31 30 30 2d 62 79 74 65 20 68 65 61 64 65 72 2e  100-byte header.
5db0: 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 72 65 73  </p>..<p>The res
5dc0: 65 72 76 65 64 20 72 65 67 69 6f 6e 20 69 73 20  erved region is 
5dd0: 61 6e 20 61 72 65 61 20 6f 66 20 75 6e 75 73 65  an area of unuse
5de0: 64 20 73 70 61 63 65 20 61 74 20 74 68 65 20 65  d space at the e
5df0: 6e 64 20 6f 66 20 65 76 65 72 79 0a 70 61 67 65  nd of every.page
5e00: 20 28 65 78 63 65 70 74 20 74 68 65 20 6c 6f 63   (except the loc
5e10: 6b 69 6e 67 20 70 61 67 65 29 20 74 68 61 74 20  king page) that 
5e20: 65 78 74 65 6e 73 69 6f 6e 73 20 63 61 6e 20 75  extensions can u
5e30: 73 65 20 74 6f 20 68 6f 6c 64 20 70 65 72 2d 70  se to hold per-p
5e40: 61 67 65 0a 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  age.information.
5e50: 20 20 54 68 65 20 73 69 7a 65 20 6f 66 20 74 68    The size of th
5e60: 65 20 72 65 73 65 72 76 65 64 20 72 65 67 69 6f  e reserved regio
5e70: 6e 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20  n is determined 
5e80: 62 79 20 74 68 65 20 6f 6e 65 2d 62 79 74 65 0a  by the one-byte.
5e90: 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  unsigned integer
5ea0: 20 66 6f 75 6e 64 20 61 74 20 61 6e 20 6f 66 66   found at an off
5eb0: 73 65 74 20 6f 66 20 32 30 20 69 6e 74 6f 20 74  set of 20 into t
5ec0: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
5ed0: 20 68 65 61 64 65 72 2e 0a 54 68 65 20 73 69 7a   header..The siz
5ee0: 65 20 6f 66 20 74 68 65 20 72 65 73 65 72 76 65  e of the reserve
5ef0: 64 20 72 65 67 69 6f 6e 20 69 73 20 75 73 75 61  d region is usua
5f00: 6c 6c 79 20 7a 65 72 6f 2e 3c 2f 70 3e 0a 0a 3c  lly zero.</p>..<
5f10: 70 3e 54 68 65 20 62 2d 74 72 65 65 20 70 61 67  p>The b-tree pag
5f20: 65 20 68 65 61 64 65 72 20 69 73 20 38 20 62 79  e header is 8 by
5f30: 74 65 73 20 69 6e 20 73 69 7a 65 20 66 6f 72 20  tes in size for 
5f40: 6c 65 61 66 20 70 61 67 65 73 20 61 6e 64 20 31  leaf pages and 1
5f50: 32 0a 62 79 74 65 73 20 66 6f 72 20 69 6e 74 65  2.bytes for inte
5f60: 72 69 6f 72 20 70 61 67 65 73 2e 20 20 41 6c 6c  rior pages.  All
5f70: 20 6d 75 6c 74 69 62 79 74 65 20 76 61 6c 75 65   multibyte value
5f80: 73 20 69 6e 20 74 68 65 20 70 61 67 65 20 68 65  s in the page he
5f90: 61 64 65 72 0a 61 72 65 20 62 69 67 2d 65 6e 64  ader.are big-end
5fa0: 69 61 6e 2e 0a 54 68 65 20 62 2d 74 72 65 65 20  ian..The b-tree 
5fb0: 70 61 67 65 20 68 65 61 64 65 72 20 69 73 20 63  page header is c
5fc0: 6f 6d 70 6f 73 65 64 20 6f 66 20 74 68 65 20 66  omposed of the f
5fd0: 6f 6c 6c 6f 77 69 6e 67 20 66 69 65 6c 64 73 3a  ollowing fields:
5fe0: 3c 2f 70 3e 0a 0a 3c 63 65 6e 74 65 72 3e 0a 3c  </p>..<center>.<
5ff0: 69 3e 42 2d 74 72 65 65 20 50 61 67 65 20 48 65  i>B-tree Page He
6000: 61 64 65 72 20 46 6f 72 6d 61 74 3c 2f 69 3e 3c  ader Format</i><
6010: 62 72 3e 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65  br>.<table borde
6020: 72 3d 31 20 77 69 64 74 68 3d 22 38 30 25 22 3e  r=1 width="80%">
6030: 0a 3c 74 72 3e 3c 74 68 3e 4f 66 66 73 65 74 3c  .<tr><th>Offset<
6040: 74 68 3e 53 69 7a 65 3c 74 68 3e 44 65 73 63 72  th>Size<th>Descr
6050: 69 70 74 69 6f 6e 0a 3c 74 72 3e 3c 74 64 20 61  iption.<tr><td a
6060: 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69  lign=center vali
6070: 67 6e 3d 74 6f 70 3e 30 3c 74 64 20 61 6c 69 67  gn=top>0<td alig
6080: 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d  n=center valign=
6090: 74 6f 70 3e 31 3c 74 64 20 61 6c 69 67 6e 3d 6c  top>1<td align=l
60a0: 65 66 74 3e 0a 41 20 66 6c 61 67 20 69 6e 64 69  eft>.A flag indi
60b0: 63 61 74 69 6e 67 20 74 68 65 20 62 2d 74 72 65  cating the b-tre
60c0: 65 20 70 61 67 65 20 74 79 70 65 0a 41 20 76 61  e page type.A va
60d0: 6c 75 65 20 6f 66 20 32 20 6d 65 61 6e 73 20 74  lue of 2 means t
60e0: 68 65 20 70 61 67 65 20 69 73 20 61 6e 20 69 6e  he page is an in
60f0: 74 65 72 69 6f 72 20 69 6e 64 65 78 20 62 2d 74  terior index b-t
6100: 72 65 65 20 70 61 67 65 2e 0a 41 20 76 61 6c 75  ree page..A valu
6110: 65 20 6f 66 20 35 20 6d 65 61 6e 73 20 74 68 65  e of 5 means the
6120: 20 70 61 67 65 20 69 73 20 61 6e 20 69 6e 74 65   page is an inte
6130: 72 69 6f 72 20 74 61 62 6c 65 20 62 2d 74 72 65  rior table b-tre
6140: 65 20 70 61 67 65 2e 0a 41 20 76 61 6c 75 65 20  e page..A value 
6150: 6f 66 20 31 30 20 6d 65 61 6e 73 20 74 68 65 20  of 10 means the 
6160: 70 61 67 65 20 69 73 20 61 20 6c 65 61 66 20 69  page is a leaf i
6170: 6e 64 65 78 20 62 2d 74 72 65 65 20 70 61 67 65  ndex b-tree page
6180: 2e 0a 41 20 76 61 6c 75 65 20 6f 66 20 31 33 20  ..A value of 13 
6190: 6d 65 61 6e 73 20 74 68 65 20 70 61 67 65 20 69  means the page i
61a0: 73 20 61 20 6c 65 61 66 20 74 61 62 6c 65 20 62  s a leaf table b
61b0: 2d 74 72 65 65 20 70 61 67 65 2e 0a 41 6e 79 20  -tree page..Any 
61c0: 6f 74 68 65 72 20 76 61 6c 75 65 20 69 73 20 61  other value is a
61d0: 6e 20 65 72 72 6f 72 2e 0a 3c 74 72 3e 3c 74 64  n error..<tr><td
61e0: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61   align=center va
61f0: 6c 69 67 6e 3d 74 6f 70 3e 31 3c 74 64 20 61 6c  lign=top>1<td al
6200: 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67  ign=center valig
6210: 6e 3d 74 6f 70 3e 32 3c 74 64 20 61 6c 69 67 6e  n=top>2<td align
6220: 3d 6c 65 66 74 3e 0a 42 79 74 65 20 6f 66 66 73  =left>.Byte offs
6230: 65 74 20 69 6e 74 6f 20 74 68 65 20 70 61 67 65  et into the page
6240: 20 6f 66 20 74 68 65 20 66 69 72 73 74 20 66 72   of the first fr
6250: 65 65 62 6c 6f 63 6b 0a 3c 74 72 3e 3c 74 64 20  eeblock.<tr><td 
6260: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c  align=center val
6270: 69 67 6e 3d 74 6f 70 3e 33 3c 74 64 20 61 6c 69  ign=top>3<td ali
6280: 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e  gn=center valign
6290: 3d 74 6f 70 3e 32 3c 74 64 20 61 6c 69 67 6e 3d  =top>2<td align=
62a0: 6c 65 66 74 3e 0a 4e 75 6d 62 65 72 20 6f 66 20  left>.Number of 
62b0: 63 65 6c 6c 73 20 6f 6e 20 74 68 69 73 20 70 61  cells on this pa
62c0: 67 65 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e  ge.<tr><td align
62d0: 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74  =center valign=t
62e0: 6f 70 3e 35 3c 74 64 20 61 6c 69 67 6e 3d 63 65  op>5<td align=ce
62f0: 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e  nter valign=top>
6300: 32 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e  2<td align=left>
6310: 0a 4f 66 66 73 65 74 20 74 6f 20 74 68 65 20 66  .Offset to the f
6320: 69 72 73 74 20 62 79 74 65 20 6f 66 20 74 68 65  irst byte of the
6330: 20 63 65 6c 6c 20 63 6f 6e 74 65 6e 74 20 61 72   cell content ar
6340: 65 61 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e  ea.<tr><td align
6350: 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74  =center valign=t
6360: 6f 70 3e 37 3c 74 64 20 61 6c 69 67 6e 3d 63 65  op>7<td align=ce
6370: 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e  nter valign=top>
6380: 31 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e  1<td align=left>
6390: 0a 4e 75 6d 62 65 72 20 6f 66 20 66 72 61 67 6d  .Number of fragm
63a0: 65 6e 74 65 64 20 66 72 65 65 20 62 79 74 65 73  ented free bytes
63b0: 20 77 69 74 68 69 6e 20 74 68 65 20 63 65 6c 6c   within the cell
63c0: 20 63 6f 6e 74 65 6e 74 20 61 72 65 61 0a 3c 74   content area.<t
63d0: 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74  r><td align=cent
63e0: 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 38 3c  er valign=top>8<
63f0: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
6400: 76 61 6c 69 67 6e 3d 74 6f 70 3e 34 3c 74 64 20  valign=top>4<td 
6410: 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 54 68 65 20  align=left>.The 
6420: 72 69 67 68 74 2d 6d 6f 73 74 20 70 6f 69 6e 74  right-most point
6430: 65 72 20 28 69 6e 74 65 72 69 6f 72 20 62 2d 74  er (interior b-t
6440: 72 65 65 20 70 61 67 65 73 20 6f 6e 6c 79 29 0a  ree pages only).
6450: 3c 2f 74 61 62 6c 65 3e 3c 2f 62 6c 6f 63 6b 71  </table></blockq
6460: 75 6f 74 65 3e 3c 2f 63 65 6e 74 65 72 3e 0a 0a  uote></center>..
6470: 3c 70 3e 54 68 65 20 63 65 6c 6c 20 70 6f 69 6e  <p>The cell poin
6480: 74 65 72 20 61 72 72 61 79 20 6f 66 20 61 20 62  ter array of a b
6490: 2d 74 72 65 65 20 70 61 67 65 20 69 6d 6d 65 64  -tree page immed
64a0: 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 73 20 74  iately follows t
64b0: 68 65 20 62 2d 74 72 65 65 0a 70 61 67 65 20 68  he b-tree.page h
64c0: 65 61 64 65 72 2e 20 20 4c 65 74 20 4b 20 62 65  eader.  Let K be
64d0: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63   the number of c
64e0: 65 6c 6c 73 20 6f 6e 20 74 68 65 20 62 74 72 65  ells on the btre
64f0: 65 2e 20 20 54 68 65 20 63 65 6c 6c 20 70 6f 69  e.  The cell poi
6500: 6e 74 65 72 0a 61 72 72 61 79 20 63 6f 6e 73 69  nter.array consi
6510: 73 74 73 20 6f 66 20 4b 20 32 2d 62 79 74 65 20  sts of K 2-byte 
6520: 69 6e 74 65 67 65 72 20 6f 66 66 73 65 74 73 20  integer offsets 
6530: 74 6f 20 74 68 65 20 63 65 6c 6c 20 63 6f 6e 74  to the cell cont
6540: 65 6e 74 73 2e 20 20 54 68 65 0a 63 65 6c 6c 20  ents.  The.cell 
6550: 70 6f 69 6e 74 65 72 73 20 61 72 65 20 61 72 72  pointers are arr
6560: 61 6e 67 65 64 20 69 6e 20 6b 65 79 20 6f 72 64  anged in key ord
6570: 65 72 20 77 69 74 68 20 6c 65 66 74 2d 6d 6f 73  er with left-mos
6580: 74 20 63 65 6c 6c 20 28 74 68 65 20 63 65 6c 6c  t cell (the cell
6590: 20 77 69 74 68 20 74 68 65 0a 73 6d 61 6c 6c 65   with the.smalle
65a0: 73 74 20 6b 65 79 29 20 66 69 72 73 74 20 61 6e  st key) first an
65b0: 64 20 74 68 65 20 72 69 67 68 74 2d 6d 6f 73 74  d the right-most
65c0: 20 63 65 6c 6c 20 28 74 68 65 20 63 65 6c 6c 20   cell (the cell 
65d0: 77 69 74 68 20 74 68 65 20 6c 61 72 67 65 73 74  with the largest
65e0: 0a 6b 65 79 29 20 6c 61 73 74 2e 3c 2f 70 3e 0a  .key) last.</p>.
65f0: 0a 3c 70 3e 43 65 6c 6c 20 63 6f 6e 74 65 6e 74  .<p>Cell content
6600: 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68   is stored in th
6610: 65 20 63 65 6c 6c 20 63 6f 6e 74 65 6e 74 20 72  e cell content r
6620: 65 67 69 6f 6e 20 6f 66 20 74 68 65 20 62 2d 74  egion of the b-t
6630: 72 65 65 20 70 61 67 65 2e 0a 53 51 4c 69 74 65  ree page..SQLite
6640: 20 73 74 72 69 76 65 73 20 74 6f 20 70 6c 61 63   strives to plac
6650: 65 20 63 65 6c 6c 73 20 61 73 20 66 61 72 20 74  e cells as far t
6660: 6f 77 61 72 64 20 74 68 65 20 65 6e 64 20 6f 66  oward the end of
6670: 20 74 68 65 20 62 2d 74 72 65 65 20 70 61 67 65   the b-tree page
6680: 20 61 73 0a 69 74 20 63 61 6e 2c 20 69 6e 20 6f   as.it can, in o
6690: 72 64 65 72 20 74 6f 20 6c 65 61 76 65 20 73 70  rder to leave sp
66a0: 61 63 65 20 66 6f 72 20 66 75 74 75 72 65 20 67  ace for future g
66b0: 72 6f 77 74 68 20 6f 66 20 74 68 65 20 63 65 6c  rowth of the cel
66c0: 6c 20 70 6f 69 6e 74 65 72 20 61 72 72 61 79 2e  l pointer array.
66d0: 0a 54 68 65 20 61 72 65 61 20 69 6e 20 62 65 74  .The area in bet
66e0: 77 65 65 6e 20 74 68 65 20 6c 61 73 74 20 63 65  ween the last ce
66f0: 6c 6c 20 70 6f 69 6e 74 65 72 20 61 72 72 61 79  ll pointer array
6700: 20 65 6e 74 72 79 20 61 6e 64 20 74 68 65 20 62   entry and the b
6710: 65 67 69 6e 6e 69 6e 67 20 6f 66 0a 74 68 65 20  eginning of.the 
6720: 66 69 72 73 74 20 63 65 6c 6c 20 69 73 20 74 68  first cell is th
6730: 65 20 75 6e 61 6c 6c 6f 63 61 74 65 64 20 72 65  e unallocated re
6740: 67 69 6f 6e 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 41  gion..</p>..<p>A
6750: 20 66 72 65 65 62 6c 6f 63 6b 20 69 73 20 61 20   freeblock is a 
6760: 73 74 72 75 63 74 75 72 65 20 75 73 65 64 20 74  structure used t
6770: 6f 20 69 64 65 6e 74 69 66 79 20 75 6e 61 6c 6c  o identify unall
6780: 6f 63 61 74 65 64 20 73 70 61 63 65 20 77 69 74  ocated space wit
6790: 68 69 6e 0a 61 20 62 2d 74 72 65 65 20 70 61 67  hin.a b-tree pag
67a0: 65 2e 20 20 46 72 65 65 62 6c 6f 63 6b 73 20 61  e.  Freeblocks a
67b0: 72 65 20 6f 72 67 61 6e 69 7a 65 64 20 6f 6e 20  re organized on 
67c0: 61 20 63 68 61 69 6e 2e 20 20 54 68 65 20 66 69  a chain.  The fi
67d0: 72 73 74 20 32 20 62 79 74 65 73 20 6f 66 0a 61  rst 2 bytes of.a
67e0: 20 66 72 65 65 62 6c 6f 63 6b 20 61 72 65 20 61   freeblock are a
67f0: 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65   big-endian inte
6800: 67 65 72 20 77 68 69 63 68 20 69 73 20 74 68 65  ger which is the
6810: 20 6f 66 66 73 65 74 20 69 6e 20 74 68 65 20 62   offset in the b
6820: 2d 74 72 65 65 20 70 61 67 65 0a 6f 66 20 74 68  -tree page.of th
6830: 65 20 6e 65 78 74 20 66 72 65 65 62 6c 6f 63 6b  e next freeblock
6840: 20 69 6e 20 74 68 65 20 63 68 61 69 6e 2c 20 6f   in the chain, o
6850: 72 20 7a 65 72 6f 20 69 66 20 74 68 65 20 66 72  r zero if the fr
6860: 65 65 62 6c 6f 63 6b 20 69 73 20 74 68 65 20 6c  eeblock is the l
6870: 61 73 74 20 6f 6e 0a 74 68 65 20 63 68 61 69 6e  ast on.the chain
6880: 2e 20 20 54 68 65 20 74 68 69 72 64 20 61 6e 64  .  The third and
6890: 20 66 6f 75 72 74 68 20 62 79 74 65 73 20 6f 66   fourth bytes of
68a0: 20 65 61 63 68 20 66 72 65 65 62 6c 6f 63 6b 20   each freeblock 
68b0: 66 6f 72 6d 0a 61 20 62 69 74 2d 65 6e 64 69 61  form.a bit-endia
68c0: 6e 20 69 6e 74 65 67 65 72 73 20 77 68 69 63 68  n integers which
68d0: 20 69 73 20 74 68 65 20 73 69 7a 65 20 6f 66 20   is the size of 
68e0: 74 68 65 20 66 72 65 65 62 6c 6f 63 6b 20 69 6e  the freeblock in
68f0: 20 62 79 74 65 73 2c 20 69 6e 63 6c 75 64 69 6e   bytes, includin
6900: 67 0a 74 68 65 20 34 2d 62 79 74 65 20 68 65 61  g.the 4-byte hea
6910: 64 65 72 2e 20 20 46 72 65 65 62 6c 6f 63 6b 73  der.  Freeblocks
6920: 20 61 72 65 20 61 6c 77 61 79 73 20 63 6f 6e 6e   are always conn
6930: 65 63 74 65 64 20 69 6e 20 6f 72 64 65 72 20 0a  ected in order .
6940: 6f 66 20 69 6e 63 72 65 61 73 69 6e 67 20 6f 66  of increasing of
6950: 66 73 65 74 2e 20 20 54 68 65 20 73 65 63 6f 6e  fset.  The secon
6960: 64 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20 62  d field of the b
6970: 2d 74 72 65 65 20 70 61 67 65 20 68 65 61 64 65  -tree page heade
6980: 72 20 69 73 20 74 68 65 0a 6f 66 66 73 65 74 20  r is the.offset 
6990: 6f 66 20 74 68 65 20 66 69 72 73 74 20 66 72 65  of the first fre
69a0: 65 62 6c 6f 63 6b 2c 20 6f 72 20 7a 65 72 6f 20  eblock, or zero 
69b0: 69 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  if there are no 
69c0: 66 72 65 65 62 6c 6f 63 6b 73 20 6f 6e 20 74 68  freeblocks on th
69d0: 65 0a 70 61 67 65 2e 20 20 49 6e 20 61 20 77 65  e.page.  In a we
69e0: 6c 6c 2d 66 6f 72 6d 65 64 20 62 2d 74 72 65 65  ll-formed b-tree
69f0: 20 70 61 67 65 2c 20 74 68 65 72 65 20 77 69 6c   page, there wil
6a00: 6c 20 61 6c 77 61 79 73 20 62 65 20 61 74 20 6c  l always be at l
6a10: 65 61 73 74 20 6f 6e 65 20 63 65 6c 6c 0a 62 65  east one cell.be
6a20: 66 6f 72 65 20 74 68 65 20 66 69 72 73 74 20 66  fore the first f
6a30: 72 65 65 62 6c 6f 63 6b 2e 3c 2f 70 3e 0a 0a 3c  reeblock.</p>..<
6a40: 70 3e 41 20 66 72 65 65 62 6c 6f 63 6b 20 72 65  p>A freeblock re
6a50: 71 75 69 72 65 73 20 61 74 20 6c 65 61 73 74 20  quires at least 
6a60: 34 20 62 79 74 65 73 20 6f 66 20 73 70 61 63 65  4 bytes of space
6a70: 2e 20 20 49 66 20 74 68 65 72 65 20 69 73 20 61  .  If there is a
6a80: 6e 20 69 73 6f 6c 61 74 65 64 0a 67 72 6f 75 70  n isolated.group
6a90: 20 6f 66 20 31 2c 20 32 2c 20 6f 72 20 33 20 75   of 1, 2, or 3 u
6aa0: 6e 75 73 65 64 20 62 79 74 65 73 20 77 69 74 68  nused bytes with
6ab0: 69 6e 20 74 68 65 20 63 65 6c 6c 20 63 6f 6e 74  in the cell cont
6ac0: 65 6e 74 20 61 72 65 61 2c 20 74 68 6f 73 65 20  ent area, those 
6ad0: 62 79 74 65 73 0a 63 6f 6d 70 72 69 73 65 20 61  bytes.comprise a
6ae0: 20 66 72 61 67 6d 65 6e 74 2e 20 20 54 68 65 20   fragment.  The 
6af0: 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20  total number of 
6b00: 62 79 74 65 73 20 69 6e 20 61 6c 6c 20 66 72 61  bytes in all fra
6b10: 67 6d 65 6e 74 73 20 69 73 20 73 74 6f 72 65 64  gments is stored
6b20: 0a 69 6e 20 74 68 65 20 66 69 66 74 68 20 66 69  .in the fifth fi
6b30: 65 6c 64 20 6f 66 20 74 68 65 20 62 2d 74 72 65  eld of the b-tre
6b40: 65 20 70 61 67 65 20 68 65 61 64 65 72 2e 20 20  e page header.  
6b50: 49 6e 20 61 20 77 65 6c 6c 2d 66 6f 72 6d 65 64  In a well-formed
6b60: 20 62 2d 74 72 65 65 20 70 61 67 65 2c 0a 74 68   b-tree page,.th
6b70: 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f  e total number o
6b80: 66 20 62 79 74 65 73 20 69 6e 20 66 72 61 67 6d  f bytes in fragm
6b90: 65 6e 74 73 20 6d 61 79 20 6e 6f 74 20 65 78 63  ents may not exc
6ba0: 65 65 64 20 36 30 2e 3c 2f 70 3e 0a 0a 3c 70 3e  eed 60.</p>..<p>
6bb0: 54 68 65 20 74 6f 74 61 6c 20 61 6d 6f 75 6e 74  The total amount
6bc0: 20 6f 66 20 66 72 65 65 20 73 70 61 63 65 20 6f   of free space o
6bd0: 6e 20 61 20 62 2d 74 72 65 65 20 70 61 67 65 20  n a b-tree page 
6be0: 63 6f 6e 73 69 73 74 73 20 6f 66 20 74 68 65 20  consists of the 
6bf0: 73 69 7a 65 0a 6f 66 20 74 68 65 20 75 6e 61 6c  size.of the unal
6c00: 6c 6f 63 61 74 65 64 20 72 65 67 69 6f 6e 20 70  located region p
6c10: 6c 75 73 20 74 68 65 20 74 6f 74 61 6c 20 73 69  lus the total si
6c20: 7a 65 20 6f 66 20 61 6c 6c 20 66 72 65 65 62 6c  ze of all freebl
6c30: 6f 63 6b 73 20 70 6c 75 73 20 74 68 65 0a 6e 75  ocks plus the.nu
6c40: 6d 62 65 72 20 6f 66 20 66 72 61 67 6d 65 6e 74  mber of fragment
6c50: 65 64 20 66 72 65 65 20 62 79 74 65 73 2e 20 20  ed free bytes.  
6c60: 53 51 4c 69 74 65 20 6d 61 79 20 66 72 6f 6d 20  SQLite may from 
6c70: 74 69 6d 65 20 74 6f 20 74 69 6d 65 20 72 65 6f  time to time reo
6c80: 72 67 61 6e 69 7a 65 0a 61 20 62 2d 74 72 65 65  rganize.a b-tree
6c90: 20 70 61 67 65 20 73 6f 20 74 68 61 74 20 74 68   page so that th
6ca0: 65 72 65 20 61 72 65 20 6e 6f 20 66 72 65 65 62  ere are no freeb
6cb0: 6c 6f 63 6b 73 20 6f 72 20 66 72 61 67 6d 65 6e  locks or fragmen
6cc0: 74 20 62 79 74 65 73 2c 20 61 6c 6c 0a 75 6e 75  t bytes, all.unu
6cd0: 73 65 64 20 62 79 74 65 73 20 61 72 65 20 63 6f  sed bytes are co
6ce0: 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 65 20 75  ntained in the u
6cf0: 6e 61 6c 6c 6f 63 61 74 65 64 20 73 70 61 63 65  nallocated space
6d00: 20 72 65 67 69 6f 6e 2c 20 61 6e 64 20 61 6c 6c   region, and all
6d10: 0a 63 65 6c 6c 73 20 61 72 65 20 70 61 63 6b 65  .cells are packe
6d20: 64 20 74 69 67 68 74 6c 79 20 61 74 20 74 68 65  d tightly at the
6d30: 20 65 6e 64 20 6f 66 20 74 68 65 20 70 61 67 65   end of the page
6d40: 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65  .  This is calle
6d50: 64 20 0a 22 64 65 66 72 61 67 6d 65 6e 74 69 6e  d ."defragmentin
6d60: 67 22 20 74 68 65 20 62 2d 74 72 65 65 20 70 61  g" the b-tree pa
6d70: 67 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  ge.</p>..<tcl>hd
6d80: 5f 66 72 61 67 6d 65 6e 74 20 76 61 72 69 6e 74  _fragment varint
6d90: 20 7b 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74   {variable-lengt
6da0: 68 20 69 6e 74 65 67 65 72 7d 20 7b 76 61 72 69  h integer} {vari
6db0: 6e 74 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 41 20  nt}</tcl>..<p>A 
6dc0: 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20  variable-length 
6dd0: 69 6e 74 65 67 65 72 20 6f 72 20 22 76 61 72 69  integer or "vari
6de0: 6e 74 22 20 69 73 20 61 20 73 74 61 74 69 63 20  nt" is a static 
6df0: 48 75 66 66 6d 61 6e 20 65 6e 63 6f 64 69 6e 67  Huffman encoding
6e00: 0a 6f 66 20 36 34 2d 62 69 74 20 74 77 6f 73 2d  .of 64-bit twos-
6e10: 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 74 65 67  complement integ
6e20: 65 72 73 20 74 68 61 74 20 75 73 65 73 20 6c 65  ers that uses le
6e30: 73 73 20 73 70 61 63 65 20 66 6f 72 20 73 6d 61  ss space for sma
6e40: 6c 6c 20 70 6f 73 69 74 69 76 65 20 0a 76 61 6c  ll positive .val
6e50: 75 65 73 2e 20 0a 41 20 76 61 72 69 6e 74 20 69  ues. .A varint i
6e60: 73 20 62 65 74 77 65 65 6e 20 31 20 61 6e 64 20  s between 1 and 
6e70: 39 20 62 79 74 65 73 20 69 6e 20 6c 65 6e 67 74  9 bytes in lengt
6e80: 68 2e 20 20 54 68 65 20 76 61 72 69 6e 74 20 63  h.  The varint c
6e90: 6f 6e 73 69 73 74 73 20 6f 66 20 65 69 74 68 65  onsists of eithe
6ea0: 72 0a 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 62  r.zero or more b
6eb0: 79 74 65 20 77 68 69 63 68 20 68 61 76 65 20 74  yte which have t
6ec0: 68 65 20 68 69 67 68 2d 6f 72 64 65 72 20 62 69  he high-order bi
6ed0: 74 20 73 65 74 20 66 6f 6c 6c 6f 77 65 64 20 62  t set followed b
6ee0: 79 20 61 20 73 69 6e 67 6c 65 20 62 79 74 65 0a  y a single byte.
6ef0: 77 69 74 68 20 74 68 65 20 68 69 67 68 2d 6f 72  with the high-or
6f00: 64 65 72 20 62 69 74 20 63 6c 65 61 72 2c 20 6f  der bit clear, o
6f10: 72 20 6e 69 6e 65 20 62 79 74 65 73 2c 20 77 68  r nine bytes, wh
6f20: 69 63 68 65 76 65 72 20 69 73 20 73 68 6f 72 74  ichever is short
6f30: 65 72 2e 0a 54 68 65 20 6c 6f 77 65 72 20 73 65  er..The lower se
6f40: 76 65 6e 20 62 69 74 73 20 6f 66 20 65 61 63 68  ven bits of each
6f50: 20 6f 66 20 74 68 65 20 66 69 72 73 74 20 65 69   of the first ei
6f60: 67 68 74 20 62 79 74 65 73 20 61 6e 64 20 61 6c  ght bytes and al
6f70: 6c 20 38 20 62 69 74 73 20 6f 66 0a 74 68 65 20  l 8 bits of.the 
6f80: 6e 69 6e 74 68 20 62 79 74 65 20 61 72 65 20 75  ninth byte are u
6f90: 73 65 64 20 74 6f 20 72 65 63 6f 6e 73 74 72 75  sed to reconstru
6fa0: 63 74 20 74 68 65 20 36 34 2d 62 69 74 20 74 77  ct the 64-bit tw
6fb0: 6f 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e  os-complement in
6fc0: 74 65 67 65 72 2e 0a 56 61 72 69 6e 74 73 20 61  teger..Varints a
6fd0: 72 65 20 62 69 67 2d 65 6e 64 69 61 6e 3a 20 62  re big-endian: b
6fe0: 69 74 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20 74  its taken from t
6ff0: 68 65 20 65 61 72 6c 69 65 72 20 62 79 74 65 20  he earlier byte 
7000: 6f 66 20 74 68 65 20 76 61 72 69 6e 74 0a 61 72  of the varint.ar
7010: 65 20 74 68 65 20 6d 6f 72 65 20 73 69 67 6e 69  e the more signi
7020: 66 69 63 61 6e 74 20 61 6e 64 20 62 69 74 73 20  ficant and bits 
7030: 74 61 6b 65 6e 20 66 72 6f 6d 20 74 68 65 20 6c  taken from the l
7040: 61 74 65 72 20 62 79 74 65 73 2e 20 3c 2f 70 3e  ater bytes. </p>
7050: 0a 0a 3c 70 3e 54 68 65 20 66 6f 72 6d 61 74 20  ..<p>The format 
7060: 6f 66 20 61 20 63 65 6c 6c 20 64 65 70 65 6e 64  of a cell depend
7070: 73 20 6f 6e 20 77 68 69 63 68 20 6b 69 6e 64 20  s on which kind 
7080: 6f 66 20 62 2d 74 72 65 65 20 70 61 67 65 20 74  of b-tree page t
7090: 68 65 20 63 65 6c 6c 0a 61 70 70 65 61 72 73 20  he cell.appears 
70a0: 6f 6e 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69  on.  The followi
70b0: 6e 67 20 74 61 62 6c 65 20 73 68 6f 77 73 20 74  ng table shows t
70c0: 68 65 20 65 6c 65 6d 65 6e 74 73 20 6f 66 20 61  he elements of a
70d0: 20 63 65 6c 6c 2c 20 69 6e 0a 6f 72 64 65 72 20   cell, in.order 
70e0: 6f 66 20 61 70 70 65 61 72 61 6e 63 65 2c 20 66  of appearance, f
70f0: 6f 72 20 74 68 65 20 76 61 72 69 6f 75 73 20 62  or the various b
7100: 2d 74 72 65 65 20 70 61 67 65 20 74 79 70 65 73  -tree page types
7110: 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  .</p>..<blockquo
7120: 74 65 3e 3c 64 6c 3e 0a 3c 64 74 3e 3c 70 3e 54  te><dl>.<dt><p>T
7130: 61 62 6c 65 20 42 2d 54 72 65 65 20 4c 65 61 66  able B-Tree Leaf
7140: 20 43 65 6c 6c 3a 3c 2f 70 3e 3c 2f 64 74 3e 0a   Cell:</p></dt>.
7150: 3c 64 64 3e 3c 70 3e 3c 75 6c 3e 0a 3c 6c 69 3e  <dd><p><ul>.<li>
7160: 41 20 76 61 72 69 6e 74 20 77 68 69 63 68 20 69  A varint which i
7170: 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62  s the total numb
7180: 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 70  er of bytes of p
7190: 61 79 6c 6f 61 64 2c 20 69 6e 63 6c 75 64 69 6e  ayload, includin
71a0: 67 20 61 6e 79 0a 6f 76 65 72 66 6c 6f 77 0a 3c  g any.overflow.<
71b0: 6c 69 3e 41 20 76 61 72 69 6e 74 20 77 68 69 63  li>A varint whic
71c0: 68 20 69 73 20 74 68 65 20 69 6e 74 65 67 65 72  h is the integer
71d0: 20 6b 65 79 2c 20 61 2e 6b 2e 61 2e 20 22 72 6f   key, a.k.a. "ro
71e0: 77 69 64 22 0a 3c 6c 69 3e 54 68 65 20 69 6e 69  wid".<li>The ini
71f0: 74 69 61 6c 20 70 6f 72 74 69 6f 6e 20 6f 66 20  tial portion of 
7200: 74 68 65 20 70 61 79 6c 6f 61 64 20 74 68 61 74  the payload that
7210: 20 64 6f 65 73 20 6e 6f 74 20 73 70 69 6c 6c 20   does not spill 
7220: 74 6f 20 6f 76 65 72 66 6c 6f 77 0a 70 61 67 65  to overflow.page
7230: 73 2e 0a 3c 6c 69 3e 41 20 34 2d 62 79 74 65 20  s..<li>A 4-byte 
7240: 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67  big-endian integ
7250: 65 72 20 70 61 67 65 20 6e 75 6d 62 65 72 20 66  er page number f
7260: 6f 72 20 74 68 65 20 66 69 72 73 74 20 70 61 67  or the first pag
7270: 65 20 6f 66 20 74 68 65 0a 6f 76 65 72 66 6c 6f  e of the.overflo
7280: 77 20 70 61 67 65 20 6c 69 73 74 20 2d 20 6f 6d  w page list - om
7290: 69 74 74 65 64 20 69 66 20 61 6c 6c 20 70 61 79  itted if all pay
72a0: 6c 6f 61 64 20 66 69 74 73 20 6f 6e 20 74 68 65  load fits on the
72b0: 20 62 2d 74 72 65 65 20 70 61 67 65 2e 0a 3c 2f   b-tree page..</
72c0: 75 6c 3e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64  ul></p></dd>..<d
72d0: 74 3e 3c 70 3e 54 61 62 6c 65 20 42 2d 54 72 65  t><p>Table B-Tre
72e0: 65 20 49 6e 74 65 72 69 6f 72 20 43 65 6c 6c 3a  e Interior Cell:
72f0: 3c 2f 70 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70  </p></dt>.<dd><p
7300: 3e 3c 75 6c 3e 0a 3c 6c 69 3e 41 20 34 2d 62 79  ><ul>.<li>A 4-by
7310: 74 65 20 62 69 67 2d 65 6e 64 69 6e 67 20 70 61  te big-ending pa
7320: 67 65 20 6e 75 6d 62 65 72 20 77 68 69 63 68 20  ge number which 
7330: 69 73 20 74 68 65 20 6c 65 66 74 20 63 68 69 6c  is the left chil
7340: 64 20 70 6f 69 6e 74 65 72 2e 0a 3c 6c 69 3e 41  d pointer..<li>A
7350: 20 76 61 72 69 6e 74 20 77 68 69 63 68 20 69 73   varint which is
7360: 20 74 68 65 20 69 6e 74 65 67 65 72 20 6b 65 79   the integer key
7370: 0a 3c 2f 75 6c 3e 3c 2f 70 3e 3c 2f 64 64 3e 0a  .</ul></p></dd>.
7380: 0a 3c 64 74 3e 3c 70 3e 49 6e 64 65 78 20 42 2d  .<dt><p>Index B-
7390: 54 72 65 65 20 4c 65 61 66 20 43 65 6c 6c 3a 3c  Tree Leaf Cell:<
73a0: 2f 70 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e  /p></dt>.<dd><p>
73b0: 3c 75 6c 3e 0a 3c 6c 69 3e 41 20 76 61 72 69 6e  <ul>.<li>A varin
73c0: 74 20 77 68 69 63 68 20 69 73 20 74 68 65 20 74  t which is the t
73d0: 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 62  otal number of b
73e0: 79 74 65 73 20 6f 66 20 6b 65 79 20 70 61 79 6c  ytes of key payl
73f0: 6f 61 64 2c 20 69 6e 63 6c 75 64 69 6e 67 20 61  oad, including a
7400: 6e 79 0a 6f 76 65 72 66 6c 6f 77 0a 3c 6c 69 3e  ny.overflow.<li>
7410: 54 68 65 20 69 6e 69 74 69 61 6c 20 70 6f 72 74  The initial port
7420: 69 6f 6e 20 6f 66 20 74 68 65 20 70 61 79 6c 6f  ion of the paylo
7430: 61 64 20 74 68 61 74 20 64 6f 65 73 20 6e 6f 74  ad that does not
7440: 20 73 70 69 6c 6c 20 74 6f 20 6f 76 65 72 66 6c   spill to overfl
7450: 6f 77 0a 70 61 67 65 73 2e 0a 3c 6c 69 3e 41 20  ow.pages..<li>A 
7460: 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61  4-byte big-endia
7470: 6e 20 69 6e 74 65 67 65 72 20 70 61 67 65 20 6e  n integer page n
7480: 75 6d 62 65 72 20 66 6f 72 20 74 68 65 20 66 69  umber for the fi
7490: 72 73 74 20 70 61 67 65 20 6f 66 20 74 68 65 0a  rst page of the.
74a0: 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 20 6c 69  overflow page li
74b0: 73 74 20 2d 20 6f 6d 69 74 74 65 64 20 69 66 20  st - omitted if 
74c0: 61 6c 6c 20 70 61 79 6c 6f 61 64 20 66 69 74 73  all payload fits
74d0: 20 6f 6e 20 74 68 65 20 62 2d 74 72 65 65 20 70   on the b-tree p
74e0: 61 67 65 2e 0a 3c 2f 75 6c 3e 3c 2f 70 3e 3c 2f  age..</ul></p></
74f0: 64 64 3e 0a 0a 3c 64 74 3e 3c 70 3e 49 6e 64 65  dd>..<dt><p>Inde
7500: 78 20 42 2d 54 72 65 65 20 49 6e 74 65 72 69 6f  x B-Tree Interio
7510: 72 20 43 65 6c 6c 3a 3c 2f 70 3e 3c 2f 64 74 3e  r Cell:</p></dt>
7520: 0a 3c 64 64 3e 3c 70 3e 3c 75 6c 3e 0a 3c 6c 69  .<dd><p><ul>.<li
7530: 3e 41 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e  >A 4-byte big-en
7540: 64 69 6e 67 20 70 61 67 65 20 6e 75 6d 62 65 72  ding page number
7550: 20 77 68 69 63 68 20 69 73 20 74 68 65 20 6c 65   which is the le
7560: 66 74 20 63 68 69 6c 64 20 70 6f 69 6e 74 65 72  ft child pointer
7570: 2e 0a 3c 6c 69 3e 41 20 76 61 72 69 6e 74 20 77  ..<li>A varint w
7580: 68 69 63 68 20 69 73 20 74 68 65 20 74 6f 74 61  hich is the tota
7590: 6c 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  l number of byte
75a0: 73 20 6f 66 20 6b 65 79 20 70 61 79 6c 6f 61 64  s of key payload
75b0: 2c 20 69 6e 63 6c 75 64 69 6e 67 20 61 6e 79 0a  , including any.
75c0: 6f 76 65 72 66 6c 6f 77 0a 3c 6c 69 3e 54 68 65  overflow.<li>The
75d0: 20 69 6e 69 74 69 61 6c 20 70 6f 72 74 69 6f 6e   initial portion
75e0: 20 6f 66 20 74 68 65 20 70 61 79 6c 6f 61 64 20   of the payload 
75f0: 74 68 61 74 20 64 6f 65 73 20 6e 6f 74 20 73 70  that does not sp
7600: 69 6c 6c 20 74 6f 20 6f 76 65 72 66 6c 6f 77 0a  ill to overflow.
7610: 70 61 67 65 73 2e 0a 3c 6c 69 3e 41 20 34 2d 62  pages..<li>A 4-b
7620: 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69  yte big-endian i
7630: 6e 74 65 67 65 72 20 70 61 67 65 20 6e 75 6d 62  nteger page numb
7640: 65 72 20 66 6f 72 20 74 68 65 20 66 69 72 73 74  er for the first
7650: 20 70 61 67 65 20 6f 66 20 74 68 65 0a 6f 76 65   page of the.ove
7660: 72 66 6c 6f 77 20 70 61 67 65 20 6c 69 73 74 20  rflow page list 
7670: 2d 20 6f 6d 69 74 74 65 64 20 69 66 20 61 6c 6c  - omitted if all
7680: 20 70 61 79 6c 6f 61 64 20 66 69 74 73 20 6f 6e   payload fits on
7690: 20 74 68 65 20 62 2d 74 72 65 65 20 70 61 67 65   the b-tree page
76a0: 2e 0a 3c 2f 75 6c 3e 3c 2f 70 3e 3c 2f 64 64 3e  ..</ul></p></dd>
76b0: 0a 3c 2f 64 6c 3e 3c 2f 62 6c 6f 63 6b 71 75 6f  .</dl></blockquo
76c0: 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 69 6e 66 6f  te>..<p>The info
76d0: 72 6d 61 74 69 6f 6e 20 61 62 6f 76 65 20 63 61  rmation above ca
76e0: 6e 20 62 65 20 72 65 63 61 73 74 20 69 6e 74 6f  n be recast into
76f0: 20 61 20 74 61 62 6c 65 20 66 6f 72 6d 61 74 20   a table format 
7700: 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a  as follows:</p>.
7710: 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
7720: 74 20 63 65 6c 6c 66 6f 72 6d 61 74 20 7b 63 65  t cellformat {ce
7730: 6c 6c 20 66 6f 72 6d 61 74 20 73 75 6d 6d 61 72  ll format summar
7740: 79 7d 3c 2f 74 63 6c 3e 0a 3c 63 65 6e 74 65 72  y}</tcl>.<center
7750: 3e 0a 3c 69 3e 42 2d 74 72 65 65 20 43 65 6c 6c  >.<i>B-tree Cell
7760: 20 46 6f 72 6d 61 74 3c 2f 69 3e 0a 3c 74 61 62   Format</i>.<tab
7770: 6c 65 20 62 6f 72 64 65 72 3d 31 20 77 69 64 74  le border=1 widt
7780: 68 3d 22 38 30 25 22 3e 0a 3c 74 72 3e 3c 74 68  h="80%">.<tr><th
7790: 20 72 6f 77 73 70 61 6e 3d 32 3e 44 61 74 61 74   rowspan=2>Datat
77a0: 79 70 65 0a 20 20 20 20 3c 74 68 20 63 6f 6c 73  ype.    <th cols
77b0: 70 61 6e 3d 34 3e 41 70 70 65 61 72 73 20 69 6e  pan=4>Appears in
77c0: 2e 2e 2e 0a 20 20 20 20 3c 74 68 20 72 6f 77 73  ....    <th rows
77d0: 70 61 6e 3d 32 3e 44 65 73 63 72 69 70 74 69 6f  pan=2>Descriptio
77e0: 6e 0a 3c 74 72 3e 3c 74 68 3e 54 61 62 6c 65 20  n.<tr><th>Table 
77f0: 4c 65 61 66 0a 20 20 20 20 3c 74 68 3e 54 61 62  Leaf.    <th>Tab
7800: 6c 65 20 49 6e 74 65 72 69 6f 72 0a 20 20 20 20  le Interior.    
7810: 3c 74 68 3e 49 6e 64 65 78 20 4c 65 61 66 0a 20  <th>Index Leaf. 
7820: 20 20 20 3c 74 68 3e 49 6e 64 65 78 20 49 6e 74     <th>Index Int
7830: 65 72 69 6f 72 0a 3c 74 72 3e 3c 74 64 20 61 6c  erior.<tr><td al
7840: 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67  ign=center valig
7850: 6e 3d 74 6f 70 3e 34 2d 62 79 74 65 20 69 6e 74  n=top>4-byte int
7860: 65 67 65 72 0a 20 20 20 20 3c 74 64 20 61 6c 69  eger.    <td ali
7870: 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e  gn=center valign
7880: 3d 74 6f 70 3e 26 6e 62 73 70 3b 0a 20 20 20 20  =top>&nbsp;.    
7890: 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  <td align=center
78a0: 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32   valign=top>&#x2
78b0: 37 31 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69  714;.    <td ali
78c0: 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e  gn=center valign
78d0: 3d 74 6f 70 3e 26 6e 62 73 70 3b 0a 20 20 20 20  =top>&nbsp;.    
78e0: 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  <td align=center
78f0: 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32   valign=top>&#x2
7900: 37 31 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69  714;.    <td ali
7910: 67 6e 3d 6c 65 66 74 3e 50 61 67 65 20 6e 75 6d  gn=left>Page num
7920: 62 65 72 20 6f 66 20 6c 65 66 74 20 63 68 69 6c  ber of left chil
7930: 64 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d  d.<tr><td align=
7940: 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f  center valign=to
7950: 70 3e 76 61 72 69 6e 74 0a 20 20 20 20 3c 74 64  p>varint.    <td
7960: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61   align=center va
7970: 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34  lign=top>&#x2714
7980: 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d  ;.    <td align=
7990: 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f  center valign=to
79a0: 70 3e 26 6e 62 73 70 3b 0a 20 20 20 20 3c 74 64  p>&nbsp;.    <td
79b0: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61   align=center va
79c0: 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34  lign=top>&#x2714
79d0: 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d  ;.    <td align=
79e0: 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f  center valign=to
79f0: 70 3e 26 23 78 32 37 31 34 3b 0a 20 20 20 20 3c  p>&#x2714;.    <
7a00: 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 4e 75  td align=left>Nu
7a10: 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66  mber of bytes of
7a20: 20 70 61 79 6c 6f 61 64 0a 3c 74 72 3e 3c 74 64   payload.<tr><td
7a30: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61   align=center va
7a40: 6c 69 67 6e 3d 74 6f 70 3e 76 61 72 69 6e 74 0a  lign=top>varint.
7a50: 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65      <td align=ce
7a60: 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e  nter valign=top>
7a70: 26 23 78 32 37 31 34 3b 0a 20 20 20 20 3c 74 64  &#x2714;.    <td
7a80: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61   align=center va
7a90: 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34  lign=top>&#x2714
7aa0: 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d  ;.    <td align=
7ab0: 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f  center valign=to
7ac0: 70 3e 26 6e 62 73 70 3b 0a 20 20 20 20 3c 74 64  p>&nbsp;.    <td
7ad0: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61   align=center va
7ae0: 6c 69 67 6e 3d 74 6f 70 3e 26 6e 62 73 70 3b 0a  lign=top>&nbsp;.
7af0: 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 6c 65      <td align=le
7b00: 66 74 3e 52 6f 77 69 64 0a 3c 74 72 3e 3c 74 64  ft>Rowid.<tr><td
7b10: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61   align=center va
7b20: 6c 69 67 6e 3d 74 6f 70 3e 62 79 74 65 20 61 72  lign=top>byte ar
7b30: 72 61 79 0a 20 20 20 20 3c 74 64 20 61 6c 69 67  ray.    <td alig
7b40: 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d  n=center valign=
7b50: 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20 20 20  top>&#x2714;.   
7b60: 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65   <td align=cente
7b70: 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 6e 62  r valign=top>&nb
7b80: 73 70 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67  sp;.    <td alig
7b90: 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d  n=center valign=
7ba0: 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20 20 20  top>&#x2714;.   
7bb0: 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65   <td align=cente
7bc0: 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78  r valign=top>&#x
7bd0: 32 37 31 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c  2714;.    <td al
7be0: 69 67 6e 3d 6c 65 66 74 3e 50 61 79 6c 6f 61 64  ign=left>Payload
7bf0: 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63  .<tr><td align=c
7c00: 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70  enter valign=top
7c10: 3e 34 2d 62 79 74 65 20 69 6e 74 65 67 65 72 0a  >4-byte integer.
7c20: 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65      <td align=ce
7c30: 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e  nter valign=top>
7c40: 26 23 78 32 37 31 34 3b 0a 20 20 20 20 3c 74 64  &#x2714;.    <td
7c50: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61   align=center va
7c60: 6c 69 67 6e 3d 74 6f 70 3e 26 6e 62 73 70 3b 0a  lign=top>&nbsp;.
7c70: 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65      <td align=ce
7c80: 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e  nter valign=top>
7c90: 26 23 78 32 37 31 34 3b 0a 20 20 20 20 3c 74 64  &#x2714;.    <td
7ca0: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61   align=center va
7cb0: 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34  lign=top>&#x2714
7cc0: 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d  ;.    <td align=
7cd0: 6c 65 66 74 3e 50 61 67 65 20 6e 75 6d 62 65 72  left>Page number
7ce0: 20 6f 66 20 66 69 72 73 74 20 6f 76 65 72 66 6c   of first overfl
7cf0: 6f 77 20 70 61 67 65 0a 3c 2f 74 61 62 6c 65 3e  ow page.</table>
7d00: 3c 2f 63 65 6e 74 65 72 3e 0a 0a 0a 0a 3c 74 72  </center>....<tr
7d10: 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65  ><td align=cente
7d20: 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 0a 0a 3c  r valign=top>..<
7d30: 70 3e 54 68 65 20 61 6d 6f 75 6e 74 20 6f 66 20  p>The amount of 
7d40: 70 61 79 6c 6f 61 64 20 74 68 61 74 20 73 70 69  payload that spi
7d50: 6c 6c 73 20 6f 6e 74 6f 20 6f 76 65 72 66 6c 6f  lls onto overflo
7d60: 77 20 70 61 67 65 73 20 61 6c 73 6f 20 64 65 70  w pages also dep
7d70: 65 6e 64 73 20 6f 6e 0a 74 68 65 20 70 61 67 65  ends on.the page
7d80: 20 74 79 70 65 2e 20 20 46 6f 72 20 74 68 65 20   type.  For the 
7d90: 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6d 70 75 74  following comput
7da0: 61 74 69 6f 6e 73 2c 20 6c 65 74 20 55 20 62 65  ations, let U be
7db0: 20 74 68 65 20 75 73 61 62 6c 65 20 73 69 7a 65   the usable size
7dc0: 0a 6f 66 20 61 20 64 61 74 61 62 61 73 65 20 70  .of a database p
7dd0: 61 67 65 2c 20 74 68 65 20 74 6f 74 61 6c 20 70  age, the total p
7de0: 61 67 65 20 73 69 7a 65 20 6c 65 73 73 20 74 68  age size less th
7df0: 65 20 72 65 73 65 72 76 65 64 20 73 70 61 63 65  e reserved space
7e00: 20 61 74 20 74 68 65 0a 65 6e 64 20 6f 66 20 65   at the.end of e
7e10: 61 63 68 20 70 61 67 65 2e 20 20 41 6e 64 20 6c  ach page.  And l
7e20: 65 74 20 50 20 62 65 20 74 68 65 20 70 61 79 6c  et P be the payl
7e30: 6f 61 64 20 73 69 7a 65 2e 3c 2f 70 3e 0a 0a 3c  oad size.</p>..<
7e40: 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 64 6c 3e 0a  blockquote><dl>.
7e50: 3c 64 74 3e 54 61 62 6c 65 20 42 2d 54 72 65 65  <dt>Table B-Tree
7e60: 20 4c 65 61 66 20 43 65 6c 6c 3a 3c 2f 64 74 3e   Leaf Cell:</dt>
7e70: 0a 3c 64 64 3e 3c 70 3e 0a 49 66 20 74 68 65 20  .<dd><p>.If the 
7e80: 70 61 79 6c 6f 61 64 20 73 69 7a 65 20 50 20 69  payload size P i
7e90: 73 20 6c 65 73 73 20 74 68 61 6e 20 55 2d 33 36  s less than U-36
7ea0: 20 74 68 65 6e 20 74 68 65 20 65 6e 74 69 72 65   then the entire
7eb0: 20 70 61 79 6c 6f 61 64 20 69 73 20 73 74 6f 72   payload is stor
7ec0: 65 64 0a 6f 6e 20 74 68 65 20 62 2d 74 72 65 65  ed.on the b-tree
7ed0: 20 70 61 67 65 2e 20 20 4c 65 74 20 4d 20 62 65   page.  Let M be
7ee0: 20 28 28 55 2d 31 32 29 2a 33 32 2f 32 35 35 29   ((U-12)*32/255)
7ef0: 2d 32 33 2e 20 20 49 66 20 50 20 69 73 20 67 72  -23.  If P is gr
7f00: 65 61 74 65 72 20 74 68 61 6e 20 55 2d 33 35 0a  eater than U-35.
7f10: 74 68 65 6e 20 74 68 65 20 6e 75 6d 62 65 72 20  then the number 
7f20: 6f 66 20 62 79 74 65 20 73 74 6f 72 65 64 20 6f  of byte stored o
7f30: 6e 20 74 68 65 20 62 2d 74 72 65 65 20 70 61 67  n the b-tree pag
7f40: 65 20 69 73 20 74 68 65 20 6c 65 73 73 6f 72 20  e is the lessor 
7f50: 6f 66 0a 4d 2b 28 28 50 2d 4d 29 25 28 55 2d 34  of.M+((P-M)%(U-4
7f60: 29 29 20 61 6e 64 20 55 2d 33 35 2e 0a 3c 2f 70  )) and U-35..</p
7f70: 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 54 61 62 6c  ></dd>..<dt>Tabl
7f80: 65 20 42 2d 54 72 65 65 20 49 6e 74 65 72 69 6f  e B-Tree Interio
7f90: 72 20 43 65 6c 6c 3a 3c 2f 64 74 3e 0a 3c 64 64  r Cell:</dt>.<dd
7fa0: 3e 3c 70 3e 0a 49 6e 74 65 72 69 6f 72 20 70 61  ><p>.Interior pa
7fb0: 67 65 73 20 6f 66 20 74 61 62 6c 65 20 62 2d 74  ges of table b-t
7fc0: 72 65 65 73 20 68 61 76 65 20 6e 6f 20 70 61 79  rees have no pay
7fd0: 6c 6f 61 64 20 61 6e 64 20 73 6f 20 74 68 65 72  load and so ther
7fe0: 65 20 69 73 20 6e 65 76 65 72 0a 61 6e 79 20 70  e is never.any p
7ff0: 61 79 6c 6f 61 64 20 74 6f 20 73 70 69 6c 6c 2e  ayload to spill.
8000: 0a 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e  .</p></dd>..<dt>
8010: 49 6e 64 65 78 20 42 2d 54 72 65 65 20 4c 65 61  Index B-Tree Lea
8020: 66 20 4f 72 20 49 6e 74 65 72 69 6f 72 20 43 65  f Or Interior Ce
8030: 6c 6c 3a 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e  ll:</dt>.<dd><p>
8040: 0a 49 66 20 74 68 65 20 70 61 79 6c 6f 61 64 20  .If the payload 
8050: 73 69 7a 65 20 50 20 69 73 20 6c 65 73 73 20 74  size P is less t
8060: 68 61 6e 20 28 28 55 2d 31 32 29 2a 36 34 2f 32  han ((U-12)*64/2
8070: 35 35 29 2d 32 32 20 74 68 65 6e 20 74 68 65 20  55)-22 then the 
8080: 65 6e 74 69 72 65 0a 70 61 79 6c 6f 61 64 20 69  entire.payload i
8090: 73 20 73 74 6f 72 65 64 20 6f 6e 20 74 68 65 20  s stored on the 
80a0: 62 2d 74 72 65 65 20 70 61 67 65 2e 20 20 0a 4c  b-tree page.  .L
80b0: 65 74 20 4d 20 62 65 20 28 28 55 2d 31 32 29 2a  et M be ((U-12)*
80c0: 33 32 2f 32 35 35 29 2d 32 33 2e 20 20 49 66 20  32/255)-23.  If 
80d0: 50 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  P is greater tha
80e0: 6e 20 28 28 55 2d 31 32 29 2a 36 34 2f 32 35 35  n ((U-12)*64/255
80f0: 29 2d 32 33 0a 74 68 65 6e 20 74 68 65 20 6e 75  )-23.then the nu
8100: 6d 62 65 72 20 6f 66 20 62 79 74 65 20 73 74 6f  mber of byte sto
8110: 72 65 64 20 6f 6e 20 74 68 65 20 62 2d 74 72 65  red on the b-tre
8120: 65 20 70 61 67 65 20 69 73 20 74 68 65 20 6c 65  e page is the le
8130: 73 73 6f 72 20 6f 66 0a 4d 2b 28 28 50 2d 4d 29  ssor of.M+((P-M)
8140: 25 28 55 2d 34 29 29 20 61 6e 64 20 28 28 55 2d  %(U-4)) and ((U-
8150: 31 32 29 2a 36 34 2f 32 35 35 29 2d 32 33 2e 0a  12)*64/255)-23..
8160: 3c 2f 70 3e 3c 2f 64 64 3e 0a 3c 2f 64 6c 3e 3c  </p></dd>.</dl><
8170: 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70  /blockquote>..<p
8180: 3e 54 68 65 20 6f 76 65 72 66 6c 6f 77 20 74 68  >The overflow th
8190: 72 65 73 68 6f 6c 64 73 20 61 72 65 20 64 65 73  resholds are des
81a0: 69 67 6e 65 64 20 74 6f 20 67 69 76 65 20 61 20  igned to give a 
81b0: 6d 69 6e 69 6d 75 6d 20 66 61 6e 6f 75 74 20 6f  minimum fanout o
81c0: 66 0a 34 20 66 6f 72 20 69 6e 64 65 78 20 62 2d  f.4 for index b-
81d0: 74 72 65 65 73 20 61 6e 64 20 74 6f 20 6d 61 6b  trees and to mak
81e0: 65 20 73 75 72 65 20 65 6e 6f 75 67 68 20 6f 66  e sure enough of
81f0: 20 74 68 65 20 70 61 79 6c 6f 61 64 0a 69 73 20   the payload.is 
8200: 6f 6e 20 74 68 65 20 62 2d 74 72 65 65 20 70 61  on the b-tree pa
8210: 67 65 20 74 68 61 74 20 74 68 65 20 72 65 63 6f  ge that the reco
8220: 72 64 20 68 65 61 64 65 72 20 63 61 6e 20 75 73  rd header can us
8230: 75 61 6c 6c 79 20 62 65 20 61 63 63 65 73 73 65  ually be accesse
8240: 64 0a 77 69 74 68 6f 75 74 20 63 6f 6e 73 75 6c  d.without consul
8250: 74 69 6e 67 20 61 6e 20 6f 76 65 72 66 6c 6f 77  ting an overflow
8260: 20 70 61 67 65 2e 20 20 49 6e 20 68 69 6e 64 73   page.  In hinds
8270: 69 67 68 74 2c 20 74 68 65 20 64 65 73 69 67 6e  ight, the design
8280: 65 72 73 20 6f 66 0a 74 68 65 20 53 51 4c 69 74  ers of.the SQLit
8290: 65 20 62 2d 74 72 65 65 20 6c 6f 67 69 63 20 72  e b-tree logic r
82a0: 65 61 6c 69 7a 65 20 74 68 61 74 20 74 68 65 73  ealize that thes
82b0: 65 20 74 68 72 65 73 68 6f 6c 64 73 20 63 6f 75  e thresholds cou
82c0: 6c 64 20 68 61 76 65 20 62 65 65 6e 0a 6d 61 64  ld have been.mad
82d0: 65 20 6d 75 63 68 20 73 69 6d 70 6c 65 72 2e 20  e much simpler. 
82e0: 20 48 6f 77 65 76 65 72 2c 20 74 68 65 20 63 6f   However, the co
82f0: 6d 70 75 74 61 74 69 6f 6e 73 20 63 61 6e 6e 6f  mputations canno
8300: 74 20 62 65 20 6e 6f 77 20 62 65 20 63 68 61 6e  t be now be chan
8310: 67 65 64 0a 77 69 74 68 6f 75 74 20 72 65 73 75  ged.without resu
8320: 6c 74 69 6e 67 20 69 6e 20 61 6e 20 69 6e 63 6f  lting in an inco
8330: 6d 70 61 74 69 62 6c 65 20 66 69 6c 65 20 66 6f  mpatible file fo
8340: 72 6d 61 74 2e 20 20 41 6e 64 20 74 68 65 20 63  rmat.  And the c
8350: 75 72 72 65 6e 74 20 63 6f 6d 70 75 74 61 74 69  urrent computati
8360: 6f 6e 73 0a 77 6f 72 6b 20 77 65 6c 6c 2c 20 65  ons.work well, e
8370: 76 65 6e 20 69 66 20 74 68 65 79 20 61 72 65 20  ven if they are 
8380: 61 20 6c 69 74 74 6c 65 20 63 6f 6d 70 6c 65 78  a little complex
8390: 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 31 2e 36 20 43  .</p>..<h3>1.6 C
83a0: 65 6c 6c 20 50 61 79 6c 6f 61 64 20 4f 76 65 72  ell Payload Over
83b0: 66 6c 6f 77 20 50 61 67 65 73 3c 2f 68 33 3e 0a  flow Pages</h3>.
83c0: 0a 3c 70 3e 57 68 65 6e 20 74 68 65 20 70 61 79  .<p>When the pay
83d0: 6c 6f 61 64 20 6f 66 20 61 20 62 2d 74 72 65 65  load of a b-tree
83e0: 20 63 65 6c 6c 20 69 73 20 74 6f 6f 20 6c 61 72   cell is too lar
83f0: 67 65 20 66 6f 72 20 74 68 65 20 62 2d 74 72 65  ge for the b-tre
8400: 65 20 70 61 67 65 2c 0a 74 68 65 20 73 75 72 70  e page,.the surp
8410: 6c 75 73 20 69 73 20 73 70 69 6c 6c 65 64 20 6f  lus is spilled o
8420: 6e 74 6f 20 6f 76 65 72 66 6c 6f 77 20 70 61 67  nto overflow pag
8430: 65 73 2e 20 20 4f 76 65 72 66 6c 6f 77 20 70 61  es.  Overflow pa
8440: 67 65 73 20 66 6f 72 6d 20 61 20 6c 69 6e 6b 65  ges form a linke
8450: 64 0a 6c 69 73 74 2e 20 20 54 68 65 20 66 69 72  d.list.  The fir
8460: 73 74 20 66 6f 75 72 20 62 79 74 65 73 20 6f 66  st four bytes of
8470: 20 65 61 63 68 20 6f 76 65 72 66 6c 6f 77 20 70   each overflow p
8480: 61 67 65 20 61 72 65 20 61 20 62 69 67 2d 65 6e  age are a big-en
8490: 64 69 61 6e 0a 69 6e 74 65 67 65 72 20 77 68 69  dian.integer whi
84a0: 63 68 20 69 73 20 74 68 65 20 70 61 67 65 20 6e  ch is the page n
84b0: 75 6d 62 65 72 20 6f 66 20 74 68 65 20 6e 65 78  umber of the nex
84c0: 74 20 70 61 67 65 20 69 6e 20 74 68 65 20 63 68  t page in the ch
84d0: 61 69 6e 2c 20 6f 72 20 7a 65 72 6f 0a 66 6f 72  ain, or zero.for
84e0: 20 74 68 65 20 66 69 6e 61 6c 20 70 61 67 65 20   the final page 
84f0: 69 6e 20 74 68 65 20 63 68 61 69 6e 2e 20 20 54  in the chain.  T
8500: 68 65 20 66 69 66 74 68 20 62 79 74 65 20 74 68  he fifth byte th
8510: 72 6f 75 67 68 20 74 68 65 20 6c 61 73 74 20 75  rough the last u
8520: 73 61 62 6c 65 0a 62 79 74 65 20 61 72 65 20 75  sable.byte are u
8530: 73 65 64 20 74 6f 20 68 6f 6c 64 20 6f 76 65 72  sed to hold over
8540: 66 6c 6f 77 20 63 6f 6e 74 65 6e 74 2e 3c 2f 70  flow content.</p
8550: 3e 0a 0a 3c 68 33 3e 31 2e 37 20 50 6f 69 6e 74  >..<h3>1.7 Point
8560: 65 72 20 4d 61 70 20 6f 72 20 50 74 72 6d 61 70  er Map or Ptrmap
8570: 20 50 61 67 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e   Pages</h3>..<p>
8580: 50 6f 69 6e 74 65 72 20 6d 61 70 20 6f 72 20 70  Pointer map or p
8590: 74 72 6d 61 70 20 70 61 67 65 73 20 61 72 65 20  trmap pages are 
85a0: 65 78 74 72 61 20 70 61 67 65 73 20 69 6e 73 65  extra pages inse
85b0: 72 74 65 64 20 69 6e 74 6f 20 74 68 65 20 64 61  rted into the da
85c0: 74 61 62 61 73 65 0a 74 6f 20 6d 61 6b 65 20 74  tabase.to make t
85d0: 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f 66 20  he operation of 
85e0: 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d 20 61 6e  [auto_vacuum] an
85f0: 64 20 5b 69 6e 63 72 65 6d 65 6e 74 61 6c 5f 76  d [incremental_v
8600: 61 63 75 75 6d 5d 20 6d 6f 64 65 73 0a 6d 6f 72  acuum] modes.mor
8610: 65 20 65 66 66 69 63 69 65 6e 74 2e 20 20 4f 74  e efficient.  Ot
8620: 68 65 72 20 70 61 67 65 20 74 79 70 65 73 20 69  her page types i
8630: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74  n the database t
8640: 79 70 69 63 61 6c 6c 79 20 68 61 76 65 20 70 6f  ypically have po
8650: 69 6e 74 65 72 73 0a 66 72 6f 6d 20 70 61 72 65  inters.from pare
8660: 6e 74 20 74 6f 20 63 68 69 6c 64 2e 20 20 46 6f  nt to child.  Fo
8670: 72 20 65 78 61 6d 70 6c 65 2c 20 61 20 69 6e 74  r example, a int
8680: 65 72 69 6f 72 20 62 2d 74 72 65 65 20 70 61 67  erior b-tree pag
8690: 65 20 63 6f 6e 74 61 69 6e 73 20 70 6f 69 6e 74  e contains point
86a0: 65 72 73 0a 74 6f 20 69 74 73 20 63 68 69 6c 64  ers.to its child
86b0: 20 62 2d 74 72 65 65 20 70 61 67 65 73 20 61 6e   b-tree pages an
86c0: 64 20 61 6e 20 6f 76 65 72 66 6c 6f 77 20 63 68  d an overflow ch
86d0: 61 69 6e 20 68 61 73 20 61 20 70 6f 69 6e 74 65  ain has a pointe
86e0: 72 0a 66 72 6f 6d 20 65 61 72 6c 69 65 72 20 74  r.from earlier t
86f0: 6f 20 6c 61 74 65 72 20 6c 69 6e 6b 73 20 69 6e  o later links in
8700: 20 74 68 65 20 63 68 61 69 6e 2e 20 20 41 20 70   the chain.  A p
8710: 74 72 6d 61 70 20 70 61 67 65 20 63 6f 6e 74 61  trmap page conta
8720: 69 6e 73 20 6c 69 6e 6b 61 67 65 0a 69 6e 66 6f  ins linkage.info
8730: 72 6d 61 74 69 6f 6e 20 67 6f 69 6e 67 20 69 6e  rmation going in
8740: 20 74 68 65 20 6f 70 70 6f 73 69 74 65 20 64 69   the opposite di
8750: 72 65 63 74 69 6f 6e 2c 20 66 72 6f 6d 20 63 68  rection, from ch
8760: 69 6c 64 20 74 6f 20 70 61 72 65 6e 74 2e 3c 2f  ild to parent.</
8770: 70 3e 0a 0a 3c 70 3e 50 74 72 6d 61 70 20 70 61  p>..<p>Ptrmap pa
8780: 67 65 73 20 6d 75 73 74 20 65 78 69 73 74 20 69  ges must exist i
8790: 6e 20 61 6e 79 20 64 61 74 61 62 61 73 65 20 66  n any database f
87a0: 69 6c 65 20 77 68 69 63 68 20 68 61 73 20 61 20  ile which has a 
87b0: 6e 6f 6e 2d 7a 65 72 6f 0a 6c 61 72 67 65 73 74  non-zero.largest
87c0: 20 72 6f 6f 74 20 62 2d 74 72 65 65 20 70 61 67   root b-tree pag
87d0: 65 20 76 61 6c 75 65 20 61 74 20 6f 66 66 73 65  e value at offse
87e0: 74 20 35 32 20 69 6e 20 74 68 65 20 64 61 74 61  t 52 in the data
87f0: 62 61 73 65 20 68 65 61 64 65 72 2e 0a 49 66 20  base header..If 
8800: 74 68 65 20 6c 61 72 67 65 73 74 20 72 6f 6f 74  the largest root
8810: 20 62 2d 74 72 65 65 20 70 61 67 65 20 76 61 6c   b-tree page val
8820: 75 65 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e  ue is zero, then
8830: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 6d 75   the database mu
8840: 73 74 20 6e 6f 74 0a 63 6f 6e 74 61 69 6e 20 70  st not.contain p
8850: 74 72 6d 61 70 20 70 61 67 65 73 2e 3c 2f 70 3e  trmap pages.</p>
8860: 0a 0a 3c 70 3e 49 6e 20 61 20 64 61 74 61 62 61  ..<p>In a databa
8870: 73 65 20 77 69 74 68 20 70 74 72 6d 61 70 20 70  se with ptrmap p
8880: 61 67 65 73 2c 20 74 68 65 20 66 69 72 73 74 20  ages, the first 
8890: 70 74 72 6d 61 70 20 70 61 67 65 20 69 73 20 70  ptrmap page is p
88a0: 61 67 65 20 32 2e 0a 41 20 70 74 72 6d 61 70 20  age 2..A ptrmap 
88b0: 70 61 67 65 20 63 6f 6e 73 69 73 74 73 20 6f 66  page consists of
88c0: 20 61 6e 20 61 72 72 61 79 20 6f 66 20 35 2d 62   an array of 5-b
88d0: 79 74 65 20 65 6e 74 72 69 65 73 2e 20 20 4c 65  yte entries.  Le
88e0: 74 20 4a 20 62 65 20 74 68 65 0a 6e 75 6d 62 65  t J be the.numbe
88f0: 72 20 6f 66 20 35 2d 62 79 74 65 20 65 6e 74 72  r of 5-byte entr
8900: 69 65 73 20 74 68 61 74 20 77 69 6c 6c 20 66 69  ies that will fi
8910: 74 20 69 6e 20 74 68 65 20 75 73 61 62 6c 65 20  t in the usable 
8920: 73 70 61 63 65 20 6f 66 20 61 20 70 61 67 65 2e  space of a page.
8930: 0a 28 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73  .(In other words
8940: 2c 20 4a 3d 55 2f 35 2e 29 20 20 54 68 65 20 66  , J=U/5.)  The f
8950: 69 72 73 74 20 70 74 72 6d 61 70 20 70 61 67 65  irst ptrmap page
8960: 20 77 69 6c 6c 20 63 6f 6e 74 61 69 6e 20 62 61   will contain ba
8970: 63 6b 20 70 6f 69 6e 74 65 72 0a 69 6e 66 6f 72  ck pointer.infor
8980: 6d 61 74 69 6f 6e 20 66 6f 72 20 70 61 67 65 73  mation for pages
8990: 20 33 20 74 68 72 6f 75 67 68 20 4a 2b 32 2c 20   3 through J+2, 
89a0: 69 6e 63 6c 75 73 69 76 65 2e 20 20 54 68 65 20  inclusive.  The 
89b0: 6e 65 78 74 20 70 6f 69 6e 74 65 72 20 6d 61 70  next pointer map
89c0: 0a 70 61 67 65 20 77 69 6c 6c 20 62 65 20 6f 6e  .page will be on
89d0: 20 70 61 67 65 20 4a 2b 33 20 61 6e 64 20 74 68   page J+3 and th
89e0: 61 74 20 70 74 72 6d 61 70 20 70 61 67 65 20 77  at ptrmap page w
89f0: 69 6c 6c 20 70 72 6f 76 69 64 65 20 62 61 63 6b  ill provide back
8a00: 20 70 6f 69 6e 74 65 72 0a 69 6e 66 6f 72 6d 61   pointer.informa
8a10: 74 69 6f 6e 20 66 6f 72 20 70 61 67 65 73 20 4a  tion for pages J
8a20: 2b 34 20 74 68 72 6f 75 67 68 20 32 2a 4a 2b 33  +4 through 2*J+3
8a30: 20 69 6e 63 6c 75 73 69 76 65 2e 20 20 41 6e 20   inclusive.  An 
8a40: 73 6f 20 66 6f 72 74 68 20 66 6f 72 0a 74 68 65  so forth for.the
8a50: 20 65 6e 74 69 72 65 20 64 61 74 61 62 61 73 65   entire database
8a60: 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49   file.</p>..<p>I
8a70: 6e 20 61 20 64 61 74 61 62 61 73 65 20 74 68 61  n a database tha
8a80: 74 20 75 73 65 73 20 70 74 72 6d 61 70 20 70 61  t uses ptrmap pa
8a90: 67 65 73 2c 20 61 6c 6c 20 70 61 67 65 73 20 61  ges, all pages a
8aa0: 74 20 6c 6f 63 61 74 69 6f 6e 73 20 69 64 65 6e  t locations iden
8ab0: 74 69 66 69 65 64 0a 62 79 20 74 68 65 20 63 6f  tified.by the co
8ac0: 6d 70 75 74 61 74 69 6f 6e 20 69 6e 20 74 68 65  mputation in the
8ad0: 20 70 72 65 76 69 6f 75 73 20 70 61 72 61 67 72   previous paragr
8ae0: 61 70 68 20 6d 75 73 74 20 62 65 20 70 74 72 6d  aph must be ptrm
8af0: 61 70 20 70 61 67 65 20 61 6e 64 20 6e 6f 0a 6f  ap page and no.o
8b00: 74 68 65 72 20 70 61 67 65 20 6d 61 79 20 62 65  ther page may be
8b10: 20 61 20 70 74 72 6d 61 70 20 70 61 67 65 2e 20   a ptrmap page. 
8b20: 20 45 78 63 65 70 74 2c 20 69 66 20 74 68 65 20   Except, if the 
8b30: 62 79 74 65 2d 6c 6f 63 6b 20 70 61 67 65 20 68  byte-lock page h
8b40: 61 70 70 65 6e 73 20 74 6f 0a 66 61 6c 6c 20 6f  appens to.fall o
8b50: 6e 20 74 68 65 20 73 61 6d 65 20 70 61 67 65 20  n the same page 
8b60: 6e 75 6d 62 65 72 20 61 73 20 61 20 70 74 72 6d  number as a ptrm
8b70: 61 70 20 70 61 67 65 2c 20 74 68 65 6e 20 74 68  ap page, then th
8b80: 65 20 70 74 72 6d 61 70 20 69 73 20 6d 6f 76 65  e ptrmap is move
8b90: 64 0a 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69  d.to the followi
8ba0: 6e 67 20 70 61 67 65 20 66 6f 72 20 74 68 61 74  ng page for that
8bb0: 20 6f 6e 65 20 63 61 73 65 2e 3c 2f 70 3e 0a 0a   one case.</p>..
8bc0: 3c 70 3e 45 61 63 68 20 35 2d 62 79 74 65 20 65  <p>Each 5-byte e
8bd0: 6e 74 72 79 20 6f 6e 20 61 20 70 74 72 6d 61 70  ntry on a ptrmap
8be0: 20 70 61 67 65 20 70 72 6f 76 69 64 65 73 20 62   page provides b
8bf0: 61 63 6b 2d 6c 69 6e 6b 20 69 6e 66 6f 72 6d 61  ack-link informa
8c00: 74 69 6f 6e 20 61 62 6f 75 74 20 0a 6f 6e 65 20  tion about .one 
8c10: 6f 66 20 70 61 67 65 73 20 74 68 61 74 20 69 6d  of pages that im
8c20: 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77  mediately follow
8c30: 20 74 68 65 20 70 6f 69 6e 74 65 72 20 6d 61 70   the pointer map
8c40: 2e 20 20 49 66 20 70 61 67 65 20 42 20 69 73 0a  .  If page B is.
8c50: 70 74 72 6d 61 70 20 70 61 67 65 20 74 68 65 6e  ptrmap page then
8c60: 20 62 61 63 6b 2d 6c 69 6e 6b 20 69 6e 66 6f 72   back-link infor
8c70: 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 70 61 67  mation about pag
8c80: 65 20 42 2b 31 20 69 73 20 70 72 6f 76 69 64 65  e B+1 is provide
8c90: 64 20 62 79 0a 74 68 65 20 66 69 72 73 74 20 65  d by.the first e
8ca0: 6e 74 72 79 20 6f 6e 20 74 68 65 20 70 6f 69 6e  ntry on the poin
8cb0: 74 65 72 20 6d 61 70 2e 20 20 49 6e 66 6f 72 6d  ter map.  Inform
8cc0: 61 74 69 6f 6e 20 61 62 6f 75 74 20 70 61 67 65  ation about page
8cd0: 20 42 2b 32 20 69 73 0a 70 72 6f 76 69 64 65 64   B+2 is.provided
8ce0: 20 62 79 20 74 68 65 20 73 65 63 6f 6e 64 20 65   by the second e
8cf0: 6e 74 72 79 2e 20 20 41 6e 64 20 73 6f 20 66 6f  ntry.  And so fo
8d00: 72 74 68 2e 3c 2f 70 3e 0a 0a 3c 70 3e 45 61 63  rth.</p>..<p>Eac
8d10: 68 20 35 2d 62 79 74 65 20 70 74 72 6d 61 70 20  h 5-byte ptrmap 
8d20: 65 6e 74 72 79 20 63 6f 6e 73 69 73 74 73 20 6f  entry consists o
8d30: 66 20 6f 6e 65 20 62 79 74 65 20 6f 66 20 22 70  f one byte of "p
8d40: 61 67 65 20 74 79 70 65 22 20 69 6e 66 6f 72 6d  age type" inform
8d50: 61 74 69 6f 6e 0a 66 6f 6c 6c 6f 77 65 64 20 62  ation.followed b
8d60: 79 20 61 20 34 2d 62 79 74 65 20 62 69 67 2d 65  y a 4-byte big-e
8d70: 6e 64 69 61 6e 20 70 61 67 65 20 6e 75 6d 62 65  ndian page numbe
8d80: 72 2e 20 20 46 69 76 65 20 70 61 67 65 20 74 79  r.  Five page ty
8d90: 70 65 73 20 61 72 65 20 72 65 63 6f 67 6e 69 7a  pes are recogniz
8da0: 65 64 3a 0a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c  ed:.</p>..<ol>.<
8db0: 6c 69 3e 41 20 62 2d 74 72 65 65 20 72 6f 6f 74  li>A b-tree root
8dc0: 20 70 61 67 65 2e 20 20 54 68 65 0a 70 61 67 65   page.  The.page
8dd0: 20 6e 75 6d 62 65 72 20 73 68 6f 75 6c 64 20 62   number should b
8de0: 65 20 7a 65 72 6f 2e 0a 3c 6c 69 3e 41 20 66 72  e zero..<li>A fr
8df0: 65 65 6c 69 73 74 20 70 61 67 65 2e 20 20 54 68  eelist page.  Th
8e00: 65 20 70 61 67 65 20 6e 75 6d 62 65 72 20 73 68  e page number sh
8e10: 6f 75 6c 64 20 62 65 0a 7a 65 72 6f 2e 0a 3c 6c  ould be.zero..<l
8e20: 69 3e 54 68 65 20 66 69 72 73 74 20 70 61 67 65  i>The first page
8e30: 20 6f 66 20 61 0a 63 65 6c 6c 20 70 61 79 6c 6f   of a.cell paylo
8e40: 61 64 20 6f 76 65 72 66 6c 6f 77 20 63 68 61 69  ad overflow chai
8e50: 6e 2e 20 20 54 68 65 20 70 61 67 65 20 6e 75 6d  n.  The page num
8e60: 62 65 72 20 69 73 20 74 68 65 20 62 2d 74 72 65  ber is the b-tre
8e70: 65 20 70 61 67 65 20 74 68 61 74 0a 63 6f 6e 74  e page that.cont
8e80: 61 69 6e 73 20 74 68 65 20 63 65 6c 6c 20 77 68  ains the cell wh
8e90: 6f 73 65 20 63 6f 6e 74 65 6e 74 20 68 61 73 20  ose content has 
8ea0: 6f 76 65 72 66 6c 6f 77 65 64 2e 0a 3c 6c 69 3e  overflowed..<li>
8eb0: 41 20 70 61 67 65 20 69 6e 20 61 6e 20 6f 76 65  A page in an ove
8ec0: 72 66 6c 6f 77 20 63 68 61 69 6e 0a 6f 74 68 65  rflow chain.othe
8ed0: 72 20 74 68 61 6e 20 74 68 65 20 66 69 72 73 74  r than the first
8ee0: 20 70 61 67 65 2e 20 20 54 68 65 20 70 61 67 65   page.  The page
8ef0: 20 6e 75 6d 62 65 72 20 69 73 20 74 68 65 20 70   number is the p
8f00: 72 69 6f 72 20 70 61 67 65 20 6f 66 20 74 68 65  rior page of the
8f10: 0a 6f 76 65 72 66 6c 6f 77 20 63 68 61 69 6e 2e  .overflow chain.
8f20: 0a 3c 6c 69 3e 41 20 6e 6f 6e 2d 72 6f 6f 74 20  .<li>A non-root 
8f30: 62 2d 74 72 65 65 20 70 61 67 65 2e 20 20 54 68  b-tree page.  Th
8f40: 65 0a 70 61 67 65 20 6e 75 6d 62 65 72 20 69 73  e.page number is
8f50: 20 74 68 65 20 70 61 72 65 6e 74 20 62 2d 74 72   the parent b-tr
8f60: 65 65 20 70 61 67 65 2e 0a 3c 2f 6f 6c 3e 0a 0a  ee page..</ol>..
8f70: 3c 70 3e 49 6e 20 61 6e 79 20 64 61 74 61 62 61  <p>In any databa
8f80: 73 65 20 66 69 6c 65 20 74 68 61 74 20 63 6f 6e  se file that con
8f90: 74 61 69 6e 73 20 70 74 72 6d 61 70 20 70 61 67  tains ptrmap pag
8fa0: 65 73 2c 20 61 6c 6c 20 62 2d 74 72 65 65 20 72  es, all b-tree r
8fb0: 6f 6f 74 20 70 61 67 65 73 20 0a 6d 75 73 74 20  oot pages .must 
8fc0: 63 6f 6d 65 20 62 65 66 6f 72 65 20 61 6e 79 20  come before any 
8fd0: 6e 6f 6e 2d 72 6f 6f 74 20 62 2d 74 72 65 65 20  non-root b-tree 
8fe0: 70 61 67 65 2c 20 63 65 6c 6c 20 70 61 79 6c 6f  page, cell paylo
8ff0: 61 64 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65  ad overflow page
9000: 2c 20 6f 72 0a 66 72 65 65 6c 69 73 74 20 70 61  , or.freelist pa
9010: 67 65 2e 3c 2f 70 3e 0a 0a 3c 68 32 3e 32 2e 30  ge.</p>..<h2>2.0
9020: 20 53 63 68 65 6d 61 20 4c 61 79 65 72 3c 2f 68   Schema Layer</h
9030: 32 3e 0a 0a 3c 70 3e 54 68 65 20 66 6f 72 65 67  2>..<p>The foreg
9040: 6f 69 6e 67 20 74 65 78 74 20 64 65 73 63 72 69  oing text descri
9050: 62 65 73 20 6c 6f 77 2d 6c 65 76 65 6c 20 61 73  bes low-level as
9060: 70 65 63 74 73 20 6f 66 20 74 68 65 20 53 51 4c  pects of the SQL
9070: 69 74 65 20 66 69 6c 65 0a 66 6f 72 6d 61 74 2e  ite file.format.
9080: 20 20 54 68 65 20 62 2d 74 72 65 65 20 6d 65 63    The b-tree mec
9090: 68 61 6e 69 73 6d 20 70 72 6f 76 69 64 65 73 20  hanism provides 
90a0: 70 6f 77 65 72 66 75 6c 20 61 6e 64 20 65 66 66  powerful and eff
90b0: 69 63 69 65 6e 74 20 6d 65 61 6e 73 20 6f 66 0a  icient means of.
90c0: 61 63 63 65 73 73 69 6e 67 20 61 20 6c 61 72 67  accessing a larg
90d0: 65 20 64 61 74 61 20 73 65 74 2e 20 20 54 68 69  e data set.  Thi
90e0: 73 20 73 65 63 74 69 6f 6e 20 77 69 6c 6c 20 64  s section will d
90f0: 65 73 63 72 69 62 65 20 68 6f 77 20 74 68 65 0a  escribe how the.
9100: 6c 6f 77 2d 6c 65 76 65 6c 20 62 2d 74 72 65 65  low-level b-tree
9110: 20 6c 61 79 65 72 20 69 73 20 75 73 65 64 20 74   layer is used t
9120: 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 68 69 67 68  o implement high
9130: 65 72 2d 6c 65 76 65 6c 20 53 51 4c 0a 63 61 70  er-level SQL.cap
9140: 61 62 69 6c 69 74 69 65 73 2e 3c 2f 70 3e 0a 0a  abilities.</p>..
9150: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
9160: 20 72 65 63 6f 72 64 5f 66 6f 72 6d 61 74 20 7b   record_format {
9170: 72 65 63 6f 72 64 20 66 6f 72 6d 61 74 7d 3c 2f  record format}</
9180: 74 63 6c 3e 0a 3c 68 33 3e 32 2e 31 20 52 65 63  tcl>.<h3>2.1 Rec
9190: 6f 72 64 20 46 6f 72 6d 61 74 3c 2f 68 33 3e 0a  ord Format</h3>.
91a0: 0a 3c 70 3e 54 68 65 20 63 6f 6e 74 65 6e 74 20  .<p>The content 
91b0: 6f 66 20 61 20 74 61 62 6c 65 20 62 2d 74 72 65  of a table b-tre
91c0: 65 20 6c 65 61 66 20 70 61 67 65 20 61 6e 64 20  e leaf page and 
91d0: 74 68 65 20 6b 65 79 0a 6f 66 20 61 6e 79 20 69  the key.of any i
91e0: 6e 64 65 78 20 62 2d 74 72 65 65 20 70 61 67 65  ndex b-tree page
91f0: 20 77 61 73 20 63 68 61 72 61 63 74 65 72 69 7a   was characteriz
9200: 65 64 20 61 62 6f 76 65 0a 61 73 20 61 6e 20 61  ed above.as an a
9210: 72 62 69 74 72 61 72 79 20 73 65 71 75 65 6e 63  rbitrary sequenc
9220: 65 20 6f 66 20 62 79 74 65 73 2e 0a 54 68 65 20  e of bytes..The 
9230: 70 72 69 6f 72 20 64 69 73 63 75 73 73 69 6f 6e  prior discussion
9240: 20 6d 65 6e 74 69 6f 6e 65 64 20 6f 6e 65 20 6b   mentioned one k
9250: 65 79 20 62 65 69 6e 67 20 6c 65 73 73 20 74 68  ey being less th
9260: 61 6e 20 61 6e 6f 74 68 65 72 2c 20 62 75 74 0a  an another, but.
9270: 64 69 64 20 6e 6f 74 20 64 65 66 69 6e 65 20 77  did not define w
9280: 68 61 74 20 22 6c 65 73 73 20 74 68 61 6e 22 20  hat "less than" 
9290: 6d 65 61 6e 74 2e 20 20 54 68 65 20 63 75 72 72  meant.  The curr
92a0: 65 6e 74 20 73 65 63 74 69 6f 6e 20 77 69 6c 6c  ent section will
92b0: 20 61 64 64 72 65 73 73 0a 74 68 65 73 65 20 64   address.these d
92c0: 65 66 69 63 69 65 6e 63 69 65 73 2e 3c 2f 70 3e  eficiencies.</p>
92d0: 0a 0a 3c 70 3e 50 61 79 6c 6f 61 64 2c 20 62 65  ..<p>Payload, be
92e0: 20 69 74 20 74 61 62 6c 65 20 63 6f 6e 74 65 6e   it table conten
92f0: 74 20 6f 72 20 69 6e 64 65 78 20 6b 65 79 73 2c  t or index keys,
9300: 20 69 73 20 61 6c 77 61 79 73 20 69 6e 20 74 68   is always in th
9310: 65 20 22 72 65 63 6f 72 64 0a 66 6f 72 6d 61 74  e "record.format
9320: 22 2e 20 20 54 68 65 20 72 65 63 6f 72 64 20 66  ".  The record f
9330: 6f 72 6d 61 74 20 64 65 66 69 6e 65 73 20 61 20  ormat defines a 
9340: 73 65 71 75 65 6e 63 65 20 6f 66 20 76 61 6c 75  sequence of valu
9350: 65 73 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  es corresponding
9360: 20 74 6f 0a 74 6f 20 63 6f 6c 75 6d 6e 73 20 69   to.to columns i
9370: 6e 20 61 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  n a table or ind
9380: 65 78 2e 20 20 54 68 65 20 72 65 63 6f 72 64 20  ex.  The record 
9390: 66 6f 72 6d 61 74 20 73 70 65 63 69 66 69 65 73  format specifies
93a0: 20 74 68 65 20 6e 75 6d 62 65 72 0a 6f 66 20 63   the number.of c
93b0: 6f 6c 75 6d 6e 73 2c 20 74 68 65 20 64 61 74 61  olumns, the data
93c0: 74 79 70 65 20 6f 66 20 65 61 63 68 20 63 6f 6c  type of each col
93d0: 75 6d 6e 2c 20 61 6e 64 20 74 68 65 20 63 6f 6e  umn, and the con
93e0: 74 65 6e 74 20 6f 66 20 65 61 63 68 20 63 6f 6c  tent of each col
93f0: 75 6d 6e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  umn.</p>..<p>The
9400: 20 72 65 63 6f 72 64 20 66 6f 72 6d 61 74 20 6d   record format m
9410: 61 6b 65 73 20 65 78 74 65 6e 73 69 76 65 20 75  akes extensive u
9420: 73 65 20 6f 66 20 74 68 65 20 0a 5b 76 61 72 69  se of the .[vari
9430: 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65  able-length inte
9440: 67 65 72 5d 20 6f 72 20 5b 76 61 72 69 6e 74 5d  ger] or [varint]
9450: 0a 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20  .representation 
9460: 6f 66 20 36 34 2d 62 69 74 20 73 69 67 6e 65 64  of 64-bit signed
9470: 20 69 6e 74 65 67 65 72 73 20 64 65 66 69 6e 65   integers define
9480: 64 20 61 62 6f 76 65 2e 3c 2f 70 3e 0a 0a 3c 74  d above.</p>..<t
9490: 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 73  cl>hd_fragment s
94a0: 65 72 69 61 6c 74 79 70 65 20 7b 73 65 72 69 61  erialtype {seria
94b0: 6c 20 74 79 70 65 7d 20 7b 73 65 72 69 61 6c 20  l type} {serial 
94c0: 74 79 70 65 73 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e  types}</tcl>.<p>
94d0: 41 20 72 65 63 6f 72 64 20 63 6f 6e 74 61 69 6e  A record contain
94e0: 73 20 61 20 68 65 61 64 65 72 20 61 6e 64 20 61  s a header and a
94f0: 20 62 6f 64 79 2c 20 69 6e 20 74 68 61 74 20 6f   body, in that o
9500: 72 64 65 72 2e 20 20 0a 54 68 65 20 68 65 61 64  rder.  .The head
9510: 65 72 20 62 65 67 69 6e 73 20 77 69 74 68 20 61  er begins with a
9520: 20 73 69 6e 67 6c 65 20 76 61 72 69 6e 74 20 77   single varint w
9530: 68 69 63 68 20 64 65 74 65 72 6d 69 6e 65 73 20  hich determines 
9540: 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72  the total number
9550: 0a 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68 65  .of bytes in the
9560: 20 68 65 61 64 65 72 2e 20 20 54 68 65 20 76 61   header.  The va
9570: 72 69 6e 74 20 76 61 6c 75 65 20 69 73 20 74 68  rint value is th
9580: 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 68 65  e size of the he
9590: 61 64 65 72 20 69 6e 0a 62 79 74 65 20 69 6e 63  ader in.byte inc
95a0: 6c 75 64 69 6e 67 20 74 68 65 20 73 69 7a 65 20  luding the size 
95b0: 76 61 72 69 6e 74 20 69 74 73 65 6c 66 2e 20 20  varint itself.  
95c0: 46 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20 73 69  Following the si
95d0: 7a 65 20 76 61 72 69 6e 74 20 61 72 65 0a 6f 6e  ze varint are.on
95e0: 65 20 6f 72 20 6d 6f 72 65 20 61 64 64 69 74 69  e or more additi
95f0: 6f 6e 61 6c 20 76 61 72 69 6e 74 73 2c 20 6f 6e  onal varints, on
9600: 65 20 70 65 72 20 63 6f 6c 75 6d 6e 2e 20 20 54  e per column.  T
9610: 68 65 73 65 20 61 64 64 69 74 69 6f 6e 61 6c 20  hese additional 
9620: 76 61 72 69 6e 74 73 0a 61 72 65 20 63 61 6c 6c  varints.are call
9630: 65 64 20 22 73 65 72 69 61 6c 20 74 79 70 65 22  ed "serial type"
9640: 20 6e 75 6d 62 65 72 73 20 61 6e 64 0a 64 65 74   numbers and.det
9650: 65 72 6d 69 6e 65 20 74 68 65 20 64 61 74 61 74  ermine the datat
9660: 79 70 65 20 6f 66 20 65 61 63 68 20 63 6f 6c 75  ype of each colu
9670: 6d 6e 2c 20 61 63 63 6f 72 64 69 6e 67 20 74 6f  mn, according to
9680: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6b   the following k
9690: 65 79 3a 3c 2f 70 3e 0a 0a 3c 63 65 6e 74 65 72  ey:</p>..<center
96a0: 3e 0a 3c 69 3e 53 65 72 69 61 6c 20 54 79 70 65  >.<i>Serial Type
96b0: 20 43 6f 64 65 73 20 4f 66 20 54 68 65 20 52 65   Codes Of The Re
96c0: 63 6f 72 64 20 46 6f 72 6d 61 74 3c 2f 69 3e 3c  cord Format</i><
96d0: 62 72 3e 0a 3c 74 61 62 6c 65 20 77 69 64 74 68  br>.<table width
96e0: 3d 22 38 30 25 22 20 62 6f 72 64 65 72 3d 31 3e  ="80%" border=1>
96f0: 0a 3c 74 72 3e 3c 74 68 3e 53 65 72 69 61 6c 20  .<tr><th>Serial 
9700: 54 79 70 65 3c 74 68 3e 43 6f 6e 74 65 6e 74 20  Type<th>Content 
9710: 53 69 7a 65 3c 74 68 3e 4d 65 61 6e 69 6e 67 0a  Size<th>Meaning.
9720: 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74  <tr><td valign=t
9730: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
9740: 30 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  0<td valign=top 
9750: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 30 3c 74  align=center>0<t
9760: 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 4e 55  d align=left>.NU
9770: 4c 4c 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  LL.<tr><td valig
9780: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
9790: 65 72 3e 31 3c 74 64 20 76 61 6c 69 67 6e 3d 74  er>1<td valign=t
97a0: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
97b0: 31 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e  1<td align=left>
97c0: 0a 38 2d 62 69 74 20 74 77 6f 73 2d 63 6f 6d 70  .8-bit twos-comp
97d0: 6c 65 6d 65 6e 74 20 69 6e 74 65 67 65 72 0a 3c  lement integer.<
97e0: 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
97f0: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32  p align=center>2
9800: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
9810: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32 3c 74 64  lign=center>2<td
9820: 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 42 69 67   align=left>.Big
9830: 2d 65 6e 64 69 61 6e 20 31 36 2d 62 69 74 20 74  -endian 16-bit t
9840: 77 6f 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 69  wos-complement i
9850: 6e 74 65 67 65 72 0a 3c 74 72 3e 3c 74 64 20 76  nteger.<tr><td v
9860: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
9870: 63 65 6e 74 65 72 3e 33 3c 74 64 20 76 61 6c 69  center>3<td vali
9880: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
9890: 74 65 72 3e 33 3c 74 64 20 61 6c 69 67 6e 3d 6c  ter>3<td align=l
98a0: 65 66 74 3e 0a 42 69 67 2d 65 6e 64 69 61 6e 20  eft>.Big-endian 
98b0: 32 34 2d 62 69 74 20 74 77 6f 73 2d 63 6f 6d 70  24-bit twos-comp
98c0: 6c 65 6d 65 6e 74 20 69 6e 74 65 67 65 72 0a 3c  lement integer.<
98d0: 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
98e0: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34  p align=center>4
98f0: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
9900: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 3c 74 64  lign=center>4<td
9910: 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 42 69 67   align=left>.Big
9920: 2d 65 6e 64 69 61 6e 20 33 32 2d 62 69 74 20 74  -endian 32-bit t
9930: 77 6f 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 69  wos-complement i
9940: 6e 74 65 67 65 72 0a 3c 74 72 3e 3c 74 64 20 76  nteger.<tr><td v
9950: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
9960: 63 65 6e 74 65 72 3e 35 3c 74 64 20 76 61 6c 69  center>5<td vali
9970: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
9980: 74 65 72 3e 36 3c 74 64 20 61 6c 69 67 6e 3d 6c  ter>6<td align=l
9990: 65 66 74 3e 0a 42 69 67 2d 65 6e 64 69 61 6e 20  eft>.Big-endian 
99a0: 34 38 2d 62 69 74 20 74 77 6f 73 2d 63 6f 6d 70  48-bit twos-comp
99b0: 6c 65 6d 65 6e 74 20 69 6e 74 65 67 65 72 0a 3c  lement integer.<
99c0: 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
99d0: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 36  p align=center>6
99e0: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
99f0: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 38 3c 74 64  lign=center>8<td
9a00: 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 42 69 67   align=left>.Big
9a10: 2d 65 6e 64 69 61 6e 20 36 34 2d 62 69 74 20 74  -endian 64-bit t
9a20: 77 6f 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 69  wos-complement i
9a30: 6e 74 65 67 65 72 0a 3c 74 72 3e 3c 74 64 20 76  nteger.<tr><td v
9a40: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
9a50: 63 65 6e 74 65 72 3e 37 3c 74 64 20 76 61 6c 69  center>7<td vali
9a60: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
9a70: 74 65 72 3e 38 3c 74 64 20 61 6c 69 67 6e 3d 6c  ter>8<td align=l
9a80: 65 66 74 3e 0a 42 69 67 2d 65 6e 64 69 61 6e 20  eft>.Big-endian 
9a90: 49 45 45 45 20 37 35 34 2d 32 30 30 38 20 36 34  IEEE 754-2008 64
9aa0: 2d 62 69 74 20 66 6c 6f 61 74 69 6e 67 20 70 6f  -bit floating po
9ab0: 69 6e 74 20 6e 75 6d 62 65 72 0a 3c 74 72 3e 3c  int number.<tr><
9ac0: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
9ad0: 69 67 6e 3d 63 65 6e 74 65 72 3e 38 3c 74 64 20  ign=center>8<td 
9ae0: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
9af0: 3d 63 65 6e 74 65 72 3e 30 3c 74 64 20 61 6c 69  =center>0<td ali
9b00: 67 6e 3d 6c 65 66 74 3e 0a 49 6e 74 65 67 65 72  gn=left>.Integer
9b10: 20 63 6f 6e 73 74 61 6e 74 20 30 2e 20 20 4f 6e   constant 0.  On
9b20: 6c 79 20 61 76 61 69 6c 61 62 6c 65 20 66 6f 72  ly available for
9b30: 20 73 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 34   schema format 4
9b40: 20 61 6e 64 20 68 69 67 68 65 72 2e 0a 3c 74 72   and higher..<tr
9b50: 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
9b60: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 39 3c 74  align=center>9<t
9b70: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
9b80: 67 6e 3d 63 65 6e 74 65 72 3e 30 3c 74 64 20 61  gn=center>0<td a
9b90: 6c 69 67 6e 3d 6c 65 66 74 3e 0a 49 6e 74 65 67  lign=left>.Integ
9ba0: 65 72 20 63 6f 6e 73 74 61 6e 74 20 31 2e 20 20  er constant 1.  
9bb0: 4f 6e 6c 79 20 61 76 61 69 6c 61 62 6c 65 20 66  Only available f
9bc0: 6f 72 20 73 63 68 65 6d 61 20 66 6f 72 6d 61 74  or schema format
9bd0: 20 34 20 61 6e 64 20 68 69 67 68 65 72 2e 0a 3c   4 and higher..<
9be0: 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
9bf0: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31  p align=center>1
9c00: 30 2c 31 31 0a 20 20 20 20 3c 74 64 20 76 61 6c  0,11.    <td val
9c10: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
9c20: 6e 74 65 72 3e 26 6e 62 73 70 3b 3c 74 64 20 61  nter>&nbsp;<td a
9c30: 6c 69 67 6e 3d 6c 65 66 74 3e 0a 3c 69 3e 4e 6f  lign=left>.<i>No
9c40: 74 20 75 73 65 64 2e 20 20 52 65 73 65 72 76 65  t used.  Reserve
9c50: 64 20 66 6f 72 20 65 78 70 61 6e 73 69 6f 6e 2e  d for expansion.
9c60: 3c 2f 69 3e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c  </i>.<tr><td val
9c70: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
9c80: 6e 74 65 72 3e 4e 26 23 78 32 32 36 35 3b 31 32  nter>N&#x2265;12
9c90: 20 61 6e 64 20 65 76 65 6e 0a 20 20 20 20 3c 74   and even.    <t
9ca0: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
9cb0: 67 6e 3d 63 65 6e 74 65 72 3e 28 4e 2d 31 32 29  gn=center>(N-12)
9cc0: 2f 32 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74  /2<td align=left
9cd0: 3e 0a 41 20 73 74 72 69 6e 67 20 69 6e 20 74 68  >.A string in th
9ce0: 65 20 64 61 74 61 62 61 73 65 20 65 6e 63 6f 64  e database encod
9cf0: 69 6e 67 20 61 6e 64 20 28 4e 2d 31 32 29 2f 32  ing and (N-12)/2
9d00: 20 62 79 74 65 73 20 69 6e 20 6c 65 6e 67 74 68   bytes in length
9d10: 2e 0a 54 68 65 20 6e 75 6c 20 74 65 72 6d 69 6e  ..The nul termin
9d20: 61 74 6f 72 20 69 73 20 6f 6d 69 74 74 65 64 2e  ator is omitted.
9d30: 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d  .<tr><td valign=
9d40: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
9d50: 3e 4e 26 23 78 32 32 36 35 3b 31 33 20 61 6e 64  >N&#x2265;13 and
9d60: 20 6f 64 64 0a 20 20 20 20 3c 74 64 20 76 61 6c   odd.    <td val
9d70: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
9d80: 6e 74 65 72 3e 28 4e 2d 31 33 29 2f 32 3c 74 64  nter>(N-13)/2<td
9d90: 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 41 20 42   align=left>.A B
9da0: 4c 4f 42 20 74 68 61 74 20 69 73 20 28 4e 2d 31  LOB that is (N-1
9db0: 33 29 2f 32 20 62 79 74 65 73 20 69 6e 20 6c 65  3)/2 bytes in le
9dc0: 6e 67 74 68 0a 3c 2f 74 61 62 6c 65 3e 3c 2f 63  ngth.</table></c
9dd0: 65 6e 74 65 72 3e 0a 0a 3c 70 3e 4e 6f 74 65 20  enter>..<p>Note 
9de0: 74 68 61 74 20 62 65 63 61 75 73 65 20 6f 66 20  that because of 
9df0: 74 68 65 20 77 61 79 20 76 61 72 69 6e 74 73 20  the way varints 
9e00: 61 72 65 20 64 65 66 69 6e 65 64 2c 20 74 68 65  are defined, the
9e10: 20 68 65 61 64 65 72 20 73 69 7a 65 20 76 61 72   header size var
9e20: 69 6e 74 0a 61 6e 64 20 73 65 72 69 61 6c 20 74  int.and serial t
9e30: 79 70 65 20 76 61 72 69 6e 74 73 20 77 69 6c 6c  ype varints will
9e40: 20 75 73 75 61 6c 6c 79 20 63 6f 6e 73 69 73 74   usually consist
9e50: 20 6f 66 20 61 20 73 69 6e 67 6c 65 20 62 79 74   of a single byt
9e60: 65 2e 20 20 54 68 65 0a 73 65 72 69 61 6c 20 74  e.  The.serial t
9e70: 79 70 65 20 76 61 72 69 6e 74 73 20 66 6f 72 20  ype varints for 
9e80: 6c 61 72 67 65 20 73 74 72 69 6e 67 73 20 61 6e  large strings an
9e90: 64 20 42 4c 4f 42 73 20 6d 69 67 68 74 20 65 78  d BLOBs might ex
9ea0: 74 65 6e 64 20 74 6f 20 74 77 6f 20 6f 72 20 74  tend to two or t
9eb0: 68 72 65 65 0a 62 79 74 65 20 76 61 72 69 6e 74  hree.byte varint
9ec0: 73 2c 20 62 75 74 20 74 68 61 74 20 69 73 20 74  s, but that is t
9ed0: 68 65 20 65 78 63 65 70 74 69 6f 6e 20 72 61 74  he exception rat
9ee0: 68 65 72 20 74 68 61 6e 20 74 68 65 20 72 75 6c  her than the rul
9ef0: 65 2e 20 0a 54 68 65 20 76 61 72 69 6e 74 20 66  e. .The varint f
9f00: 6f 72 6d 61 74 20 69 73 20 76 65 72 79 20 65 66  ormat is very ef
9f10: 66 69 63 69 65 6e 74 20 61 74 20 63 6f 64 69 6e  ficient at codin
9f20: 67 20 74 68 65 20 72 65 63 6f 72 64 20 68 65 61  g the record hea
9f30: 64 65 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  der.</p>..<p>The
9f40: 20 76 61 6c 75 65 73 20 66 6f 72 20 65 61 63 68   values for each
9f50: 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 72   column in the r
9f60: 65 63 6f 72 64 20 69 6d 6d 65 64 69 61 74 65 6c  ecord immediatel
9f70: 79 20 66 6f 6c 6c 6f 77 20 74 68 65 20 68 65 61  y follow the hea
9f80: 64 65 72 2e 0a 4e 6f 74 65 20 74 68 61 74 20 66  der..Note that f
9f90: 6f 72 20 73 65 72 69 61 6c 20 74 79 70 65 73 20  or serial types 
9fa0: 30 2c 20 38 2c 20 39 2c 20 31 32 2c 20 61 6e 64  0, 8, 9, 12, and
9fb0: 20 31 33 2c 20 74 68 65 20 76 61 6c 75 65 20 69   13, the value i
9fc0: 73 20 7a 65 72 6f 20 62 79 74 65 73 20 69 6e 0a  s zero bytes in.
9fd0: 6c 65 6e 67 74 68 2e 20 20 49 66 20 61 6c 6c 20  length.  If all 
9fe0: 63 6f 6c 75 6d 6e 73 20 61 72 65 20 6f 66 20 74  columns are of t
9ff0: 68 65 73 65 20 74 79 70 65 73 20 74 68 65 6e 20  hese types then 
a000: 74 68 65 20 62 6f 64 79 20 73 65 63 74 69 6f 6e  the body section
a010: 20 6f 66 20 74 68 65 0a 72 65 63 6f 72 64 20 69   of the.record i
a020: 73 20 65 6d 70 74 79 2e 3c 2f 70 3e 0a 0a 3c 68  s empty.</p>..<h
a030: 33 3e 32 2e 32 20 52 65 63 6f 72 64 20 53 6f 72  3>2.2 Record Sor
a040: 74 20 4f 72 64 65 72 3c 2f 68 33 3e 0a 0a 3c 70  t Order</h3>..<p
a050: 3e 54 68 65 20 6f 72 64 65 72 20 6f 66 20 6b 65  >The order of ke
a060: 79 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 62  ys in an index b
a070: 2d 74 72 65 65 20 69 73 20 64 65 74 65 72 6d 69  -tree is determi
a080: 6e 65 64 20 62 79 20 74 68 65 20 73 6f 72 74 20  ned by the sort 
a090: 6f 72 64 65 72 20 6f 66 0a 74 68 65 20 72 65 63  order of.the rec
a0a0: 6f 72 64 73 20 74 68 61 74 20 74 68 65 20 6b 65  ords that the ke
a0b0: 79 73 20 72 65 70 72 65 73 65 6e 74 2e 20 20 52  ys represent.  R
a0c0: 65 63 6f 72 64 20 63 6f 6d 70 61 72 69 73 6f 6e  ecord comparison
a0d0: 20 70 72 6f 63 65 65 64 73 20 63 6f 6c 75 6d 6e   proceeds column
a0e0: 0a 62 79 20 63 6f 6c 75 6d 6e 2e 20 20 43 6f 6c  .by column.  Col
a0f0: 75 6d 6e 73 20 6f 66 20 61 20 72 65 63 6f 72 64  umns of a record
a100: 20 61 72 65 20 65 78 61 6d 69 6e 65 64 20 66 72   are examined fr
a110: 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74  om left to right
a120: 2e 20 20 54 68 65 0a 66 69 72 73 74 20 70 61 69  .  The.first pai
a130: 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 74 68 61  r of columns tha
a140: 74 20 61 72 65 20 6e 6f 74 20 65 71 75 61 6c 20  t are not equal 
a150: 64 65 74 65 72 6d 69 6e 65 73 20 74 68 65 20 72  determines the r
a160: 65 6c 61 74 69 76 65 20 6f 72 64 65 72 0a 6f 66  elative order.of
a170: 20 74 68 65 20 74 77 6f 20 72 65 63 6f 72 64 73   the two records
a180: 2e 20 20 54 68 65 20 73 6f 72 74 20 6f 72 64 65  .  The sort orde
a190: 72 20 6f 66 20 69 6e 64 69 76 69 64 75 61 6c 20  r of individual 
a1a0: 63 6f 6c 75 6d 6e 73 20 69 73 20 61 73 0a 66 6f  columns is as.fo
a1b0: 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e  llows:</p>..<ol>
a1c0: 0a 3c 6c 69 3e 4e 55 4c 4c 20 76 61 6c 75 65 73  .<li>NULL values
a1d0: 20 28 73 65 72 69 61 6c 20 74 79 70 65 20 30 29   (serial type 0)
a1e0: 20 73 6f 72 74 20 66 69 72 73 74 0a 3c 6c 69 3e   sort first.<li>
a1f0: 4e 75 6d 65 72 69 63 20 76 61 6c 75 65 73 20 28  Numeric values (
a200: 73 65 72 69 61 6c 20 74 79 70 65 73 20 31 20 74  serial types 1 t
a210: 68 72 6f 75 67 68 20 39 29 20 73 6f 72 74 20 6e  hrough 9) sort n
a220: 65 78 74 20 61 6e 64 20 69 6e 20 6e 75 6d 65 72  ext and in numer
a230: 69 63 20 6f 72 64 65 72 0a 3c 6c 69 3e 54 65 78  ic order.<li>Tex
a240: 74 20 76 61 6c 75 65 73 20 28 65 76 65 6e 20 73  t values (even s
a250: 65 72 69 61 6c 20 74 79 70 65 73 20 31 32 20 61  erial types 12 a
a260: 6e 64 20 6c 61 72 67 65 72 29 20 73 6f 72 74 20  nd larger) sort 
a270: 6e 65 78 74 20 69 6e 20 74 68 65 20 6f 72 64 65  next in the orde
a280: 72 0a 20 20 20 20 64 65 74 65 72 6d 69 6e 65 64  r.    determined
a290: 20 62 79 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20   by the columns 
a2a0: 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69  collating functi
a2b0: 6f 6e 0a 3c 6c 69 3e 42 4c 4f 42 20 76 61 6c 75  on.<li>BLOB valu
a2c0: 65 73 20 28 6f 64 64 20 73 65 72 69 61 6c 20 74  es (odd serial t
a2d0: 79 70 65 73 20 31 33 20 61 6e 64 20 6c 61 72 67  ypes 13 and larg
a2e0: 65 72 29 20 73 6f 72 74 20 6c 61 73 74 20 69 6e  er) sort last in
a2f0: 20 6f 72 64 65 72 20 0a 20 20 20 20 64 65 74 65   order .    dete
a300: 72 6d 69 6e 65 64 20 62 79 20 6d 65 6d 63 6d 70  rmined by memcmp
a310: 28 29 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 41 20  ()..</ol>..<p>A 
a320: 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69  collating functi
a330: 6f 6e 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75  on for each colu
a340: 6d 6e 20 69 73 20 6e 65 63 65 73 73 61 72 79 20  mn is necessary 
a350: 69 6e 20 6f 72 64 65 72 20 74 6f 20 63 6f 6d 70  in order to comp
a360: 75 74 65 0a 74 68 65 20 6f 72 64 65 72 20 6f 66  ute.the order of
a370: 20 74 65 78 74 20 66 69 65 6c 64 73 2e 20 20 53   text fields.  S
a380: 51 4c 69 74 65 20 64 65 66 69 6e 65 73 20 74 68  QLite defines th
a390: 72 65 65 20 62 75 69 6c 74 2d 69 6e 20 63 6f 6c  ree built-in col
a3a0: 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 73  lating functions
a3b0: 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75  :.</p>..<blockqu
a3c0: 6f 74 65 3e 3c 74 61 62 6c 65 20 62 6f 72 64 65  ote><table borde
a3d0: 72 3d 30 20 63 65 6c 6c 73 70 61 63 69 6e 67 3d  r=0 cellspacing=
a3e0: 31 30 3e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  10>.<tr><td vali
a3f0: 67 6e 3d 74 6f 70 3e 42 49 4e 41 52 59 0a 20 20  gn=top>BINARY.  
a400: 20 20 3c 74 64 3e 53 74 72 69 6e 67 73 20 61 72    <td>Strings ar
a410: 65 20 63 6f 6d 70 61 72 69 65 64 20 62 79 74 65  e comparied byte
a420: 20 62 79 20 62 79 74 65 20 75 73 69 6e 67 20 74   by byte using t
a430: 68 65 20 6d 65 6d 63 6d 70 28 29 20 66 75 6e 63  he memcmp() func
a440: 74 69 6f 6e 0a 20 20 20 20 20 20 20 20 66 72 6f  tion.        fro
a450: 6d 20 74 68 65 20 73 74 61 6e 64 61 72 64 20 43  m the standard C
a460: 20 6c 69 62 72 61 72 79 2e 0a 3c 74 72 3e 3c 74   library..<tr><t
a470: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 4e 4f 43  d valign=top>NOC
a480: 41 53 45 0a 20 20 20 20 3c 74 64 3e 4c 69 6b 65  ASE.    <td>Like
a490: 20 42 49 4e 41 52 59 20 65 78 63 65 70 74 20 74   BINARY except t
a4a0: 68 61 74 20 75 70 70 65 72 63 61 73 65 20 41 53  hat uppercase AS
a4b0: 43 49 49 20 63 68 61 72 61 63 74 65 72 73 20 28  CII characters (
a4c0: 27 41 27 20 74 68 72 6f 75 67 68 20 27 5a 27 29  'A' through 'Z')
a4d0: 0a 20 20 20 20 20 20 20 20 61 72 65 20 66 6f 6c  .        are fol
a4e0: 64 65 64 20 69 6e 74 6f 20 74 68 65 69 72 20 6c  ded into their l
a4f0: 6f 77 65 72 63 61 73 65 20 65 71 75 69 76 61 6c  owercase equival
a500: 65 6e 74 73 20 70 72 69 6f 72 20 74 6f 20 72 75  ents prior to ru
a510: 6e 6e 69 6e 67 20 74 68 65 0a 20 20 20 20 20 20  nning the.      
a520: 20 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 4e    comparison.  N
a530: 6f 74 65 20 74 68 61 74 20 6f 6e 6c 79 20 41 53  ote that only AS
a540: 43 49 49 20 63 68 61 72 61 63 74 65 72 73 20 61  CII characters a
a550: 72 65 20 63 61 73 65 2d 66 6f 6c 64 65 64 2e 20  re case-folded. 
a560: 20 4e 4f 43 41 53 45 0a 20 20 20 20 20 20 20 20   NOCASE.        
a570: 64 6f 65 73 20 6e 6f 74 20 69 6d 70 6c 65 6d 65  does not impleme
a580: 6e 74 20 61 20 67 65 6e 65 72 61 6c 20 70 75 72  nt a general pur
a590: 70 6f 73 65 20 75 6e 69 63 6f 64 65 20 63 61 73  pose unicode cas
a5a0: 65 6c 65 73 73 20 63 6f 6d 70 61 72 69 73 6f 6e  eless comparison
a5b0: 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  ..<tr><td valign
a5c0: 3d 74 6f 70 3e 52 54 52 49 4d 0a 20 20 20 20 3c  =top>RTRIM.    <
a5d0: 74 64 3e 4c 69 6b 65 20 42 49 4e 41 52 59 20 65  td>Like BINARY e
a5e0: 78 63 65 70 74 20 74 68 61 74 20 73 70 61 63 65  xcept that space
a5f0: 73 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20  s at the end of 
a600: 74 68 65 20 73 74 72 69 6e 67 20 61 72 65 20 65  the string are e
a610: 6c 69 64 65 64 0a 20 20 20 20 20 20 20 20 70 72  lided.        pr
a620: 69 6f 72 20 74 6f 20 63 6f 6d 70 61 72 69 73 6f  ior to compariso
a630: 6e 2e 0a 3c 2f 74 61 62 6c 65 3e 3c 2f 62 6c 6f  n..</table></blo
a640: 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 41 64 64  ckquote>..<p>Add
a650: 69 74 69 6f 6e 61 6c 20 61 70 70 6c 69 63 61 74  itional applicat
a660: 69 6f 6e 2d 73 70 65 63 69 66 69 63 20 63 6f 6c  ion-specific col
a670: 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 73  lating functions
a680: 20 63 61 6e 20 62 65 20 61 64 64 65 64 20 74 6f   can be added to
a690: 0a 53 51 4c 69 74 65 20 75 73 69 6e 67 20 74 68  .SQLite using th
a6a0: 65 20 5b 73 71 6c 69 74 65 33 5f 63 72 65 61 74  e [sqlite3_creat
a6b0: 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 29 5d 20 69  e_collation()] i
a6c0: 6e 74 65 72 66 61 63 65 2e 3c 2f 70 3e 0a 0a 3c  nterface.</p>..<
a6d0: 70 3e 54 68 65 20 64 65 66 61 75 6c 74 20 63 6f  p>The default co
a6e0: 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e  llating function
a6f0: 20 66 6f 72 20 61 6c 6c 20 73 74 72 69 6e 67 73   for all strings
a700: 20 69 73 20 42 49 4e 41 52 59 2e 0a 41 6c 74 65   is BINARY..Alte
a710: 72 6e 61 74 69 76 65 20 63 6f 6c 6c 61 74 69 6e  rnative collatin
a720: 67 20 66 75 6e 63 74 69 6f 6e 73 20 66 6f 72 20  g functions for 
a730: 74 61 62 6c 65 20 63 6f 6c 75 6d 6e 73 20 63 61  table columns ca
a740: 6e 20 62 65 20 73 70 65 63 69 66 69 65 64 20 69  n be specified i
a750: 6e 20 74 68 65 0a 5b 43 52 45 41 54 45 20 54 41  n the.[CREATE TA
a760: 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74 20 75  BLE] statement u
a770: 73 69 6e 67 20 74 68 65 20 43 4f 4c 4c 41 54 45  sing the COLLATE
a780: 20 63 6c 61 75 73 65 20 6f 6e 20 74 68 65 20 63   clause on the c
a790: 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e  olumn definition
a7a0: 2e 0a 57 68 65 6e 20 61 20 63 6f 6c 75 6d 6e 20  ..When a column 
a7b0: 69 73 20 69 6e 64 65 78 65 64 2c 20 74 68 65 20  is indexed, the 
a7c0: 73 61 6d 65 20 63 6f 6c 6c 61 74 69 6e 67 20 66  same collating f
a7d0: 75 6e 63 74 69 6f 6e 20 73 70 65 63 69 66 69 65  unction specifie
a7e0: 64 20 69 6e 20 74 68 65 0a 5b 43 52 45 41 54 45  d in the.[CREATE
a7f0: 20 54 41 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e   TABLE] statemen
a800: 74 20 69 73 20 75 73 65 64 20 66 6f 72 20 74 68  t is used for th
a810: 65 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20  e column in the 
a820: 69 6e 64 65 78 2c 20 62 79 20 64 65 66 61 75 6c  index, by defaul
a830: 74 2c 0a 74 68 6f 75 67 68 20 74 68 69 73 20 63  t,.though this c
a840: 61 6e 20 62 65 20 6f 76 65 72 72 69 64 64 65 6e  an be overridden
a850: 20 75 73 69 6e 67 20 61 20 43 4f 4c 4c 41 54 45   using a COLLATE
a860: 20 63 6c 61 75 73 65 20 69 6e 20 74 68 65 20 0a   clause in the .
a870: 5b 43 52 45 41 54 45 20 49 4e 44 45 58 5d 20 73  [CREATE INDEX] s
a880: 74 61 74 65 6d 65 6e 74 2e 0a 0a 3c 68 33 3e 32  tatement...<h3>2
a890: 2e 33 20 52 65 70 72 65 73 65 6e 74 61 74 69 6f  .3 Representatio
a8a0: 6e 20 4f 66 20 53 51 4c 20 54 61 62 6c 65 73 3c  n Of SQL Tables<
a8b0: 2f 68 33 3e 0a 0a 3c 70 3e 45 61 63 68 20 6f 72  /h3>..<p>Each or
a8c0: 64 69 6e 61 72 79 20 53 51 4c 20 74 61 62 6c 65  dinary SQL table
a8d0: 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
a8e0: 20 73 63 68 65 6d 61 20 69 73 20 72 65 70 72 65   schema is repre
a8f0: 73 65 6e 74 65 64 20 6f 6e 20 64 69 73 6b 0a 62  sented on disk.b
a900: 79 20 61 20 74 61 62 6c 65 20 62 2d 74 72 65 65  y a table b-tree
a910: 2e 20 20 45 61 63 68 20 65 6e 74 72 79 20 69 6e  .  Each entry in
a920: 20 74 68 65 20 74 61 62 6c 65 20 62 2d 74 72 65   the table b-tre
a930: 65 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  e corresponds to
a940: 20 61 20 72 6f 77 0a 6f 66 20 74 68 65 20 53 51   a row.of the SQ
a950: 4c 20 74 61 62 6c 65 2e 20 20 54 68 65 20 5b 72  L table.  The [r
a960: 6f 77 69 64 5d 20 6f 66 20 74 68 65 20 53 51 4c  owid] of the SQL
a970: 20 74 61 62 6c 65 20 69 73 20 74 68 65 20 36 34   table is the 64
a980: 2d 62 69 74 20 73 69 67 6e 65 64 0a 69 6e 74 65  -bit signed.inte
a990: 67 65 72 20 6b 65 79 20 66 6f 72 20 65 61 63 68  ger key for each
a9a0: 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20 74 61   entry in the ta
a9b0: 62 6c 65 20 62 2d 74 72 65 65 2e 3c 2f 70 3e 0a  ble b-tree.</p>.
a9c0: 0a 3c 70 3e 54 68 65 20 63 6f 6e 74 65 6e 74 20  .<p>The content 
a9d0: 6f 66 20 65 61 63 68 20 53 51 4c 20 74 61 62 6c  of each SQL tabl
a9e0: 65 20 72 6f 77 20 69 73 20 73 74 6f 72 65 64 20  e row is stored 
a9f0: 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
aa00: 66 69 6c 65 20 62 79 0a 66 69 72 73 74 20 63 6f  file by.first co
aa10: 6d 62 69 6e 69 6e 67 20 74 68 65 20 76 61 6c 75  mbining the valu
aa20: 65 73 20 69 6e 20 74 68 65 20 76 61 72 69 6f 75  es in the variou
aa30: 73 20 63 6f 6c 75 6d 6e 73 20 69 6e 74 6f 20 61  s columns into a
aa40: 20 62 79 74 65 20 61 72 72 61 79 0a 69 6e 20 74   byte array.in t
aa50: 68 65 20 72 65 63 6f 72 64 20 66 6f 72 6d 61 74  he record format
aa60: 2c 20 74 68 65 6e 20 73 74 6f 72 69 6e 67 20 74  , then storing t
aa70: 68 61 74 20 62 79 74 65 20 61 72 72 61 79 20 61  hat byte array a
aa80: 73 20 74 68 65 20 70 61 79 6c 6f 61 64 20 69 6e  s the payload in
aa90: 0a 61 6e 20 65 6e 74 72 79 20 69 6e 20 74 68 65  .an entry in the
aaa0: 20 74 61 62 6c 65 20 62 2d 74 72 65 65 2e 20 20   table b-tree.  
aab0: 54 68 65 20 6f 72 64 65 72 20 6f 66 20 76 61 6c  The order of val
aac0: 75 65 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72  ues in the recor
aad0: 64 20 69 73 0a 74 68 65 20 73 61 6d 65 20 61 73  d is.the same as
aae0: 20 74 68 65 20 6f 72 64 65 72 20 6f 66 20 63 6f   the order of co
aaf0: 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 53 51 4c  lumns in the SQL
ab00: 20 74 61 62 6c 65 20 64 65 66 69 6e 69 74 69 6f   table definitio
ab10: 6e 2e 0a 57 68 65 6e 20 61 6e 20 53 51 4c 20 74  n..When an SQL t
ab20: 61 62 6c 65 20 74 68 61 74 20 69 6e 63 6c 75 64  able that includ
ab30: 65 73 20 61 6e 0a 5b 49 4e 54 45 47 45 52 20 50  es an.[INTEGER P
ab40: 52 49 4d 41 52 59 20 4b 45 59 5d 20 63 6f 6c 75  RIMARY KEY] colu
ab50: 6d 6e 20 28 77 68 69 63 68 20 61 6c 69 61 73 65  mn (which aliase
ab60: 73 20 74 68 65 20 5b 72 6f 77 69 64 5d 29 20 74  s the [rowid]) t
ab70: 68 65 6e 20 74 68 61 74 0a 63 6f 6c 75 6d 6e 20  hen that.column 
ab80: 61 70 70 65 61 72 73 20 69 6e 20 74 68 65 20 72  appears in the r
ab90: 65 63 6f 72 64 20 61 73 20 61 20 4e 55 4c 4c 20  ecord as a NULL 
aba0: 76 61 6c 75 65 2e 20 20 53 51 4c 69 74 65 20 77  value.  SQLite w
abb0: 69 6c 6c 20 6b 6e 6f 77 20 74 6f 20 75 73 65 0a  ill know to use.
abc0: 74 68 65 20 74 61 62 6c 65 20 62 2d 74 72 65 65  the table b-tree
abd0: 20 6b 65 79 20 72 61 74 68 65 72 20 74 68 61 6e   key rather than
abe0: 20 74 68 65 20 4e 55 4c 4c 20 76 61 6c 75 65 20   the NULL value 
abf0: 77 68 65 6e 20 72 65 66 65 72 65 6e 63 69 6e 67  when referencing
ac00: 20 74 68 65 0a 5b 49 4e 54 45 47 45 52 20 50 52   the.[INTEGER PR
ac10: 49 4d 41 52 59 20 4b 45 59 5d 20 63 6f 6c 75 6d  IMARY KEY] colum
ac20: 6e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 66 20 74 68  n.</p>..<p>If th
ac30: 65 20 5b 61 66 66 69 6e 69 74 79 5d 20 6f 66 20  e [affinity] of 
ac40: 61 20 63 6f 6c 75 6d 6e 20 69 73 20 52 45 41 4c  a column is REAL
ac50: 20 61 6e 64 20 74 68 61 74 20 63 6f 6c 75 6d 6e   and that column
ac60: 20 63 6f 6e 74 61 69 6e 73 20 61 0a 76 61 6c 75   contains a.valu
ac70: 65 20 74 68 61 74 20 63 61 6e 20 62 65 20 63 6f  e that can be co
ac80: 6e 76 65 72 74 65 64 20 74 6f 20 61 6e 20 69 6e  nverted to an in
ac90: 74 65 67 65 72 20 77 69 74 68 6f 75 74 20 6c 6f  teger without lo
aca0: 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f  ss of informatio
acb0: 6e 0a 28 69 66 20 74 68 65 20 76 61 6c 75 65 20  n.(if the value 
acc0: 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 66 72 61 63  contains no frac
acd0: 74 69 6f 6e 61 6c 20 70 61 72 74 20 61 6e 64 20  tional part and 
ace0: 69 73 20 6e 6f 74 20 74 6f 6f 20 6c 61 72 67 65  is not too large
acf0: 20 74 6f 20 62 65 0a 72 65 70 72 65 73 65 6e 74   to be.represent
ad00: 65 64 20 61 73 20 61 6e 20 69 6e 74 65 67 65 72  ed as an integer
ad10: 29 20 74 68 65 6e 20 74 68 65 20 63 6f 6c 75 6d  ) then the colum
ad20: 6e 20 6d 61 79 20 62 65 20 73 74 6f 72 65 64 20  n may be stored 
ad30: 69 6e 20 74 68 65 20 72 65 63 6f 72 64 0a 61 73  in the record.as
ad40: 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 53 51   an integer.  SQ
ad50: 4c 69 74 65 20 77 69 6c 6c 20 6b 6e 6f 77 20 74  Lite will know t
ad60: 6f 20 63 6f 6e 76 65 72 74 20 74 68 65 20 76 61  o convert the va
ad70: 6c 75 65 20 62 61 63 6b 20 74 6f 20 66 6c 6f 61  lue back to floa
ad80: 74 69 6e 67 0a 70 6f 69 6e 74 20 77 68 65 6e 20  ting.point when 
ad90: 65 78 74 72 61 63 74 69 6e 67 20 69 74 20 66 72  extracting it fr
ada0: 6f 6d 20 74 68 65 20 72 65 63 6f 72 64 2e 3c 2f  om the record.</
adb0: 70 3e 0a 0a 0a 3c 68 33 3e 32 2e 34 20 52 65 70  p>...<h3>2.4 Rep
adc0: 72 65 73 65 6e 74 61 74 69 6f 6e 20 4f 66 20 53  resentation Of S
add0: 51 4c 20 49 6e 64 69 63 65 73 3c 2f 68 33 3e 0a  QL Indices</h3>.
ade0: 0a 3c 70 3e 45 61 63 68 20 53 51 4c 20 69 6e 64  .<p>Each SQL ind
adf0: 65 78 2c 20 77 68 65 74 68 65 72 20 65 78 70 6c  ex, whether expl
ae00: 69 63 69 74 6c 79 20 64 65 63 6c 61 72 65 64 20  icitly declared 
ae10: 76 69 61 20 61 20 5b 43 52 45 41 54 45 20 49 4e  via a [CREATE IN
ae20: 44 45 58 5d 20 73 74 61 74 65 6d 65 6e 74 0a 6f  DEX] statement.o
ae30: 72 20 69 6d 70 6c 69 65 64 20 62 79 20 61 20 55  r implied by a U
ae40: 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74  NIQUE constraint
ae50: 2c 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  , corresponds to
ae60: 20 61 6e 20 69 6e 64 65 78 20 62 2d 74 72 65 65   an index b-tree
ae70: 20 69 6e 20 74 68 65 0a 64 61 74 61 62 61 73 65   in the.database
ae80: 20 66 69 6c 65 2e 0a 54 68 65 72 65 20 69 73 20   file..There is 
ae90: 6f 6e 65 20 65 6e 74 72 79 20 69 6e 20 69 6e 64  one entry in ind
aea0: 65 78 20 62 2d 74 72 65 65 20 66 6f 72 20 65 61  ex b-tree for ea
aeb0: 63 68 20 72 6f 77 20 69 6e 20 74 68 65 20 63 6f  ch row in the co
aec0: 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 61 62 6c  rresponding tabl
aed0: 65 2e 0a 54 68 65 20 6b 65 79 20 74 6f 20 61 6e  e..The key to an
aee0: 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20 69 73   index b-tree is
aef0: 0a 61 20 72 65 63 6f 72 64 20 63 6f 6d 70 6f 73  .a record compos
af00: 65 64 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ed of the column
af10: 73 20 74 68 61 74 20 61 72 65 20 62 65 69 6e 67  s that are being
af20: 20 69 6e 64 65 78 65 64 20 66 6f 6c 6c 6f 77 65   indexed followe
af30: 64 20 62 79 20 74 68 65 0a 5b 72 6f 77 69 64 5d  d by the.[rowid]
af40: 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 72 6f   of the table ro
af50: 77 2e 20 20 42 65 63 61 75 73 65 20 65 76 65 72  w.  Because ever
af60: 79 20 72 6f 77 20 69 6e 20 61 20 74 61 62 6c 65  y row in a table
af70: 20 68 61 73 20 61 20 75 6e 69 71 75 65 0a 72 6f   has a unique.ro
af80: 77 69 64 20 61 6e 64 20 61 6c 6c 20 6b 65 79 73  wid and all keys
af90: 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 63 6f 6e   in an index con
afa0: 74 61 69 6e 20 74 68 65 20 72 6f 77 69 64 2c 20  tain the rowid, 
afb0: 61 6c 6c 20 6b 65 79 73 20 69 6e 20 61 6e 20 69  all keys in an i
afc0: 6e 64 65 78 0a 61 72 65 20 75 6e 69 71 75 65 2e  ndex.are unique.
afd0: 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 72 65 20 69  </p>..<p>There i
afe0: 73 20 61 20 6f 6e 65 2d 74 6f 2d 6f 6e 65 20 6d  s a one-to-one m
aff0: 61 70 70 69 6e 67 20 62 65 74 77 65 65 6e 20 72  apping between r
b000: 6f 77 73 20 69 6e 20 61 20 74 61 62 6c 65 20 61  ows in a table a
b010: 6e 64 0a 65 6e 74 72 69 65 73 20 69 6e 20 65 61  nd.entries in ea
b020: 63 68 20 69 6e 64 65 78 20 61 73 73 6f 63 69 61  ch index associa
b030: 74 65 64 20 77 69 74 68 20 74 68 61 74 20 74 61  ted with that ta
b040: 62 6c 65 2e 0a 43 6f 72 72 65 73 70 6f 6e 64 69  ble..Correspondi
b050: 6e 67 20 72 6f 77 73 20 69 6e 74 20 74 68 65 20  ng rows int the 
b060: 69 6e 64 65 78 20 61 6e 64 20 74 61 62 6c 65 20  index and table 
b070: 62 2d 74 72 65 65 73 20 73 68 61 72 65 20 74 68  b-trees share th
b080: 65 20 73 61 6d 65 20 72 6f 77 69 64 0a 76 61 6c  e same rowid.val
b090: 75 65 2c 20 61 6e 64 20 63 6f 6e 74 61 69 6e 20  ue, and contain 
b0a0: 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20 66  the same value f
b0b0: 6f 72 20 61 6c 6c 20 69 6e 64 65 78 65 64 20 63  or all indexed c
b0c0: 6f 6c 75 6d 6e 73 2e 3c 2f 70 3e 0a 0a 3c 68 33  olumns.</p>..<h3
b0d0: 3e 32 2e 35 20 53 74 6f 72 61 67 65 20 4f 66 20  >2.5 Storage Of 
b0e0: 54 68 65 20 53 51 4c 20 44 61 74 61 62 61 73 65  The SQL Database
b0f0: 20 53 63 68 65 6d 61 3c 2f 68 33 3e 0a 0a 3c 70   Schema</h3>..<p
b100: 3e 50 61 67 65 20 31 20 6f 66 20 61 20 64 61 74  >Page 1 of a dat
b110: 61 62 61 73 65 20 66 69 6c 65 20 69 73 20 74 68  abase file is th
b120: 65 20 72 6f 6f 74 20 70 61 67 65 20 6f 66 20 61  e root page of a
b130: 20 74 61 62 6c 65 20 62 2d 74 72 65 65 20 74 68   table b-tree th
b140: 61 74 0a 68 6f 6c 64 73 20 61 20 73 70 65 63 69  at.holds a speci
b150: 61 6c 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 22  al table named "
b160: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 20 28  sqlite_master" (
b170: 6f 72 20 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f  or "sqlite_temp_
b180: 6d 61 73 74 65 72 22 20 69 6e 0a 74 68 65 20 63  master" in.the c
b190: 61 73 65 20 6f 66 20 61 20 54 45 4d 50 20 64 61  ase of a TEMP da
b1a0: 74 61 62 61 73 65 29 20 77 68 69 63 68 20 73 74  tabase) which st
b1b0: 6f 72 65 73 20 74 68 65 20 63 6f 6d 70 6c 65 74  ores the complet
b1c0: 65 0a 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e.database schem
b1d0: 61 2e 20 20 54 68 65 20 73 74 72 75 63 74 75 72  a.  The structur
b1e0: 65 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 5f  e of the sqlite_
b1f0: 6d 61 73 74 65 72 20 74 61 62 6c 65 20 69 73 20  master table is 
b200: 61 73 0a 69 66 20 69 74 20 68 61 64 20 62 65 65  as.if it had bee
b210: 6e 20 63 72 65 61 74 65 64 20 75 73 69 6e 67 20  n created using 
b220: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 53 51  the following SQ
b230: 4c 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75  L:</p>..<blockqu
b240: 6f 74 65 3e 3c 70 72 65 3e 0a 43 52 45 41 54 45  ote><pre>.CREATE
b250: 20 54 41 42 4c 45 20 73 71 6c 69 74 65 5f 6d 61   TABLE sqlite_ma
b260: 73 74 65 72 28 0a 20 20 74 79 70 65 20 74 65 78  ster(.  type tex
b270: 74 2c 0a 20 20 6e 61 6d 65 20 74 65 78 74 2c 0a  t,.  name text,.
b280: 20 20 74 62 6c 5f 6e 61 6d 65 20 74 65 78 74 2c    tbl_name text,
b290: 0a 20 20 72 6f 6f 74 70 61 67 65 20 69 6e 74 65  .  rootpage inte
b2a0: 67 65 72 2c 0a 20 20 73 71 6c 20 74 65 78 74 0a  ger,.  sql text.
b2b0: 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b  );.</pre></block
b2c0: 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 73  quote>..<p>The s
b2d0: 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62  qlite_master tab
b2e0: 6c 65 20 63 6f 6e 74 61 69 6e 73 20 61 20 72 6f  le contains a ro
b2f0: 77 20 66 6f 72 20 65 61 63 68 20 74 61 62 6c 65  w for each table
b300: 2c 20 69 6e 64 65 78 2c 20 76 69 65 77 2c 0a 61  , index, view,.a
b310: 6e 64 20 74 72 69 67 67 65 72 20 69 6e 20 74 68  nd trigger in th
b320: 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
b330: 61 2c 20 65 78 63 65 70 74 20 74 68 65 72 65 20  a, except there 
b340: 69 73 20 6e 6f 20 65 6e 74 72 79 20 66 6f 72 20  is no entry for 
b350: 74 68 65 0a 73 71 6c 69 74 65 5f 6d 61 73 74 65  the.sqlite_maste
b360: 72 20 74 61 62 6c 65 20 69 74 73 65 6c 66 2e 3c  r table itself.<
b370: 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 73 71 6c 69  /p>..<p>The sqli
b380: 74 65 5f 6d 61 73 74 65 72 2e 74 79 70 65 20 63  te_master.type c
b390: 6f 6c 75 6d 6e 20 77 69 6c 6c 20 62 65 20 6f 6e  olumn will be on
b3a0: 65 0a 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e.of the followi
b3b0: 6e 67 20 74 65 78 74 20 73 74 72 69 6e 67 73 3a  ng text strings:
b3c0: 20 20 27 74 61 62 6c 65 27 2c 20 27 69 6e 64 65    'table', 'inde
b3d0: 78 27 2c 20 27 76 69 65 77 27 2c 20 6f 72 20 27  x', 'view', or '
b3e0: 74 72 69 67 67 65 72 27 0a 61 63 63 6f 72 64 69  trigger'.accordi
b3f0: 6e 67 20 74 6f 20 74 68 65 20 74 79 70 65 20 6f  ng to the type o
b400: 66 20 6f 62 6a 65 63 74 20 64 65 66 69 6e 65 64  f object defined
b410: 2e 20 20 54 68 65 20 27 74 61 62 6c 65 27 20 73  .  The 'table' s
b420: 74 72 69 6e 67 20 69 73 20 75 73 65 64 0a 66 6f  tring is used.fo
b430: 72 20 62 6f 74 68 20 6f 72 64 69 6e 61 72 79 20  r both ordinary 
b440: 61 6e 64 20 5b 76 69 72 74 75 61 6c 20 74 61 62  and [virtual tab
b450: 6c 65 73 5d 2e 3c 2f 70 3e 0a 0a 3c 2f 70 3e 54  les].</p>..</p>T
b460: 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  he sqlite_master
b470: 2e 6e 61 6d 65 20 63 6f 6c 75 6d 6e 20 77 69 6c  .name column wil
b480: 6c 20 68 6f 6c 64 20 74 68 65 20 6e 61 6d 65 20  l hold the name 
b490: 6f 66 20 74 68 65 20 6f 62 6a 65 63 74 2e 0a 46  of the object..F
b4a0: 6f 72 20 69 6e 64 69 63 65 73 20 74 68 61 74 20  or indices that 
b4b0: 61 72 65 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  are automaticall
b4c0: 79 20 63 72 65 61 74 65 64 20 62 79 20 55 4e 49  y created by UNI
b4d0: 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 73 2c  QUE constraints,
b4e0: 20 74 68 65 0a 6e 61 6d 65 20 69 73 20 22 73 71   the.name is "sq
b4f0: 6c 69 74 65 5f 61 75 74 6f 69 6e 64 65 78 5f 54  lite_autoindex_T
b500: 41 42 4c 45 5f 4e 22 20 77 68 65 72 65 20 54 41  ABLE_N" where TA
b510: 42 4c 45 20 69 73 20 72 65 70 6c 61 63 65 64 20  BLE is replaced 
b520: 62 79 20 74 68 65 20 6e 61 6d 65 0a 6f 66 20 74  by the name.of t
b530: 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 63 6f  he table that co
b540: 6e 74 61 69 6e 73 20 74 68 65 20 55 4e 49 51 55  ntains the UNIQU
b550: 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 61 6e 64  E constraint and
b560: 20 4e 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72   N is an integer
b570: 20 62 65 67 69 6e 6e 69 6e 67 0a 77 69 74 68 20   beginning.with 
b580: 31 20 61 6e 64 20 69 6e 63 72 65 61 73 69 6e 67  1 and increasing
b590: 20 62 79 20 6f 6e 65 20 77 69 74 68 20 65 61 63   by one with eac
b5a0: 68 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61  h UNIQUE constra
b5b0: 69 6e 74 20 73 65 65 6e 2e 3c 2f 70 3e 0a 0a 3c  int seen.</p>..<
b5c0: 70 3e 54 68 65 20 73 71 6c 69 74 65 5f 6d 61 73  p>The sqlite_mas
b5d0: 74 65 72 2e 74 62 6c 5f 6e 61 6d 65 20 63 6f 6c  ter.tbl_name col
b5e0: 75 6d 6e 20 68 6f 6c 64 73 20 74 68 65 20 6e 61  umn holds the na
b5f0: 6d 65 20 6f 66 20 61 20 74 61 62 6c 65 20 6f 72  me of a table or
b600: 20 76 69 65 77 0a 74 68 61 74 20 74 68 65 20 6f   view.that the o
b610: 62 6a 65 63 74 20 69 73 20 61 73 73 6f 63 69 61  bject is associa
b620: 74 65 64 20 77 69 74 68 2e 20 20 46 6f 72 20 61  ted with.  For a
b630: 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77 2c 20   table or view, 
b640: 74 68 65 0a 74 62 6c 5f 6e 61 6d 65 20 63 6f 6c  the.tbl_name col
b650: 75 6d 6e 20 69 73 20 61 20 63 6f 70 79 20 6f 66  umn is a copy of
b660: 20 74 68 65 20 6e 61 6d 65 20 63 6f 6c 75 6d 6e   the name column
b670: 2e 20 20 46 6f 72 20 61 6e 20 69 6e 64 65 78 2c  .  For an index,
b680: 20 74 68 65 20 74 62 6c 5f 6e 61 6d 65 0a 69 73   the tbl_name.is
b690: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
b6a0: 20 74 61 62 6c 65 20 74 68 61 74 20 69 73 20 69   table that is i
b6b0: 6e 64 65 78 65 64 2e 20 20 46 6f 72 20 61 20 74  ndexed.  For a t
b6c0: 72 69 67 67 65 72 2c 20 74 68 65 20 74 62 6c 5f  rigger, the tbl_
b6d0: 6e 61 6d 65 0a 63 6f 6c 75 6d 6e 20 73 74 6f 72  name.column stor
b6e0: 65 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  es the name of t
b6f0: 68 65 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77  he table or view
b700: 20 74 68 61 74 20 63 61 75 73 65 73 20 74 68 65   that causes the
b710: 20 74 72 69 67 67 65 72 20 0a 74 6f 20 66 69 72   trigger .to fir
b720: 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 73  e.</p>..<p>The s
b730: 71 6c 69 74 65 5f 6d 61 73 74 65 72 2e 72 6f 6f  qlite_master.roo
b740: 74 70 61 67 65 20 63 6f 6c 75 6d 6e 20 73 74 6f  tpage column sto
b750: 72 65 73 20 74 68 65 20 70 61 67 65 20 6e 75 6d  res the page num
b760: 62 65 72 20 6f 66 20 74 68 65 20 72 6f 6f 74 0a  ber of the root.
b770: 62 2d 74 72 65 65 20 70 61 67 65 20 66 6f 72 20  b-tree page for 
b780: 74 61 62 6c 65 73 20 61 6e 64 20 69 6e 64 69 63  tables and indic
b790: 65 73 2e 20 20 46 6f 72 20 72 6f 77 73 20 74 68  es.  For rows th
b7a0: 61 74 20 64 65 66 69 6e 65 20 76 69 65 77 73 2c  at define views,
b7b0: 20 74 72 69 67 67 65 72 73 2c 0a 61 6e 64 20 76   triggers,.and v
b7c0: 69 72 74 75 61 6c 20 74 61 62 6c 65 73 2c 20 74  irtual tables, t
b7d0: 68 65 20 72 6f 6f 74 70 61 67 65 20 63 6f 6c 75  he rootpage colu
b7e0: 6d 6e 20 69 73 20 30 20 6f 72 20 4e 55 4c 4c 2e  mn is 0 or NULL.
b7f0: 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 73 71 6c  </p>..<p>The sql
b800: 69 74 65 5f 6d 61 73 74 65 72 2e 73 71 6c 20 63  ite_master.sql c
b810: 6f 6c 75 6d 6e 20 73 74 6f 72 65 73 20 53 51 4c  olumn stores SQL
b820: 20 74 65 78 74 20 74 68 61 74 20 64 65 73 63 72   text that descr
b830: 69 62 65 73 20 74 68 65 0a 6f 62 6a 65 63 74 2e  ibes the.object.
b840: 20 20 54 68 69 73 20 53 51 4c 20 74 65 78 74 20    This SQL text 
b850: 69 73 20 61 20 5b 43 52 45 41 54 45 20 54 41 42  is a [CREATE TAB
b860: 4c 45 5d 2c 20 5b 43 52 45 41 54 45 20 56 49 52  LE], [CREATE VIR
b870: 54 55 41 4c 20 54 41 42 4c 45 5d 2c 0a 5b 43 52  TUAL TABLE],.[CR
b880: 45 41 54 45 20 49 4e 44 45 58 5d 2c 0a 5b 43 52  EATE INDEX],.[CR
b890: 45 41 54 45 20 56 49 45 57 5d 2c 20 6f 72 20 5b  EATE VIEW], or [
b8a0: 43 52 45 41 54 45 20 54 52 49 47 47 45 52 5d 20  CREATE TRIGGER] 
b8b0: 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20 69  statement that i
b8c0: 66 20 65 76 61 6c 75 61 74 65 64 20 61 67 61 69  f evaluated agai
b8d0: 6e 73 74 0a 74 68 65 20 64 61 74 61 62 61 73 65  nst.the database
b8e0: 20 66 69 6c 65 20 77 68 65 6e 20 69 74 20 69 73   file when it is
b8f0: 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
b900: 73 65 20 6f 66 20 61 20 5b 64 61 74 61 62 61 73  se of a [databas
b910: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d 0a 77 6f  e connection].wo
b920: 75 6c 64 20 72 65 63 72 65 61 74 65 64 20 74 68  uld recreated th
b930: 65 20 6f 62 6a 65 63 74 2e 20 20 54 68 65 20 74  e object.  The t
b940: 65 78 74 20 69 73 20 75 73 75 61 6c 6c 79 20 61  ext is usually a
b950: 20 63 6f 70 79 20 6f 66 20 74 68 65 20 6f 72 69   copy of the ori
b960: 67 69 6e 61 6c 0a 73 74 61 74 65 6d 65 6e 74 20  ginal.statement 
b970: 75 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 74  used to create t
b980: 68 65 20 6f 62 6a 65 63 74 20 62 75 74 20 77 69  he object but wi
b990: 74 68 20 6e 6f 72 6d 61 6c 69 7a 61 74 69 6f 6e  th normalization
b9a0: 73 20 61 70 70 6c 69 65 64 20 73 6f 0a 74 68 61  s applied so.tha
b9b0: 74 20 74 68 65 20 74 65 78 74 20 63 6f 6e 66 6f  t the text confo
b9c0: 72 6d 73 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f  rms to the follo
b9d0: 77 69 6e 67 20 72 75 6c 65 73 3a 0a 0a 3c 75 6c  wing rules:..<ul
b9e0: 3e 0a 3c 6c 69 3e 54 68 65 20 43 52 45 41 54 45  >.<li>The CREATE
b9f0: 2c 20 54 41 42 4c 45 2c 20 56 49 45 57 2c 20 54  , TABLE, VIEW, T
ba00: 52 49 47 47 45 52 2c 20 61 6e 64 20 49 4e 44 45  RIGGER, and INDE
ba10: 58 20 6b 65 79 77 6f 72 64 73 20 61 74 20 74 68  X keywords at th
ba20: 65 20 62 65 67 69 6e 6e 69 6e 67 0a 6f 66 20 74  e beginning.of t
ba30: 68 65 20 73 74 61 74 65 6d 65 6e 74 20 61 72 65  he statement are
ba40: 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 6c   converted to al
ba50: 6c 20 75 70 70 65 72 20 63 61 73 65 20 6c 65 74  l upper case let
ba60: 74 65 72 73 2e 0a 3c 6c 69 3e 54 68 65 20 54 45  ters..<li>The TE
ba70: 4d 50 20 6f 72 20 54 45 4d 50 4f 52 41 52 59 20  MP or TEMPORARY 
ba80: 6b 65 79 77 6f 72 64 20 69 73 20 72 65 6d 6f 76  keyword is remov
ba90: 65 64 20 69 66 20 69 74 20 6f 63 63 75 72 73 20  ed if it occurs 
baa0: 61 66 74 65 72 20 74 68 65 20 0a 69 6e 69 74 69  after the .initi
bab0: 61 6c 20 43 52 45 41 54 45 20 6b 65 79 77 6f 72  al CREATE keywor
bac0: 64 2e 0a 3c 6c 69 3e 41 6e 79 20 64 61 74 61 62  d..<li>Any datab
bad0: 61 73 65 20 6e 61 6d 65 20 71 75 61 6c 69 66 69  ase name qualifi
bae0: 65 72 20 74 68 61 74 20 6f 63 63 75 72 73 20 70  er that occurs p
baf0: 72 69 6f 72 20 74 6f 20 74 68 65 20 6e 61 6d 65  rior to the name
bb00: 20 6f 66 20 74 68 65 0a 6f 62 6a 65 63 74 20 62   of the.object b
bb10: 65 69 6e 67 20 63 72 65 61 74 65 64 20 69 73 20  eing created is 
bb20: 72 65 6d 6f 76 65 64 2e 0a 3c 6c 69 3e 4c 65 61  removed..<li>Lea
bb30: 64 69 6e 67 20 73 70 61 63 65 73 20 61 72 65 20  ding spaces are 
bb40: 72 65 6d 6f 76 65 64 2e 0a 3c 6c 69 3e 41 6c 6c  removed..<li>All
bb50: 20 73 70 61 63 65 73 20 66 6f 6c 6c 6f 77 69 6e   spaces followin
bb60: 67 20 74 68 65 20 66 69 72 73 74 20 74 77 6f 20  g the first two 
bb70: 6b 65 79 77 6f 72 64 73 20 61 72 65 20 63 6f 6e  keywords are con
bb80: 76 65 72 74 65 64 20 69 6e 74 6f 20 61 20 73 69  verted into a si
bb90: 6e 67 6c 65 0a 73 70 61 63 65 2e 0a 3c 2f 75 6c  ngle.space..</ul
bba0: 3e 0a 0a 3c 70 3e 54 68 65 20 74 65 78 74 20 69  >..<p>The text i
bbb0: 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 6d 61 73  n the sqlite_mas
bbc0: 74 65 72 2e 73 71 6c 20 63 6f 6c 75 6d 6e 20 69  ter.sql column i
bbd0: 73 20 61 20 63 6f 70 79 20 6f 66 20 74 68 65 20  s a copy of the 
bbe0: 6f 72 69 67 69 6e 61 6c 0a 43 52 45 41 54 45 20  original.CREATE 
bbf0: 73 74 61 74 65 6d 65 6e 74 20 74 65 78 74 20 74  statement text t
bc00: 68 61 74 20 63 72 65 61 74 65 64 20 74 68 65 20  hat created the 
bc10: 6f 62 6a 65 63 74 2c 20 65 78 63 65 70 74 20 6e  object, except n
bc20: 6f 72 6d 61 6c 69 7a 65 64 20 61 73 0a 64 65 73  ormalized as.des
bc30: 63 72 69 62 65 64 20 61 62 6f 76 65 20 61 6e 64  cribed above and
bc40: 20 61 73 20 6d 6f 64 69 66 69 65 64 20 62 79 20   as modified by 
bc50: 73 75 62 73 65 71 75 65 6e 74 20 5b 41 4c 54 45  subsequent [ALTE
bc60: 52 20 54 41 42 4c 45 5d 20 73 74 61 74 65 6d 65  R TABLE] stateme
bc70: 6e 74 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 46 6f 72  nts.</p>..<p>For
bc80: 20 69 6e 64 69 63 65 73 20 74 68 61 74 20 61 72   indices that ar
bc90: 65 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  e automatically 
bca0: 63 72 65 61 74 65 64 20 62 79 20 55 4e 49 51 55  created by UNIQU
bcb0: 45 20 63 6f 6e 73 74 72 61 69 6e 74 73 2c 0a 74  E constraints,.t
bcc0: 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  he sqlite_master
bcd0: 2e 73 71 6c 20 66 69 65 6c 64 20 69 73 20 4e 55  .sql field is NU
bce0: 4c 4c 2e 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e 68  LL.</p>...<tcl>h
bcf0: 64 5f 66 72 61 67 6d 65 6e 74 20 72 6f 6c 6c 62  d_fragment rollb
bd00: 61 63 6b 6a 6f 75 72 6e 61 6c 20 7b 72 6f 6c 6c  ackjournal {roll
bd10: 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 66 6f 72  back journal for
bd20: 6d 61 74 7d 3c 2f 74 63 6c 3e 0a 3c 68 32 3e 33  mat}</tcl>.<h2>3
bd30: 2e 30 20 54 68 65 20 52 6f 6c 6c 62 61 63 6b 20  .0 The Rollback 
bd40: 4a 6f 75 72 6e 61 6c 3c 2f 68 32 3e 0a 0a 3c 70  Journal</h2>..<p
bd50: 3e 54 68 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f  >The rollback jo
bd60: 75 72 6e 61 6c 20 69 73 20 61 20 66 69 6c 65 20  urnal is a file 
bd70: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
bd80: 65 61 63 68 20 53 51 4c 69 74 65 20 64 61 74 61  each SQLite data
bd90: 62 61 73 65 0a 66 61 69 6c 20 74 68 61 74 20 68  base.fail that h
bda0: 6f 6c 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  old information 
bdb0: 75 73 65 64 20 74 6f 20 72 65 73 74 6f 72 65 20  used to restore 
bdc0: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
bdd0: 65 20 74 6f 20 69 74 73 20 69 6e 69 74 69 61 6c  e to its initial
bde0: 0a 73 74 61 74 65 20 64 75 72 69 6e 67 20 74 68  .state during th
bdf0: 65 20 63 6f 75 72 73 65 20 6f 66 20 61 20 74 72  e course of a tr
be00: 61 6e 73 61 63 74 69 6f 6e 2e 0a 54 68 65 20 72  ansaction..The r
be10: 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20  ollback journal 
be20: 66 69 6c 65 20 69 73 20 61 6c 77 61 79 73 20 6c  file is always l
be30: 6f 63 61 74 65 64 20 69 6e 20 74 68 65 20 64 69  ocated in the di
be40: 72 65 63 74 6f 72 79 20 61 73 20 74 68 65 20 64  rectory as the d
be50: 61 74 61 62 61 73 65 0a 66 69 6c 65 20 61 6e 64  atabase.file and
be60: 20 68 61 73 20 74 68 65 20 73 61 6d 65 20 6e 61   has the same na
be70: 6d 65 20 61 73 20 74 68 65 20 64 61 74 61 62 61  me as the databa
be80: 73 65 20 66 69 6c 65 20 62 75 74 20 77 69 74 68  se file but with
be90: 20 74 68 65 20 73 74 72 69 6e 67 0a 22 3c 74 74   the string."<tt
bea0: 3e 2d 6a 6f 75 72 6e 61 6c 3c 2f 74 74 3e 22 20  >-journal</tt>" 
beb0: 61 70 70 65 6e 64 65 64 2e 20 20 54 68 65 72 65  appended.  There
bec0: 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20 61 20 73   can only be a s
bed0: 69 6e 67 6c 65 20 72 6f 6c 6c 62 61 63 6b 20 6a  ingle rollback j
bee0: 6f 75 72 6e 61 6c 0a 61 73 73 6f 63 69 61 74 65  ournal.associate
bef0: 64 20 77 69 74 68 20 61 20 67 69 76 65 20 64 61  d with a give da
bf00: 74 61 62 61 73 65 20 61 6e 64 20 68 65 6e 63 65  tabase and hence
bf10: 20 74 68 65 72 65 20 63 61 6e 20 6f 6e 6c 79 20   there can only 
bf20: 62 65 20 6f 6e 65 20 77 72 69 74 65 0a 74 72 61  be one write.tra
bf30: 6e 73 61 63 74 69 6f 6e 20 6f 70 65 6e 20 61 67  nsaction open ag
bf40: 61 69 6e 73 74 20 61 20 73 69 6e 67 6c 65 20 64  ainst a single d
bf50: 61 74 61 62 61 73 65 20 61 74 20 6f 6e 65 20 74  atabase at one t
bf60: 69 6d 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 66 20  ime.</p>..<p>If 
bf70: 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  a transaction is
bf80: 20 61 62 6f 72 74 65 64 20 64 75 65 20 74 6f 20   aborted due to 
bf90: 61 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 63  an application c
bfa0: 72 61 73 68 2c 20 61 6e 20 6f 70 65 72 61 74 69  rash, an operati
bfb0: 6e 67 0a 73 79 73 74 65 6d 20 63 72 61 73 68 2c  ng.system crash,
bfc0: 20 6f 72 20 61 20 68 61 72 64 77 61 72 65 20 70   or a hardware p
bfd0: 6f 77 65 72 20 66 61 69 6c 75 72 65 20 6f 72 20  ower failure or 
bfe0: 63 72 61 73 68 2c 20 74 68 65 6e 20 74 68 65 20  crash, then the 
bff0: 64 61 74 61 62 61 73 65 20 6d 61 79 0a 62 65 20  database may.be 
c000: 6c 65 66 74 20 69 6e 20 61 6e 20 69 6e 63 6f 6e  left in an incon
c010: 73 69 73 74 65 6e 74 20 73 74 61 74 65 2e 20 20  sistent state.  
c020: 54 68 65 20 6e 65 78 74 20 74 69 6d 65 20 53 51  The next time SQ
c030: 4c 69 74 65 20 61 74 74 65 6d 70 74 73 20 74 6f  Lite attempts to
c040: 20 6f 70 65 6e 0a 74 68 65 20 64 61 74 61 62 61   open.the databa
c050: 73 65 20 66 69 6c 65 2c 20 74 68 65 20 70 72 65  se file, the pre
c060: 73 65 6e 63 65 20 6f 66 20 74 68 65 20 72 6f 6c  sence of the rol
c070: 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 66 69  lback journal fi
c080: 6c 65 20 77 69 6c 6c 20 62 65 20 0a 64 65 74 65  le will be .dete
c090: 63 74 65 64 20 61 6e 64 20 74 68 65 20 6a 6f 75  cted and the jou
c0a0: 72 6e 61 6c 20 77 69 6c 6c 20 62 65 20 61 75 74  rnal will be aut
c0b0: 6f 6d 61 74 69 63 61 6c 6c 79 20 70 6c 61 79 65  omatically playe
c0c0: 64 20 62 61 63 6b 20 74 6f 20 72 65 73 74 6f 72  d back to restor
c0d0: 65 20 74 68 65 0a 64 61 74 61 62 61 73 65 20 74  e the.database t
c0e0: 6f 20 69 74 73 20 73 74 61 74 65 20 61 74 20 74  o its state at t
c0f0: 68 65 20 73 74 61 72 74 20 6f 66 20 74 68 65 20  he start of the 
c100: 69 6e 63 6f 6d 70 6c 65 74 65 20 74 72 61 6e 73  incomplete trans
c110: 61 63 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 70 3e  action.</p>..<p>
c120: 41 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e  A rollback journ
c130: 61 6c 20 69 73 20 6f 6e 6c 79 20 63 6f 6e 73 69  al is only consi
c140: 64 65 72 65 64 20 74 6f 20 62 65 20 76 61 6c 69  dered to be vali
c150: 64 20 69 66 20 69 74 20 65 78 69 73 74 73 20 61  d if it exists a
c160: 6e 64 0a 63 6f 6e 74 61 69 6e 73 20 61 20 76 61  nd.contains a va
c170: 6c 69 64 20 68 65 61 64 65 72 2e 20 20 48 65 6e  lid header.  Hen
c180: 63 65 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  ce a transaction
c190: 20 63 61 6e 20 62 65 20 63 6f 6d 6d 69 74 74 65   can be committe
c1a0: 64 20 69 6e 20 6f 6e 65 0a 6f 66 20 74 68 72 65  d in one.of thre
c1b0: 65 20 77 61 79 73 3a 0a 3c 6f 6c 3e 0a 3c 6c 69  e ways:.<ol>.<li
c1c0: 3e 54 68 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f  >The rollback jo
c1d0: 75 72 6e 61 6c 20 66 69 6c 65 20 63 61 6e 20 62  urnal file can b
c1e0: 65 20 64 65 6c 65 74 65 64 2c 0a 3c 6c 69 3e 54  e deleted,.<li>T
c1f0: 68 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72  he rollback jour
c200: 6e 61 6c 20 66 69 6c 65 20 63 61 6e 20 62 65 20  nal file can be 
c210: 74 72 75 6e 63 61 74 65 64 20 74 6f 20 7a 65 72  truncated to zer
c220: 6f 20 6c 65 6e 67 74 68 2c 20 6f 72 0a 3c 6c 69  o length, or.<li
c230: 3e 54 68 65 20 68 65 61 64 65 72 20 6f 66 20 74  >The header of t
c240: 68 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72  he rollback jour
c250: 6e 61 6c 20 63 61 6e 20 62 65 20 6f 76 65 72 77  nal can be overw
c260: 72 69 74 74 65 6e 20 77 69 74 68 0a 69 6e 76 61  ritten with.inva
c270: 6c 69 64 20 68 65 61 64 65 72 20 74 65 78 74 20  lid header text 
c280: 28 66 6f 72 20 65 78 61 6d 70 6c 65 2c 20 61 6c  (for example, al
c290: 6c 20 7a 65 72 6f 73 29 2e 0a 3c 2f 6f 6c 3e 0a  l zeros)..</ol>.
c2a0: 54 68 65 73 65 20 74 68 72 65 65 20 77 61 79 73  These three ways
c2b0: 20 6f 66 20 63 6f 6d 6d 69 74 74 69 6e 67 20 61   of committing a
c2c0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 63 6f 72   transaction cor
c2d0: 72 65 73 70 6f 6e 64 20 74 6f 20 74 68 65 20 44  respond to the D
c2e0: 45 4c 45 54 45 2c 0a 54 52 55 4e 43 41 54 45 2c  ELETE,.TRUNCATE,
c2f0: 20 61 6e 64 20 50 45 52 53 49 53 54 20 73 65 74   and PERSIST set
c300: 74 69 6e 67 73 2c 20 72 65 73 70 65 63 74 69 76  tings, respectiv
c310: 65 6c 79 2c 20 6f 66 20 74 68 65 20 5b 6a 6f 75  ely, of the [jou
c320: 72 6e 61 6c 5f 6d 6f 64 65 20 70 72 61 67 6d 61  rnal_mode pragma
c330: 5d 2e 0a 3c 2f 70 3e 0a 0a 0a 3c 70 3e 41 20 76  ]..</p>...<p>A v
c340: 61 6c 69 64 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f  alid rollback jo
c350: 75 72 6e 61 6c 20 62 65 67 69 6e 73 20 77 69 74  urnal begins wit
c360: 68 20 61 20 68 65 61 64 65 72 20 69 6e 20 74 68  h a header in th
c370: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 66 6f 72 6d  e following form
c380: 61 74 3a 3c 2f 70 3e 0a 0a 3c 63 65 6e 74 65 72  at:</p>..<center
c390: 3e 0a 3c 69 3e 52 6f 6c 6c 62 61 63 6b 20 4a 6f  >.<i>Rollback Jo
c3a0: 75 72 6e 61 6c 20 48 65 61 64 65 72 20 46 6f 72  urnal Header For
c3b0: 6d 61 74 3c 2f 69 3e 3c 62 72 3e 0a 3c 74 61 62  mat</i><br>.<tab
c3c0: 6c 65 20 77 69 64 74 68 3d 22 38 30 25 22 20 62  le width="80%" b
c3d0: 6f 72 64 65 72 3d 31 3e 0a 3c 74 72 3e 3c 74 68  order=1>.<tr><th
c3e0: 3e 4f 66 66 73 65 74 3c 74 68 3e 53 69 7a 65 3c  >Offset<th>Size<
c3f0: 74 68 3e 44 65 73 63 72 69 70 74 69 6f 6e 0a 3c  th>Description.<
c400: 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
c410: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 30  p align=center>0
c420: 0a 20 20 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d  .    <td valign=
c430: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
c440: 3e 38 0a 20 20 20 20 3c 74 64 3e 48 65 61 64 65  >8.    <td>Heade
c450: 72 20 73 74 72 69 6e 67 3a 20 20 30 78 64 39 2c  r string:  0xd9,
c460: 20 30 78 64 35 2c 20 30 78 30 35 2c 20 30 78 66   0xd5, 0x05, 0xf
c470: 39 2c 20 30 78 32 30 2c 20 30 78 61 31 2c 20 30  9, 0x20, 0xa1, 0
c480: 78 36 33 2c 20 30 78 64 37 0a 3c 74 72 3e 3c 74  x63, 0xd7.<tr><t
c490: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
c4a0: 67 6e 3d 63 65 6e 74 65 72 3e 38 0a 20 20 20 20  gn=center>8.    
c4b0: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
c4c0: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20  lign=center>4.  
c4d0: 20 20 3c 74 64 3e 54 68 65 20 22 50 61 67 65 20    <td>The "Page 
c4e0: 43 6f 75 6e 74 22 20 2d 20 54 68 65 20 6e 75 6d  Count" - The num
c4f0: 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20  ber of pages in 
c500: 74 68 65 20 6e 65 78 74 20 73 65 67 6d 65 6e 74  the next segment
c510: 20 6f 66 20 74 68 65 20 0a 20 20 20 20 20 20 20   of the .       
c520: 20 6a 6f 75 72 6e 61 6c 2c 20 6f 72 20 2d 31 20   journal, or -1 
c530: 74 6f 0a 20 20 20 20 20 20 20 20 6d 65 61 6e 20  to.        mean 
c540: 61 6c 6c 20 63 6f 6e 74 65 6e 74 20 74 6f 20 74  all content to t
c550: 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 66 69  he end of the fi
c560: 6c 65 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  le.<tr><td valig
c570: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
c580: 65 72 3e 31 32 0a 20 20 20 20 3c 74 64 20 76 61  er>12.    <td va
c590: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
c5a0: 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e  enter>4.    <td>
c5b0: 41 20 72 61 6e 64 6f 6d 20 6e 6f 6e 63 65 20 66  A random nonce f
c5c0: 6f 72 20 74 68 65 20 63 68 65 63 6b 73 75 6d 0a  or the checksum.
c5d0: 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74  <tr><td valign=t
c5e0: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
c5f0: 31 36 0a 20 20 20 20 3c 74 64 20 76 61 6c 69 67  16.    <td valig
c600: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
c610: 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 49 6e 69  er>4.    <td>Ini
c620: 74 69 61 6c 20 73 69 7a 65 20 6f 66 20 74 68 65  tial size of the
c630: 20 64 61 74 61 62 61 73 65 20 69 6e 20 70 61 67   database in pag
c640: 65 73 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  es.<tr><td valig
c650: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
c660: 65 72 3e 32 30 0a 20 20 20 20 3c 74 64 20 76 61  er>20.    <td va
c670: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
c680: 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e  enter>4.    <td>
c690: 53 69 7a 65 20 6f 66 20 61 20 64 69 73 6b 20 73  Size of a disk s
c6a0: 65 63 74 6f 72 20 61 73 73 75 6d 65 64 20 62 79  ector assumed by
c6b0: 20 74 68 65 20 70 72 6f 63 65 73 73 20 74 68 61   the process tha
c6c0: 74 20 77 72 6f 74 65 20 74 68 69 73 0a 20 20 20  t wrote this.   
c6d0: 20 20 20 20 20 6a 6f 75 72 6e 61 6c 2e 0a 3c 74       journal..<t
c6e0: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
c6f0: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32 34   align=center>24
c700: 0a 20 20 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d  .    <td valign=
c710: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
c720: 3e 34 0a 20 20 20 20 3c 74 64 3e 53 69 7a 65 20  >4.    <td>Size 
c730: 6f 66 20 70 61 67 65 73 20 69 6e 20 74 68 69 73  of pages in this
c740: 20 6a 6f 75 72 6e 61 6c 2e 0a 3c 2f 74 61 62 6c   journal..</tabl
c750: 65 3e 0a 3c 2f 63 65 6e 74 65 72 3e 0a 0a 3c 70  e>.</center>..<p
c760: 3e 41 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72  >A rollback jour
c770: 6e 61 6c 20 68 65 61 64 65 72 20 69 73 20 70 61  nal header is pa
c780: 64 64 65 64 20 77 69 74 68 20 7a 65 72 6f 73 20  dded with zeros 
c790: 6f 75 74 20 74 6f 20 74 68 65 20 73 69 7a 65 20  out to the size 
c7a0: 6f 66 20 61 20 0a 73 69 6e 67 6c 65 20 73 65 63  of a .single sec
c7b0: 74 6f 72 20 28 61 73 20 64 65 66 69 6e 65 64 20  tor (as defined 
c7c0: 62 79 20 74 68 65 20 73 65 63 74 6f 72 20 73 69  by the sector si
c7d0: 7a 65 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66  ze integer at of
c7e0: 66 73 65 74 20 32 30 29 2e 0a 54 68 65 20 68 65  fset 20)..The he
c7f0: 61 64 65 72 20 69 73 20 69 6e 20 61 20 73 65 63  ader is in a sec
c800: 74 6f 72 20 62 79 20 69 74 73 65 6c 66 20 73 6f  tor by itself so
c810: 20 74 68 61 74 20 69 66 20 61 20 70 6f 77 65 72   that if a power
c820: 20 6c 6f 73 73 20 6f 63 63 75 72 73 20 77 68 69   loss occurs whi
c830: 6c 65 0a 77 72 69 74 69 6e 67 20 74 68 65 20 73  le.writing the s
c840: 65 63 74 6f 72 2c 20 69 6e 66 6f 72 6d 61 74 69  ector, informati
c850: 6f 6e 20 74 68 61 74 20 66 6f 6c 6c 6f 77 73 20  on that follows 
c860: 74 68 65 20 68 65 61 64 65 72 20 77 69 6c 6c 20  the header will 
c870: 62 65 0a 28 68 6f 70 65 66 75 6c 6c 79 29 20 75  be.(hopefully) u
c880: 6e 64 61 6d 61 67 65 64 2e 3c 2f 70 3e 0a 0a 3c  ndamaged.</p>..<
c890: 70 3e 41 66 74 65 72 20 74 68 65 20 68 65 61 64  p>After the head
c8a0: 65 72 20 61 6e 64 20 7a 65 72 6f 20 70 61 64 64  er and zero padd
c8b0: 69 6e 67 20 61 72 65 20 7a 65 72 6f 20 6f 72 20  ing are zero or 
c8c0: 6d 6f 72 65 20 70 61 67 65 20 72 65 63 6f 72 64  more page record
c8d0: 73 2e 20 20 45 61 63 68 0a 70 61 67 65 20 72 65  s.  Each.page re
c8e0: 63 6f 72 64 20 73 74 6f 72 65 73 20 61 20 63 6f  cord stores a co
c8f0: 70 79 20 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e  py of the conten
c900: 74 20 6f 66 20 61 20 70 61 67 65 20 66 72 6f 6d  t of a page from
c910: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
c920: 6c 65 0a 62 65 66 6f 72 65 20 69 74 20 77 61 73  le.before it was
c930: 20 63 68 61 6e 67 65 64 2e 20 20 54 68 65 20 73   changed.  The s
c940: 61 6d 65 20 70 61 67 65 20 6d 61 79 20 6e 6f 74  ame page may not
c950: 20 61 70 70 65 61 72 20 6d 6f 72 65 20 74 68 61   appear more tha
c960: 6e 20 6f 6e 63 65 0a 77 69 74 68 69 6e 20 61 20  n once.within a 
c970: 73 69 6e 67 6c 65 20 72 6f 6c 6c 62 61 63 6b 20  single rollback 
c980: 6a 6f 75 72 6e 61 6c 2e 0a 54 6f 20 72 6f 6c 6c  journal..To roll
c990: 62 61 63 6b 20 61 6e 20 69 6e 63 6f 6d 70 6c 65  back an incomple
c9a0: 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20  te transaction, 
c9b0: 61 20 70 72 6f 63 65 73 73 0a 68 61 73 20 6d 65  a process.has me
c9c0: 72 65 6c 79 20 74 6f 20 72 65 61 64 20 74 68 65  rely to read the
c9d0: 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61   rollback journa
c9e0: 6c 20 66 72 6f 6d 20 62 65 67 69 6e 6e 69 6e 67  l from beginning
c9f0: 20 74 6f 20 65 6e 64 20 61 6e 64 0a 77 72 69 74   to end and.writ
ca00: 65 20 70 61 67 65 73 20 66 6f 75 6e 64 20 69 6e  e pages found in
ca10: 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20 62 61 63   the journal bac
ca20: 6b 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61 62  k into the datab
ca30: 61 73 65 20 66 69 6c 65 20 61 74 20 74 68 65 0a  ase file at the.
ca40: 61 70 70 72 6f 70 72 69 61 74 65 20 6c 6f 63 61  appropriate loca
ca50: 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 4c 65  tion.</p>..<p>Le
ca60: 74 20 74 68 65 20 64 61 74 61 62 61 73 65 20 70  t the database p
ca70: 61 67 65 20 73 69 7a 65 20 28 74 68 65 20 76 61  age size (the va
ca80: 6c 75 65 20 6f 66 20 74 68 65 20 69 6e 74 65 67  lue of the integ
ca90: 65 72 20 61 74 20 6f 66 66 73 65 74 20 32 34 20  er at offset 24 
caa0: 0a 69 6e 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20  .in the journal 
cab0: 68 65 61 64 65 72 29 20 62 65 20 4e 2e 0a 54 68  header) be N..Th
cac0: 65 6e 20 74 68 65 20 66 6f 72 6d 61 74 20 6f 66  en the format of
cad0: 20 61 20 70 61 67 65 20 72 65 63 6f 72 64 20 69   a page record i
cae0: 73 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f 70  s as follows:</p
caf0: 3e 0a 0a 3c 63 65 6e 74 65 72 3e 0a 3c 69 3e 52  >..<center>.<i>R
cb00: 6f 6c 6c 62 61 63 6b 20 4a 6f 75 72 6e 61 6c 20  ollback Journal 
cb10: 50 61 67 65 20 52 65 63 6f 72 64 20 46 6f 72 6d  Page Record Form
cb20: 61 74 3c 2f 69 3e 3c 62 72 3e 0a 3c 74 61 62 6c  at</i><br>.<tabl
cb30: 65 20 77 69 64 74 68 3d 22 38 30 25 22 20 62 6f  e width="80%" bo
cb40: 72 64 65 72 3d 31 3e 0a 3c 74 72 3e 3c 74 68 3e  rder=1>.<tr><th>
cb50: 4f 66 66 73 65 74 3c 74 68 3e 53 69 7a 65 3c 74  Offset<th>Size<t
cb60: 68 3e 44 65 73 63 72 69 70 74 69 6f 6e 0a 3c 74  h>Description.<t
cb70: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
cb80: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 30 0a   align=center>0.
cb90: 20 20 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74      <td valign=t
cba0: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
cbb0: 34 0a 20 20 20 20 3c 74 64 3e 54 68 65 20 70 61  4.    <td>The pa
cbc0: 67 65 20 6e 75 6d 62 65 72 20 69 6e 20 74 68 65  ge number in the
cbd0: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 3c   database file.<
cbe0: 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
cbf0: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34  p align=center>4
cc00: 0a 20 20 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d  .    <td valign=
cc10: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
cc20: 3e 4e 0a 20 20 20 20 3c 74 64 3e 4f 72 69 67 69  >N.    <td>Origi
cc30: 6e 61 6c 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74  nal content of t
cc40: 68 65 20 70 61 67 65 20 70 72 69 6f 72 20 74 6f  he page prior to
cc50: 20 74 68 65 20 73 74 61 72 74 20 6f 66 20 74 68   the start of th
cc60: 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 3c 74  e transaction.<t
cc70: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
cc80: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 4e 2b   align=center>N+
cc90: 34 0a 20 20 20 20 3c 74 64 20 76 61 6c 69 67 6e  4.    <td valign
cca0: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
ccb0: 72 3e 34 0a 20 20 20 20 3c 74 64 3e 43 68 65 63  r>4.    <td>Chec
ccc0: 6b 73 75 6d 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f  ksum.</table>.</
ccd0: 63 65 6e 74 65 72 3e 0a 0a 0a 3c 70 3e 54 68 65  center>...<p>The
cce0: 20 63 68 65 63 6b 73 75 6d 20 69 73 20 61 6e 20   checksum is an 
ccf0: 75 6e 73 69 67 6e 65 64 20 33 32 2d 62 69 74 20  unsigned 32-bit 
cd00: 69 6e 74 65 67 65 72 20 63 6f 6d 70 75 74 65 64  integer computed
cd10: 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e   as follows:</p>
cd20: 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 49 6e 69 74 69  ..<ol>.<li>Initi
cd30: 61 6c 69 7a 65 20 74 68 65 20 63 68 65 63 6b 73  alize the checks
cd40: 75 6d 20 74 6f 20 74 68 65 20 63 68 65 63 6b 73  um to the checks
cd50: 75 6d 20 6e 6f 6e 63 65 20 76 61 6c 75 65 20 66  um nonce value f
cd60: 6f 75 6e 64 20 69 6e 20 74 68 65 0a 6a 6f 75 72  ound in the.jour
cd70: 6e 61 6c 20 68 65 61 64 65 72 20 61 74 20 6f 66  nal header at of
cd80: 66 73 65 74 20 31 32 2e 0a 3c 6c 69 3e 49 6e 69  fset 12..<li>Ini
cd90: 74 69 61 6c 69 7a 65 20 69 6e 64 65 78 20 58 20  tialize index X 
cda0: 74 6f 20 62 65 20 4e 2d 32 30 30 20 28 77 68 65  to be N-200 (whe
cdb0: 72 65 20 4e 20 69 73 20 74 68 65 20 73 69 7a 65  re N is the size
cdc0: 20 6f 66 20 61 20 64 61 74 61 62 61 73 65 20 70   of a database p
cdd0: 61 67 65 0a 69 6e 20 62 79 74 65 73 2e 0a 3c 6c  age.in bytes..<l
cde0: 69 3e 49 6e 74 65 72 70 72 65 74 20 74 68 65 20  i>Interpret the 
cdf0: 66 6f 75 72 20 62 79 74 65 73 20 61 74 20 6f 66  four bytes at of
ce00: 66 73 65 74 20 58 20 69 6e 74 6f 20 74 68 65 20  fset X into the 
ce10: 70 61 67 65 20 61 73 20 61 20 34 2d 62 79 74 65  page as a 4-byte
ce20: 20 62 69 67 2d 65 6e 64 69 61 6e 0a 75 6e 73 69   big-endian.unsi
ce30: 67 6e 65 64 20 69 6e 74 65 67 65 72 2e 20 20 41  gned integer.  A
ce40: 64 64 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  dd the value of 
ce50: 74 68 61 74 20 69 6e 74 65 67 65 72 20 74 6f 20  that integer to 
ce60: 74 68 65 20 63 68 65 63 6b 73 75 6d 2e 0a 3c 6c  the checksum..<l
ce70: 69 3e 53 75 62 74 72 61 63 65 20 32 30 30 20 66  i>Subtrace 200 f
ce80: 72 6f 6d 20 58 2e 0a 3c 6c 69 3e 49 66 20 58 20  rom X..<li>If X 
ce90: 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  is greater than 
cea0: 6f 72 20 65 71 75 61 6c 20 74 6f 20 7a 65 72 6f  or equal to zero
ceb0: 2c 20 67 6f 20 62 61 63 6b 20 74 6f 20 73 74 65  , go back to ste
cec0: 70 20 33 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 54  p 3..</ol>..<p>T
ced0: 68 65 20 63 68 65 63 6b 73 75 6d 20 76 61 6c 75  he checksum valu
cee0: 65 20 69 73 20 75 73 65 64 20 74 6f 20 67 75 61  e is used to gua
cef0: 72 64 20 61 67 61 69 6e 73 74 20 69 6e 63 6f 6d  rd against incom
cf00: 70 6c 65 74 65 20 77 72 69 74 65 73 20 6f 66 0a  plete writes of.
cf10: 61 20 6a 6f 75 72 6e 61 6c 20 70 61 67 65 20 72  a journal page r
cf20: 65 63 6f 72 64 20 66 6f 6c 6c 6f 77 69 6e 67 20  ecord following 
cf30: 61 20 70 6f 77 65 72 20 66 61 69 6c 75 72 65 2e  a power failure.
cf40: 20 20 41 20 64 69 66 66 65 72 65 6e 74 20 72 61    A different ra
cf50: 6e 64 6f 6d 20 6e 6f 6e 63 65 0a 69 73 20 75 73  ndom nonce.is us
cf60: 65 64 20 65 61 63 68 20 74 69 6d 65 20 61 20 74  ed each time a t
cf70: 72 61 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61  rasaction is sta
cf80: 72 74 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f  rted in order to
cf90: 20 6d 69 6e 69 6d 69 7a 65 20 74 68 65 20 72 69   minimize the ri
cfa0: 73 6b 0a 74 68 61 74 20 75 6e 77 72 69 74 74 65  sk.that unwritte
cfb0: 6e 20 73 65 63 74 6f 72 73 20 6d 69 67 68 74 20  n sectors might 
cfc0: 62 79 20 63 68 61 6e 63 65 20 63 6f 6e 74 61 69  by chance contai
cfd0: 6e 20 64 61 74 61 20 66 72 6f 6d 20 74 68 65 20  n data from the 
cfe0: 73 61 6d 65 20 70 61 67 65 0a 74 68 61 74 20 77  same page.that w
cff0: 61 73 20 61 20 70 61 72 74 20 6f 66 20 70 72 69  as a part of pri
d000: 6f 72 20 6a 6f 75 72 6e 61 6c 73 2e 20 20 42 79  or journals.  By
d010: 20 63 68 61 6e 67 69 6e 67 20 74 68 65 20 6e 6f   changing the no
d020: 6e 63 65 20 66 6f 72 20 65 61 63 68 0a 74 72 61  nce for each.tra
d030: 6e 73 61 63 74 69 6f 6e 2c 20 73 74 61 6c 65 20  nsaction, stale 
d040: 64 61 74 61 20 6f 6e 20 64 69 73 6b 20 77 69 6c  data on disk wil
d050: 6c 20 73 74 69 6c 6c 20 67 65 6e 65 72 61 74 65  l still generate
d060: 20 61 6e 20 69 6e 63 6f 72 72 65 63 74 20 63 68   an incorrect ch
d070: 65 63 6b 73 75 6d 0a 61 6e 64 20 62 65 20 64 65  ecksum.and be de
d080: 74 65 63 74 65 64 20 77 69 74 68 20 68 69 67 68  tected with high
d090: 20 70 72 6f 62 61 62 69 6c 69 74 79 2e 20 20 54   probability.  T
d0a0: 68 65 20 63 68 65 63 6b 73 75 6d 20 6f 6e 6c 79  he checksum only
d0b0: 20 75 73 65 73 20 61 20 73 70 61 72 63 65 20 73   uses a sparce s
d0c0: 61 6d 70 6c 65 0a 6f 66 20 33 32 2d 62 69 74 20  ample.of 32-bit 
d0d0: 77 6f 72 64 73 20 66 72 6f 6d 20 74 68 65 20 64  words from the d
d0e0: 61 74 61 20 72 65 63 6f 72 64 20 66 6f 72 20 70  ata record for p
d0f0: 65 72 66 6f 72 6d 61 6e 63 65 20 72 65 61 73 6f  erformance reaso
d100: 6e 73 20 2d 20 64 65 73 69 67 6e 20 73 74 75 64  ns - design stud
d110: 69 65 73 20 0a 64 75 72 69 6e 67 20 74 68 65 20  ies .during the 
d120: 70 6c 61 6e 6e 69 6e 67 20 70 68 61 73 65 73 20  planning phases 
d130: 6f 66 20 53 51 4c 69 74 65 20 33 2e 30 2e 30 20  of SQLite 3.0.0 
d140: 73 68 6f 77 65 64 0a 61 20 73 69 67 6e 69 66 69  showed.a signifi
d150: 63 61 6e 74 20 70 65 72 66 6f 72 6d 61 6e 63 65  cant performance
d160: 20 68 69 74 20 69 6e 20 63 68 65 63 6b 73 75 6d   hit in checksum
d170: 6d 69 6e 67 20 74 68 65 20 65 6e 74 69 72 65 20  ming the entire 
d180: 70 61 67 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 4c 65  page.</p>..<p>Le
d190: 74 20 74 68 65 20 70 61 67 65 20 63 6f 75 6e 74  t the page count
d1a0: 20 76 61 6c 75 65 20 61 74 20 6f 66 66 73 65 74   value at offset
d1b0: 20 38 20 69 6e 20 74 68 65 20 6a 6f 75 72 6e 61   8 in the journa
d1c0: 6c 20 68 65 61 64 65 72 20 62 79 20 4d 2e 0a 49  l header by M..I
d1d0: 66 20 4d 20 69 73 20 67 72 65 61 74 65 72 20 74  f M is greater t
d1e0: 68 61 6e 20 7a 65 72 6f 20 74 68 65 6e 20 61 66  han zero then af
d1f0: 74 65 72 20 4d 20 70 61 67 65 20 72 65 63 6f 72  ter M page recor
d200: 64 73 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20 66  ds the journal f
d210: 69 6c 65 0a 6d 61 79 20 62 65 20 7a 65 72 6f 20  ile.may be zero 
d220: 70 61 64 64 65 64 20 6f 75 74 20 74 6f 20 74 68  padded out to th
d230: 65 20 6e 65 78 74 20 6d 75 6c 74 69 70 6c 65 20  e next multiple 
d240: 6f 66 20 74 68 65 20 73 65 63 74 6f 72 20 73 69  of the sector si
d250: 7a 65 20 61 6e 64 20 61 6e 6f 74 68 65 72 0a 6a  ze and another.j
d260: 6f 75 72 6e 61 6c 20 68 65 61 64 65 72 20 6d 61  ournal header ma
d270: 79 20 62 65 20 69 6e 73 65 72 74 65 64 2e 20 20  y be inserted.  
d280: 41 6c 6c 20 6a 6f 75 72 6e 61 6c 20 68 65 61 64  All journal head
d290: 65 72 73 20 77 69 74 68 69 6e 20 74 68 65 20 73  ers within the s
d2a0: 61 6d 65 0a 6a 6f 75 72 6e 61 6c 20 6d 75 73 74  ame.journal must
d2b0: 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 73 61 6d   contain the sam
d2c0: 65 20 64 61 74 61 62 61 73 65 20 70 61 67 65 20  e database page 
d2d0: 73 69 7a 65 20 61 6e 64 20 73 65 63 74 6f 72 20  size and sector 
d2e0: 73 69 7a 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 66  size.</p>..<p>If
d2f0: 20 4d 20 69 73 20 2d 31 20 69 6e 20 74 68 65 20   M is -1 in the 
d300: 69 6e 69 74 69 61 6c 20 6a 6f 75 72 6e 61 6c 20  initial journal 
d310: 68 65 61 64 65 72 2c 20 74 68 65 6e 20 74 68 65  header, then the
d320: 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 20   number of page 
d330: 72 65 63 6f 72 64 73 0a 74 68 61 74 20 66 6f 6c  records.that fol
d340: 6c 6f 77 20 69 73 20 63 6f 6d 70 75 74 65 64 20  low is computed 
d350: 62 79 20 66 69 67 75 72 65 20 6f 75 74 20 68 6f  by figure out ho
d360: 77 20 6d 61 6e 79 20 70 61 67 65 20 72 65 63 6f  w many page reco
d370: 72 64 73 20 77 69 6c 6c 20 66 69 74 20 69 6e 0a  rds will fit in.
d380: 74 68 65 20 61 76 61 69 6c 61 62 6c 65 20 73 70  the available sp
d390: 61 63 65 20 6f 66 20 74 68 65 20 72 65 6d 61 69  ace of the remai
d3a0: 6e 64 65 72 20 6f 66 20 74 68 65 20 6a 6f 75 72  nder of the jour
d3b0: 6e 61 6c 20 66 69 6c 65 2e 3c 2f 70 3e 0a        nal file.</p>.