Documentation Source Text

Hex Artifact Content
Login

Artifact 239922e04495b526833a9eb171784654b954354f:


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 68 32 3e 31 2e 30 20 54 68 65 20 44 61  ..<h2>1.0 The Da
0120: 74 61 62 61 73 65 20 46 69 6c 65 3c 2f 68 32 3e  tabase File</h2>
0130: 0a 0a 3c 70 3e 54 68 65 20 63 6f 6d 70 6c 65 74  ..<p>The complet
0140: 65 20 73 74 61 74 65 20 6f 66 20 61 6e 20 53 51  e state of an SQ
0150: 4c 69 74 65 20 64 61 74 61 62 61 73 65 20 69 73  Lite database is
0160: 20 75 73 75 61 6c 6c 79 0a 63 6f 6e 74 61 69 6e   usually.contain
0170: 65 64 20 61 20 73 69 6e 67 6c 65 20 66 69 6c 65  ed a single file
0180: 20 6f 6e 20 64 69 73 6b 20 63 61 6c 6c 65 64 20   on disk called 
0190: 74 68 65 20 22 6d 61 69 6e 20 64 61 74 61 62 61  the "main databa
01a0: 73 65 20 66 69 6c 65 22 2e 3c 2f 70 3e 0a 0a 3c  se file".</p>..<
01b0: 70 3e 57 68 69 6c 65 20 70 65 72 66 6f 72 6d 69  p>While performi
01c0: 6e 67 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  ng a transaction
01d0: 2c 20 74 68 65 20 64 65 66 61 75 6c 74 20 62 65  , the default be
01e0: 68 61 76 69 6f 72 20 69 73 20 74 6f 20 73 74 6f  havior is to sto
01f0: 72 65 73 20 0a 73 6f 6d 65 20 74 65 6d 70 6f 72  res .some tempor
0200: 61 72 79 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ary information 
0210: 69 6e 20 61 20 73 65 63 6f 6e 64 20 66 69 6c 65  in a second file
0220: 20 63 61 6c 6c 65 64 20 74 68 65 20 22 72 6f 6c   called the "rol
0230: 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 22 2e 0a  lback journal"..
0240: 28 54 68 65 20 61 6c 74 65 72 6e 61 74 69 76 65  (The alternative
0250: 20 69 73 20 74 6f 20 75 73 65 20 61 20 5b 77 72   is to use a [wr
0260: 69 74 65 2d 61 68 65 61 64 20 6c 6f 67 5d 20 2d  ite-ahead log] -
0270: 20 64 65 73 63 72 69 62 65 64 20 73 65 70 61 72   described separ
0280: 61 74 65 6c 79 2e 29 0a 49 66 20 74 68 65 20 61  ately.).If the a
0290: 70 70 6c 69 63 61 74 69 6f 6e 20 6f 72 0a 68 6f  pplication or.ho
02a0: 73 74 20 63 6f 6d 70 75 74 65 72 20 63 72 61 73  st computer cras
02b0: 68 65 73 20 62 65 66 6f 72 65 20 63 6f 6d 70 6c  hes before compl
02c0: 65 74 69 6e 67 20 74 68 65 20 74 72 61 6e 73 61  eting the transa
02d0: 63 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65 20  ction, then the 
02e0: 72 6f 6c 6c 62 61 63 6b 0a 6a 6f 75 72 6e 61 6c  rollback.journal
02f0: 20 63 6f 6e 74 61 69 6e 73 20 63 72 69 74 69 63   contains critic
0300: 61 6c 20 73 74 61 74 65 20 69 6e 66 6f 72 6d 61  al state informa
0310: 74 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f 20 72  tion needed to r
0320: 65 73 74 6f 72 65 20 74 68 65 0a 63 6f 6e 74 65  estore the.conte
0330: 6e 74 20 6f 66 20 74 68 65 20 6d 61 69 6e 20 64  nt of the main d
0340: 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 20 57  atabase file.  W
0350: 68 65 6e 20 61 20 72 6f 6c 6c 62 61 63 6b 20 6a  hen a rollback j
0360: 6f 75 72 6e 61 6c 20 63 6f 6e 74 61 69 6e 73 0a  ournal contains.
0370: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 63 65  information nece
0380: 73 73 61 72 79 20 66 6f 72 20 72 65 63 6f 76 65  ssary for recove
0390: 72 69 6e 67 20 74 68 65 20 73 74 61 74 65 20 6f  ring the state o
03a0: 66 20 74 68 65 20 64 61 74 61 62 61 73 65 2c 20  f the database, 
03b0: 77 65 20 73 61 79 0a 74 68 61 74 20 69 74 20 69  we say.that it i
03c0: 73 20 61 20 22 68 6f 74 20 6a 6f 75 72 6e 61 6c  s a "hot journal
03d0: 22 2e 20 20 48 6f 74 20 6a 6f 75 72 6e 61 6c 73  ".  Hot journals
03e0: 20 6f 6e 6c 79 20 63 6f 6d 65 20 75 70 20 69 6e   only come up in
03f0: 20 61 6e 20 65 72 72 6f 72 20 72 65 63 6f 76 65   an error recove
0400: 72 79 0a 73 63 65 6e 61 72 69 6f 20 61 6e 64 20  ry.scenario and 
0410: 73 6f 20 61 72 65 20 75 6e 63 6f 6d 6d 6f 6e 2c  so are uncommon,
0420: 20 62 75 74 20 74 68 65 79 20 61 72 65 20 70 61   but they are pa
0430: 72 74 20 6f 66 20 74 68 65 20 73 74 61 74 65 20  rt of the state 
0440: 6f 66 20 61 6e 20 53 51 4c 69 74 65 0a 64 61 74  of an SQLite.dat
0450: 61 62 61 73 65 20 61 6e 64 20 73 6f 20 73 68 6f  abase and so sho
0460: 75 6c 64 20 6e 6f 74 20 62 65 20 69 67 6e 6f 72  uld not be ignor
0470: 65 64 2e 20 20 54 68 69 73 20 64 6f 63 75 6d 65  ed.  This docume
0480: 6e 74 20 64 65 66 69 6e 65 73 20 74 68 65 20 66  nt defines the f
0490: 6f 72 6d 61 74 0a 6f 66 20 61 20 72 6f 6c 6c 62  ormat.of a rollb
04a0: 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 28 61 6e 64  ack journal (and
04b0: 20 74 68 65 20 77 72 69 74 65 2d 61 68 65 61 64   the write-ahead
04c0: 20 6c 6f 67 20 66 69 6c 65 29 2c 20 62 75 74 20   log file), but 
04d0: 6d 61 69 6e 20 66 6f 63 75 73 20 69 73 0a 6f 6e  main focus is.on
04e0: 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
04f0: 73 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 68  se file.</p>..<h
0500: 33 3e 31 2e 31 20 50 61 67 65 73 3c 2f 68 33 3e  3>1.1 Pages</h3>
0510: 0a 0a 3c 70 3e 54 68 65 20 6d 61 69 6e 20 64 61  ..<p>The main da
0520: 74 61 62 61 73 65 20 66 69 6c 65 20 63 6f 6e 73  tabase file cons
0530: 69 73 74 73 20 6f 66 20 6f 6e 65 20 6f 72 20 6d  ists of one or m
0540: 6f 72 65 20 70 61 67 65 73 2e 20 20 5e 54 68 65  ore pages.  ^The
0550: 20 73 69 7a 65 20 6f 66 20 61 0a 70 61 67 65 20   size of a.page 
0560: 69 73 20 61 20 70 6f 77 65 72 20 6f 66 20 74 77  is a power of tw
0570: 6f 20 62 65 74 77 65 65 6e 20 35 31 32 20 61 6e  o between 512 an
0580: 64 20 36 35 35 33 36 20 69 6e 63 6c 75 73 69 76  d 65536 inclusiv
0590: 65 2e 20 20 41 6c 6c 20 70 61 67 65 73 20 77 69  e.  All pages wi
05a0: 74 68 69 6e 0a 74 68 65 20 73 61 6d 65 20 64 61  thin.the same da
05b0: 74 61 62 61 73 65 20 61 72 65 20 74 68 65 20 73  tabase are the s
05c0: 61 6d 65 20 73 69 7a 65 2e 20 20 5e 54 68 65 20  ame size.  ^The 
05d0: 70 61 67 65 20 73 69 7a 65 20 66 6f 72 20 61 20  page size for a 
05e0: 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 69 73  database file.is
05f0: 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74   determined by t
0600: 68 65 20 32 2d 62 79 74 65 20 69 6e 74 65 67 65  he 2-byte intege
0610: 72 20 6c 6f 63 61 74 65 64 20 61 74 20 61 6e 20  r located at an 
0620: 6f 66 66 73 65 74 20 6f 66 0a 31 36 20 62 79 74  offset of.16 byt
0630: 65 73 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69  es from the begi
0640: 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20 64 61 74  nning of the dat
0650: 61 62 61 73 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a  abase file.</p>.
0660: 0a 3c 70 3e 50 61 67 65 73 20 61 72 65 20 6e 75  .<p>Pages are nu
0670: 6d 62 65 72 65 64 20 62 65 67 69 6e 6e 69 6e 67  mbered beginning
0680: 20 77 69 74 68 20 31 2e 20 20 54 68 65 20 6d 61   with 1.  The ma
0690: 78 69 6d 75 6d 20 70 61 67 65 20 6e 75 6d 62 65  ximum page numbe
06a0: 72 20 69 73 0a 32 31 34 37 34 38 33 36 34 36 20  r is.2147483646 
06b0: 28 32 3c 73 75 70 3e 3c 73 6d 61 6c 6c 3e 33 31  (2<sup><small>31
06c0: 3c 2f 73 6d 61 6c 6c 3e 3c 2f 73 75 70 3e 20 2d  </small></sup> -
06d0: 20 32 29 2e 20 20 54 68 65 20 6d 69 6e 69 6d 75   2).  The minimu
06e0: 6d 20 73 69 7a 65 0a 53 51 4c 69 74 65 20 64 61  m size.SQLite da
06f0: 74 61 62 61 73 65 20 69 73 20 61 20 73 69 6e 67  tabase is a sing
0700: 6c 65 20 35 31 32 2d 62 79 74 65 20 70 61 67 65  le 512-byte page
0710: 2e 0a 54 68 65 20 6d 61 78 69 6d 75 6d 20 73 69  ..The maximum si
0720: 7a 65 20 64 61 74 61 62 61 73 65 20 77 6f 75 6c  ze database woul
0730: 64 20 62 65 20 32 31 34 37 34 38 33 36 34 36 20  d be 2147483646 
0740: 70 61 67 65 73 20 61 74 20 36 35 35 33 36 20 62  pages at 65536 b
0750: 79 74 65 73 20 70 65 72 0a 70 61 67 65 20 6f 72  ytes per.page or
0760: 20 31 34 30 2c 37 33 37 2c 34 38 38 2c 32 32 34   140,737,488,224
0770: 2c 32 35 36 20 62 79 74 65 73 20 28 61 62 6f 75  ,256 bytes (abou
0780: 74 20 31 34 30 20 74 65 72 61 62 79 74 65 73 29  t 140 terabytes)
0790: 2e 20 20 55 73 75 61 6c 6c 79 20 53 51 4c 69 74  .  Usually SQLit
07a0: 65 20 77 69 6c 6c 0a 68 69 74 20 74 68 65 20 6d  e will.hit the m
07b0: 61 78 69 6d 75 6d 20 66 69 6c 65 20 73 69 7a 65  aximum file size
07c0: 20 6c 69 6d 69 74 20 6f 66 20 74 68 65 20 75 6e   limit of the un
07d0: 64 65 72 6c 79 69 6e 67 20 66 69 6c 65 73 79 73  derlying filesys
07e0: 74 65 6d 20 6f 72 20 64 69 73 6b 0a 68 61 72 64  tem or disk.hard
07f0: 77 61 72 65 20 73 69 7a 65 20 6c 69 6d 69 74 20  ware size limit 
0800: 6c 6f 6e 67 20 62 65 66 6f 72 65 20 69 74 20 68  long before it h
0810: 69 74 73 20 69 74 73 20 6f 77 6e 20 69 6e 74 65  its its own inte
0820: 72 6e 61 6c 20 73 69 7a 65 20 6c 69 6d 69 74 2e  rnal size limit.
0830: 3c 2f 70 3e 0a 0a 3c 70 3e 49 6e 20 63 6f 6d 6d  </p>..<p>In comm
0840: 6f 6e 20 75 73 65 2c 20 53 51 4c 69 74 65 20 64  on use, SQLite d
0850: 61 74 61 62 61 73 65 73 20 74 65 6e 64 20 74 6f  atabases tend to
0860: 20 72 61 6e 67 65 20 69 6e 20 73 69 7a 65 20 66   range in size f
0870: 72 6f 6d 20 61 20 66 65 77 20 6b 69 6c 6f 62 79  rom a few kiloby
0880: 74 65 73 0a 74 6f 20 61 20 66 65 77 20 67 69 67  tes.to a few gig
0890: 61 62 79 74 65 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e  abytes.</p>..<p>
08a0: 41 74 20 61 6e 79 20 70 6f 69 6e 74 20 69 6e 20  At any point in 
08b0: 74 69 6d 65 2c 20 65 76 65 72 79 20 70 61 67 65  time, every page
08c0: 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74   in the main dat
08d0: 61 62 61 73 65 20 68 61 73 20 61 20 73 69 6e 67  abase has a sing
08e0: 6c 65 0a 75 73 65 20 77 68 69 63 68 20 69 73 20  le.use which is 
08f0: 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  one of the follo
0900: 77 69 6e 67 3a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 54  wing:.<ul>.<li>T
0910: 68 65 20 6c 6f 63 6b 2d 62 79 74 65 20 70 61 67  he lock-byte pag
0920: 65 0a 3c 6c 69 3e 41 20 66 72 65 65 6c 69 73 74  e.<li>A freelist
0930: 20 70 61 67 65 0a 3c 75 6c 3e 0a 3c 6c 69 3e 41   page.<ul>.<li>A
0940: 20 66 72 65 65 6c 69 73 74 20 74 72 75 6e 6b 20   freelist trunk 
0950: 70 61 67 65 0a 3c 6c 69 3e 41 20 66 72 65 65 6c  page.<li>A freel
0960: 69 73 74 20 6c 65 61 66 20 70 61 67 65 0a 3c 2f  ist leaf page.</
0970: 75 6c 3e 0a 3c 6c 69 3e 41 20 62 2d 74 72 65 65  ul>.<li>A b-tree
0980: 20 70 61 67 65 0a 3c 75 6c 3e 0a 3c 6c 69 3e 41   page.<ul>.<li>A
0990: 20 74 61 62 6c 65 20 62 2d 74 72 65 65 20 69 6e   table b-tree in
09a0: 74 65 72 69 6f 72 20 70 61 67 65 0a 3c 6c 69 3e  terior page.<li>
09b0: 41 20 74 61 62 6c 65 20 62 2d 74 72 65 65 20 6c  A table b-tree l
09c0: 65 61 66 20 70 61 67 65 0a 3c 6c 69 3e 41 6e 20  eaf page.<li>An 
09d0: 69 6e 64 65 78 20 62 2d 74 72 65 65 20 69 6e 74  index b-tree int
09e0: 65 72 69 6f 72 20 70 61 67 65 0a 3c 6c 69 3e 41  erior page.<li>A
09f0: 6e 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20 6c  n index b-tree l
0a00: 65 61 66 20 70 61 67 65 0a 3c 2f 75 6c 3e 0a 3c  eaf page.</ul>.<
0a10: 6c 69 3e 41 20 70 61 79 6c 6f 61 64 20 6f 76 65  li>A payload ove
0a20: 72 66 6c 6f 77 20 70 61 67 65 0a 3c 6c 69 3e 41  rflow page.<li>A
0a30: 20 70 6f 69 6e 74 65 72 20 6d 61 70 20 70 61 67   pointer map pag
0a40: 65 0a 3c 2f 75 6c 3e 0a 3c 2f 70 3e 0a 0a 3c 70  e.</ul>.</p>..<p
0a50: 3e 5e 41 6c 6c 20 72 65 61 64 73 20 66 72 6f 6d  >^All reads from
0a60: 20 61 6e 64 20 77 72 69 74 65 73 20 74 6f 20 74   and writes to t
0a70: 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
0a80: 20 66 69 6c 65 20 62 65 67 69 6e 20 61 74 20 61   file begin at a
0a90: 20 70 61 67 65 0a 62 6f 75 6e 64 61 72 79 20 61   page.boundary a
0aa0: 6e 64 20 61 6c 6c 20 77 72 69 74 65 73 20 61 72  nd all writes ar
0ab0: 65 20 61 6e 20 69 6e 74 65 67 65 72 20 6e 75 6d  e an integer num
0ac0: 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20  ber of pages in 
0ad0: 73 69 7a 65 2e 20 20 5e 52 65 61 64 73 0a 61 72  size.  ^Reads.ar
0ae0: 65 20 61 6c 73 6f 20 75 73 75 61 6c 6c 79 20 61  e also usually a
0af0: 6e 20 69 6e 74 65 67 65 72 20 6e 75 6d 62 65 72  n integer number
0b00: 20 6f 66 20 70 61 67 65 73 20 69 6e 20 73 69 7a   of pages in siz
0b10: 65 2c 20 77 69 74 68 20 74 68 65 20 6f 6e 65 20  e, with the one 
0b20: 65 78 63 65 70 74 69 6f 6e 0a 74 68 61 74 20 77  exception.that w
0b30: 68 65 6e 20 74 68 65 20 64 61 74 61 62 61 73 65  hen the database
0b40: 20 69 73 20 66 69 72 73 74 20 6f 70 65 6e 65 64   is first opened
0b50: 2c 20 74 68 65 20 66 69 72 73 74 20 31 30 30 20  , the first 100 
0b60: 62 79 74 65 73 20 6f 66 20 74 68 65 0a 64 61 74  bytes of the.dat
0b70: 61 62 61 73 65 20 66 69 6c 65 20 28 74 68 65 20  abase file (the 
0b80: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 68 65  database file he
0b90: 61 64 65 72 29 20 61 72 65 20 72 65 61 64 20 61  ader) are read a
0ba0: 73 20 61 20 73 75 62 2d 70 61 67 65 20 73 69 7a  s a sub-page siz
0bb0: 65 20 75 6e 69 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e  e unit.</p>..<p>
0bc0: 5e 42 65 66 6f 72 65 20 61 6e 79 20 69 6e 66 6f  ^Before any info
0bd0: 72 6d 61 74 69 6f 6e 2d 62 65 61 72 69 6e 67 20  rmation-bearing 
0be0: 70 61 67 65 20 6f 66 20 74 68 65 20 64 61 74 61  page of the data
0bf0: 62 61 73 65 20 69 73 20 6d 6f 64 69 66 69 65 64  base is modified
0c00: 2c 20 0a 74 68 65 20 6f 72 69 67 69 6e 61 6c 20  , .the original 
0c10: 75 6e 6d 6f 64 69 66 69 65 64 20 63 6f 6e 74 65  unmodified conte
0c20: 6e 74 20 6f 66 20 74 68 61 74 20 70 61 67 65 20  nt of that page 
0c30: 69 73 20 77 72 69 74 74 65 6e 20 69 6e 74 6f 20  is written into 
0c40: 74 68 65 20 0a 72 6f 6c 6c 62 61 63 6b 20 6a 6f  the .rollback jo
0c50: 75 72 6e 61 6c 2e 20 20 49 66 20 61 20 74 72 61  urnal.  If a tra
0c60: 6e 73 61 63 74 69 6f 6e 20 69 73 20 69 6e 74 65  nsaction is inte
0c70: 72 72 75 70 74 65 64 20 61 6e 64 20 6e 65 65 64  rrupted and need
0c80: 73 20 74 6f 20 62 65 20 0a 72 6f 6c 6c 65 64 20  s to be .rolled 
0c90: 62 61 63 6b 2c 20 74 68 65 20 72 6f 6c 6c 62 61  back, the rollba
0ca0: 63 6b 20 6a 6f 75 72 6e 61 6c 20 63 61 6e 20 74  ck journal can t
0cb0: 68 65 6e 20 62 65 20 75 73 65 64 20 74 6f 20 72  hen be used to r
0cc0: 65 73 74 6f 72 65 20 74 68 65 0a 64 61 74 61 62  estore the.datab
0cd0: 61 73 65 20 74 6f 20 69 74 73 20 6f 72 69 67 69  ase to its origi
0ce0: 6e 61 6c 20 73 74 61 74 65 2e 20 20 5e 46 72 65  nal state.  ^Fre
0cf0: 65 6c 69 73 74 20 6c 65 61 66 20 70 61 67 65 73  elist leaf pages
0d00: 20 62 65 61 72 20 6e 6f 0a 69 6e 66 6f 72 6d 61   bear no.informa
0d10: 74 69 6f 6e 20 74 68 61 74 20 77 6f 75 6c 64 20  tion that would 
0d20: 6e 65 65 64 20 74 6f 20 62 65 20 72 65 73 74 6f  need to be resto
0d30: 72 65 64 20 6f 6e 20 61 20 72 6f 6c 6c 62 61 63  red on a rollbac
0d40: 6b 20 61 6e 64 20 73 6f 20 74 68 65 79 0a 61 72  k and so they.ar
0d50: 65 20 6e 6f 74 20 77 72 69 74 74 65 6e 20 74 6f  e not written to
0d60: 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20 70 72 69   the journal pri
0d70: 6f 72 20 74 6f 20 6d 6f 64 69 66 69 63 61 74 69  or to modificati
0d80: 6f 6e 2c 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a  on, in order to.
0d90: 72 65 64 75 63 65 20 64 69 73 6b 20 49 2f 4f 2e  reduce disk I/O.
0da0: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  </p>..<tcl>hd_fr
0db0: 61 67 6d 65 6e 74 20 64 61 74 61 62 61 73 65 5f  agment database_
0dc0: 68 65 61 64 65 72 20 7b 64 61 74 61 62 61 73 65  header {database
0dd0: 20 68 65 61 64 65 72 7d 3c 2f 74 63 6c 3e 0a 3c   header}</tcl>.<
0de0: 68 33 3e 31 2e 32 20 54 68 65 20 44 61 74 61 62  h3>1.2 The Datab
0df0: 61 73 65 20 48 65 61 64 65 72 3c 2f 68 33 3e 0a  ase Header</h3>.
0e00: 0a 3c 70 3e 54 68 65 20 66 69 72 73 74 20 31 30  .<p>The first 10
0e10: 30 20 62 79 74 65 73 20 6f 66 20 74 68 65 20 64  0 bytes of the d
0e20: 61 74 61 62 61 73 65 20 66 69 6c 65 20 63 6f 6d  atabase file com
0e30: 70 72 69 73 65 20 74 68 65 20 64 61 74 61 62 61  prise the databa
0e40: 73 65 20 66 69 6c 65 20 0a 68 65 61 64 65 72 2e  se file .header.
0e50: 20 20 54 68 65 20 64 61 74 61 62 61 73 65 20 66    The database f
0e60: 69 6c 65 20 68 65 61 64 65 72 20 69 73 20 64 69  ile header is di
0e70: 76 69 64 65 64 20 69 6e 74 6f 20 66 69 65 6c 64  vided into field
0e80: 73 20 61 73 20 73 68 6f 77 6e 20 62 79 0a 74 68  s as shown by.th
0e90: 65 20 74 61 62 6c 65 20 62 65 6c 6f 77 2e 20 20  e table below.  
0ea0: 41 6c 6c 20 6d 75 6c 74 69 62 79 74 65 20 66 69  All multibyte fi
0eb0: 65 6c 64 73 20 69 6e 20 74 68 65 20 64 61 74 61  elds in the data
0ec0: 62 61 73 65 20 66 69 6c 65 20 68 65 61 64 65 72  base file header
0ed0: 20 61 72 65 0a 73 74 6f 72 65 64 20 77 69 74 68   are.stored with
0ee0: 20 74 68 65 20 6d 75 73 74 20 73 69 67 6e 69 66   the must signif
0ef0: 69 63 61 6e 74 20 62 79 74 65 20 66 69 72 73 74  icant byte first
0f00: 20 28 62 69 67 2d 65 6e 64 69 61 6e 29 2e 3c 2f   (big-endian).</
0f10: 70 3e 0a 0a 3c 63 65 6e 74 65 72 3e 0a 3c 69 3e  p>..<center>.<i>
0f20: 44 61 74 61 62 61 73 65 20 48 65 61 64 65 72 20  Database Header 
0f30: 46 6f 72 6d 61 74 3c 2f 69 3e 3c 62 72 3e 0a 3c  Format</i><br>.<
0f40: 74 61 62 6c 65 20 77 69 64 74 68 3d 22 38 30 25  table width="80%
0f50: 22 20 62 6f 72 64 65 72 3d 31 3e 0a 3c 74 72 3e  " border=1>.<tr>
0f60: 3c 74 68 3e 4f 66 66 73 65 74 3c 74 68 3e 53 69  <th>Offset<th>Si
0f70: 7a 65 3c 74 68 3e 44 65 73 63 72 69 70 74 69 6f  ze<th>Descriptio
0f80: 6e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  n.<tr><td valign
0f90: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
0fa0: 72 3e 30 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  r>0<td valign=to
0fb0: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31  p align=center>1
0fc0: 36 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e  6<td align=left>
0fd0: 0a 54 68 65 20 68 65 61 64 65 72 20 73 74 72 69  .The header stri
0fe0: 6e 67 3a 20 22 53 51 4c 69 74 65 20 66 6f 72 6d  ng: "SQLite form
0ff0: 61 74 20 33 5c 30 30 30 22 0a 3c 74 72 3e 3c 74  at 3\000".<tr><t
1000: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
1010: 67 6e 3d 63 65 6e 74 65 72 3e 31 36 3c 74 64 20  gn=center>16<td 
1020: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
1030: 3d 63 65 6e 74 65 72 3e 32 3c 74 64 20 61 6c 69  =center>2<td ali
1040: 67 6e 3d 6c 65 66 74 3e 0a 54 68 65 20 64 61 74  gn=left>.The dat
1050: 61 62 61 73 65 20 70 61 67 65 20 73 69 7a 65 20  abase page size 
1060: 69 6e 20 62 79 74 65 73 2e 20 20 4d 75 73 74 20  in bytes.  Must 
1070: 62 65 20 61 20 70 6f 77 65 72 20 6f 66 20 74 77  be a power of tw
1080: 6f 20 62 65 74 77 65 65 6e 20 35 31 32 0a 61 6e  o between 512.an
1090: 64 20 33 32 37 36 38 20 69 6e 63 6c 75 73 69 76  d 32768 inclusiv
10a0: 65 2c 20 6f 72 20 74 68 65 20 76 61 6c 75 65 20  e, or the value 
10b0: 31 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20 61  1 representing a
10c0: 20 70 61 67 65 20 73 69 7a 65 20 6f 66 20 36 35   page size of 65
10d0: 35 33 36 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c  536..<tr><td val
10e0: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
10f0: 6e 74 65 72 3e 31 38 3c 74 64 20 76 61 6c 69 67  nter>18<td valig
1100: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
1110: 65 72 3e 31 3c 74 64 20 61 6c 69 67 6e 3d 6c 65  er>1<td align=le
1120: 66 74 3e 0a 46 69 6c 65 20 66 6f 72 6d 61 74 20  ft>.File format 
1130: 77 72 69 74 65 20 76 65 72 73 69 6f 6e 2e 20 20  write version.  
1140: 31 20 66 6f 72 20 6c 65 67 61 63 79 3b 20 32 20  1 for legacy; 2 
1150: 66 6f 72 20 5b 57 41 4c 5d 2e 0a 3c 74 72 3e 3c  for [WAL]..<tr><
1160: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
1170: 69 67 6e 3d 63 65 6e 74 65 72 3e 31 39 3c 74 64  ign=center>19<td
1180: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
1190: 6e 3d 63 65 6e 74 65 72 3e 31 3c 74 64 20 61 6c  n=center>1<td al
11a0: 69 67 6e 3d 6c 65 66 74 3e 0a 46 69 6c 65 20 66  ign=left>.File f
11b0: 6f 72 6d 61 74 20 72 65 61 64 20 76 65 72 73 69  ormat read versi
11c0: 6f 6e 2e 20 20 31 20 66 6f 72 20 6c 65 67 61 63  on.  1 for legac
11d0: 79 3b 20 32 20 66 6f 72 20 5b 57 41 4c 5d 2e 0a  y; 2 for [WAL]..
11e0: 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74  <tr><td valign=t
11f0: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
1200: 32 30 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  20<td valign=top
1210: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 3c   align=center>1<
1220: 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 42  td align=left>.B
1230: 79 74 65 73 20 6f 66 20 75 6e 75 73 65 64 20 22  ytes of unused "
1240: 72 65 73 65 72 76 65 64 22 20 73 70 61 63 65 20  reserved" space 
1250: 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 65 61  at the end of ea
1260: 63 68 20 70 61 67 65 2e 20 20 55 73 75 61 6c 6c  ch page.  Usuall
1270: 79 20 30 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c  y 0..<tr><td val
1280: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
1290: 6e 74 65 72 3e 32 31 3c 74 64 20 76 61 6c 69 67  nter>21<td valig
12a0: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
12b0: 65 72 3e 31 3c 74 64 20 61 6c 69 67 6e 3d 6c 65  er>1<td align=le
12c0: 66 74 3e 0a 4d 61 78 69 6d 75 6d 20 65 6d 62 65  ft>.Maximum embe
12d0: 64 64 65 64 20 70 61 79 6c 6f 61 64 20 66 72 61  dded payload fra
12e0: 63 74 69 6f 6e 2e 20 20 4d 75 73 74 20 62 65 20  ction.  Must be 
12f0: 36 34 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  64..<tr><td vali
1300: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
1310: 74 65 72 3e 32 32 3c 74 64 20 76 61 6c 69 67 6e  ter>22<td valign
1320: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
1330: 72 3e 31 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66  r>1<td align=lef
1340: 74 3e 0a 4d 69 6e 69 6d 75 6d 20 65 6d 62 65 64  t>.Minimum embed
1350: 64 65 64 20 70 61 79 6c 6f 61 64 20 66 72 61 63  ded payload frac
1360: 74 69 6f 6e 2e 20 20 4d 75 73 74 20 62 65 20 33  tion.  Must be 3
1370: 32 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  2..<tr><td valig
1380: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
1390: 65 72 3e 32 33 3c 74 64 20 76 61 6c 69 67 6e 3d  er>23<td valign=
13a0: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
13b0: 3e 31 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74  >1<td align=left
13c0: 3e 0a 4c 65 61 66 20 70 61 79 6c 6f 61 64 20 66  >.Leaf payload f
13d0: 72 61 63 74 69 6f 6e 2e 20 20 4d 75 73 74 20 62  raction.  Must b
13e0: 65 20 33 32 2e 0a 3c 74 72 3e 3c 74 64 20 76 61  e 32..<tr><td va
13f0: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
1400: 65 6e 74 65 72 3e 32 34 3c 74 64 20 76 61 6c 69  enter>24<td vali
1410: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
1420: 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c  ter>4<td align=l
1430: 65 66 74 3e 0a 46 69 6c 65 20 63 68 61 6e 67 65  eft>.File change
1440: 20 63 6f 75 6e 74 65 72 2e 0a 3c 74 72 3e 3c 74   counter..<tr><t
1450: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
1460: 67 6e 3d 63 65 6e 74 65 72 3e 32 38 3c 74 64 20  gn=center>28<td 
1470: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
1480: 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69  =center>4<td ali
1490: 67 6e 3d 6c 65 66 74 3e 0a 53 69 7a 65 20 6f 66  gn=left>.Size of
14a0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
14b0: 6c 65 20 69 6e 20 70 61 67 65 73 2e 20 20 54 68  le in pages.  Th
14c0: 65 20 22 69 6e 2d 68 65 61 64 65 72 20 64 61 74  e "in-header dat
14d0: 61 62 61 73 65 20 73 69 7a 65 22 2e 0a 3c 74 72  abase size"..<tr
14e0: 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
14f0: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 33 32 3c  align=center>32<
1500: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
1510: 69 67 6e 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20  ign=center>4<td 
1520: 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 50 61 67 65  align=left>.Page
1530: 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 66   number of the f
1540: 69 72 73 74 20 66 72 65 65 6c 69 73 74 20 74 72  irst freelist tr
1550: 75 6e 6b 20 70 61 67 65 2e 0a 3c 74 72 3e 3c 74  unk page..<tr><t
1560: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
1570: 67 6e 3d 63 65 6e 74 65 72 3e 33 36 3c 74 64 20  gn=center>36<td 
1580: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
1590: 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69  =center>4<td ali
15a0: 67 6e 3d 6c 65 66 74 3e 0a 54 6f 74 61 6c 20 6e  gn=left>.Total n
15b0: 75 6d 62 65 72 20 6f 66 20 66 72 65 65 6c 69 73  umber of freelis
15c0: 74 20 70 61 67 65 73 2e 0a 3c 74 72 3e 3c 74 64  t pages..<tr><td
15d0: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
15e0: 6e 3d 63 65 6e 74 65 72 3e 34 30 3c 74 64 20 76  n=center>40<td v
15f0: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
1600: 63 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69 67  center>4<td alig
1610: 6e 3d 6c 65 66 74 3e 0a 54 68 65 20 73 63 68 65  n=left>.The sche
1620: 6d 61 20 63 6f 6f 6b 69 65 2e 0a 3c 74 72 3e 3c  ma cookie..<tr><
1630: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
1640: 69 67 6e 3d 63 65 6e 74 65 72 3e 34 34 3c 74 64  ign=center>44<td
1650: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
1660: 6e 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c  n=center>4<td al
1670: 69 67 6e 3d 6c 65 66 74 3e 0a 54 68 65 20 73 63  ign=left>.The sc
1680: 68 65 6d 61 20 66 6f 72 6d 61 74 20 6e 75 6d 62  hema format numb
1690: 65 72 2e 20 20 53 75 70 70 6f 72 74 65 64 20 73  er.  Supported s
16a0: 63 68 65 6d 61 20 66 6f 72 6d 61 74 73 20 61 72  chema formats ar
16b0: 65 20 31 2c 20 32 2c 20 33 2c 20 61 6e 64 20 34  e 1, 2, 3, and 4
16c0: 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  ..<tr><td valign
16d0: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
16e0: 72 3e 34 38 3c 74 64 20 76 61 6c 69 67 6e 3d 74  r>48<td valign=t
16f0: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
1700: 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e  4<td align=left>
1710: 0a 44 65 66 61 75 6c 74 20 70 61 67 65 20 63 61  .Default page ca
1720: 63 68 65 20 73 69 7a 65 2e 0a 3c 74 72 3e 3c 74  che size..<tr><t
1730: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
1740: 67 6e 3d 63 65 6e 74 65 72 3e 35 32 3c 74 64 20  gn=center>52<td 
1750: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
1760: 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69  =center>4<td ali
1770: 67 6e 3d 6c 65 66 74 3e 0a 54 68 65 20 70 61 67  gn=left>.The pag
1780: 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20  e number of the 
1790: 6c 61 72 67 65 73 74 20 72 6f 6f 74 20 62 2d 74  largest root b-t
17a0: 72 65 65 20 70 61 67 65 20 77 68 65 6e 20 69 6e  ree page when in
17b0: 20 61 75 74 6f 2d 76 61 63 75 75 6d 20 6f 72 0a   auto-vacuum or.
17c0: 69 6e 63 72 65 6d 65 6e 74 61 6c 2d 76 61 63 75  incremental-vacu
17d0: 75 6d 20 6d 6f 64 65 73 2c 20 6f 72 20 7a 65 72  um modes, or zer
17e0: 6f 20 6f 74 68 65 72 77 69 73 65 2e 0a 3c 74 72  o otherwise..<tr
17f0: 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
1800: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 35 36 3c  align=center>56<
1810: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
1820: 69 67 6e 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20  ign=center>4<td 
1830: 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 54 68 65 20  align=left>.The 
1840: 64 61 74 61 62 61 73 65 20 74 65 78 74 20 65 6e  database text en
1850: 63 6f 64 69 6e 67 2e 20 20 41 20 76 61 6c 75 65  coding.  A value
1860: 20 6f 66 20 31 20 6d 65 61 6e 73 20 55 54 46 2d   of 1 means UTF-
1870: 38 2e 20 20 41 20 76 61 6c 75 65 20 6f 66 20 32  8.  A value of 2
1880: 0a 6d 65 61 6e 73 20 55 54 46 2d 31 36 6c 65 2e  .means UTF-16le.
1890: 20 20 41 20 76 61 6c 75 65 20 6f 66 20 33 20 6d    A value of 3 m
18a0: 65 61 6e 73 20 55 54 46 2d 31 36 62 65 2e 0a 3c  eans UTF-16be..<
18b0: 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
18c0: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 36  p align=center>6
18d0: 30 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  0<td valign=top 
18e0: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 3c 74  align=center>4<t
18f0: 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 54 68  d align=left>.Th
1900: 65 20 22 75 73 65 72 20 76 65 72 73 69 6f 6e 22  e "user version"
1910: 20 61 73 20 72 65 61 64 20 61 6e 64 20 73 65 74   as read and set
1920: 20 62 79 20 74 68 65 20 5b 75 73 65 72 5f 76 65   by the [user_ve
1930: 72 73 69 6f 6e 20 70 72 61 67 6d 61 5d 2e 0a 3c  rsion pragma]..<
1940: 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
1950: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 36  p align=center>6
1960: 34 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  4<td valign=top 
1970: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 3c 74  align=center>4<t
1980: 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 54 72  d align=left>.Tr
1990: 75 65 20 28 6e 6f 6e 2d 7a 65 72 6f 29 20 66 6f  ue (non-zero) fo
19a0: 72 20 69 6e 63 72 65 6d 65 6e 74 61 6c 2d 76 61  r incremental-va
19b0: 63 75 75 6d 20 6d 6f 64 65 2e 20 20 46 61 6c 73  cuum mode.  Fals
19c0: 65 20 28 7a 65 72 6f 29 20 6f 74 68 65 72 77 69  e (zero) otherwi
19d0: 73 65 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  se..<tr><td vali
19e0: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
19f0: 74 65 72 3e 36 38 3c 74 64 20 76 61 6c 69 67 6e  ter>68<td valign
1a00: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
1a10: 72 3e 32 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65  r>24<td align=le
1a20: 66 74 3e 0a 52 65 73 65 72 76 65 64 20 66 6f 72  ft>.Reserved for
1a30: 20 65 78 70 61 6e 73 69 6f 6e 2e 20 20 4d 75 73   expansion.  Mus
1a40: 74 20 62 65 20 7a 65 72 6f 2e 0a 3c 74 72 3e 3c  t be zero..<tr><
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 39 32 3c 74 64  ign=center>92<td
1a70: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
1a80: 6e 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c  n=center>4<td al
1a90: 69 67 6e 3d 6c 65 66 74 3e 0a 54 68 65 20 5b 76  ign=left>.The [v
1aa0: 65 72 73 69 6f 6e 2d 76 61 6c 69 64 2d 66 6f 72  ersion-valid-for
1ab0: 20 6e 75 6d 62 65 72 5d 2e 0a 3c 74 72 3e 3c 74   number]..<tr><t
1ac0: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
1ad0: 67 6e 3d 63 65 6e 74 65 72 3e 39 36 3c 74 64 20  gn=center>96<td 
1ae0: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
1af0: 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69  =center>4<td ali
1b00: 67 6e 3d 6c 65 66 74 3e 0a 5b 53 51 4c 49 54 45  gn=left>.[SQLITE
1b10: 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42 45 52 5d  _VERSION_NUMBER]
1b20: 0a 3c 2f 74 61 62 6c 65 3e 3c 2f 63 65 6e 74 65  .</table></cente
1b30: 72 3e 0a 0a 3c 68 34 3e 31 2e 32 2e 31 20 4d 61  r>..<h4>1.2.1 Ma
1b40: 67 69 63 20 48 65 61 64 65 72 20 53 74 72 69 6e  gic Header Strin
1b50: 67 3c 2f 68 34 3e 0a 0a 3c 70 3e 5e 45 76 65 72  g</h4>..<p>^Ever
1b60: 79 20 76 61 6c 69 64 20 53 51 4c 69 74 65 20 64  y valid SQLite d
1b70: 61 74 61 62 61 73 65 20 66 69 6c 65 20 62 65 67  atabase file beg
1b80: 69 6e 73 20 77 69 74 68 20 74 68 65 20 66 6f 6c  ins with the fol
1b90: 6c 6f 77 69 6e 67 20 31 36 20 62 79 74 65 73 20  lowing 16 bytes 
1ba0: 0a 28 69 6e 20 68 65 78 29 3a 20 35 33 20 35 31  .(in hex): 53 51
1bb0: 20 34 63 20 36 39 20 37 34 20 36 35 20 32 30 20   4c 69 74 65 20 
1bc0: 36 36 20 36 66 20 37 32 20 36 64 20 36 31 20 37  66 6f 72 6d 61 7
1bd0: 34 20 32 30 20 33 33 20 30 30 2e 20 20 54 68 69  4 20 33 00.  Thi
1be0: 73 20 62 79 74 65 20 73 65 71 75 65 6e 63 65 0a  s byte sequence.
1bf0: 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74  corresponds to t
1c00: 68 65 20 55 54 46 2d 38 20 73 74 72 69 6e 67 20  he UTF-8 string 
1c10: 22 53 51 4c 69 74 65 20 66 6f 72 6d 61 74 20 33  "SQLite format 3
1c20: 22 20 69 6e 63 6c 75 64 69 6e 67 20 74 68 65 20  " including the 
1c30: 6e 75 6c 0a 74 65 72 6d 69 6e 61 74 6f 72 20 63  nul.terminator c
1c40: 68 61 72 61 63 74 65 72 20 61 74 20 74 68 65 20  haracter at the 
1c50: 65 6e 64 2e 3c 2f 70 3e 0a 0a 3c 68 34 3e 31 2e  end.</p>..<h4>1.
1c60: 32 2e 32 20 50 61 67 65 20 53 69 7a 65 3c 2f 68  2.2 Page Size</h
1c70: 34 3e 0a 0a 3c 70 3e 54 68 65 20 74 77 6f 2d 62  4>..<p>The two-b
1c80: 79 74 65 20 76 61 6c 75 65 20 62 65 67 69 6e 6e  yte value beginn
1c90: 69 6e 67 20 61 74 20 6f 66 66 73 65 74 20 31 36  ing at offset 16
1ca0: 20 64 65 74 65 72 6d 69 6e 65 73 20 74 68 65 20   determines the 
1cb0: 70 61 67 65 20 73 69 7a 65 20 6f 66 20 0a 74 68  page size of .th
1cc0: 65 20 64 61 74 61 62 61 73 65 2e 20 20 46 6f 72  e database.  For
1cd0: 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 73   SQLite versions
1ce0: 20 33 2e 37 2e 30 2e 31 20 61 6e 64 20 65 61 72   3.7.0.1 and ear
1cf0: 6c 69 65 72 2c 20 74 68 69 73 20 76 61 6c 75 65  lier, this value
1d00: 20 69 73 20 0a 69 6e 74 65 72 70 72 65 74 65 64   is .interpreted
1d10: 20 61 73 20 61 20 62 69 67 2d 65 6e 64 69 61 6e   as a big-endian
1d20: 20 69 6e 74 65 67 65 72 20 61 6e 64 20 6d 75 73   integer and mus
1d30: 74 20 62 65 20 61 20 70 6f 77 65 72 20 6f 66 20  t be a power of 
1d40: 74 77 6f 20 62 65 74 77 65 65 6e 0a 35 31 32 20  two between.512 
1d50: 61 6e 64 20 33 32 37 36 38 2c 20 69 6e 63 6c 75  and 32768, inclu
1d60: 73 69 76 65 2e 20 20 42 65 67 69 6e 6e 69 6e 67  sive.  Beginning
1d70: 20 77 69 74 68 20 53 51 4c 69 74 65 20 76 65 72   with SQLite ver
1d80: 73 69 6f 6e 20 33 2e 37 2e 31 2c 20 61 20 70 61  sion 3.7.1, a pa
1d90: 67 65 0a 73 69 7a 65 20 6f 66 20 36 35 35 33 36  ge.size of 65536
1da0: 20 62 79 74 65 73 20 69 73 20 73 75 70 70 6f 72   bytes is suppor
1db0: 74 65 64 2e 20 20 54 68 65 20 76 61 6c 75 65 20  ted.  The value 
1dc0: 36 35 35 33 36 20 77 69 6c 6c 20 6e 6f 74 20 66  65536 will not f
1dd0: 69 74 20 69 6e 20 61 0a 74 77 6f 2d 62 79 74 65  it in a.two-byte
1de0: 20 69 6e 74 65 67 65 72 2c 20 73 6f 20 74 6f 20   integer, so to 
1df0: 73 70 65 63 69 66 79 20 61 20 36 35 35 33 36 2d  specify a 65536-
1e00: 62 79 74 65 20 70 61 67 65 20 73 69 7a 65 2c 20  byte page size, 
1e10: 74 68 65 20 76 61 6c 75 65 20 69 73 0a 61 74 20  the value is.at 
1e20: 6f 66 66 73 65 74 20 31 36 20 69 73 20 30 78 30  offset 16 is 0x0
1e30: 30 20 30 78 30 31 2e 0a 54 68 69 73 20 76 61 6c  0 0x01..This val
1e40: 75 65 20 63 61 6e 20 62 65 20 69 6e 74 65 72 70  ue can be interp
1e50: 72 65 74 65 64 20 61 73 20 61 20 62 69 67 2d 65  reted as a big-e
1e60: 6e 64 69 61 6e 0a 31 20 61 6e 64 20 74 68 6f 75  ndian.1 and thou
1e70: 67 68 74 20 6f 66 20 69 73 20 61 73 20 61 20 6d  ght of is as a m
1e80: 61 67 69 63 20 6e 75 6d 62 65 72 20 74 6f 20 72  agic number to r
1e90: 65 70 72 65 73 65 6e 74 20 74 68 65 20 36 35 35  epresent the 655
1ea0: 33 36 20 70 61 67 65 20 73 69 7a 65 2e 0a 4f 72  36 page size..Or
1eb0: 20 6f 6e 65 20 63 61 6e 20 76 69 65 77 20 74 68   one can view th
1ec0: 65 20 74 77 6f 2d 62 79 74 65 20 66 69 65 6c 64  e two-byte field
1ed0: 20 61 73 20 61 20 6c 69 74 74 6c 65 20 65 6e 64   as a little end
1ee0: 69 61 6e 20 6e 75 6d 62 65 72 20 61 6e 64 20 73  ian number and s
1ef0: 61 79 0a 74 68 61 74 20 69 74 20 72 65 70 72 65  ay.that it repre
1f00: 73 65 6e 74 73 20 74 68 65 20 70 61 67 65 20 73  sents the page s
1f10: 69 7a 65 20 64 69 76 69 64 65 64 20 62 79 20 32  ize divided by 2
1f20: 35 36 2e 20 20 54 68 65 73 65 20 74 77 6f 20 0a  56.  These two .
1f30: 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 73 20  interpretations 
1f40: 6f 66 20 74 68 65 20 70 61 67 65 2d 73 69 7a 65  of the page-size
1f50: 20 66 69 65 6c 64 20 61 72 65 20 65 71 75 69 76   field are equiv
1f60: 61 6c 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c 68 34 3e  alent.</p>..<h4>
1f70: 31 2e 32 2e 33 20 46 69 6c 65 20 66 6f 72 6d 61  1.2.3 File forma
1f80: 74 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72  t version number
1f90: 73 3c 2f 68 34 3e 0a 0a 3c 70 3e 54 68 65 20 66  s</h4>..<p>The f
1fa0: 69 6c 65 20 66 6f 72 6d 61 74 20 77 72 69 74 65  ile format write
1fb0: 20 76 65 72 73 69 6f 6e 20 61 6e 64 20 66 69 6c   version and fil
1fc0: 65 20 66 6f 72 6d 61 74 20 72 65 61 64 20 76 65  e format read ve
1fd0: 72 73 69 6f 6e 20 61 74 20 6f 66 66 73 65 74 73  rsion at offsets
1fe0: 0a 31 38 20 61 6e 64 20 31 39 20 61 72 65 20 69  .18 and 19 are i
1ff0: 6e 74 65 6e 64 65 64 20 74 6f 20 61 6c 6c 6f 77  ntended to allow
2000: 20 66 6f 72 20 65 6e 68 61 6e 63 65 6d 65 6e 74   for enhancement
2010: 73 20 6f 66 20 74 68 65 20 66 69 6c 65 20 66 6f  s of the file fo
2020: 72 6d 61 74 0a 69 6e 20 66 75 74 75 72 65 20 76  rmat.in future v
2030: 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74  ersions of SQLit
2040: 65 2e 20 20 49 6e 20 63 75 72 72 65 6e 74 20 76  e.  In current v
2050: 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74  ersions of SQLit
2060: 65 2c 20 62 6f 74 68 20 6f 66 0a 74 68 65 73 65  e, both of.these
2070: 20 76 61 6c 75 65 73 20 61 72 65 20 31 20 66 6f   values are 1 fo
2080: 72 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e  r rollback journ
2090: 61 6c 6c 69 6e 67 20 6d 6f 64 65 73 20 61 6e 64  alling modes and
20a0: 20 32 20 66 6f 72 20 5b 57 41 4c 5d 0a 6a 6f 75   2 for [WAL].jou
20b0: 72 6e 61 6c 6c 69 6e 67 20 6d 6f 64 65 2e 20 20  rnalling mode.  
20c0: 49 66 20 61 20 76 65 72 73 69 6f 6e 20 6f 66 20  If a version of 
20d0: 53 51 4c 69 74 65 20 63 6f 64 65 64 20 74 6f 20  SQLite coded to 
20e0: 74 68 65 20 63 75 72 72 65 6e 74 0a 66 69 6c 65  the current.file
20f0: 20 66 6f 72 6d 61 74 20 73 70 65 63 69 66 69 63   format specific
2100: 61 74 69 6f 6e 20 65 6e 63 6f 75 6e 74 65 72 73  ation encounters
2110: 20 61 20 64 61 74 61 62 61 73 65 20 66 69 6c 65   a database file
2120: 20 77 68 65 72 65 20 74 68 65 20 72 65 61 64 0a   where the read.
2130: 76 65 72 73 69 6f 6e 20 69 73 20 31 20 6f 72 20  version is 1 or 
2140: 32 20 62 75 74 20 74 68 65 20 77 72 69 74 65 20  2 but the write 
2150: 76 65 72 73 69 6f 6e 20 69 73 20 67 72 65 61 74  version is great
2160: 65 72 20 74 68 61 6e 20 32 2c 20 74 68 65 6e 20  er than 2, then 
2170: 74 68 65 20 64 61 74 61 62 61 73 65 0a 66 69 6c  the database.fil
2180: 65 20 6d 75 73 74 20 62 65 20 74 72 65 61 74 65  e must be treate
2190: 64 20 61 73 20 72 65 61 64 2d 6f 6e 6c 79 2e 20  d as read-only. 
21a0: 20 49 66 20 61 20 64 61 74 61 62 61 73 65 20 66   If a database f
21b0: 69 6c 65 20 77 69 74 68 20 61 20 72 65 61 64 20  ile with a read 
21c0: 76 65 72 73 69 6f 6e 0a 67 72 65 61 74 65 72 20  version.greater 
21d0: 74 68 61 6e 20 32 20 69 73 20 65 6e 63 6f 75 6e  than 2 is encoun
21e0: 74 65 72 2c 20 74 68 65 6e 20 74 68 61 74 20 64  ter, then that d
21f0: 61 74 61 62 61 73 65 20 63 61 6e 6e 6f 74 20 62  atabase cannot b
2200: 65 20 72 65 61 64 20 6f 72 20 77 72 69 74 74 65  e read or writte
2210: 6e 2e 3c 2f 70 3e 0a 0a 3c 68 34 3e 31 2e 32 2e  n.</p>..<h4>1.2.
2220: 34 20 52 65 73 65 72 76 65 64 20 62 79 74 65 73  4 Reserved bytes
2230: 20 70 65 72 20 70 61 67 65 3c 2f 68 34 3e 0a 0a   per page</h4>..
2240: 3c 70 3e 53 51 4c 69 74 65 20 68 61 73 20 74 68  <p>SQLite has th
2250: 65 20 61 62 69 6c 69 74 79 20 74 6f 20 73 65 74  e ability to set
2260: 20 61 73 69 64 65 20 61 20 73 6d 61 6c 6c 20 6e   aside a small n
2270: 75 6d 62 65 72 20 6f 66 20 65 78 74 72 61 20 62  umber of extra b
2280: 79 74 65 73 20 61 74 0a 74 68 65 20 65 6e 64 20  ytes at.the end 
2290: 6f 66 20 65 76 65 72 79 20 70 61 67 65 20 66 6f  of every page fo
22a0: 72 20 75 73 65 20 62 79 20 65 78 74 65 6e 73 69  r use by extensi
22b0: 6f 6e 73 2e 20 20 54 68 65 73 65 20 65 78 74 72  ons.  These extr
22c0: 61 20 62 79 74 65 73 20 61 72 65 0a 75 73 65 64  a bytes are.used
22d0: 2c 20 66 6f 72 20 65 78 61 6d 70 6c 65 2c 20 62  , for example, b
22e0: 79 20 74 68 65 20 53 51 4c 69 74 65 20 45 6e 63  y the SQLite Enc
22f0: 72 79 70 74 69 6f 6e 20 45 78 74 65 6e 73 69 6f  ryption Extensio
2300: 6e 20 74 6f 20 73 74 6f 72 65 20 61 20 6e 6f 6e  n to store a non
2310: 63 65 0a 61 6e 64 2f 6f 72 20 63 72 79 70 74 6f  ce.and/or crypto
2320: 67 72 61 70 68 69 63 20 63 68 65 63 6b 73 75 6d  graphic checksum
2330: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
2340: 20 65 61 63 68 20 70 61 67 65 2e 20 20 5e 54 68   each page.  ^Th
2350: 65 20 0a 22 72 65 73 65 72 76 65 64 20 73 70 61  e ."reserved spa
2360: 63 65 22 20 73 69 7a 65 20 69 6e 20 74 68 65 20  ce" size in the 
2370: 31 2d 62 79 74 65 20 69 6e 74 65 67 65 72 20 61  1-byte integer a
2380: 74 20 6f 66 66 73 65 74 20 32 30 20 69 73 20 74  t offset 20 is t
2390: 68 65 20 6e 75 6d 62 65 72 0a 6f 66 20 62 79 74  he number.of byt
23a0: 65 73 20 6f 66 20 73 70 61 63 65 20 61 74 20 74  es of space at t
23b0: 68 65 20 65 6e 64 20 6f 66 20 65 61 63 68 20 70  he end of each p
23c0: 61 67 65 20 74 6f 20 72 65 73 65 72 76 65 20 66  age to reserve f
23d0: 6f 72 20 65 78 74 65 6e 73 69 6f 6e 73 2e 0a 54  or extensions..T
23e0: 68 69 73 20 76 61 6c 75 65 20 69 73 20 75 73 75  his value is usu
23f0: 61 6c 6c 79 20 30 2e 20 20 54 68 65 20 76 61 6c  ally 0.  The val
2400: 75 65 20 63 61 6e 20 62 65 20 6f 64 64 2e 3c 2f  ue can be odd.</
2410: 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
2420: 6d 65 6e 74 20 75 73 61 62 6c 65 5f 73 69 7a 65  ment usable_size
2430: 20 7b 75 73 61 62 6c 65 20 73 69 7a 65 7d 3c 2f   {usable size}</
2440: 74 63 6c 3e 0a 3c 70 3e 54 68 65 20 22 75 73 61  tcl>.<p>The "usa
2450: 62 6c 65 20 73 69 7a 65 22 20 6f 66 20 61 20 64  ble size" of a d
2460: 61 74 61 62 61 73 65 20 70 61 67 65 20 69 73 20  atabase page is 
2470: 74 68 65 20 70 61 67 65 20 73 69 7a 65 20 73 70  the page size sp
2480: 65 63 69 66 79 20 62 79 20 74 68 65 0a 32 2d 62  ecify by the.2-b
2490: 79 74 65 20 69 6e 74 65 67 65 72 20 61 74 20 6f  yte integer at o
24a0: 66 66 73 65 74 20 31 36 20 69 6e 20 74 68 65 20  ffset 16 in the 
24b0: 68 65 61 64 65 72 20 6c 65 73 73 20 74 68 65 20  header less the 
24c0: 22 72 65 73 65 72 76 65 64 22 20 73 70 61 63 65  "reserved" space
24d0: 20 73 69 7a 65 0a 72 65 63 6f 72 64 65 64 20 69   size.recorded i
24e0: 6e 20 74 68 65 20 31 2d 62 79 74 65 20 69 6e 74  n the 1-byte int
24f0: 65 67 65 72 20 61 74 20 6f 66 66 73 65 74 20 32  eger at offset 2
2500: 30 20 69 6e 20 74 68 65 20 68 65 61 64 65 72 2e  0 in the header.
2510: 20 20 54 68 65 20 75 73 61 62 6c 65 0a 73 69 7a    The usable.siz
2520: 65 20 6f 66 20 61 20 70 61 67 65 20 6d 69 67 68  e of a page migh
2530: 74 20 62 65 20 61 6e 20 6f 64 64 20 6e 75 6d 62  t be an odd numb
2540: 65 72 2e 20 20 5e 28 48 6f 77 65 76 65 72 2c 20  er.  ^(However, 
2550: 74 68 65 20 75 73 61 62 6c 65 20 73 69 7a 65 20  the usable size 
2560: 69 73 20 6e 6f 74 0a 61 6c 6c 6f 77 65 64 20 74  is not.allowed t
2570: 6f 20 62 65 20 6c 65 73 73 20 74 68 61 6e 20 34  o be less than 4
2580: 38 30 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  80.  In other wo
2590: 72 64 73 2c 20 69 66 20 74 68 65 20 70 61 67 65  rds, if the page
25a0: 20 73 69 7a 65 20 69 73 20 35 31 32 2c 0a 74 68   size is 512,.th
25b0: 65 6e 20 74 68 65 20 72 65 73 65 72 76 65 64 20  en the reserved 
25c0: 73 70 61 63 65 20 73 69 7a 65 20 63 61 6e 6e 6f  space size canno
25d0: 74 20 65 78 63 65 65 64 20 33 32 2e 29 5e 3c 2f  t exceed 32.)^</
25e0: 70 3e 0a 0a 3c 68 34 3e 31 2e 32 2e 35 20 50 61  p>..<h4>1.2.5 Pa
25f0: 79 6c 6f 61 64 20 66 72 61 63 74 69 6f 6e 73 3c  yload fractions<
2600: 2f 68 34 3e 0a 0a 3c 70 3e 5e 54 68 65 20 6d 61  /h4>..<p>^The ma
2610: 78 69 6d 75 6d 20 61 6e 64 20 6d 69 6e 69 6d 75  ximum and minimu
2620: 6d 20 65 6d 62 65 64 64 65 64 20 70 61 79 6c 6f  m embedded paylo
2630: 61 64 20 66 72 61 63 74 69 6f 6e 73 20 61 6e 64  ad fractions and
2640: 20 74 68 65 20 6c 65 61 66 0a 70 61 79 6c 6f 61   the leaf.payloa
2650: 64 20 66 72 61 63 74 69 6f 6e 20 76 61 6c 75 65  d fraction value
2660: 73 20 6d 75 73 74 20 62 65 20 36 34 2c 20 33 32  s must be 64, 32
2670: 2c 20 61 6e 64 20 33 32 2e 20 20 54 68 65 73 65  , and 32.  These
2680: 20 76 61 6c 75 65 73 20 77 65 72 65 0a 6f 72 69   values were.ori
2690: 67 69 6e 61 6c 6c 79 20 69 6e 74 65 6e 64 65 64  ginally intended
26a0: 20 74 6f 20 61 73 20 74 75 6e 61 62 6c 65 20 70   to as tunable p
26b0: 61 72 61 6d 65 74 65 72 73 20 74 68 61 74 20 63  arameters that c
26c0: 6f 75 6c 64 20 62 65 20 75 73 65 64 20 74 6f 0a  ould be used to.
26d0: 6d 6f 64 69 66 79 20 74 68 65 20 73 74 6f 72 61  modify the stora
26e0: 67 65 20 66 6f 72 6d 61 74 20 6f 66 20 74 68 65  ge format of the
26f0: 20 62 2d 74 72 65 65 20 61 6c 67 6f 72 69 74 68   b-tree algorith
2700: 6d 2e 20 20 48 6f 77 65 76 65 72 2c 20 74 68 61  m.  However, tha
2710: 74 0a 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20  t.functionality 
2720: 69 73 20 6e 6f 74 20 73 75 70 70 6f 72 74 65 64  is not supported
2730: 20 61 6e 64 20 74 68 65 72 65 20 61 72 65 20 6e   and there are n
2740: 6f 20 63 75 72 72 65 6e 74 20 70 6c 61 6e 73 20  o current plans 
2750: 74 6f 20 61 64 64 0a 73 75 70 70 6f 72 74 20 69  to add.support i
2760: 6e 20 74 68 65 20 66 75 74 75 72 65 2e 20 20 48  n the future.  H
2770: 65 6e 63 65 2c 20 74 68 65 73 65 20 74 68 72 65  ence, these thre
2780: 65 20 62 79 74 65 73 20 61 72 65 20 66 69 78 65  e bytes are fixe
2790: 64 20 61 74 20 74 68 65 0a 76 61 6c 75 65 73 20  d at the.values 
27a0: 73 70 65 63 69 66 69 65 64 2e 3c 2f 70 3e 0a 0a  specified.</p>..
27b0: 3c 68 34 3e 31 2e 32 2e 36 20 46 69 6c 65 20 63  <h4>1.2.6 File c
27c0: 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 3c 2f 68  hange counter</h
27d0: 34 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  4>..<tcl>hd_frag
27e0: 6d 65 6e 74 20 63 68 6e 67 63 74 72 20 7b 63 68  ment chngctr {ch
27f0: 61 6e 67 65 20 63 6f 75 6e 74 65 72 7d 3c 2f 74  ange counter}</t
2800: 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20 66 69 6c 65  cl>.<p>^The file
2810: 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20   change counter 
2820: 69 73 20 61 20 34 2d 62 79 74 65 20 62 69 67 2d  is a 4-byte big-
2830: 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20 77  endian integer w
2840: 68 69 63 68 20 69 73 0a 69 6e 63 72 65 6d 65 6e  hich is.incremen
2850: 74 65 64 20 77 68 65 6e 65 76 65 72 20 74 68 65  ted whenever the
2860: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
2870: 73 20 75 6e 6c 6f 63 6b 65 64 20 61 66 74 65 72  s unlocked after
2880: 20 68 61 76 69 6e 67 0a 62 65 65 6e 20 6d 6f 64   having.been mod
2890: 69 66 69 65 64 2e 0a 57 68 65 6e 20 74 77 6f 20  ified..When two 
28a0: 6f 72 20 6d 6f 72 65 20 70 72 6f 63 65 73 73 65  or more processe
28b0: 73 20 61 72 65 20 72 65 61 64 69 6e 67 20 74 68  s are reading th
28c0: 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65 20  e same database 
28d0: 66 69 6c 65 2c 20 65 61 63 68 20 0a 70 72 6f 63  file, each .proc
28e0: 65 73 73 20 63 61 6e 20 64 65 74 65 63 74 20 64  ess can detect d
28f0: 61 74 61 62 61 73 65 20 63 68 61 6e 67 65 73 20  atabase changes 
2900: 66 72 6f 6d 20 6f 74 68 65 72 20 70 72 6f 63 65  from other proce
2910: 73 73 65 73 20 62 79 20 6d 6f 6e 69 74 6f 72 69  sses by monitori
2920: 6e 67 20 0a 74 68 65 20 63 68 61 6e 67 65 20 63  ng .the change c
2930: 6f 75 6e 74 65 72 2e 0a 41 20 70 72 6f 63 65 73  ounter..A proces
2940: 73 20 77 69 6c 6c 20 6e 6f 72 6d 61 6c 6c 79 20  s will normally 
2950: 77 61 6e 74 20 74 6f 20 66 6c 75 73 68 20 69 74  want to flush it
2960: 73 20 64 61 74 61 62 61 73 65 20 70 61 67 65 20  s database page 
2970: 63 61 63 68 65 20 77 68 65 6e 0a 61 6e 6f 74 68  cache when.anoth
2980: 65 72 20 70 72 6f 63 65 73 73 20 6d 6f 64 69 66  er process modif
2990: 69 65 64 20 74 68 65 20 64 61 74 61 62 61 73 65  ied the database
29a0: 2c 20 73 69 6e 63 65 20 74 68 65 20 63 61 63 68  , since the cach
29b0: 65 20 68 61 73 20 62 65 63 6f 6d 65 20 73 74 61  e has become sta
29c0: 6c 65 2e 0a 54 68 65 20 66 69 6c 65 20 63 68 61  le..The file cha
29d0: 6e 67 65 20 63 6f 75 6e 74 65 72 20 66 61 63 69  nge counter faci
29e0: 6c 69 74 61 74 65 73 20 74 68 69 73 2e 3c 2f 70  litates this.</p
29f0: 3e 0a 0a 3c 70 3e 49 6e 20 57 41 4c 20 6d 6f 64  >..<p>In WAL mod
2a00: 65 2c 20 63 68 61 6e 67 65 73 20 74 6f 20 74 68  e, changes to th
2a10: 65 20 64 61 74 61 62 61 73 65 20 61 72 65 20 64  e database are d
2a20: 65 74 65 63 74 65 64 20 75 73 69 6e 67 20 74 68  etected using th
2a30: 65 20 77 61 6c 2d 69 6e 64 65 78 0a 61 6e 64 20  e wal-index.and 
2a40: 73 6f 20 74 68 65 20 63 68 61 6e 67 65 20 63 6f  so the change co
2a50: 75 6e 74 65 72 20 69 73 20 6e 6f 74 20 6e 65 65  unter is not nee
2a60: 64 65 64 2e 20 20 48 65 6e 63 65 2c 20 74 68 65  ded.  Hence, the
2a70: 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20   change counter 
2a80: 6d 69 67 68 74 0a 6e 6f 74 20 62 65 20 69 6e 63  might.not be inc
2a90: 72 65 6d 65 6e 74 65 64 20 6f 6e 20 65 61 63 68  remented on each
2aa0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 6e 20   transaction in 
2ab0: 57 41 4c 20 6d 6f 64 65 2e 3c 2f 70 3e 0a 0a 3c  WAL mode.</p>..<
2ac0: 68 34 3e 31 2e 32 2e 37 20 49 6e 2d 68 65 61 64  h4>1.2.7 In-head
2ad0: 65 72 20 64 61 74 61 62 61 73 65 20 73 69 7a 65  er database size
2ae0: 3c 2f 68 34 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  </h4>..<tcl>hd_f
2af0: 72 61 67 6d 65 6e 74 20 66 69 6c 65 73 69 7a 65  ragment filesize
2b00: 20 7b 69 6e 2d 68 65 61 64 65 72 20 64 61 74 61   {in-header data
2b10: 62 61 73 65 20 73 69 7a 65 7d 3c 2f 74 63 6c 3e  base size}</tcl>
2b20: 0a 3c 70 3e 5e 54 68 65 20 34 2d 62 79 74 65 20  .<p>^The 4-byte 
2b30: 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67  big-endian integ
2b40: 65 72 20 61 74 20 6f 66 66 73 65 74 20 32 38 20  er at offset 28 
2b50: 69 6e 74 6f 20 74 68 65 20 68 65 61 64 65 72 20  into the header 
2b60: 0a 73 74 6f 72 65 73 20 74 68 65 20 73 69 7a 65  .stores the size
2b70: 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
2b80: 20 66 69 6c 65 20 69 6e 20 70 61 67 65 73 2e 20   file in pages. 
2b90: 20 5e 49 66 20 74 68 69 73 20 69 6e 2d 68 65 61   ^If this in-hea
2ba0: 64 65 72 0a 64 61 74 61 73 69 7a 65 20 73 69 7a  der.datasize siz
2bb0: 65 20 69 73 20 6e 6f 74 20 76 61 6c 69 64 20 28  e is not valid (
2bc0: 73 65 65 20 74 68 65 20 6e 65 78 74 20 70 61 72  see the next par
2bd0: 61 67 72 61 70 68 29 2c 20 74 68 65 6e 20 74 68  agraph), then th
2be0: 65 20 64 61 74 61 62 61 73 65 20 0a 73 69 7a 65  e database .size
2bf0: 20 69 73 20 63 6f 6d 70 75 74 65 64 20 62 79 20   is computed by 
2c00: 6c 6f 6f 6b 69 6e 67 0a 61 74 20 74 68 65 20 61  looking.at the a
2c10: 63 74 75 61 6c 20 73 69 7a 65 20 6f 66 20 74 68  ctual size of th
2c20: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  e database file.
2c30: 20 4f 6c 64 65 72 20 76 65 72 73 69 6f 6e 73 20   Older versions 
2c40: 6f 66 20 53 51 4c 69 74 65 0a 69 67 6e 6f 72 65  of SQLite.ignore
2c50: 64 20 74 68 65 20 69 6e 2d 68 65 61 64 65 72 20  d the in-header 
2c60: 64 61 74 61 62 61 73 65 20 73 69 7a 65 20 61 6e  database size an
2c70: 64 20 75 73 65 64 20 74 68 65 20 61 63 74 75 61  d used the actua
2c80: 6c 20 66 69 6c 65 20 73 69 7a 65 0a 65 78 63 6c  l file size.excl
2c90: 75 73 69 76 65 6c 79 2e 20 20 5e 4e 65 77 65 72  usively.  ^Newer
2ca0: 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c   versions of SQL
2cb0: 69 74 65 20 75 73 65 20 74 68 65 20 69 6e 2d 68  ite use the in-h
2cc0: 65 61 64 65 72 20 64 61 74 61 62 61 73 65 0a 73  eader database.s
2cd0: 69 7a 65 20 69 66 20 69 74 20 69 73 20 61 76 61  ize if it is ava
2ce0: 69 6c 61 62 6c 65 20 62 75 74 20 66 61 6c 6c 20  ilable but fall 
2cf0: 62 61 63 6b 20 74 6f 20 74 68 65 20 61 63 74 75  back to the actu
2d00: 61 6c 20 66 69 6c 65 20 73 69 7a 65 20 69 66 0a  al file size if.
2d10: 74 68 65 20 69 6e 2d 68 65 61 64 65 72 20 64 61  the in-header da
2d20: 74 61 62 61 73 65 20 73 69 7a 65 20 69 73 20 6e  tabase size is n
2d30: 6f 74 20 76 61 6c 69 64 2e 3c 2f 70 3e 0a 0a 3c  ot valid.</p>..<
2d40: 70 3e 5e 54 68 65 20 69 6e 2d 68 65 61 64 65 72  p>^The in-header
2d50: 20 64 61 74 61 62 61 73 65 20 73 69 7a 65 20 69   database size i
2d60: 73 20 6f 6e 6c 79 20 63 6f 6e 73 69 64 65 72 65  s only considere
2d70: 64 20 74 6f 20 62 65 20 76 61 6c 69 64 20 69 66  d to be valid if
2d80: 0a 69 74 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 20  .it is non-zero 
2d90: 61 6e 64 20 69 66 20 74 68 65 20 34 2d 62 79 74  and if the 4-byt
2da0: 65 20 5b 63 68 61 6e 67 65 20 63 6f 75 6e 74 65  e [change counte
2db0: 72 5d 20 61 74 20 6f 66 66 73 65 74 20 32 34 0a  r] at offset 24.
2dc0: 65 78 61 63 74 6c 79 20 6d 61 74 63 68 65 73 20  exactly matches 
2dd0: 74 68 65 20 34 2d 62 79 74 65 20 5b 76 65 72 73  the 4-byte [vers
2de0: 69 6f 6e 2d 76 61 6c 69 64 2d 66 6f 72 20 6e 75  ion-valid-for nu
2df0: 6d 62 65 72 5d 20 61 74 20 6f 66 66 73 65 74 20  mber] at offset 
2e00: 39 32 2e 0a 5e 28 54 68 65 20 69 6e 2d 68 65 61  92..^(The in-hea
2e10: 64 65 72 20 64 61 74 61 62 61 73 65 20 73 69 7a  der database siz
2e20: 65 20 69 73 20 61 6c 77 61 79 73 20 76 61 6c 69  e is always vali
2e30: 64 20 0a 77 68 65 6e 20 74 68 65 20 64 61 74 61  d .when the data
2e40: 62 61 73 65 20 69 73 20 6f 6e 6c 79 20 6d 6f 64  base is only mod
2e50: 69 66 69 65 64 20 75 73 69 6e 67 20 72 65 63 65  ified using rece
2e60: 6e 74 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53  nt versions of S
2e70: 51 4c 69 74 65 0a 28 76 65 72 73 69 6f 6e 73 20  QLite.(versions 
2e80: 33 2e 37 2e 30 20 61 6e 64 20 6c 61 74 65 72 29  3.7.0 and later)
2e90: 2e 29 5e 0a 49 66 20 61 20 6c 65 67 61 63 79 20  .)^.If a legacy 
2ea0: 76 65 72 73 69 6f 6e 20 6f 66 20 53 51 4c 69 74  version of SQLit
2eb0: 65 20 77 72 69 74 65 73 20 74 6f 20 74 68 65 20  e writes to the 
2ec0: 64 61 74 61 62 61 73 65 2c 20 69 74 20 77 69 6c  database, it wil
2ed0: 6c 20 6e 6f 74 0a 6b 6e 6f 77 20 74 6f 20 75 70  l not.know to up
2ee0: 64 61 74 65 20 74 68 65 20 69 6e 2d 68 65 61 64  date the in-head
2ef0: 65 72 20 64 61 74 61 62 61 73 65 20 73 69 7a 65  er database size
2f00: 20 61 6e 64 20 73 6f 20 74 68 65 20 69 6e 2d 68   and so the in-h
2f10: 65 61 64 65 72 0a 64 61 74 61 62 61 73 65 20 73  eader.database s
2f20: 69 7a 65 20 63 6f 75 6c 64 20 62 65 20 69 6e 63  ize could be inc
2f30: 6f 72 72 65 63 74 2e 20 20 42 75 74 20 6c 65 67  orrect.  But leg
2f40: 61 63 79 20 76 65 72 73 69 6f 6e 73 20 6f 66 20  acy versions of 
2f50: 53 51 4c 69 74 65 0a 77 69 6c 6c 20 61 6c 73 6f  SQLite.will also
2f60: 20 6c 65 61 76 65 20 74 68 65 20 76 65 72 73 69   leave the versi
2f70: 6f 6e 2d 76 61 6c 69 64 2d 66 6f 72 20 6e 75 6d  on-valid-for num
2f80: 62 65 72 20 61 74 20 6f 66 66 73 65 74 20 39 32  ber at offset 92
2f90: 20 75 6e 63 68 61 6e 67 65 64 0a 73 6f 20 69 74   unchanged.so it
2fa0: 20 77 69 6c 6c 20 6e 6f 74 20 6d 61 74 63 68 20   will not match 
2fb0: 74 68 65 20 63 68 61 6e 67 65 2d 63 6f 75 6e 74  the change-count
2fc0: 65 72 2e 20 20 48 65 6e 63 65 2c 20 69 6e 76 61  er.  Hence, inva
2fd0: 6c 69 64 20 69 6e 2d 68 65 61 64 65 72 0a 64 61  lid in-header.da
2fe0: 74 61 62 61 73 65 20 73 69 7a 65 73 20 63 61 6e  tabase sizes can
2ff0: 20 62 65 20 64 65 74 65 63 74 65 64 20 28 61 6e   be detected (an
3000: 64 20 69 67 6e 6f 72 65 64 29 20 62 79 20 6f 62  d ignored) by ob
3010: 73 65 72 76 69 6e 67 20 77 68 65 6e 0a 74 68 65  serving when.the
3020: 20 63 68 61 6e 67 65 2d 63 6f 75 6e 74 65 72 20   change-counter 
3030: 64 6f 65 73 20 6e 6f 74 20 6d 61 74 63 68 20 74  does not match t
3040: 68 65 20 76 65 72 73 69 6f 6e 2d 76 61 6c 69 64  he version-valid
3050: 2d 66 6f 72 20 6e 75 6d 62 65 72 2e 3c 2f 70 3e  -for number.</p>
3060: 0a 0a 3c 68 34 3e 31 2e 32 2e 38 20 46 72 65 65  ..<h4>1.2.8 Free
3070: 20 70 61 67 65 20 6c 69 73 74 3c 2f 68 34 3e 0a   page list</h4>.
3080: 0a 3c 70 3e 55 6e 75 73 65 64 20 70 61 67 65 73  .<p>Unused pages
3090: 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
30a0: 20 66 69 6c 65 20 61 72 65 20 73 74 6f 72 65 64   file are stored
30b0: 20 6f 6e 20 61 20 66 72 65 65 6c 69 73 74 2e 20   on a freelist. 
30c0: 20 5e 54 68 65 0a 34 2d 62 79 74 65 20 62 69 67   ^The.4-byte big
30d0: 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20  -endian integer 
30e0: 61 74 20 6f 66 66 73 65 74 20 33 32 20 73 74 6f  at offset 32 sto
30f0: 72 65 73 20 74 68 65 20 70 61 67 65 20 6e 75 6d  res the page num
3100: 62 65 72 20 6f 66 0a 74 68 65 20 66 69 72 73 74  ber of.the first
3110: 20 70 61 67 65 20 6f 66 20 74 68 65 20 66 72 65   page of the fre
3120: 65 6c 69 73 74 2c 20 6f 72 20 7a 65 72 6f 20 69  elist, or zero i
3130: 66 20 74 68 65 20 66 72 65 65 6c 69 73 74 20 69  f the freelist i
3140: 73 20 65 6d 70 74 79 2e 0a 5e 54 68 65 20 34 2d  s empty..^The 4-
3150: 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20  byte big-endian 
3160: 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73 65  integer at offse
3170: 74 20 33 36 20 73 74 6f 72 65 73 20 73 74 6f 72  t 36 stores stor
3180: 65 73 20 74 68 65 20 74 6f 74 61 6c 20 0a 6e 75  es the total .nu
3190: 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 6f 6e  mber of pages on
31a0: 20 74 68 65 20 66 72 65 65 6c 69 73 74 2e 3c 2f   the freelist.</
31b0: 70 3e 0a 0a 3c 68 34 3e 31 2e 32 2e 39 20 53 63  p>..<h4>1.2.9 Sc
31c0: 68 65 6d 61 20 63 6f 6f 6b 69 65 3c 2f 68 34 3e  hema cookie</h4>
31d0: 0a 0a 3c 70 3e 5e 54 68 65 20 73 63 68 65 6d 61  ..<p>^The schema
31e0: 20 63 6f 6f 6b 69 65 20 69 73 20 61 20 34 2d 62   cookie is a 4-b
31f0: 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69  yte big-endian i
3200: 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73 65 74  nteger at offset
3210: 20 34 30 0a 74 68 61 74 20 69 73 20 69 6e 63 72   40.that is incr
3220: 65 6d 65 6e 74 65 64 20 77 68 65 6e 65 76 65 72  emented whenever
3230: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
3240: 68 65 6d 61 20 63 68 61 6e 67 65 73 2e 20 20 41  hema changes.  A
3250: 20 0a 70 72 65 70 61 72 65 64 20 73 74 61 74 65   .prepared state
3260: 6d 65 6e 74 20 69 73 20 63 6f 6d 70 69 6c 65 64  ment is compiled
3270: 20 61 67 61 69 6e 73 74 20 61 20 73 70 65 63 69   against a speci
3280: 66 69 63 20 76 65 72 73 69 6f 6e 20 6f 66 20 74  fic version of t
3290: 68 65 0a 64 61 74 61 62 61 73 65 20 73 63 68 65  he.database sche
32a0: 6d 61 2e 20 20 5e 57 68 65 6e 65 76 65 72 20 74  ma.  ^Whenever t
32b0: 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
32c0: 6d 61 20 63 68 61 6e 67 65 73 2c 20 74 68 65 20  ma changes, the 
32d0: 73 74 61 74 65 6d 65 6e 74 0a 6d 75 73 74 20 62  statement.must b
32e0: 65 20 72 65 70 72 65 70 61 72 65 64 2e 20 20 5e  e reprepared.  ^
32f0: 57 68 65 6e 65 76 65 72 20 61 20 70 72 65 70 61  Whenever a prepa
3300: 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 72 75  red statement ru
3310: 6e 73 2c 20 69 74 20 66 69 72 73 74 20 63 68 65  ns, it first che
3320: 63 6b 73 0a 74 68 65 20 73 63 68 65 6d 61 20 63  cks.the schema c
3330: 6f 6f 6b 69 65 20 74 6f 20 6d 61 6b 65 20 73 75  ookie to make su
3340: 72 65 20 74 68 65 20 76 61 6c 75 65 20 69 73 20  re the value is 
3350: 74 68 65 20 73 61 6d 65 20 61 73 20 77 68 65 6e  the same as when
3360: 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 77   the statement.w
3370: 61 73 20 70 72 65 70 61 72 65 64 20 61 6e 64 20  as prepared and 
3380: 69 66 20 74 68 65 20 73 63 68 65 6d 61 20 63 6f  if the schema co
3390: 6f 6b 69 65 20 68 61 73 20 63 68 61 6e 67 65 64  okie has changed
33a0: 2c 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20  , the statement 
33b0: 61 62 6f 72 74 73 0a 69 6e 20 6f 72 64 65 72 20  aborts.in order 
33c0: 74 6f 20 66 6f 72 63 65 20 74 68 65 20 73 74 61  to force the sta
33d0: 74 65 6d 65 6e 74 20 74 6f 20 62 65 20 72 65 70  tement to be rep
33e0: 72 65 70 61 72 65 64 2e 3c 2f 70 3e 0a 0a 3c 68  repared.</p>..<h
33f0: 34 3e 31 2e 32 2e 31 30 20 53 63 68 65 6d 61 20  4>1.2.10 Schema 
3400: 66 6f 72 6d 61 74 20 6e 75 6d 62 65 72 3c 2f 68  format number</h
3410: 34 3e 0a 0a 3c 70 3e 54 68 65 20 73 63 68 65 6d  4>..<p>The schem
3420: 61 20 66 6f 72 6d 61 74 20 6e 75 6d 62 65 72 20  a format number 
3430: 69 73 20 61 20 34 2d 62 79 74 65 20 62 69 67 2d  is a 4-byte big-
3440: 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20 61  endian integer a
3450: 74 20 6f 66 66 73 65 74 20 34 34 2e 0a 54 68 65  t offset 44..The
3460: 20 73 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 6e   schema format n
3470: 75 6d 62 65 72 20 69 73 20 73 69 6d 69 6c 61 72  umber is similar
3480: 20 74 6f 20 74 68 65 20 66 69 6c 65 20 66 6f 72   to the file for
3490: 6d 61 74 20 72 65 61 64 20 61 6e 64 20 77 72 69  mat read and wri
34a0: 74 65 0a 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65  te.version numbe
34b0: 72 73 20 61 74 20 6f 66 66 73 65 74 73 20 31 38  rs at offsets 18
34c0: 20 61 6e 64 20 31 39 20 65 78 63 65 70 74 20 74   and 19 except t
34d0: 68 61 74 20 74 68 65 20 73 63 68 65 6d 61 20 66  hat the schema f
34e0: 6f 72 6d 61 74 20 6e 75 6d 62 65 72 0a 72 65 66  ormat number.ref
34f0: 65 72 73 20 74 6f 20 74 68 65 20 68 69 67 68 2d  ers to the high-
3500: 6c 65 76 65 6c 20 53 51 4c 20 66 6f 72 6d 61 74  level SQL format
3510: 74 69 6e 67 20 72 61 74 68 65 72 20 74 68 61 6e  ting rather than
3520: 20 74 68 65 20 6c 6f 77 2d 6c 65 76 65 6c 20 62   the low-level b
3530: 2d 74 72 65 65 0a 66 6f 72 6d 61 74 74 69 6e 67  -tree.formatting
3540: 2e 20 20 46 6f 75 72 20 73 63 68 65 6d 61 20 66  .  Four schema f
3550: 6f 72 6d 61 74 20 6e 75 6d 62 65 72 73 20 61 72  ormat numbers ar
3560: 65 20 63 75 72 72 65 6e 74 6c 79 20 64 65 66 69  e currently defi
3570: 6e 65 64 3a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c  ned:</p>..<ol>.<
3580: 6c 69 20 76 61 6c 75 65 3d 31 3e 46 6f 72 6d 61  li value=1>Forma
3590: 74 20 31 20 69 73 20 75 6e 64 65 72 73 74 6f 6f  t 1 is understoo
35a0: 64 20 62 79 20 61 6c 6c 20 76 65 72 73 69 6f 6e  d by all version
35b0: 73 20 6f 66 20 53 51 4c 69 74 65 20 62 61 63 6b  s of SQLite back
35c0: 20 74 6f 0a 76 65 72 73 69 6f 6e 20 33 2e 30 2e   to.version 3.0.
35d0: 30 2e 3c 2f 6c 69 3e 0a 3c 6c 69 20 76 61 6c 75  0.</li>.<li valu
35e0: 65 3d 32 3e 46 6f 72 6d 61 74 20 32 20 61 64 64  e=2>Format 2 add
35f0: 73 20 74 68 65 20 61 62 69 6c 69 74 79 20 6f 66  s the ability of
3600: 20 72 6f 77 73 20 77 69 74 68 69 6e 20 74 68 65   rows within the
3610: 20 73 61 6d 65 20 74 61 62 6c 65 0a 74 6f 20 68   same table.to h
3620: 61 76 65 20 61 20 76 61 72 79 69 6e 67 20 6e 75  ave a varying nu
3630: 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 2c  mber of columns,
3640: 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 73 75 70   in order to sup
3650: 70 6f 72 74 20 74 68 65 0a 5b 41 4c 54 45 52 20  port the.[ALTER 
3660: 54 41 42 4c 45 20 7c 20 41 4c 54 45 52 20 54 41  TABLE | ALTER TA
3670: 42 4c 45 20 2e 2e 2e 20 41 44 44 20 43 4f 4c 55  BLE ... ADD COLU
3680: 4d 4e 5d 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74  MN] functionalit
3690: 79 2e 20 20 53 75 70 70 6f 72 74 20 66 6f 72 0a  y.  Support for.
36a0: 72 65 61 64 69 6e 67 20 61 6e 64 20 77 72 69 74  reading and writ
36b0: 69 6e 67 20 66 6f 72 6d 61 74 20 32 20 77 61 73  ing format 2 was
36c0: 20 61 64 64 65 64 20 69 6e 20 53 51 4c 69 74 65   added in SQLite
36d0: 20 76 65 72 73 69 6f 6e 20 33 2e 31 2e 33 20 0a   version 3.1.3 .
36e0: 6f 6e 20 32 30 30 35 2d 30 32 2d 31 39 2e 3c 2f  on 2005-02-19.</
36f0: 6c 69 3e 0a 3c 6c 69 20 76 61 6c 75 65 3d 33 3e  li>.<li value=3>
3700: 46 6f 72 6d 61 74 20 33 20 61 64 64 73 20 74 68  Format 3 adds th
3710: 65 20 61 62 69 6c 69 74 79 20 6f 66 20 65 78 74  e ability of ext
3720: 72 61 20 63 6f 6c 75 6d 6e 73 20 61 64 64 65 64  ra columns added
3730: 20 62 79 0a 5b 41 4c 54 45 52 20 54 41 42 4c 45   by.[ALTER TABLE
3740: 20 7c 20 41 4c 54 45 52 20 54 41 42 4c 45 20 2e   | ALTER TABLE .
3750: 2e 2e 20 41 44 44 20 43 4f 4c 55 4d 4e 5d 20 74  .. ADD COLUMN] t
3760: 6f 20 68 61 76 65 20 6e 6f 6e 2d 4e 55 4c 4c 20  o have non-NULL 
3770: 64 65 66 61 75 6c 74 0a 76 61 6c 75 65 73 2e 20  default.values. 
3780: 20 54 68 69 73 20 63 61 70 61 62 69 6c 69 74 79   This capability
3790: 20 77 61 73 20 61 64 64 65 64 20 69 6e 20 53 51   was added in SQ
37a0: 4c 69 74 65 20 76 65 72 73 69 6f 6e 20 33 2e 31  Lite version 3.1
37b0: 2e 34 20 0a 6f 6e 20 32 30 30 35 2d 30 33 2d 31  .4 .on 2005-03-1
37c0: 31 2e 3c 2f 6c 69 3e 0a 3c 6c 69 20 76 61 6c 75  1.</li>.<li valu
37d0: 65 3d 34 3e 5e 46 6f 72 6d 61 74 20 34 20 63 61  e=4>^Format 4 ca
37e0: 75 73 65 73 20 53 51 4c 69 74 65 20 74 6f 20 72  uses SQLite to r
37f0: 65 73 70 65 63 74 20 74 68 65 20 44 45 53 43 20  espect the DESC 
3800: 6b 65 79 77 6f 72 64 20 6f 6e 0a 69 6e 64 65 78  keyword on.index
3810: 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 2e 20 20   declarations.  
3820: 28 5e 54 68 65 20 44 45 53 43 20 6b 65 79 77 6f  (^The DESC keywo
3830: 72 64 20 69 73 20 69 67 6e 6f 72 65 64 20 69 6e  rd is ignored in
3840: 20 69 6e 64 69 63 65 73 20 66 6f 72 20 0a 66 6f   indices for .fo
3850: 72 6d 61 74 73 20 31 2c 20 32 2c 20 61 6e 64 20  rmats 1, 2, and 
3860: 33 2e 29 0a 5e 46 6f 72 6d 61 74 20 34 20 61 6c  3.).^Format 4 al
3870: 73 6f 20 61 64 64 73 20 74 77 6f 20 6e 65 77 20  so adds two new 
3880: 62 6f 6f 6c 65 61 6e 20 72 65 63 6f 72 64 20 74  boolean record t
3890: 79 70 65 20 76 61 6c 75 65 73 20 28 5b 73 65 72  ype values ([ser
38a0: 69 61 6c 20 74 79 70 65 73 5d 0a 38 20 61 6e 64  ial types].8 and
38b0: 20 39 2e 29 20 20 53 75 70 70 6f 72 74 20 66 6f   9.)  Support fo
38c0: 72 20 66 6f 72 6d 61 74 20 34 20 77 61 73 20 61  r format 4 was a
38d0: 64 64 65 64 20 69 6e 20 53 51 4c 69 74 65 20 33  dded in SQLite 3
38e0: 2e 33 2e 30 20 6f 6e 0a 32 30 30 36 2d 30 31 2d  .3.0 on.2006-01-
38f0: 31 30 2e 3c 2f 6c 69 3e 0a 3c 2f 6f 6c 3e 0a 0a  10.</li>.</ol>..
3900: 3c 70 3e 5e 4e 65 77 20 64 61 74 61 62 61 73 65  <p>^New database
3910: 20 66 69 6c 65 73 20 63 72 65 61 74 65 64 20 62   files created b
3920: 79 20 53 51 4c 69 74 65 20 75 73 65 20 66 6f 72  y SQLite use for
3930: 6d 61 74 20 31 20 62 79 20 64 65 66 61 75 6c 74  mat 1 by default
3940: 2c 20 73 6f 0a 74 68 61 74 20 64 61 74 61 62 61  , so.that databa
3950: 73 65 20 66 69 6c 65 73 20 63 72 65 61 74 65 64  se files created
3960: 20 62 79 20 6e 65 77 65 72 20 76 65 72 73 69 6f   by newer versio
3970: 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 63 61 6e  ns of SQLite can
3980: 20 73 74 69 6c 6c 0a 62 65 20 72 65 61 64 20 62   still.be read b
3990: 79 20 6f 6c 64 65 72 20 76 65 72 73 69 6f 6e 73  y older versions
39a0: 20 6f 66 20 53 51 4c 69 74 65 2e 0a 5e 54 68 65   of SQLite..^The
39b0: 20 5b 6c 65 67 61 63 79 5f 66 69 6c 65 5f 66 6f   [legacy_file_fo
39c0: 72 6d 61 74 20 70 72 61 67 6d 61 5d 20 63 61 6e  rmat pragma] can
39d0: 20 62 65 20 75 73 65 64 20 74 6f 20 63 61 75 73   be used to caus
39e0: 65 20 53 51 4c 69 74 65 0a 74 6f 20 63 72 65 61  e SQLite.to crea
39f0: 74 65 20 6e 65 77 20 64 61 74 61 62 61 73 65 20  te new database 
3a00: 66 69 6c 65 73 20 75 73 69 6e 67 20 66 6f 72 6d  files using form
3a10: 61 74 20 34 2e 20 20 46 75 74 75 72 65 20 76 65  at 4.  Future ve
3a20: 72 73 69 6f 6e 73 20 6f 66 20 0a 53 51 4c 69 74  rsions of .SQLit
3a30: 65 20 6d 61 79 20 62 65 67 69 6e 20 74 6f 20 63  e may begin to c
3a40: 72 65 61 74 65 20 66 69 6c 65 73 20 75 73 69 6e  reate files usin
3a50: 67 20 66 6f 72 6d 61 74 20 34 20 62 79 20 64 65  g format 4 by de
3a60: 66 61 75 6c 74 2e 0a 54 68 65 20 66 6f 72 6d 61  fault..The forma
3a70: 74 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72  t version number
3a80: 20 63 61 6e 20 62 65 20 6d 61 64 65 20 74 6f 20   can be made to 
3a90: 64 65 66 61 75 6c 74 20 74 6f 20 34 20 69 6e 73  default to 4 ins
3aa0: 74 65 61 64 20 6f 66 20 31 20 62 79 0a 73 65 74  tead of 1 by.set
3ab0: 74 69 6e 67 20 5b 53 51 4c 49 54 45 5f 44 45 46  ting [SQLITE_DEF
3ac0: 41 55 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d 41 54  AULT_FILE_FORMAT
3ad0: 5d 3d 34 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74  ]=4 at compile-t
3ae0: 69 6d 65 2e 0a 3c 2f 70 3e 0a 0a 3c 68 34 3e 31  ime..</p>..<h4>1
3af0: 2e 32 2e 31 31 20 53 75 67 67 65 73 74 65 64 20  .2.11 Suggested 
3b00: 63 61 63 68 65 20 73 69 7a 65 3c 2f 68 34 3e 0a  cache size</h4>.
3b10: 0a 3c 70 3e 54 68 65 20 34 2d 62 79 74 65 20 62  .<p>The 4-byte b
3b20: 69 67 2d 65 6e 64 69 61 6e 20 73 69 67 6e 65 64  ig-endian signed
3b30: 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73   integer at offs
3b40: 65 74 20 34 38 20 69 73 20 74 68 65 20 73 75 67  et 48 is the sug
3b50: 67 65 73 74 65 64 0a 63 61 63 68 65 20 73 69 7a  gested.cache siz
3b60: 65 20 69 6e 20 70 61 67 65 73 20 66 6f 72 20 74  e in pages for t
3b70: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
3b80: 2e 20 20 54 68 65 20 76 61 6c 75 65 20 69 73 20  .  The value is 
3b90: 61 20 73 75 67 67 65 73 74 69 6f 6e 0a 6f 6e 6c  a suggestion.onl
3ba0: 79 20 61 6e 64 20 53 51 4c 69 74 65 20 69 73 20  y and SQLite is 
3bb0: 75 6e 64 65 72 20 6e 6f 20 6f 62 6c 69 67 61 74  under no obligat
3bc0: 69 6f 6e 20 74 6f 20 68 6f 6e 6f 72 20 69 74 2e  ion to honor it.
3bd0: 20 20 54 68 65 20 61 62 73 6f 6c 75 74 65 20 76    The absolute v
3be0: 61 6c 75 65 0a 6f 66 20 74 68 65 20 69 6e 74 65  alue.of the inte
3bf0: 67 65 72 20 69 73 20 75 73 65 64 20 61 73 20 74  ger is used as t
3c00: 68 65 20 73 75 67 67 65 73 74 65 64 20 73 69 7a  he suggested siz
3c10: 65 2e 20 20 54 68 65 20 73 75 67 67 65 73 74 65  e.  The suggeste
3c20: 64 20 63 61 63 68 65 20 73 69 7a 65 0a 63 61 6e  d cache size.can
3c30: 20 62 65 20 73 65 74 20 75 73 69 6e 67 20 74 68   be set using th
3c40: 65 20 5b 64 65 66 61 75 6c 74 5f 63 61 63 68 65  e [default_cache
3c50: 5f 73 69 7a 65 20 70 72 61 67 6d 61 5d 2e 3c 2f  _size pragma].</
3c60: 70 3e 0a 0a 3c 68 34 3e 31 2e 32 2e 31 32 20 49  p>..<h4>1.2.12 I
3c70: 6e 63 72 65 6d 65 6e 74 61 6c 20 76 61 63 75 75  ncremental vacuu
3c80: 6d 20 73 65 74 74 69 6e 67 73 3c 2f 68 34 3e 0a  m settings</h4>.
3c90: 0a 3c 70 3e 54 68 65 20 74 77 6f 20 34 2d 62 79  .<p>The two 4-by
3ca0: 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e  te big-endian in
3cb0: 74 65 67 65 72 73 20 61 74 20 6f 66 66 73 65 74  tegers at offset
3cc0: 73 20 35 32 20 61 6e 64 20 36 34 20 61 72 65 20  s 52 and 64 are 
3cd0: 75 73 65 64 0a 74 6f 20 6d 61 6e 61 67 65 20 74  used.to manage t
3ce0: 68 65 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d  he [auto_vacuum]
3cf0: 20 61 6e 64 20 5b 69 6e 63 72 65 6d 65 6e 74 61   and [incrementa
3d00: 6c 5f 76 61 63 75 75 6d 5d 20 6d 6f 64 65 73 2e  l_vacuum] modes.
3d10: 20 20 5e 49 66 0a 74 68 65 20 69 6e 74 65 67 65    ^If.the intege
3d20: 72 20 61 74 20 6f 66 66 73 65 74 20 35 32 20 69  r at offset 52 i
3d30: 73 20 7a 65 72 6f 20 74 68 65 6e 20 70 6f 69 6e  s zero then poin
3d40: 74 65 72 2d 6d 61 70 20 28 70 74 72 6d 61 70 29  ter-map (ptrmap)
3d50: 20 70 61 67 65 73 20 61 72 65 0a 6f 6d 69 74 74   pages are.omitt
3d60: 65 64 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61  ed from the data
3d70: 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20 6e 65  base file and ne
3d80: 69 74 68 65 72 20 61 75 74 6f 5f 76 61 63 75 75  ither auto_vacuu
3d90: 6d 20 6e 6f 72 0a 69 6e 63 72 65 6d 65 6e 74 61  m nor.incrementa
3da0: 6c 5f 76 61 63 75 75 6d 20 61 72 65 20 73 75 70  l_vacuum are sup
3db0: 70 6f 72 74 65 64 2e 20 20 5e 49 66 20 74 68 65  ported.  ^If the
3dc0: 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73   integer at offs
3dd0: 65 74 20 35 32 20 69 73 0a 6e 6f 6e 2d 7a 65 72  et 52 is.non-zer
3de0: 6f 20 74 68 65 6e 20 69 74 20 69 73 20 74 68 65  o then it is the
3df0: 20 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20   page number of 
3e00: 74 68 65 20 6c 61 72 67 65 73 74 20 72 6f 6f 74  the largest root
3e10: 20 70 61 67 65 20 69 6e 20 74 68 65 0a 64 61 74   page in the.dat
3e20: 61 62 61 73 65 20 66 69 6c 65 2c 20 74 68 65 20  abase file, the 
3e30: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 63 6f  database file co
3e40: 6e 74 61 69 6e 20 70 74 72 6d 61 70 20 70 61 67  ntain ptrmap pag
3e50: 65 73 2c 20 61 6e 64 20 74 68 65 0a 6d 6f 64 65  es, and the.mode
3e60: 20 6d 75 73 74 20 62 65 20 65 69 74 68 65 72 20   must be either 
3e70: 61 75 74 6f 5f 76 61 63 75 75 6d 20 6f 72 20 69  auto_vacuum or i
3e80: 6e 63 72 65 6d 65 6e 74 61 6c 5f 76 61 63 75 75  ncremental_vacuu
3e90: 6d 2e 20 20 5e 49 6e 20 74 68 69 73 20 6c 61 74  m.  ^In this lat
3ea0: 74 65 72 0a 63 61 73 65 2c 20 74 68 65 20 69 6e  ter.case, the in
3eb0: 74 65 67 65 72 20 61 74 20 6f 66 66 73 65 74 20  teger at offset 
3ec0: 36 34 20 69 73 20 74 72 75 65 20 66 6f 72 20 69  64 is true for i
3ed0: 6e 63 72 65 6d 65 6e 74 61 6c 5f 76 61 63 75 75  ncremental_vacuu
3ee0: 6d 20 61 6e 64 0a 66 61 6c 73 65 20 66 6f 72 20  m and.false for 
3ef0: 61 75 74 6f 5f 76 61 63 75 75 6d 2e 20 20 5e 49  auto_vacuum.  ^I
3f00: 66 20 74 68 65 20 69 6e 74 65 67 65 72 20 61 74  f the integer at
3f10: 20 6f 66 66 73 65 74 20 35 32 20 69 73 20 7a 65   offset 52 is ze
3f20: 72 6f 20 74 68 65 6e 0a 74 68 65 20 69 6e 74 65  ro then.the inte
3f30: 67 65 72 20 61 74 20 6f 66 66 73 65 74 20 36 34  ger at offset 64
3f40: 20 6d 75 73 74 20 61 6c 73 6f 20 62 65 20 7a 65   must also be ze
3f50: 72 6f 2e 3c 2f 70 3e 0a 0a 3c 68 34 3e 31 2e 32  ro.</p>..<h4>1.2
3f60: 2e 31 33 20 54 65 78 74 20 65 6e 63 6f 64 69 6e  .13 Text encodin
3f70: 67 3c 2f 68 34 3e 0a 0a 3c 70 3e 5e 54 68 65 20  g</h4>..<p>^The 
3f80: 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61  4-byte big-endia
3f90: 6e 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66  n integer at off
3fa0: 73 65 74 20 35 36 20 64 65 74 65 72 6d 69 6e 65  set 56 determine
3fb0: 73 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 0a 75  s the encoding.u
3fc0: 73 65 64 20 66 6f 72 20 61 6c 6c 20 74 65 78 74  sed for all text
3fd0: 20 73 74 72 69 6e 67 73 20 73 74 6f 72 65 64 20   strings stored 
3fe0: 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 2e  in the database.
3ff0: 20 20 5e 41 20 76 61 6c 75 65 20 6f 66 20 31 20    ^A value of 1 
4000: 6d 65 61 6e 73 0a 55 54 46 2d 38 2e 20 20 5e 41  means.UTF-8.  ^A
4010: 20 76 61 6c 75 65 20 6f 66 20 32 20 6d 65 61 6e   value of 2 mean
4020: 73 20 55 54 46 2d 31 36 6c 65 2e 20 20 5e 41 20  s UTF-16le.  ^A 
4030: 76 61 6c 75 65 20 6f 66 20 33 20 6d 65 61 6e 73  value of 3 means
4040: 20 55 54 46 2d 31 36 62 65 2e 0a 4e 6f 20 6f 74   UTF-16be..No ot
4050: 68 65 72 20 76 61 6c 75 65 73 20 61 72 65 20 61  her values are a
4060: 6c 6c 6f 77 65 64 2e 3c 2f 70 3e 0a 0a 3c 68 34  llowed.</p>..<h4
4070: 3e 31 2e 32 2e 31 34 20 55 73 65 72 20 76 65 72  >1.2.14 User ver
4080: 73 69 6f 6e 20 6e 75 6d 62 65 72 3c 2f 68 34 3e  sion number</h4>
4090: 0a 0a 3c 70 3e 5e 54 68 65 20 34 2d 62 79 74 65  ..<p>^The 4-byte
40a0: 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65   big-endian inte
40b0: 67 65 72 20 61 74 20 6f 66 66 73 65 74 20 36 30  ger at offset 60
40c0: 20 69 73 20 74 68 65 20 75 73 65 72 20 76 65 72   is the user ver
40d0: 73 69 6f 6e 20 77 68 69 63 68 0a 69 73 20 73 65  sion which.is se
40e0: 74 20 61 6e 64 20 71 75 65 72 69 65 64 20 62 79  t and queried by
40f0: 20 74 68 65 20 5b 75 73 65 72 5f 76 65 72 73 69   the [user_versi
4100: 6f 6e 20 70 72 61 67 6d 61 5d 2e 20 20 54 68 65  on pragma].  The
4110: 20 75 73 65 72 20 76 65 72 73 69 6f 6e 20 69 73   user version is
4120: 0a 6e 6f 74 20 75 73 65 64 20 62 79 20 53 51 4c  .not used by SQL
4130: 69 74 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68  ite.</p>..<tcl>h
4140: 64 5f 66 72 61 67 6d 65 6e 74 20 76 61 6c 69 64  d_fragment valid
4150: 66 6f 72 20 7b 76 65 72 73 69 6f 6e 2d 76 61 6c  for {version-val
4160: 69 64 2d 66 6f 72 20 6e 75 6d 62 65 72 7d 3c 2f  id-for number}</
4170: 74 63 6c 3e 0a 3c 68 34 3e 31 2e 32 2e 31 35 20  tcl>.<h4>1.2.15 
4180: 57 72 69 74 65 20 6c 69 62 72 61 72 79 20 76 65  Write library ve
4190: 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 61 6e 64  rsion number and
41a0: 20 76 65 72 73 69 6f 6e 2d 76 61 6c 69 64 2d 66   version-valid-f
41b0: 6f 72 20 6e 75 6d 62 65 72 3c 2f 68 34 3e 0a 0a  or number</h4>..
41c0: 3c 70 3e 5e 54 68 65 20 34 2d 62 79 74 65 20 62  <p>^The 4-byte b
41d0: 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65  ig-endian intege
41e0: 72 20 61 74 20 6f 66 66 73 65 74 20 39 36 20 73  r at offset 96 s
41f0: 74 6f 72 65 73 20 74 68 65 20 0a 5b 53 51 4c 49  tores the .[SQLI
4200: 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42 45  TE_VERSION_NUMBE
4210: 52 5d 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65  R] value for the
4220: 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 20   SQLite library 
4230: 74 68 61 74 20 6d 6f 73 74 0a 72 65 63 65 6e 74  that most.recent
4240: 6c 79 20 6d 6f 64 69 66 69 65 64 20 74 68 65 20  ly modified the 
4250: 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 20  database file.  
4260: 5e 54 68 65 20 34 2d 62 79 74 65 20 62 69 67 2d  ^The 4-byte big-
4270: 65 6e 64 69 6e 67 20 69 6e 74 65 67 65 72 20 61  ending integer a
4280: 74 0a 6f 66 66 73 65 74 20 39 32 20 69 73 20 74  t.offset 92 is t
4290: 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
42a0: 5b 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 5d  [change counter]
42b0: 20 77 68 65 6e 20 74 68 65 20 76 65 72 73 69 6f   when the versio
42c0: 6e 20 6e 75 6d 62 65 72 0a 77 61 73 20 73 74 6f  n number.was sto
42d0: 72 65 64 2e 20 20 54 68 65 20 69 6e 74 65 67 65  red.  The intege
42e0: 72 20 61 74 20 6f 66 66 73 65 74 20 39 32 20 69  r at offset 92 i
42f0: 6e 64 69 63 61 74 65 73 20 77 68 69 63 68 20 74  ndicates which t
4300: 72 61 6e 73 61 63 74 69 6f 6e 0a 74 68 65 20 76  ransaction.the v
4310: 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 69 73  ersion number is
4320: 20 76 61 6c 69 64 20 66 6f 72 20 61 6e 64 20 69   valid for and i
4330: 73 20 73 6f 6d 65 74 69 6d 65 73 20 63 61 6c 6c  s sometimes call
4340: 65 64 20 74 68 65 0a 22 76 65 72 73 69 6f 6e 2d  ed the."version-
4350: 76 61 6c 69 64 2d 66 6f 72 20 6e 75 6d 62 65 72  valid-for number
4360: 22 2e 0a 0a 3c 68 34 3e 31 2e 32 2e 31 36 20 48  "...<h4>1.2.16 H
4370: 65 61 64 65 72 20 73 70 61 63 65 20 72 65 73 65  eader space rese
4380: 72 76 65 64 20 66 6f 72 20 65 78 70 61 6e 73 69  rved for expansi
4390: 6f 6e 3c 2f 68 34 3e 0a 0a 3c 70 3e 41 6c 6c 20  on</h4>..<p>All 
43a0: 6f 74 68 65 72 20 62 79 74 65 73 20 6f 66 20 74  other bytes of t
43b0: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
43c0: 20 68 65 61 64 65 72 20 61 72 65 20 72 65 73 65   header are rese
43d0: 72 76 65 64 20 66 6f 72 0a 66 75 74 75 72 65 20  rved for.future 
43e0: 65 78 70 61 6e 73 69 6f 6e 20 61 6e 64 20 6d 75  expansion and mu
43f0: 73 74 20 62 65 20 73 65 74 20 74 6f 20 7a 65 72  st be set to zer
4400: 6f 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 31 2e 33 20  o.</p>..<h3>1.3 
4410: 54 68 65 20 4c 6f 63 6b 2d 42 79 74 65 20 50 61  The Lock-Byte Pa
4420: 67 65 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20  ge</h3>..<p>The 
4430: 6c 6f 63 6b 2d 62 79 74 65 20 70 61 67 65 20 69  lock-byte page i
4440: 73 20 74 68 65 20 73 69 6e 67 6c 65 20 70 61 67  s the single pag
4450: 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  e of the databas
4460: 65 20 66 69 6c 65 0a 74 68 61 74 20 63 6f 6e 74  e file.that cont
4470: 61 69 6e 73 20 74 68 65 20 62 79 74 65 73 20 61  ains the bytes a
4480: 74 20 6f 66 66 73 65 74 73 20 62 65 74 77 65 65  t offsets betwee
4490: 6e 20 31 30 37 33 37 34 31 38 32 34 20 61 6e 64  n 1073741824 and
44a0: 20 31 30 37 33 37 34 32 33 33 35 2c 0a 69 6e 63   1073742335,.inc
44b0: 6c 75 73 69 76 65 2e 20 20 41 20 64 61 74 61 62  lusive.  A datab
44c0: 61 73 65 20 66 69 6c 65 20 74 68 61 74 20 69 73  ase file that is
44d0: 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71   less than or eq
44e0: 75 61 6c 20 74 6f 20 31 30 37 33 37 34 31 38 32  ual to 107374182
44f0: 34 20 62 79 74 65 73 20 0a 69 6e 20 73 69 7a 65  4 bytes .in size
4500: 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 6c 6f 63   contains no loc
4510: 6b 2d 62 79 74 65 20 70 61 67 65 2e 20 20 41 20  k-byte page.  A 
4520: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6c 61  database file la
4530: 72 67 65 72 20 74 68 61 6e 0a 31 30 37 33 37 34  rger than.107374
4540: 31 38 32 34 20 63 6f 6e 74 61 69 6e 73 20 65 78  1824 contains ex
4550: 61 63 74 6c 79 20 6f 6e 65 20 6c 6f 63 6b 2d 62  actly one lock-b
4560: 79 74 65 20 70 61 67 65 2e 0a 3c 2f 70 3e 0a 0a  yte page..</p>..
4570: 3c 70 3e 54 68 65 20 6c 6f 63 6b 2d 62 79 74 65  <p>The lock-byte
4580: 20 70 61 67 65 20 69 73 20 73 65 74 20 61 73 69   page is set asi
4590: 64 65 20 66 6f 72 20 75 73 65 20 62 79 20 74 68  de for use by th
45a0: 65 20 6f 70 65 72 61 74 69 6e 67 2d 73 79 73 74  e operating-syst
45b0: 65 6d 20 73 70 65 63 69 66 69 63 0a 5b 56 46 53  em specific.[VFS
45c0: 5d 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  ] implementation
45d0: 20 69 6e 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67   in implementing
45e0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
45f0: 6c 65 20 6c 6f 63 6b 69 6e 67 20 70 72 69 6d 69  le locking primi
4600: 74 69 76 65 73 2e 0a 5e 53 51 4c 69 74 65 20 64  tives..^SQLite d
4610: 6f 65 73 20 6e 6f 74 20 75 73 65 20 74 68 65 20  oes not use the 
4620: 6c 6f 63 6b 2d 62 79 74 65 20 70 61 67 65 2e 20  lock-byte page. 
4630: 20 5e 54 68 65 20 53 51 4c 69 74 65 20 63 6f 72   ^The SQLite cor
4640: 65 20 0a 77 69 6c 6c 20 6e 65 76 65 72 20 72 65  e .will never re
4650: 61 64 20 6f 72 20 77 72 69 74 65 2c 20 74 68 6f  ad or write, tho
4660: 75 67 68 20 6f 70 65 72 61 74 69 6e 67 2d 73 79  ugh operating-sy
4670: 73 74 65 6d 20 73 70 65 63 69 66 69 63 20 5b 56  stem specific [V
4680: 46 53 5d 20 0a 69 6d 70 6c 65 6d 65 6e 74 61 74  FS] .implementat
4690: 69 6f 6e 73 20 6d 61 79 20 63 68 6f 6f 73 65 20  ions may choose 
46a0: 74 6f 20 72 65 61 64 20 6f 72 20 77 72 69 74 65  to read or write
46b0: 20 62 79 74 65 73 20 6f 6e 20 74 68 65 20 6c 6f   bytes on the lo
46c0: 63 6b 2d 62 79 74 65 20 0a 70 61 67 65 20 61 63  ck-byte .page ac
46d0: 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 65 20 0a  cording to the .
46e0: 6e 65 65 64 73 20 61 6e 64 20 70 72 6f 63 6c 69  needs and procli
46f0: 76 69 74 69 65 73 20 6f 66 20 74 68 65 20 75 6e  vities of the un
4700: 64 65 72 6c 79 69 6e 67 20 73 79 73 74 65 6d 2e  derlying system.
4710: 20 20 54 68 65 20 75 6e 69 78 20 61 6e 64 20 77    The unix and w
4720: 69 6e 33 32 0a 5b 56 46 53 5d 20 69 6d 70 6c 65  in32.[VFS] imple
4730: 6d 65 6e 74 61 74 69 6f 6e 73 20 74 68 61 74 20  mentations that 
4740: 63 6f 6d 65 20 62 75 69 6c 74 20 69 6e 74 6f 20  come built into 
4750: 53 51 4c 69 74 65 20 64 6f 20 6e 6f 74 20 77 72  SQLite do not wr
4760: 69 74 65 20 74 6f 20 74 68 65 0a 6c 6f 63 6b 2d  ite to the.lock-
4770: 62 79 74 65 20 70 61 67 65 2c 20 62 75 74 20 74  byte page, but t
4780: 68 69 72 64 2d 70 61 72 74 79 20 56 46 53 20 69  hird-party VFS i
4790: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20 66  mplementations f
47a0: 6f 72 0a 6f 74 68 65 72 20 6f 70 65 72 61 74 69  or.other operati
47b0: 6e 67 20 73 79 73 74 65 6d 73 20 6d 69 67 68 74  ng systems might
47c0: 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  .</p>..<tcl>hd_f
47d0: 72 61 67 6d 65 6e 74 20 7b 66 72 65 65 6c 69 73  ragment {freelis
47e0: 74 7d 20 7b 66 72 65 65 6c 69 73 74 7d 20 7b 66  t} {freelist} {f
47f0: 72 65 65 2d 70 61 67 65 20 6c 69 73 74 7d 3c 2f  ree-page list}</
4800: 74 63 6c 3e 0a 3c 68 33 3e 31 2e 34 20 54 68 65  tcl>.<h3>1.4 The
4810: 20 46 72 65 65 6c 69 73 74 3c 2f 68 33 3e 0a 0a   Freelist</h3>..
4820: 3c 70 3e 41 20 64 61 74 61 62 61 73 65 20 66 69  <p>A database fi
4830: 6c 65 20 6d 69 67 68 74 20 63 6f 6e 74 61 69 6e  le might contain
4840: 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 70 61 67   one or more pag
4850: 65 73 20 74 68 61 74 20 61 72 65 20 6e 6f 74 20  es that are not 
4860: 69 6e 0a 61 63 74 69 76 65 20 75 73 65 2e 20 20  in.active use.  
4870: 55 6e 75 73 65 64 20 70 61 67 65 73 20 63 61 6e  Unused pages can
4880: 20 63 6f 6d 65 20 61 62 6f 75 74 2c 20 66 6f 72   come about, for
4890: 20 65 78 61 6d 70 6c 65 2c 20 77 68 65 6e 20 69   example, when i
48a0: 6e 66 6f 72 6d 61 74 69 6f 6e 0a 69 73 20 64 65  nformation.is de
48b0: 6c 65 74 65 64 20 66 72 6f 6d 20 74 68 65 20 64  leted from the d
48c0: 61 74 61 62 61 73 65 2e 20 20 55 6e 75 73 65 64  atabase.  Unused
48d0: 20 70 61 67 65 73 20 61 72 65 20 73 74 6f 72 65   pages are store
48e0: 64 20 6f 6e 20 74 68 65 20 66 72 65 65 6c 69 73  d on the freelis
48f0: 74 0a 61 6e 64 20 61 72 65 20 72 65 75 73 65 64  t.and are reused
4900: 20 77 68 65 6e 20 61 64 64 69 74 69 6f 6e 61 6c   when additional
4910: 20 70 61 67 65 73 20 61 72 65 20 72 65 71 75 69   pages are requi
4920: 72 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  red.</p>..<p>The
4930: 20 66 72 65 65 6c 69 73 74 20 69 73 20 6f 72 67   freelist is org
4940: 61 6e 69 7a 65 64 20 61 73 20 61 20 6c 69 6e 6b  anized as a link
4950: 65 64 20 6c 69 73 74 20 6f 66 20 66 72 65 65 6c  ed list of freel
4960: 69 73 74 20 74 72 75 6e 6b 20 70 61 67 65 73 0a  ist trunk pages.
4970: 77 69 74 68 20 65 61 63 68 20 74 72 75 6e 6b 20  with each trunk 
4980: 70 61 67 65 73 20 63 6f 6e 74 61 69 6e 69 6e 67  pages containing
4990: 20 70 61 67 65 20 6e 75 6d 62 65 72 73 20 66 6f   page numbers fo
49a0: 72 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 66  r zero or more f
49b0: 72 65 65 6c 69 73 74 0a 6c 65 61 66 20 70 61 67  reelist.leaf pag
49c0: 65 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 20 66 72  es.</p>..<p>A fr
49d0: 65 65 6c 69 73 74 20 74 72 75 6e 6b 20 70 61 67  eelist trunk pag
49e0: 65 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 6e  e consists of an
49f0: 20 61 72 72 61 79 20 6f 66 20 34 2d 62 79 74 65   array of 4-byte
4a00: 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65   big-endian inte
4a10: 67 65 72 73 2e 0a 54 68 65 20 73 69 7a 65 20 6f  gers..The size o
4a20: 66 20 74 68 65 20 61 72 72 61 79 20 69 73 20 61  f the array is a
4a30: 73 20 6d 61 6e 79 20 69 6e 74 65 67 65 72 73 20  s many integers 
4a40: 61 73 20 77 69 6c 6c 20 66 69 74 20 69 6e 20 74  as will fit in t
4a50: 68 65 20 75 73 61 62 6c 65 20 73 70 61 63 65 0a  he usable space.
4a60: 6f 66 20 61 20 70 61 67 65 2e 20 20 54 68 65 20  of a page.  The 
4a70: 6d 69 6e 69 6d 75 6d 20 75 73 61 62 6c 65 20 73  minimum usable s
4a80: 70 61 63 65 20 69 73 20 34 38 30 20 62 79 74 65  pace is 480 byte
4a90: 73 20 73 6f 20 74 68 65 20 61 72 72 61 79 20 77  s so the array w
4aa0: 69 6c 6c 20 61 6c 77 61 79 73 0a 62 65 20 61 74  ill always.be at
4ab0: 20 6c 65 61 73 74 20 31 32 30 20 65 6e 74 72 69   least 120 entri
4ac0: 65 73 20 69 6e 20 6c 65 6e 67 74 68 2e 20 20 5e  es in length.  ^
4ad0: 54 68 65 20 66 69 72 73 74 20 69 6e 74 65 67 65  The first intege
4ae0: 72 20 69 6e 20 74 68 65 20 61 72 72 61 79 20 0a  r in the array .
4af0: 69 73 20 74 68 65 20 70 61 67 65 20 6e 75 6d 62  is the page numb
4b00: 65 72 20 6f 66 20 74 68 65 20 6e 65 78 74 20 66  er of the next f
4b10: 72 65 65 6c 69 73 74 20 74 72 75 6e 6b 20 70 61  reelist trunk pa
4b20: 67 65 20 69 6e 20 74 68 65 20 6c 69 73 74 20 6f  ge in the list o
4b30: 72 20 7a 65 72 6f 20 0a 69 66 20 74 68 69 73 20  r zero .if this 
4b40: 69 73 20 74 68 65 20 6c 61 73 74 20 66 72 65 65  is the last free
4b50: 6c 69 73 74 20 74 72 75 6e 6b 20 70 61 67 65 2e  list trunk page.
4b60: 20 20 5e 54 68 65 20 73 65 63 6f 6e 64 20 69 6e    ^The second in
4b70: 74 65 67 65 72 20 69 6e 20 74 68 65 20 61 72 72  teger in the arr
4b80: 61 79 0a 69 73 20 74 68 65 20 6e 75 6d 62 65 72  ay.is the number
4b90: 20 6f 66 20 6c 65 61 66 20 70 61 67 65 20 70 6f   of leaf page po
4ba0: 69 6e 74 65 72 73 20 74 6f 20 66 6f 6c 6c 6f 77  inters to follow
4bb0: 2e 20 20 43 61 6c 6c 20 74 68 65 20 73 65 63 6f  .  Call the seco
4bc0: 6e 64 20 69 6e 74 65 67 65 72 20 4c 2e 0a 5e 49  nd integer L..^I
4bd0: 66 20 4c 20 69 73 20 67 72 65 61 74 65 72 20 74  f L is greater t
4be0: 68 61 6e 20 7a 65 72 6f 20 74 68 65 6e 20 69 6e  han zero then in
4bf0: 74 65 67 65 72 73 20 77 69 74 68 20 61 72 72 61  tegers with arra
4c00: 79 20 69 6e 64 65 78 65 73 20 62 65 74 77 65 65  y indexes betwee
4c10: 6e 20 32 20 61 6e 64 0a 4c 2b 31 20 69 6e 63 6c  n 2 and.L+1 incl
4c20: 75 73 69 76 65 20 63 6f 6e 74 61 69 6e 20 70 61  usive contain pa
4c30: 67 65 20 6e 75 6d 62 65 72 73 20 66 6f 72 20 66  ge numbers for f
4c40: 72 65 65 6c 69 73 74 20 6c 65 61 66 20 70 61 67  reelist leaf pag
4c50: 65 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 46 72 65 65  es.</p>..<p>Free
4c60: 6c 69 73 74 20 6c 65 61 66 20 70 61 67 65 73 20  list leaf pages 
4c70: 63 6f 6e 74 61 69 6e 20 6e 6f 20 69 6e 66 6f 72  contain no infor
4c80: 6d 61 74 69 6f 6e 2e 20 20 5e 53 51 4c 69 74 65  mation.  ^SQLite
4c90: 20 61 76 6f 69 64 73 20 72 65 61 64 69 6e 67 20   avoids reading 
4ca0: 6f 72 0a 77 72 69 74 69 6e 67 20 66 72 65 65 6c  or.writing freel
4cb0: 69 73 74 20 6c 65 61 66 20 70 61 67 65 73 20 69  ist leaf pages i
4cc0: 6e 20 6f 72 64 65 72 20 74 6f 20 72 65 64 75 63  n order to reduc
4cd0: 65 20 64 69 73 6b 20 49 2f 4f 2e 3c 2f 70 3e 0a  e disk I/O.</p>.
4ce0: 0a 3c 70 3e 41 20 62 75 67 20 69 6e 20 53 51 4c  .<p>A bug in SQL
4cf0: 69 74 65 20 76 65 72 73 69 6f 6e 73 20 70 72 69  ite versions pri
4d00: 6f 72 20 74 6f 20 33 2e 36 2e 30 20 63 61 75 73  or to 3.6.0 caus
4d10: 65 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20  ed the database 
4d20: 74 6f 20 62 65 0a 72 65 70 6f 72 74 65 64 20 61  to be.reported a
4d30: 73 20 63 6f 72 72 75 70 74 20 69 66 20 61 6e 79  s corrupt if any
4d40: 20 6f 66 20 74 68 65 20 6c 61 73 74 20 36 20 65   of the last 6 e
4d50: 6e 74 72 69 65 73 20 69 6e 20 74 68 65 20 66 72  ntries in the fr
4d60: 65 65 6c 69 73 74 20 74 72 75 6e 6b 20 70 61 67  eelist trunk pag
4d70: 65 20 0a 61 72 72 61 79 20 63 6f 6e 74 61 69 6e  e .array contain
4d80: 65 64 20 6e 6f 6e 2d 7a 65 72 6f 20 76 61 6c 75  ed non-zero valu
4d90: 65 73 2e 20 20 4e 65 77 65 72 20 76 65 72 73 69  es.  Newer versi
4da0: 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 64 6f  ons of SQLite do
4db0: 20 6e 6f 74 20 68 61 76 65 0a 74 68 69 73 20 70   not have.this p
4dc0: 72 6f 62 6c 65 6d 2e 20 20 5e 48 6f 77 65 76 65  roblem.  ^Howeve
4dd0: 72 2c 20 6e 65 77 65 72 20 76 65 72 73 69 6f 6e  r, newer version
4de0: 73 20 6f 66 20 53 51 4c 69 74 65 20 73 74 69 6c  s of SQLite stil
4df0: 6c 20 61 76 6f 69 64 20 75 73 69 6e 67 20 74 68  l avoid using th
4e00: 65 20 0a 6c 61 73 74 20 73 69 78 20 65 6e 74 72  e .last six entr
4e10: 69 65 73 20 69 6e 20 74 68 65 20 66 72 65 65 6c  ies in the freel
4e20: 69 73 74 20 74 72 75 6e 6b 20 70 61 67 65 20 61  ist trunk page a
4e30: 72 72 61 79 20 69 6e 20 6f 72 64 65 72 20 74 68  rray in order th
4e40: 61 74 20 64 61 74 61 62 61 73 65 0a 66 69 6c 65  at database.file
4e50: 73 20 63 72 65 61 74 65 64 20 62 79 20 6e 65 77  s created by new
4e60: 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53  er versions of S
4e70: 51 4c 69 74 65 20 63 61 6e 20 62 65 20 72 65 61  QLite can be rea
4e80: 64 20 62 79 20 6f 6c 64 65 72 20 76 65 72 73 69  d by older versi
4e90: 6f 6e 73 0a 6f 66 20 53 51 4c 69 74 65 2e 3c 2f  ons.of SQLite.</
4ea0: 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 6e 75 6d 62  p>..<p>^The numb
4eb0: 65 72 20 6f 66 20 66 72 65 65 6c 69 73 74 20 70  er of freelist p
4ec0: 61 67 65 73 20 69 73 20 73 74 6f 72 65 64 20 61  ages is stored a
4ed0: 73 20 61 20 34 2d 62 79 74 65 20 62 69 67 2d 65  s a 4-byte big-e
4ee0: 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 0a 69 6e  ndian integer.in
4ef0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68 65   the database he
4f00: 61 64 65 72 20 61 74 20 61 6e 20 6f 66 66 73 65  ader at an offse
4f10: 74 20 6f 66 20 33 36 20 66 72 6f 6d 20 74 68 65  t of 36 from the
4f20: 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68   beginning of th
4f30: 65 20 66 69 6c 65 2e 0a 5e 54 68 65 20 64 61 74  e file..^The dat
4f40: 61 62 61 73 65 20 68 65 61 64 65 72 20 61 6c 73  abase header als
4f50: 6f 20 73 74 6f 72 65 73 20 74 68 65 20 70 61 67  o stores the pag
4f60: 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20  e number of the 
4f70: 66 69 72 73 74 20 66 72 65 65 6c 69 73 74 20 74  first freelist t
4f80: 72 75 6e 6b 0a 70 61 67 65 20 61 73 20 61 20 34  runk.page as a 4
4f90: 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e  -byte big-endian
4fa0: 20 69 6e 74 65 67 65 72 20 61 74 20 61 6e 20 6f   integer at an o
4fb0: 66 66 73 65 74 20 6f 66 20 33 32 20 66 72 6f 6d  ffset of 32 from
4fc0: 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 0a 6f   the beginning.o
4fd0: 66 20 74 68 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a  f the file.</p>.
4fe0: 0a 3c 68 33 3e 31 2e 35 20 42 2d 74 72 65 65 20  .<h3>1.5 B-tree 
4ff0: 50 61 67 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 41  Pages</h3>..<p>A
5000: 20 62 2d 74 72 65 65 20 70 61 67 65 20 69 73 20   b-tree page is 
5010: 65 69 74 68 65 72 20 61 6e 20 69 6e 74 65 72 69  either an interi
5020: 6f 72 20 70 61 67 65 20 6f 72 20 61 20 6c 65 61  or page or a lea
5030: 66 20 70 61 67 65 2e 0a 41 20 6c 65 61 66 20 70  f page..A leaf p
5040: 61 67 65 20 63 6f 6e 74 61 69 6e 73 20 6b 65 79  age contains key
5050: 73 20 61 6e 64 20 69 6e 20 74 68 65 20 63 61 73  s and in the cas
5060: 65 20 6f 66 20 61 20 74 61 62 6c 65 20 62 2d 74  e of a table b-t
5070: 72 65 65 20 65 61 63 68 0a 6b 65 79 20 68 61 73  ree each.key has
5080: 20 61 73 73 6f 63 69 61 74 65 64 20 63 6f 6e 74   associated cont
5090: 65 6e 74 2e 20 20 41 6e 20 69 6e 74 65 72 69 6f  ent.  An interio
50a0: 72 20 70 61 67 65 20 63 6f 6e 74 61 69 6e 73 0a  r page contains.
50b0: 4b 20 6b 65 79 73 20 77 69 74 68 6f 75 74 20 63  K keys without c
50c0: 6f 6e 74 65 6e 74 20 62 75 74 20 77 69 74 68 20  ontent but with 
50d0: 4b 2b 31 20 70 6f 69 6e 74 65 72 73 20 74 6f 20  K+1 pointers to 
50e0: 63 68 69 6c 64 20 62 2d 74 72 65 65 20 70 61 67  child b-tree pag
50f0: 65 73 2e 0a 41 20 22 70 6f 69 6e 74 65 72 22 20  es..A "pointer" 
5100: 69 6e 20 61 6e 20 69 6e 74 65 72 69 6f 72 20 62  in an interior b
5110: 2d 74 72 65 65 20 70 61 67 65 20 69 73 20 6a 75  -tree page is ju
5120: 73 74 20 74 68 65 20 33 31 2d 62 69 74 20 69 6e  st the 31-bit in
5130: 74 65 67 65 72 0a 70 61 67 65 20 6e 75 6d 62 65  teger.page numbe
5140: 72 20 6f 66 20 74 68 65 20 63 68 69 6c 64 20 70  r of the child p
5150: 61 67 65 2e 3c 2f 70 3e 0a 0a 0a 3c 70 3e 44 65  age.</p>...<p>De
5160: 66 69 6e 65 20 74 68 65 20 64 65 70 74 68 0a 6f  fine the depth.o
5170: 66 20 61 20 6c 65 61 66 20 62 2d 74 72 65 65 20  f a leaf b-tree 
5180: 74 6f 20 62 65 20 31 20 61 6e 64 20 74 68 65 20  to be 1 and the 
5190: 64 65 70 74 68 20 6f 66 20 61 6e 79 20 69 6e 74  depth of any int
51a0: 65 72 69 6f 72 20 62 2d 74 72 65 65 20 74 6f 20  erior b-tree to 
51b0: 62 65 20 6f 6e 65 0a 6d 6f 72 65 20 74 68 61 6e  be one.more than
51c0: 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 64 65 70   the maximum dep
51d0: 74 68 20 6f 66 20 61 6e 79 20 6f 66 20 69 74 73  th of any of its
51e0: 20 63 68 69 6c 64 72 65 6e 2e 20 20 5e 49 6e 20   children.  ^In 
51f0: 61 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 0a 64 61  a well-formed.da
5200: 74 61 62 61 73 65 2c 20 61 6c 6c 20 63 68 69 6c  tabase, all chil
5210: 64 72 65 6e 20 6f 66 20 61 6e 79 20 6f 6e 65 20  dren of any one 
5220: 69 6e 74 65 72 69 6f 72 20 62 2d 74 72 65 65 20  interior b-tree 
5230: 68 61 76 65 20 74 68 65 20 73 61 6d 65 20 64 65  have the same de
5240: 70 74 68 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 6e 20  pth.</p>..<p>In 
5250: 61 6e 20 69 6e 74 65 72 69 6f 72 20 62 2d 74 72  an interior b-tr
5260: 65 65 20 70 61 67 65 2c 20 74 68 65 20 70 6f 69  ee page, the poi
5270: 6e 74 65 72 73 20 61 6e 64 20 6b 65 79 73 20 6c  nters and keys l
5280: 6f 67 69 63 61 6c 6c 79 20 61 6c 74 65 72 6e 61  ogically alterna
5290: 74 65 20 0a 77 69 74 68 20 61 20 70 6f 69 6e 74  te .with a point
52a0: 65 72 20 6f 6e 20 62 6f 74 68 20 65 6e 64 73 2e  er on both ends.
52b0: 20 28 54 68 65 20 70 72 65 76 69 6f 75 73 20 73   (The previous s
52c0: 65 6e 74 65 6e 63 65 20 69 73 20 74 6f 20 62 65  entence is to be
52d0: 20 75 6e 64 65 72 73 74 6f 6f 64 0a 63 6f 6e 63   understood.conc
52e0: 65 70 74 75 61 6c 6c 79 20 2d 20 74 68 65 20 61  eptually - the a
52f0: 63 74 75 61 6c 20 6c 61 79 6f 75 74 20 6f 66 20  ctual layout of 
5300: 74 68 65 20 6b 65 79 73 20 61 6e 64 0a 70 6f 69  the keys and.poi
5310: 6e 74 65 72 73 20 77 69 74 68 69 6e 20 74 68 65  nters within the
5320: 20 70 61 67 65 20 69 73 20 6d 6f 72 65 20 63 6f   page is more co
5330: 6d 70 6c 69 63 61 74 65 64 20 61 6e 64 20 77 69  mplicated and wi
5340: 6c 6c 20 62 65 20 64 65 73 63 72 69 62 65 64 20  ll be described 
5350: 69 6e 0a 74 68 65 20 73 65 71 75 65 6c 2e 29 20  in.the sequel.) 
5360: 20 41 6c 6c 20 6b 65 79 73 20 77 69 74 68 69 6e   All keys within
5370: 20 74 68 65 20 73 61 6d 65 20 70 61 67 65 20 61   the same page a
5380: 72 65 20 75 6e 69 71 75 65 20 61 6e 64 20 61 72  re unique and ar
5390: 65 20 6c 6f 67 69 63 61 6c 6c 79 0a 6f 72 67 61  e logically.orga
53a0: 6e 69 7a 65 64 20 69 6e 20 61 73 63 65 6e 64 69  nized in ascendi
53b0: 6e 67 20 6f 72 64 65 72 20 66 72 6f 6d 20 6c 65  ng order from le
53c0: 66 74 20 74 6f 20 72 69 67 68 74 2e 20 20 28 41  ft to right.  (A
53d0: 67 61 69 6e 2c 20 74 68 69 73 20 6f 72 64 65 72  gain, this order
53e0: 69 6e 67 0a 69 73 20 6c 6f 67 69 63 61 6c 2c 20  ing.is logical, 
53f0: 6e 6f 74 20 70 68 79 73 69 63 61 6c 2e 20 20 54  not physical.  T
5400: 68 65 20 61 63 74 75 61 6c 20 6c 6f 63 61 74 69  he actual locati
5410: 6f 6e 20 6f 66 20 6b 65 79 73 20 77 69 74 68 69  on of keys withi
5420: 6e 20 74 68 65 20 70 61 67 65 0a 69 73 20 61 72  n the page.is ar
5430: 62 69 74 72 61 72 79 2e 29 20 5e 46 6f 72 20 61  bitrary.) ^For a
5440: 6e 79 20 6b 65 79 20 58 2c 20 70 6f 69 6e 74 65  ny key X, pointe
5450: 72 73 20 74 6f 20 74 68 65 20 6c 65 66 74 0a 6f  rs to the left.o
5460: 66 20 61 20 58 20 72 65 66 65 72 20 74 6f 20 62  f a X refer to b
5470: 2d 74 72 65 65 20 70 61 67 65 73 20 6f 6e 20 77  -tree pages on w
5480: 68 69 63 68 20 61 6c 6c 20 6b 65 79 73 20 61 72  hich all keys ar
5490: 65 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65  e less than or e
54a0: 71 75 61 6c 20 74 6f 20 58 2e 0a 5e 50 6f 69 6e  qual to X..^Poin
54b0: 74 65 72 73 20 74 6f 20 74 68 65 20 72 69 67 68  ters to the righ
54c0: 74 20 6f 66 20 58 20 72 65 66 65 72 20 74 6f 20  t of X refer to 
54d0: 70 61 67 65 73 20 77 68 65 72 65 20 61 6c 6c 20  pages where all 
54e0: 6b 65 79 73 20 61 72 65 20 0a 67 72 65 61 74 65  keys are .greate
54f0: 72 20 74 68 61 6e 20 58 2e 3c 2f 70 3e 0a 0a 3c  r than X.</p>..<
5500: 70 3e 57 69 74 68 69 6e 20 61 6e 20 69 6e 74 65  p>Within an inte
5510: 72 69 6f 72 20 62 2d 74 72 65 65 20 70 61 67 65  rior b-tree page
5520: 2c 20 65 61 63 68 20 6b 65 79 20 61 6e 64 20 74  , each key and t
5530: 68 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 69 74  he pointer to it
5540: 73 0a 69 6d 6d 65 64 69 61 74 65 20 6c 65 66 74  s.immediate left
5550: 20 61 72 65 20 63 6f 6d 62 69 6e 65 64 20 69 6e   are combined in
5560: 74 6f 20 61 20 73 74 72 75 63 74 75 72 65 20 63  to a structure c
5570: 61 6c 6c 65 64 20 61 20 22 63 65 6c 6c 22 2e 20  alled a "cell". 
5580: 20 54 68 65 0a 72 69 67 68 74 2d 6d 6f 73 74 20   The.right-most 
5590: 70 6f 69 6e 74 65 72 20 69 73 20 68 65 6c 64 20  pointer is held 
55a0: 73 65 70 61 72 61 74 65 6c 79 2e 20 20 41 20 6c  separately.  A l
55b0: 65 61 66 20 62 2d 74 72 65 65 20 70 61 67 65 20  eaf b-tree page 
55c0: 68 61 73 20 6e 6f 0a 70 6f 69 6e 74 65 72 73 2c  has no.pointers,
55d0: 20 62 75 74 20 69 74 20 73 74 69 6c 6c 20 75 73   but it still us
55e0: 65 73 20 74 68 65 20 63 65 6c 6c 20 73 74 72 75  es the cell stru
55f0: 63 74 75 72 65 20 74 6f 20 68 6f 6c 64 20 6b 65  cture to hold ke
5600: 79 73 20 66 6f 72 0a 69 6e 64 65 78 20 62 2d 74  ys for.index b-t
5610: 72 65 65 73 20 6f 72 20 6b 65 79 73 20 61 6e 64  rees or keys and
5620: 20 63 6f 6e 74 65 6e 74 20 66 6f 72 20 74 61 62   content for tab
5630: 6c 65 20 62 2d 74 72 65 65 73 2e 3c 2f 70 3e 0a  le b-trees.</p>.
5640: 3c 2f 70 3e 0a 0a 3c 70 3e 45 76 65 72 79 20 62  </p>..<p>Every b
5650: 2d 74 72 65 65 20 70 61 67 65 20 68 61 73 20 61  -tree page has a
5660: 74 20 6d 6f 73 74 20 6f 6e 65 20 70 61 72 65 6e  t most one paren
5670: 74 20 62 2d 74 72 65 65 20 70 61 67 65 2e 0a 41  t b-tree page..A
5680: 20 62 2d 74 72 65 65 20 70 61 67 65 20 77 69 74   b-tree page wit
5690: 68 6f 75 74 20 61 20 70 61 72 65 6e 74 20 69 73  hout a parent is
56a0: 20 63 61 6c 6c 65 64 20 61 20 72 6f 6f 74 20 70   called a root p
56b0: 61 67 65 2e 20 20 41 20 72 6f 6f 74 20 62 2d 74  age.  A root b-t
56c0: 72 65 65 20 70 61 67 65 0a 74 6f 67 65 74 68 65  ree page.togethe
56d0: 72 20 77 69 74 68 20 74 68 65 20 63 6c 6f 73 75  r with the closu
56e0: 72 65 20 6f 66 20 69 74 73 20 63 68 69 6c 64 72  re of its childr
56f0: 65 6e 20 66 6f 72 6d 20 61 20 63 6f 6d 70 6c 65  en form a comple
5700: 74 65 20 62 2d 74 72 65 65 2e 0a 49 74 20 69 73  te b-tree..It is
5710: 20 70 6f 73 73 69 62 6c 65 20 28 61 6e 64 20 69   possible (and i
5720: 6e 20 66 61 63 74 20 72 61 74 68 65 72 20 63 6f  n fact rather co
5730: 6d 6d 6f 6e 29 20 74 6f 20 68 61 76 65 20 61 20  mmon) to have a 
5740: 63 6f 6d 70 6c 65 74 65 20 62 2d 74 72 65 65 0a  complete b-tree.
5750: 74 68 61 74 20 63 6f 6e 73 69 73 74 73 20 6f 66  that consists of
5760: 20 61 20 73 69 6e 67 6c 65 20 70 61 67 65 20 74   a single page t
5770: 68 61 74 20 69 73 20 62 6f 74 68 20 61 20 6c 65  hat is both a le
5780: 61 66 20 61 6e 64 20 74 68 65 20 72 6f 6f 74 2e  af and the root.
5790: 0a 42 65 63 61 75 73 65 20 74 68 65 72 65 20 61  .Because there a
57a0: 72 65 20 70 6f 69 6e 74 65 72 73 20 66 72 6f 6d  re pointers from
57b0: 20 70 61 72 65 6e 74 73 20 74 6f 20 63 68 69 6c   parents to chil
57c0: 64 72 65 6e 2c 20 65 76 65 72 79 20 70 61 67 65  dren, every page
57d0: 20 6f 66 20 61 0a 63 6f 6d 70 6c 65 74 65 20 62   of a.complete b
57e0: 2d 74 72 65 65 20 63 61 6e 20 62 65 20 6c 6f 63  -tree can be loc
57f0: 61 74 65 64 20 69 66 20 6f 6e 6c 79 20 74 68 65  ated if only the
5800: 20 72 6f 6f 74 20 70 61 67 65 20 69 73 20 6b 6e   root page is kn
5810: 6f 77 6e 2e 20 20 48 65 6e 63 65 2c 0a 62 2d 74  own.  Hence,.b-t
5820: 72 65 65 73 20 61 72 65 20 69 64 65 6e 74 69 66  rees are identif
5830: 69 65 64 20 62 79 20 74 68 65 69 72 20 72 6f 6f  ied by their roo
5840: 74 20 70 61 67 65 20 6e 75 6d 62 65 72 2e 3c 2f  t page number.</
5850: 70 3e 0a 0a 3c 70 3e 41 20 62 2d 74 72 65 65 20  p>..<p>A b-tree 
5860: 70 61 67 65 20 69 73 20 65 69 74 68 65 72 20 61  page is either a
5870: 20 74 61 62 6c 65 20 62 2d 74 72 65 65 20 70 61   table b-tree pa
5880: 67 65 20 6f 72 20 61 6e 20 69 6e 64 65 78 20 62  ge or an index b
5890: 2d 74 72 65 65 20 70 61 67 65 2e 0a 41 6c 6c 20  -tree page..All 
58a0: 70 61 67 65 73 20 77 69 74 68 69 6e 20 65 61 63  pages within eac
58b0: 68 20 63 6f 6d 70 6c 65 74 65 20 62 2d 74 72 65  h complete b-tre
58c0: 65 20 61 72 65 20 6f 66 20 74 68 65 20 73 61 6d  e are of the sam
58d0: 65 20 74 79 70 65 3a 20 65 69 74 68 65 72 20 74  e type: either t
58e0: 61 62 6c 65 0a 6f 72 20 69 6e 64 65 78 2e 20 20  able.or index.  
58f0: 54 68 65 72 65 20 69 73 20 61 20 6f 6e 65 2d 74  There is a one-t
5900: 6f 2d 6f 6e 65 20 6d 61 70 70 69 6e 67 20 66 72  o-one mapping fr
5910: 6f 6d 20 74 61 62 6c 65 20 62 2d 74 72 65 65 73  om table b-trees
5920: 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
5930: 20 0a 66 69 6c 65 20 74 6f 20 28 6e 6f 6e 2d 76   .file to (non-v
5940: 69 72 74 75 61 6c 29 20 74 61 62 6c 65 73 20 69  irtual) tables i
5950: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  n the database s
5960: 63 68 65 6d 61 2c 20 69 6e 63 6c 75 64 69 6e 67  chema, including
5970: 20 73 79 73 74 65 6d 20 74 61 62 6c 65 73 0a 73   system tables.s
5980: 75 63 68 20 61 73 20 73 71 6c 69 74 65 5f 6d 61  uch as sqlite_ma
5990: 73 74 65 72 2e 20 20 54 68 65 72 65 20 69 73 20  ster.  There is 
59a0: 6f 6e 65 2d 74 6f 2d 6f 6e 65 20 6d 61 70 70 69  one-to-one mappi
59b0: 6e 67 20 62 65 74 77 65 65 6e 20 69 6e 64 65 78  ng between index
59c0: 20 62 2d 74 72 65 65 73 0a 69 6e 20 74 68 65 20   b-trees.in the 
59d0: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e  database file an
59e0: 64 20 69 6e 64 69 63 65 73 20 69 6e 20 74 68 65  d indices in the
59f0: 20 73 63 68 65 6d 61 2c 20 69 6e 63 6c 75 64 69   schema, includi
5a00: 6e 67 20 69 6d 70 6c 69 65 64 20 69 6e 64 69 63  ng implied indic
5a10: 65 73 0a 63 72 65 61 74 65 64 20 62 79 20 75 6e  es.created by un
5a20: 69 71 75 65 6e 65 73 73 20 63 6f 6e 73 74 72 61  iqueness constra
5a30: 69 6e 74 73 2e 20 20 54 68 65 20 62 2d 74 72 65  ints.  The b-tre
5a40: 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
5a50: 74 6f 20 74 68 65 0a 73 71 6c 69 74 65 5f 6d 61  to the.sqlite_ma
5a60: 73 74 65 72 20 74 61 62 6c 65 20 61 6c 77 61 79  ster table alway
5a70: 73 20 68 61 73 20 69 74 73 20 72 6f 6f 74 20 70  s has its root p
5a80: 61 67 65 20 6f 6e 20 61 20 70 61 67 65 20 6e 75  age on a page nu
5a90: 6d 62 65 72 20 6f 66 20 31 2e 0a 54 68 65 20 73  mber of 1..The s
5aa0: 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62  qlite_master tab
5ab0: 6c 65 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  le contains the 
5ac0: 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72  root page number
5ad0: 20 66 6f 72 20 65 76 65 72 79 20 6f 74 68 65 72   for every other
5ae0: 20 0a 74 61 62 6c 65 20 61 6e 64 20 69 6e 64 65   .table and inde
5af0: 78 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  x in the databas
5b00: 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e  e file.</p>..<p>
5b10: 45 61 63 68 20 65 6e 74 72 79 20 69 6e 20 61 20  Each entry in a 
5b20: 74 61 62 6c 65 20 62 2d 74 72 65 65 20 63 6f 6e  table b-tree con
5b30: 73 69 73 74 73 20 6f 66 20 61 20 36 34 2d 62 69  sists of a 64-bi
5b40: 74 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  t signed integer
5b50: 20 6b 65 79 0a 61 6e 64 20 75 70 20 74 6f 20 32   key.and up to 2
5b60: 31 34 37 34 38 33 36 34 37 20 62 79 74 65 73 20  147483647 bytes 
5b70: 6f 66 20 61 72 62 69 74 72 61 72 79 20 64 61 74  of arbitrary dat
5b80: 61 2e 20 20 49 6e 74 65 72 69 6f 72 20 74 61 62  a.  Interior tab
5b90: 6c 65 20 62 2d 74 72 65 65 73 0a 68 6f 6c 64 20  le b-trees.hold 
5ba0: 6f 6e 6c 79 20 6b 65 79 73 20 61 6e 64 20 70 6f  only keys and po
5bb0: 69 6e 74 65 72 73 20 74 6f 20 63 68 69 6c 64 72  inters to childr
5bc0: 65 6e 2e 20 20 41 6c 6c 20 64 61 74 61 20 69 73  en.  All data is
5bd0: 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68   contained in th
5be0: 65 0a 74 61 62 6c 65 20 62 2d 74 72 65 65 20 6c  e.table b-tree l
5bf0: 65 61 76 65 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 45  eaves.</p>..<p>E
5c00: 61 63 68 20 65 6e 74 72 79 20 69 6e 20 61 6e 20  ach entry in an 
5c10: 69 6e 64 65 78 20 62 2d 74 72 65 65 20 63 6f 6e  index b-tree con
5c20: 73 69 73 74 73 20 6f 66 20 61 6e 20 61 72 62 69  sists of an arbi
5c30: 74 72 61 72 79 20 6b 65 79 20 6f 66 20 75 70 0a  trary key of up.
5c40: 74 6f 20 32 31 34 37 34 38 33 36 34 37 20 62 79  to 2147483647 by
5c50: 74 65 73 20 69 6e 20 6c 65 6e 67 74 68 20 61 6e  tes in length an
5c60: 64 20 6e 6f 20 64 61 74 61 2e 3c 2f 70 3e 0a 0a  d no data.</p>..
5c70: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
5c80: 20 63 65 6c 6c 5f 70 61 79 6c 6f 61 64 20 7b 63   cell_payload {c
5c90: 65 6c 6c 20 70 61 79 6c 6f 61 64 7d 3c 2f 74 63  ell payload}</tc
5ca0: 6c 3e 0a 3c 70 3e 44 65 66 69 6e 65 20 74 68 65  l>.<p>Define the
5cb0: 20 22 70 61 79 6c 6f 61 64 22 20 6f 66 20 61 20   "payload" of a 
5cc0: 63 65 6c 6c 20 74 6f 20 62 65 20 74 68 65 20 61  cell to be the a
5cd0: 72 62 69 74 72 61 72 79 20 6c 65 6e 67 74 68 20  rbitrary length 
5ce0: 73 65 63 74 69 6f 6e 0a 6f 66 20 74 68 65 20 63  section.of the c
5cf0: 65 6c 6c 2e 20 20 46 6f 72 20 61 6e 20 69 6e 64  ell.  For an ind
5d00: 65 78 20 62 2d 74 72 65 65 2c 20 74 68 65 20 6b  ex b-tree, the k
5d10: 65 79 20 69 73 20 61 6c 77 61 79 73 20 61 72 62  ey is always arb
5d20: 69 74 72 61 72 79 20 69 6e 20 6c 65 6e 67 74 68  itrary in length
5d30: 0a 61 6e 64 20 68 65 6e 63 65 20 74 68 65 20 70  .and hence the p
5d40: 61 79 6c 6f 61 64 20 69 73 20 74 68 65 20 6b 65  ayload is the ke
5d50: 79 2e 20 20 54 68 65 72 65 20 61 72 65 20 6e 6f  y.  There are no
5d60: 20 61 72 62 69 74 72 61 72 79 20 6c 65 6e 67 74   arbitrary lengt
5d70: 68 20 65 6c 65 6d 65 6e 74 73 0a 69 6e 20 74 68  h elements.in th
5d80: 65 20 63 65 6c 6c 73 20 6f 66 20 69 6e 74 65 72  e cells of inter
5d90: 69 6f 72 20 74 61 62 6c 65 20 62 2d 74 72 65 65  ior table b-tree
5da0: 20 70 61 67 65 73 20 61 6e 64 20 73 6f 20 74 68   pages and so th
5db0: 6f 73 65 20 63 65 6c 6c 73 20 68 61 76 65 20 6e  ose cells have n
5dc0: 6f 0a 70 61 79 6c 6f 61 64 2e 20 20 54 61 62 6c  o.payload.  Tabl
5dd0: 65 20 62 2d 74 72 65 65 20 6c 65 61 66 20 70 61  e b-tree leaf pa
5de0: 67 65 73 20 63 6f 6e 74 61 69 6e 20 61 72 62 69  ges contain arbi
5df0: 74 72 61 72 79 20 6c 65 6e 67 74 68 20 63 6f 6e  trary length con
5e00: 74 65 6e 74 20 61 6e 64 0a 73 6f 20 66 6f 72 20  tent and.so for 
5e10: 63 65 6c 6c 73 20 6f 6e 20 74 68 6f 73 65 20 70  cells on those p
5e20: 61 67 65 73 20 74 68 65 20 70 61 79 6c 6f 61 64  ages the payload
5e30: 20 69 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 2e   is the content.
5e40: 0a 3c 70 3e 57 68 65 6e 20 74 68 65 20 73 69 7a  .<p>When the siz
5e50: 65 20 6f 66 20 70 61 79 6c 6f 61 64 20 66 6f 72  e of payload for
5e60: 20 61 20 63 65 6c 6c 20 65 78 63 65 65 64 73 20   a cell exceeds 
5e70: 61 20 63 65 72 74 61 69 6e 20 74 68 72 65 73 68  a certain thresh
5e80: 6f 6c 64 20 28 74 6f 0a 62 65 20 64 65 66 69 6e  old (to.be defin
5e90: 65 64 20 6c 61 74 65 72 29 20 74 68 65 6e 20 6f  ed later) then o
5ea0: 6e 6c 79 20 74 68 65 20 66 69 72 73 74 20 66 65  nly the first fe
5eb0: 77 20 62 79 74 65 73 20 6f 66 20 74 68 65 20 70  w bytes of the p
5ec0: 61 79 6c 6f 61 64 0a 61 72 65 20 73 74 6f 72 65  ayload.are store
5ed0: 64 20 6f 6e 20 74 68 65 20 62 2d 74 72 65 65 20  d on the b-tree 
5ee0: 70 61 67 65 20 61 6e 64 20 74 68 65 20 62 61 6c  page and the bal
5ef0: 61 6e 63 65 20 69 73 20 73 74 6f 72 65 64 20 69  ance is stored i
5f00: 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 0a  n a linked list.
5f10: 6f 66 20 63 6f 6e 74 65 6e 74 20 6f 76 65 72 66  of content overf
5f20: 6c 6f 77 20 70 61 67 65 73 2e 3c 2f 70 3e 0a 0a  low pages.</p>..
5f30: 3c 70 3e 41 20 62 2d 74 72 65 65 20 70 61 67 65  <p>A b-tree page
5f40: 20 69 73 20 64 69 76 69 64 65 64 20 69 6e 74 6f   is divided into
5f50: 20 72 65 67 69 6f 6e 73 20 69 6e 20 74 68 65 20   regions in the 
5f60: 66 6f 6c 6c 6f 77 69 6e 67 20 6f 72 64 65 72 3a  following order:
5f70: 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 54 68 65 20 31  ..<ol>.<li>The 1
5f80: 30 30 2d 62 79 74 65 20 64 61 74 61 62 61 73 65  00-byte database
5f90: 20 66 69 6c 65 20 68 65 61 64 65 72 20 28 66 6f   file header (fo
5fa0: 75 6e 64 20 6f 6e 20 70 61 67 65 20 31 20 6f 6e  und on page 1 on
5fb0: 6c 79 29 0a 3c 6c 69 3e 54 68 65 20 38 20 6f 72  ly).<li>The 8 or
5fc0: 20 31 32 20 62 79 74 65 20 62 2d 74 72 65 65 20   12 byte b-tree 
5fd0: 70 61 67 65 20 68 65 61 64 65 72 0a 3c 6c 69 3e  page header.<li>
5fe0: 54 68 65 20 63 65 6c 6c 20 70 6f 69 6e 74 65 72  The cell pointer
5ff0: 20 61 72 72 61 79 0a 3c 6c 69 3e 55 6e 61 6c 6c   array.<li>Unall
6000: 6f 63 61 74 65 64 20 73 70 61 63 65 0a 3c 6c 69  ocated space.<li
6010: 3e 54 68 65 20 63 65 6c 6c 20 63 6f 6e 74 65 6e  >The cell conten
6020: 74 20 61 72 65 61 0a 3c 6c 69 3e 54 68 65 20 72  t area.<li>The r
6030: 65 73 65 72 76 65 64 20 72 65 67 69 6f 6e 2e 0a  eserved region..
6040: 3c 2f 6f 6c 3e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54  </ol>.</p>..<p>T
6050: 68 65 20 31 30 30 2d 62 79 74 65 20 64 61 74 61  he 100-byte data
6060: 62 61 73 65 20 66 69 6c 65 20 68 65 61 64 65 72  base file header
6070: 20 69 73 20 66 6f 75 6e 64 20 6f 6e 6c 79 20 6f   is found only o
6080: 6e 20 70 61 67 65 20 31 2c 20 77 68 69 63 68 20  n page 1, which 
6090: 69 73 0a 61 6c 77 61 79 73 20 61 20 74 61 62 6c  is.always a tabl
60a0: 65 20 62 2d 74 72 65 65 20 70 61 67 65 2e 20 20  e b-tree page.  
60b0: 41 6c 6c 20 6f 74 68 65 72 20 62 2d 74 72 65 65  All other b-tree
60c0: 20 70 61 67 65 73 20 69 6e 20 74 68 65 20 64 61   pages in the da
60d0: 74 61 62 61 73 65 20 66 69 6c 65 0a 6f 6d 69 74  tabase file.omit
60e0: 20 74 68 69 73 20 31 30 30 2d 62 79 74 65 20 68   this 100-byte h
60f0: 65 61 64 65 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54  eader.</p>..<p>T
6100: 68 65 20 72 65 73 65 72 76 65 64 20 72 65 67 69  he reserved regi
6110: 6f 6e 20 69 73 20 61 6e 20 61 72 65 61 20 6f 66  on is an area of
6120: 20 75 6e 75 73 65 64 20 73 70 61 63 65 20 61 74   unused space at
6130: 20 74 68 65 20 65 6e 64 20 6f 66 20 65 76 65 72   the end of ever
6140: 79 0a 70 61 67 65 20 28 65 78 63 65 70 74 20 74  y.page (except t
6150: 68 65 20 6c 6f 63 6b 69 6e 67 20 70 61 67 65 29  he locking page)
6160: 20 74 68 61 74 20 65 78 74 65 6e 73 69 6f 6e 73   that extensions
6170: 20 63 61 6e 20 75 73 65 20 74 6f 20 68 6f 6c 64   can use to hold
6180: 20 70 65 72 2d 70 61 67 65 0a 69 6e 66 6f 72 6d   per-page.inform
6190: 61 74 69 6f 6e 2e 20 20 5e 54 68 65 20 73 69 7a  ation.  ^The siz
61a0: 65 20 6f 66 20 74 68 65 20 72 65 73 65 72 76 65  e of the reserve
61b0: 64 20 72 65 67 69 6f 6e 20 69 73 20 64 65 74 65  d region is dete
61c0: 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 6f 6e  rmined by the on
61d0: 65 2d 62 79 74 65 0a 75 6e 73 69 67 6e 65 64 20  e-byte.unsigned 
61e0: 69 6e 74 65 67 65 72 20 66 6f 75 6e 64 20 61 74  integer found at
61f0: 20 61 6e 20 6f 66 66 73 65 74 20 6f 66 20 32 30   an offset of 20
6200: 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61 62 61   into the databa
6210: 73 65 20 66 69 6c 65 20 68 65 61 64 65 72 2e 0a  se file header..
6220: 54 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20  The size of the 
6230: 72 65 73 65 72 76 65 64 20 72 65 67 69 6f 6e 20  reserved region 
6240: 69 73 20 75 73 75 61 6c 6c 79 20 7a 65 72 6f 2e  is usually zero.
6250: 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 62 2d 74  </p>..<p>The b-t
6260: 72 65 65 20 70 61 67 65 20 68 65 61 64 65 72 20  ree page header 
6270: 69 73 20 38 20 62 79 74 65 73 20 69 6e 20 73 69  is 8 bytes in si
6280: 7a 65 20 66 6f 72 20 6c 65 61 66 20 70 61 67 65  ze for leaf page
6290: 73 20 61 6e 64 20 31 32 0a 62 79 74 65 73 20 66  s and 12.bytes f
62a0: 6f 72 20 69 6e 74 65 72 69 6f 72 20 70 61 67 65  or interior page
62b0: 73 2e 20 20 41 6c 6c 20 6d 75 6c 74 69 62 79 74  s.  All multibyt
62c0: 65 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20  e values in the 
62d0: 70 61 67 65 20 68 65 61 64 65 72 0a 61 72 65 20  page header.are 
62e0: 62 69 67 2d 65 6e 64 69 61 6e 2e 0a 54 68 65 20  big-endian..The 
62f0: 62 2d 74 72 65 65 20 70 61 67 65 20 68 65 61 64  b-tree page head
6300: 65 72 20 69 73 20 63 6f 6d 70 6f 73 65 64 20 6f  er is composed o
6310: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
6320: 66 69 65 6c 64 73 3a 3c 2f 70 3e 0a 0a 3c 63 65  fields:</p>..<ce
6330: 6e 74 65 72 3e 0a 3c 69 3e 42 2d 74 72 65 65 20  nter>.<i>B-tree 
6340: 50 61 67 65 20 48 65 61 64 65 72 20 46 6f 72 6d  Page Header Form
6350: 61 74 3c 2f 69 3e 3c 62 72 3e 0a 3c 74 61 62 6c  at</i><br>.<tabl
6360: 65 20 62 6f 72 64 65 72 3d 31 20 77 69 64 74 68  e border=1 width
6370: 3d 22 38 30 25 22 3e 0a 3c 74 72 3e 3c 74 68 3e  ="80%">.<tr><th>
6380: 4f 66 66 73 65 74 3c 74 68 3e 53 69 7a 65 3c 74  Offset<th>Size<t
6390: 68 3e 44 65 73 63 72 69 70 74 69 6f 6e 0a 3c 74  h>Description.<t
63a0: 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74  r><td align=cent
63b0: 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 30 3c  er valign=top>0<
63c0: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
63d0: 76 61 6c 69 67 6e 3d 74 6f 70 3e 31 3c 74 64 20  valign=top>1<td 
63e0: 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 41 20 66 6c  align=left>.A fl
63f0: 61 67 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68  ag indicating th
6400: 65 20 62 2d 74 72 65 65 20 70 61 67 65 20 74 79  e b-tree page ty
6410: 70 65 0a 5e 41 20 76 61 6c 75 65 20 6f 66 20 32  pe.^A value of 2
6420: 20 6d 65 61 6e 73 20 74 68 65 20 70 61 67 65 20   means the page 
6430: 69 73 20 61 6e 20 69 6e 74 65 72 69 6f 72 20 69  is an interior i
6440: 6e 64 65 78 20 62 2d 74 72 65 65 20 70 61 67 65  ndex b-tree page
6450: 2e 0a 5e 41 20 76 61 6c 75 65 20 6f 66 20 35 20  ..^A value of 5 
6460: 6d 65 61 6e 73 20 74 68 65 20 70 61 67 65 20 69  means the page i
6470: 73 20 61 6e 20 69 6e 74 65 72 69 6f 72 20 74 61  s an interior ta
6480: 62 6c 65 20 62 2d 74 72 65 65 20 70 61 67 65 2e  ble b-tree page.
6490: 0a 5e 41 20 76 61 6c 75 65 20 6f 66 20 31 30 20  .^A value of 10 
64a0: 6d 65 61 6e 73 20 74 68 65 20 70 61 67 65 20 69  means the page i
64b0: 73 20 61 20 6c 65 61 66 20 69 6e 64 65 78 20 62  s a leaf index b
64c0: 2d 74 72 65 65 20 70 61 67 65 2e 0a 5e 41 20 76  -tree page..^A v
64d0: 61 6c 75 65 20 6f 66 20 31 33 20 6d 65 61 6e 73  alue of 13 means
64e0: 20 74 68 65 20 70 61 67 65 20 69 73 20 61 20 6c   the page is a l
64f0: 65 61 66 20 74 61 62 6c 65 20 62 2d 74 72 65 65  eaf table b-tree
6500: 20 70 61 67 65 2e 0a 5e 41 6e 79 20 6f 74 68 65   page..^Any othe
6510: 72 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20  r value for the 
6520: 62 2d 74 72 65 65 20 70 61 67 65 20 74 79 70 65  b-tree page type
6530: 20 69 73 20 61 6e 20 65 72 72 6f 72 2e 0a 3c 74   is an error..<t
6540: 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74  r><td align=cent
6550: 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 31 3c  er valign=top>1<
6560: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
6570: 76 61 6c 69 67 6e 3d 74 6f 70 3e 32 3c 74 64 20  valign=top>2<td 
6580: 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 42 79 74 65  align=left>.Byte
6590: 20 6f 66 66 73 65 74 20 69 6e 74 6f 20 74 68 65   offset into the
65a0: 20 70 61 67 65 20 6f 66 20 74 68 65 20 66 69 72   page of the fir
65b0: 73 74 20 66 72 65 65 62 6c 6f 63 6b 0a 3c 74 72  st freeblock.<tr
65c0: 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65  ><td align=cente
65d0: 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 33 3c 74  r valign=top>3<t
65e0: 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76  d align=center v
65f0: 61 6c 69 67 6e 3d 74 6f 70 3e 32 3c 74 64 20 61  align=top>2<td a
6600: 6c 69 67 6e 3d 6c 65 66 74 3e 0a 4e 75 6d 62 65  lign=left>.Numbe
6610: 72 20 6f 66 20 63 65 6c 6c 73 20 6f 6e 20 74 68  r of cells on th
6620: 69 73 20 70 61 67 65 0a 3c 74 72 3e 3c 74 64 20  is page.<tr><td 
6630: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c  align=center val
6640: 69 67 6e 3d 74 6f 70 3e 35 3c 74 64 20 61 6c 69  ign=top>5<td ali
6650: 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e  gn=center valign
6660: 3d 74 6f 70 3e 32 3c 74 64 20 61 6c 69 67 6e 3d  =top>2<td align=
6670: 6c 65 66 74 3e 0a 4f 66 66 73 65 74 20 74 6f 20  left>.Offset to 
6680: 74 68 65 20 66 69 72 73 74 20 62 79 74 65 20 6f  the first byte o
6690: 66 20 74 68 65 20 63 65 6c 6c 20 63 6f 6e 74 65  f the cell conte
66a0: 6e 74 20 61 72 65 61 2e 20 20 41 20 7a 65 72 6f  nt area.  A zero
66b0: 20 76 61 6c 75 65 20 69 73 20 75 73 65 64 20 74   value is used t
66c0: 6f 20 72 65 70 72 65 73 65 6e 74 20 61 6e 20 6f  o represent an o
66d0: 66 66 73 65 74 20 6f 66 20 36 35 35 33 36 2c 20  ffset of 65536, 
66e0: 77 68 69 63 68 20 6f 63 63 75 72 73 20 6f 6e 20  which occurs on 
66f0: 61 6e 20 65 6d 70 74 79 20 72 6f 6f 74 20 70 61  an empty root pa
6700: 67 65 20 77 68 65 6e 20 75 73 69 6e 67 20 61 20  ge when using a 
6710: 36 35 35 33 36 2d 62 79 74 65 20 70 61 67 65 20  65536-byte page 
6720: 73 69 7a 65 2e 0a 3c 74 72 3e 3c 74 64 20 61 6c  size..<tr><td al
6730: 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67  ign=center valig
6740: 6e 3d 74 6f 70 3e 37 3c 74 64 20 61 6c 69 67 6e  n=top>7<td align
6750: 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74  =center valign=t
6760: 6f 70 3e 31 3c 74 64 20 61 6c 69 67 6e 3d 6c 65  op>1<td align=le
6770: 66 74 3e 0a 4e 75 6d 62 65 72 20 6f 66 20 66 72  ft>.Number of fr
6780: 61 67 6d 65 6e 74 65 64 20 66 72 65 65 20 62 79  agmented free by
6790: 74 65 73 20 77 69 74 68 69 6e 20 74 68 65 20 63  tes within the c
67a0: 65 6c 6c 20 63 6f 6e 74 65 6e 74 20 61 72 65 61  ell content area
67b0: 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63  .<tr><td align=c
67c0: 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70  enter valign=top
67d0: 3e 38 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74  >8<td align=cent
67e0: 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 34 3c  er valign=top>4<
67f0: 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 54  td align=left>.T
6800: 68 65 20 72 69 67 68 74 2d 6d 6f 73 74 20 70 6f  he right-most po
6810: 69 6e 74 65 72 20 28 69 6e 74 65 72 69 6f 72 20  inter (interior 
6820: 62 2d 74 72 65 65 20 70 61 67 65 73 20 6f 6e 6c  b-tree pages onl
6830: 79 29 0a 3c 2f 74 61 62 6c 65 3e 3c 2f 62 6c 6f  y).</table></blo
6840: 63 6b 71 75 6f 74 65 3e 3c 2f 63 65 6e 74 65 72  ckquote></center
6850: 3e 0a 0a 3c 70 3e 5e 54 68 65 20 63 65 6c 6c 20  >..<p>^The cell 
6860: 70 6f 69 6e 74 65 72 20 61 72 72 61 79 20 6f 66  pointer array of
6870: 20 61 20 62 2d 74 72 65 65 20 70 61 67 65 20 69   a b-tree page i
6880: 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f  mmediately follo
6890: 77 73 20 74 68 65 20 62 2d 74 72 65 65 0a 70 61  ws the b-tree.pa
68a0: 67 65 20 68 65 61 64 65 72 2e 20 20 4c 65 74 20  ge header.  Let 
68b0: 4b 20 62 65 20 74 68 65 20 6e 75 6d 62 65 72 20  K be the number 
68c0: 6f 66 20 63 65 6c 6c 73 20 6f 6e 20 74 68 65 20  of cells on the 
68d0: 62 74 72 65 65 2e 20 20 5e 54 68 65 20 63 65 6c  btree.  ^The cel
68e0: 6c 20 70 6f 69 6e 74 65 72 0a 61 72 72 61 79 20  l pointer.array 
68f0: 63 6f 6e 73 69 73 74 73 20 6f 66 20 4b 20 32 2d  consists of K 2-
6900: 62 79 74 65 20 69 6e 74 65 67 65 72 20 6f 66 66  byte integer off
6910: 73 65 74 73 20 74 6f 20 74 68 65 20 63 65 6c 6c  sets to the cell
6920: 20 63 6f 6e 74 65 6e 74 73 2e 20 20 5e 54 68 65   contents.  ^The
6930: 0a 63 65 6c 6c 20 70 6f 69 6e 74 65 72 73 20 61  .cell pointers a
6940: 72 65 20 61 72 72 61 6e 67 65 64 20 69 6e 20 6b  re arranged in k
6950: 65 79 20 6f 72 64 65 72 20 77 69 74 68 20 6c 65  ey order with le
6960: 66 74 2d 6d 6f 73 74 20 63 65 6c 6c 20 28 74 68  ft-most cell (th
6970: 65 20 63 65 6c 6c 20 77 69 74 68 20 74 68 65 0a  e cell with the.
6980: 73 6d 61 6c 6c 65 73 74 20 6b 65 79 29 20 66 69  smallest key) fi
6990: 72 73 74 20 61 6e 64 20 74 68 65 20 72 69 67 68  rst and the righ
69a0: 74 2d 6d 6f 73 74 20 63 65 6c 6c 20 28 74 68 65  t-most cell (the
69b0: 20 63 65 6c 6c 20 77 69 74 68 20 74 68 65 20 6c   cell with the l
69c0: 61 72 67 65 73 74 0a 6b 65 79 29 20 6c 61 73 74  argest.key) last
69d0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 43 65 6c 6c 20 63  .</p>..<p>Cell c
69e0: 6f 6e 74 65 6e 74 20 69 73 20 73 74 6f 72 65 64  ontent is stored
69f0: 20 69 6e 20 74 68 65 20 63 65 6c 6c 20 63 6f 6e   in the cell con
6a00: 74 65 6e 74 20 72 65 67 69 6f 6e 20 6f 66 20 74  tent region of t
6a10: 68 65 20 62 2d 74 72 65 65 20 70 61 67 65 2e 0a  he b-tree page..
6a20: 53 51 4c 69 74 65 20 73 74 72 69 76 65 73 20 74  SQLite strives t
6a30: 6f 20 70 6c 61 63 65 20 63 65 6c 6c 73 20 61 73  o place cells as
6a40: 20 66 61 72 20 74 6f 77 61 72 64 20 74 68 65 20   far toward the 
6a50: 65 6e 64 20 6f 66 20 74 68 65 20 62 2d 74 72 65  end of the b-tre
6a60: 65 20 70 61 67 65 20 61 73 0a 69 74 20 63 61 6e  e page as.it can
6a70: 2c 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6c 65  , in order to le
6a80: 61 76 65 20 73 70 61 63 65 20 66 6f 72 20 66 75  ave space for fu
6a90: 74 75 72 65 20 67 72 6f 77 74 68 20 6f 66 20 74  ture growth of t
6aa0: 68 65 20 63 65 6c 6c 20 70 6f 69 6e 74 65 72 20  he cell pointer 
6ab0: 61 72 72 61 79 2e 0a 54 68 65 20 61 72 65 61 20  array..The area 
6ac0: 69 6e 20 62 65 74 77 65 65 6e 20 74 68 65 20 6c  in between the l
6ad0: 61 73 74 20 63 65 6c 6c 20 70 6f 69 6e 74 65 72  ast cell pointer
6ae0: 20 61 72 72 61 79 20 65 6e 74 72 79 20 61 6e 64   array entry and
6af0: 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f   the beginning o
6b00: 66 0a 74 68 65 20 66 69 72 73 74 20 63 65 6c 6c  f.the first cell
6b10: 20 69 73 20 74 68 65 20 75 6e 61 6c 6c 6f 63 61   is the unalloca
6b20: 74 65 64 20 72 65 67 69 6f 6e 2e 0a 3c 2f 70 3e  ted region..</p>
6b30: 0a 0a 3c 70 3e 5e 49 66 20 61 20 70 61 67 65 20  ..<p>^If a page 
6b40: 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 63 65 6c 6c  contains no cell
6b50: 73 20 28 77 68 69 63 68 20 69 73 20 6f 6e 6c 79  s (which is only
6b60: 20 70 6f 73 73 69 62 6c 65 20 66 6f 72 20 61 20   possible for a 
6b70: 72 6f 6f 74 20 70 61 67 65 0a 6f 66 20 61 20 74  root page.of a t
6b80: 61 62 6c 65 20 74 68 61 74 20 63 6f 6e 74 61 69  able that contai
6b90: 6e 73 20 6e 6f 20 72 6f 77 73 29 20 74 68 65 6e  ns no rows) then
6ba0: 20 74 68 65 20 6f 66 66 73 65 74 20 74 6f 20 74   the offset to t
6bb0: 68 65 20 63 65 6c 6c 20 63 6f 6e 74 65 6e 74 0a  he cell content.
6bc0: 61 72 65 61 20 77 69 6c 6c 20 65 71 75 61 6c 20  area will equal 
6bd0: 74 68 65 20 70 61 67 65 20 73 69 7a 65 20 6d 69  the page size mi
6be0: 6e 75 73 20 74 68 65 20 62 79 74 65 73 20 6f 66  nus the bytes of
6bf0: 20 72 65 73 65 72 76 65 64 20 73 70 61 63 65 2e   reserved space.
6c00: 20 20 5e 28 49 66 0a 74 68 65 20 64 61 74 61 62    ^(If.the datab
6c10: 61 73 65 20 75 73 65 73 20 61 20 36 35 35 33 36  ase uses a 65536
6c20: 2d 62 79 74 65 20 70 61 67 65 20 73 69 7a 65 20  -byte page size 
6c30: 61 6e 64 20 74 68 65 20 72 65 73 65 72 76 65 64  and the reserved
6c40: 20 73 70 61 63 65 20 69 73 20 7a 65 72 6f 0a 28   space is zero.(
6c50: 74 68 65 20 75 73 75 61 6c 20 76 61 6c 75 65 20  the usual value 
6c60: 66 6f 72 20 72 65 73 65 72 76 65 64 20 73 70 61  for reserved spa
6c70: 63 65 29 20 74 68 65 6e 20 74 68 65 20 63 65 6c  ce) then the cel
6c80: 6c 20 63 6f 6e 74 65 6e 74 20 6f 66 66 73 65 74  l content offset
6c90: 20 6f 66 20 61 6e 0a 65 6d 70 74 79 20 70 61 67   of an.empty pag
6ca0: 65 20 77 61 6e 74 73 20 74 6f 20 62 65 20 36 35  e wants to be 65
6cb0: 35 33 36 2e 20 20 0a 48 6f 77 65 76 65 72 2c 20  536.  .However, 
6cc0: 74 68 61 74 20 69 6e 74 65 67 65 72 20 69 73 20  that integer is 
6cd0: 74 6f 6f 20 6c 61 72 67 65 20 74 6f 20 62 65 20  too large to be 
6ce0: 73 74 6f 72 65 64 20 69 6e 20 61 0a 32 2d 62 79  stored in a.2-by
6cf0: 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65  te unsigned inte
6d00: 67 65 72 2c 20 73 6f 20 61 20 76 61 6c 75 65 20  ger, so a value 
6d10: 6f 66 20 30 20 69 73 20 75 73 65 64 20 69 6e 20  of 0 is used in 
6d20: 69 74 73 20 70 6c 61 63 65 2e 29 5e 0a 0a 3c 70  its place.)^..<p
6d30: 3e 41 20 66 72 65 65 62 6c 6f 63 6b 20 69 73 20  >A freeblock is 
6d40: 61 20 73 74 72 75 63 74 75 72 65 20 75 73 65 64  a structure used
6d50: 20 74 6f 20 69 64 65 6e 74 69 66 79 20 75 6e 61   to identify una
6d60: 6c 6c 6f 63 61 74 65 64 20 73 70 61 63 65 20 77  llocated space w
6d70: 69 74 68 69 6e 0a 61 20 62 2d 74 72 65 65 20 70  ithin.a b-tree p
6d80: 61 67 65 2e 20 20 46 72 65 65 62 6c 6f 63 6b 73  age.  Freeblocks
6d90: 20 61 72 65 20 6f 72 67 61 6e 69 7a 65 64 20 61   are organized a
6da0: 73 20 61 20 63 68 61 69 6e 2e 20 20 5e 54 68 65  s a chain.  ^The
6db0: 20 66 69 72 73 74 20 32 20 62 79 74 65 73 20 6f   first 2 bytes o
6dc0: 66 0a 61 20 66 72 65 65 62 6c 6f 63 6b 20 61 72  f.a freeblock ar
6dd0: 65 20 61 20 62 69 67 2d 65 6e 64 69 61 6e 20 69  e a big-endian i
6de0: 6e 74 65 67 65 72 20 77 68 69 63 68 20 69 73 20  nteger which is 
6df0: 74 68 65 20 6f 66 66 73 65 74 20 69 6e 20 74 68  the offset in th
6e00: 65 20 62 2d 74 72 65 65 20 70 61 67 65 0a 6f 66  e b-tree page.of
6e10: 20 74 68 65 20 6e 65 78 74 20 66 72 65 65 62 6c   the next freebl
6e20: 6f 63 6b 20 69 6e 20 74 68 65 20 63 68 61 69 6e  ock in the chain
6e30: 2c 20 6f 72 20 7a 65 72 6f 20 69 66 20 74 68 65  , or zero if the
6e40: 20 66 72 65 65 62 6c 6f 63 6b 20 69 73 20 74 68   freeblock is th
6e50: 65 20 6c 61 73 74 20 6f 6e 0a 74 68 65 20 63 68  e last on.the ch
6e60: 61 69 6e 2e 20 20 5e 54 68 65 20 74 68 69 72 64  ain.  ^The third
6e70: 20 61 6e 64 20 66 6f 75 72 74 68 20 62 79 74 65   and fourth byte
6e80: 73 20 6f 66 20 65 61 63 68 20 66 72 65 65 62 6c  s of each freebl
6e90: 6f 63 6b 20 66 6f 72 6d 0a 61 20 62 69 67 2d 65  ock form.a big-e
6ea0: 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20 77 68  ndian integer wh
6eb0: 69 63 68 20 69 73 20 74 68 65 20 73 69 7a 65 20  ich is the size 
6ec0: 6f 66 20 74 68 65 20 66 72 65 65 62 6c 6f 63 6b  of the freeblock
6ed0: 20 69 6e 20 62 79 74 65 73 2c 20 69 6e 63 6c 75   in bytes, inclu
6ee0: 64 69 6e 67 0a 74 68 65 20 34 2d 62 79 74 65 20  ding.the 4-byte 
6ef0: 68 65 61 64 65 72 2e 20 20 5e 46 72 65 65 62 6c  header.  ^Freebl
6f00: 6f 63 6b 73 20 61 72 65 20 61 6c 77 61 79 73 20  ocks are always 
6f10: 63 6f 6e 6e 65 63 74 65 64 20 69 6e 20 6f 72 64  connected in ord
6f20: 65 72 20 0a 6f 66 20 69 6e 63 72 65 61 73 69 6e  er .of increasin
6f30: 67 20 6f 66 66 73 65 74 2e 20 20 5e 54 68 65 20  g offset.  ^The 
6f40: 73 65 63 6f 6e 64 20 66 69 65 6c 64 20 6f 66 20  second field of 
6f50: 74 68 65 20 62 2d 74 72 65 65 20 70 61 67 65 20  the b-tree page 
6f60: 68 65 61 64 65 72 20 69 73 20 74 68 65 0a 6f 66  header is the.of
6f70: 66 73 65 74 20 6f 66 20 74 68 65 20 66 69 72 73  fset of the firs
6f80: 74 20 66 72 65 65 62 6c 6f 63 6b 2c 20 6f 72 20  t freeblock, or 
6f90: 7a 65 72 6f 20 69 66 20 74 68 65 72 65 20 61 72  zero if there ar
6fa0: 65 20 6e 6f 20 66 72 65 65 62 6c 6f 63 6b 73 20  e no freeblocks 
6fb0: 6f 6e 20 74 68 65 0a 70 61 67 65 2e 20 20 5e 49  on the.page.  ^I
6fc0: 6e 20 61 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20  n a well-formed 
6fd0: 62 2d 74 72 65 65 20 70 61 67 65 2c 20 74 68 65  b-tree page, the
6fe0: 72 65 20 77 69 6c 6c 20 61 6c 77 61 79 73 20 62  re will always b
6ff0: 65 20 61 74 20 6c 65 61 73 74 20 6f 6e 65 20 63  e at least one c
7000: 65 6c 6c 0a 62 65 66 6f 72 65 20 74 68 65 20 66  ell.before the f
7010: 69 72 73 74 20 66 72 65 65 62 6c 6f 63 6b 2e 3c  irst freeblock.<
7020: 2f 70 3e 0a 0a 3c 70 3e 41 20 66 72 65 65 62 6c  /p>..<p>A freebl
7030: 6f 63 6b 20 72 65 71 75 69 72 65 73 20 61 74 20  ock requires at 
7040: 6c 65 61 73 74 20 34 20 62 79 74 65 73 20 6f 66  least 4 bytes of
7050: 20 73 70 61 63 65 2e 20 20 49 66 20 74 68 65 72   space.  If ther
7060: 65 20 69 73 20 61 6e 20 69 73 6f 6c 61 74 65 64  e is an isolated
7070: 0a 67 72 6f 75 70 20 6f 66 20 31 2c 20 32 2c 20  .group of 1, 2, 
7080: 6f 72 20 33 20 75 6e 75 73 65 64 20 62 79 74 65  or 3 unused byte
7090: 73 20 77 69 74 68 69 6e 20 74 68 65 20 63 65 6c  s within the cel
70a0: 6c 20 63 6f 6e 74 65 6e 74 20 61 72 65 61 2c 20  l content area, 
70b0: 74 68 6f 73 65 20 62 79 74 65 73 0a 63 6f 6d 70  those bytes.comp
70c0: 72 69 73 65 20 61 20 66 72 61 67 6d 65 6e 74 2e  rise a fragment.
70d0: 20 20 5e 54 68 65 20 74 6f 74 61 6c 20 6e 75 6d    ^The total num
70e0: 62 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20  ber of bytes in 
70f0: 61 6c 6c 20 66 72 61 67 6d 65 6e 74 73 20 69 73  all fragments is
7100: 20 73 74 6f 72 65 64 0a 69 6e 20 74 68 65 20 66   stored.in the f
7110: 69 66 74 68 20 66 69 65 6c 64 20 6f 66 20 74 68  ifth field of th
7120: 65 20 62 2d 74 72 65 65 20 70 61 67 65 20 68 65  e b-tree page he
7130: 61 64 65 72 2e 20 20 5e 49 6e 20 61 20 77 65 6c  ader.  ^In a wel
7140: 6c 2d 66 6f 72 6d 65 64 20 62 2d 74 72 65 65 20  l-formed b-tree 
7150: 70 61 67 65 2c 0a 74 68 65 20 74 6f 74 61 6c 20  page,.the total 
7160: 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  number of bytes 
7170: 69 6e 20 66 72 61 67 6d 65 6e 74 73 20 6d 61 79  in fragments may
7180: 20 6e 6f 74 20 65 78 63 65 65 64 20 36 30 2e 3c   not exceed 60.<
7190: 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 74 6f 74 61  /p>..<p>The tota
71a0: 6c 20 61 6d 6f 75 6e 74 20 6f 66 20 66 72 65 65  l amount of free
71b0: 20 73 70 61 63 65 20 6f 6e 20 61 20 62 2d 74 72   space on a b-tr
71c0: 65 65 20 70 61 67 65 20 63 6f 6e 73 69 73 74 73  ee page consists
71d0: 20 6f 66 20 74 68 65 20 73 69 7a 65 0a 6f 66 20   of the size.of 
71e0: 74 68 65 20 75 6e 61 6c 6c 6f 63 61 74 65 64 20  the unallocated 
71f0: 72 65 67 69 6f 6e 20 70 6c 75 73 20 74 68 65 20  region plus the 
7200: 74 6f 74 61 6c 20 73 69 7a 65 20 6f 66 20 61 6c  total size of al
7210: 6c 20 66 72 65 65 62 6c 6f 63 6b 73 20 70 6c 75  l freeblocks plu
7220: 73 20 74 68 65 0a 6e 75 6d 62 65 72 20 6f 66 20  s the.number of 
7230: 66 72 61 67 6d 65 6e 74 65 64 20 66 72 65 65 20  fragmented free 
7240: 62 79 74 65 73 2e 20 20 5e 53 51 4c 69 74 65 20  bytes.  ^SQLite 
7250: 6d 61 79 20 66 72 6f 6d 20 74 69 6d 65 20 74 6f  may from time to
7260: 20 74 69 6d 65 20 72 65 6f 72 67 61 6e 69 7a 65   time reorganize
7270: 0a 61 20 62 2d 74 72 65 65 20 70 61 67 65 20 73  .a b-tree page s
7280: 6f 20 74 68 61 74 20 74 68 65 72 65 20 61 72 65  o that there are
7290: 20 6e 6f 20 66 72 65 65 62 6c 6f 63 6b 73 20 6f   no freeblocks o
72a0: 72 20 66 72 61 67 6d 65 6e 74 20 62 79 74 65 73  r fragment bytes
72b0: 2c 20 61 6c 6c 0a 75 6e 75 73 65 64 20 62 79 74  , all.unused byt
72c0: 65 73 20 61 72 65 20 63 6f 6e 74 61 69 6e 65 64  es are contained
72d0: 20 69 6e 20 74 68 65 20 75 6e 61 6c 6c 6f 63 61   in the unalloca
72e0: 74 65 64 20 73 70 61 63 65 20 72 65 67 69 6f 6e  ted space region
72f0: 2c 20 61 6e 64 20 61 6c 6c 0a 63 65 6c 6c 73 20  , and all.cells 
7300: 61 72 65 20 70 61 63 6b 65 64 20 74 69 67 68 74  are packed tight
7310: 6c 79 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66  ly at the end of
7320: 20 74 68 65 20 70 61 67 65 2e 20 20 54 68 69 73   the page.  This
7330: 20 69 73 20 63 61 6c 6c 65 64 20 0a 22 64 65 66   is called ."def
7340: 72 61 67 6d 65 6e 74 69 6e 67 22 20 74 68 65 20  ragmenting" the 
7350: 62 2d 74 72 65 65 20 70 61 67 65 2e 3c 2f 70 3e  b-tree page.</p>
7360: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
7370: 6e 74 20 76 61 72 69 6e 74 20 7b 76 61 72 69 61  nt varint {varia
7380: 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67  ble-length integ
7390: 65 72 7d 20 7b 76 61 72 69 6e 74 7d 3c 2f 74 63  er} {varint}</tc
73a0: 6c 3e 0a 0a 3c 70 3e 41 20 76 61 72 69 61 62 6c  l>..<p>A variabl
73b0: 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67 65 72  e-length integer
73c0: 20 6f 72 20 22 76 61 72 69 6e 74 22 20 69 73 20   or "varint" is 
73d0: 61 20 73 74 61 74 69 63 20 48 75 66 66 6d 61 6e  a static Huffman
73e0: 20 65 6e 63 6f 64 69 6e 67 0a 6f 66 20 36 34 2d   encoding.of 64-
73f0: 62 69 74 20 74 77 6f 73 2d 63 6f 6d 70 6c 65 6d  bit twos-complem
7400: 65 6e 74 20 69 6e 74 65 67 65 72 73 20 74 68 61  ent integers tha
7410: 74 20 75 73 65 73 20 6c 65 73 73 20 73 70 61 63  t uses less spac
7420: 65 20 66 6f 72 20 73 6d 61 6c 6c 20 70 6f 73 69  e for small posi
7430: 74 69 76 65 20 0a 76 61 6c 75 65 73 2e 20 0a 41  tive .values. .A
7440: 20 76 61 72 69 6e 74 20 69 73 20 62 65 74 77 65   varint is betwe
7450: 65 6e 20 31 20 61 6e 64 20 39 20 62 79 74 65 73  en 1 and 9 bytes
7460: 20 69 6e 20 6c 65 6e 67 74 68 2e 20 20 54 68 65   in length.  The
7470: 20 76 61 72 69 6e 74 20 63 6f 6e 73 69 73 74 73   varint consists
7480: 20 6f 66 20 65 69 74 68 65 72 0a 7a 65 72 6f 20   of either.zero 
7490: 6f 72 20 6d 6f 72 65 20 62 79 74 65 20 77 68 69  or more byte whi
74a0: 63 68 20 68 61 76 65 20 74 68 65 20 68 69 67 68  ch have the high
74b0: 2d 6f 72 64 65 72 20 62 69 74 20 73 65 74 20 66  -order bit set f
74c0: 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 73 69 6e  ollowed by a sin
74d0: 67 6c 65 20 62 79 74 65 0a 77 69 74 68 20 74 68  gle byte.with th
74e0: 65 20 68 69 67 68 2d 6f 72 64 65 72 20 62 69 74  e high-order bit
74f0: 20 63 6c 65 61 72 2c 20 6f 72 20 6e 69 6e 65 20   clear, or nine 
7500: 62 79 74 65 73 2c 20 77 68 69 63 68 65 76 65 72  bytes, whichever
7510: 20 69 73 20 73 68 6f 72 74 65 72 2e 0a 54 68 65   is shorter..The
7520: 20 6c 6f 77 65 72 20 73 65 76 65 6e 20 62 69 74   lower seven bit
7530: 73 20 6f 66 20 65 61 63 68 20 6f 66 20 74 68 65  s of each of the
7540: 20 66 69 72 73 74 20 65 69 67 68 74 20 62 79 74   first eight byt
7550: 65 73 20 61 6e 64 20 61 6c 6c 20 38 20 62 69 74  es and all 8 bit
7560: 73 20 6f 66 0a 74 68 65 20 6e 69 6e 74 68 20 62  s of.the ninth b
7570: 79 74 65 20 61 72 65 20 75 73 65 64 20 74 6f 20  yte are used to 
7580: 72 65 63 6f 6e 73 74 72 75 63 74 20 74 68 65 20  reconstruct the 
7590: 36 34 2d 62 69 74 20 74 77 6f 73 2d 63 6f 6d 70  64-bit twos-comp
75a0: 6c 65 6d 65 6e 74 20 69 6e 74 65 67 65 72 2e 0a  lement integer..
75b0: 56 61 72 69 6e 74 73 20 61 72 65 20 62 69 67 2d  Varints are big-
75c0: 65 6e 64 69 61 6e 3a 20 62 69 74 73 20 74 61 6b  endian: bits tak
75d0: 65 6e 20 66 72 6f 6d 20 74 68 65 20 65 61 72 6c  en from the earl
75e0: 69 65 72 20 62 79 74 65 20 6f 66 20 74 68 65 20  ier byte of the 
75f0: 76 61 72 69 6e 74 0a 61 72 65 20 74 68 65 20 6d  varint.are the m
7600: 6f 72 65 20 73 69 67 6e 69 66 69 63 61 6e 74 20  ore significant 
7610: 61 6e 64 20 62 69 74 73 20 74 61 6b 65 6e 20 66  and bits taken f
7620: 72 6f 6d 20 74 68 65 20 6c 61 74 65 72 20 62 79  rom the later by
7630: 74 65 73 2e 20 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  tes. </p>..<p>Th
7640: 65 20 66 6f 72 6d 61 74 20 6f 66 20 61 20 63 65  e format of a ce
7650: 6c 6c 20 64 65 70 65 6e 64 73 20 6f 6e 20 77 68  ll depends on wh
7660: 69 63 68 20 6b 69 6e 64 20 6f 66 20 62 2d 74 72  ich kind of b-tr
7670: 65 65 20 70 61 67 65 20 74 68 65 20 63 65 6c 6c  ee page the cell
7680: 0a 61 70 70 65 61 72 73 20 6f 6e 2e 20 20 54 68  .appears on.  Th
7690: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 61 62 6c  e following tabl
76a0: 65 20 73 68 6f 77 73 20 74 68 65 20 65 6c 65 6d  e shows the elem
76b0: 65 6e 74 73 20 6f 66 20 61 20 63 65 6c 6c 2c 20  ents of a cell, 
76c0: 69 6e 0a 6f 72 64 65 72 20 6f 66 20 61 70 70 65  in.order of appe
76d0: 61 72 61 6e 63 65 2c 20 66 6f 72 20 74 68 65 20  arance, for the 
76e0: 76 61 72 69 6f 75 73 20 62 2d 74 72 65 65 20 70  various b-tree p
76f0: 61 67 65 20 74 79 70 65 73 2e 3c 2f 70 3e 0a 0a  age types.</p>..
7700: 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 64 6c 3e  <blockquote><dl>
7710: 0a 3c 64 74 3e 3c 70 3e 54 61 62 6c 65 20 42 2d  .<dt><p>Table B-
7720: 54 72 65 65 20 4c 65 61 66 20 43 65 6c 6c 3a 3c  Tree Leaf Cell:<
7730: 2f 70 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e  /p></dt>.<dd><p>
7740: 3c 75 6c 3e 0a 3c 6c 69 3e 41 20 76 61 72 69 6e  <ul>.<li>A varin
7750: 74 20 77 68 69 63 68 20 69 73 20 74 68 65 20 74  t which is the t
7760: 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 62  otal number of b
7770: 79 74 65 73 20 6f 66 20 70 61 79 6c 6f 61 64 2c  ytes of payload,
7780: 20 69 6e 63 6c 75 64 69 6e 67 20 61 6e 79 0a 6f   including any.o
7790: 76 65 72 66 6c 6f 77 0a 3c 6c 69 3e 41 20 76 61  verflow.<li>A va
77a0: 72 69 6e 74 20 77 68 69 63 68 20 69 73 20 74 68  rint which is th
77b0: 65 20 69 6e 74 65 67 65 72 20 6b 65 79 2c 20 61  e integer key, a
77c0: 2e 6b 2e 61 2e 20 22 72 6f 77 69 64 22 0a 3c 6c  .k.a. "rowid".<l
77d0: 69 3e 54 68 65 20 69 6e 69 74 69 61 6c 20 70 6f  i>The initial po
77e0: 72 74 69 6f 6e 20 6f 66 20 74 68 65 20 70 61 79  rtion of the pay
77f0: 6c 6f 61 64 20 74 68 61 74 20 64 6f 65 73 20 6e  load that does n
7800: 6f 74 20 73 70 69 6c 6c 20 74 6f 20 6f 76 65 72  ot spill to over
7810: 66 6c 6f 77 0a 70 61 67 65 73 2e 0a 3c 6c 69 3e  flow.pages..<li>
7820: 41 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64  A 4-byte big-end
7830: 69 61 6e 20 69 6e 74 65 67 65 72 20 70 61 67 65  ian integer page
7840: 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 65 20   number for the 
7850: 66 69 72 73 74 20 70 61 67 65 20 6f 66 20 74 68  first page of th
7860: 65 0a 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 20  e.overflow page 
7870: 6c 69 73 74 20 2d 20 6f 6d 69 74 74 65 64 20 69  list - omitted i
7880: 66 20 61 6c 6c 20 70 61 79 6c 6f 61 64 20 66 69  f all payload fi
7890: 74 73 20 6f 6e 20 74 68 65 20 62 2d 74 72 65 65  ts on the b-tree
78a0: 20 70 61 67 65 2e 0a 3c 2f 75 6c 3e 3c 2f 70 3e   page..</ul></p>
78b0: 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 70 3e 54 61  </dd>..<dt><p>Ta
78c0: 62 6c 65 20 42 2d 54 72 65 65 20 49 6e 74 65 72  ble B-Tree Inter
78d0: 69 6f 72 20 43 65 6c 6c 3a 3c 2f 70 3e 3c 2f 64  ior Cell:</p></d
78e0: 74 3e 0a 3c 64 64 3e 3c 70 3e 3c 75 6c 3e 0a 3c  t>.<dd><p><ul>.<
78f0: 6c 69 3e 41 20 34 2d 62 79 74 65 20 62 69 67 2d  li>A 4-byte big-
7900: 65 6e 64 69 6e 67 20 70 61 67 65 20 6e 75 6d 62  ending page numb
7910: 65 72 20 77 68 69 63 68 20 69 73 20 74 68 65 20  er which is the 
7920: 6c 65 66 74 20 63 68 69 6c 64 20 70 6f 69 6e 74  left child point
7930: 65 72 2e 0a 3c 6c 69 3e 41 20 76 61 72 69 6e 74  er..<li>A varint
7940: 20 77 68 69 63 68 20 69 73 20 74 68 65 20 69 6e   which is the in
7950: 74 65 67 65 72 20 6b 65 79 0a 3c 2f 75 6c 3e 3c  teger key.</ul><
7960: 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 70  /p></dd>..<dt><p
7970: 3e 49 6e 64 65 78 20 42 2d 54 72 65 65 20 4c 65  >Index B-Tree Le
7980: 61 66 20 43 65 6c 6c 3a 3c 2f 70 3e 3c 2f 64 74  af Cell:</p></dt
7990: 3e 0a 3c 64 64 3e 3c 70 3e 3c 75 6c 3e 0a 3c 6c  >.<dd><p><ul>.<l
79a0: 69 3e 41 20 76 61 72 69 6e 74 20 77 68 69 63 68  i>A varint which
79b0: 20 69 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75   is the total nu
79c0: 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66  mber of bytes of
79d0: 20 6b 65 79 20 70 61 79 6c 6f 61 64 2c 20 69 6e   key payload, in
79e0: 63 6c 75 64 69 6e 67 20 61 6e 79 0a 6f 76 65 72  cluding any.over
79f0: 66 6c 6f 77 0a 3c 6c 69 3e 54 68 65 20 69 6e 69  flow.<li>The ini
7a00: 74 69 61 6c 20 70 6f 72 74 69 6f 6e 20 6f 66 20  tial portion of 
7a10: 74 68 65 20 70 61 79 6c 6f 61 64 20 74 68 61 74  the payload that
7a20: 20 64 6f 65 73 20 6e 6f 74 20 73 70 69 6c 6c 20   does not spill 
7a30: 74 6f 20 6f 76 65 72 66 6c 6f 77 0a 70 61 67 65  to overflow.page
7a40: 73 2e 0a 3c 6c 69 3e 41 20 34 2d 62 79 74 65 20  s..<li>A 4-byte 
7a50: 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67  big-endian integ
7a60: 65 72 20 70 61 67 65 20 6e 75 6d 62 65 72 20 66  er page number f
7a70: 6f 72 20 74 68 65 20 66 69 72 73 74 20 70 61 67  or the first pag
7a80: 65 20 6f 66 20 74 68 65 0a 6f 76 65 72 66 6c 6f  e of the.overflo
7a90: 77 20 70 61 67 65 20 6c 69 73 74 20 2d 20 6f 6d  w page list - om
7aa0: 69 74 74 65 64 20 69 66 20 61 6c 6c 20 70 61 79  itted if all pay
7ab0: 6c 6f 61 64 20 66 69 74 73 20 6f 6e 20 74 68 65  load fits on the
7ac0: 20 62 2d 74 72 65 65 20 70 61 67 65 2e 0a 3c 2f   b-tree page..</
7ad0: 75 6c 3e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64  ul></p></dd>..<d
7ae0: 74 3e 3c 70 3e 49 6e 64 65 78 20 42 2d 54 72 65  t><p>Index B-Tre
7af0: 65 20 49 6e 74 65 72 69 6f 72 20 43 65 6c 6c 3a  e Interior Cell:
7b00: 3c 2f 70 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70  </p></dt>.<dd><p
7b10: 3e 3c 75 6c 3e 0a 3c 6c 69 3e 41 20 34 2d 62 79  ><ul>.<li>A 4-by
7b20: 74 65 20 62 69 67 2d 65 6e 64 69 6e 67 20 70 61  te big-ending pa
7b30: 67 65 20 6e 75 6d 62 65 72 20 77 68 69 63 68 20  ge number which 
7b40: 69 73 20 74 68 65 20 6c 65 66 74 20 63 68 69 6c  is the left chil
7b50: 64 20 70 6f 69 6e 74 65 72 2e 0a 3c 6c 69 3e 41  d pointer..<li>A
7b60: 20 76 61 72 69 6e 74 20 77 68 69 63 68 20 69 73   varint which is
7b70: 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65   the total numbe
7b80: 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 6b 65  r of bytes of ke
7b90: 79 20 70 61 79 6c 6f 61 64 2c 20 69 6e 63 6c 75  y payload, inclu
7ba0: 64 69 6e 67 20 61 6e 79 0a 6f 76 65 72 66 6c 6f  ding any.overflo
7bb0: 77 0a 3c 6c 69 3e 54 68 65 20 69 6e 69 74 69 61  w.<li>The initia
7bc0: 6c 20 70 6f 72 74 69 6f 6e 20 6f 66 20 74 68 65  l portion of the
7bd0: 20 70 61 79 6c 6f 61 64 20 74 68 61 74 20 64 6f   payload that do
7be0: 65 73 20 6e 6f 74 20 73 70 69 6c 6c 20 74 6f 20  es not spill to 
7bf0: 6f 76 65 72 66 6c 6f 77 0a 70 61 67 65 73 2e 0a  overflow.pages..
7c00: 3c 6c 69 3e 41 20 34 2d 62 79 74 65 20 62 69 67  <li>A 4-byte big
7c10: 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20  -endian integer 
7c20: 70 61 67 65 20 6e 75 6d 62 65 72 20 66 6f 72 20  page number for 
7c30: 74 68 65 20 66 69 72 73 74 20 70 61 67 65 20 6f  the first page o
7c40: 66 20 74 68 65 0a 6f 76 65 72 66 6c 6f 77 20 70  f the.overflow p
7c50: 61 67 65 20 6c 69 73 74 20 2d 20 6f 6d 69 74 74  age list - omitt
7c60: 65 64 20 69 66 20 61 6c 6c 20 70 61 79 6c 6f 61  ed if all payloa
7c70: 64 20 66 69 74 73 20 6f 6e 20 74 68 65 20 62 2d  d fits on the b-
7c80: 74 72 65 65 20 70 61 67 65 2e 0a 3c 2f 75 6c 3e  tree page..</ul>
7c90: 3c 2f 70 3e 3c 2f 64 64 3e 0a 3c 2f 64 6c 3e 3c  </p></dd>.</dl><
7ca0: 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70  /blockquote>..<p
7cb0: 3e 54 68 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  >The information
7cc0: 20 61 62 6f 76 65 20 63 61 6e 20 62 65 20 72 65   above can be re
7cd0: 63 61 73 74 20 69 6e 74 6f 20 61 20 74 61 62 6c  cast into a tabl
7ce0: 65 20 66 6f 72 6d 61 74 20 61 73 20 66 6f 6c 6c  e format as foll
7cf0: 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68  ows:</p>..<tcl>h
7d00: 64 5f 66 72 61 67 6d 65 6e 74 20 63 65 6c 6c 66  d_fragment cellf
7d10: 6f 72 6d 61 74 20 7b 63 65 6c 6c 20 66 6f 72 6d  ormat {cell form
7d20: 61 74 20 73 75 6d 6d 61 72 79 7d 3c 2f 74 63 6c  at summary}</tcl
7d30: 3e 0a 3c 63 65 6e 74 65 72 3e 0a 3c 69 3e 42 2d  >.<center>.<i>B-
7d40: 74 72 65 65 20 43 65 6c 6c 20 46 6f 72 6d 61 74  tree Cell Format
7d50: 3c 2f 69 3e 0a 3c 74 61 62 6c 65 20 62 6f 72 64  </i>.<table bord
7d60: 65 72 3d 31 20 77 69 64 74 68 3d 22 38 30 25 22  er=1 width="80%"
7d70: 3e 0a 3c 74 72 3e 3c 74 68 20 72 6f 77 73 70 61  >.<tr><th rowspa
7d80: 6e 3d 32 3e 44 61 74 61 74 79 70 65 0a 20 20 20  n=2>Datatype.   
7d90: 20 3c 74 68 20 63 6f 6c 73 70 61 6e 3d 34 3e 41   <th colspan=4>A
7da0: 70 70 65 61 72 73 20 69 6e 2e 2e 2e 0a 20 20 20  ppears in....   
7db0: 20 3c 74 68 20 72 6f 77 73 70 61 6e 3d 32 3e 44   <th rowspan=2>D
7dc0: 65 73 63 72 69 70 74 69 6f 6e 0a 3c 74 72 3e 3c  escription.<tr><
7dd0: 74 68 3e 54 61 62 6c 65 20 4c 65 61 66 0a 20 20  th>Table Leaf.  
7de0: 20 20 3c 74 68 3e 54 61 62 6c 65 20 49 6e 74 65    <th>Table Inte
7df0: 72 69 6f 72 0a 20 20 20 20 3c 74 68 3e 49 6e 64  rior.    <th>Ind
7e00: 65 78 20 4c 65 61 66 0a 20 20 20 20 3c 74 68 3e  ex Leaf.    <th>
7e10: 49 6e 64 65 78 20 49 6e 74 65 72 69 6f 72 0a 3c  Index Interior.<
7e20: 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e  tr><td align=cen
7e30: 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 34  ter valign=top>4
7e40: 2d 62 79 74 65 20 69 6e 74 65 67 65 72 0a 20 20  -byte integer.  
7e50: 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74    <td align=cent
7e60: 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 6e  er valign=top>&n
7e70: 62 73 70 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69  bsp;.    <td ali
7e80: 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e  gn=center valign
7e90: 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20 20  =top>&#x2714;.  
7ea0: 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74    <td align=cent
7eb0: 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 6e  er valign=top>&n
7ec0: 62 73 70 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69  bsp;.    <td ali
7ed0: 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e  gn=center valign
7ee0: 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20 20  =top>&#x2714;.  
7ef0: 20 20 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74    <td align=left
7f00: 3e 50 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20  >Page number of 
7f10: 6c 65 66 74 20 63 68 69 6c 64 0a 3c 74 72 3e 3c  left child.<tr><
7f20: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
7f30: 76 61 6c 69 67 6e 3d 74 6f 70 3e 76 61 72 69 6e  valign=top>varin
7f40: 74 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d  t.    <td align=
7f50: 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f  center valign=to
7f60: 70 3e 26 23 78 32 37 31 34 3b 0a 20 20 20 20 3c  p>&#x2714;.    <
7f70: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
7f80: 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 6e 62 73 70  valign=top>&nbsp
7f90: 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d  ;.    <td align=
7fa0: 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f  center valign=to
7fb0: 70 3e 26 23 78 32 37 31 34 3b 0a 20 20 20 20 3c  p>&#x2714;.    <
7fc0: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
7fd0: 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37  valign=top>&#x27
7fe0: 31 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67  14;.    <td alig
7ff0: 6e 3d 6c 65 66 74 3e 4e 75 6d 62 65 72 20 6f 66  n=left>Number of
8000: 20 62 79 74 65 73 20 6f 66 20 70 61 79 6c 6f 61   bytes of payloa
8010: 64 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d  d.<tr><td align=
8020: 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f  center valign=to
8030: 70 3e 76 61 72 69 6e 74 0a 20 20 20 20 3c 74 64  p>varint.    <td
8040: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61   align=center va
8050: 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34  lign=top>&#x2714
8060: 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d  ;.    <td align=
8070: 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f  center valign=to
8080: 70 3e 26 23 78 32 37 31 34 3b 0a 20 20 20 20 3c  p>&#x2714;.    <
8090: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
80a0: 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 6e 62 73 70  valign=top>&nbsp
80b0: 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d  ;.    <td align=
80c0: 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f  center valign=to
80d0: 70 3e 26 6e 62 73 70 3b 0a 20 20 20 20 3c 74 64  p>&nbsp;.    <td
80e0: 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 52 6f 77 69   align=left>Rowi
80f0: 64 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d  d.<tr><td align=
8100: 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f  center valign=to
8110: 70 3e 62 79 74 65 20 61 72 72 61 79 0a 20 20 20  p>byte array.   
8120: 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65   <td align=cente
8130: 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78  r valign=top>&#x
8140: 32 37 31 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c  2714;.    <td al
8150: 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67  ign=center valig
8160: 6e 3d 74 6f 70 3e 26 6e 62 73 70 3b 0a 20 20 20  n=top>&nbsp;.   
8170: 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65   <td align=cente
8180: 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78  r valign=top>&#x
8190: 32 37 31 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c  2714;.    <td al
81a0: 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67  ign=center valig
81b0: 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20  n=top>&#x2714;. 
81c0: 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66     <td align=lef
81d0: 74 3e 50 61 79 6c 6f 61 64 0a 3c 74 72 3e 3c 74  t>Payload.<tr><t
81e0: 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76  d align=center v
81f0: 61 6c 69 67 6e 3d 74 6f 70 3e 34 2d 62 79 74 65  align=top>4-byte
8200: 20 69 6e 74 65 67 65 72 0a 20 20 20 20 3c 74 64   integer.    <td
8210: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61   align=center va
8220: 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34  lign=top>&#x2714
8230: 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d  ;.    <td align=
8240: 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f  center valign=to
8250: 70 3e 26 6e 62 73 70 3b 0a 20 20 20 20 3c 74 64  p>&nbsp;.    <td
8260: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61   align=center va
8270: 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34  lign=top>&#x2714
8280: 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d  ;.    <td align=
8290: 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f  center valign=to
82a0: 70 3e 26 23 78 32 37 31 34 3b 0a 20 20 20 20 3c  p>&#x2714;.    <
82b0: 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 50 61  td align=left>Pa
82c0: 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 66 69 72  ge number of fir
82d0: 73 74 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65  st overflow page
82e0: 0a 3c 2f 74 61 62 6c 65 3e 3c 2f 63 65 6e 74 65  .</table></cente
82f0: 72 3e 0a 0a 0a 0a 3c 74 72 3e 3c 74 64 20 61 6c  r>....<tr><td al
8300: 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67  ign=center valig
8310: 6e 3d 74 6f 70 3e 0a 0a 3c 70 3e 54 68 65 20 61  n=top>..<p>The a
8320: 6d 6f 75 6e 74 20 6f 66 20 70 61 79 6c 6f 61 64  mount of payload
8330: 20 74 68 61 74 20 73 70 69 6c 6c 73 20 6f 6e 74   that spills ont
8340: 6f 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 73  o overflow pages
8350: 20 61 6c 73 6f 20 64 65 70 65 6e 64 73 20 6f 6e   also depends on
8360: 0a 74 68 65 20 70 61 67 65 20 74 79 70 65 2e 20  .the page type. 
8370: 20 46 6f 72 20 74 68 65 20 66 6f 6c 6c 6f 77 69   For the followi
8380: 6e 67 20 63 6f 6d 70 75 74 61 74 69 6f 6e 73 2c  ng computations,
8390: 20 6c 65 74 20 55 20 62 65 20 74 68 65 20 75 73   let U be the us
83a0: 61 62 6c 65 20 73 69 7a 65 0a 6f 66 20 61 20 64  able size.of a d
83b0: 61 74 61 62 61 73 65 20 70 61 67 65 2c 20 74 68  atabase page, th
83c0: 65 20 74 6f 74 61 6c 20 70 61 67 65 20 73 69 7a  e total page siz
83d0: 65 20 6c 65 73 73 20 74 68 65 20 72 65 73 65 72  e less the reser
83e0: 76 65 64 20 73 70 61 63 65 20 61 74 20 74 68 65  ved space at the
83f0: 0a 65 6e 64 20 6f 66 20 65 61 63 68 20 70 61 67  .end of each pag
8400: 65 2e 20 20 41 6e 64 20 6c 65 74 20 50 20 62 65  e.  And let P be
8410: 20 74 68 65 20 70 61 79 6c 6f 61 64 20 73 69 7a   the payload siz
8420: 65 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75  e.</p>..<blockqu
8430: 6f 74 65 3e 3c 64 6c 3e 0a 3c 64 74 3e 54 61 62  ote><dl>.<dt>Tab
8440: 6c 65 20 42 2d 54 72 65 65 20 4c 65 61 66 20 43  le B-Tree Leaf C
8450: 65 6c 6c 3a 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70  ell:</dt>.<dd><p
8460: 3e 0a 5e 49 66 20 74 68 65 20 70 61 79 6c 6f 61  >.^If the payloa
8470: 64 20 73 69 7a 65 20 50 20 69 73 20 6c 65 73 73  d size P is less
8480: 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74   than or equal t
8490: 6f 20 55 2d 33 35 20 74 68 65 6e 0a 74 68 65 20  o U-35 then.the 
84a0: 65 6e 74 69 72 65 20 70 61 79 6c 6f 61 64 20 69  entire payload i
84b0: 73 20 73 74 6f 72 65 64 20 6f 6e 20 74 68 65 20  s stored on the 
84c0: 62 2d 74 72 65 65 20 6c 65 61 66 20 70 61 67 65  b-tree leaf page
84d0: 2e 20 20 0a 5e 28 4c 65 74 20 4d 20 62 65 20 28  .  .^(Let M be (
84e0: 28 55 2d 31 32 29 2a 33 32 2f 32 35 35 29 2d 32  (U-12)*32/255)-2
84f0: 33 2e 20 20 49 66 20 50 20 69 73 20 67 72 65 61  3.  If P is grea
8500: 74 65 72 20 74 68 61 6e 20 55 2d 33 35 0a 74 68  ter than U-35.th
8510: 65 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  en the number of
8520: 20 62 79 74 65 20 73 74 6f 72 65 64 20 6f 6e 20   byte stored on 
8530: 74 68 65 20 62 2d 74 72 65 65 20 6c 65 61 66 20  the b-tree leaf 
8540: 70 61 67 65 20 69 73 20 74 68 65 20 73 6d 61 6c  page is the smal
8550: 6c 65 72 20 6f 66 0a 4d 2b 28 28 50 2d 4d 29 25  ler of.M+((P-M)%
8560: 28 55 2d 34 29 29 20 61 6e 64 20 55 2d 33 35 2e  (U-4)) and U-35.
8570: 29 5e 0a 5e 28 4e 6f 74 65 20 74 68 61 74 20 6e  )^.^(Note that n
8580: 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 73  umber of bytes s
8590: 74 6f 72 65 64 20 6f 6e 20 74 68 65 20 6c 65 61  tored on the lea
85a0: 66 20 70 61 67 65 20 69 73 20 6e 65 76 65 72 20  f page is never 
85b0: 6c 65 73 73 20 74 68 61 6e 20 4d 2e 29 5e 0a 3c  less than M.)^.<
85c0: 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 54 61  /p></dd>..<dt>Ta
85d0: 62 6c 65 20 42 2d 54 72 65 65 20 49 6e 74 65 72  ble B-Tree Inter
85e0: 69 6f 72 20 43 65 6c 6c 3a 3c 2f 64 74 3e 0a 3c  ior Cell:</dt>.<
85f0: 64 64 3e 3c 70 3e 0a 49 6e 74 65 72 69 6f 72 20  dd><p>.Interior 
8600: 70 61 67 65 73 20 6f 66 20 74 61 62 6c 65 20 62  pages of table b
8610: 2d 74 72 65 65 73 20 68 61 76 65 20 6e 6f 20 70  -trees have no p
8620: 61 79 6c 6f 61 64 20 61 6e 64 20 73 6f 20 74 68  ayload and so th
8630: 65 72 65 20 69 73 20 6e 65 76 65 72 0a 61 6e 79  ere is never.any
8640: 20 70 61 79 6c 6f 61 64 20 74 6f 20 73 70 69 6c   payload to spil
8650: 6c 2e 0a 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64  l..</p></dd>..<d
8660: 74 3e 49 6e 64 65 78 20 42 2d 54 72 65 65 20 4c  t>Index B-Tree L
8670: 65 61 66 20 4f 72 20 49 6e 74 65 72 69 6f 72 20  eaf Or Interior 
8680: 43 65 6c 6c 3a 3c 2f 64 74 3e 0a 3c 64 64 3e 3c  Cell:</dt>.<dd><
8690: 70 3e 0a 5e 28 4c 65 74 20 58 20 62 65 20 28 28  p>.^(Let X be ((
86a0: 55 2d 31 32 29 2a 36 34 2f 32 35 35 29 2d 32 33  U-12)*64/255)-23
86b0: 29 2e 20 20 49 66 20 74 68 65 20 70 61 79 6c 6f  ).  If the paylo
86c0: 61 64 20 73 69 7a 65 20 50 20 69 73 20 6c 65 73  ad size P is les
86d0: 73 20 74 68 61 6e 0a 6f 72 20 65 71 75 61 6c 20  s than.or equal 
86e0: 74 6f 20 58 20 74 68 65 6e 20 74 68 65 20 65 6e  to X then the en
86f0: 74 69 72 65 20 70 61 79 6c 6f 61 64 20 69 73 20  tire payload is 
8700: 73 74 6f 72 65 64 20 6f 6e 20 74 68 65 20 62 2d  stored on the b-
8710: 74 72 65 65 20 70 61 67 65 2e 29 5e 0a 5e 28 4c  tree page.)^.^(L
8720: 65 74 20 4d 20 62 65 20 28 28 55 2d 31 32 29 2a  et M be ((U-12)*
8730: 33 32 2f 32 35 35 29 2d 32 33 2e 20 20 49 66 20  32/255)-23.  If 
8740: 50 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  P is greater tha
8750: 6e 20 58 20 74 68 65 6e 20 74 68 65 20 6e 75 6d  n X then the num
8760: 62 65 72 0a 6f 66 20 62 79 74 65 20 73 74 6f 72  ber.of byte stor
8770: 65 64 20 6f 6e 20 74 68 65 20 62 2d 74 72 65 65  ed on the b-tree
8780: 20 70 61 67 65 20 69 73 20 74 68 65 20 73 6d 61   page is the sma
8790: 6c 6c 65 72 20 6f 66 0a 4d 2b 28 28 50 2d 4d 29  ller of.M+((P-M)
87a0: 25 28 55 2d 34 29 29 20 61 6e 64 20 58 2e 29 5e  %(U-4)) and X.)^
87b0: 0a 5e 28 4e 6f 74 65 20 74 68 61 74 20 6e 75 6d  .^(Note that num
87c0: 62 65 72 20 6f 66 20 62 79 74 65 73 20 73 74 6f  ber of bytes sto
87d0: 72 65 64 20 6f 6e 20 74 68 65 20 69 6e 64 65 78  red on the index
87e0: 20 70 61 67 65 20 69 73 20 6e 65 76 65 72 20 6c   page is never l
87f0: 65 73 73 20 74 68 61 6e 20 4d 2e 29 5e 0a 3c 2f  ess than M.)^.</
8800: 70 3e 3c 2f 64 64 3e 0a 3c 2f 64 6c 3e 3c 2f 62  p></dd>.</dl></b
8810: 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54  lockquote>..<p>T
8820: 68 65 20 6f 76 65 72 66 6c 6f 77 20 74 68 72 65  he overflow thre
8830: 73 68 6f 6c 64 73 20 61 72 65 20 64 65 73 69 67  sholds are desig
8840: 6e 65 64 20 74 6f 20 67 69 76 65 20 61 20 6d 69  ned to give a mi
8850: 6e 69 6d 75 6d 20 66 61 6e 6f 75 74 20 6f 66 0a  nimum fanout of.
8860: 34 20 66 6f 72 20 69 6e 64 65 78 20 62 2d 74 72  4 for index b-tr
8870: 65 65 73 20 61 6e 64 20 74 6f 20 6d 61 6b 65 20  ees and to make 
8880: 73 75 72 65 20 65 6e 6f 75 67 68 20 6f 66 20 74  sure enough of t
8890: 68 65 20 70 61 79 6c 6f 61 64 0a 69 73 20 6f 6e  he payload.is on
88a0: 20 74 68 65 20 62 2d 74 72 65 65 20 70 61 67 65   the b-tree page
88b0: 20 74 68 61 74 20 74 68 65 20 72 65 63 6f 72 64   that the record
88c0: 20 68 65 61 64 65 72 20 63 61 6e 20 75 73 75 61   header can usua
88d0: 6c 6c 79 20 62 65 20 61 63 63 65 73 73 65 64 0a  lly be accessed.
88e0: 77 69 74 68 6f 75 74 20 63 6f 6e 73 75 6c 74 69  without consulti
88f0: 6e 67 20 61 6e 20 6f 76 65 72 66 6c 6f 77 20 70  ng an overflow p
8900: 61 67 65 2e 20 20 49 6e 20 68 69 6e 64 73 69 67  age.  In hindsig
8910: 68 74 2c 20 74 68 65 20 64 65 73 69 67 6e 65 72  ht, the designer
8920: 73 20 6f 66 0a 74 68 65 20 53 51 4c 69 74 65 20  s of.the SQLite 
8930: 62 2d 74 72 65 65 20 6c 6f 67 69 63 20 72 65 61  b-tree logic rea
8940: 6c 69 7a 65 20 74 68 61 74 20 74 68 65 73 65 20  lize that these 
8950: 74 68 72 65 73 68 6f 6c 64 73 20 63 6f 75 6c 64  thresholds could
8960: 20 68 61 76 65 20 62 65 65 6e 0a 6d 61 64 65 20   have been.made 
8970: 6d 75 63 68 20 73 69 6d 70 6c 65 72 2e 20 20 48  much simpler.  H
8980: 6f 77 65 76 65 72 2c 20 74 68 65 20 63 6f 6d 70  owever, the comp
8990: 75 74 61 74 69 6f 6e 73 20 63 61 6e 6e 6f 74 20  utations cannot 
89a0: 62 65 20 63 68 61 6e 67 65 64 0a 77 69 74 68 6f  be changed.witho
89b0: 75 74 20 72 65 73 75 6c 74 69 6e 67 20 69 6e 20  ut resulting in 
89c0: 61 6e 20 69 6e 63 6f 6d 70 61 74 69 62 6c 65 20  an incompatible 
89d0: 66 69 6c 65 20 66 6f 72 6d 61 74 2e 20 20 41 6e  file format.  An
89e0: 64 20 74 68 65 20 63 75 72 72 65 6e 74 20 63 6f  d the current co
89f0: 6d 70 75 74 61 74 69 6f 6e 73 0a 77 6f 72 6b 20  mputations.work 
8a00: 77 65 6c 6c 2c 20 65 76 65 6e 20 69 66 20 74 68  well, even if th
8a10: 65 79 20 61 72 65 20 61 20 6c 69 74 74 6c 65 20  ey are a little 
8a20: 63 6f 6d 70 6c 65 78 2e 3c 2f 70 3e 0a 0a 3c 68  complex.</p>..<h
8a30: 33 3e 31 2e 36 20 43 65 6c 6c 20 50 61 79 6c 6f  3>1.6 Cell Paylo
8a40: 61 64 20 4f 76 65 72 66 6c 6f 77 20 50 61 67 65  ad Overflow Page
8a50: 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 57 68 65 6e  s</h3>..<p>^When
8a60: 20 74 68 65 20 70 61 79 6c 6f 61 64 20 6f 66 20   the payload of 
8a70: 61 20 62 2d 74 72 65 65 20 63 65 6c 6c 20 69 73  a b-tree cell is
8a80: 20 74 6f 6f 20 6c 61 72 67 65 20 66 6f 72 20 74   too large for t
8a90: 68 65 20 62 2d 74 72 65 65 20 70 61 67 65 2c 0a  he b-tree page,.
8aa0: 74 68 65 20 73 75 72 70 6c 75 73 20 69 73 20 73  the surplus is s
8ab0: 70 69 6c 6c 65 64 20 6f 6e 74 6f 20 6f 76 65 72  pilled onto over
8ac0: 66 6c 6f 77 20 70 61 67 65 73 2e 20 20 5e 4f 76  flow pages.  ^Ov
8ad0: 65 72 66 6c 6f 77 20 70 61 67 65 73 20 66 6f 72  erflow pages for
8ae0: 6d 20 61 20 6c 69 6e 6b 65 64 0a 6c 69 73 74 2e  m a linked.list.
8af0: 20 20 5e 54 68 65 20 66 69 72 73 74 20 66 6f 75    ^The first fou
8b00: 72 20 62 79 74 65 73 20 6f 66 20 65 61 63 68 20  r bytes of each 
8b10: 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 20 61 72  overflow page ar
8b20: 65 20 61 20 62 69 67 2d 65 6e 64 69 61 6e 0a 69  e a big-endian.i
8b30: 6e 74 65 67 65 72 20 77 68 69 63 68 20 69 73 20  nteger which is 
8b40: 74 68 65 20 70 61 67 65 20 6e 75 6d 62 65 72 20  the page number 
8b50: 6f 66 20 74 68 65 20 6e 65 78 74 20 70 61 67 65  of the next page
8b60: 20 69 6e 20 74 68 65 20 63 68 61 69 6e 2c 20 6f   in the chain, o
8b70: 72 20 7a 65 72 6f 0a 66 6f 72 20 74 68 65 20 66  r zero.for the f
8b80: 69 6e 61 6c 20 70 61 67 65 20 69 6e 20 74 68 65  inal page in the
8b90: 20 63 68 61 69 6e 2e 20 20 5e 54 68 65 20 66 69   chain.  ^The fi
8ba0: 66 74 68 20 62 79 74 65 20 74 68 72 6f 75 67 68  fth byte through
8bb0: 20 74 68 65 20 6c 61 73 74 20 75 73 61 62 6c 65   the last usable
8bc0: 0a 62 79 74 65 20 61 72 65 20 75 73 65 64 20 74  .byte are used t
8bd0: 6f 20 68 6f 6c 64 20 6f 76 65 72 66 6c 6f 77 20  o hold overflow 
8be0: 63 6f 6e 74 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c 68  content.</p>..<h
8bf0: 33 3e 31 2e 37 20 50 6f 69 6e 74 65 72 20 4d 61  3>1.7 Pointer Ma
8c00: 70 20 6f 72 20 50 74 72 6d 61 70 20 50 61 67 65  p or Ptrmap Page
8c10: 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 50 6f 69 6e 74  s</h3>..<p>Point
8c20: 65 72 20 6d 61 70 20 6f 72 20 70 74 72 6d 61 70  er map or ptrmap
8c30: 20 70 61 67 65 73 20 61 72 65 20 65 78 74 72 61   pages are extra
8c40: 20 70 61 67 65 73 20 69 6e 73 65 72 74 65 64 20   pages inserted 
8c50: 69 6e 74 6f 20 74 68 65 20 64 61 74 61 62 61 73  into the databas
8c60: 65 0a 74 6f 20 6d 61 6b 65 20 74 68 65 20 6f 70  e.to make the op
8c70: 65 72 61 74 69 6f 6e 20 6f 66 20 5b 61 75 74 6f  eration of [auto
8c80: 5f 76 61 63 75 75 6d 5d 20 61 6e 64 20 5b 69 6e  _vacuum] and [in
8c90: 63 72 65 6d 65 6e 74 61 6c 5f 76 61 63 75 75 6d  cremental_vacuum
8ca0: 5d 20 6d 6f 64 65 73 0a 6d 6f 72 65 20 65 66 66  ] modes.more eff
8cb0: 69 63 69 65 6e 74 2e 20 20 4f 74 68 65 72 20 70  icient.  Other p
8cc0: 61 67 65 20 74 79 70 65 73 20 69 6e 20 74 68 65  age types in the
8cd0: 20 64 61 74 61 62 61 73 65 20 74 79 70 69 63 61   database typica
8ce0: 6c 6c 79 20 68 61 76 65 20 70 6f 69 6e 74 65 72  lly have pointer
8cf0: 73 0a 66 72 6f 6d 20 70 61 72 65 6e 74 20 74 6f  s.from parent to
8d00: 20 63 68 69 6c 64 2e 20 20 46 6f 72 20 65 78 61   child.  For exa
8d10: 6d 70 6c 65 2c 20 61 6e 20 69 6e 74 65 72 69 6f  mple, an interio
8d20: 72 20 62 2d 74 72 65 65 20 70 61 67 65 20 63 6f  r b-tree page co
8d30: 6e 74 61 69 6e 73 20 70 6f 69 6e 74 65 72 73 0a  ntains pointers.
8d40: 74 6f 20 69 74 73 20 63 68 69 6c 64 20 62 2d 74  to its child b-t
8d50: 72 65 65 20 70 61 67 65 73 20 61 6e 64 20 61 6e  ree pages and an
8d60: 20 6f 76 65 72 66 6c 6f 77 20 63 68 61 69 6e 20   overflow chain 
8d70: 68 61 73 20 61 20 70 6f 69 6e 74 65 72 0a 66 72  has a pointer.fr
8d80: 6f 6d 20 65 61 72 6c 69 65 72 20 74 6f 20 6c 61  om earlier to la
8d90: 74 65 72 20 6c 69 6e 6b 73 20 69 6e 20 74 68 65  ter links in the
8da0: 20 63 68 61 69 6e 2e 20 20 41 20 70 74 72 6d 61   chain.  A ptrma
8db0: 70 20 70 61 67 65 20 63 6f 6e 74 61 69 6e 73 20  p page contains 
8dc0: 6c 69 6e 6b 61 67 65 0a 69 6e 66 6f 72 6d 61 74  linkage.informat
8dd0: 69 6f 6e 20 67 6f 69 6e 67 20 69 6e 20 74 68 65  ion going in the
8de0: 20 6f 70 70 6f 73 69 74 65 20 64 69 72 65 63 74   opposite direct
8df0: 69 6f 6e 2c 20 66 72 6f 6d 20 63 68 69 6c 64 20  ion, from child 
8e00: 74 6f 20 70 61 72 65 6e 74 2e 3c 2f 70 3e 0a 0a  to parent.</p>..
8e10: 3c 70 3e 5e 50 74 72 6d 61 70 20 70 61 67 65 73  <p>^Ptrmap pages
8e20: 20 6d 75 73 74 20 65 78 69 73 74 20 69 6e 20 61   must exist in a
8e30: 6e 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ny database file
8e40: 20 77 68 69 63 68 20 68 61 73 20 61 20 6e 6f 6e   which has a non
8e50: 2d 7a 65 72 6f 0a 6c 61 72 67 65 73 74 20 72 6f  -zero.largest ro
8e60: 6f 74 20 62 2d 74 72 65 65 20 70 61 67 65 20 76  ot b-tree page v
8e70: 61 6c 75 65 20 61 74 20 6f 66 66 73 65 74 20 35  alue at offset 5
8e80: 32 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  2 in the databas
8e90: 65 20 68 65 61 64 65 72 2e 0a 5e 49 66 20 74 68  e header..^If th
8ea0: 65 20 6c 61 72 67 65 73 74 20 72 6f 6f 74 20 62  e largest root b
8eb0: 2d 74 72 65 65 20 70 61 67 65 20 76 61 6c 75 65  -tree page value
8ec0: 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74   is zero, then t
8ed0: 68 65 20 64 61 74 61 62 61 73 65 20 6d 75 73 74  he database must
8ee0: 20 6e 6f 74 0a 63 6f 6e 74 61 69 6e 20 70 74 72   not.contain ptr
8ef0: 6d 61 70 20 70 61 67 65 73 2e 3c 2f 70 3e 0a 0a  map pages.</p>..
8f00: 3c 70 3e 5e 49 6e 20 61 20 64 61 74 61 62 61 73  <p>^In a databas
8f10: 65 20 77 69 74 68 20 70 74 72 6d 61 70 20 70 61  e with ptrmap pa
8f20: 67 65 73 2c 20 74 68 65 20 66 69 72 73 74 20 70  ges, the first p
8f30: 74 72 6d 61 70 20 70 61 67 65 20 69 73 20 70 61  trmap page is pa
8f40: 67 65 20 32 2e 0a 41 20 70 74 72 6d 61 70 20 70  ge 2..A ptrmap p
8f50: 61 67 65 20 63 6f 6e 73 69 73 74 73 20 6f 66 20  age consists of 
8f60: 61 6e 20 61 72 72 61 79 20 6f 66 20 35 2d 62 79  an array of 5-by
8f70: 74 65 20 65 6e 74 72 69 65 73 2e 20 20 4c 65 74  te entries.  Let
8f80: 20 4a 20 62 65 20 74 68 65 0a 6e 75 6d 62 65 72   J be the.number
8f90: 20 6f 66 20 35 2d 62 79 74 65 20 65 6e 74 72 69   of 5-byte entri
8fa0: 65 73 20 74 68 61 74 20 77 69 6c 6c 20 66 69 74  es that will fit
8fb0: 20 69 6e 20 74 68 65 20 75 73 61 62 6c 65 20 73   in the usable s
8fc0: 70 61 63 65 20 6f 66 20 61 20 70 61 67 65 2e 0a  pace of a page..
8fd0: 28 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c  (In other words,
8fe0: 20 4a 3d 55 2f 35 2e 29 20 20 5e 54 68 65 20 66   J=U/5.)  ^The f
8ff0: 69 72 73 74 20 70 74 72 6d 61 70 20 70 61 67 65  irst ptrmap page
9000: 20 77 69 6c 6c 20 63 6f 6e 74 61 69 6e 20 62 61   will contain ba
9010: 63 6b 20 70 6f 69 6e 74 65 72 0a 69 6e 66 6f 72  ck pointer.infor
9020: 6d 61 74 69 6f 6e 20 66 6f 72 20 70 61 67 65 73  mation for pages
9030: 20 33 20 74 68 72 6f 75 67 68 20 4a 2b 32 2c 20   3 through J+2, 
9040: 69 6e 63 6c 75 73 69 76 65 2e 20 20 5e 54 68 65  inclusive.  ^The
9050: 20 73 65 63 6f 6e 64 20 70 6f 69 6e 74 65 72 20   second pointer 
9060: 6d 61 70 0a 70 61 67 65 20 77 69 6c 6c 20 62 65  map.page will be
9070: 20 6f 6e 20 70 61 67 65 20 4a 2b 33 20 61 6e 64   on page J+3 and
9080: 20 74 68 61 74 20 70 74 72 6d 61 70 20 70 61 67   that ptrmap pag
9090: 65 20 77 69 6c 6c 20 70 72 6f 76 69 64 65 20 62  e will provide b
90a0: 61 63 6b 20 70 6f 69 6e 74 65 72 0a 69 6e 66 6f  ack pointer.info
90b0: 72 6d 61 74 69 6f 6e 20 66 6f 72 20 70 61 67 65  rmation for page
90c0: 73 20 4a 2b 34 20 74 68 72 6f 75 67 68 20 32 2a  s J+4 through 2*
90d0: 4a 2b 33 20 69 6e 63 6c 75 73 69 76 65 2e 20 20  J+3 inclusive.  
90e0: 41 6e 64 20 73 6f 20 66 6f 72 74 68 20 66 6f 72  And so forth for
90f0: 0a 74 68 65 20 65 6e 74 69 72 65 20 64 61 74 61  .the entire data
9100: 62 61 73 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a  base file.</p>..
9110: 3c 70 3e 5e 28 49 6e 20 61 20 64 61 74 61 62 61  <p>^(In a databa
9120: 73 65 20 74 68 61 74 20 75 73 65 73 20 70 74 72  se that uses ptr
9130: 6d 61 70 20 70 61 67 65 73 2c 20 61 6c 6c 20 70  map pages, all p
9140: 61 67 65 73 20 61 74 20 6c 6f 63 61 74 69 6f 6e  ages at location
9150: 73 20 69 64 65 6e 74 69 66 69 65 64 0a 62 79 20  s identified.by 
9160: 74 68 65 20 63 6f 6d 70 75 74 61 74 69 6f 6e 20  the computation 
9170: 69 6e 20 74 68 65 20 70 72 65 76 69 6f 75 73 20  in the previous 
9180: 70 61 72 61 67 72 61 70 68 20 6d 75 73 74 20 62  paragraph must b
9190: 65 20 70 74 72 6d 61 70 20 70 61 67 65 20 61 6e  e ptrmap page an
91a0: 64 20 6e 6f 0a 6f 74 68 65 72 20 70 61 67 65 20  d no.other page 
91b0: 6d 61 79 20 62 65 20 61 20 70 74 72 6d 61 70 20  may be a ptrmap 
91c0: 70 61 67 65 2e 20 20 45 78 63 65 70 74 2c 20 69  page.  Except, i
91d0: 66 20 74 68 65 20 62 79 74 65 2d 6c 6f 63 6b 20  f the byte-lock 
91e0: 70 61 67 65 20 68 61 70 70 65 6e 73 20 74 6f 0a  page happens to.
91f0: 66 61 6c 6c 20 6f 6e 20 74 68 65 20 73 61 6d 65  fall on the same
9200: 20 70 61 67 65 20 6e 75 6d 62 65 72 20 61 73 20   page number as 
9210: 61 20 70 74 72 6d 61 70 20 70 61 67 65 2c 20 74  a ptrmap page, t
9220: 68 65 6e 20 74 68 65 20 70 74 72 6d 61 70 20 69  hen the ptrmap i
9230: 73 20 6d 6f 76 65 64 0a 74 6f 20 74 68 65 20 66  s moved.to the f
9240: 6f 6c 6c 6f 77 69 6e 67 20 70 61 67 65 20 66 6f  ollowing page fo
9250: 72 20 74 68 61 74 20 6f 6e 65 20 63 61 73 65 2e  r that one case.
9260: 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e 45 61 63 68 20  )^</p>..<p>Each 
9270: 35 2d 62 79 74 65 20 65 6e 74 72 79 20 6f 6e 20  5-byte entry on 
9280: 61 20 70 74 72 6d 61 70 20 70 61 67 65 20 70 72  a ptrmap page pr
9290: 6f 76 69 64 65 73 20 62 61 63 6b 2d 6c 69 6e 6b  ovides back-link
92a0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   information abo
92b0: 75 74 20 0a 6f 6e 65 20 6f 66 20 70 61 67 65 73  ut .one of pages
92c0: 20 74 68 61 74 20 69 6d 6d 65 64 69 61 74 65 6c   that immediatel
92d0: 79 20 66 6f 6c 6c 6f 77 20 74 68 65 20 70 6f 69  y follow the poi
92e0: 6e 74 65 72 20 6d 61 70 2e 20 20 5e 28 49 66 20  nter map.  ^(If 
92f0: 70 61 67 65 20 42 20 69 73 20 61 0a 70 74 72 6d  page B is a.ptrm
9300: 61 70 20 70 61 67 65 20 74 68 65 6e 20 62 61 63  ap page then bac
9310: 6b 2d 6c 69 6e 6b 20 69 6e 66 6f 72 6d 61 74 69  k-link informati
9320: 6f 6e 20 61 62 6f 75 74 20 70 61 67 65 20 42 2b  on about page B+
9330: 31 20 69 73 20 70 72 6f 76 69 64 65 64 20 62 79  1 is provided by
9340: 0a 74 68 65 20 66 69 72 73 74 20 65 6e 74 72 79  .the first entry
9350: 20 6f 6e 20 74 68 65 20 70 6f 69 6e 74 65 72 20   on the pointer 
9360: 6d 61 70 2e 20 20 49 6e 66 6f 72 6d 61 74 69 6f  map.  Informatio
9370: 6e 20 61 62 6f 75 74 20 70 61 67 65 20 42 2b 32  n about page B+2
9380: 20 69 73 0a 70 72 6f 76 69 64 65 64 20 62 79 20   is.provided by 
9390: 74 68 65 20 73 65 63 6f 6e 64 20 65 6e 74 72 79  the second entry
93a0: 2e 20 20 41 6e 64 20 73 6f 20 66 6f 72 74 68 2e  .  And so forth.
93b0: 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e 45 61 63 68 20  )^</p>..<p>Each 
93c0: 35 2d 62 79 74 65 20 70 74 72 6d 61 70 20 65 6e  5-byte ptrmap en
93d0: 74 72 79 20 63 6f 6e 73 69 73 74 73 20 6f 66 20  try consists of 
93e0: 6f 6e 65 20 62 79 74 65 20 6f 66 20 22 70 61 67  one byte of "pag
93f0: 65 20 74 79 70 65 22 20 69 6e 66 6f 72 6d 61 74  e type" informat
9400: 69 6f 6e 0a 66 6f 6c 6c 6f 77 65 64 20 62 79 20  ion.followed by 
9410: 61 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64  a 4-byte big-end
9420: 69 61 6e 20 70 61 67 65 20 6e 75 6d 62 65 72 2e  ian page number.
9430: 20 20 46 69 76 65 20 70 61 67 65 20 74 79 70 65    Five page type
9440: 73 20 61 72 65 20 72 65 63 6f 67 6e 69 7a 65 64  s are recognized
9450: 3a 0a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69  :.</p>..<ol>.<li
9460: 3e 41 20 62 2d 74 72 65 65 20 72 6f 6f 74 20 70  >A b-tree root p
9470: 61 67 65 2e 20 20 54 68 65 0a 70 61 67 65 20 6e  age.  The.page n
9480: 75 6d 62 65 72 20 73 68 6f 75 6c 64 20 62 65 20  umber should be 
9490: 7a 65 72 6f 2e 0a 3c 6c 69 3e 41 20 66 72 65 65  zero..<li>A free
94a0: 6c 69 73 74 20 70 61 67 65 2e 20 20 54 68 65 20  list page.  The 
94b0: 70 61 67 65 20 6e 75 6d 62 65 72 20 73 68 6f 75  page number shou
94c0: 6c 64 20 62 65 0a 7a 65 72 6f 2e 0a 3c 6c 69 3e  ld be.zero..<li>
94d0: 54 68 65 20 66 69 72 73 74 20 70 61 67 65 20 6f  The first page o
94e0: 66 20 61 0a 63 65 6c 6c 20 70 61 79 6c 6f 61 64  f a.cell payload
94f0: 20 6f 76 65 72 66 6c 6f 77 20 63 68 61 69 6e 2e   overflow chain.
9500: 20 20 54 68 65 20 70 61 67 65 20 6e 75 6d 62 65    The page numbe
9510: 72 20 69 73 20 74 68 65 20 62 2d 74 72 65 65 20  r is the b-tree 
9520: 70 61 67 65 20 74 68 61 74 0a 63 6f 6e 74 61 69  page that.contai
9530: 6e 73 20 74 68 65 20 63 65 6c 6c 20 77 68 6f 73  ns the cell whos
9540: 65 20 63 6f 6e 74 65 6e 74 20 68 61 73 20 6f 76  e content has ov
9550: 65 72 66 6c 6f 77 65 64 2e 0a 3c 6c 69 3e 41 20  erflowed..<li>A 
9560: 70 61 67 65 20 69 6e 20 61 6e 20 6f 76 65 72 66  page in an overf
9570: 6c 6f 77 20 63 68 61 69 6e 0a 6f 74 68 65 72 20  low chain.other 
9580: 74 68 61 6e 20 74 68 65 20 66 69 72 73 74 20 70  than the first p
9590: 61 67 65 2e 20 20 54 68 65 20 70 61 67 65 20 6e  age.  The page n
95a0: 75 6d 62 65 72 20 69 73 20 74 68 65 20 70 72 69  umber is the pri
95b0: 6f 72 20 70 61 67 65 20 6f 66 20 74 68 65 0a 6f  or page of the.o
95c0: 76 65 72 66 6c 6f 77 20 63 68 61 69 6e 2e 0a 3c  verflow chain..<
95d0: 6c 69 3e 41 20 6e 6f 6e 2d 72 6f 6f 74 20 62 2d  li>A non-root b-
95e0: 74 72 65 65 20 70 61 67 65 2e 20 20 54 68 65 0a  tree page.  The.
95f0: 70 61 67 65 20 6e 75 6d 62 65 72 20 69 73 20 74  page number is t
9600: 68 65 20 70 61 72 65 6e 74 20 62 2d 74 72 65 65  he parent b-tree
9610: 20 70 61 67 65 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70   page..</ol>..<p
9620: 3e 5e 49 6e 20 61 6e 79 20 64 61 74 61 62 61 73  >^In any databas
9630: 65 20 66 69 6c 65 20 74 68 61 74 20 63 6f 6e 74  e file that cont
9640: 61 69 6e 73 20 70 74 72 6d 61 70 20 70 61 67 65  ains ptrmap page
9650: 73 2c 20 61 6c 6c 20 62 2d 74 72 65 65 20 72 6f  s, all b-tree ro
9660: 6f 74 20 70 61 67 65 73 20 0a 6d 75 73 74 20 63  ot pages .must c
9670: 6f 6d 65 20 62 65 66 6f 72 65 20 61 6e 79 20 6e  ome before any n
9680: 6f 6e 2d 72 6f 6f 74 20 62 2d 74 72 65 65 20 70  on-root b-tree p
9690: 61 67 65 2c 20 63 65 6c 6c 20 70 61 79 6c 6f 61  age, cell payloa
96a0: 64 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 2c  d overflow page,
96b0: 20 6f 72 0a 66 72 65 65 6c 69 73 74 20 70 61 67   or.freelist pag
96c0: 65 2e 20 20 54 68 69 73 20 72 65 73 74 72 69 63  e.  This restric
96d0: 74 69 6f 6e 20 65 6e 73 75 72 65 73 20 74 68 61  tion ensures tha
96e0: 74 20 61 20 72 6f 6f 74 20 70 61 67 65 20 77 69  t a root page wi
96f0: 6c 6c 20 6e 65 76 65 72 0a 62 65 20 6d 6f 76 65  ll never.be move
9700: 64 20 64 75 72 69 6e 67 20 61 6e 20 61 75 74 6f  d during an auto
9710: 2d 76 61 63 75 75 6d 20 6f 72 20 69 6e 63 72 65  -vacuum or incre
9720: 6d 65 6e 74 61 6c 2d 76 61 63 75 75 6d 2e 20 20  mental-vacuum.  
9730: 54 68 65 20 61 75 74 6f 2d 76 61 63 75 75 6d 0a  The auto-vacuum.
9740: 6c 6f 67 69 63 20 64 6f 65 73 20 6e 6f 74 20 6b  logic does not k
9750: 6e 6f 77 20 68 6f 77 20 74 6f 20 75 70 64 61 74  now how to updat
9760: 65 20 74 68 65 20 72 6f 6f 74 5f 70 61 67 65 20  e the root_page 
9770: 66 69 65 6c 64 20 6f 66 20 74 68 65 20 73 71 6c  field of the sql
9780: 69 74 65 5f 6d 61 73 74 65 72 0a 74 61 62 6c 65  ite_master.table
9790: 20 61 6e 64 20 73 6f 20 69 74 20 69 73 20 6e 65   and so it is ne
97a0: 63 65 73 73 61 72 79 20 74 6f 20 70 72 65 76 65  cessary to preve
97b0: 6e 74 20 72 6f 6f 74 20 70 61 67 65 73 20 66 72  nt root pages fr
97c0: 6f 6d 20 62 65 69 6e 67 20 6d 6f 76 65 64 0a 64  om being moved.d
97d0: 75 72 69 6e 67 20 61 6e 20 61 75 74 6f 2d 76 61  uring an auto-va
97e0: 63 75 75 6d 20 69 6e 20 6f 72 64 65 72 20 74 6f  cuum in order to
97f0: 20 70 72 65 73 65 72 76 65 20 74 68 65 20 69 6e   preserve the in
9800: 74 65 67 72 69 74 79 20 6f 66 20 74 68 65 0a 73  tegrity of the.s
9810: 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62  qlite_master tab
9820: 6c 65 2e 20 20 5e 52 6f 6f 74 20 70 61 67 65 73  le.  ^Root pages
9830: 20 61 72 65 20 6d 6f 76 65 64 20 74 6f 20 74 68   are moved to th
9840: 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74  e beginning of t
9850: 68 65 0a 64 61 74 61 62 61 73 65 20 66 69 6c 65  he.database file
9860: 20 62 79 20 74 68 65 20 43 52 45 41 54 45 20 54   by the CREATE T
9870: 41 42 4c 45 2c 20 43 52 45 41 54 45 20 49 4e 44  ABLE, CREATE IND
9880: 45 58 2c 20 44 52 4f 50 20 54 41 42 4c 45 2c 20  EX, DROP TABLE, 
9890: 61 6e 64 0a 44 52 4f 50 20 49 4e 44 45 58 20 6f  and.DROP INDEX o
98a0: 70 65 72 61 74 69 6f 6e 73 2e 3c 2f 70 3e 0a 0a  perations.</p>..
98b0: 3c 68 32 3e 32 2e 30 20 53 63 68 65 6d 61 20 4c  <h2>2.0 Schema L
98c0: 61 79 65 72 3c 2f 68 32 3e 0a 0a 3c 70 3e 54 68  ayer</h2>..<p>Th
98d0: 65 20 66 6f 72 65 67 6f 69 6e 67 20 74 65 78 74  e foregoing text
98e0: 20 64 65 73 63 72 69 62 65 73 20 6c 6f 77 2d 6c   describes low-l
98f0: 65 76 65 6c 20 61 73 70 65 63 74 73 20 6f 66 20  evel aspects of 
9900: 74 68 65 20 53 51 4c 69 74 65 20 66 69 6c 65 0a  the SQLite file.
9910: 66 6f 72 6d 61 74 2e 20 20 54 68 65 20 62 2d 74  format.  The b-t
9920: 72 65 65 20 6d 65 63 68 61 6e 69 73 6d 20 70 72  ree mechanism pr
9930: 6f 76 69 64 65 73 20 61 20 70 6f 77 65 72 66 75  ovides a powerfu
9940: 6c 20 61 6e 64 20 65 66 66 69 63 69 65 6e 74 20  l and efficient 
9950: 6d 65 61 6e 73 20 6f 66 0a 61 63 63 65 73 73 69  means of.accessi
9960: 6e 67 20 61 20 6c 61 72 67 65 20 64 61 74 61 20  ng a large data 
9970: 73 65 74 2e 20 20 54 68 69 73 20 73 65 63 74 69  set.  This secti
9980: 6f 6e 20 77 69 6c 6c 20 64 65 73 63 72 69 62 65  on will describe
9990: 20 68 6f 77 20 74 68 65 0a 6c 6f 77 2d 6c 65 76   how the.low-lev
99a0: 65 6c 20 62 2d 74 72 65 65 20 6c 61 79 65 72 20  el b-tree layer 
99b0: 69 73 20 75 73 65 64 20 74 6f 20 69 6d 70 6c 65  is used to imple
99c0: 6d 65 6e 74 20 68 69 67 68 65 72 2d 6c 65 76 65  ment higher-leve
99d0: 6c 20 53 51 4c 0a 63 61 70 61 62 69 6c 69 74 69  l SQL.capabiliti
99e0: 65 73 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  es.</p>..<tcl>hd
99f0: 5f 66 72 61 67 6d 65 6e 74 20 72 65 63 6f 72 64  _fragment record
9a00: 5f 66 6f 72 6d 61 74 20 7b 72 65 63 6f 72 64 20  _format {record 
9a10: 66 6f 72 6d 61 74 7d 3c 2f 74 63 6c 3e 0a 3c 68  format}</tcl>.<h
9a20: 33 3e 32 2e 31 20 52 65 63 6f 72 64 20 46 6f 72  3>2.1 Record For
9a30: 6d 61 74 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65  mat</h3>..<p>The
9a40: 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61 20 74 61   content of a ta
9a50: 62 6c 65 20 62 2d 74 72 65 65 20 6c 65 61 66 20  ble b-tree leaf 
9a60: 70 61 67 65 20 61 6e 64 20 74 68 65 20 6b 65 79  page and the key
9a70: 0a 6f 66 20 61 6e 79 20 69 6e 64 65 78 20 62 2d  .of any index b-
9a80: 74 72 65 65 20 70 61 67 65 20 77 61 73 20 63 68  tree page was ch
9a90: 61 72 61 63 74 65 72 69 7a 65 64 20 61 62 6f 76  aracterized abov
9aa0: 65 0a 61 73 20 61 6e 20 61 72 62 69 74 72 61 72  e.as an arbitrar
9ab0: 79 20 73 65 71 75 65 6e 63 65 20 6f 66 20 62 79  y sequence of by
9ac0: 74 65 73 2e 0a 54 68 65 20 70 72 69 6f 72 20 64  tes..The prior d
9ad0: 69 73 63 75 73 73 69 6f 6e 20 6d 65 6e 74 69 6f  iscussion mentio
9ae0: 6e 65 64 20 6f 6e 65 20 6b 65 79 20 62 65 69 6e  ned one key bein
9af0: 67 20 6c 65 73 73 20 74 68 61 6e 20 61 6e 6f 74  g less than anot
9b00: 68 65 72 2c 20 62 75 74 0a 64 69 64 20 6e 6f 74  her, but.did not
9b10: 20 64 65 66 69 6e 65 20 77 68 61 74 20 22 6c 65   define what "le
9b20: 73 73 20 74 68 61 6e 22 20 6d 65 61 6e 74 2e 20  ss than" meant. 
9b30: 20 54 68 65 20 63 75 72 72 65 6e 74 20 73 65 63   The current sec
9b40: 74 69 6f 6e 20 77 69 6c 6c 20 61 64 64 72 65 73  tion will addres
9b50: 73 0a 74 68 65 73 65 20 6f 6d 69 73 73 69 6f 6e  s.these omission
9b60: 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 50 61 79 6c 6f  s.</p>..<p>Paylo
9b70: 61 64 2c 20 65 69 74 68 65 72 20 74 61 62 6c 65  ad, either table
9b80: 20 63 6f 6e 74 65 6e 74 20 6f 72 20 69 6e 64 65   content or inde
9b90: 78 20 6b 65 79 73 2c 20 69 73 20 61 6c 77 61 79  x keys, is alway
9ba0: 73 20 69 6e 20 74 68 65 20 22 72 65 63 6f 72 64  s in the "record
9bb0: 0a 66 6f 72 6d 61 74 22 2e 20 20 54 68 65 20 72  .format".  The r
9bc0: 65 63 6f 72 64 20 66 6f 72 6d 61 74 20 64 65 66  ecord format def
9bd0: 69 6e 65 73 20 61 20 73 65 71 75 65 6e 63 65 20  ines a sequence 
9be0: 6f 66 20 76 61 6c 75 65 73 20 63 6f 72 72 65 73  of values corres
9bf0: 70 6f 6e 64 69 6e 67 0a 74 6f 20 63 6f 6c 75 6d  ponding.to colum
9c00: 6e 73 20 69 6e 20 61 20 74 61 62 6c 65 20 6f 72  ns in a table or
9c10: 20 69 6e 64 65 78 2e 20 20 54 68 65 20 72 65 63   index.  The rec
9c20: 6f 72 64 20 66 6f 72 6d 61 74 20 73 70 65 63 69  ord format speci
9c30: 66 69 65 73 20 74 68 65 20 6e 75 6d 62 65 72 0a  fies the number.
9c40: 6f 66 20 63 6f 6c 75 6d 6e 73 2c 20 74 68 65 20  of columns, the 
9c50: 64 61 74 61 74 79 70 65 20 6f 66 20 65 61 63 68  datatype of each
9c60: 20 63 6f 6c 75 6d 6e 2c 20 61 6e 64 20 74 68 65   column, and the
9c70: 20 63 6f 6e 74 65 6e 74 20 6f 66 20 65 61 63 68   content of each
9c80: 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 3e 0a 0a 3c 70   column.</p>..<p
9c90: 3e 54 68 65 20 72 65 63 6f 72 64 20 66 6f 72 6d  >The record form
9ca0: 61 74 20 6d 61 6b 65 73 20 65 78 74 65 6e 73 69  at makes extensi
9cb0: 76 65 20 75 73 65 20 6f 66 20 74 68 65 20 0a 5b  ve use of the .[
9cc0: 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20  variable-length 
9cd0: 69 6e 74 65 67 65 72 5d 20 6f 72 20 5b 76 61 72  integer] or [var
9ce0: 69 6e 74 5d 0a 72 65 70 72 65 73 65 6e 74 61 74  int].representat
9cf0: 69 6f 6e 20 6f 66 20 36 34 2d 62 69 74 20 73 69  ion of 64-bit si
9d00: 67 6e 65 64 20 69 6e 74 65 67 65 72 73 20 64 65  gned integers de
9d10: 66 69 6e 65 64 20 61 62 6f 76 65 2e 3c 2f 70 3e  fined above.</p>
9d20: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
9d30: 6e 74 20 73 65 72 69 61 6c 74 79 70 65 20 7b 73  nt serialtype {s
9d40: 65 72 69 61 6c 20 74 79 70 65 7d 20 7b 73 65 72  erial type} {ser
9d50: 69 61 6c 20 74 79 70 65 73 7d 3c 2f 74 63 6c 3e  ial types}</tcl>
9d60: 0a 3c 70 3e 41 20 72 65 63 6f 72 64 20 63 6f 6e  .<p>A record con
9d70: 74 61 69 6e 73 20 61 20 68 65 61 64 65 72 20 61  tains a header a
9d80: 6e 64 20 61 20 62 6f 64 79 2c 20 69 6e 20 74 68  nd a body, in th
9d90: 61 74 20 6f 72 64 65 72 2e 20 20 0a 5e 28 54 68  at order.  .^(Th
9da0: 65 20 68 65 61 64 65 72 20 62 65 67 69 6e 73 20  e header begins 
9db0: 77 69 74 68 20 61 20 73 69 6e 67 6c 65 20 76 61  with a single va
9dc0: 72 69 6e 74 20 77 68 69 63 68 20 64 65 74 65 72  rint which deter
9dd0: 6d 69 6e 65 73 20 74 68 65 20 74 6f 74 61 6c 20  mines the total 
9de0: 6e 75 6d 62 65 72 0a 6f 66 20 62 79 74 65 73 20  number.of bytes 
9df0: 69 6e 20 74 68 65 20 68 65 61 64 65 72 2e 20 20  in the header.  
9e00: 54 68 65 20 76 61 72 69 6e 74 20 76 61 6c 75 65  The varint value
9e10: 20 69 73 20 74 68 65 20 73 69 7a 65 20 6f 66 20   is the size of 
9e20: 74 68 65 20 68 65 61 64 65 72 20 69 6e 0a 62 79  the header in.by
9e30: 74 65 73 20 69 6e 63 6c 75 64 69 6e 67 20 74 68  tes including th
9e40: 65 20 73 69 7a 65 20 76 61 72 69 6e 74 20 69 74  e size varint it
9e50: 73 65 6c 66 2e 29 5e 20 20 5e 46 6f 6c 6c 6f 77  self.)^  ^Follow
9e60: 69 6e 67 20 74 68 65 20 73 69 7a 65 20 76 61 72  ing the size var
9e70: 69 6e 74 20 61 72 65 0a 6f 6e 65 20 6f 72 20 6d  int are.one or m
9e80: 6f 72 65 20 61 64 64 69 74 69 6f 6e 61 6c 20 76  ore additional v
9e90: 61 72 69 6e 74 73 2c 20 6f 6e 65 20 70 65 72 20  arints, one per 
9ea0: 63 6f 6c 75 6d 6e 2e 20 20 54 68 65 73 65 20 61  column.  These a
9eb0: 64 64 69 74 69 6f 6e 61 6c 20 76 61 72 69 6e 74  dditional varint
9ec0: 73 0a 61 72 65 20 63 61 6c 6c 65 64 20 22 73 65  s.are called "se
9ed0: 72 69 61 6c 20 74 79 70 65 22 20 6e 75 6d 62 65  rial type" numbe
9ee0: 72 73 20 61 6e 64 0a 64 65 74 65 72 6d 69 6e 65  rs and.determine
9ef0: 20 74 68 65 20 64 61 74 61 74 79 70 65 20 6f 66   the datatype of
9f00: 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2c 20 61 63   each column, ac
9f10: 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 65 20 66  cording to the f
9f20: 6f 6c 6c 6f 77 69 6e 67 20 63 68 61 72 74 3a 3c  ollowing chart:<
9f30: 2f 70 3e 0a 0a 3c 63 65 6e 74 65 72 3e 0a 5e 28  /p>..<center>.^(
9f40: 3c 69 3e 53 65 72 69 61 6c 20 54 79 70 65 20 43  <i>Serial Type C
9f50: 6f 64 65 73 20 4f 66 20 54 68 65 20 52 65 63 6f  odes Of The Reco
9f60: 72 64 20 46 6f 72 6d 61 74 3c 2f 69 3e 3c 62 72  rd Format</i><br
9f70: 3e 0a 3c 74 61 62 6c 65 20 77 69 64 74 68 3d 22  >.<table width="
9f80: 38 30 25 22 20 62 6f 72 64 65 72 3d 31 3e 0a 3c  80%" border=1>.<
9f90: 74 72 3e 3c 74 68 3e 53 65 72 69 61 6c 20 54 79  tr><th>Serial Ty
9fa0: 70 65 3c 74 68 3e 43 6f 6e 74 65 6e 74 20 53 69  pe<th>Content Si
9fb0: 7a 65 3c 74 68 3e 4d 65 61 6e 69 6e 67 0a 3c 74  ze<th>Meaning.<t
9fc0: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
9fd0: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 30 3c   align=center>0<
9fe0: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
9ff0: 69 67 6e 3d 63 65 6e 74 65 72 3e 30 3c 74 64 20  ign=center>0<td 
a000: 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 4e 55 4c 4c  align=left>.NULL
a010: 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d  .<tr><td valign=
a020: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
a030: 3e 31 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  >1<td valign=top
a040: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 3c   align=center>1<
a050: 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 38  td align=left>.8
a060: 2d 62 69 74 20 74 77 6f 73 2d 63 6f 6d 70 6c 65  -bit twos-comple
a070: 6d 65 6e 74 20 69 6e 74 65 67 65 72 0a 3c 74 72  ment integer.<tr
a080: 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
a090: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32 3c 74  align=center>2<t
a0a0: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
a0b0: 67 6e 3d 63 65 6e 74 65 72 3e 32 3c 74 64 20 61  gn=center>2<td a
a0c0: 6c 69 67 6e 3d 6c 65 66 74 3e 0a 42 69 67 2d 65  lign=left>.Big-e
a0d0: 6e 64 69 61 6e 20 31 36 2d 62 69 74 20 74 77 6f  ndian 16-bit two
a0e0: 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 74  s-complement int
a0f0: 65 67 65 72 0a 3c 74 72 3e 3c 74 64 20 76 61 6c  eger.<tr><td val
a100: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
a110: 6e 74 65 72 3e 33 3c 74 64 20 76 61 6c 69 67 6e  nter>3<td valign
a120: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
a130: 72 3e 33 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66  r>3<td align=lef
a140: 74 3e 0a 42 69 67 2d 65 6e 64 69 61 6e 20 32 34  t>.Big-endian 24
a150: 2d 62 69 74 20 74 77 6f 73 2d 63 6f 6d 70 6c 65  -bit twos-comple
a160: 6d 65 6e 74 20 69 6e 74 65 67 65 72 0a 3c 74 72  ment integer.<tr
a170: 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
a180: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 3c 74  align=center>4<t
a190: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
a1a0: 67 6e 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20 61  gn=center>4<td a
a1b0: 6c 69 67 6e 3d 6c 65 66 74 3e 0a 42 69 67 2d 65  lign=left>.Big-e
a1c0: 6e 64 69 61 6e 20 33 32 2d 62 69 74 20 74 77 6f  ndian 32-bit two
a1d0: 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 74  s-complement int
a1e0: 65 67 65 72 0a 3c 74 72 3e 3c 74 64 20 76 61 6c  eger.<tr><td val
a1f0: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
a200: 6e 74 65 72 3e 35 3c 74 64 20 76 61 6c 69 67 6e  nter>5<td valign
a210: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
a220: 72 3e 36 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66  r>6<td align=lef
a230: 74 3e 0a 42 69 67 2d 65 6e 64 69 61 6e 20 34 38  t>.Big-endian 48
a240: 2d 62 69 74 20 74 77 6f 73 2d 63 6f 6d 70 6c 65  -bit twos-comple
a250: 6d 65 6e 74 20 69 6e 74 65 67 65 72 0a 3c 74 72  ment integer.<tr
a260: 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
a270: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 36 3c 74  align=center>6<t
a280: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
a290: 67 6e 3d 63 65 6e 74 65 72 3e 38 3c 74 64 20 61  gn=center>8<td a
a2a0: 6c 69 67 6e 3d 6c 65 66 74 3e 0a 42 69 67 2d 65  lign=left>.Big-e
a2b0: 6e 64 69 61 6e 20 36 34 2d 62 69 74 20 74 77 6f  ndian 64-bit two
a2c0: 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 74  s-complement int
a2d0: 65 67 65 72 0a 3c 74 72 3e 3c 74 64 20 76 61 6c  eger.<tr><td val
a2e0: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
a2f0: 6e 74 65 72 3e 37 3c 74 64 20 76 61 6c 69 67 6e  nter>7<td valign
a300: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
a310: 72 3e 38 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66  r>8<td align=lef
a320: 74 3e 0a 42 69 67 2d 65 6e 64 69 61 6e 20 49 45  t>.Big-endian IE
a330: 45 45 20 37 35 34 2d 32 30 30 38 20 36 34 2d 62  EE 754-2008 64-b
a340: 69 74 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e  it floating poin
a350: 74 20 6e 75 6d 62 65 72 0a 3c 74 72 3e 3c 74 64  t number.<tr><td
a360: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
a370: 6e 3d 63 65 6e 74 65 72 3e 38 3c 74 64 20 76 61  n=center>8<td va
a380: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
a390: 65 6e 74 65 72 3e 30 3c 74 64 20 61 6c 69 67 6e  enter>0<td align
a3a0: 3d 6c 65 66 74 3e 0a 49 6e 74 65 67 65 72 20 63  =left>.Integer c
a3b0: 6f 6e 73 74 61 6e 74 20 30 2e 20 20 4f 6e 6c 79  onstant 0.  Only
a3c0: 20 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 73   available for s
a3d0: 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 34 20 61  chema format 4 a
a3e0: 6e 64 20 68 69 67 68 65 72 2e 0a 3c 74 72 3e 3c  nd higher..<tr><
a3f0: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
a400: 69 67 6e 3d 63 65 6e 74 65 72 3e 39 3c 74 64 20  ign=center>9<td 
a410: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
a420: 3d 63 65 6e 74 65 72 3e 30 3c 74 64 20 61 6c 69  =center>0<td ali
a430: 67 6e 3d 6c 65 66 74 3e 0a 49 6e 74 65 67 65 72  gn=left>.Integer
a440: 20 63 6f 6e 73 74 61 6e 74 20 31 2e 20 20 4f 6e   constant 1.  On
a450: 6c 79 20 61 76 61 69 6c 61 62 6c 65 20 66 6f 72  ly available for
a460: 20 73 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 34   schema format 4
a470: 20 61 6e 64 20 68 69 67 68 65 72 2e 0a 3c 74 72   and higher..<tr
a480: 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
a490: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 30 2c  align=center>10,
a4a0: 31 31 0a 20 20 20 20 3c 74 64 20 76 61 6c 69 67  11.    <td valig
a4b0: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
a4c0: 65 72 3e 26 6e 62 73 70 3b 3c 74 64 20 61 6c 69  er>&nbsp;<td ali
a4d0: 67 6e 3d 6c 65 66 74 3e 0a 3c 69 3e 4e 6f 74 20  gn=left>.<i>Not 
a4e0: 75 73 65 64 2e 20 20 52 65 73 65 72 76 65 64 20  used.  Reserved 
a4f0: 66 6f 72 20 65 78 70 61 6e 73 69 6f 6e 2e 3c 2f  for expansion.</
a500: 69 3e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  i>.<tr><td valig
a510: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
a520: 65 72 3e 4e 26 23 78 32 32 36 35 3b 31 32 20 61  er>N&#x2265;12 a
a530: 6e 64 20 65 76 65 6e 0a 20 20 20 20 3c 74 64 20  nd even.    <td 
a540: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
a550: 3d 63 65 6e 74 65 72 3e 28 4e 2d 31 32 29 2f 32  =center>(N-12)/2
a560: 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a  <td align=left>.
a570: 41 20 42 4c 4f 42 20 74 68 61 74 20 69 73 20 28  A BLOB that is (
a580: 4e 2d 31 32 29 2f 32 20 62 79 74 65 73 20 69 6e  N-12)/2 bytes in
a590: 20 6c 65 6e 67 74 68 0a 3c 74 72 3e 3c 74 64 20   length.<tr><td 
a5a0: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
a5b0: 3d 63 65 6e 74 65 72 3e 4e 26 23 78 32 32 36 35  =center>N&#x2265
a5c0: 3b 31 33 20 61 6e 64 20 6f 64 64 0a 20 20 20 20  ;13 and odd.    
a5d0: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
a5e0: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 28 4e 2d 31  lign=center>(N-1
a5f0: 33 29 2f 32 3c 74 64 20 61 6c 69 67 6e 3d 6c 65  3)/2<td align=le
a600: 66 74 3e 0a 41 20 73 74 72 69 6e 67 20 69 6e 20  ft>.A string in 
a610: 74 68 65 20 64 61 74 61 62 61 73 65 20 65 6e 63  the database enc
a620: 6f 64 69 6e 67 20 61 6e 64 20 28 4e 2d 31 33 29  oding and (N-13)
a630: 2f 32 20 62 79 74 65 73 20 69 6e 20 6c 65 6e 67  /2 bytes in leng
a640: 74 68 2e 0a 54 68 65 20 6e 75 6c 20 74 65 72 6d  th..The nul term
a650: 69 6e 61 74 6f 72 20 69 73 20 6f 6d 69 74 74 65  inator is omitte
a660: 64 2e 0a 3c 2f 74 61 62 6c 65 3e 3c 2f 63 65 6e  d..</table></cen
a670: 74 65 72 3e 29 5e 0a 0a 3c 70 3e 4e 6f 74 65 20  ter>)^..<p>Note 
a680: 74 68 61 74 20 62 65 63 61 75 73 65 20 6f 66 20  that because of 
a690: 74 68 65 20 77 61 79 20 76 61 72 69 6e 74 73 20  the way varints 
a6a0: 61 72 65 20 64 65 66 69 6e 65 64 2c 20 74 68 65  are defined, the
a6b0: 20 68 65 61 64 65 72 20 73 69 7a 65 20 76 61 72   header size var
a6c0: 69 6e 74 0a 61 6e 64 20 73 65 72 69 61 6c 20 74  int.and serial t
a6d0: 79 70 65 20 76 61 72 69 6e 74 73 20 77 69 6c 6c  ype varints will
a6e0: 20 75 73 75 61 6c 6c 79 20 63 6f 6e 73 69 73 74   usually consist
a6f0: 20 6f 66 20 61 20 73 69 6e 67 6c 65 20 62 79 74   of a single byt
a700: 65 2e 20 20 54 68 65 0a 73 65 72 69 61 6c 20 74  e.  The.serial t
a710: 79 70 65 20 76 61 72 69 6e 74 73 20 66 6f 72 20  ype varints for 
a720: 6c 61 72 67 65 20 73 74 72 69 6e 67 73 20 61 6e  large strings an
a730: 64 20 42 4c 4f 42 73 20 6d 69 67 68 74 20 65 78  d BLOBs might ex
a740: 74 65 6e 64 20 74 6f 20 74 77 6f 20 6f 72 20 74  tend to two or t
a750: 68 72 65 65 0a 62 79 74 65 20 76 61 72 69 6e 74  hree.byte varint
a760: 73 2c 20 62 75 74 20 74 68 61 74 20 69 73 20 74  s, but that is t
a770: 68 65 20 65 78 63 65 70 74 69 6f 6e 20 72 61 74  he exception rat
a780: 68 65 72 20 74 68 61 6e 20 74 68 65 20 72 75 6c  her than the rul
a790: 65 2e 20 0a 54 68 65 20 76 61 72 69 6e 74 20 66  e. .The varint f
a7a0: 6f 72 6d 61 74 20 69 73 20 76 65 72 79 20 65 66  ormat is very ef
a7b0: 66 69 63 69 65 6e 74 20 61 74 20 63 6f 64 69 6e  ficient at codin
a7c0: 67 20 74 68 65 20 72 65 63 6f 72 64 20 68 65 61  g the record hea
a7d0: 64 65 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  der.</p>..<p>The
a7e0: 20 76 61 6c 75 65 73 20 66 6f 72 20 65 61 63 68   values for each
a7f0: 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 72   column in the r
a800: 65 63 6f 72 64 20 69 6d 6d 65 64 69 61 74 65 6c  ecord immediatel
a810: 79 20 66 6f 6c 6c 6f 77 20 74 68 65 20 68 65 61  y follow the hea
a820: 64 65 72 2e 0a 5e 28 4e 6f 74 65 20 74 68 61 74  der..^(Note that
a830: 20 66 6f 72 20 73 65 72 69 61 6c 20 74 79 70 65   for serial type
a840: 73 20 30 2c 20 38 2c 20 39 2c 20 31 32 2c 20 61  s 0, 8, 9, 12, a
a850: 6e 64 20 31 33 2c 20 74 68 65 20 76 61 6c 75 65  nd 13, the value
a860: 20 69 73 20 7a 65 72 6f 20 62 79 74 65 73 20 69   is zero bytes i
a870: 6e 0a 6c 65 6e 67 74 68 2e 20 20 49 66 20 61 6c  n.length.  If al
a880: 6c 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 6f 66  l columns are of
a890: 20 74 68 65 73 65 20 74 79 70 65 73 20 74 68 65   these types the
a8a0: 6e 20 74 68 65 20 62 6f 64 79 20 73 65 63 74 69  n the body secti
a8b0: 6f 6e 20 6f 66 20 74 68 65 0a 72 65 63 6f 72 64  on of the.record
a8c0: 20 69 73 20 65 6d 70 74 79 2e 29 5e 3c 2f 70 3e   is empty.)^</p>
a8d0: 0a 0a 3c 68 33 3e 32 2e 32 20 52 65 63 6f 72 64  ..<h3>2.2 Record
a8e0: 20 53 6f 72 74 20 4f 72 64 65 72 3c 2f 68 33 3e   Sort Order</h3>
a8f0: 0a 0a 3c 70 3e 54 68 65 20 6f 72 64 65 72 20 6f  ..<p>The order o
a900: 66 20 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e 64  f keys in an ind
a910: 65 78 20 62 2d 74 72 65 65 20 69 73 20 64 65 74  ex b-tree is det
a920: 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 73  ermined by the s
a930: 6f 72 74 20 6f 72 64 65 72 20 6f 66 0a 74 68 65  ort order of.the
a940: 20 72 65 63 6f 72 64 73 20 74 68 61 74 20 74 68   records that th
a950: 65 20 6b 65 79 73 20 72 65 70 72 65 73 65 6e 74  e keys represent
a960: 2e 20 20 52 65 63 6f 72 64 20 63 6f 6d 70 61 72  .  Record compar
a970: 69 73 6f 6e 20 70 72 6f 67 72 65 73 73 65 73 20  ison progresses 
a980: 63 6f 6c 75 6d 6e 0a 62 79 20 63 6f 6c 75 6d 6e  column.by column
a990: 2e 20 20 43 6f 6c 75 6d 6e 73 20 6f 66 20 61 20  .  Columns of a 
a9a0: 72 65 63 6f 72 64 20 61 72 65 20 65 78 61 6d 69  record are exami
a9b0: 6e 65 64 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f  ned from left to
a9c0: 20 72 69 67 68 74 2e 20 20 54 68 65 0a 66 69 72   right.  The.fir
a9d0: 73 74 20 70 61 69 72 20 6f 66 20 63 6f 6c 75 6d  st pair of colum
a9e0: 6e 73 20 74 68 61 74 20 61 72 65 20 6e 6f 74 20  ns that are not 
a9f0: 65 71 75 61 6c 20 64 65 74 65 72 6d 69 6e 65 73  equal determines
aa00: 20 74 68 65 20 72 65 6c 61 74 69 76 65 20 6f 72   the relative or
aa10: 64 65 72 0a 6f 66 20 74 68 65 20 74 77 6f 20 72  der.of the two r
aa20: 65 63 6f 72 64 73 2e 20 20 54 68 65 20 73 6f 72  ecords.  The sor
aa30: 74 20 6f 72 64 65 72 20 6f 66 20 69 6e 64 69 76  t order of indiv
aa40: 69 64 75 61 6c 20 63 6f 6c 75 6d 6e 73 20 69 73  idual columns is
aa50: 20 61 73 0a 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e   as.follows:</p>
aa60: 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 5e 4e 55 4c 4c  ..<ol>.<li>^NULL
aa70: 20 76 61 6c 75 65 73 20 28 73 65 72 69 61 6c 20   values (serial 
aa80: 74 79 70 65 20 30 29 20 73 6f 72 74 20 66 69 72  type 0) sort fir
aa90: 73 74 0a 3c 6c 69 3e 5e 4e 75 6d 65 72 69 63 20  st.<li>^Numeric 
aaa0: 76 61 6c 75 65 73 20 28 73 65 72 69 61 6c 20 74  values (serial t
aab0: 79 70 65 73 20 31 20 74 68 72 6f 75 67 68 20 39  ypes 1 through 9
aac0: 29 20 73 6f 72 74 20 6e 65 78 74 20 61 6e 64 20  ) sort next and 
aad0: 69 6e 20 6e 75 6d 65 72 69 63 20 6f 72 64 65 72  in numeric order
aae0: 0a 3c 6c 69 3e 5e 54 65 78 74 20 76 61 6c 75 65  .<li>^Text value
aaf0: 73 20 28 65 76 65 6e 20 73 65 72 69 61 6c 20 74  s (even serial t
ab00: 79 70 65 73 20 31 32 20 61 6e 64 20 6c 61 72 67  ypes 12 and larg
ab10: 65 72 29 20 73 6f 72 74 20 6e 65 78 74 20 69 6e  er) sort next in
ab20: 20 74 68 65 20 6f 72 64 65 72 0a 20 20 20 20 64   the order.    d
ab30: 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65  etermined by the
ab40: 20 63 6f 6c 75 6d 6e 73 20 5b 63 6f 6c 6c 61 74   columns [collat
ab50: 69 6e 67 20 66 75 6e 63 74 69 6f 6e 5d 0a 3c 6c  ing function].<l
ab60: 69 3e 5e 42 4c 4f 42 20 76 61 6c 75 65 73 20 28  i>^BLOB values (
ab70: 6f 64 64 20 73 65 72 69 61 6c 20 74 79 70 65 73  odd serial types
ab80: 20 31 33 20 61 6e 64 20 6c 61 72 67 65 72 29 20   13 and larger) 
ab90: 73 6f 72 74 20 6c 61 73 74 20 69 6e 20 6f 72 64  sort last in ord
aba0: 65 72 20 0a 20 20 20 20 64 65 74 65 72 6d 69 6e  er .    determin
abb0: 65 64 20 62 79 20 6d 65 6d 63 6d 70 28 29 2e 0a  ed by memcmp()..
abc0: 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 41 20 5b 63 6f 6c  </ol>..<p>A [col
abd0: 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 5d  lating function]
abe0: 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   for each column
abf0: 20 69 73 20 6e 65 63 65 73 73 61 72 79 20 69 6e   is necessary in
ac00: 20 6f 72 64 65 72 20 74 6f 20 63 6f 6d 70 75 74   order to comput
ac10: 65 0a 74 68 65 20 6f 72 64 65 72 20 6f 66 20 74  e.the order of t
ac20: 65 78 74 20 66 69 65 6c 64 73 2e 20 20 5e 53 51  ext fields.  ^SQ
ac30: 4c 69 74 65 20 64 65 66 69 6e 65 73 20 74 68 72  Lite defines thr
ac40: 65 65 20 62 75 69 6c 74 2d 69 6e 20 63 6f 6c 6c  ee built-in coll
ac50: 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 73 3a  ating functions:
ac60: 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  .</p>..<blockquo
ac70: 74 65 3e 3c 74 61 62 6c 65 20 62 6f 72 64 65 72  te><table border
ac80: 3d 30 20 63 65 6c 6c 73 70 61 63 69 6e 67 3d 31  =0 cellspacing=1
ac90: 30 3e 0a 3c 74 72 3e 5e 3c 74 64 20 76 61 6c 69  0>.<tr>^<td vali
aca0: 67 6e 3d 74 6f 70 3e 42 49 4e 41 52 59 0a 20 20  gn=top>BINARY.  
acb0: 20 20 3c 74 64 3e 53 74 72 69 6e 67 73 20 61 72    <td>Strings ar
acc0: 65 20 63 6f 6d 70 61 72 65 64 20 62 79 74 65 20  e compared byte 
acd0: 62 79 20 62 79 74 65 20 75 73 69 6e 67 20 74 68  by byte using th
ace0: 65 20 6d 65 6d 63 6d 70 28 29 20 66 75 6e 63 74  e memcmp() funct
acf0: 69 6f 6e 0a 20 20 20 20 20 20 20 20 66 72 6f 6d  ion.        from
ad00: 20 74 68 65 20 73 74 61 6e 64 61 72 64 20 43 20   the standard C 
ad10: 6c 69 62 72 61 72 79 2e 0a 3c 74 72 3e 5e 3c 74  library..<tr>^<t
ad20: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 4e 4f 43  d valign=top>NOC
ad30: 41 53 45 0a 20 20 20 20 3c 74 64 3e 4c 69 6b 65  ASE.    <td>Like
ad40: 20 42 49 4e 41 52 59 20 65 78 63 65 70 74 20 74   BINARY except t
ad50: 68 61 74 20 75 70 70 65 72 63 61 73 65 20 41 53  hat uppercase AS
ad60: 43 49 49 20 63 68 61 72 61 63 74 65 72 73 20 28  CII characters (
ad70: 27 41 27 20 74 68 72 6f 75 67 68 20 27 5a 27 29  'A' through 'Z')
ad80: 0a 20 20 20 20 20 20 20 20 61 72 65 20 66 6f 6c  .        are fol
ad90: 64 65 64 20 69 6e 74 6f 20 74 68 65 69 72 20 6c  ded into their l
ada0: 6f 77 65 72 63 61 73 65 20 65 71 75 69 76 61 6c  owercase equival
adb0: 65 6e 74 73 20 70 72 69 6f 72 20 74 6f 20 72 75  ents prior to ru
adc0: 6e 6e 69 6e 67 20 74 68 65 0a 20 20 20 20 20 20  nning the.      
add0: 20 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 4e    comparison.  N
ade0: 6f 74 65 20 74 68 61 74 20 6f 6e 6c 79 20 41 53  ote that only AS
adf0: 43 49 49 20 63 68 61 72 61 63 74 65 72 73 20 61  CII characters a
ae00: 72 65 20 63 61 73 65 2d 66 6f 6c 64 65 64 2e 20  re case-folded. 
ae10: 20 5e 4e 4f 43 41 53 45 0a 20 20 20 20 20 20 20   ^NOCASE.       
ae20: 20 64 6f 65 73 20 6e 6f 74 20 69 6d 70 6c 65 6d   does not implem
ae30: 65 6e 74 20 61 20 67 65 6e 65 72 61 6c 20 70 75  ent a general pu
ae40: 72 70 6f 73 65 20 75 6e 69 63 6f 64 65 20 63 61  rpose unicode ca
ae50: 73 65 6c 65 73 73 20 63 6f 6d 70 61 72 69 73 6f  seless compariso
ae60: 6e 2e 0a 3c 74 72 3e 5e 3c 74 64 20 76 61 6c 69  n..<tr>^<td vali
ae70: 67 6e 3d 74 6f 70 3e 52 54 52 49 4d 0a 20 20 20  gn=top>RTRIM.   
ae80: 20 3c 74 64 3e 4c 69 6b 65 20 42 49 4e 41 52 59   <td>Like BINARY
ae90: 20 65 78 63 65 70 74 20 74 68 61 74 20 73 70 61   except that spa
aea0: 63 65 73 20 61 74 20 74 68 65 20 65 6e 64 20 6f  ces at the end o
aeb0: 66 20 74 68 65 20 73 74 72 69 6e 67 20 61 72 65  f the string are
aec0: 20 65 6c 69 64 65 64 0a 20 20 20 20 20 20 20 20   elided.        
aed0: 70 72 69 6f 72 20 74 6f 20 63 6f 6d 70 61 72 69  prior to compari
aee0: 73 6f 6e 2e 0a 3c 2f 74 61 62 6c 65 3e 3c 2f 62  son..</table></b
aef0: 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 5e  lockquote>..<p>^
af00: 41 64 64 69 74 69 6f 6e 61 6c 20 61 70 70 6c 69  Additional appli
af10: 63 61 74 69 6f 6e 2d 73 70 65 63 69 66 69 63 20  cation-specific 
af20: 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69  collating functi
af30: 6f 6e 73 20 63 61 6e 20 62 65 20 61 64 64 65 64  ons can be added
af40: 20 74 6f 0a 53 51 4c 69 74 65 20 75 73 69 6e 67   to.SQLite using
af50: 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 63 72   the [sqlite3_cr
af60: 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 29  eate_collation()
af70: 5d 20 69 6e 74 65 72 66 61 63 65 2e 3c 2f 70 3e  ] interface.</p>
af80: 0a 0a 3c 70 3e 5e 54 68 65 20 64 65 66 61 75 6c  ..<p>^The defaul
af90: 74 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63  t collating func
afa0: 74 69 6f 6e 20 66 6f 72 20 61 6c 6c 20 73 74 72  tion for all str
afb0: 69 6e 67 73 20 69 73 20 42 49 4e 41 52 59 2e 0a  ings is BINARY..
afc0: 5e 41 6c 74 65 72 6e 61 74 69 76 65 20 63 6f 6c  ^Alternative col
afd0: 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 73  lating functions
afe0: 20 66 6f 72 20 74 61 62 6c 65 20 63 6f 6c 75 6d   for table colum
aff0: 6e 73 20 63 61 6e 20 62 65 20 73 70 65 63 69 66  ns can be specif
b000: 69 65 64 20 69 6e 20 74 68 65 0a 5b 43 52 45 41  ied in the.[CREA
b010: 54 45 20 54 41 42 4c 45 5d 20 73 74 61 74 65 6d  TE TABLE] statem
b020: 65 6e 74 20 75 73 69 6e 67 20 74 68 65 20 43 4f  ent using the CO
b030: 4c 4c 41 54 45 20 63 6c 61 75 73 65 20 6f 6e 20  LLATE clause on 
b040: 74 68 65 20 5b 63 6f 6c 75 6d 6e 20 64 65 66 69  the [column defi
b050: 6e 69 74 69 6f 6e 5d 2e 0a 5e 57 68 65 6e 20 61  nition]..^When a
b060: 20 63 6f 6c 75 6d 6e 20 69 73 20 69 6e 64 65 78   column is index
b070: 65 64 2c 20 74 68 65 20 73 61 6d 65 20 63 6f 6c  ed, the same col
b080: 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20  lating function 
b090: 73 70 65 63 69 66 69 65 64 20 69 6e 20 74 68 65  specified in the
b0a0: 0a 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d 20  .[CREATE TABLE] 
b0b0: 73 74 61 74 65 6d 65 6e 74 20 69 73 20 75 73 65  statement is use
b0c0: 64 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e  d for the column
b0d0: 20 69 6e 20 74 68 65 20 69 6e 64 65 78 2c 20 62   in the index, b
b0e0: 79 20 64 65 66 61 75 6c 74 2c 0a 74 68 6f 75 67  y default,.thoug
b0f0: 68 20 74 68 69 73 20 63 61 6e 20 62 65 20 6f 76  h this can be ov
b100: 65 72 72 69 64 64 65 6e 20 75 73 69 6e 67 20 61  erridden using a
b110: 20 43 4f 4c 4c 41 54 45 20 63 6c 61 75 73 65 20   COLLATE clause 
b120: 69 6e 20 74 68 65 20 0a 5b 43 52 45 41 54 45 20  in the .[CREATE 
b130: 49 4e 44 45 58 5d 20 73 74 61 74 65 6d 65 6e 74  INDEX] statement
b140: 2e 0a 0a 3c 68 33 3e 32 2e 33 20 52 65 70 72 65  ...<h3>2.3 Repre
b150: 73 65 6e 74 61 74 69 6f 6e 20 4f 66 20 53 51 4c  sentation Of SQL
b160: 20 54 61 62 6c 65 73 3c 2f 68 33 3e 0a 0a 3c 70   Tables</h3>..<p
b170: 3e 45 61 63 68 20 6f 72 64 69 6e 61 72 79 20 53  >Each ordinary S
b180: 51 4c 20 74 61 62 6c 65 20 69 6e 20 74 68 65 20  QL table in the 
b190: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
b1a0: 69 73 20 72 65 70 72 65 73 65 6e 74 65 64 20 6f  is represented o
b1b0: 6e 20 64 69 73 6b 0a 62 79 20 61 20 74 61 62 6c  n disk.by a tabl
b1c0: 65 20 62 2d 74 72 65 65 2e 20 20 45 61 63 68 20  e b-tree.  Each 
b1d0: 65 6e 74 72 79 20 69 6e 20 74 68 65 20 74 61 62  entry in the tab
b1e0: 6c 65 20 62 2d 74 72 65 65 20 63 6f 72 72 65 73  le b-tree corres
b1f0: 70 6f 6e 64 73 20 74 6f 20 61 20 72 6f 77 0a 6f  ponds to a row.o
b200: 66 20 74 68 65 20 53 51 4c 20 74 61 62 6c 65 2e  f the SQL table.
b210: 20 20 54 68 65 20 5b 72 6f 77 69 64 5d 20 6f 66    The [rowid] of
b220: 20 74 68 65 20 53 51 4c 20 74 61 62 6c 65 20 69   the SQL table i
b230: 73 20 74 68 65 20 36 34 2d 62 69 74 20 73 69 67  s the 64-bit sig
b240: 6e 65 64 0a 69 6e 74 65 67 65 72 20 6b 65 79 20  ned.integer key 
b250: 66 6f 72 20 65 61 63 68 20 65 6e 74 72 79 20 69  for each entry i
b260: 6e 20 74 68 65 20 74 61 62 6c 65 20 62 2d 74 72  n the table b-tr
b270: 65 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  ee.</p>..<p>The 
b280: 63 6f 6e 74 65 6e 74 20 6f 66 20 65 61 63 68 20  content of each 
b290: 53 51 4c 20 74 61 62 6c 65 20 72 6f 77 20 69 73  SQL table row is
b2a0: 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 64   stored in the d
b2b0: 61 74 61 62 61 73 65 20 66 69 6c 65 20 62 79 0a  atabase file by.
b2c0: 66 69 72 73 74 20 63 6f 6d 62 69 6e 69 6e 67 20  first combining 
b2d0: 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 74 68  the values in th
b2e0: 65 20 76 61 72 69 6f 75 73 20 63 6f 6c 75 6d 6e  e various column
b2f0: 73 20 69 6e 74 6f 20 61 20 62 79 74 65 20 61 72  s into a byte ar
b300: 72 61 79 0a 69 6e 20 74 68 65 20 72 65 63 6f 72  ray.in the recor
b310: 64 20 66 6f 72 6d 61 74 2c 20 74 68 65 6e 20 73  d format, then s
b320: 74 6f 72 69 6e 67 20 74 68 61 74 20 62 79 74 65  toring that byte
b330: 20 61 72 72 61 79 20 61 73 20 74 68 65 20 70 61   array as the pa
b340: 79 6c 6f 61 64 20 69 6e 0a 61 6e 20 65 6e 74 72  yload in.an entr
b350: 79 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 62  y in the table b
b360: 2d 74 72 65 65 2e 20 20 5e 54 68 65 20 6f 72 64  -tree.  ^The ord
b370: 65 72 20 6f 66 20 76 61 6c 75 65 73 20 69 6e 20  er of values in 
b380: 74 68 65 20 72 65 63 6f 72 64 20 69 73 0a 74 68  the record is.th
b390: 65 20 73 61 6d 65 20 61 73 20 74 68 65 20 6f 72  e same as the or
b3a0: 64 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  der of columns i
b3b0: 6e 20 74 68 65 20 53 51 4c 20 74 61 62 6c 65 20  n the SQL table 
b3c0: 64 65 66 69 6e 69 74 69 6f 6e 2e 0a 5e 57 68 65  definition..^Whe
b3d0: 6e 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 74  n an SQL table t
b3e0: 68 61 74 20 69 6e 63 6c 75 64 65 73 20 61 6e 0a  hat includes an.
b3f0: 5b 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59  [INTEGER PRIMARY
b400: 20 4b 45 59 5d 20 63 6f 6c 75 6d 6e 20 28 77 68   KEY] column (wh
b410: 69 63 68 20 61 6c 69 61 73 65 73 20 74 68 65 20  ich aliases the 
b420: 5b 72 6f 77 69 64 5d 29 20 74 68 65 6e 20 74 68  [rowid]) then th
b430: 61 74 0a 63 6f 6c 75 6d 6e 20 61 70 70 65 61 72  at.column appear
b440: 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20  s in the record 
b450: 61 73 20 61 20 4e 55 4c 4c 20 76 61 6c 75 65 2e  as a NULL value.
b460: 20 20 5e 53 51 4c 69 74 65 20 77 69 6c 6c 20 61    ^SQLite will a
b470: 6c 77 61 79 73 20 75 73 65 0a 74 68 65 20 74 61  lways use.the ta
b480: 62 6c 65 20 62 2d 74 72 65 65 20 6b 65 79 20 72  ble b-tree key r
b490: 61 74 68 65 72 20 74 68 61 6e 20 74 68 65 20 4e  ather than the N
b4a0: 55 4c 4c 20 76 61 6c 75 65 20 77 68 65 6e 20 72  ULL value when r
b4b0: 65 66 65 72 65 6e 63 69 6e 67 20 74 68 65 0a 5b  eferencing the.[
b4c0: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
b4d0: 4b 45 59 5d 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 3e  KEY] column.</p>
b4e0: 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 5b 61 66  ..<p>^If the [af
b4f0: 66 69 6e 69 74 79 5d 20 6f 66 20 61 20 63 6f 6c  finity] of a col
b500: 75 6d 6e 20 69 73 20 52 45 41 4c 20 61 6e 64 20  umn is REAL and 
b510: 74 68 61 74 20 63 6f 6c 75 6d 6e 20 63 6f 6e 74  that column cont
b520: 61 69 6e 73 20 61 0a 76 61 6c 75 65 20 74 68 61  ains a.value tha
b530: 74 20 63 61 6e 20 62 65 20 63 6f 6e 76 65 72 74  t can be convert
b540: 65 64 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72  ed to an integer
b550: 20 77 69 74 68 6f 75 74 20 6c 6f 73 73 20 6f 66   without loss of
b560: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 28 69 66   information.(if
b570: 20 74 68 65 20 76 61 6c 75 65 20 63 6f 6e 74 61   the value conta
b580: 69 6e 73 20 6e 6f 20 66 72 61 63 74 69 6f 6e 61  ins no fractiona
b590: 6c 20 70 61 72 74 20 61 6e 64 20 69 73 20 6e 6f  l part and is no
b5a0: 74 20 74 6f 6f 20 6c 61 72 67 65 20 74 6f 20 62  t too large to b
b5b0: 65 0a 72 65 70 72 65 73 65 6e 74 65 64 20 61 73  e.represented as
b5c0: 20 61 6e 20 69 6e 74 65 67 65 72 29 20 74 68 65   an integer) the
b5d0: 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6d 61 79  n the column may
b5e0: 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68   be stored in th
b5f0: 65 20 72 65 63 6f 72 64 0a 61 73 20 61 6e 20 69  e record.as an i
b600: 6e 74 65 67 65 72 2e 20 20 5e 53 51 4c 69 74 65  nteger.  ^SQLite
b610: 20 77 69 6c 6c 20 63 6f 6e 76 65 72 74 20 74 68   will convert th
b620: 65 20 76 61 6c 75 65 20 62 61 63 6b 20 74 6f 20  e value back to 
b630: 66 6c 6f 61 74 69 6e 67 0a 70 6f 69 6e 74 20 77  floating.point w
b640: 68 65 6e 20 65 78 74 72 61 63 74 69 6e 67 20 69  hen extracting i
b650: 74 20 66 72 6f 6d 20 74 68 65 20 72 65 63 6f 72  t from the recor
b660: 64 2e 3c 2f 70 3e 0a 0a 0a 3c 68 33 3e 32 2e 34  d.</p>...<h3>2.4
b670: 20 52 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   Representation 
b680: 4f 66 20 53 51 4c 20 49 6e 64 69 63 65 73 3c 2f  Of SQL Indices</
b690: 68 33 3e 0a 0a 3c 70 3e 5e 45 61 63 68 20 53 51  h3>..<p>^Each SQ
b6a0: 4c 20 69 6e 64 65 78 2c 20 77 68 65 74 68 65 72  L index, whether
b6b0: 20 65 78 70 6c 69 63 69 74 6c 79 20 64 65 63 6c   explicitly decl
b6c0: 61 72 65 64 20 76 69 61 20 61 20 5b 43 52 45 41  ared via a [CREA
b6d0: 54 45 20 49 4e 44 45 58 5d 20 73 74 61 74 65 6d  TE INDEX] statem
b6e0: 65 6e 74 0a 6f 72 20 69 6d 70 6c 69 65 64 20 62  ent.or implied b
b6f0: 79 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73 74  y a UNIQUE const
b700: 72 61 69 6e 74 2c 20 63 6f 72 72 65 73 70 6f 6e  raint, correspon
b710: 64 73 20 74 6f 20 61 6e 20 69 6e 64 65 78 20 62  ds to an index b
b720: 2d 74 72 65 65 20 69 6e 20 74 68 65 0a 64 61 74  -tree in the.dat
b730: 61 62 61 73 65 20 66 69 6c 65 2e 0a 5e 54 68 65  abase file..^The
b740: 72 65 20 69 73 20 6f 6e 65 20 65 6e 74 72 79 20  re is one entry 
b750: 69 6e 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20  in index b-tree 
b760: 66 6f 72 20 65 61 63 68 20 72 6f 77 20 69 6e 20  for each row in 
b770: 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
b780: 67 20 74 61 62 6c 65 2e 0a 5e 54 68 65 20 6b 65  g table..^The ke
b790: 79 20 74 6f 20 61 6e 20 69 6e 64 65 78 20 62 2d  y to an index b-
b7a0: 74 72 65 65 20 69 73 0a 61 20 72 65 63 6f 72 64  tree is.a record
b7b0: 20 63 6f 6d 70 6f 73 65 64 20 6f 66 20 74 68 65   composed of the
b7c0: 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20 61 72   columns that ar
b7d0: 65 20 62 65 69 6e 67 20 69 6e 64 65 78 65 64 20  e being indexed 
b7e0: 66 6f 6c 6c 6f 77 65 64 20 62 79 20 74 68 65 0a  followed by the.
b7f0: 5b 72 6f 77 69 64 5d 20 6f 66 20 74 68 65 20 74  [rowid] of the t
b800: 61 62 6c 65 20 72 6f 77 2e 20 20 42 65 63 61 75  able row.  Becau
b810: 73 65 20 65 76 65 72 79 20 72 6f 77 20 69 6e 20  se every row in 
b820: 61 20 74 61 62 6c 65 20 68 61 73 20 61 20 75 6e  a table has a un
b830: 69 71 75 65 0a 72 6f 77 69 64 20 61 6e 64 20 61  ique.rowid and a
b840: 6c 6c 20 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e  ll keys in an in
b850: 64 65 78 20 63 6f 6e 74 61 69 6e 20 74 68 65 20  dex contain the 
b860: 72 6f 77 69 64 2c 20 61 6c 6c 20 6b 65 79 73 20  rowid, all keys 
b870: 69 6e 20 61 6e 20 69 6e 64 65 78 0a 61 72 65 20  in an index.are 
b880: 75 6e 69 71 75 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e  unique.</p>..<p>
b890: 5e 54 68 65 72 65 20 69 73 20 61 20 6f 6e 65 2d  ^There is a one-
b8a0: 74 6f 2d 6f 6e 65 20 6d 61 70 70 69 6e 67 20 62  to-one mapping b
b8b0: 65 74 77 65 65 6e 20 72 6f 77 73 20 69 6e 20 61  etween rows in a
b8c0: 20 74 61 62 6c 65 20 61 6e 64 0a 65 6e 74 72 69   table and.entri
b8d0: 65 73 20 69 6e 20 65 61 63 68 20 69 6e 64 65 78  es in each index
b8e0: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
b8f0: 20 74 68 61 74 20 74 61 62 6c 65 2e 0a 5e 43 6f   that table..^Co
b900: 72 72 65 73 70 6f 6e 64 69 6e 67 20 72 6f 77 73  rresponding rows
b910: 20 69 6e 74 20 74 68 65 20 69 6e 64 65 78 20 61   int the index a
b920: 6e 64 20 74 61 62 6c 65 20 62 2d 74 72 65 65 73  nd table b-trees
b930: 20 73 68 61 72 65 20 74 68 65 20 73 61 6d 65 20   share the same 
b940: 72 6f 77 69 64 0a 76 61 6c 75 65 2c 20 61 6e 64  rowid.value, and
b950: 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 73 61 6d   contain the sam
b960: 65 20 76 61 6c 75 65 20 66 6f 72 20 61 6c 6c 20  e value for all 
b970: 69 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 73 2e  indexed columns.
b980: 3c 2f 70 3e 0a 0a 3c 68 33 3e 32 2e 35 20 53 74  </p>..<h3>2.5 St
b990: 6f 72 61 67 65 20 4f 66 20 54 68 65 20 53 51 4c  orage Of The SQL
b9a0: 20 44 61 74 61 62 61 73 65 20 53 63 68 65 6d 61   Database Schema
b9b0: 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 50 61 67 65 20  </h3>..<p>^Page 
b9c0: 31 20 6f 66 20 61 20 64 61 74 61 62 61 73 65 20  1 of a database 
b9d0: 66 69 6c 65 20 69 73 20 74 68 65 20 72 6f 6f 74  file is the root
b9e0: 20 70 61 67 65 20 6f 66 20 61 20 74 61 62 6c 65   page of a table
b9f0: 20 62 2d 74 72 65 65 20 74 68 61 74 0a 68 6f 6c   b-tree that.hol
ba00: 64 73 20 61 20 73 70 65 63 69 61 6c 20 74 61 62  ds a special tab
ba10: 6c 65 20 6e 61 6d 65 64 20 22 73 71 6c 69 74 65  le named "sqlite
ba20: 5f 6d 61 73 74 65 72 22 20 28 6f 72 20 22 73 71  _master" (or "sq
ba30: 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72  lite_temp_master
ba40: 22 20 69 6e 0a 74 68 65 20 63 61 73 65 20 6f 66  " in.the case of
ba50: 20 61 20 54 45 4d 50 20 64 61 74 61 62 61 73 65   a TEMP database
ba60: 29 20 77 68 69 63 68 20 73 74 6f 72 65 73 20 74  ) which stores t
ba70: 68 65 20 63 6f 6d 70 6c 65 74 65 0a 64 61 74 61  he complete.data
ba80: 62 61 73 65 20 73 63 68 65 6d 61 2e 20 20 5e 28  base schema.  ^(
ba90: 54 68 65 20 73 74 72 75 63 74 75 72 65 20 6f 66  The structure of
baa0: 20 74 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74   the sqlite_mast
bab0: 65 72 20 74 61 62 6c 65 20 69 73 20 61 73 0a 69  er table is as.i
bac0: 66 20 69 74 20 68 61 64 20 62 65 65 6e 20 63 72  f it had been cr
bad0: 65 61 74 65 64 20 75 73 69 6e 67 20 74 68 65 20  eated using the 
bae0: 66 6f 6c 6c 6f 77 69 6e 67 20 53 51 4c 3a 3c 2f  following SQL:</
baf0: 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  p>..<blockquote>
bb00: 3c 70 72 65 3e 0a 43 52 45 41 54 45 20 54 41 42  <pre>.CREATE TAB
bb10: 4c 45 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  LE sqlite_master
bb20: 28 0a 20 20 74 79 70 65 20 74 65 78 74 2c 0a 20  (.  type text,. 
bb30: 20 6e 61 6d 65 20 74 65 78 74 2c 0a 20 20 74 62   name text,.  tb
bb40: 6c 5f 6e 61 6d 65 20 74 65 78 74 2c 0a 20 20 72  l_name text,.  r
bb50: 6f 6f 74 70 61 67 65 20 69 6e 74 65 67 65 72 2c  ootpage integer,
bb60: 0a 20 20 73 71 6c 20 74 65 78 74 0a 29 3b 0a 3c  .  sql text.);.<
bb70: 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74  /pre></blockquot
bb80: 65 3e 29 5e 0a 0a 3c 70 3e 5e 54 68 65 20 73 71  e>)^..<p>^The sq
bb90: 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c  lite_master tabl
bba0: 65 20 63 6f 6e 74 61 69 6e 73 20 61 20 72 6f 77  e contains a row
bbb0: 20 66 6f 72 20 65 61 63 68 20 74 61 62 6c 65 2c   for each table,
bbc0: 20 69 6e 64 65 78 2c 20 76 69 65 77 2c 0a 61 6e   index, view,.an
bbd0: 64 20 74 72 69 67 67 65 72 20 69 6e 20 74 68 65  d trigger in the
bbe0: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
bbf0: 2c 20 65 78 63 65 70 74 20 74 68 65 72 65 20 69  , except there i
bc00: 73 20 6e 6f 20 65 6e 74 72 79 20 66 6f 72 20 74  s no entry for t
bc10: 68 65 0a 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  he.sqlite_master
bc20: 20 74 61 62 6c 65 20 69 74 73 65 6c 66 2e 3c 2f   table itself.</
bc30: 70 3e 0a 0a 3c 70 3e 5e 28 54 68 65 20 73 71 6c  p>..<p>^(The sql
bc40: 69 74 65 5f 6d 61 73 74 65 72 2e 74 79 70 65 20  ite_master.type 
bc50: 63 6f 6c 75 6d 6e 20 77 69 6c 6c 20 62 65 20 6f  column will be o
bc60: 6e 65 0a 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ne.of the follow
bc70: 69 6e 67 20 74 65 78 74 20 73 74 72 69 6e 67 73  ing text strings
bc80: 3a 20 20 27 74 61 62 6c 65 27 2c 20 27 69 6e 64  :  'table', 'ind
bc90: 65 78 27 2c 20 27 76 69 65 77 27 2c 20 6f 72 20  ex', 'view', or 
bca0: 27 74 72 69 67 67 65 72 27 0a 61 63 63 6f 72 64  'trigger'.accord
bcb0: 69 6e 67 20 74 6f 20 74 68 65 20 74 79 70 65 20  ing to the type 
bcc0: 6f 66 20 6f 62 6a 65 63 74 20 64 65 66 69 6e 65  of object define
bcd0: 64 2e 20 20 5e 54 68 65 20 27 74 61 62 6c 65 27  d.  ^The 'table'
bce0: 20 73 74 72 69 6e 67 20 69 73 20 75 73 65 64 0a   string is used.
bcf0: 66 6f 72 20 62 6f 74 68 20 6f 72 64 69 6e 61 72  for both ordinar
bd00: 79 20 61 6e 64 20 5b 76 69 72 74 75 61 6c 20 74  y and [virtual t
bd10: 61 62 6c 65 73 5d 2e 29 5e 3c 2f 70 3e 0a 0a 3c  ables].)^</p>..<
bd20: 2f 70 3e 5e 28 54 68 65 20 73 71 6c 69 74 65 5f  /p>^(The sqlite_
bd30: 6d 61 73 74 65 72 2e 6e 61 6d 65 20 63 6f 6c 75  master.name colu
bd40: 6d 6e 20 77 69 6c 6c 20 68 6f 6c 64 20 74 68 65  mn will hold the
bd50: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 6f 62 6a   name of the obj
bd60: 65 63 74 2e 0a 5e 46 6f 72 20 69 6e 64 69 63 65  ect..^For indice
bd70: 73 20 74 68 61 74 20 61 72 65 20 61 75 74 6f 6d  s that are autom
bd80: 61 74 69 63 61 6c 6c 79 20 63 72 65 61 74 65 64  atically created
bd90: 20 62 79 20 55 4e 49 51 55 45 20 6f 72 20 50 52   by UNIQUE or PR
bda0: 49 4d 41 52 59 20 4b 45 59 0a 63 6f 6e 73 74 72  IMARY KEY.constr
bdb0: 61 69 6e 74 73 2c 20 74 68 65 20 6e 61 6d 65 20  aints, the name 
bdc0: 69 73 20 22 73 71 6c 69 74 65 5f 61 75 74 6f 69  is "sqlite_autoi
bdd0: 6e 64 65 78 5f 54 41 42 4c 45 5f 4e 22 20 77 68  ndex_TABLE_N" wh
bde0: 65 72 65 20 54 41 42 4c 45 20 69 73 20 0a 72 65  ere TABLE is .re
bdf0: 70 6c 61 63 65 64 20 62 79 20 74 68 65 20 6e 61  placed by the na
be00: 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
be10: 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68  that contains th
be20: 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 61 6e 64  e constraint and
be30: 20 4e 20 0a 69 73 20 61 6e 20 69 6e 74 65 67 65   N .is an intege
be40: 72 20 62 65 67 69 6e 6e 69 6e 67 0a 77 69 74 68  r beginning.with
be50: 20 31 20 61 6e 64 20 69 6e 63 72 65 61 73 69 6e   1 and increasin
be60: 67 20 62 79 20 6f 6e 65 20 77 69 74 68 20 65 61  g by one with ea
be70: 63 68 20 63 6f 6e 73 74 72 61 69 6e 74 20 73 65  ch constraint se
be80: 65 6e 2e 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  en.)^</p>..<p>Th
be90: 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 2e  e sqlite_master.
bea0: 74 62 6c 5f 6e 61 6d 65 20 63 6f 6c 75 6d 6e 20  tbl_name column 
beb0: 68 6f 6c 64 73 20 74 68 65 20 6e 61 6d 65 20 6f  holds the name o
bec0: 66 20 61 20 74 61 62 6c 65 20 6f 72 20 76 69 65  f a table or vie
bed0: 77 0a 74 68 61 74 20 74 68 65 20 6f 62 6a 65 63  w.that the objec
bee0: 74 20 69 73 20 61 73 73 6f 63 69 61 74 65 64 20  t is associated 
bef0: 77 69 74 68 2e 20 20 5e 46 6f 72 20 61 20 74 61  with.  ^For a ta
bf00: 62 6c 65 20 6f 72 20 76 69 65 77 2c 20 74 68 65  ble or view, the
bf10: 0a 74 62 6c 5f 6e 61 6d 65 20 63 6f 6c 75 6d 6e  .tbl_name column
bf20: 20 69 73 20 61 20 63 6f 70 79 20 6f 66 20 74 68   is a copy of th
bf30: 65 20 6e 61 6d 65 20 63 6f 6c 75 6d 6e 2e 20 20  e name column.  
bf40: 5e 46 6f 72 20 61 6e 20 69 6e 64 65 78 2c 20 74  ^For an index, t
bf50: 68 65 20 74 62 6c 5f 6e 61 6d 65 0a 69 73 20 74  he tbl_name.is t
bf60: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  he name of the t
bf70: 61 62 6c 65 20 74 68 61 74 20 69 73 20 69 6e 64  able that is ind
bf80: 65 78 65 64 2e 20 20 5e 46 6f 72 20 61 20 74 72  exed.  ^For a tr
bf90: 69 67 67 65 72 2c 20 74 68 65 20 74 62 6c 5f 6e  igger, the tbl_n
bfa0: 61 6d 65 0a 63 6f 6c 75 6d 6e 20 73 74 6f 72 65  ame.column store
bfb0: 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  s the name of th
bfc0: 65 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77 20  e table or view 
bfd0: 74 68 61 74 20 63 61 75 73 65 73 20 74 68 65 20  that causes the 
bfe0: 74 72 69 67 67 65 72 20 0a 74 6f 20 66 69 72 65  trigger .to fire
bff0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28 54 68 65 20  .</p>..<p>^(The 
c000: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 2e 72 6f  sqlite_master.ro
c010: 6f 74 70 61 67 65 20 63 6f 6c 75 6d 6e 20 73 74  otpage column st
c020: 6f 72 65 73 20 74 68 65 20 70 61 67 65 20 6e 75  ores the page nu
c030: 6d 62 65 72 20 6f 66 20 74 68 65 20 72 6f 6f 74  mber of the root
c040: 0a 62 2d 74 72 65 65 20 70 61 67 65 20 66 6f 72  .b-tree page for
c050: 20 74 61 62 6c 65 73 20 61 6e 64 20 69 6e 64 69   tables and indi
c060: 63 65 73 2e 29 5e 20 20 5e 46 6f 72 20 72 6f 77  ces.)^  ^For row
c070: 73 20 74 68 61 74 20 64 65 66 69 6e 65 20 76 69  s that define vi
c080: 65 77 73 2c 20 74 72 69 67 67 65 72 73 2c 0a 61  ews, triggers,.a
c090: 6e 64 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  nd virtual table
c0a0: 73 2c 20 74 68 65 20 72 6f 6f 74 70 61 67 65 20  s, the rootpage 
c0b0: 63 6f 6c 75 6d 6e 20 69 73 20 30 20 6f 72 20 4e  column is 0 or N
c0c0: 55 4c 4c 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28 54  ULL.</p>..<p>^(T
c0d0: 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  he sqlite_master
c0e0: 2e 73 71 6c 20 63 6f 6c 75 6d 6e 20 73 74 6f 72  .sql column stor
c0f0: 65 73 20 53 51 4c 20 74 65 78 74 20 74 68 61 74  es SQL text that
c100: 20 64 65 73 63 72 69 62 65 73 20 74 68 65 0a 6f   describes the.o
c110: 62 6a 65 63 74 2e 20 20 54 68 69 73 20 53 51 4c  bject.  This SQL
c120: 20 74 65 78 74 20 69 73 20 61 20 5b 43 52 45 41   text is a [CREA
c130: 54 45 20 54 41 42 4c 45 5d 2c 20 5b 43 52 45 41  TE TABLE], [CREA
c140: 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45  TE VIRTUAL TABLE
c150: 5d 2c 0a 5b 43 52 45 41 54 45 20 49 4e 44 45 58  ],.[CREATE INDEX
c160: 5d 2c 0a 5b 43 52 45 41 54 45 20 56 49 45 57 5d  ],.[CREATE VIEW]
c170: 2c 20 6f 72 20 5b 43 52 45 41 54 45 20 54 52 49  , or [CREATE TRI
c180: 47 47 45 52 5d 20 73 74 61 74 65 6d 65 6e 74 20  GGER] statement 
c190: 74 68 61 74 20 69 66 20 65 76 61 6c 75 61 74 65  that if evaluate
c1a0: 64 20 61 67 61 69 6e 73 74 0a 74 68 65 20 64 61  d against.the da
c1b0: 74 61 62 61 73 65 20 66 69 6c 65 20 77 68 65 6e  tabase file when
c1c0: 20 69 74 20 69 73 20 74 68 65 20 6d 61 69 6e 20   it is the main 
c1d0: 64 61 74 61 62 61 73 65 20 6f 66 20 61 20 5b 64  database of a [d
c1e0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
c1f0: 6f 6e 5d 0a 77 6f 75 6c 64 20 72 65 63 72 65 61  on].would recrea
c200: 74 65 64 20 74 68 65 20 6f 62 6a 65 63 74 2e 29  ted the object.)
c210: 20 20 54 68 65 20 74 65 78 74 20 69 73 20 75 73    The text is us
c220: 75 61 6c 6c 79 20 61 20 63 6f 70 79 20 6f 66 20  ually a copy of 
c230: 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 73 74 61  the original.sta
c240: 74 65 6d 65 6e 74 20 75 73 65 64 20 74 6f 20 63  tement used to c
c250: 72 65 61 74 65 20 74 68 65 20 6f 62 6a 65 63 74  reate the object
c260: 20 62 75 74 20 77 69 74 68 20 6e 6f 72 6d 61 6c   but with normal
c270: 69 7a 61 74 69 6f 6e 73 20 61 70 70 6c 69 65 64  izations applied
c280: 20 73 6f 0a 74 68 61 74 20 74 68 65 20 74 65 78   so.that the tex
c290: 74 20 63 6f 6e 66 6f 72 6d 73 20 74 6f 20 74 68  t conforms to th
c2a0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 72 75 6c 65  e following rule
c2b0: 73 3a 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 5e 54 68  s:..<ul>.<li>^Th
c2c0: 65 20 43 52 45 41 54 45 2c 20 54 41 42 4c 45 2c  e CREATE, TABLE,
c2d0: 20 56 49 45 57 2c 20 54 52 49 47 47 45 52 2c 20   VIEW, TRIGGER, 
c2e0: 61 6e 64 20 49 4e 44 45 58 20 6b 65 79 77 6f 72  and INDEX keywor
c2f0: 64 73 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e  ds at the beginn
c300: 69 6e 67 0a 6f 66 20 74 68 65 20 73 74 61 74 65  ing.of the state
c310: 6d 65 6e 74 20 61 72 65 20 63 6f 6e 76 65 72 74  ment are convert
c320: 65 64 20 74 6f 20 61 6c 6c 20 75 70 70 65 72 20  ed to all upper 
c330: 63 61 73 65 20 6c 65 74 74 65 72 73 2e 0a 3c 6c  case letters..<l
c340: 69 3e 5e 54 68 65 20 54 45 4d 50 20 6f 72 20 54  i>^The TEMP or T
c350: 45 4d 50 4f 52 41 52 59 20 6b 65 79 77 6f 72 64  EMPORARY keyword
c360: 20 69 73 20 72 65 6d 6f 76 65 64 20 69 66 20 69   is removed if i
c370: 74 20 6f 63 63 75 72 73 20 61 66 74 65 72 20 74  t occurs after t
c380: 68 65 20 0a 69 6e 69 74 69 61 6c 20 43 52 45 41  he .initial CREA
c390: 54 45 20 6b 65 79 77 6f 72 64 2e 0a 3c 6c 69 3e  TE keyword..<li>
c3a0: 5e 41 6e 79 20 64 61 74 61 62 61 73 65 20 6e 61  ^Any database na
c3b0: 6d 65 20 71 75 61 6c 69 66 69 65 72 20 74 68 61  me qualifier tha
c3c0: 74 20 6f 63 63 75 72 73 20 70 72 69 6f 72 20 74  t occurs prior t
c3d0: 6f 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  o the name of th
c3e0: 65 0a 6f 62 6a 65 63 74 20 62 65 69 6e 67 20 63  e.object being c
c3f0: 72 65 61 74 65 64 20 69 73 20 72 65 6d 6f 76 65  reated is remove
c400: 64 2e 0a 3c 6c 69 3e 5e 4c 65 61 64 69 6e 67 20  d..<li>^Leading 
c410: 73 70 61 63 65 73 20 61 72 65 20 72 65 6d 6f 76  spaces are remov
c420: 65 64 2e 0a 3c 6c 69 3e 5e 41 6c 6c 20 73 70 61  ed..<li>^All spa
c430: 63 65 73 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68  ces following th
c440: 65 20 66 69 72 73 74 20 74 77 6f 20 6b 65 79 77  e first two keyw
c450: 6f 72 64 73 20 61 72 65 20 63 6f 6e 76 65 72 74  ords are convert
c460: 65 64 20 69 6e 74 6f 20 61 20 73 69 6e 67 6c 65  ed into a single
c470: 0a 73 70 61 63 65 2e 0a 3c 2f 75 6c 3e 0a 0a 3c  .space..</ul>..<
c480: 70 3e 5e 28 54 68 65 20 74 65 78 74 20 69 6e 20  p>^(The text in 
c490: 74 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  the sqlite_maste
c4a0: 72 2e 73 71 6c 20 63 6f 6c 75 6d 6e 20 69 73 20  r.sql column is 
c4b0: 61 20 63 6f 70 79 20 6f 66 20 74 68 65 20 6f 72  a copy of the or
c4c0: 69 67 69 6e 61 6c 0a 43 52 45 41 54 45 20 73 74  iginal.CREATE st
c4d0: 61 74 65 6d 65 6e 74 20 74 65 78 74 20 74 68 61  atement text tha
c4e0: 74 20 63 72 65 61 74 65 64 20 74 68 65 20 6f 62  t created the ob
c4f0: 6a 65 63 74 2c 20 65 78 63 65 70 74 20 6e 6f 72  ject, except nor
c500: 6d 61 6c 69 7a 65 64 20 61 73 0a 64 65 73 63 72  malized as.descr
c510: 69 62 65 64 20 61 62 6f 76 65 20 61 6e 64 20 61  ibed above and a
c520: 73 20 6d 6f 64 69 66 69 65 64 20 62 79 20 73 75  s modified by su
c530: 62 73 65 71 75 65 6e 74 20 5b 41 4c 54 45 52 20  bsequent [ALTER 
c540: 54 41 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74  TABLE] statement
c550: 73 2e 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28 46  s.)^</p>..<p>^(F
c560: 6f 72 20 69 6e 64 69 63 65 73 20 74 68 61 74 20  or indices that 
c570: 61 72 65 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  are automaticall
c580: 79 20 63 72 65 61 74 65 64 20 62 79 20 55 4e 49  y created by UNI
c590: 51 55 45 20 6f 72 0a 50 52 49 4d 41 52 59 20 4b  QUE or.PRIMARY K
c5a0: 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 73 2c 20  EY constraints, 
c5b0: 74 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  the sqlite_maste
c5c0: 72 2e 73 71 6c 20 66 69 65 6c 64 20 69 73 20 4e  r.sql field is N
c5d0: 55 4c 4c 2e 29 5e 3c 2f 70 3e 0a 0a 0a 3c 74 63  ULL.)^</p>...<tc
c5e0: 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 72 6f  l>hd_fragment ro
c5f0: 6c 6c 62 61 63 6b 6a 6f 75 72 6e 61 6c 20 7b 72  llbackjournal {r
c600: 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20  ollback journal 
c610: 66 6f 72 6d 61 74 7d 3c 2f 74 63 6c 3e 0a 3c 68  format}</tcl>.<h
c620: 32 3e 33 2e 30 20 54 68 65 20 52 6f 6c 6c 62 61  2>3.0 The Rollba
c630: 63 6b 20 4a 6f 75 72 6e 61 6c 3c 2f 68 32 3e 0a  ck Journal</h2>.
c640: 0a 3c 70 3e 54 68 65 20 72 6f 6c 6c 62 61 63 6b  .<p>The rollback
c650: 20 6a 6f 75 72 6e 61 6c 20 69 73 20 61 20 66 69   journal is a fi
c660: 6c 65 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  le associated wi
c670: 74 68 20 65 61 63 68 20 53 51 4c 69 74 65 20 64  th each SQLite d
c680: 61 74 61 62 61 73 65 0a 66 69 6c 65 20 74 68 61  atabase.file tha
c690: 74 20 68 6f 6c 64 20 69 6e 66 6f 72 6d 61 74 69  t hold informati
c6a0: 6f 6e 20 75 73 65 64 20 74 6f 20 72 65 73 74 6f  on used to resto
c6b0: 72 65 20 74 68 65 20 64 61 74 61 62 61 73 65 20  re the database 
c6c0: 66 69 6c 65 20 74 6f 20 69 74 73 20 69 6e 69 74  file to its init
c6d0: 69 61 6c 0a 73 74 61 74 65 20 64 75 72 69 6e 67  ial.state during
c6e0: 20 74 68 65 20 63 6f 75 72 73 65 20 6f 66 20 61   the course of a
c6f0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e 54   transaction..^T
c700: 68 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72  he rollback jour
c710: 6e 61 6c 20 66 69 6c 65 20 69 73 20 61 6c 77 61  nal file is alwa
c720: 79 73 20 6c 6f 63 61 74 65 64 20 69 6e 20 74 68  ys located in th
c730: 65 20 73 61 6d 65 20 0a 64 69 72 65 63 74 6f 72  e same .director
c740: 79 20 61 73 20 74 68 65 20 64 61 74 61 62 61 73  y as the databas
c750: 65 0a 66 69 6c 65 20 61 6e 64 20 68 61 73 20 74  e.file and has t
c760: 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 61 73 20  he same name as 
c770: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
c780: 65 20 62 75 74 20 77 69 74 68 20 74 68 65 20 73  e but with the s
c790: 74 72 69 6e 67 0a 22 3c 74 74 3e 2d 6a 6f 75 72  tring."<tt>-jour
c7a0: 6e 61 6c 3c 2f 74 74 3e 22 20 61 70 70 65 6e 64  nal</tt>" append
c7b0: 65 64 2e 20 20 54 68 65 72 65 20 63 61 6e 20 6f  ed.  There can o
c7c0: 6e 6c 79 20 62 65 20 61 20 73 69 6e 67 6c 65 20  nly be a single 
c7d0: 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c  rollback journal
c7e0: 0a 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68  .associated with
c7f0: 20 61 20 67 69 76 65 20 64 61 74 61 62 61 73 65   a give database
c800: 20 61 6e 64 20 68 65 6e 63 65 20 74 68 65 72 65   and hence there
c810: 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20 6f 6e 65   can only be one
c820: 20 77 72 69 74 65 0a 74 72 61 6e 73 61 63 74 69   write.transacti
c830: 6f 6e 20 6f 70 65 6e 20 61 67 61 69 6e 73 74 20  on open against 
c840: 61 20 73 69 6e 67 6c 65 20 64 61 74 61 62 61 73  a single databas
c850: 65 20 61 74 20 6f 6e 65 20 74 69 6d 65 2e 3c 2f  e at one time.</
c860: 70 3e 0a 0a 3c 70 3e 49 66 20 61 20 74 72 61 6e  p>..<p>If a tran
c870: 73 61 63 74 69 6f 6e 20 69 73 20 61 62 6f 72 74  saction is abort
c880: 65 64 20 64 75 65 20 74 6f 20 61 6e 20 61 70 70  ed due to an app
c890: 6c 69 63 61 74 69 6f 6e 20 63 72 61 73 68 2c 20  lication crash, 
c8a0: 61 6e 20 6f 70 65 72 61 74 69 6e 67 0a 73 79 73  an operating.sys
c8b0: 74 65 6d 20 63 72 61 73 68 2c 20 6f 72 20 61 20  tem crash, or a 
c8c0: 68 61 72 64 77 61 72 65 20 70 6f 77 65 72 20 66  hardware power f
c8d0: 61 69 6c 75 72 65 20 6f 72 20 63 72 61 73 68 2c  ailure or crash,
c8e0: 20 74 68 65 6e 20 74 68 65 20 64 61 74 61 62 61   then the databa
c8f0: 73 65 20 6d 61 79 0a 62 65 20 6c 65 66 74 20 69  se may.be left i
c900: 6e 20 61 6e 20 69 6e 63 6f 6e 73 69 73 74 65 6e  n an inconsisten
c910: 74 20 73 74 61 74 65 2e 20 20 5e 54 68 65 20 6e  t state.  ^The n
c920: 65 78 74 20 74 69 6d 65 20 53 51 4c 69 74 65 20  ext time SQLite 
c930: 61 74 74 65 6d 70 74 73 20 74 6f 20 6f 70 65 6e  attempts to open
c940: 0a 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69  .the database fi
c950: 6c 65 2c 20 74 68 65 20 70 72 65 73 65 6e 63 65  le, the presence
c960: 20 6f 66 20 74 68 65 20 72 6f 6c 6c 62 61 63 6b   of the rollback
c970: 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 20 77 69   journal file wi
c980: 6c 6c 20 62 65 20 0a 64 65 74 65 63 74 65 64 20  ll be .detected 
c990: 61 6e 64 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20  and the journal 
c9a0: 77 69 6c 6c 20 62 65 20 61 75 74 6f 6d 61 74 69  will be automati
c9b0: 63 61 6c 6c 79 20 70 6c 61 79 65 64 20 62 61 63  cally played bac
c9c0: 6b 20 74 6f 20 72 65 73 74 6f 72 65 20 74 68 65  k to restore the
c9d0: 0a 64 61 74 61 62 61 73 65 20 74 6f 20 69 74 73  .database to its
c9e0: 20 73 74 61 74 65 20 61 74 20 74 68 65 20 73 74   state at the st
c9f0: 61 72 74 20 6f 66 20 74 68 65 20 69 6e 63 6f 6d  art of the incom
ca00: 70 6c 65 74 65 20 74 72 61 6e 73 61 63 74 69 6f  plete transactio
ca10: 6e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 20 72 6f  n.</p>..<p>^A ro
ca20: 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 69  llback journal i
ca30: 73 20 6f 6e 6c 79 20 63 6f 6e 73 69 64 65 72 65  s only considere
ca40: 64 20 74 6f 20 62 65 20 76 61 6c 69 64 20 69 66  d to be valid if
ca50: 20 69 74 20 65 78 69 73 74 73 20 61 6e 64 0a 63   it exists and.c
ca60: 6f 6e 74 61 69 6e 73 20 61 20 76 61 6c 69 64 20  ontains a valid 
ca70: 68 65 61 64 65 72 2e 20 20 48 65 6e 63 65 20 61  header.  Hence a
ca80: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 63 61 6e   transaction can
ca90: 20 62 65 20 63 6f 6d 6d 69 74 74 65 64 20 69 6e   be committed in
caa0: 20 6f 6e 65 0a 6f 66 20 74 68 72 65 65 20 77 61   one.of three wa
cab0: 79 73 3a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 5e 54 68  ys:.<ol>.<li>^Th
cac0: 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e  e rollback journ
cad0: 61 6c 20 66 69 6c 65 20 63 61 6e 20 62 65 20 64  al file can be d
cae0: 65 6c 65 74 65 64 2c 0a 3c 6c 69 3e 5e 54 68 65  eleted,.<li>^The
caf0: 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61   rollback journa
cb00: 6c 20 66 69 6c 65 20 63 61 6e 20 62 65 20 74 72  l file can be tr
cb10: 75 6e 63 61 74 65 64 20 74 6f 20 7a 65 72 6f 20  uncated to zero 
cb20: 6c 65 6e 67 74 68 2c 20 6f 72 0a 3c 6c 69 3e 5e  length, or.<li>^
cb30: 54 68 65 20 68 65 61 64 65 72 20 6f 66 20 74 68  The header of th
cb40: 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e  e rollback journ
cb50: 61 6c 20 63 61 6e 20 62 65 20 6f 76 65 72 77 72  al can be overwr
cb60: 69 74 74 65 6e 20 77 69 74 68 0a 69 6e 76 61 6c  itten with.inval
cb70: 69 64 20 68 65 61 64 65 72 20 74 65 78 74 20 28  id header text (
cb80: 66 6f 72 20 65 78 61 6d 70 6c 65 2c 20 61 6c 6c  for example, all
cb90: 20 7a 65 72 6f 73 29 2e 0a 3c 2f 6f 6c 3e 0a 5e   zeros)..</ol>.^
cba0: 54 68 65 73 65 20 74 68 72 65 65 20 77 61 79 73  These three ways
cbb0: 20 6f 66 20 63 6f 6d 6d 69 74 74 69 6e 67 20 61   of committing a
cbc0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 63 6f 72   transaction cor
cbd0: 72 65 73 70 6f 6e 64 20 74 6f 20 74 68 65 20 44  respond to the D
cbe0: 45 4c 45 54 45 2c 0a 54 52 55 4e 43 41 54 45 2c  ELETE,.TRUNCATE,
cbf0: 20 61 6e 64 20 50 45 52 53 49 53 54 20 73 65 74   and PERSIST set
cc00: 74 69 6e 67 73 2c 20 72 65 73 70 65 63 74 69 76  tings, respectiv
cc10: 65 6c 79 2c 20 6f 66 20 74 68 65 20 5b 6a 6f 75  ely, of the [jou
cc20: 72 6e 61 6c 5f 6d 6f 64 65 20 70 72 61 67 6d 61  rnal_mode pragma
cc30: 5d 2e 0a 3c 2f 70 3e 0a 0a 0a 3c 70 3e 41 20 76  ]..</p>...<p>A v
cc40: 61 6c 69 64 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f  alid rollback jo
cc50: 75 72 6e 61 6c 20 62 65 67 69 6e 73 20 77 69 74  urnal begins wit
cc60: 68 20 61 20 68 65 61 64 65 72 20 69 6e 20 74 68  h a header in th
cc70: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 66 6f 72 6d  e following form
cc80: 61 74 3a 3c 2f 70 3e 0a 0a 3c 63 65 6e 74 65 72  at:</p>..<center
cc90: 3e 0a 3c 69 3e 52 6f 6c 6c 62 61 63 6b 20 4a 6f  >.<i>Rollback Jo
cca0: 75 72 6e 61 6c 20 48 65 61 64 65 72 20 46 6f 72  urnal Header For
ccb0: 6d 61 74 3c 2f 69 3e 3c 62 72 3e 0a 3c 74 61 62  mat</i><br>.<tab
ccc0: 6c 65 20 77 69 64 74 68 3d 22 38 30 25 22 20 62  le width="80%" b
ccd0: 6f 72 64 65 72 3d 31 3e 0a 3c 74 72 3e 3c 74 68  order=1>.<tr><th
cce0: 3e 4f 66 66 73 65 74 3c 74 68 3e 53 69 7a 65 3c  >Offset<th>Size<
ccf0: 74 68 3e 44 65 73 63 72 69 70 74 69 6f 6e 0a 3c  th>Description.<
cd00: 74 72 3e 5e 28 3c 74 64 20 76 61 6c 69 67 6e 3d  tr>^(<td valign=
cd10: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
cd20: 3e 30 0a 20 20 20 20 3c 74 64 20 76 61 6c 69 67  >0.    <td valig
cd30: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
cd40: 65 72 3e 38 0a 20 20 20 20 3c 74 64 3e 48 65 61  er>8.    <td>Hea
cd50: 64 65 72 20 73 74 72 69 6e 67 3a 20 20 30 78 64  der string:  0xd
cd60: 39 2c 20 30 78 64 35 2c 20 30 78 30 35 2c 20 30  9, 0xd5, 0x05, 0
cd70: 78 66 39 2c 20 30 78 32 30 2c 20 30 78 61 31 2c  xf9, 0x20, 0xa1,
cd80: 20 30 78 36 33 2c 20 30 78 64 37 29 5e 0a 3c 74   0x63, 0xd7)^.<t
cd90: 72 3e 5e 28 3c 74 64 20 76 61 6c 69 67 6e 3d 74  r>^(<td valign=t
cda0: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
cdb0: 38 0a 20 20 20 20 3c 74 64 20 76 61 6c 69 67 6e  8.    <td valign
cdc0: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
cdd0: 72 3e 34 0a 20 20 20 20 3c 74 64 3e 54 68 65 20  r>4.    <td>The 
cde0: 22 50 61 67 65 20 43 6f 75 6e 74 22 20 2d 20 54  "Page Count" - T
cdf0: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67  he number of pag
ce00: 65 73 20 69 6e 20 74 68 65 20 6e 65 78 74 20 73  es in the next s
ce10: 65 67 6d 65 6e 74 20 6f 66 20 74 68 65 20 0a 20  egment of the . 
ce20: 20 20 20 20 20 20 20 6a 6f 75 72 6e 61 6c 2c 20         journal, 
ce30: 6f 72 20 2d 31 20 74 6f 0a 20 20 20 20 20 20 20  or -1 to.       
ce40: 20 6d 65 61 6e 20 61 6c 6c 20 63 6f 6e 74 65 6e   mean all conten
ce50: 74 20 74 6f 20 74 68 65 20 65 6e 64 20 6f 66 20  t to the end of 
ce60: 74 68 65 20 66 69 6c 65 29 5e 0a 3c 74 72 3e 5e  the file)^.<tr>^
ce70: 28 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  (<td valign=top 
ce80: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 32 0a  align=center>12.
ce90: 20 20 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74      <td valign=t
cea0: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
ceb0: 34 0a 20 20 20 20 3c 74 64 3e 41 20 72 61 6e 64  4.    <td>A rand
cec0: 6f 6d 20 6e 6f 6e 63 65 20 66 6f 72 20 74 68 65  om nonce for the
ced0: 20 63 68 65 63 6b 73 75 6d 29 5e 0a 3c 74 72 3e   checksum)^.<tr>
cee0: 5e 28 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  ^(<td valign=top
cef0: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 36   align=center>16
cf00: 0a 20 20 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d  .    <td valign=
cf10: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
cf20: 3e 34 0a 20 20 20 20 3c 74 64 3e 49 6e 69 74 69  >4.    <td>Initi
cf30: 61 6c 20 73 69 7a 65 20 6f 66 20 74 68 65 20 64  al size of the d
cf40: 61 74 61 62 61 73 65 20 69 6e 20 70 61 67 65 73  atabase in pages
cf50: 29 5e 0a 3c 74 72 3e 5e 28 3c 74 64 20 76 61 6c  )^.<tr>^(<td val
cf60: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
cf70: 6e 74 65 72 3e 32 30 0a 20 20 20 20 3c 74 64 20  nter>20.    <td 
cf80: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
cf90: 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74  =center>4.    <t
cfa0: 64 3e 53 69 7a 65 20 6f 66 20 61 20 64 69 73 6b  d>Size of a disk
cfb0: 20 73 65 63 74 6f 72 20 61 73 73 75 6d 65 64 20   sector assumed 
cfc0: 62 79 20 74 68 65 20 70 72 6f 63 65 73 73 20 74  by the process t
cfd0: 68 61 74 20 77 72 6f 74 65 20 74 68 69 73 0a 20  hat wrote this. 
cfe0: 20 20 20 20 20 20 20 6a 6f 75 72 6e 61 6c 2e 29         journal.)
cff0: 5e 0a 3c 74 72 3e 5e 28 3c 74 64 20 76 61 6c 69  ^.<tr>^(<td vali
d000: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
d010: 74 65 72 3e 32 34 0a 20 20 20 20 3c 74 64 20 76  ter>24.    <td v
d020: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
d030: 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64  center>4.    <td
d040: 3e 53 69 7a 65 20 6f 66 20 70 61 67 65 73 20 69  >Size of pages i
d050: 6e 20 74 68 69 73 20 6a 6f 75 72 6e 61 6c 2e 29  n this journal.)
d060: 5e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 63 65 6e  ^.</table>.</cen
d070: 74 65 72 3e 0a 0a 3c 70 3e 5e 41 20 72 6f 6c 6c  ter>..<p>^A roll
d080: 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 68 65 61  back journal hea
d090: 64 65 72 20 69 73 20 70 61 64 64 65 64 20 77 69  der is padded wi
d0a0: 74 68 20 7a 65 72 6f 73 20 6f 75 74 20 74 6f 20  th zeros out to 
d0b0: 74 68 65 20 73 69 7a 65 20 6f 66 20 61 20 0a 73  the size of a .s
d0c0: 69 6e 67 6c 65 20 73 65 63 74 6f 72 20 28 61 73  ingle sector (as
d0d0: 20 64 65 66 69 6e 65 64 20 62 79 20 74 68 65 20   defined by the 
d0e0: 73 65 63 74 6f 72 20 73 69 7a 65 20 69 6e 74 65  sector size inte
d0f0: 67 65 72 20 61 74 20 6f 66 66 73 65 74 20 32 30  ger at offset 20
d100: 29 2e 0a 54 68 65 20 68 65 61 64 65 72 20 69 73  )..The header is
d110: 20 69 6e 20 61 20 73 65 63 74 6f 72 20 62 79 20   in a sector by 
d120: 69 74 73 65 6c 66 20 73 6f 20 74 68 61 74 20 69  itself so that i
d130: 66 20 61 20 70 6f 77 65 72 20 6c 6f 73 73 20 6f  f a power loss o
d140: 63 63 75 72 73 20 77 68 69 6c 65 0a 77 72 69 74  ccurs while.writ
d150: 69 6e 67 20 74 68 65 20 73 65 63 74 6f 72 2c 20  ing the sector, 
d160: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74  information that
d170: 20 66 6f 6c 6c 6f 77 73 20 74 68 65 20 68 65 61   follows the hea
d180: 64 65 72 20 77 69 6c 6c 20 62 65 0a 28 68 6f 70  der will be.(hop
d190: 65 66 75 6c 6c 79 29 20 75 6e 64 61 6d 61 67 65  efully) undamage
d1a0: 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 66 74 65  d.</p>..<p>^Afte
d1b0: 72 20 74 68 65 20 68 65 61 64 65 72 20 61 6e 64  r the header and
d1c0: 20 7a 65 72 6f 20 70 61 64 64 69 6e 67 20 61 72   zero padding ar
d1d0: 65 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 70  e zero or more p
d1e0: 61 67 65 20 72 65 63 6f 72 64 73 2e 20 20 5e 45  age records.  ^E
d1f0: 61 63 68 0a 70 61 67 65 20 72 65 63 6f 72 64 20  ach.page record 
d200: 73 74 6f 72 65 73 20 61 20 63 6f 70 79 20 6f 66  stores a copy of
d210: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
d220: 61 20 70 61 67 65 20 66 72 6f 6d 20 74 68 65 20  a page from the 
d230: 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 62 65  database file.be
d240: 66 6f 72 65 20 69 74 20 77 61 73 20 63 68 61 6e  fore it was chan
d250: 67 65 64 2e 20 20 5e 54 68 65 20 73 61 6d 65 20  ged.  ^The same 
d260: 70 61 67 65 20 6d 61 79 20 6e 6f 74 20 61 70 70  page may not app
d270: 65 61 72 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e  ear more than on
d280: 63 65 0a 77 69 74 68 69 6e 20 61 20 73 69 6e 67  ce.within a sing
d290: 6c 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72  le rollback jour
d2a0: 6e 61 6c 2e 0a 54 6f 20 72 6f 6c 6c 62 61 63 6b  nal..To rollback
d2b0: 20 61 6e 20 69 6e 63 6f 6d 70 6c 65 74 65 20 74   an incomplete t
d2c0: 72 61 6e 73 61 63 74 69 6f 6e 2c 20 61 20 70 72  ransaction, a pr
d2d0: 6f 63 65 73 73 0a 68 61 73 20 6d 65 72 65 6c 79  ocess.has merely
d2e0: 20 74 6f 20 72 65 61 64 20 74 68 65 20 72 6f 6c   to read the rol
d2f0: 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 66 72  lback journal fr
d300: 6f 6d 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 20  om beginning to 
d310: 65 6e 64 20 61 6e 64 0a 77 72 69 74 65 20 70 61  end and.write pa
d320: 67 65 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65  ges found in the
d330: 20 6a 6f 75 72 6e 61 6c 20 62 61 63 6b 20 69 6e   journal back in
d340: 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20  to the database 
d350: 66 69 6c 65 20 61 74 20 74 68 65 0a 61 70 70 72  file at the.appr
d360: 6f 70 72 69 61 74 65 20 6c 6f 63 61 74 69 6f 6e  opriate location
d370: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 4c 65 74 20 74 68  .</p>..<p>Let th
d380: 65 20 64 61 74 61 62 61 73 65 20 70 61 67 65 20  e database page 
d390: 73 69 7a 65 20 28 74 68 65 20 76 61 6c 75 65 20  size (the value 
d3a0: 6f 66 20 74 68 65 20 69 6e 74 65 67 65 72 20 61  of the integer a
d3b0: 74 20 6f 66 66 73 65 74 20 32 34 20 0a 69 6e 20  t offset 24 .in 
d3c0: 74 68 65 20 6a 6f 75 72 6e 61 6c 20 68 65 61 64  the journal head
d3d0: 65 72 29 20 62 65 20 4e 2e 0a 54 68 65 6e 20 74  er) be N..Then t
d3e0: 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 61 20 70  he format of a p
d3f0: 61 67 65 20 72 65 63 6f 72 64 20 69 73 20 61 73  age record is as
d400: 20 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c   follows:</p>..<
d410: 63 65 6e 74 65 72 3e 0a 3c 69 3e 52 6f 6c 6c 62  center>.<i>Rollb
d420: 61 63 6b 20 4a 6f 75 72 6e 61 6c 20 50 61 67 65  ack Journal Page
d430: 20 52 65 63 6f 72 64 20 46 6f 72 6d 61 74 3c 2f   Record Format</
d440: 69 3e 3c 62 72 3e 0a 3c 74 61 62 6c 65 20 77 69  i><br>.<table wi
d450: 64 74 68 3d 22 38 30 25 22 20 62 6f 72 64 65 72  dth="80%" border
d460: 3d 31 3e 0a 3c 74 72 3e 3c 74 68 3e 4f 66 66 73  =1>.<tr><th>Offs
d470: 65 74 3c 74 68 3e 53 69 7a 65 3c 74 68 3e 44 65  et<th>Size<th>De
d480: 73 63 72 69 70 74 69 6f 6e 0a 3c 74 72 3e 5e 28  scription.<tr>^(
d490: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
d4a0: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 30 0a 20 20  lign=center>0.  
d4b0: 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70    <td valign=top
d4c0: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a   align=center>4.
d4d0: 20 20 20 20 3c 74 64 3e 54 68 65 20 70 61 67 65      <td>The page
d4e0: 20 6e 75 6d 62 65 72 20 69 6e 20 74 68 65 20 64   number in the d
d4f0: 61 74 61 62 61 73 65 20 66 69 6c 65 29 5e 0a 3c  atabase file)^.<
d500: 74 72 3e 5e 28 3c 74 64 20 76 61 6c 69 67 6e 3d  tr>^(<td valign=
d510: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
d520: 3e 34 0a 20 20 20 20 3c 74 64 20 76 61 6c 69 67  >4.    <td valig
d530: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
d540: 65 72 3e 4e 0a 20 20 20 20 3c 74 64 3e 4f 72 69  er>N.    <td>Ori
d550: 67 69 6e 61 6c 20 63 6f 6e 74 65 6e 74 20 6f 66  ginal content of
d560: 20 74 68 65 20 70 61 67 65 20 70 72 69 6f 72 20   the page prior 
d570: 74 6f 20 74 68 65 20 73 74 61 72 74 20 6f 66 20  to the start of 
d580: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 29  the transaction)
d590: 5e 0a 3c 74 72 3e 5e 28 3c 74 64 20 76 61 6c 69  ^.<tr>^(<td vali
d5a0: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
d5b0: 74 65 72 3e 4e 2b 34 0a 20 20 20 20 3c 74 64 20  ter>N+4.    <td 
d5c0: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
d5d0: 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74  =center>4.    <t
d5e0: 64 3e 43 68 65 63 6b 73 75 6d 29 5e 0a 3c 2f 74  d>Checksum)^.</t
d5f0: 61 62 6c 65 3e 0a 3c 2f 63 65 6e 74 65 72 3e 0a  able>.</center>.
d600: 0a 0a 3c 70 3e 5e 28 54 68 65 20 63 68 65 63 6b  ..<p>^(The check
d610: 73 75 6d 20 69 73 20 61 6e 20 75 6e 73 69 67 6e  sum is an unsign
d620: 65 64 20 33 32 2d 62 69 74 20 69 6e 74 65 67 65  ed 32-bit intege
d630: 72 20 63 6f 6d 70 75 74 65 64 20 61 73 20 66 6f  r computed as fo
d640: 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e  llows:</p>..<ol>
d650: 0a 3c 6c 69 3e 49 6e 69 74 69 61 6c 69 7a 65 20  .<li>Initialize 
d660: 74 68 65 20 63 68 65 63 6b 73 75 6d 20 74 6f 20  the checksum to 
d670: 74 68 65 20 63 68 65 63 6b 73 75 6d 20 6e 6f 6e  the checksum non
d680: 63 65 20 76 61 6c 75 65 20 66 6f 75 6e 64 20 69  ce value found i
d690: 6e 20 74 68 65 0a 6a 6f 75 72 6e 61 6c 20 68 65  n the.journal he
d6a0: 61 64 65 72 20 61 74 20 6f 66 66 73 65 74 20 31  ader at offset 1
d6b0: 32 2e 0a 3c 6c 69 3e 49 6e 69 74 69 61 6c 69 7a  2..<li>Initializ
d6c0: 65 20 69 6e 64 65 78 20 58 20 74 6f 20 62 65 20  e index X to be 
d6d0: 4e 2d 32 30 30 20 28 77 68 65 72 65 20 4e 20 69  N-200 (where N i
d6e0: 73 20 74 68 65 20 73 69 7a 65 20 6f 66 20 61 20  s the size of a 
d6f0: 64 61 74 61 62 61 73 65 20 70 61 67 65 0a 69 6e  database page.in
d700: 20 62 79 74 65 73 2e 0a 3c 6c 69 3e 49 6e 74 65   bytes..<li>Inte
d710: 72 70 72 65 74 20 74 68 65 20 66 6f 75 72 20 62  rpret the four b
d720: 79 74 65 73 20 61 74 20 6f 66 66 73 65 74 20 58  ytes at offset X
d730: 20 69 6e 74 6f 20 74 68 65 20 70 61 67 65 20 61   into the page a
d740: 73 20 61 20 34 2d 62 79 74 65 20 62 69 67 2d 65  s a 4-byte big-e
d750: 6e 64 69 61 6e 0a 75 6e 73 69 67 6e 65 64 20 69  ndian.unsigned i
d760: 6e 74 65 67 65 72 2e 20 20 41 64 64 20 74 68 65  nteger.  Add the
d770: 20 76 61 6c 75 65 20 6f 66 20 74 68 61 74 20 69   value of that i
d780: 6e 74 65 67 65 72 20 74 6f 20 74 68 65 20 63 68  nteger to the ch
d790: 65 63 6b 73 75 6d 2e 0a 3c 6c 69 3e 53 75 62 74  ecksum..<li>Subt
d7a0: 72 61 63 65 20 32 30 30 20 66 72 6f 6d 20 58 2e  race 200 from X.
d7b0: 0a 3c 6c 69 3e 49 66 20 58 20 69 73 20 67 72 65  .<li>If X is gre
d7c0: 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75  ater than or equ
d7d0: 61 6c 20 74 6f 20 7a 65 72 6f 2c 20 67 6f 20 62  al to zero, go b
d7e0: 61 63 6b 20 74 6f 20 73 74 65 70 20 33 2e 0a 3c  ack to step 3..<
d7f0: 2f 6f 6c 3e 29 5e 0a 0a 3c 70 3e 54 68 65 20 63  /ol>)^..<p>The c
d800: 68 65 63 6b 73 75 6d 20 76 61 6c 75 65 20 69 73  hecksum value is
d810: 20 75 73 65 64 20 74 6f 20 67 75 61 72 64 20 61   used to guard a
d820: 67 61 69 6e 73 74 20 69 6e 63 6f 6d 70 6c 65 74  gainst incomplet
d830: 65 20 77 72 69 74 65 73 20 6f 66 0a 61 20 6a 6f  e writes of.a jo
d840: 75 72 6e 61 6c 20 70 61 67 65 20 72 65 63 6f 72  urnal page recor
d850: 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 70 6f  d following a po
d860: 77 65 72 20 66 61 69 6c 75 72 65 2e 20 20 41 20  wer failure.  A 
d870: 64 69 66 66 65 72 65 6e 74 20 72 61 6e 64 6f 6d  different random
d880: 20 6e 6f 6e 63 65 0a 69 73 20 75 73 65 64 20 65   nonce.is used e
d890: 61 63 68 20 74 69 6d 65 20 61 20 74 72 61 6e 73  ach time a trans
d8a0: 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65  action is starte
d8b0: 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6d 69  d in order to mi
d8c0: 6e 69 6d 69 7a 65 20 74 68 65 20 72 69 73 6b 0a  nimize the risk.
d8d0: 74 68 61 74 20 75 6e 77 72 69 74 74 65 6e 20 73  that unwritten s
d8e0: 65 63 74 6f 72 73 20 6d 69 67 68 74 20 62 79 20  ectors might by 
d8f0: 63 68 61 6e 63 65 20 63 6f 6e 74 61 69 6e 20 64  chance contain d
d900: 61 74 61 20 66 72 6f 6d 20 74 68 65 20 73 61 6d  ata from the sam
d910: 65 20 70 61 67 65 0a 74 68 61 74 20 77 61 73 20  e page.that was 
d920: 61 20 70 61 72 74 20 6f 66 20 70 72 69 6f 72 20  a part of prior 
d930: 6a 6f 75 72 6e 61 6c 73 2e 20 20 42 79 20 63 68  journals.  By ch
d940: 61 6e 67 69 6e 67 20 74 68 65 20 6e 6f 6e 63 65  anging the nonce
d950: 20 66 6f 72 20 65 61 63 68 0a 74 72 61 6e 73 61   for each.transa
d960: 63 74 69 6f 6e 2c 20 73 74 61 6c 65 20 64 61 74  ction, stale dat
d970: 61 20 6f 6e 20 64 69 73 6b 20 77 69 6c 6c 20 73  a on disk will s
d980: 74 69 6c 6c 20 67 65 6e 65 72 61 74 65 20 61 6e  till generate an
d990: 20 69 6e 63 6f 72 72 65 63 74 20 63 68 65 63 6b   incorrect check
d9a0: 73 75 6d 0a 61 6e 64 20 62 65 20 64 65 74 65 63  sum.and be detec
d9b0: 74 65 64 20 77 69 74 68 20 68 69 67 68 20 70 72  ted with high pr
d9c0: 6f 62 61 62 69 6c 69 74 79 2e 20 20 54 68 65 20  obability.  The 
d9d0: 63 68 65 63 6b 73 75 6d 20 6f 6e 6c 79 20 75 73  checksum only us
d9e0: 65 73 20 61 20 73 70 61 72 73 65 20 73 61 6d 70  es a sparse samp
d9f0: 6c 65 0a 6f 66 20 33 32 2d 62 69 74 20 77 6f 72  le.of 32-bit wor
da00: 64 73 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61  ds from the data
da10: 20 72 65 63 6f 72 64 20 66 6f 72 20 70 65 72 66   record for perf
da20: 6f 72 6d 61 6e 63 65 20 72 65 61 73 6f 6e 73 20  ormance reasons 
da30: 2d 20 64 65 73 69 67 6e 20 73 74 75 64 69 65 73  - design studies
da40: 20 0a 64 75 72 69 6e 67 20 74 68 65 20 70 6c 61   .during the pla
da50: 6e 6e 69 6e 67 20 70 68 61 73 65 73 20 6f 66 20  nning phases of 
da60: 53 51 4c 69 74 65 20 33 2e 30 2e 30 20 73 68 6f  SQLite 3.0.0 sho
da70: 77 65 64 0a 61 20 73 69 67 6e 69 66 69 63 61 6e  wed.a significan
da80: 74 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 68 69  t performance hi
da90: 74 20 69 6e 20 63 68 65 63 6b 73 75 6d 6d 69 6e  t in checksummin
daa0: 67 20 74 68 65 20 65 6e 74 69 72 65 20 70 61 67  g the entire pag
dab0: 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 4c 65 74 20 74  e.</p>..<p>Let t
dac0: 68 65 20 70 61 67 65 20 63 6f 75 6e 74 20 76 61  he page count va
dad0: 6c 75 65 20 61 74 20 6f 66 66 73 65 74 20 38 20  lue at offset 8 
dae0: 69 6e 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20 68  in the journal h
daf0: 65 61 64 65 72 20 62 65 20 4d 2e 0a 5e 49 66 20  eader be M..^If 
db00: 4d 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  M is greater tha
db10: 6e 20 7a 65 72 6f 20 74 68 65 6e 20 61 66 74 65  n zero then afte
db20: 72 20 4d 20 70 61 67 65 20 72 65 63 6f 72 64 73  r M page records
db30: 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20 66 69 6c   the journal fil
db40: 65 0a 6d 61 79 20 62 65 20 7a 65 72 6f 20 70 61  e.may be zero pa
db50: 64 64 65 64 20 6f 75 74 20 74 6f 20 74 68 65 20  dded out to the 
db60: 6e 65 78 74 20 6d 75 6c 74 69 70 6c 65 20 6f 66  next multiple of
db70: 20 74 68 65 20 73 65 63 74 6f 72 20 73 69 7a 65   the sector size
db80: 20 61 6e 64 20 61 6e 6f 74 68 65 72 0a 6a 6f 75   and another.jou
db90: 72 6e 61 6c 20 68 65 61 64 65 72 20 6d 61 79 20  rnal header may 
dba0: 62 65 20 69 6e 73 65 72 74 65 64 2e 20 20 5e 41  be inserted.  ^A
dbb0: 6c 6c 20 6a 6f 75 72 6e 61 6c 20 68 65 61 64 65  ll journal heade
dbc0: 72 73 20 77 69 74 68 69 6e 20 74 68 65 20 73 61  rs within the sa
dbd0: 6d 65 0a 6a 6f 75 72 6e 61 6c 20 6d 75 73 74 20  me.journal must 
dbe0: 63 6f 6e 74 61 69 6e 20 74 68 65 20 73 61 6d 65  contain the same
dbf0: 20 64 61 74 61 62 61 73 65 20 70 61 67 65 20 73   database page s
dc00: 69 7a 65 20 61 6e 64 20 73 65 63 74 6f 72 20 73  ize and sector s
dc10: 69 7a 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66  ize.</p>..<p>^If
dc20: 20 4d 20 69 73 20 2d 31 20 69 6e 20 74 68 65 20   M is -1 in the 
dc30: 69 6e 69 74 69 61 6c 20 6a 6f 75 72 6e 61 6c 20  initial journal 
dc40: 68 65 61 64 65 72 2c 20 74 68 65 6e 20 74 68 65  header, then the
dc50: 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 20   number of page 
dc60: 72 65 63 6f 72 64 73 0a 74 68 61 74 20 66 6f 6c  records.that fol
dc70: 6c 6f 77 20 69 73 20 63 6f 6d 70 75 74 65 64 20  low is computed 
dc80: 62 79 20 63 6f 6d 70 75 74 69 6e 67 20 68 6f 77  by computing how
dc90: 20 6d 61 6e 79 20 70 61 67 65 20 72 65 63 6f 72   many page recor
dca0: 64 73 20 77 69 6c 6c 20 66 69 74 20 69 6e 0a 74  ds will fit in.t
dcb0: 68 65 20 61 76 61 69 6c 61 62 6c 65 20 73 70 61  he available spa
dcc0: 63 65 20 6f 66 20 74 68 65 20 72 65 6d 61 69 6e  ce of the remain
dcd0: 64 65 72 20 6f 66 20 74 68 65 20 6a 6f 75 72 6e  der of the journ
dce0: 61 6c 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 74  al file.</p>..<t
dcf0: 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 77  cl>hd_fragment w
dd00: 61 6c 66 6f 72 6d 61 74 20 7b 57 41 4c 20 66 6f  alformat {WAL fo
dd10: 72 6d 61 74 7d 3c 2f 74 63 6c 3e 0a 3c 68 32 3e  rmat}</tcl>.<h2>
dd20: 34 2e 30 20 54 68 65 20 57 72 69 74 65 2d 41 68  4.0 The Write-Ah
dd30: 65 61 64 20 4c 6f 67 3c 2f 68 32 3e 0a 0a 3c 70  ead Log</h2>..<p
dd40: 3e 42 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20  >Beginning with 
dd50: 5b 76 65 72 73 69 6f 6e 20 33 2e 37 2e 30 5d 2c  [version 3.7.0],
dd60: 20 53 51 4c 69 74 65 20 73 75 70 70 6f 72 74 73   SQLite supports
dd70: 20 61 20 6e 65 77 20 74 72 61 6e 73 61 63 74 69   a new transacti
dd80: 6f 6e 0a 63 6f 6e 74 72 6f 6c 20 6d 65 63 68 61  on.control mecha
dd90: 6e 69 73 6d 20 63 61 6c 6c 65 64 20 22 5b 57 41  nism called "[WA
dda0: 4c 20 7c 20 77 72 69 74 65 2d 61 68 65 61 64 20  L | write-ahead 
ddb0: 6c 6f 67 5d 22 20 6f 72 20 22 5b 57 41 4c 5d 22  log]" or "[WAL]"
ddc0: 2e 0a 5e 57 68 65 6e 20 61 20 64 61 74 61 62 61  ..^When a databa
ddd0: 73 65 20 69 73 20 69 6e 20 57 41 4c 20 6d 6f 64  se is in WAL mod
dde0: 65 2c 20 61 6c 6c 20 63 6f 6e 6e 65 63 74 69 6f  e, all connectio
ddf0: 6e 73 20 74 6f 20 74 68 61 74 20 64 61 74 61 62  ns to that datab
de00: 61 73 65 20 6d 75 73 74 0a 75 73 65 20 74 68 65  ase must.use the
de10: 20 57 41 4c 2e 20 20 5e 41 20 70 61 72 74 69 63   WAL.  ^A partic
de20: 75 6c 61 72 20 64 61 74 61 62 61 73 65 20 77 69  ular database wi
de30: 6c 6c 20 75 73 65 20 65 69 74 68 65 72 20 61 20  ll use either a 
de40: 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c  rollback journal
de50: 0a 6f 72 20 61 20 57 41 4c 2c 20 62 75 74 20 6e  .or a WAL, but n
de60: 6f 74 20 62 6f 74 68 20 61 74 20 74 68 65 20 73  ot both at the s
de70: 61 6d 65 20 74 69 6d 65 2e 0a 5e 54 68 65 20 57  ame time..^The W
de80: 41 4c 20 69 73 20 61 6c 77 61 79 73 20 6c 6f 63  AL is always loc
de90: 61 74 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65  ated in the same
dea0: 20 64 69 72 65 63 74 6f 72 79 20 61 73 20 74 68   directory as th
deb0: 65 20 64 61 74 61 62 61 73 65 0a 66 69 6c 65 20  e database.file 
dec0: 61 6e 64 20 68 61 73 20 74 68 65 20 73 61 6d 65  and has the same
ded0: 20 6e 61 6d 65 20 61 73 20 74 68 65 20 64 61 74   name as the dat
dee0: 61 62 61 73 65 20 66 69 6c 65 20 62 75 74 20 77  abase file but w
def0: 69 74 68 20 74 68 65 20 73 74 72 69 6e 67 0a 22  ith the string."
df00: 3c 74 74 3e 2d 77 61 6c 3c 2f 74 74 3e 22 20 61  <tt>-wal</tt>" a
df10: 70 70 65 6e 64 65 64 2e 3c 2f 70 3e 0a 0a 3c 68  ppended.</p>..<h
df20: 33 3e 34 2e 31 20 57 41 4c 20 46 69 6c 65 20 46  3>4.1 WAL File F
df30: 6f 72 6d 61 74 3c 2f 68 34 3e 0a 0a 3c 70 3e 41  ormat</h4>..<p>A
df40: 20 57 41 4c 20 66 69 6c 65 20 63 6f 6e 73 69 73   WAL file consis
df50: 74 73 20 6f 66 20 61 20 68 65 61 64 65 72 20 66  ts of a header f
df60: 6f 6c 6c 6f 77 65 64 20 62 79 20 7a 65 72 6f 20  ollowed by zero 
df70: 6f 72 20 6d 6f 72 65 20 22 66 72 61 6d 65 73 22  or more "frames"
df80: 2e 0a 45 61 63 68 20 66 72 61 6d 65 20 72 65 63  ..Each frame rec
df90: 6f 72 64 73 20 74 68 65 20 72 65 76 69 73 65 64  ords the revised
dfa0: 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61 20 73 69   content of a si
dfb0: 6e 67 6c 65 20 70 61 67 65 20 66 72 6f 6d 20 74  ngle page from t
dfc0: 68 65 0a 64 61 74 61 62 61 73 65 20 66 69 6c 65  he.database file
dfd0: 2e 20 20 41 6c 6c 20 63 68 61 6e 67 65 73 20 74  .  All changes t
dfe0: 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61  o the database a
dff0: 72 65 20 72 65 63 6f 72 64 65 64 20 62 79 20 77  re recorded by w
e000: 72 69 74 69 6e 67 0a 66 72 61 6d 65 73 20 69 6e  riting.frames in
e010: 74 6f 20 74 68 65 20 57 41 4c 2e 20 20 54 72 61  to the WAL.  Tra
e020: 6e 73 61 63 74 69 6f 6e 73 20 63 6f 6d 6d 69 74  nsactions commit
e030: 20 77 68 65 6e 20 61 20 66 72 61 6d 65 20 69 73   when a frame is
e040: 20 77 72 69 74 74 65 6e 20 74 68 61 74 0a 63 6f   written that.co
e050: 6e 74 61 69 6e 73 20 61 20 63 6f 6d 6d 69 74 20  ntains a commit 
e060: 6d 61 72 6b 65 72 2e 20 20 5e 41 20 73 69 6e 67  marker.  ^A sing
e070: 6c 65 20 57 41 4c 20 63 61 6e 20 61 6e 64 20 75  le WAL can and u
e080: 73 75 61 6c 6c 79 20 64 6f 65 73 20 72 65 63 6f  sually does reco
e090: 72 64 20 0a 6d 75 6c 74 69 70 6c 65 20 74 72 61  rd .multiple tra
e0a0: 6e 73 61 63 74 69 6f 6e 73 2e 20 20 50 65 72 69  nsactions.  Peri
e0b0: 6f 64 69 63 61 6c 6c 79 2c 20 74 68 65 20 63 6f  odically, the co
e0c0: 6e 74 65 6e 74 20 6f 66 20 74 68 65 20 57 41 4c  ntent of the WAL
e0d0: 20 69 73 0a 74 72 61 6e 73 66 65 72 72 65 64 20   is.transferred 
e0e0: 62 61 63 6b 20 69 6e 74 6f 20 74 68 65 20 64 61  back into the da
e0f0: 74 61 62 61 73 65 20 66 69 6c 65 20 69 6e 20 61  tabase file in a
e100: 6e 20 6f 70 65 72 61 74 69 6f 6e 20 63 61 6c 6c  n operation call
e110: 65 64 20 61 0a 22 63 68 65 63 6b 70 6f 69 6e 74  ed a."checkpoint
e120: 22 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 20 73 69  ".</p>..<p>^A si
e130: 6e 67 6c 65 20 57 41 4c 20 66 69 6c 65 20 63 61  ngle WAL file ca
e140: 6e 20 62 65 20 72 65 75 73 65 64 20 6d 75 6c 74  n be reused mult
e150: 69 70 6c 65 20 74 69 6d 65 73 2e 20 20 5e 49 6e  iple times.  ^In
e160: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
e170: 65 0a 57 41 4c 20 63 61 6e 20 66 69 6c 6c 20 75  e.WAL can fill u
e180: 70 20 77 69 74 68 20 66 72 61 6d 65 73 20 61 6e  p with frames an
e190: 64 20 74 68 65 6e 20 62 65 20 63 68 65 63 6b 70  d then be checkp
e1a0: 6f 69 6e 74 65 64 20 61 6e 64 20 74 68 65 6e 20  ointed and then 
e1b0: 6e 65 77 0a 66 72 61 6d 65 73 20 63 61 6e 20 6f  new.frames can o
e1c0: 76 65 72 77 72 69 74 65 20 74 68 65 20 6f 6c 64  verwrite the old
e1d0: 20 6f 6e 65 73 2e 20 20 5e 41 20 57 41 4c 20 61   ones.  ^A WAL a
e1e0: 6c 77 61 79 73 20 67 72 6f 77 73 20 66 72 6f 6d  lways grows from
e1f0: 20 62 65 67 69 6e 6e 69 6e 67 0a 74 6f 77 61 72   beginning.towar
e200: 64 20 74 68 65 20 65 6e 64 2e 20 20 43 68 65 63  d the end.  Chec
e210: 6b 73 75 6d 73 20 61 6e 64 20 63 6f 75 6e 74 65  ksums and counte
e220: 72 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 65  rs attached to e
e230: 61 63 68 20 66 72 61 6d 65 20 61 72 65 0a 75 73  ach frame are.us
e240: 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  ed to determine 
e250: 77 68 69 63 68 20 66 72 61 6d 65 73 20 77 69 74  which frames wit
e260: 68 69 6e 20 74 68 65 20 57 41 4c 20 61 72 65 20  hin the WAL are 
e270: 76 61 6c 69 64 20 61 6e 64 20 77 68 69 63 68 0a  valid and which.
e280: 61 72 65 20 6c 65 66 74 6f 76 65 72 73 20 66 72  are leftovers fr
e290: 6f 6d 20 70 72 69 6f 72 20 63 68 65 63 6b 70 6f  om prior checkpo
e2a0: 69 6e 74 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28  ints.</p>..<p>^(
e2b0: 54 68 65 20 57 41 4c 20 68 65 61 64 65 72 20 69  The WAL header i
e2c0: 73 20 33 32 20 62 79 74 65 73 20 69 6e 20 73 69  s 32 bytes in si
e2d0: 7a 65 20 61 6e 64 20 63 6f 6e 73 69 73 74 73 20  ze and consists 
e2e0: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
e2f0: 20 65 69 67 68 74 0a 62 69 67 2d 65 6e 64 69 61   eight.big-endia
e300: 6e 20 33 32 2d 62 69 74 20 75 6e 73 69 67 6e 65  n 32-bit unsigne
e310: 64 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 73  d integer values
e320: 3a 3c 2f 70 3e 0a 0a 3c 63 65 6e 74 65 72 3e 0a  :</p>..<center>.
e330: 3c 69 3e 57 41 4c 20 48 65 61 64 65 72 20 46 6f  <i>WAL Header Fo
e340: 72 6d 61 74 3c 2f 69 3e 3c 62 72 3e 0a 3c 74 61  rmat</i><br>.<ta
e350: 62 6c 65 20 77 69 64 74 68 3d 22 38 30 25 22 20  ble width="80%" 
e360: 62 6f 72 64 65 72 3d 31 3e 0a 3c 74 72 3e 3c 74  border=1>.<tr><t
e370: 68 3e 4f 66 66 73 65 74 3c 74 68 3e 53 69 7a 65  h>Offset<th>Size
e380: 3c 74 68 3e 44 65 73 63 72 69 70 74 69 6f 6e 0a  <th>Description.
e390: 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74  <tr><td valign=t
e3a0: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
e3b0: 30 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  0<td valign=top 
e3c0: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20  align=center>4. 
e3d0: 20 20 20 3c 74 64 3e 4d 61 67 69 63 20 6e 75 6d     <td>Magic num
e3e0: 62 65 72 2e 20 20 30 78 33 37 37 66 30 36 38 32  ber.  0x377f0682
e3f0: 20 6f 72 20 30 78 33 37 37 66 30 36 38 33 0a 3c   or 0x377f0683.<
e400: 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
e410: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34  p align=center>4
e420: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
e430: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20  lign=center>4.  
e440: 20 20 3c 74 64 3e 46 69 6c 65 20 66 6f 72 6d 61    <td>File forma
e450: 74 20 76 65 72 73 69 6f 6e 2e 20 20 43 75 72 72  t version.  Curr
e460: 65 6e 74 6c 79 20 33 30 30 37 30 30 30 2e 0a 3c  ently 3007000..<
e470: 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
e480: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 38  p align=center>8
e490: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
e4a0: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20  lign=center>4.  
e4b0: 20 20 3c 74 64 3e 44 61 74 61 62 61 73 65 20 70    <td>Database p
e4c0: 61 67 65 20 73 69 7a 65 2e 20 20 45 78 61 6d 70  age size.  Examp
e4d0: 6c 65 3a 20 31 30 32 34 0a 3c 74 72 3e 3c 74 64  le: 1024.<tr><td
e4e0: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
e4f0: 6e 3d 63 65 6e 74 65 72 3e 31 32 3c 74 64 20 76  n=center>12<td v
e500: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
e510: 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64  center>4.    <td
e520: 3e 43 68 65 63 6b 70 6f 69 6e 74 20 73 65 71 75  >Checkpoint sequ
e530: 65 6e 63 65 20 6e 75 6d 62 65 72 0a 3c 74 72 3e  ence number.<tr>
e540: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
e550: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 36 3c 74  lign=center>16<t
e560: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
e570: 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20  gn=center>4.    
e580: 3c 74 64 3e 53 61 6c 74 2d 31 3a 20 72 61 6e 64  <td>Salt-1: rand
e590: 6f 6d 20 69 6e 74 65 67 65 72 20 69 6e 63 72 65  om integer incre
e5a0: 6d 65 6e 74 65 64 20 77 69 74 68 20 65 61 63 68  mented with each
e5b0: 20 63 68 65 63 6b 70 6f 69 6e 74 0a 3c 74 72 3e   checkpoint.<tr>
e5c0: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
e5d0: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32 30 3c 74  lign=center>20<t
e5e0: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
e5f0: 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20  gn=center>4.    
e600: 3c 74 64 3e 53 61 6c 74 2d 32 3a 20 61 20 64 69  <td>Salt-2: a di
e610: 66 66 65 72 65 6e 74 20 72 61 6e 64 6f 6d 20 6e  fferent random n
e620: 75 6d 62 65 72 20 66 6f 72 20 65 61 63 68 20 63  umber for each c
e630: 68 65 63 6b 70 6f 69 6e 74 0a 3c 74 72 3e 3c 74  heckpoint.<tr><t
e640: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
e650: 67 6e 3d 63 65 6e 74 65 72 3e 32 34 3c 74 64 20  gn=center>24<td 
e660: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
e670: 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74  =center>4.    <t
e680: 64 3e 43 68 65 63 6b 73 75 6d 2d 31 3a 20 46 69  d>Checksum-1: Fi
e690: 72 73 74 20 70 61 72 74 20 6f 66 20 61 20 63 68  rst part of a ch
e6a0: 65 63 6b 73 75 6d 20 6f 6e 20 74 68 65 20 66 69  ecksum on the fi
e6b0: 72 73 74 20 32 34 20 62 79 74 65 73 20 6f 66 20  rst 24 bytes of 
e6c0: 68 65 61 64 65 72 0a 3c 74 72 3e 3c 74 64 20 76  header.<tr><td v
e6d0: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
e6e0: 63 65 6e 74 65 72 3e 32 38 3c 74 64 20 76 61 6c  center>28<td val
e6f0: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
e700: 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 43  nter>4.    <td>C
e710: 68 65 63 6b 73 75 6d 2d 32 3a 20 53 65 63 6f 6e  hecksum-2: Secon
e720: 64 20 70 61 72 74 20 6f 66 20 74 68 65 20 63 68  d part of the ch
e730: 65 63 6b 73 75 6d 20 6f 6e 20 74 68 65 20 66 69  ecksum on the fi
e740: 72 73 74 20 32 34 20 62 79 74 65 73 20 6f 66 20  rst 24 bytes of 
e750: 68 65 61 64 65 72 0a 3c 2f 74 61 62 6c 65 3e 0a  header.</table>.
e760: 3c 2f 63 65 6e 74 65 72 3e 29 5e 0a 0a 3c 70 3e  </center>)^..<p>
e770: 5e 49 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c  ^Immediately fol
e780: 6c 6f 77 69 6e 67 20 74 68 65 20 77 61 6c 2d 68  lowing the wal-h
e790: 65 61 64 65 72 20 61 72 65 20 7a 65 72 6f 20 6f  eader are zero o
e7a0: 72 20 6d 6f 72 65 20 66 72 61 6d 65 73 2e 20 5e  r more frames. ^
e7b0: 45 61 63 68 0a 66 72 61 6d 65 20 63 6f 6e 73 69  Each.frame consi
e7c0: 73 74 73 20 6f 66 20 61 20 32 34 2d 62 79 74 65  sts of a 24-byte
e7d0: 20 66 72 61 6d 65 2d 68 65 61 64 65 72 20 66 6f   frame-header fo
e7e0: 6c 6c 6f 77 65 64 20 62 79 20 61 20 3c 69 3e 70  llowed by a <i>p
e7f0: 61 67 65 2d 73 69 7a 65 3c 2f 69 3e 20 62 79 74  age-size</i> byt
e800: 65 73 0a 6f 66 20 70 61 67 65 20 64 61 74 61 2e  es.of page data.
e810: 20 5e 28 54 68 65 20 66 72 61 6d 65 2d 68 65 61   ^(The frame-hea
e820: 64 65 72 20 69 73 20 73 69 78 20 62 69 67 2d 65  der is six big-e
e830: 6e 64 69 61 6e 20 33 32 2d 62 69 74 20 75 6e 73  ndian 32-bit uns
e840: 69 67 6e 65 64 20 0a 69 6e 74 65 67 65 72 20 76  igned .integer v
e850: 61 6c 75 65 73 2c 20 61 73 20 66 6f 6c 6c 6f 77  alues, as follow
e860: 73 3a 0a 0a 3c 63 65 6e 74 65 72 3e 0a 3c 69 3e  s:..<center>.<i>
e870: 57 41 4c 20 46 72 61 6d 65 20 48 65 61 64 65 72  WAL Frame Header
e880: 20 46 6f 72 6d 61 74 3c 2f 69 3e 3c 62 72 3e 0a   Format</i><br>.
e890: 3c 74 61 62 6c 65 20 77 69 64 74 68 3d 22 38 30  <table width="80
e8a0: 25 22 20 62 6f 72 64 65 72 3d 31 3e 0a 3c 74 72  %" border=1>.<tr
e8b0: 3e 3c 74 68 3e 4f 66 66 73 65 74 3c 74 68 3e 53  ><th>Offset<th>S
e8c0: 69 7a 65 3c 74 68 3e 44 65 73 63 72 69 70 74 69  ize<th>Descripti
e8d0: 6f 6e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  on.<tr><td valig
e8e0: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
e8f0: 65 72 3e 30 3c 74 64 20 76 61 6c 69 67 6e 3d 74  er>0<td valign=t
e900: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
e910: 34 0a 20 20 20 20 3c 74 64 3e 50 61 67 65 20 6e  4.    <td>Page n
e920: 75 6d 62 65 72 0a 3c 74 72 3e 3c 74 64 20 76 61  umber.<tr><td va
e930: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
e940: 65 6e 74 65 72 3e 34 3c 74 64 20 76 61 6c 69 67  enter>4<td valig
e950: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
e960: 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 46 6f 72  er>4.    <td>For
e970: 20 63 6f 6d 6d 69 74 20 72 65 63 6f 72 64 73 2c   commit records,
e980: 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65   the size of the
e990: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
e9a0: 6e 20 70 61 67 65 73 0a 20 20 20 20 20 20 20 20  n pages.        
e9b0: 61 66 74 65 72 20 74 68 65 20 63 6f 6d 6d 69 74  after the commit
e9c0: 2e 20 20 46 6f 72 20 61 6c 6c 20 6f 74 68 65 72  .  For all other
e9d0: 20 72 65 63 6f 72 64 73 2c 20 7a 65 72 6f 2e 0a   records, zero..
e9e0: 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74  <tr><td valign=t
e9f0: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
ea00: 38 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  8<td valign=top 
ea10: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20  align=center>4. 
ea20: 20 20 20 3c 74 64 3e 53 61 6c 74 2d 31 20 63 6f     <td>Salt-1 co
ea30: 70 69 65 64 20 66 72 6f 6d 20 74 68 65 20 57 41  pied from the WA
ea40: 4c 20 68 65 61 64 65 72 0a 3c 74 72 3e 3c 74 64  L header.<tr><td
ea50: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
ea60: 6e 3d 63 65 6e 74 65 72 3e 31 32 3c 74 64 20 76  n=center>12<td v
ea70: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
ea80: 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64  center>4.    <td
ea90: 3e 53 61 6c 74 2d 32 20 63 6f 70 69 65 64 20 66  >Salt-2 copied f
eaa0: 72 6f 6d 20 74 68 65 20 57 41 4c 20 68 65 61 64  rom the WAL head
eab0: 65 72 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  er.<tr><td valig
eac0: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
ead0: 65 72 3e 31 36 3c 74 64 20 76 61 6c 69 67 6e 3d  er>16<td valign=
eae0: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
eaf0: 3e 34 0a 20 20 20 20 3c 74 64 3e 43 68 65 63 6b  >4.    <td>Check
eb00: 73 75 6d 2d 31 3a 20 20 43 75 6d 75 6c 61 74 69  sum-1:  Cumulati
eb10: 76 65 20 63 68 65 63 6b 73 75 6d 20 75 70 20 74  ve checksum up t
eb20: 68 72 6f 75 67 68 20 61 6e 64 20 69 6e 63 6c 75  hrough and inclu
eb30: 64 69 6e 67 20 74 68 69 73 20 70 61 67 65 0a 3c  ding this page.<
eb40: 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
eb50: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32  p align=center>2
eb60: 30 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  0<td valign=top 
eb70: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20  align=center>4. 
eb80: 20 20 20 3c 74 64 3e 43 68 65 63 6b 73 75 6d 2d     <td>Checksum-
eb90: 32 3a 20 20 53 65 63 6f 6e 64 20 68 61 6c 66 20  2:  Second half 
eba0: 6f 66 20 74 68 65 20 63 75 6d 75 6c 61 74 69 76  of the cumulativ
ebb0: 65 20 63 68 65 63 6b 73 75 6d 2e 0a 3c 2f 74 61  e checksum..</ta
ebc0: 62 6c 65 3e 0a 3c 2f 63 65 6e 74 65 72 3e 29 5e  ble>.</center>)^
ebd0: 0a 0a 5e 28 3c 70 3e 41 20 66 72 61 6d 65 20 69  ..^(<p>A frame i
ebe0: 73 20 63 6f 6e 73 69 64 65 72 65 64 20 76 61 6c  s considered val
ebf0: 69 64 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69  id if and only i
ec00: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
ec10: 63 6f 6e 64 69 74 69 6f 6e 73 20 61 72 65 0a 74  conditions are.t
ec20: 72 75 65 3a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c  rue:</p>..<ol>.<
ec30: 6c 69 3e 3c 70 3e 54 68 65 20 73 61 6c 74 2d 31  li><p>The salt-1
ec40: 20 61 6e 64 20 73 61 6c 74 2d 32 20 76 61 6c 75   and salt-2 valu
ec50: 65 73 20 69 6e 20 74 68 65 20 66 72 61 6d 65 2d  es in the frame-
ec60: 68 65 61 64 65 72 20 6d 61 74 63 68 0a 20 20 20  header match.   
ec70: 20 20 20 20 73 61 6c 74 20 76 61 6c 75 65 73 20      salt values 
ec80: 69 6e 20 74 68 65 20 77 61 6c 2d 68 65 61 64 65  in the wal-heade
ec90: 72 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e  r</p></li>..<li>
eca0: 3c 70 3e 54 68 65 20 63 68 65 63 6b 73 75 6d 20  <p>The checksum 
ecb0: 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 66 69  values in the fi
ecc0: 6e 61 6c 20 38 20 62 79 74 65 73 20 6f 66 20 74  nal 8 bytes of t
ecd0: 68 65 20 66 72 61 6d 65 2d 68 65 61 64 65 72 0a  he frame-header.
ece0: 20 20 20 20 20 20 20 65 78 61 63 74 6c 79 20 6d         exactly m
ecf0: 61 74 63 68 20 74 68 65 20 63 68 65 63 6b 73 75  atch the checksu
ed00: 6d 20 63 6f 6d 70 75 74 65 64 20 63 6f 6e 73 65  m computed conse
ed10: 63 75 74 69 76 65 6c 79 20 6f 6e 20 74 68 65 0a  cutively on the.
ed20: 20 20 20 20 20 20 20 57 41 4c 20 68 65 61 64 65         WAL heade
ed30: 72 20 61 6e 64 20 74 68 65 20 66 69 72 73 74 20  r and the first 
ed40: 38 20 62 79 74 65 73 20 61 6e 64 20 74 68 65 20  8 bytes and the 
ed50: 63 6f 6e 74 65 6e 74 20 6f 66 20 61 6c 6c 20 66  content of all f
ed60: 72 61 6d 65 73 0a 20 20 20 20 20 20 20 75 70 20  rames.       up 
ed70: 74 6f 20 61 6e 64 20 69 6e 63 6c 75 64 69 6e 67  to and including
ed80: 20 74 68 65 20 63 75 72 72 65 6e 74 20 66 72 61   the current fra
ed90: 6d 65 2e 3c 2f 70 3e 3c 2f 6c 69 3e 3c 2f 6c 69  me.</p></li></li
eda0: 3e 0a 3c 2f 6f 6c 3e 29 5e 0a 0a 3c 74 63 6c 3e  >.</ol>)^..<tcl>
edb0: 68 64 5f 66 72 61 67 6d 65 6e 74 20 77 61 6c 63  hd_fragment walc
edc0: 6b 73 6d 20 7b 57 41 4c 20 63 68 65 63 6b 73 75  ksm {WAL checksu
edd0: 6d 20 61 6c 67 6f 72 69 74 68 6d 7d 3c 2f 74 63  m algorithm}</tc
ede0: 6c 3e 0a 3c 68 33 3e 34 2e 32 20 43 68 65 63 6b  l>.<h3>4.2 Check
edf0: 73 75 6d 20 41 6c 67 6f 72 69 74 68 6d 3c 2f 68  sum Algorithm</h
ee00: 33 3e 0a 0a 3c 70 3e 54 68 65 20 63 68 65 63 6b  3>..<p>The check
ee10: 73 75 6d 20 69 73 20 63 6f 6d 70 75 74 65 64 20  sum is computed 
ee20: 62 79 20 69 6e 74 65 72 70 72 65 74 69 6e 67 20  by interpreting 
ee30: 74 68 65 20 69 6e 70 75 74 20 61 73 0a 61 6e 20  the input as.an 
ee40: 65 76 65 6e 20 6e 75 6d 62 65 72 20 6f 66 20 75  even number of u
ee50: 6e 73 69 67 6e 65 64 20 33 32 2d 62 69 74 20 69  nsigned 32-bit i
ee60: 6e 74 65 67 65 72 73 3a 20 78 28 30 29 20 74 68  ntegers: x(0) th
ee70: 72 6f 75 67 68 20 78 28 4e 29 2e 0a 5e 54 68 65  rough x(N)..^The
ee80: 20 33 32 2d 62 69 74 20 69 6e 74 65 67 65 72 73   32-bit integers
ee90: 20 61 72 65 20 62 69 67 2d 65 6e 64 69 61 6e 20   are big-endian 
eea0: 69 66 20 74 68 65 0a 6d 61 67 69 63 20 6e 75 6d  if the.magic num
eeb0: 62 65 72 20 69 6e 20 74 68 65 20 66 69 72 73 74  ber in the first
eec0: 20 34 20 62 79 74 65 73 20 6f 66 20 74 68 65 20   4 bytes of the 
eed0: 57 41 4c 20 68 65 61 64 65 72 20 69 73 20 30 78  WAL header is 0x
eee0: 33 37 37 66 30 36 38 33 20 61 6e 64 0a 74 68 65  377f0683 and.the
eef0: 20 69 6e 74 65 67 65 72 73 20 61 72 65 20 6c 69   integers are li
ef00: 74 74 6c 65 2d 65 6e 64 69 61 6e 20 74 68 65 20  ttle-endian the 
ef10: 6d 61 67 69 63 20 6e 75 6d 62 65 72 20 69 73 20  magic number is 
ef20: 30 78 33 37 37 66 30 36 38 32 2e 0a 5e 54 68 65  0x377f0682..^The
ef30: 20 63 68 65 63 6b 73 75 6d 20 76 61 6c 75 65 73   checksum values
ef40: 20 61 72 65 20 61 6c 77 61 79 73 20 73 74 6f 72   are always stor
ef50: 65 64 20 69 6e 20 74 68 65 20 66 72 61 6d 65 20  ed in the frame 
ef60: 68 65 61 64 65 72 20 69 6e 20 61 0a 62 69 67 2d  header in a.big-
ef70: 65 6e 64 69 61 6e 20 66 6f 72 6d 61 74 20 72 65  endian format re
ef80: 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 69 63  gardless of whic
ef90: 68 20 62 79 74 65 20 6f 72 64 65 72 20 69 73 20  h byte order is 
efa0: 75 73 65 64 20 74 6f 20 63 6f 6d 70 75 74 65 0a  used to compute.
efb0: 74 68 65 20 63 68 65 63 6b 73 75 6d 2e 3c 2f 70  the checksum.</p
efc0: 3e 0a 0a 3c 70 3e 54 68 65 20 63 68 65 63 6b 73  >..<p>The checks
efd0: 75 6d 20 61 6c 67 6f 72 69 74 68 6d 20 6f 6e 6c  um algorithm onl
efe0: 79 20 77 6f 72 6b 73 20 66 6f 72 20 63 6f 6e 74  y works for cont
eff0: 65 6e 74 20 77 68 69 63 68 20 69 73 20 61 20 6d  ent which is a m
f000: 75 6c 74 69 70 6c 65 20 6f 66 0a 38 20 62 79 74  ultiple of.8 byt
f010: 65 73 20 69 6e 20 6c 65 6e 67 74 68 2e 20 20 49  es in length.  I
f020: 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69  n other words, i
f030: 66 20 74 68 65 20 69 6e 70 75 74 73 20 61 72 65  f the inputs are
f040: 20 78 28 30 29 20 74 68 72 6f 75 67 68 20 78 28   x(0) through x(
f050: 4e 29 0a 74 68 65 6e 20 4e 20 6d 75 73 74 20 62  N).then N must b
f060: 65 20 6f 64 64 2e 0a 5e 28 54 68 65 20 63 68 65  e odd..^(The che
f070: 63 6b 73 75 6d 20 61 6c 67 6f 72 69 74 68 6d 20  cksum algorithm 
f080: 69 73 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a  is as follows:..
f090: 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65  <blockquote><pre
f0a0: 3e 20 0a 73 30 20 3d 20 73 31 20 3d 20 30 0a 66  > .s0 = s1 = 0.f
f0b0: 6f 72 20 69 20 66 72 6f 6d 20 30 20 74 6f 20 6e  or i from 0 to n
f0c0: 2d 31 20 73 74 65 70 20 32 3a 0a 20 20 20 73 30  -1 step 2:.   s0
f0d0: 20 2b 3d 20 78 28 69 29 20 2b 20 73 31 3b 0a 20   += x(i) + s1;. 
f0e0: 20 20 73 31 20 2b 3d 20 78 28 69 2b 31 29 20 2b    s1 += x(i+1) +
f0f0: 20 73 30 3b 0a 65 6e 64 66 6f 72 0a 23 20 72 65   s0;.endfor.# re
f100: 73 75 6c 74 20 69 6e 20 73 30 20 61 6e 64 20 73  sult in s0 and s
f110: 31 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71  1.</pre></blockq
f120: 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 5e 54 68 65  uote>)^..<p>^The
f130: 20 6f 75 74 70 75 74 73 20 73 30 20 61 6e 64 20   outputs s0 and 
f140: 73 31 20 61 72 65 20 62 6f 74 68 20 77 65 69 67  s1 are both weig
f150: 68 74 65 64 20 63 68 65 63 6b 73 75 6d 73 20 75  hted checksums u
f160: 73 69 6e 67 20 46 69 62 6f 6e 61 63 63 69 20 77  sing Fibonacci w
f170: 65 69 67 68 74 73 0a 69 6e 20 72 65 76 65 72 73  eights.in revers
f180: 65 20 6f 72 64 65 72 2e 20 20 28 5e 54 68 65 20  e order.  (^The 
f190: 6c 61 72 67 65 73 74 20 46 69 62 6f 6e 61 63 63  largest Fibonacc
f1a0: 69 20 77 65 69 67 68 74 20 6f 63 63 75 72 73 20  i weight occurs 
f1b0: 6f 6e 20 74 68 65 20 66 69 72 73 74 20 65 6c 65  on the first ele
f1c0: 6d 65 6e 74 0a 6f 66 20 74 68 65 20 73 65 71 75  ment.of the sequ
f1d0: 65 6e 63 65 20 62 65 69 6e 67 20 73 75 6d 6d 65  ence being summe
f1e0: 64 2e 29 20 20 5e 54 68 65 20 73 31 20 76 61 6c  d.)  ^The s1 val
f1f0: 75 65 20 73 70 61 6e 73 20 61 6c 6c 20 33 32 2d  ue spans all 32-
f200: 62 69 74 20 69 6e 74 65 67 65 72 0a 74 65 72 6d  bit integer.term
f210: 73 20 6f 66 20 74 68 65 20 73 65 71 75 65 6e 63  s of the sequenc
f220: 65 20 77 68 65 72 65 61 73 20 73 30 20 6f 6d 69  e whereas s0 omi
f230: 74 73 20 74 68 65 20 66 69 6e 61 6c 20 74 65 72  ts the final ter
f240: 6d 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 34 2e 33 20  m.</p>..<h3>4.3 
f250: 43 68 65 63 6b 70 6f 69 6e 74 20 41 6c 67 6f 72  Checkpoint Algor
f260: 69 74 68 6d 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 4f  ithm</h3>..<p>^O
f270: 6e 20 61 20 5b 63 68 65 63 6b 70 6f 69 6e 74 5d  n a [checkpoint]
f280: 2c 20 74 68 65 20 57 41 4c 20 69 73 20 66 69 72  , the WAL is fir
f290: 73 74 20 66 6c 75 73 68 65 64 20 74 6f 20 70 65  st flushed to pe
f2a0: 72 73 69 73 74 65 6e 74 20 73 74 6f 72 61 67 65  rsistent storage
f2b0: 20 75 73 69 6e 67 0a 74 68 65 20 78 53 79 6e 63   using.the xSync
f2c0: 20 6d 65 74 68 6f 64 20 6f 66 20 74 68 65 20 5b   method of the [
f2d0: 73 71 6c 69 74 65 33 5f 69 6f 5f 6d 65 74 68 6f  sqlite3_io_metho
f2e0: 64 73 20 7c 20 56 46 53 5d 2e 20 0a 5e 54 68 65  ds | VFS]. .^The
f2f0: 6e 20 76 61 6c 69 64 20 63 6f 6e 74 65 6e 74 20  n valid content 
f300: 6f 66 20 74 68 65 20 57 41 4c 20 69 73 20 74 72  of the WAL is tr
f310: 61 6e 73 66 65 72 72 65 64 20 69 6e 74 6f 20 74  ansferred into t
f320: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
f330: 2e 0a 5e 46 69 6e 61 6c 6c 79 2c 20 74 68 65 20  ..^Finally, the 
f340: 64 61 74 61 62 61 73 65 20 69 73 20 66 6c 75 73  database is flus
f350: 68 65 64 20 74 6f 20 70 65 72 73 69 73 74 65 6e  hed to persisten
f360: 74 20 73 74 6f 72 61 67 65 20 75 73 69 6e 67 20  t storage using 
f370: 61 6e 6f 74 68 65 72 0a 78 53 79 6e 63 20 6d 65  another.xSync me
f380: 74 68 6f 64 20 63 61 6c 6c 2e 0a 54 68 65 20 78  thod call..The x
f390: 53 79 6e 63 20 6f 70 65 72 61 74 69 6f 6e 73 20  Sync operations 
f3a0: 73 65 72 76 65 20 61 73 20 77 72 69 74 65 20 62  serve as write b
f3b0: 61 72 72 69 65 72 73 20 2d 20 61 6c 6c 20 77 72  arriers - all wr
f3c0: 69 74 65 73 20 6c 61 75 6e 63 68 65 64 0a 62 65  ites launched.be
f3d0: 66 6f 72 65 20 74 68 65 20 78 53 79 6e 63 20 6d  fore the xSync m
f3e0: 75 73 74 20 63 6f 6d 70 6c 65 74 65 20 62 65 66  ust complete bef
f3f0: 6f 72 65 20 61 6e 79 20 77 72 69 74 65 20 74 68  ore any write th
f400: 61 74 20 6c 61 75 6e 63 68 65 73 20 61 66 74 65  at launches afte
f410: 72 20 74 68 65 0a 78 53 79 6e 63 20 62 65 67 69  r the.xSync begi
f420: 6e 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 66 74  ns.</p>..<p>^Aft
f430: 65 72 20 65 61 63 68 20 63 68 65 63 6b 70 6f 69  er each checkpoi
f440: 6e 74 2c 20 74 68 65 20 57 41 4c 20 68 65 61 64  nt, the WAL head
f450: 65 72 20 73 61 6c 74 2d 31 20 76 61 6c 75 65 20  er salt-1 value 
f460: 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 61  is incremented a
f470: 6e 64 20 74 68 65 20 0a 73 61 6c 74 2d 32 20 76  nd the .salt-2 v
f480: 61 6c 75 65 20 69 73 20 72 61 6e 64 6f 6d 69 7a  alue is randomiz
f490: 65 64 2e 20 20 54 68 69 73 20 70 72 65 76 65 6e  ed.  This preven
f4a0: 74 73 20 6f 6c 64 20 61 6e 64 20 6e 65 77 20 66  ts old and new f
f4b0: 72 61 6d 65 73 20 69 6e 20 74 68 65 20 57 41 4c  rames in the WAL
f4c0: 20 66 72 6f 6d 0a 62 65 69 6e 67 20 63 6f 6e 73   from.being cons
f4d0: 69 64 65 72 65 64 20 76 61 6c 69 64 20 61 74 20  idered valid at 
f4e0: 74 68 65 20 73 61 6d 65 20 74 69 6d 65 20 61 6e  the same time an
f4f0: 64 20 62 65 69 6e 67 20 63 68 65 63 6b 70 6f 69  d being checkpoi
f500: 6e 74 69 6e 67 20 74 6f 67 65 74 68 65 72 0a 66  nting together.f
f510: 6f 6c 6c 6f 77 69 6e 67 20 61 20 63 72 61 73 68  ollowing a crash
f520: 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  .</p>..<tcl>hd_f
f530: 72 61 67 6d 65 6e 74 20 77 61 6c 72 65 61 64 20  ragment walread 
f540: 7b 57 41 4c 20 72 65 61 64 20 61 6c 67 6f 72 69  {WAL read algori
f550: 74 68 6d 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 34  thm}</tcl>.<h3>4
f560: 2e 34 20 52 65 61 64 65 72 20 41 6c 67 6f 72 69  .4 Reader Algori
f570: 74 68 6d 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 54  thm</h3>..<p>^(T
f580: 6f 20 72 65 61 64 20 61 20 70 61 67 65 20 66 72  o read a page fr
f590: 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20  om the database 
f5a0: 28 63 61 6c 6c 20 69 74 20 70 61 67 65 20 6e 75  (call it page nu
f5b0: 6d 62 65 72 20 50 29 2c 20 61 20 72 65 61 64 65  mber P), a reade
f5c0: 72 0a 66 69 72 73 74 20 63 68 65 63 6b 73 20 74  r.first checks t
f5d0: 68 65 20 57 41 4c 20 74 6f 20 73 65 65 20 69 66  he WAL to see if
f5e0: 20 69 74 20 63 6f 6e 74 61 69 6e 73 20 70 61 67   it contains pag
f5f0: 65 20 50 2e 20 20 49 66 20 73 6f 2c 20 74 68 65  e P.  If so, the
f600: 6e 20 74 68 65 0a 6c 61 73 74 20 76 61 6c 69 64  n the.last valid
f610: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 70 61 67   instance of pag
f620: 65 20 50 20 74 68 61 74 20 69 73 20 66 6f 6c 6c  e P that is foll
f630: 6f 77 65 64 20 62 79 20 61 20 63 6f 6d 6d 69 74  owed by a commit
f640: 20 66 72 61 6d 65 0a 6f 72 20 69 73 20 61 20 63   frame.or is a c
f650: 6f 6d 6d 69 74 20 66 72 61 6d 65 20 69 74 73 65  ommit frame itse
f660: 6c 66 20 62 65 63 6f 6d 65 73 20 74 68 65 20 76  lf becomes the v
f670: 61 6c 75 65 20 72 65 61 64 2e 29 5e 20 20 5e 49  alue read.)^  ^I
f680: 66 20 74 68 65 20 57 41 4c 0a 63 6f 6e 74 61 69  f the WAL.contai
f690: 6e 73 20 6e 6f 20 63 6f 70 69 65 73 20 6f 66 20  ns no copies of 
f6a0: 70 61 67 65 20 50 20 74 68 61 74 20 61 72 65 20  page P that are 
f6b0: 76 61 6c 69 64 20 61 6e 64 20 77 68 69 63 68 20  valid and which 
f6c0: 61 72 65 20 61 20 63 6f 6d 6d 69 74 0a 66 72 61  are a commit.fra
f6d0: 6d 65 20 6f 72 20 61 72 65 20 66 6f 6c 6c 6f 77  me or are follow
f6e0: 65 64 20 62 79 20 61 20 63 6f 6d 6d 69 74 20 66  ed by a commit f
f6f0: 72 61 6d 65 2c 20 74 68 65 6e 20 70 61 67 65 20  rame, then page 
f700: 50 20 69 73 20 72 65 61 64 20 66 72 6f 6d 0a 74  P is read from.t
f710: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
f720: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 6f 20 73 74 61  .</p>..<p>To sta
f730: 72 74 20 61 20 72 65 61 64 20 74 72 61 6e 73 61  rt a read transa
f740: 63 74 69 6f 6e 2c 20 74 68 65 20 72 65 61 64 65  ction, the reade
f750: 72 20 72 65 63 6f 72 64 73 20 74 68 65 20 69 6e  r records the in
f760: 64 65 78 20 6f 66 20 74 68 65 20 6c 61 73 74 0a  dex of the last.
f770: 76 61 6c 69 64 20 66 72 61 6d 65 20 69 6e 20 74  valid frame in t
f780: 68 65 20 57 41 4c 2e 20 20 54 68 65 20 72 65 61  he WAL.  The rea
f790: 64 65 72 20 75 73 65 73 20 74 68 69 73 20 72 65  der uses this re
f7a0: 63 6f 72 64 65 64 20 22 6d 78 46 72 61 6d 65 22  corded "mxFrame"
f7b0: 20 76 61 6c 75 65 0a 66 6f 72 20 61 6c 6c 20 73   value.for all s
f7c0: 75 62 73 65 71 75 65 6e 74 20 72 65 61 64 20 6f  ubsequent read o
f7d0: 70 65 72 61 74 69 6f 6e 73 2e 20 20 4e 65 77 20  perations.  New 
f7e0: 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 63 61 6e  transactions can
f7f0: 20 62 65 20 61 70 70 65 6e 64 65 64 0a 74 6f 20   be appended.to 
f800: 74 68 65 20 57 41 4c 2c 20 62 75 74 20 61 73 20  the WAL, but as 
f810: 6c 6f 6e 67 20 61 73 20 74 68 65 20 72 65 61 64  long as the read
f820: 65 72 20 75 73 65 73 20 69 74 73 20 6f 72 69 67  er uses its orig
f830: 69 6e 61 6c 20 6d 78 46 72 61 6d 65 20 76 61 6c  inal mxFrame val
f840: 75 65 0a 61 6e 64 20 69 67 6e 6f 72 65 73 20 73  ue.and ignores s
f850: 75 62 73 65 71 75 65 6e 74 6c 79 20 61 70 70 65  ubsequently appe
f860: 6e 64 65 64 20 63 6f 6e 74 65 6e 74 2c 20 74 68  nded content, th
f870: 65 20 72 65 61 64 65 72 20 77 69 6c 6c 20 73 65  e reader will se
f880: 65 20 61 20 0a 63 6f 6e 73 69 73 74 65 6e 74 20  e a .consistent 
f890: 73 6e 61 70 73 68 6f 74 20 6f 66 20 74 68 65 20  snapshot of the 
f8a0: 64 61 74 61 62 61 73 65 20 66 72 6f 6d 20 61 20  database from a 
f8b0: 73 69 6e 67 6c 65 20 70 6f 69 6e 74 20 69 6e 20  single point in 
f8c0: 74 69 6d 65 2e 20 20 0a 5e 54 68 69 73 20 74 65  time.  .^This te
f8d0: 63 68 6e 69 71 75 65 20 61 6c 6c 6f 77 73 20 6d  chnique allows m
f8e0: 75 6c 74 69 70 6c 65 20 63 6f 6e 63 75 72 72 65  ultiple concurre
f8f0: 6e 74 20 72 65 61 64 65 72 73 20 74 6f 20 76 69  nt readers to vi
f900: 65 77 20 64 69 66 66 65 72 65 6e 74 20 0a 76 65  ew different .ve
f910: 72 73 69 6f 6e 73 20 6f 66 20 74 68 65 20 64 61  rsions of the da
f920: 74 61 62 61 73 65 20 63 6f 6e 74 65 6e 74 20 73  tabase content s
f930: 69 6d 75 6c 74 61 6e 65 6f 75 73 6c 79 2e 3c 2f  imultaneously.</
f940: 70 3e 0a 0a 3c 70 3e 54 68 65 20 72 65 61 64 65  p>..<p>The reade
f950: 72 20 61 6c 67 6f 72 69 74 68 6d 20 69 6e 20 74  r algorithm in t
f960: 68 65 20 70 72 65 76 69 6f 75 73 20 70 61 72 61  he previous para
f970: 67 72 61 70 68 73 20 77 6f 72 6b 73 20 63 6f 72  graphs works cor
f980: 72 65 63 74 6c 79 2c 20 62 75 74 20 0a 62 65 63  rectly, but .bec
f990: 61 75 73 65 20 66 72 61 6d 65 73 20 66 6f 72 20  ause frames for 
f9a0: 70 61 67 65 20 50 20 63 61 6e 20 61 70 70 65 61  page P can appea
f9b0: 72 20 61 6e 79 77 68 65 72 65 20 77 69 74 68 69  r anywhere withi
f9c0: 6e 20 74 68 65 20 57 41 4c 2c 20 74 68 65 0a 72  n the WAL, the.r
f9d0: 65 61 64 65 72 20 68 61 73 20 74 6f 20 73 63 61  eader has to sca
f9e0: 6e 20 74 68 65 20 65 6e 74 69 72 65 20 57 41 4c  n the entire WAL
f9f0: 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 70 61 67   looking for pag
fa00: 65 20 50 20 66 72 61 6d 65 73 2e 20 20 49 66 20  e P frames.  If 
fa10: 74 68 65 0a 57 41 4c 20 69 73 20 6c 61 72 67 65  the.WAL is large
fa20: 20 28 6d 75 6c 74 69 70 6c 65 20 6d 65 67 61 62   (multiple megab
fa30: 79 74 65 73 20 69 73 20 74 79 70 69 63 61 6c 29  ytes is typical)
fa40: 20 74 68 61 74 20 73 63 61 6e 20 63 61 6e 20 62   that scan can b
fa50: 65 20 73 6c 6f 77 2c 0a 61 6e 64 20 72 65 61 64  e slow,.and read
fa60: 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 73 75 66   performance suf
fa70: 66 65 72 73 2e 20 20 5e 54 6f 20 6f 76 65 72 63  fers.  ^To overc
fa80: 6f 6d 65 20 74 68 69 73 20 70 72 6f 62 6c 65 6d  ome this problem
fa90: 2c 20 61 20 73 65 70 61 72 61 74 65 0a 64 61 74  , a separate.dat
faa0: 61 20 73 74 72 75 63 74 75 72 65 20 63 61 6c 6c  a structure call
fab0: 65 64 20 74 68 65 20 77 61 6c 2d 69 6e 64 65 78  ed the wal-index
fac0: 20 69 73 20 6d 61 69 6e 74 61 69 6e 65 64 20 74   is maintained t
fad0: 6f 20 65 78 70 65 64 69 74 65 20 74 68 65 0a 73  o expedite the.s
fae0: 65 61 72 63 68 20 66 6f 72 20 66 72 61 6d 65 73  earch for frames
faf0: 20 6f 66 20 61 20 70 61 72 74 69 63 75 6c 61 72   of a particular
fb00: 20 70 61 67 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c   page.</p>..<tcl
fb10: 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 77 61 6c  >hd_fragment wal
fb20: 69 6e 64 65 78 66 6f 72 6d 61 74 20 7b 77 61 6c  indexformat {wal
fb30: 2d 69 6e 64 65 78 7d 20 7b 57 41 4c 2d 69 6e 64  -index} {WAL-ind
fb40: 65 78 20 66 6f 72 6d 61 74 7d 3c 2f 74 63 6c 3e  ex format}</tcl>
fb50: 0a 3c 68 33 3e 34 2e 35 20 57 41 4c 2d 49 6e 64  .<h3>4.5 WAL-Ind
fb60: 65 78 20 46 6f 72 6d 61 74 3c 2f 68 33 3e 0a 0a  ex Format</h3>..
fb70: 3c 70 3e 43 6f 6e 63 65 70 74 75 61 6c 6c 79 2c  <p>Conceptually,
fb80: 20 74 68 65 20 77 61 6c 2d 69 6e 64 65 78 20 69   the wal-index i
fb90: 73 20 73 68 61 72 65 64 20 6d 65 6d 6f 72 79 2c  s shared memory,
fba0: 20 74 68 6f 75 67 68 20 74 68 65 20 63 75 72 72   though the curr
fbb0: 65 6e 74 0a 56 46 53 20 69 6d 70 6c 65 6d 65 6e  ent.VFS implemen
fbc0: 74 61 74 69 6f 6e 73 20 75 73 65 20 61 20 6d 6d  tations use a mm
fbd0: 61 70 70 65 64 20 66 69 6c 65 20 66 6f 72 20 74  apped file for t
fbe0: 68 65 20 77 61 6c 2d 69 6e 64 65 78 2e 20 20 5e  he wal-index.  ^
fbf0: 54 68 65 20 6d 6d 61 70 70 65 64 0a 66 69 6c 65  The mmapped.file
fc00: 20 69 73 20 69 6e 20 74 68 65 20 73 61 6d 65 20   is in the same 
fc10: 64 69 72 65 63 74 6f 72 79 20 61 73 20 74 68 65  directory as the
fc20: 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 68 61   database and ha
fc30: 73 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 0a  s the same name.
fc40: 61 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  as the database 
fc50: 77 69 74 68 20 61 20 22 3c 74 74 3e 2d 73 68 6d  with a "<tt>-shm
fc60: 3c 2f 74 74 3e 22 20 73 75 66 66 69 78 20 61 70  </tt>" suffix ap
fc70: 70 65 6e 64 65 64 2e 20 20 42 65 63 61 75 73 65  pended.  Because
fc80: 0a 74 68 65 20 77 61 6c 2d 69 6e 64 65 78 20 69  .the wal-index i
fc90: 73 20 73 68 61 72 65 64 20 6d 65 6d 6f 72 79 2c  s shared memory,
fca0: 20 53 51 4c 69 74 65 20 64 6f 65 73 20 6e 6f 74   SQLite does not
fcb0: 20 73 75 70 70 6f 72 74 20 0a 5b 50 52 41 47 4d   support .[PRAGM
fcc0: 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20 7c  A journal_mode |
fcd0: 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 3d 57 41   journal_mode=WA
fce0: 4c 5d 20 0a 6f 6e 20 61 20 6e 65 74 77 6f 72 6b  L] .on a network
fcf0: 20 66 69 6c 65 73 79 73 74 65 6d 20 77 68 65 6e   filesystem when
fd00: 20 63 6c 69 65 6e 74 73 20 61 72 65 20 6f 6e 20   clients are on 
fd10: 64 69 66 66 65 72 65 6e 74 20 6d 61 63 68 69 6e  different machin
fd20: 65 73 2e 0a 41 6c 6c 20 75 73 65 72 73 20 6f 66  es..All users of
fd30: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 6d 75   the database mu
fd40: 73 74 20 62 65 20 61 62 6c 65 20 74 6f 20 73 68  st be able to sh
fd50: 61 72 65 20 74 68 65 20 73 61 6d 65 20 6d 65 6d  are the same mem
fd60: 6f 72 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  ory.</p>..<p>The
fd70: 20 70 75 72 70 6f 73 65 20 6f 66 20 74 68 65 20   purpose of the 
fd80: 77 61 6c 2d 69 6e 64 65 78 20 69 73 20 74 6f 20  wal-index is to 
fd90: 61 6e 73 77 65 72 20 74 68 69 73 20 71 75 65 73  answer this ques
fda0: 74 69 6f 6e 20 71 75 69 63 6b 6c 79 3a 3c 2f 70  tion quickly:</p
fdb0: 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c  >..<blockquote><
fdc0: 69 3e 0a 47 69 76 65 6e 20 61 20 70 61 67 65 20  i>.Given a page 
fdd0: 6e 75 6d 62 65 72 20 50 20 61 6e 64 20 61 20 6d  number P and a m
fde0: 61 78 69 6d 75 6d 20 57 41 4c 20 66 72 61 6d 65  aximum WAL frame
fdf0: 20 69 6e 64 65 78 20 4d 2c 0a 72 65 74 75 72 6e   index M,.return
fe00: 20 74 68 65 20 6c 61 72 67 65 73 74 20 57 41 4c   the largest WAL
fe10: 20 66 72 61 6d 65 20 69 6e 64 65 78 20 66 6f 72   frame index for
fe20: 20 70 61 67 65 20 50 20 74 68 61 74 20 64 6f 65   page P that doe
fe30: 73 20 6e 6f 74 20 65 78 63 65 65 64 20 4d 2c 20  s not exceed M, 
fe40: 0a 6f 72 20 72 65 74 75 72 6e 20 4e 55 4c 4c 20  .or return NULL 
fe50: 69 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  if there are no 
fe60: 66 72 61 6d 65 73 20 66 6f 72 20 70 61 67 65 20  frames for page 
fe70: 50 20 74 68 61 74 20 64 6f 20 6e 6f 74 20 65 78  P that do not ex
fe80: 63 65 65 64 20 4d 2e 0a 3c 2f 69 3e 3c 2f 62 6c  ceed M..</i></bl
fe90: 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68  ockquote>..<p>Th
fea0: 65 20 3c 69 3e 4d 3c 2f 69 3e 20 76 61 6c 75 65  e <i>M</i> value
feb0: 20 69 6e 20 74 68 65 20 70 72 65 76 69 6f 75 73   in the previous
fec0: 20 70 61 72 61 67 72 61 70 68 20 69 73 20 74 68   paragraph is th
fed0: 65 20 22 6d 78 46 72 61 6d 65 22 20 76 61 6c 75  e "mxFrame" valu
fee0: 65 0a 64 65 66 69 6e 65 64 20 69 6e 20 5b 57 41  e.defined in [WA
fef0: 4c 20 72 65 61 64 20 61 6c 67 6f 72 69 74 68 6d  L read algorithm
ff00: 20 7c 20 73 65 63 74 69 6f 6e 20 34 2e 34 5d 20   | section 4.4] 
ff10: 74 68 61 74 20 69 73 20 72 65 61 64 20 61 74 20  that is read at 
ff20: 74 68 65 20 73 74 61 72 74 20 0a 6f 66 20 61 20  the start .of a 
ff30: 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6e 64 20  transaction and 
ff40: 77 68 69 63 68 20 64 65 66 69 6e 65 73 20 74 68  which defines th
ff50: 65 20 6d 61 78 69 6d 75 6d 20 66 72 61 6d 65 20  e maximum frame 
ff60: 66 72 6f 6d 20 74 68 65 20 57 41 4c 20 74 68 61  from the WAL tha
ff70: 74 20 0a 74 68 65 20 72 65 61 64 65 72 20 77 69  t .the reader wi
ff80: 6c 6c 20 75 73 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e  ll use.</p>..<p>
ff90: 54 68 65 20 77 61 6c 2d 69 6e 64 65 78 20 69 73  The wal-index is
ffa0: 20 74 72 61 6e 73 69 65 6e 74 2e 20 20 41 66 74   transient.  Aft
ffb0: 65 72 20 61 20 63 72 61 73 68 2c 20 74 68 65 20  er a crash, the 
ffc0: 77 61 6c 2d 69 6e 64 65 78 20 69 73 0a 72 65 63  wal-index is.rec
ffd0: 6f 6e 73 74 72 75 63 74 65 64 20 66 72 6f 6d 20  onstructed from 
ffe0: 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 57 41 4c  the original WAL
fff0: 20 66 69 6c 65 2e 20 20 5e 54 68 65 20 56 46 53   file.  ^The VFS
10000 20 69 73 20 72 65 71 75 69 72 65 64 0a 74 6f 20   is required.to 
10010 65 69 74 68 65 72 20 74 72 75 6e 63 61 74 65 20  either truncate 
10020 6f 72 20 7a 65 72 6f 20 74 68 65 20 68 65 61 64  or zero the head
10030 65 72 20 6f 66 20 74 68 65 20 77 61 6c 2d 69 6e  er of the wal-in
10040 64 65 78 20 77 68 65 6e 20 74 68 65 20 6c 61 73  dex when the las
10050 74 0a 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20  t.connection to 
10060 69 74 20 63 6c 6f 73 65 73 2e 20 20 42 65 63 61  it closes.  Beca
10070 75 73 65 20 74 68 65 20 77 61 6c 2d 69 6e 64 65  use the wal-inde
10080 78 20 69 73 20 74 72 61 6e 73 69 65 6e 74 2c 20  x is transient, 
10090 69 74 20 63 61 6e 0a 75 73 65 20 61 6e 20 61 72  it can.use an ar
100a0 63 68 69 74 65 63 74 75 72 65 2d 73 70 65 63 69  chitecture-speci
100b0 66 69 63 20 66 6f 72 6d 61 74 3b 20 69 74 20 64  fic format; it d
100c0 6f 65 73 20 6e 6f 74 20 68 61 76 65 20 74 6f 20  oes not have to 
100d0 62 65 20 63 72 6f 73 73 2d 70 6c 61 74 66 6f 72  be cross-platfor
100e0 6d 2e 0a 48 65 6e 63 65 2c 20 75 6e 6c 69 6b 65  m..Hence, unlike
100f0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61 6e   the database an
10100 64 20 57 41 4c 20 66 69 6c 65 20 66 6f 72 6d 61  d WAL file forma
10110 74 73 20 77 68 69 63 68 20 73 74 6f 72 65 20 61  ts which store a
10120 6c 6c 20 76 61 6c 75 65 73 0a 61 73 20 62 69 67  ll values.as big
10130 20 65 6e 64 69 61 6e 2c 20 74 68 65 20 77 61 6c   endian, the wal
10140 2d 69 6e 64 65 78 20 73 74 6f 72 65 73 20 6d 75  -index stores mu
10150 6c 74 69 2d 62 79 74 65 20 76 61 6c 75 65 73 20  lti-byte values 
10160 69 6e 20 74 68 65 20 6e 61 74 69 76 65 0a 62 79  in the native.by
10170 74 65 20 6f 72 64 65 72 20 6f 66 20 74 68 65 20  te order of the 
10180 68 6f 73 74 20 63 6f 6d 70 75 74 65 72 2e 3c 2f  host computer.</
10190 70 3e 0a 0a 3c 70 3e 54 68 69 73 20 64 6f 63 75  p>..<p>This docu
101a0 6d 65 6e 74 20 69 73 20 63 6f 6e 63 65 72 6e 65  ment is concerne
101b0 64 20 77 69 74 68 20 74 68 65 20 70 65 72 73 69  d with the persi
101c0 73 74 65 6e 74 20 73 74 61 74 65 20 6f 66 20 74  stent state of t
101d0 68 65 20 64 61 74 61 62 61 73 65 0a 66 69 6c 65  he database.file
101e0 2c 20 61 6e 64 20 73 69 6e 63 65 20 74 68 65 20  , and since the 
101f0 77 61 6c 2d 69 6e 64 65 78 20 69 73 20 61 20 74  wal-index is a t
10200 72 61 6e 73 69 65 6e 74 20 73 74 72 75 63 74 75  ransient structu
10210 72 65 2c 20 6e 6f 20 66 75 72 74 68 65 72 20 0a  re, no further .
10220 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  information abou
10230 74 20 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20  t the format of 
10240 74 68 65 20 77 61 6c 2d 69 6e 64 65 78 20 77 69  the wal-index wi
10250 6c 6c 20 62 65 20 70 72 6f 76 69 64 65 64 20 68  ll be provided h
10260 65 72 65 2e 0a 43 6f 6d 70 6c 65 74 65 20 64 65  ere..Complete de
10270 74 61 69 6c 73 20 6f 6e 20 74 68 65 20 66 6f 72  tails on the for
10280 6d 61 74 20 6f 66 20 74 68 65 20 77 61 6c 2d 69  mat of the wal-i
10290 6e 64 65 78 20 61 72 65 20 63 6f 6e 74 61 69 6e  ndex are contain
102a0 65 64 20 77 69 74 68 69 6e 0a 63 6f 6d 6d 65 6e  ed within.commen
102b0 74 73 20 69 6e 20 53 51 4c 69 74 65 20 73 6f 75  ts in SQLite sou
102c0 72 63 65 20 63 6f 64 65 2e 3c 2f 70 3e 0a        rce code.</p>.