Documentation Source Text

Hex Artifact Content
Login

Artifact cc45c0b65f571361d9e90b4745b9eb59f09341bb:


0000: 3c 74 69 74 6c 65 3e 46 69 6c 65 20 46 6f 72 6d  <title>File Form
0010: 61 74 20 46 6f 72 20 53 51 4c 69 74 65 20 44 61  at For SQLite Da
0020: 74 61 62 61 73 65 73 3c 2f 74 69 74 6c 65 3e 0a  tabases</title>.
0030: 3c 74 63 6c 3e 68 64 5f 6b 65 79 77 6f 72 64 73  <tcl>hd_keywords
0040: 20 7b 66 69 6c 65 20 66 6f 72 6d 61 74 7d 20 7b   {file format} {
0050: 73 65 63 6f 6e 64 20 65 64 69 74 69 6f 6e 20 66  second edition f
0060: 69 6c 65 20 66 6f 72 6d 61 74 20 64 6f 63 75 6d  ile format docum
0070: 65 6e 74 7d 3c 2f 74 63 6c 3e 0a 0a 3c 74 61 62  ent}</tcl>..<tab
0080: 6c 65 5f 6f 66 5f 63 6f 6e 74 65 6e 74 73 3e 0a  le_of_contents>.
0090: 0a 3c 70 3e 54 68 69 73 20 64 6f 63 75 6d 65 6e  .<p>This documen
00a0: 74 20 64 65 73 63 72 69 62 65 73 20 61 6e 64 20  t describes and 
00b0: 64 65 66 69 6e 65 73 20 74 68 65 20 6f 6e 2d 64  defines the on-d
00c0: 69 73 6b 20 64 61 74 61 62 61 73 65 20 66 69 6c  isk database fil
00d0: 65 0a 66 6f 72 6d 61 74 20 75 73 65 64 20 62 79  e.format used by
00e0: 20 53 51 4c 69 74 65 2e 3c 2f 70 3e 0a 0a 3c 68   SQLite.</p>..<h
00f0: 31 3e 54 68 65 20 44 61 74 61 62 61 73 65 20 46  1>The Database F
0100: 69 6c 65 3c 2f 68 31 3e 0a 0a 3c 70 3e 54 68 65  ile</h1>..<p>The
0110: 20 63 6f 6d 70 6c 65 74 65 20 73 74 61 74 65 20   complete state 
0120: 6f 66 20 61 6e 20 53 51 4c 69 74 65 20 64 61 74  of an SQLite dat
0130: 61 62 61 73 65 20 69 73 20 75 73 75 61 6c 6c 79  abase is usually
0140: 0a 63 6f 6e 74 61 69 6e 65 64 20 61 20 73 69 6e  .contained a sin
0150: 67 6c 65 20 66 69 6c 65 20 6f 6e 20 64 69 73 6b  gle file on disk
0160: 20 63 61 6c 6c 65 64 20 74 68 65 20 22 6d 61 69   called the "mai
0170: 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 22  n database file"
0180: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 44 75 72 69 6e 67  .</p>..<p>During
0190: 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20   a transaction, 
01a0: 53 51 4c 69 74 65 20 73 74 6f 72 65 73 20 61 64  SQLite stores ad
01b0: 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
01c0: 74 69 6f 6e 20 0a 69 6e 20 61 20 73 65 63 6f 6e  tion .in a secon
01d0: 64 20 66 69 6c 65 20 63 61 6c 6c 65 64 20 74 68  d file called th
01e0: 65 20 22 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72  e "rollback jour
01f0: 6e 61 6c 22 2c 20 6f 72 20 69 66 20 53 51 4c 69  nal", or if SQLi
0200: 74 65 20 69 73 20 69 6e 0a 5b 57 41 4c 20 6d 6f  te is in.[WAL mo
0210: 64 65 5d 2c 20 61 20 77 72 69 74 65 2d 61 68 65  de], a write-ahe
0220: 61 64 20 6c 6f 67 20 66 69 6c 65 2e 0a 49 66 20  ad log file..If 
0230: 74 68 65 20 61 70 70 6c 69 63 61 74 69 6f 6e 20  the application 
0240: 6f 72 0a 68 6f 73 74 20 63 6f 6d 70 75 74 65 72  or.host computer
0250: 20 63 72 61 73 68 65 73 20 62 65 66 6f 72 65 20   crashes before 
0260: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
0270: 63 6f 6d 70 6c 65 74 65 73 2c 20 74 68 65 6e 20  completes, then 
0280: 74 68 65 20 72 6f 6c 6c 62 61 63 6b 0a 6a 6f 75  the rollback.jou
0290: 72 6e 61 6c 20 6f 72 20 77 72 69 74 65 2d 61 68  rnal or write-ah
02a0: 65 61 64 20 6c 6f 67 20 63 6f 6e 74 61 69 6e 73  ead log contains
02b0: 20 63 72 69 74 69 63 61 6c 20 73 74 61 74 65 20   critical state 
02c0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64  information need
02d0: 65 64 20 0a 74 6f 20 72 65 73 74 6f 72 65 20 74  ed .to restore t
02e0: 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
02f0: 20 66 69 6c 65 20 74 6f 20 61 20 63 6f 6e 73 69   file to a consi
0300: 73 74 65 6e 74 20 73 74 61 74 65 2e 20 20 57 68  stent state.  Wh
0310: 65 6e 20 61 20 72 6f 6c 6c 62 61 63 6b 20 0a 6a  en a rollback .j
0320: 6f 75 72 6e 61 6c 20 6f 72 20 77 72 69 74 65 2d  ournal or write-
0330: 61 68 65 61 64 20 6c 6f 67 20 63 6f 6e 74 61 69  ahead log contai
0340: 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e  ns information n
0350: 65 63 65 73 73 61 72 79 20 66 6f 72 20 72 65 63  ecessary for rec
0360: 6f 76 65 72 69 6e 67 20 0a 74 68 65 20 73 74 61  overing .the sta
0370: 74 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  te of the databa
0380: 73 65 2c 20 74 68 65 79 20 61 72 65 20 63 61 6c  se, they are cal
0390: 6c 65 64 20 61 20 22 68 6f 74 20 6a 6f 75 72 6e  led a "hot journ
03a0: 61 6c 22 20 6f 72 20 22 68 6f 74 20 57 41 4c 20  al" or "hot WAL 
03b0: 66 69 6c 65 22 2e 0a 48 6f 74 20 6a 6f 75 72 6e  file"..Hot journ
03c0: 61 6c 73 20 61 6e 64 20 57 41 4c 20 66 69 6c 65  als and WAL file
03d0: 73 20 61 72 65 20 6f 6e 6c 79 20 61 20 66 61 63  s are only a fac
03e0: 74 6f 72 20 64 75 72 69 6e 67 20 65 72 72 6f 72  tor during error
03f0: 20 72 65 63 6f 76 65 72 79 0a 73 63 65 6e 61 72   recovery.scenar
0400: 69 6f 73 20 61 6e 64 20 73 6f 20 61 72 65 20 75  ios and so are u
0410: 6e 63 6f 6d 6d 6f 6e 2c 20 62 75 74 20 74 68 65  ncommon, but the
0420: 79 20 61 72 65 20 70 61 72 74 20 6f 66 20 74 68  y are part of th
0430: 65 20 73 74 61 74 65 20 6f 66 20 61 6e 20 53 51  e state of an SQ
0440: 4c 69 74 65 0a 64 61 74 61 62 61 73 65 20 61 6e  Lite.database an
0450: 64 20 73 6f 20 63 61 6e 6e 6f 74 20 62 65 20 69  d so cannot be i
0460: 67 6e 6f 72 65 64 2e 20 20 54 68 69 73 20 64 6f  gnored.  This do
0470: 63 75 6d 65 6e 74 20 64 65 66 69 6e 65 73 20 74  cument defines t
0480: 68 65 20 66 6f 72 6d 61 74 0a 6f 66 20 61 20 72  he format.of a r
0490: 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20  ollback journal 
04a0: 61 6e 64 20 74 68 65 20 77 72 69 74 65 2d 61 68  and the write-ah
04b0: 65 61 64 20 6c 6f 67 20 66 69 6c 65 2c 20 62 75  ead log file, bu
04c0: 74 20 74 68 65 20 66 6f 63 75 73 20 69 73 0a 6f  t the focus is.o
04d0: 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  n the main datab
04e0: 61 73 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c  ase file.</p>..<
04f0: 68 32 3e 50 61 67 65 73 3c 2f 68 32 3e 0a 0a 3c  h2>Pages</h2>..<
0500: 70 3e 54 68 65 20 6d 61 69 6e 20 64 61 74 61 62  p>The main datab
0510: 61 73 65 20 66 69 6c 65 20 63 6f 6e 73 69 73 74  ase file consist
0520: 73 20 6f 66 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  s of one or more
0530: 20 70 61 67 65 73 2e 20 20 5e 54 68 65 20 73 69   pages.  ^The si
0540: 7a 65 20 6f 66 20 61 0a 70 61 67 65 20 69 73 20  ze of a.page is 
0550: 61 20 70 6f 77 65 72 20 6f 66 20 74 77 6f 20 62  a power of two b
0560: 65 74 77 65 65 6e 20 35 31 32 20 61 6e 64 20 36  etween 512 and 6
0570: 35 35 33 36 20 69 6e 63 6c 75 73 69 76 65 2e 20  5536 inclusive. 
0580: 20 41 6c 6c 20 70 61 67 65 73 20 77 69 74 68 69   All pages withi
0590: 6e 0a 74 68 65 20 73 61 6d 65 20 64 61 74 61 62  n.the same datab
05a0: 61 73 65 20 61 72 65 20 74 68 65 20 73 61 6d 65  ase are the same
05b0: 20 73 69 7a 65 2e 20 20 5e 54 68 65 20 70 61 67   size.  ^The pag
05c0: 65 20 73 69 7a 65 20 66 6f 72 20 61 20 64 61 74  e size for a dat
05d0: 61 62 61 73 65 20 66 69 6c 65 0a 69 73 20 64 65  abase file.is de
05e0: 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20  termined by the 
05f0: 32 2d 62 79 74 65 20 69 6e 74 65 67 65 72 20 6c  2-byte integer l
0600: 6f 63 61 74 65 64 20 61 74 20 61 6e 20 6f 66 66  ocated at an off
0610: 73 65 74 20 6f 66 0a 31 36 20 62 79 74 65 73 20  set of.16 bytes 
0620: 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69  from the beginni
0630: 6e 67 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ng of the databa
0640: 73 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70  se file.</p>..<p
0650: 3e 50 61 67 65 73 20 61 72 65 20 6e 75 6d 62 65  >Pages are numbe
0660: 72 65 64 20 62 65 67 69 6e 6e 69 6e 67 20 77 69  red beginning wi
0670: 74 68 20 31 2e 20 20 54 68 65 20 6d 61 78 69 6d  th 1.  The maxim
0680: 75 6d 20 70 61 67 65 20 6e 75 6d 62 65 72 20 69  um page number i
0690: 73 0a 32 31 34 37 34 38 33 36 34 36 20 28 32 3c  s.2147483646 (2<
06a0: 73 75 70 3e 3c 73 6d 61 6c 6c 3e 33 31 3c 2f 73  sup><small>31</s
06b0: 6d 61 6c 6c 3e 3c 2f 73 75 70 3e 20 2d 20 32 29  mall></sup> - 2)
06c0: 2e 20 20 54 68 65 20 6d 69 6e 69 6d 75 6d 20 73  .  The minimum s
06d0: 69 7a 65 0a 53 51 4c 69 74 65 20 64 61 74 61 62  ize.SQLite datab
06e0: 61 73 65 20 69 73 20 61 20 73 69 6e 67 6c 65 20  ase is a single 
06f0: 35 31 32 2d 62 79 74 65 20 70 61 67 65 2e 0a 54  512-byte page..T
0700: 68 65 20 6d 61 78 69 6d 75 6d 20 73 69 7a 65 20  he maximum size 
0710: 64 61 74 61 62 61 73 65 20 77 6f 75 6c 64 20 62  database would b
0720: 65 20 32 31 34 37 34 38 33 36 34 36 20 70 61 67  e 2147483646 pag
0730: 65 73 20 61 74 20 36 35 35 33 36 20 62 79 74 65  es at 65536 byte
0740: 73 20 70 65 72 0a 70 61 67 65 20 6f 72 20 31 34  s per.page or 14
0750: 30 2c 37 33 37 2c 34 38 38 2c 32 32 34 2c 32 35  0,737,488,224,25
0760: 36 20 62 79 74 65 73 20 28 61 62 6f 75 74 20 31  6 bytes (about 1
0770: 34 30 20 74 65 72 61 62 79 74 65 73 29 2e 20 20  40 terabytes).  
0780: 55 73 75 61 6c 6c 79 20 53 51 4c 69 74 65 20 77  Usually SQLite w
0790: 69 6c 6c 0a 68 69 74 20 74 68 65 20 6d 61 78 69  ill.hit the maxi
07a0: 6d 75 6d 20 66 69 6c 65 20 73 69 7a 65 20 6c 69  mum file size li
07b0: 6d 69 74 20 6f 66 20 74 68 65 20 75 6e 64 65 72  mit of the under
07c0: 6c 79 69 6e 67 20 66 69 6c 65 73 79 73 74 65 6d  lying filesystem
07d0: 20 6f 72 20 64 69 73 6b 0a 68 61 72 64 77 61 72   or disk.hardwar
07e0: 65 20 73 69 7a 65 20 6c 69 6d 69 74 20 6c 6f 6e  e size limit 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 76 65  g with SQLite ve
1de0: 72 73 69 6f 6e 20 33 2e 37 2e 31 2c 20 61 20 70  rsion 3.7.1, a p
1df0: 61 67 65 0a 73 69 7a 65 20 6f 66 20 36 35 35 33  age.size of 6553
1e00: 36 20 62 79 74 65 73 20 69 73 20 73 75 70 70 6f  6 bytes is suppo
1e10: 72 74 65 64 2e 20 20 54 68 65 20 76 61 6c 75 65  rted.  The value
1e20: 20 36 35 35 33 36 20 77 69 6c 6c 20 6e 6f 74 20   65536 will not 
1e30: 66 69 74 20 69 6e 20 61 0a 74 77 6f 2d 62 79 74  fit in a.two-byt
1e40: 65 20 69 6e 74 65 67 65 72 2c 20 73 6f 20 74 6f  e integer, so to
1e50: 20 73 70 65 63 69 66 79 20 61 20 36 35 35 33 36   specify a 65536
1e60: 2d 62 79 74 65 20 70 61 67 65 20 73 69 7a 65 2c  -byte page size,
1e70: 20 74 68 65 20 76 61 6c 75 65 0a 61 74 20 6f 66   the value.at of
1e80: 66 73 65 74 20 31 36 20 69 73 20 30 78 30 30 20  fset 16 is 0x00 
1e90: 30 78 30 31 2e 0a 54 68 69 73 20 76 61 6c 75 65  0x01..This value
1ea0: 20 63 61 6e 20 62 65 20 69 6e 74 65 72 70 72 65   can be interpre
1eb0: 74 65 64 20 61 73 20 61 20 62 69 67 2d 65 6e 64  ted as a big-end
1ec0: 69 61 6e 0a 31 20 61 6e 64 20 74 68 6f 75 67 68  ian.1 and though
1ed0: 74 20 6f 66 20 69 73 20 61 73 20 61 20 6d 61 67  t of is as a mag
1ee0: 69 63 20 6e 75 6d 62 65 72 20 74 6f 20 72 65 70  ic number to rep
1ef0: 72 65 73 65 6e 74 20 74 68 65 20 36 35 35 33 36  resent the 65536
1f00: 20 70 61 67 65 20 73 69 7a 65 2e 0a 4f 72 20 6f   page size..Or o
1f10: 6e 65 20 63 61 6e 20 76 69 65 77 20 74 68 65 20  ne can view the 
1f20: 74 77 6f 2d 62 79 74 65 20 66 69 65 6c 64 20 61  two-byte field a
1f30: 73 20 61 20 6c 69 74 74 6c 65 20 65 6e 64 69 61  s a little endia
1f40: 6e 20 6e 75 6d 62 65 72 20 61 6e 64 20 73 61 79  n number and say
1f50: 0a 74 68 61 74 20 69 74 20 72 65 70 72 65 73 65  .that it represe
1f60: 6e 74 73 20 74 68 65 20 70 61 67 65 20 73 69 7a  nts the page siz
1f70: 65 20 64 69 76 69 64 65 64 20 62 79 20 32 35 36  e divided by 256
1f80: 2e 20 20 54 68 65 73 65 20 74 77 6f 20 0a 69 6e  .  These two .in
1f90: 74 65 72 70 72 65 74 61 74 69 6f 6e 73 20 6f 66  terpretations of
1fa0: 20 74 68 65 20 70 61 67 65 2d 73 69 7a 65 20 66   the page-size f
1fb0: 69 65 6c 64 20 61 72 65 20 65 71 75 69 76 61 6c  ield are equival
1fc0: 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 46 69  ent.</p>..<h3>Fi
1fd0: 6c 65 20 66 6f 72 6d 61 74 20 76 65 72 73 69 6f  le format versio
1fe0: 6e 20 6e 75 6d 62 65 72 73 3c 2f 68 33 3e 0a 0a  n numbers</h3>..
1ff0: 3c 70 3e 54 68 65 20 66 69 6c 65 20 66 6f 72 6d  <p>The file form
2000: 61 74 20 77 72 69 74 65 20 76 65 72 73 69 6f 6e  at write version
2010: 20 61 6e 64 20 66 69 6c 65 20 66 6f 72 6d 61 74   and file format
2020: 20 72 65 61 64 20 76 65 72 73 69 6f 6e 20 61 74   read version at
2030: 20 6f 66 66 73 65 74 73 0a 31 38 20 61 6e 64 20   offsets.18 and 
2040: 31 39 20 61 72 65 20 69 6e 74 65 6e 64 65 64 20  19 are intended 
2050: 74 6f 20 61 6c 6c 6f 77 20 66 6f 72 20 65 6e 68  to allow for enh
2060: 61 6e 63 65 6d 65 6e 74 73 20 6f 66 20 74 68 65  ancements of the
2070: 20 66 69 6c 65 20 66 6f 72 6d 61 74 0a 69 6e 20   file format.in 
2080: 66 75 74 75 72 65 20 76 65 72 73 69 6f 6e 73 20  future versions 
2090: 6f 66 20 53 51 4c 69 74 65 2e 20 20 49 6e 20 63  of SQLite.  In c
20a0: 75 72 72 65 6e 74 20 76 65 72 73 69 6f 6e 73 20  urrent versions 
20b0: 6f 66 20 53 51 4c 69 74 65 2c 20 62 6f 74 68 20  of SQLite, both 
20c0: 6f 66 0a 74 68 65 73 65 20 76 61 6c 75 65 73 20  of.these values 
20d0: 61 72 65 20 31 20 66 6f 72 20 72 6f 6c 6c 62 61  are 1 for rollba
20e0: 63 6b 20 6a 6f 75 72 6e 61 6c 6c 69 6e 67 20 6d  ck journalling m
20f0: 6f 64 65 73 20 61 6e 64 20 32 20 66 6f 72 20 5b  odes and 2 for [
2100: 57 41 4c 5d 0a 6a 6f 75 72 6e 61 6c 6c 69 6e 67  WAL].journalling
2110: 20 6d 6f 64 65 2e 20 20 49 66 20 61 20 76 65 72   mode.  If a ver
2120: 73 69 6f 6e 20 6f 66 20 53 51 4c 69 74 65 20 63  sion of SQLite c
2130: 6f 64 65 64 20 74 6f 20 74 68 65 20 63 75 72 72  oded to the curr
2140: 65 6e 74 0a 66 69 6c 65 20 66 6f 72 6d 61 74 20  ent.file format 
2150: 73 70 65 63 69 66 69 63 61 74 69 6f 6e 20 65 6e  specification en
2160: 63 6f 75 6e 74 65 72 73 20 61 20 64 61 74 61 62  counters a datab
2170: 61 73 65 20 66 69 6c 65 20 77 68 65 72 65 20 74  ase file where t
2180: 68 65 20 72 65 61 64 0a 76 65 72 73 69 6f 6e 20  he read.version 
2190: 69 73 20 31 20 6f 72 20 32 20 62 75 74 20 74 68  is 1 or 2 but th
21a0: 65 20 77 72 69 74 65 20 76 65 72 73 69 6f 6e 20  e write version 
21b0: 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  is greater than 
21c0: 32 2c 20 74 68 65 6e 20 74 68 65 20 64 61 74 61  2, then the data
21d0: 62 61 73 65 0a 66 69 6c 65 20 6d 75 73 74 20 62  base.file must b
21e0: 65 20 74 72 65 61 74 65 64 20 61 73 20 72 65 61  e treated as rea
21f0: 64 2d 6f 6e 6c 79 2e 20 20 49 66 20 61 20 64 61  d-only.  If a da
2200: 74 61 62 61 73 65 20 66 69 6c 65 20 77 69 74 68  tabase file with
2210: 20 61 20 72 65 61 64 20 76 65 72 73 69 6f 6e 0a   a read version.
2220: 67 72 65 61 74 65 72 20 74 68 61 6e 20 32 20 69  greater than 2 i
2230: 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 2c 20 74  s encountered, t
2240: 68 65 6e 20 74 68 61 74 20 64 61 74 61 62 61 73  hen that databas
2250: 65 20 63 61 6e 6e 6f 74 20 62 65 20 72 65 61 64  e cannot be read
2260: 20 6f 72 20 77 72 69 74 74 65 6e 2e 3c 2f 70 3e   or written.</p>
2270: 0a 0a 3c 68 33 3e 52 65 73 65 72 76 65 64 20 62  ..<h3>Reserved b
2280: 79 74 65 73 20 70 65 72 20 70 61 67 65 3c 2f 68  ytes per page</h
2290: 33 3e 0a 0a 3c 70 3e 53 51 4c 69 74 65 20 68 61  3>..<p>SQLite ha
22a0: 73 20 74 68 65 20 61 62 69 6c 69 74 79 20 74 6f  s the ability to
22b0: 20 73 65 74 20 61 73 69 64 65 20 61 20 73 6d 61   set aside a sma
22c0: 6c 6c 20 6e 75 6d 62 65 72 20 6f 66 20 65 78 74  ll number of ext
22d0: 72 61 20 62 79 74 65 73 20 61 74 0a 74 68 65 20  ra bytes at.the 
22e0: 65 6e 64 20 6f 66 20 65 76 65 72 79 20 70 61 67  end of every pag
22f0: 65 20 66 6f 72 20 75 73 65 20 62 79 20 65 78 74  e for use by ext
2300: 65 6e 73 69 6f 6e 73 2e 20 20 54 68 65 73 65 20  ensions.  These 
2310: 65 78 74 72 61 20 62 79 74 65 73 20 61 72 65 0a  extra bytes are.
2320: 75 73 65 64 2c 20 66 6f 72 20 65 78 61 6d 70 6c  used, for exampl
2330: 65 2c 20 62 79 20 74 68 65 20 53 51 4c 69 74 65  e, by the SQLite
2340: 20 45 6e 63 72 79 70 74 69 6f 6e 20 45 78 74 65   Encryption Exte
2350: 6e 73 69 6f 6e 20 74 6f 20 73 74 6f 72 65 20 61  nsion to store a
2360: 20 6e 6f 6e 63 65 0a 61 6e 64 2f 6f 72 20 63 72   nonce.and/or cr
2370: 79 70 74 6f 67 72 61 70 68 69 63 20 63 68 65 63  yptographic chec
2380: 6b 73 75 6d 20 61 73 73 6f 63 69 61 74 65 64 20  ksum associated 
2390: 77 69 74 68 20 65 61 63 68 20 70 61 67 65 2e 20  with each page. 
23a0: 20 5e 54 68 65 20 0a 22 72 65 73 65 72 76 65 64   ^The ."reserved
23b0: 20 73 70 61 63 65 22 20 73 69 7a 65 20 69 6e 20   space" size in 
23c0: 74 68 65 20 31 2d 62 79 74 65 20 69 6e 74 65 67  the 1-byte integ
23d0: 65 72 20 61 74 20 6f 66 66 73 65 74 20 32 30 20  er at offset 20 
23e0: 69 73 20 74 68 65 20 6e 75 6d 62 65 72 0a 6f 66  is the number.of
23f0: 20 62 79 74 65 73 20 6f 66 20 73 70 61 63 65 20   bytes of space 
2400: 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 65 61  at the end of ea
2410: 63 68 20 70 61 67 65 20 74 6f 20 72 65 73 65 72  ch page to reser
2420: 76 65 20 66 6f 72 20 65 78 74 65 6e 73 69 6f 6e  ve for extension
2430: 73 2e 0a 54 68 69 73 20 76 61 6c 75 65 20 69 73  s..This value is
2440: 20 75 73 75 61 6c 6c 79 20 30 2e 20 20 54 68 65   usually 0.  The
2450: 20 76 61 6c 75 65 20 63 61 6e 20 62 65 20 6f 64   value can be od
2460: 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f  d.</p>..<tcl>hd_
2470: 66 72 61 67 6d 65 6e 74 20 75 73 61 62 6c 65 5f  fragment usable_
2480: 73 69 7a 65 20 7b 75 73 61 62 6c 65 20 73 69 7a  size {usable siz
2490: 65 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 54 68 65 20  e}</tcl>.<p>The 
24a0: 22 75 73 61 62 6c 65 20 73 69 7a 65 22 20 6f 66  "usable size" of
24b0: 20 61 20 64 61 74 61 62 61 73 65 20 70 61 67 65   a database page
24c0: 20 69 73 20 74 68 65 20 70 61 67 65 20 73 69 7a   is the page siz
24d0: 65 20 73 70 65 63 69 66 79 20 62 79 20 74 68 65  e specify by the
24e0: 0a 32 2d 62 79 74 65 20 69 6e 74 65 67 65 72 20  .2-byte integer 
24f0: 61 74 20 6f 66 66 73 65 74 20 31 36 20 69 6e 20  at offset 16 in 
2500: 74 68 65 20 68 65 61 64 65 72 20 6c 65 73 73 20  the header less 
2510: 74 68 65 20 22 72 65 73 65 72 76 65 64 22 20 73  the "reserved" s
2520: 70 61 63 65 20 73 69 7a 65 0a 72 65 63 6f 72 64  pace size.record
2530: 65 64 20 69 6e 20 74 68 65 20 31 2d 62 79 74 65  ed in the 1-byte
2540: 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73   integer at offs
2550: 65 74 20 32 30 20 69 6e 20 74 68 65 20 68 65 61  et 20 in the hea
2560: 64 65 72 2e 20 20 54 68 65 20 75 73 61 62 6c 65  der.  The usable
2570: 0a 73 69 7a 65 20 6f 66 20 61 20 70 61 67 65 20  .size of a page 
2580: 6d 69 67 68 74 20 62 65 20 61 6e 20 6f 64 64 20  might be an odd 
2590: 6e 75 6d 62 65 72 2e 20 20 5e 28 48 6f 77 65 76  number.  ^(Howev
25a0: 65 72 2c 20 74 68 65 20 75 73 61 62 6c 65 20 73  er, the usable s
25b0: 69 7a 65 20 69 73 20 6e 6f 74 0a 61 6c 6c 6f 77  ize is not.allow
25c0: 65 64 20 74 6f 20 62 65 20 6c 65 73 73 20 74 68  ed to be less th
25d0: 61 6e 20 34 38 30 2e 20 20 49 6e 20 6f 74 68 65  an 480.  In othe
25e0: 72 20 77 6f 72 64 73 2c 20 69 66 20 74 68 65 20  r words, if the 
25f0: 70 61 67 65 20 73 69 7a 65 20 69 73 20 35 31 32  page size is 512
2600: 2c 0a 74 68 65 6e 20 74 68 65 20 72 65 73 65 72  ,.then the reser
2610: 76 65 64 20 73 70 61 63 65 20 73 69 7a 65 20 63  ved space size c
2620: 61 6e 6e 6f 74 20 65 78 63 65 65 64 20 33 32 2e  annot exceed 32.
2630: 29 5e 3c 2f 70 3e 0a 0a 3c 68 33 3e 50 61 79 6c  )^</p>..<h3>Payl
2640: 6f 61 64 20 66 72 61 63 74 69 6f 6e 73 3c 2f 68  oad fractions</h
2650: 33 3e 0a 0a 3c 70 3e 5e 54 68 65 20 6d 61 78 69  3>..<p>^The maxi
2660: 6d 75 6d 20 61 6e 64 20 6d 69 6e 69 6d 75 6d 20  mum and minimum 
2670: 65 6d 62 65 64 64 65 64 20 70 61 79 6c 6f 61 64  embedded payload
2680: 20 66 72 61 63 74 69 6f 6e 73 20 61 6e 64 20 74   fractions and t
2690: 68 65 20 6c 65 61 66 0a 70 61 79 6c 6f 61 64 20  he leaf.payload 
26a0: 66 72 61 63 74 69 6f 6e 20 76 61 6c 75 65 73 20  fraction values 
26b0: 6d 75 73 74 20 62 65 20 36 34 2c 20 33 32 2c 20  must be 64, 32, 
26c0: 61 6e 64 20 33 32 2e 20 20 54 68 65 73 65 20 76  and 32.  These v
26d0: 61 6c 75 65 73 20 77 65 72 65 0a 6f 72 69 67 69  alues were.origi
26e0: 6e 61 6c 6c 79 20 69 6e 74 65 6e 64 65 64 20 74  nally intended t
26f0: 6f 20 62 65 20 74 75 6e 61 62 6c 65 20 70 61 72  o be tunable par
2700: 61 6d 65 74 65 72 73 20 74 68 61 74 20 63 6f 75  ameters that cou
2710: 6c 64 20 62 65 20 75 73 65 64 20 74 6f 0a 6d 6f  ld be used to.mo
2720: 64 69 66 79 20 74 68 65 20 73 74 6f 72 61 67 65  dify the storage
2730: 20 66 6f 72 6d 61 74 20 6f 66 20 74 68 65 20 62   format of the b
2740: 2d 74 72 65 65 20 61 6c 67 6f 72 69 74 68 6d 2e  -tree algorithm.
2750: 20 20 48 6f 77 65 76 65 72 2c 20 74 68 61 74 0a    However, that.
2760: 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73  functionality is
2770: 20 6e 6f 74 20 73 75 70 70 6f 72 74 65 64 20 61   not supported a
2780: 6e 64 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  nd there are no 
2790: 63 75 72 72 65 6e 74 20 70 6c 61 6e 73 20 74 6f  current plans to
27a0: 20 61 64 64 0a 73 75 70 70 6f 72 74 20 69 6e 20   add.support in 
27b0: 74 68 65 20 66 75 74 75 72 65 2e 20 20 48 65 6e  the future.  Hen
27c0: 63 65 2c 20 74 68 65 73 65 20 74 68 72 65 65 20  ce, these three 
27d0: 62 79 74 65 73 20 61 72 65 20 66 69 78 65 64 20  bytes are fixed 
27e0: 61 74 20 74 68 65 0a 76 61 6c 75 65 73 20 73 70  at the.values sp
27f0: 65 63 69 66 69 65 64 2e 3c 2f 70 3e 0a 0a 3c 68  ecified.</p>..<h
2800: 33 3e 46 69 6c 65 20 63 68 61 6e 67 65 20 63 6f  3>File change co
2810: 75 6e 74 65 72 3c 2f 68 33 3e 0a 0a 3c 74 63 6c  unter</h3>..<tcl
2820: 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 63 68 6e  >hd_fragment chn
2830: 67 63 74 72 20 7b 63 68 61 6e 67 65 20 63 6f 75  gctr {change cou
2840: 6e 74 65 72 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e  nter}</tcl>.<p>^
2850: 54 68 65 20 66 69 6c 65 20 63 68 61 6e 67 65 20  The file change 
2860: 63 6f 75 6e 74 65 72 20 69 73 20 61 20 34 2d 62  counter is a 4-b
2870: 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69  yte big-endian i
2880: 6e 74 65 67 65 72 20 61 74 0a 6f 66 66 73 65 74  nteger at.offset
2890: 20 32 34 20 74 68 61 74 20 69 73 20 69 6e 63 72   24 that is incr
28a0: 65 6d 65 6e 74 65 64 20 77 68 65 6e 65 76 65 72  emented whenever
28b0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
28c0: 6c 65 20 69 73 20 75 6e 6c 6f 63 6b 65 64 0a 61  le is unlocked.a
28d0: 66 74 65 72 20 68 61 76 69 6e 67 20 62 65 65 6e  fter having been
28e0: 20 6d 6f 64 69 66 69 65 64 2e 0a 57 68 65 6e 20   modified..When 
28f0: 74 77 6f 20 6f 72 20 6d 6f 72 65 20 70 72 6f 63  two or more proc
2900: 65 73 73 65 73 20 61 72 65 20 72 65 61 64 69 6e  esses are readin
2910: 67 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62  g the same datab
2920: 61 73 65 20 66 69 6c 65 2c 20 65 61 63 68 20 0a  ase file, each .
2930: 70 72 6f 63 65 73 73 20 63 61 6e 20 64 65 74 65  process can dete
2940: 63 74 20 64 61 74 61 62 61 73 65 20 63 68 61 6e  ct database chan
2950: 67 65 73 20 66 72 6f 6d 20 6f 74 68 65 72 20 70  ges from other p
2960: 72 6f 63 65 73 73 65 73 20 62 79 20 6d 6f 6e 69  rocesses by moni
2970: 74 6f 72 69 6e 67 20 0a 74 68 65 20 63 68 61 6e  toring .the chan
2980: 67 65 20 63 6f 75 6e 74 65 72 2e 0a 41 20 70 72  ge counter..A pr
2990: 6f 63 65 73 73 20 77 69 6c 6c 20 6e 6f 72 6d 61  ocess will norma
29a0: 6c 6c 79 20 77 61 6e 74 20 74 6f 20 66 6c 75 73  lly want to flus
29b0: 68 20 69 74 73 20 64 61 74 61 62 61 73 65 20 70  h its database p
29c0: 61 67 65 20 63 61 63 68 65 20 77 68 65 6e 0a 61  age cache when.a
29d0: 6e 6f 74 68 65 72 20 70 72 6f 63 65 73 73 20 6d  nother process m
29e0: 6f 64 69 66 69 65 64 20 74 68 65 20 64 61 74 61  odified the data
29f0: 62 61 73 65 2c 20 73 69 6e 63 65 20 74 68 65 20  base, since the 
2a00: 63 61 63 68 65 20 68 61 73 20 62 65 63 6f 6d 65  cache has become
2a10: 20 73 74 61 6c 65 2e 0a 54 68 65 20 66 69 6c 65   stale..The file
2a20: 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20   change counter 
2a30: 66 61 63 69 6c 69 74 61 74 65 73 20 74 68 69 73  facilitates this
2a40: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 6e 20 57 41 4c  .</p>..<p>In WAL
2a50: 20 6d 6f 64 65 2c 20 63 68 61 6e 67 65 73 20 74   mode, changes t
2a60: 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61  o the database a
2a70: 72 65 20 64 65 74 65 63 74 65 64 20 75 73 69 6e  re detected usin
2a80: 67 20 74 68 65 20 77 61 6c 2d 69 6e 64 65 78 0a  g the wal-index.
2a90: 61 6e 64 20 73 6f 20 74 68 65 20 63 68 61 6e 67  and so the chang
2aa0: 65 20 63 6f 75 6e 74 65 72 20 69 73 20 6e 6f 74  e counter is not
2ab0: 20 6e 65 65 64 65 64 2e 20 20 48 65 6e 63 65 2c   needed.  Hence,
2ac0: 20 74 68 65 20 63 68 61 6e 67 65 20 63 6f 75 6e   the change coun
2ad0: 74 65 72 20 6d 69 67 68 74 0a 6e 6f 74 20 62 65  ter might.not be
2ae0: 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 6f 6e 20   incremented on 
2af0: 65 61 63 68 20 74 72 61 6e 73 61 63 74 69 6f 6e  each transaction
2b00: 20 69 6e 20 57 41 4c 20 6d 6f 64 65 2e 3c 2f 70   in WAL mode.</p
2b10: 3e 0a 0a 3c 68 33 3e 49 6e 2d 68 65 61 64 65 72  >..<h3>In-header
2b20: 20 64 61 74 61 62 61 73 65 20 73 69 7a 65 3c 2f   database size</
2b30: 68 33 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  h3>..<tcl>hd_fra
2b40: 67 6d 65 6e 74 20 66 69 6c 65 73 69 7a 65 20 7b  gment filesize {
2b50: 69 6e 2d 68 65 61 64 65 72 20 64 61 74 61 62 61  in-header databa
2b60: 73 65 20 73 69 7a 65 7d 3c 2f 74 63 6c 3e 0a 3c  se size}</tcl>.<
2b70: 70 3e 5e 54 68 65 20 34 2d 62 79 74 65 20 62 69  p>^The 4-byte bi
2b80: 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72  g-endian integer
2b90: 20 61 74 20 6f 66 66 73 65 74 20 32 38 20 69 6e   at offset 28 in
2ba0: 74 6f 20 74 68 65 20 68 65 61 64 65 72 20 0a 73  to the header .s
2bb0: 74 6f 72 65 73 20 74 68 65 20 73 69 7a 65 20 6f  tores the size o
2bc0: 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  f the database f
2bd0: 69 6c 65 20 69 6e 20 70 61 67 65 73 2e 20 20 5e  ile in pages.  ^
2be0: 49 66 20 74 68 69 73 20 69 6e 2d 68 65 61 64 65  If this in-heade
2bf0: 72 0a 64 61 74 61 73 69 7a 65 20 73 69 7a 65 20  r.datasize size 
2c00: 69 73 20 6e 6f 74 20 76 61 6c 69 64 20 28 73 65  is not valid (se
2c10: 65 20 74 68 65 20 6e 65 78 74 20 70 61 72 61 67  e the next parag
2c20: 72 61 70 68 29 2c 20 74 68 65 6e 20 74 68 65 20  raph), then the 
2c30: 64 61 74 61 62 61 73 65 20 0a 73 69 7a 65 20 69  database .size i
2c40: 73 20 63 6f 6d 70 75 74 65 64 20 62 79 20 6c 6f  s computed by lo
2c50: 6f 6b 69 6e 67 0a 61 74 20 74 68 65 20 61 63 74  oking.at the act
2c60: 75 61 6c 20 73 69 7a 65 20 6f 66 20 74 68 65 20  ual size of the 
2c70: 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 4f  database file. O
2c80: 6c 64 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66  lder versions of
2c90: 20 53 51 4c 69 74 65 0a 69 67 6e 6f 72 65 64 20   SQLite.ignored 
2ca0: 74 68 65 20 69 6e 2d 68 65 61 64 65 72 20 64 61  the in-header da
2cb0: 74 61 62 61 73 65 20 73 69 7a 65 20 61 6e 64 20  tabase size and 
2cc0: 75 73 65 64 20 74 68 65 20 61 63 74 75 61 6c 20  used the actual 
2cd0: 66 69 6c 65 20 73 69 7a 65 0a 65 78 63 6c 75 73  file size.exclus
2ce0: 69 76 65 6c 79 2e 20 20 5e 4e 65 77 65 72 20 76  ively.  ^Newer v
2cf0: 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74  ersions of SQLit
2d00: 65 20 75 73 65 20 74 68 65 20 69 6e 2d 68 65 61  e use the in-hea
2d10: 64 65 72 20 64 61 74 61 62 61 73 65 0a 73 69 7a  der database.siz
2d20: 65 20 69 66 20 69 74 20 69 73 20 61 76 61 69 6c  e if it is avail
2d30: 61 62 6c 65 20 62 75 74 20 66 61 6c 6c 20 62 61  able but fall ba
2d40: 63 6b 20 74 6f 20 74 68 65 20 61 63 74 75 61 6c  ck to the actual
2d50: 20 66 69 6c 65 20 73 69 7a 65 20 69 66 0a 74 68   file size if.th
2d60: 65 20 69 6e 2d 68 65 61 64 65 72 20 64 61 74 61  e in-header data
2d70: 62 61 73 65 20 73 69 7a 65 20 69 73 20 6e 6f 74  base size is not
2d80: 20 76 61 6c 69 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e   valid.</p>..<p>
2d90: 5e 54 68 65 20 69 6e 2d 68 65 61 64 65 72 20 64  ^The in-header d
2da0: 61 74 61 62 61 73 65 20 73 69 7a 65 20 69 73 20  atabase size is 
2db0: 6f 6e 6c 79 20 63 6f 6e 73 69 64 65 72 65 64 20  only considered 
2dc0: 74 6f 20 62 65 20 76 61 6c 69 64 20 69 66 0a 69  to be valid if.i
2dd0: 74 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 20 61 6e  t is non-zero an
2de0: 64 20 69 66 20 74 68 65 20 34 2d 62 79 74 65 20  d if the 4-byte 
2df0: 5b 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 5d  [change counter]
2e00: 20 61 74 20 6f 66 66 73 65 74 20 32 34 0a 65 78   at offset 24.ex
2e10: 61 63 74 6c 79 20 6d 61 74 63 68 65 73 20 74 68  actly matches th
2e20: 65 20 34 2d 62 79 74 65 20 5b 76 65 72 73 69 6f  e 4-byte [versio
2e30: 6e 2d 76 61 6c 69 64 2d 66 6f 72 20 6e 75 6d 62  n-valid-for numb
2e40: 65 72 5d 20 61 74 20 6f 66 66 73 65 74 20 39 32  er] at offset 92
2e50: 2e 0a 5e 28 54 68 65 20 69 6e 2d 68 65 61 64 65  ..^(The in-heade
2e60: 72 20 64 61 74 61 62 61 73 65 20 73 69 7a 65 20  r database size 
2e70: 69 73 20 61 6c 77 61 79 73 20 76 61 6c 69 64 20  is always valid 
2e80: 0a 77 68 65 6e 20 74 68 65 20 64 61 74 61 62 61  .when the databa
2e90: 73 65 20 69 73 20 6f 6e 6c 79 20 6d 6f 64 69 66  se is only modif
2ea0: 69 65 64 20 75 73 69 6e 67 20 72 65 63 65 6e 74  ied using recent
2eb0: 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c   versions of SQL
2ec0: 69 74 65 0a 28 76 65 72 73 69 6f 6e 73 20 33 2e  ite.(versions 3.
2ed0: 37 2e 30 20 61 6e 64 20 6c 61 74 65 72 29 2e 29  7.0 and later).)
2ee0: 5e 0a 49 66 20 61 20 6c 65 67 61 63 79 20 76 65  ^.If a legacy ve
2ef0: 72 73 69 6f 6e 20 6f 66 20 53 51 4c 69 74 65 20  rsion of SQLite 
2f00: 77 72 69 74 65 73 20 74 6f 20 74 68 65 20 64 61  writes to the da
2f10: 74 61 62 61 73 65 2c 20 69 74 20 77 69 6c 6c 20  tabase, it will 
2f20: 6e 6f 74 0a 6b 6e 6f 77 20 74 6f 20 75 70 64 61  not.know to upda
2f30: 74 65 20 74 68 65 20 69 6e 2d 68 65 61 64 65 72  te the in-header
2f40: 20 64 61 74 61 62 61 73 65 20 73 69 7a 65 20 61   database size a
2f50: 6e 64 20 73 6f 20 74 68 65 20 69 6e 2d 68 65 61  nd so the in-hea
2f60: 64 65 72 0a 64 61 74 61 62 61 73 65 20 73 69 7a  der.database siz
2f70: 65 20 63 6f 75 6c 64 20 62 65 20 69 6e 63 6f 72  e could be incor
2f80: 72 65 63 74 2e 20 20 42 75 74 20 6c 65 67 61 63  rect.  But legac
2f90: 79 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51  y versions of SQ
2fa0: 4c 69 74 65 0a 77 69 6c 6c 20 61 6c 73 6f 20 6c  Lite.will also l
2fb0: 65 61 76 65 20 74 68 65 20 76 65 72 73 69 6f 6e  eave the version
2fc0: 2d 76 61 6c 69 64 2d 66 6f 72 20 6e 75 6d 62 65  -valid-for numbe
2fd0: 72 20 61 74 20 6f 66 66 73 65 74 20 39 32 20 75  r at offset 92 u
2fe0: 6e 63 68 61 6e 67 65 64 0a 73 6f 20 69 74 20 77  nchanged.so it w
2ff0: 69 6c 6c 20 6e 6f 74 20 6d 61 74 63 68 20 74 68  ill not match th
3000: 65 20 63 68 61 6e 67 65 2d 63 6f 75 6e 74 65 72  e change-counter
3010: 2e 20 20 48 65 6e 63 65 2c 20 69 6e 76 61 6c 69  .  Hence, invali
3020: 64 20 69 6e 2d 68 65 61 64 65 72 0a 64 61 74 61  d in-header.data
3030: 62 61 73 65 20 73 69 7a 65 73 20 63 61 6e 20 62  base sizes can b
3040: 65 20 64 65 74 65 63 74 65 64 20 28 61 6e 64 20  e detected (and 
3050: 69 67 6e 6f 72 65 64 29 20 62 79 20 6f 62 73 65  ignored) by obse
3060: 72 76 69 6e 67 20 77 68 65 6e 0a 74 68 65 20 63  rving when.the c
3070: 68 61 6e 67 65 2d 63 6f 75 6e 74 65 72 20 64 6f  hange-counter do
3080: 65 73 20 6e 6f 74 20 6d 61 74 63 68 20 74 68 65  es not match the
3090: 20 76 65 72 73 69 6f 6e 2d 76 61 6c 69 64 2d 66   version-valid-f
30a0: 6f 72 20 6e 75 6d 62 65 72 2e 3c 2f 70 3e 0a 0a  or number.</p>..
30b0: 3c 68 33 3e 46 72 65 65 20 70 61 67 65 20 6c 69  <h3>Free page li
30c0: 73 74 3c 2f 68 33 3e 0a 0a 3c 70 3e 55 6e 75 73  st</h3>..<p>Unus
30d0: 65 64 20 70 61 67 65 73 20 69 6e 20 74 68 65 20  ed pages in the 
30e0: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 72  database file ar
30f0: 65 20 73 74 6f 72 65 64 20 6f 6e 20 61 20 66 72  e stored on a fr
3100: 65 65 6c 69 73 74 2e 20 20 5e 54 68 65 0a 34 2d  eelist.  ^The.4-
3110: 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20  byte big-endian 
3120: 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73 65  integer at offse
3130: 74 20 33 32 20 73 74 6f 72 65 73 20 74 68 65 20  t 32 stores the 
3140: 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 0a 74  page number of.t
3150: 68 65 20 66 69 72 73 74 20 70 61 67 65 20 6f 66  he first page of
3160: 20 74 68 65 20 66 72 65 65 6c 69 73 74 2c 20 6f   the freelist, o
3170: 72 20 7a 65 72 6f 20 69 66 20 74 68 65 20 66 72  r zero if the fr
3180: 65 65 6c 69 73 74 20 69 73 20 65 6d 70 74 79 2e  eelist is empty.
3190: 0a 5e 54 68 65 20 34 2d 62 79 74 65 20 62 69 67  .^The 4-byte big
31a0: 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20  -endian integer 
31b0: 61 74 20 6f 66 66 73 65 74 20 33 36 20 73 74 6f  at offset 36 sto
31c0: 72 65 73 20 73 74 6f 72 65 73 20 74 68 65 20 74  res stores the t
31d0: 6f 74 61 6c 20 0a 6e 75 6d 62 65 72 20 6f 66 20  otal .number of 
31e0: 70 61 67 65 73 20 6f 6e 20 74 68 65 20 66 72 65  pages on the fre
31f0: 65 6c 69 73 74 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e  elist.</p>..<h3>
3200: 53 63 68 65 6d 61 20 63 6f 6f 6b 69 65 3c 2f 68  Schema cookie</h
3210: 33 3e 0a 0a 3c 70 3e 5e 54 68 65 20 73 63 68 65  3>..<p>^The sche
3220: 6d 61 20 63 6f 6f 6b 69 65 20 69 73 20 61 20 34  ma cookie is a 4
3230: 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e  -byte big-endian
3240: 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73   integer at offs
3250: 65 74 20 34 30 0a 74 68 61 74 20 69 73 20 69 6e  et 40.that is in
3260: 63 72 65 6d 65 6e 74 65 64 20 77 68 65 6e 65 76  cremented whenev
3270: 65 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20  er the database 
3280: 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73 2e 20  schema changes. 
3290: 20 41 20 0a 70 72 65 70 61 72 65 64 20 73 74 61   A .prepared sta
32a0: 74 65 6d 65 6e 74 20 69 73 20 63 6f 6d 70 69 6c  tement is compil
32b0: 65 64 20 61 67 61 69 6e 73 74 20 61 20 73 70 65  ed against a spe
32c0: 63 69 66 69 63 20 76 65 72 73 69 6f 6e 20 6f 66  cific version of
32d0: 20 74 68 65 0a 64 61 74 61 62 61 73 65 20 73 63   the.database sc
32e0: 68 65 6d 61 2e 20 20 57 68 65 6e 20 74 68 65 20  hema.  When the 
32f0: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
3300: 63 68 61 6e 67 65 73 2c 20 74 68 65 20 73 74 61  changes, the sta
3310: 74 65 6d 65 6e 74 0a 6d 75 73 74 20 62 65 20 72  tement.must be r
3320: 65 70 72 65 70 61 72 65 64 2e 20 20 5e 57 68 65  eprepared.  ^Whe
3330: 6e 20 61 20 70 72 65 70 61 72 65 64 20 73 74 61  n a prepared sta
3340: 74 65 6d 65 6e 74 20 72 75 6e 73 2c 20 69 74 20  tement runs, it 
3350: 66 69 72 73 74 20 63 68 65 63 6b 73 0a 74 68 65  first checks.the
3360: 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 74   schema cookie t
3370: 6f 20 65 6e 73 75 72 65 20 74 68 65 20 76 61 6c  o ensure the val
3380: 75 65 20 69 73 20 74 68 65 20 73 61 6d 65 20 61  ue is the same a
3390: 73 20 77 68 65 6e 20 74 68 65 20 73 74 61 74 65  s when the state
33a0: 6d 65 6e 74 0a 77 61 73 20 70 72 65 70 61 72 65  ment.was prepare
33b0: 64 20 61 6e 64 20 69 66 20 74 68 65 20 73 63 68  d and if the sch
33c0: 65 6d 61 20 63 6f 6f 6b 69 65 20 68 61 73 20 63  ema cookie has c
33d0: 68 61 6e 67 65 64 2c 20 74 68 65 20 73 74 61 74  hanged, the stat
33e0: 65 6d 65 6e 74 20 65 69 74 68 65 72 0a 61 75 74  ement either.aut
33f0: 6f 6d 61 74 69 63 61 6c 6c 79 20 72 65 70 72 65  omatically repre
3400: 70 61 72 65 73 20 61 6e 64 20 72 65 72 75 6e 73  pares and reruns
3410: 20 6f 72 20 69 74 20 61 62 6f 72 74 73 20 77 69   or it aborts wi
3420: 74 68 20 61 6e 20 5b 53 51 4c 49 54 45 5f 53 43  th an [SQLITE_SC
3430: 48 45 4d 41 5d 20 0a 65 72 72 6f 72 2e 3c 2f 70  HEMA] .error.</p
3440: 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
3450: 65 6e 74 20 7b 73 63 68 65 6d 61 66 6f 72 6d 61  ent {schemaforma
3460: 74 7d 20 7b 73 63 68 65 6d 61 20 66 6f 72 6d 61  t} {schema forma
3470: 74 7d 20 7b 73 63 68 65 6d 61 20 66 6f 72 6d 61  t} {schema forma
3480: 74 20 6e 75 6d 62 65 72 7d 3c 2f 74 63 6c 3e 0a  t number}</tcl>.
3490: 3c 68 33 3e 53 63 68 65 6d 61 20 66 6f 72 6d 61  <h3>Schema forma
34a0: 74 20 6e 75 6d 62 65 72 3c 2f 68 33 3e 0a 0a 3c  t number</h3>..<
34b0: 70 3e 54 68 65 20 73 63 68 65 6d 61 20 66 6f 72  p>The schema for
34c0: 6d 61 74 20 6e 75 6d 62 65 72 20 69 73 20 61 20  mat number is a 
34d0: 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61  4-byte big-endia
34e0: 6e 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66  n integer at off
34f0: 73 65 74 20 34 34 2e 0a 54 68 65 20 73 63 68 65  set 44..The sche
3500: 6d 61 20 66 6f 72 6d 61 74 20 6e 75 6d 62 65 72  ma format number
3510: 20 69 73 20 73 69 6d 69 6c 61 72 20 74 6f 20 74   is similar to t
3520: 68 65 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 72  he file format r
3530: 65 61 64 20 61 6e 64 20 77 72 69 74 65 0a 76 65  ead and write.ve
3540: 72 73 69 6f 6e 20 6e 75 6d 62 65 72 73 20 61 74  rsion numbers at
3550: 20 6f 66 66 73 65 74 73 20 31 38 20 61 6e 64 20   offsets 18 and 
3560: 31 39 20 65 78 63 65 70 74 20 74 68 61 74 20 74  19 except that t
3570: 68 65 20 73 63 68 65 6d 61 20 66 6f 72 6d 61 74  he schema format
3580: 20 6e 75 6d 62 65 72 0a 72 65 66 65 72 73 20 74   number.refers t
3590: 6f 20 74 68 65 20 68 69 67 68 2d 6c 65 76 65 6c  o the high-level
35a0: 20 53 51 4c 20 66 6f 72 6d 61 74 74 69 6e 67 20   SQL formatting 
35b0: 72 61 74 68 65 72 20 74 68 61 6e 20 74 68 65 20  rather than the 
35c0: 6c 6f 77 2d 6c 65 76 65 6c 20 62 2d 74 72 65 65  low-level b-tree
35d0: 0a 66 6f 72 6d 61 74 74 69 6e 67 2e 20 20 46 6f  .formatting.  Fo
35e0: 75 72 20 73 63 68 65 6d 61 20 66 6f 72 6d 61 74  ur schema format
35f0: 20 6e 75 6d 62 65 72 73 20 61 72 65 20 63 75 72   numbers are cur
3600: 72 65 6e 74 6c 79 20 64 65 66 69 6e 65 64 3a 3c  rently defined:<
3610: 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 20 76 61  /p>..<ol>.<li va
3620: 6c 75 65 3d 31 3e 46 6f 72 6d 61 74 20 31 20 69  lue=1>Format 1 i
3630: 73 20 75 6e 64 65 72 73 74 6f 6f 64 20 62 79 20  s understood by 
3640: 61 6c 6c 20 76 65 72 73 69 6f 6e 73 20 6f 66 20  all versions of 
3650: 53 51 4c 69 74 65 20 62 61 63 6b 20 74 6f 0a 76  SQLite back to.v
3660: 65 72 73 69 6f 6e 20 33 2e 30 2e 30 2e 3c 2f 6c  ersion 3.0.0.</l
3670: 69 3e 0a 3c 6c 69 20 76 61 6c 75 65 3d 32 3e 46  i>.<li value=2>F
3680: 6f 72 6d 61 74 20 32 20 61 64 64 73 20 74 68 65  ormat 2 adds the
3690: 20 61 62 69 6c 69 74 79 20 6f 66 20 72 6f 77 73   ability of rows
36a0: 20 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d 65   within the same
36b0: 20 74 61 62 6c 65 0a 74 6f 20 68 61 76 65 20 61   table.to have a
36c0: 20 76 61 72 79 69 6e 67 20 6e 75 6d 62 65 72 20   varying number 
36d0: 6f 66 20 63 6f 6c 75 6d 6e 73 2c 20 69 6e 20 6f  of columns, in o
36e0: 72 64 65 72 20 74 6f 20 73 75 70 70 6f 72 74 20  rder to support 
36f0: 74 68 65 0a 5b 41 4c 54 45 52 20 54 41 42 4c 45  the.[ALTER TABLE
3700: 20 7c 20 41 4c 54 45 52 20 54 41 42 4c 45 20 2e   | ALTER TABLE .
3710: 2e 2e 20 41 44 44 20 43 4f 4c 55 4d 4e 5d 20 66  .. ADD COLUMN] f
3720: 75 6e 63 74 69 6f 6e 61 6c 69 74 79 2e 20 20 53  unctionality.  S
3730: 75 70 70 6f 72 74 20 66 6f 72 0a 72 65 61 64 69  upport for.readi
3740: 6e 67 20 61 6e 64 20 77 72 69 74 69 6e 67 20 66  ng and writing f
3750: 6f 72 6d 61 74 20 32 20 77 61 73 20 61 64 64 65  ormat 2 was adde
3760: 64 20 69 6e 20 53 51 4c 69 74 65 20 76 65 72 73  d in SQLite vers
3770: 69 6f 6e 20 33 2e 31 2e 33 20 0a 6f 6e 20 32 30  ion 3.1.3 .on 20
3780: 30 35 2d 30 32 2d 31 39 2e 3c 2f 6c 69 3e 0a 3c  05-02-19.</li>.<
3790: 6c 69 20 76 61 6c 75 65 3d 33 3e 46 6f 72 6d 61  li value=3>Forma
37a0: 74 20 33 20 61 64 64 73 20 74 68 65 20 61 62 69  t 3 adds the abi
37b0: 6c 69 74 79 20 6f 66 20 65 78 74 72 61 20 63 6f  lity of extra co
37c0: 6c 75 6d 6e 73 20 61 64 64 65 64 20 62 79 0a 5b  lumns added by.[
37d0: 41 4c 54 45 52 20 54 41 42 4c 45 20 7c 20 41 4c  ALTER TABLE | AL
37e0: 54 45 52 20 54 41 42 4c 45 20 2e 2e 2e 20 41 44  TER TABLE ... AD
37f0: 44 20 43 4f 4c 55 4d 4e 5d 20 74 6f 20 68 61 76  D COLUMN] to hav
3800: 65 20 6e 6f 6e 2d 4e 55 4c 4c 20 64 65 66 61 75  e non-NULL defau
3810: 6c 74 0a 76 61 6c 75 65 73 2e 20 20 54 68 69 73  lt.values.  This
3820: 20 63 61 70 61 62 69 6c 69 74 79 20 77 61 73 20   capability was 
3830: 61 64 64 65 64 20 69 6e 20 53 51 4c 69 74 65 20  added in SQLite 
3840: 76 65 72 73 69 6f 6e 20 33 2e 31 2e 34 20 0a 6f  version 3.1.4 .o
3850: 6e 20 32 30 30 35 2d 30 33 2d 31 31 2e 3c 2f 6c  n 2005-03-11.</l
3860: 69 3e 0a 3c 6c 69 20 76 61 6c 75 65 3d 34 3e 5e  i>.<li value=4>^
3870: 46 6f 72 6d 61 74 20 34 20 63 61 75 73 65 73 20  Format 4 causes 
3880: 53 51 4c 69 74 65 20 74 6f 20 72 65 73 70 65 63  SQLite to respec
3890: 74 20 74 68 65 0a 5b 64 65 73 63 65 6e 64 69 6e  t the.[descendin
38a0: 67 20 69 6e 64 65 78 65 73 20 7c 20 44 45 53 43  g indexes | DESC
38b0: 20 6b 65 79 77 6f 72 64 5d 20 6f 6e 0a 69 6e 64   keyword] on.ind
38c0: 65 78 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 2e  ex declarations.
38d0: 20 20 28 5e 54 68 65 20 44 45 53 43 20 6b 65 79    (^The DESC key
38e0: 77 6f 72 64 20 69 73 20 69 67 6e 6f 72 65 64 20  word is ignored 
38f0: 69 6e 20 69 6e 64 65 78 65 73 20 66 6f 72 20 0a  in indexes for .
3900: 66 6f 72 6d 61 74 73 20 31 2c 20 32 2c 20 61 6e  formats 1, 2, an
3910: 64 20 33 2e 29 0a 5e 46 6f 72 6d 61 74 20 34 20  d 3.).^Format 4 
3920: 61 6c 73 6f 20 61 64 64 73 20 74 77 6f 20 6e 65  also adds two ne
3930: 77 20 62 6f 6f 6c 65 61 6e 20 72 65 63 6f 72 64  w boolean record
3940: 20 74 79 70 65 20 76 61 6c 75 65 73 20 28 5b 73   type values ([s
3950: 65 72 69 61 6c 20 74 79 70 65 73 5d 0a 38 20 61  erial types].8 a
3960: 6e 64 20 39 29 2e 20 20 53 75 70 70 6f 72 74 20  nd 9).  Support 
3970: 66 6f 72 20 66 6f 72 6d 61 74 20 34 20 77 61 73  for format 4 was
3980: 20 61 64 64 65 64 20 69 6e 20 53 51 4c 69 74 65   added in SQLite
3990: 20 33 2e 33 2e 30 20 6f 6e 0a 32 30 30 36 2d 30   3.3.0 on.2006-0
39a0: 31 2d 31 30 2e 3c 2f 6c 69 3e 0a 3c 2f 6f 6c 3e  1-10.</li>.</ol>
39b0: 0a 0a 3c 70 3e 5e 4e 65 77 20 64 61 74 61 62 61  ..<p>^New databa
39c0: 73 65 20 66 69 6c 65 73 20 63 72 65 61 74 65 64  se files created
39d0: 20 62 79 20 53 51 4c 69 74 65 20 75 73 65 20 66   by SQLite use f
39e0: 6f 72 6d 61 74 20 34 20 62 79 20 64 65 66 61 75  ormat 4 by defau
39f0: 6c 74 2e 0a 5e 54 68 65 20 5b 6c 65 67 61 63 79  lt..^The [legacy
3a00: 5f 66 69 6c 65 5f 66 6f 72 6d 61 74 20 70 72 61  _file_format pra
3a10: 67 6d 61 5d 20 63 61 6e 20 62 65 20 75 73 65 64  gma] can be used
3a20: 20 74 6f 20 63 61 75 73 65 20 53 51 4c 69 74 65   to cause SQLite
3a30: 0a 74 6f 20 63 72 65 61 74 65 20 6e 65 77 20 64  .to create new d
3a40: 61 74 61 62 61 73 65 20 66 69 6c 65 73 20 75 73  atabase files us
3a50: 69 6e 67 20 66 6f 72 6d 61 74 20 31 2e 0a 54 68  ing format 1..Th
3a60: 65 20 66 6f 72 6d 61 74 20 76 65 72 73 69 6f 6e  e format version
3a70: 20 6e 75 6d 62 65 72 20 63 61 6e 20 62 65 20 6d   number can be m
3a80: 61 64 65 20 74 6f 20 64 65 66 61 75 6c 74 20 74  ade to default t
3a90: 6f 20 31 20 69 6e 73 74 65 61 64 20 6f 66 20 34  o 1 instead of 4
3aa0: 20 62 79 0a 73 65 74 74 69 6e 67 20 5b 53 51 4c   by.setting [SQL
3ab0: 49 54 45 5f 44 45 46 41 55 4c 54 5f 46 49 4c 45  ITE_DEFAULT_FILE
3ac0: 5f 46 4f 52 4d 41 54 5d 3d 31 20 61 74 20 63 6f  _FORMAT]=1 at co
3ad0: 6d 70 69 6c 65 2d 74 69 6d 65 2e 0a 3c 2f 70 3e  mpile-time..</p>
3ae0: 0a 0a 3c 68 33 3e 53 75 67 67 65 73 74 65 64 20  ..<h3>Suggested 
3af0: 63 61 63 68 65 20 73 69 7a 65 3c 2f 68 33 3e 0a  cache size</h3>.
3b00: 0a 3c 70 3e 54 68 65 20 34 2d 62 79 74 65 20 62  .<p>The 4-byte b
3b10: 69 67 2d 65 6e 64 69 61 6e 20 73 69 67 6e 65 64  ig-endian signed
3b20: 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73   integer at offs
3b30: 65 74 20 34 38 20 69 73 20 74 68 65 20 73 75 67  et 48 is the sug
3b40: 67 65 73 74 65 64 0a 63 61 63 68 65 20 73 69 7a  gested.cache siz
3b50: 65 20 69 6e 20 70 61 67 65 73 20 66 6f 72 20 74  e in pages for t
3b60: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
3b70: 2e 20 20 54 68 65 20 76 61 6c 75 65 20 69 73 20  .  The value is 
3b80: 61 20 73 75 67 67 65 73 74 69 6f 6e 0a 6f 6e 6c  a suggestion.onl
3b90: 79 20 61 6e 64 20 53 51 4c 69 74 65 20 69 73 20  y and SQLite is 
3ba0: 75 6e 64 65 72 20 6e 6f 20 6f 62 6c 69 67 61 74  under no obligat
3bb0: 69 6f 6e 20 74 6f 20 68 6f 6e 6f 72 20 69 74 2e  ion to honor it.
3bc0: 20 20 54 68 65 20 61 62 73 6f 6c 75 74 65 20 76    The absolute v
3bd0: 61 6c 75 65 0a 6f 66 20 74 68 65 20 69 6e 74 65  alue.of the inte
3be0: 67 65 72 20 69 73 20 75 73 65 64 20 61 73 20 74  ger is used as t
3bf0: 68 65 20 73 75 67 67 65 73 74 65 64 20 73 69 7a  he suggested siz
3c00: 65 2e 20 20 54 68 65 20 73 75 67 67 65 73 74 65  e.  The suggeste
3c10: 64 20 63 61 63 68 65 20 73 69 7a 65 0a 63 61 6e  d cache size.can
3c20: 20 62 65 20 73 65 74 20 75 73 69 6e 67 20 74 68   be set using th
3c30: 65 20 5b 64 65 66 61 75 6c 74 5f 63 61 63 68 65  e [default_cache
3c40: 5f 73 69 7a 65 20 70 72 61 67 6d 61 5d 2e 3c 2f  _size pragma].</
3c50: 70 3e 0a 0a 3c 68 33 3e 49 6e 63 72 65 6d 65 6e  p>..<h3>Incremen
3c60: 74 61 6c 20 76 61 63 75 75 6d 20 73 65 74 74 69  tal vacuum setti
3c70: 6e 67 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65  ngs</h3>..<p>The
3c80: 20 74 77 6f 20 34 2d 62 79 74 65 20 62 69 67 2d   two 4-byte big-
3c90: 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 73 20  endian integers 
3ca0: 61 74 20 6f 66 66 73 65 74 73 20 35 32 20 61 6e  at offsets 52 an
3cb0: 64 20 36 34 20 61 72 65 20 75 73 65 64 0a 74 6f  d 64 are used.to
3cc0: 20 6d 61 6e 61 67 65 20 74 68 65 20 5b 61 75 74   manage the [aut
3cd0: 6f 5f 76 61 63 75 75 6d 5d 20 61 6e 64 20 5b 69  o_vacuum] and [i
3ce0: 6e 63 72 65 6d 65 6e 74 61 6c 5f 76 61 63 75 75  ncremental_vacuu
3cf0: 6d 5d 20 6d 6f 64 65 73 2e 20 20 5e 49 66 0a 74  m] modes.  ^If.t
3d00: 68 65 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66  he integer at of
3d10: 66 73 65 74 20 35 32 20 69 73 20 7a 65 72 6f 20  fset 52 is zero 
3d20: 74 68 65 6e 20 70 6f 69 6e 74 65 72 2d 6d 61 70  then pointer-map
3d30: 20 28 70 74 72 6d 61 70 29 20 70 61 67 65 73 20   (ptrmap) pages 
3d40: 61 72 65 0a 6f 6d 69 74 74 65 64 20 66 72 6f 6d  are.omitted from
3d50: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
3d60: 6c 65 20 61 6e 64 20 6e 65 69 74 68 65 72 20 61  le and neither a
3d70: 75 74 6f 5f 76 61 63 75 75 6d 20 6e 6f 72 0a 69  uto_vacuum nor.i
3d80: 6e 63 72 65 6d 65 6e 74 61 6c 5f 76 61 63 75 75  ncremental_vacuu
3d90: 6d 20 61 72 65 20 73 75 70 70 6f 72 74 65 64 2e  m are supported.
3da0: 20 20 5e 49 66 20 74 68 65 20 69 6e 74 65 67 65    ^If the intege
3db0: 72 20 61 74 20 6f 66 66 73 65 74 20 35 32 20 69  r at offset 52 i
3dc0: 73 0a 6e 6f 6e 2d 7a 65 72 6f 20 74 68 65 6e 20  s.non-zero then 
3dd0: 69 74 20 69 73 20 74 68 65 20 70 61 67 65 20 6e  it is the page n
3de0: 75 6d 62 65 72 20 6f 66 20 74 68 65 20 6c 61 72  umber of the lar
3df0: 67 65 73 74 20 72 6f 6f 74 20 70 61 67 65 20 69  gest root page i
3e00: 6e 20 74 68 65 0a 64 61 74 61 62 61 73 65 20 66  n the.database f
3e10: 69 6c 65 2c 20 74 68 65 20 64 61 74 61 62 61 73  ile, the databas
3e20: 65 20 66 69 6c 65 20 77 69 6c 6c 20 63 6f 6e 74  e file will cont
3e30: 61 69 6e 20 70 74 72 6d 61 70 20 70 61 67 65 73  ain ptrmap pages
3e40: 2c 20 61 6e 64 20 74 68 65 0a 6d 6f 64 65 20 6d  , and the.mode m
3e50: 75 73 74 20 62 65 20 65 69 74 68 65 72 20 61 75  ust be either au
3e60: 74 6f 5f 76 61 63 75 75 6d 20 6f 72 20 69 6e 63  to_vacuum or inc
3e70: 72 65 6d 65 6e 74 61 6c 5f 76 61 63 75 75 6d 2e  remental_vacuum.
3e80: 20 20 5e 49 6e 20 74 68 69 73 20 6c 61 74 74 65    ^In this latte
3e90: 72 0a 63 61 73 65 2c 20 74 68 65 20 69 6e 74 65  r.case, the inte
3ea0: 67 65 72 20 61 74 20 6f 66 66 73 65 74 20 36 34  ger at offset 64
3eb0: 20 69 73 20 74 72 75 65 20 66 6f 72 20 69 6e 63   is true for inc
3ec0: 72 65 6d 65 6e 74 61 6c 5f 76 61 63 75 75 6d 20  remental_vacuum 
3ed0: 61 6e 64 0a 66 61 6c 73 65 20 66 6f 72 20 61 75  and.false for au
3ee0: 74 6f 5f 76 61 63 75 75 6d 2e 20 20 5e 49 66 20  to_vacuum.  ^If 
3ef0: 74 68 65 20 69 6e 74 65 67 65 72 20 61 74 20 6f  the integer at o
3f00: 66 66 73 65 74 20 35 32 20 69 73 20 7a 65 72 6f  ffset 52 is zero
3f10: 20 74 68 65 6e 0a 74 68 65 20 69 6e 74 65 67 65   then.the intege
3f20: 72 20 61 74 20 6f 66 66 73 65 74 20 36 34 20 6d  r at offset 64 m
3f30: 75 73 74 20 61 6c 73 6f 20 62 65 20 7a 65 72 6f  ust also be zero
3f40: 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  .</p>..<tcl>hd_f
3f50: 72 61 67 6d 65 6e 74 20 65 6e 63 20 7b 74 65 78  ragment enc {tex
3f60: 74 20 65 6e 63 6f 64 69 6e 67 7d 3c 2f 74 63 6c  t encoding}</tcl
3f70: 3e 0a 3c 68 33 3e 54 65 78 74 20 65 6e 63 6f 64  >.<h3>Text encod
3f80: 69 6e 67 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68  ing</h3>..<p>^Th
3f90: 65 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64  e 4-byte big-end
3fa0: 69 61 6e 20 69 6e 74 65 67 65 72 20 61 74 20 6f  ian integer at o
3fb0: 66 66 73 65 74 20 35 36 20 64 65 74 65 72 6d 69  ffset 56 determi
3fc0: 6e 65 73 20 74 68 65 20 65 6e 63 6f 64 69 6e 67  nes the encoding
3fd0: 0a 75 73 65 64 20 66 6f 72 20 61 6c 6c 20 74 65  .used for all te
3fe0: 78 74 20 73 74 72 69 6e 67 73 20 73 74 6f 72 65  xt strings store
3ff0: 64 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  d in the databas
4000: 65 2e 20 20 0a 5e 41 20 76 61 6c 75 65 20 6f 66  e.  .^A value of
4010: 20 31 20 6d 65 61 6e 73 20 55 54 46 2d 38 2e 0a   1 means UTF-8..
4020: 5e 41 20 76 61 6c 75 65 20 6f 66 20 32 20 6d 65  ^A value of 2 me
4030: 61 6e 73 20 55 54 46 2d 31 36 6c 65 2e 0a 5e 41  ans UTF-16le..^A
4040: 20 76 61 6c 75 65 20 6f 66 20 33 20 6d 65 61 6e   value of 3 mean
4050: 73 20 55 54 46 2d 31 36 62 65 2e 0a 4e 6f 20 6f  s UTF-16be..No o
4060: 74 68 65 72 20 76 61 6c 75 65 73 20 61 72 65 20  ther values are 
4070: 61 6c 6c 6f 77 65 64 2e 0a 5e 28 54 68 65 20 73  allowed..^(The s
4080: 71 6c 69 74 65 33 2e 68 20 68 65 61 64 65 72 20  qlite3.h header 
4090: 66 69 6c 65 20 64 65 66 69 6e 65 73 20 43 2d 70  file defines C-p
40a0: 72 65 70 72 6f 63 65 73 73 6f 72 20 6d 61 63 72  reprocessor macr
40b0: 6f 73 20 53 51 4c 49 54 45 5f 55 54 46 38 20 61  os SQLITE_UTF8 a
40c0: 73 20 31 2c 0a 53 51 4c 49 54 45 5f 55 54 46 31  s 1,.SQLITE_UTF1
40d0: 36 4c 45 20 61 73 20 32 2c 20 61 6e 64 20 53 51  6LE as 2, and SQ
40e0: 4c 49 54 45 5f 55 54 46 31 36 42 45 20 61 73 20  LITE_UTF16BE as 
40f0: 33 2c 20 74 6f 20 75 73 65 20 69 6e 20 70 6c 61  3, to use in pla
4100: 63 65 20 6f 66 0a 74 68 65 20 6e 75 6d 65 72 69  ce of.the numeri
4110: 63 20 63 6f 64 65 73 20 66 6f 72 20 74 68 65 20  c codes for the 
4120: 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 2e 29 5e  text encoding.)^
4130: 3c 2f 70 3e 0a 0a 3c 68 33 3e 55 73 65 72 20 76  </p>..<h3>User v
4140: 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 3c 2f 68  ersion number</h
4150: 33 3e 0a 0a 3c 70 3e 5e 54 68 65 20 34 2d 62 79  3>..<p>^The 4-by
4160: 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e  te big-endian in
4170: 74 65 67 65 72 20 61 74 20 6f 66 66 73 65 74 20  teger at offset 
4180: 36 30 20 69 73 20 74 68 65 20 75 73 65 72 20 76  60 is the user v
4190: 65 72 73 69 6f 6e 20 77 68 69 63 68 0a 69 73 20  ersion which.is 
41a0: 73 65 74 20 61 6e 64 20 71 75 65 72 69 65 64 20  set and queried 
41b0: 62 79 20 74 68 65 20 5b 75 73 65 72 5f 76 65 72  by the [user_ver
41c0: 73 69 6f 6e 20 70 72 61 67 6d 61 5d 2e 20 20 54  sion pragma].  T
41d0: 68 65 20 75 73 65 72 20 76 65 72 73 69 6f 6e 20  he user version 
41e0: 69 73 0a 6e 6f 74 20 75 73 65 64 20 62 79 20 53  is.not used by S
41f0: 51 4c 69 74 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c  QLite.</p>..<tcl
4200: 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 61 70 70  >hd_fragment app
4210: 69 64 20 7b 41 70 70 6c 69 63 61 74 69 6f 6e 20  id {Application 
4220: 49 44 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 41 70  ID}</tcl>.<h3>Ap
4230: 70 6c 69 63 61 74 69 6f 6e 20 49 44 3c 2f 68 33  plication ID</h3
4240: 3e 0a 0a 3c 70 3e 5e 54 68 65 20 34 2d 62 79 74  >..<p>^The 4-byt
4250: 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74  e big-endian int
4260: 65 67 65 72 20 61 74 20 6f 66 66 73 65 74 20 36  eger at offset 6
4270: 38 20 69 73 20 61 6e 20 22 41 70 70 6c 69 63 61  8 is an "Applica
4280: 74 69 6f 6e 20 49 44 22 20 74 68 61 74 0a 63 61  tion ID" that.ca
4290: 6e 20 62 65 20 73 65 74 20 62 79 20 74 68 65 20  n be set by the 
42a0: 5b 50 52 41 47 4d 41 20 61 70 70 6c 69 63 61 74  [PRAGMA applicat
42b0: 69 6f 6e 5f 69 64 5d 20 63 6f 6d 6d 61 6e 64 20  ion_id] command 
42c0: 69 6e 20 6f 72 64 65 72 20 74 6f 20 69 64 65 6e  in order to iden
42d0: 74 69 66 79 20 74 68 65 0a 64 61 74 61 62 61 73  tify the.databas
42e0: 65 20 61 73 20 62 65 6c 6f 6e 67 69 6e 67 20 74  e as belonging t
42f0: 6f 20 6f 72 20 61 73 73 6f 63 69 61 74 65 64 20  o or associated 
4300: 77 69 74 68 20 61 20 70 61 72 74 69 63 75 6c 61  with a particula
4310: 72 20 61 70 70 6c 69 63 61 74 69 6f 6e 2e 0a 54  r application..T
4320: 68 65 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 49  he application I
4330: 44 20 69 73 20 69 6e 74 65 6e 64 65 64 20 66 6f  D is intended fo
4340: 72 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73  r database files
4350: 20 75 73 65 64 20 61 73 20 61 6e 0a 5b 61 70 70   used as an.[app
4360: 6c 69 63 61 74 69 6f 6e 20 66 69 6c 65 2d 66 6f  lication file-fo
4370: 72 6d 61 74 5d 2e 20 20 54 68 65 20 61 70 70 6c  rmat].  The appl
4380: 69 63 61 74 69 6f 6e 20 49 44 20 63 61 6e 20 62  ication ID can b
4390: 65 20 75 73 65 64 20 62 79 20 75 74 69 6c 69 74  e used by utilit
43a0: 69 65 73 20 0a 73 75 63 68 20 61 73 20 5b 68 74  ies .such as [ht
43b0: 74 70 3a 2f 2f 77 77 77 2e 64 61 72 77 69 6e 73  tp://www.darwins
43c0: 79 73 2e 63 6f 6d 2f 66 69 6c 65 2f 20 7c 20 66  ys.com/file/ | f
43d0: 69 6c 65 28 31 29 5d 20 74 6f 20 64 65 74 65 72  ile(1)] to deter
43e0: 6d 69 6e 65 20 74 68 65 20 73 70 65 63 69 66 69  mine the specifi
43f0: 63 0a 66 69 6c 65 20 74 79 70 65 20 72 61 74 68  c.file type rath
4400: 65 72 20 74 68 61 6e 20 6a 75 73 74 20 72 65 70  er than just rep
4410: 6f 72 74 69 6e 67 20 22 53 51 4c 69 74 65 33 20  orting "SQLite3 
4420: 44 61 74 61 62 61 73 65 22 2e 20 20 41 20 6c 69  Database".  A li
4430: 73 74 20 6f 66 0a 61 73 73 69 67 6e 65 64 20 61  st of.assigned a
4440: 70 70 6c 69 63 61 74 69 6f 6e 20 49 44 73 20 63  pplication IDs c
4450: 61 6e 20 62 65 20 73 65 65 6e 20 62 79 20 63 6f  an be seen by co
4460: 6e 73 75 6c 74 69 6e 67 20 74 68 65 0a 5b 68 74  nsulting the.[ht
4470: 74 70 3a 2f 2f 77 77 77 2e 73 71 6c 69 74 65 2e  tp://www.sqlite.
4480: 6f 72 67 2f 73 72 63 2f 61 72 74 69 66 61 63 74  org/src/artifact
4490: 3f 63 69 3d 74 72 75 6e 6b 26 66 69 6c 65 6e 61  ?ci=trunk&filena
44a0: 6d 65 3d 6d 61 67 69 63 2e 74 78 74 7c 6d 61 67  me=magic.txt|mag
44b0: 69 63 2e 74 78 74 5d 0a 66 69 6c 65 20 69 6e 20  ic.txt].file in 
44c0: 74 68 65 20 53 51 4c 69 74 65 20 73 6f 75 72 63  the SQLite sourc
44d0: 65 20 72 65 70 6f 73 69 74 6f 72 79 2e 3c 2f 70  e repository.</p
44e0: 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
44f0: 65 6e 74 20 76 61 6c 69 64 66 6f 72 20 7b 76 65  ent validfor {ve
4500: 72 73 69 6f 6e 2d 76 61 6c 69 64 2d 66 6f 72 20  rsion-valid-for 
4510: 6e 75 6d 62 65 72 7d 3c 2f 74 63 6c 3e 0a 3c 68  number}</tcl>.<h
4520: 33 3e 57 72 69 74 65 20 6c 69 62 72 61 72 79 20  3>Write library 
4530: 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 61  version number a
4540: 6e 64 20 76 65 72 73 69 6f 6e 2d 76 61 6c 69 64  nd version-valid
4550: 2d 66 6f 72 20 6e 75 6d 62 65 72 3c 2f 68 33 3e  -for number</h3>
4560: 0a 0a 3c 70 3e 5e 54 68 65 20 34 2d 62 79 74 65  ..<p>^The 4-byte
4570: 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65   big-endian inte
4580: 67 65 72 20 61 74 20 6f 66 66 73 65 74 20 39 36  ger at offset 96
4590: 20 73 74 6f 72 65 73 20 74 68 65 20 0a 5b 53 51   stores the .[SQ
45a0: 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d  LITE_VERSION_NUM
45b0: 42 45 52 5d 20 76 61 6c 75 65 20 66 6f 72 20 74  BER] value for t
45c0: 68 65 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72  he SQLite librar
45d0: 79 20 74 68 61 74 20 6d 6f 73 74 0a 72 65 63 65  y that most.rece
45e0: 6e 74 6c 79 20 6d 6f 64 69 66 69 65 64 20 74 68  ntly modified th
45f0: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  e database file.
4600: 20 20 5e 54 68 65 20 34 2d 62 79 74 65 20 62 69    ^The 4-byte bi
4610: 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72  g-endian integer
4620: 20 61 74 0a 6f 66 66 73 65 74 20 39 32 20 69 73   at.offset 92 is
4630: 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
4640: 65 20 5b 63 68 61 6e 67 65 20 63 6f 75 6e 74 65  e [change counte
4650: 72 5d 20 77 68 65 6e 20 74 68 65 20 76 65 72 73  r] when the vers
4660: 69 6f 6e 20 6e 75 6d 62 65 72 0a 77 61 73 20 73  ion number.was s
4670: 74 6f 72 65 64 2e 20 20 54 68 65 20 69 6e 74 65  tored.  The inte
4680: 67 65 72 20 61 74 20 6f 66 66 73 65 74 20 39 32  ger at offset 92
4690: 20 69 6e 64 69 63 61 74 65 73 20 77 68 69 63 68   indicates which
46a0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 74 68 65   transaction.the
46b0: 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20   version number 
46c0: 69 73 20 76 61 6c 69 64 20 66 6f 72 20 61 6e 64  is valid for and
46d0: 20 69 73 20 73 6f 6d 65 74 69 6d 65 73 20 63 61   is sometimes ca
46e0: 6c 6c 65 64 20 74 68 65 0a 22 76 65 72 73 69 6f  lled the."versio
46f0: 6e 2d 76 61 6c 69 64 2d 66 6f 72 20 6e 75 6d 62  n-valid-for numb
4700: 65 72 22 2e 0a 0a 3c 68 33 3e 48 65 61 64 65 72  er"...<h3>Header
4710: 20 73 70 61 63 65 20 72 65 73 65 72 76 65 64 20   space reserved 
4720: 66 6f 72 20 65 78 70 61 6e 73 69 6f 6e 3c 2f 68  for expansion</h
4730: 33 3e 0a 0a 3c 70 3e 41 6c 6c 20 6f 74 68 65 72  3>..<p>All other
4740: 20 62 79 74 65 73 20 6f 66 20 74 68 65 20 64 61   bytes of the da
4750: 74 61 62 61 73 65 20 66 69 6c 65 20 68 65 61 64  tabase file head
4760: 65 72 20 61 72 65 20 72 65 73 65 72 76 65 64 20  er are reserved 
4770: 66 6f 72 0a 66 75 74 75 72 65 20 65 78 70 61 6e  for.future expan
4780: 73 69 6f 6e 20 61 6e 64 20 6d 75 73 74 20 62 65  sion and must be
4790: 20 73 65 74 20 74 6f 20 7a 65 72 6f 2e 3c 2f 70   set to zero.</p
47a0: 3e 0a 0a 3c 68 32 3e 54 68 65 20 4c 6f 63 6b 2d  >..<h2>The Lock-
47b0: 42 79 74 65 20 50 61 67 65 3c 2f 68 32 3e 0a 0a  Byte Page</h2>..
47c0: 3c 70 3e 54 68 65 20 6c 6f 63 6b 2d 62 79 74 65  <p>The lock-byte
47d0: 20 70 61 67 65 20 69 73 20 74 68 65 20 73 69 6e   page is the sin
47e0: 67 6c 65 20 70 61 67 65 20 6f 66 20 74 68 65 20  gle page of the 
47f0: 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 74 68  database file.th
4800: 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  at contains the 
4810: 62 79 74 65 73 20 61 74 20 6f 66 66 73 65 74 73  bytes at offsets
4820: 20 62 65 74 77 65 65 6e 20 31 30 37 33 37 34 31   between 1073741
4830: 38 32 34 20 61 6e 64 20 31 30 37 33 37 34 32 33  824 and 10737423
4840: 33 35 2c 0a 69 6e 63 6c 75 73 69 76 65 2e 20 20  35,.inclusive.  
4850: 41 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  A database file 
4860: 74 68 61 74 20 69 73 20 6c 65 73 73 20 74 68 61  that is less tha
4870: 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 31 30  n or equal to 10
4880: 37 33 37 34 31 38 32 34 20 62 79 74 65 73 20 0a  73741824 bytes .
4890: 69 6e 20 73 69 7a 65 20 63 6f 6e 74 61 69 6e 73  in size contains
48a0: 20 6e 6f 20 6c 6f 63 6b 2d 62 79 74 65 20 70 61   no lock-byte pa
48b0: 67 65 2e 20 20 41 20 64 61 74 61 62 61 73 65 20  ge.  A database 
48c0: 66 69 6c 65 20 6c 61 72 67 65 72 20 74 68 61 6e  file larger than
48d0: 0a 31 30 37 33 37 34 31 38 32 34 20 63 6f 6e 74  .1073741824 cont
48e0: 61 69 6e 73 20 65 78 61 63 74 6c 79 20 6f 6e 65  ains exactly one
48f0: 20 6c 6f 63 6b 2d 62 79 74 65 20 70 61 67 65 2e   lock-byte page.
4900: 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 6c 6f  .</p>..<p>The lo
4910: 63 6b 2d 62 79 74 65 20 70 61 67 65 20 69 73 20  ck-byte page is 
4920: 73 65 74 20 61 73 69 64 65 20 66 6f 72 20 75 73  set aside for us
4930: 65 20 62 79 20 74 68 65 20 6f 70 65 72 61 74 69  e by the operati
4940: 6e 67 2d 73 79 73 74 65 6d 20 73 70 65 63 69 66  ng-system specif
4950: 69 63 0a 5b 56 46 53 5d 20 69 6d 70 6c 65 6d 65  ic.[VFS] impleme
4960: 6e 74 61 74 69 6f 6e 20 69 6e 20 69 6d 70 6c 65  ntation in imple
4970: 6d 65 6e 74 69 6e 67 20 74 68 65 20 64 61 74 61  menting the data
4980: 62 61 73 65 20 66 69 6c 65 20 6c 6f 63 6b 69 6e  base file lockin
4990: 67 20 70 72 69 6d 69 74 69 76 65 73 2e 0a 5e 53  g primitives..^S
49a0: 51 4c 69 74 65 20 64 6f 65 73 20 6e 6f 74 20 75  QLite does not u
49b0: 73 65 20 74 68 65 20 6c 6f 63 6b 2d 62 79 74 65  se the lock-byte
49c0: 20 70 61 67 65 2e 20 20 5e 54 68 65 20 53 51 4c   page.  ^The SQL
49d0: 69 74 65 20 63 6f 72 65 20 0a 77 69 6c 6c 20 6e  ite core .will n
49e0: 65 76 65 72 20 72 65 61 64 20 6f 72 20 77 72 69  ever read or wri
49f0: 74 65 20 74 68 65 20 6c 6f 63 6b 2d 62 79 74 65  te the lock-byte
4a00: 20 70 61 67 65 2c 0a 74 68 6f 75 67 68 20 6f 70   page,.though op
4a10: 65 72 61 74 69 6e 67 2d 73 79 73 74 65 6d 20 73  erating-system s
4a20: 70 65 63 69 66 69 63 20 5b 56 46 53 5d 20 0a 69  pecific [VFS] .i
4a30: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20 6d  mplementations m
4a40: 61 79 20 63 68 6f 6f 73 65 20 74 6f 20 72 65 61  ay choose to rea
4a50: 64 20 6f 72 20 77 72 69 74 65 20 62 79 74 65 73  d or write bytes
4a60: 20 6f 6e 20 74 68 65 20 6c 6f 63 6b 2d 62 79 74   on the lock-byt
4a70: 65 20 0a 70 61 67 65 20 61 63 63 6f 72 64 69 6e  e .page accordin
4a80: 67 20 74 6f 20 74 68 65 20 0a 6e 65 65 64 73 20  g to the .needs 
4a90: 61 6e 64 20 70 72 6f 63 6c 69 76 69 74 69 65 73  and proclivities
4aa0: 20 6f 66 20 74 68 65 20 75 6e 64 65 72 6c 79 69   of the underlyi
4ab0: 6e 67 20 73 79 73 74 65 6d 2e 20 20 54 68 65 20  ng system.  The 
4ac0: 75 6e 69 78 20 61 6e 64 20 77 69 6e 33 32 0a 5b  unix and win32.[
4ad0: 56 46 53 5d 20 69 6d 70 6c 65 6d 65 6e 74 61 74  VFS] implementat
4ae0: 69 6f 6e 73 20 74 68 61 74 20 63 6f 6d 65 20 62  ions that come b
4af0: 75 69 6c 74 20 69 6e 74 6f 20 53 51 4c 69 74 65  uilt into SQLite
4b00: 20 64 6f 20 6e 6f 74 20 77 72 69 74 65 20 74 6f   do not write to
4b10: 20 74 68 65 0a 6c 6f 63 6b 2d 62 79 74 65 20 70   the.lock-byte p
4b20: 61 67 65 2c 20 62 75 74 20 74 68 69 72 64 2d 70  age, but third-p
4b30: 61 72 74 79 20 56 46 53 20 69 6d 70 6c 65 6d 65  arty VFS impleme
4b40: 6e 74 61 74 69 6f 6e 73 20 66 6f 72 0a 6f 74 68  ntations for.oth
4b50: 65 72 20 6f 70 65 72 61 74 69 6e 67 20 73 79 73  er operating sys
4b60: 74 65 6d 73 20 6d 69 67 68 74 2e 3c 2f 70 3e 0a  tems might.</p>.
4b70: 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
4b80: 74 20 7b 66 72 65 65 6c 69 73 74 7d 20 7b 66 72  t {freelist} {fr
4b90: 65 65 6c 69 73 74 7d 20 7b 66 72 65 65 2d 70 61  eelist} {free-pa
4ba0: 67 65 20 6c 69 73 74 7d 3c 2f 74 63 6c 3e 0a 3c  ge list}</tcl>.<
4bb0: 68 32 3e 54 68 65 20 46 72 65 65 6c 69 73 74 3c  h2>The Freelist<
4bc0: 2f 68 32 3e 0a 0a 3c 70 3e 41 20 64 61 74 61 62  /h2>..<p>A datab
4bd0: 61 73 65 20 66 69 6c 65 20 6d 69 67 68 74 20 63  ase file might c
4be0: 6f 6e 74 61 69 6e 20 6f 6e 65 20 6f 72 20 6d 6f  ontain one or mo
4bf0: 72 65 20 70 61 67 65 73 20 74 68 61 74 20 61 72  re pages that ar
4c00: 65 20 6e 6f 74 20 69 6e 0a 61 63 74 69 76 65 20  e not in.active 
4c10: 75 73 65 2e 20 20 55 6e 75 73 65 64 20 70 61 67  use.  Unused pag
4c20: 65 73 20 63 61 6e 20 63 6f 6d 65 20 61 62 6f 75  es can come abou
4c30: 74 2c 20 66 6f 72 20 65 78 61 6d 70 6c 65 2c 20  t, for example, 
4c40: 77 68 65 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  when information
4c50: 0a 69 73 20 64 65 6c 65 74 65 64 20 66 72 6f 6d  .is deleted from
4c60: 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 20   the database.  
4c70: 55 6e 75 73 65 64 20 70 61 67 65 73 20 61 72 65  Unused pages are
4c80: 20 73 74 6f 72 65 64 20 6f 6e 20 74 68 65 20 66   stored on the f
4c90: 72 65 65 6c 69 73 74 0a 61 6e 64 20 61 72 65 20  reelist.and are 
4ca0: 72 65 75 73 65 64 20 77 68 65 6e 20 61 64 64 69  reused when addi
4cb0: 74 69 6f 6e 61 6c 20 70 61 67 65 73 20 61 72 65  tional pages are
4cc0: 20 72 65 71 75 69 72 65 64 2e 3c 2f 70 3e 0a 0a   required.</p>..
4cd0: 3c 70 3e 54 68 65 20 66 72 65 65 6c 69 73 74 20  <p>The freelist 
4ce0: 69 73 20 6f 72 67 61 6e 69 7a 65 64 20 61 73 20  is organized as 
4cf0: 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66  a linked list of
4d00: 20 66 72 65 65 6c 69 73 74 20 74 72 75 6e 6b 20   freelist trunk 
4d10: 70 61 67 65 73 0a 77 69 74 68 20 65 61 63 68 20  pages.with each 
4d20: 74 72 75 6e 6b 20 70 61 67 65 73 20 63 6f 6e 74  trunk pages cont
4d30: 61 69 6e 69 6e 67 20 70 61 67 65 20 6e 75 6d 62  aining page numb
4d40: 65 72 73 20 66 6f 72 20 7a 65 72 6f 20 6f 72 20  ers for zero or 
4d50: 6d 6f 72 65 20 66 72 65 65 6c 69 73 74 0a 6c 65  more freelist.le
4d60: 61 66 20 70 61 67 65 73 2e 3c 2f 70 3e 0a 0a 3c  af pages.</p>..<
4d70: 70 3e 41 20 66 72 65 65 6c 69 73 74 20 74 72 75  p>A freelist tru
4d80: 6e 6b 20 70 61 67 65 20 63 6f 6e 73 69 73 74 73  nk page consists
4d90: 20 6f 66 20 61 6e 20 61 72 72 61 79 20 6f 66 20   of an array of 
4da0: 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61  4-byte big-endia
4db0: 6e 20 69 6e 74 65 67 65 72 73 2e 0a 54 68 65 20  n integers..The 
4dc0: 73 69 7a 65 20 6f 66 20 74 68 65 20 61 72 72 61  size of the arra
4dd0: 79 20 69 73 20 61 73 20 6d 61 6e 79 20 69 6e 74  y is as many int
4de0: 65 67 65 72 73 20 61 73 20 77 69 6c 6c 20 66 69  egers as will fi
4df0: 74 20 69 6e 20 74 68 65 20 75 73 61 62 6c 65 20  t in the usable 
4e00: 73 70 61 63 65 0a 6f 66 20 61 20 70 61 67 65 2e  space.of a page.
4e10: 20 20 54 68 65 20 6d 69 6e 69 6d 75 6d 20 75 73    The minimum us
4e20: 61 62 6c 65 20 73 70 61 63 65 20 69 73 20 34 38  able space is 48
4e30: 30 20 62 79 74 65 73 20 73 6f 20 74 68 65 20 61  0 bytes so the a
4e40: 72 72 61 79 20 77 69 6c 6c 20 61 6c 77 61 79 73  rray will always
4e50: 0a 62 65 20 61 74 20 6c 65 61 73 74 20 31 32 30  .be at least 120
4e60: 20 65 6e 74 72 69 65 73 20 69 6e 20 6c 65 6e 67   entries in leng
4e70: 74 68 2e 20 20 5e 54 68 65 20 66 69 72 73 74 20  th.  ^The first 
4e80: 69 6e 74 65 67 65 72 20 6f 6e 20 61 20 66 72 65  integer on a fre
4e90: 65 6c 69 73 74 20 74 72 75 6e 6b 0a 70 61 67 65  elist trunk.page
4ea0: 20 69 73 20 74 68 65 20 70 61 67 65 20 6e 75 6d   is the page num
4eb0: 62 65 72 20 6f 66 20 74 68 65 20 6e 65 78 74 20  ber of the next 
4ec0: 66 72 65 65 6c 69 73 74 20 74 72 75 6e 6b 20 70  freelist trunk p
4ed0: 61 67 65 20 69 6e 20 74 68 65 20 6c 69 73 74 20  age in the list 
4ee0: 6f 72 20 7a 65 72 6f 20 0a 69 66 20 74 68 69 73  or zero .if this
4ef0: 20 69 73 20 74 68 65 20 6c 61 73 74 20 66 72 65   is the last fre
4f00: 65 6c 69 73 74 20 74 72 75 6e 6b 20 70 61 67 65  elist trunk page
4f10: 2e 20 20 5e 54 68 65 20 73 65 63 6f 6e 64 20 69  .  ^The second i
4f20: 6e 74 65 67 65 72 20 6f 6e 20 61 20 66 72 65 65  nteger on a free
4f30: 6c 69 73 74 0a 74 72 75 6e 6b 20 70 61 67 65 20  list.trunk page 
4f40: 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  is the number of
4f50: 20 6c 65 61 66 20 70 61 67 65 20 70 6f 69 6e 74   leaf page point
4f60: 65 72 73 20 74 6f 20 66 6f 6c 6c 6f 77 2e 20 20  ers to follow.  
4f70: 0a 5e 28 43 61 6c 6c 20 74 68 65 20 73 65 63 6f  .^(Call the seco
4f80: 6e 64 20 69 6e 74 65 67 65 72 20 6f 6e 20 61 20  nd integer on a 
4f90: 66 72 65 65 6c 69 73 74 20 74 72 75 6e 6b 20 70  freelist trunk p
4fa0: 61 67 65 20 4c 2e 0a 49 66 20 4c 20 69 73 20 67  age L..If L is g
4fb0: 72 65 61 74 65 72 20 74 68 61 6e 20 7a 65 72 6f  reater than zero
4fc0: 20 74 68 65 6e 20 69 6e 74 65 67 65 72 73 20 77   then integers w
4fd0: 69 74 68 20 61 72 72 61 79 20 69 6e 64 65 78 65  ith array indexe
4fe0: 73 20 62 65 74 77 65 65 6e 20 32 20 61 6e 64 0a  s between 2 and.
4ff0: 4c 2b 31 20 69 6e 63 6c 75 73 69 76 65 20 63 6f  L+1 inclusive co
5000: 6e 74 61 69 6e 20 70 61 67 65 20 6e 75 6d 62 65  ntain page numbe
5010: 72 73 20 66 6f 72 20 66 72 65 65 6c 69 73 74 20  rs for freelist 
5020: 6c 65 61 66 20 70 61 67 65 73 2e 29 5e 3c 2f 70  leaf pages.)^</p
5030: 3e 0a 0a 3c 70 3e 46 72 65 65 6c 69 73 74 20 6c  >..<p>Freelist l
5040: 65 61 66 20 70 61 67 65 73 20 63 6f 6e 74 61 69  eaf pages contai
5050: 6e 20 6e 6f 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  n no information
5060: 2e 20 20 5e 53 51 4c 69 74 65 20 61 76 6f 69 64  .  ^SQLite avoid
5070: 73 20 72 65 61 64 69 6e 67 20 6f 72 0a 77 72 69  s reading or.wri
5080: 74 69 6e 67 20 66 72 65 65 6c 69 73 74 20 6c 65  ting freelist le
5090: 61 66 20 70 61 67 65 73 20 69 6e 20 6f 72 64 65  af pages in orde
50a0: 72 20 74 6f 20 72 65 64 75 63 65 20 64 69 73 6b  r to reduce disk
50b0: 20 49 2f 4f 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 20   I/O.</p>..<p>A 
50c0: 62 75 67 20 69 6e 20 53 51 4c 69 74 65 20 76 65  bug in SQLite ve
50d0: 72 73 69 6f 6e 73 20 70 72 69 6f 72 20 74 6f 20  rsions prior to 
50e0: 33 2e 36 2e 30 20 63 61 75 73 65 64 20 74 68 65  3.6.0 caused the
50f0: 20 64 61 74 61 62 61 73 65 20 74 6f 20 62 65 0a   database to be.
5100: 72 65 70 6f 72 74 65 64 20 61 73 20 63 6f 72 72  reported as corr
5110: 75 70 74 20 69 66 20 61 6e 79 20 6f 66 20 74 68  upt if any of th
5120: 65 20 6c 61 73 74 20 36 20 65 6e 74 72 69 65 73  e last 6 entries
5130: 20 69 6e 20 74 68 65 20 66 72 65 65 6c 69 73 74   in the freelist
5140: 20 74 72 75 6e 6b 20 70 61 67 65 20 0a 61 72 72   trunk page .arr
5150: 61 79 20 63 6f 6e 74 61 69 6e 65 64 20 6e 6f 6e  ay contained non
5160: 2d 7a 65 72 6f 20 76 61 6c 75 65 73 2e 20 20 4e  -zero values.  N
5170: 65 77 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66  ewer versions of
5180: 20 53 51 4c 69 74 65 20 64 6f 20 6e 6f 74 20 68   SQLite do not h
5190: 61 76 65 0a 74 68 69 73 20 70 72 6f 62 6c 65 6d  ave.this problem
51a0: 2e 20 20 5e 48 6f 77 65 76 65 72 2c 20 6e 65 77  .  ^However, new
51b0: 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53  er versions of S
51c0: 51 4c 69 74 65 20 73 74 69 6c 6c 20 61 76 6f 69  QLite still avoi
51d0: 64 20 75 73 69 6e 67 20 74 68 65 20 0a 6c 61 73  d using the .las
51e0: 74 20 73 69 78 20 65 6e 74 72 69 65 73 20 69 6e  t six entries in
51f0: 20 74 68 65 20 66 72 65 65 6c 69 73 74 20 74 72   the freelist tr
5200: 75 6e 6b 20 70 61 67 65 20 61 72 72 61 79 20 69  unk page array i
5210: 6e 20 6f 72 64 65 72 20 74 68 61 74 20 64 61 74  n order that dat
5220: 61 62 61 73 65 0a 66 69 6c 65 73 20 63 72 65 61  abase.files crea
5230: 74 65 64 20 62 79 20 6e 65 77 65 72 20 76 65 72  ted by newer ver
5240: 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20  sions of SQLite 
5250: 63 61 6e 20 62 65 20 72 65 61 64 20 62 79 20 6f  can be read by o
5260: 6c 64 65 72 20 76 65 72 73 69 6f 6e 73 0a 6f 66  lder versions.of
5270: 20 53 51 4c 69 74 65 2e 3c 2f 70 3e 0a 0a 3c 70   SQLite.</p>..<p
5280: 3e 5e 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  >^The number of 
5290: 66 72 65 65 6c 69 73 74 20 70 61 67 65 73 20 69  freelist pages i
52a0: 73 20 73 74 6f 72 65 64 20 61 73 20 61 20 34 2d  s stored as a 4-
52b0: 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20  byte big-endian 
52c0: 69 6e 74 65 67 65 72 0a 69 6e 20 74 68 65 20 64  integer.in the d
52d0: 61 74 61 62 61 73 65 20 68 65 61 64 65 72 20 61  atabase header a
52e0: 74 20 61 6e 20 6f 66 66 73 65 74 20 6f 66 20 33  t an offset of 3
52f0: 36 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e  6 from the begin
5300: 6e 69 6e 67 20 6f 66 20 74 68 65 20 66 69 6c 65  ning of the file
5310: 2e 0a 5e 54 68 65 20 64 61 74 61 62 61 73 65 20  ..^The database 
5320: 68 65 61 64 65 72 20 61 6c 73 6f 20 73 74 6f 72  header also stor
5330: 65 73 20 74 68 65 20 70 61 67 65 20 6e 75 6d 62  es the page numb
5340: 65 72 20 6f 66 20 74 68 65 20 66 69 72 73 74 20  er of the first 
5350: 66 72 65 65 6c 69 73 74 20 74 72 75 6e 6b 0a 70  freelist trunk.p
5360: 61 67 65 20 61 73 20 61 20 34 2d 62 79 74 65 20  age as a 4-byte 
5370: 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67  big-endian integ
5380: 65 72 20 61 74 20 61 6e 20 6f 66 66 73 65 74 20  er at an offset 
5390: 6f 66 20 33 32 20 66 72 6f 6d 20 74 68 65 20 62  of 32 from the b
53a0: 65 67 69 6e 6e 69 6e 67 0a 6f 66 20 74 68 65 20  eginning.of the 
53b0: 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  file.</p>..<tcl>
53c0: 68 64 5f 66 72 61 67 6d 65 6e 74 20 62 74 72 65  hd_fragment btre
53d0: 65 20 7b 42 2a 2d 54 72 65 65 73 7d 20 7b 42 2d  e {B*-Trees} {B-
53e0: 74 72 65 65 7d 3c 2f 74 63 6c 3e 0a 3c 68 32 3e  tree}</tcl>.<h2>
53f0: 42 2d 74 72 65 65 20 50 61 67 65 73 3c 2f 68 32  B-tree Pages</h2
5400: 3e 0a 0a 3c 70 3e 54 68 65 20 62 2d 74 72 65 65  >..<p>The b-tree
5410: 20 61 6c 67 6f 72 69 74 68 6d 20 70 72 6f 76 69   algorithm provi
5420: 64 65 73 20 6b 65 79 2f 64 61 74 61 20 73 74 6f  des key/data sto
5430: 72 61 67 65 20 77 69 74 68 20 75 6e 69 71 75 65  rage with unique
5440: 20 61 6e 64 0a 6f 72 64 65 72 65 64 20 6b 65 79   and.ordered key
5450: 73 20 6f 6e 20 70 61 67 65 2d 6f 72 69 65 6e 74  s on page-orient
5460: 65 64 20 73 74 6f 72 61 67 65 20 64 65 76 69 63  ed storage devic
5470: 65 73 2e 0a 46 6f 72 20 62 61 63 6b 67 72 6f 75  es..For backgrou
5480: 6e 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6f  nd information o
5490: 6e 20 62 2d 74 72 65 65 73 2c 20 73 65 65 0a 4b  n b-trees, see.K
54a0: 6e 75 74 68 2c 20 3c 75 3e 54 68 65 20 41 72 74  nuth, <u>The Art
54b0: 20 4f 66 20 43 6f 6d 70 75 74 65 72 20 50 72 6f   Of Computer Pro
54c0: 67 72 61 6d 6d 69 6e 67 3c 2f 75 3e 2c 20 56 6f  gramming</u>, Vo
54d0: 6c 75 6d 65 20 33 20 22 53 6f 72 74 69 6e 67 0a  lume 3 "Sorting.
54e0: 61 6e 64 20 53 65 61 72 63 68 69 6e 67 22 2c 20  and Searching", 
54f0: 70 61 67 65 73 20 34 37 31 2d 34 37 39 2e 20 20  pages 471-479.  
5500: 54 77 6f 20 6b 69 6e 64 73 20 6f 66 20 62 2d 74  Two kinds of b-t
5510: 72 65 65 73 20 61 72 65 20 75 73 65 64 20 62 79  rees are used by
5520: 0a 53 51 4c 69 74 65 2e 20 20 54 68 65 20 61 6c  .SQLite.  The al
5530: 67 6f 72 69 74 68 6d 20 74 68 61 74 20 4b 6e 75  gorithm that Knu
5540: 74 68 20 63 61 6c 6c 73 20 22 42 2a 2d 54 72 65  th calls "B*-Tre
5550: 65 22 20 73 74 6f 72 65 73 20 61 6c 6c 20 64 61  e" stores all da
5560: 74 61 0a 69 6e 20 74 68 65 20 6c 65 61 76 65 73  ta.in the leaves
5570: 20 6f 66 20 74 68 65 20 74 72 65 65 2e 20 20 53   of the tree.  S
5580: 51 4c 69 74 65 20 63 61 6c 6c 73 20 74 68 69 73  QLite calls this
5590: 20 76 61 72 69 65 74 79 20 6f 66 20 62 2d 74 72   variety of b-tr
55a0: 65 65 0a 61 20 22 74 61 62 6c 65 20 62 2d 74 72  ee.a "table b-tr
55b0: 65 65 22 2e 20 54 68 65 20 61 6c 67 6f 72 69 74  ee". The algorit
55c0: 68 6d 20 74 68 61 74 20 4b 6e 75 74 68 20 63 61  hm that Knuth ca
55d0: 6c 6c 73 20 73 69 6d 70 6c 79 20 22 42 2d 54 72  lls simply "B-Tr
55e0: 65 65 22 0a 73 74 6f 72 65 73 20 62 6f 74 68 20  ee".stores both 
55f0: 74 68 65 20 6b 65 79 20 61 6e 64 20 74 68 65 20  the key and the 
5600: 64 61 74 61 20 74 6f 67 65 74 68 65 72 20 69 6e  data together in
5610: 20 62 6f 74 68 20 6c 65 61 76 65 73 0a 61 6e 64   both leaves.and
5620: 20 69 6e 20 69 6e 74 65 72 69 6f 72 20 70 61 67   in interior pag
5630: 65 73 2e 20 20 49 6e 20 74 68 65 20 53 51 4c 69  es.  In the SQLi
5640: 74 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  te implementatio
5650: 6e 2c 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a  n, the original.
5660: 42 2d 54 72 65 65 20 61 6c 67 6f 72 69 74 68 6d  B-Tree algorithm
5670: 20 73 74 6f 72 65 73 20 6b 65 79 73 20 6f 6e 6c   stores keys onl
5680: 79 2c 20 6f 6d 69 74 74 69 6e 67 20 74 68 65 20  y, omitting the 
5690: 64 61 74 61 20 65 6e 74 69 72 65 6c 79 2c 20 61  data entirely, a
56a0: 6e 64 0a 69 73 20 63 61 6c 6c 65 64 20 61 6e 20  nd.is called an 
56b0: 22 69 6e 64 65 78 20 62 2d 74 72 65 65 22 2e 0a  "index b-tree"..
56c0: 0a 3c 70 3e 41 20 62 2d 74 72 65 65 20 70 61 67  .<p>A b-tree pag
56d0: 65 20 69 73 20 65 69 74 68 65 72 20 61 6e 20 69  e is either an i
56e0: 6e 74 65 72 69 6f 72 20 70 61 67 65 20 6f 72 20  nterior page or 
56f0: 61 20 6c 65 61 66 20 70 61 67 65 2e 0a 41 20 6c  a leaf page..A l
5700: 65 61 66 20 70 61 67 65 20 63 6f 6e 74 61 69 6e  eaf page contain
5710: 73 20 6b 65 79 73 20 61 6e 64 20 69 6e 20 74 68  s keys and in th
5720: 65 20 63 61 73 65 20 6f 66 20 61 20 74 61 62 6c  e case of a tabl
5730: 65 20 62 2d 74 72 65 65 20 65 61 63 68 0a 6b 65  e b-tree each.ke
5740: 79 20 68 61 73 20 61 73 73 6f 63 69 61 74 65 64  y has associated
5750: 20 64 61 74 61 2e 20 20 41 6e 20 69 6e 74 65 72   data.  An inter
5760: 69 6f 72 20 70 61 67 65 20 63 6f 6e 74 61 69 6e  ior page contain
5770: 73 0a 4b 20 6b 65 79 73 20 74 6f 67 65 74 68 65  s.K keys togethe
5780: 72 20 77 69 74 68 20 4b 2b 31 20 70 6f 69 6e 74  r with K+1 point
5790: 65 72 73 20 74 6f 20 63 68 69 6c 64 20 62 2d 74  ers to child b-t
57a0: 72 65 65 20 70 61 67 65 73 2e 0a 41 20 22 70 6f  ree pages..A "po
57b0: 69 6e 74 65 72 22 20 69 6e 20 61 6e 20 69 6e 74  inter" in an int
57c0: 65 72 69 6f 72 20 62 2d 74 72 65 65 20 70 61 67  erior b-tree pag
57d0: 65 20 69 73 20 6a 75 73 74 20 74 68 65 20 33 31  e is just the 31
57e0: 2d 62 69 74 20 69 6e 74 65 67 65 72 0a 70 61 67  -bit integer.pag
57f0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20  e number of the 
5800: 63 68 69 6c 64 20 70 61 67 65 2e 3c 2f 70 3e 0a  child page.</p>.
5810: 0a 3c 70 3e 44 65 66 69 6e 65 20 74 68 65 20 64  .<p>Define the d
5820: 65 70 74 68 0a 6f 66 20 61 20 6c 65 61 66 20 62  epth.of a leaf b
5830: 2d 74 72 65 65 20 74 6f 20 62 65 20 31 20 61 6e  -tree to be 1 an
5840: 64 20 74 68 65 20 64 65 70 74 68 20 6f 66 20 61  d the depth of a
5850: 6e 79 20 69 6e 74 65 72 69 6f 72 20 62 2d 74 72  ny interior b-tr
5860: 65 65 20 74 6f 20 62 65 20 6f 6e 65 0a 6d 6f 72  ee to be one.mor
5870: 65 20 74 68 61 6e 20 74 68 65 20 6d 61 78 69 6d  e than the maxim
5880: 75 6d 20 64 65 70 74 68 20 6f 66 20 61 6e 79 20  um depth of any 
5890: 6f 66 20 69 74 73 20 63 68 69 6c 64 72 65 6e 2e  of its children.
58a0: 20 20 5e 49 6e 20 61 20 77 65 6c 6c 2d 66 6f 72    ^In a well-for
58b0: 6d 65 64 0a 64 61 74 61 62 61 73 65 2c 20 61 6c  med.database, al
58c0: 6c 20 63 68 69 6c 64 72 65 6e 20 6f 66 20 61 6e  l children of an
58d0: 20 69 6e 74 65 72 69 6f 72 20 62 2d 74 72 65 65   interior b-tree
58e0: 20 68 61 76 65 20 74 68 65 20 73 61 6d 65 20 64   have the same d
58f0: 65 70 74 68 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 6e  epth.</p>..<p>In
5900: 20 61 6e 20 69 6e 74 65 72 69 6f 72 20 62 2d 74   an interior b-t
5910: 72 65 65 20 70 61 67 65 2c 20 74 68 65 20 70 6f  ree page, the po
5920: 69 6e 74 65 72 73 20 61 6e 64 20 6b 65 79 73 20  inters and keys 
5930: 6c 6f 67 69 63 61 6c 6c 79 20 61 6c 74 65 72 6e  logically altern
5940: 61 74 65 20 0a 77 69 74 68 20 61 20 70 6f 69 6e  ate .with a poin
5950: 74 65 72 20 6f 6e 20 62 6f 74 68 20 65 6e 64 73  ter on both ends
5960: 2e 20 28 54 68 65 20 70 72 65 76 69 6f 75 73 20  . (The previous 
5970: 73 65 6e 74 65 6e 63 65 20 69 73 20 74 6f 20 62  sentence is to b
5980: 65 20 75 6e 64 65 72 73 74 6f 6f 64 0a 63 6f 6e  e understood.con
5990: 63 65 70 74 75 61 6c 6c 79 20 2d 20 74 68 65 20  ceptually - the 
59a0: 61 63 74 75 61 6c 20 6c 61 79 6f 75 74 20 6f 66  actual layout of
59b0: 20 74 68 65 20 6b 65 79 73 20 61 6e 64 0a 70 6f   the keys and.po
59c0: 69 6e 74 65 72 73 20 77 69 74 68 69 6e 20 74 68  inters within th
59d0: 65 20 70 61 67 65 20 69 73 20 6d 6f 72 65 20 63  e page is more c
59e0: 6f 6d 70 6c 69 63 61 74 65 64 20 61 6e 64 20 77  omplicated and w
59f0: 69 6c 6c 20 62 65 20 64 65 73 63 72 69 62 65 64  ill be described
5a00: 20 69 6e 0a 74 68 65 20 73 65 71 75 65 6c 2e 29   in.the sequel.)
5a10: 20 20 41 6c 6c 20 6b 65 79 73 20 77 69 74 68 69    All keys withi
5a20: 6e 20 74 68 65 20 73 61 6d 65 20 70 61 67 65 20  n the same page 
5a30: 61 72 65 20 75 6e 69 71 75 65 20 61 6e 64 20 61  are unique and a
5a40: 72 65 20 6c 6f 67 69 63 61 6c 6c 79 0a 6f 72 67  re logically.org
5a50: 61 6e 69 7a 65 64 20 69 6e 20 61 73 63 65 6e 64  anized in ascend
5a60: 69 6e 67 20 6f 72 64 65 72 20 66 72 6f 6d 20 6c  ing order from l
5a70: 65 66 74 20 74 6f 20 72 69 67 68 74 2e 20 20 28  eft to right.  (
5a80: 41 67 61 69 6e 2c 20 74 68 69 73 20 6f 72 64 65  Again, this orde
5a90: 72 69 6e 67 0a 69 73 20 6c 6f 67 69 63 61 6c 2c  ring.is logical,
5aa0: 20 6e 6f 74 20 70 68 79 73 69 63 61 6c 2e 20 20   not physical.  
5ab0: 54 68 65 20 61 63 74 75 61 6c 20 6c 6f 63 61 74  The actual locat
5ac0: 69 6f 6e 20 6f 66 20 6b 65 79 73 20 77 69 74 68  ion of keys with
5ad0: 69 6e 20 74 68 65 20 70 61 67 65 0a 69 73 20 61  in the page.is a
5ae0: 72 62 69 74 72 61 72 79 2e 29 20 5e 46 6f 72 20  rbitrary.) ^For 
5af0: 61 6e 79 20 6b 65 79 20 58 2c 20 70 6f 69 6e 74  any key X, point
5b00: 65 72 73 20 74 6f 20 74 68 65 20 6c 65 66 74 0a  ers to the left.
5b10: 6f 66 20 61 20 58 20 72 65 66 65 72 20 74 6f 20  of a X refer to 
5b20: 62 2d 74 72 65 65 20 70 61 67 65 73 20 6f 6e 20  b-tree pages on 
5b30: 77 68 69 63 68 20 61 6c 6c 20 6b 65 79 73 20 61  which all keys a
5b40: 72 65 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20  re less than or 
5b50: 65 71 75 61 6c 20 74 6f 20 58 2e 0a 5e 50 6f 69  equal to X..^Poi
5b60: 6e 74 65 72 73 20 74 6f 20 74 68 65 20 72 69 67  nters to the rig
5b70: 68 74 20 6f 66 20 58 20 72 65 66 65 72 20 74 6f  ht of X refer to
5b80: 20 70 61 67 65 73 20 77 68 65 72 65 20 61 6c 6c   pages where all
5b90: 20 6b 65 79 73 20 61 72 65 20 0a 67 72 65 61 74   keys are .great
5ba0: 65 72 20 74 68 61 6e 20 58 2e 3c 2f 70 3e 0a 0a  er than X.</p>..
5bb0: 3c 70 3e 57 69 74 68 69 6e 20 61 6e 20 69 6e 74  <p>Within an int
5bc0: 65 72 69 6f 72 20 62 2d 74 72 65 65 20 70 61 67  erior b-tree pag
5bd0: 65 2c 20 65 61 63 68 20 6b 65 79 20 61 6e 64 20  e, each key and 
5be0: 74 68 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 69  the pointer to i
5bf0: 74 73 0a 69 6d 6d 65 64 69 61 74 65 20 6c 65 66  ts.immediate lef
5c00: 74 20 61 72 65 20 63 6f 6d 62 69 6e 65 64 20 69  t are combined i
5c10: 6e 74 6f 20 61 20 73 74 72 75 63 74 75 72 65 20  nto a structure 
5c20: 63 61 6c 6c 65 64 20 61 20 22 63 65 6c 6c 22 2e  called a "cell".
5c30: 20 20 54 68 65 0a 72 69 67 68 74 2d 6d 6f 73 74    The.right-most
5c40: 20 70 6f 69 6e 74 65 72 20 69 73 20 68 65 6c 64   pointer is held
5c50: 20 73 65 70 61 72 61 74 65 6c 79 2e 20 20 41 20   separately.  A 
5c60: 6c 65 61 66 20 62 2d 74 72 65 65 20 70 61 67 65  leaf b-tree page
5c70: 20 68 61 73 20 6e 6f 0a 70 6f 69 6e 74 65 72 73   has no.pointers
5c80: 2c 20 62 75 74 20 69 74 20 73 74 69 6c 6c 20 75  , but it still u
5c90: 73 65 73 20 74 68 65 20 63 65 6c 6c 20 73 74 72  ses the cell str
5ca0: 75 63 74 75 72 65 20 74 6f 20 68 6f 6c 64 20 6b  ucture to hold k
5cb0: 65 79 73 20 66 6f 72 0a 69 6e 64 65 78 20 62 2d  eys for.index b-
5cc0: 74 72 65 65 73 20 6f 72 20 6b 65 79 73 20 61 6e  trees or keys an
5cd0: 64 20 63 6f 6e 74 65 6e 74 20 66 6f 72 20 74 61  d content for ta
5ce0: 62 6c 65 20 62 2d 74 72 65 65 73 2e 20 20 44 61  ble b-trees.  Da
5cf0: 74 61 20 69 73 20 61 6c 73 6f 0a 63 6f 6e 74 61  ta is also.conta
5d00: 69 6e 65 64 20 69 6e 20 74 68 65 20 63 65 6c 6c  ined in the cell
5d10: 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 45 76 65 72 79  ..</p>..<p>Every
5d20: 20 62 2d 74 72 65 65 20 70 61 67 65 20 68 61 73   b-tree page has
5d30: 20 61 74 20 6d 6f 73 74 20 6f 6e 65 20 70 61 72   at most one par
5d40: 65 6e 74 20 62 2d 74 72 65 65 20 70 61 67 65 2e  ent b-tree page.
5d50: 0a 41 20 62 2d 74 72 65 65 20 70 61 67 65 20 77  .A b-tree page w
5d60: 69 74 68 6f 75 74 20 61 20 70 61 72 65 6e 74 20  ithout a parent 
5d70: 69 73 20 63 61 6c 6c 65 64 20 61 20 72 6f 6f 74  is called a root
5d80: 20 70 61 67 65 2e 20 20 41 20 72 6f 6f 74 20 62   page.  A root b
5d90: 2d 74 72 65 65 20 70 61 67 65 0a 74 6f 67 65 74  -tree page.toget
5da0: 68 65 72 20 77 69 74 68 20 74 68 65 20 63 6c 6f  her with the clo
5db0: 73 75 72 65 20 6f 66 20 69 74 73 20 63 68 69 6c  sure of its chil
5dc0: 64 72 65 6e 20 66 6f 72 6d 20 61 20 63 6f 6d 70  dren form a comp
5dd0: 6c 65 74 65 20 62 2d 74 72 65 65 2e 0a 49 74 20  lete b-tree..It 
5de0: 69 73 20 70 6f 73 73 69 62 6c 65 20 28 61 6e 64  is possible (and
5df0: 20 69 6e 20 66 61 63 74 20 72 61 74 68 65 72 20   in fact rather 
5e00: 63 6f 6d 6d 6f 6e 29 20 74 6f 20 68 61 76 65 20  common) to have 
5e10: 61 20 63 6f 6d 70 6c 65 74 65 20 62 2d 74 72 65  a complete b-tre
5e20: 65 0a 74 68 61 74 20 63 6f 6e 73 69 73 74 73 20  e.that consists 
5e30: 6f 66 20 61 20 73 69 6e 67 6c 65 20 70 61 67 65  of a single page
5e40: 20 74 68 61 74 20 69 73 20 62 6f 74 68 20 61 20   that is both a 
5e50: 6c 65 61 66 20 61 6e 64 20 74 68 65 20 72 6f 6f  leaf and the roo
5e60: 74 2e 0a 42 65 63 61 75 73 65 20 74 68 65 72 65  t..Because there
5e70: 20 61 72 65 20 70 6f 69 6e 74 65 72 73 20 66 72   are pointers fr
5e80: 6f 6d 20 70 61 72 65 6e 74 73 20 74 6f 20 63 68  om parents to ch
5e90: 69 6c 64 72 65 6e 2c 20 65 76 65 72 79 20 70 61  ildren, every pa
5ea0: 67 65 20 6f 66 20 61 0a 63 6f 6d 70 6c 65 74 65  ge of a.complete
5eb0: 20 62 2d 74 72 65 65 20 63 61 6e 20 62 65 20 6c   b-tree can be l
5ec0: 6f 63 61 74 65 64 20 69 66 20 6f 6e 6c 79 20 74  ocated if only t
5ed0: 68 65 20 72 6f 6f 74 20 70 61 67 65 20 69 73 20  he root page is 
5ee0: 6b 6e 6f 77 6e 2e 20 20 48 65 6e 63 65 2c 0a 62  known.  Hence,.b
5ef0: 2d 74 72 65 65 73 20 61 72 65 20 69 64 65 6e 74  -trees are ident
5f00: 69 66 69 65 64 20 62 79 20 74 68 65 69 72 20 72  ified by their r
5f10: 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 2e  oot page number.
5f20: 3c 2f 70 3e 0a 0a 3c 70 3e 41 20 62 2d 74 72 65  </p>..<p>A b-tre
5f30: 65 20 70 61 67 65 20 69 73 20 65 69 74 68 65 72  e page is either
5f40: 20 61 20 74 61 62 6c 65 20 62 2d 74 72 65 65 20   a table b-tree 
5f50: 70 61 67 65 20 6f 72 20 61 6e 20 69 6e 64 65 78  page or an index
5f60: 20 62 2d 74 72 65 65 20 70 61 67 65 2e 0a 41 6c   b-tree page..Al
5f70: 6c 20 70 61 67 65 73 20 77 69 74 68 69 6e 20 65  l pages within e
5f80: 61 63 68 20 63 6f 6d 70 6c 65 74 65 20 62 2d 74  ach complete b-t
5f90: 72 65 65 20 61 72 65 20 6f 66 20 74 68 65 20 73  ree are of the s
5fa0: 61 6d 65 20 74 79 70 65 3a 20 65 69 74 68 65 72  ame type: either
5fb0: 20 74 61 62 6c 65 0a 6f 72 20 69 6e 64 65 78 2e   table.or index.
5fc0: 20 20 54 68 65 72 65 20 69 73 20 6f 6e 65 20 74    There is one t
5fd0: 61 62 6c 65 20 62 2d 74 72 65 65 73 20 69 6e 20  able b-trees in 
5fe0: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
5ff0: 65 0a 66 6f 72 20 65 61 63 68 20 72 6f 77 69 64  e.for each rowid
6000: 20 74 61 62 6c 65 20 69 6e 20 74 68 65 20 64 61   table in the da
6010: 74 61 62 61 73 65 20 73 63 68 65 6d 61 2c 20 69  tabase schema, i
6020: 6e 63 6c 75 64 69 6e 67 20 73 79 73 74 65 6d 20  ncluding system 
6030: 74 61 62 6c 65 73 0a 73 75 63 68 20 61 73 20 73  tables.such as s
6040: 71 6c 69 74 65 5f 6d 61 73 74 65 72 2e 20 20 54  qlite_master.  T
6050: 68 65 72 65 20 69 73 20 6f 6e 65 20 69 6e 64 65  here is one inde
6060: 78 20 62 2d 74 72 65 65 0a 69 6e 20 74 68 65 20  x b-tree.in the 
6070: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 66 6f  database file fo
6080: 72 20 65 61 63 68 20 69 6e 64 65 78 20 69 6e 20  r each index in 
6090: 74 68 65 20 73 63 68 65 6d 61 2c 20 69 6e 63 6c  the schema, incl
60a0: 75 64 69 6e 67 20 69 6d 70 6c 69 65 64 20 69 6e  uding implied in
60b0: 64 65 78 65 73 0a 63 72 65 61 74 65 64 20 62 79  dexes.created by
60c0: 20 75 6e 69 71 75 65 6e 65 73 73 20 63 6f 6e 73   uniqueness cons
60d0: 74 72 61 69 6e 74 73 2e 20 20 54 68 65 72 65 20  traints.  There 
60e0: 61 72 65 20 6e 6f 20 62 2d 74 72 65 65 73 20 61  are no b-trees a
60f0: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 0a 5b  ssociated with.[
6100: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 5d 2e  virtual tables].
6110: 20 20 53 70 65 63 69 66 69 63 20 76 69 72 74 75    Specific virtu
6120: 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65  al table impleme
6130: 6e 74 61 74 69 6f 6e 73 20 6d 69 67 68 74 20 6d  ntations might m
6140: 61 6b 65 20 75 73 65 0a 6f 66 20 5b 73 68 61 64  ake use.of [shad
6150: 6f 77 20 74 61 62 6c 65 73 5d 20 66 6f 72 20 73  ow tables] for s
6160: 74 6f 72 61 67 65 2c 20 62 75 74 20 74 68 6f 73  torage, but thos
6170: 65 20 73 68 61 64 6f 77 20 74 61 62 6c 65 73 20  e shadow tables 
6180: 77 69 6c 6c 20 68 61 76 65 20 73 65 70 61 72 61  will have separa
6190: 74 65 0a 65 6e 74 72 69 65 73 20 69 6e 20 74 68  te.entries in th
61a0: 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
61b0: 61 2e 20 20 5b 57 49 54 48 4f 55 54 20 52 4f 57  a.  [WITHOUT ROW
61c0: 49 44 5d 20 74 61 62 6c 65 73 20 75 73 65 20 69  ID] tables use i
61d0: 6e 64 65 78 20 62 2d 74 72 65 65 73 0a 72 61 74  ndex b-trees.rat
61e0: 68 65 72 20 74 68 61 6e 20 61 20 74 61 62 6c 65  her than a table
61f0: 20 62 2d 74 72 65 65 73 2c 20 73 6f 20 74 68 65   b-trees, so the
6200: 72 65 20 69 73 20 6f 6e 65 0a 69 6e 64 65 78 20  re is one.index 
6210: 62 2d 74 72 65 65 20 69 6e 20 74 68 65 20 64 61  b-tree in the da
6220: 74 61 62 61 73 65 20 66 69 6c 65 20 66 6f 72 20  tabase file for 
6230: 65 61 63 68 20 5b 57 49 54 48 4f 55 54 20 52 4f  each [WITHOUT RO
6240: 57 49 44 5d 20 74 61 62 6c 65 2e 0a 54 68 65 20  WID] table..The 
6250: 62 2d 74 72 65 65 20 63 6f 72 72 65 73 70 6f 6e  b-tree correspon
6260: 64 69 6e 67 20 74 6f 20 74 68 65 20 73 71 6c 69  ding to the sqli
6270: 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 20  te_master table 
6280: 69 73 20 61 6c 77 61 79 73 20 61 20 74 61 62 6c  is always a tabl
6290: 65 0a 62 2d 74 72 65 65 20 61 6e 64 20 61 6c 77  e.b-tree and alw
62a0: 61 79 73 20 68 61 73 20 61 20 72 6f 6f 74 20 70  ays has a root p
62b0: 61 67 65 20 6f 66 20 31 2e 0a 54 68 65 20 73 71  age of 1..The sq
62c0: 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c  lite_master tabl
62d0: 65 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 72  e contains the r
62e0: 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20  oot page number 
62f0: 66 6f 72 20 65 76 65 72 79 20 6f 74 68 65 72 20  for every other 
6300: 0a 74 61 62 6c 65 20 61 6e 64 20 69 6e 64 65 78  .table and index
6310: 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
6320: 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 45   file.</p>..<p>E
6330: 61 63 68 20 65 6e 74 72 79 20 69 6e 20 61 20 74  ach entry in a t
6340: 61 62 6c 65 20 62 2d 74 72 65 65 20 63 6f 6e 73  able b-tree cons
6350: 69 73 74 73 20 6f 66 20 61 20 36 34 2d 62 69 74  ists of a 64-bit
6360: 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20   signed integer 
6370: 6b 65 79 0a 61 6e 64 20 75 70 20 74 6f 20 32 31  key.and up to 21
6380: 34 37 34 38 33 36 34 37 20 62 79 74 65 73 20 6f  47483647 bytes o
6390: 66 20 61 72 62 69 74 72 61 72 79 20 64 61 74 61  f arbitrary data
63a0: 2e 20 20 28 54 68 65 20 6b 65 79 20 6f 66 20 61  .  (The key of a
63b0: 20 74 61 62 6c 65 20 62 2d 74 72 65 65 0a 63 6f   table b-tree.co
63c0: 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65  rresponds to the
63d0: 20 5b 72 6f 77 69 64 5d 20 6f 66 20 74 68 65 20   [rowid] of the 
63e0: 53 51 4c 20 74 61 62 6c 65 20 74 68 61 74 20 74  SQL table that t
63f0: 68 65 20 62 2d 74 72 65 65 20 69 6d 70 6c 65 6d  he b-tree implem
6400: 65 6e 74 73 2e 29 0a 49 6e 74 65 72 69 6f 72 20  ents.).Interior 
6410: 74 61 62 6c 65 20 62 2d 74 72 65 65 73 20 68 6f  table b-trees ho
6420: 6c 64 20 6f 6e 6c 79 20 6b 65 79 73 20 61 6e 64  ld only keys and
6430: 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 63 68 69   pointers to chi
6440: 6c 64 72 65 6e 2e 0a 41 6c 6c 20 64 61 74 61 20  ldren..All data 
6450: 69 73 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20  is contained in 
6460: 74 68 65 20 74 61 62 6c 65 20 62 2d 74 72 65 65  the table b-tree
6470: 20 6c 65 61 76 65 73 2e 3c 2f 70 3e 0a 0a 3c 70   leaves.</p>..<p
6480: 3e 45 61 63 68 20 65 6e 74 72 79 20 69 6e 20 61  >Each entry in a
6490: 6e 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20 63  n index b-tree c
64a0: 6f 6e 73 69 73 74 73 20 6f 66 20 61 6e 20 61 72  onsists of an ar
64b0: 62 69 74 72 61 72 79 20 6b 65 79 20 6f 66 20 75  bitrary key of u
64c0: 70 0a 74 6f 20 32 31 34 37 34 38 33 36 34 37 20  p.to 2147483647 
64d0: 62 79 74 65 73 20 69 6e 20 6c 65 6e 67 74 68 20  bytes in length 
64e0: 61 6e 64 20 6e 6f 20 64 61 74 61 2e 3c 2f 70 3e  and no data.</p>
64f0: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
6500: 6e 74 20 63 65 6c 6c 5f 70 61 79 6c 6f 61 64 20  nt cell_payload 
6510: 7b 63 65 6c 6c 20 70 61 79 6c 6f 61 64 7d 3c 2f  {cell payload}</
6520: 74 63 6c 3e 0a 3c 70 3e 44 65 66 69 6e 65 20 74  tcl>.<p>Define t
6530: 68 65 20 22 70 61 79 6c 6f 61 64 22 20 6f 66 20  he "payload" of 
6540: 61 20 63 65 6c 6c 20 74 6f 20 62 65 20 74 68 65  a cell to be the
6550: 20 61 72 62 69 74 72 61 72 79 20 6c 65 6e 67 74   arbitrary lengt
6560: 68 20 73 65 63 74 69 6f 6e 0a 6f 66 20 74 68 65  h section.of the
6570: 20 63 65 6c 6c 2e 20 20 46 6f 72 20 61 6e 20 69   cell.  For an i
6580: 6e 64 65 78 20 62 2d 74 72 65 65 2c 20 74 68 65  ndex b-tree, the
6590: 20 6b 65 79 20 69 73 20 61 6c 77 61 79 73 20 61   key is always a
65a0: 72 62 69 74 72 61 72 79 20 69 6e 20 6c 65 6e 67  rbitrary in leng
65b0: 74 68 0a 61 6e 64 20 68 65 6e 63 65 20 74 68 65  th.and hence the
65c0: 20 70 61 79 6c 6f 61 64 20 69 73 20 74 68 65 20   payload is the 
65d0: 6b 65 79 2e 20 20 54 68 65 72 65 20 61 72 65 20  key.  There are 
65e0: 6e 6f 20 61 72 62 69 74 72 61 72 79 20 6c 65 6e  no arbitrary len
65f0: 67 74 68 20 65 6c 65 6d 65 6e 74 73 0a 69 6e 20  gth elements.in 
6600: 74 68 65 20 63 65 6c 6c 73 20 6f 66 20 69 6e 74  the cells of int
6610: 65 72 69 6f 72 20 74 61 62 6c 65 20 62 2d 74 72  erior table b-tr
6620: 65 65 20 70 61 67 65 73 20 61 6e 64 20 73 6f 20  ee pages and so 
6630: 74 68 6f 73 65 20 63 65 6c 6c 73 20 68 61 76 65  those cells have
6640: 20 6e 6f 0a 70 61 79 6c 6f 61 64 2e 20 20 54 61   no.payload.  Ta
6650: 62 6c 65 20 62 2d 74 72 65 65 20 6c 65 61 66 20  ble b-tree leaf 
6660: 70 61 67 65 73 20 63 6f 6e 74 61 69 6e 20 61 72  pages contain ar
6670: 62 69 74 72 61 72 79 20 6c 65 6e 67 74 68 20 63  bitrary length c
6680: 6f 6e 74 65 6e 74 20 61 6e 64 0a 73 6f 20 66 6f  ontent and.so fo
6690: 72 20 63 65 6c 6c 73 20 6f 6e 20 74 68 6f 73 65  r cells on those
66a0: 20 70 61 67 65 73 20 74 68 65 20 70 61 79 6c 6f   pages the paylo
66b0: 61 64 20 69 73 20 74 68 65 20 63 6f 6e 74 65 6e  ad is the conten
66c0: 74 2e 0a 3c 70 3e 57 68 65 6e 20 74 68 65 20 73  t..<p>When the s
66d0: 69 7a 65 20 6f 66 20 70 61 79 6c 6f 61 64 20 66  ize of payload f
66e0: 6f 72 20 61 20 63 65 6c 6c 20 65 78 63 65 65 64  or a cell exceed
66f0: 73 20 61 20 63 65 72 74 61 69 6e 20 74 68 72 65  s a certain thre
6700: 73 68 6f 6c 64 20 28 74 6f 0a 62 65 20 64 65 66  shold (to.be def
6710: 69 6e 65 64 20 6c 61 74 65 72 29 20 74 68 65 6e  ined later) then
6720: 20 6f 6e 6c 79 20 74 68 65 20 66 69 72 73 74 20   only the first 
6730: 66 65 77 20 62 79 74 65 73 20 6f 66 20 74 68 65  few bytes of the
6740: 20 70 61 79 6c 6f 61 64 0a 61 72 65 20 73 74 6f   payload.are sto
6750: 72 65 64 20 6f 6e 20 74 68 65 20 62 2d 74 72 65  red on the b-tre
6760: 65 20 70 61 67 65 20 61 6e 64 20 74 68 65 20 62  e page and the b
6770: 61 6c 61 6e 63 65 20 69 73 20 73 74 6f 72 65 64  alance is stored
6780: 20 69 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73   in a linked lis
6790: 74 0a 6f 66 20 63 6f 6e 74 65 6e 74 20 6f 76 65  t.of content ove
67a0: 72 66 6c 6f 77 20 70 61 67 65 73 2e 3c 2f 70 3e  rflow pages.</p>
67b0: 0a 0a 3c 70 3e 41 20 62 2d 74 72 65 65 20 70 61  ..<p>A b-tree pa
67c0: 67 65 20 69 73 20 64 69 76 69 64 65 64 20 69 6e  ge is divided in
67d0: 74 6f 20 72 65 67 69 6f 6e 73 20 69 6e 20 74 68  to regions in th
67e0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6f 72 64 65  e following orde
67f0: 72 3a 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 54 68 65  r:..<ol>.<li>The
6800: 20 31 30 30 2d 62 79 74 65 20 64 61 74 61 62 61   100-byte databa
6810: 73 65 20 66 69 6c 65 20 68 65 61 64 65 72 20 28  se file header (
6820: 66 6f 75 6e 64 20 6f 6e 20 70 61 67 65 20 31 20  found on page 1 
6830: 6f 6e 6c 79 29 0a 3c 6c 69 3e 54 68 65 20 38 20  only).<li>The 8 
6840: 6f 72 20 31 32 20 62 79 74 65 20 62 2d 74 72 65  or 12 byte b-tre
6850: 65 20 70 61 67 65 20 68 65 61 64 65 72 0a 3c 6c  e page header.<l
6860: 69 3e 54 68 65 20 63 65 6c 6c 20 70 6f 69 6e 74  i>The cell point
6870: 65 72 20 61 72 72 61 79 0a 3c 6c 69 3e 55 6e 61  er array.<li>Una
6880: 6c 6c 6f 63 61 74 65 64 20 73 70 61 63 65 0a 3c  llocated space.<
6890: 6c 69 3e 54 68 65 20 63 65 6c 6c 20 63 6f 6e 74  li>The cell cont
68a0: 65 6e 74 20 61 72 65 61 0a 3c 6c 69 3e 54 68 65  ent area.<li>The
68b0: 20 72 65 73 65 72 76 65 64 20 72 65 67 69 6f 6e   reserved region
68c0: 2e 0a 3c 2f 6f 6c 3e 0a 3c 2f 70 3e 0a 0a 3c 70  ..</ol>.</p>..<p
68d0: 3e 54 68 65 20 31 30 30 2d 62 79 74 65 20 64 61  >The 100-byte da
68e0: 74 61 62 61 73 65 20 66 69 6c 65 20 68 65 61 64  tabase file head
68f0: 65 72 20 69 73 20 66 6f 75 6e 64 20 6f 6e 6c 79  er is found only
6900: 20 6f 6e 20 70 61 67 65 20 31 2c 20 77 68 69 63   on page 1, whic
6910: 68 20 69 73 0a 61 6c 77 61 79 73 20 61 20 74 61  h is.always a ta
6920: 62 6c 65 20 62 2d 74 72 65 65 20 70 61 67 65 2e  ble b-tree page.
6930: 20 20 41 6c 6c 20 6f 74 68 65 72 20 62 2d 74 72    All other b-tr
6940: 65 65 20 70 61 67 65 73 20 69 6e 20 74 68 65 20  ee pages in the 
6950: 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 6f 6d  database file.om
6960: 69 74 20 74 68 69 73 20 31 30 30 2d 62 79 74 65  it this 100-byte
6970: 20 68 65 61 64 65 72 2e 3c 2f 70 3e 0a 0a 3c 70   header.</p>..<p
6980: 3e 54 68 65 20 72 65 73 65 72 76 65 64 20 72 65  >The reserved re
6990: 67 69 6f 6e 20 69 73 20 61 6e 20 61 72 65 61 20  gion is an area 
69a0: 6f 66 20 75 6e 75 73 65 64 20 73 70 61 63 65 20  of unused space 
69b0: 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 65 76  at the end of ev
69c0: 65 72 79 0a 70 61 67 65 20 28 65 78 63 65 70 74  ery.page (except
69d0: 20 74 68 65 20 6c 6f 63 6b 69 6e 67 20 70 61 67   the locking pag
69e0: 65 29 20 74 68 61 74 20 65 78 74 65 6e 73 69 6f  e) that extensio
69f0: 6e 73 20 63 61 6e 20 75 73 65 20 74 6f 20 68 6f  ns can use to ho
6a00: 6c 64 20 70 65 72 2d 70 61 67 65 0a 69 6e 66 6f  ld per-page.info
6a10: 72 6d 61 74 69 6f 6e 2e 20 20 5e 54 68 65 20 73  rmation.  ^The s
6a20: 69 7a 65 20 6f 66 20 74 68 65 20 72 65 73 65 72  ize of the reser
6a30: 76 65 64 20 72 65 67 69 6f 6e 20 69 73 20 64 65  ved region is de
6a40: 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20  termined by the 
6a50: 6f 6e 65 2d 62 79 74 65 0a 75 6e 73 69 67 6e 65  one-byte.unsigne
6a60: 64 20 69 6e 74 65 67 65 72 20 66 6f 75 6e 64 20  d integer found 
6a70: 61 74 20 61 6e 20 6f 66 66 73 65 74 20 6f 66 20  at an offset of 
6a80: 32 30 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61  20 into the data
6a90: 62 61 73 65 20 66 69 6c 65 20 68 65 61 64 65 72  base file header
6aa0: 2e 0a 54 68 65 20 73 69 7a 65 20 6f 66 20 74 68  ..The size of th
6ab0: 65 20 72 65 73 65 72 76 65 64 20 72 65 67 69 6f  e reserved regio
6ac0: 6e 20 69 73 20 75 73 75 61 6c 6c 79 20 7a 65 72  n is usually zer
6ad0: 6f 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 62  o.</p>..<p>The b
6ae0: 2d 74 72 65 65 20 70 61 67 65 20 68 65 61 64 65  -tree page heade
6af0: 72 20 69 73 20 38 20 62 79 74 65 73 20 69 6e 20  r is 8 bytes in 
6b00: 73 69 7a 65 20 66 6f 72 20 6c 65 61 66 20 70 61  size for leaf pa
6b10: 67 65 73 20 61 6e 64 20 31 32 0a 62 79 74 65 73  ges and 12.bytes
6b20: 20 66 6f 72 20 69 6e 74 65 72 69 6f 72 20 70 61   for interior pa
6b30: 67 65 73 2e 20 20 41 6c 6c 20 6d 75 6c 74 69 62  ges.  All multib
6b40: 79 74 65 20 76 61 6c 75 65 73 20 69 6e 20 74 68  yte values in th
6b50: 65 20 70 61 67 65 20 68 65 61 64 65 72 0a 61 72  e page header.ar
6b60: 65 20 62 69 67 2d 65 6e 64 69 61 6e 2e 0a 54 68  e big-endian..Th
6b70: 65 20 62 2d 74 72 65 65 20 70 61 67 65 20 68 65  e b-tree page he
6b80: 61 64 65 72 20 69 73 20 63 6f 6d 70 6f 73 65 64  ader is composed
6b90: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
6ba0: 67 20 66 69 65 6c 64 73 3a 3c 2f 70 3e 0a 0a 3c  g fields:</p>..<
6bb0: 63 65 6e 74 65 72 3e 0a 3c 69 3e 42 2d 74 72 65  center>.<i>B-tre
6bc0: 65 20 50 61 67 65 20 48 65 61 64 65 72 20 46 6f  e Page Header Fo
6bd0: 72 6d 61 74 3c 2f 69 3e 3c 62 72 3e 0a 3c 74 61  rmat</i><br>.<ta
6be0: 62 6c 65 20 62 6f 72 64 65 72 3d 31 20 77 69 64  ble border=1 wid
6bf0: 74 68 3d 22 38 30 25 22 3e 0a 3c 74 72 3e 3c 74  th="80%">.<tr><t
6c00: 68 3e 4f 66 66 73 65 74 3c 74 68 3e 53 69 7a 65  h>Offset<th>Size
6c10: 3c 74 68 3e 44 65 73 63 72 69 70 74 69 6f 6e 0a  <th>Description.
6c20: 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65  <tr><td align=ce
6c30: 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e  nter valign=top>
6c40: 30 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65  0<td align=cente
6c50: 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 31 3c 74  r valign=top>1<t
6c60: 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 54  d align=left>.^T
6c70: 68 65 20 6f 6e 65 2d 62 79 74 65 20 66 6c 61 67  he one-byte flag
6c80: 20 61 74 20 6f 66 66 73 65 74 20 30 20 69 6e 64   at offset 0 ind
6c90: 69 63 61 74 69 6e 67 20 74 68 65 20 62 2d 74 72  icating the b-tr
6ca0: 65 65 20 70 61 67 65 20 74 79 70 65 2e 3c 75 6c  ee page type.<ul
6cb0: 3e 0a 3c 6c 69 3e 5e 41 20 76 61 6c 75 65 20 6f  >.<li>^A value o
6cc0: 66 20 32 20 28 30 78 30 32 29 20 6d 65 61 6e 73  f 2 (0x02) means
6cd0: 20 74 68 65 20 70 61 67 65 20 69 73 20 61 6e 20   the page is an 
6ce0: 69 6e 74 65 72 69 6f 72 20 69 6e 64 65 78 20 62  interior index b
6cf0: 2d 74 72 65 65 20 70 61 67 65 2e 0a 3c 6c 69 3e  -tree page..<li>
6d00: 5e 41 20 76 61 6c 75 65 20 6f 66 20 35 20 28 30  ^A value of 5 (0
6d10: 78 30 35 29 20 6d 65 61 6e 73 20 74 68 65 20 70  x05) means the p
6d20: 61 67 65 20 69 73 20 61 6e 20 69 6e 74 65 72 69  age is an interi
6d30: 6f 72 20 74 61 62 6c 65 20 62 2d 74 72 65 65 20  or table b-tree 
6d40: 70 61 67 65 2e 0a 3c 6c 69 3e 5e 41 20 76 61 6c  page..<li>^A val
6d50: 75 65 20 6f 66 20 31 30 20 28 30 78 30 61 29 20  ue of 10 (0x0a) 
6d60: 6d 65 61 6e 73 20 74 68 65 20 70 61 67 65 20 69  means the page i
6d70: 73 20 61 20 6c 65 61 66 20 69 6e 64 65 78 20 62  s a leaf index b
6d80: 2d 74 72 65 65 20 70 61 67 65 2e 0a 3c 6c 69 3e  -tree page..<li>
6d90: 5e 41 20 76 61 6c 75 65 20 6f 66 20 31 33 20 28  ^A value of 13 (
6da0: 30 78 30 64 29 20 6d 65 61 6e 73 20 74 68 65 20  0x0d) means the 
6db0: 70 61 67 65 20 69 73 20 61 20 6c 65 61 66 20 74  page is a leaf t
6dc0: 61 62 6c 65 20 62 2d 74 72 65 65 20 70 61 67 65  able b-tree page
6dd0: 2e 3c 2f 75 6c 3e 0a 5e 41 6e 79 20 6f 74 68 65  .</ul>.^Any othe
6de0: 72 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20  r value for the 
6df0: 62 2d 74 72 65 65 20 70 61 67 65 20 74 79 70 65  b-tree page type
6e00: 20 69 73 20 61 6e 20 65 72 72 6f 72 2e 0a 3c 74   is an error..<t
6e10: 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74  r><td align=cent
6e20: 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 31 3c  er valign=top>1<
6e30: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
6e40: 76 61 6c 69 67 6e 3d 74 6f 70 3e 32 3c 74 64 20  valign=top>2<td 
6e50: 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 54 68 65  align=left>.^The
6e60: 20 74 77 6f 2d 62 79 74 65 20 69 6e 74 65 67 65   two-byte intege
6e70: 72 20 61 74 20 6f 66 66 73 65 74 20 31 20 67 69  r at offset 1 gi
6e80: 76 65 73 20 74 68 65 20 73 74 61 72 74 20 6f 66  ves the start of
6e90: 20 74 68 65 0a 66 69 72 73 74 20 66 72 65 65 62   the.first freeb
6ea0: 6c 6f 63 6b 20 6f 6e 20 74 68 65 20 70 61 67 65  lock on the page
6eb0: 2c 20 6f 72 20 69 73 20 7a 65 72 6f 20 69 66 20  , or is zero if 
6ec0: 74 68 65 72 65 20 61 72 65 20 6e 6f 20 66 72 65  there are no fre
6ed0: 65 62 6c 6f 63 6b 73 2e 0a 3c 74 72 3e 3c 74 64  eblocks..<tr><td
6ee0: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61   align=center va
6ef0: 6c 69 67 6e 3d 74 6f 70 3e 33 3c 74 64 20 61 6c  lign=top>3<td al
6f00: 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67  ign=center valig
6f10: 6e 3d 74 6f 70 3e 32 3c 74 64 20 61 6c 69 67 6e  n=top>2<td align
6f20: 3d 6c 65 66 74 3e 0a 5e 54 68 65 20 74 77 6f 2d  =left>.^The two-
6f30: 62 79 74 65 20 69 6e 74 65 67 65 72 20 61 74 20  byte integer at 
6f40: 6f 66 66 73 65 74 20 33 20 67 69 76 65 73 20 74  offset 3 gives t
6f50: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 65 6c  he number of cel
6f60: 6c 73 20 6f 6e 20 74 68 65 20 70 61 67 65 2e 0a  ls on the page..
6f70: 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65  <tr><td align=ce
6f80: 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e  nter valign=top>
6f90: 35 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65  5<td align=cente
6fa0: 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 32 3c 74  r valign=top>2<t
6fb0: 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 28  d align=left>.^(
6fc0: 54 68 65 20 74 77 6f 2d 62 79 74 65 20 69 6e 74  The two-byte int
6fd0: 65 67 65 72 20 61 74 20 6f 66 66 73 65 74 20 35  eger at offset 5
6fe0: 20 64 65 73 69 67 6e 61 74 65 73 20 74 68 65 20   designates the 
6ff0: 73 74 61 72 74 20 6f 66 20 74 68 65 20 63 65 6c  start of the cel
7000: 6c 20 63 6f 6e 74 65 6e 74 0a 61 72 65 61 2e 20  l content.area. 
7010: 20 41 20 7a 65 72 6f 20 76 61 6c 75 65 20 66 6f   A zero value fo
7020: 72 20 74 68 69 73 20 69 6e 74 65 67 65 72 20 69  r this integer i
7030: 73 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73  s interpreted as
7040: 20 36 35 35 33 36 2e 29 5e 0a 3c 74 72 3e 3c 74   65536.)^.<tr><t
7050: 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76  d align=center v
7060: 61 6c 69 67 6e 3d 74 6f 70 3e 37 3c 74 64 20 61  align=top>7<td a
7070: 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69  lign=center vali
7080: 67 6e 3d 74 6f 70 3e 31 3c 74 64 20 61 6c 69 67  gn=top>1<td alig
7090: 6e 3d 6c 65 66 74 3e 0a 5e 54 68 65 20 6f 6e 65  n=left>.^The one
70a0: 2d 62 79 74 65 20 69 6e 74 65 67 65 72 20 61 74  -byte integer at
70b0: 20 6f 66 66 73 65 74 20 37 20 67 69 76 65 73 20   offset 7 gives 
70c0: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 66 72  the number of fr
70d0: 61 67 6d 65 6e 74 65 64 20 66 72 65 65 0a 62 79  agmented free.by
70e0: 74 65 73 20 77 69 74 68 69 6e 20 74 68 65 20 63  tes within the c
70f0: 65 6c 6c 20 63 6f 6e 74 65 6e 74 20 61 72 65 61  ell content area
7100: 2e 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d  ..<tr><td align=
7110: 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f  center valign=to
7120: 70 3e 38 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e  p>8<td align=cen
7130: 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 34  ter valign=top>4
7140: 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a  <td align=left>.
7150: 5e 28 54 68 65 20 66 6f 75 72 2d 62 79 74 65 20  ^(The four-byte 
7160: 70 61 67 65 20 6e 75 6d 62 65 72 20 61 74 20 6f  page number at o
7170: 66 66 73 65 74 20 38 20 69 73 20 74 68 65 20 72  ffset 8 is the r
7180: 69 67 68 74 2d 6d 6f 73 74 20 70 6f 69 6e 74 65  ight-most pointe
7190: 72 2e 20 20 54 68 69 73 0a 76 61 6c 75 65 20 61  r.  This.value a
71a0: 70 70 65 61 72 73 20 69 6e 20 74 68 65 20 68 65  ppears in the he
71b0: 61 64 65 72 20 6f 66 20 69 6e 74 65 72 69 6f 72  ader of interior
71c0: 20 62 2d 74 72 65 65 20 70 61 67 65 73 20 6f 6e   b-tree pages on
71d0: 6c 79 20 61 6e 64 20 69 73 20 6f 6d 69 74 74 65  ly and is omitte
71e0: 64 20 66 72 6f 6d 0a 61 6c 6c 20 6f 74 68 65 72  d from.all other
71f0: 20 70 61 67 65 73 2e 29 5e 0a 3c 2f 74 61 62 6c   pages.)^.</tabl
7200: 65 3e 3c 2f 63 65 6e 74 65 72 3e 0a 0a 3c 70 3e  e></center>..<p>
7210: 5e 54 68 65 20 63 65 6c 6c 20 70 6f 69 6e 74 65  ^The cell pointe
7220: 72 20 61 72 72 61 79 20 6f 66 20 61 20 62 2d 74  r array of a b-t
7230: 72 65 65 20 70 61 67 65 20 69 6d 6d 65 64 69 61  ree page immedia
7240: 74 65 6c 79 20 66 6f 6c 6c 6f 77 73 20 74 68 65  tely follows the
7250: 20 62 2d 74 72 65 65 0a 70 61 67 65 20 68 65 61   b-tree.page hea
7260: 64 65 72 2e 20 20 4c 65 74 20 4b 20 62 65 20 74  der.  Let K be t
7270: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 65 6c  he number of cel
7280: 6c 73 20 6f 6e 20 74 68 65 20 62 74 72 65 65 2e  ls on the btree.
7290: 20 20 5e 54 68 65 20 63 65 6c 6c 20 70 6f 69 6e    ^The cell poin
72a0: 74 65 72 0a 61 72 72 61 79 20 63 6f 6e 73 69 73  ter.array consis
72b0: 74 73 20 6f 66 20 4b 20 32 2d 62 79 74 65 20 69  ts of K 2-byte i
72c0: 6e 74 65 67 65 72 20 6f 66 66 73 65 74 73 20 74  nteger offsets t
72d0: 6f 20 74 68 65 20 63 65 6c 6c 20 63 6f 6e 74 65  o the cell conte
72e0: 6e 74 73 2e 20 20 5e 54 68 65 0a 63 65 6c 6c 20  nts.  ^The.cell 
72f0: 70 6f 69 6e 74 65 72 73 20 61 72 65 20 61 72 72  pointers are arr
7300: 61 6e 67 65 64 20 69 6e 20 6b 65 79 20 6f 72 64  anged in key ord
7310: 65 72 20 77 69 74 68 20 6c 65 66 74 2d 6d 6f 73  er with left-mos
7320: 74 20 63 65 6c 6c 20 28 74 68 65 20 63 65 6c 6c  t cell (the cell
7330: 20 77 69 74 68 20 74 68 65 0a 73 6d 61 6c 6c 65   with the.smalle
7340: 73 74 20 6b 65 79 29 20 66 69 72 73 74 20 61 6e  st key) first an
7350: 64 20 74 68 65 20 72 69 67 68 74 2d 6d 6f 73 74  d the right-most
7360: 20 63 65 6c 6c 20 28 74 68 65 20 63 65 6c 6c 20   cell (the cell 
7370: 77 69 74 68 20 74 68 65 20 6c 61 72 67 65 73 74  with the largest
7380: 0a 6b 65 79 29 20 6c 61 73 74 2e 3c 2f 70 3e 0a  .key) last.</p>.
7390: 0a 3c 70 3e 43 65 6c 6c 20 63 6f 6e 74 65 6e 74  .<p>Cell content
73a0: 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68   is stored in th
73b0: 65 20 63 65 6c 6c 20 63 6f 6e 74 65 6e 74 20 72  e cell content r
73c0: 65 67 69 6f 6e 20 6f 66 20 74 68 65 20 62 2d 74  egion of the b-t
73d0: 72 65 65 20 70 61 67 65 2e 0a 53 51 4c 69 74 65  ree page..SQLite
73e0: 20 73 74 72 69 76 65 73 20 74 6f 20 70 6c 61 63   strives to plac
73f0: 65 20 63 65 6c 6c 73 20 61 73 20 66 61 72 20 74  e cells as far t
7400: 6f 77 61 72 64 20 74 68 65 20 65 6e 64 20 6f 66  oward the end of
7410: 20 74 68 65 20 62 2d 74 72 65 65 20 70 61 67 65   the b-tree page
7420: 20 61 73 0a 69 74 20 63 61 6e 2c 20 69 6e 20 6f   as.it can, in o
7430: 72 64 65 72 20 74 6f 20 6c 65 61 76 65 20 73 70  rder to leave sp
7440: 61 63 65 20 66 6f 72 20 66 75 74 75 72 65 20 67  ace for future g
7450: 72 6f 77 74 68 20 6f 66 20 74 68 65 20 63 65 6c  rowth of the cel
7460: 6c 20 70 6f 69 6e 74 65 72 20 61 72 72 61 79 2e  l pointer array.
7470: 0a 54 68 65 20 61 72 65 61 20 69 6e 20 62 65 74  .The area in bet
7480: 77 65 65 6e 20 74 68 65 20 6c 61 73 74 20 63 65  ween the last ce
7490: 6c 6c 20 70 6f 69 6e 74 65 72 20 61 72 72 61 79  ll pointer array
74a0: 20 65 6e 74 72 79 20 61 6e 64 20 74 68 65 20 62   entry and the b
74b0: 65 67 69 6e 6e 69 6e 67 20 6f 66 0a 74 68 65 20  eginning of.the 
74c0: 66 69 72 73 74 20 63 65 6c 6c 20 69 73 20 74 68  first cell is th
74d0: 65 20 75 6e 61 6c 6c 6f 63 61 74 65 64 20 72 65  e unallocated re
74e0: 67 69 6f 6e 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e  gion..</p>..<p>^
74f0: 49 66 20 61 20 70 61 67 65 20 63 6f 6e 74 61 69  If a page contai
7500: 6e 73 20 6e 6f 20 63 65 6c 6c 73 20 28 77 68 69  ns no cells (whi
7510: 63 68 20 69 73 20 6f 6e 6c 79 20 70 6f 73 73 69  ch is only possi
7520: 62 6c 65 20 66 6f 72 20 61 20 72 6f 6f 74 20 70  ble for a root p
7530: 61 67 65 0a 6f 66 20 61 20 74 61 62 6c 65 20 74  age.of a table t
7540: 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20  hat contains no 
7550: 72 6f 77 73 29 20 74 68 65 6e 20 74 68 65 20 6f  rows) then the o
7560: 66 66 73 65 74 20 74 6f 20 74 68 65 0a 63 65 6c  ffset to the.cel
7570: 6c 20 63 6f 6e 74 65 6e 74 20 61 72 65 61 20 77  l content area w
7580: 69 6c 6c 20 65 71 75 61 6c 20 74 68 65 20 70 61  ill equal the pa
7590: 67 65 20 73 69 7a 65 20 6d 69 6e 75 73 20 74 68  ge size minus th
75a0: 65 20 62 79 74 65 73 20 6f 66 20 72 65 73 65 72  e bytes of reser
75b0: 76 65 64 20 73 70 61 63 65 2e 0a 5e 28 49 66 20  ved space..^(If 
75c0: 74 68 65 20 64 61 74 61 62 61 73 65 20 75 73 65  the database use
75d0: 73 20 61 20 36 35 35 33 36 2d 62 79 74 65 20 70  s a 65536-byte p
75e0: 61 67 65 20 73 69 7a 65 20 61 6e 64 20 74 68 65  age size and the
75f0: 20 72 65 73 65 72 76 65 64 20 73 70 61 63 65 20   reserved space 
7600: 69 73 20 7a 65 72 6f 0a 28 74 68 65 20 75 73 75  is zero.(the usu
7610: 61 6c 20 76 61 6c 75 65 20 66 6f 72 20 72 65 73  al value for res
7620: 65 72 76 65 64 20 73 70 61 63 65 29 20 74 68 65  erved space) the
7630: 6e 20 74 68 65 20 63 65 6c 6c 20 63 6f 6e 74 65  n the cell conte
7640: 6e 74 20 6f 66 66 73 65 74 20 6f 66 20 61 6e 0a  nt offset of an.
7650: 65 6d 70 74 79 20 70 61 67 65 20 77 61 6e 74 73  empty page wants
7660: 20 74 6f 20 62 65 20 36 35 35 33 36 2e 20 20 0a   to be 65536.  .
7670: 48 6f 77 65 76 65 72 2c 20 74 68 61 74 20 69 6e  However, that in
7680: 74 65 67 65 72 20 69 73 20 74 6f 6f 20 6c 61 72  teger is too lar
7690: 67 65 20 74 6f 20 62 65 20 73 74 6f 72 65 64 20  ge to be stored 
76a0: 69 6e 20 61 0a 32 2d 62 79 74 65 20 75 6e 73 69  in a.2-byte unsi
76b0: 67 6e 65 64 20 69 6e 74 65 67 65 72 2c 20 73 6f  gned integer, so
76c0: 20 61 20 76 61 6c 75 65 20 6f 66 20 30 20 69 73   a value of 0 is
76d0: 20 75 73 65 64 20 69 6e 20 69 74 73 20 70 6c 61   used in its pla
76e0: 63 65 2e 29 5e 0a 0a 3c 70 3e 41 20 66 72 65 65  ce.)^..<p>A free
76f0: 62 6c 6f 63 6b 20 69 73 20 61 20 73 74 72 75 63  block is a struc
7700: 74 75 72 65 20 75 73 65 64 20 74 6f 20 69 64 65  ture used to ide
7710: 6e 74 69 66 79 20 75 6e 61 6c 6c 6f 63 61 74 65  ntify unallocate
7720: 64 20 73 70 61 63 65 20 77 69 74 68 69 6e 0a 61  d space within.a
7730: 20 62 2d 74 72 65 65 20 70 61 67 65 2e 20 20 46   b-tree page.  F
7740: 72 65 65 62 6c 6f 63 6b 73 20 61 72 65 20 6f 72  reeblocks are or
7750: 67 61 6e 69 7a 65 64 20 61 73 20 61 20 63 68 61  ganized as a cha
7760: 69 6e 2e 20 20 5e 54 68 65 20 66 69 72 73 74 20  in.  ^The first 
7770: 32 20 62 79 74 65 73 20 6f 66 0a 61 20 66 72 65  2 bytes of.a fre
7780: 65 62 6c 6f 63 6b 20 61 72 65 20 61 20 62 69 67  eblock are a big
7790: 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20  -endian integer 
77a0: 77 68 69 63 68 20 69 73 20 74 68 65 20 6f 66 66  which is the off
77b0: 73 65 74 20 69 6e 20 74 68 65 20 62 2d 74 72 65  set in the b-tre
77c0: 65 20 70 61 67 65 0a 6f 66 20 74 68 65 20 6e 65  e page.of the ne
77d0: 78 74 20 66 72 65 65 62 6c 6f 63 6b 20 69 6e 20  xt freeblock in 
77e0: 74 68 65 20 63 68 61 69 6e 2c 20 6f 72 20 7a 65  the chain, or ze
77f0: 72 6f 20 69 66 20 74 68 65 20 66 72 65 65 62 6c  ro if the freebl
7800: 6f 63 6b 20 69 73 20 74 68 65 20 6c 61 73 74 20  ock is the last 
7810: 6f 6e 0a 74 68 65 20 63 68 61 69 6e 2e 20 20 5e  on.the chain.  ^
7820: 54 68 65 20 74 68 69 72 64 20 61 6e 64 20 66 6f  The third and fo
7830: 75 72 74 68 20 62 79 74 65 73 20 6f 66 20 65 61  urth bytes of ea
7840: 63 68 20 66 72 65 65 62 6c 6f 63 6b 20 66 6f 72  ch freeblock for
7850: 6d 0a 61 20 62 69 67 2d 65 6e 64 69 61 6e 20 69  m.a big-endian i
7860: 6e 74 65 67 65 72 20 77 68 69 63 68 20 69 73 20  nteger which is 
7870: 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20  the size of the 
7880: 66 72 65 65 62 6c 6f 63 6b 20 69 6e 20 62 79 74  freeblock in byt
7890: 65 73 2c 20 69 6e 63 6c 75 64 69 6e 67 0a 74 68  es, including.th
78a0: 65 20 34 2d 62 79 74 65 20 68 65 61 64 65 72 2e  e 4-byte header.
78b0: 20 20 5e 46 72 65 65 62 6c 6f 63 6b 73 20 61 72    ^Freeblocks ar
78c0: 65 20 61 6c 77 61 79 73 20 63 6f 6e 6e 65 63 74  e always connect
78d0: 65 64 20 69 6e 20 6f 72 64 65 72 20 0a 6f 66 20  ed in order .of 
78e0: 69 6e 63 72 65 61 73 69 6e 67 20 6f 66 66 73 65  increasing offse
78f0: 74 2e 20 20 5e 54 68 65 20 73 65 63 6f 6e 64 20  t.  ^The second 
7900: 66 69 65 6c 64 20 6f 66 20 74 68 65 20 62 2d 74  field of the b-t
7910: 72 65 65 20 70 61 67 65 20 68 65 61 64 65 72 20  ree page header 
7920: 69 73 20 74 68 65 0a 6f 66 66 73 65 74 20 6f 66  is the.offset of
7930: 20 74 68 65 20 66 69 72 73 74 20 66 72 65 65 62   the first freeb
7940: 6c 6f 63 6b 2c 20 6f 72 20 7a 65 72 6f 20 69 66  lock, or zero if
7950: 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 66 72   there are no fr
7960: 65 65 62 6c 6f 63 6b 73 20 6f 6e 20 74 68 65 0a  eeblocks on the.
7970: 70 61 67 65 2e 20 20 5e 49 6e 20 61 20 77 65 6c  page.  ^In a wel
7980: 6c 2d 66 6f 72 6d 65 64 20 62 2d 74 72 65 65 20  l-formed b-tree 
7990: 70 61 67 65 2c 20 74 68 65 72 65 20 77 69 6c 6c  page, there will
79a0: 20 61 6c 77 61 79 73 20 62 65 20 61 74 20 6c 65   always be at le
79b0: 61 73 74 20 6f 6e 65 20 63 65 6c 6c 0a 62 65 66  ast one cell.bef
79c0: 6f 72 65 20 74 68 65 20 66 69 72 73 74 20 66 72  ore the first fr
79d0: 65 65 62 6c 6f 63 6b 2e 3c 2f 70 3e 0a 0a 3c 70  eeblock.</p>..<p
79e0: 3e 41 20 66 72 65 65 62 6c 6f 63 6b 20 72 65 71  >A freeblock req
79f0: 75 69 72 65 73 20 61 74 20 6c 65 61 73 74 20 34  uires at least 4
7a00: 20 62 79 74 65 73 20 6f 66 20 73 70 61 63 65 2e   bytes of space.
7a10: 20 20 49 66 20 74 68 65 72 65 20 69 73 20 61 6e    If there is an
7a20: 20 69 73 6f 6c 61 74 65 64 0a 67 72 6f 75 70 20   isolated.group 
7a30: 6f 66 20 31 2c 20 32 2c 20 6f 72 20 33 20 75 6e  of 1, 2, or 3 un
7a40: 75 73 65 64 20 62 79 74 65 73 20 77 69 74 68 69  used bytes withi
7a50: 6e 20 74 68 65 20 63 65 6c 6c 20 63 6f 6e 74 65  n the cell conte
7a60: 6e 74 20 61 72 65 61 2c 20 74 68 6f 73 65 20 62  nt area, those b
7a70: 79 74 65 73 0a 63 6f 6d 70 72 69 73 65 20 61 20  ytes.comprise a 
7a80: 66 72 61 67 6d 65 6e 74 2e 20 20 5e 54 68 65 20  fragment.  ^The 
7a90: 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20  total number of 
7aa0: 62 79 74 65 73 20 69 6e 20 61 6c 6c 20 66 72 61  bytes in all fra
7ab0: 67 6d 65 6e 74 73 20 69 73 20 73 74 6f 72 65 64  gments is stored
7ac0: 0a 69 6e 20 74 68 65 20 66 69 66 74 68 20 66 69  .in the fifth fi
7ad0: 65 6c 64 20 6f 66 20 74 68 65 20 62 2d 74 72 65  eld of the b-tre
7ae0: 65 20 70 61 67 65 20 68 65 61 64 65 72 2e 20 20  e page header.  
7af0: 5e 49 6e 20 61 20 77 65 6c 6c 2d 66 6f 72 6d 65  ^In a well-forme
7b00: 64 20 62 2d 74 72 65 65 20 70 61 67 65 2c 0a 74  d b-tree page,.t
7b10: 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20  he total number 
7b20: 6f 66 20 62 79 74 65 73 20 69 6e 20 66 72 61 67  of bytes in frag
7b30: 6d 65 6e 74 73 20 6d 61 79 20 6e 6f 74 20 65 78  ments may not ex
7b40: 63 65 65 64 20 36 30 2e 3c 2f 70 3e 0a 0a 3c 70  ceed 60.</p>..<p
7b50: 3e 54 68 65 20 74 6f 74 61 6c 20 61 6d 6f 75 6e  >The total amoun
7b60: 74 20 6f 66 20 66 72 65 65 20 73 70 61 63 65 20  t of free space 
7b70: 6f 6e 20 61 20 62 2d 74 72 65 65 20 70 61 67 65  on a b-tree page
7b80: 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 74 68 65   consists of the
7b90: 20 73 69 7a 65 0a 6f 66 20 74 68 65 20 75 6e 61   size.of the una
7ba0: 6c 6c 6f 63 61 74 65 64 20 72 65 67 69 6f 6e 20  llocated region 
7bb0: 70 6c 75 73 20 74 68 65 20 74 6f 74 61 6c 20 73  plus the total s
7bc0: 69 7a 65 20 6f 66 20 61 6c 6c 20 66 72 65 65 62  ize of all freeb
7bd0: 6c 6f 63 6b 73 20 70 6c 75 73 20 74 68 65 0a 6e  locks plus the.n
7be0: 75 6d 62 65 72 20 6f 66 20 66 72 61 67 6d 65 6e  umber of fragmen
7bf0: 74 65 64 20 66 72 65 65 20 62 79 74 65 73 2e 20  ted free bytes. 
7c00: 20 5e 53 51 4c 69 74 65 20 6d 61 79 20 66 72 6f   ^SQLite may fro
7c10: 6d 20 74 69 6d 65 20 74 6f 20 74 69 6d 65 20 72  m time to time r
7c20: 65 6f 72 67 61 6e 69 7a 65 0a 61 20 62 2d 74 72  eorganize.a b-tr
7c30: 65 65 20 70 61 67 65 20 73 6f 20 74 68 61 74 20  ee page so that 
7c40: 74 68 65 72 65 20 61 72 65 20 6e 6f 20 66 72 65  there are no fre
7c50: 65 62 6c 6f 63 6b 73 20 6f 72 20 66 72 61 67 6d  eblocks or fragm
7c60: 65 6e 74 20 62 79 74 65 73 2c 20 61 6c 6c 0a 75  ent bytes, all.u
7c70: 6e 75 73 65 64 20 62 79 74 65 73 20 61 72 65 20  nused bytes are 
7c80: 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 65  contained in the
7c90: 20 75 6e 61 6c 6c 6f 63 61 74 65 64 20 73 70 61   unallocated spa
7ca0: 63 65 20 72 65 67 69 6f 6e 2c 20 61 6e 64 20 61  ce region, and a
7cb0: 6c 6c 0a 63 65 6c 6c 73 20 61 72 65 20 70 61 63  ll.cells are pac
7cc0: 6b 65 64 20 74 69 67 68 74 6c 79 20 61 74 20 74  ked tightly at t
7cd0: 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 70 61  he end of the pa
7ce0: 67 65 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c  ge.  This is cal
7cf0: 6c 65 64 20 0a 22 64 65 66 72 61 67 6d 65 6e 74  led ."defragment
7d00: 69 6e 67 22 20 74 68 65 20 62 2d 74 72 65 65 20  ing" the b-tree 
7d10: 70 61 67 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  page.</p>..<tcl>
7d20: 68 64 5f 66 72 61 67 6d 65 6e 74 20 76 61 72 69  hd_fragment vari
7d30: 6e 74 20 7b 76 61 72 69 61 62 6c 65 2d 6c 65 6e  nt {variable-len
7d40: 67 74 68 20 69 6e 74 65 67 65 72 7d 20 7b 76 61  gth integer} {va
7d50: 72 69 6e 74 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  rint}</tcl>..<p>
7d60: 41 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74  A variable-lengt
7d70: 68 20 69 6e 74 65 67 65 72 20 6f 72 20 22 76 61  h integer or "va
7d80: 72 69 6e 74 22 20 69 73 20 61 20 73 74 61 74 69  rint" is a stati
7d90: 63 20 48 75 66 66 6d 61 6e 20 65 6e 63 6f 64 69  c Huffman encodi
7da0: 6e 67 0a 6f 66 20 36 34 2d 62 69 74 20 74 77 6f  ng.of 64-bit two
7db0: 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 74  s-complement int
7dc0: 65 67 65 72 73 20 74 68 61 74 20 75 73 65 73 20  egers that uses 
7dd0: 6c 65 73 73 20 73 70 61 63 65 20 66 6f 72 20 73  less space for s
7de0: 6d 61 6c 6c 20 70 6f 73 69 74 69 76 65 20 0a 76  mall positive .v
7df0: 61 6c 75 65 73 2e 20 0a 41 20 76 61 72 69 6e 74  alues. .A varint
7e00: 20 69 73 20 62 65 74 77 65 65 6e 20 31 20 61 6e   is between 1 an
7e10: 64 20 39 20 62 79 74 65 73 20 69 6e 20 6c 65 6e  d 9 bytes in len
7e20: 67 74 68 2e 20 20 54 68 65 20 76 61 72 69 6e 74  gth.  The varint
7e30: 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 65 69 74   consists of eit
7e40: 68 65 72 0a 7a 65 72 6f 20 6f 72 20 6d 6f 72 65  her.zero or more
7e50: 20 62 79 74 65 73 20 77 68 69 63 68 20 68 61 76   bytes which hav
7e60: 65 20 74 68 65 20 68 69 67 68 2d 6f 72 64 65 72  e the high-order
7e70: 20 62 69 74 20 73 65 74 20 66 6f 6c 6c 6f 77 65   bit set followe
7e80: 64 20 62 79 20 61 20 73 69 6e 67 6c 65 20 62 79  d by a single by
7e90: 74 65 0a 77 69 74 68 20 74 68 65 20 68 69 67 68  te.with the high
7ea0: 2d 6f 72 64 65 72 20 62 69 74 20 63 6c 65 61 72  -order bit clear
7eb0: 2c 20 6f 72 20 6e 69 6e 65 20 62 79 74 65 73 2c  , or nine bytes,
7ec0: 20 77 68 69 63 68 65 76 65 72 20 69 73 20 73 68   whichever is sh
7ed0: 6f 72 74 65 72 2e 0a 54 68 65 20 6c 6f 77 65 72  orter..The lower
7ee0: 20 73 65 76 65 6e 20 62 69 74 73 20 6f 66 20 65   seven bits of e
7ef0: 61 63 68 20 6f 66 20 74 68 65 20 66 69 72 73 74  ach of the first
7f00: 20 65 69 67 68 74 20 62 79 74 65 73 20 61 6e 64   eight bytes and
7f10: 20 61 6c 6c 20 38 20 62 69 74 73 20 6f 66 0a 74   all 8 bits of.t
7f20: 68 65 20 6e 69 6e 74 68 20 62 79 74 65 20 61 72  he ninth byte ar
7f30: 65 20 75 73 65 64 20 74 6f 20 72 65 63 6f 6e 73  e used to recons
7f40: 74 72 75 63 74 20 74 68 65 20 36 34 2d 62 69 74  truct the 64-bit
7f50: 20 74 77 6f 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74   twos-complement
7f60: 20 69 6e 74 65 67 65 72 2e 0a 56 61 72 69 6e 74   integer..Varint
7f70: 73 20 61 72 65 20 62 69 67 2d 65 6e 64 69 61 6e  s are big-endian
7f80: 3a 20 62 69 74 73 20 74 61 6b 65 6e 20 66 72 6f  : bits taken fro
7f90: 6d 20 74 68 65 20 65 61 72 6c 69 65 72 20 62 79  m the earlier by
7fa0: 74 65 20 6f 66 20 74 68 65 20 76 61 72 69 6e 74  te of the varint
7fb0: 0a 61 72 65 20 74 68 65 20 6d 6f 72 65 20 73 69  .are the more si
7fc0: 67 6e 69 66 69 63 61 6e 74 20 74 68 61 6e 20 62  gnificant than b
7fd0: 69 74 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20 74  its taken from t
7fe0: 68 65 20 6c 61 74 65 72 20 62 79 74 65 73 2e 20  he later bytes. 
7ff0: 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 66 6f 72  </p>..<p>The for
8000: 6d 61 74 20 6f 66 20 61 20 63 65 6c 6c 20 64 65  mat of a cell de
8010: 70 65 6e 64 73 20 6f 6e 20 77 68 69 63 68 20 6b  pends on which k
8020: 69 6e 64 20 6f 66 20 62 2d 74 72 65 65 20 70 61  ind of b-tree pa
8030: 67 65 20 74 68 65 20 63 65 6c 6c 0a 61 70 70 65  ge the cell.appe
8040: 61 72 73 20 6f 6e 2e 20 20 54 68 65 20 66 6f 6c  ars on.  The fol
8050: 6c 6f 77 69 6e 67 20 74 61 62 6c 65 20 73 68 6f  lowing table sho
8060: 77 73 20 74 68 65 20 65 6c 65 6d 65 6e 74 73 20  ws the elements 
8070: 6f 66 20 61 20 63 65 6c 6c 2c 20 69 6e 0a 6f 72  of a cell, in.or
8080: 64 65 72 20 6f 66 20 61 70 70 65 61 72 61 6e 63  der of appearanc
8090: 65 2c 20 66 6f 72 20 74 68 65 20 76 61 72 69 6f  e, for the vario
80a0: 75 73 20 62 2d 74 72 65 65 20 70 61 67 65 20 74  us b-tree page t
80b0: 79 70 65 73 2e 0a 0a 3c 64 6c 3e 0a 3c 64 74 3e  ypes...<dl>.<dt>
80c0: 3c 70 3e 54 61 62 6c 65 20 42 2d 54 72 65 65 20  <p>Table B-Tree 
80d0: 4c 65 61 66 20 43 65 6c 6c 20 28 68 65 61 64 65  Leaf Cell (heade
80e0: 72 20 30 78 30 64 29 3a 3c 2f 70 3e 3c 2f 64 74  r 0x0d):</p></dt
80f0: 3e 0a 3c 64 64 3e 3c 70 3e 3c 75 6c 3e 0a 3c 6c  >.<dd><p><ul>.<l
8100: 69 3e 41 20 76 61 72 69 6e 74 20 77 68 69 63 68  i>A varint which
8110: 20 69 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75   is the total nu
8120: 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66  mber of bytes of
8130: 20 70 61 79 6c 6f 61 64 2c 20 69 6e 63 6c 75 64   payload, includ
8140: 69 6e 67 20 61 6e 79 0a 6f 76 65 72 66 6c 6f 77  ing any.overflow
8150: 0a 3c 6c 69 3e 41 20 76 61 72 69 6e 74 20 77 68  .<li>A varint wh
8160: 69 63 68 20 69 73 20 74 68 65 20 69 6e 74 65 67  ich is the integ
8170: 65 72 20 6b 65 79 2c 20 61 2e 6b 2e 61 2e 20 22  er key, a.k.a. "
8180: 5b 72 6f 77 69 64 5d 22 0a 3c 6c 69 3e 54 68 65  [rowid]".<li>The
8190: 20 69 6e 69 74 69 61 6c 20 70 6f 72 74 69 6f 6e   initial portion
81a0: 20 6f 66 20 74 68 65 20 70 61 79 6c 6f 61 64 20   of the payload 
81b0: 74 68 61 74 20 64 6f 65 73 20 6e 6f 74 20 73 70  that does not sp
81c0: 69 6c 6c 20 74 6f 20 6f 76 65 72 66 6c 6f 77 0a  ill to overflow.
81d0: 70 61 67 65 73 2e 0a 3c 6c 69 3e 41 20 34 2d 62  pages..<li>A 4-b
81e0: 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69  yte big-endian i
81f0: 6e 74 65 67 65 72 20 70 61 67 65 20 6e 75 6d 62  nteger page numb
8200: 65 72 20 66 6f 72 20 74 68 65 20 66 69 72 73 74  er for the first
8210: 20 70 61 67 65 20 6f 66 20 74 68 65 0a 6f 76 65   page of the.ove
8220: 72 66 6c 6f 77 20 70 61 67 65 20 6c 69 73 74 20  rflow page list 
8230: 2d 20 6f 6d 69 74 74 65 64 20 69 66 20 61 6c 6c  - omitted if all
8240: 20 70 61 79 6c 6f 61 64 20 66 69 74 73 20 6f 6e   payload fits on
8250: 20 74 68 65 20 62 2d 74 72 65 65 20 70 61 67 65   the b-tree page
8260: 2e 0a 3c 2f 75 6c 3e 3c 2f 70 3e 3c 2f 64 64 3e  ..</ul></p></dd>
8270: 0a 0a 3c 64 74 3e 3c 70 3e 54 61 62 6c 65 20 42  ..<dt><p>Table B
8280: 2d 54 72 65 65 20 49 6e 74 65 72 69 6f 72 20 43  -Tree Interior C
8290: 65 6c 6c 20 28 68 65 61 64 65 72 20 30 78 30 35  ell (header 0x05
82a0: 29 3a 3c 2f 70 3e 3c 2f 64 74 3e 0a 3c 64 64 3e  ):</p></dt>.<dd>
82b0: 3c 70 3e 3c 75 6c 3e 0a 3c 6c 69 3e 41 20 34 2d  <p><ul>.<li>A 4-
82c0: 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20  byte big-endian 
82d0: 70 61 67 65 20 6e 75 6d 62 65 72 20 77 68 69 63  page number whic
82e0: 68 20 69 73 20 74 68 65 20 6c 65 66 74 20 63 68  h is the left ch
82f0: 69 6c 64 20 70 6f 69 6e 74 65 72 2e 0a 3c 6c 69  ild pointer..<li
8300: 3e 41 20 76 61 72 69 6e 74 20 77 68 69 63 68 20  >A varint which 
8310: 69 73 20 74 68 65 20 69 6e 74 65 67 65 72 20 6b  is the integer k
8320: 65 79 0a 3c 2f 75 6c 3e 3c 2f 70 3e 3c 2f 64 64  ey.</ul></p></dd
8330: 3e 0a 0a 3c 64 74 3e 3c 70 3e 49 6e 64 65 78 20  >..<dt><p>Index 
8340: 42 2d 54 72 65 65 20 4c 65 61 66 20 43 65 6c 6c  B-Tree Leaf Cell
8350: 20 28 68 65 61 64 65 72 20 30 78 30 61 29 3a 3c   (header 0x0a):<
8360: 2f 70 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e  /p></dt>.<dd><p>
8370: 3c 75 6c 3e 0a 3c 6c 69 3e 41 20 76 61 72 69 6e  <ul>.<li>A varin
8380: 74 20 77 68 69 63 68 20 69 73 20 74 68 65 20 74  t which is the t
8390: 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 62  otal number of b
83a0: 79 74 65 73 20 6f 66 20 6b 65 79 20 70 61 79 6c  ytes of key payl
83b0: 6f 61 64 2c 20 69 6e 63 6c 75 64 69 6e 67 20 61  oad, including a
83c0: 6e 79 0a 6f 76 65 72 66 6c 6f 77 0a 3c 6c 69 3e  ny.overflow.<li>
83d0: 54 68 65 20 69 6e 69 74 69 61 6c 20 70 6f 72 74  The initial port
83e0: 69 6f 6e 20 6f 66 20 74 68 65 20 70 61 79 6c 6f  ion of the paylo
83f0: 61 64 20 74 68 61 74 20 64 6f 65 73 20 6e 6f 74  ad that does not
8400: 20 73 70 69 6c 6c 20 74 6f 20 6f 76 65 72 66 6c   spill to overfl
8410: 6f 77 0a 70 61 67 65 73 2e 0a 3c 6c 69 3e 41 20  ow.pages..<li>A 
8420: 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61  4-byte big-endia
8430: 6e 20 69 6e 74 65 67 65 72 20 70 61 67 65 20 6e  n integer page n
8440: 75 6d 62 65 72 20 66 6f 72 20 74 68 65 20 66 69  umber for the fi
8450: 72 73 74 20 70 61 67 65 20 6f 66 20 74 68 65 0a  rst page of the.
8460: 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 20 6c 69  overflow page li
8470: 73 74 20 2d 20 6f 6d 69 74 74 65 64 20 69 66 20  st - omitted if 
8480: 61 6c 6c 20 70 61 79 6c 6f 61 64 20 66 69 74 73  all payload fits
8490: 20 6f 6e 20 74 68 65 20 62 2d 74 72 65 65 20 70   on the b-tree p
84a0: 61 67 65 2e 0a 3c 2f 75 6c 3e 3c 2f 70 3e 3c 2f  age..</ul></p></
84b0: 64 64 3e 0a 0a 3c 64 74 3e 3c 70 3e 49 6e 64 65  dd>..<dt><p>Inde
84c0: 78 20 42 2d 54 72 65 65 20 49 6e 74 65 72 69 6f  x B-Tree Interio
84d0: 72 20 43 65 6c 6c 20 28 68 65 61 64 65 72 20 30  r Cell (header 0
84e0: 78 30 32 29 3a 3c 2f 70 3e 3c 2f 64 74 3e 0a 3c  x02):</p></dt>.<
84f0: 64 64 3e 3c 70 3e 3c 75 6c 3e 0a 3c 6c 69 3e 41  dd><p><ul>.<li>A
8500: 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69   4-byte big-endi
8510: 61 6e 20 70 61 67 65 20 6e 75 6d 62 65 72 20 77  an page number w
8520: 68 69 63 68 20 69 73 20 74 68 65 20 6c 65 66 74  hich is the left
8530: 20 63 68 69 6c 64 20 70 6f 69 6e 74 65 72 2e 0a   child pointer..
8540: 3c 6c 69 3e 41 20 76 61 72 69 6e 74 20 77 68 69  <li>A varint whi
8550: 63 68 20 69 73 20 74 68 65 20 74 6f 74 61 6c 20  ch is the total 
8560: 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  number of bytes 
8570: 6f 66 20 6b 65 79 20 70 61 79 6c 6f 61 64 2c 20  of key payload, 
8580: 69 6e 63 6c 75 64 69 6e 67 20 61 6e 79 0a 6f 76  including any.ov
8590: 65 72 66 6c 6f 77 0a 3c 6c 69 3e 54 68 65 20 69  erflow.<li>The i
85a0: 6e 69 74 69 61 6c 20 70 6f 72 74 69 6f 6e 20 6f  nitial portion o
85b0: 66 20 74 68 65 20 70 61 79 6c 6f 61 64 20 74 68  f the payload th
85c0: 61 74 20 64 6f 65 73 20 6e 6f 74 20 73 70 69 6c  at does not spil
85d0: 6c 20 74 6f 20 6f 76 65 72 66 6c 6f 77 0a 70 61  l to overflow.pa
85e0: 67 65 73 2e 0a 3c 6c 69 3e 41 20 34 2d 62 79 74  ges..<li>A 4-byt
85f0: 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74  e big-endian int
8600: 65 67 65 72 20 70 61 67 65 20 6e 75 6d 62 65 72  eger page number
8610: 20 66 6f 72 20 74 68 65 20 66 69 72 73 74 20 70   for the first p
8620: 61 67 65 20 6f 66 20 74 68 65 0a 6f 76 65 72 66  age of the.overf
8630: 6c 6f 77 20 70 61 67 65 20 6c 69 73 74 20 2d 20  low page list - 
8640: 6f 6d 69 74 74 65 64 20 69 66 20 61 6c 6c 20 70  omitted if all p
8650: 61 79 6c 6f 61 64 20 66 69 74 73 20 6f 6e 20 74  ayload fits on t
8660: 68 65 20 62 2d 74 72 65 65 20 70 61 67 65 2e 0a  he b-tree page..
8670: 3c 2f 75 6c 3e 3c 2f 70 3e 3c 2f 64 64 3e 0a 3c  </ul></p></dd>.<
8680: 2f 64 6c 3e 0a 0a 3c 70 3e 54 68 65 20 69 6e 66  /dl>..<p>The inf
8690: 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 76 65 20 63  ormation above c
86a0: 61 6e 20 62 65 20 72 65 63 61 73 74 20 69 6e 74  an be recast int
86b0: 6f 20 61 20 74 61 62 6c 65 20 66 6f 72 6d 61 74  o a table format
86c0: 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e   as follows:</p>
86d0: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
86e0: 6e 74 20 63 65 6c 6c 66 6f 72 6d 61 74 20 7b 63  nt cellformat {c
86f0: 65 6c 6c 20 66 6f 72 6d 61 74 20 73 75 6d 6d 61  ell format summa
8700: 72 79 7d 3c 2f 74 63 6c 3e 0a 3c 63 65 6e 74 65  ry}</tcl>.<cente
8710: 72 3e 0a 3c 69 3e 42 2d 74 72 65 65 20 43 65 6c  r>.<i>B-tree Cel
8720: 6c 20 46 6f 72 6d 61 74 3c 2f 69 3e 0a 3c 74 61  l Format</i>.<ta
8730: 62 6c 65 20 62 6f 72 64 65 72 3d 31 20 77 69 64  ble border=1 wid
8740: 74 68 3d 22 38 30 25 22 3e 0a 3c 74 72 3e 3c 74  th="80%">.<tr><t
8750: 68 20 72 6f 77 73 70 61 6e 3d 32 3e 44 61 74 61  h rowspan=2>Data
8760: 74 79 70 65 0a 20 20 20 20 3c 74 68 20 63 6f 6c  type.    <th col
8770: 73 70 61 6e 3d 34 3e 41 70 70 65 61 72 73 20 69  span=4>Appears i
8780: 6e 2e 2e 2e 0a 20 20 20 20 3c 74 68 20 72 6f 77  n....    <th row
8790: 73 70 61 6e 3d 32 3e 44 65 73 63 72 69 70 74 69  span=2>Descripti
87a0: 6f 6e 0a 3c 74 72 3e 3c 74 68 3e 54 61 62 6c 65  on.<tr><th>Table
87b0: 20 4c 65 61 66 20 28 30 78 30 64 29 0a 20 20 20   Leaf (0x0d).   
87c0: 20 3c 74 68 3e 54 61 62 6c 65 20 49 6e 74 65 72   <th>Table Inter
87d0: 69 6f 72 20 28 30 78 30 35 29 0a 20 20 20 20 3c  ior (0x05).    <
87e0: 74 68 3e 49 6e 64 65 78 20 4c 65 61 66 20 28 30  th>Index Leaf (0
87f0: 78 30 61 29 0a 20 20 20 20 3c 74 68 3e 49 6e 64  x0a).    <th>Ind
8800: 65 78 20 49 6e 74 65 72 69 6f 72 20 28 30 78 30  ex Interior (0x0
8810: 32 29 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e  2).<tr><td align
8820: 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74  =center valign=t
8830: 6f 70 3e 34 2d 62 79 74 65 20 69 6e 74 65 67 65  op>4-byte intege
8840: 72 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d  r.    <td align=
8850: 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f  center valign=to
8860: 70 3e 26 6e 62 73 70 3b 0a 20 20 20 20 3c 74 64  p>&nbsp;.    <td
8870: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61   align=center va
8880: 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34  lign=top>&#x2714
8890: 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d  ;.    <td align=
88a0: 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f  center valign=to
88b0: 70 3e 26 6e 62 73 70 3b 0a 20 20 20 20 3c 74 64  p>&nbsp;.    <td
88c0: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61   align=center va
88d0: 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34  lign=top>&#x2714
88e0: 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d  ;.    <td align=
88f0: 6c 65 66 74 3e 50 61 67 65 20 6e 75 6d 62 65 72  left>Page number
8900: 20 6f 66 20 6c 65 66 74 20 63 68 69 6c 64 0a 3c   of left child.<
8910: 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e  tr><td align=cen
8920: 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 76  ter valign=top>v
8930: 61 72 69 6e 74 0a 20 20 20 20 3c 74 64 20 61 6c  arint.    <td al
8940: 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67  ign=center valig
8950: 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20  n=top>&#x2714;. 
8960: 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e     <td align=cen
8970: 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26  ter valign=top>&
8980: 6e 62 73 70 3b 0a 20 20 20 20 3c 74 64 20 61 6c  nbsp;.    <td al
8990: 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67  ign=center valig
89a0: 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20  n=top>&#x2714;. 
89b0: 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e     <td align=cen
89c0: 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26  ter valign=top>&
89d0: 23 78 32 37 31 34 3b 0a 20 20 20 20 3c 74 64 20  #x2714;.    <td 
89e0: 61 6c 69 67 6e 3d 6c 65 66 74 3e 4e 75 6d 62 65  align=left>Numbe
89f0: 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 70 61  r of bytes of pa
8a00: 79 6c 6f 61 64 0a 3c 74 72 3e 3c 74 64 20 61 6c  yload.<tr><td al
8a10: 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67  ign=center valig
8a20: 6e 3d 74 6f 70 3e 76 61 72 69 6e 74 0a 20 20 20  n=top>varint.   
8a30: 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65   <td align=cente
8a40: 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78  r valign=top>&#x
8a50: 32 37 31 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c  2714;.    <td al
8a60: 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67  ign=center valig
8a70: 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20  n=top>&#x2714;. 
8a80: 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e     <td align=cen
8a90: 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26  ter valign=top>&
8aa0: 6e 62 73 70 3b 0a 20 20 20 20 3c 74 64 20 61 6c  nbsp;.    <td al
8ab0: 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67  ign=center valig
8ac0: 6e 3d 74 6f 70 3e 26 6e 62 73 70 3b 0a 20 20 20  n=top>&nbsp;.   
8ad0: 20 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e   <td align=left>
8ae0: 52 6f 77 69 64 0a 3c 74 72 3e 3c 74 64 20 61 6c  Rowid.<tr><td al
8af0: 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67  ign=center valig
8b00: 6e 3d 74 6f 70 3e 62 79 74 65 20 61 72 72 61 79  n=top>byte array
8b10: 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63  .    <td align=c
8b20: 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70  enter valign=top
8b30: 3e 26 23 78 32 37 31 34 3b 0a 20 20 20 20 3c 74  >&#x2714;.    <t
8b40: 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76  d align=center v
8b50: 61 6c 69 67 6e 3d 74 6f 70 3e 26 6e 62 73 70 3b  align=top>&nbsp;
8b60: 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63  .    <td align=c
8b70: 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70  enter valign=top
8b80: 3e 26 23 78 32 37 31 34 3b 0a 20 20 20 20 3c 74  >&#x2714;.    <t
8b90: 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76  d align=center v
8ba0: 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37 31  align=top>&#x271
8bb0: 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e  4;.    <td align
8bc0: 3d 6c 65 66 74 3e 50 61 79 6c 6f 61 64 0a 3c 74  =left>Payload.<t
8bd0: 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74  r><td align=cent
8be0: 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 34 2d  er valign=top>4-
8bf0: 62 79 74 65 20 69 6e 74 65 67 65 72 0a 20 20 20  byte integer.   
8c00: 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65   <td align=cente
8c10: 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78  r valign=top>&#x
8c20: 32 37 31 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c  2714;.    <td al
8c30: 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67  ign=center valig
8c40: 6e 3d 74 6f 70 3e 26 6e 62 73 70 3b 0a 20 20 20  n=top>&nbsp;.   
8c50: 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65   <td align=cente
8c60: 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78  r valign=top>&#x
8c70: 32 37 31 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c  2714;.    <td al
8c80: 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67  ign=center valig
8c90: 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20  n=top>&#x2714;. 
8ca0: 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66     <td align=lef
8cb0: 74 3e 50 61 67 65 20 6e 75 6d 62 65 72 20 6f 66  t>Page number of
8cc0: 20 66 69 72 73 74 20 6f 76 65 72 66 6c 6f 77 20   first overflow 
8cd0: 70 61 67 65 0a 3c 2f 74 61 62 6c 65 3e 3c 2f 63  page.</table></c
8ce0: 65 6e 74 65 72 3e 0a 0a 0a 3c 70 3e 54 68 65 20  enter>...<p>The 
8cf0: 61 6d 6f 75 6e 74 20 6f 66 20 70 61 79 6c 6f 61  amount of payloa
8d00: 64 20 74 68 61 74 20 73 70 69 6c 6c 73 20 6f 6e  d that spills on
8d10: 74 6f 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65  to overflow page
8d20: 73 20 61 6c 73 6f 20 64 65 70 65 6e 64 73 20 6f  s also depends o
8d30: 6e 0a 74 68 65 20 70 61 67 65 20 74 79 70 65 2e  n.the page type.
8d40: 20 20 46 6f 72 20 74 68 65 20 66 6f 6c 6c 6f 77    For the follow
8d50: 69 6e 67 20 63 6f 6d 70 75 74 61 74 69 6f 6e 73  ing computations
8d60: 2c 20 6c 65 74 20 55 20 62 65 20 74 68 65 20 75  , let U be the u
8d70: 73 61 62 6c 65 20 73 69 7a 65 0a 6f 66 20 61 20  sable size.of a 
8d80: 64 61 74 61 62 61 73 65 20 70 61 67 65 2c 20 74  database page, t
8d90: 68 65 20 74 6f 74 61 6c 20 70 61 67 65 20 73 69  he total page si
8da0: 7a 65 20 6c 65 73 73 20 74 68 65 20 72 65 73 65  ze less the rese
8db0: 72 76 65 64 20 73 70 61 63 65 20 61 74 20 74 68  rved space at th
8dc0: 65 0a 65 6e 64 20 6f 66 20 65 61 63 68 20 70 61  e.end of each pa
8dd0: 67 65 2e 20 20 41 6e 64 20 6c 65 74 20 50 20 62  ge.  And let P b
8de0: 65 20 74 68 65 20 70 61 79 6c 6f 61 64 20 73 69  e the payload si
8df0: 7a 65 2e 20 20 49 6e 20 74 68 65 20 66 6f 6c 6c  ze.  In the foll
8e00: 6f 77 69 6e 67 2c 0a 73 79 6d 62 6f 6c 20 58 20  owing,.symbol X 
8e10: 72 65 70 72 65 73 65 6e 74 73 20 74 68 65 20 6d  represents the m
8e20: 61 78 69 6d 75 6d 20 61 6d 6f 75 6e 74 20 6f 66  aximum amount of
8e30: 20 70 61 79 6c 6f 61 64 20 74 68 61 74 20 63 61   payload that ca
8e40: 6e 20 62 65 20 73 74 6f 72 65 64 20 64 69 72 65  n be stored dire
8e50: 63 74 6c 79 0a 6f 6e 20 74 68 65 20 62 2d 74 72  ctly.on the b-tr
8e60: 65 65 20 70 61 67 65 20 77 69 74 68 6f 75 74 20  ee page without 
8e70: 73 70 69 6c 6c 69 6e 67 20 6f 6e 74 6f 20 61 6e  spilling onto an
8e80: 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 20 61   overflow page a
8e90: 6e 64 20 73 79 6d 62 6f 6c 20 4d 0a 72 65 70 72  nd symbol M.repr
8ea0: 65 73 65 6e 74 73 20 74 68 65 20 6d 69 6e 69 6d  esents the minim
8eb0: 75 6d 20 61 6d 6f 75 6e 74 20 6f 66 20 70 61 79  um amount of pay
8ec0: 6c 6f 61 64 20 74 68 61 74 20 6d 75 73 74 20 62  load that must b
8ed0: 65 20 73 74 6f 72 65 64 20 6f 6e 20 74 68 65 20  e stored on the 
8ee0: 62 74 72 65 65 0a 70 61 67 65 20 62 65 66 6f 72  btree.page befor
8ef0: 65 20 73 70 69 6c 6c 69 6e 67 20 69 73 20 61 6c  e spilling is al
8f00: 6c 6f 77 65 64 2e 0a 0a 3c 64 6c 3e 0a 3c 64 74  lowed...<dl>.<dt
8f10: 3e 3c 70 3e 54 61 62 6c 65 20 42 2d 54 72 65 65  ><p>Table B-Tree
8f20: 20 4c 65 61 66 20 43 65 6c 6c 3a 3c 2f 64 74 3e   Leaf Cell:</dt>
8f30: 0a 3c 64 64 3e 3c 70 3e 0a 5e 28 4c 65 74 20 58  .<dd><p>.^(Let X
8f40: 20 62 65 20 55 2d 33 35 2e 20 20 49 66 20 74 68   be U-35.  If th
8f50: 65 20 70 61 79 6c 6f 61 64 20 73 69 7a 65 20 50  e payload size P
8f60: 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72   is less than or
8f70: 20 65 71 75 61 6c 20 74 6f 20 58 20 74 68 65 6e   equal to X then
8f80: 0a 74 68 65 20 65 6e 74 69 72 65 20 70 61 79 6c  .the entire payl
8f90: 6f 61 64 20 69 73 20 73 74 6f 72 65 64 20 6f 6e  oad is stored on
8fa0: 20 74 68 65 20 62 2d 74 72 65 65 20 6c 65 61 66   the b-tree leaf
8fb0: 20 70 61 67 65 2e 29 5e 0a 5e 28 4c 65 74 20 4d   page.)^.^(Let M
8fc0: 20 62 65 20 28 28 55 2d 31 32 29 2a 33 32 2f 32   be ((U-12)*32/2
8fd0: 35 35 29 2d 32 33 20 61 6e 64 20 6c 65 74 20 4b  55)-23 and let K
8fe0: 20 62 65 20 4d 2b 28 28 50 2d 4d 29 25 28 55 2d   be M+((P-M)%(U-
8ff0: 34 29 29 2e 0a 49 66 20 50 20 69 73 20 67 72 65  4))..If P is gre
9000: 61 74 65 72 20 74 68 61 6e 20 58 0a 74 68 65 6e  ater than X.then
9010: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62   the number of b
9020: 79 74 65 73 20 73 74 6f 72 65 64 20 6f 6e 20 74  ytes stored on t
9030: 68 65 20 74 61 62 6c 65 20 62 2d 74 72 65 65 20  he table b-tree 
9040: 6c 65 61 66 20 70 61 67 65 20 69 73 20 4b 0a 69  leaf page is K.i
9050: 66 20 4b 20 69 73 20 6c 65 73 73 20 6f 72 20 65  f K is less or e
9060: 71 75 61 6c 20 74 6f 20 58 20 6f 72 20 4d 20 6f  qual to X or M o
9070: 74 68 65 72 77 69 73 65 2e 29 5e 0a 5e 28 4e 6f  therwise.)^.^(No
9080: 74 65 20 74 68 61 74 20 6e 75 6d 62 65 72 20 6f  te that number o
9090: 66 20 62 79 74 65 73 20 73 74 6f 72 65 64 20 6f  f bytes stored o
90a0: 6e 20 74 68 65 20 6c 65 61 66 20 70 61 67 65 20  n the leaf page 
90b0: 69 73 20 6e 65 76 65 72 20 6c 65 73 73 20 74 68  is never less th
90c0: 61 6e 20 4d 2e 29 5e 0a 3c 2f 70 3e 3c 2f 64 64  an M.)^.</p></dd
90d0: 3e 0a 0a 3c 64 74 3e 3c 70 3e 54 61 62 6c 65 20  >..<dt><p>Table 
90e0: 42 2d 54 72 65 65 20 49 6e 74 65 72 69 6f 72 20  B-Tree Interior 
90f0: 43 65 6c 6c 3a 3c 2f 64 74 3e 0a 3c 64 64 3e 3c  Cell:</dt>.<dd><
9100: 70 3e 0a 49 6e 74 65 72 69 6f 72 20 70 61 67 65  p>.Interior page
9110: 73 20 6f 66 20 74 61 62 6c 65 20 62 2d 74 72 65  s of table b-tre
9120: 65 73 20 68 61 76 65 20 6e 6f 20 70 61 79 6c 6f  es have no paylo
9130: 61 64 20 61 6e 64 20 73 6f 20 74 68 65 72 65 20  ad and so there 
9140: 69 73 20 6e 65 76 65 72 0a 61 6e 79 20 70 61 79  is never.any pay
9150: 6c 6f 61 64 20 74 6f 20 73 70 69 6c 6c 2e 0a 3c  load to spill..<
9160: 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 70  /p></dd>..<dt><p
9170: 3e 49 6e 64 65 78 20 42 2d 54 72 65 65 20 4c 65  >Index B-Tree Le
9180: 61 66 20 4f 72 20 49 6e 74 65 72 69 6f 72 20 43  af Or Interior C
9190: 65 6c 6c 3a 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70  ell:</dt>.<dd><p
91a0: 3e 0a 5e 28 4c 65 74 20 58 20 62 65 20 28 28 55  >.^(Let X be ((U
91b0: 2d 31 32 29 2a 36 34 2f 32 35 35 29 2d 32 33 29  -12)*64/255)-23)
91c0: 2e 20 20 49 66 20 74 68 65 20 70 61 79 6c 6f 61  .  If the payloa
91d0: 64 20 73 69 7a 65 20 50 20 69 73 20 6c 65 73 73  d size P is less
91e0: 20 74 68 61 6e 0a 6f 72 20 65 71 75 61 6c 20 74   than.or equal t
91f0: 6f 20 58 20 74 68 65 6e 20 74 68 65 20 65 6e 74  o X then the ent
9200: 69 72 65 20 70 61 79 6c 6f 61 64 20 69 73 20 73  ire payload is s
9210: 74 6f 72 65 64 20 6f 6e 20 74 68 65 20 62 2d 74  tored on the b-t
9220: 72 65 65 20 70 61 67 65 2e 29 5e 0a 5e 28 4c 65  ree page.)^.^(Le
9230: 74 20 4d 20 62 65 20 28 28 55 2d 31 32 29 2a 33  t M be ((U-12)*3
9240: 32 2f 32 35 35 29 2d 32 33 20 61 6e 64 20 6c 65  2/255)-23 and le
9250: 74 20 4b 20 62 65 20 4d 2b 28 28 50 2d 4d 29 25  t K be M+((P-M)%
9260: 28 55 2d 34 29 29 2e 0a 49 66 20 50 20 69 73 20  (U-4))..If P is 
9270: 67 72 65 61 74 65 72 20 74 68 61 6e 20 58 20 74  greater than X t
9280: 68 65 6e 20 74 68 65 20 6e 75 6d 62 65 72 0a 6f  hen the number.o
9290: 66 20 62 79 74 65 73 20 73 74 6f 72 65 64 20 6f  f bytes stored o
92a0: 6e 20 74 68 65 20 69 6e 64 65 78 20 62 2d 74 72  n the index b-tr
92b0: 65 65 20 70 61 67 65 20 69 73 20 4b 20 69 66 20  ee page is K if 
92c0: 4b 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f  K is less than o
92d0: 72 0a 65 71 75 61 6c 20 74 6f 20 58 20 6f 72 20  r.equal to X or 
92e0: 4d 20 6f 74 68 65 72 77 69 73 65 2e 29 5e 0a 5e  M otherwise.)^.^
92f0: 28 4e 6f 74 65 20 74 68 61 74 20 6e 75 6d 62 65  (Note that numbe
9300: 72 20 6f 66 20 62 79 74 65 73 20 73 74 6f 72 65  r of bytes store
9310: 64 20 6f 6e 20 74 68 65 20 69 6e 64 65 78 20 70  d on the index p
9320: 61 67 65 20 69 73 20 6e 65 76 65 72 20 6c 65 73  age is never les
9330: 73 20 74 68 61 6e 20 4d 2e 29 5e 0a 3c 2f 70 3e  s than M.)^.</p>
9340: 3c 2f 64 64 3e 0a 3c 2f 64 6c 3e 0a 0a 3c 70 3e  </dd>.</dl>..<p>
9350: 48 65 72 65 20 69 73 20 61 6e 20 61 6c 74 65 72  Here is an alter
9360: 6e 61 74 69 76 65 20 64 65 73 63 72 69 70 74 69  native descripti
9370: 6f 6e 20 6f 66 20 74 68 65 20 73 61 6d 65 20 63  on of the same c
9380: 6f 6d 70 75 74 61 74 69 6f 6e 3a 0a 0a 3c 75 6c  omputation:..<ul
9390: 3e 0a 3c 6c 69 3e 58 20 69 73 20 55 2d 33 35 20  >.<li>X is U-35 
93a0: 66 6f 72 20 74 61 62 6c 65 20 62 74 72 65 65 20  for table btree 
93b0: 6c 65 61 66 20 70 61 67 65 73 20 6f 72 0a 20 20  leaf pages or.  
93c0: 20 20 28 28 55 2d 31 32 29 2a 36 34 2f 32 35 35    ((U-12)*64/255
93d0: 29 2d 32 33 20 66 6f 72 20 69 6e 64 65 78 20 70  )-23 for index p
93e0: 61 67 65 73 2e 0a 3c 6c 69 3e 4d 20 69 73 20 61  ages..<li>M is a
93f0: 6c 77 61 79 73 20 28 28 55 2d 31 32 29 2a 33 32  lways ((U-12)*32
9400: 2f 32 35 35 29 2d 32 33 2e 0a 3c 6c 69 3e 4c 65  /255)-23..<li>Le
9410: 74 20 4b 20 62 65 20 4d 2b 28 28 50 2d 4d 29 25  t K be M+((P-M)%
9420: 28 55 2d 34 29 29 2e 0a 3c 6c 69 3e 5e 49 66 20  (U-4))..<li>^If 
9430: 50 26 6c 74 3b 3d 58 20 74 68 65 6e 20 61 6c 6c  P&lt;=X then all
9440: 20 50 20 62 79 74 65 73 20 6f 66 20 70 61 79 6c   P bytes of payl
9450: 6f 61 64 20 61 72 65 20 73 74 6f 72 65 64 20 64  oad are stored d
9460: 69 72 65 63 74 6c 79 20 6f 6e 20 74 68 65 20 0a  irectly on the .
9470: 20 20 20 20 62 74 72 65 65 20 70 61 67 65 20 77      btree page w
9480: 69 74 68 6f 75 74 20 6f 76 65 72 66 6c 6f 77 2e  ithout overflow.
9490: 0a 3c 6c 69 3e 5e 49 66 20 50 3e 58 20 61 6e 64  .<li>^If P>X and
94a0: 20 4b 26 6c 74 3b 3d 58 20 74 68 65 6e 20 74 68   K&lt;=X then th
94b0: 65 20 66 69 72 73 74 20 4b 20 62 79 74 65 73 20  e first K bytes 
94c0: 6f 66 20 50 20 61 72 65 20 73 74 6f 72 65 64 20  of P are stored 
94d0: 6f 6e 20 74 68 65 20 0a 20 20 20 20 62 74 72 65  on the .    btre
94e0: 65 20 70 61 67 65 20 61 6e 64 20 74 68 65 20 72  e page and the r
94f0: 65 6d 61 69 6e 69 6e 67 20 50 2d 4b 20 62 79 74  emaining P-K byt
9500: 65 73 20 61 72 65 20 73 74 6f 72 65 64 20 6f 6e  es are stored on
9510: 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 73 2e   overflow pages.
9520: 0a 3c 6c 69 3e 5e 49 66 20 50 3e 58 20 61 6e 64  .<li>^If P>X and
9530: 20 4b 3e 58 20 74 68 65 6e 20 74 68 65 20 66 69   K>X then the fi
9540: 72 73 74 20 4d 20 62 79 74 65 73 20 6f 66 20 50  rst M bytes of P
9550: 20 61 72 65 20 73 74 6f 72 65 64 20 6f 6e 20 74   are stored on t
9560: 68 65 0a 20 20 20 20 62 74 72 65 65 20 70 61 67  he.    btree pag
9570: 65 20 61 6e 64 20 74 68 65 20 72 65 6d 61 69 6e  e and the remain
9580: 69 6e 67 20 50 2d 4d 20 62 79 74 65 73 20 61 72  ing P-M bytes ar
9590: 65 20 73 74 6f 72 65 64 20 6f 6e 20 6f 76 65 72  e stored on over
95a0: 66 6c 6f 77 20 70 61 67 65 73 2e 0a 3c 2f 75 6c  flow pages..</ul
95b0: 3e 0a 0a 3c 70 3e 54 68 65 20 6f 76 65 72 66 6c  >..<p>The overfl
95c0: 6f 77 20 74 68 72 65 73 68 6f 6c 64 73 20 61 72  ow thresholds ar
95d0: 65 20 64 65 73 69 67 6e 65 64 20 74 6f 20 67 69  e designed to gi
95e0: 76 65 20 61 20 6d 69 6e 69 6d 75 6d 20 66 61 6e  ve a minimum fan
95f0: 6f 75 74 20 6f 66 0a 34 20 66 6f 72 20 69 6e 64  out of.4 for ind
9600: 65 78 20 62 2d 74 72 65 65 73 20 61 6e 64 20 74  ex b-trees and t
9610: 6f 20 6d 61 6b 65 20 73 75 72 65 20 65 6e 6f 75  o make sure enou
9620: 67 68 20 6f 66 20 74 68 65 20 70 61 79 6c 6f 61  gh of the payloa
9630: 64 0a 69 73 20 6f 6e 20 74 68 65 20 62 2d 74 72  d.is on the b-tr
9640: 65 65 20 70 61 67 65 20 74 68 61 74 20 74 68 65  ee page that the
9650: 20 72 65 63 6f 72 64 20 68 65 61 64 65 72 20 63   record header c
9660: 61 6e 20 75 73 75 61 6c 6c 79 20 62 65 20 61 63  an usually be ac
9670: 63 65 73 73 65 64 0a 77 69 74 68 6f 75 74 20 63  cessed.without c
9680: 6f 6e 73 75 6c 74 69 6e 67 20 61 6e 20 6f 76 65  onsulting an ove
9690: 72 66 6c 6f 77 20 70 61 67 65 2e 20 20 49 6e 20  rflow page.  In 
96a0: 68 69 6e 64 73 69 67 68 74 2c 20 74 68 65 20 64  hindsight, the d
96b0: 65 73 69 67 6e 65 72 73 20 6f 66 0a 74 68 65 20  esigners of.the 
96c0: 53 51 4c 69 74 65 20 62 2d 74 72 65 65 20 6c 6f  SQLite b-tree lo
96d0: 67 69 63 20 72 65 61 6c 69 7a 65 20 74 68 61 74  gic realize that
96e0: 20 74 68 65 73 65 20 74 68 72 65 73 68 6f 6c 64   these threshold
96f0: 73 20 63 6f 75 6c 64 20 68 61 76 65 20 62 65 65  s could have bee
9700: 6e 0a 6d 61 64 65 20 6d 75 63 68 20 73 69 6d 70  n.made much simp
9710: 6c 65 72 2e 20 20 48 6f 77 65 76 65 72 2c 20 74  ler.  However, t
9720: 68 65 20 63 6f 6d 70 75 74 61 74 69 6f 6e 73 20  he computations 
9730: 63 61 6e 6e 6f 74 20 62 65 20 63 68 61 6e 67 65  cannot be change
9740: 64 0a 77 69 74 68 6f 75 74 20 72 65 73 75 6c 74  d.without result
9750: 69 6e 67 20 69 6e 20 61 6e 20 69 6e 63 6f 6d 70  ing in an incomp
9760: 61 74 69 62 6c 65 20 66 69 6c 65 20 66 6f 72 6d  atible file form
9770: 61 74 2e 20 20 41 6e 64 20 74 68 65 20 63 75 72  at.  And the cur
9780: 72 65 6e 74 20 63 6f 6d 70 75 74 61 74 69 6f 6e  rent computation
9790: 73 0a 77 6f 72 6b 20 77 65 6c 6c 2c 20 65 76 65  s.work well, eve
97a0: 6e 20 69 66 20 74 68 65 79 20 61 72 65 20 61 20  n if they are a 
97b0: 6c 69 74 74 6c 65 20 63 6f 6d 70 6c 65 78 2e 3c  little complex.<
97c0: 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  /p>..<tcl>hd_fra
97d0: 67 6d 65 6e 74 20 6f 76 66 6c 70 67 73 20 7b 6f  gment ovflpgs {o
97e0: 76 65 72 66 6c 6f 77 20 70 61 67 65 7d 20 7b 6f  verflow page} {o
97f0: 76 65 72 66 6c 6f 77 20 70 61 67 65 73 7d 3c 2f  verflow pages}</
9800: 74 63 6c 3e 0a 3c 68 32 3e 43 65 6c 6c 20 50 61  tcl>.<h2>Cell Pa
9810: 79 6c 6f 61 64 20 4f 76 65 72 66 6c 6f 77 20 50  yload Overflow P
9820: 61 67 65 73 3c 2f 68 32 3e 0a 0a 3c 70 3e 5e 57  ages</h2>..<p>^W
9830: 68 65 6e 20 74 68 65 20 70 61 79 6c 6f 61 64 20  hen the payload 
9840: 6f 66 20 61 20 62 2d 74 72 65 65 20 63 65 6c 6c  of a b-tree cell
9850: 20 69 73 20 74 6f 6f 20 6c 61 72 67 65 20 66 6f   is too large fo
9860: 72 20 74 68 65 20 62 2d 74 72 65 65 20 70 61 67  r the b-tree pag
9870: 65 2c 0a 74 68 65 20 73 75 72 70 6c 75 73 20 69  e,.the surplus i
9880: 73 20 73 70 69 6c 6c 65 64 20 6f 6e 74 6f 20 6f  s spilled onto o
9890: 76 65 72 66 6c 6f 77 20 70 61 67 65 73 2e 20 20  verflow pages.  
98a0: 5e 4f 76 65 72 66 6c 6f 77 20 70 61 67 65 73 20  ^Overflow pages 
98b0: 66 6f 72 6d 20 61 20 6c 69 6e 6b 65 64 0a 6c 69  form a linked.li
98c0: 73 74 2e 20 20 5e 54 68 65 20 66 69 72 73 74 20  st.  ^The first 
98d0: 66 6f 75 72 20 62 79 74 65 73 20 6f 66 20 65 61  four bytes of ea
98e0: 63 68 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65  ch overflow page
98f0: 20 61 72 65 20 61 20 62 69 67 2d 65 6e 64 69 61   are a big-endia
9900: 6e 0a 69 6e 74 65 67 65 72 20 77 68 69 63 68 20  n.integer which 
9910: 69 73 20 74 68 65 20 70 61 67 65 20 6e 75 6d 62  is the page numb
9920: 65 72 20 6f 66 20 74 68 65 20 6e 65 78 74 20 70  er of the next p
9930: 61 67 65 20 69 6e 20 74 68 65 20 63 68 61 69 6e  age in the chain
9940: 2c 20 6f 72 20 7a 65 72 6f 0a 66 6f 72 20 74 68  , or zero.for th
9950: 65 20 66 69 6e 61 6c 20 70 61 67 65 20 69 6e 20  e final page in 
9960: 74 68 65 20 63 68 61 69 6e 2e 20 20 5e 54 68 65  the chain.  ^The
9970: 20 66 69 66 74 68 20 62 79 74 65 20 74 68 72 6f   fifth byte thro
9980: 75 67 68 20 74 68 65 20 6c 61 73 74 20 75 73 61  ugh the last usa
9990: 62 6c 65 0a 62 79 74 65 20 61 72 65 20 75 73 65  ble.byte are use
99a0: 64 20 74 6f 20 68 6f 6c 64 20 6f 76 65 72 66 6c  d to hold overfl
99b0: 6f 77 20 63 6f 6e 74 65 6e 74 2e 3c 2f 70 3e 0a  ow content.</p>.
99c0: 0a 3c 68 32 3e 50 6f 69 6e 74 65 72 20 4d 61 70  .<h2>Pointer Map
99d0: 20 6f 72 20 50 74 72 6d 61 70 20 50 61 67 65 73   or Ptrmap Pages
99e0: 3c 2f 68 32 3e 0a 0a 3c 70 3e 50 6f 69 6e 74 65  </h2>..<p>Pointe
99f0: 72 20 6d 61 70 20 6f 72 20 70 74 72 6d 61 70 20  r map or ptrmap 
9a00: 70 61 67 65 73 20 61 72 65 20 65 78 74 72 61 20  pages are extra 
9a10: 70 61 67 65 73 20 69 6e 73 65 72 74 65 64 20 69  pages inserted i
9a20: 6e 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65  nto the database
9a30: 0a 74 6f 20 6d 61 6b 65 20 74 68 65 20 6f 70 65  .to make the ope
9a40: 72 61 74 69 6f 6e 20 6f 66 20 5b 61 75 74 6f 5f  ration of [auto_
9a50: 76 61 63 75 75 6d 5d 20 61 6e 64 20 5b 69 6e 63  vacuum] and [inc
9a60: 72 65 6d 65 6e 74 61 6c 5f 76 61 63 75 75 6d 5d  remental_vacuum]
9a70: 20 6d 6f 64 65 73 0a 6d 6f 72 65 20 65 66 66 69   modes.more effi
9a80: 63 69 65 6e 74 2e 20 20 4f 74 68 65 72 20 70 61  cient.  Other pa
9a90: 67 65 20 74 79 70 65 73 20 69 6e 20 74 68 65 20  ge types in the 
9aa0: 64 61 74 61 62 61 73 65 20 74 79 70 69 63 61 6c  database typical
9ab0: 6c 79 20 68 61 76 65 20 70 6f 69 6e 74 65 72 73  ly have pointers
9ac0: 0a 66 72 6f 6d 20 70 61 72 65 6e 74 20 74 6f 20  .from parent to 
9ad0: 63 68 69 6c 64 2e 20 20 46 6f 72 20 65 78 61 6d  child.  For exam
9ae0: 70 6c 65 2c 20 61 6e 20 69 6e 74 65 72 69 6f 72  ple, an interior
9af0: 20 62 2d 74 72 65 65 20 70 61 67 65 20 63 6f 6e   b-tree page con
9b00: 74 61 69 6e 73 20 70 6f 69 6e 74 65 72 73 0a 74  tains pointers.t
9b10: 6f 20 69 74 73 20 63 68 69 6c 64 20 62 2d 74 72  o its child b-tr
9b20: 65 65 20 70 61 67 65 73 20 61 6e 64 20 61 6e 20  ee pages and an 
9b30: 6f 76 65 72 66 6c 6f 77 20 63 68 61 69 6e 20 68  overflow chain h
9b40: 61 73 20 61 20 70 6f 69 6e 74 65 72 0a 66 72 6f  as a pointer.fro
9b50: 6d 20 65 61 72 6c 69 65 72 20 74 6f 20 6c 61 74  m earlier to lat
9b60: 65 72 20 6c 69 6e 6b 73 20 69 6e 20 74 68 65 20  er links in the 
9b70: 63 68 61 69 6e 2e 20 20 41 20 70 74 72 6d 61 70  chain.  A ptrmap
9b80: 20 70 61 67 65 20 63 6f 6e 74 61 69 6e 73 20 6c   page contains l
9b90: 69 6e 6b 61 67 65 0a 69 6e 66 6f 72 6d 61 74 69  inkage.informati
9ba0: 6f 6e 20 67 6f 69 6e 67 20 69 6e 20 74 68 65 20  on going in the 
9bb0: 6f 70 70 6f 73 69 74 65 20 64 69 72 65 63 74 69  opposite directi
9bc0: 6f 6e 2c 20 66 72 6f 6d 20 63 68 69 6c 64 20 74  on, from child t
9bd0: 6f 20 70 61 72 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c  o parent.</p>..<
9be0: 70 3e 5e 50 74 72 6d 61 70 20 70 61 67 65 73 20  p>^Ptrmap pages 
9bf0: 6d 75 73 74 20 65 78 69 73 74 20 69 6e 20 61 6e  must exist in an
9c00: 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  y database file 
9c10: 77 68 69 63 68 20 68 61 73 20 61 20 6e 6f 6e 2d  which has a non-
9c20: 7a 65 72 6f 0a 6c 61 72 67 65 73 74 20 72 6f 6f  zero.largest roo
9c30: 74 20 62 2d 74 72 65 65 20 70 61 67 65 20 76 61  t b-tree page va
9c40: 6c 75 65 20 61 74 20 6f 66 66 73 65 74 20 35 32  lue at offset 52
9c50: 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
9c60: 20 68 65 61 64 65 72 2e 0a 5e 49 66 20 74 68 65   header..^If the
9c70: 20 6c 61 72 67 65 73 74 20 72 6f 6f 74 20 62 2d   largest root b-
9c80: 74 72 65 65 20 70 61 67 65 20 76 61 6c 75 65 20  tree page value 
9c90: 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68  is zero, then th
9ca0: 65 20 64 61 74 61 62 61 73 65 20 6d 75 73 74 20  e database must 
9cb0: 6e 6f 74 0a 63 6f 6e 74 61 69 6e 20 70 74 72 6d  not.contain ptrm
9cc0: 61 70 20 70 61 67 65 73 2e 3c 2f 70 3e 0a 0a 3c  ap pages.</p>..<
9cd0: 70 3e 5e 49 6e 20 61 20 64 61 74 61 62 61 73 65  p>^In a database
9ce0: 20 77 69 74 68 20 70 74 72 6d 61 70 20 70 61 67   with ptrmap pag
9cf0: 65 73 2c 20 74 68 65 20 66 69 72 73 74 20 70 74  es, the first pt
9d00: 72 6d 61 70 20 70 61 67 65 20 69 73 20 70 61 67  rmap page is pag
9d10: 65 20 32 2e 0a 41 20 70 74 72 6d 61 70 20 70 61  e 2..A ptrmap pa
9d20: 67 65 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61  ge consists of a
9d30: 6e 20 61 72 72 61 79 20 6f 66 20 35 2d 62 79 74  n array of 5-byt
9d40: 65 20 65 6e 74 72 69 65 73 2e 20 20 4c 65 74 20  e entries.  Let 
9d50: 4a 20 62 65 20 74 68 65 0a 6e 75 6d 62 65 72 20  J be the.number 
9d60: 6f 66 20 35 2d 62 79 74 65 20 65 6e 74 72 69 65  of 5-byte entrie
9d70: 73 20 74 68 61 74 20 77 69 6c 6c 20 66 69 74 20  s that will fit 
9d80: 69 6e 20 74 68 65 20 75 73 61 62 6c 65 20 73 70  in the usable sp
9d90: 61 63 65 20 6f 66 20 61 20 70 61 67 65 2e 0a 28  ace of a page..(
9da0: 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
9db0: 4a 3d 55 2f 35 2e 29 20 20 5e 54 68 65 20 66 69  J=U/5.)  ^The fi
9dc0: 72 73 74 20 70 74 72 6d 61 70 20 70 61 67 65 20  rst ptrmap page 
9dd0: 77 69 6c 6c 20 63 6f 6e 74 61 69 6e 20 62 61 63  will contain bac
9de0: 6b 20 70 6f 69 6e 74 65 72 0a 69 6e 66 6f 72 6d  k pointer.inform
9df0: 61 74 69 6f 6e 20 66 6f 72 20 70 61 67 65 73 20  ation for pages 
9e00: 33 20 74 68 72 6f 75 67 68 20 4a 2b 32 2c 20 69  3 through J+2, i
9e10: 6e 63 6c 75 73 69 76 65 2e 20 20 5e 54 68 65 20  nclusive.  ^The 
9e20: 73 65 63 6f 6e 64 20 70 6f 69 6e 74 65 72 20 6d  second pointer m
9e30: 61 70 0a 70 61 67 65 20 77 69 6c 6c 20 62 65 20  ap.page will be 
9e40: 6f 6e 20 70 61 67 65 20 4a 2b 33 20 61 6e 64 20  on page J+3 and 
9e50: 74 68 61 74 20 70 74 72 6d 61 70 20 70 61 67 65  that ptrmap page
9e60: 20 77 69 6c 6c 20 70 72 6f 76 69 64 65 20 62 61   will provide ba
9e70: 63 6b 20 70 6f 69 6e 74 65 72 0a 69 6e 66 6f 72  ck pointer.infor
9e80: 6d 61 74 69 6f 6e 20 66 6f 72 20 70 61 67 65 73  mation for pages
9e90: 20 4a 2b 34 20 74 68 72 6f 75 67 68 20 32 2a 4a   J+4 through 2*J
9ea0: 2b 33 20 69 6e 63 6c 75 73 69 76 65 2e 20 20 41  +3 inclusive.  A
9eb0: 6e 64 20 73 6f 20 66 6f 72 74 68 20 66 6f 72 0a  nd so forth for.
9ec0: 74 68 65 20 65 6e 74 69 72 65 20 64 61 74 61 62  the entire datab
9ed0: 61 73 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c  ase file.</p>..<
9ee0: 70 3e 5e 28 49 6e 20 61 20 64 61 74 61 62 61 73  p>^(In a databas
9ef0: 65 20 74 68 61 74 20 75 73 65 73 20 70 74 72 6d  e that uses ptrm
9f00: 61 70 20 70 61 67 65 73 2c 20 61 6c 6c 20 70 61  ap pages, all pa
9f10: 67 65 73 20 61 74 20 6c 6f 63 61 74 69 6f 6e 73  ges at locations
9f20: 20 69 64 65 6e 74 69 66 69 65 64 0a 62 79 20 74   identified.by t
9f30: 68 65 20 63 6f 6d 70 75 74 61 74 69 6f 6e 20 69  he computation i
9f40: 6e 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 70  n the previous p
9f50: 61 72 61 67 72 61 70 68 20 6d 75 73 74 20 62 65  aragraph must be
9f60: 20 70 74 72 6d 61 70 20 70 61 67 65 20 61 6e 64   ptrmap page and
9f70: 20 6e 6f 0a 6f 74 68 65 72 20 70 61 67 65 20 6d   no.other page m
9f80: 61 79 20 62 65 20 61 20 70 74 72 6d 61 70 20 70  ay be a ptrmap p
9f90: 61 67 65 2e 20 20 45 78 63 65 70 74 2c 20 69 66  age.  Except, if
9fa0: 20 74 68 65 20 62 79 74 65 2d 6c 6f 63 6b 20 70   the byte-lock p
9fb0: 61 67 65 20 68 61 70 70 65 6e 73 20 74 6f 0a 66  age happens to.f
9fc0: 61 6c 6c 20 6f 6e 20 74 68 65 20 73 61 6d 65 20  all on the same 
9fd0: 70 61 67 65 20 6e 75 6d 62 65 72 20 61 73 20 61  page number as a
9fe0: 20 70 74 72 6d 61 70 20 70 61 67 65 2c 20 74 68   ptrmap page, th
9ff0: 65 6e 20 74 68 65 20 70 74 72 6d 61 70 20 69 73  en the ptrmap is
a000: 20 6d 6f 76 65 64 0a 74 6f 20 74 68 65 20 66 6f   moved.to the fo
a010: 6c 6c 6f 77 69 6e 67 20 70 61 67 65 20 66 6f 72  llowing page for
a020: 20 74 68 61 74 20 6f 6e 65 20 63 61 73 65 2e 29   that one case.)
a030: 5e 3c 2f 70 3e 0a 0a 3c 70 3e 45 61 63 68 20 35  ^</p>..<p>Each 5
a040: 2d 62 79 74 65 20 65 6e 74 72 79 20 6f 6e 20 61  -byte entry on a
a050: 20 70 74 72 6d 61 70 20 70 61 67 65 20 70 72 6f   ptrmap page pro
a060: 76 69 64 65 73 20 62 61 63 6b 2d 6c 69 6e 6b 20  vides back-link 
a070: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  information abou
a080: 74 20 0a 6f 6e 65 20 6f 66 20 74 68 65 20 70 61  t .one of the pa
a090: 67 65 73 20 74 68 61 74 20 69 6d 6d 65 64 69 61  ges that immedia
a0a0: 74 65 6c 79 20 66 6f 6c 6c 6f 77 20 74 68 65 20  tely follow the 
a0b0: 70 6f 69 6e 74 65 72 20 6d 61 70 2e 20 20 5e 28  pointer map.  ^(
a0c0: 49 66 20 70 61 67 65 20 42 20 69 73 20 61 0a 70  If page B is a.p
a0d0: 74 72 6d 61 70 20 70 61 67 65 20 74 68 65 6e 20  trmap page then 
a0e0: 62 61 63 6b 2d 6c 69 6e 6b 20 69 6e 66 6f 72 6d  back-link inform
a0f0: 61 74 69 6f 6e 20 61 62 6f 75 74 20 70 61 67 65  ation about page
a100: 20 42 2b 31 20 69 73 20 70 72 6f 76 69 64 65 64   B+1 is provided
a110: 20 62 79 0a 74 68 65 20 66 69 72 73 74 20 65 6e   by.the first en
a120: 74 72 79 20 6f 6e 20 74 68 65 20 70 6f 69 6e 74  try on the point
a130: 65 72 20 6d 61 70 2e 20 20 49 6e 66 6f 72 6d 61  er map.  Informa
a140: 74 69 6f 6e 20 61 62 6f 75 74 20 70 61 67 65 20  tion about page 
a150: 42 2b 32 20 69 73 0a 70 72 6f 76 69 64 65 64 20  B+2 is.provided 
a160: 62 79 20 74 68 65 20 73 65 63 6f 6e 64 20 65 6e  by the second en
a170: 74 72 79 2e 20 20 41 6e 64 20 73 6f 20 66 6f 72  try.  And so for
a180: 74 68 2e 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e 45 61  th.)^</p>..<p>Ea
a190: 63 68 20 35 2d 62 79 74 65 20 70 74 72 6d 61 70  ch 5-byte ptrmap
a1a0: 20 65 6e 74 72 79 20 63 6f 6e 73 69 73 74 73 20   entry consists 
a1b0: 6f 66 20 6f 6e 65 20 62 79 74 65 20 6f 66 20 22  of one byte of "
a1c0: 70 61 67 65 20 74 79 70 65 22 20 69 6e 66 6f 72  page type" infor
a1d0: 6d 61 74 69 6f 6e 0a 66 6f 6c 6c 6f 77 65 64 20  mation.followed 
a1e0: 62 79 20 61 20 34 2d 62 79 74 65 20 62 69 67 2d  by a 4-byte big-
a1f0: 65 6e 64 69 61 6e 20 70 61 67 65 20 6e 75 6d 62  endian page numb
a200: 65 72 2e 20 20 46 69 76 65 20 70 61 67 65 20 74  er.  Five page t
a210: 79 70 65 73 20 61 72 65 20 72 65 63 6f 67 6e 69  ypes are recogni
a220: 7a 65 64 3a 0a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a  zed:.</p>..<ol>.
a230: 3c 6c 69 3e 41 20 62 2d 74 72 65 65 20 72 6f 6f  <li>A b-tree roo
a240: 74 20 70 61 67 65 2e 20 20 54 68 65 0a 70 61 67  t page.  The.pag
a250: 65 20 6e 75 6d 62 65 72 20 73 68 6f 75 6c 64 20  e number should 
a260: 62 65 20 7a 65 72 6f 2e 0a 3c 6c 69 3e 41 20 66  be zero..<li>A f
a270: 72 65 65 6c 69 73 74 20 70 61 67 65 2e 20 20 54  reelist page.  T
a280: 68 65 20 70 61 67 65 20 6e 75 6d 62 65 72 20 73  he page number s
a290: 68 6f 75 6c 64 20 62 65 0a 7a 65 72 6f 2e 0a 3c  hould be.zero..<
a2a0: 6c 69 3e 54 68 65 20 66 69 72 73 74 20 70 61 67  li>The first pag
a2b0: 65 20 6f 66 20 61 0a 63 65 6c 6c 20 70 61 79 6c  e of a.cell payl
a2c0: 6f 61 64 20 6f 76 65 72 66 6c 6f 77 20 63 68 61  oad overflow cha
a2d0: 69 6e 2e 20 20 54 68 65 20 70 61 67 65 20 6e 75  in.  The page nu
a2e0: 6d 62 65 72 20 69 73 20 74 68 65 20 62 2d 74 72  mber is the b-tr
a2f0: 65 65 20 70 61 67 65 20 74 68 61 74 0a 63 6f 6e  ee page that.con
a300: 74 61 69 6e 73 20 74 68 65 20 63 65 6c 6c 20 77  tains the cell w
a310: 68 6f 73 65 20 63 6f 6e 74 65 6e 74 20 68 61 73  hose content has
a320: 20 6f 76 65 72 66 6c 6f 77 65 64 2e 0a 3c 6c 69   overflowed..<li
a330: 3e 41 20 70 61 67 65 20 69 6e 20 61 6e 20 6f 76  >A page in an ov
a340: 65 72 66 6c 6f 77 20 63 68 61 69 6e 0a 6f 74 68  erflow chain.oth
a350: 65 72 20 74 68 61 6e 20 74 68 65 20 66 69 72 73  er than the firs
a360: 74 20 70 61 67 65 2e 20 20 54 68 65 20 70 61 67  t page.  The pag
a370: 65 20 6e 75 6d 62 65 72 20 69 73 20 74 68 65 20  e number is the 
a380: 70 72 69 6f 72 20 70 61 67 65 20 6f 66 20 74 68  prior page of th
a390: 65 0a 6f 76 65 72 66 6c 6f 77 20 63 68 61 69 6e  e.overflow chain
a3a0: 2e 0a 3c 6c 69 3e 41 20 6e 6f 6e 2d 72 6f 6f 74  ..<li>A non-root
a3b0: 20 62 2d 74 72 65 65 20 70 61 67 65 2e 20 20 54   b-tree page.  T
a3c0: 68 65 0a 70 61 67 65 20 6e 75 6d 62 65 72 20 69  he.page number i
a3d0: 73 20 74 68 65 20 70 61 72 65 6e 74 20 62 2d 74  s the parent b-t
a3e0: 72 65 65 20 70 61 67 65 2e 0a 3c 2f 6f 6c 3e 0a  ree page..</ol>.
a3f0: 0a 3c 70 3e 5e 49 6e 20 61 6e 79 20 64 61 74 61  .<p>^In any data
a400: 62 61 73 65 20 66 69 6c 65 20 74 68 61 74 20 63  base file that c
a410: 6f 6e 74 61 69 6e 73 20 70 74 72 6d 61 70 20 70  ontains ptrmap p
a420: 61 67 65 73 2c 20 61 6c 6c 20 62 2d 74 72 65 65  ages, all b-tree
a430: 20 72 6f 6f 74 20 70 61 67 65 73 20 0a 6d 75 73   root pages .mus
a440: 74 20 63 6f 6d 65 20 62 65 66 6f 72 65 20 61 6e  t come before an
a450: 79 20 6e 6f 6e 2d 72 6f 6f 74 20 62 2d 74 72 65  y non-root b-tre
a460: 65 20 70 61 67 65 2c 20 63 65 6c 6c 20 70 61 79  e page, cell pay
a470: 6c 6f 61 64 20 6f 76 65 72 66 6c 6f 77 20 70 61  load overflow pa
a480: 67 65 2c 20 6f 72 0a 66 72 65 65 6c 69 73 74 20  ge, or.freelist 
a490: 70 61 67 65 2e 20 20 54 68 69 73 20 72 65 73 74  page.  This rest
a4a0: 72 69 63 74 69 6f 6e 20 65 6e 73 75 72 65 73 20  riction ensures 
a4b0: 74 68 61 74 20 61 20 72 6f 6f 74 20 70 61 67 65  that a root page
a4c0: 20 77 69 6c 6c 20 6e 65 76 65 72 0a 62 65 20 6d   will never.be m
a4d0: 6f 76 65 64 20 64 75 72 69 6e 67 20 61 6e 20 61  oved during an a
a4e0: 75 74 6f 2d 76 61 63 75 75 6d 20 6f 72 20 69 6e  uto-vacuum or in
a4f0: 63 72 65 6d 65 6e 74 61 6c 2d 76 61 63 75 75 6d  cremental-vacuum
a500: 2e 20 20 54 68 65 20 61 75 74 6f 2d 76 61 63 75  .  The auto-vacu
a510: 75 6d 0a 6c 6f 67 69 63 20 64 6f 65 73 20 6e 6f  um.logic does no
a520: 74 20 6b 6e 6f 77 20 68 6f 77 20 74 6f 20 75 70  t know how to up
a530: 64 61 74 65 20 74 68 65 20 72 6f 6f 74 5f 70 61  date the root_pa
a540: 67 65 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20  ge field of the 
a550: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 0a 74 61  sqlite_master.ta
a560: 62 6c 65 20 61 6e 64 20 73 6f 20 69 74 20 69 73  ble and so it is
a570: 20 6e 65 63 65 73 73 61 72 79 20 74 6f 20 70 72   necessary to pr
a580: 65 76 65 6e 74 20 72 6f 6f 74 20 70 61 67 65 73  event root pages
a590: 20 66 72 6f 6d 20 62 65 69 6e 67 20 6d 6f 76 65   from being move
a5a0: 64 0a 64 75 72 69 6e 67 20 61 6e 20 61 75 74 6f  d.during an auto
a5b0: 2d 76 61 63 75 75 6d 20 69 6e 20 6f 72 64 65 72  -vacuum in order
a5c0: 20 74 6f 20 70 72 65 73 65 72 76 65 20 74 68 65   to preserve the
a5d0: 20 69 6e 74 65 67 72 69 74 79 20 6f 66 20 74 68   integrity of th
a5e0: 65 0a 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20  e.sqlite_master 
a5f0: 74 61 62 6c 65 2e 20 20 5e 52 6f 6f 74 20 70 61  table.  ^Root pa
a600: 67 65 73 20 61 72 65 20 6d 6f 76 65 64 20 74 6f  ges are moved to
a610: 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f   the beginning o
a620: 66 20 74 68 65 0a 64 61 74 61 62 61 73 65 20 66  f the.database f
a630: 69 6c 65 20 62 79 20 74 68 65 20 43 52 45 41 54  ile by the CREAT
a640: 45 20 54 41 42 4c 45 2c 20 43 52 45 41 54 45 20  E TABLE, CREATE 
a650: 49 4e 44 45 58 2c 20 44 52 4f 50 20 54 41 42 4c  INDEX, DROP TABL
a660: 45 2c 20 61 6e 64 0a 44 52 4f 50 20 49 4e 44 45  E, and.DROP INDE
a670: 58 20 6f 70 65 72 61 74 69 6f 6e 73 2e 3c 2f 70  X operations.</p
a680: 3e 0a 0a 3c 68 31 3e 53 63 68 65 6d 61 20 4c 61  >..<h1>Schema La
a690: 79 65 72 3c 2f 68 31 3e 0a 0a 3c 70 3e 54 68 65  yer</h1>..<p>The
a6a0: 20 66 6f 72 65 67 6f 69 6e 67 20 74 65 78 74 20   foregoing text 
a6b0: 64 65 73 63 72 69 62 65 73 20 6c 6f 77 2d 6c 65  describes low-le
a6c0: 76 65 6c 20 61 73 70 65 63 74 73 20 6f 66 20 74  vel aspects of t
a6d0: 68 65 20 53 51 4c 69 74 65 20 66 69 6c 65 0a 66  he SQLite file.f
a6e0: 6f 72 6d 61 74 2e 20 20 54 68 65 20 62 2d 74 72  ormat.  The b-tr
a6f0: 65 65 20 6d 65 63 68 61 6e 69 73 6d 20 70 72 6f  ee mechanism pro
a700: 76 69 64 65 73 20 61 20 70 6f 77 65 72 66 75 6c  vides a powerful
a710: 20 61 6e 64 20 65 66 66 69 63 69 65 6e 74 20 6d   and efficient m
a720: 65 61 6e 73 20 6f 66 0a 61 63 63 65 73 73 69 6e  eans of.accessin
a730: 67 20 61 20 6c 61 72 67 65 20 64 61 74 61 20 73  g a large data s
a740: 65 74 2e 20 20 54 68 69 73 20 73 65 63 74 69 6f  et.  This sectio
a750: 6e 20 77 69 6c 6c 20 64 65 73 63 72 69 62 65 20  n will describe 
a760: 68 6f 77 20 74 68 65 0a 6c 6f 77 2d 6c 65 76 65  how the.low-leve
a770: 6c 20 62 2d 74 72 65 65 20 6c 61 79 65 72 20 69  l b-tree layer i
a780: 73 20 75 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d  s used to implem
a790: 65 6e 74 20 68 69 67 68 65 72 2d 6c 65 76 65 6c  ent higher-level
a7a0: 20 53 51 4c 0a 63 61 70 61 62 69 6c 69 74 69 65   SQL.capabilitie
a7b0: 73 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f  s.</p>..<tcl>hd_
a7c0: 66 72 61 67 6d 65 6e 74 20 72 65 63 6f 72 64 5f  fragment record_
a7d0: 66 6f 72 6d 61 74 20 7b 72 65 63 6f 72 64 20 66  format {record f
a7e0: 6f 72 6d 61 74 7d 3c 2f 74 63 6c 3e 0a 3c 68 32  ormat}</tcl>.<h2
a7f0: 3e 52 65 63 6f 72 64 20 46 6f 72 6d 61 74 3c 2f  >Record Format</
a800: 68 32 3e 0a 0a 3c 70 3e 54 68 65 20 64 61 74 61  h2>..<p>The data
a810: 20 66 6f 72 20 61 20 74 61 62 6c 65 20 62 2d 74   for a table b-t
a820: 72 65 65 20 6c 65 61 66 20 70 61 67 65 20 61 6e  ree leaf page an
a830: 64 20 74 68 65 20 6b 65 79 0a 6f 66 20 61 6e 20  d the key.of an 
a840: 69 6e 64 65 78 20 62 2d 74 72 65 65 20 70 61 67  index b-tree pag
a850: 65 20 77 61 73 20 63 68 61 72 61 63 74 65 72 69  e was characteri
a860: 7a 65 64 20 61 62 6f 76 65 0a 61 73 20 61 6e 20  zed above.as an 
a870: 61 72 62 69 74 72 61 72 79 20 73 65 71 75 65 6e  arbitrary sequen
a880: 63 65 20 6f 66 20 62 79 74 65 73 2e 0a 54 68 65  ce of bytes..The
a890: 20 70 72 69 6f 72 20 64 69 73 63 75 73 73 69 6f   prior discussio
a8a0: 6e 20 6d 65 6e 74 69 6f 6e 65 64 20 6f 6e 65 20  n mentioned one 
a8b0: 6b 65 79 20 62 65 69 6e 67 20 6c 65 73 73 20 74  key being less t
a8c0: 68 61 6e 20 61 6e 6f 74 68 65 72 2c 20 62 75 74  han another, but
a8d0: 0a 64 69 64 20 6e 6f 74 20 64 65 66 69 6e 65 20  .did not define 
a8e0: 77 68 61 74 20 22 6c 65 73 73 20 74 68 61 6e 22  what "less than"
a8f0: 20 6d 65 61 6e 74 2e 20 20 54 68 65 20 63 75 72   meant.  The cur
a900: 72 65 6e 74 20 73 65 63 74 69 6f 6e 20 77 69 6c  rent section wil
a910: 6c 20 61 64 64 72 65 73 73 0a 74 68 65 73 65 20  l address.these 
a920: 6f 6d 69 73 73 69 6f 6e 73 2e 3c 2f 70 3e 0a 0a  omissions.</p>..
a930: 3c 70 3e 50 61 79 6c 6f 61 64 2c 20 65 69 74 68  <p>Payload, eith
a940: 65 72 20 74 61 62 6c 65 20 62 2d 74 72 65 65 20  er table b-tree 
a950: 64 61 74 61 20 6f 72 20 69 6e 64 65 78 20 62 2d  data or index b-
a960: 74 72 65 65 20 6b 65 79 73 2c 20 0a 69 73 20 61  tree keys, .is a
a970: 6c 77 61 79 73 20 69 6e 20 74 68 65 20 22 72 65  lways in the "re
a980: 63 6f 72 64 20 66 6f 72 6d 61 74 22 2e 0a 54 68  cord format"..Th
a990: 65 20 72 65 63 6f 72 64 20 66 6f 72 6d 61 74 20  e record format 
a9a0: 64 65 66 69 6e 65 73 20 61 20 73 65 71 75 65 6e  defines a sequen
a9b0: 63 65 20 6f 66 20 76 61 6c 75 65 73 20 63 6f 72  ce of values cor
a9c0: 72 65 73 70 6f 6e 64 69 6e 67 0a 74 6f 20 63 6f  responding.to co
a9d0: 6c 75 6d 6e 73 20 69 6e 20 61 20 74 61 62 6c 65  lumns in a table
a9e0: 20 6f 72 20 69 6e 64 65 78 2e 20 20 54 68 65 20   or index.  The 
a9f0: 72 65 63 6f 72 64 20 66 6f 72 6d 61 74 20 73 70  record format sp
aa00: 65 63 69 66 69 65 73 20 74 68 65 20 6e 75 6d 62  ecifies the numb
aa10: 65 72 0a 6f 66 20 63 6f 6c 75 6d 6e 73 2c 20 74  er.of columns, t
aa20: 68 65 20 64 61 74 61 74 79 70 65 20 6f 66 20 65  he datatype of e
aa30: 61 63 68 20 63 6f 6c 75 6d 6e 2c 20 61 6e 64 20  ach column, and 
aa40: 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 65  the content of e
aa50: 61 63 68 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 3e 0a  ach column.</p>.
aa60: 0a 3c 70 3e 54 68 65 20 72 65 63 6f 72 64 20 66  .<p>The record f
aa70: 6f 72 6d 61 74 20 6d 61 6b 65 73 20 65 78 74 65  ormat makes exte
aa80: 6e 73 69 76 65 20 75 73 65 20 6f 66 20 74 68 65  nsive use of the
aa90: 20 0a 5b 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67   .[variable-leng
aaa0: 74 68 20 69 6e 74 65 67 65 72 5d 20 6f 72 20 5b  th integer] or [
aab0: 76 61 72 69 6e 74 5d 0a 72 65 70 72 65 73 65 6e  varint].represen
aac0: 74 61 74 69 6f 6e 20 6f 66 20 36 34 2d 62 69 74  tation of 64-bit
aad0: 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 73   signed integers
aae0: 20 64 65 66 69 6e 65 64 20 61 62 6f 76 65 2e 3c   defined above.<
aaf0: 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  /p>..<tcl>hd_fra
ab00: 67 6d 65 6e 74 20 73 65 72 69 61 6c 74 79 70 65  gment serialtype
ab10: 20 7b 73 65 72 69 61 6c 20 74 79 70 65 7d 20 7b   {serial type} {
ab20: 73 65 72 69 61 6c 20 74 79 70 65 73 7d 3c 2f 74  serial types}</t
ab30: 63 6c 3e 0a 3c 70 3e 41 20 72 65 63 6f 72 64 20  cl>.<p>A record 
ab40: 63 6f 6e 74 61 69 6e 73 20 61 20 68 65 61 64 65  contains a heade
ab50: 72 20 61 6e 64 20 61 20 62 6f 64 79 2c 20 69 6e  r and a body, in
ab60: 20 74 68 61 74 20 6f 72 64 65 72 2e 20 20 0a 5e   that order.  .^
ab70: 28 54 68 65 20 68 65 61 64 65 72 20 62 65 67 69  (The header begi
ab80: 6e 73 20 77 69 74 68 20 61 20 73 69 6e 67 6c 65  ns with a single
ab90: 20 76 61 72 69 6e 74 20 77 68 69 63 68 20 64 65   varint which de
aba0: 74 65 72 6d 69 6e 65 73 20 74 68 65 20 74 6f 74  termines the tot
abb0: 61 6c 20 6e 75 6d 62 65 72 0a 6f 66 20 62 79 74  al number.of byt
abc0: 65 73 20 69 6e 20 74 68 65 20 68 65 61 64 65 72  es in the header
abd0: 2e 20 20 54 68 65 20 76 61 72 69 6e 74 20 76 61  .  The varint va
abe0: 6c 75 65 20 69 73 20 74 68 65 20 73 69 7a 65 20  lue is the size 
abf0: 6f 66 20 74 68 65 20 68 65 61 64 65 72 20 69 6e  of the header in
ac00: 0a 62 79 74 65 73 20 69 6e 63 6c 75 64 69 6e 67  .bytes including
ac10: 20 74 68 65 20 73 69 7a 65 20 76 61 72 69 6e 74   the size varint
ac20: 20 69 74 73 65 6c 66 2e 29 5e 20 20 5e 46 6f 6c   itself.)^  ^Fol
ac30: 6c 6f 77 69 6e 67 20 74 68 65 20 73 69 7a 65 20  lowing the size 
ac40: 76 61 72 69 6e 74 20 61 72 65 0a 6f 6e 65 20 6f  varint are.one o
ac50: 72 20 6d 6f 72 65 20 61 64 64 69 74 69 6f 6e 61  r more additiona
ac60: 6c 20 76 61 72 69 6e 74 73 2c 20 6f 6e 65 20 70  l varints, one p
ac70: 65 72 20 63 6f 6c 75 6d 6e 2e 20 20 54 68 65 73  er column.  Thes
ac80: 65 20 61 64 64 69 74 69 6f 6e 61 6c 20 76 61 72  e additional var
ac90: 69 6e 74 73 0a 61 72 65 20 63 61 6c 6c 65 64 20  ints.are called 
aca0: 22 73 65 72 69 61 6c 20 74 79 70 65 22 20 6e 75  "serial type" nu
acb0: 6d 62 65 72 73 20 61 6e 64 0a 64 65 74 65 72 6d  mbers and.determ
acc0: 69 6e 65 20 74 68 65 20 64 61 74 61 74 79 70 65  ine the datatype
acd0: 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2c   of each column,
ace0: 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68   according to th
acf0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 68 61 72  e following char
ad00: 74 3a 3c 2f 70 3e 0a 0a 3c 63 65 6e 74 65 72 3e  t:</p>..<center>
ad10: 0a 3c 69 3e 53 65 72 69 61 6c 20 54 79 70 65 20  .<i>Serial Type 
ad20: 43 6f 64 65 73 20 4f 66 20 54 68 65 20 52 65 63  Codes Of The Rec
ad30: 6f 72 64 20 46 6f 72 6d 61 74 3c 2f 69 3e 3c 62  ord Format</i><b
ad40: 72 3e 0a 3c 74 61 62 6c 65 20 77 69 64 74 68 3d  r>.<table width=
ad50: 22 38 30 25 22 20 62 6f 72 64 65 72 3d 31 3e 0a  "80%" border=1>.
ad60: 3c 74 72 3e 3c 74 68 3e 53 65 72 69 61 6c 20 54  <tr><th>Serial T
ad70: 79 70 65 3c 74 68 3e 43 6f 6e 74 65 6e 74 20 53  ype<th>Content S
ad80: 69 7a 65 3c 74 68 3e 4d 65 61 6e 69 6e 67 0a 3c  ize<th>Meaning.<
ad90: 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
ada0: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 30  p align=center>0
adb0: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
adc0: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 30 3c 74 64  lign=center>0<td
add0: 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 56 61   align=left>.^Va
ade0: 6c 75 65 20 69 73 20 61 20 4e 55 4c 4c 2e 0a 3c  lue is a NULL..<
adf0: 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
ae00: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31  p align=center>1
ae10: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
ae20: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 3c 74 64  lign=center>1<td
ae30: 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 56 61   align=left>.^Va
ae40: 6c 75 65 20 69 73 20 61 6e 20 38 2d 62 69 74 20  lue is an 8-bit 
ae50: 74 77 6f 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20  twos-complement 
ae60: 69 6e 74 65 67 65 72 2e 0a 3c 74 72 3e 3c 74 64  integer..<tr><td
ae70: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
ae80: 6e 3d 63 65 6e 74 65 72 3e 32 3c 74 64 20 76 61  n=center>2<td va
ae90: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
aea0: 65 6e 74 65 72 3e 32 3c 74 64 20 61 6c 69 67 6e  enter>2<td align
aeb0: 3d 6c 65 66 74 3e 0a 5e 56 61 6c 75 65 20 69 73  =left>.^Value is
aec0: 20 61 20 62 69 67 2d 65 6e 64 69 61 6e 20 31 36   a big-endian 16
aed0: 2d 62 69 74 20 74 77 6f 73 2d 63 6f 6d 70 6c 65  -bit twos-comple
aee0: 6d 65 6e 74 20 69 6e 74 65 67 65 72 2e 0a 3c 74  ment integer..<t
aef0: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
af00: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 33 3c   align=center>3<
af10: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
af20: 69 67 6e 3d 63 65 6e 74 65 72 3e 33 3c 74 64 20  ign=center>3<td 
af30: 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 56 61 6c  align=left>.^Val
af40: 75 65 20 69 73 20 61 20 62 69 67 2d 65 6e 64 69  ue is a big-endi
af50: 61 6e 20 32 34 2d 62 69 74 20 74 77 6f 73 2d 63  an 24-bit twos-c
af60: 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 74 65 67 65  omplement intege
af70: 72 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  r..<tr><td valig
af80: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
af90: 65 72 3e 34 3c 74 64 20 76 61 6c 69 67 6e 3d 74  er>4<td valign=t
afa0: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
afb0: 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e  4<td align=left>
afc0: 0a 5e 56 61 6c 75 65 20 69 73 20 61 20 62 69 67  .^Value is a big
afd0: 2d 65 6e 64 69 61 6e 20 33 32 2d 62 69 74 20 74  -endian 32-bit t
afe0: 77 6f 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 69  wos-complement i
aff0: 6e 74 65 67 65 72 2e 0a 3c 74 72 3e 3c 74 64 20  nteger..<tr><td 
b000: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
b010: 3d 63 65 6e 74 65 72 3e 35 3c 74 64 20 76 61 6c  =center>5<td val
b020: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
b030: 6e 74 65 72 3e 36 3c 74 64 20 61 6c 69 67 6e 3d  nter>6<td align=
b040: 6c 65 66 74 3e 0a 5e 56 61 6c 75 65 20 69 73 20  left>.^Value is 
b050: 61 20 62 69 67 2d 65 6e 64 69 61 6e 20 34 38 2d  a big-endian 48-
b060: 62 69 74 20 74 77 6f 73 2d 63 6f 6d 70 6c 65 6d  bit twos-complem
b070: 65 6e 74 20 69 6e 74 65 67 65 72 2e 0a 3c 74 72  ent integer..<tr
b080: 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
b090: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 36 3c 74  align=center>6<t
b0a0: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
b0b0: 67 6e 3d 63 65 6e 74 65 72 3e 38 3c 74 64 20 61  gn=center>8<td a
b0c0: 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 56 61 6c 75  lign=left>.^Valu
b0d0: 65 20 69 73 20 61 20 62 69 67 2d 65 6e 64 69 61  e is a big-endia
b0e0: 6e 20 36 34 2d 62 69 74 20 74 77 6f 73 2d 63 6f  n 64-bit twos-co
b0f0: 6d 70 6c 65 6d 65 6e 74 20 69 6e 74 65 67 65 72  mplement integer
b100: 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  ..<tr><td valign
b110: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
b120: 72 3e 37 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  r>7<td valign=to
b130: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 38  p align=center>8
b140: 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a  <td align=left>.
b150: 5e 56 61 6c 75 65 20 69 73 20 61 20 62 69 67 2d  ^Value is a big-
b160: 65 6e 64 69 61 6e 20 49 45 45 45 20 37 35 34 2d  endian IEEE 754-
b170: 32 30 30 38 20 36 34 2d 62 69 74 20 66 6c 6f 61  2008 64-bit floa
b180: 74 69 6e 67 20 70 6f 69 6e 74 20 6e 75 6d 62 65  ting point numbe
b190: 72 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  r..<tr><td valig
b1a0: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
b1b0: 65 72 3e 38 3c 74 64 20 76 61 6c 69 67 6e 3d 74  er>8<td valign=t
b1c0: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
b1d0: 30 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e  0<td align=left>
b1e0: 0a 5e 56 61 6c 75 65 20 69 73 20 74 68 65 20 69  .^Value is the i
b1f0: 6e 74 65 67 65 72 20 30 2e 20 28 4f 6e 6c 79 20  nteger 0. (Only 
b200: 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 5b 73  available for [s
b210: 63 68 65 6d 61 20 66 6f 72 6d 61 74 5d 20 34 20  chema format] 4 
b220: 61 6e 64 20 68 69 67 68 65 72 2e 29 0a 3c 74 72  and higher.).<tr
b230: 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
b240: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 39 3c 74  align=center>9<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 30 3c 74 64 20 61  gn=center>0<td a
b270: 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 56 61 6c 75  lign=left>.^Valu
b280: 65 20 69 73 20 74 68 65 20 69 6e 74 65 67 65 72  e is the integer
b290: 20 31 2e 20 28 4f 6e 6c 79 20 61 76 61 69 6c 61   1. (Only availa
b2a0: 62 6c 65 20 66 6f 72 20 5b 73 63 68 65 6d 61 20  ble for [schema 
b2b0: 66 6f 72 6d 61 74 5d 20 34 20 61 6e 64 20 68 69  format] 4 and hi
b2c0: 67 68 65 72 2e 29 0a 3c 74 72 3e 3c 74 64 20 76  gher.).<tr><td v
b2d0: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
b2e0: 63 65 6e 74 65 72 3e 31 30 2c 31 31 0a 20 20 20  center>10,11.   
b2f0: 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20   <td valign=top 
b300: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 26 6e 62  align=center>&nb
b310: 73 70 3b 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66  sp;<td align=lef
b320: 74 3e 0a 3c 69 3e 4e 6f 74 20 75 73 65 64 2e 20  t>.<i>Not used. 
b330: 20 52 65 73 65 72 76 65 64 20 66 6f 72 20 65 78   Reserved for ex
b340: 70 61 6e 73 69 6f 6e 2e 3c 2f 69 3e 0a 3c 74 72  pansion.</i>.<tr
b350: 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
b360: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 4e 26 23  align=center>N&#
b370: 78 32 32 36 35 3b 31 32 20 61 6e 64 20 65 76 65  x2265;12 and eve
b380: 6e 0a 20 20 20 20 3c 74 64 20 76 61 6c 69 67 6e  n.    <td valign
b390: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
b3a0: 72 3e 28 4e 2d 31 32 29 2f 32 3c 74 64 20 61 6c  r>(N-12)/2<td al
b3b0: 69 67 6e 3d 6c 65 66 74 3e 0a 5e 56 61 6c 75 65  ign=left>.^Value
b3c0: 20 69 73 20 61 20 42 4c 4f 42 20 74 68 61 74 20   is a BLOB that 
b3d0: 69 73 20 28 4e 2d 31 32 29 2f 32 20 62 79 74 65  is (N-12)/2 byte
b3e0: 73 20 69 6e 20 6c 65 6e 67 74 68 2e 0a 3c 74 72  s in length..<tr
b3f0: 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
b400: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 4e 26 23  align=center>N&#
b410: 78 32 32 36 35 3b 31 33 20 61 6e 64 20 6f 64 64  x2265;13 and odd
b420: 0a 20 20 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d  .    <td valign=
b430: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
b440: 3e 28 4e 2d 31 33 29 2f 32 3c 74 64 20 61 6c 69  >(N-13)/2<td ali
b450: 67 6e 3d 6c 65 66 74 3e 0a 5e 56 61 6c 75 65 20  gn=left>.^Value 
b460: 69 73 20 61 20 73 74 72 69 6e 67 20 69 6e 20 74  is a string in t
b470: 68 65 20 5b 74 65 78 74 20 65 6e 63 6f 64 69 6e  he [text encodin
b480: 67 5d 20 61 6e 64 20 28 4e 2d 31 33 29 2f 32 20  g] and (N-13)/2 
b490: 62 79 74 65 73 20 69 6e 20 6c 65 6e 67 74 68 2e  bytes in length.
b4a0: 0a 5e 54 68 65 20 6e 75 6c 20 74 65 72 6d 69 6e  .^The nul termin
b4b0: 61 74 6f 72 20 69 73 20 6e 6f 74 20 73 74 6f 72  ator is not stor
b4c0: 65 64 2e 0a 3c 2f 74 61 62 6c 65 3e 3c 2f 63 65  ed..</table></ce
b4d0: 6e 74 65 72 3e 0a 0a 3c 70 3e 4e 6f 74 65 20 74  nter>..<p>Note t
b4e0: 68 61 74 20 62 65 63 61 75 73 65 20 6f 66 20 74  hat because of t
b4f0: 68 65 20 77 61 79 20 76 61 72 69 6e 74 73 20 61  he way varints a
b500: 72 65 20 64 65 66 69 6e 65 64 2c 20 74 68 65 20  re defined, the 
b510: 68 65 61 64 65 72 20 73 69 7a 65 20 76 61 72 69  header size vari
b520: 6e 74 0a 61 6e 64 20 73 65 72 69 61 6c 20 74 79  nt.and serial ty
b530: 70 65 20 76 61 72 69 6e 74 73 20 77 69 6c 6c 20  pe varints will 
b540: 75 73 75 61 6c 6c 79 20 63 6f 6e 73 69 73 74 20  usually consist 
b550: 6f 66 20 61 20 73 69 6e 67 6c 65 20 62 79 74 65  of a single byte
b560: 2e 20 20 54 68 65 0a 73 65 72 69 61 6c 20 74 79  .  The.serial ty
b570: 70 65 20 76 61 72 69 6e 74 73 20 66 6f 72 20 6c  pe varints for l
b580: 61 72 67 65 20 73 74 72 69 6e 67 73 20 61 6e 64  arge strings and
b590: 20 42 4c 4f 42 73 20 6d 69 67 68 74 20 65 78 74   BLOBs might ext
b5a0: 65 6e 64 20 74 6f 20 74 77 6f 20 6f 72 20 74 68  end to two or th
b5b0: 72 65 65 0a 62 79 74 65 20 76 61 72 69 6e 74 73  ree.byte varints
b5c0: 2c 20 62 75 74 20 74 68 61 74 20 69 73 20 74 68  , but that is th
b5d0: 65 20 65 78 63 65 70 74 69 6f 6e 20 72 61 74 68  e exception rath
b5e0: 65 72 20 74 68 61 6e 20 74 68 65 20 72 75 6c 65  er than the rule
b5f0: 2e 20 0a 54 68 65 20 76 61 72 69 6e 74 20 66 6f  . .The varint fo
b600: 72 6d 61 74 20 69 73 20 76 65 72 79 20 65 66 66  rmat is very eff
b610: 69 63 69 65 6e 74 20 61 74 20 63 6f 64 69 6e 67  icient at coding
b620: 20 74 68 65 20 72 65 63 6f 72 64 20 68 65 61 64   the record head
b630: 65 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65  er.</p>..<p>^The
b640: 20 76 61 6c 75 65 73 20 66 6f 72 20 65 61 63 68   values for each
b650: 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 72   column in the r
b660: 65 63 6f 72 64 20 69 6d 6d 65 64 69 61 74 65 6c  ecord immediatel
b670: 79 20 66 6f 6c 6c 6f 77 20 74 68 65 20 68 65 61  y follow the hea
b680: 64 65 72 2e 0a 5e 28 4e 6f 74 65 20 74 68 61 74  der..^(Note that
b690: 20 66 6f 72 20 73 65 72 69 61 6c 20 74 79 70 65   for serial type
b6a0: 73 20 30 2c 20 38 2c 20 39 2c 20 31 32 2c 20 61  s 0, 8, 9, 12, a
b6b0: 6e 64 20 31 33 2c 20 74 68 65 20 76 61 6c 75 65  nd 13, the value
b6c0: 20 69 73 20 7a 65 72 6f 20 62 79 74 65 73 20 69   is zero bytes i
b6d0: 6e 0a 6c 65 6e 67 74 68 2e 20 20 49 66 20 61 6c  n.length.  If al
b6e0: 6c 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 6f 66  l columns are of
b6f0: 20 74 68 65 73 65 20 74 79 70 65 73 20 74 68 65   these types the
b700: 6e 20 74 68 65 20 62 6f 64 79 20 73 65 63 74 69  n the body secti
b710: 6f 6e 20 6f 66 20 74 68 65 0a 72 65 63 6f 72 64  on of the.record
b720: 20 69 73 20 65 6d 70 74 79 2e 29 5e 3c 2f 70 3e   is empty.)^</p>
b730: 0a 0a 3c 68 32 3e 52 65 63 6f 72 64 20 53 6f 72  ..<h2>Record Sor
b740: 74 20 4f 72 64 65 72 3c 2f 68 32 3e 0a 0a 3c 70  t Order</h2>..<p
b750: 3e 54 68 65 20 6f 72 64 65 72 20 6f 66 20 6b 65  >The order of ke
b760: 79 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 62  ys in an index b
b770: 2d 74 72 65 65 20 69 73 20 64 65 74 65 72 6d 69  -tree is determi
b780: 6e 65 64 20 62 79 20 74 68 65 20 73 6f 72 74 20  ned by the sort 
b790: 6f 72 64 65 72 20 6f 66 0a 74 68 65 20 72 65 63  order of.the rec
b7a0: 6f 72 64 73 20 74 68 61 74 20 74 68 65 20 6b 65  ords that the ke
b7b0: 79 73 20 72 65 70 72 65 73 65 6e 74 2e 20 20 52  ys represent.  R
b7c0: 65 63 6f 72 64 20 63 6f 6d 70 61 72 69 73 6f 6e  ecord comparison
b7d0: 20 70 72 6f 67 72 65 73 73 65 73 20 63 6f 6c 75   progresses colu
b7e0: 6d 6e 0a 62 79 20 63 6f 6c 75 6d 6e 2e 20 20 43  mn.by column.  C
b7f0: 6f 6c 75 6d 6e 73 20 6f 66 20 61 20 72 65 63 6f  olumns of a reco
b800: 72 64 20 61 72 65 20 65 78 61 6d 69 6e 65 64 20  rd are examined 
b810: 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67  from left to rig
b820: 68 74 2e 20 20 54 68 65 0a 66 69 72 73 74 20 70  ht.  The.first p
b830: 61 69 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 74  air of columns t
b840: 68 61 74 20 61 72 65 20 6e 6f 74 20 65 71 75 61  hat are not equa
b850: 6c 20 64 65 74 65 72 6d 69 6e 65 73 20 74 68 65  l determines the
b860: 20 72 65 6c 61 74 69 76 65 20 6f 72 64 65 72 0a   relative order.
b870: 6f 66 20 74 68 65 20 74 77 6f 20 72 65 63 6f 72  of the two recor
b880: 64 73 2e 20 20 54 68 65 20 73 6f 72 74 20 6f 72  ds.  The sort or
b890: 64 65 72 20 6f 66 20 69 6e 64 69 76 69 64 75 61  der of individua
b8a0: 6c 20 63 6f 6c 75 6d 6e 73 20 69 73 20 61 73 0a  l columns is as.
b8b0: 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 6f  follows:</p>..<o
b8c0: 6c 3e 0a 3c 6c 69 3e 5e 28 4e 55 4c 4c 20 76 61  l>.<li>^(NULL va
b8d0: 6c 75 65 73 20 28 73 65 72 69 61 6c 20 74 79 70  lues (serial typ
b8e0: 65 20 30 29 20 73 6f 72 74 20 66 69 72 73 74 2e  e 0) sort first.
b8f0: 29 5e 0a 3c 6c 69 3e 5e 28 4e 75 6d 65 72 69 63  )^.<li>^(Numeric
b900: 20 76 61 6c 75 65 73 20 28 73 65 72 69 61 6c 20   values (serial 
b910: 74 79 70 65 73 20 31 20 74 68 72 6f 75 67 68 20  types 1 through 
b920: 39 29 20 73 6f 72 74 20 61 66 74 65 72 20 4e 55  9) sort after NU
b930: 4c 4c 73 0a 20 20 20 20 20 20 61 6e 64 20 69 6e  LLs.      and in
b940: 20 6e 75 6d 65 72 69 63 20 6f 72 64 65 72 2e 29   numeric order.)
b950: 5e 0a 3c 6c 69 3e 5e 28 54 65 78 74 20 76 61 6c  ^.<li>^(Text val
b960: 75 65 73 20 28 6f 64 64 20 73 65 72 69 61 6c 20  ues (odd serial 
b970: 74 79 70 65 73 20 31 33 20 61 6e 64 20 6c 61 72  types 13 and lar
b980: 67 65 72 29 20 73 6f 72 74 20 61 66 74 65 72 20  ger) sort after 
b990: 6e 75 6d 65 72 69 63 0a 20 20 20 20 76 61 6c 75  numeric.    valu
b9a0: 65 73 20 69 6e 20 74 68 65 20 6f 72 64 65 72 20  es in the order 
b9b0: 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68  determined by th
b9c0: 65 20 63 6f 6c 75 6d 6e 73 20 5b 63 6f 6c 6c 61  e columns [colla
b9d0: 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 5d 2e 29  ting function].)
b9e0: 5e 0a 3c 6c 69 3e 5e 28 42 4c 4f 42 20 76 61 6c  ^.<li>^(BLOB val
b9f0: 75 65 73 20 28 65 76 65 6e 20 73 65 72 69 61 6c  ues (even serial
ba00: 20 74 79 70 65 73 20 31 32 20 61 6e 64 20 6c 61   types 12 and la
ba10: 72 67 65 72 29 20 73 6f 72 74 20 6c 61 73 74 20  rger) sort last 
ba20: 61 6e 64 20 69 6e 20 74 68 65 20 6f 72 64 65 72  and in the order
ba30: 20 0a 20 20 20 20 64 65 74 65 72 6d 69 6e 65 64   .    determined
ba40: 20 62 79 20 6d 65 6d 63 6d 70 28 29 2e 29 5e 0a   by memcmp().)^.
ba50: 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 41 20 5b 63 6f 6c  </ol>..<p>A [col
ba60: 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 5d  lating function]
ba70: 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   for each column
ba80: 20 69 73 20 6e 65 63 65 73 73 61 72 79 20 69 6e   is necessary in
ba90: 20 6f 72 64 65 72 20 74 6f 20 63 6f 6d 70 75 74   order to comput
baa0: 65 0a 74 68 65 20 6f 72 64 65 72 20 6f 66 20 74  e.the order of t
bab0: 65 78 74 20 66 69 65 6c 64 73 2e 0a 5e 28 53 51  ext fields..^(SQ
bac0: 4c 69 74 65 20 64 65 66 69 6e 65 73 20 74 68 72  Lite defines thr
bad0: 65 65 20 62 75 69 6c 74 2d 69 6e 20 63 6f 6c 6c  ee built-in coll
bae0: 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 73 3a  ating functions:
baf0: 29 5e 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71  )^.</p>..<blockq
bb00: 75 6f 74 65 3e 3c 74 61 62 6c 65 20 62 6f 72 64  uote><table bord
bb10: 65 72 3d 30 20 63 65 6c 6c 73 70 61 63 69 6e 67  er=0 cellspacing
bb20: 3d 31 30 3e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c  =10>.<tr><td val
bb30: 69 67 6e 3d 74 6f 70 3e 42 49 4e 41 52 59 0a 20  ign=top>BINARY. 
bb40: 20 20 20 3c 74 64 3e 20 5e 28 54 68 65 20 62 75     <td> ^(The bu
bb50: 69 6c 74 2d 69 6e 20 42 49 4e 41 52 59 20 63 6f  ilt-in BINARY co
bb60: 6c 6c 61 74 69 6f 6e 20 63 6f 6d 70 61 72 65 73  llation compares
bb70: 20 73 74 72 69 6e 67 73 20 62 79 74 65 20 62 79   strings byte by
bb80: 20 62 79 74 65 0a 20 20 20 20 20 20 20 20 75 73   byte.        us
bb90: 69 6e 67 20 74 68 65 20 6d 65 6d 63 6d 70 28 29  ing the memcmp()
bba0: 20 66 75 6e 63 74 69 6f 6e 0a 20 20 20 20 20 20   function.      
bbb0: 20 20 66 72 6f 6d 20 74 68 65 20 73 74 61 6e 64    from the stand
bbc0: 61 72 64 20 43 20 6c 69 62 72 61 72 79 2e 29 5e  ard C library.)^
bbd0: 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d  .<tr><td valign=
bbe0: 74 6f 70 3e 4e 4f 43 41 53 45 0a 20 20 20 20 3c  top>NOCASE.    <
bbf0: 74 64 3e 20 5e 28 54 68 65 20 4e 4f 43 41 53 45  td> ^(The NOCASE
bc00: 20 63 6f 6c 6c 61 74 69 6f 6e 20 69 73 20 6c 69   collation is li
bc10: 6b 65 20 42 49 4e 41 52 59 20 65 78 63 65 70 74  ke BINARY except
bc20: 20 74 68 61 74 20 75 70 70 65 72 63 61 73 65 0a   that uppercase.
bc30: 20 20 20 20 20 20 20 20 41 53 43 49 49 20 63 68          ASCII ch
bc40: 61 72 61 63 74 65 72 73 20 28 27 41 27 20 74 68  aracters ('A' th
bc50: 72 6f 75 67 68 20 27 5a 27 29 0a 20 20 20 20 20  rough 'Z').     
bc60: 20 20 20 61 72 65 20 66 6f 6c 64 65 64 20 69 6e     are folded in
bc70: 74 6f 20 74 68 65 69 72 20 6c 6f 77 65 72 63 61  to their lowerca
bc80: 73 65 20 65 71 75 69 76 61 6c 65 6e 74 73 20 70  se equivalents p
bc90: 72 69 6f 72 20 74 6f 20 72 75 6e 6e 69 6e 67 20  rior to running 
bca0: 74 68 65 0a 20 20 20 20 20 20 20 20 63 6f 6d 70  the.        comp
bcb0: 61 72 69 73 6f 6e 2e 20 20 4e 6f 74 65 20 74 68  arison.  Note th
bcc0: 61 74 20 6f 6e 6c 79 20 41 53 43 49 49 20 63 68  at only ASCII ch
bcd0: 61 72 61 63 74 65 72 73 20 61 72 65 20 63 61 73  aracters are cas
bce0: 65 2d 66 6f 6c 64 65 64 2e 29 5e 0a 20 20 20 20  e-folded.)^.    
bcf0: 20 20 20 20 5e 28 4e 4f 43 41 53 45 0a 20 20 20      ^(NOCASE.   
bd00: 20 20 20 20 20 64 6f 65 73 20 6e 6f 74 20 69 6d       does not im
bd10: 70 6c 65 6d 65 6e 74 20 61 20 67 65 6e 65 72 61  plement a genera
bd20: 6c 20 70 75 72 70 6f 73 65 20 75 6e 69 63 6f 64  l purpose unicod
bd30: 65 20 63 61 73 65 6c 65 73 73 20 63 6f 6d 70 61  e caseless compa
bd40: 72 69 73 6f 6e 2e 29 5e 0a 3c 74 72 3e 3c 74 64  rison.)^.<tr><td
bd50: 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 52 54 52 49   valign=top>RTRI
bd60: 4d 0a 20 20 20 20 3c 74 64 3e 20 5e 28 52 54 52  M.    <td> ^(RTR
bd70: 49 4d 20 69 73 20 6c 69 6b 65 20 42 49 4e 41 52  IM is like BINAR
bd80: 59 20 65 78 63 65 70 74 20 74 68 61 74 20 65 78  Y except that ex
bd90: 74 72 61 20 73 70 61 63 65 73 20 61 74 20 74 68  tra spaces at th
bda0: 65 20 65 6e 64 20 6f 66 20 65 69 74 68 65 72 0a  e end of either.
bdb0: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
bdc0: 64 6f 20 6e 6f 74 20 63 68 61 6e 67 65 20 74 68  do not change th
bdd0: 65 20 72 65 73 75 6c 74 2e 20 20 49 6e 20 6f 74  e result.  In ot
bde0: 68 65 72 20 77 6f 72 64 73 2c 20 73 74 72 69 6e  her words, strin
bdf0: 67 73 20 77 69 6c 6c 0a 20 20 20 20 20 20 20 20  gs will.        
be00: 20 63 6f 6d 70 61 72 65 20 65 71 75 61 6c 20 74   compare equal t
be10: 6f 20 6f 6e 65 20 61 6e 6f 74 68 65 72 20 61 73  o one another as
be20: 20 6c 6f 6e 67 20 61 73 20 74 68 65 79 0a 20 20   long as they.  
be30: 20 20 20 20 20 20 20 64 69 66 66 65 72 20 6f 6e         differ on
be40: 6c 79 20 69 6e 20 74 68 65 20 6e 75 6d 62 65 72  ly in the number
be50: 20 6f 66 20 73 70 61 63 65 73 20 61 74 20 74 68   of spaces at th
be60: 65 20 65 6e 64 2e 29 5e 0a 3c 2f 74 61 62 6c 65  e end.)^.</table
be70: 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a  ></blockquote>..
be80: 3c 70 3e 5e 41 64 64 69 74 69 6f 6e 61 6c 20 61  <p>^Additional a
be90: 70 70 6c 69 63 61 74 69 6f 6e 2d 73 70 65 63 69  pplication-speci
bea0: 66 69 63 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75  fic collating fu
beb0: 6e 63 74 69 6f 6e 73 20 63 61 6e 20 62 65 20 61  nctions can be a
bec0: 64 64 65 64 20 74 6f 0a 53 51 4c 69 74 65 20 75  dded to.SQLite u
bed0: 73 69 6e 67 20 74 68 65 20 5b 73 71 6c 69 74 65  sing the [sqlite
bee0: 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69  3_create_collati
bef0: 6f 6e 28 29 5d 20 69 6e 74 65 72 66 61 63 65 2e  on()] interface.
bf00: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 64 65  </p>..<p>^The de
bf10: 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6e 67 20  fault collating 
bf20: 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6c 6c  function for all
bf30: 20 73 74 72 69 6e 67 73 20 69 73 20 42 49 4e 41   strings is BINA
bf40: 52 59 2e 0a 5e 41 6c 74 65 72 6e 61 74 69 76 65  RY..^Alternative
bf50: 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74   collating funct
bf60: 69 6f 6e 73 20 66 6f 72 20 74 61 62 6c 65 20 63  ions for table c
bf70: 6f 6c 75 6d 6e 73 20 63 61 6e 20 62 65 20 73 70  olumns can be sp
bf80: 65 63 69 66 69 65 64 20 69 6e 20 74 68 65 0a 5b  ecified in the.[
bf90: 43 52 45 41 54 45 20 54 41 42 4c 45 5d 20 73 74  CREATE TABLE] st
bfa0: 61 74 65 6d 65 6e 74 20 75 73 69 6e 67 20 74 68  atement using th
bfb0: 65 20 43 4f 4c 4c 41 54 45 20 63 6c 61 75 73 65  e COLLATE clause
bfc0: 20 6f 6e 20 74 68 65 20 5b 63 6f 6c 75 6d 6e 20   on the [column 
bfd0: 64 65 66 69 6e 69 74 69 6f 6e 5d 2e 0a 5e 57 68  definition]..^Wh
bfe0: 65 6e 20 61 20 63 6f 6c 75 6d 6e 20 69 73 20 69  en a column is i
bff0: 6e 64 65 78 65 64 2c 20 74 68 65 20 73 61 6d 65  ndexed, the same
c000: 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74   collating funct
c010: 69 6f 6e 20 73 70 65 63 69 66 69 65 64 20 69 6e  ion specified in
c020: 20 74 68 65 0a 5b 43 52 45 41 54 45 20 54 41 42   the.[CREATE TAB
c030: 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74 20 69 73  LE] statement is
c040: 20 75 73 65 64 20 66 6f 72 20 74 68 65 20 63 6f   used for the co
c050: 6c 75 6d 6e 20 69 6e 20 74 68 65 20 69 6e 64 65  lumn in the inde
c060: 78 2c 20 62 79 20 64 65 66 61 75 6c 74 2c 0a 74  x, by default,.t
c070: 68 6f 75 67 68 20 74 68 69 73 20 63 61 6e 20 62  hough this can b
c080: 65 20 6f 76 65 72 72 69 64 64 65 6e 20 75 73 69  e overridden usi
c090: 6e 67 20 61 20 43 4f 4c 4c 41 54 45 20 63 6c 61  ng a COLLATE cla
c0a0: 75 73 65 20 69 6e 20 74 68 65 20 0a 5b 43 52 45  use in the .[CRE
c0b0: 41 54 45 20 49 4e 44 45 58 5d 20 73 74 61 74 65  ATE INDEX] state
c0c0: 6d 65 6e 74 2e 0a 0a 3c 68 32 3e 52 65 70 72 65  ment...<h2>Repre
c0d0: 73 65 6e 74 61 74 69 6f 6e 20 4f 66 20 53 51 4c  sentation Of SQL
c0e0: 20 54 61 62 6c 65 73 3c 2f 68 32 3e 0a 0a 3c 70   Tables</h2>..<p
c0f0: 3e 20 5e 45 61 63 68 20 6f 72 64 69 6e 61 72 79  > ^Each ordinary
c100: 20 53 51 4c 20 74 61 62 6c 65 20 69 6e 20 74 68   SQL table in th
c110: 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
c120: 61 20 69 73 20 72 65 70 72 65 73 65 6e 74 65 64  a is represented
c130: 20 6f 6e 2d 64 69 73 6b 0a 62 79 20 61 20 74 61   on-disk.by a ta
c140: 62 6c 65 20 62 2d 74 72 65 65 2e 20 20 5e 45 61  ble b-tree.  ^Ea
c150: 63 68 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20  ch entry in the 
c160: 74 61 62 6c 65 20 62 2d 74 72 65 65 20 63 6f 72  table b-tree cor
c170: 72 65 73 70 6f 6e 64 73 20 74 6f 20 61 20 72 6f  responds to a ro
c180: 77 0a 6f 66 20 74 68 65 20 53 51 4c 20 74 61 62  w.of the SQL tab
c190: 6c 65 2e 20 20 5e 54 68 65 20 5b 72 6f 77 69 64  le.  ^The [rowid
c1a0: 5d 20 6f 66 20 74 68 65 20 53 51 4c 20 74 61 62  ] of the SQL tab
c1b0: 6c 65 20 69 73 20 74 68 65 20 36 34 2d 62 69 74  le is the 64-bit
c1c0: 20 73 69 67 6e 65 64 0a 69 6e 74 65 67 65 72 20   signed.integer 
c1d0: 6b 65 79 20 66 6f 72 20 65 61 63 68 20 65 6e 74  key for each ent
c1e0: 72 79 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20  ry in the table 
c1f0: 62 2d 74 72 65 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e  b-tree.</p>..<p>
c200: 20 5e 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66   ^The content of
c210: 20 65 61 63 68 20 53 51 4c 20 74 61 62 6c 65 20   each SQL table 
c220: 72 6f 77 20 69 73 20 73 74 6f 72 65 64 20 69 6e  row is stored in
c230: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
c240: 6c 65 20 62 79 0a 66 69 72 73 74 20 63 6f 6d 62  le by.first comb
c250: 69 6e 69 6e 67 20 74 68 65 20 76 61 6c 75 65 73  ining the values
c260: 20 69 6e 20 74 68 65 20 76 61 72 69 6f 75 73 20   in the various 
c270: 63 6f 6c 75 6d 6e 73 20 69 6e 74 6f 20 61 20 62  columns into a b
c280: 79 74 65 20 61 72 72 61 79 0a 69 6e 20 74 68 65  yte array.in the
c290: 20 72 65 63 6f 72 64 20 66 6f 72 6d 61 74 2c 20   record format, 
c2a0: 74 68 65 6e 20 73 74 6f 72 69 6e 67 20 74 68 61  then storing tha
c2b0: 74 20 62 79 74 65 20 61 72 72 61 79 20 61 73 20  t byte array as 
c2c0: 74 68 65 20 70 61 79 6c 6f 61 64 20 69 6e 0a 61  the payload in.a
c2d0: 6e 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20 74  n entry in the t
c2e0: 61 62 6c 65 20 62 2d 74 72 65 65 2e 20 20 5e 54  able b-tree.  ^T
c2f0: 68 65 20 6f 72 64 65 72 20 6f 66 20 76 61 6c 75  he order of valu
c300: 65 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64  es in the record
c310: 20 69 73 0a 74 68 65 20 73 61 6d 65 20 61 73 20   is.the same as 
c320: 74 68 65 20 6f 72 64 65 72 20 6f 66 20 63 6f 6c  the order of col
c330: 75 6d 6e 73 20 69 6e 20 74 68 65 20 53 51 4c 20  umns in the SQL 
c340: 74 61 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e  table definition
c350: 2e 0a 5e 57 68 65 6e 20 61 6e 20 53 51 4c 20 74  ..^When an SQL t
c360: 61 62 6c 65 20 69 6e 63 6c 75 64 65 73 20 61 6e  able includes an
c370: 0a 5b 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  .[INTEGER PRIMAR
c380: 59 20 4b 45 59 5d 20 63 6f 6c 75 6d 6e 20 28 77  Y KEY] column (w
c390: 68 69 63 68 20 61 6c 69 61 73 65 73 20 74 68 65  hich aliases the
c3a0: 20 5b 72 6f 77 69 64 5d 29 20 74 68 65 6e 20 74   [rowid]) then t
c3b0: 68 61 74 0a 63 6f 6c 75 6d 6e 20 61 70 70 65 61  hat.column appea
c3c0: 72 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64  rs in the record
c3d0: 20 61 73 20 61 20 4e 55 4c 4c 20 76 61 6c 75 65   as a NULL value
c3e0: 2e 20 20 5e 53 51 4c 69 74 65 20 77 69 6c 6c 20  .  ^SQLite will 
c3f0: 61 6c 77 61 79 73 20 75 73 65 0a 74 68 65 20 74  always use.the t
c400: 61 62 6c 65 20 62 2d 74 72 65 65 20 6b 65 79 20  able b-tree key 
c410: 72 61 74 68 65 72 20 74 68 61 6e 20 74 68 65 20  rather than the 
c420: 4e 55 4c 4c 20 76 61 6c 75 65 20 77 68 65 6e 20  NULL value when 
c430: 72 65 66 65 72 65 6e 63 69 6e 67 20 74 68 65 0a  referencing the.
c440: 5b 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59  [INTEGER PRIMARY
c450: 20 4b 45 59 5d 20 63 6f 6c 75 6d 6e 2e 3c 2f 70   KEY] column.</p
c460: 3e 0a 0a 3c 70 3e 20 5e 49 66 20 74 68 65 20 5b  >..<p> ^If the [
c470: 61 66 66 69 6e 69 74 79 5d 20 6f 66 20 61 20 63  affinity] of a c
c480: 6f 6c 75 6d 6e 20 69 73 20 52 45 41 4c 20 61 6e  olumn is REAL an
c490: 64 20 74 68 61 74 20 63 6f 6c 75 6d 6e 20 63 6f  d that column co
c4a0: 6e 74 61 69 6e 73 20 61 0a 76 61 6c 75 65 20 74  ntains a.value t
c4b0: 68 61 74 20 63 61 6e 20 62 65 20 63 6f 6e 76 65  hat can be conve
c4c0: 72 74 65 64 20 74 6f 20 61 6e 20 69 6e 74 65 67  rted to an integ
c4d0: 65 72 20 77 69 74 68 6f 75 74 20 6c 6f 73 73 20  er without loss 
c4e0: 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 28  of information.(
c4f0: 69 66 20 74 68 65 20 76 61 6c 75 65 20 63 6f 6e  if the value con
c500: 74 61 69 6e 73 20 6e 6f 20 66 72 61 63 74 69 6f  tains no fractio
c510: 6e 61 6c 20 70 61 72 74 20 61 6e 64 20 69 73 20  nal part and is 
c520: 6e 6f 74 20 74 6f 6f 20 6c 61 72 67 65 20 74 6f  not too large to
c530: 20 62 65 0a 72 65 70 72 65 73 65 6e 74 65 64 20   be.represented 
c540: 61 73 20 61 6e 20 69 6e 74 65 67 65 72 29 20 74  as an integer) t
c550: 68 65 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6d  hen the column m
c560: 61 79 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20  ay be stored in 
c570: 74 68 65 20 72 65 63 6f 72 64 0a 61 73 20 61 6e  the record.as an
c580: 20 69 6e 74 65 67 65 72 2e 20 20 5e 53 51 4c 69   integer.  ^SQLi
c590: 74 65 20 77 69 6c 6c 20 63 6f 6e 76 65 72 74 20  te will convert 
c5a0: 74 68 65 20 76 61 6c 75 65 20 62 61 63 6b 20 74  the value back t
c5b0: 6f 20 66 6c 6f 61 74 69 6e 67 0a 70 6f 69 6e 74  o floating.point
c5c0: 20 77 68 65 6e 20 65 78 74 72 61 63 74 69 6e 67   when extracting
c5d0: 20 69 74 20 66 72 6f 6d 20 74 68 65 20 72 65 63   it from the rec
c5e0: 6f 72 64 2e 3c 2f 70 3e 0a 0a 3c 68 32 3e 52 65  ord.</p>..<h2>Re
c5f0: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20  presentation of 
c600: 57 49 54 48 4f 55 54 20 52 4f 57 49 44 20 54 61  WITHOUT ROWID Ta
c610: 62 6c 65 73 3c 2f 68 32 3e 0a 0a 3c 70 3e 5e 49  bles</h2>..<p>^I
c620: 66 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 69  f an SQL table i
c630: 73 20 63 72 65 61 74 65 64 20 75 73 69 6e 67 20  s created using 
c640: 74 68 65 20 22 57 49 54 48 4f 55 54 20 52 4f 57  the "WITHOUT ROW
c650: 49 44 22 20 63 6c 61 75 73 65 20 61 74 20 74 68  ID" clause at th
c660: 65 0a 65 6e 64 20 6f 66 20 69 74 73 20 43 52 45  e.end of its CRE
c670: 41 54 45 20 54 41 42 4c 45 20 73 74 61 74 65 6d  ATE TABLE statem
c680: 65 6e 74 2c 20 74 68 65 6e 20 74 68 61 74 20 74  ent, then that t
c690: 61 62 6c 65 20 69 73 20 61 20 5b 57 49 54 48 4f  able is a [WITHO
c6a0: 55 54 20 52 4f 57 49 44 5d 0a 74 61 62 6c 65 20  UT ROWID].table 
c6b0: 61 6e 64 20 75 73 65 73 20 61 20 64 69 66 66 65  and uses a diffe
c6c0: 72 65 6e 74 20 6f 6e 2d 64 69 73 6b 20 72 65 70  rent on-disk rep
c6d0: 72 65 73 65 6e 74 61 74 69 6f 6e 2e 20 20 5e 41  resentation.  ^A
c6e0: 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44 0a 74   WITHOUT ROWID.t
c6f0: 61 62 6c 65 20 75 73 65 73 20 61 6e 20 69 6e 64  able uses an ind
c700: 65 78 20 62 2d 74 72 65 65 20 72 61 74 68 65 72  ex b-tree rather
c710: 20 74 68 61 6e 20 61 20 74 61 62 6c 65 20 62 2d   than a table b-
c720: 74 72 65 65 20 66 6f 72 20 73 74 6f 72 61 67 65  tree for storage
c730: 2e 0a 5e 54 68 65 20 6b 65 79 20 66 6f 72 20 65  ..^The key for e
c740: 61 63 68 20 65 6e 74 72 79 20 69 6e 20 74 68 65  ach entry in the
c750: 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44 20 62   WITHOUT ROWID b
c760: 2d 74 72 65 65 20 69 73 20 61 20 72 65 63 6f 72  -tree is a recor
c770: 64 20 63 6f 6d 70 6f 73 65 64 0a 6f 66 20 74 68  d composed.of th
c780: 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65  e columns of the
c790: 20 50 52 49 4d 41 52 59 20 4b 45 59 20 66 6f 6c   PRIMARY KEY fol
c7a0: 6c 6f 77 65 64 20 62 79 20 61 6c 6c 20 72 65 6d  lowed by all rem
c7b0: 61 69 6e 69 6e 67 20 63 6f 6c 75 6d 6e 73 20 6f  aining columns o
c7c0: 66 0a 74 68 65 20 74 61 62 6c 65 2e 20 20 5e 54  f.the table.  ^T
c7d0: 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79 20 63  he primary key c
c7e0: 6f 6c 75 6d 6e 73 20 61 70 70 65 61 72 20 69 6e  olumns appear in
c7f0: 20 74 68 65 20 6f 72 64 65 72 20 74 68 65 79 20   the order they 
c800: 74 68 65 79 20 77 65 72 65 0a 64 65 63 6c 61 72  they were.declar
c810: 65 64 20 69 6e 20 74 68 65 20 50 52 49 4d 41 52  ed in the PRIMAR
c820: 59 20 4b 45 59 20 63 6c 61 75 73 65 20 61 6e 64  Y KEY clause and
c830: 20 74 68 65 20 72 65 6d 61 69 6e 69 6e 67 20 63   the remaining c
c840: 6f 6c 75 6d 6e 73 20 61 70 70 65 61 72 20 69 6e  olumns appear in
c850: 0a 74 68 65 20 6f 72 64 65 72 20 74 68 65 79 20  .the order they 
c860: 6f 63 63 75 72 20 69 6e 20 74 68 65 20 43 52 45  occur in the CRE
c870: 41 54 45 20 54 41 42 4c 45 20 73 74 61 74 65 6d  ATE TABLE statem
c880: 65 6e 74 2e 0a 0a 3c 70 3e 5e 48 65 6e 63 65 2c  ent...<p>^Hence,
c890: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 65 6e 63   the content enc
c8a0: 6f 64 69 6e 67 20 66 6f 72 20 61 20 57 49 54 48  oding for a WITH
c8b0: 4f 55 54 20 52 4f 57 49 44 20 74 61 62 6c 65 20  OUT ROWID table 
c8c0: 69 73 20 74 68 65 20 73 61 6d 65 0a 61 73 20 74  is the same.as t
c8d0: 68 65 20 63 6f 6e 74 65 6e 74 20 65 6e 63 6f 64  he content encod
c8e0: 69 6e 67 20 66 6f 72 20 61 6e 20 6f 72 64 69 6e  ing for an ordin
c8f0: 61 72 79 20 72 6f 77 69 64 20 74 61 62 6c 65 2c  ary rowid table,
c900: 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65   except that the
c910: 0a 6f 72 64 65 72 20 6f 66 20 74 68 65 20 63 6f  .order of the co
c920: 6c 75 6d 6e 73 20 69 73 20 72 65 61 72 72 61 6e  lumns is rearran
c930: 67 65 64 20 73 6f 20 74 68 61 74 20 50 52 49 4d  ged so that PRIM
c940: 41 52 59 20 4b 45 59 20 63 6f 6c 75 6d 6e 73 20  ARY KEY columns 
c950: 63 6f 6d 65 0a 66 69 72 73 74 2c 20 61 6e 64 20  come.first, and 
c960: 74 68 65 20 63 6f 6e 74 65 6e 74 20 69 73 20 75  the content is u
c970: 73 65 64 20 61 73 20 74 68 65 20 6b 65 79 20 69  sed as the key i
c980: 6e 20 61 6e 20 69 6e 64 65 78 20 62 2d 74 72 65  n an index b-tre
c990: 65 20 72 61 74 68 65 72 0a 74 68 61 6e 20 61 73  e rather.than as
c9a0: 20 74 68 65 20 64 61 74 61 20 69 6e 20 61 20 74   the data in a t
c9b0: 61 62 6c 65 20 62 2d 74 72 65 65 2e 0a 5e 54 68  able b-tree..^Th
c9c0: 65 20 73 70 65 63 69 61 6c 20 65 6e 63 6f 64 69  e special encodi
c9d0: 6e 67 20 72 75 6c 65 73 20 66 6f 72 20 63 6f 6c  ng rules for col
c9e0: 75 6d 6e 73 20 77 69 74 68 20 52 45 41 4c 20 61  umns with REAL a
c9f0: 66 66 69 6e 69 74 79 0a 61 70 70 6c 79 20 74 6f  ffinity.apply to
ca00: 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44 20 74   WITHOUT ROWID t
ca10: 61 62 6c 65 73 20 74 68 65 20 73 61 6d 65 20 61  ables the same a
ca20: 73 20 74 68 65 79 20 64 6f 20 77 69 74 68 20 72  s they do with r
ca30: 6f 77 69 64 20 74 61 62 6c 65 73 2e 0a 0a 3c 68  owid tables...<h
ca40: 32 3e 52 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  2>Representation
ca50: 20 4f 66 20 53 51 4c 20 49 6e 64 69 63 65 73 3c   Of SQL Indices<
ca60: 2f 68 32 3e 0a 0a 3c 70 3e 5e 45 61 63 68 20 53  /h2>..<p>^Each S
ca70: 51 4c 20 69 6e 64 65 78 2c 20 77 68 65 74 68 65  QL index, whethe
ca80: 72 20 65 78 70 6c 69 63 69 74 6c 79 20 64 65 63  r explicitly dec
ca90: 6c 61 72 65 64 20 76 69 61 20 61 20 5b 43 52 45  lared via a [CRE
caa0: 41 54 45 20 49 4e 44 45 58 5d 20 73 74 61 74 65  ATE INDEX] state
cab0: 6d 65 6e 74 0a 6f 72 20 69 6d 70 6c 69 65 64 20  ment.or implied 
cac0: 62 79 20 61 20 55 4e 49 51 55 45 20 6f 72 20 50  by a UNIQUE or P
cad0: 52 49 4d 41 52 59 20 4b 45 59 20 63 6f 6e 73 74  RIMARY KEY const
cae0: 72 61 69 6e 74 2c 20 63 6f 72 72 65 73 70 6f 6e  raint, correspon
caf0: 64 73 20 74 6f 20 61 6e 20 0a 69 6e 64 65 78 20  ds to an .index 
cb00: 62 2d 74 72 65 65 20 69 6e 20 74 68 65 20 64 61  b-tree in the da
cb10: 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 5e 45 61  tabase file..^Ea
cb20: 63 68 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20  ch entry in the 
cb30: 69 6e 64 65 78 20 62 2d 74 72 65 65 20 63 6f 72  index b-tree cor
cb40: 72 65 73 70 6f 6e 64 73 20 74 6f 20 61 20 73 69  responds to a si
cb50: 6e 67 6c 65 20 72 6f 77 20 69 6e 20 74 68 65 20  ngle row in the 
cb60: 0a 61 73 73 6f 63 69 61 74 65 64 20 53 51 4c 20  .associated SQL 
cb70: 74 61 62 6c 65 2e 0a 5e 54 68 65 20 6b 65 79 20  table..^The key 
cb80: 74 6f 20 61 6e 20 69 6e 64 65 78 20 62 2d 74 72  to an index b-tr
cb90: 65 65 20 69 73 0a 61 20 72 65 63 6f 72 64 20 63  ee is.a record c
cba0: 6f 6d 70 6f 73 65 64 20 6f 66 20 74 68 65 20 63  omposed of the c
cbb0: 6f 6c 75 6d 6e 73 20 74 68 61 74 20 61 72 65 20  olumns that are 
cbc0: 62 65 69 6e 67 20 69 6e 64 65 78 65 64 20 66 6f  being indexed fo
cbd0: 6c 6c 6f 77 65 64 20 62 79 20 74 68 65 0a 6b 65  llowed by the.ke
cbe0: 79 20 6f 66 20 74 68 65 20 63 6f 72 72 65 73 70  y of the corresp
cbf0: 6f 6e 64 69 6e 67 20 74 61 62 6c 65 20 72 6f 77  onding table row
cc00: 2e 20 20 46 6f 72 20 6f 72 64 69 6e 61 72 79 20  .  For ordinary 
cc10: 74 61 62 6c 65 73 2c 20 74 68 65 20 72 6f 77 20  tables, the row 
cc20: 6b 65 79 20 69 73 0a 74 68 65 20 5b 72 6f 77 69  key is.the [rowi
cc30: 64 5d 2c 20 61 6e 64 20 66 6f 72 20 5b 57 49 54  d], and for [WIT
cc40: 48 4f 55 54 20 52 4f 57 49 44 5d 20 74 61 62 6c  HOUT ROWID] tabl
cc50: 65 73 20 74 68 65 20 72 6f 77 20 6b 65 79 20 69  es the row key i
cc60: 73 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  s the PRIMARY KE
cc70: 59 2e 0a 42 65 63 61 75 73 65 20 65 76 65 72 79  Y..Because every
cc80: 20 72 6f 77 20 69 6e 20 74 68 65 20 74 61 62 6c   row in the tabl
cc90: 65 20 68 61 73 20 61 20 75 6e 69 71 75 65 20 72  e has a unique r
cca0: 6f 77 20 6b 65 79 2c 0a 61 6c 6c 20 6b 65 79 73  ow key,.all keys
ccb0: 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 61 72 65   in an index are
ccc0: 20 75 6e 69 71 75 65 2e 3c 2f 70 3e 0a 0a 3c 70   unique.</p>..<p
ccd0: 3e 5e 49 6e 20 61 20 6e 6f 72 6d 61 6c 20 69 6e  >^In a normal in
cce0: 64 65 78 2c 20 74 68 65 72 65 20 69 73 20 61 20  dex, there is a 
ccf0: 6f 6e 65 2d 74 6f 2d 6f 6e 65 20 6d 61 70 70 69  one-to-one mappi
cd00: 6e 67 20 62 65 74 77 65 65 6e 20 72 6f 77 73 20  ng between rows 
cd10: 69 6e 20 61 20 0a 74 61 62 6c 65 20 61 6e 64 20  in a .table and 
cd20: 65 6e 74 72 69 65 73 20 69 6e 20 65 61 63 68 20  entries in each 
cd30: 69 6e 64 65 78 20 61 73 73 6f 63 69 61 74 65 64  index associated
cd40: 20 77 69 74 68 20 74 68 61 74 20 74 61 62 6c 65   with that table
cd50: 2e 0a 5e 48 6f 77 65 76 65 72 2c 20 69 6e 20 61  ..^However, in a
cd60: 20 5b 70 61 72 74 69 61 6c 20 69 6e 64 65 78 5d   [partial index]
cd70: 2c 20 74 68 65 20 69 6e 64 65 78 20 62 2d 74 72  , the index b-tr
cd80: 65 65 20 6f 6e 6c 79 20 63 6f 6e 74 61 69 6e 73  ee only contains
cd90: 20 65 6e 74 72 69 65 73 0a 63 6f 72 72 65 73 70   entries.corresp
cda0: 6f 6e 64 69 6e 67 20 74 6f 20 74 61 62 6c 65 20  onding to table 
cdb0: 72 6f 77 73 20 66 6f 72 20 77 68 69 63 68 20 74  rows for which t
cdc0: 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
cdd0: 65 78 70 72 65 73 73 69 6f 6e 20 6f 6e 20 74 68  expression on th
cde0: 65 0a 43 52 45 41 54 45 20 49 4e 44 45 58 20 73  e.CREATE INDEX s
cdf0: 74 61 74 65 6d 65 6e 74 20 69 73 20 74 72 75 65  tatement is true
ce00: 2e 0a 5e 43 6f 72 72 65 73 70 6f 6e 64 69 6e 67  ..^Corresponding
ce10: 20 72 6f 77 73 20 69 6e 20 74 68 65 20 69 6e 64   rows in the ind
ce20: 65 78 20 61 6e 64 20 74 61 62 6c 65 20 62 2d 74  ex and table b-t
ce30: 72 65 65 73 20 73 68 61 72 65 20 74 68 65 20 73  rees share the s
ce40: 61 6d 65 20 72 6f 77 69 64 0a 6f 72 20 70 72 69  ame rowid.or pri
ce50: 6d 61 72 79 20 6b 65 79 20 76 61 6c 75 65 73 20  mary key values 
ce60: 61 6e 64 20 63 6f 6e 74 61 69 6e 20 74 68 65 20  and contain the 
ce70: 73 61 6d 65 20 76 61 6c 75 65 20 66 6f 72 20 61  same value for a
ce80: 6c 6c 20 69 6e 64 65 78 65 64 20 63 6f 6c 75 6d  ll indexed colum
ce90: 6e 73 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 53 75 70  ns.</p>..<h3>Sup
cea0: 70 72 65 73 73 69 6f 6e 20 6f 66 20 72 65 64 75  pression of redu
ceb0: 6e 64 61 6e 74 20 63 6f 6c 75 6d 6e 73 20 69 6e  ndant columns in
cec0: 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44 20 73   WITHOUT ROWID s
ced0: 65 63 6f 6e 64 61 72 79 20 69 6e 64 65 78 65 64  econdary indexed
cee0: 0a 3c 2f 68 33 3e 0a 0a 3c 70 3e 20 5e 49 6e 20  .</h3>..<p> ^In 
cef0: 61 6e 20 69 6e 64 65 78 20 6f 6e 20 61 20 57 49  an index on a WI
cf00: 54 48 4f 55 54 20 52 4f 57 49 44 20 74 61 62 6c  THOUT ROWID tabl
cf10: 65 2c 20 69 66 20 6f 6e 65 20 6f 72 20 6d 6f 72  e, if one or mor
cf20: 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73  e of the columns
cf30: 0a 6f 66 20 74 68 65 20 74 61 62 6c 65 20 50 52  .of the table PR
cf40: 49 4d 41 52 59 20 4b 45 59 20 61 72 65 20 61 6c  IMARY KEY are al
cf50: 73 6f 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68  so columns of th
cf60: 65 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 74 68  e index, then th
cf70: 65 0a 69 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e  e.indexed column
cf80: 20 69 73 20 6e 6f 74 20 72 65 70 65 61 74 65 64   is not repeated
cf90: 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2d 6b 65   in the table-ke
cfa0: 79 20 73 75 66 66 69 78 20 6f 6e 20 74 68 65 20  y suffix on the 
cfb0: 65 6e 64 20 6f 66 0a 74 68 65 20 69 6e 64 65 78  end of.the index
cfc0: 20 72 65 63 6f 72 64 2e 20 20 5e 28 41 73 20 61   record.  ^(As a
cfd0: 6e 20 65 78 61 6d 70 6c 65 2c 20 63 6f 6e 73 69  n example, consi
cfe0: 64 65 72 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  der the followin
cff0: 67 20 53 51 4c 3a 0a 0a 3c 62 6c 6f 63 6b 71 75  g SQL:..<blockqu
d000: 6f 74 65 3e 3c 70 72 65 3e 0a 43 52 45 41 54 45  ote><pre>.CREATE
d010: 20 54 41 42 4c 45 20 65 78 32 35 28 61 2c 62 2c   TABLE ex25(a,b,
d020: 63 2c 64 2c 65 2c 50 52 49 4d 41 52 59 20 4b 45  c,d,e,PRIMARY KE
d030: 59 28 64 2c 63 2c 61 29 29 20 57 49 54 48 4f 55  Y(d,c,a)) WITHOU
d040: 54 20 72 6f 77 69 64 3b 0a 43 52 45 41 54 45 20  T rowid;.CREATE 
d050: 49 4e 44 45 58 20 65 78 32 35 63 65 20 4f 4e 20  INDEX ex25ce ON 
d060: 65 78 32 35 28 63 2c 65 29 3b 0a 43 52 45 41 54  ex25(c,e);.CREAT
d070: 45 20 49 4e 44 45 58 20 65 78 32 35 61 63 64 65  E INDEX ex25acde
d080: 20 4f 4e 20 65 78 32 35 28 61 2c 63 2c 64 2c 65   ON ex25(a,c,d,e
d090: 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b  );.</pre></block
d0a0: 71 75 6f 74 65 3e 0a 0a 3c 70 3e 45 61 63 68 20  quote>..<p>Each 
d0b0: 72 6f 77 20 69 6e 20 74 68 65 20 65 78 32 35 63  row in the ex25c
d0c0: 65 20 69 6e 64 65 78 20 69 73 20 61 20 72 65 63  e index is a rec
d0d0: 6f 72 64 0a 77 69 74 68 20 74 68 65 73 65 20 63  ord.with these c
d0e0: 6f 6c 75 6d 6e 73 3a 20 63 2c 20 65 2c 20 64 2c  olumns: c, e, d,
d0f0: 20 61 2e 20 20 54 68 65 20 66 69 72 73 74 20 74   a.  The first t
d100: 77 6f 20 63 6f 6c 75 6d 6e 73 20 61 72 65 0a 74  wo columns are.t
d110: 68 65 20 63 6f 6c 75 6d 6e 73 20 62 65 69 6e 67  he columns being
d120: 20 69 6e 64 65 78 65 64 2c 20 63 20 61 6e 64 20   indexed, c and 
d130: 65 2e 20 20 54 68 65 20 72 65 6d 61 69 6e 69 6e  e.  The remainin
d140: 67 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 74 68  g columns are th
d150: 65 20 70 72 69 6d 61 72 79 0a 6b 65 79 20 6f 66  e primary.key of
d160: 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
d170: 6e 67 20 74 61 62 6c 65 20 72 6f 77 2e 20 20 4e  ng table row.  N
d180: 6f 72 6d 61 6c 6c 79 2c 20 74 68 65 20 70 72 69  ormally, the pri
d190: 6d 61 72 79 20 6b 65 79 20 77 6f 75 6c 64 20 62  mary key would b
d1a0: 65 0a 63 6f 6c 75 6d 6e 73 20 64 2c 20 63 2c 20  e.columns d, c, 
d1b0: 61 6e 64 20 61 2c 20 62 75 74 20 62 65 63 61 75  and a, but becau
d1c0: 73 65 20 63 6f 6c 75 6d 6e 20 63 20 61 6c 72 65  se column c alre
d1d0: 61 64 79 20 61 70 70 65 61 72 73 20 65 61 72 6c  ady appears earl
d1e0: 69 65 72 20 69 6e 20 74 68 65 0a 69 6e 64 65 78  ier in the.index
d1f0: 2c 20 69 74 20 69 73 20 6f 6d 69 74 74 65 64 20  , it is omitted 
d200: 66 72 6f 6d 20 74 68 65 20 6b 65 79 20 73 75 66  from the key suf
d210: 66 69 78 2e 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  fix.)^</p>..<p>^
d220: 28 49 6e 20 74 68 65 20 65 78 74 72 65 6d 65 20  (In the extreme 
d230: 63 61 73 65 20 77 68 65 72 65 20 74 68 65 20 63  case where the c
d240: 6f 6c 75 6d 6e 73 20 62 65 69 6e 67 20 69 6e 64  olumns being ind
d250: 65 78 65 64 20 63 6f 76 65 72 20 61 6c 6c 20 63  exed cover all c
d260: 6f 6c 75 6d 6e 73 0a 6f 66 20 74 68 65 20 50 52  olumns.of the PR
d270: 49 4d 41 52 59 20 4b 45 59 2c 20 74 68 65 20 69  IMARY KEY, the i
d280: 6e 64 65 78 20 77 69 6c 6c 20 63 6f 6e 73 69 73  ndex will consis
d290: 74 20 6f 66 20 6f 6e 6c 79 20 74 68 65 20 63 6f  t of only the co
d2a0: 6c 75 6d 6e 73 20 62 65 69 6e 67 0a 69 6e 64 65  lumns being.inde
d2b0: 78 65 64 2e 20 20 54 68 65 20 65 78 32 35 61 63  xed.  The ex25ac
d2c0: 64 65 20 65 78 61 6d 70 6c 65 20 61 62 6f 76 65  de example above
d2d0: 20 64 65 6d 6f 6e 73 74 72 61 74 65 73 20 74 68   demonstrates th
d2e0: 69 73 2e 29 5e 20 20 5e 45 61 63 68 20 65 6e 74  is.)^  ^Each ent
d2f0: 72 79 20 69 6e 0a 74 68 65 20 65 78 32 35 61 63  ry in.the ex25ac
d300: 64 65 20 69 6e 64 65 78 20 63 6f 6e 73 69 73 74  de index consist
d310: 73 20 6f 66 20 6f 6e 6c 79 20 74 68 65 20 63 6f  s of only the co
d320: 6c 75 6d 6e 73 20 61 2c 20 63 2c 20 64 2c 20 61  lumns a, c, d, a
d330: 6e 64 20 65 2c 20 69 6e 20 74 68 61 74 0a 6f 72  nd e, in that.or
d340: 64 65 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 54  der.</p>..<p> ^T
d350: 68 65 20 73 75 70 70 72 65 73 73 69 6f 6e 20 6f  he suppression o
d360: 66 20 72 65 64 75 6e 64 61 6e 74 20 63 6f 6c 75  f redundant colu
d370: 6d 6e 73 20 69 6e 20 74 68 65 20 6b 65 79 20 73  mns in the key s
d380: 75 66 66 69 78 20 6f 66 20 61 6e 20 69 6e 64 65  uffix of an inde
d390: 78 0a 65 6e 74 72 79 20 6f 6e 6c 79 20 6f 63 63  x.entry only occ
d3a0: 75 72 73 20 69 6e 20 57 49 54 48 4f 55 54 20 52  urs in WITHOUT R
d3b0: 4f 57 49 44 20 74 61 62 6c 65 73 2e 20 20 5e 49  OWID tables.  ^I
d3c0: 6e 20 61 6e 20 6f 72 64 69 6e 61 72 79 20 72 6f  n an ordinary ro
d3d0: 77 69 64 20 74 61 62 6c 65 2c 0a 74 68 65 20 69  wid table,.the i
d3e0: 6e 64 65 78 20 65 6e 74 72 79 20 61 6c 77 61 79  ndex entry alway
d3f0: 73 20 65 6e 64 73 20 77 69 74 68 20 74 68 65 20  s ends with the 
d400: 72 6f 77 69 64 20 65 76 65 6e 20 69 66 20 74 68  rowid even if th
d410: 65 20 5b 49 4e 54 45 47 45 52 20 50 52 49 4d 41  e [INTEGER PRIMA
d420: 52 59 20 4b 45 59 5d 0a 63 6f 6c 75 6d 6e 20 69  RY KEY].column i
d430: 73 20 6f 6e 65 20 6f 66 20 74 68 65 20 63 6f 6c  s one of the col
d440: 75 6d 6e 73 20 62 65 69 6e 67 20 69 6e 64 65 78  umns being index
d450: 65 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  ed.</p>..<tcl>hd
d460: 5f 66 72 61 67 6d 65 6e 74 20 73 71 6c 69 74 65  _fragment sqlite
d470: 5f 6d 61 73 74 65 72 20 7b 73 71 6c 69 74 65 5f  _master {sqlite_
d480: 6d 61 73 74 65 72 7d 20 7b 73 71 6c 69 74 65 5f  master} {sqlite_
d490: 6d 61 73 74 65 72 20 74 61 62 6c 65 7d 3c 2f 74  master table}</t
d4a0: 63 6c 3e 0a 3c 68 32 3e 53 74 6f 72 61 67 65 20  cl>.<h2>Storage 
d4b0: 4f 66 20 54 68 65 20 53 51 4c 20 44 61 74 61 62  Of The SQL Datab
d4c0: 61 73 65 20 53 63 68 65 6d 61 3c 2f 68 32 3e 0a  ase Schema</h2>.
d4d0: 0a 3c 70 3e 5e 50 61 67 65 20 31 20 6f 66 20 61  .<p>^Page 1 of a
d4e0: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
d4f0: 73 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20  s the root page 
d500: 6f 66 20 61 20 74 61 62 6c 65 20 62 2d 74 72 65  of a table b-tre
d510: 65 20 74 68 61 74 0a 68 6f 6c 64 73 20 61 20 73  e that.holds a s
d520: 70 65 63 69 61 6c 20 74 61 62 6c 65 20 6e 61 6d  pecial table nam
d530: 65 64 20 22 73 71 6c 69 74 65 5f 6d 61 73 74 65  ed "sqlite_maste
d540: 72 22 20 28 6f 72 20 22 73 71 6c 69 74 65 5f 74  r" (or "sqlite_t
d550: 65 6d 70 5f 6d 61 73 74 65 72 22 20 69 6e 0a 74  emp_master" in.t
d560: 68 65 20 63 61 73 65 20 6f 66 20 61 20 54 45 4d  he case of a TEM
d570: 50 20 64 61 74 61 62 61 73 65 29 20 77 68 69 63  P database) whic
d580: 68 20 73 74 6f 72 65 73 20 74 68 65 20 63 6f 6d  h stores the com
d590: 70 6c 65 74 65 0a 64 61 74 61 62 61 73 65 20 73  plete.database s
d5a0: 63 68 65 6d 61 2e 20 20 5e 28 54 68 65 20 73 74  chema.  ^(The st
d5b0: 72 75 63 74 75 72 65 20 6f 66 20 74 68 65 20 73  ructure of the s
d5c0: 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62  qlite_master tab
d5d0: 6c 65 20 69 73 20 61 73 0a 69 66 20 69 74 20 68  le is as.if it h
d5e0: 61 64 20 62 65 65 6e 20 63 72 65 61 74 65 64 20  ad been created 
d5f0: 75 73 69 6e 67 20 74 68 65 20 66 6f 6c 6c 6f 77  using the follow
d600: 69 6e 67 20 53 51 4c 3a 3c 2f 70 3e 0a 0a 3c 62  ing SQL:</p>..<b
d610: 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a  lockquote><pre>.
d620: 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 71 6c  CREATE TABLE sql
d630: 69 74 65 5f 6d 61 73 74 65 72 28 0a 20 20 74 79  ite_master(.  ty
d640: 70 65 20 74 65 78 74 2c 0a 20 20 6e 61 6d 65 20  pe text,.  name 
d650: 74 65 78 74 2c 0a 20 20 74 62 6c 5f 6e 61 6d 65  text,.  tbl_name
d660: 20 74 65 78 74 2c 0a 20 20 72 6f 6f 74 70 61 67   text,.  rootpag
d670: 65 20 69 6e 74 65 67 65 72 2c 0a 20 20 73 71 6c  e integer,.  sql
d680: 20 74 65 78 74 0a 29 3b 0a 3c 2f 70 72 65 3e 3c   text.);.</pre><
d690: 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a  /blockquote>)^..
d6a0: 3c 70 3e 5e 54 68 65 20 73 71 6c 69 74 65 5f 6d  <p>^The sqlite_m
d6b0: 61 73 74 65 72 20 74 61 62 6c 65 20 63 6f 6e 74  aster table cont
d6c0: 61 69 6e 73 20 6f 6e 65 20 72 6f 77 20 66 6f 72  ains one row for
d6d0: 20 65 61 63 68 20 74 61 62 6c 65 2c 20 69 6e 64   each table, ind
d6e0: 65 78 2c 20 76 69 65 77 2c 0a 61 6e 64 20 74 72  ex, view,.and tr
d6f0: 69 67 67 65 72 20 28 63 6f 6c 6c 65 63 74 69 76  igger (collectiv
d700: 65 6c 79 20 22 6f 62 6a 65 63 74 73 22 29 20 69  ely "objects") i
d710: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  n the database s
d720: 63 68 65 6d 61 2c 20 65 78 63 65 70 74 20 74 68  chema, except th
d730: 65 72 65 0a 69 73 20 6e 6f 20 65 6e 74 72 79 20  ere.is no entry 
d740: 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65 5f 6d  for the sqlite_m
d750: 61 73 74 65 72 20 74 61 62 6c 65 20 69 74 73 65  aster table itse
d760: 6c 66 2e 20 20 5e 54 68 65 20 73 71 6c 69 74 65  lf.  ^The sqlite
d770: 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 0a 63 6f  _master table.co
d780: 6e 74 61 69 6e 73 20 65 6e 74 72 69 65 73 20 66  ntains entries f
d790: 6f 72 20 5b 69 6e 74 65 72 6e 61 6c 20 73 63 68  or [internal sch
d7a0: 65 6d 61 20 6f 62 6a 65 63 74 73 5d 20 69 6e 20  ema objects] in 
d7b0: 61 64 64 69 74 69 6f 6e 20 74 6f 20 61 70 70 6c  addition to appl
d7c0: 69 63 61 74 69 6f 6e 2d 0a 61 6e 64 20 70 72 6f  ication-.and pro
d7d0: 67 72 61 6d 6d 65 72 2d 64 65 66 69 6e 65 64 20  grammer-defined 
d7e0: 6f 62 6a 65 63 74 73 2e 0a 0a 0a 3c 70 3e 5e 28  objects....<p>^(
d7f0: 54 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  The sqlite_maste
d800: 72 2e 74 79 70 65 20 63 6f 6c 75 6d 6e 20 77 69  r.type column wi
d810: 6c 6c 20 62 65 20 6f 6e 65 0a 6f 66 20 74 68 65  ll be one.of the
d820: 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 65 78 74 20   following text 
d830: 73 74 72 69 6e 67 73 3a 20 20 27 74 61 62 6c 65  strings:  'table
d840: 27 2c 20 27 69 6e 64 65 78 27 2c 20 27 76 69 65  ', 'index', 'vie
d850: 77 27 2c 20 6f 72 20 27 74 72 69 67 67 65 72 27  w', or 'trigger'
d860: 0a 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68  .according to th
d870: 65 20 74 79 70 65 20 6f 66 20 6f 62 6a 65 63 74  e type of object
d880: 20 64 65 66 69 6e 65 64 2e 20 20 54 68 65 20 27   defined.  The '
d890: 74 61 62 6c 65 27 20 73 74 72 69 6e 67 20 69 73  table' string is
d8a0: 20 75 73 65 64 0a 66 6f 72 20 62 6f 74 68 20 6f   used.for both o
d8b0: 72 64 69 6e 61 72 79 20 61 6e 64 20 5b 76 69 72  rdinary and [vir
d8c0: 74 75 61 6c 20 74 61 62 6c 65 73 5d 2e 29 5e 3c  tual tables].)^<
d8d0: 2f 70 3e 0a 0a 3c 70 3e 5e 28 54 68 65 20 73 71  /p>..<p>^(The sq
d8e0: 6c 69 74 65 5f 6d 61 73 74 65 72 2e 6e 61 6d 65  lite_master.name
d8f0: 20 63 6f 6c 75 6d 6e 20 77 69 6c 6c 20 68 6f 6c   column will hol
d900: 64 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  d the name of th
d910: 65 20 6f 62 6a 65 63 74 2e 29 5e 0a 5e 28 5b 55  e object.)^.^([U
d920: 4e 49 51 55 45 5d 20 61 6e 64 20 5b 50 52 49 4d  NIQUE] and [PRIM
d930: 41 52 59 20 4b 45 59 5d 20 63 6f 6e 73 74 72 61  ARY KEY] constra
d940: 69 6e 74 73 20 6f 6e 20 74 61 62 6c 65 73 20 63  ints on tables c
d950: 61 75 73 65 20 53 51 4c 69 74 65 20 74 6f 20 63  ause SQLite to c
d960: 72 65 61 74 65 0a 5b 69 6e 74 65 72 6e 61 6c 20  reate.[internal 
d970: 69 6e 64 65 78 65 73 5d 20 77 69 74 68 20 6e 61  indexes] with na
d980: 6d 65 73 20 6f 66 20 74 68 65 20 66 6f 72 6d 20  mes of the form 
d990: 22 73 71 6c 69 74 65 5f 61 75 74 6f 69 6e 64 65  "sqlite_autoinde
d9a0: 78 5f 54 41 42 4c 45 5f 4e 22 0a 77 68 65 72 65  x_TABLE_N".where
d9b0: 20 54 41 42 4c 45 20 69 73 20 72 65 70 6c 61 63   TABLE is replac
d9c0: 65 64 20 62 79 20 74 68 65 20 6e 61 6d 65 20 6f  ed by the name o
d9d0: 66 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  f the table that
d9e0: 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 0a 63 6f   contains the.co
d9f0: 6e 73 74 72 61 69 6e 74 20 61 6e 64 20 4e 20 69  nstraint and N i
da00: 73 20 61 6e 20 69 6e 74 65 67 65 72 20 62 65 67  s an integer beg
da10: 69 6e 6e 69 6e 67 20 77 69 74 68 20 31 20 61 6e  inning with 1 an
da20: 64 20 69 6e 63 72 65 61 73 69 6e 67 20 62 79 20  d increasing by 
da30: 6f 6e 65 0a 77 69 74 68 20 65 61 63 68 20 63 6f  one.with each co
da40: 6e 73 74 72 61 69 6e 74 20 73 65 65 6e 20 69 6e  nstraint seen in
da50: 20 74 68 65 20 74 61 62 6c 65 20 64 65 66 69 6e   the table defin
da60: 69 74 69 6f 6e 2e 29 5e 0a 5e 28 49 6e 20 61 20  ition.)^.^(In a 
da70: 5b 57 49 54 48 4f 55 54 20 52 4f 57 49 44 5d 20  [WITHOUT ROWID] 
da80: 74 61 62 6c 65 2c 20 74 68 65 72 65 20 69 73 20  table, there is 
da90: 6e 6f 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  no sqlite_master
daa0: 20 65 6e 74 72 79 20 66 6f 72 20 74 68 65 0a 50   entry for the.P
dab0: 52 49 4d 41 52 59 20 4b 45 59 2c 20 62 75 74 20  RIMARY KEY, but 
dac0: 74 68 65 20 22 73 71 6c 69 74 65 5f 61 75 74 6f  the "sqlite_auto
dad0: 69 6e 64 65 78 5f 54 41 42 4c 45 5f 4e 22 20 6e  index_TABLE_N" n
dae0: 61 6d 65 20 69 73 20 73 65 74 20 61 73 69 64 65  ame is set aside
daf0: 0a 66 6f 72 20 74 68 65 20 50 52 49 4d 41 52 59  .for the PRIMARY
db00: 20 4b 45 59 20 61 73 20 69 66 20 74 68 65 20 73   KEY as if the s
db10: 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 65 6e 74  qlite_master ent
db20: 72 79 20 64 69 64 20 65 78 69 73 74 2e 20 20 54  ry did exist.  T
db30: 68 69 73 0a 77 69 6c 6c 20 61 66 66 65 63 74 20  his.will affect 
db40: 74 68 65 20 6e 75 6d 62 65 72 69 6e 67 20 6f 66  the numbering of
db50: 20 73 75 62 73 65 71 75 65 6e 74 20 55 4e 49 51   subsequent UNIQ
db60: 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e 29  UE constraints.)
db70: 5e 0a 5e 54 68 65 20 22 73 71 6c 69 74 65 5f 61  ^.^The "sqlite_a
db80: 75 74 6f 69 6e 64 65 78 5f 54 41 42 4c 45 5f 4e  utoindex_TABLE_N
db90: 22 20 6e 61 6d 65 20 69 73 20 6e 65 76 65 72 20  " name is never 
dba0: 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 61 6e  allocated for an
dbb0: 0a 5b 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  .[INTEGER PRIMAR
dbc0: 59 20 4b 45 59 5d 2c 20 65 69 74 68 65 72 20 69  Y KEY], either i
dbd0: 6e 20 72 6f 77 69 64 20 74 61 62 6c 65 73 20 6f  n rowid tables o
dbe0: 72 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44 20  r WITHOUT ROWID 
dbf0: 74 61 62 6c 65 73 2e 0a 3c 2f 70 3e 0a 0a 3c 70  tables..</p>..<p
dc00: 3e 54 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74  >The sqlite_mast
dc10: 65 72 2e 74 62 6c 5f 6e 61 6d 65 20 63 6f 6c 75  er.tbl_name colu
dc20: 6d 6e 20 68 6f 6c 64 73 20 74 68 65 20 6e 61 6d  mn holds the nam
dc30: 65 20 6f 66 20 61 20 74 61 62 6c 65 20 6f 72 20  e of a table or 
dc40: 76 69 65 77 0a 74 68 61 74 20 74 68 65 20 6f 62  view.that the ob
dc50: 6a 65 63 74 20 69 73 20 61 73 73 6f 63 69 61 74  ject is associat
dc60: 65 64 20 77 69 74 68 2e 20 20 5e 46 6f 72 20 61  ed with.  ^For a
dc70: 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77 2c 20   table or view, 
dc80: 74 68 65 0a 74 62 6c 5f 6e 61 6d 65 20 63 6f 6c  the.tbl_name col
dc90: 75 6d 6e 20 69 73 20 61 20 63 6f 70 79 20 6f 66  umn is a copy of
dca0: 20 74 68 65 20 6e 61 6d 65 20 63 6f 6c 75 6d 6e   the name column
dcb0: 2e 20 20 5e 46 6f 72 20 61 6e 20 69 6e 64 65 78  .  ^For an index
dcc0: 2c 20 74 68 65 20 74 62 6c 5f 6e 61 6d 65 0a 69  , the tbl_name.i
dcd0: 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  s the name of th
dce0: 65 20 74 61 62 6c 65 20 74 68 61 74 20 69 73 20  e table that is 
dcf0: 69 6e 64 65 78 65 64 2e 20 20 5e 46 6f 72 20 61  indexed.  ^For a
dd00: 20 74 72 69 67 67 65 72 2c 20 74 68 65 20 74 62   trigger, the tb
dd10: 6c 5f 6e 61 6d 65 0a 63 6f 6c 75 6d 6e 20 73 74  l_name.column st
dd20: 6f 72 65 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  ores the name of
dd30: 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 76 69   the table or vi
dd40: 65 77 20 74 68 61 74 20 63 61 75 73 65 73 20 74  ew that causes t
dd50: 68 65 20 74 72 69 67 67 65 72 20 0a 74 6f 20 66  he trigger .to f
dd60: 69 72 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28 54  ire.</p>..<p>^(T
dd70: 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  he sqlite_master
dd80: 2e 72 6f 6f 74 70 61 67 65 20 63 6f 6c 75 6d 6e  .rootpage column
dd90: 20 73 74 6f 72 65 73 20 74 68 65 20 70 61 67 65   stores the page
dda0: 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 72   number of the r
ddb0: 6f 6f 74 0a 62 2d 74 72 65 65 20 70 61 67 65 20  oot.b-tree page 
ddc0: 66 6f 72 20 74 61 62 6c 65 73 20 61 6e 64 20 69  for tables and i
ddd0: 6e 64 65 78 65 73 2e 29 5e 20 20 5e 46 6f 72 20  ndexes.)^  ^For 
dde0: 72 6f 77 73 20 74 68 61 74 20 64 65 66 69 6e 65  rows that define
ddf0: 20 76 69 65 77 73 2c 20 74 72 69 67 67 65 72 73   views, triggers
de00: 2c 0a 61 6e 64 20 76 69 72 74 75 61 6c 20 74 61  ,.and virtual ta
de10: 62 6c 65 73 2c 20 74 68 65 20 72 6f 6f 74 70 61  bles, the rootpa
de20: 67 65 20 63 6f 6c 75 6d 6e 20 69 73 20 30 20 6f  ge column is 0 o
de30: 72 20 4e 55 4c 4c 2e 3c 2f 70 3e 0a 0a 3c 70 3e  r NULL.</p>..<p>
de40: 5e 28 54 68 65 20 73 71 6c 69 74 65 5f 6d 61 73  ^(The sqlite_mas
de50: 74 65 72 2e 73 71 6c 20 63 6f 6c 75 6d 6e 20 73  ter.sql column s
de60: 74 6f 72 65 73 20 53 51 4c 20 74 65 78 74 20 74  tores SQL text t
de70: 68 61 74 20 64 65 73 63 72 69 62 65 73 20 74 68  hat describes th
de80: 65 0a 6f 62 6a 65 63 74 2e 20 20 54 68 69 73 20  e.object.  This 
de90: 53 51 4c 20 74 65 78 74 20 69 73 20 61 20 5b 43  SQL text is a [C
dea0: 52 45 41 54 45 20 54 41 42 4c 45 5d 2c 20 5b 43  REATE TABLE], [C
deb0: 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41  REATE VIRTUAL TA
dec0: 42 4c 45 5d 2c 0a 5b 43 52 45 41 54 45 20 49 4e  BLE],.[CREATE IN
ded0: 44 45 58 5d 2c 0a 5b 43 52 45 41 54 45 20 56 49  DEX],.[CREATE VI
dee0: 45 57 5d 2c 20 6f 72 20 5b 43 52 45 41 54 45 20  EW], or [CREATE 
def0: 54 52 49 47 47 45 52 5d 20 73 74 61 74 65 6d 65  TRIGGER] stateme
df00: 6e 74 20 74 68 61 74 20 69 66 20 65 76 61 6c 75  nt that if evalu
df10: 61 74 65 64 20 61 67 61 69 6e 73 74 0a 74 68 65  ated against.the
df20: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 77   database file w
df30: 68 65 6e 20 69 74 20 69 73 20 74 68 65 20 6d 61  hen it is the ma
df40: 69 6e 20 64 61 74 61 62 61 73 65 20 6f 66 20 61  in database of a
df50: 20 5b 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65   [database conne
df60: 63 74 69 6f 6e 5d 0a 77 6f 75 6c 64 20 72 65 63  ction].would rec
df70: 72 65 61 74 65 20 74 68 65 20 6f 62 6a 65 63 74  reate the object
df80: 2e 29 5e 20 20 54 68 65 20 74 65 78 74 20 69 73  .)^  The text is
df90: 20 75 73 75 61 6c 6c 79 20 61 20 63 6f 70 79 20   usually a copy 
dfa0: 6f 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a  of the original.
dfb0: 73 74 61 74 65 6d 65 6e 74 20 75 73 65 64 20 74  statement used t
dfc0: 6f 20 63 72 65 61 74 65 20 74 68 65 20 6f 62 6a  o create the obj
dfd0: 65 63 74 20 62 75 74 20 77 69 74 68 20 6e 6f 72  ect but with nor
dfe0: 6d 61 6c 69 7a 61 74 69 6f 6e 73 20 61 70 70 6c  malizations appl
dff0: 69 65 64 20 73 6f 0a 74 68 61 74 20 74 68 65 20  ied so.that the 
e000: 74 65 78 74 20 63 6f 6e 66 6f 72 6d 73 20 74 6f  text conforms to
e010: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 72   the following r
e020: 75 6c 65 73 3a 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e  ules:..<ul>.<li>
e030: 5e 54 68 65 20 43 52 45 41 54 45 2c 20 54 41 42  ^The CREATE, TAB
e040: 4c 45 2c 20 56 49 45 57 2c 20 54 52 49 47 47 45  LE, VIEW, TRIGGE
e050: 52 2c 20 61 6e 64 20 49 4e 44 45 58 20 6b 65 79  R, and INDEX key
e060: 77 6f 72 64 73 20 61 74 20 74 68 65 20 62 65 67  words at the beg
e070: 69 6e 6e 69 6e 67 0a 6f 66 20 74 68 65 20 73 74  inning.of the st
e080: 61 74 65 6d 65 6e 74 20 61 72 65 20 63 6f 6e 76  atement are conv
e090: 65 72 74 65 64 20 74 6f 20 61 6c 6c 20 75 70 70  erted to all upp
e0a0: 65 72 20 63 61 73 65 20 6c 65 74 74 65 72 73 2e  er case letters.
e0b0: 0a 3c 6c 69 3e 5e 54 68 65 20 54 45 4d 50 20 6f  .<li>^The TEMP o
e0c0: 72 20 54 45 4d 50 4f 52 41 52 59 20 6b 65 79 77  r TEMPORARY keyw
e0d0: 6f 72 64 20 69 73 20 72 65 6d 6f 76 65 64 20 69  ord is removed i
e0e0: 66 20 69 74 20 6f 63 63 75 72 73 20 61 66 74 65  f it occurs afte
e0f0: 72 20 74 68 65 20 0a 69 6e 69 74 69 61 6c 20 43  r the .initial C
e100: 52 45 41 54 45 20 6b 65 79 77 6f 72 64 2e 0a 3c  REATE keyword..<
e110: 6c 69 3e 5e 41 6e 79 20 64 61 74 61 62 61 73 65  li>^Any database
e120: 20 6e 61 6d 65 20 71 75 61 6c 69 66 69 65 72 20   name qualifier 
e130: 74 68 61 74 20 6f 63 63 75 72 73 20 70 72 69 6f  that occurs prio
e140: 72 20 74 6f 20 74 68 65 20 6e 61 6d 65 20 6f 66  r to the name of
e150: 20 74 68 65 0a 6f 62 6a 65 63 74 20 62 65 69 6e   the.object bein
e160: 67 20 63 72 65 61 74 65 64 20 69 73 20 72 65 6d  g created is rem
e170: 6f 76 65 64 2e 0a 3c 6c 69 3e 5e 4c 65 61 64 69  oved..<li>^Leadi
e180: 6e 67 20 73 70 61 63 65 73 20 61 72 65 20 72 65  ng spaces are re
e190: 6d 6f 76 65 64 2e 0a 3c 6c 69 3e 5e 41 6c 6c 20  moved..<li>^All 
e1a0: 73 70 61 63 65 73 20 66 6f 6c 6c 6f 77 69 6e 67  spaces following
e1b0: 20 74 68 65 20 66 69 72 73 74 20 74 77 6f 20 6b   the first two k
e1c0: 65 79 77 6f 72 64 73 20 61 72 65 20 63 6f 6e 76  eywords are conv
e1d0: 65 72 74 65 64 20 69 6e 74 6f 20 61 20 73 69 6e  erted into a sin
e1e0: 67 6c 65 0a 73 70 61 63 65 2e 0a 3c 2f 75 6c 3e  gle.space..</ul>
e1f0: 0a 0a 3c 70 3e 5e 28 54 68 65 20 74 65 78 74 20  ..<p>^(The text 
e200: 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 6d 61  in the sqlite_ma
e210: 73 74 65 72 2e 73 71 6c 20 63 6f 6c 75 6d 6e 20  ster.sql column 
e220: 69 73 20 61 20 63 6f 70 79 20 6f 66 20 74 68 65  is a copy of the
e230: 20 6f 72 69 67 69 6e 61 6c 0a 43 52 45 41 54 45   original.CREATE
e240: 20 73 74 61 74 65 6d 65 6e 74 20 74 65 78 74 20   statement text 
e250: 74 68 61 74 20 63 72 65 61 74 65 64 20 74 68 65  that created the
e260: 20 6f 62 6a 65 63 74 2c 20 65 78 63 65 70 74 20   object, except 
e270: 6e 6f 72 6d 61 6c 69 7a 65 64 20 61 73 0a 64 65  normalized as.de
e280: 73 63 72 69 62 65 64 20 61 62 6f 76 65 20 61 6e  scribed above an
e290: 64 20 61 73 20 6d 6f 64 69 66 69 65 64 20 62 79  d as modified by
e2a0: 20 73 75 62 73 65 71 75 65 6e 74 20 5b 41 4c 54   subsequent [ALT
e2b0: 45 52 20 54 41 42 4c 45 5d 20 73 74 61 74 65 6d  ER TABLE] statem
e2c0: 65 6e 74 73 2e 29 5e 0a 5e 28 54 68 65 20 73 71  ents.)^.^(The sq
e2d0: 6c 69 74 65 5f 6d 61 73 74 65 72 2e 73 71 6c 20  lite_master.sql 
e2e0: 69 73 20 4e 55 4c 4c 20 66 6f 72 20 74 68 65 20  is NULL for the 
e2f0: 5b 69 6e 74 65 72 6e 61 6c 20 69 6e 64 65 78 65  [internal indexe
e300: 73 5d 20 74 68 61 74 20 61 72 65 0a 61 75 74 6f  s] that are.auto
e310: 6d 61 74 69 63 61 6c 6c 79 20 63 72 65 61 74 65  matically create
e320: 64 20 62 79 20 5b 55 4e 49 51 55 45 5d 20 6f 72  d by [UNIQUE] or
e330: 20 5b 50 52 49 4d 41 52 59 20 4b 45 59 5d 20 63   [PRIMARY KEY] c
e340: 6f 6e 73 74 72 61 69 6e 74 73 2e 29 5e 3c 2f 70  onstraints.)^</p
e350: 3e 0a 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  >...<tcl>hd_frag
e360: 6d 65 6e 74 20 69 6e 74 73 63 68 65 6d 61 20 7b  ment intschema {
e370: 69 6e 74 65 72 6e 61 6c 20 73 63 68 65 6d 61 20  internal schema 
e380: 6f 62 6a 65 63 74 73 7d 20 5c 0a 7b 69 6e 74 65  objects} \.{inte
e390: 72 6e 61 6c 20 73 63 68 65 6d 61 20 6f 62 6a 65  rnal schema obje
e3a0: 63 74 7d 20 7b 69 6e 74 65 72 6e 61 6c 20 69 6e  ct} {internal in
e3b0: 64 65 78 7d 20 7b 69 6e 74 65 72 6e 61 6c 20 69  dex} {internal i
e3c0: 6e 64 65 78 65 73 7d 20 5c 0a 7b 69 6e 74 65 72  ndexes} \.{inter
e3d0: 6e 61 6c 20 74 61 62 6c 65 7d 20 7b 69 6e 74 65  nal table} {inte
e3e0: 72 6e 61 6c 20 74 61 62 6c 65 73 7d 3c 2f 74 63  rnal tables}</tc
e3f0: 6c 3e 0a 3c 68 33 3e 49 6e 74 65 72 6e 61 6c 20  l>.<h3>Internal 
e400: 53 63 68 65 6d 61 20 4f 62 6a 65 63 74 73 3c 2f  Schema Objects</
e410: 68 33 3e 0a 0a 3c 70 3e 5e 49 6e 20 61 64 64 69  h3>..<p>^In addi
e420: 74 69 6f 6e 20 74 6f 20 74 68 65 20 74 61 62 6c  tion to the tabl
e430: 65 73 2c 20 69 6e 64 65 78 65 73 2c 20 76 69 65  es, indexes, vie
e440: 77 73 2c 20 61 6e 64 20 74 72 69 67 67 65 72 73  ws, and triggers
e450: 20 63 72 65 61 74 65 64 20 62 79 0a 74 68 65 20   created by.the 
e460: 61 70 70 6c 69 63 61 74 69 6f 6e 20 61 6e 64 2f  application and/
e470: 6f 72 20 74 68 65 20 64 65 76 65 6c 6f 70 65 72  or the developer
e480: 20 75 73 69 6e 67 20 43 52 45 41 54 45 20 73 74   using CREATE st
e490: 61 74 65 6d 65 6e 74 73 20 53 51 4c 2c 20 74 68  atements SQL, th
e4a0: 65 0a 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20  e.sqlite_master 
e4b0: 74 61 62 6c 65 20 6d 61 79 20 63 6f 6e 74 61 69  table may contai
e4c0: 6e 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 65  n zero or more e
e4d0: 6e 74 72 69 65 73 20 66 6f 72 20 0a 3c 69 3e 69  ntries for .<i>i
e4e0: 6e 74 65 72 6e 61 6c 20 73 63 68 65 6d 61 20 6f  nternal schema o
e4f0: 62 6a 65 63 74 73 3c 2f 69 3e 20 74 68 61 74 20  bjects</i> that 
e500: 61 72 65 20 63 72 65 61 74 65 64 20 62 79 20 53  are created by S
e510: 51 4c 69 74 65 20 66 6f 72 20 69 74 73 20 0a 6f  QLite for its .o
e520: 77 6e 20 69 6e 74 65 72 6e 61 6c 20 75 73 65 2e  wn internal use.
e530: 20 20 5e 54 68 65 20 6e 61 6d 65 73 20 6f 66 20    ^The names of 
e540: 69 6e 74 65 72 6e 61 6c 20 73 63 68 65 6d 61 20  internal schema 
e550: 6f 62 6a 65 63 74 73 0a 61 6c 77 61 79 73 20 62  objects.always b
e560: 65 67 69 6e 20 77 69 74 68 20 22 73 71 6c 69 74  egin with "sqlit
e570: 65 5f 22 20 61 6e 64 20 61 6e 79 20 74 61 62 6c  e_" and any tabl
e580: 65 2c 20 69 6e 64 65 78 2c 20 76 69 65 77 2c 20  e, index, view, 
e590: 6f 72 20 74 72 69 67 67 65 72 0a 77 68 6f 73 65  or trigger.whose
e5a0: 20 6e 61 6d 65 20 62 65 67 69 6e 73 20 77 69 74   name begins wit
e5b0: 68 20 22 73 71 6c 69 74 65 5f 22 20 69 73 20 61  h "sqlite_" is a
e5c0: 6e 20 69 6e 74 65 72 6e 61 6c 20 73 63 68 65 6d  n internal schem
e5d0: 61 20 6f 62 6a 65 63 74 2e 0a 5e 53 51 4c 69 74  a object..^SQLit
e5e0: 65 20 70 72 6f 68 69 62 69 74 73 20 61 70 70 6c  e prohibits appl
e5f0: 69 63 61 74 69 6f 6e 73 20 66 72 6f 6d 20 63 72  ications from cr
e600: 65 61 74 69 6e 67 20 6f 62 6a 65 63 74 73 20 77  eating objects w
e610: 68 6f 73 65 20 6e 61 6d 65 73 20 62 65 67 69 6e  hose names begin
e620: 0a 77 69 74 68 20 22 73 71 6c 69 74 65 5f 22 2e  .with "sqlite_".
e630: 20 20 0a 0a 3c 70 3e 49 6e 74 65 72 6e 61 6c 20    ..<p>Internal 
e640: 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 20 75  schema objects u
e650: 73 65 64 20 62 79 20 53 51 4c 69 74 65 20 6d 61  sed by SQLite ma
e660: 79 20 69 6e 63 6c 75 64 65 20 74 68 65 20 66 6f  y include the fo
e670: 6c 6c 6f 77 69 6e 67 3a 0a 0a 3c 75 6c 3e 0a 3c  llowing:..<ul>.<
e680: 6c 69 3e 3c 70 3e 49 6e 64 69 63 65 73 20 77 69  li><p>Indices wi
e690: 74 68 20 6e 61 6d 65 73 20 6f 66 20 74 68 65 20  th names of the 
e6a0: 66 6f 72 6d 20 22 73 71 6c 69 74 65 5f 61 75 74  form "sqlite_aut
e6b0: 6f 69 6e 64 65 78 5f 54 41 42 4c 45 5f 4e 22 20  oindex_TABLE_N" 
e6c0: 74 68 61 74 0a 20 20 20 20 20 20 20 61 72 65 20  that.       are 
e6d0: 75 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e  used to implemen
e6e0: 74 20 5b 55 4e 49 51 55 45 5d 20 61 6e 64 20 5b  t [UNIQUE] and [
e6f0: 50 52 49 4d 41 52 59 20 4b 45 59 5d 20 63 6f 6e  PRIMARY KEY] con
e700: 73 74 72 61 69 6e 74 73 20 6f 6e 0a 20 20 20 20  straints on.    
e710: 20 20 20 6f 72 64 69 6e 61 72 79 20 74 61 62 6c     ordinary tabl
e720: 65 73 2e 0a 0a 3c 6c 69 3e 3c 70 3e 41 20 74 61  es...<li><p>A ta
e730: 62 6c 65 20 77 69 74 68 20 74 68 65 20 6e 61 6d  ble with the nam
e740: 65 20 22 73 71 6c 69 74 65 5f 73 65 71 75 65 6e  e "sqlite_sequen
e750: 63 65 22 20 74 68 61 74 20 69 73 20 75 73 65 64  ce" that is used
e760: 20 74 6f 20 6b 65 65 70 20 74 72 61 63 6b 0a 20   to keep track. 
e770: 20 20 20 20 20 20 6f 66 20 74 68 65 20 6d 61 78        of the max
e780: 69 6d 75 6d 20 68 69 73 74 6f 72 69 63 61 6c 20  imum historical 
e790: 5b 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59  [INTEGER PRIMARY
e7a0: 20 4b 45 59 5d 20 66 6f 72 20 61 20 74 61 62 6c   KEY] for a tabl
e7b0: 65 0a 20 20 20 20 20 20 20 75 73 69 6e 67 20 5b  e.       using [
e7c0: 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 5d 2e 0a  AUTOINCREMENT]..
e7d0: 0a 3c 6c 69 3e 3c 70 3e 54 61 62 6c 65 73 20 77  .<li><p>Tables w
e7e0: 69 74 68 20 6e 61 6d 65 73 20 6f 66 20 74 68 65  ith names of the
e7f0: 20 66 6f 72 6d 20 22 73 71 6c 69 74 65 5f 73 74   form "sqlite_st
e800: 61 74 4e 22 20 77 68 65 72 65 20 4e 20 69 73 20  atN" where N is 
e810: 61 6e 20 69 6e 74 65 67 65 72 2e 0a 20 20 20 20  an integer..    
e820: 20 20 20 53 75 63 68 20 74 61 62 6c 65 73 20 73     Such tables s
e830: 74 6f 72 65 20 64 61 74 61 62 61 73 65 20 73 74  tore database st
e840: 61 74 69 73 74 69 63 73 20 67 61 74 68 65 72 65  atistics gathere
e850: 64 20 62 79 20 74 68 65 20 5b 41 4e 41 4c 59 5a  d by the [ANALYZ
e860: 45 5d 0a 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e  E].       comman
e870: 64 20 61 6e 64 20 75 73 65 64 20 62 79 20 74 68  d and used by th
e880: 65 20 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 20  e query planner 
e890: 74 6f 20 68 65 6c 70 20 64 65 74 65 72 6d 69 6e  to help determin
e8a0: 65 20 74 68 65 20 62 65 73 74 0a 20 20 20 20 20  e the best.     
e8b0: 20 20 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20 75    algorithm to u
e8c0: 73 65 20 66 6f 72 20 65 61 63 68 20 71 75 65 72  se for each quer
e8d0: 79 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 4e 65 77  y..</ul>..<p>New
e8e0: 20 69 6e 74 65 72 6e 61 6c 20 73 63 68 65 6d 61   internal schema
e8f0: 20 6f 62 6a 65 63 74 73 20 6e 61 6d 65 73 2c 20   objects names, 
e900: 61 6c 77 61 79 73 20 62 65 67 69 6e 6e 69 6e 67  always beginning
e910: 20 77 69 74 68 20 22 73 71 6c 69 74 65 5f 22 2c   with "sqlite_",
e920: 0a 6d 61 79 20 62 65 20 61 64 64 65 64 20 74 6f  .may be added to
e930: 20 74 68 65 20 53 51 4c 69 74 65 20 66 69 6c 65   the SQLite file
e940: 20 66 6f 72 6d 61 74 20 69 6e 20 66 75 74 75 72   format in futur
e950: 65 20 72 65 6c 65 61 73 65 73 2e 0a 0a 3c 74 63  e releases...<tc
e960: 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 73 65  l>hd_fragment se
e970: 71 74 61 62 20 7b 73 71 6c 69 74 65 5f 73 65 71  qtab {sqlite_seq
e980: 75 65 6e 63 65 7d 3c 2f 74 63 6c 3e 0a 3c 68 33  uence}</tcl>.<h3
e990: 3e 54 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75  >The sqlite_sequ
e9a0: 65 6e 63 65 20 74 61 62 6c 65 3c 2f 68 33 3e 0a  ence table</h3>.
e9b0: 0a 3c 70 3e 5e 54 68 65 20 73 71 6c 69 74 65 5f  .<p>^The sqlite_
e9c0: 73 65 71 75 65 6e 63 65 20 74 61 62 6c 65 20 69  sequence table i
e9d0: 73 20 61 6e 20 69 6e 74 65 72 6e 61 6c 20 74 61  s an internal ta
e9e0: 62 6c 65 20 75 73 65 64 20 74 6f 20 68 65 6c 70  ble used to help
e9f0: 20 69 6d 70 6c 65 6d 65 6e 74 0a 5b 41 55 54 4f   implement.[AUTO
ea00: 49 4e 43 52 45 4d 45 4e 54 5d 2e 20 20 5e 54 68  INCREMENT].  ^Th
ea10: 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63  e sqlite_sequenc
ea20: 65 20 74 61 62 6c 65 20 69 73 20 63 72 65 61 74  e table is creat
ea30: 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  ed automatically
ea40: 0a 77 68 65 6e 65 76 65 72 20 61 6e 79 20 6f 72  .whenever any or
ea50: 64 69 6e 61 72 79 20 74 61 62 6c 65 20 77 69 74  dinary table wit
ea60: 68 20 61 6e 20 41 55 54 4f 49 4e 43 52 45 4d 45  h an AUTOINCREME
ea70: 4e 54 20 69 6e 74 65 67 65 72 20 70 72 69 6d 61  NT integer prima
ea80: 72 79 0a 6b 65 79 20 69 73 20 63 72 65 61 74 65  ry.key is create
ea90: 64 2e 20 20 5e 4f 6e 63 65 20 63 72 65 61 74 65  d.  ^Once create
eaa0: 64 2c 20 74 68 65 20 73 71 6c 69 74 65 5f 73 65  d, the sqlite_se
eab0: 71 75 65 6e 63 65 20 74 61 62 6c 65 20 65 78 69  quence table exi
eac0: 73 74 73 20 69 6e 20 74 68 65 0a 73 71 6c 69 74  sts in the.sqlit
ead0: 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 20 66  e_master table f
eae0: 6f 72 65 76 65 72 3b 20 69 74 20 63 61 6e 6e 6f  orever; it canno
eaf0: 74 20 62 65 20 64 72 6f 70 70 65 64 2e 0a 5e 28  t be dropped..^(
eb00: 54 68 65 20 73 63 68 65 6d 61 20 66 6f 72 20 74  The schema for t
eb10: 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e  he sqlite_sequen
eb20: 63 65 20 74 61 62 6c 65 20 69 73 3a 0a 0a 3c 62  ce table is:..<b
eb30: 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a  lockquote><pre>.
eb40: 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 71 6c  CREATE TABLE sql
eb50: 69 74 65 5f 73 65 71 75 65 6e 63 65 28 6e 61 6d  ite_sequence(nam
eb60: 65 2c 73 65 71 29 3b 0a 3c 2f 70 72 65 3e 3c 2f  e,seq);.</pre></
eb70: 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c  blockquote>)^..<
eb80: 70 3e 5e 54 68 65 72 65 20 69 73 20 61 20 73 69  p>^There is a si
eb90: 6e 67 6c 65 20 72 6f 77 20 69 6e 20 74 68 65 20  ngle row in the 
eba0: 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 20  sqlite_sequence 
ebb0: 74 61 62 6c 65 20 66 6f 72 20 65 61 63 68 20 6f  table for each o
ebc0: 72 64 69 6e 61 72 79 0a 74 61 62 6c 65 20 74 68  rdinary.table th
ebd0: 61 74 20 75 73 65 73 20 41 55 54 4f 49 4e 43 52  at uses AUTOINCR
ebe0: 45 4d 45 4e 54 2e 20 20 5e 28 54 68 65 20 6e 61  EMENT.  ^(The na
ebf0: 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
ec00: 28 61 73 20 69 74 20 61 70 70 65 61 72 73 20 69  (as it appears i
ec10: 6e 0a 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 2e  n.sqlite_master.
ec20: 6e 61 6d 65 29 20 69 73 20 69 6e 20 74 68 65 20  name) is in the 
ec30: 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 2e  sqlite_sequence.
ec40: 6d 61 69 6e 20 66 69 65 6c 64 20 61 6e 64 20 74  main field and t
ec50: 68 65 20 6c 61 72 67 65 73 74 0a 5b 49 4e 54 45  he largest.[INTE
ec60: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 5d  GER PRIMARY KEY]
ec70: 20 65 76 65 72 20 75 73 65 64 20 62 79 20 74 68   ever used by th
ec80: 61 74 20 74 61 62 6c 65 20 69 73 20 69 6e 20 74  at table is in t
ec90: 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e  he sqlite_sequen
eca0: 63 65 2e 73 65 71 0a 66 69 65 6c 64 2e 29 5e 20  ce.seq.field.)^ 
ecb0: 20 5e 4e 65 77 20 61 75 74 6f 6d 61 74 69 63 61   ^New automatica
ecc0: 6c 6c 79 20 67 65 6e 65 72 61 74 65 64 20 69 6e  lly generated in
ecd0: 74 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65  teger primary ke
ece0: 79 73 20 66 6f 72 20 41 55 54 4f 49 4e 43 52 45  ys for AUTOINCRE
ecf0: 4d 45 4e 54 0a 74 61 62 6c 65 73 20 61 72 65 20  MENT.tables are 
ed00: 67 75 61 72 61 6e 74 65 65 64 20 74 6f 20 62 65  guaranteed to be
ed10: 20 6c 61 72 67 65 72 20 74 68 61 6e 20 74 68 65   larger than the
ed20: 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65   sqlite_sequence
ed30: 2e 73 65 71 20 66 69 65 6c 64 20 66 6f 72 0a 74  .seq field for.t
ed40: 68 61 74 20 74 61 62 6c 65 2e 0a 5e 28 49 66 20  hat table..^(If 
ed50: 74 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65  the sqlite_seque
ed60: 6e 63 65 2e 73 65 71 20 66 69 65 6c 64 20 6f 66  nce.seq field of
ed70: 20 61 6e 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e   an AUTOINCREMEN
ed80: 54 20 74 61 62 6c 65 20 69 73 20 61 6c 72 65 61  T table is alrea
ed90: 64 79 20 61 74 0a 74 68 65 20 6c 61 72 67 65 73  dy at.the larges
eda0: 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20  t integer value 
edb0: 28 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37  (922337203685477
edc0: 35 38 30 37 29 20 74 68 65 6e 20 61 74 74 65 6d  5807) then attem
edd0: 70 74 73 20 74 6f 20 61 64 64 20 6e 65 77 0a 72  pts to add new.r
ede0: 6f 77 73 20 74 6f 20 74 68 61 74 20 74 61 62 6c  ows to that tabl
edf0: 65 20 77 69 74 68 20 61 6e 20 61 75 74 6f 6d 61  e with an automa
ee00: 74 69 63 61 6c 6c 79 20 67 65 6e 65 72 61 74 65  tically generate
ee10: 64 20 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72  d integer primar
ee20: 79 20 77 69 6c 6c 20 66 61 69 6c 0a 77 69 74 68  y will fail.with
ee30: 20 61 6e 20 5b 53 51 4c 49 54 45 5f 46 55 4c 4c   an [SQLITE_FULL
ee40: 5d 20 65 72 72 6f 72 2e 29 5e 0a 5e 54 68 65 20  ] error.)^.^The 
ee50: 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 2e  sqlite_sequence.
ee60: 73 65 71 20 66 69 65 6c 64 20 69 73 20 61 75 74  seq field is aut
ee70: 6f 6d 61 74 69 63 61 6c 6c 79 20 75 70 64 61 74  omatically updat
ee80: 65 64 20 69 66 20 72 65 71 75 69 72 65 64 20 77  ed if required w
ee90: 68 65 6e 0a 6e 65 77 20 65 6e 74 72 69 65 73 20  hen.new entries 
eea0: 61 72 65 20 61 64 64 65 64 20 74 6f 20 61 6e 20  are added to an 
eeb0: 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 74 61  AUTOINCREMENT ta
eec0: 62 6c 65 2e 20 20 0a 5e 54 68 65 20 73 71 6c 69  ble.  .^The sqli
eed0: 74 65 5f 73 65 71 75 65 6e 63 65 20 72 6f 77 20  te_sequence row 
eee0: 66 6f 72 20 61 6e 20 41 55 54 4f 49 4e 43 52 45  for an AUTOINCRE
eef0: 4d 45 4e 54 20 74 61 62 6c 65 20 69 73 20 61 75  MENT table is au
ef00: 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65 6c 65  tomatically dele
ef10: 74 65 64 0a 77 68 65 6e 20 74 68 65 20 74 61 62  ted.when the tab
ef20: 6c 65 20 69 73 20 64 72 6f 70 70 65 64 2e 0a 5e  le is dropped..^
ef30: 49 66 20 74 68 65 20 73 71 6c 69 74 65 5f 73 65  If the sqlite_se
ef40: 71 75 65 6e 63 65 20 72 6f 77 20 66 6f 72 20 61  quence row for a
ef50: 6e 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20  n AUTOINCREMENT 
ef60: 74 61 62 6c 65 20 64 6f 65 73 20 6e 6f 74 20 65  table does not e
ef70: 78 69 73 74 20 77 68 65 6e 0a 74 68 65 20 41 55  xist when.the AU
ef80: 54 4f 49 4e 43 52 45 4d 45 4e 54 20 74 61 62 6c  TOINCREMENT tabl
ef90: 65 20 69 73 20 75 70 64 61 74 65 64 2c 20 74 68  e is updated, th
efa0: 65 6e 20 61 20 6e 65 77 20 73 71 6c 69 74 65 5f  en a new sqlite_
efb0: 73 65 71 75 65 6e 63 65 20 72 6f 77 20 69 73 20  sequence row is 
efc0: 63 72 65 61 74 65 64 2e 0a 5e 28 49 66 20 74 68  created..^(If th
efd0: 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63  e sqlite_sequenc
efe0: 65 2e 73 65 71 20 76 61 6c 75 65 20 66 6f 72 20  e.seq value for 
eff0: 61 6e 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  an AUTOINCREMENT
f000: 20 74 61 62 6c 65 20 69 73 20 6d 61 6e 75 61 6c   table is manual
f010: 6c 79 20 0a 73 65 74 20 74 6f 20 73 6f 6d 65 74  ly .set to somet
f020: 68 69 6e 67 20 6f 74 68 65 72 20 74 68 61 6e 20  hing other than 
f030: 61 6e 20 69 6e 74 65 67 65 72 20 61 6e 64 20 74  an integer and t
f040: 68 65 72 65 20 69 73 20 61 20 73 75 62 73 65 71  here is a subseq
f050: 75 65 6e 74 20 61 74 74 65 6d 70 74 20 74 6f 0a  uent attempt to.
f060: 69 6e 73 65 72 74 20 74 68 65 20 6f 72 20 75 70  insert the or up
f070: 64 61 74 65 20 74 68 65 20 41 55 54 4f 49 4e 43  date the AUTOINC
f080: 52 45 4d 45 4e 54 20 74 61 62 6c 65 2c 20 74 68  REMENT table, th
f090: 65 6e 20 74 68 65 20 62 65 68 61 76 69 6f 72 20  en the behavior 
f0a0: 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 29 5e 0a  is undefined.)^.
f0b0: 0a 3c 70 3e 5e 41 70 70 6c 69 63 61 74 69 6f 6e  .<p>^Application
f0c0: 20 63 6f 64 65 20 69 73 20 61 6c 6c 6f 77 65 64   code is allowed
f0d0: 20 74 6f 20 6d 6f 64 69 66 79 20 74 68 65 20 73   to modify the s
f0e0: 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 20 74  qlite_sequence t
f0f0: 61 62 6c 65 2c 20 74 6f 20 61 64 64 0a 6e 65 77  able, to add.new
f100: 20 72 6f 77 73 2c 20 74 6f 20 64 65 6c 65 74 65   rows, to delete
f110: 20 72 6f 77 73 2c 20 6f 72 20 74 6f 20 6d 6f 64   rows, or to mod
f120: 69 66 79 20 65 78 69 73 74 69 6e 67 20 72 6f 77  ify existing row
f130: 73 2e 20 20 5e 48 6f 77 65 76 65 72 2c 20 61 70  s.  ^However, ap
f140: 70 6c 69 63 61 74 69 6f 6e 0a 63 6f 64 65 20 63  plication.code c
f150: 61 6e 6e 6f 74 20 63 72 65 61 74 65 20 74 68 65  annot create the
f160: 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65   sqlite_sequence
f170: 20 74 61 62 6c 65 20 69 66 20 69 74 20 64 6f 65   table if it doe
f180: 73 20 6e 6f 74 20 61 6c 72 65 61 64 79 20 65 78  s not already ex
f190: 69 73 74 2e 0a 5e 41 70 70 6c 69 63 61 74 69 6f  ist..^Applicatio
f1a0: 6e 20 63 6f 64 65 20 63 61 6e 20 64 65 6c 65 74  n code can delet
f1b0: 65 20 61 6c 6c 20 65 6e 74 72 69 65 73 20 66 72  e all entries fr
f1c0: 6f 6d 20 74 68 65 20 73 71 6c 69 74 65 5f 73 65  om the sqlite_se
f1d0: 71 75 65 6e 63 65 20 74 61 62 6c 65 2c 0a 62 75  quence table,.bu
f1e0: 74 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 63 6f  t application co
f1f0: 64 65 20 63 61 6e 6e 6f 74 20 64 72 6f 70 20 74  de cannot drop t
f200: 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e  he sqlite_sequen
f210: 63 65 20 74 61 62 6c 65 2e 0a 0a 3c 74 63 6c 3e  ce table...<tcl>
f220: 68 64 5f 66 72 61 67 6d 65 6e 74 20 73 74 61 74  hd_fragment stat
f230: 31 74 61 62 20 7b 73 71 6c 69 74 65 5f 73 74 61  1tab {sqlite_sta
f240: 74 31 7d 20 53 51 4c 49 54 45 5f 53 54 41 54 31  t1} SQLITE_STAT1
f250: 20 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20   </tcl>.<h3>The 
f260: 73 71 6c 69 74 65 5f 73 74 61 74 31 20 74 61 62  sqlite_stat1 tab
f270: 6c 65 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68 65  le</h3>..<p>^The
f280: 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20 69 73   sqlite_stat1 is
f290: 20 61 6e 20 69 6e 74 65 72 6e 61 6c 20 74 61 62   an internal tab
f2a0: 6c 65 20 63 72 65 61 74 65 64 20 62 79 20 74 68  le created by th
f2b0: 65 20 5b 41 4e 41 4c 59 5a 45 5d 20 63 6f 6d 6d  e [ANALYZE] comm
f2c0: 61 6e 64 0a 61 6e 64 20 75 73 65 64 20 74 6f 20  and.and used to 
f2d0: 68 6f 6c 64 20 73 75 70 70 6c 65 6d 65 6e 74 61  hold supplementa
f2e0: 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  l information ab
f2f0: 6f 75 74 20 74 61 62 6c 65 73 20 61 6e 64 20 69  out tables and i
f300: 6e 64 65 78 65 73 20 74 68 61 74 20 74 68 65 0a  ndexes that the.
f310: 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 63 61  query planner ca
f320: 6e 20 75 73 65 20 74 6f 20 68 65 6c 70 20 69 74  n use to help it
f330: 20 66 69 6e 64 20 62 65 74 74 65 72 20 77 61 79   find better way
f340: 73 20 6f 66 20 70 65 72 66 6f 72 6d 69 6e 67 20  s of performing 
f350: 71 75 65 72 69 65 73 2e 0a 5e 41 70 70 6c 69 63  queries..^Applic
f360: 61 74 69 6f 6e 73 20 63 61 6e 20 75 70 64 61 74  ations can updat
f370: 65 2c 20 64 65 6c 65 74 65 20 66 72 6f 6d 2c 20  e, delete from, 
f380: 69 6e 73 65 72 74 20 69 6e 74 6f 20 6f 72 20 64  insert into or d
f390: 72 6f 70 20 74 68 65 20 73 71 6c 69 74 65 5f 73  rop the sqlite_s
f3a0: 74 61 74 31 0a 74 61 62 6c 65 2c 20 62 75 74 20  tat1.table, but 
f3b0: 6d 61 79 20 6e 6f 74 20 63 72 65 61 74 65 20 6f  may not create o
f3c0: 72 20 61 6c 74 65 72 20 74 68 65 20 73 71 6c 69  r alter the sqli
f3d0: 74 65 5f 73 74 61 74 31 20 74 61 62 6c 65 2e 0a  te_stat1 table..
f3e0: 5e 28 54 68 65 20 73 63 68 65 6d 61 20 6f 66 20  ^(The schema of 
f3f0: 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 31  the sqlite_stat1
f400: 20 74 61 62 6c 65 20 69 73 20 61 73 20 66 6f 6c   table is as fol
f410: 6c 6f 77 73 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  lows:..<blockquo
f420: 74 65 3e 3c 70 72 65 3e 0a 43 52 45 41 54 45 20  te><pre>.CREATE 
f430: 54 41 42 4c 45 20 73 71 6c 69 74 65 5f 73 74 61  TABLE sqlite_sta
f440: 74 31 28 74 62 6c 2c 69 64 78 2c 73 74 61 74 29  t1(tbl,idx,stat)
f450: 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71  ;.</pre></blockq
f460: 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 20 5e 28 54  uote>)^..<p> ^(T
f470: 68 65 72 65 20 69 73 20 6e 6f 72 6d 61 6c 6c 79  here is normally
f480: 20 6f 6e 65 20 72 6f 77 20 70 65 72 20 69 6e 64   one row per ind
f490: 65 78 2c 20 77 69 74 68 20 74 68 65 20 69 6e 64  ex, with the ind
f4a0: 65 78 20 69 64 65 6e 74 69 66 69 65 64 20 62 79  ex identified by
f4b0: 20 74 68 65 0a 6e 61 6d 65 20 69 6e 20 74 68 65   the.name in the
f4c0: 20 73 71 6c 69 74 65 5f 73 74 61 74 31 2e 69 64   sqlite_stat1.id
f4d0: 78 20 63 6f 6c 75 6d 6e 2e 29 5e 20 20 5e 28 54  x column.)^  ^(T
f4e0: 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 31 2e  he sqlite_stat1.
f4f0: 74 62 6c 20 63 6f 6c 75 6d 6e 20 69 73 0a 74 68  tbl column is.th
f500: 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  e name of the ta
f510: 62 6c 65 20 74 6f 20 77 68 69 63 68 20 74 68 65  ble to which the
f520: 20 69 6e 64 65 78 20 62 65 6c 6f 6e 67 73 2e 29   index belongs.)
f530: 5e 20 20 5e 28 49 6e 20 65 61 63 68 20 73 75 63  ^  ^(In each suc
f540: 68 20 72 6f 77 2c 20 0a 74 68 65 20 73 71 6c 69  h row, .the sqli
f550: 74 65 5f 73 74 61 74 2e 73 74 61 74 20 63 6f 6c  te_stat.stat col
f560: 75 6d 6e 20 77 69 6c 6c 20 62 65 0a 61 20 73 74  umn will be.a st
f570: 72 69 6e 67 20 63 6f 6e 73 69 73 74 69 6e 67 20  ring consisting 
f580: 6f 66 20 61 20 6c 69 73 74 20 6f 66 20 69 6e 74  of a list of int
f590: 65 67 65 72 73 20 66 6f 6c 6c 6f 77 65 64 20 62  egers followed b
f5a0: 79 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 0a  y zero or more .
f5b0: 61 72 67 75 6d 65 6e 74 73 2e 29 5e 20 20 5e 54  arguments.)^  ^T
f5c0: 68 65 20 66 69 72 73 74 20 69 6e 74 65 67 65 72  he first integer
f5d0: 20 69 6e 20 74 68 69 73 0a 6c 69 73 74 20 69 73   in this.list is
f5e0: 20 74 68 65 20 61 70 70 72 6f 78 69 6d 61 74 65   the approximate
f5f0: 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
f600: 69 6e 20 74 68 65 20 69 6e 64 65 78 2e 20 20 28  in the index.  (
f610: 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 0a 72 6f  The number of.ro
f620: 77 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20  ws in the index 
f630: 69 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 74  is the same as t
f640: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  he number of row
f650: 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2c 0a  s in the table,.
f660: 65 78 63 65 70 74 20 66 6f 72 20 5b 70 61 72 74  except for [part
f670: 69 61 6c 20 69 6e 64 65 78 65 73 5d 2e 29 0a 5e  ial indexes].).^
f680: 54 68 65 20 73 65 63 6f 6e 64 20 69 6e 74 65 67  The second integ
f690: 65 72 20 69 73 20 74 68 65 20 61 70 70 72 6f 78  er is the approx
f6a0: 69 6d 61 74 65 20 6e 75 6d 62 65 72 20 6f 66 20  imate number of 
f6b0: 72 6f 77 73 20 69 6e 20 74 68 65 20 69 6e 64 65  rows in the inde
f6c0: 78 0a 74 68 61 74 20 68 61 76 65 20 74 68 65 20  x.that have the 
f6d0: 73 61 6d 65 20 76 61 6c 75 65 20 69 6e 20 74 68  same value in th
f6e0: 65 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20 6f  e first column o
f6f0: 66 20 74 68 65 20 69 6e 64 65 78 2e 20 20 5e 54  f the index.  ^T
f700: 68 65 20 74 68 69 72 64 20 0a 69 6e 74 65 67 65  he third .intege
f710: 72 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20  r is the number 
f720: 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69  number of rows i
f730: 6e 20 74 68 65 20 69 6e 64 65 78 20 74 68 61 74  n the index that
f740: 20 68 61 76 65 20 0a 74 68 65 20 73 61 6d 65 20   have .the same 
f750: 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20 66 69  value for the fi
f760: 72 73 74 20 74 77 6f 20 63 6f 6c 75 6d 6e 73 2e  rst two columns.
f770: 20 20 5e 54 68 65 20 4e 2d 74 68 20 69 6e 74 65    ^The N-th inte
f780: 67 65 72 20 28 66 6f 72 20 4e 3e 31 29 20 0a 69  ger (for N>1) .i
f790: 73 20 74 68 65 20 65 73 74 69 6d 61 74 65 64 20  s the estimated 
f7a0: 61 76 65 72 61 67 65 20 6e 75 6d 62 65 72 20 6f  average number o
f7b0: 66 20 72 6f 77 73 20 69 6e 20 0a 74 68 65 20 69  f rows in .the i
f7c0: 6e 64 65 78 20 77 68 69 63 68 20 68 61 76 65 20  ndex which have 
f7d0: 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20 66  the same value f
f7e0: 6f 72 20 74 68 65 20 66 69 72 73 74 20 4e 2d 31  or the first N-1
f7f0: 20 63 6f 6c 75 6d 6e 73 2e 20 20 5e 46 6f 72 0a   columns.  ^For.
f800: 61 20 4b 2d 63 6f 6c 75 6d 6e 20 69 6e 64 65 78  a K-column index
f810: 2c 20 74 68 65 72 65 20 77 69 6c 6c 20 62 65 20  , there will be 
f820: 4b 2b 31 20 69 6e 74 65 67 65 72 73 20 69 6e 20  K+1 integers in 
f830: 74 68 65 20 73 74 61 74 20 63 6f 6c 75 6d 6e 2e  the stat column.
f840: 20 20 5e 49 66 0a 74 68 65 20 69 6e 64 65 78 20    ^If.the index 
f850: 69 73 20 75 6e 69 71 75 65 2c 20 74 68 65 6e 20  is unique, then 
f860: 74 68 65 20 6c 61 73 74 20 69 6e 74 65 67 65 72  the last integer
f870: 20 77 69 6c 6c 20 62 65 20 31 2e 0a 0a 3c 70 3e   will be 1...<p>
f880: 5e 54 68 65 20 6c 69 73 74 20 6f 66 20 69 6e 74  ^The list of int
f890: 65 67 65 72 73 20 69 6e 20 74 68 65 20 73 74 61  egers in the sta
f8a0: 74 20 63 6f 6c 75 6d 6e 20 63 61 6e 20 6f 70 74  t column can opt
f8b0: 69 6f 6e 61 6c 6c 79 20 62 65 20 66 6f 6c 6c 6f  ionally be follo
f8c0: 77 65 64 0a 62 79 20 61 72 67 75 6d 65 6e 74 73  wed.by arguments
f8d0: 2c 20 65 61 63 68 20 6f 66 20 77 68 69 63 68 20  , each of which 
f8e0: 69 73 20 61 20 73 65 71 75 65 6e 63 65 20 6f 66  is a sequence of
f8f0: 20 6e 6f 6e 2d 73 70 61 63 65 20 63 68 61 72 61   non-space chara
f900: 63 74 65 72 73 2e 0a 5e 41 6c 6c 20 61 72 67 75  cters..^All argu
f910: 6d 65 6e 74 73 20 61 72 65 20 70 72 65 63 65 64  ments are preced
f920: 65 64 20 62 79 20 61 20 73 69 6e 67 6c 65 20 73  ed by a single s
f930: 70 61 63 65 2e 0a 5e 55 6e 72 65 63 6f 67 6e 69  pace..^Unrecogni
f940: 7a 65 64 20 61 72 67 75 6d 65 6e 74 73 20 61 72  zed arguments ar
f950: 65 20 73 69 6c 65 6e 74 6c 79 20 69 67 6e 6f 72  e silently ignor
f960: 65 64 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20  ed...<p>^If the 
f970: 22 75 6e 6f 72 64 65 72 65 64 22 20 61 72 67 75  "unordered" argu
f980: 6d 65 6e 74 20 69 73 20 70 72 65 73 65 6e 74 2c  ment is present,
f990: 20 74 68 65 6e 20 74 68 65 20 71 75 65 72 79 20   then the query 
f9a0: 70 6c 61 6e 6e 65 72 20 61 73 73 75 6d 65 73 0a  planner assumes.
f9b0: 74 68 61 74 20 74 68 65 20 69 6e 64 65 78 20 69  that the index i
f9c0: 73 20 75 6e 6f 72 64 65 72 65 64 20 61 6e 64 20  s unordered and 
f9d0: 77 69 6c 6c 20 6e 6f 74 20 75 73 65 20 74 68 65  will not use the
f9e0: 20 69 6e 64 65 78 20 66 6f 72 20 61 20 72 61 6e   index for a ran
f9f0: 67 65 20 71 75 65 72 79 0a 6f 72 20 66 6f 72 20  ge query.or for 
fa00: 73 6f 72 74 69 6e 67 2e 0a 0a 3c 70 3e 5e 54 68  sorting...<p>^Th
fa10: 65 20 22 73 7a 3d 4e 4e 4e 22 20 61 72 67 75 6d  e "sz=NNN" argum
fa20: 65 6e 74 20 28 77 68 65 72 65 20 4e 4e 4e 20 72  ent (where NNN r
fa30: 65 70 72 65 73 65 6e 74 73 20 61 20 73 65 71 75  epresents a sequ
fa40: 65 6e 63 65 20 6f 66 20 31 20 6f 72 20 6d 6f 72  ence of 1 or mor
fa50: 65 20 64 69 67 69 74 73 29 0a 6d 65 61 6e 73 20  e digits).means 
fa60: 74 68 61 74 20 74 68 65 20 61 76 65 72 61 67 65  that the average
fa70: 20 72 6f 77 20 73 69 7a 65 20 6f 76 65 72 20 61   row size over a
fa80: 6c 6c 20 72 65 63 6f 72 64 73 20 6f 66 20 74 68  ll records of th
fa90: 65 20 74 61 62 6c 65 20 6f 72 0a 69 6e 64 65 78  e table or.index
faa0: 20 69 73 20 4e 4e 4e 20 62 79 74 65 73 20 70 65   is NNN bytes pe
fab0: 72 20 72 6f 77 2e 20 20 5e 54 68 65 20 53 51 4c  r row.  ^The SQL
fac0: 69 74 65 20 71 75 65 72 79 20 70 6c 61 6e 6e 65  ite query planne
fad0: 72 20 6d 69 67 68 74 20 75 73 65 20 74 68 65 0a  r might use the.
fae0: 65 73 74 69 6d 61 74 65 64 20 72 6f 77 20 73 69  estimated row si
faf0: 7a 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 70  ze information p
fb00: 72 6f 76 69 64 65 64 20 62 79 20 74 68 65 20 22  rovided by the "
fb10: 73 7a 3d 4e 4e 4e 22 20 74 6f 6b 65 6e 0a 74 6f  sz=NNN" token.to
fb20: 20 68 65 6c 70 20 69 74 20 63 68 6f 6f 73 65 20   help it choose 
fb30: 73 6d 61 6c 6c 65 72 20 74 61 62 6c 65 73 20 61  smaller tables a
fb40: 6e 64 20 69 6e 64 65 78 65 73 20 74 68 61 74 20  nd indexes that 
fb50: 72 65 71 75 69 72 65 20 6c 65 73 73 20 64 69 73  require less dis
fb60: 6b 20 49 2f 4f 2e 0a 0a 3c 70 3e 5e 28 54 68 65  k I/O...<p>^(The
fb70: 20 70 72 65 73 65 6e 63 65 20 6f 66 20 74 68 65   presence of the
fb80: 20 22 6e 6f 73 6b 69 70 73 63 61 6e 22 20 74 6f   "noskipscan" to
fb90: 6b 65 6e 20 6f 6e 20 74 68 65 20 73 71 6c 69 74  ken on the sqlit
fba0: 65 5f 73 74 61 74 31 2e 73 74 61 74 20 66 69 65  e_stat1.stat fie
fbb0: 6c 64 0a 6f 66 20 61 6e 20 69 6e 64 65 78 20 70  ld.of an index p
fbc0: 72 65 76 65 6e 74 73 20 74 68 61 74 20 69 6e 64  revents that ind
fbd0: 65 78 20 66 72 6f 6d 20 62 65 69 6e 67 20 75 73  ex from being us
fbe0: 65 64 20 77 69 74 68 20 74 68 65 0a 5b 73 6b 69  ed with the.[ski
fbf0: 70 2d 73 63 61 6e 20 6f 70 74 69 6d 69 7a 61 74  p-scan optimizat
fc00: 69 6f 6e 5d 2e 29 5e 0a 0a 3c 70 3e 4e 65 77 20  ion].)^..<p>New 
fc10: 74 65 78 74 20 74 6f 6b 65 6e 73 20 6d 61 79 20  text tokens may 
fc20: 62 65 20 61 64 64 65 64 20 74 6f 20 74 68 65 20  be added to the 
fc30: 65 6e 64 20 6f 66 20 74 68 65 20 73 74 61 74 20  end of the stat 
fc40: 63 6f 6c 75 6d 6e 20 69 6e 20 66 75 74 75 72 65  column in future
fc50: 0a 65 6e 68 61 6e 63 65 6d 65 6e 74 73 20 74 6f  .enhancements to
fc60: 20 53 51 4c 69 74 65 2e 20 20 46 6f 72 20 63 6f   SQLite.  For co
fc70: 6d 70 61 74 69 62 69 6c 69 74 79 2c 20 75 6e 72  mpatibility, unr
fc80: 65 63 6f 67 6e 69 7a 65 64 20 74 6f 6b 65 6e 73  ecognized tokens
fc90: 20 61 74 20 74 68 65 20 65 6e 64 0a 6f 66 20 74   at the end.of t
fca0: 68 65 20 73 74 61 74 20 63 6f 6c 75 6d 6e 20 61  he stat column a
fcb0: 72 65 20 73 69 6c 65 6e 74 6c 79 20 69 67 6e 6f  re silently igno
fcc0: 72 65 64 2e 0a 0a 3c 70 3e 5e 28 49 66 20 74 68  red...<p>^(If th
fcd0: 65 20 73 71 6c 69 74 65 5f 73 74 61 74 31 2e 69  e sqlite_stat1.i
fce0: 64 78 20 63 6f 6c 75 6d 6e 20 69 73 20 4e 55 4c  dx column is NUL
fcf0: 4c 2c 20 74 68 65 6e 20 74 68 65 20 73 71 6c 69  L, then the sqli
fd00: 74 65 5f 73 74 61 74 31 2e 73 74 61 74 0a 63 6f  te_stat1.stat.co
fd10: 6c 75 6d 6e 20 63 6f 6e 74 61 69 6e 73 20 61 20  lumn contains a 
fd20: 73 69 6e 67 6c 65 20 69 6e 74 65 67 65 72 20 77  single integer w
fd30: 68 69 63 68 20 69 73 20 74 68 65 20 61 70 70 72  hich is the appr
fd40: 6f 78 69 6d 61 74 65 20 6e 75 6d 62 65 72 20 6f  oximate number o
fd50: 66 0a 72 6f 77 73 20 69 6e 20 74 68 65 20 74 61  f.rows in the ta
fd60: 62 6c 65 20 69 64 65 6e 74 69 66 69 65 64 20 62  ble identified b
fd70: 79 20 73 71 6c 69 74 65 5f 73 74 61 74 31 2e 74  y sqlite_stat1.t
fd80: 62 6c 2e 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  bl.)^..<tcl>hd_f
fd90: 72 61 67 6d 65 6e 74 20 73 74 61 74 32 74 61 62  ragment stat2tab
fda0: 20 7b 73 71 6c 69 74 65 5f 73 74 61 74 32 7d 3c   {sqlite_stat2}<
fdb0: 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 73 71  /tcl>.<h3>The sq
fdc0: 6c 69 74 65 5f 73 74 61 74 32 20 74 61 62 6c 65  lite_stat2 table
fdd0: 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 73 71  </h3>..<p>The sq
fde0: 6c 69 74 65 5f 73 74 61 74 32 20 69 73 20 6f 6e  lite_stat2 is on
fdf0: 6c 79 20 63 72 65 61 74 65 64 20 61 6e 64 20 69  ly created and i
fe00: 73 20 6f 6e 6c 79 20 75 73 65 64 20 69 66 20 53  s only used if S
fe10: 51 4c 69 74 65 20 69 73 20 63 6f 6d 70 69 6c 65  QLite is compile
fe20: 64 0a 77 69 74 68 20 53 51 4c 49 54 45 5f 45 4e  d.with SQLITE_EN
fe30: 41 42 4c 45 5f 53 54 41 54 32 20 61 6e 64 20 69  ABLE_STAT2 and i
fe40: 66 20 74 68 65 20 53 51 4c 69 74 65 20 76 65 72  f the SQLite ver
fe50: 73 69 6f 6e 20 6e 75 6d 62 65 72 20 69 73 20 62  sion number is b
fe60: 65 74 77 65 65 6e 0a 33 2e 36 2e 31 38 20 61 6e  etween.3.6.18 an
fe70: 64 20 33 2e 37 2e 38 2e 20 20 54 68 65 20 73 71  d 3.7.8.  The sq
fe80: 6c 69 74 65 5f 73 74 61 74 32 20 74 61 62 6c 65  lite_stat2 table
fe90: 20 69 73 20 6e 65 69 74 68 65 72 20 72 65 61 64   is neither read
fea0: 20 6e 6f 72 20 77 72 69 74 74 65 6e 20 62 79 20   nor written by 
feb0: 61 6e 79 0a 76 65 72 73 69 6f 6e 20 6f 66 20 53  any.version of S
fec0: 51 4c 69 74 65 20 62 65 66 6f 72 65 20 33 2e 36  QLite before 3.6
fed0: 2e 31 38 20 6e 6f 72 20 61 66 74 65 72 20 33 2e  .18 nor after 3.
fee0: 37 2e 38 2e 0a 54 68 65 20 73 71 6c 69 74 65 5f  7.8..The sqlite_
fef0: 73 74 61 74 32 20 74 61 62 6c 65 20 63 6f 6e 74  stat2 table cont
ff00: 61 69 6e 73 20 61 64 64 69 74 69 6f 6e 61 6c 20  ains additional 
ff10: 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 61 62 6f 75  information.abou
ff20: 74 20 74 68 65 20 64 69 73 74 72 69 62 75 74 69  t the distributi
ff30: 6f 6e 20 6f 66 20 6b 65 79 73 20 77 69 74 68 69  on of keys withi
ff40: 6e 20 61 6e 20 69 6e 64 65 78 2e 0a 54 68 65 20  n an index..The 
ff50: 73 63 68 65 6d 61 20 6f 66 20 74 68 65 20 73 71  schema of the sq
ff60: 6c 69 74 65 5f 73 74 61 74 32 20 74 61 62 6c 65  lite_stat2 table
ff70: 20 69 73 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a   is as follows:.
ff80: 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72  .<blockquote><pr
ff90: 65 3e 0a 43 52 45 41 54 45 20 54 41 42 4c 45 20  e>.CREATE TABLE 
ffa0: 73 71 6c 69 74 65 5f 73 74 61 74 32 28 74 62 6c  sqlite_stat2(tbl
ffb0: 2c 69 64 78 2c 73 61 6d 70 6c 65 6e 6f 2c 73 61  ,idx,sampleno,sa
ffc0: 6d 70 6c 65 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62  mple);.</pre></b
ffd0: 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54  lockquote>..<p>T
ffe0: 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 32 2e  he sqlite_stat2.
fff0: 69 64 78 20 63 6f 6c 75 6d 6e 20 61 6e 64 20 74  idx column and t
10000 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 32 2e  he sqlite_stat2.
10010 74 62 6c 20 63 6f 6c 75 6d 6e 20 69 6e 20 65 61  tbl column in ea
10020 63 68 20 0a 72 6f 77 20 6f 66 20 74 68 65 20 73  ch .row of the s
10030 71 6c 69 74 65 5f 73 74 61 74 32 20 74 61 62 6c  qlite_stat2 tabl
10040 65 20 69 64 65 6e 74 69 66 79 20 61 6e 20 69 6e  e identify an in
10050 64 65 78 20 64 65 73 63 72 69 62 65 64 20 62 79  dex described by
10060 20 74 68 61 74 20 72 6f 77 2e 0a 54 68 65 72 65   that row..There
10070 20 61 72 65 20 75 73 75 61 6c 6c 79 20 31 30 20   are usually 10 
10080 72 6f 77 73 20 69 6e 20 74 68 65 20 73 71 6c 69  rows in the sqli
10090 74 65 5f 73 74 61 74 32 0a 74 61 62 6c 65 20 66  te_stat2.table f
100a0 6f 72 20 65 61 63 68 20 69 6e 64 65 78 2e 0a 0a  or each index...
100b0 3c 70 3e 54 68 65 20 73 71 6c 69 74 65 5f 73 74  <p>The sqlite_st
100c0 61 74 32 20 65 6e 74 72 69 65 73 20 66 6f 72 20  at2 entries for 
100d0 61 6e 20 69 6e 64 65 78 20 74 68 61 74 20 68 61  an index that ha
100e0 76 65 20 73 71 6c 69 74 65 5f 73 74 61 74 32 2e  ve sqlite_stat2.
100f0 73 61 6d 70 6c 65 6e 6f 0a 62 65 74 77 65 65 6e  sampleno.between
10100 20 30 20 61 6e 64 20 39 20 69 6e 63 6c 75 73 69   0 and 9 inclusi
10110 76 65 20 61 72 65 20 73 61 6d 70 6c 65 73 20 6f  ve are samples o
10120 66 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20  f the left-most 
10130 6b 65 79 20 76 61 6c 75 65 20 69 6e 20 74 68 65  key value in the
10140 0a 69 6e 64 65 78 20 74 61 6b 65 6e 20 61 74 20  .index taken at 
10150 65 76 65 6e 6c 79 20 73 70 61 63 65 64 20 70 6f  evenly spaced po
10160 69 6e 74 73 20 61 6c 6f 6e 67 20 74 68 65 20 69  ints along the i
10170 6e 64 65 78 2e 0a 4c 65 74 20 43 20 62 65 20 74  ndex..Let C be t
10180 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  he number of row
10190 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 2e 0a  s in the index..
101a0 54 68 65 6e 20 74 68 65 20 73 61 6d 70 6c 65 64  Then the sampled
101b0 20 72 6f 77 73 20 61 72 65 20 67 69 76 65 6e 20   rows are given 
101c0 62 79 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  by..<blockquote>
101d0 0a 20 20 20 20 20 72 6f 77 6e 75 6d 62 65 72 20  .     rownumber 
101e0 3d 20 28 69 2a 43 2a 32 20 2b 20 43 29 2f 32 30  = (i*C*2 + C)/20
101f0 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a  .</blockquote>..
10200 3c 70 3e 54 68 65 20 76 61 72 69 61 62 6c 65 20  <p>The variable 
10210 69 20 69 6e 20 74 68 65 20 70 72 65 76 69 6f 75  i in the previou
10220 73 20 65 78 70 72 65 73 73 69 6f 6e 20 76 61 72  s expression var
10230 69 65 73 20 62 65 74 77 65 65 6e 20 30 20 61 6e  ies between 0 an
10240 64 20 39 2e 0a 43 6f 6e 63 65 70 74 75 61 6c 6c  d 9..Conceptuall
10250 79 2c 20 74 68 65 20 69 6e 64 65 78 20 73 70 61  y, the index spa
10260 63 65 20 69 73 20 64 69 76 69 64 65 64 20 69 6e  ce is divided in
10270 74 6f 0a 31 30 20 75 6e 69 66 6f 72 6d 20 62 75  to.10 uniform bu
10280 63 6b 65 74 73 20 61 6e 64 20 74 68 65 20 73 61  ckets and the sa
10290 6d 70 6c 65 73 20 61 72 65 20 74 68 65 20 6d 69  mples are the mi
102a0 64 64 6c 65 20 72 6f 77 20 66 72 6f 6d 20 65 61  ddle row from ea
102b0 63 68 20 62 75 63 6b 65 74 2e 0a 0a 3c 70 3e 54  ch bucket...<p>T
102c0 68 65 20 66 6f 72 6d 61 74 20 66 6f 72 20 73 71  he format for sq
102d0 6c 69 74 65 5f 73 74 61 74 32 20 69 73 20 72 65  lite_stat2 is re
102e0 63 6f 72 64 65 64 20 68 65 72 65 20 66 6f 72 20  corded here for 
102f0 6c 65 67 61 63 79 20 72 65 66 65 72 65 6e 63 65  legacy reference
10300 2e 20 20 0a 52 65 63 65 6e 74 20 76 65 72 73 69  .  .Recent versi
10310 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 6e 6f  ons of SQLite no
10320 20 6c 6f 6e 67 65 72 20 73 75 70 70 6f 72 74 20   longer support 
10330 73 71 6c 69 74 65 5f 73 74 61 74 32 20 61 6e 64  sqlite_stat2 and
10340 20 74 68 65 0a 73 71 6c 69 74 65 5f 73 74 61 74   the.sqlite_stat
10350 32 20 74 61 62 6c 65 2c 20 69 74 20 69 73 20 65  2 table, it is e
10360 78 69 73 74 73 2c 20 69 73 20 73 69 6d 70 6c 79  xists, is simply
10370 20 69 67 6e 6f 72 65 64 2e 0a 0a 3c 74 63 6c 3e   ignored...<tcl>
10380 68 64 5f 66 72 61 67 6d 65 6e 74 20 73 74 61 74  hd_fragment stat
10390 33 74 61 62 20 7b 73 71 6c 69 74 65 5f 73 74 61  3tab {sqlite_sta
103a0 74 33 7d 20 53 51 4c 49 54 45 5f 53 54 41 54 33  t3} SQLITE_STAT3
103b0 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 73  </tcl>.<h3>The s
103c0 71 6c 69 74 65 5f 73 74 61 74 33 20 74 61 62 6c  qlite_stat3 tabl
103d0 65 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 73  e</h3>..<p>The s
103e0 71 6c 69 74 65 5f 73 74 61 74 33 20 69 73 20 6f  qlite_stat3 is o
103f0 6e 6c 79 20 75 73 65 64 20 69 66 20 53 51 4c 69  nly used if SQLi
10400 74 65 20 69 73 20 63 6f 6d 70 69 6c 65 64 0a 77  te is compiled.w
10410 69 74 68 20 5b 53 51 4c 49 54 45 5f 45 4e 41 42  ith [SQLITE_ENAB
10420 4c 45 5f 53 54 41 54 33 5d 20 6f 72 20 5b 53 51  LE_STAT3] or [SQ
10430 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
10440 34 5d 0a 61 6e 64 20 69 66 20 74 68 65 20 53 51  4].and if the SQ
10450 4c 69 74 65 20 76 65 72 73 69 6f 6e 20 6e 75 6d  Lite version num
10460 62 65 72 20 69 73 20 33 2e 37 2e 39 20 6f 72 20  ber is 3.7.9 or 
10470 67 72 65 61 74 65 72 2e 0a 54 68 65 20 73 71 6c  greater..The sql
10480 69 74 65 5f 73 74 61 74 33 20 74 61 62 6c 65 20  ite_stat3 table 
10490 69 73 20 6e 65 69 74 68 65 72 20 72 65 61 64 20  is neither read 
104a0 6e 6f 72 20 77 72 69 74 74 65 6e 20 62 79 20 61  nor written by a
104b0 6e 79 0a 76 65 72 73 69 6f 6e 20 6f 66 20 53 51  ny.version of SQ
104c0 4c 69 74 65 20 62 65 66 6f 72 65 20 33 2e 37 2e  Lite before 3.7.
104d0 39 2e 0a 49 66 20 74 68 65 20 5b 53 51 4c 49 54  9..If the [SQLIT
104e0 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 5d 20  E_ENABLE_STAT4] 
104f0 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74  compile-time opt
10500 69 6f 6e 20 69 73 20 75 73 65 64 20 61 6e 64 20  ion is used and 
10510 74 68 65 0a 53 51 4c 69 74 65 20 76 65 72 73 69  the.SQLite versi
10520 6f 6e 20 6e 75 6d 62 65 72 20 69 73 20 33 2e 38  on number is 3.8
10530 2e 31 20 6f 72 20 67 72 65 61 74 65 72 2c 20 74  .1 or greater, t
10540 68 65 6e 20 73 71 6c 69 74 65 5f 73 74 61 74 33  hen sqlite_stat3
10550 20 6d 69 67 68 74 0a 62 65 20 72 65 61 64 20 62   might.be read b
10560 75 74 20 6e 6f 74 20 77 72 69 74 74 65 6e 2e 0a  ut not written..
10570 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33  The sqlite_stat3
10580 20 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e 73 20   table contains 
10590 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
105a0 6d 61 74 69 6f 6e 0a 61 62 6f 75 74 20 74 68 65  mation.about the
105b0 20 64 69 73 74 72 69 62 75 74 69 6f 6e 20 6f 66   distribution of
105c0 20 6b 65 79 73 20 77 69 74 68 69 6e 20 61 6e 20   keys within an 
105d0 69 6e 64 65 78 2c 20 69 6e 66 6f 72 6d 61 74 69  index, informati
105e0 6f 6e 20 74 68 61 74 20 74 68 65 0a 71 75 65 72  on that the.quer
105f0 79 20 70 6c 61 6e 6e 65 72 20 63 61 6e 20 75 73  y planner can us
10600 65 20 74 6f 20 64 65 76 69 73 65 20 62 65 74 74  e to devise bett
10610 65 72 20 61 6e 64 20 66 61 73 74 65 72 20 71 75  er and faster qu
10620 65 72 79 20 61 6c 67 6f 72 69 74 68 6d 73 2e 0a  ery algorithms..
10630 5e 28 54 68 65 20 73 63 68 65 6d 61 20 6f 66 20  ^(The schema of 
10640 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33  the sqlite_stat3
10650 20 74 61 62 6c 65 20 69 73 20 61 73 20 66 6f 6c   table is as fol
10660 6c 6f 77 73 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  lows:..<blockquo
10670 74 65 3e 3c 70 72 65 3e 0a 43 52 45 41 54 45 20  te><pre>.CREATE 
10680 54 41 42 4c 45 20 73 71 6c 69 74 65 5f 73 74 61  TABLE sqlite_sta
10690 74 33 28 74 62 6c 2c 69 64 78 2c 6e 45 71 2c 6e  t3(tbl,idx,nEq,n
106a0 4c 74 2c 6e 44 4c 74 2c 73 61 6d 70 6c 65 29 3b  Lt,nDLt,sample);
106b0 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75  .</pre></blockqu
106c0 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 54 68 65 72 65  ote>)^..<p>There
106d0 20 61 72 65 20 75 73 75 61 6c 6c 79 20 6d 75 6c   are usually mul
106e0 74 69 70 6c 65 20 65 6e 74 72 69 65 73 20 69 6e  tiple entries in
106f0 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74   the sqlite_stat
10700 33 20 74 61 62 6c 65 20 66 6f 72 20 65 61 63 68  3 table for each
10710 20 69 6e 64 65 78 2e 0a 5e 28 54 68 65 20 73 71   index..^(The sq
10720 6c 69 74 65 5f 73 74 61 74 33 2e 73 61 6d 70 6c  lite_stat3.sampl
10730 65 20 63 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 74  e column holds t
10740 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
10750 6c 65 66 74 2d 6d 6f 73 74 20 66 69 65 6c 64 20  left-most field 
10760 6f 66 20 61 6e 0a 69 6e 64 65 78 20 69 64 65 6e  of an.index iden
10770 74 69 66 69 65 64 20 62 79 20 73 71 6c 69 74 65  tified by sqlite
10780 5f 73 74 61 74 33 2e 69 64 78 20 61 6e 64 20 73  _stat3.idx and s
10790 71 6c 69 74 65 5f 73 74 61 74 33 2e 74 62 6c 2e  qlite_stat3.tbl.
107a0 29 5e 0a 5e 28 54 68 65 20 73 71 6c 69 74 65 5f  )^.^(The sqlite_
107b0 73 74 61 74 33 2e 6e 45 71 20 63 6f 6c 75 6d 6e  stat3.nEq column
107c0 20 68 6f 6c 64 73 20 74 68 65 20 61 70 70 72 6f   holds the appro
107d0 78 69 6d 61 74 65 0a 6e 75 6d 62 65 72 20 6f 66  ximate.number of
107e0 20 65 6e 74 72 69 65 73 20 69 6e 20 74 68 65 20   entries in the 
107f0 69 6e 64 65 78 20 77 68 6f 73 65 20 6c 65 66 74  index whose left
10800 2d 6d 6f 73 74 20 63 6f 6c 75 6d 6e 20 65 78 61  -most column exa
10810 63 74 6c 79 20 6d 61 74 63 68 65 73 0a 74 68 65  ctly matches.the
10820 20 73 61 6d 70 6c 65 2e 29 5e 0a 5e 28 54 68 65   sample.)^.^(The
10830 20 73 71 6c 69 74 65 5f 73 74 61 74 33 2e 6e 4c   sqlite_stat3.nL
10840 74 20 68 6f 6c 64 73 20 74 68 65 20 61 70 70 72  t holds the appr
10850 6f 78 69 6d 61 74 65 20 6e 75 6d 62 65 72 20 6f  oximate number o
10860 66 20 65 6e 74 72 69 65 73 20 69 6e 20 74 68 65  f entries in the
10870 0a 69 6e 64 65 78 20 77 68 6f 73 65 20 6c 65 66  .index whose lef
10880 74 2d 6d 6f 73 74 20 63 6f 6c 75 6d 6e 20 69 73  t-most column is
10890 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20 73   less than the s
108a0 61 6d 70 6c 65 2e 29 5e 0a 5e 28 54 68 65 20 73  ample.)^.^(The s
108b0 71 6c 69 74 65 5f 73 74 61 74 33 2e 6e 44 4c 74  qlite_stat3.nDLt
108c0 20 63 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 74 68   column holds th
108d0 65 20 61 70 70 72 6f 78 69 6d 61 74 65 0a 6e 75  e approximate.nu
108e0 6d 62 65 72 20 6f 66 20 64 69 73 74 69 6e 63 74  mber of distinct
108f0 20 6c 65 66 74 2d 6d 6f 73 74 20 65 6e 74 72 69   left-most entri
10900 65 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20  es in the index 
10910 74 68 61 74 20 61 72 65 20 6c 65 73 73 20 74 68  that are less th
10920 61 6e 0a 74 68 65 20 73 61 6d 70 6c 65 2e 29 5e  an.the sample.)^
10930 0a 0a 3c 70 3e 5e 54 68 65 72 65 20 63 61 6e 20  ..<p>^There can 
10940 62 65 20 61 6e 20 61 72 62 69 74 72 61 72 79 20  be an arbitrary 
10950 6e 75 6d 62 65 72 20 6f 66 20 73 71 6c 69 74 65  number of sqlite
10960 5f 73 74 61 74 33 20 65 6e 74 72 69 65 73 20 70  _stat3 entries p
10970 65 72 20 69 6e 64 65 78 2e 0a 54 68 65 20 5b 41  er index..The [A
10980 4e 41 4c 59 5a 45 5d 20 63 6f 6d 6d 61 6e 64 20  NALYZE] command 
10990 77 69 6c 6c 20 74 79 70 69 63 61 6c 6c 79 20 67  will typically g
109a0 65 6e 65 72 61 74 65 20 73 71 6c 69 74 65 5f 73  enerate sqlite_s
109b0 74 61 74 33 20 74 61 62 6c 65 73 0a 74 68 61 74  tat3 tables.that
109c0 20 63 6f 6e 74 61 69 6e 20 62 65 74 77 65 65 6e   contain between
109d0 20 31 30 20 61 6e 64 20 34 30 20 73 61 6d 70 6c   10 and 40 sampl
109e0 65 73 20 74 68 61 74 20 61 72 65 20 64 69 73 74  es that are dist
109f0 72 69 62 75 74 65 64 20 61 63 72 6f 73 73 0a 74  ributed across.t
10a00 68 65 20 6b 65 79 20 73 70 61 63 65 20 61 6e 64  he key space and
10a10 20 77 69 74 68 20 6c 61 72 67 65 20 6e 45 71 20   with large nEq 
10a20 76 61 6c 75 65 73 2e 0a 0a 3c 70 3e 5e 28 49 6e  values...<p>^(In
10a30 20 61 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 73   a well-formed s
10a40 71 6c 69 74 65 5f 73 74 61 74 33 20 74 61 62 6c  qlite_stat3 tabl
10a50 65 2c 20 74 68 65 20 73 61 6d 70 6c 65 73 20 66  e, the samples f
10a60 6f 72 20 61 6e 79 20 73 69 6e 67 6c 65 0a 69 6e  or any single.in
10a70 64 65 78 20 6d 75 73 74 20 61 70 70 65 61 72 20  dex must appear 
10a80 69 6e 20 74 68 65 20 73 61 6d 65 20 6f 72 64 65  in the same orde
10a90 72 20 74 68 61 74 20 74 68 65 79 20 6f 63 63 75  r that they occu
10aa0 72 20 69 6e 20 74 68 65 20 69 6e 64 65 78 2e 20  r in the index. 
10ab0 20 0a 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73   .In other words
10ac0 2c 20 69 66 20 74 68 65 20 65 6e 74 72 79 20 77  , if the entry w
10ad0 69 74 68 20 6c 65 66 74 2d 6d 6f 73 74 20 63 6f  ith left-most co
10ae0 6c 75 6d 6e 20 53 31 20 69 73 20 65 61 72 6c 69  lumn S1 is earli
10af0 65 72 20 69 6e 0a 74 68 65 20 69 6e 64 65 78 20  er in.the index 
10b00 62 2d 74 72 65 65 20 74 68 61 6e 20 74 68 65 0a  b-tree than the.
10b10 65 6e 74 72 79 20 77 69 74 68 20 6c 65 66 74 2d  entry with left-
10b20 6d 6f 73 74 20 63 6f 6c 75 6d 6e 20 53 32 2c 20  most column S2, 
10b30 74 68 65 6e 20 69 6e 20 74 68 65 20 73 71 6c 69  then in the sqli
10b40 74 65 5f 73 74 61 74 33 20 74 61 62 6c 65 2c 20  te_stat3 table, 
10b50 0a 73 61 6d 70 6c 65 20 53 31 20 6d 75 73 74 20  .sample S1 must 
10b60 68 61 76 65 20 61 20 73 6d 61 6c 6c 65 72 20 72  have a smaller r
10b70 6f 77 69 64 20 74 68 61 6e 20 73 61 6d 70 6c 65  owid than sample
10b80 20 53 32 2e 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f   S2.)^..<tcl>hd_
10b90 66 72 61 67 6d 65 6e 74 20 73 74 61 74 34 74 61  fragment stat4ta
10ba0 62 20 7b 73 71 6c 69 74 65 5f 73 74 61 74 34 7d  b {sqlite_stat4}
10bb0 20 53 51 4c 49 54 45 5f 53 54 41 54 34 3c 2f 74   SQLITE_STAT4</t
10bc0 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 73 71 6c 69  cl>.<h3>The sqli
10bd0 74 65 5f 73 74 61 74 34 20 74 61 62 6c 65 3c 2f  te_stat4 table</
10be0 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 73 71 6c 69  h3>..<p>The sqli
10bf0 74 65 5f 73 74 61 74 34 20 69 73 20 6f 6e 6c 79  te_stat4 is only
10c00 20 63 72 65 61 74 65 64 20 61 6e 64 20 69 73 20   created and is 
10c10 6f 6e 6c 79 20 75 73 65 64 20 69 66 20 53 51 4c  only used if SQL
10c20 69 74 65 20 69 73 20 63 6f 6d 70 69 6c 65 64 0a  ite is compiled.
10c30 77 69 74 68 20 5b 53 51 4c 49 54 45 5f 45 4e 41  with [SQLITE_ENA
10c40 42 4c 45 5f 53 54 41 54 34 5d 20 61 6e 64 20 69  BLE_STAT4] and i
10c50 66 20 74 68 65 20 53 51 4c 69 74 65 20 76 65 72  f the SQLite ver
10c60 73 69 6f 6e 20 6e 75 6d 62 65 72 20 69 73 0a 33  sion number is.3
10c70 2e 38 2e 31 20 6f 72 20 67 72 65 61 74 65 72 2e  .8.1 or greater.
10c80 20 20 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61    The sqlite_sta
10c90 74 34 20 74 61 62 6c 65 20 69 73 20 6e 65 69 74  t4 table is neit
10ca0 68 65 72 20 72 65 61 64 20 6e 6f 72 20 77 72 69  her read nor wri
10cb0 74 74 65 6e 20 62 79 20 61 6e 79 0a 76 65 72 73  tten by any.vers
10cc0 69 6f 6e 20 6f 66 20 53 51 4c 69 74 65 20 62 65  ion of SQLite be
10cd0 66 6f 72 65 20 33 2e 38 2e 31 2e 0a 54 68 65 20  fore 3.8.1..The 
10ce0 73 71 6c 69 74 65 5f 73 74 61 74 34 20 74 61 62  sqlite_stat4 tab
10cf0 6c 65 20 63 6f 6e 74 61 69 6e 73 20 61 64 64 69  le contains addi
10d00 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
10d10 6f 6e 0a 61 62 6f 75 74 20 74 68 65 20 64 69 73  on.about the dis
10d20 74 72 69 62 75 74 69 6f 6e 20 6f 66 20 6b 65 79  tribution of key
10d30 73 20 77 69 74 68 69 6e 20 61 6e 20 69 6e 64 65  s within an inde
10d40 78 20 6f 72 20 74 68 65 20 64 69 73 74 72 69 62  x or the distrib
10d50 75 74 69 6f 6e 20 6f 66 0a 6b 65 79 73 20 69 6e  ution of.keys in
10d60 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79   the primary key
10d70 20 6f 66 20 61 20 5b 57 49 54 48 4f 55 54 20 52   of a [WITHOUT R
10d80 4f 57 49 44 5d 20 74 61 62 6c 65 2e 0a 54 68 65  OWID] table..The
10d90 20 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 63   query planner c
10da0 61 6e 20 73 6f 6d 65 74 69 6d 65 73 20 75 73 65  an sometimes use
10db0 20 74 68 65 20 61 64 64 69 74 69 6f 6e 61 6c 20   the additional 
10dc0 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e 0a 74  information in.t
10dd0 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 34 20  he sqlite_stat4 
10de0 74 61 62 6c 65 20 74 6f 20 64 65 76 69 73 65 20  table to devise 
10df0 62 65 74 74 65 72 20 61 6e 64 20 66 61 73 74 65  better and faste
10e00 72 20 71 75 65 72 79 20 61 6c 67 6f 72 69 74 68  r query algorith
10e10 6d 73 2e 0a 5e 28 54 68 65 20 73 63 68 65 6d 61  ms..^(The schema
10e20 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 5f 73   of the sqlite_s
10e30 74 61 74 34 20 74 61 62 6c 65 20 69 73 20 61 73  tat4 table is as
10e40 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 62 6c 6f 63   follows:..<bloc
10e50 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 43 52 45  kquote><pre>.CRE
10e60 41 54 45 20 54 41 42 4c 45 20 73 71 6c 69 74 65  ATE TABLE sqlite
10e70 5f 73 74 61 74 34 28 74 62 6c 2c 69 64 78 2c 6e  _stat4(tbl,idx,n
10e80 45 71 2c 6e 4c 74 2c 6e 44 4c 74 2c 73 61 6d 70  Eq,nLt,nDLt,samp
10e90 6c 65 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f  le);.</pre></blo
10ea0 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 54  ckquote>)^..<p>T
10eb0 68 65 72 65 20 61 72 65 20 74 79 70 69 63 61 6c  here are typical
10ec0 6c 79 20 62 65 74 77 65 65 6e 20 31 30 20 74 6f  ly between 10 to
10ed0 20 34 30 20 65 6e 74 72 69 65 73 20 69 6e 20 74   40 entries in t
10ee0 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 34 20  he sqlite_stat4 
10ef0 74 61 62 6c 65 20 66 6f 72 0a 65 61 63 68 20 69  table for.each i
10f00 6e 64 65 78 20 66 6f 72 20 77 68 69 63 68 20 73  ndex for which s
10f10 74 61 74 69 73 74 69 63 73 20 61 72 65 20 61 76  tatistics are av
10f20 61 69 6c 61 62 6c 65 2c 20 68 6f 77 65 76 65 72  ailable, however
10f30 20 74 68 65 73 65 20 6c 69 6d 69 74 73 20 61 72   these limits ar
10f40 65 0a 6e 6f 74 20 68 61 72 64 20 62 6f 75 6e 64  e.not hard bound
10f50 73 2e 0a 54 68 65 20 6d 65 61 6e 69 6e 67 73 20  s..The meanings 
10f60 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 69  of the columns i
10f70 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61  n the sqlite_sta
10f80 74 34 20 74 61 62 6c 65 20 61 72 65 20 61 73 20  t4 table are as 
10f90 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 63 65 6e 74 65  follows:..<cente
10fa0 72 3e 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72  r>.<table border
10fb0 3d 22 30 22 20 77 69 64 74 68 3d 22 31 30 30 25  ="0" width="100%
10fc0 22 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 22 31  " cellpadding="1
10fd0 30 22 3e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  0">.<tr><td vali
10fe0 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22  gn="top" align="
10ff0 72 69 67 68 74 22 3e 74 62 6c 3a 3c 2f 74 64 3e  right">tbl:</td>
11000 0a 20 20 20 20 3c 74 64 3e 5e 28 54 68 65 20 73  .    <td>^(The s
11010 71 6c 69 74 65 5f 73 74 61 74 34 2e 74 62 6c 20  qlite_stat4.tbl 
11020 63 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 6e 61 6d  column holds nam
11030 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74  e of the table t
11040 68 61 74 20 6f 77 6e 73 0a 20 20 20 20 74 68 65  hat owns.    the
11050 20 69 6e 64 65 78 20 74 68 61 74 20 74 68 65 20   index that the 
11060 72 6f 77 20 64 65 73 63 72 69 62 65 73 29 5e 0a  row describes)^.
11070 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d  .<tr><td valign=
11080 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67  "top" align="rig
11090 68 74 22 3e 69 64 78 3a 3c 2f 74 64 3e 0a 20 20  ht">idx:</td>.  
110a0 20 20 3c 74 64 3e 5e 28 54 68 65 20 73 71 6c 69    <td>^(The sqli
110b0 74 65 5f 73 74 61 74 34 2e 69 64 78 20 63 6f 6c  te_stat4.idx col
110c0 75 6d 6e 20 68 6f 6c 64 73 20 6e 61 6d 65 20 6f  umn holds name o
110d0 66 20 74 68 65 20 69 6e 64 65 78 20 74 68 61 74  f the index that
110e0 20 74 68 65 0a 20 20 20 20 72 6f 77 20 64 65 73   the.    row des
110f0 63 72 69 62 65 73 2c 20 6f 72 20 69 6e 20 74 68  cribes, or in th
11100 65 20 63 61 73 65 20 6f 66 0a 20 20 20 20 61 6e  e case of.    an
11110 20 73 71 6c 69 74 65 5f 73 74 61 74 34 20 65 6e   sqlite_stat4 en
11120 74 72 79 20 66 6f 72 20 61 20 5b 57 49 54 48 4f  try for a [WITHO
11130 55 54 20 52 4f 57 49 44 5d 20 74 61 62 6c 65 2c  UT ROWID] table,
11140 20 74 68 65 0a 20 20 20 20 6e 61 6d 65 20 6f 66   the.    name of
11150 20 74 68 65 20 74 61 62 6c 65 20 69 74 73 65 6c   the table itsel
11160 66 2e 29 5e 0a 0a 3c 74 72 3e 3c 74 64 20 76 61  f.)^..<tr><td va
11170 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e  lign="top" align
11180 3d 22 72 69 67 68 74 22 3e 73 61 6d 70 6c 65 3a  ="right">sample:
11190 3c 2f 74 64 3e 0a 20 20 20 20 3c 74 64 3e 5e 28  </td>.    <td>^(
111a0 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 34  The sqlite_stat4
111b0 2e 73 61 6d 70 6c 65 20 63 6f 6c 75 6d 6e 20 68  .sample column h
111c0 6f 6c 64 73 20 61 20 42 4c 4f 42 0a 20 20 20 20  olds a BLOB.    
111d0 69 6e 20 74 68 65 20 5b 72 65 63 6f 72 64 20 66  in the [record f
111e0 6f 72 6d 61 74 5d 20 74 68 61 74 20 65 6e 63 6f  ormat] that enco
111f0 64 65 73 20 74 68 65 20 69 6e 64 65 78 65 64 20  des the indexed 
11200 63 6f 6c 75 6d 6e 73 20 66 6f 6c 6c 6f 77 65 64  columns followed
11210 20 62 79 0a 20 20 20 20 74 68 65 20 72 6f 77 69   by.    the rowi
11220 64 20 66 6f 72 20 61 20 72 6f 77 69 64 20 74 61  d for a rowid ta
11230 62 6c 65 20 6f 72 20 62 79 20 74 68 65 20 63 6f  ble or by the co
11240 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 70 72 69  lumns of the pri
11250 6d 61 72 79 20 6b 65 79 20 0a 20 20 20 20 66 6f  mary key .    fo
11260 72 20 61 20 57 49 54 48 4f 55 54 20 52 4f 57 49  r a WITHOUT ROWI
11270 44 20 74 61 62 6c 65 2e 29 5e 0a 20 20 20 20 5e  D table.)^.    ^
11280 28 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74  (The sqlite_stat
11290 34 2e 73 61 6d 70 6c 65 20 42 4c 4f 42 20 66 6f  4.sample BLOB fo
112a0 72 20 74 68 65 20 57 49 54 48 4f 55 54 20 52 4f  r the WITHOUT RO
112b0 57 49 44 20 74 61 62 6c 65 20 69 74 73 65 6c 66  WID table itself
112c0 20 0a 20 20 20 20 63 6f 6e 74 61 69 6e 73 20 6a   .    contains j
112d0 75 73 74 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20  ust the columns 
112e0 6f 66 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b  of the primary k
112f0 65 79 2e 29 5e 0a 20 20 20 20 4c 65 74 20 74 68  ey.)^.    Let th
11300 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
11310 6d 6e 73 20 65 6e 63 6f 64 65 64 20 62 79 20 74  mns encoded by t
11320 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 34 2e  he sqlite_stat4.
11330 73 61 6d 70 6c 65 20 62 6c 6f 62 20 62 65 20 4e  sample blob be N
11340 2e 0a 20 20 20 20 5e 46 6f 72 20 69 6e 64 65 78  ..    ^For index
11350 65 73 20 6f 6e 20 61 6e 20 6f 72 64 69 6e 61 72  es on an ordinar
11360 79 20 72 6f 77 69 64 20 74 61 62 6c 65 2c 20 4e  y rowid table, N
11370 20 77 69 6c 6c 20 62 65 20 6f 6e 65 20 6d 6f 72   will be one mor
11380 65 20 74 68 61 6e 20 74 68 65 20 6e 75 6d 62 65  e than the numbe
11390 72 20 0a 20 20 20 20 6f 66 20 63 6f 6c 75 6d 6e  r .    of column
113a0 73 20 69 6e 64 65 78 65 64 2e 0a 20 20 20 20 5e  s indexed..    ^
113b0 46 6f 72 20 69 6e 64 65 78 65 73 20 6f 6e 20 57  For indexes on W
113c0 49 54 48 4f 55 54 20 52 4f 57 49 44 20 74 61 62  ITHOUT ROWID tab
113d0 6c 65 73 2c 20 4e 20 77 69 6c 6c 20 62 65 20 74  les, N will be t
113e0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
113f0 75 6d 6e 73 0a 20 20 20 20 69 6e 64 65 78 65 64  umns.    indexed
11400 20 70 6c 75 73 20 74 68 65 20 6e 75 6d 62 65 72   plus the number
11410 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
11420 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79 2e 0a  he primary key..
11430 20 20 20 20 5e 46 6f 72 20 61 20 57 49 54 48 4f      ^For a WITHO
11440 55 54 20 52 4f 57 49 44 20 74 61 62 6c 65 2c 20  UT ROWID table, 
11450 4e 20 77 69 6c 6c 20 62 65 20 74 68 65 20 6e 75  N will be the nu
11460 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
11470 69 6e 20 74 68 65 0a 20 20 20 20 70 72 69 6d 61  in the.    prima
11480 72 79 20 6b 65 79 2e 0a 0a 3c 74 72 3e 3c 74 64  ry key...<tr><td
11490 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c   valign="top" al
114a0 69 67 6e 3d 22 72 69 67 68 74 22 3e 6e 45 71 3a  ign="right">nEq:
114b0 3c 2f 74 64 3e 0a 20 20 20 20 3c 74 64 3e 5e 28  </td>.    <td>^(
114c0 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 34  The sqlite_stat4
114d0 2e 6e 45 71 20 63 6f 6c 75 6d 6e 20 68 6f 6c 64  .nEq column hold
114e0 73 20 61 20 6c 69 73 74 20 6f 66 20 4e 20 69 6e  s a list of N in
114f0 74 65 67 65 72 73 20 77 68 65 72 65 20 0a 20 20  tegers where .  
11500 20 20 74 68 65 20 4b 2d 74 68 20 69 6e 74 65 67    the K-th integ
11510 65 72 20 69 73 20 74 68 65 20 61 70 70 72 6f 78  er is the approx
11520 69 6d 61 74 65 20 6e 75 6d 62 65 72 20 6f 66 20  imate number of 
11530 65 6e 74 72 69 65 73 20 69 6e 20 74 68 65 20 69  entries in the i
11540 6e 64 65 78 0a 20 20 20 20 77 68 6f 73 65 20 6c  ndex.    whose l
11550 65 66 74 2d 6d 6f 73 74 20 4b 20 63 6f 6c 75 6d  eft-most K colum
11560 6e 73 20 65 78 61 63 74 6c 79 20 6d 61 74 63 68  ns exactly match
11570 20 74 68 65 20 4b 20 6c 65 66 74 2d 6d 6f 73 74   the K left-most
11580 20 63 6f 6c 75 6d 6e 73 0a 20 20 20 20 6f 66 20   columns.    of 
11590 74 68 65 20 73 61 6d 70 6c 65 2e 29 5e 0a 0a 3c  the sample.)^..<
115a0 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74  tr><td valign="t
115b0 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74  op" align="right
115c0 22 3e 6e 4c 74 3a 3c 2f 74 64 3e 0a 20 20 20 20  ">nLt:</td>.    
115d0 3c 74 64 3e 5e 28 54 68 65 20 73 71 6c 69 74 65  <td>^(The sqlite
115e0 5f 73 74 61 74 34 2e 6e 4c 74 20 63 6f 6c 75 6d  _stat4.nLt colum
115f0 6e 20 68 6f 6c 64 73 20 61 20 6c 69 73 74 20 6f  n holds a list o
11600 66 20 4e 20 69 6e 74 65 67 65 72 73 20 77 68 65  f N integers whe
11610 72 65 0a 20 20 20 20 74 68 65 20 4b 2d 74 68 20  re.    the K-th 
11620 69 6e 74 65 67 65 72 20 69 73 20 74 68 65 20 61  integer is the a
11630 70 70 72 6f 78 69 6d 61 74 65 20 6e 75 6d 62 65  pproximate numbe
11640 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20  r of entries in 
11650 74 68 65 0a 20 20 20 20 69 6e 64 65 78 20 77 68  the.    index wh
11660 6f 73 65 20 4b 20 6c 65 66 74 2d 6d 6f 73 74 20  ose K left-most 
11670 63 6f 6c 75 6d 6e 73 20 61 72 65 20 63 6f 6c 6c  columns are coll
11680 65 63 74 69 76 65 6c 79 20 6c 65 73 73 20 74 68  ectively less th
11690 61 6e 20 74 68 65 20 0a 20 20 20 20 4b 20 6c 65  an the .    K le
116a0 66 74 2d 6d 6f 73 74 20 63 6f 6c 75 6d 6e 73 20  ft-most columns 
116b0 6f 66 20 74 68 65 20 73 61 6d 70 6c 65 2e 29 5e  of the sample.)^
116c0 0a 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  ..<tr><td valign
116d0 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69  ="top" align="ri
116e0 67 68 74 22 3e 6e 44 4c 74 3a 3c 2f 74 64 3e 0a  ght">nDLt:</td>.
116f0 20 20 20 20 3c 74 64 3e 5e 28 54 68 65 20 73 71      <td>^(The sq
11700 6c 69 74 65 5f 73 74 61 74 34 2e 6e 44 4c 74 20  lite_stat4.nDLt 
11710 63 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 61 20 6c  column holds a l
11720 69 73 74 20 6f 66 20 4e 20 69 6e 74 65 67 65 72  ist of N integer
11730 73 20 77 68 65 72 65 0a 20 20 20 20 74 68 65 20  s where.    the 
11740 4b 2d 74 68 20 69 6e 74 65 67 65 72 20 69 73 20  K-th integer is 
11750 74 68 65 20 61 70 70 72 6f 78 69 6d 61 74 65 0a  the approximate.
11760 20 20 20 20 6e 75 6d 62 65 72 20 6f 66 20 65 6e      number of en
11770 74 72 69 65 73 20 69 6e 20 74 68 65 20 69 6e 64  tries in the ind
11780 65 78 20 74 68 61 74 20 61 72 65 20 64 69 73 74  ex that are dist
11790 69 6e 63 74 20 69 6e 20 74 68 65 20 66 69 72 73  inct in the firs
117a0 74 20 4b 20 63 6f 6c 75 6d 6e 73 20 61 6e 64 0a  t K columns and.
117b0 20 20 20 20 77 68 65 72 65 20 74 68 65 20 6c 65      where the le
117c0 66 74 2d 6d 6f 73 74 20 4b 20 63 6f 6c 75 6d 6e  ft-most K column
117d0 73 20 61 72 65 20 63 6f 6c 6c 65 63 74 69 76 65  s are collective
117e0 6c 79 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65  ly less than the
117f0 20 6c 65 66 74 2d 6d 6f 73 74 0a 20 20 20 20 4b   left-most.    K
11800 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20   columns of the 
11810 73 61 6d 70 6c 65 2e 29 5e 0a 3c 2f 74 61 62 6c  sample.)^.</tabl
11820 65 3e 0a 3c 2f 63 65 6e 74 65 72 3e 0a 0a 3c 70  e>.</center>..<p
11830 3e 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74  >The sqlite_stat
11840 34 20 69 73 20 61 20 67 65 6e 65 72 61 6c 69 7a  4 is a generaliz
11850 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 71 6c  ation of the sql
11860 69 74 65 5f 73 74 61 74 33 20 74 61 62 6c 65 2e  ite_stat3 table.
11870 20 20 54 68 65 0a 73 71 6c 69 74 65 5f 73 74 61    The.sqlite_sta
11880 74 33 20 74 61 62 6c 65 20 70 72 6f 76 69 64 65  t3 table provide
11890 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  s information ab
118a0 6f 75 74 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73  out the left-mos
118b0 74 20 63 6f 6c 75 6d 6e 20 6f 66 20 61 6e 0a 69  t column of an.i
118c0 6e 64 65 78 20 77 68 65 72 65 61 73 20 74 68 65  ndex whereas the
118d0 20 73 71 6c 69 74 65 5f 73 74 61 74 34 20 74 61   sqlite_stat4 ta
118e0 62 6c 65 20 70 72 6f 76 69 64 65 73 20 69 6e 66  ble provides inf
118f0 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 61  ormation about a
11900 6c 6c 20 63 6f 6c 75 6d 6e 73 0a 6f 66 20 74 68  ll columns.of th
11910 65 20 69 6e 64 65 78 2e 0a 0a 3c 70 3e 5e 54 68  e index...<p>^Th
11920 65 72 65 20 63 61 6e 20 62 65 20 61 6e 20 61 72  ere can be an ar
11930 62 69 74 72 61 72 79 20 6e 75 6d 62 65 72 20 6f  bitrary number o
11940 66 20 73 71 6c 69 74 65 5f 73 74 61 74 34 20 65  f sqlite_stat4 e
11950 6e 74 72 69 65 73 20 70 65 72 20 69 6e 64 65 78  ntries per index
11960 2e 0a 54 68 65 20 5b 41 4e 41 4c 59 5a 45 5d 20  ..The [ANALYZE] 
11970 63 6f 6d 6d 61 6e 64 20 77 69 6c 6c 20 74 79 70  command will typ
11980 69 63 61 6c 6c 79 20 67 65 6e 65 72 61 74 65 20  ically generate 
11990 73 71 6c 69 74 65 5f 73 74 61 74 34 20 74 61 62  sqlite_stat4 tab
119a0 6c 65 73 0a 74 68 61 74 20 63 6f 6e 74 61 69 6e  les.that contain
119b0 20 62 65 74 77 65 65 6e 20 31 30 20 61 6e 64 20   between 10 and 
119c0 34 30 20 73 61 6d 70 6c 65 73 20 74 68 61 74 20  40 samples that 
119d0 61 72 65 20 64 69 73 74 72 69 62 75 74 65 64 20  are distributed 
119e0 61 63 72 6f 73 73 0a 74 68 65 20 6b 65 79 20 73  across.the key s
119f0 70 61 63 65 20 61 6e 64 20 77 69 74 68 20 6c 61  pace and with la
11a00 72 67 65 20 6e 45 71 20 76 61 6c 75 65 73 2e 0a  rge nEq values..
11a10 0a 3c 70 3e 5e 28 49 6e 20 61 20 77 65 6c 6c 2d  .<p>^(In a well-
11a20 66 6f 72 6d 65 64 20 73 71 6c 69 74 65 5f 73 74  formed sqlite_st
11a30 61 74 34 20 74 61 62 6c 65 2c 20 74 68 65 20 73  at4 table, the s
11a40 61 6d 70 6c 65 73 20 66 6f 72 20 61 6e 79 20 73  amples for any s
11a50 69 6e 67 6c 65 0a 69 6e 64 65 78 20 6d 75 73 74  ingle.index must
11a60 20 61 70 70 65 61 72 20 69 6e 20 74 68 65 20 73   appear in the s
11a70 61 6d 65 20 6f 72 64 65 72 20 74 68 61 74 20 74  ame order that t
11a80 68 65 79 20 6f 63 63 75 72 20 69 6e 20 74 68 65  hey occur in the
11a90 20 69 6e 64 65 78 2e 20 20 0a 49 6e 20 6f 74 68   index.  .In oth
11aa0 65 72 20 77 6f 72 64 73 2c 20 69 66 20 65 6e 74  er words, if ent
11ab0 72 79 20 53 31 20 69 73 20 65 61 72 6c 69 65 72  ry S1 is earlier
11ac0 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20 62 2d   in the index b-
11ad0 74 72 65 65 20 74 68 61 6e 20 0a 65 6e 74 72 79  tree than .entry
11ae0 20 53 32 2c 20 74 68 65 6e 20 69 6e 20 74 68 65   S2, then in the
11af0 20 73 71 6c 69 74 65 5f 73 74 61 74 34 20 74 61   sqlite_stat4 ta
11b00 62 6c 65 2c 20 73 61 6d 70 6c 65 20 53 31 20 6d  ble, sample S1 m
11b10 75 73 74 20 68 61 76 65 20 61 0a 73 6d 61 6c 6c  ust have a.small
11b20 65 72 20 72 6f 77 69 64 20 74 68 61 6e 20 73 61  er rowid than sa
11b30 6d 70 6c 65 20 53 32 2e 29 5e 0a 0a 3c 74 63 6c  mple S2.)^..<tcl
11b40 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 72 6f 6c  >hd_fragment rol
11b50 6c 62 61 63 6b 6a 6f 75 72 6e 61 6c 20 7b 72 6f  lbackjournal {ro
11b60 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 66  llback journal f
11b70 6f 72 6d 61 74 7d 3c 2f 74 63 6c 3e 0a 3c 68 31  ormat}</tcl>.<h1
11b80 3e 54 68 65 20 52 6f 6c 6c 62 61 63 6b 20 4a 6f  >The Rollback Jo
11b90 75 72 6e 61 6c 3c 2f 68 31 3e 0a 0a 3c 70 3e 54  urnal</h1>..<p>T
11ba0 68 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72  he rollback jour
11bb0 6e 61 6c 20 69 73 20 61 20 66 69 6c 65 20 61 73  nal is a file as
11bc0 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 65 61  sociated with ea
11bd0 63 68 20 53 51 4c 69 74 65 20 64 61 74 61 62 61  ch SQLite databa
11be0 73 65 0a 66 69 6c 65 20 74 68 61 74 20 68 6f 6c  se.file that hol
11bf0 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73  d information us
11c00 65 64 20 74 6f 20 72 65 73 74 6f 72 65 20 74 68  ed to restore th
11c10 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
11c20 74 6f 20 69 74 73 20 69 6e 69 74 69 61 6c 0a 73  to its initial.s
11c30 74 61 74 65 20 64 75 72 69 6e 67 20 74 68 65 20  tate during the 
11c40 63 6f 75 72 73 65 20 6f 66 20 61 20 74 72 61 6e  course of a tran
11c50 73 61 63 74 69 6f 6e 2e 0a 5e 54 68 65 20 72 6f  saction..^The ro
11c60 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 66  llback journal f
11c70 69 6c 65 20 69 73 20 61 6c 77 61 79 73 20 6c 6f  ile is always lo
11c80 63 61 74 65 64 20 69 6e 20 74 68 65 20 73 61 6d  cated in the sam
11c90 65 20 0a 64 69 72 65 63 74 6f 72 79 20 61 73 20  e .directory as 
11ca0 74 68 65 20 64 61 74 61 62 61 73 65 0a 66 69 6c  the database.fil
11cb0 65 20 61 6e 64 20 68 61 73 20 74 68 65 20 73 61  e and has the sa
11cc0 6d 65 20 6e 61 6d 65 20 61 73 20 74 68 65 20 64  me name as the d
11cd0 61 74 61 62 61 73 65 20 66 69 6c 65 20 62 75 74  atabase file but
11ce0 20 77 69 74 68 20 74 68 65 20 73 74 72 69 6e 67   with the string
11cf0 0a 22 3c 74 74 3e 2d 6a 6f 75 72 6e 61 6c 3c 2f  ."<tt>-journal</
11d00 74 74 3e 22 20 61 70 70 65 6e 64 65 64 2e 20 20  tt>" appended.  
11d10 54 68 65 72 65 20 63 61 6e 20 6f 6e 6c 79 20 62  There can only b
11d20 65 20 61 20 73 69 6e 67 6c 65 20 72 6f 6c 6c 62  e a single rollb
11d30 61 63 6b 20 6a 6f 75 72 6e 61 6c 0a 61 73 73 6f  ack journal.asso
11d40 63 69 61 74 65 64 20 77 69 74 68 20 61 20 67 69  ciated with a gi
11d50 76 65 20 64 61 74 61 62 61 73 65 20 61 6e 64 20  ve database and 
11d60 68 65 6e 63 65 20 74 68 65 72 65 20 63 61 6e 20  hence there can 
11d70 6f 6e 6c 79 20 62 65 20 6f 6e 65 20 77 72 69 74  only be one writ
11d80 65 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 70  e.transaction op
11d90 65 6e 20 61 67 61 69 6e 73 74 20 61 20 73 69 6e  en against a sin
11da0 67 6c 65 20 64 61 74 61 62 61 73 65 20 61 74 20  gle database at 
11db0 6f 6e 65 20 74 69 6d 65 2e 3c 2f 70 3e 0a 0a 3c  one time.</p>..<
11dc0 70 3e 49 66 20 61 20 74 72 61 6e 73 61 63 74 69  p>If a transacti
11dd0 6f 6e 20 69 73 20 61 62 6f 72 74 65 64 20 64 75  on is aborted du
11de0 65 20 74 6f 20 61 6e 20 61 70 70 6c 69 63 61 74  e to an applicat
11df0 69 6f 6e 20 63 72 61 73 68 2c 20 61 6e 20 6f 70  ion crash, an op
11e00 65 72 61 74 69 6e 67 0a 73 79 73 74 65 6d 20 63  erating.system c
11e10 72 61 73 68 2c 20 6f 72 20 61 20 68 61 72 64 77  rash, or a hardw
11e20 61 72 65 20 70 6f 77 65 72 20 66 61 69 6c 75 72  are power failur
11e30 65 20 6f 72 20 63 72 61 73 68 2c 20 74 68 65 6e  e or crash, then
11e40 20 74 68 65 20 64 61 74 61 62 61 73 65 20 6d 61   the database ma
11e50 79 0a 62 65 20 6c 65 66 74 20 69 6e 20 61 6e 20  y.be left in an 
11e60 69 6e 63 6f 6e 73 69 73 74 65 6e 74 20 73 74 61  inconsistent sta
11e70 74 65 2e 20 20 5e 54 68 65 20 6e 65 78 74 20 74  te.  ^The next t
11e80 69 6d 65 20 53 51 4c 69 74 65 20 61 74 74 65 6d  ime SQLite attem
11e90 70 74 73 20 74 6f 20 6f 70 65 6e 0a 74 68 65 20  pts to open.the 
11ea0 64 61 74 61 62 61 73 65 20 66 69 6c 65 2c 20 74  database file, t
11eb0 68 65 20 70 72 65 73 65 6e 63 65 20 6f 66 20 74  he presence of t
11ec0 68 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72  he rollback jour
11ed0 6e 61 6c 20 66 69 6c 65 20 77 69 6c 6c 20 62 65  nal file will be
11ee0 20 0a 64 65 74 65 63 74 65 64 20 61 6e 64 20 74   .detected and t
11ef0 68 65 20 6a 6f 75 72 6e 61 6c 20 77 69 6c 6c 20  he journal will 
11f00 62 65 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  be automatically
11f10 20 70 6c 61 79 65 64 20 62 61 63 6b 20 74 6f 20   played back to 
11f20 72 65 73 74 6f 72 65 20 74 68 65 0a 64 61 74 61  restore the.data
11f30 62 61 73 65 20 74 6f 20 69 74 73 20 73 74 61 74  base to its stat
11f40 65 20 61 74 20 74 68 65 20 73 74 61 72 74 20 6f  e at the start o
11f50 66 20 74 68 65 20 69 6e 63 6f 6d 70 6c 65 74 65  f the incomplete
11f60 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 3c 2f 70   transaction.</p
11f70 3e 0a 0a 3c 70 3e 5e 41 20 72 6f 6c 6c 62 61 63  >..<p>^A rollbac
11f80 6b 20 6a 6f 75 72 6e 61 6c 20 69 73 20 6f 6e 6c  k journal is onl
11f90 79 20 63 6f 6e 73 69 64 65 72 65 64 20 74 6f 20  y considered to 
11fa0 62 65 20 76 61 6c 69 64 20 69 66 20 69 74 20 65  be valid if it e
11fb0 78 69 73 74 73 20 61 6e 64 0a 63 6f 6e 74 61 69  xists and.contai
11fc0 6e 73 20 61 20 76 61 6c 69 64 20 68 65 61 64 65  ns a valid heade
11fd0 72 2e 20 20 48 65 6e 63 65 20 61 20 74 72 61 6e  r.  Hence a tran
11fe0 73 61 63 74 69 6f 6e 20 63 61 6e 20 62 65 20 63  saction can be c
11ff0 6f 6d 6d 69 74 74 65 64 20 69 6e 20 6f 6e 65 0a  ommitted in one.
12000 6f 66 20 74 68 72 65 65 20 77 61 79 73 3a 0a 3c  of three ways:.<
12010 6f 6c 3e 0a 3c 6c 69 3e 5e 28 54 68 65 20 72 6f  ol>.<li>^(The ro
12020 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 66  llback journal f
12030 69 6c 65 20 63 61 6e 20 62 65 20 64 65 6c 65 74  ile can be delet
12040 65 64 29 5e 2c 0a 3c 6c 69 3e 5e 28 54 68 65 20  ed)^,.<li>^(The 
12050 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c  rollback journal
12060 20 66 69 6c 65 20 63 61 6e 20 62 65 20 74 72 75   file can be tru
12070 6e 63 61 74 65 64 20 74 6f 20 7a 65 72 6f 20 6c  ncated to zero l
12080 65 6e 67 74 68 29 5e 2c 20 6f 72 0a 3c 6c 69 3e  ength)^, or.<li>
12090 5e 28 54 68 65 20 68 65 61 64 65 72 20 6f 66 20  ^(The header of 
120a0 74 68 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75  the rollback jou
120b0 72 6e 61 6c 20 63 61 6e 20 62 65 20 6f 76 65 72  rnal can be over
120c0 77 72 69 74 74 65 6e 20 77 69 74 68 0a 69 6e 76  written with.inv
120d0 61 6c 69 64 20 68 65 61 64 65 72 20 74 65 78 74  alid header text
120e0 20 28 66 6f 72 20 65 78 61 6d 70 6c 65 2c 20 61   (for example, a
120f0 6c 6c 20 7a 65 72 6f 73 29 2e 29 5e 0a 3c 2f 6f  ll zeros).)^.</o
12100 6c 3e 0a 3c 70 3e 0a 5e 54 68 65 73 65 20 74 68  l>.<p>.^These th
12110 72 65 65 20 77 61 79 73 20 6f 66 20 63 6f 6d 6d  ree ways of comm
12120 69 74 74 69 6e 67 20 61 20 74 72 61 6e 73 61 63  itting a transac
12130 74 69 6f 6e 20 63 6f 72 72 65 73 70 6f 6e 64 20  tion correspond 
12140 74 6f 20 74 68 65 20 44 45 4c 45 54 45 2c 0a 54  to the DELETE,.T
12150 52 55 4e 43 41 54 45 2c 20 61 6e 64 20 50 45 52  RUNCATE, and PER
12160 53 49 53 54 20 73 65 74 74 69 6e 67 73 2c 20 72  SIST settings, r
12170 65 73 70 65 63 74 69 76 65 6c 79 2c 20 6f 66 20  espectively, of 
12180 74 68 65 20 5b 6a 6f 75 72 6e 61 6c 5f 6d 6f 64  the [journal_mod
12190 65 20 70 72 61 67 6d 61 5d 2e 0a 3c 2f 70 3e 0a  e pragma]..</p>.
121a0 0a 0a 3c 70 3e 41 20 76 61 6c 69 64 20 72 6f 6c  ..<p>A valid rol
121b0 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 62 65  lback journal be
121c0 67 69 6e 73 20 77 69 74 68 20 61 20 68 65 61 64  gins with a head
121d0 65 72 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77  er in the follow
121e0 69 6e 67 20 66 6f 72 6d 61 74 3a 3c 2f 70 3e 0a  ing format:</p>.
121f0 0a 3c 63 65 6e 74 65 72 3e 0a 3c 69 3e 52 6f 6c  .<center>.<i>Rol
12200 6c 62 61 63 6b 20 4a 6f 75 72 6e 61 6c 20 48 65  lback Journal He
12210 61 64 65 72 20 46 6f 72 6d 61 74 3c 2f 69 3e 3c  ader Format</i><
12220 62 72 3e 0a 3c 74 61 62 6c 65 20 77 69 64 74 68  br>.<table width
12230 3d 22 38 30 25 22 20 62 6f 72 64 65 72 3d 31 3e  ="80%" border=1>
12240 0a 3c 74 72 3e 3c 74 68 3e 4f 66 66 73 65 74 3c  .<tr><th>Offset<
12250 74 68 3e 53 69 7a 65 3c 74 68 3e 44 65 73 63 72  th>Size<th>Descr
12260 69 70 74 69 6f 6e 0a 3c 74 72 3e 3c 74 64 20 76  iption.<tr><td v
12270 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
12280 63 65 6e 74 65 72 3e 30 0a 20 20 20 20 3c 74 64  center>0.    <td
12290 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
122a0 6e 3d 63 65 6e 74 65 72 3e 38 0a 20 20 20 20 3c  n=center>8.    <
122b0 74 64 3e 48 65 61 64 65 72 20 73 74 72 69 6e 67  td>Header string
122c0 3a 20 20 30 78 64 39 2c 20 30 78 64 35 2c 20 30  :  0xd9, 0xd5, 0
122d0 78 30 35 2c 20 30 78 66 39 2c 20 30 78 32 30 2c  x05, 0xf9, 0x20,
122e0 20 30 78 61 31 2c 20 30 78 36 33 2c 20 30 78 64   0xa1, 0x63, 0xd
122f0 37 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  7.<tr><td valign
12300 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
12310 72 3e 38 0a 20 20 20 20 3c 74 64 20 76 61 6c 69  r>8.    <td vali
12320 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
12330 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 54 68  ter>4.    <td>Th
12340 65 20 22 50 61 67 65 20 43 6f 75 6e 74 22 20 2d  e "Page Count" -
12350 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70   The number of p
12360 61 67 65 73 20 69 6e 20 74 68 65 20 6e 65 78 74  ages in the next
12370 20 73 65 67 6d 65 6e 74 20 6f 66 20 74 68 65 20   segment of the 
12380 0a 20 20 20 20 20 20 20 20 6a 6f 75 72 6e 61 6c  .        journal
12390 2c 20 6f 72 20 2d 31 20 74 6f 0a 20 20 20 20 20  , or -1 to.     
123a0 20 20 20 6d 65 61 6e 20 61 6c 6c 20 63 6f 6e 74     mean all cont
123b0 65 6e 74 20 74 6f 20 74 68 65 20 65 6e 64 20 6f  ent to the end o
123c0 66 20 74 68 65 20 66 69 6c 65 0a 3c 74 72 3e 3c  f the file.<tr><
123d0 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
123e0 69 67 6e 3d 63 65 6e 74 65 72 3e 31 32 0a 20 20  ign=center>12.  
123f0 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70    <td valign=top
12400 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a   align=center>4.
12410 20 20 20 20 3c 74 64 3e 41 20 72 61 6e 64 6f 6d      <td>A random
12420 20 6e 6f 6e 63 65 20 66 6f 72 20 74 68 65 20 63   nonce for the c
12430 68 65 63 6b 73 75 6d 0a 3c 74 72 3e 3c 74 64 20  hecksum.<tr><td 
12440 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
12450 3d 63 65 6e 74 65 72 3e 31 36 0a 20 20 20 20 3c  =center>16.    <
12460 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
12470 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20  ign=center>4.   
12480 20 3c 74 64 3e 49 6e 69 74 69 61 6c 20 73 69 7a   <td>Initial siz
12490 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  e of the databas
124a0 65 20 69 6e 20 70 61 67 65 73 0a 3c 74 72 3e 3c  e in pages.<tr><
124b0 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
124c0 69 67 6e 3d 63 65 6e 74 65 72 3e 32 30 0a 20 20  ign=center>20.  
124d0 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70    <td valign=top
124e0 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a   align=center>4.
124f0 20 20 20 20 3c 74 64 3e 53 69 7a 65 20 6f 66 20      <td>Size of 
12500 61 20 64 69 73 6b 20 73 65 63 74 6f 72 20 61 73  a disk sector as
12510 73 75 6d 65 64 20 62 79 20 74 68 65 20 70 72 6f  sumed by the pro
12520 63 65 73 73 20 74 68 61 74 20 77 72 6f 74 65 20  cess that wrote 
12530 74 68 69 73 0a 20 20 20 20 20 20 20 20 6a 6f 75  this.        jou
12540 72 6e 61 6c 2e 0a 3c 74 72 3e 3c 74 64 20 76 61  rnal..<tr><td va
12550 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
12560 65 6e 74 65 72 3e 32 34 0a 20 20 20 20 3c 74 64  enter>24.    <td
12570 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
12580 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c  n=center>4.    <
12590 74 64 3e 53 69 7a 65 20 6f 66 20 70 61 67 65 73  td>Size of pages
125a0 20 69 6e 20 74 68 69 73 20 6a 6f 75 72 6e 61 6c   in this journal
125b0 2e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 63 65 6e  ..</table>.</cen
125c0 74 65 72 3e 0a 0a 3c 70 3e 5e 41 20 72 6f 6c 6c  ter>..<p>^A roll
125d0 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 68 65 61  back journal hea
125e0 64 65 72 20 69 73 20 70 61 64 64 65 64 20 77 69  der is padded wi
125f0 74 68 20 7a 65 72 6f 73 20 6f 75 74 20 74 6f 20  th zeros out to 
12600 74 68 65 20 73 69 7a 65 20 6f 66 20 61 20 0a 73  the size of a .s
12610 69 6e 67 6c 65 20 73 65 63 74 6f 72 20 28 61 73  ingle sector (as
12620 20 64 65 66 69 6e 65 64 20 62 79 20 74 68 65 20   defined by the 
12630 73 65 63 74 6f 72 20 73 69 7a 65 20 69 6e 74 65  sector size inte
12640 67 65 72 20 61 74 20 6f 66 66 73 65 74 20 32 30  ger at offset 20
12650 29 2e 0a 54 68 65 20 68 65 61 64 65 72 20 69 73  )..The header is
12660 20 69 6e 20 61 20 73 65 63 74 6f 72 20 62 79 20   in a sector by 
12670 69 74 73 65 6c 66 20 73 6f 20 74 68 61 74 20 69  itself so that i
12680 66 20 61 20 70 6f 77 65 72 20 6c 6f 73 73 20 6f  f a power loss o
12690 63 63 75 72 73 20 77 68 69 6c 65 0a 77 72 69 74  ccurs while.writ
126a0 69 6e 67 20 74 68 65 20 73 65 63 74 6f 72 2c 20  ing the sector, 
126b0 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74  information that
126c0 20 66 6f 6c 6c 6f 77 73 20 74 68 65 20 68 65 61   follows the hea
126d0 64 65 72 20 77 69 6c 6c 20 62 65 0a 28 68 6f 70  der will be.(hop
126e0 65 66 75 6c 6c 79 29 20 75 6e 64 61 6d 61 67 65  efully) undamage
126f0 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 66 74 65  d.</p>..<p>^Afte
12700 72 20 74 68 65 20 68 65 61 64 65 72 20 61 6e 64  r the header and
12710 20 7a 65 72 6f 20 70 61 64 64 69 6e 67 20 61 72   zero padding ar
12720 65 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 70  e zero or more p
12730 61 67 65 20 72 65 63 6f 72 64 73 2e 20 20 5e 45  age records.  ^E
12740 61 63 68 0a 70 61 67 65 20 72 65 63 6f 72 64 20  ach.page record 
12750 73 74 6f 72 65 73 20 61 20 63 6f 70 79 20 6f 66  stores a copy of
12760 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
12770 61 20 70 61 67 65 20 66 72 6f 6d 20 74 68 65 20  a page from the 
12780 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 62 65  database file.be
12790 66 6f 72 65 20 69 74 20 77 61 73 20 63 68 61 6e  fore it was chan
127a0 67 65 64 2e 20 20 5e 54 68 65 20 73 61 6d 65 20  ged.  ^The same 
127b0 70 61 67 65 20 6d 61 79 20 6e 6f 74 20 61 70 70  page may not app
127c0 65 61 72 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e  ear more than on
127d0 63 65 0a 77 69 74 68 69 6e 20 61 20 73 69 6e 67  ce.within a sing
127e0 6c 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72  le rollback jour
127f0 6e 61 6c 2e 0a 54 6f 20 72 6f 6c 6c 62 61 63 6b  nal..To rollback
12800 20 61 6e 20 69 6e 63 6f 6d 70 6c 65 74 65 20 74   an incomplete t
12810 72 61 6e 73 61 63 74 69 6f 6e 2c 20 61 20 70 72  ransaction, a pr
12820 6f 63 65 73 73 0a 68 61 73 20 6d 65 72 65 6c 79  ocess.has merely
12830 20 74 6f 20 72 65 61 64 20 74 68 65 20 72 6f 6c   to read the rol
12840 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 66 72  lback journal fr
12850 6f 6d 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 20  om beginning to 
12860 65 6e 64 20 61 6e 64 0a 77 72 69 74 65 20 70 61  end and.write pa
12870 67 65 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65  ges found in the
12880 20 6a 6f 75 72 6e 61 6c 20 62 61 63 6b 20 69 6e   journal back in
12890 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20  to the database 
128a0 66 69 6c 65 20 61 74 20 74 68 65 0a 61 70 70 72  file at the.appr
128b0 6f 70 72 69 61 74 65 20 6c 6f 63 61 74 69 6f 6e  opriate location
128c0 2e 3c 2f 70 3e 0a 0a 3c 70 3e 4c 65 74 20 74 68  .</p>..<p>Let th
128d0 65 20 64 61 74 61 62 61 73 65 20 70 61 67 65 20  e database page 
128e0 73 69 7a 65 20 28 74 68 65 20 76 61 6c 75 65 20  size (the value 
128f0 6f 66 20 74 68 65 20 69 6e 74 65 67 65 72 20 61  of the integer a
12900 74 20 6f 66 66 73 65 74 20 32 34 20 0a 69 6e 20  t offset 24 .in 
12910 74 68 65 20 6a 6f 75 72 6e 61 6c 20 68 65 61 64  the journal head
12920 65 72 29 20 62 65 20 4e 2e 0a 54 68 65 6e 20 74  er) be N..Then t
12930 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 61 20 70  he format of a p
12940 61 67 65 20 72 65 63 6f 72 64 20 69 73 20 61 73  age record is as
12950 20 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c   follows:</p>..<
12960 63 65 6e 74 65 72 3e 0a 3c 69 3e 52 6f 6c 6c 62  center>.<i>Rollb
12970 61 63 6b 20 4a 6f 75 72 6e 61 6c 20 50 61 67 65  ack Journal Page
12980 20 52 65 63 6f 72 64 20 46 6f 72 6d 61 74 3c 2f   Record Format</
12990 69 3e 3c 62 72 3e 0a 3c 74 61 62 6c 65 20 77 69  i><br>.<table wi
129a0 64 74 68 3d 22 38 30 25 22 20 62 6f 72 64 65 72  dth="80%" border
129b0 3d 31 3e 0a 3c 74 72 3e 3c 74 68 3e 4f 66 66 73  =1>.<tr><th>Offs
129c0 65 74 3c 74 68 3e 53 69 7a 65 3c 74 68 3e 44 65  et<th>Size<th>De
129d0 73 63 72 69 70 74 69 6f 6e 0a 3c 74 72 3e 3c 74  scription.<tr><t
129e0 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
129f0 67 6e 3d 63 65 6e 74 65 72 3e 30 0a 20 20 20 20  gn=center>0.    
12a00 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
12a10 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20  lign=center>4.  
12a20 20 20 3c 74 64 3e 54 68 65 20 70 61 67 65 20 6e    <td>The page n
12a30 75 6d 62 65 72 20 69 6e 20 74 68 65 20 64 61 74  umber in the dat
12a40 61 62 61 73 65 20 66 69 6c 65 0a 3c 74 72 3e 3c  abase file.<tr><
12a50 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
12a60 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20  ign=center>4.   
12a70 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20   <td valign=top 
12a80 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 4e 0a 20  align=center>N. 
12a90 20 20 20 3c 74 64 3e 4f 72 69 67 69 6e 61 6c 20     <td>Original 
12aa0 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65 20 70  content of the p
12ab0 61 67 65 20 70 72 69 6f 72 20 74 6f 20 74 68 65  age prior to the
12ac0 20 73 74 61 72 74 20 6f 66 20 74 68 65 20 74 72   start of the tr
12ad0 61 6e 73 61 63 74 69 6f 6e 0a 3c 74 72 3e 3c 74  ansaction.<tr><t
12ae0 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
12af0 67 6e 3d 63 65 6e 74 65 72 3e 4e 2b 34 0a 20 20  gn=center>N+4.  
12b00 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70    <td valign=top
12b10 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a   align=center>4.
12b20 20 20 20 20 3c 74 64 3e 43 68 65 63 6b 73 75 6d      <td>Checksum
12b30 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 63 65 6e 74  .</table>.</cent
12b40 65 72 3e 0a 0a 0a 3c 70 3e 5e 28 54 68 65 20 63  er>...<p>^(The c
12b50 68 65 63 6b 73 75 6d 20 69 73 20 61 6e 20 75 6e  hecksum is an un
12b60 73 69 67 6e 65 64 20 33 32 2d 62 69 74 20 69 6e  signed 32-bit in
12b70 74 65 67 65 72 20 63 6f 6d 70 75 74 65 64 20 61  teger computed a
12b80 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a  s follows:</p>..
12b90 3c 6f 6c 3e 0a 3c 6c 69 3e 49 6e 69 74 69 61 6c  <ol>.<li>Initial
12ba0 69 7a 65 20 74 68 65 20 63 68 65 63 6b 73 75 6d  ize the checksum
12bb0 20 74 6f 20 74 68 65 20 63 68 65 63 6b 73 75 6d   to the checksum
12bc0 20 6e 6f 6e 63 65 20 76 61 6c 75 65 20 66 6f 75   nonce value fou
12bd0 6e 64 20 69 6e 20 74 68 65 0a 6a 6f 75 72 6e 61  nd in the.journa
12be0 6c 20 68 65 61 64 65 72 20 61 74 20 6f 66 66 73  l header at offs
12bf0 65 74 20 31 32 2e 0a 3c 6c 69 3e 49 6e 69 74 69  et 12..<li>Initi
12c00 61 6c 69 7a 65 20 69 6e 64 65 78 20 58 20 74 6f  alize index X to
12c10 20 62 65 20 4e 2d 32 30 30 20 28 77 68 65 72 65   be N-200 (where
12c20 20 4e 20 69 73 20 74 68 65 20 73 69 7a 65 20 6f   N is the size o
12c30 66 20 61 20 64 61 74 61 62 61 73 65 20 70 61 67  f a database pag
12c40 65 0a 69 6e 20 62 79 74 65 73 2e 0a 3c 6c 69 3e  e.in bytes..<li>
12c50 49 6e 74 65 72 70 72 65 74 20 74 68 65 20 66 6f  Interpret the fo
12c60 75 72 20 62 79 74 65 73 20 61 74 20 6f 66 66 73  ur bytes at offs
12c70 65 74 20 58 20 69 6e 74 6f 20 74 68 65 20 70 61  et X into the pa
12c80 67 65 20 61 73 20 61 20 34 2d 62 79 74 65 20 62  ge as a 4-byte b
12c90 69 67 2d 65 6e 64 69 61 6e 0a 75 6e 73 69 67 6e  ig-endian.unsign
12ca0 65 64 20 69 6e 74 65 67 65 72 2e 20 20 41 64 64  ed integer.  Add
12cb0 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
12cc0 61 74 20 69 6e 74 65 67 65 72 20 74 6f 20 74 68  at integer to th
12cd0 65 20 63 68 65 63 6b 73 75 6d 2e 0a 3c 6c 69 3e  e checksum..<li>
12ce0 53 75 62 74 72 61 63 65 20 32 30 30 20 66 72 6f  Subtrace 200 fro
12cf0 6d 20 58 2e 0a 3c 6c 69 3e 49 66 20 58 20 69 73  m X..<li>If X is
12d00 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72   greater than or
12d10 20 65 71 75 61 6c 20 74 6f 20 7a 65 72 6f 2c 20   equal to zero, 
12d20 67 6f 20 62 61 63 6b 20 74 6f 20 73 74 65 70 20  go back to step 
12d30 33 2e 0a 3c 2f 6f 6c 3e 29 5e 0a 0a 3c 70 3e 54  3..</ol>)^..<p>T
12d40 68 65 20 63 68 65 63 6b 73 75 6d 20 76 61 6c 75  he checksum valu
12d50 65 20 69 73 20 75 73 65 64 20 74 6f 20 67 75 61  e is used to gua
12d60 72 64 20 61 67 61 69 6e 73 74 20 69 6e 63 6f 6d  rd against incom
12d70 70 6c 65 74 65 20 77 72 69 74 65 73 20 6f 66 0a  plete writes of.
12d80 61 20 6a 6f 75 72 6e 61 6c 20 70 61 67 65 20 72  a journal page r
12d90 65 63 6f 72 64 20 66 6f 6c 6c 6f 77 69 6e 67 20  ecord following 
12da0 61 20 70 6f 77 65 72 20 66 61 69 6c 75 72 65 2e  a power failure.
12db0 20 20 41 20 64 69 66 66 65 72 65 6e 74 20 72 61    A different ra
12dc0 6e 64 6f 6d 20 6e 6f 6e 63 65 0a 69 73 20 75 73  ndom nonce.is us
12dd0 65 64 20 65 61 63 68 20 74 69 6d 65 20 61 20 74  ed each time a t
12de0 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74  ransaction is st
12df0 61 72 74 65 64 20 69 6e 20 6f 72 64 65 72 20 74  arted in order t
12e00 6f 20 6d 69 6e 69 6d 69 7a 65 20 74 68 65 20 72  o minimize the r
12e10 69 73 6b 0a 74 68 61 74 20 75 6e 77 72 69 74 74  isk.that unwritt
12e20 65 6e 20 73 65 63 74 6f 72 73 20 6d 69 67 68 74  en sectors might
12e30 20 62 79 20 63 68 61 6e 63 65 20 63 6f 6e 74 61   by chance conta
12e40 69 6e 20 64 61 74 61 20 66 72 6f 6d 20 74 68 65  in data from the
12e50 20 73 61 6d 65 20 70 61 67 65 0a 74 68 61 74 20   same page.that 
12e60 77 61 73 20 61 20 70 61 72 74 20 6f 66 20 70 72  was a part of pr
12e70 69 6f 72 20 6a 6f 75 72 6e 61 6c 73 2e 20 20 42  ior journals.  B
12e80 79 20 63 68 61 6e 67 69 6e 67 20 74 68 65 20 6e  y changing the n
12e90 6f 6e 63 65 20 66 6f 72 20 65 61 63 68 0a 74 72  once for each.tr
12ea0 61 6e 73 61 63 74 69 6f 6e 2c 20 73 74 61 6c 65  ansaction, stale
12eb0 20 64 61 74 61 20 6f 6e 20 64 69 73 6b 20 77 69   data on disk wi
12ec0 6c 6c 20 73 74 69 6c 6c 20 67 65 6e 65 72 61 74  ll still generat
12ed0 65 20 61 6e 20 69 6e 63 6f 72 72 65 63 74 20 63  e an incorrect c
12ee0 68 65 63 6b 73 75 6d 0a 61 6e 64 20 62 65 20 64  hecksum.and be d
12ef0 65 74 65 63 74 65 64 20 77 69 74 68 20 68 69 67  etected with hig
12f00 68 20 70 72 6f 62 61 62 69 6c 69 74 79 2e 20 20  h probability.  
12f10 54 68 65 20 63 68 65 63 6b 73 75 6d 20 6f 6e 6c  The checksum onl
12f20 79 20 75 73 65 73 20 61 20 73 70 61 72 73 65 20  y uses a sparse 
12f30 73 61 6d 70 6c 65 0a 6f 66 20 33 32 2d 62 69 74  sample.of 32-bit
12f40 20 77 6f 72 64 73 20 66 72 6f 6d 20 74 68 65 20   words from the 
12f50 64 61 74 61 20 72 65 63 6f 72 64 20 66 6f 72 20  data record for 
12f60 70 65 72 66 6f 72 6d 61 6e 63 65 20 72 65 61 73  performance reas
12f70 6f 6e 73 20 2d 20 64 65 73 69 67 6e 20 73 74 75  ons - design stu
12f80 64 69 65 73 20 0a 64 75 72 69 6e 67 20 74 68 65  dies .during the
12f90 20 70 6c 61 6e 6e 69 6e 67 20 70 68 61 73 65 73   planning phases
12fa0 20 6f 66 20 53 51 4c 69 74 65 20 33 2e 30 2e 30   of SQLite 3.0.0
12fb0 20 73 68 6f 77 65 64 0a 61 20 73 69 67 6e 69 66   showed.a signif
12fc0 69 63 61 6e 74 20 70 65 72 66 6f 72 6d 61 6e 63  icant performanc
12fd0 65 20 68 69 74 20 69 6e 20 63 68 65 63 6b 73 75  e hit in checksu
12fe0 6d 6d 69 6e 67 20 74 68 65 20 65 6e 74 69 72 65  mming the entire
12ff0 20 70 61 67 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 4c   page.</p>..<p>L
13000 65 74 20 74 68 65 20 70 61 67 65 20 63 6f 75 6e  et the page coun
13010 74 20 76 61 6c 75 65 20 61 74 20 6f 66 66 73 65  t value at offse
13020 74 20 38 20 69 6e 20 74 68 65 20 6a 6f 75 72 6e  t 8 in the journ
13030 61 6c 20 68 65 61 64 65 72 20 62 65 20 4d 2e 0a  al header be M..
13040 5e 49 66 20 4d 20 69 73 20 67 72 65 61 74 65 72  ^If M is greater
13050 20 74 68 61 6e 20 7a 65 72 6f 20 74 68 65 6e 20   than zero then 
13060 61 66 74 65 72 20 4d 20 70 61 67 65 20 72 65 63  after M page rec
13070 6f 72 64 73 20 74 68 65 20 6a 6f 75 72 6e 61 6c  ords the journal
13080 20 66 69 6c 65 0a 6d 61 79 20 62 65 20 7a 65 72   file.may be zer
13090 6f 20 70 61 64 64 65 64 20 6f 75 74 20 74 6f 20  o padded out to 
130a0 74 68 65 20 6e 65 78 74 20 6d 75 6c 74 69 70 6c  the next multipl
130b0 65 20 6f 66 20 74 68 65 20 73 65 63 74 6f 72 20  e of the sector 
130c0 73 69 7a 65 20 61 6e 64 20 61 6e 6f 74 68 65 72  size and another
130d0 0a 6a 6f 75 72 6e 61 6c 20 68 65 61 64 65 72 20  .journal header 
130e0 6d 61 79 20 62 65 20 69 6e 73 65 72 74 65 64 2e  may be inserted.
130f0 20 20 5e 41 6c 6c 20 6a 6f 75 72 6e 61 6c 20 68    ^All journal h
13100 65 61 64 65 72 73 20 77 69 74 68 69 6e 20 74 68  eaders within th
13110 65 20 73 61 6d 65 0a 6a 6f 75 72 6e 61 6c 20 6d  e same.journal m
13120 75 73 74 20 63 6f 6e 74 61 69 6e 20 74 68 65 20  ust contain the 
13130 73 61 6d 65 20 64 61 74 61 62 61 73 65 20 70 61  same database pa
13140 67 65 20 73 69 7a 65 20 61 6e 64 20 73 65 63 74  ge size and sect
13150 6f 72 20 73 69 7a 65 2e 3c 2f 70 3e 0a 0a 3c 70  or size.</p>..<p
13160 3e 5e 49 66 20 4d 20 69 73 20 2d 31 20 69 6e 20  >^If M is -1 in 
13170 74 68 65 20 69 6e 69 74 69 61 6c 20 6a 6f 75 72  the initial jour
13180 6e 61 6c 20 68 65 61 64 65 72 2c 20 74 68 65 6e  nal header, then
13190 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70   the number of p
131a0 61 67 65 20 72 65 63 6f 72 64 73 0a 74 68 61 74  age records.that
131b0 20 66 6f 6c 6c 6f 77 20 69 73 20 63 6f 6d 70 75   follow is compu
131c0 74 65 64 20 62 79 20 63 6f 6d 70 75 74 69 6e 67  ted by computing
131d0 20 68 6f 77 20 6d 61 6e 79 20 70 61 67 65 20 72   how many page r
131e0 65 63 6f 72 64 73 20 77 69 6c 6c 20 66 69 74 20  ecords will fit 
131f0 69 6e 0a 74 68 65 20 61 76 61 69 6c 61 62 6c 65  in.the available
13200 20 73 70 61 63 65 20 6f 66 20 74 68 65 20 72 65   space of the re
13210 6d 61 69 6e 64 65 72 20 6f 66 20 74 68 65 20 6a  mainder of the j
13220 6f 75 72 6e 61 6c 20 66 69 6c 65 2e 3c 2f 70 3e  ournal file.</p>
13230 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
13240 6e 74 20 77 61 6c 66 6f 72 6d 61 74 20 7b 57 41  nt walformat {WA
13250 4c 20 66 6f 72 6d 61 74 7d 3c 2f 74 63 6c 3e 0a  L format}</tcl>.
13260 3c 68 31 3e 54 68 65 20 57 72 69 74 65 2d 41 68  <h1>The Write-Ah
13270 65 61 64 20 4c 6f 67 3c 2f 68 31 3e 0a 0a 3c 70  ead Log</h1>..<p
13280 3e 42 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20  >Beginning with 
13290 5b 76 65 72 73 69 6f 6e 20 33 2e 37 2e 30 5d 2c  [version 3.7.0],
132a0 20 53 51 4c 69 74 65 20 73 75 70 70 6f 72 74 73   SQLite supports
132b0 20 61 20 6e 65 77 20 74 72 61 6e 73 61 63 74 69   a new transacti
132c0 6f 6e 0a 63 6f 6e 74 72 6f 6c 20 6d 65 63 68 61  on.control mecha
132d0 6e 69 73 6d 20 63 61 6c 6c 65 64 20 22 5b 57 41  nism called "[WA
132e0 4c 20 7c 20 77 72 69 74 65 2d 61 68 65 61 64 20  L | write-ahead 
132f0 6c 6f 67 5d 22 20 6f 72 20 22 5b 57 41 4c 5d 22  log]" or "[WAL]"
13300 2e 0a 5e 57 68 65 6e 20 61 20 64 61 74 61 62 61  ..^When a databa
13310 73 65 20 69 73 20 69 6e 20 57 41 4c 20 6d 6f 64  se is in WAL mod
13320 65 2c 20 61 6c 6c 20 63 6f 6e 6e 65 63 74 69 6f  e, all connectio
13330 6e 73 20 74 6f 20 74 68 61 74 20 64 61 74 61 62  ns to that datab
13340 61 73 65 20 6d 75 73 74 0a 75 73 65 20 74 68 65  ase must.use the
13350 20 57 41 4c 2e 20 20 5e 41 20 70 61 72 74 69 63   WAL.  ^A partic
13360 75 6c 61 72 20 64 61 74 61 62 61 73 65 20 77 69  ular database wi
13370 6c 6c 20 75 73 65 20 65 69 74 68 65 72 20 61 20  ll use either a 
13380 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c  rollback journal
13390 0a 6f 72 20 61 20 57 41 4c 2c 20 62 75 74 20 6e  .or a WAL, but n
133a0 6f 74 20 62 6f 74 68 20 61 74 20 74 68 65 20 73  ot both at the s
133b0 61 6d 65 20 74 69 6d 65 2e 0a 5e 54 68 65 20 57  ame time..^The W
133c0 41 4c 20 69 73 20 61 6c 77 61 79 73 20 6c 6f 63  AL is always loc
133d0 61 74 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65  ated in the same
133e0 20 64 69 72 65 63 74 6f 72 79 20 61 73 20 74 68   directory as th
133f0 65 20 64 61 74 61 62 61 73 65 0a 66 69 6c 65 20  e database.file 
13400 61 6e 64 20 68 61 73 20 74 68 65 20 73 61 6d 65  and has the same
13410 20 6e 61 6d 65 20 61 73 20 74 68 65 20 64 61 74   name as the dat
13420 61 62 61 73 65 20 66 69 6c 65 20 62 75 74 20 77  abase file but w
13430 69 74 68 20 74 68 65 20 73 74 72 69 6e 67 0a 22  ith the string."
13440 3c 74 74 3e 2d 77 61 6c 3c 2f 74 74 3e 22 20 61  <tt>-wal</tt>" a
13450 70 70 65 6e 64 65 64 2e 3c 2f 70 3e 0a 0a 3c 68  ppended.</p>..<h
13460 32 3e 57 41 4c 20 46 69 6c 65 20 46 6f 72 6d 61  2>WAL File Forma
13470 74 3c 2f 68 32 3e 0a 0a 3c 70 3e 41 20 57 41 4c  t</h2>..<p>A WAL
13480 20 66 69 6c 65 20 63 6f 6e 73 69 73 74 73 20 6f   file consists o
13490 66 20 61 20 68 65 61 64 65 72 20 66 6f 6c 6c 6f  f a header follo
134a0 77 65 64 20 62 79 20 7a 65 72 6f 20 6f 72 20 6d  wed by zero or m
134b0 6f 72 65 20 22 66 72 61 6d 65 73 22 2e 0a 45 61  ore "frames"..Ea
134c0 63 68 20 66 72 61 6d 65 20 72 65 63 6f 72 64 73  ch frame records
134d0 20 74 68 65 20 72 65 76 69 73 65 64 20 63 6f 6e   the revised con
134e0 74 65 6e 74 20 6f 66 20 61 20 73 69 6e 67 6c 65  tent of a single
134f0 20 70 61 67 65 20 66 72 6f 6d 20 74 68 65 0a 64   page from the.d
13500 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 20 41  atabase file.  A
13510 6c 6c 20 63 68 61 6e 67 65 73 20 74 6f 20 74 68  ll changes to th
13520 65 20 64 61 74 61 62 61 73 65 20 61 72 65 20 72  e database are r
13530 65 63 6f 72 64 65 64 20 62 79 20 77 72 69 74 69  ecorded by writi
13540 6e 67 0a 66 72 61 6d 65 73 20 69 6e 74 6f 20 74  ng.frames into t
13550 68 65 20 57 41 4c 2e 20 20 54 72 61 6e 73 61 63  he WAL.  Transac
13560 74 69 6f 6e 73 20 63 6f 6d 6d 69 74 20 77 68 65  tions commit whe
13570 6e 20 61 20 66 72 61 6d 65 20 69 73 20 77 72 69  n a frame is wri
13580 74 74 65 6e 20 74 68 61 74 0a 63 6f 6e 74 61 69  tten that.contai
13590 6e 73 20 61 20 63 6f 6d 6d 69 74 20 6d 61 72 6b  ns a commit mark
135a0 65 72 2e 20 20 5e 41 20 73 69 6e 67 6c 65 20 57  er.  ^A single W
135b0 41 4c 20 63 61 6e 20 61 6e 64 20 75 73 75 61 6c  AL can and usual
135c0 6c 79 20 64 6f 65 73 20 72 65 63 6f 72 64 20 0a  ly does record .
135d0 6d 75 6c 74 69 70 6c 65 20 74 72 61 6e 73 61 63  multiple transac
135e0 74 69 6f 6e 73 2e 20 20 50 65 72 69 6f 64 69 63  tions.  Periodic
135f0 61 6c 6c 79 2c 20 74 68 65 20 63 6f 6e 74 65 6e  ally, the conten
13600 74 20 6f 66 20 74 68 65 20 57 41 4c 20 69 73 0a  t of the WAL is.
13610 74 72 61 6e 73 66 65 72 72 65 64 20 62 61 63 6b  transferred back
13620 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61 62 61   into the databa
13630 73 65 20 66 69 6c 65 20 69 6e 20 61 6e 20 6f 70  se file in an op
13640 65 72 61 74 69 6f 6e 20 63 61 6c 6c 65 64 20 61  eration called a
13650 0a 22 63 68 65 63 6b 70 6f 69 6e 74 22 2e 3c 2f  ."checkpoint".</
13660 70 3e 0a 0a 3c 70 3e 5e 41 20 73 69 6e 67 6c 65  p>..<p>^A single
13670 20 57 41 4c 20 66 69 6c 65 20 63 61 6e 20 62 65   WAL file can be
13680 20 72 65 75 73 65 64 20 6d 75 6c 74 69 70 6c 65   reused multiple
13690 20 74 69 6d 65 73 2e 20 20 5e 49 6e 20 6f 74 68   times.  ^In oth
136a0 65 72 20 77 6f 72 64 73 2c 20 74 68 65 0a 57 41  er words, the.WA
136b0 4c 20 63 61 6e 20 66 69 6c 6c 20 75 70 20 77 69  L can fill up wi
136c0 74 68 20 66 72 61 6d 65 73 20 61 6e 64 20 74 68  th frames and th
136d0 65 6e 20 62 65 20 63 68 65 63 6b 70 6f 69 6e 74  en be checkpoint
136e0 65 64 20 61 6e 64 20 74 68 65 6e 20 6e 65 77 0a  ed and then new.
136f0 66 72 61 6d 65 73 20 63 61 6e 20 6f 76 65 72 77  frames can overw
13700 72 69 74 65 20 74 68 65 20 6f 6c 64 20 6f 6e 65  rite the old one
13710 73 2e 20 20 5e 41 20 57 41 4c 20 61 6c 77 61 79  s.  ^A WAL alway
13720 73 20 67 72 6f 77 73 20 66 72 6f 6d 20 62 65 67  s grows from beg
13730 69 6e 6e 69 6e 67 0a 74 6f 77 61 72 64 20 74 68  inning.toward th
13740 65 20 65 6e 64 2e 20 20 43 68 65 63 6b 73 75 6d  e end.  Checksum
13750 73 20 61 6e 64 20 63 6f 75 6e 74 65 72 73 20 61  s and counters a
13760 74 74 61 63 68 65 64 20 74 6f 20 65 61 63 68 20  ttached to each 
13770 66 72 61 6d 65 20 61 72 65 0a 75 73 65 64 20 74  frame are.used t
13780 6f 20 64 65 74 65 72 6d 69 6e 65 20 77 68 69 63  o determine whic
13790 68 20 66 72 61 6d 65 73 20 77 69 74 68 69 6e 20  h frames within 
137a0 74 68 65 20 57 41 4c 20 61 72 65 20 76 61 6c 69  the WAL are vali
137b0 64 20 61 6e 64 20 77 68 69 63 68 0a 61 72 65 20  d and which.are 
137c0 6c 65 66 74 6f 76 65 72 73 20 66 72 6f 6d 20 70  leftovers from p
137d0 72 69 6f 72 20 63 68 65 63 6b 70 6f 69 6e 74 73  rior checkpoints
137e0 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28 54 68 65 20  .</p>..<p>^(The 
137f0 57 41 4c 20 68 65 61 64 65 72 20 69 73 20 33 32  WAL header is 32
13800 20 62 79 74 65 73 20 69 6e 20 73 69 7a 65 20 61   bytes in size a
13810 6e 64 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 74  nd consists of t
13820 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 65 69 67  he following eig
13830 68 74 0a 62 69 67 2d 65 6e 64 69 61 6e 20 33 32  ht.big-endian 32
13840 2d 62 69 74 20 75 6e 73 69 67 6e 65 64 20 69 6e  -bit unsigned in
13850 74 65 67 65 72 20 76 61 6c 75 65 73 3a 3c 2f 70  teger values:</p
13860 3e 0a 0a 3c 63 65 6e 74 65 72 3e 0a 3c 69 3e 57  >..<center>.<i>W
13870 41 4c 20 48 65 61 64 65 72 20 46 6f 72 6d 61 74  AL Header Format
13880 3c 2f 69 3e 3c 62 72 3e 0a 3c 74 61 62 6c 65 20  </i><br>.<table 
13890 77 69 64 74 68 3d 22 38 30 25 22 20 62 6f 72 64  width="80%" bord
138a0 65 72 3d 31 3e 0a 3c 74 72 3e 3c 74 68 3e 4f 66  er=1>.<tr><th>Of
138b0 66 73 65 74 3c 74 68 3e 53 69 7a 65 3c 74 68 3e  fset<th>Size<th>
138c0 44 65 73 63 72 69 70 74 69 6f 6e 0a 3c 74 72 3e  Description.<tr>
138d0 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
138e0 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 30 3c 74 64  lign=center>0<td
138f0 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
13900 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c  n=center>4.    <
13910 74 64 3e 4d 61 67 69 63 20 6e 75 6d 62 65 72 2e  td>Magic number.
13920 20 20 30 78 33 37 37 66 30 36 38 32 20 6f 72 20    0x377f0682 or 
13930 30 78 33 37 37 66 30 36 38 33 0a 3c 74 72 3e 3c  0x377f0683.<tr><
13940 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
13950 69 67 6e 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20  ign=center>4<td 
13960 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
13970 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74  =center>4.    <t
13980 64 3e 46 69 6c 65 20 66 6f 72 6d 61 74 20 76 65  d>File format ve
13990 72 73 69 6f 6e 2e 20 20 43 75 72 72 65 6e 74 6c  rsion.  Currentl
139a0 79 20 33 30 30 37 30 30 30 2e 0a 3c 74 72 3e 3c  y 3007000..<tr><
139b0 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
139c0 69 67 6e 3d 63 65 6e 74 65 72 3e 38 3c 74 64 20  ign=center>8<td 
139d0 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
139e0 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74  =center>4.    <t
139f0 64 3e 44 61 74 61 62 61 73 65 20 70 61 67 65 20  d>Database page 
13a00 73 69 7a 65 2e 20 20 45 78 61 6d 70 6c 65 3a 20  size.  Example: 
13a10 31 30 32 34 0a 3c 74 72 3e 3c 74 64 20 76 61 6c  1024.<tr><td val
13a20 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
13a30 6e 74 65 72 3e 31 32 3c 74 64 20 76 61 6c 69 67  nter>12<td valig
13a40 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
13a50 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 43 68 65  er>4.    <td>Che
13a60 63 6b 70 6f 69 6e 74 20 73 65 71 75 65 6e 63 65  ckpoint sequence
13a70 20 6e 75 6d 62 65 72 0a 3c 74 72 3e 3c 74 64 20   number.<tr><td 
13a80 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
13a90 3d 63 65 6e 74 65 72 3e 31 36 3c 74 64 20 76 61  =center>16<td va
13aa0 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
13ab0 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e  enter>4.    <td>
13ac0 53 61 6c 74 2d 31 3a 20 72 61 6e 64 6f 6d 20 69  Salt-1: random i
13ad0 6e 74 65 67 65 72 20 69 6e 63 72 65 6d 65 6e 74  nteger increment
13ae0 65 64 20 77 69 74 68 20 65 61 63 68 20 63 68 65  ed with each che
13af0 63 6b 70 6f 69 6e 74 0a 3c 74 72 3e 3c 74 64 20  ckpoint.<tr><td 
13b00 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
13b10 3d 63 65 6e 74 65 72 3e 32 30 3c 74 64 20 76 61  =center>20<td va
13b20 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
13b30 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e  enter>4.    <td>
13b40 53 61 6c 74 2d 32 3a 20 61 20 64 69 66 66 65 72  Salt-2: a differ
13b50 65 6e 74 20 72 61 6e 64 6f 6d 20 6e 75 6d 62 65  ent random numbe
13b60 72 20 66 6f 72 20 65 61 63 68 20 63 68 65 63 6b  r for each check
13b70 70 6f 69 6e 74 0a 3c 74 72 3e 3c 74 64 20 76 61  point.<tr><td va
13b80 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
13b90 65 6e 74 65 72 3e 32 34 3c 74 64 20 76 61 6c 69  enter>24<td vali
13ba0 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
13bb0 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 43 68  ter>4.    <td>Ch
13bc0 65 63 6b 73 75 6d 2d 31 3a 20 46 69 72 73 74 20  ecksum-1: First 
13bd0 70 61 72 74 20 6f 66 20 61 20 63 68 65 63 6b 73  part of a checks
13be0 75 6d 20 6f 6e 20 74 68 65 20 66 69 72 73 74 20  um on the first 
13bf0 32 34 20 62 79 74 65 73 20 6f 66 20 68 65 61 64  24 bytes of head
13c00 65 72 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  er.<tr><td valig
13c10 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
13c20 65 72 3e 32 38 3c 74 64 20 76 61 6c 69 67 6e 3d  er>28<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 43 68 65 63 6b  >4.    <td>Check
13c50 73 75 6d 2d 32 3a 20 53 65 63 6f 6e 64 20 70 61  sum-2: Second pa
13c60 72 74 20 6f 66 20 74 68 65 20 63 68 65 63 6b 73  rt of the checks
13c70 75 6d 20 6f 6e 20 74 68 65 20 66 69 72 73 74 20  um on the first 
13c80 32 34 20 62 79 74 65 73 20 6f 66 20 68 65 61 64  24 bytes of head
13c90 65 72 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 63 65  er.</table>.</ce
13ca0 6e 74 65 72 3e 29 5e 0a 0a 3c 70 3e 5e 49 6d 6d  nter>)^..<p>^Imm
13cb0 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 69  ediately followi
13cc0 6e 67 20 74 68 65 20 77 61 6c 2d 68 65 61 64 65  ng the wal-heade
13cd0 72 20 61 72 65 20 7a 65 72 6f 20 6f 72 20 6d 6f  r are zero or mo
13ce0 72 65 20 66 72 61 6d 65 73 2e 20 5e 45 61 63 68  re frames. ^Each
13cf0 0a 66 72 61 6d 65 20 63 6f 6e 73 69 73 74 73 20  .frame consists 
13d00 6f 66 20 61 20 32 34 2d 62 79 74 65 20 66 72 61  of a 24-byte fra
13d10 6d 65 2d 68 65 61 64 65 72 20 66 6f 6c 6c 6f 77  me-header follow
13d20 65 64 20 62 79 20 61 20 3c 69 3e 70 61 67 65 2d  ed by a <i>page-
13d30 73 69 7a 65 3c 2f 69 3e 20 62 79 74 65 73 0a 6f  size</i> bytes.o
13d40 66 20 70 61 67 65 20 64 61 74 61 2e 20 5e 28 54  f page data. ^(T
13d50 68 65 20 66 72 61 6d 65 2d 68 65 61 64 65 72 20  he frame-header 
13d60 69 73 20 73 69 78 20 62 69 67 2d 65 6e 64 69 61  is six big-endia
13d70 6e 20 33 32 2d 62 69 74 20 75 6e 73 69 67 6e 65  n 32-bit unsigne
13d80 64 20 0a 69 6e 74 65 67 65 72 20 76 61 6c 75 65  d .integer value
13d90 73 2c 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a  s, as follows:..
13da0 3c 63 65 6e 74 65 72 3e 0a 3c 69 3e 57 41 4c 20  <center>.<i>WAL 
13db0 46 72 61 6d 65 20 48 65 61 64 65 72 20 46 6f 72  Frame Header For
13dc0 6d 61 74 3c 2f 69 3e 3c 62 72 3e 0a 3c 74 61 62  mat</i><br>.<tab
13dd0 6c 65 20 77 69 64 74 68 3d 22 38 30 25 22 20 62  le width="80%" b
13de0 6f 72 64 65 72 3d 31 3e 0a 3c 74 72 3e 3c 74 68  order=1>.<tr><th
13df0 3e 4f 66 66 73 65 74 3c 74 68 3e 53 69 7a 65 3c  >Offset<th>Size<
13e00 74 68 3e 44 65 73 63 72 69 70 74 69 6f 6e 0a 3c  th>Description.<
13e10 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
13e20 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 30  p align=center>0
13e30 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
13e40 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20  lign=center>4.  
13e50 20 20 3c 74 64 3e 50 61 67 65 20 6e 75 6d 62 65    <td>Page numbe
13e60 72 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  r.<tr><td valign
13e70 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
13e80 72 3e 34 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  r>4<td valign=to
13e90 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34  p align=center>4
13ea0 0a 20 20 20 20 3c 74 64 3e 46 6f 72 20 63 6f 6d  .    <td>For com
13eb0 6d 69 74 20 72 65 63 6f 72 64 73 2c 20 74 68 65  mit records, the
13ec0 20 73 69 7a 65 20 6f 66 20 74 68 65 20 64 61 74   size of the dat
13ed0 61 62 61 73 65 20 66 69 6c 65 20 69 6e 20 70 61  abase file in pa
13ee0 67 65 73 0a 20 20 20 20 20 20 20 20 61 66 74 65  ges.        afte
13ef0 72 20 74 68 65 20 63 6f 6d 6d 69 74 2e 20 20 46  r the commit.  F
13f00 6f 72 20 61 6c 6c 20 6f 74 68 65 72 20 72 65 63  or all other rec
13f10 6f 72 64 73 2c 20 7a 65 72 6f 2e 0a 3c 74 72 3e  ords, zero..<tr>
13f20 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
13f30 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 38 3c 74 64  lign=center>8<td
13f40 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
13f50 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c  n=center>4.    <
13f60 74 64 3e 53 61 6c 74 2d 31 20 63 6f 70 69 65 64  td>Salt-1 copied
13f70 20 66 72 6f 6d 20 74 68 65 20 57 41 4c 20 68 65   from the WAL he
13f80 61 64 65 72 0a 3c 74 72 3e 3c 74 64 20 76 61 6c  ader.<tr><td val
13f90 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
13fa0 6e 74 65 72 3e 31 32 3c 74 64 20 76 61 6c 69 67  nter>12<td valig
13fb0 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
13fc0 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 53 61 6c  er>4.    <td>Sal
13fd0 74 2d 32 20 63 6f 70 69 65 64 20 66 72 6f 6d 20  t-2 copied from 
13fe0 74 68 65 20 57 41 4c 20 68 65 61 64 65 72 0a 3c  the WAL header.<
13ff0 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
14000 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31  p align=center>1
14010 36 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  6<td valign=top 
14020 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20  align=center>4. 
14030 20 20 20 3c 74 64 3e 43 68 65 63 6b 73 75 6d 2d     <td>Checksum-
14040 31 3a 20 20 43 75 6d 75 6c 61 74 69 76 65 20 63  1:  Cumulative c
14050 68 65 63 6b 73 75 6d 20 75 70 20 74 68 72 6f 75  hecksum up throu
14060 67 68 20 61 6e 64 20 69 6e 63 6c 75 64 69 6e 67  gh and including
14070 20 74 68 69 73 20 70 61 67 65 0a 3c 74 72 3e 3c   this page.<tr><
14080 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
14090 69 67 6e 3d 63 65 6e 74 65 72 3e 32 30 3c 74 64  ign=center>20<td
140a0 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
140b0 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c  n=center>4.    <
140c0 74 64 3e 43 68 65 63 6b 73 75 6d 2d 32 3a 20 20  td>Checksum-2:  
140d0 53 65 63 6f 6e 64 20 68 61 6c 66 20 6f 66 20 74  Second half of t
140e0 68 65 20 63 75 6d 75 6c 61 74 69 76 65 20 63 68  he cumulative ch
140f0 65 63 6b 73 75 6d 2e 0a 3c 2f 74 61 62 6c 65 3e  ecksum..</table>
14100 0a 3c 2f 63 65 6e 74 65 72 3e 29 5e 0a 0a 5e 28  .</center>)^..^(
14110 3c 70 3e 41 20 66 72 61 6d 65 20 69 73 20 63 6f  <p>A frame is co
14120 6e 73 69 64 65 72 65 64 20 76 61 6c 69 64 20 69  nsidered valid i
14130 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20 74 68  f and only if th
14140 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6e 64  e following cond
14150 69 74 69 6f 6e 73 20 61 72 65 0a 74 72 75 65 3a  itions are.true:
14160 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 3c  </p>..<ol>.<li><
14170 70 3e 54 68 65 20 73 61 6c 74 2d 31 20 61 6e 64  p>The salt-1 and
14180 20 73 61 6c 74 2d 32 20 76 61 6c 75 65 73 20 69   salt-2 values i
14190 6e 20 74 68 65 20 66 72 61 6d 65 2d 68 65 61 64  n the frame-head
141a0 65 72 20 6d 61 74 63 68 0a 20 20 20 20 20 20 20  er match.       
141b0 73 61 6c 74 20 76 61 6c 75 65 73 20 69 6e 20 74  salt values in t
141c0 68 65 20 77 61 6c 2d 68 65 61 64 65 72 3c 2f 70  he wal-header</p
141d0 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 54  ></li>..<li><p>T
141e0 68 65 20 63 68 65 63 6b 73 75 6d 20 76 61 6c 75  he checksum valu
141f0 65 73 20 69 6e 20 74 68 65 20 66 69 6e 61 6c 20  es in the final 
14200 38 20 62 79 74 65 73 20 6f 66 20 74 68 65 20 66  8 bytes of the f
14210 72 61 6d 65 2d 68 65 61 64 65 72 0a 20 20 20 20  rame-header.    
14220 20 20 20 65 78 61 63 74 6c 79 20 6d 61 74 63 68     exactly match
14230 20 74 68 65 20 63 68 65 63 6b 73 75 6d 20 63 6f   the checksum co
14240 6d 70 75 74 65 64 20 63 6f 6e 73 65 63 75 74 69  mputed consecuti
14250 76 65 6c 79 20 6f 6e 20 74 68 65 0a 20 20 20 20  vely on the.    
14260 20 20 20 66 69 72 73 74 20 32 34 20 62 79 74 65     first 24 byte
14270 73 20 6f 66 20 74 68 65 20 57 41 4c 20 68 65 61  s of the WAL hea
14280 64 65 72 20 61 6e 64 20 74 68 65 20 66 69 72 73  der and the firs
14290 74 20 38 20 62 79 74 65 73 20 61 6e 64 0a 20 20  t 8 bytes and.  
142a0 20 20 20 20 20 74 68 65 20 63 6f 6e 74 65 6e 74       the content
142b0 20 6f 66 20 61 6c 6c 20 66 72 61 6d 65 73 0a 20   of all frames. 
142c0 20 20 20 20 20 20 75 70 20 74 6f 20 61 6e 64 20        up to and 
142d0 69 6e 63 6c 75 64 69 6e 67 20 74 68 65 20 63 75  including the cu
142e0 72 72 65 6e 74 20 66 72 61 6d 65 2e 3c 2f 70 3e  rrent frame.</p>
142f0 3c 2f 6c 69 3e 3c 2f 6c 69 3e 0a 3c 2f 6f 6c 3e  </li></li>.</ol>
14300 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  )^..<tcl>hd_frag
14310 6d 65 6e 74 20 77 61 6c 63 6b 73 6d 20 7b 57 41  ment walcksm {WA
14320 4c 20 63 68 65 63 6b 73 75 6d 20 61 6c 67 6f 72  L checksum algor
14330 69 74 68 6d 7d 3c 2f 74 63 6c 3e 0a 3c 68 32 3e  ithm}</tcl>.<h2>
14340 43 68 65 63 6b 73 75 6d 20 41 6c 67 6f 72 69 74  Checksum Algorit
14350 68 6d 3c 2f 68 32 3e 0a 0a 3c 70 3e 54 68 65 20  hm</h2>..<p>The 
14360 63 68 65 63 6b 73 75 6d 20 69 73 20 63 6f 6d 70  checksum is comp
14370 75 74 65 64 20 62 79 20 69 6e 74 65 72 70 72 65  uted by interpre
14380 74 69 6e 67 20 74 68 65 20 69 6e 70 75 74 20 61  ting the input a
14390 73 0a 61 6e 20 65 76 65 6e 20 6e 75 6d 62 65 72  s.an even number
143a0 20 6f 66 20 75 6e 73 69 67 6e 65 64 20 33 32 2d   of unsigned 32-
143b0 62 69 74 20 69 6e 74 65 67 65 72 73 3a 20 78 28  bit integers: x(
143c0 30 29 20 74 68 72 6f 75 67 68 20 78 28 4e 29 2e  0) through x(N).
143d0 0a 5e 54 68 65 20 33 32 2d 62 69 74 20 69 6e 74  .^The 32-bit int
143e0 65 67 65 72 73 20 61 72 65 20 62 69 67 2d 65 6e  egers are big-en
143f0 64 69 61 6e 20 69 66 20 74 68 65 0a 6d 61 67 69  dian if the.magi
14400 63 20 6e 75 6d 62 65 72 20 69 6e 20 74 68 65 20  c number in the 
14410 66 69 72 73 74 20 34 20 62 79 74 65 73 20 6f 66  first 4 bytes of
14420 20 74 68 65 20 57 41 4c 20 68 65 61 64 65 72 20   the WAL header 
14430 69 73 20 30 78 33 37 37 66 30 36 38 33 20 61 6e  is 0x377f0683 an
14440 64 0a 74 68 65 20 69 6e 74 65 67 65 72 73 20 61  d.the integers a
14450 72 65 20 6c 69 74 74 6c 65 2d 65 6e 64 69 61 6e  re little-endian
14460 20 69 66 20 74 68 65 20 6d 61 67 69 63 20 6e 75   if the magic nu
14470 6d 62 65 72 20 69 73 20 30 78 33 37 37 66 30 36  mber is 0x377f06
14480 38 32 2e 0a 5e 54 68 65 20 63 68 65 63 6b 73 75  82..^The checksu
14490 6d 20 76 61 6c 75 65 73 20 61 72 65 20 61 6c 77  m values are alw
144a0 61 79 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68  ays stored in th
144b0 65 20 66 72 61 6d 65 20 68 65 61 64 65 72 20 69  e frame header i
144c0 6e 20 61 0a 62 69 67 2d 65 6e 64 69 61 6e 20 66  n a.big-endian f
144d0 6f 72 6d 61 74 20 72 65 67 61 72 64 6c 65 73 73  ormat regardless
144e0 20 6f 66 20 77 68 69 63 68 20 62 79 74 65 20 6f   of which byte o
144f0 72 64 65 72 20 69 73 20 75 73 65 64 20 74 6f 20  rder is used to 
14500 63 6f 6d 70 75 74 65 0a 74 68 65 20 63 68 65 63  compute.the chec
14510 6b 73 75 6d 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  ksum.</p>..<p>Th
14520 65 20 63 68 65 63 6b 73 75 6d 20 61 6c 67 6f 72  e checksum algor
14530 69 74 68 6d 20 6f 6e 6c 79 20 77 6f 72 6b 73 20  ithm only works 
14540 66 6f 72 20 63 6f 6e 74 65 6e 74 20 77 68 69 63  for content whic
14550 68 20 69 73 20 61 20 6d 75 6c 74 69 70 6c 65 20  h is a multiple 
14560 6f 66 0a 38 20 62 79 74 65 73 20 69 6e 20 6c 65  of.8 bytes in le
14570 6e 67 74 68 2e 20 20 49 6e 20 6f 74 68 65 72 20  ngth.  In other 
14580 77 6f 72 64 73 2c 20 69 66 20 74 68 65 20 69 6e  words, if the in
14590 70 75 74 73 20 61 72 65 20 78 28 30 29 20 74 68  puts are x(0) th
145a0 72 6f 75 67 68 20 78 28 4e 29 0a 74 68 65 6e 20  rough x(N).then 
145b0 4e 20 6d 75 73 74 20 62 65 20 6f 64 64 2e 0a 5e  N must be odd..^
145c0 28 54 68 65 20 63 68 65 63 6b 73 75 6d 20 61 6c  (The checksum al
145d0 67 6f 72 69 74 68 6d 20 69 73 20 61 73 20 66 6f  gorithm is as fo
145e0 6c 6c 6f 77 73 3a 0a 0a 3c 62 6c 6f 63 6b 71 75  llows:..<blockqu
145f0 6f 74 65 3e 3c 70 72 65 3e 20 0a 73 30 20 3d 20  ote><pre> .s0 = 
14600 73 31 20 3d 20 30 0a 66 6f 72 20 69 20 66 72 6f  s1 = 0.for i fro
14610 6d 20 30 20 74 6f 20 6e 2d 31 20 73 74 65 70 20  m 0 to n-1 step 
14620 32 3a 0a 20 20 20 73 30 20 2b 3d 20 78 28 69 29  2:.   s0 += x(i)
14630 20 2b 20 73 31 3b 0a 20 20 20 73 31 20 2b 3d 20   + s1;.   s1 += 
14640 78 28 69 2b 31 29 20 2b 20 73 30 3b 0a 65 6e 64  x(i+1) + s0;.end
14650 66 6f 72 0a 23 20 72 65 73 75 6c 74 20 69 6e 20  for.# result in 
14660 73 30 20 61 6e 64 20 73 31 0a 3c 2f 70 72 65 3e  s0 and s1.</pre>
14670 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a  </blockquote>)^.
14680 0a 3c 70 3e 5e 54 68 65 20 6f 75 74 70 75 74 73  .<p>^The outputs
14690 20 73 30 20 61 6e 64 20 73 31 20 61 72 65 20 62   s0 and s1 are b
146a0 6f 74 68 20 77 65 69 67 68 74 65 64 20 63 68 65  oth weighted che
146b0 63 6b 73 75 6d 73 20 75 73 69 6e 67 20 46 69 62  cksums using Fib
146c0 6f 6e 61 63 63 69 20 77 65 69 67 68 74 73 0a 69  onacci weights.i
146d0 6e 20 72 65 76 65 72 73 65 20 6f 72 64 65 72 2e  n reverse order.
146e0 20 20 28 5e 54 68 65 20 6c 61 72 67 65 73 74 20    (^The largest 
146f0 46 69 62 6f 6e 61 63 63 69 20 77 65 69 67 68 74  Fibonacci weight
14700 20 6f 63 63 75 72 73 20 6f 6e 20 74 68 65 20 66   occurs on the f
14710 69 72 73 74 20 65 6c 65 6d 65 6e 74 0a 6f 66 20  irst element.of 
14720 74 68 65 20 73 65 71 75 65 6e 63 65 20 62 65 69  the sequence bei
14730 6e 67 20 73 75 6d 6d 65 64 2e 29 20 20 5e 54 68  ng summed.)  ^Th
14740 65 20 73 31 20 76 61 6c 75 65 20 73 70 61 6e 73  e s1 value spans
14750 20 61 6c 6c 20 33 32 2d 62 69 74 20 69 6e 74 65   all 32-bit inte
14760 67 65 72 0a 74 65 72 6d 73 20 6f 66 20 74 68 65  ger.terms of the
14770 20 73 65 71 75 65 6e 63 65 20 77 68 65 72 65 61   sequence wherea
14780 73 20 73 30 20 6f 6d 69 74 73 20 74 68 65 20 66  s s0 omits the f
14790 69 6e 61 6c 20 74 65 72 6d 2e 3c 2f 70 3e 0a 0a  inal term.</p>..
147a0 3c 68 32 3e 43 68 65 63 6b 70 6f 69 6e 74 20 41  <h2>Checkpoint A
147b0 6c 67 6f 72 69 74 68 6d 3c 2f 68 32 3e 0a 0a 3c  lgorithm</h2>..<
147c0 70 3e 5e 4f 6e 20 61 20 5b 63 68 65 63 6b 70 6f  p>^On a [checkpo
147d0 69 6e 74 5d 2c 20 74 68 65 20 57 41 4c 20 69 73  int], the WAL is
147e0 20 66 69 72 73 74 20 66 6c 75 73 68 65 64 20 74   first flushed t
147f0 6f 20 70 65 72 73 69 73 74 65 6e 74 20 73 74 6f  o persistent sto
14800 72 61 67 65 20 75 73 69 6e 67 0a 74 68 65 20 78  rage using.the x
14810 53 79 6e 63 20 6d 65 74 68 6f 64 20 6f 66 20 74  Sync method of t
14820 68 65 20 5b 73 71 6c 69 74 65 33 5f 69 6f 5f 6d  he [sqlite3_io_m
14830 65 74 68 6f 64 73 20 7c 20 56 46 53 5d 2e 20 0a  ethods | VFS]. .
14840 5e 54 68 65 6e 20 76 61 6c 69 64 20 63 6f 6e 74  ^Then valid cont
14850 65 6e 74 20 6f 66 20 74 68 65 20 57 41 4c 20 69  ent of the WAL i
14860 73 20 74 72 61 6e 73 66 65 72 72 65 64 20 69 6e  s transferred in
14870 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20  to the database 
14880 66 69 6c 65 2e 0a 5e 46 69 6e 61 6c 6c 79 2c 20  file..^Finally, 
14890 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20  the database is 
148a0 66 6c 75 73 68 65 64 20 74 6f 20 70 65 72 73 69  flushed to persi
148b0 73 74 65 6e 74 20 73 74 6f 72 61 67 65 20 75 73  stent storage us
148c0 69 6e 67 20 61 6e 6f 74 68 65 72 0a 78 53 79 6e  ing another.xSyn
148d0 63 20 6d 65 74 68 6f 64 20 63 61 6c 6c 2e 0a 54  c method call..T
148e0 68 65 20 78 53 79 6e 63 20 6f 70 65 72 61 74 69  he xSync operati
148f0 6f 6e 73 20 73 65 72 76 65 20 61 73 20 77 72 69  ons serve as wri
14900 74 65 20 62 61 72 72 69 65 72 73 20 2d 20 61 6c  te barriers - al
14910 6c 20 77 72 69 74 65 73 20 6c 61 75 6e 63 68 65  l writes launche
14920 64 0a 62 65 66 6f 72 65 20 74 68 65 20 78 53 79  d.before the xSy
14930 6e 63 20 6d 75 73 74 20 63 6f 6d 70 6c 65 74 65  nc must complete
14940 20 62 65 66 6f 72 65 20 61 6e 79 20 77 72 69 74   before any writ
14950 65 20 74 68 61 74 20 6c 61 75 6e 63 68 65 73 20  e that launches 
14960 61 66 74 65 72 20 74 68 65 0a 78 53 79 6e 63 20  after the.xSync 
14970 62 65 67 69 6e 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e  begins.</p>..<p>
14980 5e 41 66 74 65 72 20 61 20 63 68 65 63 6b 70 6f  ^After a checkpo
14990 69 6e 74 2c 20 6e 65 77 20 77 72 69 74 65 20 74  int, new write t
149a0 72 61 6e 73 61 63 74 69 6f 6e 73 20 6f 76 65 72  ransactions over
149b0 77 72 69 74 65 0a 74 68 65 20 57 41 4c 20 66 69  write.the WAL fi
149c0 6c 65 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69  le from the begi
149d0 6e 6e 69 6e 67 2e 20 20 5e 41 74 20 74 68 65 20  nning.  ^At the 
149e0 73 74 61 72 74 20 6f 66 20 74 68 65 20 66 69 72  start of the fir
149f0 73 74 20 6e 65 77 0a 77 72 69 74 65 20 74 72 61  st new.write tra
14a00 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 20 57 41  nsaction, the WA
14a10 4c 20 68 65 61 64 65 72 20 73 61 6c 74 2d 31 20  L header salt-1 
14a20 76 61 6c 75 65 20 69 73 20 69 6e 63 72 65 6d 65  value is increme
14a30 6e 74 65 64 0a 61 6e 64 20 74 68 65 20 73 61 6c  nted.and the sal
14a40 74 2d 32 20 76 61 6c 75 65 20 69 73 20 72 61 6e  t-2 value is ran
14a50 64 6f 6d 69 7a 65 64 2e 20 20 54 68 65 73 65 20  domized.  These 
14a60 63 68 61 6e 67 65 73 20 74 6f 20 74 68 65 20 73  changes to the s
14a70 61 6c 74 73 20 69 6e 76 61 6c 69 64 61 74 65 0a  alts invalidate.
14a80 6f 6c 64 20 66 72 61 6d 65 73 20 69 6e 20 74 68  old frames in th
14a90 65 20 57 41 4c 20 74 68 61 74 20 68 61 76 65 20  e WAL that have 
14aa0 61 6c 72 65 61 64 79 20 62 65 65 6e 20 63 68 65  already been che
14ab0 63 6b 70 6f 69 6e 74 65 64 20 62 75 74 20 6e 6f  ckpointed but no
14ac0 74 20 79 65 74 0a 6f 76 65 72 77 72 69 74 74 65  t yet.overwritte
14ad0 6e 2c 20 61 6e 64 20 70 72 65 76 65 6e 74 20 74  n, and prevent t
14ae0 68 65 6d 20 66 72 6f 6d 20 62 65 69 6e 67 20 63  hem from being c
14af0 68 65 63 6b 70 6f 69 6e 74 65 64 20 61 67 61 69  heckpointed agai
14b00 6e 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f  n.</p>..<tcl>hd_
14b10 66 72 61 67 6d 65 6e 74 20 77 61 6c 72 65 61 64  fragment walread
14b20 20 7b 57 41 4c 20 72 65 61 64 20 61 6c 67 6f 72   {WAL read algor
14b30 69 74 68 6d 7d 3c 2f 74 63 6c 3e 0a 3c 68 32 3e  ithm}</tcl>.<h2>
14b40 52 65 61 64 65 72 20 41 6c 67 6f 72 69 74 68 6d  Reader Algorithm
14b50 3c 2f 68 32 3e 0a 0a 3c 70 3e 5e 28 54 6f 20 72  </h2>..<p>^(To r
14b60 65 61 64 20 61 20 70 61 67 65 20 66 72 6f 6d 20  ead a page from 
14b70 74 68 65 20 64 61 74 61 62 61 73 65 20 28 63 61  the database (ca
14b80 6c 6c 20 69 74 20 70 61 67 65 20 6e 75 6d 62 65  ll it page numbe
14b90 72 20 50 29 2c 20 61 20 72 65 61 64 65 72 0a 66  r P), a reader.f
14ba0 69 72 73 74 20 63 68 65 63 6b 73 20 74 68 65 20  irst checks the 
14bb0 57 41 4c 20 74 6f 20 73 65 65 20 69 66 20 69 74  WAL to see if it
14bc0 20 63 6f 6e 74 61 69 6e 73 20 70 61 67 65 20 50   contains page P
14bd0 2e 20 20 49 66 20 73 6f 2c 20 74 68 65 6e 20 74  .  If so, then t
14be0 68 65 0a 6c 61 73 74 20 76 61 6c 69 64 20 69 6e  he.last valid in
14bf0 73 74 61 6e 63 65 20 6f 66 20 70 61 67 65 20 50  stance of page P
14c00 20 74 68 61 74 20 69 73 20 66 6f 6c 6c 6f 77 65   that is followe
14c10 64 20 62 79 20 61 20 63 6f 6d 6d 69 74 20 66 72  d by a commit fr
14c20 61 6d 65 0a 6f 72 20 69 73 20 61 20 63 6f 6d 6d  ame.or is a comm
14c30 69 74 20 66 72 61 6d 65 20 69 74 73 65 6c 66 20  it frame itself 
14c40 62 65 63 6f 6d 65 73 20 74 68 65 20 76 61 6c 75  becomes the valu
14c50 65 20 72 65 61 64 2e 29 5e 20 20 5e 49 66 20 74  e read.)^  ^If t
14c60 68 65 20 57 41 4c 0a 63 6f 6e 74 61 69 6e 73 20  he WAL.contains 
14c70 6e 6f 20 63 6f 70 69 65 73 20 6f 66 20 70 61 67  no copies of pag
14c80 65 20 50 20 74 68 61 74 20 61 72 65 20 76 61 6c  e P that are val
14c90 69 64 20 61 6e 64 20 77 68 69 63 68 20 61 72 65  id and which are
14ca0 20 61 20 63 6f 6d 6d 69 74 0a 66 72 61 6d 65 20   a commit.frame 
14cb0 6f 72 20 61 72 65 20 66 6f 6c 6c 6f 77 65 64 20  or are followed 
14cc0 62 79 20 61 20 63 6f 6d 6d 69 74 20 66 72 61 6d  by a commit fram
14cd0 65 2c 20 74 68 65 6e 20 70 61 67 65 20 50 20 69  e, then page P i
14ce0 73 20 72 65 61 64 20 66 72 6f 6d 0a 74 68 65 20  s read from.the 
14cf0 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 3c 2f  database file.</
14d00 70 3e 0a 0a 3c 70 3e 54 6f 20 73 74 61 72 74 20  p>..<p>To start 
14d10 61 20 72 65 61 64 20 74 72 61 6e 73 61 63 74 69  a read transacti
14d20 6f 6e 2c 20 74 68 65 20 72 65 61 64 65 72 20 72  on, the reader r
14d30 65 63 6f 72 64 73 20 74 68 65 20 69 6e 64 65 78  ecords the index
14d40 20 6f 66 20 74 68 65 20 6c 61 73 74 0a 76 61 6c   of the last.val
14d50 69 64 20 66 72 61 6d 65 20 69 6e 20 74 68 65 20  id frame in the 
14d60 57 41 4c 2e 20 20 54 68 65 20 72 65 61 64 65 72  WAL.  The reader
14d70 20 75 73 65 73 20 74 68 69 73 20 72 65 63 6f 72   uses this recor
14d80 64 65 64 20 22 6d 78 46 72 61 6d 65 22 20 76 61  ded "mxFrame" va
14d90 6c 75 65 0a 66 6f 72 20 61 6c 6c 20 73 75 62 73  lue.for all subs
14da0 65 71 75 65 6e 74 20 72 65 61 64 20 6f 70 65 72  equent read oper
14db0 61 74 69 6f 6e 73 2e 20 20 4e 65 77 20 74 72 61  ations.  New tra
14dc0 6e 73 61 63 74 69 6f 6e 73 20 63 61 6e 20 62 65  nsactions can be
14dd0 20 61 70 70 65 6e 64 65 64 0a 74 6f 20 74 68 65   appended.to the
14de0 20 57 41 4c 2c 20 62 75 74 20 61 73 20 6c 6f 6e   WAL, but as lon
14df0 67 20 61 73 20 74 68 65 20 72 65 61 64 65 72 20  g as the reader 
14e00 75 73 65 73 20 69 74 73 20 6f 72 69 67 69 6e 61  uses its origina
14e10 6c 20 6d 78 46 72 61 6d 65 20 76 61 6c 75 65 0a  l mxFrame value.
14e20 61 6e 64 20 69 67 6e 6f 72 65 73 20 73 75 62 73  and ignores subs
14e30 65 71 75 65 6e 74 6c 79 20 61 70 70 65 6e 64 65  equently appende
14e40 64 20 63 6f 6e 74 65 6e 74 2c 20 74 68 65 20 72  d content, the r
14e50 65 61 64 65 72 20 77 69 6c 6c 20 73 65 65 20 61  eader will see a
14e60 20 0a 63 6f 6e 73 69 73 74 65 6e 74 20 73 6e 61   .consistent sna
14e70 70 73 68 6f 74 20 6f 66 20 74 68 65 20 64 61 74  pshot of the dat
14e80 61 62 61 73 65 20 66 72 6f 6d 20 61 20 73 69 6e  abase from a sin
14e90 67 6c 65 20 70 6f 69 6e 74 20 69 6e 20 74 69 6d  gle point in tim
14ea0 65 2e 20 20 0a 5e 54 68 69 73 20 74 65 63 68 6e  e.  .^This techn
14eb0 69 71 75 65 20 61 6c 6c 6f 77 73 20 6d 75 6c 74  ique allows mult
14ec0 69 70 6c 65 20 63 6f 6e 63 75 72 72 65 6e 74 20  iple concurrent 
14ed0 72 65 61 64 65 72 73 20 74 6f 20 76 69 65 77 20  readers to view 
14ee0 64 69 66 66 65 72 65 6e 74 20 0a 76 65 72 73 69  different .versi
14ef0 6f 6e 73 20 6f 66 20 74 68 65 20 64 61 74 61 62  ons of the datab
14f00 61 73 65 20 63 6f 6e 74 65 6e 74 20 73 69 6d 75  ase content simu
14f10 6c 74 61 6e 65 6f 75 73 6c 79 2e 3c 2f 70 3e 0a  ltaneously.</p>.
14f20 0a 3c 70 3e 54 68 65 20 72 65 61 64 65 72 20 61  .<p>The reader a
14f30 6c 67 6f 72 69 74 68 6d 20 69 6e 20 74 68 65 20  lgorithm in the 
14f40 70 72 65 76 69 6f 75 73 20 70 61 72 61 67 72 61  previous paragra
14f50 70 68 73 20 77 6f 72 6b 73 20 63 6f 72 72 65 63  phs works correc
14f60 74 6c 79 2c 20 62 75 74 20 0a 62 65 63 61 75 73  tly, but .becaus
14f70 65 20 66 72 61 6d 65 73 20 66 6f 72 20 70 61 67  e frames for pag
14f80 65 20 50 20 63 61 6e 20 61 70 70 65 61 72 20 61  e P can appear a
14f90 6e 79 77 68 65 72 65 20 77 69 74 68 69 6e 20 74  nywhere within t
14fa0 68 65 20 57 41 4c 2c 20 74 68 65 0a 72 65 61 64  he WAL, the.read
14fb0 65 72 20 68 61 73 20 74 6f 20 73 63 61 6e 20 74  er has to scan t
14fc0 68 65 20 65 6e 74 69 72 65 20 57 41 4c 20 6c 6f  he entire WAL lo
14fd0 6f 6b 69 6e 67 20 66 6f 72 20 70 61 67 65 20 50  oking for page P
14fe0 20 66 72 61 6d 65 73 2e 20 20 49 66 20 74 68 65   frames.  If the
14ff0 0a 57 41 4c 20 69 73 20 6c 61 72 67 65 20 28 6d  .WAL is large (m
15000 75 6c 74 69 70 6c 65 20 6d 65 67 61 62 79 74 65  ultiple megabyte
15010 73 20 69 73 20 74 79 70 69 63 61 6c 29 20 74 68  s is typical) th
15020 61 74 20 73 63 61 6e 20 63 61 6e 20 62 65 20 73  at scan can be s
15030 6c 6f 77 2c 0a 61 6e 64 20 72 65 61 64 20 70 65  low,.and read pe
15040 72 66 6f 72 6d 61 6e 63 65 20 73 75 66 66 65 72  rformance suffer
15050 73 2e 20 20 5e 54 6f 20 6f 76 65 72 63 6f 6d 65  s.  ^To overcome
15060 20 74 68 69 73 20 70 72 6f 62 6c 65 6d 2c 20 61   this problem, a
15070 20 73 65 70 61 72 61 74 65 0a 64 61 74 61 20 73   separate.data s
15080 74 72 75 63 74 75 72 65 20 63 61 6c 6c 65 64 20  tructure called 
15090 74 68 65 20 77 61 6c 2d 69 6e 64 65 78 20 69 73  the wal-index is
150a0 20 6d 61 69 6e 74 61 69 6e 65 64 20 74 6f 20 65   maintained to e
150b0 78 70 65 64 69 74 65 20 74 68 65 0a 73 65 61 72  xpedite the.sear
150c0 63 68 20 66 6f 72 20 66 72 61 6d 65 73 20 6f 66  ch for frames of
150d0 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 70 61   a particular pa
150e0 67 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  ge.</p>..<tcl>hd
150f0 5f 66 72 61 67 6d 65 6e 74 20 77 61 6c 69 6e 64  _fragment walind
15100 65 78 66 6f 72 6d 61 74 20 7b 77 61 6c 2d 69 6e  exformat {wal-in
15110 64 65 78 7d 20 7b 57 41 4c 2d 69 6e 64 65 78 20  dex} {WAL-index 
15120 66 6f 72 6d 61 74 7d 3c 2f 74 63 6c 3e 0a 3c 68  format}</tcl>.<h
15130 32 3e 57 41 4c 2d 49 6e 64 65 78 20 46 6f 72 6d  2>WAL-Index Form
15140 61 74 3c 2f 68 32 3e 0a 0a 3c 70 3e 43 6f 6e 63  at</h2>..<p>Conc
15150 65 70 74 75 61 6c 6c 79 2c 20 74 68 65 20 77 61  eptually, the wa
15160 6c 2d 69 6e 64 65 78 20 69 73 20 73 68 61 72 65  l-index is share
15170 64 20 6d 65 6d 6f 72 79 2c 20 74 68 6f 75 67 68  d memory, though
15180 20 74 68 65 20 63 75 72 72 65 6e 74 0a 56 46 53   the current.VFS
15190 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73   implementations
151a0 20 75 73 65 20 61 20 6d 6d 61 70 70 65 64 20 66   use a mmapped f
151b0 69 6c 65 20 66 6f 72 20 74 68 65 20 77 61 6c 2d  ile for the wal-
151c0 69 6e 64 65 78 2e 20 20 5e 54 68 65 20 6d 6d 61  index.  ^The mma
151d0 70 70 65 64 0a 66 69 6c 65 20 69 73 20 69 6e 20  pped.file is in 
151e0 74 68 65 20 73 61 6d 65 20 64 69 72 65 63 74 6f  the same directo
151f0 72 79 20 61 73 20 74 68 65 20 64 61 74 61 62 61  ry as the databa
15200 73 65 20 61 6e 64 20 68 61 73 20 74 68 65 20 73  se and has the s
15210 61 6d 65 20 6e 61 6d 65 0a 61 73 20 74 68 65 20  ame name.as the 
15220 64 61 74 61 62 61 73 65 20 77 69 74 68 20 61 20  database with a 
15230 22 3c 74 74 3e 2d 73 68 6d 3c 2f 74 74 3e 22 20  "<tt>-shm</tt>" 
15240 73 75 66 66 69 78 20 61 70 70 65 6e 64 65 64 2e  suffix appended.
15250 20 20 42 65 63 61 75 73 65 0a 74 68 65 20 77 61    Because.the wa
15260 6c 2d 69 6e 64 65 78 20 69 73 20 73 68 61 72 65  l-index is share
15270 64 20 6d 65 6d 6f 72 79 2c 20 53 51 4c 69 74 65  d memory, SQLite
15280 20 64 6f 65 73 20 6e 6f 74 20 73 75 70 70 6f 72   does not suppor
15290 74 20 0a 5b 50 52 41 47 4d 41 20 6a 6f 75 72 6e  t .[PRAGMA journ
152a0 61 6c 5f 6d 6f 64 65 20 7c 20 6a 6f 75 72 6e 61  al_mode | journa
152b0 6c 5f 6d 6f 64 65 3d 57 41 4c 5d 20 0a 6f 6e 20  l_mode=WAL] .on 
152c0 61 20 6e 65 74 77 6f 72 6b 20 66 69 6c 65 73 79  a network filesy
152d0 73 74 65 6d 20 77 68 65 6e 20 63 6c 69 65 6e 74  stem when client
152e0 73 20 61 72 65 20 6f 6e 20 64 69 66 66 65 72 65  s are on differe
152f0 6e 74 20 6d 61 63 68 69 6e 65 73 2e 0a 41 6c 6c  nt machines..All
15300 20 75 73 65 72 73 20 6f 66 20 74 68 65 20 64 61   users of the da
15310 74 61 62 61 73 65 20 6d 75 73 74 20 62 65 20 61  tabase must be a
15320 62 6c 65 20 74 6f 20 73 68 61 72 65 20 74 68 65  ble to share the
15330 20 73 61 6d 65 20 6d 65 6d 6f 72 79 2e 3c 2f 70   same memory.</p
15340 3e 0a 0a 3c 70 3e 54 68 65 20 70 75 72 70 6f 73  >..<p>The purpos
15350 65 20 6f 66 20 74 68 65 20 77 61 6c 2d 69 6e 64  e of the wal-ind
15360 65 78 20 69 73 20 74 6f 20 61 6e 73 77 65 72 20  ex is to answer 
15370 74 68 69 73 20 71 75 65 73 74 69 6f 6e 20 71 75  this question qu
15380 69 63 6b 6c 79 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f  ickly:</p>..<blo
15390 63 6b 71 75 6f 74 65 3e 3c 69 3e 0a 47 69 76 65  ckquote><i>.Give
153a0 6e 20 61 20 70 61 67 65 20 6e 75 6d 62 65 72 20  n a page number 
153b0 50 20 61 6e 64 20 61 20 6d 61 78 69 6d 75 6d 20  P and a maximum 
153c0 57 41 4c 20 66 72 61 6d 65 20 69 6e 64 65 78 20  WAL frame index 
153d0 4d 2c 0a 72 65 74 75 72 6e 20 74 68 65 20 6c 61  M,.return the la
153e0 72 67 65 73 74 20 57 41 4c 20 66 72 61 6d 65 20  rgest WAL frame 
153f0 69 6e 64 65 78 20 66 6f 72 20 70 61 67 65 20 50  index for page P
15400 20 74 68 61 74 20 64 6f 65 73 20 6e 6f 74 20 65   that does not e
15410 78 63 65 65 64 20 4d 2c 20 0a 6f 72 20 72 65 74  xceed M, .or ret
15420 75 72 6e 20 4e 55 4c 4c 20 69 66 20 74 68 65 72  urn NULL if ther
15430 65 20 61 72 65 20 6e 6f 20 66 72 61 6d 65 73 20  e are no frames 
15440 66 6f 72 20 70 61 67 65 20 50 20 74 68 61 74 20  for page P that 
15450 64 6f 20 6e 6f 74 20 65 78 63 65 65 64 20 4d 2e  do not exceed M.
15460 0a 3c 2f 69 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74  .</i></blockquot
15470 65 3e 0a 0a 3c 70 3e 54 68 65 20 3c 69 3e 4d 3c  e>..<p>The <i>M<
15480 2f 69 3e 20 76 61 6c 75 65 20 69 6e 20 74 68 65  /i> value in the
15490 20 70 72 65 76 69 6f 75 73 20 70 61 72 61 67 72   previous paragr
154a0 61 70 68 20 69 73 20 74 68 65 20 22 6d 78 46 72  aph is the "mxFr
154b0 61 6d 65 22 20 76 61 6c 75 65 0a 64 65 66 69 6e  ame" value.defin
154c0 65 64 20 69 6e 20 5b 57 41 4c 20 72 65 61 64 20  ed in [WAL read 
154d0 61 6c 67 6f 72 69 74 68 6d 20 7c 20 73 65 63 74  algorithm | sect
154e0 69 6f 6e 20 34 2e 34 5d 20 74 68 61 74 20 69 73  ion 4.4] that is
154f0 20 72 65 61 64 20 61 74 20 74 68 65 20 73 74 61   read at the sta
15500 72 74 20 0a 6f 66 20 61 20 74 72 61 6e 73 61 63  rt .of a transac
15510 74 69 6f 6e 20 61 6e 64 20 77 68 69 63 68 20 64  tion and which d
15520 65 66 69 6e 65 73 20 74 68 65 20 6d 61 78 69 6d  efines the maxim
15530 75 6d 20 66 72 61 6d 65 20 66 72 6f 6d 20 74 68  um frame from th
15540 65 20 57 41 4c 20 74 68 61 74 20 0a 74 68 65 20  e WAL that .the 
15550 72 65 61 64 65 72 20 77 69 6c 6c 20 75 73 65 2e  reader will use.
15560 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 77 61 6c  </p>..<p>The wal
15570 2d 69 6e 64 65 78 20 69 73 20 74 72 61 6e 73 69  -index is transi
15580 65 6e 74 2e 20 20 41 66 74 65 72 20 61 20 63 72  ent.  After a cr
15590 61 73 68 2c 20 74 68 65 20 77 61 6c 2d 69 6e 64  ash, the wal-ind
155a0 65 78 20 69 73 0a 72 65 63 6f 6e 73 74 72 75 63  ex is.reconstruc
155b0 74 65 64 20 66 72 6f 6d 20 74 68 65 20 6f 72 69  ted from the ori
155c0 67 69 6e 61 6c 20 57 41 4c 20 66 69 6c 65 2e 20  ginal WAL file. 
155d0 20 5e 54 68 65 20 56 46 53 20 69 73 20 72 65 71   ^The VFS is req
155e0 75 69 72 65 64 0a 74 6f 20 65 69 74 68 65 72 20  uired.to either 
155f0 74 72 75 6e 63 61 74 65 20 6f 72 20 7a 65 72 6f  truncate or zero
15600 20 74 68 65 20 68 65 61 64 65 72 20 6f 66 20 74   the header of t
15610 68 65 20 77 61 6c 2d 69 6e 64 65 78 20 77 68 65  he wal-index whe
15620 6e 20 74 68 65 20 6c 61 73 74 0a 63 6f 6e 6e 65  n the last.conne
15630 63 74 69 6f 6e 20 74 6f 20 69 74 20 63 6c 6f 73  ction to it clos
15640 65 73 2e 20 20 42 65 63 61 75 73 65 20 74 68 65  es.  Because the
15650 20 77 61 6c 2d 69 6e 64 65 78 20 69 73 20 74 72   wal-index is tr
15660 61 6e 73 69 65 6e 74 2c 20 69 74 20 63 61 6e 0a  ansient, it can.
15670 75 73 65 20 61 6e 20 61 72 63 68 69 74 65 63 74  use an architect
15680 75 72 65 2d 73 70 65 63 69 66 69 63 20 66 6f 72  ure-specific for
15690 6d 61 74 3b 20 69 74 20 64 6f 65 73 20 6e 6f 74  mat; it does not
156a0 20 68 61 76 65 20 74 6f 20 62 65 20 63 72 6f 73   have to be cros
156b0 73 2d 70 6c 61 74 66 6f 72 6d 2e 0a 48 65 6e 63  s-platform..Henc
156c0 65 2c 20 75 6e 6c 69 6b 65 20 74 68 65 20 64 61  e, unlike the da
156d0 74 61 62 61 73 65 20 61 6e 64 20 57 41 4c 20 66  tabase and WAL f
156e0 69 6c 65 20 66 6f 72 6d 61 74 73 20 77 68 69 63  ile formats whic
156f0 68 20 73 74 6f 72 65 20 61 6c 6c 20 76 61 6c 75  h store all valu
15700 65 73 0a 61 73 20 62 69 67 20 65 6e 64 69 61 6e  es.as big endian
15710 2c 20 74 68 65 20 77 61 6c 2d 69 6e 64 65 78 20  , the wal-index 
15720 73 74 6f 72 65 73 20 6d 75 6c 74 69 2d 62 79 74  stores multi-byt
15730 65 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20  e values in the 
15740 6e 61 74 69 76 65 0a 62 79 74 65 20 6f 72 64 65  native.byte orde
15750 72 20 6f 66 20 74 68 65 20 68 6f 73 74 20 63 6f  r of the host co
15760 6d 70 75 74 65 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e  mputer.</p>..<p>
15770 54 68 69 73 20 64 6f 63 75 6d 65 6e 74 20 69 73  This document is
15780 20 63 6f 6e 63 65 72 6e 65 64 20 77 69 74 68 20   concerned with 
15790 74 68 65 20 70 65 72 73 69 73 74 65 6e 74 20 73  the persistent s
157a0 74 61 74 65 20 6f 66 20 74 68 65 20 64 61 74 61  tate of the data
157b0 62 61 73 65 0a 66 69 6c 65 2c 20 61 6e 64 20 73  base.file, and s
157c0 69 6e 63 65 20 74 68 65 20 77 61 6c 2d 69 6e 64  ince the wal-ind
157d0 65 78 20 69 73 20 61 20 74 72 61 6e 73 69 65 6e  ex is a transien
157e0 74 20 73 74 72 75 63 74 75 72 65 2c 20 6e 6f 20  t structure, no 
157f0 66 75 72 74 68 65 72 20 0a 69 6e 66 6f 72 6d 61  further .informa
15800 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 66  tion about the f
15810 6f 72 6d 61 74 20 6f 66 20 74 68 65 20 77 61 6c  ormat of the wal
15820 2d 69 6e 64 65 78 20 77 69 6c 6c 20 62 65 20 70  -index will be p
15830 72 6f 76 69 64 65 64 20 68 65 72 65 2e 0a 43 6f  rovided here..Co
15840 6d 70 6c 65 74 65 20 64 65 74 61 69 6c 73 20 6f  mplete details o
15850 6e 20 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20  n the format of 
15860 74 68 65 20 77 61 6c 2d 69 6e 64 65 78 20 61 72  the wal-index ar
15870 65 20 63 6f 6e 74 61 69 6e 65 64 20 77 69 74 68  e contained with
15880 69 6e 0a 63 6f 6d 6d 65 6e 74 73 20 69 6e 20 53  in.comments in S
15890 51 4c 69 74 65 20 73 6f 75 72 63 65 20 63 6f 64  QLite source cod
158a0 65 2e 3c 2f 70 3e 0a                             e.</p>.