Documentation Source Text

Hex Artifact Content
Login

Artifact c51b198fb3995b5b9399ec87e63246e8a97060ca:


0000: 3c 74 69 74 6c 65 3e 44 61 74 61 62 61 73 65 20  <title>Database 
0010: 46 69 6c 65 20 46 6f 72 6d 61 74 3c 2f 74 69 74  File Format</tit
0020: 6c 65 3e 0a 3c 61 6c 74 2d 74 69 74 6c 65 3e 4f  le>.<alt-title>O
0030: 6e 2d 44 69 73 6b 20 46 6f 72 6d 61 74 3c 2f 61  n-Disk Format</a
0040: 6c 74 2d 74 69 74 6c 65 3e 0a 3c 74 63 6c 3e 68  lt-title>.<tcl>h
0050: 64 5f 6b 65 79 77 6f 72 64 73 20 7b 66 69 6c 65  d_keywords {file
0060: 20 66 6f 72 6d 61 74 7d 20 7b 73 65 63 6f 6e 64   format} {second
0070: 20 65 64 69 74 69 6f 6e 20 66 69 6c 65 20 66 6f   edition file fo
0080: 72 6d 61 74 20 64 6f 63 75 6d 65 6e 74 7d 3c 2f  rmat document}</
0090: 74 63 6c 3e 0a 0a 3c 74 61 62 6c 65 5f 6f 66 5f  tcl>..<table_of_
00a0: 63 6f 6e 74 65 6e 74 73 3e 0a 0a 3c 70 3e 54 68  contents>..<p>Th
00b0: 69 73 20 64 6f 63 75 6d 65 6e 74 20 64 65 73 63  is document desc
00c0: 72 69 62 65 73 20 61 6e 64 20 64 65 66 69 6e 65  ribes and define
00d0: 73 20 74 68 65 20 6f 6e 2d 64 69 73 6b 20 64 61  s the on-disk da
00e0: 74 61 62 61 73 65 20 66 69 6c 65 0a 66 6f 72 6d  tabase file.form
00f0: 61 74 20 75 73 65 64 20 62 79 20 53 51 4c 69 74  at used by SQLit
0100: 65 2e 3c 2f 70 3e 0a 0a 3c 68 31 3e 54 68 65 20  e.</p>..<h1>The 
0110: 44 61 74 61 62 61 73 65 20 46 69 6c 65 3c 2f 68  Database File</h
0120: 31 3e 0a 0a 3c 70 3e 54 68 65 20 63 6f 6d 70 6c  1>..<p>The compl
0130: 65 74 65 20 73 74 61 74 65 20 6f 66 20 61 6e 20  ete state of an 
0140: 53 51 4c 69 74 65 20 64 61 74 61 62 61 73 65 20  SQLite database 
0150: 69 73 20 75 73 75 61 6c 6c 79 0a 63 6f 6e 74 61  is usually.conta
0160: 69 6e 65 64 20 61 20 73 69 6e 67 6c 65 20 66 69  ined a single fi
0170: 6c 65 20 6f 6e 20 64 69 73 6b 20 63 61 6c 6c 65  le on disk calle
0180: 64 20 74 68 65 20 22 6d 61 69 6e 20 64 61 74 61  d the "main data
0190: 62 61 73 65 20 66 69 6c 65 22 2e 3c 2f 70 3e 0a  base file".</p>.
01a0: 0a 3c 70 3e 44 75 72 69 6e 67 20 61 20 74 72 61  .<p>During a tra
01b0: 6e 73 61 63 74 69 6f 6e 2c 20 53 51 4c 69 74 65  nsaction, SQLite
01c0: 20 73 74 6f 72 65 73 20 61 64 64 69 74 69 6f 6e   stores addition
01d0: 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 0a  al information .
01e0: 69 6e 20 61 20 73 65 63 6f 6e 64 20 66 69 6c 65  in a second file
01f0: 20 63 61 6c 6c 65 64 20 74 68 65 20 22 72 6f 6c   called the "rol
0200: 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 22 2c 20  lback journal", 
0210: 6f 72 20 69 66 20 53 51 4c 69 74 65 20 69 73 20  or if SQLite is 
0220: 69 6e 0a 5b 57 41 4c 20 6d 6f 64 65 5d 2c 20 61  in.[WAL mode], a
0230: 20 77 72 69 74 65 2d 61 68 65 61 64 20 6c 6f 67   write-ahead log
0240: 20 66 69 6c 65 2e 0a 49 66 20 74 68 65 20 61 70   file..If the ap
0250: 70 6c 69 63 61 74 69 6f 6e 20 6f 72 0a 68 6f 73  plication or.hos
0260: 74 20 63 6f 6d 70 75 74 65 72 20 63 72 61 73 68  t computer crash
0270: 65 73 20 62 65 66 6f 72 65 20 74 68 65 20 74 72  es before the tr
0280: 61 6e 73 61 63 74 69 6f 6e 20 63 6f 6d 70 6c 65  ansaction comple
0290: 74 65 73 2c 20 74 68 65 6e 20 74 68 65 20 72 6f  tes, then the ro
02a0: 6c 6c 62 61 63 6b 0a 6a 6f 75 72 6e 61 6c 20 6f  llback.journal o
02b0: 72 20 77 72 69 74 65 2d 61 68 65 61 64 20 6c 6f  r write-ahead lo
02c0: 67 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72  g contains infor
02d0: 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64 20 0a 74  mation needed .t
02e0: 6f 20 72 65 73 74 6f 72 65 20 74 68 65 20 6d 61  o restore the ma
02f0: 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
0300: 20 74 6f 20 61 20 63 6f 6e 73 69 73 74 65 6e 74   to a consistent
0310: 20 73 74 61 74 65 2e 20 20 57 68 65 6e 20 61 20   state.  When a 
0320: 72 6f 6c 6c 62 61 63 6b 20 0a 6a 6f 75 72 6e 61  rollback .journa
0330: 6c 20 6f 72 20 77 72 69 74 65 2d 61 68 65 61 64  l or write-ahead
0340: 20 6c 6f 67 20 63 6f 6e 74 61 69 6e 73 20 69 6e   log contains in
0350: 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 63 65 73 73  formation necess
0360: 61 72 79 20 66 6f 72 20 72 65 63 6f 76 65 72 69  ary for recoveri
0370: 6e 67 20 0a 74 68 65 20 73 74 61 74 65 20 6f 66  ng .the state of
0380: 20 74 68 65 20 64 61 74 61 62 61 73 65 2c 20 74   the database, t
0390: 68 65 79 20 61 72 65 20 63 61 6c 6c 65 64 20 61  hey are called a
03a0: 20 22 68 6f 74 20 6a 6f 75 72 6e 61 6c 22 20 6f   "hot journal" o
03b0: 72 20 22 68 6f 74 20 57 41 4c 20 66 69 6c 65 22  r "hot WAL file"
03c0: 2e 0a 48 6f 74 20 6a 6f 75 72 6e 61 6c 73 20 61  ..Hot journals a
03d0: 6e 64 20 57 41 4c 20 66 69 6c 65 73 20 61 72 65  nd WAL files are
03e0: 20 6f 6e 6c 79 20 61 20 66 61 63 74 6f 72 20 64   only a factor d
03f0: 75 72 69 6e 67 20 65 72 72 6f 72 20 72 65 63 6f  uring error reco
0400: 76 65 72 79 0a 73 63 65 6e 61 72 69 6f 73 20 61  very.scenarios a
0410: 6e 64 20 73 6f 20 61 72 65 20 75 6e 63 6f 6d 6d  nd so are uncomm
0420: 6f 6e 2c 20 62 75 74 20 74 68 65 79 20 61 72 65  on, but they are
0430: 20 70 61 72 74 20 6f 66 20 74 68 65 20 73 74 61   part of the sta
0440: 74 65 20 6f 66 20 61 6e 20 53 51 4c 69 74 65 0a  te of an SQLite.
0450: 64 61 74 61 62 61 73 65 20 61 6e 64 20 73 6f 20  database and so 
0460: 63 61 6e 6e 6f 74 20 62 65 20 69 67 6e 6f 72 65  cannot be ignore
0470: 64 2e 20 20 54 68 69 73 20 64 6f 63 75 6d 65 6e  d.  This documen
0480: 74 20 64 65 66 69 6e 65 73 20 74 68 65 20 66 6f  t defines the fo
0490: 72 6d 61 74 0a 6f 66 20 61 20 72 6f 6c 6c 62 61  rmat.of a rollba
04a0: 63 6b 20 6a 6f 75 72 6e 61 6c 20 61 6e 64 20 74  ck journal and t
04b0: 68 65 20 77 72 69 74 65 2d 61 68 65 61 64 20 6c  he write-ahead l
04c0: 6f 67 20 66 69 6c 65 2c 20 62 75 74 20 74 68 65  og file, but the
04d0: 20 66 6f 63 75 73 20 69 73 0a 6f 6e 20 74 68 65   focus is.on the
04e0: 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
04f0: 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 68 32 3e 50 61  ile.</p>..<h2>Pa
0500: 67 65 73 3c 2f 68 32 3e 0a 0a 3c 70 3e 54 68 65  ges</h2>..<p>The
0510: 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
0520: 69 6c 65 20 63 6f 6e 73 69 73 74 73 20 6f 66 20  ile consists of 
0530: 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 70 61 67 65  one or more page
0540: 73 2e 20 20 5e 54 68 65 20 73 69 7a 65 20 6f 66  s.  ^The size of
0550: 20 61 0a 70 61 67 65 20 69 73 20 61 20 70 6f 77   a.page is a pow
0560: 65 72 20 6f 66 20 74 77 6f 20 62 65 74 77 65 65  er of two betwee
0570: 6e 20 35 31 32 20 61 6e 64 20 36 35 35 33 36 20  n 512 and 65536 
0580: 69 6e 63 6c 75 73 69 76 65 2e 20 20 41 6c 6c 20  inclusive.  All 
0590: 70 61 67 65 73 20 77 69 74 68 69 6e 0a 74 68 65  pages within.the
05a0: 20 73 61 6d 65 20 64 61 74 61 62 61 73 65 20 61   same database a
05b0: 72 65 20 74 68 65 20 73 61 6d 65 20 73 69 7a 65  re the same size
05c0: 2e 20 20 5e 54 68 65 20 70 61 67 65 20 73 69 7a  .  ^The page siz
05d0: 65 20 66 6f 72 20 61 20 64 61 74 61 62 61 73 65  e for a database
05e0: 20 66 69 6c 65 0a 69 73 20 64 65 74 65 72 6d 69   file.is determi
05f0: 6e 65 64 20 62 79 20 74 68 65 20 32 2d 62 79 74  ned by the 2-byt
0600: 65 20 69 6e 74 65 67 65 72 20 6c 6f 63 61 74 65  e integer locate
0610: 64 20 61 74 20 61 6e 20 6f 66 66 73 65 74 20 6f  d at an offset o
0620: 66 0a 31 36 20 62 79 74 65 73 20 66 72 6f 6d 20  f.16 bytes from 
0630: 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66  the beginning of
0640: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
0650: 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 50 61 67 65  le.</p>..<p>Page
0660: 73 20 61 72 65 20 6e 75 6d 62 65 72 65 64 20 62  s are numbered b
0670: 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 31 2e  eginning with 1.
0680: 20 20 54 68 65 20 6d 61 78 69 6d 75 6d 20 70 61    The maximum pa
0690: 67 65 20 6e 75 6d 62 65 72 20 69 73 0a 32 31 34  ge number is.214
06a0: 37 34 38 33 36 34 36 20 28 32 3c 73 75 70 3e 3c  7483646 (2<sup><
06b0: 73 6d 61 6c 6c 3e 33 31 3c 2f 73 6d 61 6c 6c 3e  small>31</small>
06c0: 3c 2f 73 75 70 3e 20 2d 20 32 29 2e 20 20 54 68  </sup> - 2).  Th
06d0: 65 20 6d 69 6e 69 6d 75 6d 20 73 69 7a 65 0a 53  e minimum size.S
06e0: 51 4c 69 74 65 20 64 61 74 61 62 61 73 65 20 69  QLite database i
06f0: 73 20 61 20 73 69 6e 67 6c 65 20 35 31 32 2d 62  s a single 512-b
0700: 79 74 65 20 70 61 67 65 2e 0a 54 68 65 20 6d 61  yte page..The ma
0710: 78 69 6d 75 6d 20 73 69 7a 65 20 64 61 74 61 62  ximum size datab
0720: 61 73 65 20 77 6f 75 6c 64 20 62 65 20 32 31 34  ase would be 214
0730: 37 34 38 33 36 34 36 20 70 61 67 65 73 20 61 74  7483646 pages at
0740: 20 36 35 35 33 36 20 62 79 74 65 73 20 70 65 72   65536 bytes per
0750: 0a 70 61 67 65 20 6f 72 20 31 34 30 2c 37 33 37  .page or 140,737
0760: 2c 34 38 38 2c 32 32 34 2c 32 35 36 20 62 79 74  ,488,224,256 byt
0770: 65 73 20 28 61 62 6f 75 74 20 31 34 30 20 74 65  es (about 140 te
0780: 72 61 62 79 74 65 73 29 2e 20 20 55 73 75 61 6c  rabytes).  Usual
0790: 6c 79 20 53 51 4c 69 74 65 20 77 69 6c 6c 0a 68  ly SQLite will.h
07a0: 69 74 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 66  it the maximum f
07b0: 69 6c 65 20 73 69 7a 65 20 6c 69 6d 69 74 20 6f  ile size limit o
07c0: 66 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67  f the underlying
07d0: 20 66 69 6c 65 73 79 73 74 65 6d 20 6f 72 20 64   filesystem or d
07e0: 69 73 6b 0a 68 61 72 64 77 61 72 65 20 6c 6f 6e  isk.hardware lon
07f0: 67 20 62 65 66 6f 72 65 20 69 74 20 68 69 74 73  g before it hits
0800: 20 69 74 73 20 6f 77 6e 20 69 6e 74 65 72 6e 61   its own interna
0810: 6c 20 73 69 7a 65 20 6c 69 6d 69 74 2e 3c 2f 70  l size limit.</p
0820: 3e 0a 0a 3c 70 3e 49 6e 20 63 6f 6d 6d 6f 6e 20  >..<p>In common 
0830: 75 73 65 2c 20 53 51 4c 69 74 65 20 64 61 74 61  use, SQLite data
0840: 62 61 73 65 73 20 74 65 6e 64 20 74 6f 20 72 61  bases tend to ra
0850: 6e 67 65 20 69 6e 20 73 69 7a 65 20 66 72 6f 6d  nge in size from
0860: 20 61 20 66 65 77 20 6b 69 6c 6f 62 79 74 65 73   a few kilobytes
0870: 0a 74 6f 20 61 20 66 65 77 20 67 69 67 61 62 79  .to a few gigaby
0880: 74 65 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 74 20  tes.</p>..<p>At 
0890: 61 6e 79 20 70 6f 69 6e 74 20 69 6e 20 74 69 6d  any point in tim
08a0: 65 2c 20 65 76 65 72 79 20 70 61 67 65 20 69 6e  e, every page in
08b0: 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
08c0: 73 65 20 68 61 73 20 61 20 73 69 6e 67 6c 65 0a  se has a single.
08d0: 75 73 65 20 77 68 69 63 68 20 69 73 20 6f 6e 65  use which is one
08e0: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
08f0: 67 3a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 54 68 65 20  g:.<ul>.<li>The 
0900: 6c 6f 63 6b 2d 62 79 74 65 20 70 61 67 65 0a 3c  lock-byte page.<
0910: 6c 69 3e 41 20 66 72 65 65 6c 69 73 74 20 70 61  li>A freelist pa
0920: 67 65 0a 3c 75 6c 3e 0a 3c 6c 69 3e 41 20 66 72  ge.<ul>.<li>A fr
0930: 65 65 6c 69 73 74 20 74 72 75 6e 6b 20 70 61 67  eelist trunk pag
0940: 65 0a 3c 6c 69 3e 41 20 66 72 65 65 6c 69 73 74  e.<li>A freelist
0950: 20 6c 65 61 66 20 70 61 67 65 0a 3c 2f 75 6c 3e   leaf page.</ul>
0960: 0a 3c 6c 69 3e 41 20 62 2d 74 72 65 65 20 70 61  .<li>A b-tree pa
0970: 67 65 0a 3c 75 6c 3e 0a 3c 6c 69 3e 41 20 74 61  ge.<ul>.<li>A ta
0980: 62 6c 65 20 62 2d 74 72 65 65 20 69 6e 74 65 72  ble b-tree inter
0990: 69 6f 72 20 70 61 67 65 0a 3c 6c 69 3e 41 20 74  ior page.<li>A t
09a0: 61 62 6c 65 20 62 2d 74 72 65 65 20 6c 65 61 66  able b-tree leaf
09b0: 20 70 61 67 65 0a 3c 6c 69 3e 41 6e 20 69 6e 64   page.<li>An ind
09c0: 65 78 20 62 2d 74 72 65 65 20 69 6e 74 65 72 69  ex b-tree interi
09d0: 6f 72 20 70 61 67 65 0a 3c 6c 69 3e 41 6e 20 69  or page.<li>An i
09e0: 6e 64 65 78 20 62 2d 74 72 65 65 20 6c 65 61 66  ndex b-tree leaf
09f0: 20 70 61 67 65 0a 3c 2f 75 6c 3e 0a 3c 6c 69 3e   page.</ul>.<li>
0a00: 41 20 70 61 79 6c 6f 61 64 20 6f 76 65 72 66 6c  A payload overfl
0a10: 6f 77 20 70 61 67 65 0a 3c 6c 69 3e 41 20 70 6f  ow page.<li>A po
0a20: 69 6e 74 65 72 20 6d 61 70 20 70 61 67 65 0a 3c  inter map page.<
0a30: 2f 75 6c 3e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41  /ul>.</p>..<p>^A
0a40: 6c 6c 20 72 65 61 64 73 20 66 72 6f 6d 20 61 6e  ll reads from an
0a50: 64 20 77 72 69 74 65 73 20 74 6f 20 74 68 65 20  d writes to the 
0a60: 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
0a70: 6c 65 20 62 65 67 69 6e 20 61 74 20 61 20 70 61  le begin at a pa
0a80: 67 65 0a 62 6f 75 6e 64 61 72 79 20 61 6e 64 20  ge.boundary and 
0a90: 61 6c 6c 20 77 72 69 74 65 73 20 61 72 65 20 61  all writes are a
0aa0: 6e 20 69 6e 74 65 67 65 72 20 6e 75 6d 62 65 72  n integer number
0ab0: 20 6f 66 20 70 61 67 65 73 20 69 6e 20 73 69 7a   of pages in siz
0ac0: 65 2e 20 20 5e 52 65 61 64 73 0a 61 72 65 20 61  e.  ^Reads.are a
0ad0: 6c 73 6f 20 75 73 75 61 6c 6c 79 20 61 6e 20 69  lso usually an i
0ae0: 6e 74 65 67 65 72 20 6e 75 6d 62 65 72 20 6f 66  nteger number of
0af0: 20 70 61 67 65 73 20 69 6e 20 73 69 7a 65 2c 20   pages in size, 
0b00: 77 69 74 68 20 74 68 65 20 6f 6e 65 20 65 78 63  with the one exc
0b10: 65 70 74 69 6f 6e 0a 74 68 61 74 20 77 68 65 6e  eption.that when
0b20: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73   the database is
0b30: 20 66 69 72 73 74 20 6f 70 65 6e 65 64 2c 20 74   first opened, t
0b40: 68 65 20 66 69 72 73 74 20 31 30 30 20 62 79 74  he first 100 byt
0b50: 65 73 20 6f 66 20 74 68 65 0a 64 61 74 61 62 61  es of the.databa
0b60: 73 65 20 66 69 6c 65 20 28 74 68 65 20 64 61 74  se file (the dat
0b70: 61 62 61 73 65 20 66 69 6c 65 20 68 65 61 64 65  abase file heade
0b80: 72 29 20 61 72 65 20 72 65 61 64 20 61 73 20 61  r) are read as a
0b90: 20 73 75 62 2d 70 61 67 65 20 73 69 7a 65 20 75   sub-page size u
0ba0: 6e 69 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 42 65  nit.</p>..<p>^Be
0bb0: 66 6f 72 65 20 61 6e 79 20 69 6e 66 6f 72 6d 61  fore any informa
0bc0: 74 69 6f 6e 2d 62 65 61 72 69 6e 67 20 70 61 67  tion-bearing pag
0bd0: 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  e of the databas
0be0: 65 20 69 73 20 6d 6f 64 69 66 69 65 64 2c 20 0a  e is modified, .
0bf0: 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 75 6e 6d  the original unm
0c00: 6f 64 69 66 69 65 64 20 63 6f 6e 74 65 6e 74 20  odified content 
0c10: 6f 66 20 74 68 61 74 20 70 61 67 65 20 69 73 20  of that page is 
0c20: 77 72 69 74 74 65 6e 20 69 6e 74 6f 20 74 68 65  written into the
0c30: 20 0a 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e   .rollback journ
0c40: 61 6c 2e 20 20 49 66 20 61 20 74 72 61 6e 73 61  al.  If a transa
0c50: 63 74 69 6f 6e 20 69 73 20 69 6e 74 65 72 72 75  ction is interru
0c60: 70 74 65 64 20 61 6e 64 20 6e 65 65 64 73 20 74  pted and needs t
0c70: 6f 20 62 65 20 0a 72 6f 6c 6c 65 64 20 62 61 63  o be .rolled bac
0c80: 6b 2c 20 74 68 65 20 72 6f 6c 6c 62 61 63 6b 20  k, the rollback 
0c90: 6a 6f 75 72 6e 61 6c 20 63 61 6e 20 74 68 65 6e  journal can then
0ca0: 20 62 65 20 75 73 65 64 20 74 6f 20 72 65 73 74   be used to rest
0cb0: 6f 72 65 20 74 68 65 0a 64 61 74 61 62 61 73 65  ore the.database
0cc0: 20 74 6f 20 69 74 73 20 6f 72 69 67 69 6e 61 6c   to its original
0cd0: 20 73 74 61 74 65 2e 20 20 5e 46 72 65 65 6c 69   state.  ^Freeli
0ce0: 73 74 20 6c 65 61 66 20 70 61 67 65 73 20 62 65  st leaf pages be
0cf0: 61 72 20 6e 6f 0a 69 6e 66 6f 72 6d 61 74 69 6f  ar no.informatio
0d00: 6e 20 74 68 61 74 20 77 6f 75 6c 64 20 6e 65 65  n that would nee
0d10: 64 20 74 6f 20 62 65 20 72 65 73 74 6f 72 65 64  d to be restored
0d20: 20 6f 6e 20 61 20 72 6f 6c 6c 62 61 63 6b 20 61   on a rollback a
0d30: 6e 64 20 73 6f 20 74 68 65 79 0a 61 72 65 20 6e  nd so they.are n
0d40: 6f 74 20 77 72 69 74 74 65 6e 20 74 6f 20 74 68  ot written to th
0d50: 65 20 6a 6f 75 72 6e 61 6c 20 70 72 69 6f 72 20  e journal prior 
0d60: 74 6f 20 6d 6f 64 69 66 69 63 61 74 69 6f 6e 2c  to modification,
0d70: 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 72 65 64   in order to.red
0d80: 75 63 65 20 64 69 73 6b 20 49 2f 4f 2e 3c 2f 70  uce disk I/O.</p
0d90: 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
0da0: 65 6e 74 20 64 61 74 61 62 61 73 65 5f 68 65 61  ent database_hea
0db0: 64 65 72 20 7b 64 61 74 61 62 61 73 65 20 68 65  der {database he
0dc0: 61 64 65 72 7d 3c 2f 74 63 6c 3e 0a 3c 68 32 3e  ader}</tcl>.<h2>
0dd0: 54 68 65 20 44 61 74 61 62 61 73 65 20 48 65 61  The Database Hea
0de0: 64 65 72 3c 2f 68 32 3e 0a 0a 3c 70 3e 54 68 65  der</h2>..<p>The
0df0: 20 66 69 72 73 74 20 31 30 30 20 62 79 74 65 73   first 100 bytes
0e00: 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
0e10: 20 66 69 6c 65 20 63 6f 6d 70 72 69 73 65 20 74   file comprise t
0e20: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
0e30: 20 0a 68 65 61 64 65 72 2e 20 20 54 68 65 20 64   .header.  The d
0e40: 61 74 61 62 61 73 65 20 66 69 6c 65 20 68 65 61  atabase file hea
0e50: 64 65 72 20 69 73 20 64 69 76 69 64 65 64 20 69  der is divided i
0e60: 6e 74 6f 20 66 69 65 6c 64 73 20 61 73 20 73 68  nto fields as sh
0e70: 6f 77 6e 20 62 79 0a 74 68 65 20 74 61 62 6c 65  own by.the table
0e80: 20 62 65 6c 6f 77 2e 20 20 41 6c 6c 20 6d 75 6c   below.  All mul
0e90: 74 69 62 79 74 65 20 66 69 65 6c 64 73 20 69 6e  tibyte fields in
0ea0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
0eb0: 6c 65 20 68 65 61 64 65 72 20 61 72 65 0a 73 74  le header are.st
0ec0: 6f 72 65 64 20 77 69 74 68 20 74 68 65 20 6d 6f  ored with the mo
0ed0: 73 74 20 73 69 67 6e 69 66 69 63 61 6e 74 20 62  st significant b
0ee0: 79 74 65 20 66 69 72 73 74 20 28 62 69 67 2d 65  yte first (big-e
0ef0: 6e 64 69 61 6e 29 2e 3c 2f 70 3e 0a 0a 3c 63 65  ndian).</p>..<ce
0f00: 6e 74 65 72 3e 0a 3c 69 3e 44 61 74 61 62 61 73  nter>.<i>Databas
0f10: 65 20 48 65 61 64 65 72 20 46 6f 72 6d 61 74 3c  e Header Format<
0f20: 2f 69 3e 3c 62 72 3e 0a 3c 74 61 62 6c 65 20 77  /i><br>.<table w
0f30: 69 64 74 68 3d 22 38 30 25 22 20 62 6f 72 64 65  idth="80%" borde
0f40: 72 3d 31 3e 0a 3c 74 72 3e 3c 74 68 3e 4f 66 66  r=1>.<tr><th>Off
0f50: 73 65 74 3c 74 68 3e 53 69 7a 65 3c 74 68 3e 44  set<th>Size<th>D
0f60: 65 73 63 72 69 70 74 69 6f 6e 0a 3c 74 72 3e 3c  escription.<tr><
0f70: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
0f80: 69 67 6e 3d 63 65 6e 74 65 72 3e 30 3c 74 64 20  ign=center>0<td 
0f90: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
0fa0: 3d 63 65 6e 74 65 72 3e 31 36 3c 74 64 20 61 6c  =center>16<td al
0fb0: 69 67 6e 3d 6c 65 66 74 3e 0a 54 68 65 20 68 65  ign=left>.The he
0fc0: 61 64 65 72 20 73 74 72 69 6e 67 3a 20 22 53 51  ader string: "SQ
0fd0: 4c 69 74 65 20 66 6f 72 6d 61 74 20 33 5c 30 30  Lite format 3\00
0fe0: 30 22 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  0".<tr><td valig
0ff0: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
1000: 65 72 3e 31 36 3c 74 64 20 76 61 6c 69 67 6e 3d  er>16<td valign=
1010: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
1020: 3e 32 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74  >2<td align=left
1030: 3e 0a 54 68 65 20 64 61 74 61 62 61 73 65 20 70  >.The database p
1040: 61 67 65 20 73 69 7a 65 20 69 6e 20 62 79 74 65  age size in byte
1050: 73 2e 20 20 4d 75 73 74 20 62 65 20 61 20 70 6f  s.  Must be a po
1060: 77 65 72 20 6f 66 20 74 77 6f 20 62 65 74 77 65  wer of two betwe
1070: 65 6e 20 35 31 32 0a 61 6e 64 20 33 32 37 36 38  en 512.and 32768
1080: 20 69 6e 63 6c 75 73 69 76 65 2c 20 6f 72 20 74   inclusive, or t
1090: 68 65 20 76 61 6c 75 65 20 31 20 72 65 70 72 65  he value 1 repre
10a0: 73 65 6e 74 69 6e 67 20 61 20 70 61 67 65 20 73  senting a page s
10b0: 69 7a 65 20 6f 66 20 36 35 35 33 36 2e 0a 3c 74  ize of 65536..<t
10c0: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
10d0: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 38   align=center>18
10e0: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
10f0: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 3c 74 64  lign=center>1<td
1100: 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 46 69 6c   align=left>.Fil
1110: 65 20 66 6f 72 6d 61 74 20 77 72 69 74 65 20 76  e format write v
1120: 65 72 73 69 6f 6e 2e 20 20 31 20 66 6f 72 20 6c  ersion.  1 for l
1130: 65 67 61 63 79 3b 20 32 20 66 6f 72 20 5b 57 41  egacy; 2 for [WA
1140: 4c 5d 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  L]..<tr><td vali
1150: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
1160: 74 65 72 3e 31 39 3c 74 64 20 76 61 6c 69 67 6e  ter>19<td valign
1170: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
1180: 72 3e 31 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66  r>1<td align=lef
1190: 74 3e 0a 46 69 6c 65 20 66 6f 72 6d 61 74 20 72  t>.File format r
11a0: 65 61 64 20 76 65 72 73 69 6f 6e 2e 20 20 31 20  ead version.  1 
11b0: 66 6f 72 20 6c 65 67 61 63 79 3b 20 32 20 66 6f  for legacy; 2 fo
11c0: 72 20 5b 57 41 4c 5d 2e 0a 3c 74 72 3e 3c 74 64  r [WAL]..<tr><td
11d0: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
11e0: 6e 3d 63 65 6e 74 65 72 3e 32 30 3c 74 64 20 76  n=center>20<td v
11f0: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
1200: 63 65 6e 74 65 72 3e 31 3c 74 64 20 61 6c 69 67  center>1<td alig
1210: 6e 3d 6c 65 66 74 3e 0a 42 79 74 65 73 20 6f 66  n=left>.Bytes of
1220: 20 75 6e 75 73 65 64 20 22 72 65 73 65 72 76 65   unused "reserve
1230: 64 22 20 73 70 61 63 65 20 61 74 20 74 68 65 20  d" space at the 
1240: 65 6e 64 20 6f 66 20 65 61 63 68 20 70 61 67 65  end of each page
1250: 2e 20 20 55 73 75 61 6c 6c 79 20 30 2e 0a 3c 74  .  Usually 0..<t
1260: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
1270: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32 31   align=center>21
1280: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
1290: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 3c 74 64  lign=center>1<td
12a0: 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 4d 61 78   align=left>.Max
12b0: 69 6d 75 6d 20 65 6d 62 65 64 64 65 64 20 70 61  imum embedded pa
12c0: 79 6c 6f 61 64 20 66 72 61 63 74 69 6f 6e 2e 20  yload fraction. 
12d0: 20 4d 75 73 74 20 62 65 20 36 34 2e 0a 3c 74 72   Must be 64..<tr
12e0: 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
12f0: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32 32 3c  align=center>22<
1300: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
1310: 69 67 6e 3d 63 65 6e 74 65 72 3e 31 3c 74 64 20  ign=center>1<td 
1320: 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 4d 69 6e 69  align=left>.Mini
1330: 6d 75 6d 20 65 6d 62 65 64 64 65 64 20 70 61 79  mum embedded pay
1340: 6c 6f 61 64 20 66 72 61 63 74 69 6f 6e 2e 20 20  load fraction.  
1350: 4d 75 73 74 20 62 65 20 33 32 2e 0a 3c 74 72 3e  Must be 32..<tr>
1360: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
1370: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32 33 3c 74  lign=center>23<t
1380: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
1390: 67 6e 3d 63 65 6e 74 65 72 3e 31 3c 74 64 20 61  gn=center>1<td a
13a0: 6c 69 67 6e 3d 6c 65 66 74 3e 0a 4c 65 61 66 20  lign=left>.Leaf 
13b0: 70 61 79 6c 6f 61 64 20 66 72 61 63 74 69 6f 6e  payload fraction
13c0: 2e 20 20 4d 75 73 74 20 62 65 20 33 32 2e 0a 3c  .  Must be 32..<
13d0: 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
13e0: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32  p align=center>2
13f0: 34 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  4<td valign=top 
1400: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 3c 74  align=center>4<t
1410: 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 46 69  d align=left>.Fi
1420: 6c 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65  le change counte
1430: 72 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  r..<tr><td valig
1440: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
1450: 65 72 3e 32 38 3c 74 64 20 76 61 6c 69 67 6e 3d  er>28<td valign=
1460: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
1470: 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74  >4<td align=left
1480: 3e 0a 53 69 7a 65 20 6f 66 20 74 68 65 20 64 61  >.Size of the da
1490: 74 61 62 61 73 65 20 66 69 6c 65 20 69 6e 20 70  tabase file in p
14a0: 61 67 65 73 2e 20 20 54 68 65 20 22 69 6e 2d 68  ages.  The "in-h
14b0: 65 61 64 65 72 20 64 61 74 61 62 61 73 65 20 73  eader database s
14c0: 69 7a 65 22 2e 0a 3c 74 72 3e 3c 74 64 20 76 61  ize"..<tr><td va
14d0: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
14e0: 65 6e 74 65 72 3e 33 32 3c 74 64 20 76 61 6c 69  enter>32<td vali
14f0: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
1500: 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c  ter>4<td align=l
1510: 65 66 74 3e 0a 50 61 67 65 20 6e 75 6d 62 65 72  eft>.Page number
1520: 20 6f 66 20 74 68 65 20 66 69 72 73 74 20 66 72   of the first fr
1530: 65 65 6c 69 73 74 20 74 72 75 6e 6b 20 70 61 67  eelist trunk pag
1540: 65 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  e..<tr><td valig
1550: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
1560: 65 72 3e 33 36 3c 74 64 20 76 61 6c 69 67 6e 3d  er>36<td valign=
1570: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
1580: 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74  >4<td align=left
1590: 3e 0a 54 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f  >.Total number o
15a0: 66 20 66 72 65 65 6c 69 73 74 20 70 61 67 65 73  f freelist pages
15b0: 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  ..<tr><td valign
15c0: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
15d0: 72 3e 34 30 3c 74 64 20 76 61 6c 69 67 6e 3d 74  r>40<td valign=t
15e0: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
15f0: 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e  4<td align=left>
1600: 0a 54 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b  .The schema cook
1610: 69 65 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  ie..<tr><td vali
1620: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
1630: 74 65 72 3e 34 34 3c 74 64 20 76 61 6c 69 67 6e  ter>44<td valign
1640: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
1650: 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66  r>4<td align=lef
1660: 74 3e 0a 54 68 65 20 73 63 68 65 6d 61 20 66 6f  t>.The schema fo
1670: 72 6d 61 74 20 6e 75 6d 62 65 72 2e 20 20 53 75  rmat number.  Su
1680: 70 70 6f 72 74 65 64 20 73 63 68 65 6d 61 20 66  pported schema f
1690: 6f 72 6d 61 74 73 20 61 72 65 20 31 2c 20 32 2c  ormats are 1, 2,
16a0: 20 33 2c 20 61 6e 64 20 34 2e 0a 3c 74 72 3e 3c   3, and 4..<tr><
16b0: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
16c0: 69 67 6e 3d 63 65 6e 74 65 72 3e 34 38 3c 74 64  ign=center>48<td
16d0: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
16e0: 6e 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c  n=center>4<td al
16f0: 69 67 6e 3d 6c 65 66 74 3e 0a 44 65 66 61 75 6c  ign=left>.Defaul
1700: 74 20 70 61 67 65 20 63 61 63 68 65 20 73 69 7a  t page cache siz
1710: 65 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  e..<tr><td valig
1720: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
1730: 65 72 3e 35 32 3c 74 64 20 76 61 6c 69 67 6e 3d  er>52<td valign=
1740: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
1750: 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74  >4<td align=left
1760: 3e 0a 54 68 65 20 70 61 67 65 20 6e 75 6d 62 65  >.The page numbe
1770: 72 20 6f 66 20 74 68 65 20 6c 61 72 67 65 73 74  r of the largest
1780: 20 72 6f 6f 74 20 62 2d 74 72 65 65 20 70 61 67   root b-tree pag
1790: 65 20 77 68 65 6e 20 69 6e 20 61 75 74 6f 2d 76  e when in auto-v
17a0: 61 63 75 75 6d 20 6f 72 0a 69 6e 63 72 65 6d 65  acuum or.increme
17b0: 6e 74 61 6c 2d 76 61 63 75 75 6d 20 6d 6f 64 65  ntal-vacuum mode
17c0: 73 2c 20 6f 72 20 7a 65 72 6f 20 6f 74 68 65 72  s, or zero other
17d0: 77 69 73 65 2e 0a 3c 74 72 3e 3c 74 64 20 76 61  wise..<tr><td va
17e0: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
17f0: 65 6e 74 65 72 3e 35 36 3c 74 64 20 76 61 6c 69  enter>56<td vali
1800: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
1810: 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c  ter>4<td align=l
1820: 65 66 74 3e 0a 54 68 65 20 64 61 74 61 62 61 73  eft>.The databas
1830: 65 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 2e  e text encoding.
1840: 20 20 41 20 76 61 6c 75 65 20 6f 66 20 31 20 6d    A value of 1 m
1850: 65 61 6e 73 20 55 54 46 2d 38 2e 20 20 41 20 76  eans UTF-8.  A v
1860: 61 6c 75 65 20 6f 66 20 32 0a 6d 65 61 6e 73 20  alue of 2.means 
1870: 55 54 46 2d 31 36 6c 65 2e 20 20 41 20 76 61 6c  UTF-16le.  A val
1880: 75 65 20 6f 66 20 33 20 6d 65 61 6e 73 20 55 54  ue of 3 means UT
1890: 46 2d 31 36 62 65 2e 0a 3c 74 72 3e 3c 74 64 20  F-16be..<tr><td 
18a0: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
18b0: 3d 63 65 6e 74 65 72 3e 36 30 3c 74 64 20 76 61  =center>60<td va
18c0: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
18d0: 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e  enter>4<td align
18e0: 3d 6c 65 66 74 3e 0a 54 68 65 20 22 75 73 65 72  =left>.The "user
18f0: 20 76 65 72 73 69 6f 6e 22 20 61 73 20 72 65 61   version" as rea
1900: 64 20 61 6e 64 20 73 65 74 20 62 79 20 74 68 65  d and set by the
1910: 20 5b 75 73 65 72 5f 76 65 72 73 69 6f 6e 20 70   [user_version p
1920: 72 61 67 6d 61 5d 2e 0a 3c 74 72 3e 3c 74 64 20  ragma]..<tr><td 
1930: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
1940: 3d 63 65 6e 74 65 72 3e 36 34 3c 74 64 20 76 61  =center>64<td va
1950: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
1960: 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e  enter>4<td align
1970: 3d 6c 65 66 74 3e 0a 54 72 75 65 20 28 6e 6f 6e  =left>.True (non
1980: 2d 7a 65 72 6f 29 20 66 6f 72 20 69 6e 63 72 65  -zero) for incre
1990: 6d 65 6e 74 61 6c 2d 76 61 63 75 75 6d 20 6d 6f  mental-vacuum mo
19a0: 64 65 2e 20 20 46 61 6c 73 65 20 28 7a 65 72 6f  de.  False (zero
19b0: 29 20 6f 74 68 65 72 77 69 73 65 2e 0a 3c 74 72  ) otherwise..<tr
19c0: 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
19d0: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 36 38 3c  align=center>68<
19e0: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
19f0: 69 67 6e 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20  ign=center>4<td 
1a00: 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 54 68 65 20  align=left>.The 
1a10: 22 41 70 70 6c 69 63 61 74 69 6f 6e 20 49 44 22  "Application ID"
1a20: 20 73 65 74 20 62 79 20 5b 50 52 41 47 4d 41 20   set by [PRAGMA 
1a30: 61 70 70 6c 69 63 61 74 69 6f 6e 5f 69 64 5d 2e  application_id].
1a40: 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d  .<tr><td valign=
1a50: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
1a60: 3e 37 32 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  >72<td valign=to
1a70: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32  p align=center>2
1a80: 30 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e  0<td align=left>
1a90: 0a 52 65 73 65 72 76 65 64 20 66 6f 72 20 65 78  .Reserved for ex
1aa0: 70 61 6e 73 69 6f 6e 2e 20 20 4d 75 73 74 20 62  pansion.  Must b
1ab0: 65 20 7a 65 72 6f 2e 0a 3c 74 72 3e 3c 74 64 20  e zero..<tr><td 
1ac0: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
1ad0: 3d 63 65 6e 74 65 72 3e 39 32 3c 74 64 20 76 61  =center>92<td va
1ae0: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
1af0: 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e  enter>4<td align
1b00: 3d 6c 65 66 74 3e 0a 54 68 65 20 5b 76 65 72 73  =left>.The [vers
1b10: 69 6f 6e 2d 76 61 6c 69 64 2d 66 6f 72 20 6e 75  ion-valid-for nu
1b20: 6d 62 65 72 5d 2e 0a 3c 74 72 3e 3c 74 64 20 76  mber]..<tr><td v
1b30: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
1b40: 63 65 6e 74 65 72 3e 39 36 3c 74 64 20 76 61 6c  center>96<td val
1b50: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
1b60: 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d  nter>4<td align=
1b70: 6c 65 66 74 3e 0a 5b 53 51 4c 49 54 45 5f 56 45  left>.[SQLITE_VE
1b80: 52 53 49 4f 4e 5f 4e 55 4d 42 45 52 5d 0a 3c 2f  RSION_NUMBER].</
1b90: 74 61 62 6c 65 3e 3c 2f 63 65 6e 74 65 72 3e 0a  table></center>.
1ba0: 0a 3c 68 33 3e 4d 61 67 69 63 20 48 65 61 64 65  .<h3>Magic Heade
1bb0: 72 20 53 74 72 69 6e 67 3c 2f 68 33 3e 0a 0a 3c  r String</h3>..<
1bc0: 70 3e 5e 45 76 65 72 79 20 76 61 6c 69 64 20 53  p>^Every valid S
1bd0: 51 4c 69 74 65 20 64 61 74 61 62 61 73 65 20 66  QLite database f
1be0: 69 6c 65 20 62 65 67 69 6e 73 20 77 69 74 68 20  ile begins with 
1bf0: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 31 36  the following 16
1c00: 20 62 79 74 65 73 20 0a 28 69 6e 20 68 65 78 29   bytes .(in hex)
1c10: 3a 20 35 33 20 35 31 20 34 63 20 36 39 20 37 34  : 53 51 4c 69 74
1c20: 20 36 35 20 32 30 20 36 36 20 36 66 20 37 32 20   65 20 66 6f 72 
1c30: 36 64 20 36 31 20 37 34 20 32 30 20 33 33 20 30  6d 61 74 20 33 0
1c40: 30 2e 20 20 54 68 69 73 20 62 79 74 65 20 73 65  0.  This byte se
1c50: 71 75 65 6e 63 65 0a 63 6f 72 72 65 73 70 6f 6e  quence.correspon
1c60: 64 73 20 74 6f 20 74 68 65 20 55 54 46 2d 38 20  ds to the UTF-8 
1c70: 73 74 72 69 6e 67 20 22 53 51 4c 69 74 65 20 66  string "SQLite f
1c80: 6f 72 6d 61 74 20 33 22 20 69 6e 63 6c 75 64 69  ormat 3" includi
1c90: 6e 67 20 74 68 65 20 6e 75 6c 0a 74 65 72 6d 69  ng the nul.termi
1ca0: 6e 61 74 6f 72 20 63 68 61 72 61 63 74 65 72 20  nator character 
1cb0: 61 74 20 74 68 65 20 65 6e 64 2e 3c 2f 70 3e 0a  at the end.</p>.
1cc0: 0a 3c 68 33 3e 50 61 67 65 20 53 69 7a 65 3c 2f  .<h3>Page Size</
1cd0: 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 74 77 6f 2d  h3>..<p>The two-
1ce0: 62 79 74 65 20 76 61 6c 75 65 20 62 65 67 69 6e  byte value begin
1cf0: 6e 69 6e 67 20 61 74 20 6f 66 66 73 65 74 20 31  ning at offset 1
1d00: 36 20 64 65 74 65 72 6d 69 6e 65 73 20 74 68 65  6 determines the
1d10: 20 70 61 67 65 20 73 69 7a 65 20 6f 66 20 0a 74   page size of .t
1d20: 68 65 20 64 61 74 61 62 61 73 65 2e 20 20 46 6f  he database.  Fo
1d30: 72 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e  r SQLite version
1d40: 73 20 33 2e 37 2e 30 2e 31 20 61 6e 64 20 65 61  s 3.7.0.1 and ea
1d50: 72 6c 69 65 72 2c 20 74 68 69 73 20 76 61 6c 75  rlier, this valu
1d60: 65 20 69 73 20 0a 69 6e 74 65 72 70 72 65 74 65  e is .interprete
1d70: 64 20 61 73 20 61 20 62 69 67 2d 65 6e 64 69 61  d as a big-endia
1d80: 6e 20 69 6e 74 65 67 65 72 20 61 6e 64 20 6d 75  n integer and mu
1d90: 73 74 20 62 65 20 61 20 70 6f 77 65 72 20 6f 66  st be a power of
1da0: 20 74 77 6f 20 62 65 74 77 65 65 6e 0a 35 31 32   two between.512
1db0: 20 61 6e 64 20 33 32 37 36 38 2c 20 69 6e 63 6c   and 32768, incl
1dc0: 75 73 69 76 65 2e 20 20 42 65 67 69 6e 6e 69 6e  usive.  Beginnin
1dd0: 67 20 77 69 74 68 20 53 51 4c 69 74 65 20 5b 76  g with SQLite [v
1de0: 65 72 73 69 6f 6e 20 33 2e 37 2e 31 5d 0a 28 5b  ersion 3.7.1].([
1df0: 64 61 74 65 6f 66 3a 33 2e 37 2e 31 5d 29 2c 20  dateof:3.7.1]), 
1e00: 61 20 70 61 67 65 0a 73 69 7a 65 20 6f 66 20 36  a page.size of 6
1e10: 35 35 33 36 20 62 79 74 65 73 20 69 73 20 73 75  5536 bytes is su
1e20: 70 70 6f 72 74 65 64 2e 20 20 54 68 65 20 76 61  pported.  The va
1e30: 6c 75 65 20 36 35 35 33 36 20 77 69 6c 6c 20 6e  lue 65536 will n
1e40: 6f 74 20 66 69 74 20 69 6e 20 61 0a 74 77 6f 2d  ot fit in a.two-
1e50: 62 79 74 65 20 69 6e 74 65 67 65 72 2c 20 73 6f  byte integer, so
1e60: 20 74 6f 20 73 70 65 63 69 66 79 20 61 20 36 35   to specify a 65
1e70: 35 33 36 2d 62 79 74 65 20 70 61 67 65 20 73 69  536-byte page si
1e80: 7a 65 2c 20 74 68 65 20 76 61 6c 75 65 0a 61 74  ze, the value.at
1e90: 20 6f 66 66 73 65 74 20 31 36 20 69 73 20 30 78   offset 16 is 0x
1ea0: 30 30 20 30 78 30 31 2e 0a 54 68 69 73 20 76 61  00 0x01..This va
1eb0: 6c 75 65 20 63 61 6e 20 62 65 20 69 6e 74 65 72  lue can be inter
1ec0: 70 72 65 74 65 64 20 61 73 20 61 20 62 69 67 2d  preted as a big-
1ed0: 65 6e 64 69 61 6e 0a 31 20 61 6e 64 20 74 68 6f  endian.1 and tho
1ee0: 75 67 68 74 20 6f 66 20 69 73 20 61 73 20 61 20  ught of is as a 
1ef0: 6d 61 67 69 63 20 6e 75 6d 62 65 72 20 74 6f 20  magic number to 
1f00: 72 65 70 72 65 73 65 6e 74 20 74 68 65 20 36 35  represent the 65
1f10: 35 33 36 20 70 61 67 65 20 73 69 7a 65 2e 0a 4f  536 page size..O
1f20: 72 20 6f 6e 65 20 63 61 6e 20 76 69 65 77 20 74  r one can view t
1f30: 68 65 20 74 77 6f 2d 62 79 74 65 20 66 69 65 6c  he two-byte fiel
1f40: 64 20 61 73 20 61 20 6c 69 74 74 6c 65 20 65 6e  d as a little en
1f50: 64 69 61 6e 20 6e 75 6d 62 65 72 20 61 6e 64 20  dian number and 
1f60: 73 61 79 0a 74 68 61 74 20 69 74 20 72 65 70 72  say.that it repr
1f70: 65 73 65 6e 74 73 20 74 68 65 20 70 61 67 65 20  esents the page 
1f80: 73 69 7a 65 20 64 69 76 69 64 65 64 20 62 79 20  size divided by 
1f90: 32 35 36 2e 20 20 54 68 65 73 65 20 74 77 6f 20  256.  These two 
1fa0: 0a 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 73  .interpretations
1fb0: 20 6f 66 20 74 68 65 20 70 61 67 65 2d 73 69 7a   of the page-siz
1fc0: 65 20 66 69 65 6c 64 20 61 72 65 20 65 71 75 69  e field are equi
1fd0: 76 61 6c 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c 68 33  valent.</p>..<h3
1fe0: 3e 46 69 6c 65 20 66 6f 72 6d 61 74 20 76 65 72  >File format ver
1ff0: 73 69 6f 6e 20 6e 75 6d 62 65 72 73 3c 2f 68 33  sion numbers</h3
2000: 3e 0a 0a 3c 70 3e 54 68 65 20 66 69 6c 65 20 66  >..<p>The file f
2010: 6f 72 6d 61 74 20 77 72 69 74 65 20 76 65 72 73  ormat write vers
2020: 69 6f 6e 20 61 6e 64 20 66 69 6c 65 20 66 6f 72  ion and file for
2030: 6d 61 74 20 72 65 61 64 20 76 65 72 73 69 6f 6e  mat read version
2040: 20 61 74 20 6f 66 66 73 65 74 73 0a 31 38 20 61   at offsets.18 a
2050: 6e 64 20 31 39 20 61 72 65 20 69 6e 74 65 6e 64  nd 19 are intend
2060: 65 64 20 74 6f 20 61 6c 6c 6f 77 20 66 6f 72 20  ed to allow for 
2070: 65 6e 68 61 6e 63 65 6d 65 6e 74 73 20 6f 66 20  enhancements of 
2080: 74 68 65 20 66 69 6c 65 20 66 6f 72 6d 61 74 0a  the file format.
2090: 69 6e 20 66 75 74 75 72 65 20 76 65 72 73 69 6f  in future versio
20a0: 6e 73 20 6f 66 20 53 51 4c 69 74 65 2e 20 20 49  ns of SQLite.  I
20b0: 6e 20 63 75 72 72 65 6e 74 20 76 65 72 73 69 6f  n current versio
20c0: 6e 73 20 6f 66 20 53 51 4c 69 74 65 2c 20 62 6f  ns of SQLite, bo
20d0: 74 68 20 6f 66 0a 74 68 65 73 65 20 76 61 6c 75  th of.these valu
20e0: 65 73 20 61 72 65 20 31 20 66 6f 72 20 72 6f 6c  es are 1 for rol
20f0: 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 6c 69 6e  lback journallin
2100: 67 20 6d 6f 64 65 73 20 61 6e 64 20 32 20 66 6f  g modes and 2 fo
2110: 72 20 5b 57 41 4c 5d 0a 6a 6f 75 72 6e 61 6c 6c  r [WAL].journall
2120: 69 6e 67 20 6d 6f 64 65 2e 20 20 49 66 20 61 20  ing mode.  If a 
2130: 76 65 72 73 69 6f 6e 20 6f 66 20 53 51 4c 69 74  version of SQLit
2140: 65 20 63 6f 64 65 64 20 74 6f 20 74 68 65 20 63  e coded to the c
2150: 75 72 72 65 6e 74 0a 66 69 6c 65 20 66 6f 72 6d  urrent.file form
2160: 61 74 20 73 70 65 63 69 66 69 63 61 74 69 6f 6e  at specification
2170: 20 65 6e 63 6f 75 6e 74 65 72 73 20 61 20 64 61   encounters a da
2180: 74 61 62 61 73 65 20 66 69 6c 65 20 77 68 65 72  tabase file wher
2190: 65 20 74 68 65 20 72 65 61 64 0a 76 65 72 73 69  e the read.versi
21a0: 6f 6e 20 69 73 20 31 20 6f 72 20 32 20 62 75 74  on is 1 or 2 but
21b0: 20 74 68 65 20 77 72 69 74 65 20 76 65 72 73 69   the write versi
21c0: 6f 6e 20 69 73 20 67 72 65 61 74 65 72 20 74 68  on is greater th
21d0: 61 6e 20 32 2c 20 74 68 65 6e 20 74 68 65 20 64  an 2, then the d
21e0: 61 74 61 62 61 73 65 0a 66 69 6c 65 20 6d 75 73  atabase.file mus
21f0: 74 20 62 65 20 74 72 65 61 74 65 64 20 61 73 20  t be treated as 
2200: 72 65 61 64 2d 6f 6e 6c 79 2e 20 20 49 66 20 61  read-only.  If a
2210: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 77   database file w
2220: 69 74 68 20 61 20 72 65 61 64 20 76 65 72 73 69  ith a read versi
2230: 6f 6e 0a 67 72 65 61 74 65 72 20 74 68 61 6e 20  on.greater than 
2240: 32 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65 64  2 is encountered
2250: 2c 20 74 68 65 6e 20 74 68 61 74 20 64 61 74 61  , then that data
2260: 62 61 73 65 20 63 61 6e 6e 6f 74 20 62 65 20 72  base cannot be r
2270: 65 61 64 20 6f 72 20 77 72 69 74 74 65 6e 2e 3c  ead or written.<
2280: 2f 70 3e 0a 0a 3c 68 33 3e 52 65 73 65 72 76 65  /p>..<h3>Reserve
2290: 64 20 62 79 74 65 73 20 70 65 72 20 70 61 67 65  d bytes per page
22a0: 3c 2f 68 33 3e 0a 0a 3c 70 3e 53 51 4c 69 74 65  </h3>..<p>SQLite
22b0: 20 68 61 73 20 74 68 65 20 61 62 69 6c 69 74 79   has the ability
22c0: 20 74 6f 20 73 65 74 20 61 73 69 64 65 20 61 20   to set aside a 
22d0: 73 6d 61 6c 6c 20 6e 75 6d 62 65 72 20 6f 66 20  small number of 
22e0: 65 78 74 72 61 20 62 79 74 65 73 20 61 74 0a 74  extra bytes at.t
22f0: 68 65 20 65 6e 64 20 6f 66 20 65 76 65 72 79 20  he end of every 
2300: 70 61 67 65 20 66 6f 72 20 75 73 65 20 62 79 20  page for use by 
2310: 65 78 74 65 6e 73 69 6f 6e 73 2e 20 20 54 68 65  extensions.  The
2320: 73 65 20 65 78 74 72 61 20 62 79 74 65 73 20 61  se extra bytes a
2330: 72 65 0a 75 73 65 64 2c 20 66 6f 72 20 65 78 61  re.used, for exa
2340: 6d 70 6c 65 2c 20 62 79 20 74 68 65 20 53 51 4c  mple, by the SQL
2350: 69 74 65 20 45 6e 63 72 79 70 74 69 6f 6e 20 45  ite Encryption E
2360: 78 74 65 6e 73 69 6f 6e 20 74 6f 20 73 74 6f 72  xtension to stor
2370: 65 20 61 20 6e 6f 6e 63 65 0a 61 6e 64 2f 6f 72  e a nonce.and/or
2380: 20 63 72 79 70 74 6f 67 72 61 70 68 69 63 20 63   cryptographic c
2390: 68 65 63 6b 73 75 6d 20 61 73 73 6f 63 69 61 74  hecksum associat
23a0: 65 64 20 77 69 74 68 20 65 61 63 68 20 70 61 67  ed with each pag
23b0: 65 2e 20 20 5e 54 68 65 20 0a 22 72 65 73 65 72  e.  ^The ."reser
23c0: 76 65 64 20 73 70 61 63 65 22 20 73 69 7a 65 20  ved space" size 
23d0: 69 6e 20 74 68 65 20 31 2d 62 79 74 65 20 69 6e  in the 1-byte in
23e0: 74 65 67 65 72 20 61 74 20 6f 66 66 73 65 74 20  teger at offset 
23f0: 32 30 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72  20 is the number
2400: 0a 6f 66 20 62 79 74 65 73 20 6f 66 20 73 70 61  .of bytes of spa
2410: 63 65 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66  ce at the end of
2420: 20 65 61 63 68 20 70 61 67 65 20 74 6f 20 72 65   each page to re
2430: 73 65 72 76 65 20 66 6f 72 20 65 78 74 65 6e 73  serve for extens
2440: 69 6f 6e 73 2e 0a 54 68 69 73 20 76 61 6c 75 65  ions..This value
2450: 20 69 73 20 75 73 75 61 6c 6c 79 20 30 2e 20 20   is usually 0.  
2460: 54 68 65 20 76 61 6c 75 65 20 63 61 6e 20 62 65  The value can be
2470: 20 6f 64 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e   odd.</p>..<tcl>
2480: 68 64 5f 66 72 61 67 6d 65 6e 74 20 75 73 61 62  hd_fragment usab
2490: 6c 65 5f 73 69 7a 65 20 7b 75 73 61 62 6c 65 20  le_size {usable 
24a0: 73 69 7a 65 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 54  size}</tcl>.<p>T
24b0: 68 65 20 22 75 73 61 62 6c 65 20 73 69 7a 65 22  he "usable size"
24c0: 20 6f 66 20 61 20 64 61 74 61 62 61 73 65 20 70   of a database p
24d0: 61 67 65 20 69 73 20 74 68 65 20 70 61 67 65 20  age is the page 
24e0: 73 69 7a 65 20 73 70 65 63 69 66 79 20 62 79 20  size specify by 
24f0: 74 68 65 0a 32 2d 62 79 74 65 20 69 6e 74 65 67  the.2-byte integ
2500: 65 72 20 61 74 20 6f 66 66 73 65 74 20 31 36 20  er at offset 16 
2510: 69 6e 20 74 68 65 20 68 65 61 64 65 72 20 6c 65  in the header le
2520: 73 73 20 74 68 65 20 22 72 65 73 65 72 76 65 64  ss the "reserved
2530: 22 20 73 70 61 63 65 20 73 69 7a 65 0a 72 65 63  " space size.rec
2540: 6f 72 64 65 64 20 69 6e 20 74 68 65 20 31 2d 62  orded in the 1-b
2550: 79 74 65 20 69 6e 74 65 67 65 72 20 61 74 20 6f  yte integer at o
2560: 66 66 73 65 74 20 32 30 20 69 6e 20 74 68 65 20  ffset 20 in the 
2570: 68 65 61 64 65 72 2e 20 20 54 68 65 20 75 73 61  header.  The usa
2580: 62 6c 65 0a 73 69 7a 65 20 6f 66 20 61 20 70 61  ble.size of a pa
2590: 67 65 20 6d 69 67 68 74 20 62 65 20 61 6e 20 6f  ge might be an o
25a0: 64 64 20 6e 75 6d 62 65 72 2e 20 20 5e 28 48 6f  dd number.  ^(Ho
25b0: 77 65 76 65 72 2c 20 74 68 65 20 75 73 61 62 6c  wever, the usabl
25c0: 65 20 73 69 7a 65 20 69 73 20 6e 6f 74 0a 61 6c  e size is not.al
25d0: 6c 6f 77 65 64 20 74 6f 20 62 65 20 6c 65 73 73  lowed to be less
25e0: 20 74 68 61 6e 20 34 38 30 2e 20 20 49 6e 20 6f   than 480.  In o
25f0: 74 68 65 72 20 77 6f 72 64 73 2c 20 69 66 20 74  ther words, if t
2600: 68 65 20 70 61 67 65 20 73 69 7a 65 20 69 73 20  he page size is 
2610: 35 31 32 2c 0a 74 68 65 6e 20 74 68 65 20 72 65  512,.then the re
2620: 73 65 72 76 65 64 20 73 70 61 63 65 20 73 69 7a  served space siz
2630: 65 20 63 61 6e 6e 6f 74 20 65 78 63 65 65 64 20  e cannot exceed 
2640: 33 32 2e 29 5e 3c 2f 70 3e 0a 0a 3c 68 33 3e 50  32.)^</p>..<h3>P
2650: 61 79 6c 6f 61 64 20 66 72 61 63 74 69 6f 6e 73  ayload fractions
2660: 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68 65 20 6d  </h3>..<p>^The m
2670: 61 78 69 6d 75 6d 20 61 6e 64 20 6d 69 6e 69 6d  aximum and minim
2680: 75 6d 20 65 6d 62 65 64 64 65 64 20 70 61 79 6c  um embedded payl
2690: 6f 61 64 20 66 72 61 63 74 69 6f 6e 73 20 61 6e  oad fractions an
26a0: 64 20 74 68 65 20 6c 65 61 66 0a 70 61 79 6c 6f  d the leaf.paylo
26b0: 61 64 20 66 72 61 63 74 69 6f 6e 20 76 61 6c 75  ad fraction valu
26c0: 65 73 20 6d 75 73 74 20 62 65 20 36 34 2c 20 33  es must be 64, 3
26d0: 32 2c 20 61 6e 64 20 33 32 2e 20 20 54 68 65 73  2, and 32.  Thes
26e0: 65 20 76 61 6c 75 65 73 20 77 65 72 65 0a 6f 72  e values were.or
26f0: 69 67 69 6e 61 6c 6c 79 20 69 6e 74 65 6e 64 65  iginally intende
2700: 64 20 74 6f 20 62 65 20 74 75 6e 61 62 6c 65 20  d to be tunable 
2710: 70 61 72 61 6d 65 74 65 72 73 20 74 68 61 74 20  parameters that 
2720: 63 6f 75 6c 64 20 62 65 20 75 73 65 64 20 74 6f  could be used to
2730: 0a 6d 6f 64 69 66 79 20 74 68 65 20 73 74 6f 72  .modify the stor
2740: 61 67 65 20 66 6f 72 6d 61 74 20 6f 66 20 74 68  age format of th
2750: 65 20 62 2d 74 72 65 65 20 61 6c 67 6f 72 69 74  e b-tree algorit
2760: 68 6d 2e 20 20 48 6f 77 65 76 65 72 2c 20 74 68  hm.  However, th
2770: 61 74 0a 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79  at.functionality
2780: 20 69 73 20 6e 6f 74 20 73 75 70 70 6f 72 74 65   is not supporte
2790: 64 20 61 6e 64 20 74 68 65 72 65 20 61 72 65 20  d and there are 
27a0: 6e 6f 20 63 75 72 72 65 6e 74 20 70 6c 61 6e 73  no current plans
27b0: 20 74 6f 20 61 64 64 0a 73 75 70 70 6f 72 74 20   to add.support 
27c0: 69 6e 20 74 68 65 20 66 75 74 75 72 65 2e 20 20  in the future.  
27d0: 48 65 6e 63 65 2c 20 74 68 65 73 65 20 74 68 72  Hence, these thr
27e0: 65 65 20 62 79 74 65 73 20 61 72 65 20 66 69 78  ee bytes are fix
27f0: 65 64 20 61 74 20 74 68 65 0a 76 61 6c 75 65 73  ed at the.values
2800: 20 73 70 65 63 69 66 69 65 64 2e 3c 2f 70 3e 0a   specified.</p>.
2810: 0a 3c 68 33 3e 46 69 6c 65 20 63 68 61 6e 67 65  .<h3>File change
2820: 20 63 6f 75 6e 74 65 72 3c 2f 68 33 3e 0a 0a 3c   counter</h3>..<
2830: 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
2840: 63 68 6e 67 63 74 72 20 7b 63 68 61 6e 67 65 20  chngctr {change 
2850: 63 6f 75 6e 74 65 72 7d 3c 2f 74 63 6c 3e 0a 3c  counter}</tcl>.<
2860: 70 3e 5e 54 68 65 20 66 69 6c 65 20 63 68 61 6e  p>^The file chan
2870: 67 65 20 63 6f 75 6e 74 65 72 20 69 73 20 61 20  ge counter is a 
2880: 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61  4-byte big-endia
2890: 6e 20 69 6e 74 65 67 65 72 20 61 74 0a 6f 66 66  n integer at.off
28a0: 73 65 74 20 32 34 20 74 68 61 74 20 69 73 20 69  set 24 that is i
28b0: 6e 63 72 65 6d 65 6e 74 65 64 20 77 68 65 6e 65  ncremented whene
28c0: 76 65 72 20 74 68 65 20 64 61 74 61 62 61 73 65  ver the database
28d0: 20 66 69 6c 65 20 69 73 20 75 6e 6c 6f 63 6b 65   file is unlocke
28e0: 64 0a 61 66 74 65 72 20 68 61 76 69 6e 67 20 62  d.after having b
28f0: 65 65 6e 20 6d 6f 64 69 66 69 65 64 2e 0a 57 68  een modified..Wh
2900: 65 6e 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 70  en two or more p
2910: 72 6f 63 65 73 73 65 73 20 61 72 65 20 72 65 61  rocesses are rea
2920: 64 69 6e 67 20 74 68 65 20 73 61 6d 65 20 64 61  ding the same da
2930: 74 61 62 61 73 65 20 66 69 6c 65 2c 20 65 61 63  tabase file, eac
2940: 68 20 0a 70 72 6f 63 65 73 73 20 63 61 6e 20 64  h .process can d
2950: 65 74 65 63 74 20 64 61 74 61 62 61 73 65 20 63  etect database c
2960: 68 61 6e 67 65 73 20 66 72 6f 6d 20 6f 74 68 65  hanges from othe
2970: 72 20 70 72 6f 63 65 73 73 65 73 20 62 79 20 6d  r processes by m
2980: 6f 6e 69 74 6f 72 69 6e 67 20 0a 74 68 65 20 63  onitoring .the c
2990: 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 2e 0a 41  hange counter..A
29a0: 20 70 72 6f 63 65 73 73 20 77 69 6c 6c 20 6e 6f   process will no
29b0: 72 6d 61 6c 6c 79 20 77 61 6e 74 20 74 6f 20 66  rmally want to f
29c0: 6c 75 73 68 20 69 74 73 20 64 61 74 61 62 61 73  lush its databas
29d0: 65 20 70 61 67 65 20 63 61 63 68 65 20 77 68 65  e page cache whe
29e0: 6e 0a 61 6e 6f 74 68 65 72 20 70 72 6f 63 65 73  n.another proces
29f0: 73 20 6d 6f 64 69 66 69 65 64 20 74 68 65 20 64  s modified the d
2a00: 61 74 61 62 61 73 65 2c 20 73 69 6e 63 65 20 74  atabase, since t
2a10: 68 65 20 63 61 63 68 65 20 68 61 73 20 62 65 63  he cache has bec
2a20: 6f 6d 65 20 73 74 61 6c 65 2e 0a 54 68 65 20 66  ome stale..The f
2a30: 69 6c 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74  ile change count
2a40: 65 72 20 66 61 63 69 6c 69 74 61 74 65 73 20 74  er facilitates t
2a50: 68 69 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 6e 20  his.</p>..<p>In 
2a60: 57 41 4c 20 6d 6f 64 65 2c 20 63 68 61 6e 67 65  WAL mode, change
2a70: 73 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73  s to the databas
2a80: 65 20 61 72 65 20 64 65 74 65 63 74 65 64 20 75  e are detected u
2a90: 73 69 6e 67 20 74 68 65 20 77 61 6c 2d 69 6e 64  sing the wal-ind
2aa0: 65 78 0a 61 6e 64 20 73 6f 20 74 68 65 20 63 68  ex.and so the ch
2ab0: 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69 73 20  ange counter is 
2ac0: 6e 6f 74 20 6e 65 65 64 65 64 2e 20 20 48 65 6e  not needed.  Hen
2ad0: 63 65 2c 20 74 68 65 20 63 68 61 6e 67 65 20 63  ce, the change c
2ae0: 6f 75 6e 74 65 72 20 6d 69 67 68 74 0a 6e 6f 74  ounter might.not
2af0: 20 62 65 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   be incremented 
2b00: 6f 6e 20 65 61 63 68 20 74 72 61 6e 73 61 63 74  on each transact
2b10: 69 6f 6e 20 69 6e 20 57 41 4c 20 6d 6f 64 65 2e  ion in WAL mode.
2b20: 3c 2f 70 3e 0a 0a 3c 68 33 3e 49 6e 2d 68 65 61  </p>..<h3>In-hea
2b30: 64 65 72 20 64 61 74 61 62 61 73 65 20 73 69 7a  der database siz
2b40: 65 3c 2f 68 33 3e 0a 0a 3c 74 63 6c 3e 68 64 5f  e</h3>..<tcl>hd_
2b50: 66 72 61 67 6d 65 6e 74 20 66 69 6c 65 73 69 7a  fragment filesiz
2b60: 65 20 7b 69 6e 2d 68 65 61 64 65 72 20 64 61 74  e {in-header dat
2b70: 61 62 61 73 65 20 73 69 7a 65 7d 3c 2f 74 63 6c  abase size}</tcl
2b80: 3e 0a 3c 70 3e 5e 54 68 65 20 34 2d 62 79 74 65  >.<p>^The 4-byte
2b90: 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65   big-endian inte
2ba0: 67 65 72 20 61 74 20 6f 66 66 73 65 74 20 32 38  ger at offset 28
2bb0: 20 69 6e 74 6f 20 74 68 65 20 68 65 61 64 65 72   into the header
2bc0: 20 0a 73 74 6f 72 65 73 20 74 68 65 20 73 69 7a   .stores the siz
2bd0: 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  e of the databas
2be0: 65 20 66 69 6c 65 20 69 6e 20 70 61 67 65 73 2e  e file in pages.
2bf0: 20 20 5e 49 66 20 74 68 69 73 20 69 6e 2d 68 65    ^If this in-he
2c00: 61 64 65 72 0a 64 61 74 61 73 69 7a 65 20 73 69  ader.datasize si
2c10: 7a 65 20 69 73 20 6e 6f 74 20 76 61 6c 69 64 20  ze is not valid 
2c20: 28 73 65 65 20 74 68 65 20 6e 65 78 74 20 70 61  (see the next pa
2c30: 72 61 67 72 61 70 68 29 2c 20 74 68 65 6e 20 74  ragraph), then t
2c40: 68 65 20 64 61 74 61 62 61 73 65 20 0a 73 69 7a  he database .siz
2c50: 65 20 69 73 20 63 6f 6d 70 75 74 65 64 20 62 79  e is computed by
2c60: 20 6c 6f 6f 6b 69 6e 67 0a 61 74 20 74 68 65 20   looking.at the 
2c70: 61 63 74 75 61 6c 20 73 69 7a 65 20 6f 66 20 74  actual size of t
2c80: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
2c90: 2e 20 4f 6c 64 65 72 20 76 65 72 73 69 6f 6e 73  . Older versions
2ca0: 20 6f 66 20 53 51 4c 69 74 65 0a 69 67 6e 6f 72   of SQLite.ignor
2cb0: 65 64 20 74 68 65 20 69 6e 2d 68 65 61 64 65 72  ed the in-header
2cc0: 20 64 61 74 61 62 61 73 65 20 73 69 7a 65 20 61   database size a
2cd0: 6e 64 20 75 73 65 64 20 74 68 65 20 61 63 74 75  nd used the actu
2ce0: 61 6c 20 66 69 6c 65 20 73 69 7a 65 0a 65 78 63  al file size.exc
2cf0: 6c 75 73 69 76 65 6c 79 2e 20 20 5e 4e 65 77 65  lusively.  ^Newe
2d00: 72 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51  r versions of SQ
2d10: 4c 69 74 65 20 75 73 65 20 74 68 65 20 69 6e 2d  Lite use the in-
2d20: 68 65 61 64 65 72 20 64 61 74 61 62 61 73 65 0a  header database.
2d30: 73 69 7a 65 20 69 66 20 69 74 20 69 73 20 61 76  size if it is av
2d40: 61 69 6c 61 62 6c 65 20 62 75 74 20 66 61 6c 6c  ailable but fall
2d50: 20 62 61 63 6b 20 74 6f 20 74 68 65 20 61 63 74   back to the act
2d60: 75 61 6c 20 66 69 6c 65 20 73 69 7a 65 20 69 66  ual file size if
2d70: 0a 74 68 65 20 69 6e 2d 68 65 61 64 65 72 20 64  .the in-header d
2d80: 61 74 61 62 61 73 65 20 73 69 7a 65 20 69 73 20  atabase size is 
2d90: 6e 6f 74 20 76 61 6c 69 64 2e 3c 2f 70 3e 0a 0a  not valid.</p>..
2da0: 3c 70 3e 5e 54 68 65 20 69 6e 2d 68 65 61 64 65  <p>^The in-heade
2db0: 72 20 64 61 74 61 62 61 73 65 20 73 69 7a 65 20  r database size 
2dc0: 69 73 20 6f 6e 6c 79 20 63 6f 6e 73 69 64 65 72  is only consider
2dd0: 65 64 20 74 6f 20 62 65 20 76 61 6c 69 64 20 69  ed to be valid i
2de0: 66 0a 69 74 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  f.it is non-zero
2df0: 20 61 6e 64 20 69 66 20 74 68 65 20 34 2d 62 79   and if the 4-by
2e00: 74 65 20 5b 63 68 61 6e 67 65 20 63 6f 75 6e 74  te [change count
2e10: 65 72 5d 20 61 74 20 6f 66 66 73 65 74 20 32 34  er] at offset 24
2e20: 0a 65 78 61 63 74 6c 79 20 6d 61 74 63 68 65 73  .exactly matches
2e30: 20 74 68 65 20 34 2d 62 79 74 65 20 5b 76 65 72   the 4-byte [ver
2e40: 73 69 6f 6e 2d 76 61 6c 69 64 2d 66 6f 72 20 6e  sion-valid-for n
2e50: 75 6d 62 65 72 5d 20 61 74 20 6f 66 66 73 65 74  umber] at offset
2e60: 20 39 32 2e 0a 5e 28 54 68 65 20 69 6e 2d 68 65   92..^(The in-he
2e70: 61 64 65 72 20 64 61 74 61 62 61 73 65 20 73 69  ader database si
2e80: 7a 65 20 69 73 20 61 6c 77 61 79 73 20 76 61 6c  ze is always val
2e90: 69 64 20 0a 77 68 65 6e 20 74 68 65 20 64 61 74  id .when the dat
2ea0: 61 62 61 73 65 20 69 73 20 6f 6e 6c 79 20 6d 6f  abase is only mo
2eb0: 64 69 66 69 65 64 20 75 73 69 6e 67 20 72 65 63  dified using rec
2ec0: 65 6e 74 20 76 65 72 73 69 6f 6e 73 20 6f 66 20  ent versions of 
2ed0: 53 51 4c 69 74 65 0a 28 76 65 72 73 69 6f 6e 73  SQLite.(versions
2ee0: 20 33 2e 37 2e 30 20 61 6e 64 20 6c 61 74 65 72   3.7.0 and later
2ef0: 29 2e 29 5e 0a 49 66 20 61 20 6c 65 67 61 63 79  ).)^.If a legacy
2f00: 20 76 65 72 73 69 6f 6e 20 6f 66 20 53 51 4c 69   version of SQLi
2f10: 74 65 20 77 72 69 74 65 73 20 74 6f 20 74 68 65  te writes to the
2f20: 20 64 61 74 61 62 61 73 65 2c 20 69 74 20 77 69   database, it wi
2f30: 6c 6c 20 6e 6f 74 0a 6b 6e 6f 77 20 74 6f 20 75  ll not.know to u
2f40: 70 64 61 74 65 20 74 68 65 20 69 6e 2d 68 65 61  pdate the in-hea
2f50: 64 65 72 20 64 61 74 61 62 61 73 65 20 73 69 7a  der database siz
2f60: 65 20 61 6e 64 20 73 6f 20 74 68 65 20 69 6e 2d  e and so the in-
2f70: 68 65 61 64 65 72 0a 64 61 74 61 62 61 73 65 20  header.database 
2f80: 73 69 7a 65 20 63 6f 75 6c 64 20 62 65 20 69 6e  size could be in
2f90: 63 6f 72 72 65 63 74 2e 20 20 42 75 74 20 6c 65  correct.  But le
2fa0: 67 61 63 79 20 76 65 72 73 69 6f 6e 73 20 6f 66  gacy versions of
2fb0: 20 53 51 4c 69 74 65 0a 77 69 6c 6c 20 61 6c 73   SQLite.will als
2fc0: 6f 20 6c 65 61 76 65 20 74 68 65 20 76 65 72 73  o leave the vers
2fd0: 69 6f 6e 2d 76 61 6c 69 64 2d 66 6f 72 20 6e 75  ion-valid-for nu
2fe0: 6d 62 65 72 20 61 74 20 6f 66 66 73 65 74 20 39  mber at offset 9
2ff0: 32 20 75 6e 63 68 61 6e 67 65 64 0a 73 6f 20 69  2 unchanged.so i
3000: 74 20 77 69 6c 6c 20 6e 6f 74 20 6d 61 74 63 68  t will not match
3010: 20 74 68 65 20 63 68 61 6e 67 65 2d 63 6f 75 6e   the change-coun
3020: 74 65 72 2e 20 20 48 65 6e 63 65 2c 20 69 6e 76  ter.  Hence, inv
3030: 61 6c 69 64 20 69 6e 2d 68 65 61 64 65 72 0a 64  alid in-header.d
3040: 61 74 61 62 61 73 65 20 73 69 7a 65 73 20 63 61  atabase sizes ca
3050: 6e 20 62 65 20 64 65 74 65 63 74 65 64 20 28 61  n be detected (a
3060: 6e 64 20 69 67 6e 6f 72 65 64 29 20 62 79 20 6f  nd ignored) by o
3070: 62 73 65 72 76 69 6e 67 20 77 68 65 6e 0a 74 68  bserving when.th
3080: 65 20 63 68 61 6e 67 65 2d 63 6f 75 6e 74 65 72  e change-counter
3090: 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74 63 68 20   does not match 
30a0: 74 68 65 20 76 65 72 73 69 6f 6e 2d 76 61 6c 69  the version-vali
30b0: 64 2d 66 6f 72 20 6e 75 6d 62 65 72 2e 3c 2f 70  d-for number.</p
30c0: 3e 0a 0a 3c 68 33 3e 46 72 65 65 20 70 61 67 65  >..<h3>Free page
30d0: 20 6c 69 73 74 3c 2f 68 33 3e 0a 0a 3c 70 3e 55   list</h3>..<p>U
30e0: 6e 75 73 65 64 20 70 61 67 65 73 20 69 6e 20 74  nused pages in t
30f0: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
3100: 20 61 72 65 20 73 74 6f 72 65 64 20 6f 6e 20 61   are stored on a
3110: 20 66 72 65 65 6c 69 73 74 2e 20 20 5e 54 68 65   freelist.  ^The
3120: 0a 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69  .4-byte big-endi
3130: 61 6e 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66  an integer at of
3140: 66 73 65 74 20 33 32 20 73 74 6f 72 65 73 20 74  fset 32 stores t
3150: 68 65 20 70 61 67 65 20 6e 75 6d 62 65 72 20 6f  he page number o
3160: 66 0a 74 68 65 20 66 69 72 73 74 20 70 61 67 65  f.the first page
3170: 20 6f 66 20 74 68 65 20 66 72 65 65 6c 69 73 74   of the freelist
3180: 2c 20 6f 72 20 7a 65 72 6f 20 69 66 20 74 68 65  , or zero if the
3190: 20 66 72 65 65 6c 69 73 74 20 69 73 20 65 6d 70   freelist is emp
31a0: 74 79 2e 0a 5e 54 68 65 20 34 2d 62 79 74 65 20  ty..^The 4-byte 
31b0: 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67  big-endian integ
31c0: 65 72 20 61 74 20 6f 66 66 73 65 74 20 33 36 20  er at offset 36 
31d0: 73 74 6f 72 65 73 20 73 74 6f 72 65 73 20 74 68  stores stores th
31e0: 65 20 74 6f 74 61 6c 20 0a 6e 75 6d 62 65 72 20  e total .number 
31f0: 6f 66 20 70 61 67 65 73 20 6f 6e 20 74 68 65 20  of pages on the 
3200: 66 72 65 65 6c 69 73 74 2e 3c 2f 70 3e 0a 0a 3c  freelist.</p>..<
3210: 68 33 3e 53 63 68 65 6d 61 20 63 6f 6f 6b 69 65  h3>Schema cookie
3220: 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68 65 20 73  </h3>..<p>^The s
3230: 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 69 73 20  chema cookie is 
3240: 61 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64  a 4-byte big-end
3250: 69 61 6e 20 69 6e 74 65 67 65 72 20 61 74 20 6f  ian integer at o
3260: 66 66 73 65 74 20 34 30 0a 74 68 61 74 20 69 73  ffset 40.that is
3270: 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 77 68 65   incremented whe
3280: 6e 65 76 65 72 20 74 68 65 20 64 61 74 61 62 61  never the databa
3290: 73 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65  se schema change
32a0: 73 2e 20 20 41 20 0a 70 72 65 70 61 72 65 64 20  s.  A .prepared 
32b0: 73 74 61 74 65 6d 65 6e 74 20 69 73 20 63 6f 6d  statement is com
32c0: 70 69 6c 65 64 20 61 67 61 69 6e 73 74 20 61 20  piled against a 
32d0: 73 70 65 63 69 66 69 63 20 76 65 72 73 69 6f 6e  specific version
32e0: 20 6f 66 20 74 68 65 0a 64 61 74 61 62 61 73 65   of the.database
32f0: 20 73 63 68 65 6d 61 2e 20 20 57 68 65 6e 20 74   schema.  When t
3300: 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
3310: 6d 61 20 63 68 61 6e 67 65 73 2c 20 74 68 65 20  ma changes, the 
3320: 73 74 61 74 65 6d 65 6e 74 0a 6d 75 73 74 20 62  statement.must b
3330: 65 20 72 65 70 72 65 70 61 72 65 64 2e 20 20 5e  e reprepared.  ^
3340: 57 68 65 6e 20 61 20 70 72 65 70 61 72 65 64 20  When a prepared 
3350: 73 74 61 74 65 6d 65 6e 74 20 72 75 6e 73 2c 20  statement runs, 
3360: 69 74 20 66 69 72 73 74 20 63 68 65 63 6b 73 0a  it first checks.
3370: 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69  the schema cooki
3380: 65 20 74 6f 20 65 6e 73 75 72 65 20 74 68 65 20  e to ensure the 
3390: 76 61 6c 75 65 20 69 73 20 74 68 65 20 73 61 6d  value is the sam
33a0: 65 20 61 73 20 77 68 65 6e 20 74 68 65 20 73 74  e as when the st
33b0: 61 74 65 6d 65 6e 74 0a 77 61 73 20 70 72 65 70  atement.was prep
33c0: 61 72 65 64 20 61 6e 64 20 69 66 20 74 68 65 20  ared and if the 
33d0: 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 68 61  schema cookie ha
33e0: 73 20 63 68 61 6e 67 65 64 2c 20 74 68 65 20 73  s changed, the s
33f0: 74 61 74 65 6d 65 6e 74 20 65 69 74 68 65 72 0a  tatement either.
3400: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 72 65  automatically re
3410: 70 72 65 70 61 72 65 73 20 61 6e 64 20 72 65 72  prepares and rer
3420: 75 6e 73 20 6f 72 20 69 74 20 61 62 6f 72 74 73  uns or it aborts
3430: 20 77 69 74 68 20 61 6e 20 5b 53 51 4c 49 54 45   with an [SQLITE
3440: 5f 53 43 48 45 4d 41 5d 20 0a 65 72 72 6f 72 2e  _SCHEMA] .error.
3450: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  </p>..<tcl>hd_fr
3460: 61 67 6d 65 6e 74 20 7b 73 63 68 65 6d 61 66 6f  agment {schemafo
3470: 72 6d 61 74 7d 20 7b 73 63 68 65 6d 61 20 66 6f  rmat} {schema fo
3480: 72 6d 61 74 7d 20 7b 73 63 68 65 6d 61 20 66 6f  rmat} {schema fo
3490: 72 6d 61 74 20 6e 75 6d 62 65 72 7d 3c 2f 74 63  rmat number}</tc
34a0: 6c 3e 0a 3c 68 33 3e 53 63 68 65 6d 61 20 66 6f  l>.<h3>Schema fo
34b0: 72 6d 61 74 20 6e 75 6d 62 65 72 3c 2f 68 33 3e  rmat number</h3>
34c0: 0a 0a 3c 70 3e 54 68 65 20 73 63 68 65 6d 61 20  ..<p>The schema 
34d0: 66 6f 72 6d 61 74 20 6e 75 6d 62 65 72 20 69 73  format number is
34e0: 20 61 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e   a 4-byte big-en
34f0: 64 69 61 6e 20 69 6e 74 65 67 65 72 20 61 74 20  dian integer at 
3500: 6f 66 66 73 65 74 20 34 34 2e 0a 54 68 65 20 73  offset 44..The s
3510: 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 6e 75 6d  chema format num
3520: 62 65 72 20 69 73 20 73 69 6d 69 6c 61 72 20 74  ber is similar t
3530: 6f 20 74 68 65 20 66 69 6c 65 20 66 6f 72 6d 61  o the file forma
3540: 74 20 72 65 61 64 20 61 6e 64 20 77 72 69 74 65  t read and write
3550: 0a 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 73  .version numbers
3560: 20 61 74 20 6f 66 66 73 65 74 73 20 31 38 20 61   at offsets 18 a
3570: 6e 64 20 31 39 20 65 78 63 65 70 74 20 74 68 61  nd 19 except tha
3580: 74 20 74 68 65 20 73 63 68 65 6d 61 20 66 6f 72  t the schema for
3590: 6d 61 74 20 6e 75 6d 62 65 72 0a 72 65 66 65 72  mat number.refer
35a0: 73 20 74 6f 20 74 68 65 20 68 69 67 68 2d 6c 65  s to the high-le
35b0: 76 65 6c 20 53 51 4c 20 66 6f 72 6d 61 74 74 69  vel SQL formatti
35c0: 6e 67 20 72 61 74 68 65 72 20 74 68 61 6e 20 74  ng rather than t
35d0: 68 65 20 6c 6f 77 2d 6c 65 76 65 6c 20 62 2d 74  he low-level b-t
35e0: 72 65 65 0a 66 6f 72 6d 61 74 74 69 6e 67 2e 20  ree.formatting. 
35f0: 20 46 6f 75 72 20 73 63 68 65 6d 61 20 66 6f 72   Four schema for
3600: 6d 61 74 20 6e 75 6d 62 65 72 73 20 61 72 65 20  mat numbers are 
3610: 63 75 72 72 65 6e 74 6c 79 20 64 65 66 69 6e 65  currently define
3620: 64 3a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69  d:</p>..<ol>.<li
3630: 20 76 61 6c 75 65 3d 31 3e 46 6f 72 6d 61 74 20   value=1>Format 
3640: 31 20 69 73 20 75 6e 64 65 72 73 74 6f 6f 64 20  1 is understood 
3650: 62 79 20 61 6c 6c 20 76 65 72 73 69 6f 6e 73 20  by all versions 
3660: 6f 66 20 53 51 4c 69 74 65 20 62 61 63 6b 20 74  of SQLite back t
3670: 6f 0a 5b 76 65 72 73 69 6f 6e 20 33 2e 30 2e 30  o.[version 3.0.0
3680: 5d 20 28 5b 64 61 74 65 6f 66 3a 33 2e 30 2e 30  ] ([dateof:3.0.0
3690: 5d 29 2e 3c 2f 6c 69 3e 0a 3c 6c 69 20 76 61 6c  ]).</li>.<li val
36a0: 75 65 3d 32 3e 46 6f 72 6d 61 74 20 32 20 61 64  ue=2>Format 2 ad
36b0: 64 73 20 74 68 65 20 61 62 69 6c 69 74 79 20 6f  ds the ability o
36c0: 66 20 72 6f 77 73 20 77 69 74 68 69 6e 20 74 68  f rows within th
36d0: 65 20 73 61 6d 65 20 74 61 62 6c 65 0a 74 6f 20  e same table.to 
36e0: 68 61 76 65 20 61 20 76 61 72 79 69 6e 67 20 6e  have a varying n
36f0: 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
3700: 2c 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 73 75  , in order to su
3710: 70 70 6f 72 74 20 74 68 65 0a 5b 41 4c 54 45 52  pport the.[ALTER
3720: 20 54 41 42 4c 45 20 7c 20 41 4c 54 45 52 20 54   TABLE | ALTER T
3730: 41 42 4c 45 20 2e 2e 2e 20 41 44 44 20 43 4f 4c  ABLE ... ADD COL
3740: 55 4d 4e 5d 20 66 75 6e 63 74 69 6f 6e 61 6c 69  UMN] functionali
3750: 74 79 2e 20 20 53 75 70 70 6f 72 74 20 66 6f 72  ty.  Support for
3760: 0a 72 65 61 64 69 6e 67 20 61 6e 64 20 77 72 69  .reading and wri
3770: 74 69 6e 67 20 66 6f 72 6d 61 74 20 32 20 77 61  ting format 2 wa
3780: 73 20 61 64 64 65 64 20 69 6e 20 53 51 4c 69 74  s added in SQLit
3790: 65 20 0a 5b 76 65 72 73 69 6f 6e 20 33 2e 31 2e  e .[version 3.1.
37a0: 33 5d 20 6f 6e 20 5b 64 61 74 65 6f 66 3a 33 2e  3] on [dateof:3.
37b0: 31 2e 33 5d 2e 3c 2f 6c 69 3e 0a 3c 6c 69 20 76  1.3].</li>.<li v
37c0: 61 6c 75 65 3d 33 3e 46 6f 72 6d 61 74 20 33 20  alue=3>Format 3 
37d0: 61 64 64 73 20 74 68 65 20 61 62 69 6c 69 74 79  adds the ability
37e0: 20 6f 66 20 65 78 74 72 61 20 63 6f 6c 75 6d 6e   of extra column
37f0: 73 20 61 64 64 65 64 20 62 79 0a 5b 41 4c 54 45  s added by.[ALTE
3800: 52 20 54 41 42 4c 45 20 7c 20 41 4c 54 45 52 20  R TABLE | ALTER 
3810: 54 41 42 4c 45 20 2e 2e 2e 20 41 44 44 20 43 4f  TABLE ... ADD CO
3820: 4c 55 4d 4e 5d 20 74 6f 20 68 61 76 65 20 6e 6f  LUMN] to have no
3830: 6e 2d 4e 55 4c 4c 20 64 65 66 61 75 6c 74 0a 76  n-NULL default.v
3840: 61 6c 75 65 73 2e 20 20 54 68 69 73 20 63 61 70  alues.  This cap
3850: 61 62 69 6c 69 74 79 20 77 61 73 20 61 64 64 65  ability was adde
3860: 64 20 69 6e 20 53 51 4c 69 74 65 20 5b 76 65 72  d in SQLite [ver
3870: 73 69 6f 6e 20 33 2e 31 2e 34 5d 0a 6f 6e 20 5b  sion 3.1.4].on [
3880: 64 61 74 65 6f 66 3a 33 2e 31 2e 34 5d 2e 3c 2f  dateof:3.1.4].</
3890: 6c 69 3e 0a 3c 6c 69 20 76 61 6c 75 65 3d 34 3e  li>.<li value=4>
38a0: 5e 46 6f 72 6d 61 74 20 34 20 63 61 75 73 65 73  ^Format 4 causes
38b0: 20 53 51 4c 69 74 65 20 74 6f 20 72 65 73 70 65   SQLite to respe
38c0: 63 74 20 74 68 65 0a 5b 64 65 73 63 65 6e 64 69  ct the.[descendi
38d0: 6e 67 20 69 6e 64 65 78 65 73 20 7c 20 44 45 53  ng indexes | DES
38e0: 43 20 6b 65 79 77 6f 72 64 5d 20 6f 6e 0a 69 6e  C keyword] on.in
38f0: 64 65 78 20 64 65 63 6c 61 72 61 74 69 6f 6e 73  dex declarations
3900: 2e 20 20 28 5e 54 68 65 20 44 45 53 43 20 6b 65  .  (^The DESC ke
3910: 79 77 6f 72 64 20 69 73 20 69 67 6e 6f 72 65 64  yword is ignored
3920: 20 69 6e 20 69 6e 64 65 78 65 73 20 66 6f 72 20   in indexes for 
3930: 0a 66 6f 72 6d 61 74 73 20 31 2c 20 32 2c 20 61  .formats 1, 2, a
3940: 6e 64 20 33 2e 29 0a 5e 46 6f 72 6d 61 74 20 34  nd 3.).^Format 4
3950: 20 61 6c 73 6f 20 61 64 64 73 20 74 77 6f 20 6e   also adds two n
3960: 65 77 20 62 6f 6f 6c 65 61 6e 20 72 65 63 6f 72  ew boolean recor
3970: 64 20 74 79 70 65 20 76 61 6c 75 65 73 20 28 5b  d type values ([
3980: 73 65 72 69 61 6c 20 74 79 70 65 73 5d 0a 38 20  serial types].8 
3990: 61 6e 64 20 39 29 2e 20 20 53 75 70 70 6f 72 74  and 9).  Support
39a0: 20 66 6f 72 20 66 6f 72 6d 61 74 20 34 20 77 61   for format 4 wa
39b0: 73 20 61 64 64 65 64 20 69 6e 20 53 51 4c 69 74  s added in SQLit
39c0: 65 20 33 2e 33 2e 30 20 6f 6e 0a 32 30 30 36 2d  e 3.3.0 on.2006-
39d0: 30 31 2d 31 30 2e 3c 2f 6c 69 3e 0a 3c 2f 6f 6c  01-10.</li>.</ol
39e0: 3e 0a 0a 3c 70 3e 5e 4e 65 77 20 64 61 74 61 62  >..<p>^New datab
39f0: 61 73 65 20 66 69 6c 65 73 20 63 72 65 61 74 65  ase files create
3a00: 64 20 62 79 20 53 51 4c 69 74 65 20 75 73 65 20  d by SQLite use 
3a10: 66 6f 72 6d 61 74 20 34 20 62 79 20 64 65 66 61  format 4 by defa
3a20: 75 6c 74 2e 0a 5e 54 68 65 20 5b 6c 65 67 61 63  ult..^The [legac
3a30: 79 5f 66 69 6c 65 5f 66 6f 72 6d 61 74 20 70 72  y_file_format pr
3a40: 61 67 6d 61 5d 20 63 61 6e 20 62 65 20 75 73 65  agma] can be use
3a50: 64 20 74 6f 20 63 61 75 73 65 20 53 51 4c 69 74  d to cause SQLit
3a60: 65 0a 74 6f 20 63 72 65 61 74 65 20 6e 65 77 20  e.to create new 
3a70: 64 61 74 61 62 61 73 65 20 66 69 6c 65 73 20 75  database files u
3a80: 73 69 6e 67 20 66 6f 72 6d 61 74 20 31 2e 0a 54  sing format 1..T
3a90: 68 65 20 66 6f 72 6d 61 74 20 76 65 72 73 69 6f  he format versio
3aa0: 6e 20 6e 75 6d 62 65 72 20 63 61 6e 20 62 65 20  n number can be 
3ab0: 6d 61 64 65 20 74 6f 20 64 65 66 61 75 6c 74 20  made to default 
3ac0: 74 6f 20 31 20 69 6e 73 74 65 61 64 20 6f 66 20  to 1 instead of 
3ad0: 34 20 62 79 0a 73 65 74 74 69 6e 67 20 5b 53 51  4 by.setting [SQ
3ae0: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 46 49 4c  LITE_DEFAULT_FIL
3af0: 45 5f 46 4f 52 4d 41 54 5d 3d 31 20 61 74 20 63  E_FORMAT]=1 at c
3b00: 6f 6d 70 69 6c 65 2d 74 69 6d 65 2e 0a 3c 2f 70  ompile-time..</p
3b10: 3e 0a 0a 3c 68 33 3e 53 75 67 67 65 73 74 65 64  >..<h3>Suggested
3b20: 20 63 61 63 68 65 20 73 69 7a 65 3c 2f 68 33 3e   cache size</h3>
3b30: 0a 0a 3c 70 3e 54 68 65 20 34 2d 62 79 74 65 20  ..<p>The 4-byte 
3b40: 62 69 67 2d 65 6e 64 69 61 6e 20 73 69 67 6e 65  big-endian signe
3b50: 64 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66  d integer at off
3b60: 73 65 74 20 34 38 20 69 73 20 74 68 65 20 73 75  set 48 is the su
3b70: 67 67 65 73 74 65 64 0a 63 61 63 68 65 20 73 69  ggested.cache si
3b80: 7a 65 20 69 6e 20 70 61 67 65 73 20 66 6f 72 20  ze in pages for 
3b90: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
3ba0: 65 2e 20 20 54 68 65 20 76 61 6c 75 65 20 69 73  e.  The value is
3bb0: 20 61 20 73 75 67 67 65 73 74 69 6f 6e 0a 6f 6e   a suggestion.on
3bc0: 6c 79 20 61 6e 64 20 53 51 4c 69 74 65 20 69 73  ly and SQLite is
3bd0: 20 75 6e 64 65 72 20 6e 6f 20 6f 62 6c 69 67 61   under no obliga
3be0: 74 69 6f 6e 20 74 6f 20 68 6f 6e 6f 72 20 69 74  tion to honor it
3bf0: 2e 20 20 54 68 65 20 61 62 73 6f 6c 75 74 65 20  .  The absolute 
3c00: 76 61 6c 75 65 0a 6f 66 20 74 68 65 20 69 6e 74  value.of the int
3c10: 65 67 65 72 20 69 73 20 75 73 65 64 20 61 73 20  eger is used as 
3c20: 74 68 65 20 73 75 67 67 65 73 74 65 64 20 73 69  the suggested si
3c30: 7a 65 2e 20 20 54 68 65 20 73 75 67 67 65 73 74  ze.  The suggest
3c40: 65 64 20 63 61 63 68 65 20 73 69 7a 65 0a 63 61  ed cache size.ca
3c50: 6e 20 62 65 20 73 65 74 20 75 73 69 6e 67 20 74  n be set using t
3c60: 68 65 20 5b 64 65 66 61 75 6c 74 5f 63 61 63 68  he [default_cach
3c70: 65 5f 73 69 7a 65 20 70 72 61 67 6d 61 5d 2e 3c  e_size pragma].<
3c80: 2f 70 3e 0a 0a 3c 68 33 3e 49 6e 63 72 65 6d 65  /p>..<h3>Increme
3c90: 6e 74 61 6c 20 76 61 63 75 75 6d 20 73 65 74 74  ntal vacuum sett
3ca0: 69 6e 67 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68  ings</h3>..<p>Th
3cb0: 65 20 74 77 6f 20 34 2d 62 79 74 65 20 62 69 67  e two 4-byte big
3cc0: 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 73  -endian integers
3cd0: 20 61 74 20 6f 66 66 73 65 74 73 20 35 32 20 61   at offsets 52 a
3ce0: 6e 64 20 36 34 20 61 72 65 20 75 73 65 64 0a 74  nd 64 are used.t
3cf0: 6f 20 6d 61 6e 61 67 65 20 74 68 65 20 5b 61 75  o manage the [au
3d00: 74 6f 5f 76 61 63 75 75 6d 5d 20 61 6e 64 20 5b  to_vacuum] and [
3d10: 69 6e 63 72 65 6d 65 6e 74 61 6c 5f 76 61 63 75  incremental_vacu
3d20: 75 6d 5d 20 6d 6f 64 65 73 2e 20 20 5e 49 66 0a  um] modes.  ^If.
3d30: 74 68 65 20 69 6e 74 65 67 65 72 20 61 74 20 6f  the integer at o
3d40: 66 66 73 65 74 20 35 32 20 69 73 20 7a 65 72 6f  ffset 52 is zero
3d50: 20 74 68 65 6e 20 70 6f 69 6e 74 65 72 2d 6d 61   then pointer-ma
3d60: 70 20 28 70 74 72 6d 61 70 29 20 70 61 67 65 73  p (ptrmap) pages
3d70: 20 61 72 65 0a 6f 6d 69 74 74 65 64 20 66 72 6f   are.omitted fro
3d80: 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  m the database f
3d90: 69 6c 65 20 61 6e 64 20 6e 65 69 74 68 65 72 20  ile and neither 
3da0: 61 75 74 6f 5f 76 61 63 75 75 6d 20 6e 6f 72 0a  auto_vacuum nor.
3db0: 69 6e 63 72 65 6d 65 6e 74 61 6c 5f 76 61 63 75  incremental_vacu
3dc0: 75 6d 20 61 72 65 20 73 75 70 70 6f 72 74 65 64  um are supported
3dd0: 2e 20 20 5e 49 66 20 74 68 65 20 69 6e 74 65 67  .  ^If the integ
3de0: 65 72 20 61 74 20 6f 66 66 73 65 74 20 35 32 20  er at offset 52 
3df0: 69 73 0a 6e 6f 6e 2d 7a 65 72 6f 20 74 68 65 6e  is.non-zero then
3e00: 20 69 74 20 69 73 20 74 68 65 20 70 61 67 65 20   it is the page 
3e10: 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 6c 61  number of the la
3e20: 72 67 65 73 74 20 72 6f 6f 74 20 70 61 67 65 20  rgest root page 
3e30: 69 6e 20 74 68 65 0a 64 61 74 61 62 61 73 65 20  in the.database 
3e40: 66 69 6c 65 2c 20 74 68 65 20 64 61 74 61 62 61  file, the databa
3e50: 73 65 20 66 69 6c 65 20 77 69 6c 6c 20 63 6f 6e  se file will con
3e60: 74 61 69 6e 20 70 74 72 6d 61 70 20 70 61 67 65  tain ptrmap page
3e70: 73 2c 20 61 6e 64 20 74 68 65 0a 6d 6f 64 65 20  s, and the.mode 
3e80: 6d 75 73 74 20 62 65 20 65 69 74 68 65 72 20 61  must be either a
3e90: 75 74 6f 5f 76 61 63 75 75 6d 20 6f 72 20 69 6e  uto_vacuum or in
3ea0: 63 72 65 6d 65 6e 74 61 6c 5f 76 61 63 75 75 6d  cremental_vacuum
3eb0: 2e 20 20 5e 49 6e 20 74 68 69 73 20 6c 61 74 74  .  ^In this latt
3ec0: 65 72 0a 63 61 73 65 2c 20 74 68 65 20 69 6e 74  er.case, the int
3ed0: 65 67 65 72 20 61 74 20 6f 66 66 73 65 74 20 36  eger at offset 6
3ee0: 34 20 69 73 20 74 72 75 65 20 66 6f 72 20 69 6e  4 is true for in
3ef0: 63 72 65 6d 65 6e 74 61 6c 5f 76 61 63 75 75 6d  cremental_vacuum
3f00: 20 61 6e 64 0a 66 61 6c 73 65 20 66 6f 72 20 61   and.false for a
3f10: 75 74 6f 5f 76 61 63 75 75 6d 2e 20 20 5e 49 66  uto_vacuum.  ^If
3f20: 20 74 68 65 20 69 6e 74 65 67 65 72 20 61 74 20   the integer at 
3f30: 6f 66 66 73 65 74 20 35 32 20 69 73 20 7a 65 72  offset 52 is zer
3f40: 6f 20 74 68 65 6e 0a 74 68 65 20 69 6e 74 65 67  o then.the integ
3f50: 65 72 20 61 74 20 6f 66 66 73 65 74 20 36 34 20  er at offset 64 
3f60: 6d 75 73 74 20 61 6c 73 6f 20 62 65 20 7a 65 72  must also be zer
3f70: 6f 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f  o.</p>..<tcl>hd_
3f80: 66 72 61 67 6d 65 6e 74 20 65 6e 63 20 7b 74 65  fragment enc {te
3f90: 78 74 20 65 6e 63 6f 64 69 6e 67 7d 3c 2f 74 63  xt encoding}</tc
3fa0: 6c 3e 0a 3c 68 33 3e 54 65 78 74 20 65 6e 63 6f  l>.<h3>Text enco
3fb0: 64 69 6e 67 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54  ding</h3>..<p>^T
3fc0: 68 65 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e  he 4-byte big-en
3fd0: 64 69 61 6e 20 69 6e 74 65 67 65 72 20 61 74 20  dian integer at 
3fe0: 6f 66 66 73 65 74 20 35 36 20 64 65 74 65 72 6d  offset 56 determ
3ff0: 69 6e 65 73 20 74 68 65 20 65 6e 63 6f 64 69 6e  ines the encodin
4000: 67 0a 75 73 65 64 20 66 6f 72 20 61 6c 6c 20 74  g.used for all t
4010: 65 78 74 20 73 74 72 69 6e 67 73 20 73 74 6f 72  ext strings stor
4020: 65 64 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ed in the databa
4030: 73 65 2e 20 20 0a 5e 41 20 76 61 6c 75 65 20 6f  se.  .^A value o
4040: 66 20 31 20 6d 65 61 6e 73 20 55 54 46 2d 38 2e  f 1 means UTF-8.
4050: 0a 5e 41 20 76 61 6c 75 65 20 6f 66 20 32 20 6d  .^A value of 2 m
4060: 65 61 6e 73 20 55 54 46 2d 31 36 6c 65 2e 0a 5e  eans UTF-16le..^
4070: 41 20 76 61 6c 75 65 20 6f 66 20 33 20 6d 65 61  A value of 3 mea
4080: 6e 73 20 55 54 46 2d 31 36 62 65 2e 0a 4e 6f 20  ns UTF-16be..No 
4090: 6f 74 68 65 72 20 76 61 6c 75 65 73 20 61 72 65  other values are
40a0: 20 61 6c 6c 6f 77 65 64 2e 0a 5e 28 54 68 65 20   allowed..^(The 
40b0: 73 71 6c 69 74 65 33 2e 68 20 68 65 61 64 65 72  sqlite3.h header
40c0: 20 66 69 6c 65 20 64 65 66 69 6e 65 73 20 43 2d   file defines C-
40d0: 70 72 65 70 72 6f 63 65 73 73 6f 72 20 6d 61 63  preprocessor mac
40e0: 72 6f 73 20 53 51 4c 49 54 45 5f 55 54 46 38 20  ros SQLITE_UTF8 
40f0: 61 73 20 31 2c 0a 53 51 4c 49 54 45 5f 55 54 46  as 1,.SQLITE_UTF
4100: 31 36 4c 45 20 61 73 20 32 2c 20 61 6e 64 20 53  16LE as 2, and S
4110: 51 4c 49 54 45 5f 55 54 46 31 36 42 45 20 61 73  QLITE_UTF16BE as
4120: 20 33 2c 20 74 6f 20 75 73 65 20 69 6e 20 70 6c   3, to use in pl
4130: 61 63 65 20 6f 66 0a 74 68 65 20 6e 75 6d 65 72  ace of.the numer
4140: 69 63 20 63 6f 64 65 73 20 66 6f 72 20 74 68 65  ic codes for the
4150: 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 2e 29   text encoding.)
4160: 5e 3c 2f 70 3e 0a 0a 3c 68 33 3e 55 73 65 72 20  ^</p>..<h3>User 
4170: 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 3c 2f  version number</
4180: 68 33 3e 0a 0a 3c 70 3e 5e 54 68 65 20 34 2d 62  h3>..<p>^The 4-b
4190: 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69  yte big-endian i
41a0: 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73 65 74  nteger at offset
41b0: 20 36 30 20 69 73 20 74 68 65 20 75 73 65 72 20   60 is the user 
41c0: 76 65 72 73 69 6f 6e 20 77 68 69 63 68 0a 69 73  version which.is
41d0: 20 73 65 74 20 61 6e 64 20 71 75 65 72 69 65 64   set and queried
41e0: 20 62 79 20 74 68 65 20 5b 75 73 65 72 5f 76 65   by the [user_ve
41f0: 72 73 69 6f 6e 20 70 72 61 67 6d 61 5d 2e 20 20  rsion pragma].  
4200: 54 68 65 20 75 73 65 72 20 76 65 72 73 69 6f 6e  The user version
4210: 20 69 73 0a 6e 6f 74 20 75 73 65 64 20 62 79 20   is.not used by 
4220: 53 51 4c 69 74 65 2e 3c 2f 70 3e 0a 0a 3c 74 63  SQLite.</p>..<tc
4230: 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 61 70  l>hd_fragment ap
4240: 70 69 64 20 7b 41 70 70 6c 69 63 61 74 69 6f 6e  pid {Application
4250: 20 49 44 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 41   ID}</tcl>.<h3>A
4260: 70 70 6c 69 63 61 74 69 6f 6e 20 49 44 3c 2f 68  pplication ID</h
4270: 33 3e 0a 0a 3c 70 3e 5e 54 68 65 20 34 2d 62 79  3>..<p>^The 4-by
4280: 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e  te big-endian in
4290: 74 65 67 65 72 20 61 74 20 6f 66 66 73 65 74 20  teger at offset 
42a0: 36 38 20 69 73 20 61 6e 20 22 41 70 70 6c 69 63  68 is an "Applic
42b0: 61 74 69 6f 6e 20 49 44 22 20 74 68 61 74 0a 63  ation ID" that.c
42c0: 61 6e 20 62 65 20 73 65 74 20 62 79 20 74 68 65  an be set by the
42d0: 20 5b 50 52 41 47 4d 41 20 61 70 70 6c 69 63 61   [PRAGMA applica
42e0: 74 69 6f 6e 5f 69 64 5d 20 63 6f 6d 6d 61 6e 64  tion_id] command
42f0: 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 69 64 65   in order to ide
4300: 6e 74 69 66 79 20 74 68 65 0a 64 61 74 61 62 61  ntify the.databa
4310: 73 65 20 61 73 20 62 65 6c 6f 6e 67 69 6e 67 20  se as belonging 
4320: 74 6f 20 6f 72 20 61 73 73 6f 63 69 61 74 65 64  to or associated
4330: 20 77 69 74 68 20 61 20 70 61 72 74 69 63 75 6c   with a particul
4340: 61 72 20 61 70 70 6c 69 63 61 74 69 6f 6e 2e 0a  ar application..
4350: 54 68 65 20 61 70 70 6c 69 63 61 74 69 6f 6e 20  The application 
4360: 49 44 20 69 73 20 69 6e 74 65 6e 64 65 64 20 66  ID is intended f
4370: 6f 72 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  or database file
4380: 73 20 75 73 65 64 20 61 73 20 61 6e 0a 5b 61 70  s used as an.[ap
4390: 70 6c 69 63 61 74 69 6f 6e 20 66 69 6c 65 2d 66  plication file-f
43a0: 6f 72 6d 61 74 5d 2e 20 20 54 68 65 20 61 70 70  ormat].  The app
43b0: 6c 69 63 61 74 69 6f 6e 20 49 44 20 63 61 6e 20  lication ID can 
43c0: 62 65 20 75 73 65 64 20 62 79 20 75 74 69 6c 69  be used by utili
43d0: 74 69 65 73 20 0a 73 75 63 68 20 61 73 20 5b 68  ties .such as [h
43e0: 74 74 70 3a 2f 2f 77 77 77 2e 64 61 72 77 69 6e  ttp://www.darwin
43f0: 73 79 73 2e 63 6f 6d 2f 66 69 6c 65 2f 20 7c 20  sys.com/file/ | 
4400: 66 69 6c 65 28 31 29 5d 20 74 6f 20 64 65 74 65  file(1)] to dete
4410: 72 6d 69 6e 65 20 74 68 65 20 73 70 65 63 69 66  rmine the specif
4420: 69 63 0a 66 69 6c 65 20 74 79 70 65 20 72 61 74  ic.file type rat
4430: 68 65 72 20 74 68 61 6e 20 6a 75 73 74 20 72 65  her than just re
4440: 70 6f 72 74 69 6e 67 20 22 53 51 4c 69 74 65 33  porting "SQLite3
4450: 20 44 61 74 61 62 61 73 65 22 2e 20 20 41 20 6c   Database".  A l
4460: 69 73 74 20 6f 66 0a 61 73 73 69 67 6e 65 64 20  ist of.assigned 
4470: 61 70 70 6c 69 63 61 74 69 6f 6e 20 49 44 73 20  application IDs 
4480: 63 61 6e 20 62 65 20 73 65 65 6e 20 62 79 20 63  can be seen by c
4490: 6f 6e 73 75 6c 74 69 6e 67 20 74 68 65 0a 5b 68  onsulting the.[h
44a0: 74 74 70 3a 2f 2f 77 77 77 2e 73 71 6c 69 74 65  ttp://www.sqlite
44b0: 2e 6f 72 67 2f 73 72 63 2f 61 72 74 69 66 61 63  .org/src/artifac
44c0: 74 3f 63 69 3d 74 72 75 6e 6b 26 66 69 6c 65 6e  t?ci=trunk&filen
44d0: 61 6d 65 3d 6d 61 67 69 63 2e 74 78 74 7c 6d 61  ame=magic.txt|ma
44e0: 67 69 63 2e 74 78 74 5d 0a 66 69 6c 65 20 69 6e  gic.txt].file in
44f0: 20 74 68 65 20 53 51 4c 69 74 65 20 73 6f 75 72   the SQLite sour
4500: 63 65 20 72 65 70 6f 73 69 74 6f 72 79 2e 3c 2f  ce repository.</
4510: 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
4520: 6d 65 6e 74 20 76 61 6c 69 64 66 6f 72 20 7b 76  ment validfor {v
4530: 65 72 73 69 6f 6e 2d 76 61 6c 69 64 2d 66 6f 72  ersion-valid-for
4540: 20 6e 75 6d 62 65 72 7d 3c 2f 74 63 6c 3e 0a 3c   number}</tcl>.<
4550: 68 33 3e 57 72 69 74 65 20 6c 69 62 72 61 72 79  h3>Write library
4560: 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20   version number 
4570: 61 6e 64 20 76 65 72 73 69 6f 6e 2d 76 61 6c 69  and version-vali
4580: 64 2d 66 6f 72 20 6e 75 6d 62 65 72 3c 2f 68 33  d-for number</h3
4590: 3e 0a 0a 3c 70 3e 5e 54 68 65 20 34 2d 62 79 74  >..<p>^The 4-byt
45a0: 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74  e big-endian int
45b0: 65 67 65 72 20 61 74 20 6f 66 66 73 65 74 20 39  eger at offset 9
45c0: 36 20 73 74 6f 72 65 73 20 74 68 65 20 0a 5b 53  6 stores the .[S
45d0: 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55  QLITE_VERSION_NU
45e0: 4d 42 45 52 5d 20 76 61 6c 75 65 20 66 6f 72 20  MBER] value for 
45f0: 74 68 65 20 53 51 4c 69 74 65 20 6c 69 62 72 61  the SQLite libra
4600: 72 79 20 74 68 61 74 20 6d 6f 73 74 0a 72 65 63  ry that most.rec
4610: 65 6e 74 6c 79 20 6d 6f 64 69 66 69 65 64 20 74  ently modified t
4620: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
4630: 2e 20 20 5e 54 68 65 20 34 2d 62 79 74 65 20 62  .  ^The 4-byte b
4640: 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65  ig-endian intege
4650: 72 20 61 74 0a 6f 66 66 73 65 74 20 39 32 20 69  r at.offset 92 i
4660: 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  s the value of t
4670: 68 65 20 5b 63 68 61 6e 67 65 20 63 6f 75 6e 74  he [change count
4680: 65 72 5d 20 77 68 65 6e 20 74 68 65 20 76 65 72  er] when the ver
4690: 73 69 6f 6e 20 6e 75 6d 62 65 72 0a 77 61 73 20  sion number.was 
46a0: 73 74 6f 72 65 64 2e 20 20 54 68 65 20 69 6e 74  stored.  The int
46b0: 65 67 65 72 20 61 74 20 6f 66 66 73 65 74 20 39  eger at offset 9
46c0: 32 20 69 6e 64 69 63 61 74 65 73 20 77 68 69 63  2 indicates whic
46d0: 68 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 74 68  h transaction.th
46e0: 65 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72  e version number
46f0: 20 69 73 20 76 61 6c 69 64 20 66 6f 72 20 61 6e   is valid for an
4700: 64 20 69 73 20 73 6f 6d 65 74 69 6d 65 73 20 63  d is sometimes c
4710: 61 6c 6c 65 64 20 74 68 65 0a 22 76 65 72 73 69  alled the."versi
4720: 6f 6e 2d 76 61 6c 69 64 2d 66 6f 72 20 6e 75 6d  on-valid-for num
4730: 62 65 72 22 2e 0a 0a 3c 68 33 3e 48 65 61 64 65  ber"...<h3>Heade
4740: 72 20 73 70 61 63 65 20 72 65 73 65 72 76 65 64  r space reserved
4750: 20 66 6f 72 20 65 78 70 61 6e 73 69 6f 6e 3c 2f   for expansion</
4760: 68 33 3e 0a 0a 3c 70 3e 41 6c 6c 20 6f 74 68 65  h3>..<p>All othe
4770: 72 20 62 79 74 65 73 20 6f 66 20 74 68 65 20 64  r bytes of the d
4780: 61 74 61 62 61 73 65 20 66 69 6c 65 20 68 65 61  atabase file hea
4790: 64 65 72 20 61 72 65 20 72 65 73 65 72 76 65 64  der are reserved
47a0: 20 66 6f 72 0a 66 75 74 75 72 65 20 65 78 70 61   for.future expa
47b0: 6e 73 69 6f 6e 20 61 6e 64 20 6d 75 73 74 20 62  nsion and must b
47c0: 65 20 73 65 74 20 74 6f 20 7a 65 72 6f 2e 3c 2f  e set to zero.</
47d0: 70 3e 0a 0a 3c 68 32 3e 54 68 65 20 4c 6f 63 6b  p>..<h2>The Lock
47e0: 2d 42 79 74 65 20 50 61 67 65 3c 2f 68 32 3e 0a  -Byte Page</h2>.
47f0: 0a 3c 70 3e 54 68 65 20 6c 6f 63 6b 2d 62 79 74  .<p>The lock-byt
4800: 65 20 70 61 67 65 20 69 73 20 74 68 65 20 73 69  e page is the si
4810: 6e 67 6c 65 20 70 61 67 65 20 6f 66 20 74 68 65  ngle page of the
4820: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 74   database file.t
4830: 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  hat contains the
4840: 20 62 79 74 65 73 20 61 74 20 6f 66 66 73 65 74   bytes at offset
4850: 73 20 62 65 74 77 65 65 6e 20 31 30 37 33 37 34  s between 107374
4860: 31 38 32 34 20 61 6e 64 20 31 30 37 33 37 34 32  1824 and 1073742
4870: 33 33 35 2c 0a 69 6e 63 6c 75 73 69 76 65 2e 20  335,.inclusive. 
4880: 20 41 20 64 61 74 61 62 61 73 65 20 66 69 6c 65   A database file
4890: 20 74 68 61 74 20 69 73 20 6c 65 73 73 20 74 68   that is less th
48a0: 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 31  an or equal to 1
48b0: 30 37 33 37 34 31 38 32 34 20 62 79 74 65 73 20  073741824 bytes 
48c0: 0a 69 6e 20 73 69 7a 65 20 63 6f 6e 74 61 69 6e  .in size contain
48d0: 73 20 6e 6f 20 6c 6f 63 6b 2d 62 79 74 65 20 70  s no lock-byte p
48e0: 61 67 65 2e 20 20 41 20 64 61 74 61 62 61 73 65  age.  A database
48f0: 20 66 69 6c 65 20 6c 61 72 67 65 72 20 74 68 61   file larger tha
4900: 6e 0a 31 30 37 33 37 34 31 38 32 34 20 63 6f 6e  n.1073741824 con
4910: 74 61 69 6e 73 20 65 78 61 63 74 6c 79 20 6f 6e  tains exactly on
4920: 65 20 6c 6f 63 6b 2d 62 79 74 65 20 70 61 67 65  e lock-byte page
4930: 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 6c  ..</p>..<p>The l
4940: 6f 63 6b 2d 62 79 74 65 20 70 61 67 65 20 69 73  ock-byte page is
4950: 20 73 65 74 20 61 73 69 64 65 20 66 6f 72 20 75   set aside for u
4960: 73 65 20 62 79 20 74 68 65 20 6f 70 65 72 61 74  se by the operat
4970: 69 6e 67 2d 73 79 73 74 65 6d 20 73 70 65 63 69  ing-system speci
4980: 66 69 63 0a 5b 56 46 53 5d 20 69 6d 70 6c 65 6d  fic.[VFS] implem
4990: 65 6e 74 61 74 69 6f 6e 20 69 6e 20 69 6d 70 6c  entation in impl
49a0: 65 6d 65 6e 74 69 6e 67 20 74 68 65 20 64 61 74  ementing the dat
49b0: 61 62 61 73 65 20 66 69 6c 65 20 6c 6f 63 6b 69  abase file locki
49c0: 6e 67 20 70 72 69 6d 69 74 69 76 65 73 2e 0a 5e  ng primitives..^
49d0: 53 51 4c 69 74 65 20 64 6f 65 73 20 6e 6f 74 20  SQLite does not 
49e0: 75 73 65 20 74 68 65 20 6c 6f 63 6b 2d 62 79 74  use the lock-byt
49f0: 65 20 70 61 67 65 2e 20 20 5e 54 68 65 20 53 51  e page.  ^The SQ
4a00: 4c 69 74 65 20 63 6f 72 65 20 0a 77 69 6c 6c 20  Lite core .will 
4a10: 6e 65 76 65 72 20 72 65 61 64 20 6f 72 20 77 72  never read or wr
4a20: 69 74 65 20 74 68 65 20 6c 6f 63 6b 2d 62 79 74  ite the lock-byt
4a30: 65 20 70 61 67 65 2c 0a 74 68 6f 75 67 68 20 6f  e page,.though o
4a40: 70 65 72 61 74 69 6e 67 2d 73 79 73 74 65 6d 20  perating-system 
4a50: 73 70 65 63 69 66 69 63 20 5b 56 46 53 5d 20 0a  specific [VFS] .
4a60: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20  implementations 
4a70: 6d 61 79 20 63 68 6f 6f 73 65 20 74 6f 20 72 65  may choose to re
4a80: 61 64 20 6f 72 20 77 72 69 74 65 20 62 79 74 65  ad or write byte
4a90: 73 20 6f 6e 20 74 68 65 20 6c 6f 63 6b 2d 62 79  s on the lock-by
4aa0: 74 65 20 0a 70 61 67 65 20 61 63 63 6f 72 64 69  te .page accordi
4ab0: 6e 67 20 74 6f 20 74 68 65 20 0a 6e 65 65 64 73  ng to the .needs
4ac0: 20 61 6e 64 20 70 72 6f 63 6c 69 76 69 74 69 65   and proclivitie
4ad0: 73 20 6f 66 20 74 68 65 20 75 6e 64 65 72 6c 79  s of the underly
4ae0: 69 6e 67 20 73 79 73 74 65 6d 2e 20 20 54 68 65  ing system.  The
4af0: 20 75 6e 69 78 20 61 6e 64 20 77 69 6e 33 32 0a   unix and win32.
4b00: 5b 56 46 53 5d 20 69 6d 70 6c 65 6d 65 6e 74 61  [VFS] implementa
4b10: 74 69 6f 6e 73 20 74 68 61 74 20 63 6f 6d 65 20  tions that come 
4b20: 62 75 69 6c 74 20 69 6e 74 6f 20 53 51 4c 69 74  built into SQLit
4b30: 65 20 64 6f 20 6e 6f 74 20 77 72 69 74 65 20 74  e do not write t
4b40: 6f 20 74 68 65 0a 6c 6f 63 6b 2d 62 79 74 65 20  o the.lock-byte 
4b50: 70 61 67 65 2c 20 62 75 74 20 74 68 69 72 64 2d  page, but third-
4b60: 70 61 72 74 79 20 56 46 53 20 69 6d 70 6c 65 6d  party VFS implem
4b70: 65 6e 74 61 74 69 6f 6e 73 20 66 6f 72 0a 6f 74  entations for.ot
4b80: 68 65 72 20 6f 70 65 72 61 74 69 6e 67 20 73 79  her operating sy
4b90: 73 74 65 6d 73 20 6d 69 67 68 74 2e 3c 2f 70 3e  stems might.</p>
4ba0: 0a 0a 3c 70 3e 54 68 65 20 6c 6f 63 6b 2d 62 79  ..<p>The lock-by
4bb0: 74 65 20 70 61 67 65 20 61 72 6f 73 65 20 66 72  te page arose fr
4bc0: 6f 6d 20 74 68 65 20 6e 65 65 64 20 74 6f 20 73  om the need to s
4bd0: 75 70 70 6f 72 74 20 57 69 6e 39 35 20 77 68 69  upport Win95 whi
4be0: 63 68 20 68 61 64 0a 6f 6e 6c 79 20 6d 61 6e 64  ch had.only mand
4bf0: 61 74 6f 72 79 20 66 69 6c 65 20 6c 6f 63 6b 69  atory file locki
4c00: 6e 67 2e 20 20 41 6c 6c 20 6d 6f 64 65 72 6e 20  ng.  All modern 
4c10: 6f 70 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d  operating system
4c20: 73 20 74 68 61 74 20 77 65 20 6b 6e 6f 77 20 6f  s that we know o
4c30: 66 0a 73 75 70 70 6f 72 74 20 61 64 76 69 73 6f  f.support adviso
4c40: 72 79 20 66 69 6c 65 20 6c 6f 63 6b 69 6e 67 2c  ry file locking,
4c50: 20 61 6e 64 20 73 6f 20 74 68 65 20 6c 6f 63 6b   and so the lock
4c60: 2d 62 79 74 65 20 70 61 67 65 20 69 73 20 6e 6f  -byte page is no
4c70: 74 20 72 65 61 6c 6c 79 0a 6e 65 65 64 65 64 20  t really.needed 
4c80: 61 6e 79 20 6d 6f 72 65 2c 20 62 75 74 20 69 73  any more, but is
4c90: 20 72 65 74 61 69 6e 65 64 20 66 6f 72 20 62 61   retained for ba
4ca0: 63 6b 77 61 72 64 73 20 63 6f 6d 70 61 74 69 62  ckwards compatib
4cb0: 69 6c 69 74 79 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c  ility.</p>..<tcl
4cc0: 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 7b 66 72  >hd_fragment {fr
4cd0: 65 65 6c 69 73 74 7d 20 7b 66 72 65 65 6c 69 73  eelist} {freelis
4ce0: 74 7d 20 7b 66 72 65 65 2d 70 61 67 65 20 6c 69  t} {free-page li
4cf0: 73 74 7d 3c 2f 74 63 6c 3e 0a 3c 68 32 3e 54 68  st}</tcl>.<h2>Th
4d00: 65 20 46 72 65 65 6c 69 73 74 3c 2f 68 32 3e 0a  e Freelist</h2>.
4d10: 0a 3c 70 3e 41 20 64 61 74 61 62 61 73 65 20 66  .<p>A database f
4d20: 69 6c 65 20 6d 69 67 68 74 20 63 6f 6e 74 61 69  ile might contai
4d30: 6e 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 70 61  n one or more pa
4d40: 67 65 73 20 74 68 61 74 20 61 72 65 20 6e 6f 74  ges that are not
4d50: 20 69 6e 0a 61 63 74 69 76 65 20 75 73 65 2e 20   in.active use. 
4d60: 20 55 6e 75 73 65 64 20 70 61 67 65 73 20 63 61   Unused pages ca
4d70: 6e 20 63 6f 6d 65 20 61 62 6f 75 74 2c 20 66 6f  n come about, fo
4d80: 72 20 65 78 61 6d 70 6c 65 2c 20 77 68 65 6e 20  r example, when 
4d90: 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 69 73 20 64  information.is d
4da0: 65 6c 65 74 65 64 20 66 72 6f 6d 20 74 68 65 20  eleted from the 
4db0: 64 61 74 61 62 61 73 65 2e 20 20 55 6e 75 73 65  database.  Unuse
4dc0: 64 20 70 61 67 65 73 20 61 72 65 20 73 74 6f 72  d pages are stor
4dd0: 65 64 20 6f 6e 20 74 68 65 20 66 72 65 65 6c 69  ed on the freeli
4de0: 73 74 0a 61 6e 64 20 61 72 65 20 72 65 75 73 65  st.and are reuse
4df0: 64 20 77 68 65 6e 20 61 64 64 69 74 69 6f 6e 61  d when additiona
4e00: 6c 20 70 61 67 65 73 20 61 72 65 20 72 65 71 75  l pages are requ
4e10: 69 72 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  ired.</p>..<p>Th
4e20: 65 20 66 72 65 65 6c 69 73 74 20 69 73 20 6f 72  e freelist is or
4e30: 67 61 6e 69 7a 65 64 20 61 73 20 61 20 6c 69 6e  ganized as a lin
4e40: 6b 65 64 20 6c 69 73 74 20 6f 66 20 66 72 65 65  ked list of free
4e50: 6c 69 73 74 20 74 72 75 6e 6b 20 70 61 67 65 73  list trunk pages
4e60: 0a 77 69 74 68 20 65 61 63 68 20 74 72 75 6e 6b  .with each trunk
4e70: 20 70 61 67 65 73 20 63 6f 6e 74 61 69 6e 69 6e   pages containin
4e80: 67 20 70 61 67 65 20 6e 75 6d 62 65 72 73 20 66  g page numbers f
4e90: 6f 72 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20  or zero or more 
4ea0: 66 72 65 65 6c 69 73 74 0a 6c 65 61 66 20 70 61  freelist.leaf pa
4eb0: 67 65 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 20 66  ges.</p>..<p>A f
4ec0: 72 65 65 6c 69 73 74 20 74 72 75 6e 6b 20 70 61  reelist trunk pa
4ed0: 67 65 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61  ge consists of a
4ee0: 6e 20 61 72 72 61 79 20 6f 66 20 34 2d 62 79 74  n array of 4-byt
4ef0: 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74  e big-endian int
4f00: 65 67 65 72 73 2e 0a 54 68 65 20 73 69 7a 65 20  egers..The size 
4f10: 6f 66 20 74 68 65 20 61 72 72 61 79 20 69 73 20  of the array is 
4f20: 61 73 20 6d 61 6e 79 20 69 6e 74 65 67 65 72 73  as many integers
4f30: 20 61 73 20 77 69 6c 6c 20 66 69 74 20 69 6e 20   as will fit in 
4f40: 74 68 65 20 75 73 61 62 6c 65 20 73 70 61 63 65  the usable space
4f50: 0a 6f 66 20 61 20 70 61 67 65 2e 20 20 54 68 65  .of a page.  The
4f60: 20 6d 69 6e 69 6d 75 6d 20 75 73 61 62 6c 65 20   minimum usable 
4f70: 73 70 61 63 65 20 69 73 20 34 38 30 20 62 79 74  space is 480 byt
4f80: 65 73 20 73 6f 20 74 68 65 20 61 72 72 61 79 20  es so the array 
4f90: 77 69 6c 6c 20 61 6c 77 61 79 73 0a 62 65 20 61  will always.be a
4fa0: 74 20 6c 65 61 73 74 20 31 32 30 20 65 6e 74 72  t least 120 entr
4fb0: 69 65 73 20 69 6e 20 6c 65 6e 67 74 68 2e 20 20  ies in length.  
4fc0: 5e 54 68 65 20 66 69 72 73 74 20 69 6e 74 65 67  ^The first integ
4fd0: 65 72 20 6f 6e 20 61 20 66 72 65 65 6c 69 73 74  er on a freelist
4fe0: 20 74 72 75 6e 6b 0a 70 61 67 65 20 69 73 20 74   trunk.page is t
4ff0: 68 65 20 70 61 67 65 20 6e 75 6d 62 65 72 20 6f  he page number o
5000: 66 20 74 68 65 20 6e 65 78 74 20 66 72 65 65 6c  f the next freel
5010: 69 73 74 20 74 72 75 6e 6b 20 70 61 67 65 20 69  ist trunk page i
5020: 6e 20 74 68 65 20 6c 69 73 74 20 6f 72 20 7a 65  n the list or ze
5030: 72 6f 20 0a 69 66 20 74 68 69 73 20 69 73 20 74  ro .if this is t
5040: 68 65 20 6c 61 73 74 20 66 72 65 65 6c 69 73 74  he last freelist
5050: 20 74 72 75 6e 6b 20 70 61 67 65 2e 20 20 5e 54   trunk page.  ^T
5060: 68 65 20 73 65 63 6f 6e 64 20 69 6e 74 65 67 65  he second intege
5070: 72 20 6f 6e 20 61 20 66 72 65 65 6c 69 73 74 0a  r on a freelist.
5080: 74 72 75 6e 6b 20 70 61 67 65 20 69 73 20 74 68  trunk page is th
5090: 65 20 6e 75 6d 62 65 72 20 6f 66 20 6c 65 61 66  e number of leaf
50a0: 20 70 61 67 65 20 70 6f 69 6e 74 65 72 73 20 74   page pointers t
50b0: 6f 20 66 6f 6c 6c 6f 77 2e 20 20 0a 5e 28 43 61  o follow.  .^(Ca
50c0: 6c 6c 20 74 68 65 20 73 65 63 6f 6e 64 20 69 6e  ll the second in
50d0: 74 65 67 65 72 20 6f 6e 20 61 20 66 72 65 65 6c  teger on a freel
50e0: 69 73 74 20 74 72 75 6e 6b 20 70 61 67 65 20 4c  ist trunk page L
50f0: 2e 0a 49 66 20 4c 20 69 73 20 67 72 65 61 74 65  ..If L is greate
5100: 72 20 74 68 61 6e 20 7a 65 72 6f 20 74 68 65 6e  r than zero then
5110: 20 69 6e 74 65 67 65 72 73 20 77 69 74 68 20 61   integers with a
5120: 72 72 61 79 20 69 6e 64 65 78 65 73 20 62 65 74  rray indexes bet
5130: 77 65 65 6e 20 32 20 61 6e 64 0a 4c 2b 31 20 69  ween 2 and.L+1 i
5140: 6e 63 6c 75 73 69 76 65 20 63 6f 6e 74 61 69 6e  nclusive contain
5150: 20 70 61 67 65 20 6e 75 6d 62 65 72 73 20 66 6f   page numbers fo
5160: 72 20 66 72 65 65 6c 69 73 74 20 6c 65 61 66 20  r freelist leaf 
5170: 70 61 67 65 73 2e 29 5e 3c 2f 70 3e 0a 0a 3c 70  pages.)^</p>..<p
5180: 3e 46 72 65 65 6c 69 73 74 20 6c 65 61 66 20 70  >Freelist leaf p
5190: 61 67 65 73 20 63 6f 6e 74 61 69 6e 20 6e 6f 20  ages contain no 
51a0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20 20 5e 53  information.  ^S
51b0: 51 4c 69 74 65 20 61 76 6f 69 64 73 20 72 65 61  QLite avoids rea
51c0: 64 69 6e 67 20 6f 72 0a 77 72 69 74 69 6e 67 20  ding or.writing 
51d0: 66 72 65 65 6c 69 73 74 20 6c 65 61 66 20 70 61  freelist leaf pa
51e0: 67 65 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  ges in order to 
51f0: 72 65 64 75 63 65 20 64 69 73 6b 20 49 2f 4f 2e  reduce disk I/O.
5200: 3c 2f 70 3e 0a 0a 3c 70 3e 41 20 62 75 67 20 69  </p>..<p>A bug i
5210: 6e 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e  n SQLite version
5220: 73 20 70 72 69 6f 72 20 74 6f 20 33 2e 36 2e 30  s prior to 3.6.0
5230: 20 63 61 75 73 65 64 20 74 68 65 20 64 61 74 61   caused the data
5240: 62 61 73 65 20 74 6f 20 62 65 0a 72 65 70 6f 72  base to be.repor
5250: 74 65 64 20 61 73 20 63 6f 72 72 75 70 74 20 69  ted as corrupt i
5260: 66 20 61 6e 79 20 6f 66 20 74 68 65 20 6c 61 73  f any of the las
5270: 74 20 36 20 65 6e 74 72 69 65 73 20 69 6e 20 74  t 6 entries in t
5280: 68 65 20 66 72 65 65 6c 69 73 74 20 74 72 75 6e  he freelist trun
5290: 6b 20 70 61 67 65 20 0a 61 72 72 61 79 20 63 6f  k page .array co
52a0: 6e 74 61 69 6e 65 64 20 6e 6f 6e 2d 7a 65 72 6f  ntained non-zero
52b0: 20 76 61 6c 75 65 73 2e 20 20 4e 65 77 65 72 20   values.  Newer 
52c0: 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69  versions of SQLi
52d0: 74 65 20 64 6f 20 6e 6f 74 20 68 61 76 65 0a 74  te do not have.t
52e0: 68 69 73 20 70 72 6f 62 6c 65 6d 2e 20 20 5e 48  his problem.  ^H
52f0: 6f 77 65 76 65 72 2c 20 6e 65 77 65 72 20 76 65  owever, newer ve
5300: 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65  rsions of SQLite
5310: 20 73 74 69 6c 6c 20 61 76 6f 69 64 20 75 73 69   still avoid usi
5320: 6e 67 20 74 68 65 20 0a 6c 61 73 74 20 73 69 78  ng the .last six
5330: 20 65 6e 74 72 69 65 73 20 69 6e 20 74 68 65 20   entries in the 
5340: 66 72 65 65 6c 69 73 74 20 74 72 75 6e 6b 20 70  freelist trunk p
5350: 61 67 65 20 61 72 72 61 79 20 69 6e 20 6f 72 64  age array in ord
5360: 65 72 20 74 68 61 74 20 64 61 74 61 62 61 73 65  er that database
5370: 0a 66 69 6c 65 73 20 63 72 65 61 74 65 64 20 62  .files created b
5380: 79 20 6e 65 77 65 72 20 76 65 72 73 69 6f 6e 73  y newer versions
5390: 20 6f 66 20 53 51 4c 69 74 65 20 63 61 6e 20 62   of SQLite can b
53a0: 65 20 72 65 61 64 20 62 79 20 6f 6c 64 65 72 20  e read by older 
53b0: 76 65 72 73 69 6f 6e 73 0a 6f 66 20 53 51 4c 69  versions.of SQLi
53c0: 74 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65  te.</p>..<p>^The
53d0: 20 6e 75 6d 62 65 72 20 6f 66 20 66 72 65 65 6c   number of freel
53e0: 69 73 74 20 70 61 67 65 73 20 69 73 20 73 74 6f  ist pages is sto
53f0: 72 65 64 20 61 73 20 61 20 34 2d 62 79 74 65 20  red as a 4-byte 
5400: 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67  big-endian integ
5410: 65 72 0a 69 6e 20 74 68 65 20 64 61 74 61 62 61  er.in the databa
5420: 73 65 20 68 65 61 64 65 72 20 61 74 20 61 6e 20  se header at an 
5430: 6f 66 66 73 65 74 20 6f 66 20 33 36 20 66 72 6f  offset of 36 fro
5440: 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20  m the beginning 
5450: 6f 66 20 74 68 65 20 66 69 6c 65 2e 0a 5e 54 68  of the file..^Th
5460: 65 20 64 61 74 61 62 61 73 65 20 68 65 61 64 65  e database heade
5470: 72 20 61 6c 73 6f 20 73 74 6f 72 65 73 20 74 68  r also stores th
5480: 65 20 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66  e page number of
5490: 20 74 68 65 20 66 69 72 73 74 20 66 72 65 65 6c   the first freel
54a0: 69 73 74 20 74 72 75 6e 6b 0a 70 61 67 65 20 61  ist trunk.page a
54b0: 73 20 61 20 34 2d 62 79 74 65 20 62 69 67 2d 65  s a 4-byte big-e
54c0: 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20 61 74  ndian integer at
54d0: 20 61 6e 20 6f 66 66 73 65 74 20 6f 66 20 33 32   an offset of 32
54e0: 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e   from the beginn
54f0: 69 6e 67 0a 6f 66 20 74 68 65 20 66 69 6c 65 2e  ing.of the file.
5500: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  </p>..<tcl>hd_fr
5510: 61 67 6d 65 6e 74 20 62 74 72 65 65 20 7b 42 2a  agment btree {B*
5520: 2d 54 72 65 65 73 7d 20 7b 42 2d 74 72 65 65 7d  -Trees} {B-tree}
5530: 3c 2f 74 63 6c 3e 0a 3c 68 32 3e 42 2d 74 72 65  </tcl>.<h2>B-tre
5540: 65 20 50 61 67 65 73 3c 2f 68 32 3e 0a 0a 3c 70  e Pages</h2>..<p
5550: 3e 54 68 65 20 62 2d 74 72 65 65 20 61 6c 67 6f  >The b-tree algo
5560: 72 69 74 68 6d 20 70 72 6f 76 69 64 65 73 20 6b  rithm provides k
5570: 65 79 2f 64 61 74 61 20 73 74 6f 72 61 67 65 20  ey/data storage 
5580: 77 69 74 68 20 75 6e 69 71 75 65 20 61 6e 64 0a  with unique and.
5590: 6f 72 64 65 72 65 64 20 6b 65 79 73 20 6f 6e 20  ordered keys on 
55a0: 70 61 67 65 2d 6f 72 69 65 6e 74 65 64 20 73 74  page-oriented st
55b0: 6f 72 61 67 65 20 64 65 76 69 63 65 73 2e 0a 46  orage devices..F
55c0: 6f 72 20 62 61 63 6b 67 72 6f 75 6e 64 20 69 6e  or background in
55d0: 66 6f 72 6d 61 74 69 6f 6e 20 6f 6e 20 62 2d 74  formation on b-t
55e0: 72 65 65 73 2c 20 73 65 65 0a 4b 6e 75 74 68 2c  rees, see.Knuth,
55f0: 20 3c 75 3e 54 68 65 20 41 72 74 20 4f 66 20 43   <u>The Art Of C
5600: 6f 6d 70 75 74 65 72 20 50 72 6f 67 72 61 6d 6d  omputer Programm
5610: 69 6e 67 3c 2f 75 3e 2c 20 56 6f 6c 75 6d 65 20  ing</u>, Volume 
5620: 33 20 22 53 6f 72 74 69 6e 67 0a 61 6e 64 20 53  3 "Sorting.and S
5630: 65 61 72 63 68 69 6e 67 22 2c 20 70 61 67 65 73  earching", pages
5640: 20 34 37 31 2d 34 37 39 2e 20 20 54 77 6f 20 6b   471-479.  Two k
5650: 69 6e 64 73 20 6f 66 20 62 2d 74 72 65 65 73 20  inds of b-trees 
5660: 61 72 65 20 75 73 65 64 20 62 79 0a 53 51 4c 69  are used by.SQLi
5670: 74 65 2e 20 20 54 68 65 20 61 6c 67 6f 72 69 74  te.  The algorit
5680: 68 6d 20 74 68 61 74 20 4b 6e 75 74 68 20 63 61  hm that Knuth ca
5690: 6c 6c 73 20 22 42 2a 2d 54 72 65 65 22 20 73 74  lls "B*-Tree" st
56a0: 6f 72 65 73 20 61 6c 6c 20 64 61 74 61 0a 69 6e  ores all data.in
56b0: 20 74 68 65 20 6c 65 61 76 65 73 20 6f 66 20 74   the leaves of t
56c0: 68 65 20 74 72 65 65 2e 20 20 53 51 4c 69 74 65  he tree.  SQLite
56d0: 20 63 61 6c 6c 73 20 74 68 69 73 20 76 61 72 69   calls this vari
56e0: 65 74 79 20 6f 66 20 62 2d 74 72 65 65 0a 61 20  ety of b-tree.a 
56f0: 22 74 61 62 6c 65 20 62 2d 74 72 65 65 22 2e 20  "table b-tree". 
5700: 54 68 65 20 61 6c 67 6f 72 69 74 68 6d 20 74 68  The algorithm th
5710: 61 74 20 4b 6e 75 74 68 20 63 61 6c 6c 73 20 73  at Knuth calls s
5720: 69 6d 70 6c 79 20 22 42 2d 54 72 65 65 22 0a 73  imply "B-Tree".s
5730: 74 6f 72 65 73 20 62 6f 74 68 20 74 68 65 20 6b  tores both the k
5740: 65 79 20 61 6e 64 20 74 68 65 20 64 61 74 61 20  ey and the data 
5750: 74 6f 67 65 74 68 65 72 20 69 6e 20 62 6f 74 68  together in both
5760: 20 6c 65 61 76 65 73 0a 61 6e 64 20 69 6e 20 69   leaves.and in i
5770: 6e 74 65 72 69 6f 72 20 70 61 67 65 73 2e 20 20  nterior pages.  
5780: 49 6e 20 74 68 65 20 53 51 4c 69 74 65 20 69 6d  In the SQLite im
5790: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c 20 74 68  plementation, th
57a0: 65 20 6f 72 69 67 69 6e 61 6c 0a 42 2d 54 72 65  e original.B-Tre
57b0: 65 20 61 6c 67 6f 72 69 74 68 6d 20 73 74 6f 72  e algorithm stor
57c0: 65 73 20 6b 65 79 73 20 6f 6e 6c 79 2c 20 6f 6d  es keys only, om
57d0: 69 74 74 69 6e 67 20 74 68 65 20 64 61 74 61 20  itting the data 
57e0: 65 6e 74 69 72 65 6c 79 2c 20 61 6e 64 0a 69 73  entirely, and.is
57f0: 20 63 61 6c 6c 65 64 20 61 6e 20 22 69 6e 64 65   called an "inde
5800: 78 20 62 2d 74 72 65 65 22 2e 0a 0a 3c 70 3e 41  x b-tree"...<p>A
5810: 20 62 2d 74 72 65 65 20 70 61 67 65 20 69 73 20   b-tree page is 
5820: 65 69 74 68 65 72 20 61 6e 20 69 6e 74 65 72 69  either an interi
5830: 6f 72 20 70 61 67 65 20 6f 72 20 61 20 6c 65 61  or page or a lea
5840: 66 20 70 61 67 65 2e 0a 41 20 6c 65 61 66 20 70  f page..A leaf p
5850: 61 67 65 20 63 6f 6e 74 61 69 6e 73 20 6b 65 79  age contains key
5860: 73 20 61 6e 64 20 69 6e 20 74 68 65 20 63 61 73  s and in the cas
5870: 65 20 6f 66 20 61 20 74 61 62 6c 65 20 62 2d 74  e of a table b-t
5880: 72 65 65 20 65 61 63 68 0a 6b 65 79 20 68 61 73  ree each.key has
5890: 20 61 73 73 6f 63 69 61 74 65 64 20 64 61 74 61   associated data
58a0: 2e 20 20 41 6e 20 69 6e 74 65 72 69 6f 72 20 70  .  An interior p
58b0: 61 67 65 20 63 6f 6e 74 61 69 6e 73 0a 4b 20 6b  age contains.K k
58c0: 65 79 73 20 74 6f 67 65 74 68 65 72 20 77 69 74  eys together wit
58d0: 68 20 4b 2b 31 20 70 6f 69 6e 74 65 72 73 20 74  h K+1 pointers t
58e0: 6f 20 63 68 69 6c 64 20 62 2d 74 72 65 65 20 70  o child b-tree p
58f0: 61 67 65 73 2e 0a 41 20 22 70 6f 69 6e 74 65 72  ages..A "pointer
5900: 22 20 69 6e 20 61 6e 20 69 6e 74 65 72 69 6f 72  " in an interior
5910: 20 62 2d 74 72 65 65 20 70 61 67 65 20 69 73 20   b-tree page is 
5920: 6a 75 73 74 20 74 68 65 20 33 31 2d 62 69 74 20  just the 31-bit 
5930: 69 6e 74 65 67 65 72 0a 70 61 67 65 20 6e 75 6d  integer.page num
5940: 62 65 72 20 6f 66 20 74 68 65 20 63 68 69 6c 64  ber of the child
5950: 20 70 61 67 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 44   page.</p>..<p>D
5960: 65 66 69 6e 65 20 74 68 65 20 64 65 70 74 68 0a  efine the depth.
5970: 6f 66 20 61 20 6c 65 61 66 20 62 2d 74 72 65 65  of a leaf b-tree
5980: 20 74 6f 20 62 65 20 31 20 61 6e 64 20 74 68 65   to be 1 and the
5990: 20 64 65 70 74 68 20 6f 66 20 61 6e 79 20 69 6e   depth of any in
59a0: 74 65 72 69 6f 72 20 62 2d 74 72 65 65 20 74 6f  terior b-tree to
59b0: 20 62 65 20 6f 6e 65 0a 6d 6f 72 65 20 74 68 61   be one.more tha
59c0: 6e 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 64 65  n the maximum de
59d0: 70 74 68 20 6f 66 20 61 6e 79 20 6f 66 20 69 74  pth of any of it
59e0: 73 20 63 68 69 6c 64 72 65 6e 2e 20 20 5e 49 6e  s children.  ^In
59f0: 20 61 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 0a 64   a well-formed.d
5a00: 61 74 61 62 61 73 65 2c 20 61 6c 6c 20 63 68 69  atabase, all chi
5a10: 6c 64 72 65 6e 20 6f 66 20 61 6e 20 69 6e 74 65  ldren of an inte
5a20: 72 69 6f 72 20 62 2d 74 72 65 65 20 68 61 76 65  rior b-tree have
5a30: 20 74 68 65 20 73 61 6d 65 20 64 65 70 74 68 2e   the same depth.
5a40: 3c 2f 70 3e 0a 0a 3c 70 3e 49 6e 20 61 6e 20 69  </p>..<p>In an i
5a50: 6e 74 65 72 69 6f 72 20 62 2d 74 72 65 65 20 70  nterior b-tree p
5a60: 61 67 65 2c 20 74 68 65 20 70 6f 69 6e 74 65 72  age, the pointer
5a70: 73 20 61 6e 64 20 6b 65 79 73 20 6c 6f 67 69 63  s and keys logic
5a80: 61 6c 6c 79 20 61 6c 74 65 72 6e 61 74 65 20 0a  ally alternate .
5a90: 77 69 74 68 20 61 20 70 6f 69 6e 74 65 72 20 6f  with a pointer o
5aa0: 6e 20 62 6f 74 68 20 65 6e 64 73 2e 20 28 54 68  n both ends. (Th
5ab0: 65 20 70 72 65 76 69 6f 75 73 20 73 65 6e 74 65  e previous sente
5ac0: 6e 63 65 20 69 73 20 74 6f 20 62 65 20 75 6e 64  nce is to be und
5ad0: 65 72 73 74 6f 6f 64 0a 63 6f 6e 63 65 70 74 75  erstood.conceptu
5ae0: 61 6c 6c 79 20 2d 20 74 68 65 20 61 63 74 75 61  ally - the actua
5af0: 6c 20 6c 61 79 6f 75 74 20 6f 66 20 74 68 65 20  l layout of the 
5b00: 6b 65 79 73 20 61 6e 64 0a 70 6f 69 6e 74 65 72  keys and.pointer
5b10: 73 20 77 69 74 68 69 6e 20 74 68 65 20 70 61 67  s within the pag
5b20: 65 20 69 73 20 6d 6f 72 65 20 63 6f 6d 70 6c 69  e is more compli
5b30: 63 61 74 65 64 20 61 6e 64 20 77 69 6c 6c 20 62  cated and will b
5b40: 65 20 64 65 73 63 72 69 62 65 64 20 69 6e 0a 74  e described in.t
5b50: 68 65 20 73 65 71 75 65 6c 2e 29 20 20 41 6c 6c  he sequel.)  All
5b60: 20 6b 65 79 73 20 77 69 74 68 69 6e 20 74 68 65   keys within the
5b70: 20 73 61 6d 65 20 70 61 67 65 20 61 72 65 20 75   same page are u
5b80: 6e 69 71 75 65 20 61 6e 64 20 61 72 65 20 6c 6f  nique and are lo
5b90: 67 69 63 61 6c 6c 79 0a 6f 72 67 61 6e 69 7a 65  gically.organize
5ba0: 64 20 69 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f  d in ascending o
5bb0: 72 64 65 72 20 66 72 6f 6d 20 6c 65 66 74 20 74  rder from left t
5bc0: 6f 20 72 69 67 68 74 2e 20 20 28 41 67 61 69 6e  o right.  (Again
5bd0: 2c 20 74 68 69 73 20 6f 72 64 65 72 69 6e 67 0a  , this ordering.
5be0: 69 73 20 6c 6f 67 69 63 61 6c 2c 20 6e 6f 74 20  is logical, not 
5bf0: 70 68 79 73 69 63 61 6c 2e 20 20 54 68 65 20 61  physical.  The a
5c00: 63 74 75 61 6c 20 6c 6f 63 61 74 69 6f 6e 20 6f  ctual location o
5c10: 66 20 6b 65 79 73 20 77 69 74 68 69 6e 20 74 68  f keys within th
5c20: 65 20 70 61 67 65 0a 69 73 20 61 72 62 69 74 72  e page.is arbitr
5c30: 61 72 79 2e 29 20 5e 46 6f 72 20 61 6e 79 20 6b  ary.) ^For any k
5c40: 65 79 20 58 2c 20 70 6f 69 6e 74 65 72 73 20 74  ey X, pointers t
5c50: 6f 20 74 68 65 20 6c 65 66 74 0a 6f 66 20 61 20  o the left.of a 
5c60: 58 20 72 65 66 65 72 20 74 6f 20 62 2d 74 72 65  X refer to b-tre
5c70: 65 20 70 61 67 65 73 20 6f 6e 20 77 68 69 63 68  e pages on which
5c80: 20 61 6c 6c 20 6b 65 79 73 20 61 72 65 20 6c 65   all keys are le
5c90: 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  ss than or equal
5ca0: 20 74 6f 20 58 2e 0a 5e 50 6f 69 6e 74 65 72 73   to X..^Pointers
5cb0: 20 74 6f 20 74 68 65 20 72 69 67 68 74 20 6f 66   to the right of
5cc0: 20 58 20 72 65 66 65 72 20 74 6f 20 70 61 67 65   X refer to page
5cd0: 73 20 77 68 65 72 65 20 61 6c 6c 20 6b 65 79 73  s where all keys
5ce0: 20 61 72 65 20 0a 67 72 65 61 74 65 72 20 74 68   are .greater th
5cf0: 61 6e 20 58 2e 3c 2f 70 3e 0a 0a 3c 70 3e 57 69  an X.</p>..<p>Wi
5d00: 74 68 69 6e 20 61 6e 20 69 6e 74 65 72 69 6f 72  thin an interior
5d10: 20 62 2d 74 72 65 65 20 70 61 67 65 2c 20 65 61   b-tree page, ea
5d20: 63 68 20 6b 65 79 20 61 6e 64 20 74 68 65 20 70  ch key and the p
5d30: 6f 69 6e 74 65 72 20 74 6f 20 69 74 73 0a 69 6d  ointer to its.im
5d40: 6d 65 64 69 61 74 65 20 6c 65 66 74 20 61 72 65  mediate left are
5d50: 20 63 6f 6d 62 69 6e 65 64 20 69 6e 74 6f 20 61   combined into a
5d60: 20 73 74 72 75 63 74 75 72 65 20 63 61 6c 6c 65   structure calle
5d70: 64 20 61 20 22 63 65 6c 6c 22 2e 20 20 54 68 65  d a "cell".  The
5d80: 0a 72 69 67 68 74 2d 6d 6f 73 74 20 70 6f 69 6e  .right-most poin
5d90: 74 65 72 20 69 73 20 68 65 6c 64 20 73 65 70 61  ter is held sepa
5da0: 72 61 74 65 6c 79 2e 20 20 41 20 6c 65 61 66 20  rately.  A leaf 
5db0: 62 2d 74 72 65 65 20 70 61 67 65 20 68 61 73 20  b-tree page has 
5dc0: 6e 6f 0a 70 6f 69 6e 74 65 72 73 2c 20 62 75 74  no.pointers, but
5dd0: 20 69 74 20 73 74 69 6c 6c 20 75 73 65 73 20 74   it still uses t
5de0: 68 65 20 63 65 6c 6c 20 73 74 72 75 63 74 75 72  he cell structur
5df0: 65 20 74 6f 20 68 6f 6c 64 20 6b 65 79 73 20 66  e to hold keys f
5e00: 6f 72 0a 69 6e 64 65 78 20 62 2d 74 72 65 65 73  or.index b-trees
5e10: 20 6f 72 20 6b 65 79 73 20 61 6e 64 20 63 6f 6e   or keys and con
5e20: 74 65 6e 74 20 66 6f 72 20 74 61 62 6c 65 20 62  tent for table b
5e30: 2d 74 72 65 65 73 2e 20 20 44 61 74 61 20 69 73  -trees.  Data is
5e40: 20 61 6c 73 6f 0a 63 6f 6e 74 61 69 6e 65 64 20   also.contained 
5e50: 69 6e 20 74 68 65 20 63 65 6c 6c 2e 0a 3c 2f 70  in the cell..</p
5e60: 3e 0a 0a 3c 70 3e 45 76 65 72 79 20 62 2d 74 72  >..<p>Every b-tr
5e70: 65 65 20 70 61 67 65 20 68 61 73 20 61 74 20 6d  ee page has at m
5e80: 6f 73 74 20 6f 6e 65 20 70 61 72 65 6e 74 20 62  ost one parent b
5e90: 2d 74 72 65 65 20 70 61 67 65 2e 0a 41 20 62 2d  -tree page..A b-
5ea0: 74 72 65 65 20 70 61 67 65 20 77 69 74 68 6f 75  tree page withou
5eb0: 74 20 61 20 70 61 72 65 6e 74 20 69 73 20 63 61  t a parent is ca
5ec0: 6c 6c 65 64 20 61 20 72 6f 6f 74 20 70 61 67 65  lled a root page
5ed0: 2e 20 20 41 20 72 6f 6f 74 20 62 2d 74 72 65 65  .  A root b-tree
5ee0: 20 70 61 67 65 0a 74 6f 67 65 74 68 65 72 20 77   page.together w
5ef0: 69 74 68 20 74 68 65 20 63 6c 6f 73 75 72 65 20  ith the closure 
5f00: 6f 66 20 69 74 73 20 63 68 69 6c 64 72 65 6e 20  of its children 
5f10: 66 6f 72 6d 20 61 20 63 6f 6d 70 6c 65 74 65 20  form a complete 
5f20: 62 2d 74 72 65 65 2e 0a 49 74 20 69 73 20 70 6f  b-tree..It is po
5f30: 73 73 69 62 6c 65 20 28 61 6e 64 20 69 6e 20 66  ssible (and in f
5f40: 61 63 74 20 72 61 74 68 65 72 20 63 6f 6d 6d 6f  act rather commo
5f50: 6e 29 20 74 6f 20 68 61 76 65 20 61 20 63 6f 6d  n) to have a com
5f60: 70 6c 65 74 65 20 62 2d 74 72 65 65 0a 74 68 61  plete b-tree.tha
5f70: 74 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20  t consists of a 
5f80: 73 69 6e 67 6c 65 20 70 61 67 65 20 74 68 61 74  single page that
5f90: 20 69 73 20 62 6f 74 68 20 61 20 6c 65 61 66 20   is both a leaf 
5fa0: 61 6e 64 20 74 68 65 20 72 6f 6f 74 2e 0a 42 65  and the root..Be
5fb0: 63 61 75 73 65 20 74 68 65 72 65 20 61 72 65 20  cause there are 
5fc0: 70 6f 69 6e 74 65 72 73 20 66 72 6f 6d 20 70 61  pointers from pa
5fd0: 72 65 6e 74 73 20 74 6f 20 63 68 69 6c 64 72 65  rents to childre
5fe0: 6e 2c 20 65 76 65 72 79 20 70 61 67 65 20 6f 66  n, every page of
5ff0: 20 61 0a 63 6f 6d 70 6c 65 74 65 20 62 2d 74 72   a.complete b-tr
6000: 65 65 20 63 61 6e 20 62 65 20 6c 6f 63 61 74 65  ee can be locate
6010: 64 20 69 66 20 6f 6e 6c 79 20 74 68 65 20 72 6f  d if only the ro
6020: 6f 74 20 70 61 67 65 20 69 73 20 6b 6e 6f 77 6e  ot page is known
6030: 2e 20 20 48 65 6e 63 65 2c 0a 62 2d 74 72 65 65  .  Hence,.b-tree
6040: 73 20 61 72 65 20 69 64 65 6e 74 69 66 69 65 64  s are identified
6050: 20 62 79 20 74 68 65 69 72 20 72 6f 6f 74 20 70   by their root p
6060: 61 67 65 20 6e 75 6d 62 65 72 2e 3c 2f 70 3e 0a  age number.</p>.
6070: 0a 3c 70 3e 41 20 62 2d 74 72 65 65 20 70 61 67  .<p>A b-tree pag
6080: 65 20 69 73 20 65 69 74 68 65 72 20 61 20 74 61  e is either a ta
6090: 62 6c 65 20 62 2d 74 72 65 65 20 70 61 67 65 20  ble b-tree page 
60a0: 6f 72 20 61 6e 20 69 6e 64 65 78 20 62 2d 74 72  or an index b-tr
60b0: 65 65 20 70 61 67 65 2e 0a 41 6c 6c 20 70 61 67  ee page..All pag
60c0: 65 73 20 77 69 74 68 69 6e 20 65 61 63 68 20 63  es within each c
60d0: 6f 6d 70 6c 65 74 65 20 62 2d 74 72 65 65 20 61  omplete b-tree a
60e0: 72 65 20 6f 66 20 74 68 65 20 73 61 6d 65 20 74  re of the same t
60f0: 79 70 65 3a 20 65 69 74 68 65 72 20 74 61 62 6c  ype: either tabl
6100: 65 0a 6f 72 20 69 6e 64 65 78 2e 20 20 54 68 65  e.or index.  The
6110: 72 65 20 69 73 20 6f 6e 65 20 74 61 62 6c 65 20  re is one table 
6120: 62 2d 74 72 65 65 73 20 69 6e 20 74 68 65 20 64  b-trees in the d
6130: 61 74 61 62 61 73 65 20 66 69 6c 65 0a 66 6f 72  atabase file.for
6140: 20 65 61 63 68 20 72 6f 77 69 64 20 74 61 62 6c   each rowid tabl
6150: 65 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  e in the databas
6160: 65 20 73 63 68 65 6d 61 2c 20 69 6e 63 6c 75 64  e schema, includ
6170: 69 6e 67 20 73 79 73 74 65 6d 20 74 61 62 6c 65  ing system table
6180: 73 0a 73 75 63 68 20 61 73 20 73 71 6c 69 74 65  s.such as sqlite
6190: 5f 6d 61 73 74 65 72 2e 20 20 54 68 65 72 65 20  _master.  There 
61a0: 69 73 20 6f 6e 65 20 69 6e 64 65 78 20 62 2d 74  is one index b-t
61b0: 72 65 65 0a 69 6e 20 74 68 65 20 64 61 74 61 62  ree.in the datab
61c0: 61 73 65 20 66 69 6c 65 20 66 6f 72 20 65 61 63  ase file for eac
61d0: 68 20 69 6e 64 65 78 20 69 6e 20 74 68 65 20 73  h index in the s
61e0: 63 68 65 6d 61 2c 20 69 6e 63 6c 75 64 69 6e 67  chema, including
61f0: 20 69 6d 70 6c 69 65 64 20 69 6e 64 65 78 65 73   implied indexes
6200: 0a 63 72 65 61 74 65 64 20 62 79 20 75 6e 69 71  .created by uniq
6210: 75 65 6e 65 73 73 20 63 6f 6e 73 74 72 61 69 6e  ueness constrain
6220: 74 73 2e 20 20 54 68 65 72 65 20 61 72 65 20 6e  ts.  There are n
6230: 6f 20 62 2d 74 72 65 65 73 20 61 73 73 6f 63 69  o b-trees associ
6240: 61 74 65 64 20 77 69 74 68 0a 5b 76 69 72 74 75  ated with.[virtu
6250: 61 6c 20 74 61 62 6c 65 73 5d 2e 20 20 53 70 65  al tables].  Spe
6260: 63 69 66 69 63 20 76 69 72 74 75 61 6c 20 74 61  cific virtual ta
6270: 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ble implementati
6280: 6f 6e 73 20 6d 69 67 68 74 20 6d 61 6b 65 20 75  ons might make u
6290: 73 65 0a 6f 66 20 5b 73 68 61 64 6f 77 20 74 61  se.of [shadow ta
62a0: 62 6c 65 73 5d 20 66 6f 72 20 73 74 6f 72 61 67  bles] for storag
62b0: 65 2c 20 62 75 74 20 74 68 6f 73 65 20 73 68 61  e, but those sha
62c0: 64 6f 77 20 74 61 62 6c 65 73 20 77 69 6c 6c 20  dow tables will 
62d0: 68 61 76 65 20 73 65 70 61 72 61 74 65 0a 65 6e  have separate.en
62e0: 74 72 69 65 73 20 69 6e 20 74 68 65 20 64 61 74  tries in the dat
62f0: 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20 20 5b  abase schema.  [
6300: 57 49 54 48 4f 55 54 20 52 4f 57 49 44 5d 20 74  WITHOUT ROWID] t
6310: 61 62 6c 65 73 20 75 73 65 20 69 6e 64 65 78 20  ables use index 
6320: 62 2d 74 72 65 65 73 0a 72 61 74 68 65 72 20 74  b-trees.rather t
6330: 68 61 6e 20 61 20 74 61 62 6c 65 20 62 2d 74 72  han a table b-tr
6340: 65 65 73 2c 20 73 6f 20 74 68 65 72 65 20 69 73  ees, so there is
6350: 20 6f 6e 65 0a 69 6e 64 65 78 20 62 2d 74 72 65   one.index b-tre
6360: 65 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  e in the databas
6370: 65 20 66 69 6c 65 20 66 6f 72 20 65 61 63 68 20  e file for each 
6380: 5b 57 49 54 48 4f 55 54 20 52 4f 57 49 44 5d 20  [WITHOUT ROWID] 
6390: 74 61 62 6c 65 2e 0a 54 68 65 20 62 2d 74 72 65  table..The b-tre
63a0: 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
63b0: 74 6f 20 74 68 65 20 73 71 6c 69 74 65 5f 6d 61  to the sqlite_ma
63c0: 73 74 65 72 20 74 61 62 6c 65 20 69 73 20 61 6c  ster table is al
63d0: 77 61 79 73 20 61 20 74 61 62 6c 65 0a 62 2d 74  ways a table.b-t
63e0: 72 65 65 20 61 6e 64 20 61 6c 77 61 79 73 20 68  ree and always h
63f0: 61 73 20 61 20 72 6f 6f 74 20 70 61 67 65 20 6f  as a root page o
6400: 66 20 31 2e 0a 54 68 65 20 73 71 6c 69 74 65 5f  f 1..The sqlite_
6410: 6d 61 73 74 65 72 20 74 61 62 6c 65 20 63 6f 6e  master table con
6420: 74 61 69 6e 73 20 74 68 65 20 72 6f 6f 74 20 70  tains the root p
6430: 61 67 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 65  age number for e
6440: 76 65 72 79 20 6f 74 68 65 72 20 0a 74 61 62 6c  very other .tabl
6450: 65 20 61 6e 64 20 69 6e 64 65 78 20 69 6e 20 74  e and index in t
6460: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
6470: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 45 61 63 68 20 65  .</p>..<p>Each e
6480: 6e 74 72 79 20 69 6e 20 61 20 74 61 62 6c 65 20  ntry in a table 
6490: 62 2d 74 72 65 65 20 63 6f 6e 73 69 73 74 73 20  b-tree consists 
64a0: 6f 66 20 61 20 36 34 2d 62 69 74 20 73 69 67 6e  of a 64-bit sign
64b0: 65 64 20 69 6e 74 65 67 65 72 20 6b 65 79 0a 61  ed integer key.a
64c0: 6e 64 20 75 70 20 74 6f 20 32 31 34 37 34 38 33  nd up to 2147483
64d0: 36 34 37 20 62 79 74 65 73 20 6f 66 20 61 72 62  647 bytes of arb
64e0: 69 74 72 61 72 79 20 64 61 74 61 2e 20 20 28 54  itrary data.  (T
64f0: 68 65 20 6b 65 79 20 6f 66 20 61 20 74 61 62 6c  he key of a tabl
6500: 65 20 62 2d 74 72 65 65 0a 63 6f 72 72 65 73 70  e b-tree.corresp
6510: 6f 6e 64 73 20 74 6f 20 74 68 65 20 5b 72 6f 77  onds to the [row
6520: 69 64 5d 20 6f 66 20 74 68 65 20 53 51 4c 20 74  id] of the SQL t
6530: 61 62 6c 65 20 74 68 61 74 20 74 68 65 20 62 2d  able that the b-
6540: 74 72 65 65 20 69 6d 70 6c 65 6d 65 6e 74 73 2e  tree implements.
6550: 29 0a 49 6e 74 65 72 69 6f 72 20 74 61 62 6c 65  ).Interior table
6560: 20 62 2d 74 72 65 65 73 20 68 6f 6c 64 20 6f 6e   b-trees hold on
6570: 6c 79 20 6b 65 79 73 20 61 6e 64 20 70 6f 69 6e  ly keys and poin
6580: 74 65 72 73 20 74 6f 20 63 68 69 6c 64 72 65 6e  ters to children
6590: 2e 0a 41 6c 6c 20 64 61 74 61 20 69 73 20 63 6f  ..All data is co
65a0: 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 65 20 74  ntained in the t
65b0: 61 62 6c 65 20 62 2d 74 72 65 65 20 6c 65 61 76  able b-tree leav
65c0: 65 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 45 61 63 68  es.</p>..<p>Each
65d0: 20 65 6e 74 72 79 20 69 6e 20 61 6e 20 69 6e 64   entry in an ind
65e0: 65 78 20 62 2d 74 72 65 65 20 63 6f 6e 73 69 73  ex b-tree consis
65f0: 74 73 20 6f 66 20 61 6e 20 61 72 62 69 74 72 61  ts of an arbitra
6600: 72 79 20 6b 65 79 20 6f 66 20 75 70 0a 74 6f 20  ry key of up.to 
6610: 32 31 34 37 34 38 33 36 34 37 20 62 79 74 65 73  2147483647 bytes
6620: 20 69 6e 20 6c 65 6e 67 74 68 20 61 6e 64 20 6e   in length and n
6630: 6f 20 64 61 74 61 2e 3c 2f 70 3e 0a 0a 3c 74 63  o data.</p>..<tc
6640: 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 63 65  l>hd_fragment ce
6650: 6c 6c 5f 70 61 79 6c 6f 61 64 20 7b 63 65 6c 6c  ll_payload {cell
6660: 20 70 61 79 6c 6f 61 64 7d 3c 2f 74 63 6c 3e 0a   payload}</tcl>.
6670: 3c 70 3e 44 65 66 69 6e 65 20 74 68 65 20 22 70  <p>Define the "p
6680: 61 79 6c 6f 61 64 22 20 6f 66 20 61 20 63 65 6c  ayload" of a cel
6690: 6c 20 74 6f 20 62 65 20 74 68 65 20 61 72 62 69  l to be the arbi
66a0: 74 72 61 72 79 20 6c 65 6e 67 74 68 20 73 65 63  trary length sec
66b0: 74 69 6f 6e 0a 6f 66 20 74 68 65 20 63 65 6c 6c  tion.of the cell
66c0: 2e 20 20 46 6f 72 20 61 6e 20 69 6e 64 65 78 20  .  For an index 
66d0: 62 2d 74 72 65 65 2c 20 74 68 65 20 6b 65 79 20  b-tree, the key 
66e0: 69 73 20 61 6c 77 61 79 73 20 61 72 62 69 74 72  is always arbitr
66f0: 61 72 79 20 69 6e 20 6c 65 6e 67 74 68 0a 61 6e  ary in length.an
6700: 64 20 68 65 6e 63 65 20 74 68 65 20 70 61 79 6c  d hence the payl
6710: 6f 61 64 20 69 73 20 74 68 65 20 6b 65 79 2e 20  oad is the key. 
6720: 20 54 68 65 72 65 20 61 72 65 20 6e 6f 20 61 72   There are no ar
6730: 62 69 74 72 61 72 79 20 6c 65 6e 67 74 68 20 65  bitrary length e
6740: 6c 65 6d 65 6e 74 73 0a 69 6e 20 74 68 65 20 63  lements.in the c
6750: 65 6c 6c 73 20 6f 66 20 69 6e 74 65 72 69 6f 72  ells of interior
6760: 20 74 61 62 6c 65 20 62 2d 74 72 65 65 20 70 61   table b-tree pa
6770: 67 65 73 20 61 6e 64 20 73 6f 20 74 68 6f 73 65  ges and so those
6780: 20 63 65 6c 6c 73 20 68 61 76 65 20 6e 6f 0a 70   cells have no.p
6790: 61 79 6c 6f 61 64 2e 20 20 54 61 62 6c 65 20 62  ayload.  Table b
67a0: 2d 74 72 65 65 20 6c 65 61 66 20 70 61 67 65 73  -tree leaf pages
67b0: 20 63 6f 6e 74 61 69 6e 20 61 72 62 69 74 72 61   contain arbitra
67c0: 72 79 20 6c 65 6e 67 74 68 20 63 6f 6e 74 65 6e  ry length conten
67d0: 74 20 61 6e 64 0a 73 6f 20 66 6f 72 20 63 65 6c  t and.so for cel
67e0: 6c 73 20 6f 6e 20 74 68 6f 73 65 20 70 61 67 65  ls on those page
67f0: 73 20 74 68 65 20 70 61 79 6c 6f 61 64 20 69 73  s the payload is
6800: 20 74 68 65 20 63 6f 6e 74 65 6e 74 2e 0a 3c 70   the content..<p
6810: 3e 57 68 65 6e 20 74 68 65 20 73 69 7a 65 20 6f  >When the size o
6820: 66 20 70 61 79 6c 6f 61 64 20 66 6f 72 20 61 20  f payload for a 
6830: 63 65 6c 6c 20 65 78 63 65 65 64 73 20 61 20 63  cell exceeds a c
6840: 65 72 74 61 69 6e 20 74 68 72 65 73 68 6f 6c 64  ertain threshold
6850: 20 28 74 6f 0a 62 65 20 64 65 66 69 6e 65 64 20   (to.be defined 
6860: 6c 61 74 65 72 29 20 74 68 65 6e 20 6f 6e 6c 79  later) then only
6870: 20 74 68 65 20 66 69 72 73 74 20 66 65 77 20 62   the first few b
6880: 79 74 65 73 20 6f 66 20 74 68 65 20 70 61 79 6c  ytes of the payl
6890: 6f 61 64 0a 61 72 65 20 73 74 6f 72 65 64 20 6f  oad.are stored o
68a0: 6e 20 74 68 65 20 62 2d 74 72 65 65 20 70 61 67  n the b-tree pag
68b0: 65 20 61 6e 64 20 74 68 65 20 62 61 6c 61 6e 63  e and the balanc
68c0: 65 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 61  e is stored in a
68d0: 20 6c 69 6e 6b 65 64 20 6c 69 73 74 0a 6f 66 20   linked list.of 
68e0: 63 6f 6e 74 65 6e 74 20 6f 76 65 72 66 6c 6f 77  content overflow
68f0: 20 70 61 67 65 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e   pages.</p>..<p>
6900: 41 20 62 2d 74 72 65 65 20 70 61 67 65 20 69 73  A b-tree page is
6910: 20 64 69 76 69 64 65 64 20 69 6e 74 6f 20 72 65   divided into re
6920: 67 69 6f 6e 73 20 69 6e 20 74 68 65 20 66 6f 6c  gions in the fol
6930: 6c 6f 77 69 6e 67 20 6f 72 64 65 72 3a 0a 0a 3c  lowing order:..<
6940: 6f 6c 3e 0a 3c 6c 69 3e 54 68 65 20 31 30 30 2d  ol>.<li>The 100-
6950: 62 79 74 65 20 64 61 74 61 62 61 73 65 20 66 69  byte database fi
6960: 6c 65 20 68 65 61 64 65 72 20 28 66 6f 75 6e 64  le header (found
6970: 20 6f 6e 20 70 61 67 65 20 31 20 6f 6e 6c 79 29   on page 1 only)
6980: 0a 3c 6c 69 3e 54 68 65 20 38 20 6f 72 20 31 32  .<li>The 8 or 12
6990: 20 62 79 74 65 20 62 2d 74 72 65 65 20 70 61 67   byte b-tree pag
69a0: 65 20 68 65 61 64 65 72 0a 3c 6c 69 3e 54 68 65  e header.<li>The
69b0: 20 63 65 6c 6c 20 70 6f 69 6e 74 65 72 20 61 72   cell pointer ar
69c0: 72 61 79 0a 3c 6c 69 3e 55 6e 61 6c 6c 6f 63 61  ray.<li>Unalloca
69d0: 74 65 64 20 73 70 61 63 65 0a 3c 6c 69 3e 54 68  ted space.<li>Th
69e0: 65 20 63 65 6c 6c 20 63 6f 6e 74 65 6e 74 20 61  e cell content a
69f0: 72 65 61 0a 3c 6c 69 3e 54 68 65 20 72 65 73 65  rea.<li>The rese
6a00: 72 76 65 64 20 72 65 67 69 6f 6e 2e 0a 3c 2f 6f  rved region..</o
6a10: 6c 3e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  l>.</p>..<p>The 
6a20: 31 30 30 2d 62 79 74 65 20 64 61 74 61 62 61 73  100-byte databas
6a30: 65 20 66 69 6c 65 20 68 65 61 64 65 72 20 69 73  e file header is
6a40: 20 66 6f 75 6e 64 20 6f 6e 6c 79 20 6f 6e 20 70   found only on p
6a50: 61 67 65 20 31 2c 20 77 68 69 63 68 20 69 73 0a  age 1, which is.
6a60: 61 6c 77 61 79 73 20 61 20 74 61 62 6c 65 20 62  always a table b
6a70: 2d 74 72 65 65 20 70 61 67 65 2e 20 20 41 6c 6c  -tree page.  All
6a80: 20 6f 74 68 65 72 20 62 2d 74 72 65 65 20 70 61   other b-tree pa
6a90: 67 65 73 20 69 6e 20 74 68 65 20 64 61 74 61 62  ges in the datab
6aa0: 61 73 65 20 66 69 6c 65 0a 6f 6d 69 74 20 74 68  ase file.omit th
6ab0: 69 73 20 31 30 30 2d 62 79 74 65 20 68 65 61 64  is 100-byte head
6ac0: 65 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  er.</p>..<p>The 
6ad0: 72 65 73 65 72 76 65 64 20 72 65 67 69 6f 6e 20  reserved region 
6ae0: 69 73 20 61 6e 20 61 72 65 61 20 6f 66 20 75 6e  is an area of un
6af0: 75 73 65 64 20 73 70 61 63 65 20 61 74 20 74 68  used space at th
6b00: 65 20 65 6e 64 20 6f 66 20 65 76 65 72 79 0a 70  e end of every.p
6b10: 61 67 65 20 28 65 78 63 65 70 74 20 74 68 65 20  age (except the 
6b20: 6c 6f 63 6b 69 6e 67 20 70 61 67 65 29 20 74 68  locking page) th
6b30: 61 74 20 65 78 74 65 6e 73 69 6f 6e 73 20 63 61  at extensions ca
6b40: 6e 20 75 73 65 20 74 6f 20 68 6f 6c 64 20 70 65  n use to hold pe
6b50: 72 2d 70 61 67 65 0a 69 6e 66 6f 72 6d 61 74 69  r-page.informati
6b60: 6f 6e 2e 20 20 5e 54 68 65 20 73 69 7a 65 20 6f  on.  ^The size o
6b70: 66 20 74 68 65 20 72 65 73 65 72 76 65 64 20 72  f the reserved r
6b80: 65 67 69 6f 6e 20 69 73 20 64 65 74 65 72 6d 69  egion is determi
6b90: 6e 65 64 20 62 79 20 74 68 65 20 6f 6e 65 2d 62  ned by the one-b
6ba0: 79 74 65 0a 75 6e 73 69 67 6e 65 64 20 69 6e 74  yte.unsigned int
6bb0: 65 67 65 72 20 66 6f 75 6e 64 20 61 74 20 61 6e  eger found at an
6bc0: 20 6f 66 66 73 65 74 20 6f 66 20 32 30 20 69 6e   offset of 20 in
6bd0: 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20  to the database 
6be0: 66 69 6c 65 20 68 65 61 64 65 72 2e 0a 54 68 65  file header..The
6bf0: 20 73 69 7a 65 20 6f 66 20 74 68 65 20 72 65 73   size of the res
6c00: 65 72 76 65 64 20 72 65 67 69 6f 6e 20 69 73 20  erved region is 
6c10: 75 73 75 61 6c 6c 79 20 7a 65 72 6f 2e 3c 2f 70  usually zero.</p
6c20: 3e 0a 0a 3c 70 3e 54 68 65 20 62 2d 74 72 65 65  >..<p>The b-tree
6c30: 20 70 61 67 65 20 68 65 61 64 65 72 20 69 73 20   page header is 
6c40: 38 20 62 79 74 65 73 20 69 6e 20 73 69 7a 65 20  8 bytes in size 
6c50: 66 6f 72 20 6c 65 61 66 20 70 61 67 65 73 20 61  for leaf pages a
6c60: 6e 64 20 31 32 0a 62 79 74 65 73 20 66 6f 72 20  nd 12.bytes for 
6c70: 69 6e 74 65 72 69 6f 72 20 70 61 67 65 73 2e 20  interior pages. 
6c80: 20 41 6c 6c 20 6d 75 6c 74 69 62 79 74 65 20 76   All multibyte v
6c90: 61 6c 75 65 73 20 69 6e 20 74 68 65 20 70 61 67  alues in the pag
6ca0: 65 20 68 65 61 64 65 72 0a 61 72 65 20 62 69 67  e header.are big
6cb0: 2d 65 6e 64 69 61 6e 2e 0a 54 68 65 20 62 2d 74  -endian..The b-t
6cc0: 72 65 65 20 70 61 67 65 20 68 65 61 64 65 72 20  ree page header 
6cd0: 69 73 20 63 6f 6d 70 6f 73 65 64 20 6f 66 20 74  is composed of t
6ce0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 66 69 65  he following fie
6cf0: 6c 64 73 3a 3c 2f 70 3e 0a 0a 3c 63 65 6e 74 65  lds:</p>..<cente
6d00: 72 3e 0a 3c 69 3e 42 2d 74 72 65 65 20 50 61 67  r>.<i>B-tree Pag
6d10: 65 20 48 65 61 64 65 72 20 46 6f 72 6d 61 74 3c  e Header Format<
6d20: 2f 69 3e 3c 62 72 3e 0a 3c 74 61 62 6c 65 20 62  /i><br>.<table b
6d30: 6f 72 64 65 72 3d 31 20 77 69 64 74 68 3d 22 38  order=1 width="8
6d40: 30 25 22 3e 0a 3c 74 72 3e 3c 74 68 3e 4f 66 66  0%">.<tr><th>Off
6d50: 73 65 74 3c 74 68 3e 53 69 7a 65 3c 74 68 3e 44  set<th>Size<th>D
6d60: 65 73 63 72 69 70 74 69 6f 6e 0a 3c 74 72 3e 3c  escription.<tr><
6d70: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
6d80: 76 61 6c 69 67 6e 3d 74 6f 70 3e 30 3c 74 64 20  valign=top>0<td 
6d90: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c  align=center val
6da0: 69 67 6e 3d 74 6f 70 3e 31 3c 74 64 20 61 6c 69  ign=top>1<td ali
6db0: 67 6e 3d 6c 65 66 74 3e 0a 5e 54 68 65 20 6f 6e  gn=left>.^The on
6dc0: 65 2d 62 79 74 65 20 66 6c 61 67 20 61 74 20 6f  e-byte flag at o
6dd0: 66 66 73 65 74 20 30 20 69 6e 64 69 63 61 74 69  ffset 0 indicati
6de0: 6e 67 20 74 68 65 20 62 2d 74 72 65 65 20 70 61  ng the b-tree pa
6df0: 67 65 20 74 79 70 65 2e 3c 75 6c 3e 0a 3c 6c 69  ge type.<ul>.<li
6e00: 3e 5e 41 20 76 61 6c 75 65 20 6f 66 20 32 20 28  >^A value of 2 (
6e10: 30 78 30 32 29 20 6d 65 61 6e 73 20 74 68 65 20  0x02) means the 
6e20: 70 61 67 65 20 69 73 20 61 6e 20 69 6e 74 65 72  page is an inter
6e30: 69 6f 72 20 69 6e 64 65 78 20 62 2d 74 72 65 65  ior index b-tree
6e40: 20 70 61 67 65 2e 0a 3c 6c 69 3e 5e 41 20 76 61   page..<li>^A va
6e50: 6c 75 65 20 6f 66 20 35 20 28 30 78 30 35 29 20  lue of 5 (0x05) 
6e60: 6d 65 61 6e 73 20 74 68 65 20 70 61 67 65 20 69  means the page i
6e70: 73 20 61 6e 20 69 6e 74 65 72 69 6f 72 20 74 61  s an interior ta
6e80: 62 6c 65 20 62 2d 74 72 65 65 20 70 61 67 65 2e  ble b-tree page.
6e90: 0a 3c 6c 69 3e 5e 41 20 76 61 6c 75 65 20 6f 66  .<li>^A value of
6ea0: 20 31 30 20 28 30 78 30 61 29 20 6d 65 61 6e 73   10 (0x0a) means
6eb0: 20 74 68 65 20 70 61 67 65 20 69 73 20 61 20 6c   the page is a l
6ec0: 65 61 66 20 69 6e 64 65 78 20 62 2d 74 72 65 65  eaf index b-tree
6ed0: 20 70 61 67 65 2e 0a 3c 6c 69 3e 5e 41 20 76 61   page..<li>^A va
6ee0: 6c 75 65 20 6f 66 20 31 33 20 28 30 78 30 64 29  lue of 13 (0x0d)
6ef0: 20 6d 65 61 6e 73 20 74 68 65 20 70 61 67 65 20   means the page 
6f00: 69 73 20 61 20 6c 65 61 66 20 74 61 62 6c 65 20  is a leaf table 
6f10: 62 2d 74 72 65 65 20 70 61 67 65 2e 3c 2f 75 6c  b-tree page.</ul
6f20: 3e 0a 5e 41 6e 79 20 6f 74 68 65 72 20 76 61 6c  >.^Any other val
6f30: 75 65 20 66 6f 72 20 74 68 65 20 62 2d 74 72 65  ue for the b-tre
6f40: 65 20 70 61 67 65 20 74 79 70 65 20 69 73 20 61  e page type is a
6f50: 6e 20 65 72 72 6f 72 2e 0a 3c 74 72 3e 3c 74 64  n error..<tr><td
6f60: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61   align=center va
6f70: 6c 69 67 6e 3d 74 6f 70 3e 31 3c 74 64 20 61 6c  lign=top>1<td al
6f80: 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67  ign=center valig
6f90: 6e 3d 74 6f 70 3e 32 3c 74 64 20 61 6c 69 67 6e  n=top>2<td align
6fa0: 3d 6c 65 66 74 3e 0a 5e 54 68 65 20 74 77 6f 2d  =left>.^The two-
6fb0: 62 79 74 65 20 69 6e 74 65 67 65 72 20 61 74 20  byte integer at 
6fc0: 6f 66 66 73 65 74 20 31 20 67 69 76 65 73 20 74  offset 1 gives t
6fd0: 68 65 20 73 74 61 72 74 20 6f 66 20 74 68 65 0a  he start of the.
6fe0: 66 69 72 73 74 20 66 72 65 65 62 6c 6f 63 6b 20  first freeblock 
6ff0: 6f 6e 20 74 68 65 20 70 61 67 65 2c 20 6f 72 20  on the page, or 
7000: 69 73 20 7a 65 72 6f 20 69 66 20 74 68 65 72 65  is zero if there
7010: 20 61 72 65 20 6e 6f 20 66 72 65 65 62 6c 6f 63   are no freebloc
7020: 6b 73 2e 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67  ks..<tr><td alig
7030: 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d  n=center valign=
7040: 74 6f 70 3e 33 3c 74 64 20 61 6c 69 67 6e 3d 63  top>3<td align=c
7050: 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70  enter valign=top
7060: 3e 32 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74  >2<td align=left
7070: 3e 0a 5e 54 68 65 20 74 77 6f 2d 62 79 74 65 20  >.^The two-byte 
7080: 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73 65  integer at offse
7090: 74 20 33 20 67 69 76 65 73 20 74 68 65 20 6e 75  t 3 gives the nu
70a0: 6d 62 65 72 20 6f 66 20 63 65 6c 6c 73 20 6f 6e  mber of cells on
70b0: 20 74 68 65 20 70 61 67 65 2e 0a 3c 74 72 3e 3c   the page..<tr><
70c0: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
70d0: 76 61 6c 69 67 6e 3d 74 6f 70 3e 35 3c 74 64 20  valign=top>5<td 
70e0: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c  align=center val
70f0: 69 67 6e 3d 74 6f 70 3e 32 3c 74 64 20 61 6c 69  ign=top>2<td ali
7100: 67 6e 3d 6c 65 66 74 3e 0a 5e 28 54 68 65 20 74  gn=left>.^(The t
7110: 77 6f 2d 62 79 74 65 20 69 6e 74 65 67 65 72 20  wo-byte integer 
7120: 61 74 20 6f 66 66 73 65 74 20 35 20 64 65 73 69  at offset 5 desi
7130: 67 6e 61 74 65 73 20 74 68 65 20 73 74 61 72 74  gnates the start
7140: 20 6f 66 20 74 68 65 20 63 65 6c 6c 20 63 6f 6e   of the cell con
7150: 74 65 6e 74 0a 61 72 65 61 2e 20 20 41 20 7a 65  tent.area.  A ze
7160: 72 6f 20 76 61 6c 75 65 20 66 6f 72 20 74 68 69  ro value for thi
7170: 73 20 69 6e 74 65 67 65 72 20 69 73 20 69 6e 74  s integer is int
7180: 65 72 70 72 65 74 65 64 20 61 73 20 36 35 35 33  erpreted as 6553
7190: 36 2e 29 5e 0a 3c 74 72 3e 3c 74 64 20 61 6c 69  6.)^.<tr><td ali
71a0: 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e  gn=center valign
71b0: 3d 74 6f 70 3e 37 3c 74 64 20 61 6c 69 67 6e 3d  =top>7<td align=
71c0: 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f  center valign=to
71d0: 70 3e 31 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66  p>1<td align=lef
71e0: 74 3e 0a 5e 54 68 65 20 6f 6e 65 2d 62 79 74 65  t>.^The one-byte
71f0: 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73   integer at offs
7200: 65 74 20 37 20 67 69 76 65 73 20 74 68 65 20 6e  et 7 gives the n
7210: 75 6d 62 65 72 20 6f 66 20 66 72 61 67 6d 65 6e  umber of fragmen
7220: 74 65 64 20 66 72 65 65 0a 62 79 74 65 73 20 77  ted free.bytes w
7230: 69 74 68 69 6e 20 74 68 65 20 63 65 6c 6c 20 63  ithin the cell c
7240: 6f 6e 74 65 6e 74 20 61 72 65 61 2e 0a 3c 74 72  ontent area..<tr
7250: 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65  ><td align=cente
7260: 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 38 3c 74  r valign=top>8<t
7270: 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76  d align=center v
7280: 61 6c 69 67 6e 3d 74 6f 70 3e 34 3c 74 64 20 61  align=top>4<td a
7290: 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 28 54 68 65  lign=left>.^(The
72a0: 20 66 6f 75 72 2d 62 79 74 65 20 70 61 67 65 20   four-byte page 
72b0: 6e 75 6d 62 65 72 20 61 74 20 6f 66 66 73 65 74  number at offset
72c0: 20 38 20 69 73 20 74 68 65 20 72 69 67 68 74 2d   8 is the right-
72d0: 6d 6f 73 74 20 70 6f 69 6e 74 65 72 2e 20 20 54  most pointer.  T
72e0: 68 69 73 0a 76 61 6c 75 65 20 61 70 70 65 61 72  his.value appear
72f0: 73 20 69 6e 20 74 68 65 20 68 65 61 64 65 72 20  s in the header 
7300: 6f 66 20 69 6e 74 65 72 69 6f 72 20 62 2d 74 72  of interior b-tr
7310: 65 65 20 70 61 67 65 73 20 6f 6e 6c 79 20 61 6e  ee pages only an
7320: 64 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f  d is omitted fro
7330: 6d 0a 61 6c 6c 20 6f 74 68 65 72 20 70 61 67 65  m.all other page
7340: 73 2e 29 5e 0a 3c 2f 74 61 62 6c 65 3e 3c 2f 63  s.)^.</table></c
7350: 65 6e 74 65 72 3e 0a 0a 3c 70 3e 5e 54 68 65 20  enter>..<p>^The 
7360: 63 65 6c 6c 20 70 6f 69 6e 74 65 72 20 61 72 72  cell pointer arr
7370: 61 79 20 6f 66 20 61 20 62 2d 74 72 65 65 20 70  ay of a b-tree p
7380: 61 67 65 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  age immediately 
7390: 66 6f 6c 6c 6f 77 73 20 74 68 65 20 62 2d 74 72  follows the b-tr
73a0: 65 65 0a 70 61 67 65 20 68 65 61 64 65 72 2e 20  ee.page header. 
73b0: 20 4c 65 74 20 4b 20 62 65 20 74 68 65 20 6e 75   Let K be the nu
73c0: 6d 62 65 72 20 6f 66 20 63 65 6c 6c 73 20 6f 6e  mber of cells on
73d0: 20 74 68 65 20 62 74 72 65 65 2e 20 20 5e 54 68   the btree.  ^Th
73e0: 65 20 63 65 6c 6c 20 70 6f 69 6e 74 65 72 0a 61  e cell pointer.a
73f0: 72 72 61 79 20 63 6f 6e 73 69 73 74 73 20 6f 66  rray consists of
7400: 20 4b 20 32 2d 62 79 74 65 20 69 6e 74 65 67 65   K 2-byte intege
7410: 72 20 6f 66 66 73 65 74 73 20 74 6f 20 74 68 65  r offsets to the
7420: 20 63 65 6c 6c 20 63 6f 6e 74 65 6e 74 73 2e 20   cell contents. 
7430: 20 5e 54 68 65 0a 63 65 6c 6c 20 70 6f 69 6e 74   ^The.cell point
7440: 65 72 73 20 61 72 65 20 61 72 72 61 6e 67 65 64  ers are arranged
7450: 20 69 6e 20 6b 65 79 20 6f 72 64 65 72 20 77 69   in key order wi
7460: 74 68 20 6c 65 66 74 2d 6d 6f 73 74 20 63 65 6c  th left-most cel
7470: 6c 20 28 74 68 65 20 63 65 6c 6c 20 77 69 74 68  l (the cell with
7480: 20 74 68 65 0a 73 6d 61 6c 6c 65 73 74 20 6b 65   the.smallest ke
7490: 79 29 20 66 69 72 73 74 20 61 6e 64 20 74 68 65  y) first and the
74a0: 20 72 69 67 68 74 2d 6d 6f 73 74 20 63 65 6c 6c   right-most cell
74b0: 20 28 74 68 65 20 63 65 6c 6c 20 77 69 74 68 20   (the cell with 
74c0: 74 68 65 20 6c 61 72 67 65 73 74 0a 6b 65 79 29  the largest.key)
74d0: 20 6c 61 73 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 43   last.</p>..<p>C
74e0: 65 6c 6c 20 63 6f 6e 74 65 6e 74 20 69 73 20 73  ell content is s
74f0: 74 6f 72 65 64 20 69 6e 20 74 68 65 20 63 65 6c  tored in the cel
7500: 6c 20 63 6f 6e 74 65 6e 74 20 72 65 67 69 6f 6e  l content region
7510: 20 6f 66 20 74 68 65 20 62 2d 74 72 65 65 20 70   of the b-tree p
7520: 61 67 65 2e 0a 53 51 4c 69 74 65 20 73 74 72 69  age..SQLite stri
7530: 76 65 73 20 74 6f 20 70 6c 61 63 65 20 63 65 6c  ves to place cel
7540: 6c 73 20 61 73 20 66 61 72 20 74 6f 77 61 72 64  ls as far toward
7550: 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   the end of the 
7560: 62 2d 74 72 65 65 20 70 61 67 65 20 61 73 0a 69  b-tree page as.i
7570: 74 20 63 61 6e 2c 20 69 6e 20 6f 72 64 65 72 20  t can, in order 
7580: 74 6f 20 6c 65 61 76 65 20 73 70 61 63 65 20 66  to leave space f
7590: 6f 72 20 66 75 74 75 72 65 20 67 72 6f 77 74 68  or future growth
75a0: 20 6f 66 20 74 68 65 20 63 65 6c 6c 20 70 6f 69   of the cell poi
75b0: 6e 74 65 72 20 61 72 72 61 79 2e 0a 54 68 65 20  nter array..The 
75c0: 61 72 65 61 20 69 6e 20 62 65 74 77 65 65 6e 20  area in between 
75d0: 74 68 65 20 6c 61 73 74 20 63 65 6c 6c 20 70 6f  the last cell po
75e0: 69 6e 74 65 72 20 61 72 72 61 79 20 65 6e 74 72  inter array entr
75f0: 79 20 61 6e 64 20 74 68 65 20 62 65 67 69 6e 6e  y and the beginn
7600: 69 6e 67 20 6f 66 0a 74 68 65 20 66 69 72 73 74  ing of.the first
7610: 20 63 65 6c 6c 20 69 73 20 74 68 65 20 75 6e 61   cell is the una
7620: 6c 6c 6f 63 61 74 65 64 20 72 65 67 69 6f 6e 2e  llocated region.
7630: 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20 61 20  .</p>..<p>^If a 
7640: 70 61 67 65 20 63 6f 6e 74 61 69 6e 73 20 6e 6f  page contains no
7650: 20 63 65 6c 6c 73 20 28 77 68 69 63 68 20 69 73   cells (which is
7660: 20 6f 6e 6c 79 20 70 6f 73 73 69 62 6c 65 20 66   only possible f
7670: 6f 72 20 61 20 72 6f 6f 74 20 70 61 67 65 0a 6f  or a root page.o
7680: 66 20 61 20 74 61 62 6c 65 20 74 68 61 74 20 63  f a table that c
7690: 6f 6e 74 61 69 6e 73 20 6e 6f 20 72 6f 77 73 29  ontains no rows)
76a0: 20 74 68 65 6e 20 74 68 65 20 6f 66 66 73 65 74   then the offset
76b0: 20 74 6f 20 74 68 65 0a 63 65 6c 6c 20 63 6f 6e   to the.cell con
76c0: 74 65 6e 74 20 61 72 65 61 20 77 69 6c 6c 20 65  tent area will e
76d0: 71 75 61 6c 20 74 68 65 20 70 61 67 65 20 73 69  qual the page si
76e0: 7a 65 20 6d 69 6e 75 73 20 74 68 65 20 62 79 74  ze minus the byt
76f0: 65 73 20 6f 66 20 72 65 73 65 72 76 65 64 20 73  es of reserved s
7700: 70 61 63 65 2e 0a 5e 28 49 66 20 74 68 65 20 64  pace..^(If the d
7710: 61 74 61 62 61 73 65 20 75 73 65 73 20 61 20 36  atabase uses a 6
7720: 35 35 33 36 2d 62 79 74 65 20 70 61 67 65 20 73  5536-byte page s
7730: 69 7a 65 20 61 6e 64 20 74 68 65 20 72 65 73 65  ize and the rese
7740: 72 76 65 64 20 73 70 61 63 65 20 69 73 20 7a 65  rved space is ze
7750: 72 6f 0a 28 74 68 65 20 75 73 75 61 6c 20 76 61  ro.(the usual va
7760: 6c 75 65 20 66 6f 72 20 72 65 73 65 72 76 65 64  lue for reserved
7770: 20 73 70 61 63 65 29 20 74 68 65 6e 20 74 68 65   space) then the
7780: 20 63 65 6c 6c 20 63 6f 6e 74 65 6e 74 20 6f 66   cell content of
7790: 66 73 65 74 20 6f 66 20 61 6e 0a 65 6d 70 74 79  fset of an.empty
77a0: 20 70 61 67 65 20 77 61 6e 74 73 20 74 6f 20 62   page wants to b
77b0: 65 20 36 35 35 33 36 2e 20 20 0a 48 6f 77 65 76  e 65536.  .Howev
77c0: 65 72 2c 20 74 68 61 74 20 69 6e 74 65 67 65 72  er, that integer
77d0: 20 69 73 20 74 6f 6f 20 6c 61 72 67 65 20 74 6f   is too large to
77e0: 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20 61 0a   be stored in a.
77f0: 32 2d 62 79 74 65 20 75 6e 73 69 67 6e 65 64 20  2-byte unsigned 
7800: 69 6e 74 65 67 65 72 2c 20 73 6f 20 61 20 76 61  integer, so a va
7810: 6c 75 65 20 6f 66 20 30 20 69 73 20 75 73 65 64  lue of 0 is used
7820: 20 69 6e 20 69 74 73 20 70 6c 61 63 65 2e 29 5e   in its place.)^
7830: 0a 0a 3c 70 3e 41 20 66 72 65 65 62 6c 6f 63 6b  ..<p>A freeblock
7840: 20 69 73 20 61 20 73 74 72 75 63 74 75 72 65 20   is a structure 
7850: 75 73 65 64 20 74 6f 20 69 64 65 6e 74 69 66 79  used to identify
7860: 20 75 6e 61 6c 6c 6f 63 61 74 65 64 20 73 70 61   unallocated spa
7870: 63 65 20 77 69 74 68 69 6e 0a 61 20 62 2d 74 72  ce within.a b-tr
7880: 65 65 20 70 61 67 65 2e 20 20 46 72 65 65 62 6c  ee page.  Freebl
7890: 6f 63 6b 73 20 61 72 65 20 6f 72 67 61 6e 69 7a  ocks are organiz
78a0: 65 64 20 61 73 20 61 20 63 68 61 69 6e 2e 20 20  ed as a chain.  
78b0: 5e 54 68 65 20 66 69 72 73 74 20 32 20 62 79 74  ^The first 2 byt
78c0: 65 73 20 6f 66 0a 61 20 66 72 65 65 62 6c 6f 63  es of.a freebloc
78d0: 6b 20 61 72 65 20 61 20 62 69 67 2d 65 6e 64 69  k are a big-endi
78e0: 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69 63 68  an integer which
78f0: 20 69 73 20 74 68 65 20 6f 66 66 73 65 74 20 69   is the offset i
7900: 6e 20 74 68 65 20 62 2d 74 72 65 65 20 70 61 67  n the b-tree pag
7910: 65 0a 6f 66 20 74 68 65 20 6e 65 78 74 20 66 72  e.of the next fr
7920: 65 65 62 6c 6f 63 6b 20 69 6e 20 74 68 65 20 63  eeblock in the c
7930: 68 61 69 6e 2c 20 6f 72 20 7a 65 72 6f 20 69 66  hain, or zero if
7940: 20 74 68 65 20 66 72 65 65 62 6c 6f 63 6b 20 69   the freeblock i
7950: 73 20 74 68 65 20 6c 61 73 74 20 6f 6e 0a 74 68  s the last on.th
7960: 65 20 63 68 61 69 6e 2e 20 20 5e 54 68 65 20 74  e chain.  ^The t
7970: 68 69 72 64 20 61 6e 64 20 66 6f 75 72 74 68 20  hird and fourth 
7980: 62 79 74 65 73 20 6f 66 20 65 61 63 68 20 66 72  bytes of each fr
7990: 65 65 62 6c 6f 63 6b 20 66 6f 72 6d 0a 61 20 62  eeblock form.a b
79a0: 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65  ig-endian intege
79b0: 72 20 77 68 69 63 68 20 69 73 20 74 68 65 20 73  r which is the s
79c0: 69 7a 65 20 6f 66 20 74 68 65 20 66 72 65 65 62  ize of the freeb
79d0: 6c 6f 63 6b 20 69 6e 20 62 79 74 65 73 2c 20 69  lock in bytes, i
79e0: 6e 63 6c 75 64 69 6e 67 0a 74 68 65 20 34 2d 62  ncluding.the 4-b
79f0: 79 74 65 20 68 65 61 64 65 72 2e 20 20 5e 46 72  yte header.  ^Fr
7a00: 65 65 62 6c 6f 63 6b 73 20 61 72 65 20 61 6c 77  eeblocks are alw
7a10: 61 79 73 20 63 6f 6e 6e 65 63 74 65 64 20 69 6e  ays connected in
7a20: 20 6f 72 64 65 72 20 0a 6f 66 20 69 6e 63 72 65   order .of incre
7a30: 61 73 69 6e 67 20 6f 66 66 73 65 74 2e 20 20 5e  asing offset.  ^
7a40: 54 68 65 20 73 65 63 6f 6e 64 20 66 69 65 6c 64  The second field
7a50: 20 6f 66 20 74 68 65 20 62 2d 74 72 65 65 20 70   of the b-tree p
7a60: 61 67 65 20 68 65 61 64 65 72 20 69 73 20 74 68  age header is th
7a70: 65 0a 6f 66 66 73 65 74 20 6f 66 20 74 68 65 20  e.offset of the 
7a80: 66 69 72 73 74 20 66 72 65 65 62 6c 6f 63 6b 2c  first freeblock,
7a90: 20 6f 72 20 7a 65 72 6f 20 69 66 20 74 68 65 72   or zero if ther
7aa0: 65 20 61 72 65 20 6e 6f 20 66 72 65 65 62 6c 6f  e are no freeblo
7ab0: 63 6b 73 20 6f 6e 20 74 68 65 0a 70 61 67 65 2e  cks on the.page.
7ac0: 20 20 5e 49 6e 20 61 20 77 65 6c 6c 2d 66 6f 72    ^In a well-for
7ad0: 6d 65 64 20 62 2d 74 72 65 65 20 70 61 67 65 2c  med b-tree page,
7ae0: 20 74 68 65 72 65 20 77 69 6c 6c 20 61 6c 77 61   there will alwa
7af0: 79 73 20 62 65 20 61 74 20 6c 65 61 73 74 20 6f  ys be at least o
7b00: 6e 65 20 63 65 6c 6c 0a 62 65 66 6f 72 65 20 74  ne cell.before t
7b10: 68 65 20 66 69 72 73 74 20 66 72 65 65 62 6c 6f  he first freeblo
7b20: 63 6b 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 20 66 72  ck.</p>..<p>A fr
7b30: 65 65 62 6c 6f 63 6b 20 72 65 71 75 69 72 65 73  eeblock requires
7b40: 20 61 74 20 6c 65 61 73 74 20 34 20 62 79 74 65   at least 4 byte
7b50: 73 20 6f 66 20 73 70 61 63 65 2e 20 20 49 66 20  s of space.  If 
7b60: 74 68 65 72 65 20 69 73 20 61 6e 20 69 73 6f 6c  there is an isol
7b70: 61 74 65 64 0a 67 72 6f 75 70 20 6f 66 20 31 2c  ated.group of 1,
7b80: 20 32 2c 20 6f 72 20 33 20 75 6e 75 73 65 64 20   2, or 3 unused 
7b90: 62 79 74 65 73 20 77 69 74 68 69 6e 20 74 68 65  bytes within the
7ba0: 20 63 65 6c 6c 20 63 6f 6e 74 65 6e 74 20 61 72   cell content ar
7bb0: 65 61 2c 20 74 68 6f 73 65 20 62 79 74 65 73 0a  ea, those bytes.
7bc0: 63 6f 6d 70 72 69 73 65 20 61 20 66 72 61 67 6d  comprise a fragm
7bd0: 65 6e 74 2e 20 20 5e 54 68 65 20 74 6f 74 61 6c  ent.  ^The total
7be0: 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   number of bytes
7bf0: 20 69 6e 20 61 6c 6c 20 66 72 61 67 6d 65 6e 74   in all fragment
7c00: 73 20 69 73 20 73 74 6f 72 65 64 0a 69 6e 20 74  s is stored.in t
7c10: 68 65 20 66 69 66 74 68 20 66 69 65 6c 64 20 6f  he fifth field o
7c20: 66 20 74 68 65 20 62 2d 74 72 65 65 20 70 61 67  f the b-tree pag
7c30: 65 20 68 65 61 64 65 72 2e 20 20 5e 49 6e 20 61  e header.  ^In a
7c40: 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 62 2d 74   well-formed b-t
7c50: 72 65 65 20 70 61 67 65 2c 0a 74 68 65 20 74 6f  ree page,.the to
7c60: 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 62 79  tal number of by
7c70: 74 65 73 20 69 6e 20 66 72 61 67 6d 65 6e 74 73  tes in fragments
7c80: 20 6d 61 79 20 6e 6f 74 20 65 78 63 65 65 64 20   may not exceed 
7c90: 36 30 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  60.</p>..<p>The 
7ca0: 74 6f 74 61 6c 20 61 6d 6f 75 6e 74 20 6f 66 20  total amount of 
7cb0: 66 72 65 65 20 73 70 61 63 65 20 6f 6e 20 61 20  free space on a 
7cc0: 62 2d 74 72 65 65 20 70 61 67 65 20 63 6f 6e 73  b-tree page cons
7cd0: 69 73 74 73 20 6f 66 20 74 68 65 20 73 69 7a 65  ists of the size
7ce0: 0a 6f 66 20 74 68 65 20 75 6e 61 6c 6c 6f 63 61  .of the unalloca
7cf0: 74 65 64 20 72 65 67 69 6f 6e 20 70 6c 75 73 20  ted region plus 
7d00: 74 68 65 20 74 6f 74 61 6c 20 73 69 7a 65 20 6f  the total size o
7d10: 66 20 61 6c 6c 20 66 72 65 65 62 6c 6f 63 6b 73  f all freeblocks
7d20: 20 70 6c 75 73 20 74 68 65 0a 6e 75 6d 62 65 72   plus the.number
7d30: 20 6f 66 20 66 72 61 67 6d 65 6e 74 65 64 20 66   of fragmented f
7d40: 72 65 65 20 62 79 74 65 73 2e 20 20 5e 53 51 4c  ree bytes.  ^SQL
7d50: 69 74 65 20 6d 61 79 20 66 72 6f 6d 20 74 69 6d  ite may from tim
7d60: 65 20 74 6f 20 74 69 6d 65 20 72 65 6f 72 67 61  e to time reorga
7d70: 6e 69 7a 65 0a 61 20 62 2d 74 72 65 65 20 70 61  nize.a b-tree pa
7d80: 67 65 20 73 6f 20 74 68 61 74 20 74 68 65 72 65  ge so that there
7d90: 20 61 72 65 20 6e 6f 20 66 72 65 65 62 6c 6f 63   are no freebloc
7da0: 6b 73 20 6f 72 20 66 72 61 67 6d 65 6e 74 20 62  ks or fragment b
7db0: 79 74 65 73 2c 20 61 6c 6c 0a 75 6e 75 73 65 64  ytes, all.unused
7dc0: 20 62 79 74 65 73 20 61 72 65 20 63 6f 6e 74 61   bytes are conta
7dd0: 69 6e 65 64 20 69 6e 20 74 68 65 20 75 6e 61 6c  ined in the unal
7de0: 6c 6f 63 61 74 65 64 20 73 70 61 63 65 20 72 65  located space re
7df0: 67 69 6f 6e 2c 20 61 6e 64 20 61 6c 6c 0a 63 65  gion, and all.ce
7e00: 6c 6c 73 20 61 72 65 20 70 61 63 6b 65 64 20 74  lls are packed t
7e10: 69 67 68 74 6c 79 20 61 74 20 74 68 65 20 65 6e  ightly at the en
7e20: 64 20 6f 66 20 74 68 65 20 70 61 67 65 2e 20 20  d of the page.  
7e30: 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20 0a  This is called .
7e40: 22 64 65 66 72 61 67 6d 65 6e 74 69 6e 67 22 20  "defragmenting" 
7e50: 74 68 65 20 62 2d 74 72 65 65 20 70 61 67 65 2e  the b-tree page.
7e60: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  </p>..<tcl>hd_fr
7e70: 61 67 6d 65 6e 74 20 76 61 72 69 6e 74 20 7b 76  agment varint {v
7e80: 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69  ariable-length i
7e90: 6e 74 65 67 65 72 7d 20 7b 76 61 72 69 6e 74 7d  nteger} {varint}
7ea0: 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 41 20 76 61 72  </tcl>..<p>A var
7eb0: 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74  iable-length int
7ec0: 65 67 65 72 20 6f 72 20 22 76 61 72 69 6e 74 22  eger or "varint"
7ed0: 20 69 73 20 61 20 73 74 61 74 69 63 20 48 75 66   is a static Huf
7ee0: 66 6d 61 6e 20 65 6e 63 6f 64 69 6e 67 0a 6f 66  fman encoding.of
7ef0: 20 36 34 2d 62 69 74 20 74 77 6f 73 2d 63 6f 6d   64-bit twos-com
7f00: 70 6c 65 6d 65 6e 74 20 69 6e 74 65 67 65 72 73  plement integers
7f10: 20 74 68 61 74 20 75 73 65 73 20 6c 65 73 73 20   that uses less 
7f20: 73 70 61 63 65 20 66 6f 72 20 73 6d 61 6c 6c 20  space for small 
7f30: 70 6f 73 69 74 69 76 65 20 0a 76 61 6c 75 65 73  positive .values
7f40: 2e 20 0a 41 20 76 61 72 69 6e 74 20 69 73 20 62  . .A varint is b
7f50: 65 74 77 65 65 6e 20 31 20 61 6e 64 20 39 20 62  etween 1 and 9 b
7f60: 79 74 65 73 20 69 6e 20 6c 65 6e 67 74 68 2e 20  ytes in length. 
7f70: 20 54 68 65 20 76 61 72 69 6e 74 20 63 6f 6e 73   The varint cons
7f80: 69 73 74 73 20 6f 66 20 65 69 74 68 65 72 0a 7a  ists of either.z
7f90: 65 72 6f 20 6f 72 20 6d 6f 72 65 20 62 79 74 65  ero or more byte
7fa0: 73 20 77 68 69 63 68 20 68 61 76 65 20 74 68 65  s which have the
7fb0: 20 68 69 67 68 2d 6f 72 64 65 72 20 62 69 74 20   high-order bit 
7fc0: 73 65 74 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20  set followed by 
7fd0: 61 20 73 69 6e 67 6c 65 20 62 79 74 65 0a 77 69  a single byte.wi
7fe0: 74 68 20 74 68 65 20 68 69 67 68 2d 6f 72 64 65  th the high-orde
7ff0: 72 20 62 69 74 20 63 6c 65 61 72 2c 20 6f 72 20  r bit clear, or 
8000: 6e 69 6e 65 20 62 79 74 65 73 2c 20 77 68 69 63  nine bytes, whic
8010: 68 65 76 65 72 20 69 73 20 73 68 6f 72 74 65 72  hever is shorter
8020: 2e 0a 54 68 65 20 6c 6f 77 65 72 20 73 65 76 65  ..The lower seve
8030: 6e 20 62 69 74 73 20 6f 66 20 65 61 63 68 20 6f  n bits of each o
8040: 66 20 74 68 65 20 66 69 72 73 74 20 65 69 67 68  f the first eigh
8050: 74 20 62 79 74 65 73 20 61 6e 64 20 61 6c 6c 20  t bytes and all 
8060: 38 20 62 69 74 73 20 6f 66 0a 74 68 65 20 6e 69  8 bits of.the ni
8070: 6e 74 68 20 62 79 74 65 20 61 72 65 20 75 73 65  nth byte are use
8080: 64 20 74 6f 20 72 65 63 6f 6e 73 74 72 75 63 74  d to reconstruct
8090: 20 74 68 65 20 36 34 2d 62 69 74 20 74 77 6f 73   the 64-bit twos
80a0: 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 74 65  -complement inte
80b0: 67 65 72 2e 0a 56 61 72 69 6e 74 73 20 61 72 65  ger..Varints are
80c0: 20 62 69 67 2d 65 6e 64 69 61 6e 3a 20 62 69 74   big-endian: bit
80d0: 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20 74 68 65  s taken from the
80e0: 20 65 61 72 6c 69 65 72 20 62 79 74 65 20 6f 66   earlier byte of
80f0: 20 74 68 65 20 76 61 72 69 6e 74 0a 61 72 65 20   the varint.are 
8100: 74 68 65 20 6d 6f 72 65 20 73 69 67 6e 69 66 69  the more signifi
8110: 63 61 6e 74 20 74 68 61 6e 20 62 69 74 73 20 74  cant than bits t
8120: 61 6b 65 6e 20 66 72 6f 6d 20 74 68 65 20 6c 61  aken from the la
8130: 74 65 72 20 62 79 74 65 73 2e 20 3c 2f 70 3e 0a  ter bytes. </p>.
8140: 0a 3c 70 3e 54 68 65 20 66 6f 72 6d 61 74 20 6f  .<p>The format o
8150: 66 20 61 20 63 65 6c 6c 20 64 65 70 65 6e 64 73  f a cell depends
8160: 20 6f 6e 20 77 68 69 63 68 20 6b 69 6e 64 20 6f   on which kind o
8170: 66 20 62 2d 74 72 65 65 20 70 61 67 65 20 74 68  f b-tree page th
8180: 65 20 63 65 6c 6c 0a 61 70 70 65 61 72 73 20 6f  e cell.appears o
8190: 6e 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  n.  The followin
81a0: 67 20 74 61 62 6c 65 20 73 68 6f 77 73 20 74 68  g table shows th
81b0: 65 20 65 6c 65 6d 65 6e 74 73 20 6f 66 20 61 20  e elements of a 
81c0: 63 65 6c 6c 2c 20 69 6e 0a 6f 72 64 65 72 20 6f  cell, in.order o
81d0: 66 20 61 70 70 65 61 72 61 6e 63 65 2c 20 66 6f  f appearance, fo
81e0: 72 20 74 68 65 20 76 61 72 69 6f 75 73 20 62 2d  r the various b-
81f0: 74 72 65 65 20 70 61 67 65 20 74 79 70 65 73 2e  tree page types.
8200: 0a 0a 3c 64 6c 3e 0a 3c 64 74 3e 3c 70 3e 54 61  ..<dl>.<dt><p>Ta
8210: 62 6c 65 20 42 2d 54 72 65 65 20 4c 65 61 66 20  ble B-Tree Leaf 
8220: 43 65 6c 6c 20 28 68 65 61 64 65 72 20 30 78 30  Cell (header 0x0
8230: 64 29 3a 3c 2f 70 3e 3c 2f 64 74 3e 0a 3c 64 64  d):</p></dt>.<dd
8240: 3e 3c 70 3e 3c 75 6c 3e 0a 3c 6c 69 3e 41 20 76  ><p><ul>.<li>A v
8250: 61 72 69 6e 74 20 77 68 69 63 68 20 69 73 20 74  arint which is t
8260: 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20  he total number 
8270: 6f 66 20 62 79 74 65 73 20 6f 66 20 70 61 79 6c  of bytes of payl
8280: 6f 61 64 2c 20 69 6e 63 6c 75 64 69 6e 67 20 61  oad, including a
8290: 6e 79 0a 6f 76 65 72 66 6c 6f 77 0a 3c 6c 69 3e  ny.overflow.<li>
82a0: 41 20 76 61 72 69 6e 74 20 77 68 69 63 68 20 69  A varint which i
82b0: 73 20 74 68 65 20 69 6e 74 65 67 65 72 20 6b 65  s the integer ke
82c0: 79 2c 20 61 2e 6b 2e 61 2e 20 22 5b 72 6f 77 69  y, a.k.a. "[rowi
82d0: 64 5d 22 0a 3c 6c 69 3e 54 68 65 20 69 6e 69 74  d]".<li>The init
82e0: 69 61 6c 20 70 6f 72 74 69 6f 6e 20 6f 66 20 74  ial portion of t
82f0: 68 65 20 70 61 79 6c 6f 61 64 20 74 68 61 74 20  he payload that 
8300: 64 6f 65 73 20 6e 6f 74 20 73 70 69 6c 6c 20 74  does not spill t
8310: 6f 20 6f 76 65 72 66 6c 6f 77 0a 70 61 67 65 73  o overflow.pages
8320: 2e 0a 3c 6c 69 3e 41 20 34 2d 62 79 74 65 20 62  ..<li>A 4-byte b
8330: 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65  ig-endian intege
8340: 72 20 70 61 67 65 20 6e 75 6d 62 65 72 20 66 6f  r page number fo
8350: 72 20 74 68 65 20 66 69 72 73 74 20 70 61 67 65  r the first page
8360: 20 6f 66 20 74 68 65 0a 6f 76 65 72 66 6c 6f 77   of the.overflow
8370: 20 70 61 67 65 20 6c 69 73 74 20 2d 20 6f 6d 69   page list - omi
8380: 74 74 65 64 20 69 66 20 61 6c 6c 20 70 61 79 6c  tted if all payl
8390: 6f 61 64 20 66 69 74 73 20 6f 6e 20 74 68 65 20  oad fits on the 
83a0: 62 2d 74 72 65 65 20 70 61 67 65 2e 0a 3c 2f 75  b-tree page..</u
83b0: 6c 3e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74  l></p></dd>..<dt
83c0: 3e 3c 70 3e 54 61 62 6c 65 20 42 2d 54 72 65 65  ><p>Table B-Tree
83d0: 20 49 6e 74 65 72 69 6f 72 20 43 65 6c 6c 20 28   Interior Cell (
83e0: 68 65 61 64 65 72 20 30 78 30 35 29 3a 3c 2f 70  header 0x05):</p
83f0: 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 3c 75  ></dt>.<dd><p><u
8400: 6c 3e 0a 3c 6c 69 3e 41 20 34 2d 62 79 74 65 20  l>.<li>A 4-byte 
8410: 62 69 67 2d 65 6e 64 69 61 6e 20 70 61 67 65 20  big-endian page 
8420: 6e 75 6d 62 65 72 20 77 68 69 63 68 20 69 73 20  number which is 
8430: 74 68 65 20 6c 65 66 74 20 63 68 69 6c 64 20 70  the left child p
8440: 6f 69 6e 74 65 72 2e 0a 3c 6c 69 3e 41 20 76 61  ointer..<li>A va
8450: 72 69 6e 74 20 77 68 69 63 68 20 69 73 20 74 68  rint which is th
8460: 65 20 69 6e 74 65 67 65 72 20 6b 65 79 0a 3c 2f  e integer key.</
8470: 75 6c 3e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64  ul></p></dd>..<d
8480: 74 3e 3c 70 3e 49 6e 64 65 78 20 42 2d 54 72 65  t><p>Index B-Tre
8490: 65 20 4c 65 61 66 20 43 65 6c 6c 20 28 68 65 61  e Leaf Cell (hea
84a0: 64 65 72 20 30 78 30 61 29 3a 3c 2f 70 3e 3c 2f  der 0x0a):</p></
84b0: 64 74 3e 0a 3c 64 64 3e 3c 70 3e 3c 75 6c 3e 0a  dt>.<dd><p><ul>.
84c0: 3c 6c 69 3e 41 20 76 61 72 69 6e 74 20 77 68 69  <li>A varint whi
84d0: 63 68 20 69 73 20 74 68 65 20 74 6f 74 61 6c 20  ch is the total 
84e0: 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  number of bytes 
84f0: 6f 66 20 6b 65 79 20 70 61 79 6c 6f 61 64 2c 20  of key payload, 
8500: 69 6e 63 6c 75 64 69 6e 67 20 61 6e 79 0a 6f 76  including any.ov
8510: 65 72 66 6c 6f 77 0a 3c 6c 69 3e 54 68 65 20 69  erflow.<li>The i
8520: 6e 69 74 69 61 6c 20 70 6f 72 74 69 6f 6e 20 6f  nitial portion o
8530: 66 20 74 68 65 20 70 61 79 6c 6f 61 64 20 74 68  f the payload th
8540: 61 74 20 64 6f 65 73 20 6e 6f 74 20 73 70 69 6c  at does not spil
8550: 6c 20 74 6f 20 6f 76 65 72 66 6c 6f 77 0a 70 61  l to overflow.pa
8560: 67 65 73 2e 0a 3c 6c 69 3e 41 20 34 2d 62 79 74  ges..<li>A 4-byt
8570: 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74  e big-endian int
8580: 65 67 65 72 20 70 61 67 65 20 6e 75 6d 62 65 72  eger page number
8590: 20 66 6f 72 20 74 68 65 20 66 69 72 73 74 20 70   for the first p
85a0: 61 67 65 20 6f 66 20 74 68 65 0a 6f 76 65 72 66  age of the.overf
85b0: 6c 6f 77 20 70 61 67 65 20 6c 69 73 74 20 2d 20  low page list - 
85c0: 6f 6d 69 74 74 65 64 20 69 66 20 61 6c 6c 20 70  omitted if all p
85d0: 61 79 6c 6f 61 64 20 66 69 74 73 20 6f 6e 20 74  ayload fits on t
85e0: 68 65 20 62 2d 74 72 65 65 20 70 61 67 65 2e 0a  he b-tree page..
85f0: 3c 2f 75 6c 3e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a  </ul></p></dd>..
8600: 3c 64 74 3e 3c 70 3e 49 6e 64 65 78 20 42 2d 54  <dt><p>Index B-T
8610: 72 65 65 20 49 6e 74 65 72 69 6f 72 20 43 65 6c  ree Interior Cel
8620: 6c 20 28 68 65 61 64 65 72 20 30 78 30 32 29 3a  l (header 0x02):
8630: 3c 2f 70 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70  </p></dt>.<dd><p
8640: 3e 3c 75 6c 3e 0a 3c 6c 69 3e 41 20 34 2d 62 79  ><ul>.<li>A 4-by
8650: 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 70 61  te big-endian pa
8660: 67 65 20 6e 75 6d 62 65 72 20 77 68 69 63 68 20  ge number which 
8670: 69 73 20 74 68 65 20 6c 65 66 74 20 63 68 69 6c  is the left chil
8680: 64 20 70 6f 69 6e 74 65 72 2e 0a 3c 6c 69 3e 41  d pointer..<li>A
8690: 20 76 61 72 69 6e 74 20 77 68 69 63 68 20 69 73   varint which is
86a0: 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65   the total numbe
86b0: 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 6b 65  r of bytes of ke
86c0: 79 20 70 61 79 6c 6f 61 64 2c 20 69 6e 63 6c 75  y payload, inclu
86d0: 64 69 6e 67 20 61 6e 79 0a 6f 76 65 72 66 6c 6f  ding any.overflo
86e0: 77 0a 3c 6c 69 3e 54 68 65 20 69 6e 69 74 69 61  w.<li>The initia
86f0: 6c 20 70 6f 72 74 69 6f 6e 20 6f 66 20 74 68 65  l portion of the
8700: 20 70 61 79 6c 6f 61 64 20 74 68 61 74 20 64 6f   payload that do
8710: 65 73 20 6e 6f 74 20 73 70 69 6c 6c 20 74 6f 20  es not spill to 
8720: 6f 76 65 72 66 6c 6f 77 0a 70 61 67 65 73 2e 0a  overflow.pages..
8730: 3c 6c 69 3e 41 20 34 2d 62 79 74 65 20 62 69 67  <li>A 4-byte big
8740: 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20  -endian integer 
8750: 70 61 67 65 20 6e 75 6d 62 65 72 20 66 6f 72 20  page number for 
8760: 74 68 65 20 66 69 72 73 74 20 70 61 67 65 20 6f  the first page o
8770: 66 20 74 68 65 0a 6f 76 65 72 66 6c 6f 77 20 70  f the.overflow p
8780: 61 67 65 20 6c 69 73 74 20 2d 20 6f 6d 69 74 74  age list - omitt
8790: 65 64 20 69 66 20 61 6c 6c 20 70 61 79 6c 6f 61  ed if all payloa
87a0: 64 20 66 69 74 73 20 6f 6e 20 74 68 65 20 62 2d  d fits on the b-
87b0: 74 72 65 65 20 70 61 67 65 2e 0a 3c 2f 75 6c 3e  tree page..</ul>
87c0: 3c 2f 70 3e 3c 2f 64 64 3e 0a 3c 2f 64 6c 3e 0a  </p></dd>.</dl>.
87d0: 0a 3c 70 3e 54 68 65 20 69 6e 66 6f 72 6d 61 74  .<p>The informat
87e0: 69 6f 6e 20 61 62 6f 76 65 20 63 61 6e 20 62 65  ion above can be
87f0: 20 72 65 63 61 73 74 20 69 6e 74 6f 20 61 20 74   recast into a t
8800: 61 62 6c 65 20 66 6f 72 6d 61 74 20 61 73 20 66  able format as f
8810: 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 74 63  ollows:</p>..<tc
8820: 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 63 65  l>hd_fragment ce
8830: 6c 6c 66 6f 72 6d 61 74 20 7b 63 65 6c 6c 20 66  llformat {cell f
8840: 6f 72 6d 61 74 20 73 75 6d 6d 61 72 79 7d 3c 2f  ormat summary}</
8850: 74 63 6c 3e 0a 3c 63 65 6e 74 65 72 3e 0a 3c 69  tcl>.<center>.<i
8860: 3e 42 2d 74 72 65 65 20 43 65 6c 6c 20 46 6f 72  >B-tree Cell For
8870: 6d 61 74 3c 2f 69 3e 0a 3c 74 61 62 6c 65 20 62  mat</i>.<table b
8880: 6f 72 64 65 72 3d 31 20 77 69 64 74 68 3d 22 38  order=1 width="8
8890: 30 25 22 3e 0a 3c 74 72 3e 3c 74 68 20 72 6f 77  0%">.<tr><th row
88a0: 73 70 61 6e 3d 32 3e 44 61 74 61 74 79 70 65 0a  span=2>Datatype.
88b0: 20 20 20 20 3c 74 68 20 63 6f 6c 73 70 61 6e 3d      <th colspan=
88c0: 34 3e 41 70 70 65 61 72 73 20 69 6e 2e 2e 2e 0a  4>Appears in....
88d0: 20 20 20 20 3c 74 68 20 72 6f 77 73 70 61 6e 3d      <th rowspan=
88e0: 32 3e 44 65 73 63 72 69 70 74 69 6f 6e 0a 3c 74  2>Description.<t
88f0: 72 3e 3c 74 68 3e 54 61 62 6c 65 20 4c 65 61 66  r><th>Table Leaf
8900: 20 28 30 78 30 64 29 0a 20 20 20 20 3c 74 68 3e   (0x0d).    <th>
8910: 54 61 62 6c 65 20 49 6e 74 65 72 69 6f 72 20 28  Table Interior (
8920: 30 78 30 35 29 0a 20 20 20 20 3c 74 68 3e 49 6e  0x05).    <th>In
8930: 64 65 78 20 4c 65 61 66 20 28 30 78 30 61 29 0a  dex Leaf (0x0a).
8940: 20 20 20 20 3c 74 68 3e 49 6e 64 65 78 20 49 6e      <th>Index In
8950: 74 65 72 69 6f 72 20 28 30 78 30 32 29 0a 3c 74  terior (0x02).<t
8960: 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74  r><td align=cent
8970: 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 34 2d  er valign=top>4-
8980: 62 79 74 65 20 69 6e 74 65 67 65 72 0a 20 20 20  byte integer.   
8990: 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65   <td align=cente
89a0: 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 6e 62  r valign=top>&nb
89b0: 73 70 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67  sp;.    <td alig
89c0: 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d  n=center valign=
89d0: 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20 20 20  top>&#x2714;.   
89e0: 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65   <td align=cente
89f0: 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 6e 62  r valign=top>&nb
8a00: 73 70 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67  sp;.    <td alig
8a10: 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d  n=center valign=
8a20: 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20 20 20  top>&#x2714;.   
8a30: 20 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e   <td align=left>
8a40: 50 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 6c  Page number of l
8a50: 65 66 74 20 63 68 69 6c 64 0a 3c 74 72 3e 3c 74  eft child.<tr><t
8a60: 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76  d align=center v
8a70: 61 6c 69 67 6e 3d 74 6f 70 3e 76 61 72 69 6e 74  align=top>varint
8a80: 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63  .    <td align=c
8a90: 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70  enter valign=top
8aa0: 3e 26 23 78 32 37 31 34 3b 0a 20 20 20 20 3c 74  >&#x2714;.    <t
8ab0: 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76  d align=center v
8ac0: 61 6c 69 67 6e 3d 74 6f 70 3e 26 6e 62 73 70 3b  align=top>&nbsp;
8ad0: 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63  .    <td align=c
8ae0: 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70  enter valign=top
8af0: 3e 26 23 78 32 37 31 34 3b 0a 20 20 20 20 3c 74  >&#x2714;.    <t
8b00: 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76  d align=center v
8b10: 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37 31  align=top>&#x271
8b20: 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e  4;.    <td align
8b30: 3d 6c 65 66 74 3e 4e 75 6d 62 65 72 20 6f 66 20  =left>Number of 
8b40: 62 79 74 65 73 20 6f 66 20 70 61 79 6c 6f 61 64  bytes of payload
8b50: 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63  .<tr><td align=c
8b60: 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70  enter valign=top
8b70: 3e 76 61 72 69 6e 74 0a 20 20 20 20 3c 74 64 20  >varint.    <td 
8b80: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c  align=center val
8b90: 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b  ign=top>&#x2714;
8ba0: 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63  .    <td align=c
8bb0: 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70  enter valign=top
8bc0: 3e 26 23 78 32 37 31 34 3b 0a 20 20 20 20 3c 74  >&#x2714;.    <t
8bd0: 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76  d align=center v
8be0: 61 6c 69 67 6e 3d 74 6f 70 3e 26 6e 62 73 70 3b  align=top>&nbsp;
8bf0: 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63  .    <td align=c
8c00: 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70  enter valign=top
8c10: 3e 26 6e 62 73 70 3b 0a 20 20 20 20 3c 74 64 20  >&nbsp;.    <td 
8c20: 61 6c 69 67 6e 3d 6c 65 66 74 3e 52 6f 77 69 64  align=left>Rowid
8c30: 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63  .<tr><td align=c
8c40: 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70  enter valign=top
8c50: 3e 62 79 74 65 20 61 72 72 61 79 0a 20 20 20 20  >byte array.    
8c60: 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  <td align=center
8c70: 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32   valign=top>&#x2
8c80: 37 31 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69  714;.    <td ali
8c90: 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e  gn=center valign
8ca0: 3d 74 6f 70 3e 26 6e 62 73 70 3b 0a 20 20 20 20  =top>&nbsp;.    
8cb0: 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  <td align=center
8cc0: 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32   valign=top>&#x2
8cd0: 37 31 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69  714;.    <td ali
8ce0: 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e  gn=center valign
8cf0: 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20 20  =top>&#x2714;.  
8d00: 20 20 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74    <td align=left
8d10: 3e 50 61 79 6c 6f 61 64 0a 3c 74 72 3e 3c 74 64  >Payload.<tr><td
8d20: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61   align=center va
8d30: 6c 69 67 6e 3d 74 6f 70 3e 34 2d 62 79 74 65 20  lign=top>4-byte 
8d40: 69 6e 74 65 67 65 72 0a 20 20 20 20 3c 74 64 20  integer.    <td 
8d50: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c  align=center val
8d60: 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b  ign=top>&#x2714;
8d70: 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63  .    <td align=c
8d80: 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70  enter valign=top
8d90: 3e 26 6e 62 73 70 3b 0a 20 20 20 20 3c 74 64 20  >&nbsp;.    <td 
8da0: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c  align=center val
8db0: 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b  ign=top>&#x2714;
8dc0: 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63  .    <td align=c
8dd0: 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70  enter valign=top
8de0: 3e 26 23 78 32 37 31 34 3b 0a 20 20 20 20 3c 74  >&#x2714;.    <t
8df0: 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 50 61 67  d align=left>Pag
8e00: 65 20 6e 75 6d 62 65 72 20 6f 66 20 66 69 72 73  e number of firs
8e10: 74 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 0a  t overflow page.
8e20: 3c 2f 74 61 62 6c 65 3e 3c 2f 63 65 6e 74 65 72  </table></center
8e30: 3e 0a 0a 0a 3c 70 3e 54 68 65 20 61 6d 6f 75 6e  >...<p>The amoun
8e40: 74 20 6f 66 20 70 61 79 6c 6f 61 64 20 74 68 61  t of payload tha
8e50: 74 20 73 70 69 6c 6c 73 20 6f 6e 74 6f 20 6f 76  t spills onto ov
8e60: 65 72 66 6c 6f 77 20 70 61 67 65 73 20 61 6c 73  erflow pages als
8e70: 6f 20 64 65 70 65 6e 64 73 20 6f 6e 0a 74 68 65  o depends on.the
8e80: 20 70 61 67 65 20 74 79 70 65 2e 20 20 46 6f 72   page type.  For
8e90: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63   the following c
8ea0: 6f 6d 70 75 74 61 74 69 6f 6e 73 2c 20 6c 65 74  omputations, let
8eb0: 20 55 20 62 65 20 74 68 65 20 75 73 61 62 6c 65   U be the usable
8ec0: 20 73 69 7a 65 0a 6f 66 20 61 20 64 61 74 61 62   size.of a datab
8ed0: 61 73 65 20 70 61 67 65 2c 20 74 68 65 20 74 6f  ase page, the to
8ee0: 74 61 6c 20 70 61 67 65 20 73 69 7a 65 20 6c 65  tal page size le
8ef0: 73 73 20 74 68 65 20 72 65 73 65 72 76 65 64 20  ss the reserved 
8f00: 73 70 61 63 65 20 61 74 20 74 68 65 0a 65 6e 64  space at the.end
8f10: 20 6f 66 20 65 61 63 68 20 70 61 67 65 2e 20 20   of each page.  
8f20: 41 6e 64 20 6c 65 74 20 50 20 62 65 20 74 68 65  And let P be the
8f30: 20 70 61 79 6c 6f 61 64 20 73 69 7a 65 2e 20 20   payload size.  
8f40: 49 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  In the following
8f50: 2c 0a 73 79 6d 62 6f 6c 20 58 20 72 65 70 72 65  ,.symbol X repre
8f60: 73 65 6e 74 73 20 74 68 65 20 6d 61 78 69 6d 75  sents the maximu
8f70: 6d 20 61 6d 6f 75 6e 74 20 6f 66 20 70 61 79 6c  m amount of payl
8f80: 6f 61 64 20 74 68 61 74 20 63 61 6e 20 62 65 20  oad that can be 
8f90: 73 74 6f 72 65 64 20 64 69 72 65 63 74 6c 79 0a  stored directly.
8fa0: 6f 6e 20 74 68 65 20 62 2d 74 72 65 65 20 70 61  on the b-tree pa
8fb0: 67 65 20 77 69 74 68 6f 75 74 20 73 70 69 6c 6c  ge without spill
8fc0: 69 6e 67 20 6f 6e 74 6f 20 61 6e 20 6f 76 65 72  ing onto an over
8fd0: 66 6c 6f 77 20 70 61 67 65 20 61 6e 64 20 73 79  flow page and sy
8fe0: 6d 62 6f 6c 20 4d 0a 72 65 70 72 65 73 65 6e 74  mbol M.represent
8ff0: 73 20 74 68 65 20 6d 69 6e 69 6d 75 6d 20 61 6d  s the minimum am
9000: 6f 75 6e 74 20 6f 66 20 70 61 79 6c 6f 61 64 20  ount of payload 
9010: 74 68 61 74 20 6d 75 73 74 20 62 65 20 73 74 6f  that must be sto
9020: 72 65 64 20 6f 6e 20 74 68 65 20 62 74 72 65 65  red on the btree
9030: 0a 70 61 67 65 20 62 65 66 6f 72 65 20 73 70 69  .page before spi
9040: 6c 6c 69 6e 67 20 69 73 20 61 6c 6c 6f 77 65 64  lling is allowed
9050: 2e 0a 0a 3c 64 6c 3e 0a 3c 64 74 3e 3c 70 3e 54  ...<dl>.<dt><p>T
9060: 61 62 6c 65 20 42 2d 54 72 65 65 20 4c 65 61 66  able B-Tree Leaf
9070: 20 43 65 6c 6c 3a 3c 2f 64 74 3e 0a 3c 64 64 3e   Cell:</dt>.<dd>
9080: 3c 70 3e 0a 5e 28 4c 65 74 20 58 20 62 65 20 55  <p>.^(Let X be U
9090: 2d 33 35 2e 20 20 49 66 20 74 68 65 20 70 61 79  -35.  If the pay
90a0: 6c 6f 61 64 20 73 69 7a 65 20 50 20 69 73 20 6c  load size P is l
90b0: 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ess than or equa
90c0: 6c 20 74 6f 20 58 20 74 68 65 6e 0a 74 68 65 20  l to X then.the 
90d0: 65 6e 74 69 72 65 20 70 61 79 6c 6f 61 64 20 69  entire payload i
90e0: 73 20 73 74 6f 72 65 64 20 6f 6e 20 74 68 65 20  s stored on the 
90f0: 62 2d 74 72 65 65 20 6c 65 61 66 20 70 61 67 65  b-tree leaf page
9100: 2e 29 5e 0a 5e 28 4c 65 74 20 4d 20 62 65 20 28  .)^.^(Let M be (
9110: 28 55 2d 31 32 29 2a 33 32 2f 32 35 35 29 2d 32  (U-12)*32/255)-2
9120: 33 20 61 6e 64 20 6c 65 74 20 4b 20 62 65 20 4d  3 and let K be M
9130: 2b 28 28 50 2d 4d 29 25 28 55 2d 34 29 29 2e 0a  +((P-M)%(U-4))..
9140: 49 66 20 50 20 69 73 20 67 72 65 61 74 65 72 20  If P is greater 
9150: 74 68 61 6e 20 58 0a 74 68 65 6e 20 74 68 65 20  than X.then the 
9160: 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  number of bytes 
9170: 73 74 6f 72 65 64 20 6f 6e 20 74 68 65 20 74 61  stored on the ta
9180: 62 6c 65 20 62 2d 74 72 65 65 20 6c 65 61 66 20  ble b-tree leaf 
9190: 70 61 67 65 20 69 73 20 4b 0a 69 66 20 4b 20 69  page is K.if K i
91a0: 73 20 6c 65 73 73 20 6f 72 20 65 71 75 61 6c 20  s less or equal 
91b0: 74 6f 20 58 20 6f 72 20 4d 20 6f 74 68 65 72 77  to X or M otherw
91c0: 69 73 65 2e 29 5e 0a 5e 28 54 68 65 20 6e 75 6d  ise.)^.^(The num
91d0: 62 65 72 20 6f 66 20 62 79 74 65 73 20 73 74 6f  ber of bytes sto
91e0: 72 65 64 20 6f 6e 20 74 68 65 20 6c 65 61 66 20  red on the leaf 
91f0: 70 61 67 65 20 69 73 20 6e 65 76 65 72 20 6c 65  page is never le
9200: 73 73 20 74 68 61 6e 20 4d 2e 29 5e 0a 3c 2f 70  ss than M.)^.</p
9210: 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 70 3e 54  ></dd>..<dt><p>T
9220: 61 62 6c 65 20 42 2d 54 72 65 65 20 49 6e 74 65  able B-Tree Inte
9230: 72 69 6f 72 20 43 65 6c 6c 3a 3c 2f 64 74 3e 0a  rior Cell:</dt>.
9240: 3c 64 64 3e 3c 70 3e 0a 49 6e 74 65 72 69 6f 72  <dd><p>.Interior
9250: 20 70 61 67 65 73 20 6f 66 20 74 61 62 6c 65 20   pages of table 
9260: 62 2d 74 72 65 65 73 20 68 61 76 65 20 6e 6f 20  b-trees have no 
9270: 70 61 79 6c 6f 61 64 20 61 6e 64 20 73 6f 20 74  payload and so t
9280: 68 65 72 65 20 69 73 20 6e 65 76 65 72 0a 61 6e  here is never.an
9290: 79 20 70 61 79 6c 6f 61 64 20 74 6f 20 73 70 69  y payload to spi
92a0: 6c 6c 2e 0a 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c  ll..</p></dd>..<
92b0: 64 74 3e 3c 70 3e 49 6e 64 65 78 20 42 2d 54 72  dt><p>Index B-Tr
92c0: 65 65 20 4c 65 61 66 20 4f 72 20 49 6e 74 65 72  ee Leaf Or Inter
92d0: 69 6f 72 20 43 65 6c 6c 3a 3c 2f 64 74 3e 0a 3c  ior Cell:</dt>.<
92e0: 64 64 3e 3c 70 3e 0a 5e 28 4c 65 74 20 58 20 62  dd><p>.^(Let X b
92f0: 65 20 28 28 55 2d 31 32 29 2a 36 34 2f 32 35 35  e ((U-12)*64/255
9300: 29 2d 32 33 29 2e 20 20 49 66 20 74 68 65 20 70  )-23).  If the p
9310: 61 79 6c 6f 61 64 20 73 69 7a 65 20 50 20 69 73  ayload size P is
9320: 20 6c 65 73 73 20 74 68 61 6e 0a 6f 72 20 65 71   less than.or eq
9330: 75 61 6c 20 74 6f 20 58 20 74 68 65 6e 20 74 68  ual to X then th
9340: 65 20 65 6e 74 69 72 65 20 70 61 79 6c 6f 61 64  e entire payload
9350: 20 69 73 20 73 74 6f 72 65 64 20 6f 6e 20 74 68   is stored on th
9360: 65 20 62 2d 74 72 65 65 20 70 61 67 65 2e 29 5e  e b-tree page.)^
9370: 0a 5e 28 4c 65 74 20 4d 20 62 65 20 28 28 55 2d  .^(Let M be ((U-
9380: 31 32 29 2a 33 32 2f 32 35 35 29 2d 32 33 20 61  12)*32/255)-23 a
9390: 6e 64 20 6c 65 74 20 4b 20 62 65 20 4d 2b 28 28  nd let K be M+((
93a0: 50 2d 4d 29 25 28 55 2d 34 29 29 2e 0a 49 66 20  P-M)%(U-4))..If 
93b0: 50 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  P is greater tha
93c0: 6e 20 58 20 74 68 65 6e 20 74 68 65 20 6e 75 6d  n X then the num
93d0: 62 65 72 0a 6f 66 20 62 79 74 65 73 20 73 74 6f  ber.of bytes sto
93e0: 72 65 64 20 6f 6e 20 74 68 65 20 69 6e 64 65 78  red on the index
93f0: 20 62 2d 74 72 65 65 20 70 61 67 65 20 69 73 20   b-tree page is 
9400: 4b 20 69 66 20 4b 20 69 73 20 6c 65 73 73 20 74  K if K is less t
9410: 68 61 6e 20 6f 72 0a 65 71 75 61 6c 20 74 6f 20  han or.equal to 
9420: 58 20 6f 72 20 4d 20 6f 74 68 65 72 77 69 73 65  X or M otherwise
9430: 2e 29 5e 0a 5e 28 54 68 65 20 6e 75 6d 62 65 72  .)^.^(The number
9440: 20 6f 66 20 62 79 74 65 73 20 73 74 6f 72 65 64   of bytes stored
9450: 20 6f 6e 20 74 68 65 20 69 6e 64 65 78 20 70 61   on the index pa
9460: 67 65 20 69 73 20 6e 65 76 65 72 20 6c 65 73 73  ge is never less
9470: 20 74 68 61 6e 20 4d 2e 29 5e 0a 3c 2f 70 3e 3c   than M.)^.</p><
9480: 2f 64 64 3e 0a 3c 2f 64 6c 3e 0a 0a 3c 70 3e 48  /dd>.</dl>..<p>H
9490: 65 72 65 20 69 73 20 61 6e 20 61 6c 74 65 72 6e  ere is an altern
94a0: 61 74 69 76 65 20 64 65 73 63 72 69 70 74 69 6f  ative descriptio
94b0: 6e 20 6f 66 20 74 68 65 20 73 61 6d 65 20 63 6f  n of the same co
94c0: 6d 70 75 74 61 74 69 6f 6e 3a 0a 0a 3c 75 6c 3e  mputation:..<ul>
94d0: 0a 3c 6c 69 3e 58 20 69 73 20 55 2d 33 35 20 66  .<li>X is U-35 f
94e0: 6f 72 20 74 61 62 6c 65 20 62 74 72 65 65 20 6c  or table btree l
94f0: 65 61 66 20 70 61 67 65 73 20 6f 72 0a 20 20 20  eaf pages or.   
9500: 20 28 28 55 2d 31 32 29 2a 36 34 2f 32 35 35 29   ((U-12)*64/255)
9510: 2d 32 33 20 66 6f 72 20 69 6e 64 65 78 20 70 61  -23 for index pa
9520: 67 65 73 2e 0a 3c 6c 69 3e 4d 20 69 73 20 61 6c  ges..<li>M is al
9530: 77 61 79 73 20 28 28 55 2d 31 32 29 2a 33 32 2f  ways ((U-12)*32/
9540: 32 35 35 29 2d 32 33 2e 0a 3c 6c 69 3e 4c 65 74  255)-23..<li>Let
9550: 20 4b 20 62 65 20 4d 2b 28 28 50 2d 4d 29 25 28   K be M+((P-M)%(
9560: 55 2d 34 29 29 2e 0a 3c 6c 69 3e 5e 49 66 20 50  U-4))..<li>^If P
9570: 26 6c 74 3b 3d 58 20 74 68 65 6e 20 61 6c 6c 20  &lt;=X then all 
9580: 50 20 62 79 74 65 73 20 6f 66 20 70 61 79 6c 6f  P bytes of paylo
9590: 61 64 20 61 72 65 20 73 74 6f 72 65 64 20 64 69  ad are stored di
95a0: 72 65 63 74 6c 79 20 6f 6e 20 74 68 65 20 0a 20  rectly on the . 
95b0: 20 20 20 62 74 72 65 65 20 70 61 67 65 20 77 69     btree page wi
95c0: 74 68 6f 75 74 20 6f 76 65 72 66 6c 6f 77 2e 0a  thout overflow..
95d0: 3c 6c 69 3e 5e 49 66 20 50 26 67 74 3b 58 20 61  <li>^If P&gt;X a
95e0: 6e 64 20 4b 26 6c 74 3b 3d 58 20 74 68 65 6e 20  nd K&lt;=X then 
95f0: 74 68 65 20 66 69 72 73 74 20 4b 20 62 79 74 65  the first K byte
9600: 73 20 6f 66 20 50 20 61 72 65 20 73 74 6f 72 65  s of P are store
9610: 64 20 6f 6e 20 74 68 65 20 0a 20 20 20 20 62 74  d on the .    bt
9620: 72 65 65 20 70 61 67 65 20 61 6e 64 20 74 68 65  ree page and the
9630: 20 72 65 6d 61 69 6e 69 6e 67 20 50 2d 4b 20 62   remaining P-K b
9640: 79 74 65 73 20 61 72 65 20 73 74 6f 72 65 64 20  ytes are stored 
9650: 6f 6e 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65  on overflow page
9660: 73 2e 0a 3c 6c 69 3e 5e 49 66 20 50 26 67 74 3b  s..<li>^If P&gt;
9670: 58 20 61 6e 64 20 4b 26 67 74 3b 58 20 74 68 65  X and K&gt;X the
9680: 6e 20 74 68 65 20 66 69 72 73 74 20 4d 20 62 79  n the first M by
9690: 74 65 73 20 6f 66 20 50 20 61 72 65 20 73 74 6f  tes of P are sto
96a0: 72 65 64 20 6f 6e 20 74 68 65 0a 20 20 20 20 62  red on the.    b
96b0: 74 72 65 65 20 70 61 67 65 20 61 6e 64 20 74 68  tree page and th
96c0: 65 20 72 65 6d 61 69 6e 69 6e 67 20 50 2d 4d 20  e remaining P-M 
96d0: 62 79 74 65 73 20 61 72 65 20 73 74 6f 72 65 64  bytes are stored
96e0: 20 6f 6e 20 6f 76 65 72 66 6c 6f 77 20 70 61 67   on overflow pag
96f0: 65 73 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 54 68  es..</ul>..<p>Th
9700: 65 20 6f 76 65 72 66 6c 6f 77 20 74 68 72 65 73  e overflow thres
9710: 68 6f 6c 64 73 20 61 72 65 20 64 65 73 69 67 6e  holds are design
9720: 65 64 20 74 6f 20 67 69 76 65 20 61 20 6d 69 6e  ed to give a min
9730: 69 6d 75 6d 20 66 61 6e 6f 75 74 20 6f 66 0a 34  imum fanout of.4
9740: 20 66 6f 72 20 69 6e 64 65 78 20 62 2d 74 72 65   for index b-tre
9750: 65 73 20 61 6e 64 20 74 6f 20 6d 61 6b 65 20 73  es and to make s
9760: 75 72 65 20 65 6e 6f 75 67 68 20 6f 66 20 74 68  ure enough of th
9770: 65 20 70 61 79 6c 6f 61 64 0a 69 73 20 6f 6e 20  e payload.is on 
9780: 74 68 65 20 62 2d 74 72 65 65 20 70 61 67 65 20  the b-tree page 
9790: 74 68 61 74 20 74 68 65 20 72 65 63 6f 72 64 20  that the record 
97a0: 68 65 61 64 65 72 20 63 61 6e 20 75 73 75 61 6c  header can usual
97b0: 6c 79 20 62 65 20 61 63 63 65 73 73 65 64 0a 77  ly be accessed.w
97c0: 69 74 68 6f 75 74 20 63 6f 6e 73 75 6c 74 69 6e  ithout consultin
97d0: 67 20 61 6e 20 6f 76 65 72 66 6c 6f 77 20 70 61  g an overflow pa
97e0: 67 65 2e 20 20 49 6e 20 68 69 6e 64 73 69 67 68  ge.  In hindsigh
97f0: 74 2c 20 74 68 65 20 64 65 73 69 67 6e 65 72 20  t, the designer 
9800: 6f 66 0a 74 68 65 20 53 51 4c 69 74 65 20 62 2d  of.the SQLite b-
9810: 74 72 65 65 20 6c 6f 67 69 63 20 72 65 61 6c 69  tree logic reali
9820: 7a 65 64 20 74 68 61 74 20 74 68 65 73 65 20 74  zed that these t
9830: 68 72 65 73 68 6f 6c 64 73 20 63 6f 75 6c 64 20  hresholds could 
9840: 68 61 76 65 20 62 65 65 6e 0a 6d 61 64 65 20 6d  have been.made m
9850: 75 63 68 20 73 69 6d 70 6c 65 72 2e 20 20 48 6f  uch simpler.  Ho
9860: 77 65 76 65 72 2c 20 74 68 65 20 63 6f 6d 70 75  wever, the compu
9870: 74 61 74 69 6f 6e 73 20 63 61 6e 6e 6f 74 20 62  tations cannot b
9880: 65 20 63 68 61 6e 67 65 64 0a 77 69 74 68 6f 75  e changed.withou
9890: 74 20 72 65 73 75 6c 74 69 6e 67 20 69 6e 20 61  t resulting in a
98a0: 6e 20 69 6e 63 6f 6d 70 61 74 69 62 6c 65 20 66  n incompatible f
98b0: 69 6c 65 20 66 6f 72 6d 61 74 2e 20 20 41 6e 64  ile format.  And
98c0: 20 74 68 65 20 63 75 72 72 65 6e 74 20 63 6f 6d   the current com
98d0: 70 75 74 61 74 69 6f 6e 73 0a 77 6f 72 6b 20 77  putations.work w
98e0: 65 6c 6c 2c 20 65 76 65 6e 20 69 66 20 74 68 65  ell, even if the
98f0: 79 20 61 72 65 20 61 20 6c 69 74 74 6c 65 20 63  y are a little c
9900: 6f 6d 70 6c 65 78 2e 3c 2f 70 3e 0a 0a 3c 74 63  omplex.</p>..<tc
9910: 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 6f 76  l>hd_fragment ov
9920: 66 6c 70 67 73 20 7b 6f 76 65 72 66 6c 6f 77 20  flpgs {overflow 
9930: 70 61 67 65 7d 20 7b 6f 76 65 72 66 6c 6f 77 20  page} {overflow 
9940: 70 61 67 65 73 7d 3c 2f 74 63 6c 3e 0a 3c 68 32  pages}</tcl>.<h2
9950: 3e 43 65 6c 6c 20 50 61 79 6c 6f 61 64 20 4f 76  >Cell Payload Ov
9960: 65 72 66 6c 6f 77 20 50 61 67 65 73 3c 2f 68 32  erflow Pages</h2
9970: 3e 0a 0a 3c 70 3e 5e 57 68 65 6e 20 74 68 65 20  >..<p>^When the 
9980: 70 61 79 6c 6f 61 64 20 6f 66 20 61 20 62 2d 74  payload of a b-t
9990: 72 65 65 20 63 65 6c 6c 20 69 73 20 74 6f 6f 20  ree cell is too 
99a0: 6c 61 72 67 65 20 66 6f 72 20 74 68 65 20 62 2d  large for the b-
99b0: 74 72 65 65 20 70 61 67 65 2c 0a 74 68 65 20 73  tree page,.the s
99c0: 75 72 70 6c 75 73 20 69 73 20 73 70 69 6c 6c 65  urplus is spille
99d0: 64 20 6f 6e 74 6f 20 6f 76 65 72 66 6c 6f 77 20  d onto overflow 
99e0: 70 61 67 65 73 2e 20 20 5e 4f 76 65 72 66 6c 6f  pages.  ^Overflo
99f0: 77 20 70 61 67 65 73 20 66 6f 72 6d 20 61 20 6c  w pages form a l
9a00: 69 6e 6b 65 64 0a 6c 69 73 74 2e 20 20 5e 54 68  inked.list.  ^Th
9a10: 65 20 66 69 72 73 74 20 66 6f 75 72 20 62 79 74  e first four byt
9a20: 65 73 20 6f 66 20 65 61 63 68 20 6f 76 65 72 66  es of each overf
9a30: 6c 6f 77 20 70 61 67 65 20 61 72 65 20 61 20 62  low page are a b
9a40: 69 67 2d 65 6e 64 69 61 6e 0a 69 6e 74 65 67 65  ig-endian.intege
9a50: 72 20 77 68 69 63 68 20 69 73 20 74 68 65 20 70  r which is the p
9a60: 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68  age number of th
9a70: 65 20 6e 65 78 74 20 70 61 67 65 20 69 6e 20 74  e next page in t
9a80: 68 65 20 63 68 61 69 6e 2c 20 6f 72 20 7a 65 72  he chain, or zer
9a90: 6f 0a 66 6f 72 20 74 68 65 20 66 69 6e 61 6c 20  o.for the final 
9aa0: 70 61 67 65 20 69 6e 20 74 68 65 20 63 68 61 69  page in the chai
9ab0: 6e 2e 20 20 5e 54 68 65 20 66 69 66 74 68 20 62  n.  ^The fifth b
9ac0: 79 74 65 20 74 68 72 6f 75 67 68 20 74 68 65 20  yte through the 
9ad0: 6c 61 73 74 20 75 73 61 62 6c 65 0a 62 79 74 65  last usable.byte
9ae0: 20 61 72 65 20 75 73 65 64 20 74 6f 20 68 6f 6c   are used to hol
9af0: 64 20 6f 76 65 72 66 6c 6f 77 20 63 6f 6e 74 65  d overflow conte
9b00: 6e 74 2e 3c 2f 70 3e 0a 0a 3c 68 32 3e 50 6f 69  nt.</p>..<h2>Poi
9b10: 6e 74 65 72 20 4d 61 70 20 6f 72 20 50 74 72 6d  nter Map or Ptrm
9b20: 61 70 20 50 61 67 65 73 3c 2f 68 32 3e 0a 0a 3c  ap Pages</h2>..<
9b30: 70 3e 50 6f 69 6e 74 65 72 20 6d 61 70 20 6f 72  p>Pointer map or
9b40: 20 70 74 72 6d 61 70 20 70 61 67 65 73 20 61 72   ptrmap pages ar
9b50: 65 20 65 78 74 72 61 20 70 61 67 65 73 20 69 6e  e extra pages in
9b60: 73 65 72 74 65 64 20 69 6e 74 6f 20 74 68 65 20  serted into the 
9b70: 64 61 74 61 62 61 73 65 0a 74 6f 20 6d 61 6b 65  database.to make
9b80: 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f   the operation o
9b90: 66 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d 20  f [auto_vacuum] 
9ba0: 61 6e 64 20 5b 69 6e 63 72 65 6d 65 6e 74 61 6c  and [incremental
9bb0: 5f 76 61 63 75 75 6d 5d 20 6d 6f 64 65 73 0a 6d  _vacuum] modes.m
9bc0: 6f 72 65 20 65 66 66 69 63 69 65 6e 74 2e 20 20  ore efficient.  
9bd0: 4f 74 68 65 72 20 70 61 67 65 20 74 79 70 65 73  Other page types
9be0: 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
9bf0: 20 74 79 70 69 63 61 6c 6c 79 20 68 61 76 65 20   typically have 
9c00: 70 6f 69 6e 74 65 72 73 0a 66 72 6f 6d 20 70 61  pointers.from pa
9c10: 72 65 6e 74 20 74 6f 20 63 68 69 6c 64 2e 20 20  rent to child.  
9c20: 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 61 6e 20  For example, an 
9c30: 69 6e 74 65 72 69 6f 72 20 62 2d 74 72 65 65 20  interior b-tree 
9c40: 70 61 67 65 20 63 6f 6e 74 61 69 6e 73 20 70 6f  page contains po
9c50: 69 6e 74 65 72 73 0a 74 6f 20 69 74 73 20 63 68  inters.to its ch
9c60: 69 6c 64 20 62 2d 74 72 65 65 20 70 61 67 65 73  ild b-tree pages
9c70: 20 61 6e 64 20 61 6e 20 6f 76 65 72 66 6c 6f 77   and an overflow
9c80: 20 63 68 61 69 6e 20 68 61 73 20 61 20 70 6f 69   chain has a poi
9c90: 6e 74 65 72 0a 66 72 6f 6d 20 65 61 72 6c 69 65  nter.from earlie
9ca0: 72 20 74 6f 20 6c 61 74 65 72 20 6c 69 6e 6b 73  r to later links
9cb0: 20 69 6e 20 74 68 65 20 63 68 61 69 6e 2e 20 20   in the chain.  
9cc0: 41 20 70 74 72 6d 61 70 20 70 61 67 65 20 63 6f  A ptrmap page co
9cd0: 6e 74 61 69 6e 73 20 6c 69 6e 6b 61 67 65 0a 69  ntains linkage.i
9ce0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 67 6f 69 6e 67  nformation going
9cf0: 20 69 6e 20 74 68 65 20 6f 70 70 6f 73 69 74 65   in the opposite
9d00: 20 64 69 72 65 63 74 69 6f 6e 2c 20 66 72 6f 6d   direction, from
9d10: 20 63 68 69 6c 64 20 74 6f 20 70 61 72 65 6e 74   child to parent
9d20: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 50 74 72 6d 61  .</p>..<p>^Ptrma
9d30: 70 20 70 61 67 65 73 20 6d 75 73 74 20 65 78 69  p pages must exi
9d40: 73 74 20 69 6e 20 61 6e 79 20 64 61 74 61 62 61  st in any databa
9d50: 73 65 20 66 69 6c 65 20 77 68 69 63 68 20 68 61  se file which ha
9d60: 73 20 61 20 6e 6f 6e 2d 7a 65 72 6f 0a 6c 61 72  s a non-zero.lar
9d70: 67 65 73 74 20 72 6f 6f 74 20 62 2d 74 72 65 65  gest root b-tree
9d80: 20 70 61 67 65 20 76 61 6c 75 65 20 61 74 20 6f   page value at o
9d90: 66 66 73 65 74 20 35 32 20 69 6e 20 74 68 65 20  ffset 52 in the 
9da0: 64 61 74 61 62 61 73 65 20 68 65 61 64 65 72 2e  database header.
9db0: 0a 5e 49 66 20 74 68 65 20 6c 61 72 67 65 73 74  .^If the largest
9dc0: 20 72 6f 6f 74 20 62 2d 74 72 65 65 20 70 61 67   root b-tree pag
9dd0: 65 20 76 61 6c 75 65 20 69 73 20 7a 65 72 6f 2c  e value is zero,
9de0: 20 74 68 65 6e 20 74 68 65 20 64 61 74 61 62 61   then the databa
9df0: 73 65 20 6d 75 73 74 20 6e 6f 74 0a 63 6f 6e 74  se must not.cont
9e00: 61 69 6e 20 70 74 72 6d 61 70 20 70 61 67 65 73  ain ptrmap pages
9e10: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 6e 20 61 20  .</p>..<p>^In a 
9e20: 64 61 74 61 62 61 73 65 20 77 69 74 68 20 70 74  database with pt
9e30: 72 6d 61 70 20 70 61 67 65 73 2c 20 74 68 65 20  rmap pages, the 
9e40: 66 69 72 73 74 20 70 74 72 6d 61 70 20 70 61 67  first ptrmap pag
9e50: 65 20 69 73 20 70 61 67 65 20 32 2e 0a 41 20 70  e is page 2..A p
9e60: 74 72 6d 61 70 20 70 61 67 65 20 63 6f 6e 73 69  trmap page consi
9e70: 73 74 73 20 6f 66 20 61 6e 20 61 72 72 61 79 20  sts of an array 
9e80: 6f 66 20 35 2d 62 79 74 65 20 65 6e 74 72 69 65  of 5-byte entrie
9e90: 73 2e 20 20 4c 65 74 20 4a 20 62 65 20 74 68 65  s.  Let J be the
9ea0: 0a 6e 75 6d 62 65 72 20 6f 66 20 35 2d 62 79 74  .number of 5-byt
9eb0: 65 20 65 6e 74 72 69 65 73 20 74 68 61 74 20 77  e entries that w
9ec0: 69 6c 6c 20 66 69 74 20 69 6e 20 74 68 65 20 75  ill fit in the u
9ed0: 73 61 62 6c 65 20 73 70 61 63 65 20 6f 66 20 61  sable space of a
9ee0: 20 70 61 67 65 2e 0a 28 49 6e 20 6f 74 68 65 72   page..(In other
9ef0: 20 77 6f 72 64 73 2c 20 4a 3d 55 2f 35 2e 29 20   words, J=U/5.) 
9f00: 20 5e 54 68 65 20 66 69 72 73 74 20 70 74 72 6d   ^The first ptrm
9f10: 61 70 20 70 61 67 65 20 77 69 6c 6c 20 63 6f 6e  ap page will con
9f20: 74 61 69 6e 20 62 61 63 6b 20 70 6f 69 6e 74 65  tain back pointe
9f30: 72 0a 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 6f  r.information fo
9f40: 72 20 70 61 67 65 73 20 33 20 74 68 72 6f 75 67  r pages 3 throug
9f50: 68 20 4a 2b 32 2c 20 69 6e 63 6c 75 73 69 76 65  h J+2, inclusive
9f60: 2e 20 20 5e 54 68 65 20 73 65 63 6f 6e 64 20 70  .  ^The second p
9f70: 6f 69 6e 74 65 72 20 6d 61 70 0a 70 61 67 65 20  ointer map.page 
9f80: 77 69 6c 6c 20 62 65 20 6f 6e 20 70 61 67 65 20  will be on page 
9f90: 4a 2b 33 20 61 6e 64 20 74 68 61 74 20 70 74 72  J+3 and that ptr
9fa0: 6d 61 70 20 70 61 67 65 20 77 69 6c 6c 20 70 72  map page will pr
9fb0: 6f 76 69 64 65 20 62 61 63 6b 20 70 6f 69 6e 74  ovide back point
9fc0: 65 72 0a 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66  er.information f
9fd0: 6f 72 20 70 61 67 65 73 20 4a 2b 34 20 74 68 72  or pages J+4 thr
9fe0: 6f 75 67 68 20 32 2a 4a 2b 33 20 69 6e 63 6c 75  ough 2*J+3 inclu
9ff0: 73 69 76 65 2e 20 20 41 6e 64 20 73 6f 20 66 6f  sive.  And so fo
a000: 72 74 68 20 66 6f 72 0a 74 68 65 20 65 6e 74 69  rth for.the enti
a010: 72 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  re database file
a020: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28 49 6e 20 61  .</p>..<p>^(In a
a030: 20 64 61 74 61 62 61 73 65 20 74 68 61 74 20 75   database that u
a040: 73 65 73 20 70 74 72 6d 61 70 20 70 61 67 65 73  ses ptrmap pages
a050: 2c 20 61 6c 6c 20 70 61 67 65 73 20 61 74 20 6c  , all pages at l
a060: 6f 63 61 74 69 6f 6e 73 20 69 64 65 6e 74 69 66  ocations identif
a070: 69 65 64 0a 62 79 20 74 68 65 20 63 6f 6d 70 75  ied.by the compu
a080: 74 61 74 69 6f 6e 20 69 6e 20 74 68 65 20 70 72  tation in the pr
a090: 65 76 69 6f 75 73 20 70 61 72 61 67 72 61 70 68  evious paragraph
a0a0: 20 6d 75 73 74 20 62 65 20 70 74 72 6d 61 70 20   must be ptrmap 
a0b0: 70 61 67 65 20 61 6e 64 20 6e 6f 0a 6f 74 68 65  page and no.othe
a0c0: 72 20 70 61 67 65 20 6d 61 79 20 62 65 20 61 20  r page may be a 
a0d0: 70 74 72 6d 61 70 20 70 61 67 65 2e 20 20 45 78  ptrmap page.  Ex
a0e0: 63 65 70 74 2c 20 69 66 20 74 68 65 20 62 79 74  cept, if the byt
a0f0: 65 2d 6c 6f 63 6b 20 70 61 67 65 20 68 61 70 70  e-lock page happ
a100: 65 6e 73 20 74 6f 0a 66 61 6c 6c 20 6f 6e 20 74  ens to.fall on t
a110: 68 65 20 73 61 6d 65 20 70 61 67 65 20 6e 75 6d  he same page num
a120: 62 65 72 20 61 73 20 61 20 70 74 72 6d 61 70 20  ber as a ptrmap 
a130: 70 61 67 65 2c 20 74 68 65 6e 20 74 68 65 20 70  page, then the p
a140: 74 72 6d 61 70 20 69 73 20 6d 6f 76 65 64 0a 74  trmap is moved.t
a150: 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  o the following 
a160: 70 61 67 65 20 66 6f 72 20 74 68 61 74 20 6f 6e  page for that on
a170: 65 20 63 61 73 65 2e 29 5e 3c 2f 70 3e 0a 0a 3c  e case.)^</p>..<
a180: 70 3e 45 61 63 68 20 35 2d 62 79 74 65 20 65 6e  p>Each 5-byte en
a190: 74 72 79 20 6f 6e 20 61 20 70 74 72 6d 61 70 20  try on a ptrmap 
a1a0: 70 61 67 65 20 70 72 6f 76 69 64 65 73 20 62 61  page provides ba
a1b0: 63 6b 2d 6c 69 6e 6b 20 69 6e 66 6f 72 6d 61 74  ck-link informat
a1c0: 69 6f 6e 20 61 62 6f 75 74 20 0a 6f 6e 65 20 6f  ion about .one o
a1d0: 66 20 74 68 65 20 70 61 67 65 73 20 74 68 61 74  f the pages that
a1e0: 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c   immediately fol
a1f0: 6c 6f 77 20 74 68 65 20 70 6f 69 6e 74 65 72 20  low the pointer 
a200: 6d 61 70 2e 20 20 5e 28 49 66 20 70 61 67 65 20  map.  ^(If page 
a210: 42 20 69 73 20 61 0a 70 74 72 6d 61 70 20 70 61  B is a.ptrmap pa
a220: 67 65 20 74 68 65 6e 20 62 61 63 6b 2d 6c 69 6e  ge then back-lin
a230: 6b 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  k information ab
a240: 6f 75 74 20 70 61 67 65 20 42 2b 31 20 69 73 20  out page B+1 is 
a250: 70 72 6f 76 69 64 65 64 20 62 79 0a 74 68 65 20  provided by.the 
a260: 66 69 72 73 74 20 65 6e 74 72 79 20 6f 6e 20 74  first entry on t
a270: 68 65 20 70 6f 69 6e 74 65 72 20 6d 61 70 2e 20  he pointer map. 
a280: 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   Information abo
a290: 75 74 20 70 61 67 65 20 42 2b 32 20 69 73 0a 70  ut page B+2 is.p
a2a0: 72 6f 76 69 64 65 64 20 62 79 20 74 68 65 20 73  rovided by the s
a2b0: 65 63 6f 6e 64 20 65 6e 74 72 79 2e 20 20 41 6e  econd entry.  An
a2c0: 64 20 73 6f 20 66 6f 72 74 68 2e 29 5e 3c 2f 70  d so forth.)^</p
a2d0: 3e 0a 0a 3c 70 3e 45 61 63 68 20 35 2d 62 79 74  >..<p>Each 5-byt
a2e0: 65 20 70 74 72 6d 61 70 20 65 6e 74 72 79 20 63  e ptrmap entry c
a2f0: 6f 6e 73 69 73 74 73 20 6f 66 20 6f 6e 65 20 62  onsists of one b
a300: 79 74 65 20 6f 66 20 22 70 61 67 65 20 74 79 70  yte of "page typ
a310: 65 22 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 66  e" information.f
a320: 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 34 2d 62  ollowed by a 4-b
a330: 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 70  yte big-endian p
a340: 61 67 65 20 6e 75 6d 62 65 72 2e 20 20 46 69 76  age number.  Fiv
a350: 65 20 70 61 67 65 20 74 79 70 65 73 20 61 72 65  e page types are
a360: 20 72 65 63 6f 67 6e 69 7a 65 64 3a 0a 3c 2f 70   recognized:.</p
a370: 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 41 20 62 2d  >..<ol>.<li>A b-
a380: 74 72 65 65 20 72 6f 6f 74 20 70 61 67 65 2e 20  tree root page. 
a390: 20 54 68 65 0a 70 61 67 65 20 6e 75 6d 62 65 72   The.page number
a3a0: 20 73 68 6f 75 6c 64 20 62 65 20 7a 65 72 6f 2e   should be zero.
a3b0: 0a 3c 6c 69 3e 41 20 66 72 65 65 6c 69 73 74 20  .<li>A freelist 
a3c0: 70 61 67 65 2e 20 20 54 68 65 20 70 61 67 65 20  page.  The page 
a3d0: 6e 75 6d 62 65 72 20 73 68 6f 75 6c 64 20 62 65  number should be
a3e0: 0a 7a 65 72 6f 2e 0a 3c 6c 69 3e 54 68 65 20 66  .zero..<li>The f
a3f0: 69 72 73 74 20 70 61 67 65 20 6f 66 20 61 0a 63  irst page of a.c
a400: 65 6c 6c 20 70 61 79 6c 6f 61 64 20 6f 76 65 72  ell payload over
a410: 66 6c 6f 77 20 63 68 61 69 6e 2e 20 20 54 68 65  flow chain.  The
a420: 20 70 61 67 65 20 6e 75 6d 62 65 72 20 69 73 20   page number is 
a430: 74 68 65 20 62 2d 74 72 65 65 20 70 61 67 65 20  the b-tree page 
a440: 74 68 61 74 0a 63 6f 6e 74 61 69 6e 73 20 74 68  that.contains th
a450: 65 20 63 65 6c 6c 20 77 68 6f 73 65 20 63 6f 6e  e cell whose con
a460: 74 65 6e 74 20 68 61 73 20 6f 76 65 72 66 6c 6f  tent has overflo
a470: 77 65 64 2e 0a 3c 6c 69 3e 41 20 70 61 67 65 20  wed..<li>A page 
a480: 69 6e 20 61 6e 20 6f 76 65 72 66 6c 6f 77 20 63  in an overflow c
a490: 68 61 69 6e 0a 6f 74 68 65 72 20 74 68 61 6e 20  hain.other than 
a4a0: 74 68 65 20 66 69 72 73 74 20 70 61 67 65 2e 20  the first page. 
a4b0: 20 54 68 65 20 70 61 67 65 20 6e 75 6d 62 65 72   The page number
a4c0: 20 69 73 20 74 68 65 20 70 72 69 6f 72 20 70 61   is the prior pa
a4d0: 67 65 20 6f 66 20 74 68 65 0a 6f 76 65 72 66 6c  ge of the.overfl
a4e0: 6f 77 20 63 68 61 69 6e 2e 0a 3c 6c 69 3e 41 20  ow chain..<li>A 
a4f0: 6e 6f 6e 2d 72 6f 6f 74 20 62 2d 74 72 65 65 20  non-root b-tree 
a500: 70 61 67 65 2e 20 20 54 68 65 0a 70 61 67 65 20  page.  The.page 
a510: 6e 75 6d 62 65 72 20 69 73 20 74 68 65 20 70 61  number is the pa
a520: 72 65 6e 74 20 62 2d 74 72 65 65 20 70 61 67 65  rent b-tree page
a530: 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 5e 49 6e 20  ..</ol>..<p>^In 
a540: 61 6e 79 20 64 61 74 61 62 61 73 65 20 66 69 6c  any database fil
a550: 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  e that contains 
a560: 70 74 72 6d 61 70 20 70 61 67 65 73 2c 20 61 6c  ptrmap pages, al
a570: 6c 20 62 2d 74 72 65 65 20 72 6f 6f 74 20 70 61  l b-tree root pa
a580: 67 65 73 20 0a 6d 75 73 74 20 63 6f 6d 65 20 62  ges .must come b
a590: 65 66 6f 72 65 20 61 6e 79 20 6e 6f 6e 2d 72 6f  efore any non-ro
a5a0: 6f 74 20 62 2d 74 72 65 65 20 70 61 67 65 2c 20  ot b-tree page, 
a5b0: 63 65 6c 6c 20 70 61 79 6c 6f 61 64 20 6f 76 65  cell payload ove
a5c0: 72 66 6c 6f 77 20 70 61 67 65 2c 20 6f 72 0a 66  rflow page, or.f
a5d0: 72 65 65 6c 69 73 74 20 70 61 67 65 2e 20 20 54  reelist page.  T
a5e0: 68 69 73 20 72 65 73 74 72 69 63 74 69 6f 6e 20  his restriction 
a5f0: 65 6e 73 75 72 65 73 20 74 68 61 74 20 61 20 72  ensures that a r
a600: 6f 6f 74 20 70 61 67 65 20 77 69 6c 6c 20 6e 65  oot page will ne
a610: 76 65 72 0a 62 65 20 6d 6f 76 65 64 20 64 75 72  ver.be moved dur
a620: 69 6e 67 20 61 6e 20 61 75 74 6f 2d 76 61 63 75  ing an auto-vacu
a630: 75 6d 20 6f 72 20 69 6e 63 72 65 6d 65 6e 74 61  um or incrementa
a640: 6c 2d 76 61 63 75 75 6d 2e 20 20 54 68 65 20 61  l-vacuum.  The a
a650: 75 74 6f 2d 76 61 63 75 75 6d 0a 6c 6f 67 69 63  uto-vacuum.logic
a660: 20 64 6f 65 73 20 6e 6f 74 20 6b 6e 6f 77 20 68   does not know h
a670: 6f 77 20 74 6f 20 75 70 64 61 74 65 20 74 68 65  ow to update the
a680: 20 72 6f 6f 74 5f 70 61 67 65 20 66 69 65 6c 64   root_page field
a690: 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 5f 6d   of the sqlite_m
a6a0: 61 73 74 65 72 0a 74 61 62 6c 65 20 61 6e 64 20  aster.table and 
a6b0: 73 6f 20 69 74 20 69 73 20 6e 65 63 65 73 73 61  so it is necessa
a6c0: 72 79 20 74 6f 20 70 72 65 76 65 6e 74 20 72 6f  ry to prevent ro
a6d0: 6f 74 20 70 61 67 65 73 20 66 72 6f 6d 20 62 65  ot pages from be
a6e0: 69 6e 67 20 6d 6f 76 65 64 0a 64 75 72 69 6e 67  ing moved.during
a6f0: 20 61 6e 20 61 75 74 6f 2d 76 61 63 75 75 6d 20   an auto-vacuum 
a700: 69 6e 20 6f 72 64 65 72 20 74 6f 20 70 72 65 73  in order to pres
a710: 65 72 76 65 20 74 68 65 20 69 6e 74 65 67 72 69  erve the integri
a720: 74 79 20 6f 66 20 74 68 65 0a 73 71 6c 69 74 65  ty of the.sqlite
a730: 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 2e 20 20  _master table.  
a740: 5e 52 6f 6f 74 20 70 61 67 65 73 20 61 72 65 20  ^Root pages are 
a750: 6d 6f 76 65 64 20 74 6f 20 74 68 65 20 62 65 67  moved to the beg
a760: 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 0a 64 61  inning of the.da
a770: 74 61 62 61 73 65 20 66 69 6c 65 20 62 79 20 74  tabase file by t
a780: 68 65 20 43 52 45 41 54 45 20 54 41 42 4c 45 2c  he CREATE TABLE,
a790: 20 43 52 45 41 54 45 20 49 4e 44 45 58 2c 20 44   CREATE INDEX, D
a7a0: 52 4f 50 20 54 41 42 4c 45 2c 20 61 6e 64 0a 44  ROP TABLE, and.D
a7b0: 52 4f 50 20 49 4e 44 45 58 20 6f 70 65 72 61 74  ROP INDEX operat
a7c0: 69 6f 6e 73 2e 3c 2f 70 3e 0a 0a 3c 68 31 3e 53  ions.</p>..<h1>S
a7d0: 63 68 65 6d 61 20 4c 61 79 65 72 3c 2f 68 31 3e  chema Layer</h1>
a7e0: 0a 0a 3c 70 3e 54 68 65 20 66 6f 72 65 67 6f 69  ..<p>The foregoi
a7f0: 6e 67 20 74 65 78 74 20 64 65 73 63 72 69 62 65  ng text describe
a800: 73 20 6c 6f 77 2d 6c 65 76 65 6c 20 61 73 70 65  s low-level aspe
a810: 63 74 73 20 6f 66 20 74 68 65 20 53 51 4c 69 74  cts of the SQLit
a820: 65 20 66 69 6c 65 0a 66 6f 72 6d 61 74 2e 20 20  e file.format.  
a830: 54 68 65 20 62 2d 74 72 65 65 20 6d 65 63 68 61  The b-tree mecha
a840: 6e 69 73 6d 20 70 72 6f 76 69 64 65 73 20 61 20  nism provides a 
a850: 70 6f 77 65 72 66 75 6c 20 61 6e 64 20 65 66 66  powerful and eff
a860: 69 63 69 65 6e 74 20 6d 65 61 6e 73 20 6f 66 0a  icient means of.
a870: 61 63 63 65 73 73 69 6e 67 20 61 20 6c 61 72 67  accessing a larg
a880: 65 20 64 61 74 61 20 73 65 74 2e 20 20 54 68 69  e data set.  Thi
a890: 73 20 73 65 63 74 69 6f 6e 20 77 69 6c 6c 20 64  s section will d
a8a0: 65 73 63 72 69 62 65 20 68 6f 77 20 74 68 65 0a  escribe how the.
a8b0: 6c 6f 77 2d 6c 65 76 65 6c 20 62 2d 74 72 65 65  low-level b-tree
a8c0: 20 6c 61 79 65 72 20 69 73 20 75 73 65 64 20 74   layer is used t
a8d0: 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 68 69 67 68  o implement high
a8e0: 65 72 2d 6c 65 76 65 6c 20 53 51 4c 0a 63 61 70  er-level SQL.cap
a8f0: 61 62 69 6c 69 74 69 65 73 2e 3c 2f 70 3e 0a 0a  abilities.</p>..
a900: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
a910: 20 72 65 63 6f 72 64 5f 66 6f 72 6d 61 74 20 7b   record_format {
a920: 72 65 63 6f 72 64 20 66 6f 72 6d 61 74 7d 3c 2f  record format}</
a930: 74 63 6c 3e 0a 3c 68 32 3e 52 65 63 6f 72 64 20  tcl>.<h2>Record 
a940: 46 6f 72 6d 61 74 3c 2f 68 32 3e 0a 0a 3c 70 3e  Format</h2>..<p>
a950: 54 68 65 20 64 61 74 61 20 66 6f 72 20 61 20 74  The data for a t
a960: 61 62 6c 65 20 62 2d 74 72 65 65 20 6c 65 61 66  able b-tree leaf
a970: 20 70 61 67 65 20 61 6e 64 20 74 68 65 20 6b 65   page and the ke
a980: 79 0a 6f 66 20 61 6e 20 69 6e 64 65 78 20 62 2d  y.of an index b-
a990: 74 72 65 65 20 70 61 67 65 20 77 61 73 20 63 68  tree page was ch
a9a0: 61 72 61 63 74 65 72 69 7a 65 64 20 61 62 6f 76  aracterized abov
a9b0: 65 0a 61 73 20 61 6e 20 61 72 62 69 74 72 61 72  e.as an arbitrar
a9c0: 79 20 73 65 71 75 65 6e 63 65 20 6f 66 20 62 79  y sequence of by
a9d0: 74 65 73 2e 0a 54 68 65 20 70 72 69 6f 72 20 64  tes..The prior d
a9e0: 69 73 63 75 73 73 69 6f 6e 20 6d 65 6e 74 69 6f  iscussion mentio
a9f0: 6e 65 64 20 6f 6e 65 20 6b 65 79 20 62 65 69 6e  ned one key bein
aa00: 67 20 6c 65 73 73 20 74 68 61 6e 20 61 6e 6f 74  g less than anot
aa10: 68 65 72 2c 20 62 75 74 0a 64 69 64 20 6e 6f 74  her, but.did not
aa20: 20 64 65 66 69 6e 65 20 77 68 61 74 20 22 6c 65   define what "le
aa30: 73 73 20 74 68 61 6e 22 20 6d 65 61 6e 74 2e 20  ss than" meant. 
aa40: 20 54 68 65 20 63 75 72 72 65 6e 74 20 73 65 63   The current sec
aa50: 74 69 6f 6e 20 77 69 6c 6c 20 61 64 64 72 65 73  tion will addres
aa60: 73 0a 74 68 65 73 65 20 6f 6d 69 73 73 69 6f 6e  s.these omission
aa70: 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 50 61 79 6c 6f  s.</p>..<p>Paylo
aa80: 61 64 2c 20 65 69 74 68 65 72 20 74 61 62 6c 65  ad, either table
aa90: 20 62 2d 74 72 65 65 20 64 61 74 61 20 6f 72 20   b-tree data or 
aaa0: 69 6e 64 65 78 20 62 2d 74 72 65 65 20 6b 65 79  index b-tree key
aab0: 73 2c 20 0a 69 73 20 61 6c 77 61 79 73 20 69 6e  s, .is always in
aac0: 20 74 68 65 20 22 72 65 63 6f 72 64 20 66 6f 72   the "record for
aad0: 6d 61 74 22 2e 0a 54 68 65 20 72 65 63 6f 72 64  mat"..The record
aae0: 20 66 6f 72 6d 61 74 20 64 65 66 69 6e 65 73 20   format defines 
aaf0: 61 20 73 65 71 75 65 6e 63 65 20 6f 66 20 76 61  a sequence of va
ab00: 6c 75 65 73 20 63 6f 72 72 65 73 70 6f 6e 64 69  lues correspondi
ab10: 6e 67 0a 74 6f 20 63 6f 6c 75 6d 6e 73 20 69 6e  ng.to columns in
ab20: 20 61 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65   a table or inde
ab30: 78 2e 20 20 54 68 65 20 72 65 63 6f 72 64 20 66  x.  The record f
ab40: 6f 72 6d 61 74 20 73 70 65 63 69 66 69 65 73 20  ormat specifies 
ab50: 74 68 65 20 6e 75 6d 62 65 72 0a 6f 66 20 63 6f  the number.of co
ab60: 6c 75 6d 6e 73 2c 20 74 68 65 20 64 61 74 61 74  lumns, the datat
ab70: 79 70 65 20 6f 66 20 65 61 63 68 20 63 6f 6c 75  ype of each colu
ab80: 6d 6e 2c 20 61 6e 64 20 74 68 65 20 63 6f 6e 74  mn, and the cont
ab90: 65 6e 74 20 6f 66 20 65 61 63 68 20 63 6f 6c 75  ent of each colu
aba0: 6d 6e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  mn.</p>..<p>The 
abb0: 72 65 63 6f 72 64 20 66 6f 72 6d 61 74 20 6d 61  record format ma
abc0: 6b 65 73 20 65 78 74 65 6e 73 69 76 65 20 75 73  kes extensive us
abd0: 65 20 6f 66 20 74 68 65 20 0a 5b 76 61 72 69 61  e of the .[varia
abe0: 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67  ble-length integ
abf0: 65 72 5d 20 6f 72 20 5b 76 61 72 69 6e 74 5d 0a  er] or [varint].
ac00: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f  representation o
ac10: 66 20 36 34 2d 62 69 74 20 73 69 67 6e 65 64 20  f 64-bit signed 
ac20: 69 6e 74 65 67 65 72 73 20 64 65 66 69 6e 65 64  integers defined
ac30: 20 61 62 6f 76 65 2e 3c 2f 70 3e 0a 0a 3c 74 63   above.</p>..<tc
ac40: 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 73 65  l>hd_fragment se
ac50: 72 69 61 6c 74 79 70 65 20 7b 73 65 72 69 61 6c  rialtype {serial
ac60: 20 74 79 70 65 7d 20 7b 73 65 72 69 61 6c 20 74   type} {serial t
ac70: 79 70 65 73 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 41  ypes}</tcl>.<p>A
ac80: 20 72 65 63 6f 72 64 20 63 6f 6e 74 61 69 6e 73   record contains
ac90: 20 61 20 68 65 61 64 65 72 20 61 6e 64 20 61 20   a header and a 
aca0: 62 6f 64 79 2c 20 69 6e 20 74 68 61 74 20 6f 72  body, in that or
acb0: 64 65 72 2e 20 20 0a 5e 28 54 68 65 20 68 65 61  der.  .^(The hea
acc0: 64 65 72 20 62 65 67 69 6e 73 20 77 69 74 68 20  der begins with 
acd0: 61 20 73 69 6e 67 6c 65 20 76 61 72 69 6e 74 20  a single varint 
ace0: 77 68 69 63 68 20 64 65 74 65 72 6d 69 6e 65 73  which determines
acf0: 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65   the total numbe
ad00: 72 0a 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68  r.of bytes in th
ad10: 65 20 68 65 61 64 65 72 2e 20 20 54 68 65 20 76  e header.  The v
ad20: 61 72 69 6e 74 20 76 61 6c 75 65 20 69 73 20 74  arint value is t
ad30: 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 68  he size of the h
ad40: 65 61 64 65 72 20 69 6e 0a 62 79 74 65 73 20 69  eader in.bytes i
ad50: 6e 63 6c 75 64 69 6e 67 20 74 68 65 20 73 69 7a  ncluding the siz
ad60: 65 20 76 61 72 69 6e 74 20 69 74 73 65 6c 66 2e  e varint itself.
ad70: 29 5e 20 20 5e 46 6f 6c 6c 6f 77 69 6e 67 20 74  )^  ^Following t
ad80: 68 65 20 73 69 7a 65 20 76 61 72 69 6e 74 20 61  he size varint a
ad90: 72 65 0a 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 61  re.one or more a
ada0: 64 64 69 74 69 6f 6e 61 6c 20 76 61 72 69 6e 74  dditional varint
adb0: 73 2c 20 6f 6e 65 20 70 65 72 20 63 6f 6c 75 6d  s, one per colum
adc0: 6e 2e 20 20 54 68 65 73 65 20 61 64 64 69 74 69  n.  These additi
add0: 6f 6e 61 6c 20 76 61 72 69 6e 74 73 0a 61 72 65  onal varints.are
ade0: 20 63 61 6c 6c 65 64 20 22 73 65 72 69 61 6c 20   called "serial 
adf0: 74 79 70 65 22 20 6e 75 6d 62 65 72 73 20 61 6e  type" numbers an
ae00: 64 0a 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20  d.determine the 
ae10: 64 61 74 61 74 79 70 65 20 6f 66 20 65 61 63 68  datatype of each
ae20: 20 63 6f 6c 75 6d 6e 2c 20 61 63 63 6f 72 64 69   column, accordi
ae30: 6e 67 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77  ng to the follow
ae40: 69 6e 67 20 63 68 61 72 74 3a 3c 2f 70 3e 0a 0a  ing chart:</p>..
ae50: 3c 63 65 6e 74 65 72 3e 0a 3c 69 3e 53 65 72 69  <center>.<i>Seri
ae60: 61 6c 20 54 79 70 65 20 43 6f 64 65 73 20 4f 66  al Type Codes Of
ae70: 20 54 68 65 20 52 65 63 6f 72 64 20 46 6f 72 6d   The Record Form
ae80: 61 74 3c 2f 69 3e 3c 62 72 3e 0a 3c 74 61 62 6c  at</i><br>.<tabl
ae90: 65 20 77 69 64 74 68 3d 22 38 30 25 22 20 62 6f  e width="80%" bo
aea0: 72 64 65 72 3d 31 3e 0a 3c 74 72 3e 3c 74 68 3e  rder=1>.<tr><th>
aeb0: 53 65 72 69 61 6c 20 54 79 70 65 3c 74 68 3e 43  Serial Type<th>C
aec0: 6f 6e 74 65 6e 74 20 53 69 7a 65 3c 74 68 3e 4d  ontent Size<th>M
aed0: 65 61 6e 69 6e 67 0a 3c 74 72 3e 3c 74 64 20 76  eaning.<tr><td v
aee0: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
aef0: 63 65 6e 74 65 72 3e 30 3c 74 64 20 76 61 6c 69  center>0<td vali
af00: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
af10: 74 65 72 3e 30 3c 74 64 20 61 6c 69 67 6e 3d 6c  ter>0<td align=l
af20: 65 66 74 3e 0a 5e 56 61 6c 75 65 20 69 73 20 61  eft>.^Value is a
af30: 20 4e 55 4c 4c 2e 0a 3c 74 72 3e 3c 74 64 20 76   NULL..<tr><td v
af40: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
af50: 63 65 6e 74 65 72 3e 31 3c 74 64 20 76 61 6c 69  center>1<td vali
af60: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
af70: 74 65 72 3e 31 3c 74 64 20 61 6c 69 67 6e 3d 6c  ter>1<td align=l
af80: 65 66 74 3e 0a 5e 56 61 6c 75 65 20 69 73 20 61  eft>.^Value is a
af90: 6e 20 38 2d 62 69 74 20 74 77 6f 73 2d 63 6f 6d  n 8-bit twos-com
afa0: 70 6c 65 6d 65 6e 74 20 69 6e 74 65 67 65 72 2e  plement integer.
afb0: 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d  .<tr><td valign=
afc0: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
afd0: 3e 32 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  >2<td valign=top
afe0: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32 3c   align=center>2<
aff0: 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e  td align=left>.^
b000: 56 61 6c 75 65 20 69 73 20 61 20 62 69 67 2d 65  Value is a big-e
b010: 6e 64 69 61 6e 20 31 36 2d 62 69 74 20 74 77 6f  ndian 16-bit two
b020: 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 74  s-complement int
b030: 65 67 65 72 2e 0a 3c 74 72 3e 3c 74 64 20 76 61  eger..<tr><td va
b040: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
b050: 65 6e 74 65 72 3e 33 3c 74 64 20 76 61 6c 69 67  enter>3<td valig
b060: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
b070: 65 72 3e 33 3c 74 64 20 61 6c 69 67 6e 3d 6c 65  er>3<td align=le
b080: 66 74 3e 0a 5e 56 61 6c 75 65 20 69 73 20 61 20  ft>.^Value is a 
b090: 62 69 67 2d 65 6e 64 69 61 6e 20 32 34 2d 62 69  big-endian 24-bi
b0a0: 74 20 74 77 6f 73 2d 63 6f 6d 70 6c 65 6d 65 6e  t twos-complemen
b0b0: 74 20 69 6e 74 65 67 65 72 2e 0a 3c 74 72 3e 3c  t integer..<tr><
b0c0: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
b0d0: 69 67 6e 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20  ign=center>4<td 
b0e0: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
b0f0: 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69  =center>4<td ali
b100: 67 6e 3d 6c 65 66 74 3e 0a 5e 56 61 6c 75 65 20  gn=left>.^Value 
b110: 69 73 20 61 20 62 69 67 2d 65 6e 64 69 61 6e 20  is a big-endian 
b120: 33 32 2d 62 69 74 20 74 77 6f 73 2d 63 6f 6d 70  32-bit twos-comp
b130: 6c 65 6d 65 6e 74 20 69 6e 74 65 67 65 72 2e 0a  lement integer..
b140: 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74  <tr><td valign=t
b150: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
b160: 35 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  5<td valign=top 
b170: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 36 3c 74  align=center>6<t
b180: 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 56  d align=left>.^V
b190: 61 6c 75 65 20 69 73 20 61 20 62 69 67 2d 65 6e  alue is a big-en
b1a0: 64 69 61 6e 20 34 38 2d 62 69 74 20 74 77 6f 73  dian 48-bit twos
b1b0: 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 74 65  -complement inte
b1c0: 67 65 72 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c  ger..<tr><td val
b1d0: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
b1e0: 6e 74 65 72 3e 36 3c 74 64 20 76 61 6c 69 67 6e  nter>6<td valign
b1f0: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
b200: 72 3e 38 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66  r>8<td align=lef
b210: 74 3e 0a 5e 56 61 6c 75 65 20 69 73 20 61 20 62  t>.^Value is a b
b220: 69 67 2d 65 6e 64 69 61 6e 20 36 34 2d 62 69 74  ig-endian 64-bit
b230: 20 74 77 6f 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74   twos-complement
b240: 20 69 6e 74 65 67 65 72 2e 0a 3c 74 72 3e 3c 74   integer..<tr><t
b250: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
b260: 67 6e 3d 63 65 6e 74 65 72 3e 37 3c 74 64 20 76  gn=center>7<td v
b270: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
b280: 63 65 6e 74 65 72 3e 38 3c 74 64 20 61 6c 69 67  center>8<td alig
b290: 6e 3d 6c 65 66 74 3e 0a 5e 56 61 6c 75 65 20 69  n=left>.^Value i
b2a0: 73 20 61 20 62 69 67 2d 65 6e 64 69 61 6e 20 49  s a big-endian I
b2b0: 45 45 45 20 37 35 34 2d 32 30 30 38 20 36 34 2d  EEE 754-2008 64-
b2c0: 62 69 74 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69  bit floating poi
b2d0: 6e 74 20 6e 75 6d 62 65 72 2e 0a 3c 74 72 3e 3c  nt number..<tr><
b2e0: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
b2f0: 69 67 6e 3d 63 65 6e 74 65 72 3e 38 3c 74 64 20  ign=center>8<td 
b300: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
b310: 3d 63 65 6e 74 65 72 3e 30 3c 74 64 20 61 6c 69  =center>0<td ali
b320: 67 6e 3d 6c 65 66 74 3e 0a 5e 56 61 6c 75 65 20  gn=left>.^Value 
b330: 69 73 20 74 68 65 20 69 6e 74 65 67 65 72 20 30  is the integer 0
b340: 2e 20 28 4f 6e 6c 79 20 61 76 61 69 6c 61 62 6c  . (Only availabl
b350: 65 20 66 6f 72 20 5b 73 63 68 65 6d 61 20 66 6f  e for [schema fo
b360: 72 6d 61 74 5d 20 34 20 61 6e 64 20 68 69 67 68  rmat] 4 and high
b370: 65 72 2e 29 0a 3c 74 72 3e 3c 74 64 20 76 61 6c  er.).<tr><td val
b380: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
b390: 6e 74 65 72 3e 39 3c 74 64 20 76 61 6c 69 67 6e  nter>9<td valign
b3a0: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
b3b0: 72 3e 30 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66  r>0<td align=lef
b3c0: 74 3e 0a 5e 56 61 6c 75 65 20 69 73 20 74 68 65  t>.^Value is the
b3d0: 20 69 6e 74 65 67 65 72 20 31 2e 20 28 4f 6e 6c   integer 1. (Onl
b3e0: 79 20 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20  y available for 
b3f0: 5b 73 63 68 65 6d 61 20 66 6f 72 6d 61 74 5d 20  [schema format] 
b400: 34 20 61 6e 64 20 68 69 67 68 65 72 2e 29 0a 3c  4 and higher.).<
b410: 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
b420: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31  p align=center>1
b430: 30 2c 31 31 0a 20 20 20 20 3c 74 64 20 76 61 6c  0,11.    <td val
b440: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
b450: 6e 74 65 72 3e 26 6e 62 73 70 3b 3c 74 64 20 61  nter>&nbsp;<td a
b460: 6c 69 67 6e 3d 6c 65 66 74 3e 0a 3c 69 3e 4e 6f  lign=left>.<i>No
b470: 74 20 75 73 65 64 2e 20 20 52 65 73 65 72 76 65  t used.  Reserve
b480: 64 20 66 6f 72 20 65 78 70 61 6e 73 69 6f 6e 2e  d for expansion.
b490: 3c 2f 69 3e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c  </i>.<tr><td val
b4a0: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
b4b0: 6e 74 65 72 3e 4e 26 23 78 32 32 36 35 3b 31 32  nter>N&#x2265;12
b4c0: 20 61 6e 64 20 65 76 65 6e 0a 20 20 20 20 3c 74   and even.    <t
b4d0: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
b4e0: 67 6e 3d 63 65 6e 74 65 72 3e 28 4e 2d 31 32 29  gn=center>(N-12)
b4f0: 2f 32 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74  /2<td align=left
b500: 3e 0a 5e 56 61 6c 75 65 20 69 73 20 61 20 42 4c  >.^Value is a BL
b510: 4f 42 20 74 68 61 74 20 69 73 20 28 4e 2d 31 32  OB that is (N-12
b520: 29 2f 32 20 62 79 74 65 73 20 69 6e 20 6c 65 6e  )/2 bytes in len
b530: 67 74 68 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c  gth..<tr><td val
b540: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
b550: 6e 74 65 72 3e 4e 26 23 78 32 32 36 35 3b 31 33  nter>N&#x2265;13
b560: 20 61 6e 64 20 6f 64 64 0a 20 20 20 20 3c 74 64   and odd.    <td
b570: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
b580: 6e 3d 63 65 6e 74 65 72 3e 28 4e 2d 31 33 29 2f  n=center>(N-13)/
b590: 32 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e  2<td align=left>
b5a0: 0a 5e 56 61 6c 75 65 20 69 73 20 61 20 73 74 72  .^Value is a str
b5b0: 69 6e 67 20 69 6e 20 74 68 65 20 5b 74 65 78 74  ing in the [text
b5c0: 20 65 6e 63 6f 64 69 6e 67 5d 20 61 6e 64 20 28   encoding] and (
b5d0: 4e 2d 31 33 29 2f 32 20 62 79 74 65 73 20 69 6e  N-13)/2 bytes in
b5e0: 20 6c 65 6e 67 74 68 2e 0a 5e 54 68 65 20 6e 75   length..^The nu
b5f0: 6c 20 74 65 72 6d 69 6e 61 74 6f 72 20 69 73 20  l terminator is 
b600: 6e 6f 74 20 73 74 6f 72 65 64 2e 0a 3c 2f 74 61  not stored..</ta
b610: 62 6c 65 3e 3c 2f 63 65 6e 74 65 72 3e 0a 0a 3c  ble></center>..<
b620: 70 3e 54 68 65 20 68 65 61 64 65 72 20 73 69 7a  p>The header siz
b630: 65 20 76 61 72 69 6e 74 0a 61 6e 64 20 73 65 72  e varint.and ser
b640: 69 61 6c 20 74 79 70 65 20 76 61 72 69 6e 74 73  ial type varints
b650: 20 77 69 6c 6c 20 75 73 75 61 6c 6c 79 20 63 6f   will usually co
b660: 6e 73 69 73 74 20 6f 66 20 61 20 73 69 6e 67 6c  nsist of a singl
b670: 65 20 62 79 74 65 2e 20 20 54 68 65 0a 73 65 72  e byte.  The.ser
b680: 69 61 6c 20 74 79 70 65 20 76 61 72 69 6e 74 73  ial type varints
b690: 20 66 6f 72 20 6c 61 72 67 65 20 73 74 72 69 6e   for large strin
b6a0: 67 73 20 61 6e 64 20 42 4c 4f 42 73 20 6d 69 67  gs and BLOBs mig
b6b0: 68 74 20 65 78 74 65 6e 64 20 74 6f 20 74 77 6f  ht extend to two
b6c0: 20 6f 72 20 74 68 72 65 65 0a 62 79 74 65 20 76   or three.byte v
b6d0: 61 72 69 6e 74 73 2c 20 62 75 74 20 74 68 61 74  arints, but that
b6e0: 20 69 73 20 74 68 65 20 65 78 63 65 70 74 69 6f   is the exceptio
b6f0: 6e 20 72 61 74 68 65 72 20 74 68 61 6e 20 74 68  n rather than th
b700: 65 20 72 75 6c 65 2e 20 0a 54 68 65 20 76 61 72  e rule. .The var
b710: 69 6e 74 20 66 6f 72 6d 61 74 20 69 73 20 76 65  int format is ve
b720: 72 79 20 65 66 66 69 63 69 65 6e 74 20 61 74 20  ry efficient at 
b730: 63 6f 64 69 6e 67 20 74 68 65 20 72 65 63 6f 72  coding the recor
b740: 64 20 68 65 61 64 65 72 2e 3c 2f 70 3e 0a 0a 3c  d header.</p>..<
b750: 70 3e 5e 54 68 65 20 76 61 6c 75 65 73 20 66 6f  p>^The values fo
b760: 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 6e  r each column in
b770: 20 74 68 65 20 72 65 63 6f 72 64 20 69 6d 6d 65   the record imme
b780: 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 20 74  diately follow t
b790: 68 65 20 68 65 61 64 65 72 2e 0a 5e 28 46 6f 72  he header..^(For
b7a0: 20 73 65 72 69 61 6c 20 74 79 70 65 73 20 30 2c   serial types 0,
b7b0: 20 38 2c 20 39 2c 20 31 32 2c 20 61 6e 64 20 31   8, 9, 12, and 1
b7c0: 33 2c 20 74 68 65 20 76 61 6c 75 65 20 69 73 20  3, the value is 
b7d0: 7a 65 72 6f 20 62 79 74 65 73 20 69 6e 0a 6c 65  zero bytes in.le
b7e0: 6e 67 74 68 2e 20 20 49 66 20 61 6c 6c 20 63 6f  ngth.  If all co
b7f0: 6c 75 6d 6e 73 20 61 72 65 20 6f 66 20 74 68 65  lumns are of the
b800: 73 65 20 74 79 70 65 73 20 74 68 65 6e 20 74 68  se types then th
b810: 65 20 62 6f 64 79 20 73 65 63 74 69 6f 6e 20 6f  e body section o
b820: 66 20 74 68 65 0a 72 65 63 6f 72 64 20 69 73 20  f the.record is 
b830: 65 6d 70 74 79 2e 29 5e 3c 2f 70 3e 0a 0a 3c 70  empty.)^</p>..<p
b840: 3e 5e 41 20 72 65 63 6f 72 64 20 6d 69 67 68 74  >^A record might
b850: 20 68 61 76 65 20 66 65 77 65 72 20 76 61 6c 75   have fewer valu
b860: 65 73 20 74 68 61 6e 20 74 68 65 20 6e 75 6d 62  es than the numb
b870: 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
b880: 20 74 68 65 0a 63 6f 72 72 65 73 70 6f 6e 64 69   the.correspondi
b890: 6e 67 20 74 61 62 6c 65 2e 20 20 54 68 69 73 20  ng table.  This 
b8a0: 63 61 6e 20 68 61 70 70 65 6e 2c 20 66 6f 72 20  can happen, for 
b8b0: 65 78 61 6d 70 6c 65 2c 20 61 66 74 65 72 20 61  example, after a
b8c0: 6e 0a 5b 41 4c 54 45 52 20 54 41 42 4c 45 7c 41  n.[ALTER TABLE|A
b8d0: 4c 54 45 52 20 54 41 42 4c 45 20 2e 2e 2e 20 41  LTER TABLE ... A
b8e0: 44 44 20 43 4f 4c 55 4d 4e 5d 20 53 51 4c 20 73  DD COLUMN] SQL s
b8f0: 74 61 74 65 6d 65 6e 74 20 68 61 73 20 69 6e 63  tatement has inc
b900: 72 65 61 73 65 64 0a 74 68 65 20 6e 75 6d 62 65  reased.the numbe
b910: 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
b920: 74 68 65 20 74 61 62 6c 65 20 73 63 68 65 6d 61  the table schema
b930: 20 77 69 74 68 6f 75 74 20 6d 6f 64 69 66 79 69   without modifyi
b940: 6e 67 20 70 72 65 65 78 69 73 74 69 6e 67 20 72  ng preexisting r
b950: 6f 77 73 0a 69 6e 20 74 68 65 20 74 61 62 6c 65  ows.in the table
b960: 2e 0a 5e 4d 69 73 73 69 6e 67 20 76 61 6c 75 65  ..^Missing value
b970: 73 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20  s at the end of 
b980: 74 68 65 20 72 65 63 6f 72 64 20 61 72 65 20 66  the record are f
b990: 69 6c 6c 65 64 20 69 6e 20 75 73 69 6e 67 20 74  illed in using t
b9a0: 68 65 0a 5b 64 65 66 61 75 6c 74 20 76 61 6c 75  he.[default valu
b9b0: 65 5d 20 66 6f 72 20 74 68 65 20 63 6f 72 72 65  e] for the corre
b9c0: 73 70 6f 6e 64 69 6e 67 20 63 6f 6c 75 6d 6e 73  sponding columns
b9d0: 20 64 65 66 69 6e 65 64 20 69 6e 20 74 68 65 20   defined in the 
b9e0: 74 61 62 6c 65 20 73 63 68 65 6d 61 2e 0a 3c 2f  table schema..</
b9f0: 70 3e 0a 0a 0a 3c 68 32 3e 52 65 63 6f 72 64 20  p>...<h2>Record 
ba00: 53 6f 72 74 20 4f 72 64 65 72 3c 2f 68 32 3e 0a  Sort Order</h2>.
ba10: 0a 3c 70 3e 54 68 65 20 6f 72 64 65 72 20 6f 66  .<p>The order of
ba20: 20 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e 64 65   keys in an inde
ba30: 78 20 62 2d 74 72 65 65 20 69 73 20 64 65 74 65  x b-tree is dete
ba40: 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 73 6f  rmined by the so
ba50: 72 74 20 6f 72 64 65 72 20 6f 66 0a 74 68 65 20  rt order of.the 
ba60: 72 65 63 6f 72 64 73 20 74 68 61 74 20 74 68 65  records that the
ba70: 20 6b 65 79 73 20 72 65 70 72 65 73 65 6e 74 2e   keys represent.
ba80: 20 20 52 65 63 6f 72 64 20 63 6f 6d 70 61 72 69    Record compari
ba90: 73 6f 6e 20 70 72 6f 67 72 65 73 73 65 73 20 63  son progresses c
baa0: 6f 6c 75 6d 6e 0a 62 79 20 63 6f 6c 75 6d 6e 2e  olumn.by column.
bab0: 20 20 43 6f 6c 75 6d 6e 73 20 6f 66 20 61 20 72    Columns of a r
bac0: 65 63 6f 72 64 20 61 72 65 20 65 78 61 6d 69 6e  ecord are examin
bad0: 65 64 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20  ed from left to 
bae0: 72 69 67 68 74 2e 20 20 54 68 65 0a 66 69 72 73  right.  The.firs
baf0: 74 20 70 61 69 72 20 6f 66 20 63 6f 6c 75 6d 6e  t pair of column
bb00: 73 20 74 68 61 74 20 61 72 65 20 6e 6f 74 20 65  s that are not e
bb10: 71 75 61 6c 20 64 65 74 65 72 6d 69 6e 65 73 20  qual determines 
bb20: 74 68 65 20 72 65 6c 61 74 69 76 65 20 6f 72 64  the relative ord
bb30: 65 72 0a 6f 66 20 74 68 65 20 74 77 6f 20 72 65  er.of the two re
bb40: 63 6f 72 64 73 2e 20 20 54 68 65 20 73 6f 72 74  cords.  The sort
bb50: 20 6f 72 64 65 72 20 6f 66 20 69 6e 64 69 76 69   order of indivi
bb60: 64 75 61 6c 20 63 6f 6c 75 6d 6e 73 20 69 73 20  dual columns is 
bb70: 61 73 0a 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a  as.follows:</p>.
bb80: 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 5e 28 4e 55 4c 4c  .<ol>.<li>^(NULL
bb90: 20 76 61 6c 75 65 73 20 28 73 65 72 69 61 6c 20   values (serial 
bba0: 74 79 70 65 20 30 29 20 73 6f 72 74 20 66 69 72  type 0) sort fir
bbb0: 73 74 2e 29 5e 0a 3c 6c 69 3e 5e 28 4e 75 6d 65  st.)^.<li>^(Nume
bbc0: 72 69 63 20 76 61 6c 75 65 73 20 28 73 65 72 69  ric values (seri
bbd0: 61 6c 20 74 79 70 65 73 20 31 20 74 68 72 6f 75  al types 1 throu
bbe0: 67 68 20 39 29 20 73 6f 72 74 20 61 66 74 65 72  gh 9) sort after
bbf0: 20 4e 55 4c 4c 73 0a 20 20 20 20 20 20 61 6e 64   NULLs.      and
bc00: 20 69 6e 20 6e 75 6d 65 72 69 63 20 6f 72 64 65   in numeric orde
bc10: 72 2e 29 5e 0a 3c 6c 69 3e 5e 28 54 65 78 74 20  r.)^.<li>^(Text 
bc20: 76 61 6c 75 65 73 20 28 6f 64 64 20 73 65 72 69  values (odd seri
bc30: 61 6c 20 74 79 70 65 73 20 31 33 20 61 6e 64 20  al types 13 and 
bc40: 6c 61 72 67 65 72 29 20 73 6f 72 74 20 61 66 74  larger) sort aft
bc50: 65 72 20 6e 75 6d 65 72 69 63 0a 20 20 20 20 76  er numeric.    v
bc60: 61 6c 75 65 73 20 69 6e 20 74 68 65 20 6f 72 64  alues in the ord
bc70: 65 72 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79  er determined by
bc80: 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 5b 63 6f   the columns [co
bc90: 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e  llating function
bca0: 5d 2e 29 5e 0a 3c 6c 69 3e 5e 28 42 4c 4f 42 20  ].)^.<li>^(BLOB 
bcb0: 76 61 6c 75 65 73 20 28 65 76 65 6e 20 73 65 72  values (even ser
bcc0: 69 61 6c 20 74 79 70 65 73 20 31 32 20 61 6e 64  ial types 12 and
bcd0: 20 6c 61 72 67 65 72 29 20 73 6f 72 74 20 6c 61   larger) sort la
bce0: 73 74 20 61 6e 64 20 69 6e 20 74 68 65 20 6f 72  st and in the or
bcf0: 64 65 72 20 0a 20 20 20 20 64 65 74 65 72 6d 69  der .    determi
bd00: 6e 65 64 20 62 79 20 6d 65 6d 63 6d 70 28 29 2e  ned by memcmp().
bd10: 29 5e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 41 20 5b  )^.</ol>..<p>A [
bd20: 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69  collating functi
bd30: 6f 6e 5d 20 66 6f 72 20 65 61 63 68 20 63 6f 6c  on] for each col
bd40: 75 6d 6e 20 69 73 20 6e 65 63 65 73 73 61 72 79  umn is necessary
bd50: 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 63 6f 6d   in order to com
bd60: 70 75 74 65 0a 74 68 65 20 6f 72 64 65 72 20 6f  pute.the order o
bd70: 66 20 74 65 78 74 20 66 69 65 6c 64 73 2e 0a 5e  f text fields..^
bd80: 28 53 51 4c 69 74 65 20 64 65 66 69 6e 65 73 20  (SQLite defines 
bd90: 74 68 72 65 65 20 62 75 69 6c 74 2d 69 6e 20 63  three built-in c
bda0: 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f  ollating functio
bdb0: 6e 73 3a 29 5e 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f  ns:)^.</p>..<blo
bdc0: 63 6b 71 75 6f 74 65 3e 3c 74 61 62 6c 65 20 62  ckquote><table b
bdd0: 6f 72 64 65 72 3d 30 20 63 65 6c 6c 73 70 61 63  order=0 cellspac
bde0: 69 6e 67 3d 31 30 3e 0a 3c 74 72 3e 3c 74 64 20  ing=10>.<tr><td 
bdf0: 76 61 6c 69 67 6e 3d 74 6f 70 3e 42 49 4e 41 52  valign=top>BINAR
be00: 59 0a 20 20 20 20 3c 74 64 3e 20 5e 28 54 68 65  Y.    <td> ^(The
be10: 20 62 75 69 6c 74 2d 69 6e 20 42 49 4e 41 52 59   built-in BINARY
be20: 20 63 6f 6c 6c 61 74 69 6f 6e 20 63 6f 6d 70 61   collation compa
be30: 72 65 73 20 73 74 72 69 6e 67 73 20 62 79 74 65  res strings byte
be40: 20 62 79 20 62 79 74 65 0a 20 20 20 20 20 20 20   by byte.       
be50: 20 75 73 69 6e 67 20 74 68 65 20 6d 65 6d 63 6d   using the memcm
be60: 70 28 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20 20  p() function.   
be70: 20 20 20 20 20 66 72 6f 6d 20 74 68 65 20 73 74       from the st
be80: 61 6e 64 61 72 64 20 43 20 6c 69 62 72 61 72 79  andard C library
be90: 2e 29 5e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  .)^.<tr><td vali
bea0: 67 6e 3d 74 6f 70 3e 4e 4f 43 41 53 45 0a 20 20  gn=top>NOCASE.  
beb0: 20 20 3c 74 64 3e 20 5e 28 54 68 65 20 4e 4f 43    <td> ^(The NOC
bec0: 41 53 45 20 63 6f 6c 6c 61 74 69 6f 6e 20 69 73  ASE collation is
bed0: 20 6c 69 6b 65 20 42 49 4e 41 52 59 20 65 78 63   like BINARY exc
bee0: 65 70 74 20 74 68 61 74 20 75 70 70 65 72 63 61  ept that upperca
bef0: 73 65 0a 20 20 20 20 20 20 20 20 41 53 43 49 49  se.        ASCII
bf00: 20 63 68 61 72 61 63 74 65 72 73 20 28 27 41 27   characters ('A'
bf10: 20 74 68 72 6f 75 67 68 20 27 5a 27 29 0a 20 20   through 'Z').  
bf20: 20 20 20 20 20 20 61 72 65 20 66 6f 6c 64 65 64        are folded
bf30: 20 69 6e 74 6f 20 74 68 65 69 72 20 6c 6f 77 65   into their lowe
bf40: 72 63 61 73 65 20 65 71 75 69 76 61 6c 65 6e 74  rcase equivalent
bf50: 73 20 70 72 69 6f 72 20 74 6f 20 72 75 6e 6e 69  s prior to runni
bf60: 6e 67 20 74 68 65 0a 20 20 20 20 20 20 20 20 63  ng the.        c
bf70: 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 4f 6e 6c 79  omparison.  Only
bf80: 20 41 53 43 49 49 20 63 68 61 72 61 63 74 65 72   ASCII character
bf90: 73 20 61 72 65 20 63 61 73 65 2d 66 6f 6c 64 65  s are case-folde
bfa0: 64 2e 29 5e 0a 20 20 20 20 20 20 20 20 5e 28 4e  d.)^.        ^(N
bfb0: 4f 43 41 53 45 0a 20 20 20 20 20 20 20 20 64 6f  OCASE.        do
bfc0: 65 73 20 6e 6f 74 20 69 6d 70 6c 65 6d 65 6e 74  es not implement
bfd0: 20 61 20 67 65 6e 65 72 61 6c 20 70 75 72 70 6f   a general purpo
bfe0: 73 65 20 75 6e 69 63 6f 64 65 20 63 61 73 65 6c  se unicode casel
bff0: 65 73 73 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 29  ess comparison.)
c000: 5e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  ^.<tr><td valign
c010: 3d 74 6f 70 3e 52 54 52 49 4d 0a 20 20 20 20 3c  =top>RTRIM.    <
c020: 74 64 3e 20 5e 28 52 54 52 49 4d 20 69 73 20 6c  td> ^(RTRIM is l
c030: 69 6b 65 20 42 49 4e 41 52 59 20 65 78 63 65 70  ike BINARY excep
c040: 74 20 74 68 61 74 20 65 78 74 72 61 20 73 70 61  t that extra spa
c050: 63 65 73 20 61 74 20 74 68 65 20 65 6e 64 20 6f  ces at the end o
c060: 66 20 65 69 74 68 65 72 0a 20 20 20 20 20 20 20  f either.       
c070: 20 20 73 74 72 69 6e 67 20 64 6f 20 6e 6f 74 20    string do not 
c080: 63 68 61 6e 67 65 20 74 68 65 20 72 65 73 75 6c  change the resul
c090: 74 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  t.  In other wor
c0a0: 64 73 2c 20 73 74 72 69 6e 67 73 20 77 69 6c 6c  ds, strings will
c0b0: 0a 20 20 20 20 20 20 20 20 20 63 6f 6d 70 61 72  .         compar
c0c0: 65 20 65 71 75 61 6c 20 74 6f 20 6f 6e 65 20 61  e equal to one a
c0d0: 6e 6f 74 68 65 72 20 61 73 20 6c 6f 6e 67 20 61  nother as long a
c0e0: 73 20 74 68 65 79 0a 20 20 20 20 20 20 20 20 20  s they.         
c0f0: 64 69 66 66 65 72 20 6f 6e 6c 79 20 69 6e 20 74  differ only in t
c100: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 73 70 61  he number of spa
c110: 63 65 73 20 61 74 20 74 68 65 20 65 6e 64 2e 29  ces at the end.)
c120: 5e 0a 3c 2f 74 61 62 6c 65 3e 3c 2f 62 6c 6f 63  ^.</table></bloc
c130: 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 5e 41 64 64  kquote>..<p>^Add
c140: 69 74 69 6f 6e 61 6c 20 61 70 70 6c 69 63 61 74  itional applicat
c150: 69 6f 6e 2d 73 70 65 63 69 66 69 63 20 63 6f 6c  ion-specific col
c160: 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 73  lating functions
c170: 20 63 61 6e 20 62 65 20 61 64 64 65 64 20 74 6f   can be added to
c180: 0a 53 51 4c 69 74 65 20 75 73 69 6e 67 20 74 68  .SQLite using th
c190: 65 20 5b 73 71 6c 69 74 65 33 5f 63 72 65 61 74  e [sqlite3_creat
c1a0: 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 29 5d 20 69  e_collation()] i
c1b0: 6e 74 65 72 66 61 63 65 2e 3c 2f 70 3e 0a 0a 3c  nterface.</p>..<
c1c0: 70 3e 5e 54 68 65 20 64 65 66 61 75 6c 74 20 63  p>^The default c
c1d0: 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f  ollating functio
c1e0: 6e 20 66 6f 72 20 61 6c 6c 20 73 74 72 69 6e 67  n for all string
c1f0: 73 20 69 73 20 42 49 4e 41 52 59 2e 0a 5e 41 6c  s is BINARY..^Al
c200: 74 65 72 6e 61 74 69 76 65 20 63 6f 6c 6c 61 74  ternative collat
c210: 69 6e 67 20 66 75 6e 63 74 69 6f 6e 73 20 66 6f  ing functions fo
c220: 72 20 74 61 62 6c 65 20 63 6f 6c 75 6d 6e 73 20  r table columns 
c230: 63 61 6e 20 62 65 20 73 70 65 63 69 66 69 65 64  can be specified
c240: 20 69 6e 20 74 68 65 0a 5b 43 52 45 41 54 45 20   in the.[CREATE 
c250: 54 41 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74  TABLE] statement
c260: 20 75 73 69 6e 67 20 74 68 65 20 43 4f 4c 4c 41   using the COLLA
c270: 54 45 20 63 6c 61 75 73 65 20 6f 6e 20 74 68 65  TE clause on the
c280: 20 5b 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74   [column definit
c290: 69 6f 6e 5d 2e 0a 5e 57 68 65 6e 20 61 20 63 6f  ion]..^When a co
c2a0: 6c 75 6d 6e 20 69 73 20 69 6e 64 65 78 65 64 2c  lumn is indexed,
c2b0: 20 74 68 65 20 73 61 6d 65 20 63 6f 6c 6c 61 74   the same collat
c2c0: 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 73 70 65  ing function spe
c2d0: 63 69 66 69 65 64 20 69 6e 20 74 68 65 0a 5b 43  cified in the.[C
c2e0: 52 45 41 54 45 20 54 41 42 4c 45 5d 20 73 74 61  REATE TABLE] sta
c2f0: 74 65 6d 65 6e 74 20 69 73 20 75 73 65 64 20 66  tement is used f
c300: 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 6e  or the column in
c310: 20 74 68 65 20 69 6e 64 65 78 2c 20 62 79 20 64   the index, by d
c320: 65 66 61 75 6c 74 2c 0a 74 68 6f 75 67 68 20 74  efault,.though t
c330: 68 69 73 20 63 61 6e 20 62 65 20 6f 76 65 72 72  his can be overr
c340: 69 64 64 65 6e 20 75 73 69 6e 67 20 61 20 43 4f  idden using a CO
c350: 4c 4c 41 54 45 20 63 6c 61 75 73 65 20 69 6e 20  LLATE clause in 
c360: 74 68 65 20 0a 5b 43 52 45 41 54 45 20 49 4e 44  the .[CREATE IND
c370: 45 58 5d 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a  EX] statement...
c380: 3c 68 32 3e 52 65 70 72 65 73 65 6e 74 61 74 69  <h2>Representati
c390: 6f 6e 20 4f 66 20 53 51 4c 20 54 61 62 6c 65 73  on Of SQL Tables
c3a0: 3c 2f 68 32 3e 0a 0a 3c 70 3e 20 5e 45 61 63 68  </h2>..<p> ^Each
c3b0: 20 6f 72 64 69 6e 61 72 79 20 53 51 4c 20 74 61   ordinary SQL ta
c3c0: 62 6c 65 20 69 6e 20 74 68 65 20 64 61 74 61 62  ble in the datab
c3d0: 61 73 65 20 73 63 68 65 6d 61 20 69 73 20 72 65  ase schema is re
c3e0: 70 72 65 73 65 6e 74 65 64 20 6f 6e 2d 64 69 73  presented on-dis
c3f0: 6b 0a 62 79 20 61 20 74 61 62 6c 65 20 62 2d 74  k.by a table b-t
c400: 72 65 65 2e 20 20 5e 45 61 63 68 20 65 6e 74 72  ree.  ^Each entr
c410: 79 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 62  y in the table b
c420: 2d 74 72 65 65 20 63 6f 72 72 65 73 70 6f 6e 64  -tree correspond
c430: 73 20 74 6f 20 61 20 72 6f 77 0a 6f 66 20 74 68  s to a row.of th
c440: 65 20 53 51 4c 20 74 61 62 6c 65 2e 20 20 5e 54  e SQL table.  ^T
c450: 68 65 20 5b 72 6f 77 69 64 5d 20 6f 66 20 74 68  he [rowid] of th
c460: 65 20 53 51 4c 20 74 61 62 6c 65 20 69 73 20 74  e SQL table is t
c470: 68 65 20 36 34 2d 62 69 74 20 73 69 67 6e 65 64  he 64-bit signed
c480: 0a 69 6e 74 65 67 65 72 20 6b 65 79 20 66 6f 72  .integer key for
c490: 20 65 61 63 68 20 65 6e 74 72 79 20 69 6e 20 74   each entry in t
c4a0: 68 65 20 74 61 62 6c 65 20 62 2d 74 72 65 65 2e  he table b-tree.
c4b0: 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20 63  </p>..<p> ^The c
c4c0: 6f 6e 74 65 6e 74 20 6f 66 20 65 61 63 68 20 53  ontent of each S
c4d0: 51 4c 20 74 61 62 6c 65 20 72 6f 77 20 69 73 20  QL table row is 
c4e0: 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 64 61  stored in the da
c4f0: 74 61 62 61 73 65 20 66 69 6c 65 20 62 79 0a 66  tabase file by.f
c500: 69 72 73 74 20 63 6f 6d 62 69 6e 69 6e 67 20 74  irst combining t
c510: 68 65 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65  he values in the
c520: 20 76 61 72 69 6f 75 73 20 63 6f 6c 75 6d 6e 73   various columns
c530: 20 69 6e 74 6f 20 61 20 62 79 74 65 20 61 72 72   into a byte arr
c540: 61 79 0a 69 6e 20 74 68 65 20 72 65 63 6f 72 64  ay.in the record
c550: 20 66 6f 72 6d 61 74 2c 20 74 68 65 6e 20 73 74   format, then st
c560: 6f 72 69 6e 67 20 74 68 61 74 20 62 79 74 65 20  oring that byte 
c570: 61 72 72 61 79 20 61 73 20 74 68 65 20 70 61 79  array as the pay
c580: 6c 6f 61 64 20 69 6e 0a 61 6e 20 65 6e 74 72 79  load in.an entry
c590: 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 62 2d   in the table b-
c5a0: 74 72 65 65 2e 20 20 5e 54 68 65 20 6f 72 64 65  tree.  ^The orde
c5b0: 72 20 6f 66 20 76 61 6c 75 65 73 20 69 6e 20 74  r of values in t
c5c0: 68 65 20 72 65 63 6f 72 64 20 69 73 0a 74 68 65  he record is.the
c5d0: 20 73 61 6d 65 20 61 73 20 74 68 65 20 6f 72 64   same as the ord
c5e0: 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
c5f0: 20 74 68 65 20 53 51 4c 20 74 61 62 6c 65 20 64   the SQL table d
c600: 65 66 69 6e 69 74 69 6f 6e 2e 0a 5e 57 68 65 6e  efinition..^When
c610: 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 69 6e   an SQL table in
c620: 63 6c 75 64 65 73 20 61 6e 0a 5b 49 4e 54 45 47  cludes an.[INTEG
c630: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 5d 20  ER PRIMARY KEY] 
c640: 63 6f 6c 75 6d 6e 20 28 77 68 69 63 68 20 61 6c  column (which al
c650: 69 61 73 65 73 20 74 68 65 20 5b 72 6f 77 69 64  iases the [rowid
c660: 5d 29 20 74 68 65 6e 20 74 68 61 74 0a 63 6f 6c  ]) then that.col
c670: 75 6d 6e 20 61 70 70 65 61 72 73 20 69 6e 20 74  umn appears in t
c680: 68 65 20 72 65 63 6f 72 64 20 61 73 20 61 20 4e  he record as a N
c690: 55 4c 4c 20 76 61 6c 75 65 2e 20 20 5e 53 51 4c  ULL value.  ^SQL
c6a0: 69 74 65 20 77 69 6c 6c 20 61 6c 77 61 79 73 20  ite will always 
c6b0: 75 73 65 0a 74 68 65 20 74 61 62 6c 65 20 62 2d  use.the table b-
c6c0: 74 72 65 65 20 6b 65 79 20 72 61 74 68 65 72 20  tree key rather 
c6d0: 74 68 61 6e 20 74 68 65 20 4e 55 4c 4c 20 76 61  than the NULL va
c6e0: 6c 75 65 20 77 68 65 6e 20 72 65 66 65 72 65 6e  lue when referen
c6f0: 63 69 6e 67 20 74 68 65 0a 5b 49 4e 54 45 47 45  cing the.[INTEGE
c700: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 5d 20 63  R PRIMARY KEY] c
c710: 6f 6c 75 6d 6e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20  olumn.</p>..<p> 
c720: 5e 49 66 20 74 68 65 20 5b 61 66 66 69 6e 69 74  ^If the [affinit
c730: 79 5d 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 69  y] of a column i
c740: 73 20 52 45 41 4c 20 61 6e 64 20 74 68 61 74 20  s REAL and that 
c750: 63 6f 6c 75 6d 6e 20 63 6f 6e 74 61 69 6e 73 20  column contains 
c760: 61 0a 76 61 6c 75 65 20 74 68 61 74 20 63 61 6e  a.value that can
c770: 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20 74 6f   be converted to
c780: 20 61 6e 20 69 6e 74 65 67 65 72 20 77 69 74 68   an integer with
c790: 6f 75 74 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f  out loss of info
c7a0: 72 6d 61 74 69 6f 6e 0a 28 69 66 20 74 68 65 20  rmation.(if the 
c7b0: 76 61 6c 75 65 20 63 6f 6e 74 61 69 6e 73 20 6e  value contains n
c7c0: 6f 20 66 72 61 63 74 69 6f 6e 61 6c 20 70 61 72  o fractional par
c7d0: 74 20 61 6e 64 20 69 73 20 6e 6f 74 20 74 6f 6f  t and is not too
c7e0: 20 6c 61 72 67 65 20 74 6f 20 62 65 0a 72 65 70   large to be.rep
c7f0: 72 65 73 65 6e 74 65 64 20 61 73 20 61 6e 20 69  resented as an i
c800: 6e 74 65 67 65 72 29 20 74 68 65 6e 20 74 68 65  nteger) then the
c810: 20 63 6f 6c 75 6d 6e 20 6d 61 79 20 62 65 20 73   column may be s
c820: 74 6f 72 65 64 20 69 6e 20 74 68 65 20 72 65 63  tored in the rec
c830: 6f 72 64 0a 61 73 20 61 6e 20 69 6e 74 65 67 65  ord.as an intege
c840: 72 2e 20 20 5e 53 51 4c 69 74 65 20 77 69 6c 6c  r.  ^SQLite will
c850: 20 63 6f 6e 76 65 72 74 20 74 68 65 20 76 61 6c   convert the val
c860: 75 65 20 62 61 63 6b 20 74 6f 20 66 6c 6f 61 74  ue back to float
c870: 69 6e 67 0a 70 6f 69 6e 74 20 77 68 65 6e 20 65  ing.point when e
c880: 78 74 72 61 63 74 69 6e 67 20 69 74 20 66 72 6f  xtracting it fro
c890: 6d 20 74 68 65 20 72 65 63 6f 72 64 2e 3c 2f 70  m the record.</p
c8a0: 3e 0a 0a 3c 68 32 3e 52 65 70 72 65 73 65 6e 74  >..<h2>Represent
c8b0: 61 74 69 6f 6e 20 6f 66 20 57 49 54 48 4f 55 54  ation of WITHOUT
c8c0: 20 52 4f 57 49 44 20 54 61 62 6c 65 73 3c 2f 68   ROWID Tables</h
c8d0: 32 3e 0a 0a 3c 70 3e 5e 49 66 20 61 6e 20 53 51  2>..<p>^If an SQ
c8e0: 4c 20 74 61 62 6c 65 20 69 73 20 63 72 65 61 74  L table is creat
c8f0: 65 64 20 75 73 69 6e 67 20 74 68 65 20 22 57 49  ed using the "WI
c900: 54 48 4f 55 54 20 52 4f 57 49 44 22 20 63 6c 61  THOUT ROWID" cla
c910: 75 73 65 20 61 74 20 74 68 65 0a 65 6e 64 20 6f  use at the.end o
c920: 66 20 69 74 73 20 43 52 45 41 54 45 20 54 41 42  f its CREATE TAB
c930: 4c 45 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68  LE statement, th
c940: 65 6e 20 74 68 61 74 20 74 61 62 6c 65 20 69 73  en that table is
c950: 20 61 20 5b 57 49 54 48 4f 55 54 20 52 4f 57 49   a [WITHOUT ROWI
c960: 44 5d 0a 74 61 62 6c 65 20 61 6e 64 20 75 73 65  D].table and use
c970: 73 20 61 20 64 69 66 66 65 72 65 6e 74 20 6f 6e  s a different on
c980: 2d 64 69 73 6b 20 72 65 70 72 65 73 65 6e 74 61  -disk representa
c990: 74 69 6f 6e 2e 20 20 5e 41 20 57 49 54 48 4f 55  tion.  ^A WITHOU
c9a0: 54 20 52 4f 57 49 44 0a 74 61 62 6c 65 20 75 73  T ROWID.table us
c9b0: 65 73 20 61 6e 20 69 6e 64 65 78 20 62 2d 74 72  es an index b-tr
c9c0: 65 65 20 72 61 74 68 65 72 20 74 68 61 6e 20 61  ee rather than a
c9d0: 20 74 61 62 6c 65 20 62 2d 74 72 65 65 20 66 6f   table b-tree fo
c9e0: 72 20 73 74 6f 72 61 67 65 2e 0a 5e 54 68 65 20  r storage..^The 
c9f0: 6b 65 79 20 66 6f 72 20 65 61 63 68 20 65 6e 74  key for each ent
ca00: 72 79 20 69 6e 20 74 68 65 20 57 49 54 48 4f 55  ry in the WITHOU
ca10: 54 20 52 4f 57 49 44 20 62 2d 74 72 65 65 20 69  T ROWID b-tree i
ca20: 73 20 61 20 72 65 63 6f 72 64 20 63 6f 6d 70 6f  s a record compo
ca30: 73 65 64 0a 6f 66 20 74 68 65 20 63 6f 6c 75 6d  sed.of the colum
ca40: 6e 73 20 6f 66 20 74 68 65 20 50 52 49 4d 41 52  ns of the PRIMAR
ca50: 59 20 4b 45 59 20 66 6f 6c 6c 6f 77 65 64 20 62  Y KEY followed b
ca60: 79 20 61 6c 6c 20 72 65 6d 61 69 6e 69 6e 67 20  y all remaining 
ca70: 63 6f 6c 75 6d 6e 73 20 6f 66 0a 74 68 65 20 74  columns of.the t
ca80: 61 62 6c 65 2e 20 20 5e 54 68 65 20 70 72 69 6d  able.  ^The prim
ca90: 61 72 79 20 6b 65 79 20 63 6f 6c 75 6d 6e 73 20  ary key columns 
caa0: 61 70 70 65 61 72 20 69 6e 20 74 68 65 20 6f 72  appear in the or
cab0: 64 65 72 20 74 68 65 79 20 74 68 65 79 20 77 65  der they they we
cac0: 72 65 0a 64 65 63 6c 61 72 65 64 20 69 6e 20 74  re.declared in t
cad0: 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63  he PRIMARY KEY c
cae0: 6c 61 75 73 65 20 61 6e 64 20 74 68 65 20 72 65  lause and the re
caf0: 6d 61 69 6e 69 6e 67 20 63 6f 6c 75 6d 6e 73 20  maining columns 
cb00: 61 70 70 65 61 72 20 69 6e 0a 74 68 65 20 6f 72  appear in.the or
cb10: 64 65 72 20 74 68 65 79 20 6f 63 63 75 72 20 69  der they occur i
cb20: 6e 20 74 68 65 20 43 52 45 41 54 45 20 54 41 42  n the CREATE TAB
cb30: 4c 45 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a 3c  LE statement...<
cb40: 70 3e 5e 48 65 6e 63 65 2c 20 74 68 65 20 63 6f  p>^Hence, the co
cb50: 6e 74 65 6e 74 20 65 6e 63 6f 64 69 6e 67 20 66  ntent encoding f
cb60: 6f 72 20 61 20 57 49 54 48 4f 55 54 20 52 4f 57  or a WITHOUT ROW
cb70: 49 44 20 74 61 62 6c 65 20 69 73 20 74 68 65 20  ID table is the 
cb80: 73 61 6d 65 0a 61 73 20 74 68 65 20 63 6f 6e 74  same.as the cont
cb90: 65 6e 74 20 65 6e 63 6f 64 69 6e 67 20 66 6f 72  ent encoding for
cba0: 20 61 6e 20 6f 72 64 69 6e 61 72 79 20 72 6f 77   an ordinary row
cbb0: 69 64 20 74 61 62 6c 65 2c 20 65 78 63 65 70 74  id table, except
cbc0: 20 74 68 61 74 20 74 68 65 0a 6f 72 64 65 72 20   that the.order 
cbd0: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 69  of the columns i
cbe0: 73 20 72 65 61 72 72 61 6e 67 65 64 20 73 6f 20  s rearranged so 
cbf0: 74 68 61 74 20 50 52 49 4d 41 52 59 20 4b 45 59  that PRIMARY KEY
cc00: 20 63 6f 6c 75 6d 6e 73 20 63 6f 6d 65 0a 66 69   columns come.fi
cc10: 72 73 74 2c 20 61 6e 64 20 74 68 65 20 63 6f 6e  rst, and the con
cc20: 74 65 6e 74 20 69 73 20 75 73 65 64 20 61 73 20  tent is used as 
cc30: 74 68 65 20 6b 65 79 20 69 6e 20 61 6e 20 69 6e  the key in an in
cc40: 64 65 78 20 62 2d 74 72 65 65 20 72 61 74 68 65  dex b-tree rathe
cc50: 72 0a 74 68 61 6e 20 61 73 20 74 68 65 20 64 61  r.than as the da
cc60: 74 61 20 69 6e 20 61 20 74 61 62 6c 65 20 62 2d  ta in a table b-
cc70: 74 72 65 65 2e 0a 5e 54 68 65 20 73 70 65 63 69  tree..^The speci
cc80: 61 6c 20 65 6e 63 6f 64 69 6e 67 20 72 75 6c 65  al encoding rule
cc90: 73 20 66 6f 72 20 63 6f 6c 75 6d 6e 73 20 77 69  s for columns wi
cca0: 74 68 20 52 45 41 4c 20 61 66 66 69 6e 69 74 79  th REAL affinity
ccb0: 0a 61 70 70 6c 79 20 74 6f 20 57 49 54 48 4f 55  .apply to WITHOU
ccc0: 54 20 52 4f 57 49 44 20 74 61 62 6c 65 73 20 74  T ROWID tables t
ccd0: 68 65 20 73 61 6d 65 20 61 73 20 74 68 65 79 20  he same as they 
cce0: 64 6f 20 77 69 74 68 20 72 6f 77 69 64 20 74 61  do with rowid ta
ccf0: 62 6c 65 73 2e 0a 0a 3c 68 32 3e 52 65 70 72 65  bles...<h2>Repre
cd00: 73 65 6e 74 61 74 69 6f 6e 20 4f 66 20 53 51 4c  sentation Of SQL
cd10: 20 49 6e 64 69 63 65 73 3c 2f 68 32 3e 0a 0a 3c   Indices</h2>..<
cd20: 70 3e 5e 45 61 63 68 20 53 51 4c 20 69 6e 64 65  p>^Each SQL inde
cd30: 78 2c 20 77 68 65 74 68 65 72 20 65 78 70 6c 69  x, whether expli
cd40: 63 69 74 6c 79 20 64 65 63 6c 61 72 65 64 20 76  citly declared v
cd50: 69 61 20 61 20 5b 43 52 45 41 54 45 20 49 4e 44  ia a [CREATE IND
cd60: 45 58 5d 20 73 74 61 74 65 6d 65 6e 74 0a 6f 72  EX] statement.or
cd70: 20 69 6d 70 6c 69 65 64 20 62 79 20 61 20 55 4e   implied by a UN
cd80: 49 51 55 45 20 6f 72 20 50 52 49 4d 41 52 59 20  IQUE or PRIMARY 
cd90: 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 2c 20  KEY constraint, 
cda0: 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 61  corresponds to a
cdb0: 6e 20 0a 69 6e 64 65 78 20 62 2d 74 72 65 65 20  n .index b-tree 
cdc0: 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
cdd0: 66 69 6c 65 2e 0a 5e 45 61 63 68 20 65 6e 74 72  file..^Each entr
cde0: 79 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20 62  y in the index b
cdf0: 2d 74 72 65 65 20 63 6f 72 72 65 73 70 6f 6e 64  -tree correspond
ce00: 73 20 74 6f 20 61 20 73 69 6e 67 6c 65 20 72 6f  s to a single ro
ce10: 77 20 69 6e 20 74 68 65 20 0a 61 73 73 6f 63 69  w in the .associ
ce20: 61 74 65 64 20 53 51 4c 20 74 61 62 6c 65 2e 0a  ated SQL table..
ce30: 5e 54 68 65 20 6b 65 79 20 74 6f 20 61 6e 20 69  ^The key to an i
ce40: 6e 64 65 78 20 62 2d 74 72 65 65 20 69 73 0a 61  ndex b-tree is.a
ce50: 20 72 65 63 6f 72 64 20 63 6f 6d 70 6f 73 65 64   record composed
ce60: 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20   of the columns 
ce70: 74 68 61 74 20 61 72 65 20 62 65 69 6e 67 20 69  that are being i
ce80: 6e 64 65 78 65 64 20 66 6f 6c 6c 6f 77 65 64 20  ndexed followed 
ce90: 62 79 20 74 68 65 0a 6b 65 79 20 6f 66 20 74 68  by the.key of th
cea0: 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
ceb0: 74 61 62 6c 65 20 72 6f 77 2e 20 20 46 6f 72 20  table row.  For 
cec0: 6f 72 64 69 6e 61 72 79 20 74 61 62 6c 65 73 2c  ordinary tables,
ced0: 20 74 68 65 20 72 6f 77 20 6b 65 79 20 69 73 0a   the row key is.
cee0: 74 68 65 20 5b 72 6f 77 69 64 5d 2c 20 61 6e 64  the [rowid], and
cef0: 20 66 6f 72 20 5b 57 49 54 48 4f 55 54 20 52 4f   for [WITHOUT RO
cf00: 57 49 44 5d 20 74 61 62 6c 65 73 20 74 68 65 20  WID] tables the 
cf10: 72 6f 77 20 6b 65 79 20 69 73 20 74 68 65 20 50  row key is the P
cf20: 52 49 4d 41 52 59 20 4b 45 59 2e 0a 42 65 63 61  RIMARY KEY..Beca
cf30: 75 73 65 20 65 76 65 72 79 20 72 6f 77 20 69 6e  use every row in
cf40: 20 74 68 65 20 74 61 62 6c 65 20 68 61 73 20 61   the table has a
cf50: 20 75 6e 69 71 75 65 20 72 6f 77 20 6b 65 79 2c   unique row key,
cf60: 0a 61 6c 6c 20 6b 65 79 73 20 69 6e 20 61 6e 20  .all keys in an 
cf70: 69 6e 64 65 78 20 61 72 65 20 75 6e 69 71 75 65  index are unique
cf80: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 6e 20 61 20  .</p>..<p>^In a 
cf90: 6e 6f 72 6d 61 6c 20 69 6e 64 65 78 2c 20 74 68  normal index, th
cfa0: 65 72 65 20 69 73 20 61 20 6f 6e 65 2d 74 6f 2d  ere is a one-to-
cfb0: 6f 6e 65 20 6d 61 70 70 69 6e 67 20 62 65 74 77  one mapping betw
cfc0: 65 65 6e 20 72 6f 77 73 20 69 6e 20 61 20 0a 74  een rows in a .t
cfd0: 61 62 6c 65 20 61 6e 64 20 65 6e 74 72 69 65 73  able and entries
cfe0: 20 69 6e 20 65 61 63 68 20 69 6e 64 65 78 20 61   in each index a
cff0: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
d000: 68 61 74 20 74 61 62 6c 65 2e 0a 5e 48 6f 77 65  hat table..^Howe
d010: 76 65 72 2c 20 69 6e 20 61 20 5b 70 61 72 74 69  ver, in a [parti
d020: 61 6c 20 69 6e 64 65 78 5d 2c 20 74 68 65 20 69  al index], the i
d030: 6e 64 65 78 20 62 2d 74 72 65 65 20 6f 6e 6c 79  ndex b-tree only
d040: 20 63 6f 6e 74 61 69 6e 73 20 65 6e 74 72 69 65   contains entrie
d050: 73 0a 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  s.corresponding 
d060: 74 6f 20 74 61 62 6c 65 20 72 6f 77 73 20 66 6f  to table rows fo
d070: 72 20 77 68 69 63 68 20 74 68 65 20 57 48 45 52  r which the WHER
d080: 45 20 63 6c 61 75 73 65 20 65 78 70 72 65 73 73  E clause express
d090: 69 6f 6e 20 6f 6e 20 74 68 65 0a 43 52 45 41 54  ion on the.CREAT
d0a0: 45 20 49 4e 44 45 58 20 73 74 61 74 65 6d 65 6e  E INDEX statemen
d0b0: 74 20 69 73 20 74 72 75 65 2e 0a 5e 43 6f 72 72  t is true..^Corr
d0c0: 65 73 70 6f 6e 64 69 6e 67 20 72 6f 77 73 20 69  esponding rows i
d0d0: 6e 20 74 68 65 20 69 6e 64 65 78 20 61 6e 64 20  n the index and 
d0e0: 74 61 62 6c 65 20 62 2d 74 72 65 65 73 20 73 68  table b-trees sh
d0f0: 61 72 65 20 74 68 65 20 73 61 6d 65 20 72 6f 77  are the same row
d100: 69 64 0a 6f 72 20 70 72 69 6d 61 72 79 20 6b 65  id.or primary ke
d110: 79 20 76 61 6c 75 65 73 20 61 6e 64 20 63 6f 6e  y values and con
d120: 74 61 69 6e 20 74 68 65 20 73 61 6d 65 20 76 61  tain the same va
d130: 6c 75 65 20 66 6f 72 20 61 6c 6c 20 69 6e 64 65  lue for all inde
d140: 78 65 64 20 63 6f 6c 75 6d 6e 73 2e 3c 2f 70 3e  xed columns.</p>
d150: 0a 0a 3c 68 33 3e 53 75 70 70 72 65 73 73 69 6f  ..<h3>Suppressio
d160: 6e 20 6f 66 20 72 65 64 75 6e 64 61 6e 74 20 63  n of redundant c
d170: 6f 6c 75 6d 6e 73 20 69 6e 20 57 49 54 48 4f 55  olumns in WITHOU
d180: 54 20 52 4f 57 49 44 20 73 65 63 6f 6e 64 61 72  T ROWID secondar
d190: 79 20 69 6e 64 65 78 65 64 0a 3c 2f 68 33 3e 0a  y indexed.</h3>.
d1a0: 0a 3c 70 3e 20 5e 49 6e 20 61 6e 20 69 6e 64 65  .<p> ^In an inde
d1b0: 78 20 6f 6e 20 61 20 57 49 54 48 4f 55 54 20 52  x on a WITHOUT R
d1c0: 4f 57 49 44 20 74 61 62 6c 65 2c 20 69 66 20 6f  OWID table, if o
d1d0: 6e 65 20 6f 72 20 6d 6f 72 65 20 6f 66 20 74 68  ne or more of th
d1e0: 65 20 63 6f 6c 75 6d 6e 73 0a 6f 66 20 74 68 65  e columns.of the
d1f0: 20 74 61 62 6c 65 20 50 52 49 4d 41 52 59 20 4b   table PRIMARY K
d200: 45 59 20 61 72 65 20 61 6c 73 6f 20 63 6f 6c 75  EY are also colu
d210: 6d 6e 73 20 6f 66 20 74 68 65 20 69 6e 64 65 78  mns of the index
d220: 2c 20 74 68 65 6e 20 74 68 65 0a 69 6e 64 65 78  , then the.index
d230: 65 64 20 63 6f 6c 75 6d 6e 20 69 73 20 6e 6f 74  ed column is not
d240: 20 72 65 70 65 61 74 65 64 20 69 6e 20 74 68 65   repeated in the
d250: 20 74 61 62 6c 65 2d 6b 65 79 20 73 75 66 66 69   table-key suffi
d260: 78 20 6f 6e 20 74 68 65 20 65 6e 64 20 6f 66 0a  x on the end of.
d270: 74 68 65 20 69 6e 64 65 78 20 72 65 63 6f 72 64  the index record
d280: 2e 20 20 5e 28 41 73 20 61 6e 20 65 78 61 6d 70  .  ^(As an examp
d290: 6c 65 2c 20 63 6f 6e 73 69 64 65 72 20 74 68 65  le, consider the
d2a0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 53 51 4c 3a 0a   following SQL:.
d2b0: 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72  .<blockquote><pr
d2c0: 65 3e 0a 43 52 45 41 54 45 20 54 41 42 4c 45 20  e>.CREATE TABLE 
d2d0: 65 78 32 35 28 61 2c 62 2c 63 2c 64 2c 65 2c 50  ex25(a,b,c,d,e,P
d2e0: 52 49 4d 41 52 59 20 4b 45 59 28 64 2c 63 2c 61  RIMARY KEY(d,c,a
d2f0: 29 29 20 57 49 54 48 4f 55 54 20 72 6f 77 69 64  )) WITHOUT rowid
d300: 3b 0a 43 52 45 41 54 45 20 49 4e 44 45 58 20 65  ;.CREATE INDEX e
d310: 78 32 35 63 65 20 4f 4e 20 65 78 32 35 28 63 2c  x25ce ON ex25(c,
d320: 65 29 3b 0a 43 52 45 41 54 45 20 49 4e 44 45 58  e);.CREATE INDEX
d330: 20 65 78 32 35 61 63 64 65 20 4f 4e 20 65 78 32   ex25acde ON ex2
d340: 35 28 61 2c 63 2c 64 2c 65 29 3b 0a 3c 2f 70 72  5(a,c,d,e);.</pr
d350: 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  e></blockquote>.
d360: 0a 3c 70 3e 45 61 63 68 20 72 6f 77 20 69 6e 20  .<p>Each row in 
d370: 74 68 65 20 65 78 32 35 63 65 20 69 6e 64 65 78  the ex25ce index
d380: 20 69 73 20 61 20 72 65 63 6f 72 64 0a 77 69 74   is a record.wit
d390: 68 20 74 68 65 73 65 20 63 6f 6c 75 6d 6e 73 3a  h these columns:
d3a0: 20 63 2c 20 65 2c 20 64 2c 20 61 2e 20 20 54 68   c, e, d, a.  Th
d3b0: 65 20 66 69 72 73 74 20 74 77 6f 20 63 6f 6c 75  e first two colu
d3c0: 6d 6e 73 20 61 72 65 0a 74 68 65 20 63 6f 6c 75  mns are.the colu
d3d0: 6d 6e 73 20 62 65 69 6e 67 20 69 6e 64 65 78 65  mns being indexe
d3e0: 64 2c 20 63 20 61 6e 64 20 65 2e 20 20 54 68 65  d, c and e.  The
d3f0: 20 72 65 6d 61 69 6e 69 6e 67 20 63 6f 6c 75 6d   remaining colum
d400: 6e 73 20 61 72 65 20 74 68 65 20 70 72 69 6d 61  ns are the prima
d410: 72 79 0a 6b 65 79 20 6f 66 20 74 68 65 20 63 6f  ry.key of the co
d420: 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 61 62 6c  rresponding tabl
d430: 65 20 72 6f 77 2e 20 20 4e 6f 72 6d 61 6c 6c 79  e row.  Normally
d440: 2c 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b 65  , the primary ke
d450: 79 20 77 6f 75 6c 64 20 62 65 0a 63 6f 6c 75 6d  y would be.colum
d460: 6e 73 20 64 2c 20 63 2c 20 61 6e 64 20 61 2c 20  ns d, c, and a, 
d470: 62 75 74 20 62 65 63 61 75 73 65 20 63 6f 6c 75  but because colu
d480: 6d 6e 20 63 20 61 6c 72 65 61 64 79 20 61 70 70  mn c already app
d490: 65 61 72 73 20 65 61 72 6c 69 65 72 20 69 6e 20  ears earlier in 
d4a0: 74 68 65 0a 69 6e 64 65 78 2c 20 69 74 20 69 73  the.index, it is
d4b0: 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68   omitted from th
d4c0: 65 20 6b 65 79 20 73 75 66 66 69 78 2e 29 5e 3c  e key suffix.)^<
d4d0: 2f 70 3e 0a 0a 3c 70 3e 5e 28 49 6e 20 74 68 65  /p>..<p>^(In the
d4e0: 20 65 78 74 72 65 6d 65 20 63 61 73 65 20 77 68   extreme case wh
d4f0: 65 72 65 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20  ere the columns 
d500: 62 65 69 6e 67 20 69 6e 64 65 78 65 64 20 63 6f  being indexed co
d510: 76 65 72 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 0a  ver all columns.
d520: 6f 66 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b  of the PRIMARY K
d530: 45 59 2c 20 74 68 65 20 69 6e 64 65 78 20 77 69  EY, the index wi
d540: 6c 6c 20 63 6f 6e 73 69 73 74 20 6f 66 20 6f 6e  ll consist of on
d550: 6c 79 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 62  ly the columns b
d560: 65 69 6e 67 0a 69 6e 64 65 78 65 64 2e 20 20 54  eing.indexed.  T
d570: 68 65 20 65 78 32 35 61 63 64 65 20 65 78 61 6d  he ex25acde exam
d580: 70 6c 65 20 61 62 6f 76 65 20 64 65 6d 6f 6e 73  ple above demons
d590: 74 72 61 74 65 73 20 74 68 69 73 2e 29 5e 20 20  trates this.)^  
d5a0: 5e 45 61 63 68 20 65 6e 74 72 79 20 69 6e 0a 74  ^Each entry in.t
d5b0: 68 65 20 65 78 32 35 61 63 64 65 20 69 6e 64 65  he ex25acde inde
d5c0: 78 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 6f 6e  x consists of on
d5d0: 6c 79 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 61  ly the columns a
d5e0: 2c 20 63 2c 20 64 2c 20 61 6e 64 20 65 2c 20 69  , c, d, and e, i
d5f0: 6e 20 74 68 61 74 0a 6f 72 64 65 72 2e 3c 2f 70  n that.order.</p
d600: 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20 73 75 70 70  >..<p> ^The supp
d610: 72 65 73 73 69 6f 6e 20 6f 66 20 72 65 64 75 6e  ression of redun
d620: 64 61 6e 74 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  dant columns in 
d630: 74 68 65 20 6b 65 79 20 73 75 66 66 69 78 20 6f  the key suffix o
d640: 66 20 61 6e 20 69 6e 64 65 78 0a 65 6e 74 72 79  f an index.entry
d650: 20 6f 6e 6c 79 20 6f 63 63 75 72 73 20 69 6e 20   only occurs in 
d660: 57 49 54 48 4f 55 54 20 52 4f 57 49 44 20 74 61  WITHOUT ROWID ta
d670: 62 6c 65 73 2e 20 20 5e 49 6e 20 61 6e 20 6f 72  bles.  ^In an or
d680: 64 69 6e 61 72 79 20 72 6f 77 69 64 20 74 61 62  dinary rowid tab
d690: 6c 65 2c 0a 74 68 65 20 69 6e 64 65 78 20 65 6e  le,.the index en
d6a0: 74 72 79 20 61 6c 77 61 79 73 20 65 6e 64 73 20  try always ends 
d6b0: 77 69 74 68 20 74 68 65 20 72 6f 77 69 64 20 65  with the rowid e
d6c0: 76 65 6e 20 69 66 20 74 68 65 20 5b 49 4e 54 45  ven if the [INTE
d6d0: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 5d  GER PRIMARY KEY]
d6e0: 0a 63 6f 6c 75 6d 6e 20 69 73 20 6f 6e 65 20 6f  .column is one o
d6f0: 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 62 65  f the columns be
d700: 69 6e 67 20 69 6e 64 65 78 65 64 2e 3c 2f 70 3e  ing indexed.</p>
d710: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
d720: 6e 74 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  nt sqlite_master
d730: 20 7b 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d   {sqlite_master}
d740: 20 7b 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20   {sqlite_master 
d750: 74 61 62 6c 65 7d 3c 2f 74 63 6c 3e 0a 3c 68 32  table}</tcl>.<h2
d760: 3e 53 74 6f 72 61 67 65 20 4f 66 20 54 68 65 20  >Storage Of The 
d770: 53 51 4c 20 44 61 74 61 62 61 73 65 20 53 63 68  SQL Database Sch
d780: 65 6d 61 3c 2f 68 32 3e 0a 0a 3c 70 3e 5e 50 61  ema</h2>..<p>^Pa
d790: 67 65 20 31 20 6f 66 20 61 20 64 61 74 61 62 61  ge 1 of a databa
d7a0: 73 65 20 66 69 6c 65 20 69 73 20 74 68 65 20 72  se file is the r
d7b0: 6f 6f 74 20 70 61 67 65 20 6f 66 20 61 20 74 61  oot page of a ta
d7c0: 62 6c 65 20 62 2d 74 72 65 65 20 74 68 61 74 0a  ble b-tree that.
d7d0: 68 6f 6c 64 73 20 61 20 73 70 65 63 69 61 6c 20  holds a special 
d7e0: 74 61 62 6c 65 20 6e 61 6d 65 64 20 22 73 71 6c  table named "sql
d7f0: 69 74 65 5f 6d 61 73 74 65 72 22 20 28 6f 72 20  ite_master" (or 
d800: 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73  "sqlite_temp_mas
d810: 74 65 72 22 20 69 6e 0a 74 68 65 20 63 61 73 65  ter" in.the case
d820: 20 6f 66 20 61 20 54 45 4d 50 20 64 61 74 61 62   of a TEMP datab
d830: 61 73 65 29 20 77 68 69 63 68 20 73 74 6f 72 65  ase) which store
d840: 73 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 0a 64  s the complete.d
d850: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20  atabase schema. 
d860: 20 5e 28 54 68 65 20 73 74 72 75 63 74 75 72 65   ^(The structure
d870: 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 5f 6d   of the sqlite_m
d880: 61 73 74 65 72 20 74 61 62 6c 65 20 69 73 20 61  aster table is a
d890: 73 0a 69 66 20 69 74 20 68 61 64 20 62 65 65 6e  s.if it had been
d8a0: 20 63 72 65 61 74 65 64 20 75 73 69 6e 67 20 74   created using t
d8b0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 53 51 4c  he following SQL
d8c0: 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  :</p>..<blockquo
d8d0: 74 65 3e 3c 70 72 65 3e 0a 43 52 45 41 54 45 20  te><pre>.CREATE 
d8e0: 54 41 42 4c 45 20 73 71 6c 69 74 65 5f 6d 61 73  TABLE sqlite_mas
d8f0: 74 65 72 28 0a 20 20 74 79 70 65 20 74 65 78 74  ter(.  type text
d900: 2c 0a 20 20 6e 61 6d 65 20 74 65 78 74 2c 0a 20  ,.  name text,. 
d910: 20 74 62 6c 5f 6e 61 6d 65 20 74 65 78 74 2c 0a   tbl_name text,.
d920: 20 20 72 6f 6f 74 70 61 67 65 20 69 6e 74 65 67    rootpage integ
d930: 65 72 2c 0a 20 20 73 71 6c 20 74 65 78 74 0a 29  er,.  sql text.)
d940: 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71  ;.</pre></blockq
d950: 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 5e 54 68 65  uote>)^..<p>^The
d960: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74   sqlite_master t
d970: 61 62 6c 65 20 63 6f 6e 74 61 69 6e 73 20 6f 6e  able contains on
d980: 65 20 72 6f 77 20 66 6f 72 20 65 61 63 68 20 74  e row for each t
d990: 61 62 6c 65 2c 20 69 6e 64 65 78 2c 20 76 69 65  able, index, vie
d9a0: 77 2c 0a 61 6e 64 20 74 72 69 67 67 65 72 20 28  w,.and trigger (
d9b0: 63 6f 6c 6c 65 63 74 69 76 65 6c 79 20 22 6f 62  collectively "ob
d9c0: 6a 65 63 74 73 22 29 20 69 6e 20 74 68 65 20 64  jects") in the d
d9d0: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2c 20  atabase schema, 
d9e0: 65 78 63 65 70 74 20 74 68 65 72 65 0a 69 73 20  except there.is 
d9f0: 6e 6f 20 65 6e 74 72 79 20 66 6f 72 20 74 68 65  no entry for the
da00: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74   sqlite_master t
da10: 61 62 6c 65 20 69 74 73 65 6c 66 2e 20 20 5e 54  able itself.  ^T
da20: 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  he sqlite_master
da30: 20 74 61 62 6c 65 0a 63 6f 6e 74 61 69 6e 73 20   table.contains 
da40: 65 6e 74 72 69 65 73 20 66 6f 72 20 5b 69 6e 74  entries for [int
da50: 65 72 6e 61 6c 20 73 63 68 65 6d 61 20 6f 62 6a  ernal schema obj
da60: 65 63 74 73 5d 20 69 6e 20 61 64 64 69 74 69 6f  ects] in additio
da70: 6e 20 74 6f 20 61 70 70 6c 69 63 61 74 69 6f 6e  n to application
da80: 2d 0a 61 6e 64 20 70 72 6f 67 72 61 6d 6d 65 72  -.and programmer
da90: 2d 64 65 66 69 6e 65 64 20 6f 62 6a 65 63 74 73  -defined objects
daa0: 2e 0a 0a 0a 3c 70 3e 5e 28 54 68 65 20 73 71 6c  ....<p>^(The sql
dab0: 69 74 65 5f 6d 61 73 74 65 72 2e 74 79 70 65 20  ite_master.type 
dac0: 63 6f 6c 75 6d 6e 20 77 69 6c 6c 20 62 65 20 6f  column will be o
dad0: 6e 65 0a 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ne.of the follow
dae0: 69 6e 67 20 74 65 78 74 20 73 74 72 69 6e 67 73  ing text strings
daf0: 3a 20 20 27 74 61 62 6c 65 27 2c 20 27 69 6e 64  :  'table', 'ind
db00: 65 78 27 2c 20 27 76 69 65 77 27 2c 20 6f 72 20  ex', 'view', or 
db10: 27 74 72 69 67 67 65 72 27 0a 61 63 63 6f 72 64  'trigger'.accord
db20: 69 6e 67 20 74 6f 20 74 68 65 20 74 79 70 65 20  ing to the type 
db30: 6f 66 20 6f 62 6a 65 63 74 20 64 65 66 69 6e 65  of object define
db40: 64 2e 20 20 54 68 65 20 27 74 61 62 6c 65 27 20  d.  The 'table' 
db50: 73 74 72 69 6e 67 20 69 73 20 75 73 65 64 0a 66  string is used.f
db60: 6f 72 20 62 6f 74 68 20 6f 72 64 69 6e 61 72 79  or both ordinary
db70: 20 61 6e 64 20 5b 76 69 72 74 75 61 6c 20 74 61   and [virtual ta
db80: 62 6c 65 73 5d 2e 29 5e 3c 2f 70 3e 0a 0a 3c 70  bles].)^</p>..<p
db90: 3e 5e 28 54 68 65 20 73 71 6c 69 74 65 5f 6d 61  >^(The sqlite_ma
dba0: 73 74 65 72 2e 6e 61 6d 65 20 63 6f 6c 75 6d 6e  ster.name column
dbb0: 20 77 69 6c 6c 20 68 6f 6c 64 20 74 68 65 20 6e   will hold the n
dbc0: 61 6d 65 20 6f 66 20 74 68 65 20 6f 62 6a 65 63  ame of the objec
dbd0: 74 2e 29 5e 0a 5e 28 5b 55 4e 49 51 55 45 5d 20  t.)^.^([UNIQUE] 
dbe0: 61 6e 64 20 5b 50 52 49 4d 41 52 59 20 4b 45 59  and [PRIMARY KEY
dbf0: 5d 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 6f 6e  ] constraints on
dc00: 20 74 61 62 6c 65 73 20 63 61 75 73 65 20 53 51   tables cause SQ
dc10: 4c 69 74 65 20 74 6f 20 63 72 65 61 74 65 0a 5b  Lite to create.[
dc20: 69 6e 74 65 72 6e 61 6c 20 69 6e 64 65 78 65 73  internal indexes
dc30: 5d 20 77 69 74 68 20 6e 61 6d 65 73 20 6f 66 20  ] with names of 
dc40: 74 68 65 20 66 6f 72 6d 20 22 73 71 6c 69 74 65  the form "sqlite
dc50: 5f 61 75 74 6f 69 6e 64 65 78 5f 54 41 42 4c 45  _autoindex_TABLE
dc60: 5f 4e 22 0a 77 68 65 72 65 20 54 41 42 4c 45 20  _N".where TABLE 
dc70: 69 73 20 72 65 70 6c 61 63 65 64 20 62 79 20 74  is replaced by t
dc80: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  he name of the t
dc90: 61 62 6c 65 20 74 68 61 74 20 63 6f 6e 74 61 69  able that contai
dca0: 6e 73 20 74 68 65 0a 63 6f 6e 73 74 72 61 69 6e  ns the.constrain
dcb0: 74 20 61 6e 64 20 4e 20 69 73 20 61 6e 20 69 6e  t and N is an in
dcc0: 74 65 67 65 72 20 62 65 67 69 6e 6e 69 6e 67 20  teger beginning 
dcd0: 77 69 74 68 20 31 20 61 6e 64 20 69 6e 63 72 65  with 1 and incre
dce0: 61 73 69 6e 67 20 62 79 20 6f 6e 65 0a 77 69 74  asing by one.wit
dcf0: 68 20 65 61 63 68 20 63 6f 6e 73 74 72 61 69 6e  h each constrain
dd00: 74 20 73 65 65 6e 20 69 6e 20 74 68 65 20 74 61  t seen in the ta
dd10: 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 2e 29  ble definition.)
dd20: 5e 0a 5e 28 49 6e 20 61 20 5b 57 49 54 48 4f 55  ^.^(In a [WITHOU
dd30: 54 20 52 4f 57 49 44 5d 20 74 61 62 6c 65 2c 20  T ROWID] table, 
dd40: 74 68 65 72 65 20 69 73 20 6e 6f 20 73 71 6c 69  there is no sqli
dd50: 74 65 5f 6d 61 73 74 65 72 20 65 6e 74 72 79 20  te_master entry 
dd60: 66 6f 72 20 74 68 65 0a 50 52 49 4d 41 52 59 20  for the.PRIMARY 
dd70: 4b 45 59 2c 20 62 75 74 20 74 68 65 20 22 73 71  KEY, but the "sq
dd80: 6c 69 74 65 5f 61 75 74 6f 69 6e 64 65 78 5f 54  lite_autoindex_T
dd90: 41 42 4c 45 5f 4e 22 20 6e 61 6d 65 20 69 73 20  ABLE_N" name is 
dda0: 73 65 74 20 61 73 69 64 65 0a 66 6f 72 20 74 68  set aside.for th
ddb0: 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 61 73  e PRIMARY KEY as
ddc0: 20 69 66 20 74 68 65 20 73 71 6c 69 74 65 5f 6d   if the sqlite_m
ddd0: 61 73 74 65 72 20 65 6e 74 72 79 20 64 69 64 20  aster entry did 
dde0: 65 78 69 73 74 2e 20 20 54 68 69 73 0a 77 69 6c  exist.  This.wil
ddf0: 6c 20 61 66 66 65 63 74 20 74 68 65 20 6e 75 6d  l affect the num
de00: 62 65 72 69 6e 67 20 6f 66 20 73 75 62 73 65 71  bering of subseq
de10: 75 65 6e 74 20 55 4e 49 51 55 45 20 63 6f 6e 73  uent UNIQUE cons
de20: 74 72 61 69 6e 74 73 2e 29 5e 0a 5e 54 68 65 20  traints.)^.^The 
de30: 22 73 71 6c 69 74 65 5f 61 75 74 6f 69 6e 64 65  "sqlite_autoinde
de40: 78 5f 54 41 42 4c 45 5f 4e 22 20 6e 61 6d 65 20  x_TABLE_N" name 
de50: 69 73 20 6e 65 76 65 72 20 61 6c 6c 6f 63 61 74  is never allocat
de60: 65 64 20 66 6f 72 20 61 6e 0a 5b 49 4e 54 45 47  ed for an.[INTEG
de70: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 5d 2c  ER PRIMARY KEY],
de80: 20 65 69 74 68 65 72 20 69 6e 20 72 6f 77 69 64   either in rowid
de90: 20 74 61 62 6c 65 73 20 6f 72 20 57 49 54 48 4f   tables or WITHO
dea0: 55 54 20 52 4f 57 49 44 20 74 61 62 6c 65 73 2e  UT ROWID tables.
deb0: 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 73 71  .</p>..<p>The sq
dec0: 6c 69 74 65 5f 6d 61 73 74 65 72 2e 74 62 6c 5f  lite_master.tbl_
ded0: 6e 61 6d 65 20 63 6f 6c 75 6d 6e 20 68 6f 6c 64  name column hold
dee0: 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20  s the name of a 
def0: 74 61 62 6c 65 20 6f 72 20 76 69 65 77 0a 74 68  table or view.th
df00: 61 74 20 74 68 65 20 6f 62 6a 65 63 74 20 69 73  at the object is
df10: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
df20: 2e 20 20 5e 46 6f 72 20 61 20 74 61 62 6c 65 20  .  ^For a table 
df30: 6f 72 20 76 69 65 77 2c 20 74 68 65 0a 74 62 6c  or view, the.tbl
df40: 5f 6e 61 6d 65 20 63 6f 6c 75 6d 6e 20 69 73 20  _name column is 
df50: 61 20 63 6f 70 79 20 6f 66 20 74 68 65 20 6e 61  a copy of the na
df60: 6d 65 20 63 6f 6c 75 6d 6e 2e 20 20 5e 46 6f 72  me column.  ^For
df70: 20 61 6e 20 69 6e 64 65 78 2c 20 74 68 65 20 74   an index, the t
df80: 62 6c 5f 6e 61 6d 65 0a 69 73 20 74 68 65 20 6e  bl_name.is the n
df90: 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
dfa0: 20 74 68 61 74 20 69 73 20 69 6e 64 65 78 65 64   that is indexed
dfb0: 2e 20 20 5e 46 6f 72 20 61 20 74 72 69 67 67 65  .  ^For a trigge
dfc0: 72 2c 20 74 68 65 20 74 62 6c 5f 6e 61 6d 65 0a  r, the tbl_name.
dfd0: 63 6f 6c 75 6d 6e 20 73 74 6f 72 65 73 20 74 68  column stores th
dfe0: 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  e name of the ta
dff0: 62 6c 65 20 6f 72 20 76 69 65 77 20 74 68 61 74  ble or view that
e000: 20 63 61 75 73 65 73 20 74 68 65 20 74 72 69 67   causes the trig
e010: 67 65 72 20 0a 74 6f 20 66 69 72 65 2e 3c 2f 70  ger .to fire.</p
e020: 3e 0a 0a 3c 70 3e 5e 28 54 68 65 20 73 71 6c 69  >..<p>^(The sqli
e030: 74 65 5f 6d 61 73 74 65 72 2e 72 6f 6f 74 70 61  te_master.rootpa
e040: 67 65 20 63 6f 6c 75 6d 6e 20 73 74 6f 72 65 73  ge column stores
e050: 20 74 68 65 20 70 61 67 65 20 6e 75 6d 62 65 72   the page number
e060: 20 6f 66 20 74 68 65 20 72 6f 6f 74 0a 62 2d 74   of the root.b-t
e070: 72 65 65 20 70 61 67 65 20 66 6f 72 20 74 61 62  ree page for tab
e080: 6c 65 73 20 61 6e 64 20 69 6e 64 65 78 65 73 2e  les and indexes.
e090: 29 5e 20 20 5e 46 6f 72 20 72 6f 77 73 20 74 68  )^  ^For rows th
e0a0: 61 74 20 64 65 66 69 6e 65 20 76 69 65 77 73 2c  at define views,
e0b0: 20 74 72 69 67 67 65 72 73 2c 0a 61 6e 64 20 76   triggers,.and v
e0c0: 69 72 74 75 61 6c 20 74 61 62 6c 65 73 2c 20 74  irtual tables, t
e0d0: 68 65 20 72 6f 6f 74 70 61 67 65 20 63 6f 6c 75  he rootpage colu
e0e0: 6d 6e 20 69 73 20 30 20 6f 72 20 4e 55 4c 4c 2e  mn is 0 or NULL.
e0f0: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28 54 68 65 20 73  </p>..<p>^(The s
e100: 71 6c 69 74 65 5f 6d 61 73 74 65 72 2e 73 71 6c  qlite_master.sql
e110: 20 63 6f 6c 75 6d 6e 20 73 74 6f 72 65 73 20 53   column stores S
e120: 51 4c 20 74 65 78 74 20 74 68 61 74 20 64 65 73  QL text that des
e130: 63 72 69 62 65 73 20 74 68 65 0a 6f 62 6a 65 63  cribes the.objec
e140: 74 2e 20 20 54 68 69 73 20 53 51 4c 20 74 65 78  t.  This SQL tex
e150: 74 20 69 73 20 61 20 5b 43 52 45 41 54 45 20 54  t is a [CREATE T
e160: 41 42 4c 45 5d 2c 20 5b 43 52 45 41 54 45 20 56  ABLE], [CREATE V
e170: 49 52 54 55 41 4c 20 54 41 42 4c 45 5d 2c 0a 5b  IRTUAL TABLE],.[
e180: 43 52 45 41 54 45 20 49 4e 44 45 58 5d 2c 0a 5b  CREATE INDEX],.[
e190: 43 52 45 41 54 45 20 56 49 45 57 5d 2c 20 6f 72  CREATE VIEW], or
e1a0: 20 5b 43 52 45 41 54 45 20 54 52 49 47 47 45 52   [CREATE TRIGGER
e1b0: 5d 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74  ] statement that
e1c0: 20 69 66 20 65 76 61 6c 75 61 74 65 64 20 61 67   if evaluated ag
e1d0: 61 69 6e 73 74 0a 74 68 65 20 64 61 74 61 62 61  ainst.the databa
e1e0: 73 65 20 66 69 6c 65 20 77 68 65 6e 20 69 74 20  se file when it 
e1f0: 69 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  is the main data
e200: 62 61 73 65 20 6f 66 20 61 20 5b 64 61 74 61 62  base of a [datab
e210: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d 0a  ase connection].
e220: 77 6f 75 6c 64 20 72 65 63 72 65 61 74 65 20 74  would recreate t
e230: 68 65 20 6f 62 6a 65 63 74 2e 29 5e 20 20 54 68  he object.)^  Th
e240: 65 20 74 65 78 74 20 69 73 20 75 73 75 61 6c 6c  e text is usuall
e250: 79 20 61 20 63 6f 70 79 20 6f 66 20 74 68 65 20  y a copy of the 
e260: 6f 72 69 67 69 6e 61 6c 0a 73 74 61 74 65 6d 65  original.stateme
e270: 6e 74 20 75 73 65 64 20 74 6f 20 63 72 65 61 74  nt used to creat
e280: 65 20 74 68 65 20 6f 62 6a 65 63 74 20 62 75 74  e the object but
e290: 20 77 69 74 68 20 6e 6f 72 6d 61 6c 69 7a 61 74   with normalizat
e2a0: 69 6f 6e 73 20 61 70 70 6c 69 65 64 20 73 6f 0a  ions applied so.
e2b0: 74 68 61 74 20 74 68 65 20 74 65 78 74 20 63 6f  that the text co
e2c0: 6e 66 6f 72 6d 73 20 74 6f 20 74 68 65 20 66 6f  nforms to the fo
e2d0: 6c 6c 6f 77 69 6e 67 20 72 75 6c 65 73 3a 0a 0a  llowing rules:..
e2e0: 3c 75 6c 3e 0a 3c 6c 69 3e 5e 54 68 65 20 43 52  <ul>.<li>^The CR
e2f0: 45 41 54 45 2c 20 54 41 42 4c 45 2c 20 56 49 45  EATE, TABLE, VIE
e300: 57 2c 20 54 52 49 47 47 45 52 2c 20 61 6e 64 20  W, TRIGGER, and 
e310: 49 4e 44 45 58 20 6b 65 79 77 6f 72 64 73 20 61  INDEX keywords a
e320: 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 0a  t the beginning.
e330: 6f 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  of the statement
e340: 20 61 72 65 20 63 6f 6e 76 65 72 74 65 64 20 74   are converted t
e350: 6f 20 61 6c 6c 20 75 70 70 65 72 20 63 61 73 65  o all upper case
e360: 20 6c 65 74 74 65 72 73 2e 0a 3c 6c 69 3e 5e 54   letters..<li>^T
e370: 68 65 20 54 45 4d 50 20 6f 72 20 54 45 4d 50 4f  he TEMP or TEMPO
e380: 52 41 52 59 20 6b 65 79 77 6f 72 64 20 69 73 20  RARY keyword is 
e390: 72 65 6d 6f 76 65 64 20 69 66 20 69 74 20 6f 63  removed if it oc
e3a0: 63 75 72 73 20 61 66 74 65 72 20 74 68 65 20 0a  curs after the .
e3b0: 69 6e 69 74 69 61 6c 20 43 52 45 41 54 45 20 6b  initial CREATE k
e3c0: 65 79 77 6f 72 64 2e 0a 3c 6c 69 3e 5e 41 6e 79  eyword..<li>^Any
e3d0: 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 20 71   database name q
e3e0: 75 61 6c 69 66 69 65 72 20 74 68 61 74 20 6f 63  ualifier that oc
e3f0: 63 75 72 73 20 70 72 69 6f 72 20 74 6f 20 74 68  curs prior to th
e400: 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 0a 6f 62  e name of the.ob
e410: 6a 65 63 74 20 62 65 69 6e 67 20 63 72 65 61 74  ject being creat
e420: 65 64 20 69 73 20 72 65 6d 6f 76 65 64 2e 0a 3c  ed is removed..<
e430: 6c 69 3e 5e 4c 65 61 64 69 6e 67 20 73 70 61 63  li>^Leading spac
e440: 65 73 20 61 72 65 20 72 65 6d 6f 76 65 64 2e 0a  es are removed..
e450: 3c 6c 69 3e 5e 41 6c 6c 20 73 70 61 63 65 73 20  <li>^All spaces 
e460: 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20 66 69  following the fi
e470: 72 73 74 20 74 77 6f 20 6b 65 79 77 6f 72 64 73  rst two keywords
e480: 20 61 72 65 20 63 6f 6e 76 65 72 74 65 64 20 69   are converted i
e490: 6e 74 6f 20 61 20 73 69 6e 67 6c 65 0a 73 70 61  nto a single.spa
e4a0: 63 65 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e 28  ce..</ul>..<p>^(
e4b0: 54 68 65 20 74 65 78 74 20 69 6e 20 74 68 65 20  The text in the 
e4c0: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 2e 73 71  sqlite_master.sq
e4d0: 6c 20 63 6f 6c 75 6d 6e 20 69 73 20 61 20 63 6f  l column is a co
e4e0: 70 79 20 6f 66 20 74 68 65 20 6f 72 69 67 69 6e  py of the origin
e4f0: 61 6c 0a 43 52 45 41 54 45 20 73 74 61 74 65 6d  al.CREATE statem
e500: 65 6e 74 20 74 65 78 74 20 74 68 61 74 20 63 72  ent text that cr
e510: 65 61 74 65 64 20 74 68 65 20 6f 62 6a 65 63 74  eated the object
e520: 2c 20 65 78 63 65 70 74 20 6e 6f 72 6d 61 6c 69  , except normali
e530: 7a 65 64 20 61 73 0a 64 65 73 63 72 69 62 65 64  zed as.described
e540: 20 61 62 6f 76 65 20 61 6e 64 20 61 73 20 6d 6f   above and as mo
e550: 64 69 66 69 65 64 20 62 79 20 73 75 62 73 65 71  dified by subseq
e560: 75 65 6e 74 20 5b 41 4c 54 45 52 20 54 41 42 4c  uent [ALTER TABL
e570: 45 5d 20 73 74 61 74 65 6d 65 6e 74 73 2e 29 5e  E] statements.)^
e580: 0a 5e 28 54 68 65 20 73 71 6c 69 74 65 5f 6d 61  .^(The sqlite_ma
e590: 73 74 65 72 2e 73 71 6c 20 69 73 20 4e 55 4c 4c  ster.sql is NULL
e5a0: 20 66 6f 72 20 74 68 65 20 5b 69 6e 74 65 72 6e   for the [intern
e5b0: 61 6c 20 69 6e 64 65 78 65 73 5d 20 74 68 61 74  al indexes] that
e5c0: 20 61 72 65 0a 61 75 74 6f 6d 61 74 69 63 61 6c   are.automatical
e5d0: 6c 79 20 63 72 65 61 74 65 64 20 62 79 20 5b 55  ly created by [U
e5e0: 4e 49 51 55 45 5d 20 6f 72 20 5b 50 52 49 4d 41  NIQUE] or [PRIMA
e5f0: 52 59 20 4b 45 59 5d 20 63 6f 6e 73 74 72 61 69  RY KEY] constrai
e600: 6e 74 73 2e 29 5e 3c 2f 70 3e 0a 0a 0a 3c 74 63  nts.)^</p>...<tc
e610: 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 69 6e  l>hd_fragment in
e620: 74 73 63 68 65 6d 61 20 7b 69 6e 74 65 72 6e 61  tschema {interna
e630: 6c 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 73  l schema objects
e640: 7d 20 5c 0a 7b 69 6e 74 65 72 6e 61 6c 20 73 63  } \.{internal sc
e650: 68 65 6d 61 20 6f 62 6a 65 63 74 7d 20 7b 69 6e  hema object} {in
e660: 74 65 72 6e 61 6c 20 69 6e 64 65 78 7d 20 7b 69  ternal index} {i
e670: 6e 74 65 72 6e 61 6c 20 69 6e 64 65 78 65 73 7d  nternal indexes}
e680: 20 5c 0a 7b 69 6e 74 65 72 6e 61 6c 20 74 61 62   \.{internal tab
e690: 6c 65 7d 20 7b 69 6e 74 65 72 6e 61 6c 20 74 61  le} {internal ta
e6a0: 62 6c 65 73 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e  bles}</tcl>.<h3>
e6b0: 49 6e 74 65 72 6e 61 6c 20 53 63 68 65 6d 61 20  Internal Schema 
e6c0: 4f 62 6a 65 63 74 73 3c 2f 68 33 3e 0a 0a 3c 70  Objects</h3>..<p
e6d0: 3e 5e 49 6e 20 61 64 64 69 74 69 6f 6e 20 74 6f  >^In addition to
e6e0: 20 74 68 65 20 74 61 62 6c 65 73 2c 20 69 6e 64   the tables, ind
e6f0: 65 78 65 73 2c 20 76 69 65 77 73 2c 20 61 6e 64  exes, views, and
e700: 20 74 72 69 67 67 65 72 73 20 63 72 65 61 74 65   triggers create
e710: 64 20 62 79 0a 74 68 65 20 61 70 70 6c 69 63 61  d by.the applica
e720: 74 69 6f 6e 20 61 6e 64 2f 6f 72 20 74 68 65 20  tion and/or the 
e730: 64 65 76 65 6c 6f 70 65 72 20 75 73 69 6e 67 20  developer using 
e740: 43 52 45 41 54 45 20 73 74 61 74 65 6d 65 6e 74  CREATE statement
e750: 73 20 53 51 4c 2c 20 74 68 65 0a 73 71 6c 69 74  s SQL, the.sqlit
e760: 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 20 6d  e_master table m
e770: 61 79 20 63 6f 6e 74 61 69 6e 20 7a 65 72 6f 20  ay contain zero 
e780: 6f 72 20 6d 6f 72 65 20 65 6e 74 72 69 65 73 20  or more entries 
e790: 66 6f 72 20 0a 3c 69 3e 69 6e 74 65 72 6e 61 6c  for .<i>internal
e7a0: 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 3c   schema objects<
e7b0: 2f 69 3e 20 74 68 61 74 20 61 72 65 20 63 72 65  /i> that are cre
e7c0: 61 74 65 64 20 62 79 20 53 51 4c 69 74 65 20 66  ated by SQLite f
e7d0: 6f 72 20 69 74 73 20 0a 6f 77 6e 20 69 6e 74 65  or its .own inte
e7e0: 72 6e 61 6c 20 75 73 65 2e 20 20 5e 54 68 65 20  rnal use.  ^The 
e7f0: 6e 61 6d 65 73 20 6f 66 20 69 6e 74 65 72 6e 61  names of interna
e800: 6c 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 73  l schema objects
e810: 0a 61 6c 77 61 79 73 20 62 65 67 69 6e 20 77 69  .always begin wi
e820: 74 68 20 22 73 71 6c 69 74 65 5f 22 20 61 6e 64  th "sqlite_" and
e830: 20 61 6e 79 20 74 61 62 6c 65 2c 20 69 6e 64 65   any table, inde
e840: 78 2c 20 76 69 65 77 2c 20 6f 72 20 74 72 69 67  x, view, or trig
e850: 67 65 72 0a 77 68 6f 73 65 20 6e 61 6d 65 20 62  ger.whose name b
e860: 65 67 69 6e 73 20 77 69 74 68 20 22 73 71 6c 69  egins with "sqli
e870: 74 65 5f 22 20 69 73 20 61 6e 20 69 6e 74 65 72  te_" is an inter
e880: 6e 61 6c 20 73 63 68 65 6d 61 20 6f 62 6a 65 63  nal schema objec
e890: 74 2e 0a 5e 53 51 4c 69 74 65 20 70 72 6f 68 69  t..^SQLite prohi
e8a0: 62 69 74 73 20 61 70 70 6c 69 63 61 74 69 6f 6e  bits application
e8b0: 73 20 66 72 6f 6d 20 63 72 65 61 74 69 6e 67 20  s from creating 
e8c0: 6f 62 6a 65 63 74 73 20 77 68 6f 73 65 20 6e 61  objects whose na
e8d0: 6d 65 73 20 62 65 67 69 6e 0a 77 69 74 68 20 22  mes begin.with "
e8e0: 73 71 6c 69 74 65 5f 22 2e 20 20 0a 0a 3c 70 3e  sqlite_".  ..<p>
e8f0: 49 6e 74 65 72 6e 61 6c 20 73 63 68 65 6d 61 20  Internal schema 
e900: 6f 62 6a 65 63 74 73 20 75 73 65 64 20 62 79 20  objects used by 
e910: 53 51 4c 69 74 65 20 6d 61 79 20 69 6e 63 6c 75  SQLite may inclu
e920: 64 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  de the following
e930: 3a 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 49  :..<ul>.<li><p>I
e940: 6e 64 69 63 65 73 20 77 69 74 68 20 6e 61 6d 65  ndices with name
e950: 73 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 73  s of the form "s
e960: 71 6c 69 74 65 5f 61 75 74 6f 69 6e 64 65 78 5f  qlite_autoindex_
e970: 54 41 42 4c 45 5f 4e 22 20 74 68 61 74 0a 20 20  TABLE_N" that.  
e980: 20 20 20 20 20 61 72 65 20 75 73 65 64 20 74 6f       are used to
e990: 20 69 6d 70 6c 65 6d 65 6e 74 20 5b 55 4e 49 51   implement [UNIQ
e9a0: 55 45 5d 20 61 6e 64 20 5b 50 52 49 4d 41 52 59  UE] and [PRIMARY
e9b0: 20 4b 45 59 5d 20 63 6f 6e 73 74 72 61 69 6e 74   KEY] constraint
e9c0: 73 20 6f 6e 0a 20 20 20 20 20 20 20 6f 72 64 69  s on.       ordi
e9d0: 6e 61 72 79 20 74 61 62 6c 65 73 2e 0a 0a 3c 6c  nary tables...<l
e9e0: 69 3e 3c 70 3e 41 20 74 61 62 6c 65 20 77 69 74  i><p>A table wit
e9f0: 68 20 74 68 65 20 6e 61 6d 65 20 22 73 71 6c 69  h the name "sqli
ea00: 74 65 5f 73 65 71 75 65 6e 63 65 22 20 74 68 61  te_sequence" tha
ea10: 74 20 69 73 20 75 73 65 64 20 74 6f 20 6b 65 65  t is used to kee
ea20: 70 20 74 72 61 63 6b 0a 20 20 20 20 20 20 20 6f  p track.       o
ea30: 66 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 68 69  f the maximum hi
ea40: 73 74 6f 72 69 63 61 6c 20 5b 49 4e 54 45 47 45  storical [INTEGE
ea50: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 5d 20 66  R PRIMARY KEY] f
ea60: 6f 72 20 61 20 74 61 62 6c 65 0a 20 20 20 20 20  or a table.     
ea70: 20 20 75 73 69 6e 67 20 5b 41 55 54 4f 49 4e 43    using [AUTOINC
ea80: 52 45 4d 45 4e 54 5d 2e 0a 0a 3c 6c 69 3e 3c 70  REMENT]...<li><p
ea90: 3e 54 61 62 6c 65 73 20 77 69 74 68 20 6e 61 6d  >Tables with nam
eaa0: 65 73 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 22  es of the form "
eab0: 73 71 6c 69 74 65 5f 73 74 61 74 4e 22 20 77 68  sqlite_statN" wh
eac0: 65 72 65 20 4e 20 69 73 20 61 6e 20 69 6e 74 65  ere N is an inte
ead0: 67 65 72 2e 0a 20 20 20 20 20 20 20 53 75 63 68  ger..       Such
eae0: 20 74 61 62 6c 65 73 20 73 74 6f 72 65 20 64 61   tables store da
eaf0: 74 61 62 61 73 65 20 73 74 61 74 69 73 74 69 63  tabase statistic
eb00: 73 20 67 61 74 68 65 72 65 64 20 62 79 20 74 68  s gathered by th
eb10: 65 20 5b 41 4e 41 4c 59 5a 45 5d 0a 20 20 20 20  e [ANALYZE].    
eb20: 20 20 20 63 6f 6d 6d 61 6e 64 20 61 6e 64 20 75     command and u
eb30: 73 65 64 20 62 79 20 74 68 65 20 71 75 65 72 79  sed by the query
eb40: 20 70 6c 61 6e 6e 65 72 20 74 6f 20 68 65 6c 70   planner to help
eb50: 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 62   determine the b
eb60: 65 73 74 0a 20 20 20 20 20 20 20 61 6c 67 6f 72  est.       algor
eb70: 69 74 68 6d 20 74 6f 20 75 73 65 20 66 6f 72 20  ithm to use for 
eb80: 65 61 63 68 20 71 75 65 72 79 2e 0a 3c 2f 75 6c  each query..</ul
eb90: 3e 0a 0a 3c 70 3e 4e 65 77 20 69 6e 74 65 72 6e  >..<p>New intern
eba0: 61 6c 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74  al schema object
ebb0: 73 20 6e 61 6d 65 73 2c 20 61 6c 77 61 79 73 20  s names, always 
ebc0: 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 22  beginning with "
ebd0: 73 71 6c 69 74 65 5f 22 2c 0a 6d 61 79 20 62 65  sqlite_",.may be
ebe0: 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 53 51   added to the SQ
ebf0: 4c 69 74 65 20 66 69 6c 65 20 66 6f 72 6d 61 74  Lite file format
ec00: 20 69 6e 20 66 75 74 75 72 65 20 72 65 6c 65 61   in future relea
ec10: 73 65 73 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  ses...<tcl>hd_fr
ec20: 61 67 6d 65 6e 74 20 73 65 71 74 61 62 20 7b 73  agment seqtab {s
ec30: 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 7d 3c  qlite_sequence}<
ec40: 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 73 71  /tcl>.<h3>The sq
ec50: 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 20 74 61  lite_sequence ta
ec60: 62 6c 65 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68  ble</h3>..<p>^Th
ec70: 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63  e sqlite_sequenc
ec80: 65 20 74 61 62 6c 65 20 69 73 20 61 6e 20 69 6e  e table is an in
ec90: 74 65 72 6e 61 6c 20 74 61 62 6c 65 20 75 73 65  ternal table use
eca0: 64 20 74 6f 20 68 65 6c 70 20 69 6d 70 6c 65 6d  d to help implem
ecb0: 65 6e 74 0a 5b 41 55 54 4f 49 4e 43 52 45 4d 45  ent.[AUTOINCREME
ecc0: 4e 54 5d 2e 20 20 5e 54 68 65 20 73 71 6c 69 74  NT].  ^The sqlit
ecd0: 65 5f 73 65 71 75 65 6e 63 65 20 74 61 62 6c 65  e_sequence table
ece0: 20 69 73 20 63 72 65 61 74 65 64 20 61 75 74 6f   is created auto
ecf0: 6d 61 74 69 63 61 6c 6c 79 0a 77 68 65 6e 65 76  matically.whenev
ed00: 65 72 20 61 6e 79 20 6f 72 64 69 6e 61 72 79 20  er any ordinary 
ed10: 74 61 62 6c 65 20 77 69 74 68 20 61 6e 20 41 55  table with an AU
ed20: 54 4f 49 4e 43 52 45 4d 45 4e 54 20 69 6e 74 65  TOINCREMENT inte
ed30: 67 65 72 20 70 72 69 6d 61 72 79 0a 6b 65 79 20  ger primary.key 
ed40: 69 73 20 63 72 65 61 74 65 64 2e 20 20 5e 4f 6e  is created.  ^On
ed50: 63 65 20 63 72 65 61 74 65 64 2c 20 74 68 65 20  ce created, the 
ed60: 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 20  sqlite_sequence 
ed70: 74 61 62 6c 65 20 65 78 69 73 74 73 20 69 6e 20  table exists in 
ed80: 74 68 65 0a 73 71 6c 69 74 65 5f 6d 61 73 74 65  the.sqlite_maste
ed90: 72 20 74 61 62 6c 65 20 66 6f 72 65 76 65 72 3b  r table forever;
eda0: 20 69 74 20 63 61 6e 6e 6f 74 20 62 65 20 64 72   it cannot be dr
edb0: 6f 70 70 65 64 2e 0a 5e 28 54 68 65 20 73 63 68  opped..^(The sch
edc0: 65 6d 61 20 66 6f 72 20 74 68 65 20 73 71 6c 69  ema for the sqli
edd0: 74 65 5f 73 65 71 75 65 6e 63 65 20 74 61 62 6c  te_sequence tabl
ede0: 65 20 69 73 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  e is:..<blockquo
edf0: 74 65 3e 3c 70 72 65 3e 0a 43 52 45 41 54 45 20  te><pre>.CREATE 
ee00: 54 41 42 4c 45 20 73 71 6c 69 74 65 5f 73 65 71  TABLE sqlite_seq
ee10: 75 65 6e 63 65 28 6e 61 6d 65 2c 73 65 71 29 3b  uence(name,seq);
ee20: 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75  .</pre></blockqu
ee30: 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 5e 54 68 65 72  ote>)^..<p>^Ther
ee40: 65 20 69 73 20 61 20 73 69 6e 67 6c 65 20 72 6f  e is a single ro
ee50: 77 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f  w in the sqlite_
ee60: 73 65 71 75 65 6e 63 65 20 74 61 62 6c 65 20 66  sequence table f
ee70: 6f 72 20 65 61 63 68 20 6f 72 64 69 6e 61 72 79  or each ordinary
ee80: 0a 74 61 62 6c 65 20 74 68 61 74 20 75 73 65 73  .table that uses
ee90: 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 2e 20   AUTOINCREMENT. 
eea0: 20 5e 28 54 68 65 20 6e 61 6d 65 20 6f 66 20 74   ^(The name of t
eeb0: 68 65 20 74 61 62 6c 65 20 28 61 73 20 69 74 20  he table (as it 
eec0: 61 70 70 65 61 72 73 20 69 6e 0a 73 71 6c 69 74  appears in.sqlit
eed0: 65 5f 6d 61 73 74 65 72 2e 6e 61 6d 65 29 20 69  e_master.name) i
eee0: 73 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f  s in the sqlite_
eef0: 73 65 71 75 65 6e 63 65 2e 6d 61 69 6e 20 66 69  sequence.main fi
ef00: 65 6c 64 20 61 6e 64 20 74 68 65 20 6c 61 72 67  eld and the larg
ef10: 65 73 74 0a 5b 49 4e 54 45 47 45 52 20 50 52 49  est.[INTEGER PRI
ef20: 4d 41 52 59 20 4b 45 59 5d 20 65 76 65 72 20 75  MARY KEY] ever u
ef30: 73 65 64 20 62 79 20 74 68 61 74 20 74 61 62 6c  sed by that tabl
ef40: 65 20 69 73 20 69 6e 20 74 68 65 20 73 71 6c 69  e is in the sqli
ef50: 74 65 5f 73 65 71 75 65 6e 63 65 2e 73 65 71 0a  te_sequence.seq.
ef60: 66 69 65 6c 64 2e 29 5e 20 20 5e 4e 65 77 20 61  field.)^  ^New a
ef70: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 67 65 6e  utomatically gen
ef80: 65 72 61 74 65 64 20 69 6e 74 65 67 65 72 20 70  erated integer p
ef90: 72 69 6d 61 72 79 20 6b 65 79 73 20 66 6f 72 20  rimary keys for 
efa0: 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 74 61  AUTOINCREMENT.ta
efb0: 62 6c 65 73 20 61 72 65 20 67 75 61 72 61 6e 74  bles are guarant
efc0: 65 65 64 20 74 6f 20 62 65 20 6c 61 72 67 65 72  eed to be larger
efd0: 20 74 68 61 6e 20 74 68 65 20 73 71 6c 69 74 65   than the sqlite
efe0: 5f 73 65 71 75 65 6e 63 65 2e 73 65 71 20 66 69  _sequence.seq fi
eff0: 65 6c 64 20 66 6f 72 0a 74 68 61 74 20 74 61 62  eld for.that tab
f000: 6c 65 2e 0a 5e 28 49 66 20 74 68 65 20 73 71 6c  le..^(If the sql
f010: 69 74 65 5f 73 65 71 75 65 6e 63 65 2e 73 65 71  ite_sequence.seq
f020: 20 66 69 65 6c 64 20 6f 66 20 61 6e 20 41 55 54   field of an AUT
f030: 4f 49 4e 43 52 45 4d 45 4e 54 20 74 61 62 6c 65  OINCREMENT table
f040: 20 69 73 20 61 6c 72 65 61 64 79 20 61 74 0a 74   is already at.t
f050: 68 65 20 6c 61 72 67 65 73 74 20 69 6e 74 65 67  he largest integ
f060: 65 72 20 76 61 6c 75 65 20 28 39 32 32 33 33 37  er value (922337
f070: 32 30 33 36 38 35 34 37 37 35 38 30 37 29 20 74  2036854775807) t
f080: 68 65 6e 20 61 74 74 65 6d 70 74 73 20 74 6f 20  hen attempts to 
f090: 61 64 64 20 6e 65 77 0a 72 6f 77 73 20 74 6f 20  add new.rows to 
f0a0: 74 68 61 74 20 74 61 62 6c 65 20 77 69 74 68 20  that table with 
f0b0: 61 6e 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  an automatically
f0c0: 20 67 65 6e 65 72 61 74 65 64 20 69 6e 74 65 67   generated integ
f0d0: 65 72 20 70 72 69 6d 61 72 79 20 77 69 6c 6c 20  er primary will 
f0e0: 66 61 69 6c 0a 77 69 74 68 20 61 6e 20 5b 53 51  fail.with an [SQ
f0f0: 4c 49 54 45 5f 46 55 4c 4c 5d 20 65 72 72 6f 72  LITE_FULL] error
f100: 2e 29 5e 0a 5e 54 68 65 20 73 71 6c 69 74 65 5f  .)^.^The sqlite_
f110: 73 65 71 75 65 6e 63 65 2e 73 65 71 20 66 69 65  sequence.seq fie
f120: 6c 64 20 69 73 20 61 75 74 6f 6d 61 74 69 63 61  ld is automatica
f130: 6c 6c 79 20 75 70 64 61 74 65 64 20 69 66 20 72  lly updated if r
f140: 65 71 75 69 72 65 64 20 77 68 65 6e 0a 6e 65 77  equired when.new
f150: 20 65 6e 74 72 69 65 73 20 61 72 65 20 61 64 64   entries are add
f160: 65 64 20 74 6f 20 61 6e 20 41 55 54 4f 49 4e 43  ed to an AUTOINC
f170: 52 45 4d 45 4e 54 20 74 61 62 6c 65 2e 20 20 0a  REMENT table.  .
f180: 5e 54 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75  ^The sqlite_sequ
f190: 65 6e 63 65 20 72 6f 77 20 66 6f 72 20 61 6e 20  ence row for an 
f1a0: 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 74 61  AUTOINCREMENT ta
f1b0: 62 6c 65 20 69 73 20 61 75 74 6f 6d 61 74 69 63  ble is automatic
f1c0: 61 6c 6c 79 20 64 65 6c 65 74 65 64 0a 77 68 65  ally deleted.whe
f1d0: 6e 20 74 68 65 20 74 61 62 6c 65 20 69 73 20 64  n the table is d
f1e0: 72 6f 70 70 65 64 2e 0a 5e 49 66 20 74 68 65 20  ropped..^If the 
f1f0: 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 20  sqlite_sequence 
f200: 72 6f 77 20 66 6f 72 20 61 6e 20 41 55 54 4f 49  row for an AUTOI
f210: 4e 43 52 45 4d 45 4e 54 20 74 61 62 6c 65 20 64  NCREMENT table d
f220: 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 20 77 68  oes not exist wh
f230: 65 6e 0a 74 68 65 20 41 55 54 4f 49 4e 43 52 45  en.the AUTOINCRE
f240: 4d 45 4e 54 20 74 61 62 6c 65 20 69 73 20 75 70  MENT table is up
f250: 64 61 74 65 64 2c 20 74 68 65 6e 20 61 20 6e 65  dated, then a ne
f260: 77 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63  w sqlite_sequenc
f270: 65 20 72 6f 77 20 69 73 20 63 72 65 61 74 65 64  e row is created
f280: 2e 0a 5e 28 49 66 20 74 68 65 20 73 71 6c 69 74  ..^(If the sqlit
f290: 65 5f 73 65 71 75 65 6e 63 65 2e 73 65 71 20 76  e_sequence.seq v
f2a0: 61 6c 75 65 20 66 6f 72 20 61 6e 20 41 55 54 4f  alue for an AUTO
f2b0: 49 4e 43 52 45 4d 45 4e 54 20 74 61 62 6c 65 20  INCREMENT table 
f2c0: 69 73 20 6d 61 6e 75 61 6c 6c 79 20 0a 73 65 74  is manually .set
f2d0: 20 74 6f 20 73 6f 6d 65 74 68 69 6e 67 20 6f 74   to something ot
f2e0: 68 65 72 20 74 68 61 6e 20 61 6e 20 69 6e 74 65  her than an inte
f2f0: 67 65 72 20 61 6e 64 20 74 68 65 72 65 20 69 73  ger and there is
f300: 20 61 20 73 75 62 73 65 71 75 65 6e 74 20 61 74   a subsequent at
f310: 74 65 6d 70 74 20 74 6f 0a 69 6e 73 65 72 74 20  tempt to.insert 
f320: 74 68 65 20 6f 72 20 75 70 64 61 74 65 20 74 68  the or update th
f330: 65 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20  e AUTOINCREMENT 
f340: 74 61 62 6c 65 2c 20 74 68 65 6e 20 74 68 65 20  table, then the 
f350: 62 65 68 61 76 69 6f 72 20 69 73 20 75 6e 64 65  behavior is unde
f360: 66 69 6e 65 64 2e 29 5e 0a 0a 3c 70 3e 5e 41 70  fined.)^..<p>^Ap
f370: 70 6c 69 63 61 74 69 6f 6e 20 63 6f 64 65 20 69  plication code i
f380: 73 20 61 6c 6c 6f 77 65 64 20 74 6f 20 6d 6f 64  s allowed to mod
f390: 69 66 79 20 74 68 65 20 73 71 6c 69 74 65 5f 73  ify the sqlite_s
f3a0: 65 71 75 65 6e 63 65 20 74 61 62 6c 65 2c 20 74  equence table, t
f3b0: 6f 20 61 64 64 0a 6e 65 77 20 72 6f 77 73 2c 20  o add.new rows, 
f3c0: 74 6f 20 64 65 6c 65 74 65 20 72 6f 77 73 2c 20  to delete rows, 
f3d0: 6f 72 20 74 6f 20 6d 6f 64 69 66 79 20 65 78 69  or to modify exi
f3e0: 73 74 69 6e 67 20 72 6f 77 73 2e 20 20 5e 48 6f  sting rows.  ^Ho
f3f0: 77 65 76 65 72 2c 20 61 70 70 6c 69 63 61 74 69  wever, applicati
f400: 6f 6e 0a 63 6f 64 65 20 63 61 6e 6e 6f 74 20 63  on.code cannot c
f410: 72 65 61 74 65 20 74 68 65 20 73 71 6c 69 74 65  reate the sqlite
f420: 5f 73 65 71 75 65 6e 63 65 20 74 61 62 6c 65 20  _sequence table 
f430: 69 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 61  if it does not a
f440: 6c 72 65 61 64 79 20 65 78 69 73 74 2e 0a 5e 41  lready exist..^A
f450: 70 70 6c 69 63 61 74 69 6f 6e 20 63 6f 64 65 20  pplication code 
f460: 63 61 6e 20 64 65 6c 65 74 65 20 61 6c 6c 20 65  can delete all e
f470: 6e 74 72 69 65 73 20 66 72 6f 6d 20 74 68 65 20  ntries from the 
f480: 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 20  sqlite_sequence 
f490: 74 61 62 6c 65 2c 0a 62 75 74 20 61 70 70 6c 69  table,.but appli
f4a0: 63 61 74 69 6f 6e 20 63 6f 64 65 20 63 61 6e 6e  cation code cann
f4b0: 6f 74 20 64 72 6f 70 20 74 68 65 20 73 71 6c 69  ot drop the sqli
f4c0: 74 65 5f 73 65 71 75 65 6e 63 65 20 74 61 62 6c  te_sequence tabl
f4d0: 65 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  e...<tcl>hd_frag
f4e0: 6d 65 6e 74 20 73 74 61 74 31 74 61 62 20 7b 73  ment stat1tab {s
f4f0: 71 6c 69 74 65 5f 73 74 61 74 31 7d 20 53 51 4c  qlite_stat1} SQL
f500: 49 54 45 5f 53 54 41 54 31 20 3c 2f 74 63 6c 3e  ITE_STAT1 </tcl>
f510: 0a 3c 68 33 3e 54 68 65 20 73 71 6c 69 74 65 5f  .<h3>The sqlite_
f520: 73 74 61 74 31 20 74 61 62 6c 65 3c 2f 68 33 3e  stat1 table</h3>
f530: 0a 0a 3c 70 3e 5e 54 68 65 20 73 71 6c 69 74 65  ..<p>^The sqlite
f540: 5f 73 74 61 74 31 20 69 73 20 61 6e 20 69 6e 74  _stat1 is an int
f550: 65 72 6e 61 6c 20 74 61 62 6c 65 20 63 72 65 61  ernal table crea
f560: 74 65 64 20 62 79 20 74 68 65 20 5b 41 4e 41 4c  ted by the [ANAL
f570: 59 5a 45 5d 20 63 6f 6d 6d 61 6e 64 0a 61 6e 64  YZE] command.and
f580: 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 73 75   used to hold su
f590: 70 70 6c 65 6d 65 6e 74 61 6c 20 69 6e 66 6f 72  pplemental infor
f5a0: 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 61 62  mation about tab
f5b0: 6c 65 73 20 61 6e 64 20 69 6e 64 65 78 65 73 20  les and indexes 
f5c0: 74 68 61 74 20 74 68 65 0a 71 75 65 72 79 20 70  that the.query p
f5d0: 6c 61 6e 6e 65 72 20 63 61 6e 20 75 73 65 20 74  lanner can use t
f5e0: 6f 20 68 65 6c 70 20 69 74 20 66 69 6e 64 20 62  o help it find b
f5f0: 65 74 74 65 72 20 77 61 79 73 20 6f 66 20 70 65  etter ways of pe
f600: 72 66 6f 72 6d 69 6e 67 20 71 75 65 72 69 65 73  rforming queries
f610: 2e 0a 5e 41 70 70 6c 69 63 61 74 69 6f 6e 73 20  ..^Applications 
f620: 63 61 6e 20 75 70 64 61 74 65 2c 20 64 65 6c 65  can update, dele
f630: 74 65 20 66 72 6f 6d 2c 20 69 6e 73 65 72 74 20  te from, insert 
f640: 69 6e 74 6f 20 6f 72 20 64 72 6f 70 20 74 68 65  into or drop the
f650: 20 73 71 6c 69 74 65 5f 73 74 61 74 31 0a 74 61   sqlite_stat1.ta
f660: 62 6c 65 2c 20 62 75 74 20 6d 61 79 20 6e 6f 74  ble, but may not
f670: 20 63 72 65 61 74 65 20 6f 72 20 61 6c 74 65 72   create or alter
f680: 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74   the sqlite_stat
f690: 31 20 74 61 62 6c 65 2e 0a 5e 28 54 68 65 20 73  1 table..^(The s
f6a0: 63 68 65 6d 61 20 6f 66 20 74 68 65 20 73 71 6c  chema of the sql
f6b0: 69 74 65 5f 73 74 61 74 31 20 74 61 62 6c 65 20  ite_stat1 table 
f6c0: 69 73 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a  is as follows:..
f6d0: 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65  <blockquote><pre
f6e0: 3e 0a 43 52 45 41 54 45 20 54 41 42 4c 45 20 73  >.CREATE TABLE s
f6f0: 71 6c 69 74 65 5f 73 74 61 74 31 28 74 62 6c 2c  qlite_stat1(tbl,
f700: 69 64 78 2c 73 74 61 74 29 3b 0a 3c 2f 70 72 65  idx,stat);.</pre
f710: 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e  ></blockquote>)^
f720: 0a 0a 3c 70 3e 20 5e 28 54 68 65 72 65 20 69 73  ..<p> ^(There is
f730: 20 6e 6f 72 6d 61 6c 6c 79 20 6f 6e 65 20 72 6f   normally one ro
f740: 77 20 70 65 72 20 69 6e 64 65 78 2c 20 77 69 74  w per index, wit
f750: 68 20 74 68 65 20 69 6e 64 65 78 20 69 64 65 6e  h the index iden
f760: 74 69 66 69 65 64 20 62 79 20 74 68 65 0a 6e 61  tified by the.na
f770: 6d 65 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65  me in the sqlite
f780: 5f 73 74 61 74 31 2e 69 64 78 20 63 6f 6c 75 6d  _stat1.idx colum
f790: 6e 2e 29 5e 20 20 5e 28 54 68 65 20 73 71 6c 69  n.)^  ^(The sqli
f7a0: 74 65 5f 73 74 61 74 31 2e 74 62 6c 20 63 6f 6c  te_stat1.tbl col
f7b0: 75 6d 6e 20 69 73 0a 74 68 65 20 6e 61 6d 65 20  umn is.the name 
f7c0: 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20  of the table to 
f7d0: 77 68 69 63 68 20 74 68 65 20 69 6e 64 65 78 20  which the index 
f7e0: 62 65 6c 6f 6e 67 73 2e 29 5e 20 20 5e 28 49 6e  belongs.)^  ^(In
f7f0: 20 65 61 63 68 20 73 75 63 68 20 72 6f 77 2c 20   each such row, 
f800: 0a 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74  .the sqlite_stat
f810: 2e 73 74 61 74 20 63 6f 6c 75 6d 6e 20 77 69 6c  .stat column wil
f820: 6c 20 62 65 0a 61 20 73 74 72 69 6e 67 20 63 6f  l be.a string co
f830: 6e 73 69 73 74 69 6e 67 20 6f 66 20 61 20 6c 69  nsisting of a li
f840: 73 74 20 6f 66 20 69 6e 74 65 67 65 72 73 20 66  st of integers f
f850: 6f 6c 6c 6f 77 65 64 20 62 79 20 7a 65 72 6f 20  ollowed by zero 
f860: 6f 72 20 6d 6f 72 65 20 0a 61 72 67 75 6d 65 6e  or more .argumen
f870: 74 73 2e 29 5e 20 20 5e 54 68 65 20 66 69 72 73  ts.)^  ^The firs
f880: 74 20 69 6e 74 65 67 65 72 20 69 6e 20 74 68 69  t integer in thi
f890: 73 0a 6c 69 73 74 20 69 73 20 74 68 65 20 61 70  s.list is the ap
f8a0: 70 72 6f 78 69 6d 61 74 65 20 6e 75 6d 62 65 72  proximate number
f8b0: 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20   of rows in the 
f8c0: 69 6e 64 65 78 2e 20 20 28 54 68 65 20 6e 75 6d  index.  (The num
f8d0: 62 65 72 20 6f 66 0a 72 6f 77 73 20 69 6e 20 74  ber of.rows in t
f8e0: 68 65 20 69 6e 64 65 78 20 69 73 20 74 68 65 20  he index is the 
f8f0: 73 61 6d 65 20 61 73 20 74 68 65 20 6e 75 6d 62  same as the numb
f900: 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68  er of rows in th
f910: 65 20 74 61 62 6c 65 2c 0a 65 78 63 65 70 74 20  e table,.except 
f920: 66 6f 72 20 5b 70 61 72 74 69 61 6c 20 69 6e 64  for [partial ind
f930: 65 78 65 73 5d 2e 29 0a 5e 54 68 65 20 73 65 63  exes].).^The sec
f940: 6f 6e 64 20 69 6e 74 65 67 65 72 20 69 73 20 74  ond integer is t
f950: 68 65 20 61 70 70 72 6f 78 69 6d 61 74 65 20 6e  he approximate n
f960: 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e  umber of rows in
f970: 20 74 68 65 20 69 6e 64 65 78 0a 74 68 61 74 20   the index.that 
f980: 68 61 76 65 20 74 68 65 20 73 61 6d 65 20 76 61  have the same va
f990: 6c 75 65 20 69 6e 20 74 68 65 20 66 69 72 73 74  lue in the first
f9a0: 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 69   column of the i
f9b0: 6e 64 65 78 2e 20 20 5e 54 68 65 20 74 68 69 72  ndex.  ^The thir
f9c0: 64 20 0a 69 6e 74 65 67 65 72 20 69 73 20 74 68  d .integer is th
f9d0: 65 20 6e 75 6d 62 65 72 20 6e 75 6d 62 65 72 20  e number number 
f9e0: 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20 69  of rows in the i
f9f0: 6e 64 65 78 20 74 68 61 74 20 68 61 76 65 20 0a  ndex that have .
fa00: 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20 66  the same value f
fa10: 6f 72 20 74 68 65 20 66 69 72 73 74 20 74 77 6f  or the first two
fa20: 20 63 6f 6c 75 6d 6e 73 2e 20 20 5e 54 68 65 20   columns.  ^The 
fa30: 4e 2d 74 68 20 69 6e 74 65 67 65 72 20 28 66 6f  N-th integer (fo
fa40: 72 20 4e 3e 31 29 20 0a 69 73 20 74 68 65 20 65  r N>1) .is the e
fa50: 73 74 69 6d 61 74 65 64 20 61 76 65 72 61 67 65  stimated average
fa60: 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
fa70: 69 6e 20 0a 74 68 65 20 69 6e 64 65 78 20 77 68  in .the index wh
fa80: 69 63 68 20 68 61 76 65 20 74 68 65 20 73 61 6d  ich have the sam
fa90: 65 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20  e value for the 
faa0: 66 69 72 73 74 20 4e 2d 31 20 63 6f 6c 75 6d 6e  first N-1 column
fab0: 73 2e 20 20 5e 46 6f 72 0a 61 20 4b 2d 63 6f 6c  s.  ^For.a K-col
fac0: 75 6d 6e 20 69 6e 64 65 78 2c 20 74 68 65 72 65  umn index, there
fad0: 20 77 69 6c 6c 20 62 65 20 4b 2b 31 20 69 6e 74   will be K+1 int
fae0: 65 67 65 72 73 20 69 6e 20 74 68 65 20 73 74 61  egers in the sta
faf0: 74 20 63 6f 6c 75 6d 6e 2e 20 20 5e 49 66 0a 74  t column.  ^If.t
fb00: 68 65 20 69 6e 64 65 78 20 69 73 20 75 6e 69 71  he index is uniq
fb10: 75 65 2c 20 74 68 65 6e 20 74 68 65 20 6c 61 73  ue, then the las
fb20: 74 20 69 6e 74 65 67 65 72 20 77 69 6c 6c 20 62  t integer will b
fb30: 65 20 31 2e 0a 0a 3c 70 3e 5e 54 68 65 20 6c 69  e 1...<p>^The li
fb40: 73 74 20 6f 66 20 69 6e 74 65 67 65 72 73 20 69  st of integers i
fb50: 6e 20 74 68 65 20 73 74 61 74 20 63 6f 6c 75 6d  n the stat colum
fb60: 6e 20 63 61 6e 20 6f 70 74 69 6f 6e 61 6c 6c 79  n can optionally
fb70: 20 62 65 20 66 6f 6c 6c 6f 77 65 64 0a 62 79 20   be followed.by 
fb80: 61 72 67 75 6d 65 6e 74 73 2c 20 65 61 63 68 20  arguments, each 
fb90: 6f 66 20 77 68 69 63 68 20 69 73 20 61 20 73 65  of which is a se
fba0: 71 75 65 6e 63 65 20 6f 66 20 6e 6f 6e 2d 73 70  quence of non-sp
fbb0: 61 63 65 20 63 68 61 72 61 63 74 65 72 73 2e 0a  ace characters..
fbc0: 5e 41 6c 6c 20 61 72 67 75 6d 65 6e 74 73 20 61  ^All arguments a
fbd0: 72 65 20 70 72 65 63 65 64 65 64 20 62 79 20 61  re preceded by a
fbe0: 20 73 69 6e 67 6c 65 20 73 70 61 63 65 2e 0a 5e   single space..^
fbf0: 55 6e 72 65 63 6f 67 6e 69 7a 65 64 20 61 72 67  Unrecognized arg
fc00: 75 6d 65 6e 74 73 20 61 72 65 20 73 69 6c 65 6e  uments are silen
fc10: 74 6c 79 20 69 67 6e 6f 72 65 64 2e 0a 0a 3c 70  tly ignored...<p
fc20: 3e 5e 49 66 20 74 68 65 20 22 75 6e 6f 72 64 65  >^If the "unorde
fc30: 72 65 64 22 20 61 72 67 75 6d 65 6e 74 20 69 73  red" argument is
fc40: 20 70 72 65 73 65 6e 74 2c 20 74 68 65 6e 20 74   present, then t
fc50: 68 65 20 71 75 65 72 79 20 70 6c 61 6e 6e 65 72  he query planner
fc60: 20 61 73 73 75 6d 65 73 0a 74 68 61 74 20 74 68   assumes.that th
fc70: 65 20 69 6e 64 65 78 20 69 73 20 75 6e 6f 72 64  e index is unord
fc80: 65 72 65 64 20 61 6e 64 20 77 69 6c 6c 20 6e 6f  ered and will no
fc90: 74 20 75 73 65 20 74 68 65 20 69 6e 64 65 78 20  t use the index 
fca0: 66 6f 72 20 61 20 72 61 6e 67 65 20 71 75 65 72  for a range quer
fcb0: 79 0a 6f 72 20 66 6f 72 20 73 6f 72 74 69 6e 67  y.or for sorting
fcc0: 2e 0a 0a 3c 70 3e 5e 54 68 65 20 22 73 7a 3d 4e  ...<p>^The "sz=N
fcd0: 4e 4e 22 20 61 72 67 75 6d 65 6e 74 20 28 77 68  NN" argument (wh
fce0: 65 72 65 20 4e 4e 4e 20 72 65 70 72 65 73 65 6e  ere NNN represen
fcf0: 74 73 20 61 20 73 65 71 75 65 6e 63 65 20 6f 66  ts a sequence of
fd00: 20 31 20 6f 72 20 6d 6f 72 65 20 64 69 67 69 74   1 or more digit
fd10: 73 29 0a 6d 65 61 6e 73 20 74 68 61 74 20 74 68  s).means that th
fd20: 65 20 61 76 65 72 61 67 65 20 72 6f 77 20 73 69  e average row si
fd30: 7a 65 20 6f 76 65 72 20 61 6c 6c 20 72 65 63 6f  ze over all reco
fd40: 72 64 73 20 6f 66 20 74 68 65 20 74 61 62 6c 65  rds of the table
fd50: 20 6f 72 0a 69 6e 64 65 78 20 69 73 20 4e 4e 4e   or.index is NNN
fd60: 20 62 79 74 65 73 20 70 65 72 20 72 6f 77 2e 20   bytes per row. 
fd70: 20 5e 54 68 65 20 53 51 4c 69 74 65 20 71 75 65   ^The SQLite que
fd80: 72 79 20 70 6c 61 6e 6e 65 72 20 6d 69 67 68 74  ry planner might
fd90: 20 75 73 65 20 74 68 65 0a 65 73 74 69 6d 61 74   use the.estimat
fda0: 65 64 20 72 6f 77 20 73 69 7a 65 20 69 6e 66 6f  ed row size info
fdb0: 72 6d 61 74 69 6f 6e 20 70 72 6f 76 69 64 65 64  rmation provided
fdc0: 20 62 79 20 74 68 65 20 22 73 7a 3d 4e 4e 4e 22   by the "sz=NNN"
fdd0: 20 74 6f 6b 65 6e 0a 74 6f 20 68 65 6c 70 20 69   token.to help i
fde0: 74 20 63 68 6f 6f 73 65 20 73 6d 61 6c 6c 65 72  t choose smaller
fdf0: 20 74 61 62 6c 65 73 20 61 6e 64 20 69 6e 64 65   tables and inde
fe00: 78 65 73 20 74 68 61 74 20 72 65 71 75 69 72 65  xes that require
fe10: 20 6c 65 73 73 20 64 69 73 6b 20 49 2f 4f 2e 0a   less disk I/O..
fe20: 0a 3c 70 3e 5e 28 54 68 65 20 70 72 65 73 65 6e  .<p>^(The presen
fe30: 63 65 20 6f 66 20 74 68 65 20 22 6e 6f 73 6b 69  ce of the "noski
fe40: 70 73 63 61 6e 22 20 74 6f 6b 65 6e 20 6f 6e 20  pscan" token on 
fe50: 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 31  the sqlite_stat1
fe60: 2e 73 74 61 74 20 66 69 65 6c 64 0a 6f 66 20 61  .stat field.of a
fe70: 6e 20 69 6e 64 65 78 20 70 72 65 76 65 6e 74 73  n index prevents
fe80: 20 74 68 61 74 20 69 6e 64 65 78 20 66 72 6f 6d   that index from
fe90: 20 62 65 69 6e 67 20 75 73 65 64 20 77 69 74 68   being used with
fea0: 20 74 68 65 0a 5b 73 6b 69 70 2d 73 63 61 6e 20   the.[skip-scan 
feb0: 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 5d 2e 29 5e  optimization].)^
fec0: 0a 0a 3c 70 3e 4e 65 77 20 74 65 78 74 20 74 6f  ..<p>New text to
fed0: 6b 65 6e 73 20 6d 61 79 20 62 65 20 61 64 64 65  kens may be adde
fee0: 64 20 74 6f 20 74 68 65 20 65 6e 64 20 6f 66 20  d to the end of 
fef0: 74 68 65 20 73 74 61 74 20 63 6f 6c 75 6d 6e 20  the stat column 
ff00: 69 6e 20 66 75 74 75 72 65 0a 65 6e 68 61 6e 63  in future.enhanc
ff10: 65 6d 65 6e 74 73 20 74 6f 20 53 51 4c 69 74 65  ements to SQLite
ff20: 2e 20 20 46 6f 72 20 63 6f 6d 70 61 74 69 62 69  .  For compatibi
ff30: 6c 69 74 79 2c 20 75 6e 72 65 63 6f 67 6e 69 7a  lity, unrecogniz
ff40: 65 64 20 74 6f 6b 65 6e 73 20 61 74 20 74 68 65  ed tokens at the
ff50: 20 65 6e 64 0a 6f 66 20 74 68 65 20 73 74 61 74   end.of the stat
ff60: 20 63 6f 6c 75 6d 6e 20 61 72 65 20 73 69 6c 65   column are sile
ff70: 6e 74 6c 79 20 69 67 6e 6f 72 65 64 2e 0a 0a 3c  ntly ignored...<
ff80: 70 3e 5e 28 49 66 20 74 68 65 20 73 71 6c 69 74  p>^(If the sqlit
ff90: 65 5f 73 74 61 74 31 2e 69 64 78 20 63 6f 6c 75  e_stat1.idx colu
ffa0: 6d 6e 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 6e  mn is NULL, then
ffb0: 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74   the sqlite_stat
ffc0: 31 2e 73 74 61 74 0a 63 6f 6c 75 6d 6e 20 63 6f  1.stat.column co
ffd0: 6e 74 61 69 6e 73 20 61 20 73 69 6e 67 6c 65 20  ntains a single 
ffe0: 69 6e 74 65 67 65 72 20 77 68 69 63 68 20 69 73  integer which is
fff0: 20 74 68 65 20 61 70 70 72 6f 78 69 6d 61 74 65   the approximate
10000 20 6e 75 6d 62 65 72 20 6f 66 0a 72 6f 77 73 20   number of.rows 
10010 69 6e 20 74 68 65 20 74 61 62 6c 65 20 69 64 65  in the table ide
10020 6e 74 69 66 69 65 64 20 62 79 20 73 71 6c 69 74  ntified by sqlit
10030 65 5f 73 74 61 74 31 2e 74 62 6c 2e 29 5e 0a 0a  e_stat1.tbl.)^..
10040 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
10050 20 73 74 61 74 32 74 61 62 20 7b 73 71 6c 69 74   stat2tab {sqlit
10060 65 5f 73 74 61 74 32 7d 3c 2f 74 63 6c 3e 0a 3c  e_stat2}</tcl>.<
10070 68 33 3e 54 68 65 20 73 71 6c 69 74 65 5f 73 74  h3>The sqlite_st
10080 61 74 32 20 74 61 62 6c 65 3c 2f 68 33 3e 0a 0a  at2 table</h3>..
10090 3c 70 3e 54 68 65 20 73 71 6c 69 74 65 5f 73 74  <p>The sqlite_st
100a0 61 74 32 20 69 73 20 6f 6e 6c 79 20 63 72 65 61  at2 is only crea
100b0 74 65 64 20 61 6e 64 20 69 73 20 6f 6e 6c 79 20  ted and is only 
100c0 75 73 65 64 20 69 66 20 53 51 4c 69 74 65 20 69  used if SQLite i
100d0 73 20 63 6f 6d 70 69 6c 65 64 0a 77 69 74 68 20  s compiled.with 
100e0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
100f0 41 54 32 20 61 6e 64 20 69 66 20 74 68 65 20 53  AT2 and if the S
10100 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20 6e 75  QLite version nu
10110 6d 62 65 72 20 69 73 20 62 65 74 77 65 65 6e 0a  mber is between.
10120 33 2e 36 2e 31 38 20 61 6e 64 20 33 2e 37 2e 38  3.6.18 and 3.7.8
10130 2e 20 20 54 68 65 20 73 71 6c 69 74 65 5f 73 74  .  The sqlite_st
10140 61 74 32 20 74 61 62 6c 65 20 69 73 20 6e 65 69  at2 table is nei
10150 74 68 65 72 20 72 65 61 64 20 6e 6f 72 20 77 72  ther read nor wr
10160 69 74 74 65 6e 20 62 79 20 61 6e 79 0a 76 65 72  itten by any.ver
10170 73 69 6f 6e 20 6f 66 20 53 51 4c 69 74 65 20 62  sion of SQLite b
10180 65 66 6f 72 65 20 33 2e 36 2e 31 38 20 6e 6f 72  efore 3.6.18 nor
10190 20 61 66 74 65 72 20 33 2e 37 2e 38 2e 0a 54 68   after 3.7.8..Th
101a0 65 20 73 71 6c 69 74 65 5f 73 74 61 74 32 20 74  e sqlite_stat2 t
101b0 61 62 6c 65 20 63 6f 6e 74 61 69 6e 73 20 61 64  able contains ad
101c0 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
101d0 74 69 6f 6e 0a 61 62 6f 75 74 20 74 68 65 20 64  tion.about the d
101e0 69 73 74 72 69 62 75 74 69 6f 6e 20 6f 66 20 6b  istribution of k
101f0 65 79 73 20 77 69 74 68 69 6e 20 61 6e 20 69 6e  eys within an in
10200 64 65 78 2e 0a 54 68 65 20 73 63 68 65 6d 61 20  dex..The schema 
10210 6f 66 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74  of the sqlite_st
10220 61 74 32 20 74 61 62 6c 65 20 69 73 20 61 73 20  at2 table is as 
10230 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 62 6c 6f 63 6b  follows:..<block
10240 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 43 52 45 41  quote><pre>.CREA
10250 54 45 20 54 41 42 4c 45 20 73 71 6c 69 74 65 5f  TE TABLE sqlite_
10260 73 74 61 74 32 28 74 62 6c 2c 69 64 78 2c 73 61  stat2(tbl,idx,sa
10270 6d 70 6c 65 6e 6f 2c 73 61 6d 70 6c 65 29 3b 0a  mpleno,sample);.
10280 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f  </pre></blockquo
10290 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 73 71 6c 69  te>..<p>The sqli
102a0 74 65 5f 73 74 61 74 32 2e 69 64 78 20 63 6f 6c  te_stat2.idx col
102b0 75 6d 6e 20 61 6e 64 20 74 68 65 20 73 71 6c 69  umn and the sqli
102c0 74 65 5f 73 74 61 74 32 2e 74 62 6c 20 63 6f 6c  te_stat2.tbl col
102d0 75 6d 6e 20 69 6e 20 65 61 63 68 20 0a 72 6f 77  umn in each .row
102e0 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 5f 73   of the sqlite_s
102f0 74 61 74 32 20 74 61 62 6c 65 20 69 64 65 6e 74  tat2 table ident
10300 69 66 79 20 61 6e 20 69 6e 64 65 78 20 64 65 73  ify an index des
10310 63 72 69 62 65 64 20 62 79 20 74 68 61 74 20 72  cribed by that r
10320 6f 77 2e 0a 54 68 65 72 65 20 61 72 65 20 75 73  ow..There are us
10330 75 61 6c 6c 79 20 31 30 20 72 6f 77 73 20 69 6e  ually 10 rows in
10340 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74   the sqlite_stat
10350 32 0a 74 61 62 6c 65 20 66 6f 72 20 65 61 63 68  2.table for each
10360 20 69 6e 64 65 78 2e 0a 0a 3c 70 3e 54 68 65 20   index...<p>The 
10370 73 71 6c 69 74 65 5f 73 74 61 74 32 20 65 6e 74  sqlite_stat2 ent
10380 72 69 65 73 20 66 6f 72 20 61 6e 20 69 6e 64 65  ries for an inde
10390 78 20 74 68 61 74 20 68 61 76 65 20 73 71 6c 69  x that have sqli
103a0 74 65 5f 73 74 61 74 32 2e 73 61 6d 70 6c 65 6e  te_stat2.samplen
103b0 6f 0a 62 65 74 77 65 65 6e 20 30 20 61 6e 64 20  o.between 0 and 
103c0 39 20 69 6e 63 6c 75 73 69 76 65 20 61 72 65 20  9 inclusive are 
103d0 73 61 6d 70 6c 65 73 20 6f 66 20 74 68 65 20 6c  samples of the l
103e0 65 66 74 2d 6d 6f 73 74 20 6b 65 79 20 76 61 6c  eft-most key val
103f0 75 65 20 69 6e 20 74 68 65 0a 69 6e 64 65 78 20  ue in the.index 
10400 74 61 6b 65 6e 20 61 74 20 65 76 65 6e 6c 79 20  taken at evenly 
10410 73 70 61 63 65 64 20 70 6f 69 6e 74 73 20 61 6c  spaced points al
10420 6f 6e 67 20 74 68 65 20 69 6e 64 65 78 2e 0a 4c  ong the index..L
10430 65 74 20 43 20 62 65 20 74 68 65 20 6e 75 6d 62  et C be the numb
10440 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68  er of rows in th
10450 65 20 69 6e 64 65 78 2e 0a 54 68 65 6e 20 74 68  e index..Then th
10460 65 20 73 61 6d 70 6c 65 64 20 72 6f 77 73 20 61  e sampled rows a
10470 72 65 20 67 69 76 65 6e 20 62 79 0a 0a 3c 62 6c  re given by..<bl
10480 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 20 20 20 72  ockquote>.     r
10490 6f 77 6e 75 6d 62 65 72 20 3d 20 28 69 2a 43 2a  ownumber = (i*C*
104a0 32 20 2b 20 43 29 2f 32 30 0a 3c 2f 62 6c 6f 63  2 + C)/20.</bloc
104b0 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 20  kquote>..<p>The 
104c0 76 61 72 69 61 62 6c 65 20 69 20 69 6e 20 74 68  variable i in th
104d0 65 20 70 72 65 76 69 6f 75 73 20 65 78 70 72 65  e previous expre
104e0 73 73 69 6f 6e 20 76 61 72 69 65 73 20 62 65 74  ssion varies bet
104f0 77 65 65 6e 20 30 20 61 6e 64 20 39 2e 0a 43 6f  ween 0 and 9..Co
10500 6e 63 65 70 74 75 61 6c 6c 79 2c 20 74 68 65 20  nceptually, the 
10510 69 6e 64 65 78 20 73 70 61 63 65 20 69 73 20 64  index space is d
10520 69 76 69 64 65 64 20 69 6e 74 6f 0a 31 30 20 75  ivided into.10 u
10530 6e 69 66 6f 72 6d 20 62 75 63 6b 65 74 73 20 61  niform buckets a
10540 6e 64 20 74 68 65 20 73 61 6d 70 6c 65 73 20 61  nd the samples a
10550 72 65 20 74 68 65 20 6d 69 64 64 6c 65 20 72 6f  re the middle ro
10560 77 20 66 72 6f 6d 20 65 61 63 68 20 62 75 63 6b  w from each buck
10570 65 74 2e 0a 0a 3c 70 3e 54 68 65 20 66 6f 72 6d  et...<p>The form
10580 61 74 20 66 6f 72 20 73 71 6c 69 74 65 5f 73 74  at for sqlite_st
10590 61 74 32 20 69 73 20 72 65 63 6f 72 64 65 64 20  at2 is recorded 
105a0 68 65 72 65 20 66 6f 72 20 6c 65 67 61 63 79 20  here for legacy 
105b0 72 65 66 65 72 65 6e 63 65 2e 20 20 0a 52 65 63  reference.  .Rec
105c0 65 6e 74 20 76 65 72 73 69 6f 6e 73 20 6f 66 20  ent versions of 
105d0 53 51 4c 69 74 65 20 6e 6f 20 6c 6f 6e 67 65 72  SQLite no longer
105e0 20 73 75 70 70 6f 72 74 20 73 71 6c 69 74 65 5f   support sqlite_
105f0 73 74 61 74 32 20 61 6e 64 20 74 68 65 0a 73 71  stat2 and the.sq
10600 6c 69 74 65 5f 73 74 61 74 32 20 74 61 62 6c 65  lite_stat2 table
10610 2c 20 69 74 20 69 73 20 65 78 69 73 74 73 2c 20  , it is exists, 
10620 69 73 20 73 69 6d 70 6c 79 20 69 67 6e 6f 72 65  is simply ignore
10630 64 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  d...<tcl>hd_frag
10640 6d 65 6e 74 20 73 74 61 74 33 74 61 62 20 7b 73  ment stat3tab {s
10650 71 6c 69 74 65 5f 73 74 61 74 33 7d 20 53 51 4c  qlite_stat3} SQL
10660 49 54 45 5f 53 54 41 54 33 3c 2f 74 63 6c 3e 0a  ITE_STAT3</tcl>.
10670 3c 68 33 3e 54 68 65 20 73 71 6c 69 74 65 5f 73  <h3>The sqlite_s
10680 74 61 74 33 20 74 61 62 6c 65 3c 2f 68 33 3e 0a  tat3 table</h3>.
10690 0a 3c 70 3e 54 68 65 20 73 71 6c 69 74 65 5f 73  .<p>The sqlite_s
106a0 74 61 74 33 20 69 73 20 6f 6e 6c 79 20 75 73 65  tat3 is only use
106b0 64 20 69 66 20 53 51 4c 69 74 65 20 69 73 20 63  d if SQLite is c
106c0 6f 6d 70 69 6c 65 64 0a 77 69 74 68 20 5b 53 51  ompiled.with [SQ
106d0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
106e0 33 5d 20 6f 72 20 5b 53 51 4c 49 54 45 5f 45 4e  3] or [SQLITE_EN
106f0 41 42 4c 45 5f 53 54 41 54 34 5d 0a 61 6e 64 20  ABLE_STAT4].and 
10700 69 66 20 74 68 65 20 53 51 4c 69 74 65 20 76 65  if the SQLite ve
10710 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 69 73 20  rsion number is 
10720 33 2e 37 2e 39 20 6f 72 20 67 72 65 61 74 65 72  3.7.9 or greater
10730 2e 0a 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61  ..The sqlite_sta
10740 74 33 20 74 61 62 6c 65 20 69 73 20 6e 65 69 74  t3 table is neit
10750 68 65 72 20 72 65 61 64 20 6e 6f 72 20 77 72 69  her read nor wri
10760 74 74 65 6e 20 62 79 20 61 6e 79 0a 76 65 72 73  tten by any.vers
10770 69 6f 6e 20 6f 66 20 53 51 4c 69 74 65 20 62 65  ion of SQLite be
10780 66 6f 72 65 20 33 2e 37 2e 39 2e 0a 49 66 20 74  fore 3.7.9..If t
10790 68 65 20 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c  he [SQLITE_ENABL
107a0 45 5f 53 54 41 54 34 5d 20 63 6f 6d 70 69 6c 65  E_STAT4] compile
107b0 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20  -time option is 
107c0 75 73 65 64 20 61 6e 64 20 74 68 65 0a 53 51 4c  used and the.SQL
107d0 69 74 65 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62  ite version numb
107e0 65 72 20 69 73 20 33 2e 38 2e 31 20 6f 72 20 67  er is 3.8.1 or g
107f0 72 65 61 74 65 72 2c 20 74 68 65 6e 20 73 71 6c  reater, then sql
10800 69 74 65 5f 73 74 61 74 33 20 6d 69 67 68 74 0a  ite_stat3 might.
10810 62 65 20 72 65 61 64 20 62 75 74 20 6e 6f 74 20  be read but not 
10820 77 72 69 74 74 65 6e 2e 0a 54 68 65 20 73 71 6c  written..The sql
10830 69 74 65 5f 73 74 61 74 33 20 74 61 62 6c 65 20  ite_stat3 table 
10840 63 6f 6e 74 61 69 6e 73 20 61 64 64 69 74 69 6f  contains additio
10850 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a  nal information.
10860 61 62 6f 75 74 20 74 68 65 20 64 69 73 74 72 69  about the distri
10870 62 75 74 69 6f 6e 20 6f 66 20 6b 65 79 73 20 77  bution of keys w
10880 69 74 68 69 6e 20 61 6e 20 69 6e 64 65 78 2c 20  ithin an index, 
10890 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74  information that
108a0 20 74 68 65 0a 71 75 65 72 79 20 70 6c 61 6e 6e   the.query plann
108b0 65 72 20 63 61 6e 20 75 73 65 20 74 6f 20 64 65  er can use to de
108c0 76 69 73 65 20 62 65 74 74 65 72 20 61 6e 64 20  vise better and 
108d0 66 61 73 74 65 72 20 71 75 65 72 79 20 61 6c 67  faster query alg
108e0 6f 72 69 74 68 6d 73 2e 0a 5e 28 54 68 65 20 73  orithms..^(The s
108f0 63 68 65 6d 61 20 6f 66 20 74 68 65 20 73 71 6c  chema of the sql
10900 69 74 65 5f 73 74 61 74 33 20 74 61 62 6c 65 20  ite_stat3 table 
10910 69 73 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a  is as follows:..
10920 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65  <blockquote><pre
10930 3e 0a 43 52 45 41 54 45 20 54 41 42 4c 45 20 73  >.CREATE TABLE s
10940 71 6c 69 74 65 5f 73 74 61 74 33 28 74 62 6c 2c  qlite_stat3(tbl,
10950 69 64 78 2c 6e 45 71 2c 6e 4c 74 2c 6e 44 4c 74  idx,nEq,nLt,nDLt
10960 2c 73 61 6d 70 6c 65 29 3b 0a 3c 2f 70 72 65 3e  ,sample);.</pre>
10970 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a  </blockquote>)^.
10980 0a 3c 70 3e 54 68 65 72 65 20 61 72 65 20 75 73  .<p>There are us
10990 75 61 6c 6c 79 20 6d 75 6c 74 69 70 6c 65 20 65  ually multiple e
109a0 6e 74 72 69 65 73 20 69 6e 20 74 68 65 20 73 71  ntries in the sq
109b0 6c 69 74 65 5f 73 74 61 74 33 20 74 61 62 6c 65  lite_stat3 table
109c0 20 66 6f 72 20 65 61 63 68 20 69 6e 64 65 78 2e   for each index.
109d0 0a 5e 28 54 68 65 20 73 71 6c 69 74 65 5f 73 74  .^(The sqlite_st
109e0 61 74 33 2e 73 61 6d 70 6c 65 20 63 6f 6c 75 6d  at3.sample colum
109f0 6e 20 68 6f 6c 64 73 20 74 68 65 20 76 61 6c 75  n holds the valu
10a00 65 20 6f 66 20 74 68 65 20 6c 65 66 74 2d 6d 6f  e of the left-mo
10a10 73 74 20 66 69 65 6c 64 20 6f 66 20 61 6e 0a 69  st field of an.i
10a20 6e 64 65 78 20 69 64 65 6e 74 69 66 69 65 64 20  ndex identified 
10a30 62 79 20 73 71 6c 69 74 65 5f 73 74 61 74 33 2e  by sqlite_stat3.
10a40 69 64 78 20 61 6e 64 20 73 71 6c 69 74 65 5f 73  idx and sqlite_s
10a50 74 61 74 33 2e 74 62 6c 2e 29 5e 0a 5e 28 54 68  tat3.tbl.)^.^(Th
10a60 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33 2e 6e  e sqlite_stat3.n
10a70 45 71 20 63 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20  Eq column holds 
10a80 74 68 65 20 61 70 70 72 6f 78 69 6d 61 74 65 0a  the approximate.
10a90 6e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65  number of entrie
10aa0 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20 77  s in the index w
10ab0 68 6f 73 65 20 6c 65 66 74 2d 6d 6f 73 74 20 63  hose left-most c
10ac0 6f 6c 75 6d 6e 20 65 78 61 63 74 6c 79 20 6d 61  olumn exactly ma
10ad0 74 63 68 65 73 0a 74 68 65 20 73 61 6d 70 6c 65  tches.the sample
10ae0 2e 29 5e 0a 5e 28 54 68 65 20 73 71 6c 69 74 65  .)^.^(The sqlite
10af0 5f 73 74 61 74 33 2e 6e 4c 74 20 68 6f 6c 64 73  _stat3.nLt holds
10b00 20 74 68 65 20 61 70 70 72 6f 78 69 6d 61 74 65   the approximate
10b10 20 6e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69   number of entri
10b20 65 73 20 69 6e 20 74 68 65 0a 69 6e 64 65 78 20  es in the.index 
10b30 77 68 6f 73 65 20 6c 65 66 74 2d 6d 6f 73 74 20  whose left-most 
10b40 63 6f 6c 75 6d 6e 20 69 73 20 6c 65 73 73 20 74  column is less t
10b50 68 61 6e 20 74 68 65 20 73 61 6d 70 6c 65 2e 29  han the sample.)
10b60 5e 0a 5e 28 54 68 65 20 73 71 6c 69 74 65 5f 73  ^.^(The sqlite_s
10b70 74 61 74 33 2e 6e 44 4c 74 20 63 6f 6c 75 6d 6e  tat3.nDLt column
10b80 20 68 6f 6c 64 73 20 74 68 65 20 61 70 70 72 6f   holds the appro
10b90 78 69 6d 61 74 65 0a 6e 75 6d 62 65 72 20 6f 66  ximate.number of
10ba0 20 64 69 73 74 69 6e 63 74 20 6c 65 66 74 2d 6d   distinct left-m
10bb0 6f 73 74 20 65 6e 74 72 69 65 73 20 69 6e 20 74  ost entries in t
10bc0 68 65 20 69 6e 64 65 78 20 74 68 61 74 20 61 72  he index that ar
10bd0 65 20 6c 65 73 73 20 74 68 61 6e 0a 74 68 65 20  e less than.the 
10be0 73 61 6d 70 6c 65 2e 29 5e 0a 0a 3c 70 3e 5e 54  sample.)^..<p>^T
10bf0 68 65 72 65 20 63 61 6e 20 62 65 20 61 6e 20 61  here can be an a
10c00 72 62 69 74 72 61 72 79 20 6e 75 6d 62 65 72 20  rbitrary number 
10c10 6f 66 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20  of sqlite_stat3 
10c20 65 6e 74 72 69 65 73 20 70 65 72 20 69 6e 64 65  entries per inde
10c30 78 2e 0a 54 68 65 20 5b 41 4e 41 4c 59 5a 45 5d  x..The [ANALYZE]
10c40 20 63 6f 6d 6d 61 6e 64 20 77 69 6c 6c 20 74 79   command will ty
10c50 70 69 63 61 6c 6c 79 20 67 65 6e 65 72 61 74 65  pically generate
10c60 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20 74 61   sqlite_stat3 ta
10c70 62 6c 65 73 0a 74 68 61 74 20 63 6f 6e 74 61 69  bles.that contai
10c80 6e 20 62 65 74 77 65 65 6e 20 31 30 20 61 6e 64  n between 10 and
10c90 20 34 30 20 73 61 6d 70 6c 65 73 20 74 68 61 74   40 samples that
10ca0 20 61 72 65 20 64 69 73 74 72 69 62 75 74 65 64   are distributed
10cb0 20 61 63 72 6f 73 73 0a 74 68 65 20 6b 65 79 20   across.the key 
10cc0 73 70 61 63 65 20 61 6e 64 20 77 69 74 68 20 6c  space and with l
10cd0 61 72 67 65 20 6e 45 71 20 76 61 6c 75 65 73 2e  arge nEq values.
10ce0 0a 0a 3c 70 3e 5e 28 49 6e 20 61 20 77 65 6c 6c  ..<p>^(In a well
10cf0 2d 66 6f 72 6d 65 64 20 73 71 6c 69 74 65 5f 73  -formed sqlite_s
10d00 74 61 74 33 20 74 61 62 6c 65 2c 20 74 68 65 20  tat3 table, the 
10d10 73 61 6d 70 6c 65 73 20 66 6f 72 20 61 6e 79 20  samples for any 
10d20 73 69 6e 67 6c 65 0a 69 6e 64 65 78 20 6d 75 73  single.index mus
10d30 74 20 61 70 70 65 61 72 20 69 6e 20 74 68 65 20  t appear in the 
10d40 73 61 6d 65 20 6f 72 64 65 72 20 74 68 61 74 20  same order that 
10d50 74 68 65 79 20 6f 63 63 75 72 20 69 6e 20 74 68  they occur in th
10d60 65 20 69 6e 64 65 78 2e 20 20 0a 49 6e 20 6f 74  e index.  .In ot
10d70 68 65 72 20 77 6f 72 64 73 2c 20 69 66 20 74 68  her words, if th
10d80 65 20 65 6e 74 72 79 20 77 69 74 68 20 6c 65 66  e entry with lef
10d90 74 2d 6d 6f 73 74 20 63 6f 6c 75 6d 6e 20 53 31  t-most column S1
10da0 20 69 73 20 65 61 72 6c 69 65 72 20 69 6e 0a 74   is earlier in.t
10db0 68 65 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20  he index b-tree 
10dc0 74 68 61 6e 20 74 68 65 0a 65 6e 74 72 79 20 77  than the.entry w
10dd0 69 74 68 20 6c 65 66 74 2d 6d 6f 73 74 20 63 6f  ith left-most co
10de0 6c 75 6d 6e 20 53 32 2c 20 74 68 65 6e 20 69 6e  lumn S2, then in
10df0 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74   the sqlite_stat
10e00 33 20 74 61 62 6c 65 2c 20 0a 73 61 6d 70 6c 65  3 table, .sample
10e10 20 53 31 20 6d 75 73 74 20 68 61 76 65 20 61 20   S1 must have a 
10e20 73 6d 61 6c 6c 65 72 20 72 6f 77 69 64 20 74 68  smaller rowid th
10e30 61 6e 20 73 61 6d 70 6c 65 20 53 32 2e 29 5e 0a  an sample S2.)^.
10e40 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
10e50 74 20 73 74 61 74 34 74 61 62 20 7b 73 71 6c 69  t stat4tab {sqli
10e60 74 65 5f 73 74 61 74 34 7d 20 53 51 4c 49 54 45  te_stat4} SQLITE
10e70 5f 53 54 41 54 34 3c 2f 74 63 6c 3e 0a 3c 68 33  _STAT4</tcl>.<h3
10e80 3e 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74  >The sqlite_stat
10e90 34 20 74 61 62 6c 65 3c 2f 68 33 3e 0a 0a 3c 70  4 table</h3>..<p
10ea0 3e 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74  >The sqlite_stat
10eb0 34 20 69 73 20 6f 6e 6c 79 20 63 72 65 61 74 65  4 is only create
10ec0 64 20 61 6e 64 20 69 73 20 6f 6e 6c 79 20 75 73  d and is only us
10ed0 65 64 20 69 66 20 53 51 4c 69 74 65 20 69 73 20  ed if SQLite is 
10ee0 63 6f 6d 70 69 6c 65 64 0a 77 69 74 68 20 5b 53  compiled.with [S
10ef0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
10f00 54 34 5d 20 61 6e 64 20 69 66 20 74 68 65 20 53  T4] and if the S
10f10 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20 6e 75  QLite version nu
10f20 6d 62 65 72 20 69 73 0a 33 2e 38 2e 31 20 6f 72  mber is.3.8.1 or
10f30 20 67 72 65 61 74 65 72 2e 20 20 54 68 65 20 73   greater.  The s
10f40 71 6c 69 74 65 5f 73 74 61 74 34 20 74 61 62 6c  qlite_stat4 tabl
10f50 65 20 69 73 20 6e 65 69 74 68 65 72 20 72 65 61  e is neither rea
10f60 64 20 6e 6f 72 20 77 72 69 74 74 65 6e 20 62 79  d nor written by
10f70 20 61 6e 79 0a 76 65 72 73 69 6f 6e 20 6f 66 20   any.version of 
10f80 53 51 4c 69 74 65 20 62 65 66 6f 72 65 20 33 2e  SQLite before 3.
10f90 38 2e 31 2e 0a 54 68 65 20 73 71 6c 69 74 65 5f  8.1..The sqlite_
10fa0 73 74 61 74 34 20 74 61 62 6c 65 20 63 6f 6e 74  stat4 table cont
10fb0 61 69 6e 73 20 61 64 64 69 74 69 6f 6e 61 6c 20  ains additional 
10fc0 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 61 62 6f 75  information.abou
10fd0 74 20 74 68 65 20 64 69 73 74 72 69 62 75 74 69  t the distributi
10fe0 6f 6e 20 6f 66 20 6b 65 79 73 20 77 69 74 68 69  on of keys withi
10ff0 6e 20 61 6e 20 69 6e 64 65 78 20 6f 72 20 74 68  n an index or th
11000 65 20 64 69 73 74 72 69 62 75 74 69 6f 6e 20 6f  e distribution o
11010 66 0a 6b 65 79 73 20 69 6e 20 74 68 65 20 70 72  f.keys in the pr
11020 69 6d 61 72 79 20 6b 65 79 20 6f 66 20 61 20 5b  imary key of a [
11030 57 49 54 48 4f 55 54 20 52 4f 57 49 44 5d 20 74  WITHOUT ROWID] t
11040 61 62 6c 65 2e 0a 54 68 65 20 71 75 65 72 79 20  able..The query 
11050 70 6c 61 6e 6e 65 72 20 63 61 6e 20 73 6f 6d 65  planner can some
11060 74 69 6d 65 73 20 75 73 65 20 74 68 65 20 61 64  times use the ad
11070 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
11080 74 69 6f 6e 20 69 6e 0a 74 68 65 20 73 71 6c 69  tion in.the sqli
11090 74 65 5f 73 74 61 74 34 20 74 61 62 6c 65 20 74  te_stat4 table t
110a0 6f 20 64 65 76 69 73 65 20 62 65 74 74 65 72 20  o devise better 
110b0 61 6e 64 20 66 61 73 74 65 72 20 71 75 65 72 79  and faster query
110c0 20 61 6c 67 6f 72 69 74 68 6d 73 2e 0a 5e 28 54   algorithms..^(T
110d0 68 65 20 73 63 68 65 6d 61 20 6f 66 20 74 68 65  he schema of the
110e0 20 73 71 6c 69 74 65 5f 73 74 61 74 34 20 74 61   sqlite_stat4 ta
110f0 62 6c 65 20 69 73 20 61 73 20 66 6f 6c 6c 6f 77  ble is as follow
11100 73 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  s:..<blockquote>
11110 3c 70 72 65 3e 0a 43 52 45 41 54 45 20 54 41 42  <pre>.CREATE TAB
11120 4c 45 20 73 71 6c 69 74 65 5f 73 74 61 74 34 28  LE sqlite_stat4(
11130 74 62 6c 2c 69 64 78 2c 6e 45 71 2c 6e 4c 74 2c  tbl,idx,nEq,nLt,
11140 6e 44 4c 74 2c 73 61 6d 70 6c 65 29 3b 0a 3c 2f  nDLt,sample);.</
11150 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  pre></blockquote
11160 3e 29 5e 0a 0a 3c 70 3e 54 68 65 72 65 20 61 72  >)^..<p>There ar
11170 65 20 74 79 70 69 63 61 6c 6c 79 20 62 65 74 77  e typically betw
11180 65 65 6e 20 31 30 20 74 6f 20 34 30 20 65 6e 74  een 10 to 40 ent
11190 72 69 65 73 20 69 6e 20 74 68 65 20 73 71 6c 69  ries in the sqli
111a0 74 65 5f 73 74 61 74 34 20 74 61 62 6c 65 20 66  te_stat4 table f
111b0 6f 72 0a 65 61 63 68 20 69 6e 64 65 78 20 66 6f  or.each index fo
111c0 72 20 77 68 69 63 68 20 73 74 61 74 69 73 74 69  r which statisti
111d0 63 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65  cs are available
111e0 2c 20 68 6f 77 65 76 65 72 20 74 68 65 73 65 20  , however these 
111f0 6c 69 6d 69 74 73 20 61 72 65 0a 6e 6f 74 20 68  limits are.not h
11200 61 72 64 20 62 6f 75 6e 64 73 2e 0a 54 68 65 20  ard bounds..The 
11210 6d 65 61 6e 69 6e 67 73 20 6f 66 20 74 68 65 20  meanings of the 
11220 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 73  columns in the s
11230 71 6c 69 74 65 5f 73 74 61 74 34 20 74 61 62 6c  qlite_stat4 tabl
11240 65 20 61 72 65 20 61 73 20 66 6f 6c 6c 6f 77 73  e are as follows
11250 3a 0a 0a 3c 63 65 6e 74 65 72 3e 0a 3c 74 61 62  :..<center>.<tab
11260 6c 65 20 62 6f 72 64 65 72 3d 22 30 22 20 77 69  le border="0" wi
11270 64 74 68 3d 22 31 30 30 25 22 20 63 65 6c 6c 70  dth="100%" cellp
11280 61 64 64 69 6e 67 3d 22 31 30 22 3e 0a 3c 74 72  adding="10">.<tr
11290 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70  ><td valign="top
112a0 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e  " align="right">
112b0 74 62 6c 3a 3c 2f 74 64 3e 0a 20 20 20 20 3c 74  tbl:</td>.    <t
112c0 64 3e 5e 28 54 68 65 20 73 71 6c 69 74 65 5f 73  d>^(The sqlite_s
112d0 74 61 74 34 2e 74 62 6c 20 63 6f 6c 75 6d 6e 20  tat4.tbl column 
112e0 68 6f 6c 64 73 20 6e 61 6d 65 20 6f 66 20 74 68  holds name of th
112f0 65 20 74 61 62 6c 65 20 74 68 61 74 20 6f 77 6e  e table that own
11300 73 0a 20 20 20 20 74 68 65 20 69 6e 64 65 78 20  s.    the index 
11310 74 68 61 74 20 74 68 65 20 72 6f 77 20 64 65 73  that the row des
11320 63 72 69 62 65 73 29 5e 0a 0a 3c 74 72 3e 3c 74  cribes)^..<tr><t
11330 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61  d valign="top" a
11340 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e 69 64 78  lign="right">idx
11350 3a 3c 2f 74 64 3e 0a 20 20 20 20 3c 74 64 3e 5e  :</td>.    <td>^
11360 28 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74  (The sqlite_stat
11370 34 2e 69 64 78 20 63 6f 6c 75 6d 6e 20 68 6f 6c  4.idx column hol
11380 64 73 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 69  ds name of the i
11390 6e 64 65 78 20 74 68 61 74 20 74 68 65 0a 20 20  ndex that the.  
113a0 20 20 72 6f 77 20 64 65 73 63 72 69 62 65 73 2c    row describes,
113b0 20 6f 72 20 69 6e 20 74 68 65 20 63 61 73 65 20   or in the case 
113c0 6f 66 0a 20 20 20 20 61 6e 20 73 71 6c 69 74 65  of.    an sqlite
113d0 5f 73 74 61 74 34 20 65 6e 74 72 79 20 66 6f 72  _stat4 entry for
113e0 20 61 20 5b 57 49 54 48 4f 55 54 20 52 4f 57 49   a [WITHOUT ROWI
113f0 44 5d 20 74 61 62 6c 65 2c 20 74 68 65 0a 20 20  D] table, the.  
11400 20 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61    name of the ta
11410 62 6c 65 20 69 74 73 65 6c 66 2e 29 5e 0a 0a 3c  ble itself.)^..<
11420 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74  tr><td valign="t
11430 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74  op" align="right
11440 22 3e 73 61 6d 70 6c 65 3a 3c 2f 74 64 3e 0a 20  ">sample:</td>. 
11450 20 20 20 3c 74 64 3e 5e 28 54 68 65 20 73 71 6c     <td>^(The sql
11460 69 74 65 5f 73 74 61 74 34 2e 73 61 6d 70 6c 65  ite_stat4.sample
11470 20 63 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 61 20   column holds a 
11480 42 4c 4f 42 0a 20 20 20 20 69 6e 20 74 68 65 20  BLOB.    in the 
11490 5b 72 65 63 6f 72 64 20 66 6f 72 6d 61 74 5d 20  [record format] 
114a0 74 68 61 74 20 65 6e 63 6f 64 65 73 20 74 68 65  that encodes the
114b0 20 69 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 73   indexed columns
114c0 20 66 6f 6c 6c 6f 77 65 64 20 62 79 0a 20 20 20   followed by.   
114d0 20 74 68 65 20 72 6f 77 69 64 20 66 6f 72 20 61   the rowid for a
114e0 20 72 6f 77 69 64 20 74 61 62 6c 65 20 6f 72 20   rowid table or 
114f0 62 79 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 6f  by the columns o
11500 66 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b 65  f the primary ke
11510 79 20 0a 20 20 20 20 66 6f 72 20 61 20 57 49 54  y .    for a WIT
11520 48 4f 55 54 20 52 4f 57 49 44 20 74 61 62 6c 65  HOUT ROWID table
11530 2e 29 5e 0a 20 20 20 20 5e 28 54 68 65 20 73 71  .)^.    ^(The sq
11540 6c 69 74 65 5f 73 74 61 74 34 2e 73 61 6d 70 6c  lite_stat4.sampl
11550 65 20 42 4c 4f 42 20 66 6f 72 20 74 68 65 20 57  e BLOB for the W
11560 49 54 48 4f 55 54 20 52 4f 57 49 44 20 74 61 62  ITHOUT ROWID tab
11570 6c 65 20 69 74 73 65 6c 66 20 0a 20 20 20 20 63  le itself .    c
11580 6f 6e 74 61 69 6e 73 20 6a 75 73 74 20 74 68 65  ontains just the
11590 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20   columns of the 
115a0 70 72 69 6d 61 72 79 20 6b 65 79 2e 29 5e 0a 20  primary key.)^. 
115b0 20 20 20 4c 65 74 20 74 68 65 20 6e 75 6d 62 65     Let the numbe
115c0 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 65 6e 63  r of columns enc
115d0 6f 64 65 64 20 62 79 20 74 68 65 20 73 71 6c 69  oded by the sqli
115e0 74 65 5f 73 74 61 74 34 2e 73 61 6d 70 6c 65 20  te_stat4.sample 
115f0 62 6c 6f 62 20 62 65 20 4e 2e 0a 20 20 20 20 5e  blob be N..    ^
11600 46 6f 72 20 69 6e 64 65 78 65 73 20 6f 6e 20 61  For indexes on a
11610 6e 20 6f 72 64 69 6e 61 72 79 20 72 6f 77 69 64  n ordinary rowid
11620 20 74 61 62 6c 65 2c 20 4e 20 77 69 6c 6c 20 62   table, N will b
11630 65 20 6f 6e 65 20 6d 6f 72 65 20 74 68 61 6e 20  e one more than 
11640 74 68 65 20 6e 75 6d 62 65 72 20 0a 20 20 20 20  the number .    
11650 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 64 65 78  of columns index
11660 65 64 2e 0a 20 20 20 20 5e 46 6f 72 20 69 6e 64  ed..    ^For ind
11670 65 78 65 73 20 6f 6e 20 57 49 54 48 4f 55 54 20  exes on WITHOUT 
11680 52 4f 57 49 44 20 74 61 62 6c 65 73 2c 20 4e 20  ROWID tables, N 
11690 77 69 6c 6c 20 62 65 20 74 68 65 20 6e 75 6d 62  will be the numb
116a0 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 0a 20 20  er of columns.  
116b0 20 20 69 6e 64 65 78 65 64 20 70 6c 75 73 20 74    indexed plus t
116c0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
116d0 75 6d 6e 73 20 69 6e 20 74 68 65 20 70 72 69 6d  umns in the prim
116e0 61 72 79 20 6b 65 79 2e 0a 20 20 20 20 5e 46 6f  ary key..    ^Fo
116f0 72 20 61 20 57 49 54 48 4f 55 54 20 52 4f 57 49  r a WITHOUT ROWI
11700 44 20 74 61 62 6c 65 2c 20 4e 20 77 69 6c 6c 20  D table, N will 
11710 62 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  be the number of
11720 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 0a   columns in the.
11730 20 20 20 20 70 72 69 6d 61 72 79 20 6b 65 79 2e      primary key.
11740 0a 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  ..<tr><td valign
11750 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69  ="top" align="ri
11760 67 68 74 22 3e 6e 45 71 3a 3c 2f 74 64 3e 0a 20  ght">nEq:</td>. 
11770 20 20 20 3c 74 64 3e 5e 28 54 68 65 20 73 71 6c     <td>^(The sql
11780 69 74 65 5f 73 74 61 74 34 2e 6e 45 71 20 63 6f  ite_stat4.nEq co
11790 6c 75 6d 6e 20 68 6f 6c 64 73 20 61 20 6c 69 73  lumn holds a lis
117a0 74 20 6f 66 20 4e 20 69 6e 74 65 67 65 72 73 20  t of N integers 
117b0 77 68 65 72 65 20 0a 20 20 20 20 74 68 65 20 4b  where .    the K
117c0 2d 74 68 20 69 6e 74 65 67 65 72 20 69 73 20 74  -th integer is t
117d0 68 65 20 61 70 70 72 6f 78 69 6d 61 74 65 20 6e  he approximate n
117e0 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73  umber of entries
117f0 20 69 6e 20 74 68 65 20 69 6e 64 65 78 0a 20 20   in the index.  
11800 20 20 77 68 6f 73 65 20 6c 65 66 74 2d 6d 6f 73    whose left-mos
11810 74 20 4b 20 63 6f 6c 75 6d 6e 73 20 65 78 61 63  t K columns exac
11820 74 6c 79 20 6d 61 74 63 68 20 74 68 65 20 4b 20  tly match the K 
11830 6c 65 66 74 2d 6d 6f 73 74 20 63 6f 6c 75 6d 6e  left-most column
11840 73 0a 20 20 20 20 6f 66 20 74 68 65 20 73 61 6d  s.    of the sam
11850 70 6c 65 2e 29 5e 0a 0a 3c 74 72 3e 3c 74 64 20  ple.)^..<tr><td 
11860 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69  valign="top" ali
11870 67 6e 3d 22 72 69 67 68 74 22 3e 6e 4c 74 3a 3c  gn="right">nLt:<
11880 2f 74 64 3e 0a 20 20 20 20 3c 74 64 3e 5e 28 54  /td>.    <td>^(T
11890 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 34 2e  he sqlite_stat4.
118a0 6e 4c 74 20 63 6f 6c 75 6d 6e 20 68 6f 6c 64 73  nLt column holds
118b0 20 61 20 6c 69 73 74 20 6f 66 20 4e 20 69 6e 74   a list of N int
118c0 65 67 65 72 73 20 77 68 65 72 65 0a 20 20 20 20  egers where.    
118d0 74 68 65 20 4b 2d 74 68 20 69 6e 74 65 67 65 72  the K-th integer
118e0 20 69 73 20 74 68 65 20 61 70 70 72 6f 78 69 6d   is the approxim
118f0 61 74 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 6e  ate number of en
11900 74 72 69 65 73 20 69 6e 20 74 68 65 0a 20 20 20  tries in the.   
11910 20 69 6e 64 65 78 20 77 68 6f 73 65 20 4b 20 6c   index whose K l
11920 65 66 74 2d 6d 6f 73 74 20 63 6f 6c 75 6d 6e 73  eft-most columns
11930 20 61 72 65 20 63 6f 6c 6c 65 63 74 69 76 65 6c   are collectivel
11940 79 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20  y less than the 
11950 0a 20 20 20 20 4b 20 6c 65 66 74 2d 6d 6f 73 74  .    K left-most
11960 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20   columns of the 
11970 73 61 6d 70 6c 65 2e 29 5e 0a 0a 3c 74 72 3e 3c  sample.)^..<tr><
11980 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20  td valign="top" 
11990 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e 6e 44  align="right">nD
119a0 4c 74 3a 3c 2f 74 64 3e 0a 20 20 20 20 3c 74 64  Lt:</td>.    <td
119b0 3e 5e 28 54 68 65 20 73 71 6c 69 74 65 5f 73 74  >^(The sqlite_st
119c0 61 74 34 2e 6e 44 4c 74 20 63 6f 6c 75 6d 6e 20  at4.nDLt column 
119d0 68 6f 6c 64 73 20 61 20 6c 69 73 74 20 6f 66 20  holds a list of 
119e0 4e 20 69 6e 74 65 67 65 72 73 20 77 68 65 72 65  N integers where
119f0 0a 20 20 20 20 74 68 65 20 4b 2d 74 68 20 69 6e  .    the K-th in
11a00 74 65 67 65 72 20 69 73 20 74 68 65 20 61 70 70  teger is the app
11a10 72 6f 78 69 6d 61 74 65 0a 20 20 20 20 6e 75 6d  roximate.    num
11a20 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69  ber of entries i
11a30 6e 20 74 68 65 20 69 6e 64 65 78 20 74 68 61 74  n the index that
11a40 20 61 72 65 20 64 69 73 74 69 6e 63 74 20 69 6e   are distinct in
11a50 20 74 68 65 20 66 69 72 73 74 20 4b 20 63 6f 6c   the first K col
11a60 75 6d 6e 73 20 61 6e 64 0a 20 20 20 20 77 68 65  umns and.    whe
11a70 72 65 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74  re the left-most
11a80 20 4b 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 63   K columns are c
11a90 6f 6c 6c 65 63 74 69 76 65 6c 79 20 6c 65 73 73  ollectively less
11aa0 20 74 68 61 6e 20 74 68 65 20 6c 65 66 74 2d 6d   than the left-m
11ab0 6f 73 74 0a 20 20 20 20 4b 20 63 6f 6c 75 6d 6e  ost.    K column
11ac0 73 20 6f 66 20 74 68 65 20 73 61 6d 70 6c 65 2e  s of the sample.
11ad0 29 5e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 63 65  )^.</table>.</ce
11ae0 6e 74 65 72 3e 0a 0a 3c 70 3e 54 68 65 20 73 71  nter>..<p>The sq
11af0 6c 69 74 65 5f 73 74 61 74 34 20 69 73 20 61 20  lite_stat4 is a 
11b00 67 65 6e 65 72 61 6c 69 7a 61 74 69 6f 6e 20 6f  generalization o
11b10 66 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61  f the sqlite_sta
11b20 74 33 20 74 61 62 6c 65 2e 20 20 54 68 65 0a 73  t3 table.  The.s
11b30 71 6c 69 74 65 5f 73 74 61 74 33 20 74 61 62 6c  qlite_stat3 tabl
11b40 65 20 70 72 6f 76 69 64 65 73 20 69 6e 66 6f 72  e provides infor
11b50 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65  mation about the
11b60 20 6c 65 66 74 2d 6d 6f 73 74 20 63 6f 6c 75 6d   left-most colum
11b70 6e 20 6f 66 20 61 6e 0a 69 6e 64 65 78 20 77 68  n of an.index wh
11b80 65 72 65 61 73 20 74 68 65 20 73 71 6c 69 74 65  ereas the sqlite
11b90 5f 73 74 61 74 34 20 74 61 62 6c 65 20 70 72 6f  _stat4 table pro
11ba0 76 69 64 65 73 20 69 6e 66 6f 72 6d 61 74 69 6f  vides informatio
11bb0 6e 20 61 62 6f 75 74 20 61 6c 6c 20 63 6f 6c 75  n about all colu
11bc0 6d 6e 73 0a 6f 66 20 74 68 65 20 69 6e 64 65 78  mns.of the index
11bd0 2e 0a 0a 3c 70 3e 5e 54 68 65 72 65 20 63 61 6e  ...<p>^There can
11be0 20 62 65 20 61 6e 20 61 72 62 69 74 72 61 72 79   be an arbitrary
11bf0 20 6e 75 6d 62 65 72 20 6f 66 20 73 71 6c 69 74   number of sqlit
11c00 65 5f 73 74 61 74 34 20 65 6e 74 72 69 65 73 20  e_stat4 entries 
11c10 70 65 72 20 69 6e 64 65 78 2e 0a 54 68 65 20 5b  per index..The [
11c20 41 4e 41 4c 59 5a 45 5d 20 63 6f 6d 6d 61 6e 64  ANALYZE] command
11c30 20 77 69 6c 6c 20 74 79 70 69 63 61 6c 6c 79 20   will typically 
11c40 67 65 6e 65 72 61 74 65 20 73 71 6c 69 74 65 5f  generate sqlite_
11c50 73 74 61 74 34 20 74 61 62 6c 65 73 0a 74 68 61  stat4 tables.tha
11c60 74 20 63 6f 6e 74 61 69 6e 20 62 65 74 77 65 65  t contain betwee
11c70 6e 20 31 30 20 61 6e 64 20 34 30 20 73 61 6d 70  n 10 and 40 samp
11c80 6c 65 73 20 74 68 61 74 20 61 72 65 20 64 69 73  les that are dis
11c90 74 72 69 62 75 74 65 64 20 61 63 72 6f 73 73 0a  tributed across.
11ca0 74 68 65 20 6b 65 79 20 73 70 61 63 65 20 61 6e  the key space an
11cb0 64 20 77 69 74 68 20 6c 61 72 67 65 20 6e 45 71  d with large nEq
11cc0 20 76 61 6c 75 65 73 2e 0a 0a 3c 70 3e 5e 28 49   values...<p>^(I
11cd0 6e 20 61 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20  n a well-formed 
11ce0 73 71 6c 69 74 65 5f 73 74 61 74 34 20 74 61 62  sqlite_stat4 tab
11cf0 6c 65 2c 20 74 68 65 20 73 61 6d 70 6c 65 73 20  le, the samples 
11d00 66 6f 72 20 61 6e 79 20 73 69 6e 67 6c 65 0a 69  for any single.i
11d10 6e 64 65 78 20 6d 75 73 74 20 61 70 70 65 61 72  ndex must appear
11d20 20 69 6e 20 74 68 65 20 73 61 6d 65 20 6f 72 64   in the same ord
11d30 65 72 20 74 68 61 74 20 74 68 65 79 20 6f 63 63  er that they occ
11d40 75 72 20 69 6e 20 74 68 65 20 69 6e 64 65 78 2e  ur in the index.
11d50 20 20 0a 49 6e 20 6f 74 68 65 72 20 77 6f 72 64    .In other word
11d60 73 2c 20 69 66 20 65 6e 74 72 79 20 53 31 20 69  s, if entry S1 i
11d70 73 20 65 61 72 6c 69 65 72 20 69 6e 20 74 68 65  s earlier in the
11d80 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20 74 68   index b-tree th
11d90 61 6e 20 0a 65 6e 74 72 79 20 53 32 2c 20 74 68  an .entry S2, th
11da0 65 6e 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65  en in the sqlite
11db0 5f 73 74 61 74 34 20 74 61 62 6c 65 2c 20 73 61  _stat4 table, sa
11dc0 6d 70 6c 65 20 53 31 20 6d 75 73 74 20 68 61 76  mple S1 must hav
11dd0 65 20 61 0a 73 6d 61 6c 6c 65 72 20 72 6f 77 69  e a.smaller rowi
11de0 64 20 74 68 61 6e 20 73 61 6d 70 6c 65 20 53 32  d than sample S2
11df0 2e 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  .)^..<tcl>hd_fra
11e00 67 6d 65 6e 74 20 72 6f 6c 6c 62 61 63 6b 6a 6f  gment rollbackjo
11e10 75 72 6e 61 6c 20 7b 72 6f 6c 6c 62 61 63 6b 20  urnal {rollback 
11e20 6a 6f 75 72 6e 61 6c 20 66 6f 72 6d 61 74 7d 3c  journal format}<
11e30 2f 74 63 6c 3e 0a 3c 68 31 3e 54 68 65 20 52 6f  /tcl>.<h1>The Ro
11e40 6c 6c 62 61 63 6b 20 4a 6f 75 72 6e 61 6c 3c 2f  llback Journal</
11e50 68 31 3e 0a 0a 3c 70 3e 54 68 65 20 72 6f 6c 6c  h1>..<p>The roll
11e60 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 69 73 20  back journal is 
11e70 61 20 66 69 6c 65 20 61 73 73 6f 63 69 61 74 65  a file associate
11e80 64 20 77 69 74 68 20 65 61 63 68 20 53 51 4c 69  d with each SQLi
11e90 74 65 20 64 61 74 61 62 61 73 65 0a 66 69 6c 65  te database.file
11ea0 20 74 68 61 74 20 68 6f 6c 64 20 69 6e 66 6f 72   that hold infor
11eb0 6d 61 74 69 6f 6e 20 75 73 65 64 20 74 6f 20 72  mation used to r
11ec0 65 73 74 6f 72 65 20 74 68 65 20 64 61 74 61 62  estore the datab
11ed0 61 73 65 20 66 69 6c 65 20 74 6f 20 69 74 73 20  ase file to its 
11ee0 69 6e 69 74 69 61 6c 0a 73 74 61 74 65 20 64 75  initial.state du
11ef0 72 69 6e 67 20 74 68 65 20 63 6f 75 72 73 65 20  ring the course 
11f00 6f 66 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  of a transaction
11f10 2e 0a 5e 54 68 65 20 72 6f 6c 6c 62 61 63 6b 20  ..^The rollback 
11f20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 20 69 73 20  journal file is 
11f30 61 6c 77 61 79 73 20 6c 6f 63 61 74 65 64 20 69  always located i
11f40 6e 20 74 68 65 20 73 61 6d 65 20 0a 64 69 72 65  n the same .dire
11f50 63 74 6f 72 79 20 61 73 20 74 68 65 20 64 61 74  ctory as the dat
11f60 61 62 61 73 65 0a 66 69 6c 65 20 61 6e 64 20 68  abase.file and h
11f70 61 73 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65  as the same name
11f80 20 61 73 20 74 68 65 20 64 61 74 61 62 61 73 65   as the database
11f90 20 66 69 6c 65 20 62 75 74 20 77 69 74 68 20 74   file but with t
11fa0 68 65 20 73 74 72 69 6e 67 0a 22 3c 74 74 3e 2d  he string."<tt>-
11fb0 6a 6f 75 72 6e 61 6c 3c 2f 74 74 3e 22 20 61 70  journal</tt>" ap
11fc0 70 65 6e 64 65 64 2e 20 20 54 68 65 72 65 20 63  pended.  There c
11fd0 61 6e 20 6f 6e 6c 79 20 62 65 20 61 20 73 69 6e  an only be a sin
11fe0 67 6c 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75  gle rollback jou
11ff0 72 6e 61 6c 0a 61 73 73 6f 63 69 61 74 65 64 20  rnal.associated 
12000 77 69 74 68 20 61 20 67 69 76 65 20 64 61 74 61  with a give data
12010 62 61 73 65 20 61 6e 64 20 68 65 6e 63 65 20 74  base and hence t
12020 68 65 72 65 20 63 61 6e 20 6f 6e 6c 79 20 62 65  here can only be
12030 20 6f 6e 65 20 77 72 69 74 65 0a 74 72 61 6e 73   one write.trans
12040 61 63 74 69 6f 6e 20 6f 70 65 6e 20 61 67 61 69  action open agai
12050 6e 73 74 20 61 20 73 69 6e 67 6c 65 20 64 61 74  nst a single dat
12060 61 62 61 73 65 20 61 74 20 6f 6e 65 20 74 69 6d  abase at one tim
12070 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 66 20 61 20  e.</p>..<p>If a 
12080 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61  transaction is a
12090 62 6f 72 74 65 64 20 64 75 65 20 74 6f 20 61 6e  borted due to an
120a0 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 63 72 61   application cra
120b0 73 68 2c 20 61 6e 20 6f 70 65 72 61 74 69 6e 67  sh, an operating
120c0 0a 73 79 73 74 65 6d 20 63 72 61 73 68 2c 20 6f  .system crash, o
120d0 72 20 61 20 68 61 72 64 77 61 72 65 20 70 6f 77  r a hardware pow
120e0 65 72 20 66 61 69 6c 75 72 65 20 6f 72 20 63 72  er failure or cr
120f0 61 73 68 2c 20 74 68 65 6e 20 74 68 65 20 64 61  ash, then the da
12100 74 61 62 61 73 65 20 6d 61 79 0a 62 65 20 6c 65  tabase may.be le
12110 66 74 20 69 6e 20 61 6e 20 69 6e 63 6f 6e 73 69  ft in an inconsi
12120 73 74 65 6e 74 20 73 74 61 74 65 2e 20 20 5e 54  stent state.  ^T
12130 68 65 20 6e 65 78 74 20 74 69 6d 65 20 53 51 4c  he next time SQL
12140 69 74 65 20 61 74 74 65 6d 70 74 73 20 74 6f 20  ite attempts to 
12150 6f 70 65 6e 0a 74 68 65 20 64 61 74 61 62 61 73  open.the databas
12160 65 20 66 69 6c 65 2c 20 74 68 65 20 70 72 65 73  e file, the pres
12170 65 6e 63 65 20 6f 66 20 74 68 65 20 72 6f 6c 6c  ence of the roll
12180 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 66 69 6c  back journal fil
12190 65 20 77 69 6c 6c 20 62 65 20 0a 64 65 74 65 63  e will be .detec
121a0 74 65 64 20 61 6e 64 20 74 68 65 20 6a 6f 75 72  ted and the jour
121b0 6e 61 6c 20 77 69 6c 6c 20 62 65 20 61 75 74 6f  nal will be auto
121c0 6d 61 74 69 63 61 6c 6c 79 20 70 6c 61 79 65 64  matically played
121d0 20 62 61 63 6b 20 74 6f 20 72 65 73 74 6f 72 65   back to restore
121e0 20 74 68 65 0a 64 61 74 61 62 61 73 65 20 74 6f   the.database to
121f0 20 69 74 73 20 73 74 61 74 65 20 61 74 20 74 68   its state at th
12200 65 20 73 74 61 72 74 20 6f 66 20 74 68 65 20 69  e start of the i
12210 6e 63 6f 6d 70 6c 65 74 65 20 74 72 61 6e 73 61  ncomplete transa
12220 63 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  ction.</p>..<p>^
12230 41 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e  A rollback journ
12240 61 6c 20 69 73 20 6f 6e 6c 79 20 63 6f 6e 73 69  al is only consi
12250 64 65 72 65 64 20 74 6f 20 62 65 20 76 61 6c 69  dered to be vali
12260 64 20 69 66 20 69 74 20 65 78 69 73 74 73 20 61  d if it exists a
12270 6e 64 0a 63 6f 6e 74 61 69 6e 73 20 61 20 76 61  nd.contains a va
12280 6c 69 64 20 68 65 61 64 65 72 2e 20 20 48 65 6e  lid header.  Hen
12290 63 65 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  ce a transaction
122a0 20 63 61 6e 20 62 65 20 63 6f 6d 6d 69 74 74 65   can be committe
122b0 64 20 69 6e 20 6f 6e 65 0a 6f 66 20 74 68 72 65  d in one.of thre
122c0 65 20 77 61 79 73 3a 0a 3c 6f 6c 3e 0a 3c 6c 69  e ways:.<ol>.<li
122d0 3e 5e 28 54 68 65 20 72 6f 6c 6c 62 61 63 6b 20  >^(The rollback 
122e0 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 20 63 61 6e  journal file can
122f0 20 62 65 20 64 65 6c 65 74 65 64 29 5e 2c 0a 3c   be deleted)^,.<
12300 6c 69 3e 5e 28 54 68 65 20 72 6f 6c 6c 62 61 63  li>^(The rollbac
12310 6b 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 20 63  k journal file c
12320 61 6e 20 62 65 20 74 72 75 6e 63 61 74 65 64 20  an be truncated 
12330 74 6f 20 7a 65 72 6f 20 6c 65 6e 67 74 68 29 5e  to zero length)^
12340 2c 20 6f 72 0a 3c 6c 69 3e 5e 28 54 68 65 20 68  , or.<li>^(The h
12350 65 61 64 65 72 20 6f 66 20 74 68 65 20 72 6f 6c  eader of the rol
12360 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 63 61  lback journal ca
12370 6e 20 62 65 20 6f 76 65 72 77 72 69 74 74 65 6e  n be overwritten
12380 20 77 69 74 68 0a 69 6e 76 61 6c 69 64 20 68 65   with.invalid he
12390 61 64 65 72 20 74 65 78 74 20 28 66 6f 72 20 65  ader text (for e
123a0 78 61 6d 70 6c 65 2c 20 61 6c 6c 20 7a 65 72 6f  xample, all zero
123b0 73 29 2e 29 5e 0a 3c 2f 6f 6c 3e 0a 3c 70 3e 0a  s).)^.</ol>.<p>.
123c0 5e 54 68 65 73 65 20 74 68 72 65 65 20 77 61 79  ^These three way
123d0 73 20 6f 66 20 63 6f 6d 6d 69 74 74 69 6e 67 20  s of committing 
123e0 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 63 6f  a transaction co
123f0 72 72 65 73 70 6f 6e 64 20 74 6f 20 74 68 65 20  rrespond to the 
12400 44 45 4c 45 54 45 2c 0a 54 52 55 4e 43 41 54 45  DELETE,.TRUNCATE
12410 2c 20 61 6e 64 20 50 45 52 53 49 53 54 20 73 65  , and PERSIST se
12420 74 74 69 6e 67 73 2c 20 72 65 73 70 65 63 74 69  ttings, respecti
12430 76 65 6c 79 2c 20 6f 66 20 74 68 65 20 5b 6a 6f  vely, of the [jo
12440 75 72 6e 61 6c 5f 6d 6f 64 65 20 70 72 61 67 6d  urnal_mode pragm
12450 61 5d 2e 0a 3c 2f 70 3e 0a 0a 0a 3c 70 3e 41 20  a]..</p>...<p>A 
12460 76 61 6c 69 64 20 72 6f 6c 6c 62 61 63 6b 20 6a  valid rollback j
12470 6f 75 72 6e 61 6c 20 62 65 67 69 6e 73 20 77 69  ournal begins wi
12480 74 68 20 61 20 68 65 61 64 65 72 20 69 6e 20 74  th a header in t
12490 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 66 6f 72  he following for
124a0 6d 61 74 3a 3c 2f 70 3e 0a 0a 3c 63 65 6e 74 65  mat:</p>..<cente
124b0 72 3e 0a 3c 69 3e 52 6f 6c 6c 62 61 63 6b 20 4a  r>.<i>Rollback J
124c0 6f 75 72 6e 61 6c 20 48 65 61 64 65 72 20 46 6f  ournal Header Fo
124d0 72 6d 61 74 3c 2f 69 3e 3c 62 72 3e 0a 3c 74 61  rmat</i><br>.<ta
124e0 62 6c 65 20 77 69 64 74 68 3d 22 38 30 25 22 20  ble width="80%" 
124f0 62 6f 72 64 65 72 3d 31 3e 0a 3c 74 72 3e 3c 74  border=1>.<tr><t
12500 68 3e 4f 66 66 73 65 74 3c 74 68 3e 53 69 7a 65  h>Offset<th>Size
12510 3c 74 68 3e 44 65 73 63 72 69 70 74 69 6f 6e 0a  <th>Description.
12520 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74  <tr><td valign=t
12530 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
12540 30 0a 20 20 20 20 3c 74 64 20 76 61 6c 69 67 6e  0.    <td valign
12550 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
12560 72 3e 38 0a 20 20 20 20 3c 74 64 3e 48 65 61 64  r>8.    <td>Head
12570 65 72 20 73 74 72 69 6e 67 3a 20 20 30 78 64 39  er string:  0xd9
12580 2c 20 30 78 64 35 2c 20 30 78 30 35 2c 20 30 78  , 0xd5, 0x05, 0x
12590 66 39 2c 20 30 78 32 30 2c 20 30 78 61 31 2c 20  f9, 0x20, 0xa1, 
125a0 30 78 36 33 2c 20 30 78 64 37 0a 3c 74 72 3e 3c  0x63, 0xd7.<tr><
125b0 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
125c0 69 67 6e 3d 63 65 6e 74 65 72 3e 38 0a 20 20 20  ign=center>8.   
125d0 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20   <td valign=top 
125e0 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20  align=center>4. 
125f0 20 20 20 3c 74 64 3e 54 68 65 20 22 50 61 67 65     <td>The "Page
12600 20 43 6f 75 6e 74 22 20 2d 20 54 68 65 20 6e 75   Count" - The nu
12610 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e  mber of pages in
12620 20 74 68 65 20 6e 65 78 74 20 73 65 67 6d 65 6e   the next segmen
12630 74 20 6f 66 20 74 68 65 20 0a 20 20 20 20 20 20  t of the .      
12640 20 20 6a 6f 75 72 6e 61 6c 2c 20 6f 72 20 2d 31    journal, or -1
12650 20 74 6f 0a 20 20 20 20 20 20 20 20 6d 65 61 6e   to.        mean
12660 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 20 74 6f 20   all content to 
12670 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 66  the end of the f
12680 69 6c 65 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  ile.<tr><td vali
12690 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
126a0 74 65 72 3e 31 32 0a 20 20 20 20 3c 74 64 20 76  ter>12.    <td v
126b0 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
126c0 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64  center>4.    <td
126d0 3e 41 20 72 61 6e 64 6f 6d 20 6e 6f 6e 63 65 20  >A random nonce 
126e0 66 6f 72 20 74 68 65 20 63 68 65 63 6b 73 75 6d  for the checksum
126f0 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d  .<tr><td valign=
12700 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
12710 3e 31 36 0a 20 20 20 20 3c 74 64 20 76 61 6c 69  >16.    <td vali
12720 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
12730 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 49 6e  ter>4.    <td>In
12740 69 74 69 61 6c 20 73 69 7a 65 20 6f 66 20 74 68  itial size of th
12750 65 20 64 61 74 61 62 61 73 65 20 69 6e 20 70 61  e database in pa
12760 67 65 73 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  ges.<tr><td vali
12770 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
12780 74 65 72 3e 32 30 0a 20 20 20 20 3c 74 64 20 76  ter>20.    <td v
12790 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
127a0 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64  center>4.    <td
127b0 3e 53 69 7a 65 20 6f 66 20 61 20 64 69 73 6b 20  >Size of a disk 
127c0 73 65 63 74 6f 72 20 61 73 73 75 6d 65 64 20 62  sector assumed b
127d0 79 20 74 68 65 20 70 72 6f 63 65 73 73 20 74 68  y the process th
127e0 61 74 20 77 72 6f 74 65 20 74 68 69 73 0a 20 20  at wrote this.  
127f0 20 20 20 20 20 20 6a 6f 75 72 6e 61 6c 2e 0a 3c        journal..<
12800 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
12810 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32  p align=center>2
12820 34 0a 20 20 20 20 3c 74 64 20 76 61 6c 69 67 6e  4.    <td valign
12830 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
12840 72 3e 34 0a 20 20 20 20 3c 74 64 3e 53 69 7a 65  r>4.    <td>Size
12850 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74 68 69   of pages in thi
12860 73 20 6a 6f 75 72 6e 61 6c 2e 0a 3c 2f 74 61 62  s journal..</tab
12870 6c 65 3e 0a 3c 2f 63 65 6e 74 65 72 3e 0a 0a 3c  le>.</center>..<
12880 70 3e 5e 41 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f  p>^A rollback jo
12890 75 72 6e 61 6c 20 68 65 61 64 65 72 20 69 73 20  urnal header is 
128a0 70 61 64 64 65 64 20 77 69 74 68 20 7a 65 72 6f  padded with zero
128b0 73 20 6f 75 74 20 74 6f 20 74 68 65 20 73 69 7a  s out to the siz
128c0 65 20 6f 66 20 61 20 0a 73 69 6e 67 6c 65 20 73  e of a .single s
128d0 65 63 74 6f 72 20 28 61 73 20 64 65 66 69 6e 65  ector (as define
128e0 64 20 62 79 20 74 68 65 20 73 65 63 74 6f 72 20  d by the sector 
128f0 73 69 7a 65 20 69 6e 74 65 67 65 72 20 61 74 20  size integer at 
12900 6f 66 66 73 65 74 20 32 30 29 2e 0a 54 68 65 20  offset 20)..The 
12910 68 65 61 64 65 72 20 69 73 20 69 6e 20 61 20 73  header is in a s
12920 65 63 74 6f 72 20 62 79 20 69 74 73 65 6c 66 20  ector by itself 
12930 73 6f 20 74 68 61 74 20 69 66 20 61 20 70 6f 77  so that if a pow
12940 65 72 20 6c 6f 73 73 20 6f 63 63 75 72 73 20 77  er loss occurs w
12950 68 69 6c 65 0a 77 72 69 74 69 6e 67 20 74 68 65  hile.writing the
12960 20 73 65 63 74 6f 72 2c 20 69 6e 66 6f 72 6d 61   sector, informa
12970 74 69 6f 6e 20 74 68 61 74 20 66 6f 6c 6c 6f 77  tion that follow
12980 73 20 74 68 65 20 68 65 61 64 65 72 20 77 69 6c  s the header wil
12990 6c 20 62 65 0a 28 68 6f 70 65 66 75 6c 6c 79 29  l be.(hopefully)
129a0 20 75 6e 64 61 6d 61 67 65 64 2e 3c 2f 70 3e 0a   undamaged.</p>.
129b0 0a 3c 70 3e 5e 41 66 74 65 72 20 74 68 65 20 68  .<p>^After the h
129c0 65 61 64 65 72 20 61 6e 64 20 7a 65 72 6f 20 70  eader and zero p
129d0 61 64 64 69 6e 67 20 61 72 65 20 7a 65 72 6f 20  adding are zero 
129e0 6f 72 20 6d 6f 72 65 20 70 61 67 65 20 72 65 63  or more page rec
129f0 6f 72 64 73 2e 20 20 5e 45 61 63 68 0a 70 61 67  ords.  ^Each.pag
12a00 65 20 72 65 63 6f 72 64 20 73 74 6f 72 65 73 20  e record stores 
12a10 61 20 63 6f 70 79 20 6f 66 20 74 68 65 20 63 6f  a copy of the co
12a20 6e 74 65 6e 74 20 6f 66 20 61 20 70 61 67 65 20  ntent of a page 
12a30 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73  from the databas
12a40 65 20 66 69 6c 65 0a 62 65 66 6f 72 65 20 69 74  e file.before it
12a50 20 77 61 73 20 63 68 61 6e 67 65 64 2e 20 20 5e   was changed.  ^
12a60 54 68 65 20 73 61 6d 65 20 70 61 67 65 20 6d 61  The same page ma
12a70 79 20 6e 6f 74 20 61 70 70 65 61 72 20 6d 6f 72  y not appear mor
12a80 65 20 74 68 61 6e 20 6f 6e 63 65 0a 77 69 74 68  e than once.with
12a90 69 6e 20 61 20 73 69 6e 67 6c 65 20 72 6f 6c 6c  in a single roll
12aa0 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 2e 0a 54 6f  back journal..To
12ab0 20 72 6f 6c 6c 62 61 63 6b 20 61 6e 20 69 6e 63   rollback an inc
12ac0 6f 6d 70 6c 65 74 65 20 74 72 61 6e 73 61 63 74  omplete transact
12ad0 69 6f 6e 2c 20 61 20 70 72 6f 63 65 73 73 0a 68  ion, a process.h
12ae0 61 73 20 6d 65 72 65 6c 79 20 74 6f 20 72 65 61  as merely to rea
12af0 64 20 74 68 65 20 72 6f 6c 6c 62 61 63 6b 20 6a  d the rollback j
12b00 6f 75 72 6e 61 6c 20 66 72 6f 6d 20 62 65 67 69  ournal from begi
12b10 6e 6e 69 6e 67 20 74 6f 20 65 6e 64 20 61 6e 64  nning to end and
12b20 0a 77 72 69 74 65 20 70 61 67 65 73 20 66 6f 75  .write pages fou
12b30 6e 64 20 69 6e 20 74 68 65 20 6a 6f 75 72 6e 61  nd in the journa
12b40 6c 20 62 61 63 6b 20 69 6e 74 6f 20 74 68 65 20  l back into the 
12b50 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 74  database file at
12b60 20 74 68 65 0a 61 70 70 72 6f 70 72 69 61 74 65   the.appropriate
12b70 20 6c 6f 63 61 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a   location.</p>..
12b80 3c 70 3e 4c 65 74 20 74 68 65 20 64 61 74 61 62  <p>Let the datab
12b90 61 73 65 20 70 61 67 65 20 73 69 7a 65 20 28 74  ase page size (t
12ba0 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
12bb0 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73 65  integer at offse
12bc0 74 20 32 34 20 0a 69 6e 20 74 68 65 20 6a 6f 75  t 24 .in the jou
12bd0 72 6e 61 6c 20 68 65 61 64 65 72 29 20 62 65 20  rnal header) be 
12be0 4e 2e 0a 54 68 65 6e 20 74 68 65 20 66 6f 72 6d  N..Then the form
12bf0 61 74 20 6f 66 20 61 20 70 61 67 65 20 72 65 63  at of a page rec
12c00 6f 72 64 20 69 73 20 61 73 20 66 6f 6c 6c 6f 77  ord is as follow
12c10 73 3a 3c 2f 70 3e 0a 0a 3c 63 65 6e 74 65 72 3e  s:</p>..<center>
12c20 0a 3c 69 3e 52 6f 6c 6c 62 61 63 6b 20 4a 6f 75  .<i>Rollback Jou
12c30 72 6e 61 6c 20 50 61 67 65 20 52 65 63 6f 72 64  rnal Page Record
12c40 20 46 6f 72 6d 61 74 3c 2f 69 3e 3c 62 72 3e 0a   Format</i><br>.
12c50 3c 74 61 62 6c 65 20 77 69 64 74 68 3d 22 38 30  <table width="80
12c60 25 22 20 62 6f 72 64 65 72 3d 31 3e 0a 3c 74 72  %" border=1>.<tr
12c70 3e 3c 74 68 3e 4f 66 66 73 65 74 3c 74 68 3e 53  ><th>Offset<th>S
12c80 69 7a 65 3c 74 68 3e 44 65 73 63 72 69 70 74 69  ize<th>Descripti
12c90 6f 6e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  on.<tr><td valig
12ca0 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
12cb0 65 72 3e 30 0a 20 20 20 20 3c 74 64 20 76 61 6c  er>0.    <td val
12cc0 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
12cd0 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 54  nter>4.    <td>T
12ce0 68 65 20 70 61 67 65 20 6e 75 6d 62 65 72 20 69  he page number i
12cf0 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  n the database f
12d00 69 6c 65 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  ile.<tr><td vali
12d10 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
12d20 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 20 76 61  ter>4.    <td va
12d30 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
12d40 65 6e 74 65 72 3e 4e 0a 20 20 20 20 3c 74 64 3e  enter>N.    <td>
12d50 4f 72 69 67 69 6e 61 6c 20 63 6f 6e 74 65 6e 74  Original content
12d60 20 6f 66 20 74 68 65 20 70 61 67 65 20 70 72 69   of the page pri
12d70 6f 72 20 74 6f 20 74 68 65 20 73 74 61 72 74 20  or to the start 
12d80 6f 66 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  of the transacti
12d90 6f 6e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  on.<tr><td valig
12da0 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
12db0 65 72 3e 4e 2b 34 0a 20 20 20 20 3c 74 64 20 76  er>N+4.    <td v
12dc0 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
12dd0 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64  center>4.    <td
12de0 3e 43 68 65 63 6b 73 75 6d 0a 3c 2f 74 61 62 6c  >Checksum.</tabl
12df0 65 3e 0a 3c 2f 63 65 6e 74 65 72 3e 0a 0a 0a 3c  e>.</center>...<
12e00 70 3e 5e 28 54 68 65 20 63 68 65 63 6b 73 75 6d  p>^(The checksum
12e10 20 69 73 20 61 6e 20 75 6e 73 69 67 6e 65 64 20   is an unsigned 
12e20 33 32 2d 62 69 74 20 69 6e 74 65 67 65 72 20 63  32-bit integer c
12e30 6f 6d 70 75 74 65 64 20 61 73 20 66 6f 6c 6c 6f  omputed as follo
12e40 77 73 3a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c  ws:</p>..<ol>.<l
12e50 69 3e 49 6e 69 74 69 61 6c 69 7a 65 20 74 68 65  i>Initialize the
12e60 20 63 68 65 63 6b 73 75 6d 20 74 6f 20 74 68 65   checksum to the
12e70 20 63 68 65 63 6b 73 75 6d 20 6e 6f 6e 63 65 20   checksum nonce 
12e80 76 61 6c 75 65 20 66 6f 75 6e 64 20 69 6e 20 74  value found in t
12e90 68 65 0a 6a 6f 75 72 6e 61 6c 20 68 65 61 64 65  he.journal heade
12ea0 72 20 61 74 20 6f 66 66 73 65 74 20 31 32 2e 0a  r at offset 12..
12eb0 3c 6c 69 3e 49 6e 69 74 69 61 6c 69 7a 65 20 69  <li>Initialize i
12ec0 6e 64 65 78 20 58 20 74 6f 20 62 65 20 4e 2d 32  ndex X to be N-2
12ed0 30 30 20 28 77 68 65 72 65 20 4e 20 69 73 20 74  00 (where N is t
12ee0 68 65 20 73 69 7a 65 20 6f 66 20 61 20 64 61 74  he size of a dat
12ef0 61 62 61 73 65 20 70 61 67 65 0a 69 6e 20 62 79  abase page.in by
12f00 74 65 73 2e 0a 3c 6c 69 3e 49 6e 74 65 72 70 72  tes..<li>Interpr
12f10 65 74 20 74 68 65 20 66 6f 75 72 20 62 79 74 65  et the four byte
12f20 73 20 61 74 20 6f 66 66 73 65 74 20 58 20 69 6e  s at offset X in
12f30 74 6f 20 74 68 65 20 70 61 67 65 20 61 73 20 61  to the page as a
12f40 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69   4-byte big-endi
12f50 61 6e 0a 75 6e 73 69 67 6e 65 64 20 69 6e 74 65  an.unsigned inte
12f60 67 65 72 2e 20 20 41 64 64 20 74 68 65 20 76 61  ger.  Add the va
12f70 6c 75 65 20 6f 66 20 74 68 61 74 20 69 6e 74 65  lue of that inte
12f80 67 65 72 20 74 6f 20 74 68 65 20 63 68 65 63 6b  ger to the check
12f90 73 75 6d 2e 0a 3c 6c 69 3e 53 75 62 74 72 61 63  sum..<li>Subtrac
12fa0 65 20 32 30 30 20 66 72 6f 6d 20 58 2e 0a 3c 6c  e 200 from X..<l
12fb0 69 3e 49 66 20 58 20 69 73 20 67 72 65 61 74 65  i>If X is greate
12fc0 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  r than or equal 
12fd0 74 6f 20 7a 65 72 6f 2c 20 67 6f 20 62 61 63 6b  to zero, go back
12fe0 20 74 6f 20 73 74 65 70 20 33 2e 0a 3c 2f 6f 6c   to step 3..</ol
12ff0 3e 29 5e 0a 0a 3c 70 3e 54 68 65 20 63 68 65 63  >)^..<p>The chec
13000 6b 73 75 6d 20 76 61 6c 75 65 20 69 73 20 75 73  ksum value is us
13010 65 64 20 74 6f 20 67 75 61 72 64 20 61 67 61 69  ed to guard agai
13020 6e 73 74 20 69 6e 63 6f 6d 70 6c 65 74 65 20 77  nst incomplete w
13030 72 69 74 65 73 20 6f 66 0a 61 20 6a 6f 75 72 6e  rites of.a journ
13040 61 6c 20 70 61 67 65 20 72 65 63 6f 72 64 20 66  al page record f
13050 6f 6c 6c 6f 77 69 6e 67 20 61 20 70 6f 77 65 72  ollowing a power
13060 20 66 61 69 6c 75 72 65 2e 20 20 41 20 64 69 66   failure.  A dif
13070 66 65 72 65 6e 74 20 72 61 6e 64 6f 6d 20 6e 6f  ferent random no
13080 6e 63 65 0a 69 73 20 75 73 65 64 20 65 61 63 68  nce.is used each
13090 20 74 69 6d 65 20 61 20 74 72 61 6e 73 61 63 74   time a transact
130a0 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64 20 69  ion is started i
130b0 6e 20 6f 72 64 65 72 20 74 6f 20 6d 69 6e 69 6d  n order to minim
130c0 69 7a 65 20 74 68 65 20 72 69 73 6b 0a 74 68 61  ize the risk.tha
130d0 74 20 75 6e 77 72 69 74 74 65 6e 20 73 65 63 74  t unwritten sect
130e0 6f 72 73 20 6d 69 67 68 74 20 62 79 20 63 68 61  ors might by cha
130f0 6e 63 65 20 63 6f 6e 74 61 69 6e 20 64 61 74 61  nce contain data
13100 20 66 72 6f 6d 20 74 68 65 20 73 61 6d 65 20 70   from the same p
13110 61 67 65 0a 74 68 61 74 20 77 61 73 20 61 20 70  age.that was a p
13120 61 72 74 20 6f 66 20 70 72 69 6f 72 20 6a 6f 75  art of prior jou
13130 72 6e 61 6c 73 2e 20 20 42 79 20 63 68 61 6e 67  rnals.  By chang
13140 69 6e 67 20 74 68 65 20 6e 6f 6e 63 65 20 66 6f  ing the nonce fo
13150 72 20 65 61 63 68 0a 74 72 61 6e 73 61 63 74 69  r each.transacti
13160 6f 6e 2c 20 73 74 61 6c 65 20 64 61 74 61 20 6f  on, stale data o
13170 6e 20 64 69 73 6b 20 77 69 6c 6c 20 73 74 69 6c  n disk will stil
13180 6c 20 67 65 6e 65 72 61 74 65 20 61 6e 20 69 6e  l generate an in
13190 63 6f 72 72 65 63 74 20 63 68 65 63 6b 73 75 6d  correct checksum
131a0 0a 61 6e 64 20 62 65 20 64 65 74 65 63 74 65 64  .and be detected
131b0 20 77 69 74 68 20 68 69 67 68 20 70 72 6f 62 61   with high proba
131c0 62 69 6c 69 74 79 2e 20 20 54 68 65 20 63 68 65  bility.  The che
131d0 63 6b 73 75 6d 20 6f 6e 6c 79 20 75 73 65 73 20  cksum only uses 
131e0 61 20 73 70 61 72 73 65 20 73 61 6d 70 6c 65 0a  a sparse sample.
131f0 6f 66 20 33 32 2d 62 69 74 20 77 6f 72 64 73 20  of 32-bit words 
13200 66 72 6f 6d 20 74 68 65 20 64 61 74 61 20 72 65  from the data re
13210 63 6f 72 64 20 66 6f 72 20 70 65 72 66 6f 72 6d  cord for perform
13220 61 6e 63 65 20 72 65 61 73 6f 6e 73 20 2d 20 64  ance reasons - d
13230 65 73 69 67 6e 20 73 74 75 64 69 65 73 20 0a 64  esign studies .d
13240 75 72 69 6e 67 20 74 68 65 20 70 6c 61 6e 6e 69  uring the planni
13250 6e 67 20 70 68 61 73 65 73 20 6f 66 20 53 51 4c  ng phases of SQL
13260 69 74 65 20 33 2e 30 2e 30 20 73 68 6f 77 65 64  ite 3.0.0 showed
13270 0a 61 20 73 69 67 6e 69 66 69 63 61 6e 74 20 70  .a significant p
13280 65 72 66 6f 72 6d 61 6e 63 65 20 68 69 74 20 69  erformance hit i
13290 6e 20 63 68 65 63 6b 73 75 6d 6d 69 6e 67 20 74  n checksumming t
132a0 68 65 20 65 6e 74 69 72 65 20 70 61 67 65 2e 3c  he entire page.<
132b0 2f 70 3e 0a 0a 3c 70 3e 4c 65 74 20 74 68 65 20  /p>..<p>Let the 
132c0 70 61 67 65 20 63 6f 75 6e 74 20 76 61 6c 75 65  page count value
132d0 20 61 74 20 6f 66 66 73 65 74 20 38 20 69 6e 20   at offset 8 in 
132e0 74 68 65 20 6a 6f 75 72 6e 61 6c 20 68 65 61 64  the journal head
132f0 65 72 20 62 65 20 4d 2e 0a 5e 49 66 20 4d 20 69  er be M..^If M i
13300 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 7a  s greater than z
13310 65 72 6f 20 74 68 65 6e 20 61 66 74 65 72 20 4d  ero then after M
13320 20 70 61 67 65 20 72 65 63 6f 72 64 73 20 74 68   page records th
13330 65 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 0a 6d  e journal file.m
13340 61 79 20 62 65 20 7a 65 72 6f 20 70 61 64 64 65  ay be zero padde
13350 64 20 6f 75 74 20 74 6f 20 74 68 65 20 6e 65 78  d out to the nex
13360 74 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20 74 68  t multiple of th
13370 65 20 73 65 63 74 6f 72 20 73 69 7a 65 20 61 6e  e sector size an
13380 64 20 61 6e 6f 74 68 65 72 0a 6a 6f 75 72 6e 61  d another.journa
13390 6c 20 68 65 61 64 65 72 20 6d 61 79 20 62 65 20  l header may be 
133a0 69 6e 73 65 72 74 65 64 2e 20 20 5e 41 6c 6c 20  inserted.  ^All 
133b0 6a 6f 75 72 6e 61 6c 20 68 65 61 64 65 72 73 20  journal headers 
133c0 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d 65 0a  within the same.
133d0 6a 6f 75 72 6e 61 6c 20 6d 75 73 74 20 63 6f 6e  journal must con
133e0 74 61 69 6e 20 74 68 65 20 73 61 6d 65 20 64 61  tain the same da
133f0 74 61 62 61 73 65 20 70 61 67 65 20 73 69 7a 65  tabase page size
13400 20 61 6e 64 20 73 65 63 74 6f 72 20 73 69 7a 65   and sector size
13410 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20 4d 20  .</p>..<p>^If M 
13420 69 73 20 2d 31 20 69 6e 20 74 68 65 20 69 6e 69  is -1 in the ini
13430 74 69 61 6c 20 6a 6f 75 72 6e 61 6c 20 68 65 61  tial journal hea
13440 64 65 72 2c 20 74 68 65 6e 20 74 68 65 20 6e 75  der, then the nu
13450 6d 62 65 72 20 6f 66 20 70 61 67 65 20 72 65 63  mber of page rec
13460 6f 72 64 73 0a 74 68 61 74 20 66 6f 6c 6c 6f 77  ords.that follow
13470 20 69 73 20 63 6f 6d 70 75 74 65 64 20 62 79 20   is computed by 
13480 63 6f 6d 70 75 74 69 6e 67 20 68 6f 77 20 6d 61  computing how ma
13490 6e 79 20 70 61 67 65 20 72 65 63 6f 72 64 73 20  ny page records 
134a0 77 69 6c 6c 20 66 69 74 20 69 6e 0a 74 68 65 20  will fit in.the 
134b0 61 76 61 69 6c 61 62 6c 65 20 73 70 61 63 65 20  available space 
134c0 6f 66 20 74 68 65 20 72 65 6d 61 69 6e 64 65 72  of the remainder
134d0 20 6f 66 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20   of the journal 
134e0 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  file.</p>..<tcl>
134f0 68 64 5f 66 72 61 67 6d 65 6e 74 20 77 61 6c 66  hd_fragment walf
13500 6f 72 6d 61 74 20 7b 57 41 4c 20 66 6f 72 6d 61  ormat {WAL forma
13510 74 7d 3c 2f 74 63 6c 3e 0a 3c 68 31 3e 54 68 65  t}</tcl>.<h1>The
13520 20 57 72 69 74 65 2d 41 68 65 61 64 20 4c 6f 67   Write-Ahead Log
13530 3c 2f 68 31 3e 0a 0a 3c 70 3e 42 65 67 69 6e 6e  </h1>..<p>Beginn
13540 69 6e 67 20 77 69 74 68 20 5b 76 65 72 73 69 6f  ing with [versio
13550 6e 20 33 2e 37 2e 30 5d 20 28 64 61 74 65 6f 66  n 3.7.0] (dateof
13560 3a 33 2e 37 2e 30 29 2c 20 0a 53 51 4c 69 74 65  :3.7.0), .SQLite
13570 20 73 75 70 70 6f 72 74 73 20 61 20 6e 65 77 20   supports a new 
13580 74 72 61 6e 73 61 63 74 69 6f 6e 0a 63 6f 6e 74  transaction.cont
13590 72 6f 6c 20 6d 65 63 68 61 6e 69 73 6d 20 63 61  rol mechanism ca
135a0 6c 6c 65 64 20 22 5b 57 41 4c 20 7c 20 77 72 69  lled "[WAL | wri
135b0 74 65 2d 61 68 65 61 64 20 6c 6f 67 5d 22 20 6f  te-ahead log]" o
135c0 72 20 22 5b 57 41 4c 5d 22 2e 0a 5e 57 68 65 6e  r "[WAL]"..^When
135d0 20 61 20 64 61 74 61 62 61 73 65 20 69 73 20 69   a database is i
135e0 6e 20 57 41 4c 20 6d 6f 64 65 2c 20 61 6c 6c 20  n WAL mode, all 
135f0 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 74 6f 20 74  connections to t
13600 68 61 74 20 64 61 74 61 62 61 73 65 20 6d 75 73  hat database mus
13610 74 0a 75 73 65 20 74 68 65 20 57 41 4c 2e 20 20  t.use the WAL.  
13620 5e 41 20 70 61 72 74 69 63 75 6c 61 72 20 64 61  ^A particular da
13630 74 61 62 61 73 65 20 77 69 6c 6c 20 75 73 65 20  tabase will use 
13640 65 69 74 68 65 72 20 61 20 72 6f 6c 6c 62 61 63  either a rollbac
13650 6b 20 6a 6f 75 72 6e 61 6c 0a 6f 72 20 61 20 57  k journal.or a W
13660 41 4c 2c 20 62 75 74 20 6e 6f 74 20 62 6f 74 68  AL, but not both
13670 20 61 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d   at the same tim
13680 65 2e 0a 5e 54 68 65 20 57 41 4c 20 69 73 20 61  e..^The WAL is a
13690 6c 77 61 79 73 20 6c 6f 63 61 74 65 64 20 69 6e  lways located in
136a0 20 74 68 65 20 73 61 6d 65 20 64 69 72 65 63 74   the same direct
136b0 6f 72 79 20 61 73 20 74 68 65 20 64 61 74 61 62  ory as the datab
136c0 61 73 65 0a 66 69 6c 65 20 61 6e 64 20 68 61 73  ase.file and has
136d0 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 61   the same name a
136e0 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  s the database f
136f0 69 6c 65 20 62 75 74 20 77 69 74 68 20 74 68 65  ile but with the
13700 20 73 74 72 69 6e 67 0a 22 3c 74 74 3e 2d 77 61   string."<tt>-wa
13710 6c 3c 2f 74 74 3e 22 20 61 70 70 65 6e 64 65 64  l</tt>" appended
13720 2e 3c 2f 70 3e 0a 0a 3c 68 32 3e 57 41 4c 20 46  .</p>..<h2>WAL F
13730 69 6c 65 20 46 6f 72 6d 61 74 3c 2f 68 32 3e 0a  ile Format</h2>.
13740 0a 3c 70 3e 41 20 57 41 4c 20 66 69 6c 65 20 63  .<p>A WAL file c
13750 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 68 65 61  onsists of a hea
13760 64 65 72 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20  der followed by 
13770 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 22 66 72  zero or more "fr
13780 61 6d 65 73 22 2e 0a 45 61 63 68 20 66 72 61 6d  ames"..Each fram
13790 65 20 72 65 63 6f 72 64 73 20 74 68 65 20 72 65  e records the re
137a0 76 69 73 65 64 20 63 6f 6e 74 65 6e 74 20 6f 66  vised content of
137b0 20 61 20 73 69 6e 67 6c 65 20 70 61 67 65 20 66   a single page f
137c0 72 6f 6d 20 74 68 65 0a 64 61 74 61 62 61 73 65  rom the.database
137d0 20 66 69 6c 65 2e 20 20 41 6c 6c 20 63 68 61 6e   file.  All chan
137e0 67 65 73 20 74 6f 20 74 68 65 20 64 61 74 61 62  ges to the datab
137f0 61 73 65 20 61 72 65 20 72 65 63 6f 72 64 65 64  ase are recorded
13800 20 62 79 20 77 72 69 74 69 6e 67 0a 66 72 61 6d   by writing.fram
13810 65 73 20 69 6e 74 6f 20 74 68 65 20 57 41 4c 2e  es into the WAL.
13820 20 20 54 72 61 6e 73 61 63 74 69 6f 6e 73 20 63    Transactions c
13830 6f 6d 6d 69 74 20 77 68 65 6e 20 61 20 66 72 61  ommit when a fra
13840 6d 65 20 69 73 20 77 72 69 74 74 65 6e 20 74 68  me is written th
13850 61 74 0a 63 6f 6e 74 61 69 6e 73 20 61 20 63 6f  at.contains a co
13860 6d 6d 69 74 20 6d 61 72 6b 65 72 2e 20 20 5e 41  mmit marker.  ^A
13870 20 73 69 6e 67 6c 65 20 57 41 4c 20 63 61 6e 20   single WAL can 
13880 61 6e 64 20 75 73 75 61 6c 6c 79 20 64 6f 65 73  and usually does
13890 20 72 65 63 6f 72 64 20 0a 6d 75 6c 74 69 70 6c   record .multipl
138a0 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e 20  e transactions. 
138b0 20 50 65 72 69 6f 64 69 63 61 6c 6c 79 2c 20 74   Periodically, t
138c0 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68  he content of th
138d0 65 20 57 41 4c 20 69 73 0a 74 72 61 6e 73 66 65  e WAL is.transfe
138e0 72 72 65 64 20 62 61 63 6b 20 69 6e 74 6f 20 74  rred back into t
138f0 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
13900 20 69 6e 20 61 6e 20 6f 70 65 72 61 74 69 6f 6e   in an operation
13910 20 63 61 6c 6c 65 64 20 61 0a 22 63 68 65 63 6b   called a."check
13920 70 6f 69 6e 74 22 2e 3c 2f 70 3e 0a 0a 3c 70 3e  point".</p>..<p>
13930 5e 41 20 73 69 6e 67 6c 65 20 57 41 4c 20 66 69  ^A single WAL fi
13940 6c 65 20 63 61 6e 20 62 65 20 72 65 75 73 65 64  le can be reused
13950 20 6d 75 6c 74 69 70 6c 65 20 74 69 6d 65 73 2e   multiple times.
13960 20 20 5e 49 6e 20 6f 74 68 65 72 20 77 6f 72 64    ^In other word
13970 73 2c 20 74 68 65 0a 57 41 4c 20 63 61 6e 20 66  s, the.WAL can f
13980 69 6c 6c 20 75 70 20 77 69 74 68 20 66 72 61 6d  ill up with fram
13990 65 73 20 61 6e 64 20 74 68 65 6e 20 62 65 20 63  es and then be c
139a0 68 65 63 6b 70 6f 69 6e 74 65 64 20 61 6e 64 20  heckpointed and 
139b0 74 68 65 6e 20 6e 65 77 0a 66 72 61 6d 65 73 20  then new.frames 
139c0 63 61 6e 20 6f 76 65 72 77 72 69 74 65 20 74 68  can overwrite th
139d0 65 20 6f 6c 64 20 6f 6e 65 73 2e 20 20 5e 41 20  e old ones.  ^A 
139e0 57 41 4c 20 61 6c 77 61 79 73 20 67 72 6f 77 73  WAL always grows
139f0 20 66 72 6f 6d 20 62 65 67 69 6e 6e 69 6e 67 0a   from beginning.
13a00 74 6f 77 61 72 64 20 74 68 65 20 65 6e 64 2e 20  toward the end. 
13a10 20 43 68 65 63 6b 73 75 6d 73 20 61 6e 64 20 63   Checksums and c
13a20 6f 75 6e 74 65 72 73 20 61 74 74 61 63 68 65 64  ounters attached
13a30 20 74 6f 20 65 61 63 68 20 66 72 61 6d 65 20 61   to each frame a
13a40 72 65 0a 75 73 65 64 20 74 6f 20 64 65 74 65 72  re.used to deter
13a50 6d 69 6e 65 20 77 68 69 63 68 20 66 72 61 6d 65  mine which frame
13a60 73 20 77 69 74 68 69 6e 20 74 68 65 20 57 41 4c  s within the WAL
13a70 20 61 72 65 20 76 61 6c 69 64 20 61 6e 64 20 77   are valid and w
13a80 68 69 63 68 0a 61 72 65 20 6c 65 66 74 6f 76 65  hich.are leftove
13a90 72 73 20 66 72 6f 6d 20 70 72 69 6f 72 20 63 68  rs from prior ch
13aa0 65 63 6b 70 6f 69 6e 74 73 2e 3c 2f 70 3e 0a 0a  eckpoints.</p>..
13ab0 3c 70 3e 5e 28 54 68 65 20 57 41 4c 20 68 65 61  <p>^(The WAL hea
13ac0 64 65 72 20 69 73 20 33 32 20 62 79 74 65 73 20  der is 32 bytes 
13ad0 69 6e 20 73 69 7a 65 20 61 6e 64 20 63 6f 6e 73  in size and cons
13ae0 69 73 74 73 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ists of the foll
13af0 6f 77 69 6e 67 20 65 69 67 68 74 0a 62 69 67 2d  owing eight.big-
13b00 65 6e 64 69 61 6e 20 33 32 2d 62 69 74 20 75 6e  endian 32-bit un
13b10 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 76  signed integer v
13b20 61 6c 75 65 73 3a 3c 2f 70 3e 0a 0a 3c 63 65 6e  alues:</p>..<cen
13b30 74 65 72 3e 0a 3c 69 3e 57 41 4c 20 48 65 61 64  ter>.<i>WAL Head
13b40 65 72 20 46 6f 72 6d 61 74 3c 2f 69 3e 3c 62 72  er Format</i><br
13b50 3e 0a 3c 74 61 62 6c 65 20 77 69 64 74 68 3d 22  >.<table width="
13b60 38 30 25 22 20 62 6f 72 64 65 72 3d 31 3e 0a 3c  80%" border=1>.<
13b70 74 72 3e 3c 74 68 3e 4f 66 66 73 65 74 3c 74 68  tr><th>Offset<th
13b80 3e 53 69 7a 65 3c 74 68 3e 44 65 73 63 72 69 70  >Size<th>Descrip
13b90 74 69 6f 6e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c  tion.<tr><td val
13ba0 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
13bb0 6e 74 65 72 3e 30 3c 74 64 20 76 61 6c 69 67 6e  nter>0<td valign
13bc0 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
13bd0 72 3e 34 0a 20 20 20 20 3c 74 64 3e 4d 61 67 69  r>4.    <td>Magi
13be0 63 20 6e 75 6d 62 65 72 2e 20 20 30 78 33 37 37  c number.  0x377
13bf0 66 30 36 38 32 20 6f 72 20 30 78 33 37 37 66 30  f0682 or 0x377f0
13c00 36 38 33 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  683.<tr><td vali
13c10 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
13c20 74 65 72 3e 34 3c 74 64 20 76 61 6c 69 67 6e 3d  ter>4<td valign=
13c30 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
13c40 3e 34 0a 20 20 20 20 3c 74 64 3e 46 69 6c 65 20  >4.    <td>File 
13c50 66 6f 72 6d 61 74 20 76 65 72 73 69 6f 6e 2e 20  format version. 
13c60 20 43 75 72 72 65 6e 74 6c 79 20 33 30 30 37 30   Currently 30070
13c70 30 30 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  00..<tr><td vali
13c80 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
13c90 74 65 72 3e 38 3c 74 64 20 76 61 6c 69 67 6e 3d  ter>8<td valign=
13ca0 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
13cb0 3e 34 0a 20 20 20 20 3c 74 64 3e 44 61 74 61 62  >4.    <td>Datab
13cc0 61 73 65 20 70 61 67 65 20 73 69 7a 65 2e 20 20  ase page size.  
13cd0 45 78 61 6d 70 6c 65 3a 20 31 30 32 34 0a 3c 74  Example: 1024.<t
13ce0 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
13cf0 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 32   align=center>12
13d00 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
13d10 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20  lign=center>4.  
13d20 20 20 3c 74 64 3e 43 68 65 63 6b 70 6f 69 6e 74    <td>Checkpoint
13d30 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72   sequence number
13d40 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d  .<tr><td valign=
13d50 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
13d60 3e 31 36 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  >16<td valign=to
13d70 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34  p align=center>4
13d80 0a 20 20 20 20 3c 74 64 3e 53 61 6c 74 2d 31 3a  .    <td>Salt-1:
13d90 20 72 61 6e 64 6f 6d 20 69 6e 74 65 67 65 72 20   random integer 
13da0 69 6e 63 72 65 6d 65 6e 74 65 64 20 77 69 74 68  incremented with
13db0 20 65 61 63 68 20 63 68 65 63 6b 70 6f 69 6e 74   each checkpoint
13dc0 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d  .<tr><td valign=
13dd0 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
13de0 3e 32 30 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  >20<td valign=to
13df0 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34  p align=center>4
13e00 0a 20 20 20 20 3c 74 64 3e 53 61 6c 74 2d 32 3a  .    <td>Salt-2:
13e10 20 61 20 64 69 66 66 65 72 65 6e 74 20 72 61 6e   a different ran
13e20 64 6f 6d 20 6e 75 6d 62 65 72 20 66 6f 72 20 65  dom number for e
13e30 61 63 68 20 63 68 65 63 6b 70 6f 69 6e 74 0a 3c  ach checkpoint.<
13e40 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
13e50 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32  p align=center>2
13e60 34 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  4<td valign=top 
13e70 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20  align=center>4. 
13e80 20 20 20 3c 74 64 3e 43 68 65 63 6b 73 75 6d 2d     <td>Checksum-
13e90 31 3a 20 46 69 72 73 74 20 70 61 72 74 20 6f 66  1: First part of
13ea0 20 61 20 63 68 65 63 6b 73 75 6d 20 6f 6e 20 74   a checksum on t
13eb0 68 65 20 66 69 72 73 74 20 32 34 20 62 79 74 65  he first 24 byte
13ec0 73 20 6f 66 20 68 65 61 64 65 72 0a 3c 74 72 3e  s of header.<tr>
13ed0 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
13ee0 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32 38 3c 74  lign=center>28<t
13ef0 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
13f00 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20  gn=center>4.    
13f10 3c 74 64 3e 43 68 65 63 6b 73 75 6d 2d 32 3a 20  <td>Checksum-2: 
13f20 53 65 63 6f 6e 64 20 70 61 72 74 20 6f 66 20 74  Second part of t
13f30 68 65 20 63 68 65 63 6b 73 75 6d 20 6f 6e 20 74  he checksum on t
13f40 68 65 20 66 69 72 73 74 20 32 34 20 62 79 74 65  he first 24 byte
13f50 73 20 6f 66 20 68 65 61 64 65 72 0a 3c 2f 74 61  s of header.</ta
13f60 62 6c 65 3e 0a 3c 2f 63 65 6e 74 65 72 3e 29 5e  ble>.</center>)^
13f70 0a 0a 3c 70 3e 5e 49 6d 6d 65 64 69 61 74 65 6c  ..<p>^Immediatel
13f80 79 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20  y following the 
13f90 77 61 6c 2d 68 65 61 64 65 72 20 61 72 65 20 7a  wal-header are z
13fa0 65 72 6f 20 6f 72 20 6d 6f 72 65 20 66 72 61 6d  ero or more fram
13fb0 65 73 2e 20 5e 45 61 63 68 0a 66 72 61 6d 65 20  es. ^Each.frame 
13fc0 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 32 34  consists of a 24
13fd0 2d 62 79 74 65 20 66 72 61 6d 65 2d 68 65 61 64  -byte frame-head
13fe0 65 72 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61  er followed by a
13ff0 20 3c 69 3e 70 61 67 65 2d 73 69 7a 65 3c 2f 69   <i>page-size</i
14000 3e 20 62 79 74 65 73 0a 6f 66 20 70 61 67 65 20  > bytes.of page 
14010 64 61 74 61 2e 20 5e 28 54 68 65 20 66 72 61 6d  data. ^(The fram
14020 65 2d 68 65 61 64 65 72 20 69 73 20 73 69 78 20  e-header is six 
14030 62 69 67 2d 65 6e 64 69 61 6e 20 33 32 2d 62 69  big-endian 32-bi
14040 74 20 75 6e 73 69 67 6e 65 64 20 0a 69 6e 74 65  t unsigned .inte
14050 67 65 72 20 76 61 6c 75 65 73 2c 20 61 73 20 66  ger values, as f
14060 6f 6c 6c 6f 77 73 3a 0a 0a 3c 63 65 6e 74 65 72  ollows:..<center
14070 3e 0a 3c 69 3e 57 41 4c 20 46 72 61 6d 65 20 48  >.<i>WAL Frame H
14080 65 61 64 65 72 20 46 6f 72 6d 61 74 3c 2f 69 3e  eader Format</i>
14090 3c 62 72 3e 0a 3c 74 61 62 6c 65 20 77 69 64 74  <br>.<table widt
140a0 68 3d 22 38 30 25 22 20 62 6f 72 64 65 72 3d 31  h="80%" border=1
140b0 3e 0a 3c 74 72 3e 3c 74 68 3e 4f 66 66 73 65 74  >.<tr><th>Offset
140c0 3c 74 68 3e 53 69 7a 65 3c 74 68 3e 44 65 73 63  <th>Size<th>Desc
140d0 72 69 70 74 69 6f 6e 0a 3c 74 72 3e 3c 74 64 20  ription.<tr><td 
140e0 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
140f0 3d 63 65 6e 74 65 72 3e 30 3c 74 64 20 76 61 6c  =center>0<td val
14100 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
14110 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 50  nter>4.    <td>P
14120 61 67 65 20 6e 75 6d 62 65 72 0a 3c 74 72 3e 3c  age number.<tr><
14130 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
14140 69 67 6e 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20  ign=center>4<td 
14150 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
14160 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74  =center>4.    <t
14170 64 3e 46 6f 72 20 63 6f 6d 6d 69 74 20 72 65 63  d>For commit rec
14180 6f 72 64 73 2c 20 74 68 65 20 73 69 7a 65 20 6f  ords, the size o
14190 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  f the database f
141a0 69 6c 65 20 69 6e 20 70 61 67 65 73 0a 20 20 20  ile in pages.   
141b0 20 20 20 20 20 61 66 74 65 72 20 74 68 65 20 63       after the c
141c0 6f 6d 6d 69 74 2e 20 20 46 6f 72 20 61 6c 6c 20  ommit.  For all 
141d0 6f 74 68 65 72 20 72 65 63 6f 72 64 73 2c 20 7a  other records, z
141e0 65 72 6f 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c  ero..<tr><td val
141f0 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
14200 6e 74 65 72 3e 38 3c 74 64 20 76 61 6c 69 67 6e  nter>8<td valign
14210 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
14220 72 3e 34 0a 20 20 20 20 3c 74 64 3e 53 61 6c 74  r>4.    <td>Salt
14230 2d 31 20 63 6f 70 69 65 64 20 66 72 6f 6d 20 74  -1 copied from t
14240 68 65 20 57 41 4c 20 68 65 61 64 65 72 0a 3c 74  he WAL header.<t
14250 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
14260 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 32   align=center>12
14270 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
14280 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20  lign=center>4.  
14290 20 20 3c 74 64 3e 53 61 6c 74 2d 32 20 63 6f 70    <td>Salt-2 cop
142a0 69 65 64 20 66 72 6f 6d 20 74 68 65 20 57 41 4c  ied from the WAL
142b0 20 68 65 61 64 65 72 0a 3c 74 72 3e 3c 74 64 20   header.<tr><td 
142c0 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
142d0 3d 63 65 6e 74 65 72 3e 31 36 3c 74 64 20 76 61  =center>16<td va
142e0 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
142f0 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e  enter>4.    <td>
14300 43 68 65 63 6b 73 75 6d 2d 31 3a 20 20 43 75 6d  Checksum-1:  Cum
14310 75 6c 61 74 69 76 65 20 63 68 65 63 6b 73 75 6d  ulative checksum
14320 20 75 70 20 74 68 72 6f 75 67 68 20 61 6e 64 20   up through and 
14330 69 6e 63 6c 75 64 69 6e 67 20 74 68 69 73 20 70  including this p
14340 61 67 65 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  age.<tr><td vali
14350 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
14360 74 65 72 3e 32 30 3c 74 64 20 76 61 6c 69 67 6e  ter>20<td valign
14370 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
14380 72 3e 34 0a 20 20 20 20 3c 74 64 3e 43 68 65 63  r>4.    <td>Chec
14390 6b 73 75 6d 2d 32 3a 20 20 53 65 63 6f 6e 64 20  ksum-2:  Second 
143a0 68 61 6c 66 20 6f 66 20 74 68 65 20 63 75 6d 75  half of the cumu
143b0 6c 61 74 69 76 65 20 63 68 65 63 6b 73 75 6d 2e  lative checksum.
143c0 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 63 65 6e 74  .</table>.</cent
143d0 65 72 3e 29 5e 0a 0a 5e 28 3c 70 3e 41 20 66 72  er>)^..^(<p>A fr
143e0 61 6d 65 20 69 73 20 63 6f 6e 73 69 64 65 72 65  ame is considere
143f0 64 20 76 61 6c 69 64 20 69 66 20 61 6e 64 20 6f  d valid if and o
14400 6e 6c 79 20 69 66 20 74 68 65 20 66 6f 6c 6c 6f  nly if the follo
14410 77 69 6e 67 20 63 6f 6e 64 69 74 69 6f 6e 73 20  wing conditions 
14420 61 72 65 0a 74 72 75 65 3a 3c 2f 70 3e 0a 0a 3c  are.true:</p>..<
14430 6f 6c 3e 0a 3c 6c 69 3e 3c 70 3e 54 68 65 20 73  ol>.<li><p>The s
14440 61 6c 74 2d 31 20 61 6e 64 20 73 61 6c 74 2d 32  alt-1 and salt-2
14450 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 66   values in the f
14460 72 61 6d 65 2d 68 65 61 64 65 72 20 6d 61 74 63  rame-header matc
14470 68 0a 20 20 20 20 20 20 20 73 61 6c 74 20 76 61  h.       salt va
14480 6c 75 65 73 20 69 6e 20 74 68 65 20 77 61 6c 2d  lues in the wal-
14490 68 65 61 64 65 72 3c 2f 70 3e 3c 2f 6c 69 3e 0a  header</p></li>.
144a0 0a 3c 6c 69 3e 3c 70 3e 54 68 65 20 63 68 65 63  .<li><p>The chec
144b0 6b 73 75 6d 20 76 61 6c 75 65 73 20 69 6e 20 74  ksum values in t
144c0 68 65 20 66 69 6e 61 6c 20 38 20 62 79 74 65 73  he final 8 bytes
144d0 20 6f 66 20 74 68 65 20 66 72 61 6d 65 2d 68 65   of the frame-he
144e0 61 64 65 72 0a 20 20 20 20 20 20 20 65 78 61 63  ader.       exac
144f0 74 6c 79 20 6d 61 74 63 68 20 74 68 65 20 63 68  tly match the ch
14500 65 63 6b 73 75 6d 20 63 6f 6d 70 75 74 65 64 20  ecksum computed 
14510 63 6f 6e 73 65 63 75 74 69 76 65 6c 79 20 6f 6e  consecutively on
14520 20 74 68 65 0a 20 20 20 20 20 20 20 66 69 72 73   the.       firs
14530 74 20 32 34 20 62 79 74 65 73 20 6f 66 20 74 68  t 24 bytes of th
14540 65 20 57 41 4c 20 68 65 61 64 65 72 20 61 6e 64  e WAL header and
14550 20 74 68 65 20 66 69 72 73 74 20 38 20 62 79 74   the first 8 byt
14560 65 73 20 61 6e 64 0a 20 20 20 20 20 20 20 74 68  es and.       th
14570 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61 6c 6c  e content of all
14580 20 66 72 61 6d 65 73 0a 20 20 20 20 20 20 20 75   frames.       u
14590 70 20 74 6f 20 61 6e 64 20 69 6e 63 6c 75 64 69  p to and includi
145a0 6e 67 20 74 68 65 20 63 75 72 72 65 6e 74 20 66  ng the current f
145b0 72 61 6d 65 2e 3c 2f 70 3e 3c 2f 6c 69 3e 3c 2f  rame.</p></li></
145c0 6c 69 3e 0a 3c 2f 6f 6c 3e 29 5e 0a 0a 3c 74 63  li>.</ol>)^..<tc
145d0 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 77 61  l>hd_fragment wa
145e0 6c 63 6b 73 6d 20 7b 57 41 4c 20 63 68 65 63 6b  lcksm {WAL check
145f0 73 75 6d 20 61 6c 67 6f 72 69 74 68 6d 7d 3c 2f  sum algorithm}</
14600 74 63 6c 3e 0a 3c 68 32 3e 43 68 65 63 6b 73 75  tcl>.<h2>Checksu
14610 6d 20 41 6c 67 6f 72 69 74 68 6d 3c 2f 68 32 3e  m Algorithm</h2>
14620 0a 0a 3c 70 3e 54 68 65 20 63 68 65 63 6b 73 75  ..<p>The checksu
14630 6d 20 69 73 20 63 6f 6d 70 75 74 65 64 20 62 79  m is computed by
14640 20 69 6e 74 65 72 70 72 65 74 69 6e 67 20 74 68   interpreting th
14650 65 20 69 6e 70 75 74 20 61 73 0a 61 6e 20 65 76  e input as.an ev
14660 65 6e 20 6e 75 6d 62 65 72 20 6f 66 20 75 6e 73  en number of uns
14670 69 67 6e 65 64 20 33 32 2d 62 69 74 20 69 6e 74  igned 32-bit int
14680 65 67 65 72 73 3a 20 78 28 30 29 20 74 68 72 6f  egers: x(0) thro
14690 75 67 68 20 78 28 4e 29 2e 0a 5e 54 68 65 20 33  ugh x(N)..^The 3
146a0 32 2d 62 69 74 20 69 6e 74 65 67 65 72 73 20 61  2-bit integers a
146b0 72 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 66  re big-endian if
146c0 20 74 68 65 0a 6d 61 67 69 63 20 6e 75 6d 62 65   the.magic numbe
146d0 72 20 69 6e 20 74 68 65 20 66 69 72 73 74 20 34  r in the first 4
146e0 20 62 79 74 65 73 20 6f 66 20 74 68 65 20 57 41   bytes of the WA
146f0 4c 20 68 65 61 64 65 72 20 69 73 20 30 78 33 37  L header is 0x37
14700 37 66 30 36 38 33 20 61 6e 64 0a 74 68 65 20 69  7f0683 and.the i
14710 6e 74 65 67 65 72 73 20 61 72 65 20 6c 69 74 74  ntegers are litt
14720 6c 65 2d 65 6e 64 69 61 6e 20 69 66 20 74 68 65  le-endian if the
14730 20 6d 61 67 69 63 20 6e 75 6d 62 65 72 20 69 73   magic number is
14740 20 30 78 33 37 37 66 30 36 38 32 2e 0a 5e 54 68   0x377f0682..^Th
14750 65 20 63 68 65 63 6b 73 75 6d 20 76 61 6c 75 65  e checksum value
14760 73 20 61 72 65 20 61 6c 77 61 79 73 20 73 74 6f  s are always sto
14770 72 65 64 20 69 6e 20 74 68 65 20 66 72 61 6d 65  red in the frame
14780 20 68 65 61 64 65 72 20 69 6e 20 61 0a 62 69 67   header in a.big
14790 2d 65 6e 64 69 61 6e 20 66 6f 72 6d 61 74 20 72  -endian format r
147a0 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 69  egardless of whi
147b0 63 68 20 62 79 74 65 20 6f 72 64 65 72 20 69 73  ch byte order is
147c0 20 75 73 65 64 20 74 6f 20 63 6f 6d 70 75 74 65   used to compute
147d0 0a 74 68 65 20 63 68 65 63 6b 73 75 6d 2e 3c 2f  .the checksum.</
147e0 70 3e 0a 0a 3c 70 3e 54 68 65 20 63 68 65 63 6b  p>..<p>The check
147f0 73 75 6d 20 61 6c 67 6f 72 69 74 68 6d 20 6f 6e  sum algorithm on
14800 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 63 6f 6e  ly works for con
14810 74 65 6e 74 20 77 68 69 63 68 20 69 73 20 61 20  tent which is a 
14820 6d 75 6c 74 69 70 6c 65 20 6f 66 0a 38 20 62 79  multiple of.8 by
14830 74 65 73 20 69 6e 20 6c 65 6e 67 74 68 2e 20 20  tes in length.  
14840 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
14850 69 66 20 74 68 65 20 69 6e 70 75 74 73 20 61 72  if the inputs ar
14860 65 20 78 28 30 29 20 74 68 72 6f 75 67 68 20 78  e x(0) through x
14870 28 4e 29 0a 74 68 65 6e 20 4e 20 6d 75 73 74 20  (N).then N must 
14880 62 65 20 6f 64 64 2e 0a 5e 28 54 68 65 20 63 68  be odd..^(The ch
14890 65 63 6b 73 75 6d 20 61 6c 67 6f 72 69 74 68 6d  ecksum algorithm
148a0 20 69 73 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a   is as follows:.
148b0 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72  .<blockquote><pr
148c0 65 3e 20 0a 73 30 20 3d 20 73 31 20 3d 20 30 0a  e> .s0 = s1 = 0.
148d0 66 6f 72 20 69 20 66 72 6f 6d 20 30 20 74 6f 20  for i from 0 to 
148e0 6e 2d 31 20 73 74 65 70 20 32 3a 0a 20 20 20 73  n-1 step 2:.   s
148f0 30 20 2b 3d 20 78 28 69 29 20 2b 20 73 31 3b 0a  0 += x(i) + s1;.
14900 20 20 20 73 31 20 2b 3d 20 78 28 69 2b 31 29 20     s1 += x(i+1) 
14910 2b 20 73 30 3b 0a 65 6e 64 66 6f 72 0a 23 20 72  + s0;.endfor.# r
14920 65 73 75 6c 74 20 69 6e 20 73 30 20 61 6e 64 20  esult in s0 and 
14930 73 31 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b  s1.</pre></block
14940 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 5e 54 68  quote>)^..<p>^Th
14950 65 20 6f 75 74 70 75 74 73 20 73 30 20 61 6e 64  e outputs s0 and
14960 20 73 31 20 61 72 65 20 62 6f 74 68 20 77 65 69   s1 are both wei
14970 67 68 74 65 64 20 63 68 65 63 6b 73 75 6d 73 20  ghted checksums 
14980 75 73 69 6e 67 20 46 69 62 6f 6e 61 63 63 69 20  using Fibonacci 
14990 77 65 69 67 68 74 73 0a 69 6e 20 72 65 76 65 72  weights.in rever
149a0 73 65 20 6f 72 64 65 72 2e 20 20 28 5e 54 68 65  se order.  (^The
149b0 20 6c 61 72 67 65 73 74 20 46 69 62 6f 6e 61 63   largest Fibonac
149c0 63 69 20 77 65 69 67 68 74 20 6f 63 63 75 72 73  ci weight occurs
149d0 20 6f 6e 20 74 68 65 20 66 69 72 73 74 20 65 6c   on the first el
149e0 65 6d 65 6e 74 0a 6f 66 20 74 68 65 20 73 65 71  ement.of the seq
149f0 75 65 6e 63 65 20 62 65 69 6e 67 20 73 75 6d 6d  uence being summ
14a00 65 64 2e 29 20 20 5e 54 68 65 20 73 31 20 76 61  ed.)  ^The s1 va
14a10 6c 75 65 20 73 70 61 6e 73 20 61 6c 6c 20 33 32  lue spans all 32
14a20 2d 62 69 74 20 69 6e 74 65 67 65 72 0a 74 65 72  -bit integer.ter
14a30 6d 73 20 6f 66 20 74 68 65 20 73 65 71 75 65 6e  ms of the sequen
14a40 63 65 20 77 68 65 72 65 61 73 20 73 30 20 6f 6d  ce whereas s0 om
14a50 69 74 73 20 74 68 65 20 66 69 6e 61 6c 20 74 65  its the final te
14a60 72 6d 2e 3c 2f 70 3e 0a 0a 3c 68 32 3e 43 68 65  rm.</p>..<h2>Che
14a70 63 6b 70 6f 69 6e 74 20 41 6c 67 6f 72 69 74 68  ckpoint Algorith
14a80 6d 3c 2f 68 32 3e 0a 0a 3c 70 3e 5e 4f 6e 20 61  m</h2>..<p>^On a
14a90 20 5b 63 68 65 63 6b 70 6f 69 6e 74 5d 2c 20 74   [checkpoint], t
14aa0 68 65 20 57 41 4c 20 69 73 20 66 69 72 73 74 20  he WAL is first 
14ab0 66 6c 75 73 68 65 64 20 74 6f 20 70 65 72 73 69  flushed to persi
14ac0 73 74 65 6e 74 20 73 74 6f 72 61 67 65 20 75 73  stent storage us
14ad0 69 6e 67 0a 74 68 65 20 78 53 79 6e 63 20 6d 65  ing.the xSync me
14ae0 74 68 6f 64 20 6f 66 20 74 68 65 20 5b 73 71 6c  thod of the [sql
14af0 69 74 65 33 5f 69 6f 5f 6d 65 74 68 6f 64 73 20  ite3_io_methods 
14b00 7c 20 56 46 53 5d 2e 20 0a 5e 54 68 65 6e 20 76  | VFS]. .^Then v
14b10 61 6c 69 64 20 63 6f 6e 74 65 6e 74 20 6f 66 20  alid content of 
14b20 74 68 65 20 57 41 4c 20 69 73 20 74 72 61 6e 73  the WAL is trans
14b30 66 65 72 72 65 64 20 69 6e 74 6f 20 74 68 65 20  ferred into the 
14b40 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 5e  database file..^
14b50 46 69 6e 61 6c 6c 79 2c 20 74 68 65 20 64 61 74  Finally, the dat
14b60 61 62 61 73 65 20 69 73 20 66 6c 75 73 68 65 64  abase is flushed
14b70 20 74 6f 20 70 65 72 73 69 73 74 65 6e 74 20 73   to persistent s
14b80 74 6f 72 61 67 65 20 75 73 69 6e 67 20 61 6e 6f  torage using ano
14b90 74 68 65 72 0a 78 53 79 6e 63 20 6d 65 74 68 6f  ther.xSync metho
14ba0 64 20 63 61 6c 6c 2e 0a 54 68 65 20 78 53 79 6e  d call..The xSyn
14bb0 63 20 6f 70 65 72 61 74 69 6f 6e 73 20 73 65 72  c operations ser
14bc0 76 65 20 61 73 20 77 72 69 74 65 20 62 61 72 72  ve as write barr
14bd0 69 65 72 73 20 2d 20 61 6c 6c 20 77 72 69 74 65  iers - all write
14be0 73 20 6c 61 75 6e 63 68 65 64 0a 62 65 66 6f 72  s launched.befor
14bf0 65 20 74 68 65 20 78 53 79 6e 63 20 6d 75 73 74  e the xSync must
14c00 20 63 6f 6d 70 6c 65 74 65 20 62 65 66 6f 72 65   complete before
14c10 20 61 6e 79 20 77 72 69 74 65 20 74 68 61 74 20   any write that 
14c20 6c 61 75 6e 63 68 65 73 20 61 66 74 65 72 20 74  launches after t
14c30 68 65 0a 78 53 79 6e 63 20 62 65 67 69 6e 73 2e  he.xSync begins.
14c40 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 66 74 65 72 20  </p>..<p>^After 
14c50 61 20 63 68 65 63 6b 70 6f 69 6e 74 2c 20 6e 65  a checkpoint, ne
14c60 77 20 77 72 69 74 65 20 74 72 61 6e 73 61 63 74  w write transact
14c70 69 6f 6e 73 20 6f 76 65 72 77 72 69 74 65 0a 74  ions overwrite.t
14c80 68 65 20 57 41 4c 20 66 69 6c 65 20 66 72 6f 6d  he WAL file from
14c90 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 20   the beginning. 
14ca0 20 5e 41 74 20 74 68 65 20 73 74 61 72 74 20 6f   ^At the start o
14cb0 66 20 74 68 65 20 66 69 72 73 74 20 6e 65 77 0a  f the first new.
14cc0 77 72 69 74 65 20 74 72 61 6e 73 61 63 74 69 6f  write transactio
14cd0 6e 2c 20 74 68 65 20 57 41 4c 20 68 65 61 64 65  n, the WAL heade
14ce0 72 20 73 61 6c 74 2d 31 20 76 61 6c 75 65 20 69  r salt-1 value i
14cf0 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 0a 61 6e  s incremented.an
14d00 64 20 74 68 65 20 73 61 6c 74 2d 32 20 76 61 6c  d the salt-2 val
14d10 75 65 20 69 73 20 72 61 6e 64 6f 6d 69 7a 65 64  ue is randomized
14d20 2e 20 20 54 68 65 73 65 20 63 68 61 6e 67 65 73  .  These changes
14d30 20 74 6f 20 74 68 65 20 73 61 6c 74 73 20 69 6e   to the salts in
14d40 76 61 6c 69 64 61 74 65 0a 6f 6c 64 20 66 72 61  validate.old fra
14d50 6d 65 73 20 69 6e 20 74 68 65 20 57 41 4c 20 74  mes in the WAL t
14d60 68 61 74 20 68 61 76 65 20 61 6c 72 65 61 64 79  hat have already
14d70 20 62 65 65 6e 20 63 68 65 63 6b 70 6f 69 6e 74   been checkpoint
14d80 65 64 20 62 75 74 20 6e 6f 74 20 79 65 74 0a 6f  ed but not yet.o
14d90 76 65 72 77 72 69 74 74 65 6e 2c 20 61 6e 64 20  verwritten, and 
14da0 70 72 65 76 65 6e 74 20 74 68 65 6d 20 66 72 6f  prevent them fro
14db0 6d 20 62 65 69 6e 67 20 63 68 65 63 6b 70 6f 69  m being checkpoi
14dc0 6e 74 65 64 20 61 67 61 69 6e 2e 3c 2f 70 3e 0a  nted again.</p>.
14dd0 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
14de0 74 20 77 61 6c 72 65 61 64 20 7b 57 41 4c 20 72  t walread {WAL r
14df0 65 61 64 20 61 6c 67 6f 72 69 74 68 6d 7d 3c 2f  ead algorithm}</
14e00 74 63 6c 3e 0a 3c 68 32 3e 52 65 61 64 65 72 20  tcl>.<h2>Reader 
14e10 41 6c 67 6f 72 69 74 68 6d 3c 2f 68 32 3e 0a 0a  Algorithm</h2>..
14e20 3c 70 3e 5e 28 54 6f 20 72 65 61 64 20 61 20 70  <p>^(To read a p
14e30 61 67 65 20 66 72 6f 6d 20 74 68 65 20 64 61 74  age from the dat
14e40 61 62 61 73 65 20 28 63 61 6c 6c 20 69 74 20 70  abase (call it p
14e50 61 67 65 20 6e 75 6d 62 65 72 20 50 29 2c 20 61  age number P), a
14e60 20 72 65 61 64 65 72 0a 66 69 72 73 74 20 63 68   reader.first ch
14e70 65 63 6b 73 20 74 68 65 20 57 41 4c 20 74 6f 20  ecks the WAL to 
14e80 73 65 65 20 69 66 20 69 74 20 63 6f 6e 74 61 69  see if it contai
14e90 6e 73 20 70 61 67 65 20 50 2e 20 20 49 66 20 73  ns page P.  If s
14ea0 6f 2c 20 74 68 65 6e 20 74 68 65 0a 6c 61 73 74  o, then the.last
14eb0 20 76 61 6c 69 64 20 69 6e 73 74 61 6e 63 65 20   valid instance 
14ec0 6f 66 20 70 61 67 65 20 50 20 74 68 61 74 20 69  of page P that i
14ed0 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20  s followed by a 
14ee0 63 6f 6d 6d 69 74 20 66 72 61 6d 65 0a 6f 72 20  commit frame.or 
14ef0 69 73 20 61 20 63 6f 6d 6d 69 74 20 66 72 61 6d  is a commit fram
14f00 65 20 69 74 73 65 6c 66 20 62 65 63 6f 6d 65 73  e itself becomes
14f10 20 74 68 65 20 76 61 6c 75 65 20 72 65 61 64 2e   the value read.
14f20 29 5e 20 20 5e 49 66 20 74 68 65 20 57 41 4c 0a  )^  ^If the WAL.
14f30 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 63 6f 70 69  contains no copi
14f40 65 73 20 6f 66 20 70 61 67 65 20 50 20 74 68 61  es of page P tha
14f50 74 20 61 72 65 20 76 61 6c 69 64 20 61 6e 64 20  t are valid and 
14f60 77 68 69 63 68 20 61 72 65 20 61 20 63 6f 6d 6d  which are a comm
14f70 69 74 0a 66 72 61 6d 65 20 6f 72 20 61 72 65 20  it.frame or are 
14f80 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 63 6f  followed by a co
14f90 6d 6d 69 74 20 66 72 61 6d 65 2c 20 74 68 65 6e  mmit frame, then
14fa0 20 70 61 67 65 20 50 20 69 73 20 72 65 61 64 20   page P is read 
14fb0 66 72 6f 6d 0a 74 68 65 20 64 61 74 61 62 61 73  from.the databas
14fc0 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e  e file.</p>..<p>
14fd0 54 6f 20 73 74 61 72 74 20 61 20 72 65 61 64 20  To start a read 
14fe0 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65  transaction, the
14ff0 20 72 65 61 64 65 72 20 72 65 63 6f 72 64 73 20   reader records 
15000 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65  the index of the
15010 20 6c 61 73 74 0a 76 61 6c 69 64 20 66 72 61 6d   last.valid fram
15020 65 20 69 6e 20 74 68 65 20 57 41 4c 2e 20 20 54  e in the WAL.  T
15030 68 65 20 72 65 61 64 65 72 20 75 73 65 73 20 74  he reader uses t
15040 68 69 73 20 72 65 63 6f 72 64 65 64 20 22 6d 78  his recorded "mx
15050 46 72 61 6d 65 22 20 76 61 6c 75 65 0a 66 6f 72  Frame" value.for
15060 20 61 6c 6c 20 73 75 62 73 65 71 75 65 6e 74 20   all subsequent 
15070 72 65 61 64 20 6f 70 65 72 61 74 69 6f 6e 73 2e  read operations.
15080 20 20 4e 65 77 20 74 72 61 6e 73 61 63 74 69 6f    New transactio
15090 6e 73 20 63 61 6e 20 62 65 20 61 70 70 65 6e 64  ns can be append
150a0 65 64 0a 74 6f 20 74 68 65 20 57 41 4c 2c 20 62  ed.to the WAL, b
150b0 75 74 20 61 73 20 6c 6f 6e 67 20 61 73 20 74 68  ut as long as th
150c0 65 20 72 65 61 64 65 72 20 75 73 65 73 20 69 74  e reader uses it
150d0 73 20 6f 72 69 67 69 6e 61 6c 20 6d 78 46 72 61  s original mxFra
150e0 6d 65 20 76 61 6c 75 65 0a 61 6e 64 20 69 67 6e  me value.and ign
150f0 6f 72 65 73 20 73 75 62 73 65 71 75 65 6e 74 6c  ores subsequentl
15100 79 20 61 70 70 65 6e 64 65 64 20 63 6f 6e 74 65  y appended conte
15110 6e 74 2c 20 74 68 65 20 72 65 61 64 65 72 20 77  nt, the reader w
15120 69 6c 6c 20 73 65 65 20 61 20 0a 63 6f 6e 73 69  ill see a .consi
15130 73 74 65 6e 74 20 73 6e 61 70 73 68 6f 74 20 6f  stent snapshot o
15140 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  f the database f
15150 72 6f 6d 20 61 20 73 69 6e 67 6c 65 20 70 6f 69  rom a single poi
15160 6e 74 20 69 6e 20 74 69 6d 65 2e 20 20 0a 5e 54  nt in time.  .^T
15170 68 69 73 20 74 65 63 68 6e 69 71 75 65 20 61 6c  his technique al
15180 6c 6f 77 73 20 6d 75 6c 74 69 70 6c 65 20 63 6f  lows multiple co
15190 6e 63 75 72 72 65 6e 74 20 72 65 61 64 65 72 73  ncurrent readers
151a0 20 74 6f 20 76 69 65 77 20 64 69 66 66 65 72 65   to view differe
151b0 6e 74 20 0a 76 65 72 73 69 6f 6e 73 20 6f 66 20  nt .versions of 
151c0 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  the database con
151d0 74 65 6e 74 20 73 69 6d 75 6c 74 61 6e 65 6f 75  tent simultaneou
151e0 73 6c 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  sly.</p>..<p>The
151f0 20 72 65 61 64 65 72 20 61 6c 67 6f 72 69 74 68   reader algorith
15200 6d 20 69 6e 20 74 68 65 20 70 72 65 76 69 6f 75  m in the previou
15210 73 20 70 61 72 61 67 72 61 70 68 73 20 77 6f 72  s paragraphs wor
15220 6b 73 20 63 6f 72 72 65 63 74 6c 79 2c 20 62 75  ks correctly, bu
15230 74 20 0a 62 65 63 61 75 73 65 20 66 72 61 6d 65  t .because frame
15240 73 20 66 6f 72 20 70 61 67 65 20 50 20 63 61 6e  s for page P can
15250 20 61 70 70 65 61 72 20 61 6e 79 77 68 65 72 65   appear anywhere
15260 20 77 69 74 68 69 6e 20 74 68 65 20 57 41 4c 2c   within the WAL,
15270 20 74 68 65 0a 72 65 61 64 65 72 20 68 61 73 20   the.reader has 
15280 74 6f 20 73 63 61 6e 20 74 68 65 20 65 6e 74 69  to scan the enti
15290 72 65 20 57 41 4c 20 6c 6f 6f 6b 69 6e 67 20 66  re WAL looking f
152a0 6f 72 20 70 61 67 65 20 50 20 66 72 61 6d 65 73  or page P frames
152b0 2e 20 20 49 66 20 74 68 65 0a 57 41 4c 20 69 73  .  If the.WAL is
152c0 20 6c 61 72 67 65 20 28 6d 75 6c 74 69 70 6c 65   large (multiple
152d0 20 6d 65 67 61 62 79 74 65 73 20 69 73 20 74 79   megabytes is ty
152e0 70 69 63 61 6c 29 20 74 68 61 74 20 73 63 61 6e  pical) that scan
152f0 20 63 61 6e 20 62 65 20 73 6c 6f 77 2c 0a 61 6e   can be slow,.an
15300 64 20 72 65 61 64 20 70 65 72 66 6f 72 6d 61 6e  d read performan
15310 63 65 20 73 75 66 66 65 72 73 2e 20 20 5e 54 6f  ce suffers.  ^To
15320 20 6f 76 65 72 63 6f 6d 65 20 74 68 69 73 20 70   overcome this p
15330 72 6f 62 6c 65 6d 2c 20 61 20 73 65 70 61 72 61  roblem, a separa
15340 74 65 0a 64 61 74 61 20 73 74 72 75 63 74 75 72  te.data structur
15350 65 20 63 61 6c 6c 65 64 20 74 68 65 20 77 61 6c  e called the wal
15360 2d 69 6e 64 65 78 20 69 73 20 6d 61 69 6e 74 61  -index is mainta
15370 69 6e 65 64 20 74 6f 20 65 78 70 65 64 69 74 65  ined to expedite
15380 20 74 68 65 0a 73 65 61 72 63 68 20 66 6f 72 20   the.search for 
15390 66 72 61 6d 65 73 20 6f 66 20 61 20 70 61 72 74  frames of a part
153a0 69 63 75 6c 61 72 20 70 61 67 65 2e 3c 2f 70 3e  icular page.</p>
153b0 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
153c0 6e 74 20 77 61 6c 69 6e 64 65 78 66 6f 72 6d 61  nt walindexforma
153d0 74 20 7b 77 61 6c 2d 69 6e 64 65 78 7d 20 7b 57  t {wal-index} {W
153e0 41 4c 2d 69 6e 64 65 78 20 66 6f 72 6d 61 74 7d  AL-index format}
153f0 3c 2f 74 63 6c 3e 0a 3c 68 32 3e 57 41 4c 2d 49  </tcl>.<h2>WAL-I
15400 6e 64 65 78 20 46 6f 72 6d 61 74 3c 2f 68 32 3e  ndex Format</h2>
15410 0a 0a 3c 70 3e 43 6f 6e 63 65 70 74 75 61 6c 6c  ..<p>Conceptuall
15420 79 2c 20 74 68 65 20 77 61 6c 2d 69 6e 64 65 78  y, the wal-index
15430 20 69 73 20 73 68 61 72 65 64 20 6d 65 6d 6f 72   is shared memor
15440 79 2c 20 74 68 6f 75 67 68 20 74 68 65 20 63 75  y, though the cu
15450 72 72 65 6e 74 0a 56 46 53 20 69 6d 70 6c 65 6d  rrent.VFS implem
15460 65 6e 74 61 74 69 6f 6e 73 20 75 73 65 20 61 20  entations use a 
15470 6d 6d 61 70 70 65 64 20 66 69 6c 65 20 66 6f 72  mmapped file for
15480 20 74 68 65 20 77 61 6c 2d 69 6e 64 65 78 2e 20   the wal-index. 
15490 20 5e 54 68 65 20 6d 6d 61 70 70 65 64 0a 66 69   ^The mmapped.fi
154a0 6c 65 20 69 73 20 69 6e 20 74 68 65 20 73 61 6d  le is in the sam
154b0 65 20 64 69 72 65 63 74 6f 72 79 20 61 73 20 74  e directory as t
154c0 68 65 20 64 61 74 61 62 61 73 65 20 61 6e 64 20  he database and 
154d0 68 61 73 20 74 68 65 20 73 61 6d 65 20 6e 61 6d  has the same nam
154e0 65 0a 61 73 20 74 68 65 20 64 61 74 61 62 61 73  e.as the databas
154f0 65 20 77 69 74 68 20 61 20 22 3c 74 74 3e 2d 73  e with a "<tt>-s
15500 68 6d 3c 2f 74 74 3e 22 20 73 75 66 66 69 78 20  hm</tt>" suffix 
15510 61 70 70 65 6e 64 65 64 2e 20 20 42 65 63 61 75  appended.  Becau
15520 73 65 0a 74 68 65 20 77 61 6c 2d 69 6e 64 65 78  se.the wal-index
15530 20 69 73 20 73 68 61 72 65 64 20 6d 65 6d 6f 72   is shared memor
15540 79 2c 20 53 51 4c 69 74 65 20 64 6f 65 73 20 6e  y, SQLite does n
15550 6f 74 20 73 75 70 70 6f 72 74 20 0a 5b 50 52 41  ot support .[PRA
15560 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65  GMA journal_mode
15570 20 7c 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 3d   | journal_mode=
15580 57 41 4c 5d 20 0a 6f 6e 20 61 20 6e 65 74 77 6f  WAL] .on a netwo
15590 72 6b 20 66 69 6c 65 73 79 73 74 65 6d 20 77 68  rk filesystem wh
155a0 65 6e 20 63 6c 69 65 6e 74 73 20 61 72 65 20 6f  en clients are o
155b0 6e 20 64 69 66 66 65 72 65 6e 74 20 6d 61 63 68  n different mach
155c0 69 6e 65 73 2e 0a 41 6c 6c 20 75 73 65 72 73 20  ines..All users 
155d0 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
155e0 6d 75 73 74 20 62 65 20 61 62 6c 65 20 74 6f 20  must be able to 
155f0 73 68 61 72 65 20 74 68 65 20 73 61 6d 65 20 6d  share the same m
15600 65 6d 6f 72 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54  emory.</p>..<p>T
15610 68 65 20 70 75 72 70 6f 73 65 20 6f 66 20 74 68  he purpose of th
15620 65 20 77 61 6c 2d 69 6e 64 65 78 20 69 73 20 74  e wal-index is t
15630 6f 20 61 6e 73 77 65 72 20 74 68 69 73 20 71 75  o answer this qu
15640 65 73 74 69 6f 6e 20 71 75 69 63 6b 6c 79 3a 3c  estion quickly:<
15650 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
15660 3e 3c 69 3e 0a 47 69 76 65 6e 20 61 20 70 61 67  ><i>.Given a pag
15670 65 20 6e 75 6d 62 65 72 20 50 20 61 6e 64 20 61  e number P and a
15680 20 6d 61 78 69 6d 75 6d 20 57 41 4c 20 66 72 61   maximum WAL fra
15690 6d 65 20 69 6e 64 65 78 20 4d 2c 0a 72 65 74 75  me index M,.retu
156a0 72 6e 20 74 68 65 20 6c 61 72 67 65 73 74 20 57  rn the largest W
156b0 41 4c 20 66 72 61 6d 65 20 69 6e 64 65 78 20 66  AL frame index f
156c0 6f 72 20 70 61 67 65 20 50 20 74 68 61 74 20 64  or page P that d
156d0 6f 65 73 20 6e 6f 74 20 65 78 63 65 65 64 20 4d  oes not exceed M
156e0 2c 20 0a 6f 72 20 72 65 74 75 72 6e 20 4e 55 4c  , .or return NUL
156f0 4c 20 69 66 20 74 68 65 72 65 20 61 72 65 20 6e  L if there are n
15700 6f 20 66 72 61 6d 65 73 20 66 6f 72 20 70 61 67  o frames for pag
15710 65 20 50 20 74 68 61 74 20 64 6f 20 6e 6f 74 20  e P that do not 
15720 65 78 63 65 65 64 20 4d 2e 0a 3c 2f 69 3e 3c 2f  exceed M..</i></
15730 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e  blockquote>..<p>
15740 54 68 65 20 3c 69 3e 4d 3c 2f 69 3e 20 76 61 6c  The <i>M</i> val
15750 75 65 20 69 6e 20 74 68 65 20 70 72 65 76 69 6f  ue in the previo
15760 75 73 20 70 61 72 61 67 72 61 70 68 20 69 73 20  us paragraph is 
15770 74 68 65 20 22 6d 78 46 72 61 6d 65 22 20 76 61  the "mxFrame" va
15780 6c 75 65 0a 64 65 66 69 6e 65 64 20 69 6e 20 5b  lue.defined in [
15790 57 41 4c 20 72 65 61 64 20 61 6c 67 6f 72 69 74  WAL read algorit
157a0 68 6d 20 7c 20 73 65 63 74 69 6f 6e 20 34 2e 34  hm | section 4.4
157b0 5d 20 74 68 61 74 20 69 73 20 72 65 61 64 20 61  ] that is read a
157c0 74 20 74 68 65 20 73 74 61 72 74 20 0a 6f 66 20  t the start .of 
157d0 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6e  a transaction an
157e0 64 20 77 68 69 63 68 20 64 65 66 69 6e 65 73 20  d which defines 
157f0 74 68 65 20 6d 61 78 69 6d 75 6d 20 66 72 61 6d  the maximum fram
15800 65 20 66 72 6f 6d 20 74 68 65 20 57 41 4c 20 74  e from the WAL t
15810 68 61 74 20 0a 74 68 65 20 72 65 61 64 65 72 20  hat .the reader 
15820 77 69 6c 6c 20 75 73 65 2e 3c 2f 70 3e 0a 0a 3c  will use.</p>..<
15830 70 3e 54 68 65 20 77 61 6c 2d 69 6e 64 65 78 20  p>The wal-index 
15840 69 73 20 74 72 61 6e 73 69 65 6e 74 2e 20 20 41  is transient.  A
15850 66 74 65 72 20 61 20 63 72 61 73 68 2c 20 74 68  fter a crash, th
15860 65 20 77 61 6c 2d 69 6e 64 65 78 20 69 73 0a 72  e wal-index is.r
15870 65 63 6f 6e 73 74 72 75 63 74 65 64 20 66 72 6f  econstructed fro
15880 6d 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 57  m the original W
15890 41 4c 20 66 69 6c 65 2e 20 20 5e 54 68 65 20 56  AL file.  ^The V
158a0 46 53 20 69 73 20 72 65 71 75 69 72 65 64 0a 74  FS is required.t
158b0 6f 20 65 69 74 68 65 72 20 74 72 75 6e 63 61 74  o either truncat
158c0 65 20 6f 72 20 7a 65 72 6f 20 74 68 65 20 68 65  e or zero the he
158d0 61 64 65 72 20 6f 66 20 74 68 65 20 77 61 6c 2d  ader of the wal-
158e0 69 6e 64 65 78 20 77 68 65 6e 20 74 68 65 20 6c  index when the l
158f0 61 73 74 0a 63 6f 6e 6e 65 63 74 69 6f 6e 20 74  ast.connection t
15900 6f 20 69 74 20 63 6c 6f 73 65 73 2e 20 20 42 65  o it closes.  Be
15910 63 61 75 73 65 20 74 68 65 20 77 61 6c 2d 69 6e  cause the wal-in
15920 64 65 78 20 69 73 20 74 72 61 6e 73 69 65 6e 74  dex is transient
15930 2c 20 69 74 20 63 61 6e 0a 75 73 65 20 61 6e 20  , it can.use an 
15940 61 72 63 68 69 74 65 63 74 75 72 65 2d 73 70 65  architecture-spe
15950 63 69 66 69 63 20 66 6f 72 6d 61 74 3b 20 69 74  cific format; it
15960 20 64 6f 65 73 20 6e 6f 74 20 68 61 76 65 20 74   does not have t
15970 6f 20 62 65 20 63 72 6f 73 73 2d 70 6c 61 74 66  o be cross-platf
15980 6f 72 6d 2e 0a 48 65 6e 63 65 2c 20 75 6e 6c 69  orm..Hence, unli
15990 6b 65 20 74 68 65 20 64 61 74 61 62 61 73 65 20  ke the database 
159a0 61 6e 64 20 57 41 4c 20 66 69 6c 65 20 66 6f 72  and WAL file for
159b0 6d 61 74 73 20 77 68 69 63 68 20 73 74 6f 72 65  mats which store
159c0 20 61 6c 6c 20 76 61 6c 75 65 73 0a 61 73 20 62   all values.as b
159d0 69 67 20 65 6e 64 69 61 6e 2c 20 74 68 65 20 77  ig endian, the w
159e0 61 6c 2d 69 6e 64 65 78 20 73 74 6f 72 65 73 20  al-index stores 
159f0 6d 75 6c 74 69 2d 62 79 74 65 20 76 61 6c 75 65  multi-byte value
15a00 73 20 69 6e 20 74 68 65 20 6e 61 74 69 76 65 0a  s in the native.
15a10 62 79 74 65 20 6f 72 64 65 72 20 6f 66 20 74 68  byte order of th
15a20 65 20 68 6f 73 74 20 63 6f 6d 70 75 74 65 72 2e  e host computer.
15a30 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 69 73 20 64 6f  </p>..<p>This do
15a40 63 75 6d 65 6e 74 20 69 73 20 63 6f 6e 63 65 72  cument is concer
15a50 6e 65 64 20 77 69 74 68 20 74 68 65 20 70 65 72  ned with the per
15a60 73 69 73 74 65 6e 74 20 73 74 61 74 65 20 6f 66  sistent state of
15a70 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 66 69   the database.fi
15a80 6c 65 2c 20 61 6e 64 20 73 69 6e 63 65 20 74 68  le, and since th
15a90 65 20 77 61 6c 2d 69 6e 64 65 78 20 69 73 20 61  e wal-index is a
15aa0 20 74 72 61 6e 73 69 65 6e 74 20 73 74 72 75 63   transient struc
15ab0 74 75 72 65 2c 20 6e 6f 20 66 75 72 74 68 65 72  ture, no further
15ac0 20 0a 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62   .information ab
15ad0 6f 75 74 20 74 68 65 20 66 6f 72 6d 61 74 20 6f  out the format o
15ae0 66 20 74 68 65 20 77 61 6c 2d 69 6e 64 65 78 20  f the wal-index 
15af0 77 69 6c 6c 20 62 65 20 70 72 6f 76 69 64 65 64  will be provided
15b00 20 68 65 72 65 2e 0a 43 6f 6d 70 6c 65 74 65 20   here..Complete 
15b10 64 65 74 61 69 6c 73 20 6f 6e 20 74 68 65 20 66  details on the f
15b20 6f 72 6d 61 74 20 6f 66 20 74 68 65 20 77 61 6c  ormat of the wal
15b30 2d 69 6e 64 65 78 20 61 72 65 20 63 6f 6e 74 61  -index are conta
15b40 69 6e 65 64 20 77 69 74 68 69 6e 0a 63 6f 6d 6d  ined within.comm
15b50 65 6e 74 73 20 69 6e 20 53 51 4c 69 74 65 20 73  ents in SQLite s
15b60 6f 75 72 63 65 20 63 6f 64 65 2e 3c 2f 70 3e 0a  ource code.</p>.