Documentation Source Text

Hex Artifact Content
Login

Artifact 06d0dfe9c6530ef18ff6a9c9a71e37e10d3356b3:


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 0a 5e 41  ee page type..^A
6cb0: 20 76 61 6c 75 65 20 6f 66 20 32 20 6d 65 61 6e   value of 2 mean
6cc0: 73 20 74 68 65 20 70 61 67 65 20 69 73 20 61 6e  s the page is an
6cd0: 20 69 6e 74 65 72 69 6f 72 20 69 6e 64 65 78 20   interior index 
6ce0: 62 2d 74 72 65 65 20 70 61 67 65 2e 0a 5e 41 20  b-tree page..^A 
6cf0: 76 61 6c 75 65 20 6f 66 20 35 20 6d 65 61 6e 73  value of 5 means
6d00: 20 74 68 65 20 70 61 67 65 20 69 73 20 61 6e 20   the page is an 
6d10: 69 6e 74 65 72 69 6f 72 20 74 61 62 6c 65 20 62  interior table b
6d20: 2d 74 72 65 65 20 70 61 67 65 2e 0a 5e 41 20 76  -tree page..^A v
6d30: 61 6c 75 65 20 6f 66 20 31 30 20 6d 65 61 6e 73  alue of 10 means
6d40: 20 74 68 65 20 70 61 67 65 20 69 73 20 61 20 6c   the page is a l
6d50: 65 61 66 20 69 6e 64 65 78 20 62 2d 74 72 65 65  eaf index b-tree
6d60: 20 70 61 67 65 2e 0a 5e 41 20 76 61 6c 75 65 20   page..^A value 
6d70: 6f 66 20 31 33 20 6d 65 61 6e 73 20 74 68 65 20  of 13 means the 
6d80: 70 61 67 65 20 69 73 20 61 20 6c 65 61 66 20 74  page is a leaf t
6d90: 61 62 6c 65 20 62 2d 74 72 65 65 20 70 61 67 65  able b-tree page
6da0: 2e 0a 5e 41 6e 79 20 6f 74 68 65 72 20 76 61 6c  ..^Any other val
6db0: 75 65 20 66 6f 72 20 74 68 65 20 62 2d 74 72 65  ue for the b-tre
6dc0: 65 20 70 61 67 65 20 74 79 70 65 20 69 73 20 61  e page type is a
6dd0: 6e 20 65 72 72 6f 72 2e 0a 3c 74 72 3e 3c 74 64  n error..<tr><td
6de0: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61   align=center va
6df0: 6c 69 67 6e 3d 74 6f 70 3e 31 3c 74 64 20 61 6c  lign=top>1<td al
6e00: 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67  ign=center valig
6e10: 6e 3d 74 6f 70 3e 32 3c 74 64 20 61 6c 69 67 6e  n=top>2<td align
6e20: 3d 6c 65 66 74 3e 0a 5e 54 68 65 20 74 77 6f 2d  =left>.^The two-
6e30: 62 79 74 65 20 69 6e 74 65 67 65 72 20 61 74 20  byte integer at 
6e40: 6f 66 66 73 65 74 20 31 20 67 69 76 65 73 20 74  offset 1 gives t
6e50: 68 65 20 73 74 61 72 74 20 6f 66 20 74 68 65 0a  he start of the.
6e60: 66 69 72 73 74 20 66 72 65 65 62 6c 6f 63 6b 20  first freeblock 
6e70: 6f 6e 20 74 68 65 20 70 61 67 65 2c 20 6f 72 20  on the page, or 
6e80: 69 73 20 7a 65 72 6f 20 69 66 20 74 68 65 72 65  is zero if there
6e90: 20 61 72 65 20 6e 6f 20 66 72 65 65 62 6c 6f 63   are no freebloc
6ea0: 6b 73 2e 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67  ks..<tr><td alig
6eb0: 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d  n=center valign=
6ec0: 74 6f 70 3e 33 3c 74 64 20 61 6c 69 67 6e 3d 63  top>3<td align=c
6ed0: 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70  enter valign=top
6ee0: 3e 32 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74  >2<td align=left
6ef0: 3e 0a 5e 54 68 65 20 74 77 6f 2d 62 79 74 65 20  >.^The two-byte 
6f00: 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73 65  integer at offse
6f10: 74 20 33 20 67 69 76 65 73 20 74 68 65 20 6e 75  t 3 gives the nu
6f20: 6d 62 65 72 20 6f 66 20 63 65 6c 6c 73 20 6f 6e  mber of cells on
6f30: 20 74 68 65 20 70 61 67 65 2e 0a 3c 74 72 3e 3c   the page..<tr><
6f40: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
6f50: 76 61 6c 69 67 6e 3d 74 6f 70 3e 35 3c 74 64 20  valign=top>5<td 
6f60: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c  align=center val
6f70: 69 67 6e 3d 74 6f 70 3e 32 3c 74 64 20 61 6c 69  ign=top>2<td ali
6f80: 67 6e 3d 6c 65 66 74 3e 0a 5e 28 54 68 65 20 74  gn=left>.^(The t
6f90: 77 6f 2d 62 79 74 65 20 69 6e 74 65 67 65 72 20  wo-byte integer 
6fa0: 61 74 20 6f 66 66 73 65 74 20 35 20 64 65 73 69  at offset 5 desi
6fb0: 67 6e 61 74 65 73 20 74 68 65 20 73 74 61 72 74  gnates the start
6fc0: 20 6f 66 20 74 68 65 20 63 65 6c 6c 20 63 6f 6e   of the cell con
6fd0: 74 65 6e 74 0a 61 72 65 61 2e 20 20 41 20 7a 65  tent.area.  A ze
6fe0: 72 6f 20 76 61 6c 75 65 20 66 6f 72 20 74 68 69  ro value for thi
6ff0: 73 20 69 6e 74 65 67 65 72 20 69 73 20 69 6e 74  s integer is int
7000: 65 72 70 72 65 74 65 64 20 61 73 20 36 35 35 33  erpreted as 6553
7010: 36 2e 29 5e 0a 3c 74 72 3e 3c 74 64 20 61 6c 69  6.)^.<tr><td ali
7020: 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e  gn=center valign
7030: 3d 74 6f 70 3e 37 3c 74 64 20 61 6c 69 67 6e 3d  =top>7<td align=
7040: 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f  center valign=to
7050: 70 3e 31 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66  p>1<td align=lef
7060: 74 3e 0a 5e 54 68 65 20 6f 6e 65 2d 62 79 74 65  t>.^The one-byte
7070: 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73   integer at offs
7080: 65 74 20 37 20 67 69 76 65 73 20 74 68 65 20 6e  et 7 gives the n
7090: 75 6d 62 65 72 20 6f 66 20 66 72 61 67 6d 65 6e  umber of fragmen
70a0: 74 65 64 20 66 72 65 65 0a 62 79 74 65 73 20 77  ted free.bytes w
70b0: 69 74 68 69 6e 20 74 68 65 20 63 65 6c 6c 20 63  ithin the cell c
70c0: 6f 6e 74 65 6e 74 20 61 72 65 61 2e 0a 3c 74 72  ontent area..<tr
70d0: 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65  ><td align=cente
70e0: 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 38 3c 74  r valign=top>8<t
70f0: 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76  d align=center v
7100: 61 6c 69 67 6e 3d 74 6f 70 3e 34 3c 74 64 20 61  align=top>4<td a
7110: 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 28 54 68 65  lign=left>.^(The
7120: 20 66 6f 75 72 2d 62 79 74 65 20 70 61 67 65 20   four-byte page 
7130: 6e 75 6d 62 65 72 20 61 74 20 6f 66 66 73 65 74  number at offset
7140: 20 38 20 69 73 20 74 68 65 20 72 69 67 68 74 2d   8 is the right-
7150: 6d 6f 73 74 20 70 6f 69 6e 74 65 72 2e 20 20 54  most pointer.  T
7160: 68 69 73 0a 76 61 6c 75 65 20 61 70 70 65 61 72  his.value appear
7170: 73 20 69 6e 20 74 68 65 20 68 65 61 64 65 72 20  s in the header 
7180: 6f 66 20 69 6e 74 65 72 69 6f 72 20 62 2d 74 72  of interior b-tr
7190: 65 65 20 70 61 67 65 73 20 6f 6e 6c 79 20 61 6e  ee pages only an
71a0: 64 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f  d is omitted fro
71b0: 6d 0a 61 6c 6c 20 6f 74 68 65 72 20 70 61 67 65  m.all other page
71c0: 73 2e 29 5e 0a 3c 2f 74 61 62 6c 65 3e 3c 2f 63  s.)^.</table></c
71d0: 65 6e 74 65 72 3e 0a 0a 3c 70 3e 5e 54 68 65 20  enter>..<p>^The 
71e0: 63 65 6c 6c 20 70 6f 69 6e 74 65 72 20 61 72 72  cell pointer arr
71f0: 61 79 20 6f 66 20 61 20 62 2d 74 72 65 65 20 70  ay of a b-tree p
7200: 61 67 65 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  age immediately 
7210: 66 6f 6c 6c 6f 77 73 20 74 68 65 20 62 2d 74 72  follows the b-tr
7220: 65 65 0a 70 61 67 65 20 68 65 61 64 65 72 2e 20  ee.page header. 
7230: 20 4c 65 74 20 4b 20 62 65 20 74 68 65 20 6e 75   Let K be the nu
7240: 6d 62 65 72 20 6f 66 20 63 65 6c 6c 73 20 6f 6e  mber of cells on
7250: 20 74 68 65 20 62 74 72 65 65 2e 20 20 5e 54 68   the btree.  ^Th
7260: 65 20 63 65 6c 6c 20 70 6f 69 6e 74 65 72 0a 61  e cell pointer.a
7270: 72 72 61 79 20 63 6f 6e 73 69 73 74 73 20 6f 66  rray consists of
7280: 20 4b 20 32 2d 62 79 74 65 20 69 6e 74 65 67 65   K 2-byte intege
7290: 72 20 6f 66 66 73 65 74 73 20 74 6f 20 74 68 65  r offsets to the
72a0: 20 63 65 6c 6c 20 63 6f 6e 74 65 6e 74 73 2e 20   cell contents. 
72b0: 20 5e 54 68 65 0a 63 65 6c 6c 20 70 6f 69 6e 74   ^The.cell point
72c0: 65 72 73 20 61 72 65 20 61 72 72 61 6e 67 65 64  ers are arranged
72d0: 20 69 6e 20 6b 65 79 20 6f 72 64 65 72 20 77 69   in key order wi
72e0: 74 68 20 6c 65 66 74 2d 6d 6f 73 74 20 63 65 6c  th left-most cel
72f0: 6c 20 28 74 68 65 20 63 65 6c 6c 20 77 69 74 68  l (the cell with
7300: 20 74 68 65 0a 73 6d 61 6c 6c 65 73 74 20 6b 65   the.smallest ke
7310: 79 29 20 66 69 72 73 74 20 61 6e 64 20 74 68 65  y) first and the
7320: 20 72 69 67 68 74 2d 6d 6f 73 74 20 63 65 6c 6c   right-most cell
7330: 20 28 74 68 65 20 63 65 6c 6c 20 77 69 74 68 20   (the cell with 
7340: 74 68 65 20 6c 61 72 67 65 73 74 0a 6b 65 79 29  the largest.key)
7350: 20 6c 61 73 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 43   last.</p>..<p>C
7360: 65 6c 6c 20 63 6f 6e 74 65 6e 74 20 69 73 20 73  ell content is s
7370: 74 6f 72 65 64 20 69 6e 20 74 68 65 20 63 65 6c  tored in the cel
7380: 6c 20 63 6f 6e 74 65 6e 74 20 72 65 67 69 6f 6e  l content region
7390: 20 6f 66 20 74 68 65 20 62 2d 74 72 65 65 20 70   of the b-tree p
73a0: 61 67 65 2e 0a 53 51 4c 69 74 65 20 73 74 72 69  age..SQLite stri
73b0: 76 65 73 20 74 6f 20 70 6c 61 63 65 20 63 65 6c  ves to place cel
73c0: 6c 73 20 61 73 20 66 61 72 20 74 6f 77 61 72 64  ls as far toward
73d0: 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   the end of the 
73e0: 62 2d 74 72 65 65 20 70 61 67 65 20 61 73 0a 69  b-tree page as.i
73f0: 74 20 63 61 6e 2c 20 69 6e 20 6f 72 64 65 72 20  t can, in order 
7400: 74 6f 20 6c 65 61 76 65 20 73 70 61 63 65 20 66  to leave space f
7410: 6f 72 20 66 75 74 75 72 65 20 67 72 6f 77 74 68  or future growth
7420: 20 6f 66 20 74 68 65 20 63 65 6c 6c 20 70 6f 69   of the cell poi
7430: 6e 74 65 72 20 61 72 72 61 79 2e 0a 54 68 65 20  nter array..The 
7440: 61 72 65 61 20 69 6e 20 62 65 74 77 65 65 6e 20  area in between 
7450: 74 68 65 20 6c 61 73 74 20 63 65 6c 6c 20 70 6f  the last cell po
7460: 69 6e 74 65 72 20 61 72 72 61 79 20 65 6e 74 72  inter array entr
7470: 79 20 61 6e 64 20 74 68 65 20 62 65 67 69 6e 6e  y and the beginn
7480: 69 6e 67 20 6f 66 0a 74 68 65 20 66 69 72 73 74  ing of.the first
7490: 20 63 65 6c 6c 20 69 73 20 74 68 65 20 75 6e 61   cell is the una
74a0: 6c 6c 6f 63 61 74 65 64 20 72 65 67 69 6f 6e 2e  llocated region.
74b0: 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20 61 20  .</p>..<p>^If a 
74c0: 70 61 67 65 20 63 6f 6e 74 61 69 6e 73 20 6e 6f  page contains no
74d0: 20 63 65 6c 6c 73 20 28 77 68 69 63 68 20 69 73   cells (which is
74e0: 20 6f 6e 6c 79 20 70 6f 73 73 69 62 6c 65 20 66   only possible f
74f0: 6f 72 20 61 20 72 6f 6f 74 20 70 61 67 65 0a 6f  or a root page.o
7500: 66 20 61 20 74 61 62 6c 65 20 74 68 61 74 20 63  f a table that c
7510: 6f 6e 74 61 69 6e 73 20 6e 6f 20 72 6f 77 73 29  ontains no rows)
7520: 20 74 68 65 6e 20 74 68 65 20 6f 66 66 73 65 74   then the offset
7530: 20 74 6f 20 74 68 65 0a 63 65 6c 6c 20 63 6f 6e   to the.cell con
7540: 74 65 6e 74 20 61 72 65 61 20 77 69 6c 6c 20 65  tent area will e
7550: 71 75 61 6c 20 74 68 65 20 70 61 67 65 20 73 69  qual the page si
7560: 7a 65 20 6d 69 6e 75 73 20 74 68 65 20 62 79 74  ze minus the byt
7570: 65 73 20 6f 66 20 72 65 73 65 72 76 65 64 20 73  es of reserved s
7580: 70 61 63 65 2e 0a 5e 28 49 66 20 74 68 65 20 64  pace..^(If the d
7590: 61 74 61 62 61 73 65 20 75 73 65 73 20 61 20 36  atabase uses a 6
75a0: 35 35 33 36 2d 62 79 74 65 20 70 61 67 65 20 73  5536-byte page s
75b0: 69 7a 65 20 61 6e 64 20 74 68 65 20 72 65 73 65  ize and the rese
75c0: 72 76 65 64 20 73 70 61 63 65 20 69 73 20 7a 65  rved space is ze
75d0: 72 6f 0a 28 74 68 65 20 75 73 75 61 6c 20 76 61  ro.(the usual va
75e0: 6c 75 65 20 66 6f 72 20 72 65 73 65 72 76 65 64  lue for reserved
75f0: 20 73 70 61 63 65 29 20 74 68 65 6e 20 74 68 65   space) then the
7600: 20 63 65 6c 6c 20 63 6f 6e 74 65 6e 74 20 6f 66   cell content of
7610: 66 73 65 74 20 6f 66 20 61 6e 0a 65 6d 70 74 79  fset of an.empty
7620: 20 70 61 67 65 20 77 61 6e 74 73 20 74 6f 20 62   page wants to b
7630: 65 20 36 35 35 33 36 2e 20 20 0a 48 6f 77 65 76  e 65536.  .Howev
7640: 65 72 2c 20 74 68 61 74 20 69 6e 74 65 67 65 72  er, that integer
7650: 20 69 73 20 74 6f 6f 20 6c 61 72 67 65 20 74 6f   is too large to
7660: 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20 61 0a   be stored in a.
7670: 32 2d 62 79 74 65 20 75 6e 73 69 67 6e 65 64 20  2-byte unsigned 
7680: 69 6e 74 65 67 65 72 2c 20 73 6f 20 61 20 76 61  integer, so a va
7690: 6c 75 65 20 6f 66 20 30 20 69 73 20 75 73 65 64  lue of 0 is used
76a0: 20 69 6e 20 69 74 73 20 70 6c 61 63 65 2e 29 5e   in its place.)^
76b0: 0a 0a 3c 70 3e 41 20 66 72 65 65 62 6c 6f 63 6b  ..<p>A freeblock
76c0: 20 69 73 20 61 20 73 74 72 75 63 74 75 72 65 20   is a structure 
76d0: 75 73 65 64 20 74 6f 20 69 64 65 6e 74 69 66 79  used to identify
76e0: 20 75 6e 61 6c 6c 6f 63 61 74 65 64 20 73 70 61   unallocated spa
76f0: 63 65 20 77 69 74 68 69 6e 0a 61 20 62 2d 74 72  ce within.a b-tr
7700: 65 65 20 70 61 67 65 2e 20 20 46 72 65 65 62 6c  ee page.  Freebl
7710: 6f 63 6b 73 20 61 72 65 20 6f 72 67 61 6e 69 7a  ocks are organiz
7720: 65 64 20 61 73 20 61 20 63 68 61 69 6e 2e 20 20  ed as a chain.  
7730: 5e 54 68 65 20 66 69 72 73 74 20 32 20 62 79 74  ^The first 2 byt
7740: 65 73 20 6f 66 0a 61 20 66 72 65 65 62 6c 6f 63  es of.a freebloc
7750: 6b 20 61 72 65 20 61 20 62 69 67 2d 65 6e 64 69  k are a big-endi
7760: 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69 63 68  an integer which
7770: 20 69 73 20 74 68 65 20 6f 66 66 73 65 74 20 69   is the offset i
7780: 6e 20 74 68 65 20 62 2d 74 72 65 65 20 70 61 67  n the b-tree pag
7790: 65 0a 6f 66 20 74 68 65 20 6e 65 78 74 20 66 72  e.of the next fr
77a0: 65 65 62 6c 6f 63 6b 20 69 6e 20 74 68 65 20 63  eeblock in the c
77b0: 68 61 69 6e 2c 20 6f 72 20 7a 65 72 6f 20 69 66  hain, or zero if
77c0: 20 74 68 65 20 66 72 65 65 62 6c 6f 63 6b 20 69   the freeblock i
77d0: 73 20 74 68 65 20 6c 61 73 74 20 6f 6e 0a 74 68  s the last on.th
77e0: 65 20 63 68 61 69 6e 2e 20 20 5e 54 68 65 20 74  e chain.  ^The t
77f0: 68 69 72 64 20 61 6e 64 20 66 6f 75 72 74 68 20  hird and fourth 
7800: 62 79 74 65 73 20 6f 66 20 65 61 63 68 20 66 72  bytes of each fr
7810: 65 65 62 6c 6f 63 6b 20 66 6f 72 6d 0a 61 20 62  eeblock form.a b
7820: 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65  ig-endian intege
7830: 72 20 77 68 69 63 68 20 69 73 20 74 68 65 20 73  r which is the s
7840: 69 7a 65 20 6f 66 20 74 68 65 20 66 72 65 65 62  ize of the freeb
7850: 6c 6f 63 6b 20 69 6e 20 62 79 74 65 73 2c 20 69  lock in bytes, i
7860: 6e 63 6c 75 64 69 6e 67 0a 74 68 65 20 34 2d 62  ncluding.the 4-b
7870: 79 74 65 20 68 65 61 64 65 72 2e 20 20 5e 46 72  yte header.  ^Fr
7880: 65 65 62 6c 6f 63 6b 73 20 61 72 65 20 61 6c 77  eeblocks are alw
7890: 61 79 73 20 63 6f 6e 6e 65 63 74 65 64 20 69 6e  ays connected in
78a0: 20 6f 72 64 65 72 20 0a 6f 66 20 69 6e 63 72 65   order .of incre
78b0: 61 73 69 6e 67 20 6f 66 66 73 65 74 2e 20 20 5e  asing offset.  ^
78c0: 54 68 65 20 73 65 63 6f 6e 64 20 66 69 65 6c 64  The second field
78d0: 20 6f 66 20 74 68 65 20 62 2d 74 72 65 65 20 70   of the b-tree p
78e0: 61 67 65 20 68 65 61 64 65 72 20 69 73 20 74 68  age header is th
78f0: 65 0a 6f 66 66 73 65 74 20 6f 66 20 74 68 65 20  e.offset of the 
7900: 66 69 72 73 74 20 66 72 65 65 62 6c 6f 63 6b 2c  first freeblock,
7910: 20 6f 72 20 7a 65 72 6f 20 69 66 20 74 68 65 72   or zero if ther
7920: 65 20 61 72 65 20 6e 6f 20 66 72 65 65 62 6c 6f  e are no freeblo
7930: 63 6b 73 20 6f 6e 20 74 68 65 0a 70 61 67 65 2e  cks on the.page.
7940: 20 20 5e 49 6e 20 61 20 77 65 6c 6c 2d 66 6f 72    ^In a well-for
7950: 6d 65 64 20 62 2d 74 72 65 65 20 70 61 67 65 2c  med b-tree page,
7960: 20 74 68 65 72 65 20 77 69 6c 6c 20 61 6c 77 61   there will alwa
7970: 79 73 20 62 65 20 61 74 20 6c 65 61 73 74 20 6f  ys be at least o
7980: 6e 65 20 63 65 6c 6c 0a 62 65 66 6f 72 65 20 74  ne cell.before t
7990: 68 65 20 66 69 72 73 74 20 66 72 65 65 62 6c 6f  he first freeblo
79a0: 63 6b 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 20 66 72  ck.</p>..<p>A fr
79b0: 65 65 62 6c 6f 63 6b 20 72 65 71 75 69 72 65 73  eeblock requires
79c0: 20 61 74 20 6c 65 61 73 74 20 34 20 62 79 74 65   at least 4 byte
79d0: 73 20 6f 66 20 73 70 61 63 65 2e 20 20 49 66 20  s of space.  If 
79e0: 74 68 65 72 65 20 69 73 20 61 6e 20 69 73 6f 6c  there is an isol
79f0: 61 74 65 64 0a 67 72 6f 75 70 20 6f 66 20 31 2c  ated.group of 1,
7a00: 20 32 2c 20 6f 72 20 33 20 75 6e 75 73 65 64 20   2, or 3 unused 
7a10: 62 79 74 65 73 20 77 69 74 68 69 6e 20 74 68 65  bytes within the
7a20: 20 63 65 6c 6c 20 63 6f 6e 74 65 6e 74 20 61 72   cell content ar
7a30: 65 61 2c 20 74 68 6f 73 65 20 62 79 74 65 73 0a  ea, those bytes.
7a40: 63 6f 6d 70 72 69 73 65 20 61 20 66 72 61 67 6d  comprise a fragm
7a50: 65 6e 74 2e 20 20 5e 54 68 65 20 74 6f 74 61 6c  ent.  ^The total
7a60: 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   number of bytes
7a70: 20 69 6e 20 61 6c 6c 20 66 72 61 67 6d 65 6e 74   in all fragment
7a80: 73 20 69 73 20 73 74 6f 72 65 64 0a 69 6e 20 74  s is stored.in t
7a90: 68 65 20 66 69 66 74 68 20 66 69 65 6c 64 20 6f  he fifth field o
7aa0: 66 20 74 68 65 20 62 2d 74 72 65 65 20 70 61 67  f the b-tree pag
7ab0: 65 20 68 65 61 64 65 72 2e 20 20 5e 49 6e 20 61  e header.  ^In a
7ac0: 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 62 2d 74   well-formed b-t
7ad0: 72 65 65 20 70 61 67 65 2c 0a 74 68 65 20 74 6f  ree page,.the to
7ae0: 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 62 79  tal number of by
7af0: 74 65 73 20 69 6e 20 66 72 61 67 6d 65 6e 74 73  tes in fragments
7b00: 20 6d 61 79 20 6e 6f 74 20 65 78 63 65 65 64 20   may not exceed 
7b10: 36 30 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  60.</p>..<p>The 
7b20: 74 6f 74 61 6c 20 61 6d 6f 75 6e 74 20 6f 66 20  total amount of 
7b30: 66 72 65 65 20 73 70 61 63 65 20 6f 6e 20 61 20  free space on a 
7b40: 62 2d 74 72 65 65 20 70 61 67 65 20 63 6f 6e 73  b-tree page cons
7b50: 69 73 74 73 20 6f 66 20 74 68 65 20 73 69 7a 65  ists of the size
7b60: 0a 6f 66 20 74 68 65 20 75 6e 61 6c 6c 6f 63 61  .of the unalloca
7b70: 74 65 64 20 72 65 67 69 6f 6e 20 70 6c 75 73 20  ted region plus 
7b80: 74 68 65 20 74 6f 74 61 6c 20 73 69 7a 65 20 6f  the total size o
7b90: 66 20 61 6c 6c 20 66 72 65 65 62 6c 6f 63 6b 73  f all freeblocks
7ba0: 20 70 6c 75 73 20 74 68 65 0a 6e 75 6d 62 65 72   plus the.number
7bb0: 20 6f 66 20 66 72 61 67 6d 65 6e 74 65 64 20 66   of fragmented f
7bc0: 72 65 65 20 62 79 74 65 73 2e 20 20 5e 53 51 4c  ree bytes.  ^SQL
7bd0: 69 74 65 20 6d 61 79 20 66 72 6f 6d 20 74 69 6d  ite may from tim
7be0: 65 20 74 6f 20 74 69 6d 65 20 72 65 6f 72 67 61  e to time reorga
7bf0: 6e 69 7a 65 0a 61 20 62 2d 74 72 65 65 20 70 61  nize.a b-tree pa
7c00: 67 65 20 73 6f 20 74 68 61 74 20 74 68 65 72 65  ge so that there
7c10: 20 61 72 65 20 6e 6f 20 66 72 65 65 62 6c 6f 63   are no freebloc
7c20: 6b 73 20 6f 72 20 66 72 61 67 6d 65 6e 74 20 62  ks or fragment b
7c30: 79 74 65 73 2c 20 61 6c 6c 0a 75 6e 75 73 65 64  ytes, all.unused
7c40: 20 62 79 74 65 73 20 61 72 65 20 63 6f 6e 74 61   bytes are conta
7c50: 69 6e 65 64 20 69 6e 20 74 68 65 20 75 6e 61 6c  ined in the unal
7c60: 6c 6f 63 61 74 65 64 20 73 70 61 63 65 20 72 65  located space re
7c70: 67 69 6f 6e 2c 20 61 6e 64 20 61 6c 6c 0a 63 65  gion, and all.ce
7c80: 6c 6c 73 20 61 72 65 20 70 61 63 6b 65 64 20 74  lls are packed t
7c90: 69 67 68 74 6c 79 20 61 74 20 74 68 65 20 65 6e  ightly at the en
7ca0: 64 20 6f 66 20 74 68 65 20 70 61 67 65 2e 20 20  d of the page.  
7cb0: 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20 0a  This is called .
7cc0: 22 64 65 66 72 61 67 6d 65 6e 74 69 6e 67 22 20  "defragmenting" 
7cd0: 74 68 65 20 62 2d 74 72 65 65 20 70 61 67 65 2e  the b-tree page.
7ce0: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  </p>..<tcl>hd_fr
7cf0: 61 67 6d 65 6e 74 20 76 61 72 69 6e 74 20 7b 76  agment varint {v
7d00: 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69  ariable-length i
7d10: 6e 74 65 67 65 72 7d 20 7b 76 61 72 69 6e 74 7d  nteger} {varint}
7d20: 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 41 20 76 61 72  </tcl>..<p>A var
7d30: 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74  iable-length int
7d40: 65 67 65 72 20 6f 72 20 22 76 61 72 69 6e 74 22  eger or "varint"
7d50: 20 69 73 20 61 20 73 74 61 74 69 63 20 48 75 66   is a static Huf
7d60: 66 6d 61 6e 20 65 6e 63 6f 64 69 6e 67 0a 6f 66  fman encoding.of
7d70: 20 36 34 2d 62 69 74 20 74 77 6f 73 2d 63 6f 6d   64-bit twos-com
7d80: 70 6c 65 6d 65 6e 74 20 69 6e 74 65 67 65 72 73  plement integers
7d90: 20 74 68 61 74 20 75 73 65 73 20 6c 65 73 73 20   that uses less 
7da0: 73 70 61 63 65 20 66 6f 72 20 73 6d 61 6c 6c 20  space for small 
7db0: 70 6f 73 69 74 69 76 65 20 0a 76 61 6c 75 65 73  positive .values
7dc0: 2e 20 0a 41 20 76 61 72 69 6e 74 20 69 73 20 62  . .A varint is b
7dd0: 65 74 77 65 65 6e 20 31 20 61 6e 64 20 39 20 62  etween 1 and 9 b
7de0: 79 74 65 73 20 69 6e 20 6c 65 6e 67 74 68 2e 20  ytes in length. 
7df0: 20 54 68 65 20 76 61 72 69 6e 74 20 63 6f 6e 73   The varint cons
7e00: 69 73 74 73 20 6f 66 20 65 69 74 68 65 72 0a 7a  ists of either.z
7e10: 65 72 6f 20 6f 72 20 6d 6f 72 65 20 62 79 74 65  ero or more byte
7e20: 73 20 77 68 69 63 68 20 68 61 76 65 20 74 68 65  s which have the
7e30: 20 68 69 67 68 2d 6f 72 64 65 72 20 62 69 74 20   high-order bit 
7e40: 73 65 74 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20  set followed by 
7e50: 61 20 73 69 6e 67 6c 65 20 62 79 74 65 0a 77 69  a single byte.wi
7e60: 74 68 20 74 68 65 20 68 69 67 68 2d 6f 72 64 65  th the high-orde
7e70: 72 20 62 69 74 20 63 6c 65 61 72 2c 20 6f 72 20  r bit clear, or 
7e80: 6e 69 6e 65 20 62 79 74 65 73 2c 20 77 68 69 63  nine bytes, whic
7e90: 68 65 76 65 72 20 69 73 20 73 68 6f 72 74 65 72  hever is shorter
7ea0: 2e 0a 54 68 65 20 6c 6f 77 65 72 20 73 65 76 65  ..The lower seve
7eb0: 6e 20 62 69 74 73 20 6f 66 20 65 61 63 68 20 6f  n bits of each o
7ec0: 66 20 74 68 65 20 66 69 72 73 74 20 65 69 67 68  f the first eigh
7ed0: 74 20 62 79 74 65 73 20 61 6e 64 20 61 6c 6c 20  t bytes and all 
7ee0: 38 20 62 69 74 73 20 6f 66 0a 74 68 65 20 6e 69  8 bits of.the ni
7ef0: 6e 74 68 20 62 79 74 65 20 61 72 65 20 75 73 65  nth byte are use
7f00: 64 20 74 6f 20 72 65 63 6f 6e 73 74 72 75 63 74  d to reconstruct
7f10: 20 74 68 65 20 36 34 2d 62 69 74 20 74 77 6f 73   the 64-bit twos
7f20: 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 74 65  -complement inte
7f30: 67 65 72 2e 0a 56 61 72 69 6e 74 73 20 61 72 65  ger..Varints are
7f40: 20 62 69 67 2d 65 6e 64 69 61 6e 3a 20 62 69 74   big-endian: bit
7f50: 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20 74 68 65  s taken from the
7f60: 20 65 61 72 6c 69 65 72 20 62 79 74 65 20 6f 66   earlier byte of
7f70: 20 74 68 65 20 76 61 72 69 6e 74 0a 61 72 65 20   the varint.are 
7f80: 74 68 65 20 6d 6f 72 65 20 73 69 67 6e 69 66 69  the more signifi
7f90: 63 61 6e 74 20 74 68 61 6e 20 62 69 74 73 20 74  cant than bits t
7fa0: 61 6b 65 6e 20 66 72 6f 6d 20 74 68 65 20 6c 61  aken from the la
7fb0: 74 65 72 20 62 79 74 65 73 2e 20 3c 2f 70 3e 0a  ter bytes. </p>.
7fc0: 0a 3c 70 3e 54 68 65 20 66 6f 72 6d 61 74 20 6f  .<p>The format o
7fd0: 66 20 61 20 63 65 6c 6c 20 64 65 70 65 6e 64 73  f a cell depends
7fe0: 20 6f 6e 20 77 68 69 63 68 20 6b 69 6e 64 20 6f   on which kind o
7ff0: 66 20 62 2d 74 72 65 65 20 70 61 67 65 20 74 68  f b-tree page th
8000: 65 20 63 65 6c 6c 0a 61 70 70 65 61 72 73 20 6f  e cell.appears o
8010: 6e 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  n.  The followin
8020: 67 20 74 61 62 6c 65 20 73 68 6f 77 73 20 74 68  g table shows th
8030: 65 20 65 6c 65 6d 65 6e 74 73 20 6f 66 20 61 20  e elements of a 
8040: 63 65 6c 6c 2c 20 69 6e 0a 6f 72 64 65 72 20 6f  cell, in.order o
8050: 66 20 61 70 70 65 61 72 61 6e 63 65 2c 20 66 6f  f appearance, fo
8060: 72 20 74 68 65 20 76 61 72 69 6f 75 73 20 62 2d  r the various b-
8070: 74 72 65 65 20 70 61 67 65 20 74 79 70 65 73 2e  tree page types.
8080: 0a 0a 3c 64 6c 3e 0a 3c 64 74 3e 3c 70 3e 54 61  ..<dl>.<dt><p>Ta
8090: 62 6c 65 20 42 2d 54 72 65 65 20 4c 65 61 66 20  ble B-Tree Leaf 
80a0: 43 65 6c 6c 20 28 68 65 61 64 65 72 20 30 78 30  Cell (header 0x0
80b0: 64 29 3a 3c 2f 70 3e 3c 2f 64 74 3e 0a 3c 64 64  d):</p></dt>.<dd
80c0: 3e 3c 70 3e 3c 75 6c 3e 0a 3c 6c 69 3e 41 20 76  ><p><ul>.<li>A v
80d0: 61 72 69 6e 74 20 77 68 69 63 68 20 69 73 20 74  arint which is t
80e0: 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20  he total number 
80f0: 6f 66 20 62 79 74 65 73 20 6f 66 20 70 61 79 6c  of bytes of payl
8100: 6f 61 64 2c 20 69 6e 63 6c 75 64 69 6e 67 20 61  oad, including a
8110: 6e 79 0a 6f 76 65 72 66 6c 6f 77 0a 3c 6c 69 3e  ny.overflow.<li>
8120: 41 20 76 61 72 69 6e 74 20 77 68 69 63 68 20 69  A varint which i
8130: 73 20 74 68 65 20 69 6e 74 65 67 65 72 20 6b 65  s the integer ke
8140: 79 2c 20 61 2e 6b 2e 61 2e 20 22 5b 72 6f 77 69  y, a.k.a. "[rowi
8150: 64 5d 22 0a 3c 6c 69 3e 54 68 65 20 69 6e 69 74  d]".<li>The init
8160: 69 61 6c 20 70 6f 72 74 69 6f 6e 20 6f 66 20 74  ial portion of t
8170: 68 65 20 70 61 79 6c 6f 61 64 20 74 68 61 74 20  he payload that 
8180: 64 6f 65 73 20 6e 6f 74 20 73 70 69 6c 6c 20 74  does not spill t
8190: 6f 20 6f 76 65 72 66 6c 6f 77 0a 70 61 67 65 73  o overflow.pages
81a0: 2e 0a 3c 6c 69 3e 41 20 34 2d 62 79 74 65 20 62  ..<li>A 4-byte b
81b0: 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65  ig-endian intege
81c0: 72 20 70 61 67 65 20 6e 75 6d 62 65 72 20 66 6f  r page number fo
81d0: 72 20 74 68 65 20 66 69 72 73 74 20 70 61 67 65  r the first page
81e0: 20 6f 66 20 74 68 65 0a 6f 76 65 72 66 6c 6f 77   of the.overflow
81f0: 20 70 61 67 65 20 6c 69 73 74 20 2d 20 6f 6d 69   page list - omi
8200: 74 74 65 64 20 69 66 20 61 6c 6c 20 70 61 79 6c  tted if all payl
8210: 6f 61 64 20 66 69 74 73 20 6f 6e 20 74 68 65 20  oad fits on the 
8220: 62 2d 74 72 65 65 20 70 61 67 65 2e 0a 3c 2f 75  b-tree page..</u
8230: 6c 3e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74  l></p></dd>..<dt
8240: 3e 3c 70 3e 54 61 62 6c 65 20 42 2d 54 72 65 65  ><p>Table B-Tree
8250: 20 49 6e 74 65 72 69 6f 72 20 43 65 6c 6c 20 28   Interior Cell (
8260: 68 65 61 64 65 72 20 30 78 30 35 29 3a 3c 2f 70  header 0x05):</p
8270: 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 3c 75  ></dt>.<dd><p><u
8280: 6c 3e 0a 3c 6c 69 3e 41 20 34 2d 62 79 74 65 20  l>.<li>A 4-byte 
8290: 62 69 67 2d 65 6e 64 69 61 6e 20 70 61 67 65 20  big-endian page 
82a0: 6e 75 6d 62 65 72 20 77 68 69 63 68 20 69 73 20  number which is 
82b0: 74 68 65 20 6c 65 66 74 20 63 68 69 6c 64 20 70  the left child p
82c0: 6f 69 6e 74 65 72 2e 0a 3c 6c 69 3e 41 20 76 61  ointer..<li>A va
82d0: 72 69 6e 74 20 77 68 69 63 68 20 69 73 20 74 68  rint which is th
82e0: 65 20 69 6e 74 65 67 65 72 20 6b 65 79 0a 3c 2f  e integer key.</
82f0: 75 6c 3e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64  ul></p></dd>..<d
8300: 74 3e 3c 70 3e 49 6e 64 65 78 20 42 2d 54 72 65  t><p>Index B-Tre
8310: 65 20 4c 65 61 66 20 43 65 6c 6c 20 28 68 65 61  e Leaf Cell (hea
8320: 64 65 72 20 30 78 30 61 29 3a 3c 2f 70 3e 3c 2f  der 0x0a):</p></
8330: 64 74 3e 0a 3c 64 64 3e 3c 70 3e 3c 75 6c 3e 0a  dt>.<dd><p><ul>.
8340: 3c 6c 69 3e 41 20 76 61 72 69 6e 74 20 77 68 69  <li>A varint whi
8350: 63 68 20 69 73 20 74 68 65 20 74 6f 74 61 6c 20  ch is the total 
8360: 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  number of bytes 
8370: 6f 66 20 6b 65 79 20 70 61 79 6c 6f 61 64 2c 20  of key payload, 
8380: 69 6e 63 6c 75 64 69 6e 67 20 61 6e 79 0a 6f 76  including any.ov
8390: 65 72 66 6c 6f 77 0a 3c 6c 69 3e 54 68 65 20 69  erflow.<li>The i
83a0: 6e 69 74 69 61 6c 20 70 6f 72 74 69 6f 6e 20 6f  nitial portion o
83b0: 66 20 74 68 65 20 70 61 79 6c 6f 61 64 20 74 68  f the payload th
83c0: 61 74 20 64 6f 65 73 20 6e 6f 74 20 73 70 69 6c  at does not spil
83d0: 6c 20 74 6f 20 6f 76 65 72 66 6c 6f 77 0a 70 61  l to overflow.pa
83e0: 67 65 73 2e 0a 3c 6c 69 3e 41 20 34 2d 62 79 74  ges..<li>A 4-byt
83f0: 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74  e big-endian int
8400: 65 67 65 72 20 70 61 67 65 20 6e 75 6d 62 65 72  eger page number
8410: 20 66 6f 72 20 74 68 65 20 66 69 72 73 74 20 70   for the first p
8420: 61 67 65 20 6f 66 20 74 68 65 0a 6f 76 65 72 66  age of the.overf
8430: 6c 6f 77 20 70 61 67 65 20 6c 69 73 74 20 2d 20  low page list - 
8440: 6f 6d 69 74 74 65 64 20 69 66 20 61 6c 6c 20 70  omitted if all p
8450: 61 79 6c 6f 61 64 20 66 69 74 73 20 6f 6e 20 74  ayload fits on t
8460: 68 65 20 62 2d 74 72 65 65 20 70 61 67 65 2e 0a  he b-tree page..
8470: 3c 2f 75 6c 3e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a  </ul></p></dd>..
8480: 3c 64 74 3e 3c 70 3e 49 6e 64 65 78 20 42 2d 54  <dt><p>Index B-T
8490: 72 65 65 20 49 6e 74 65 72 69 6f 72 20 43 65 6c  ree Interior Cel
84a0: 6c 20 28 68 65 61 64 65 72 20 30 78 30 32 29 3a  l (header 0x02):
84b0: 3c 2f 70 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70  </p></dt>.<dd><p
84c0: 3e 3c 75 6c 3e 0a 3c 6c 69 3e 41 20 34 2d 62 79  ><ul>.<li>A 4-by
84d0: 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 70 61  te big-endian pa
84e0: 67 65 20 6e 75 6d 62 65 72 20 77 68 69 63 68 20  ge number which 
84f0: 69 73 20 74 68 65 20 6c 65 66 74 20 63 68 69 6c  is the left chil
8500: 64 20 70 6f 69 6e 74 65 72 2e 0a 3c 6c 69 3e 41  d pointer..<li>A
8510: 20 76 61 72 69 6e 74 20 77 68 69 63 68 20 69 73   varint which is
8520: 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65   the total numbe
8530: 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 6b 65  r of bytes of ke
8540: 79 20 70 61 79 6c 6f 61 64 2c 20 69 6e 63 6c 75  y payload, inclu
8550: 64 69 6e 67 20 61 6e 79 0a 6f 76 65 72 66 6c 6f  ding any.overflo
8560: 77 0a 3c 6c 69 3e 54 68 65 20 69 6e 69 74 69 61  w.<li>The initia
8570: 6c 20 70 6f 72 74 69 6f 6e 20 6f 66 20 74 68 65  l portion of the
8580: 20 70 61 79 6c 6f 61 64 20 74 68 61 74 20 64 6f   payload that do
8590: 65 73 20 6e 6f 74 20 73 70 69 6c 6c 20 74 6f 20  es not spill to 
85a0: 6f 76 65 72 66 6c 6f 77 0a 70 61 67 65 73 2e 0a  overflow.pages..
85b0: 3c 6c 69 3e 41 20 34 2d 62 79 74 65 20 62 69 67  <li>A 4-byte big
85c0: 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20  -endian integer 
85d0: 70 61 67 65 20 6e 75 6d 62 65 72 20 66 6f 72 20  page number for 
85e0: 74 68 65 20 66 69 72 73 74 20 70 61 67 65 20 6f  the first page o
85f0: 66 20 74 68 65 0a 6f 76 65 72 66 6c 6f 77 20 70  f the.overflow p
8600: 61 67 65 20 6c 69 73 74 20 2d 20 6f 6d 69 74 74  age list - omitt
8610: 65 64 20 69 66 20 61 6c 6c 20 70 61 79 6c 6f 61  ed if all payloa
8620: 64 20 66 69 74 73 20 6f 6e 20 74 68 65 20 62 2d  d fits on the b-
8630: 74 72 65 65 20 70 61 67 65 2e 0a 3c 2f 75 6c 3e  tree page..</ul>
8640: 3c 2f 70 3e 3c 2f 64 64 3e 0a 3c 2f 64 6c 3e 0a  </p></dd>.</dl>.
8650: 0a 3c 70 3e 54 68 65 20 69 6e 66 6f 72 6d 61 74  .<p>The informat
8660: 69 6f 6e 20 61 62 6f 76 65 20 63 61 6e 20 62 65  ion above can be
8670: 20 72 65 63 61 73 74 20 69 6e 74 6f 20 61 20 74   recast into a t
8680: 61 62 6c 65 20 66 6f 72 6d 61 74 20 61 73 20 66  able format as f
8690: 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 74 63  ollows:</p>..<tc
86a0: 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 63 65  l>hd_fragment ce
86b0: 6c 6c 66 6f 72 6d 61 74 20 7b 63 65 6c 6c 20 66  llformat {cell f
86c0: 6f 72 6d 61 74 20 73 75 6d 6d 61 72 79 7d 3c 2f  ormat summary}</
86d0: 74 63 6c 3e 0a 3c 63 65 6e 74 65 72 3e 0a 3c 69  tcl>.<center>.<i
86e0: 3e 42 2d 74 72 65 65 20 43 65 6c 6c 20 46 6f 72  >B-tree Cell For
86f0: 6d 61 74 3c 2f 69 3e 0a 3c 74 61 62 6c 65 20 62  mat</i>.<table b
8700: 6f 72 64 65 72 3d 31 20 77 69 64 74 68 3d 22 38  order=1 width="8
8710: 30 25 22 3e 0a 3c 74 72 3e 3c 74 68 20 72 6f 77  0%">.<tr><th row
8720: 73 70 61 6e 3d 32 3e 44 61 74 61 74 79 70 65 0a  span=2>Datatype.
8730: 20 20 20 20 3c 74 68 20 63 6f 6c 73 70 61 6e 3d      <th colspan=
8740: 34 3e 41 70 70 65 61 72 73 20 69 6e 2e 2e 2e 0a  4>Appears in....
8750: 20 20 20 20 3c 74 68 20 72 6f 77 73 70 61 6e 3d      <th rowspan=
8760: 32 3e 44 65 73 63 72 69 70 74 69 6f 6e 0a 3c 74  2>Description.<t
8770: 72 3e 3c 74 68 3e 54 61 62 6c 65 20 4c 65 61 66  r><th>Table Leaf
8780: 20 28 30 78 30 64 29 0a 20 20 20 20 3c 74 68 3e   (0x0d).    <th>
8790: 54 61 62 6c 65 20 49 6e 74 65 72 69 6f 72 20 28  Table Interior (
87a0: 30 78 30 35 29 0a 20 20 20 20 3c 74 68 3e 49 6e  0x05).    <th>In
87b0: 64 65 78 20 4c 65 61 66 20 28 30 78 30 61 29 0a  dex Leaf (0x0a).
87c0: 20 20 20 20 3c 74 68 3e 49 6e 64 65 78 20 49 6e      <th>Index In
87d0: 74 65 72 69 6f 72 20 28 30 78 30 32 29 0a 3c 74  terior (0x02).<t
87e0: 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74  r><td align=cent
87f0: 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 34 2d  er valign=top>4-
8800: 62 79 74 65 20 69 6e 74 65 67 65 72 0a 20 20 20  byte integer.   
8810: 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65   <td align=cente
8820: 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 6e 62  r valign=top>&nb
8830: 73 70 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67  sp;.    <td alig
8840: 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d  n=center valign=
8850: 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20 20 20  top>&#x2714;.   
8860: 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65   <td align=cente
8870: 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 6e 62  r valign=top>&nb
8880: 73 70 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67  sp;.    <td alig
8890: 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d  n=center valign=
88a0: 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20 20 20  top>&#x2714;.   
88b0: 20 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e   <td align=left>
88c0: 50 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 6c  Page number of l
88d0: 65 66 74 20 63 68 69 6c 64 0a 3c 74 72 3e 3c 74  eft child.<tr><t
88e0: 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76  d align=center v
88f0: 61 6c 69 67 6e 3d 74 6f 70 3e 76 61 72 69 6e 74  align=top>varint
8900: 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63  .    <td align=c
8910: 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70  enter valign=top
8920: 3e 26 23 78 32 37 31 34 3b 0a 20 20 20 20 3c 74  >&#x2714;.    <t
8930: 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76  d align=center v
8940: 61 6c 69 67 6e 3d 74 6f 70 3e 26 6e 62 73 70 3b  align=top>&nbsp;
8950: 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63  .    <td align=c
8960: 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70  enter valign=top
8970: 3e 26 23 78 32 37 31 34 3b 0a 20 20 20 20 3c 74  >&#x2714;.    <t
8980: 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76  d align=center v
8990: 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37 31  align=top>&#x271
89a0: 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e  4;.    <td align
89b0: 3d 6c 65 66 74 3e 4e 75 6d 62 65 72 20 6f 66 20  =left>Number of 
89c0: 62 79 74 65 73 20 6f 66 20 70 61 79 6c 6f 61 64  bytes of payload
89d0: 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63  .<tr><td align=c
89e0: 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70  enter valign=top
89f0: 3e 76 61 72 69 6e 74 0a 20 20 20 20 3c 74 64 20  >varint.    <td 
8a00: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c  align=center val
8a10: 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b  ign=top>&#x2714;
8a20: 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63  .    <td align=c
8a30: 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70  enter valign=top
8a40: 3e 26 23 78 32 37 31 34 3b 0a 20 20 20 20 3c 74  >&#x2714;.    <t
8a50: 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76  d align=center v
8a60: 61 6c 69 67 6e 3d 74 6f 70 3e 26 6e 62 73 70 3b  align=top>&nbsp;
8a70: 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63  .    <td align=c
8a80: 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70  enter valign=top
8a90: 3e 26 6e 62 73 70 3b 0a 20 20 20 20 3c 74 64 20  >&nbsp;.    <td 
8aa0: 61 6c 69 67 6e 3d 6c 65 66 74 3e 52 6f 77 69 64  align=left>Rowid
8ab0: 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63  .<tr><td align=c
8ac0: 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70  enter valign=top
8ad0: 3e 62 79 74 65 20 61 72 72 61 79 0a 20 20 20 20  >byte array.    
8ae0: 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  <td align=center
8af0: 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32   valign=top>&#x2
8b00: 37 31 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69  714;.    <td ali
8b10: 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e  gn=center valign
8b20: 3d 74 6f 70 3e 26 6e 62 73 70 3b 0a 20 20 20 20  =top>&nbsp;.    
8b30: 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  <td align=center
8b40: 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32   valign=top>&#x2
8b50: 37 31 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69  714;.    <td ali
8b60: 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e  gn=center valign
8b70: 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20 20  =top>&#x2714;.  
8b80: 20 20 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74    <td align=left
8b90: 3e 50 61 79 6c 6f 61 64 0a 3c 74 72 3e 3c 74 64  >Payload.<tr><td
8ba0: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61   align=center va
8bb0: 6c 69 67 6e 3d 74 6f 70 3e 34 2d 62 79 74 65 20  lign=top>4-byte 
8bc0: 69 6e 74 65 67 65 72 0a 20 20 20 20 3c 74 64 20  integer.    <td 
8bd0: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c  align=center val
8be0: 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b  ign=top>&#x2714;
8bf0: 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63  .    <td align=c
8c00: 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70  enter valign=top
8c10: 3e 26 6e 62 73 70 3b 0a 20 20 20 20 3c 74 64 20  >&nbsp;.    <td 
8c20: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c  align=center val
8c30: 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b  ign=top>&#x2714;
8c40: 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63  .    <td align=c
8c50: 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70  enter valign=top
8c60: 3e 26 23 78 32 37 31 34 3b 0a 20 20 20 20 3c 74  >&#x2714;.    <t
8c70: 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 50 61 67  d align=left>Pag
8c80: 65 20 6e 75 6d 62 65 72 20 6f 66 20 66 69 72 73  e number of firs
8c90: 74 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 0a  t overflow page.
8ca0: 3c 2f 74 61 62 6c 65 3e 3c 2f 63 65 6e 74 65 72  </table></center
8cb0: 3e 0a 0a 0a 3c 70 3e 54 68 65 20 61 6d 6f 75 6e  >...<p>The amoun
8cc0: 74 20 6f 66 20 70 61 79 6c 6f 61 64 20 74 68 61  t of payload tha
8cd0: 74 20 73 70 69 6c 6c 73 20 6f 6e 74 6f 20 6f 76  t spills onto ov
8ce0: 65 72 66 6c 6f 77 20 70 61 67 65 73 20 61 6c 73  erflow pages als
8cf0: 6f 20 64 65 70 65 6e 64 73 20 6f 6e 0a 74 68 65  o depends on.the
8d00: 20 70 61 67 65 20 74 79 70 65 2e 20 20 46 6f 72   page type.  For
8d10: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63   the following c
8d20: 6f 6d 70 75 74 61 74 69 6f 6e 73 2c 20 6c 65 74  omputations, let
8d30: 20 55 20 62 65 20 74 68 65 20 75 73 61 62 6c 65   U be the usable
8d40: 20 73 69 7a 65 0a 6f 66 20 61 20 64 61 74 61 62   size.of a datab
8d50: 61 73 65 20 70 61 67 65 2c 20 74 68 65 20 74 6f  ase page, the to
8d60: 74 61 6c 20 70 61 67 65 20 73 69 7a 65 20 6c 65  tal page size le
8d70: 73 73 20 74 68 65 20 72 65 73 65 72 76 65 64 20  ss the reserved 
8d80: 73 70 61 63 65 20 61 74 20 74 68 65 0a 65 6e 64  space at the.end
8d90: 20 6f 66 20 65 61 63 68 20 70 61 67 65 2e 20 20   of each page.  
8da0: 41 6e 64 20 6c 65 74 20 50 20 62 65 20 74 68 65  And let P be the
8db0: 20 70 61 79 6c 6f 61 64 20 73 69 7a 65 2e 20 20   payload size.  
8dc0: 49 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  In the following
8dd0: 2c 0a 73 79 6d 62 6f 6c 20 58 20 72 65 70 72 65  ,.symbol X repre
8de0: 73 65 6e 74 73 20 74 68 65 20 6d 61 78 69 6d 75  sents the maximu
8df0: 6d 20 61 6d 6f 75 6e 74 20 6f 66 20 70 61 79 6c  m amount of payl
8e00: 6f 61 64 20 74 68 61 74 20 63 61 6e 20 62 65 20  oad that can be 
8e10: 73 74 6f 72 65 64 20 64 69 72 65 63 74 6c 79 0a  stored directly.
8e20: 6f 6e 20 74 68 65 20 62 2d 74 72 65 65 20 70 61  on the b-tree pa
8e30: 67 65 20 77 69 74 68 6f 75 74 20 73 70 69 6c 6c  ge without spill
8e40: 69 6e 67 20 6f 6e 74 6f 20 61 6e 20 6f 76 65 72  ing onto an over
8e50: 66 6c 6f 77 20 70 61 67 65 20 61 6e 64 20 73 79  flow page and sy
8e60: 6d 62 6f 6c 20 4d 0a 72 65 70 72 65 73 65 6e 74  mbol M.represent
8e70: 73 20 74 68 65 20 6d 69 6e 69 6d 75 6d 20 61 6d  s the minimum am
8e80: 6f 75 6e 74 20 6f 66 20 70 61 79 6c 6f 61 64 20  ount of payload 
8e90: 74 68 61 74 20 6d 75 73 74 20 62 65 20 73 74 6f  that must be sto
8ea0: 72 65 64 20 6f 6e 20 74 68 65 20 62 74 72 65 65  red on the btree
8eb0: 0a 70 61 67 65 20 62 65 66 6f 72 65 20 73 70 69  .page before spi
8ec0: 6c 6c 69 6e 67 20 69 73 20 61 6c 6c 6f 77 65 64  lling is allowed
8ed0: 2e 0a 0a 3c 64 6c 3e 0a 3c 64 74 3e 3c 70 3e 54  ...<dl>.<dt><p>T
8ee0: 61 62 6c 65 20 42 2d 54 72 65 65 20 4c 65 61 66  able B-Tree Leaf
8ef0: 20 43 65 6c 6c 3a 3c 2f 64 74 3e 0a 3c 64 64 3e   Cell:</dt>.<dd>
8f00: 3c 70 3e 0a 5e 28 4c 65 74 20 58 20 62 65 20 55  <p>.^(Let X be U
8f10: 2d 33 35 2e 20 20 49 66 20 74 68 65 20 70 61 79  -35.  If the pay
8f20: 6c 6f 61 64 20 73 69 7a 65 20 50 20 69 73 20 6c  load size P is l
8f30: 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ess than or equa
8f40: 6c 20 74 6f 20 58 20 74 68 65 6e 0a 74 68 65 20  l to X then.the 
8f50: 65 6e 74 69 72 65 20 70 61 79 6c 6f 61 64 20 69  entire payload i
8f60: 73 20 73 74 6f 72 65 64 20 6f 6e 20 74 68 65 20  s stored on the 
8f70: 62 2d 74 72 65 65 20 6c 65 61 66 20 70 61 67 65  b-tree leaf page
8f80: 2e 29 5e 0a 5e 28 4c 65 74 20 4d 20 62 65 20 28  .)^.^(Let M be (
8f90: 28 55 2d 31 32 29 2a 33 32 2f 32 35 35 29 2d 32  (U-12)*32/255)-2
8fa0: 33 20 61 6e 64 20 6c 65 74 20 4b 20 62 65 20 4d  3 and let K be M
8fb0: 2b 28 28 50 2d 4d 29 25 28 55 2d 34 29 29 2e 0a  +((P-M)%(U-4))..
8fc0: 49 66 20 50 20 69 73 20 67 72 65 61 74 65 72 20  If P is greater 
8fd0: 74 68 61 6e 20 58 0a 74 68 65 6e 20 74 68 65 20  than X.then the 
8fe0: 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  number of bytes 
8ff0: 73 74 6f 72 65 64 20 6f 6e 20 74 68 65 20 74 61  stored on the ta
9000: 62 6c 65 20 62 2d 74 72 65 65 20 6c 65 61 66 20  ble b-tree leaf 
9010: 70 61 67 65 20 69 73 20 4b 0a 69 66 20 4b 20 69  page is K.if K i
9020: 73 20 6c 65 73 73 20 6f 72 20 65 71 75 61 6c 20  s less or equal 
9030: 74 6f 20 58 20 6f 72 20 4d 20 6f 74 68 65 72 77  to X or M otherw
9040: 69 73 65 2e 29 5e 0a 5e 28 4e 6f 74 65 20 74 68  ise.)^.^(Note th
9050: 61 74 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74  at number of byt
9060: 65 73 20 73 74 6f 72 65 64 20 6f 6e 20 74 68 65  es stored on the
9070: 20 6c 65 61 66 20 70 61 67 65 20 69 73 20 6e 65   leaf page is ne
9080: 76 65 72 20 6c 65 73 73 20 74 68 61 6e 20 4d 2e  ver less than M.
9090: 29 5e 0a 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64  )^.</p></dd>..<d
90a0: 74 3e 3c 70 3e 54 61 62 6c 65 20 42 2d 54 72 65  t><p>Table B-Tre
90b0: 65 20 49 6e 74 65 72 69 6f 72 20 43 65 6c 6c 3a  e Interior Cell:
90c0: 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 0a 49 6e  </dt>.<dd><p>.In
90d0: 74 65 72 69 6f 72 20 70 61 67 65 73 20 6f 66 20  terior pages of 
90e0: 74 61 62 6c 65 20 62 2d 74 72 65 65 73 20 68 61  table b-trees ha
90f0: 76 65 20 6e 6f 20 70 61 79 6c 6f 61 64 20 61 6e  ve no payload an
9100: 64 20 73 6f 20 74 68 65 72 65 20 69 73 20 6e 65  d so there is ne
9110: 76 65 72 0a 61 6e 79 20 70 61 79 6c 6f 61 64 20  ver.any payload 
9120: 74 6f 20 73 70 69 6c 6c 2e 0a 3c 2f 70 3e 3c 2f  to spill..</p></
9130: 64 64 3e 0a 0a 3c 64 74 3e 3c 70 3e 49 6e 64 65  dd>..<dt><p>Inde
9140: 78 20 42 2d 54 72 65 65 20 4c 65 61 66 20 4f 72  x B-Tree Leaf Or
9150: 20 49 6e 74 65 72 69 6f 72 20 43 65 6c 6c 3a 3c   Interior Cell:<
9160: 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 0a 5e 28 4c  /dt>.<dd><p>.^(L
9170: 65 74 20 58 20 62 65 20 28 28 55 2d 31 32 29 2a  et X be ((U-12)*
9180: 36 34 2f 32 35 35 29 2d 32 33 29 2e 20 20 49 66  64/255)-23).  If
9190: 20 74 68 65 20 70 61 79 6c 6f 61 64 20 73 69 7a   the payload siz
91a0: 65 20 50 20 69 73 20 6c 65 73 73 20 74 68 61 6e  e P is less than
91b0: 0a 6f 72 20 65 71 75 61 6c 20 74 6f 20 58 20 74  .or equal to X t
91c0: 68 65 6e 20 74 68 65 20 65 6e 74 69 72 65 20 70  hen the entire p
91d0: 61 79 6c 6f 61 64 20 69 73 20 73 74 6f 72 65 64  ayload is stored
91e0: 20 6f 6e 20 74 68 65 20 62 2d 74 72 65 65 20 70   on the b-tree p
91f0: 61 67 65 2e 29 5e 0a 5e 28 4c 65 74 20 4d 20 62  age.)^.^(Let M b
9200: 65 20 28 28 55 2d 31 32 29 2a 33 32 2f 32 35 35  e ((U-12)*32/255
9210: 29 2d 32 33 20 61 6e 64 20 6c 65 74 20 4b 20 62  )-23 and let K b
9220: 65 20 4d 2b 28 28 50 2d 4d 29 25 28 55 2d 34 29  e M+((P-M)%(U-4)
9230: 29 2e 0a 49 66 20 50 20 69 73 20 67 72 65 61 74  )..If P is great
9240: 65 72 20 74 68 61 6e 20 58 20 74 68 65 6e 20 74  er than X then t
9250: 68 65 20 6e 75 6d 62 65 72 0a 6f 66 20 62 79 74  he number.of byt
9260: 65 73 20 73 74 6f 72 65 64 20 6f 6e 20 74 68 65  es stored on the
9270: 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20 70 61   index b-tree pa
9280: 67 65 20 69 73 20 4b 20 69 66 20 4b 20 69 73 20  ge is K if K is 
9290: 6c 65 73 73 20 74 68 61 6e 20 6f 72 0a 65 71 75  less than or.equ
92a0: 61 6c 20 74 6f 20 58 20 6f 72 20 4d 20 6f 74 68  al to X or M oth
92b0: 65 72 77 69 73 65 2e 29 5e 0a 5e 28 4e 6f 74 65  erwise.)^.^(Note
92c0: 20 74 68 61 74 20 6e 75 6d 62 65 72 20 6f 66 20   that number of 
92d0: 62 79 74 65 73 20 73 74 6f 72 65 64 20 6f 6e 20  bytes stored on 
92e0: 74 68 65 20 69 6e 64 65 78 20 70 61 67 65 20 69  the index page i
92f0: 73 20 6e 65 76 65 72 20 6c 65 73 73 20 74 68 61  s never less tha
9300: 6e 20 4d 2e 29 5e 0a 3c 2f 70 3e 3c 2f 64 64 3e  n M.)^.</p></dd>
9310: 0a 3c 2f 64 6c 3e 0a 0a 3c 70 3e 48 65 72 65 20  .</dl>..<p>Here 
9320: 69 73 20 61 6e 20 61 6c 74 65 72 6e 61 74 69 76  is an alternativ
9330: 65 20 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 66  e description of
9340: 20 74 68 65 20 73 61 6d 65 20 63 6f 6d 70 75 74   the same comput
9350: 61 74 69 6f 6e 3a 0a 0a 3c 75 6c 3e 0a 3c 6c 69  ation:..<ul>.<li
9360: 3e 58 20 69 73 20 55 2d 33 35 20 66 6f 72 20 74  >X is U-35 for t
9370: 61 62 6c 65 20 62 74 72 65 65 20 6c 65 61 66 20  able btree leaf 
9380: 70 61 67 65 73 20 6f 72 0a 20 20 20 20 28 28 55  pages or.    ((U
9390: 2d 31 32 29 2a 36 34 2f 32 35 35 29 2d 32 33 20  -12)*64/255)-23 
93a0: 66 6f 72 20 69 6e 64 65 78 20 70 61 67 65 73 2e  for index pages.
93b0: 0a 3c 6c 69 3e 4d 20 69 73 20 61 6c 77 61 79 73  .<li>M is always
93c0: 20 28 28 55 2d 31 32 29 2a 33 32 2f 32 35 35 29   ((U-12)*32/255)
93d0: 2d 32 33 2e 0a 3c 6c 69 3e 4c 65 74 20 4b 20 62  -23..<li>Let K b
93e0: 65 20 4d 2b 28 28 50 2d 4d 29 25 28 55 2d 34 29  e M+((P-M)%(U-4)
93f0: 29 2e 0a 3c 6c 69 3e 5e 49 66 20 50 26 6c 74 3b  )..<li>^If P&lt;
9400: 3d 58 20 74 68 65 6e 20 61 6c 6c 20 50 20 62 79  =X then all P by
9410: 74 65 73 20 6f 66 20 70 61 79 6c 6f 61 64 20 61  tes of payload a
9420: 72 65 20 73 74 6f 72 65 64 20 64 69 72 65 63 74  re stored direct
9430: 6c 79 20 6f 6e 20 74 68 65 20 0a 20 20 20 20 62  ly on the .    b
9440: 74 72 65 65 20 70 61 67 65 20 77 69 74 68 6f 75  tree page withou
9450: 74 20 6f 76 65 72 66 6c 6f 77 2e 0a 3c 6c 69 3e  t overflow..<li>
9460: 5e 49 66 20 50 3e 58 20 61 6e 64 20 4b 26 6c 74  ^If P>X and K&lt
9470: 3b 3d 58 20 74 68 65 6e 20 74 68 65 20 66 69 72  ;=X then the fir
9480: 73 74 20 4b 20 62 79 74 65 73 20 6f 66 20 50 20  st K bytes of P 
9490: 61 72 65 20 73 74 6f 72 65 64 20 6f 6e 20 74 68  are stored on th
94a0: 65 20 0a 20 20 20 20 62 74 72 65 65 20 70 61 67  e .    btree pag
94b0: 65 20 61 6e 64 20 74 68 65 20 72 65 6d 61 69 6e  e and the remain
94c0: 69 6e 67 20 50 2d 4b 20 62 79 74 65 73 20 61 72  ing P-K bytes ar
94d0: 65 20 73 74 6f 72 65 64 20 6f 6e 20 6f 76 65 72  e stored on over
94e0: 66 6c 6f 77 20 70 61 67 65 73 2e 0a 3c 6c 69 3e  flow pages..<li>
94f0: 5e 49 66 20 50 3e 58 20 61 6e 64 20 4b 3e 58 20  ^If P>X and K>X 
9500: 74 68 65 6e 20 74 68 65 20 66 69 72 73 74 20 4d  then the first M
9510: 20 62 79 74 65 73 20 6f 66 20 50 20 61 72 65 20   bytes of P are 
9520: 73 74 6f 72 65 64 20 6f 6e 20 74 68 65 0a 20 20  stored on the.  
9530: 20 20 62 74 72 65 65 20 70 61 67 65 20 61 6e 64    btree page and
9540: 20 74 68 65 20 72 65 6d 61 69 6e 69 6e 67 20 50   the remaining P
9550: 2d 4d 20 62 79 74 65 73 20 61 72 65 20 73 74 6f  -M bytes are sto
9560: 72 65 64 20 6f 6e 20 6f 76 65 72 66 6c 6f 77 20  red on overflow 
9570: 70 61 67 65 73 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70  pages..</ul>..<p
9580: 3e 54 68 65 20 6f 76 65 72 66 6c 6f 77 20 74 68  >The overflow th
9590: 72 65 73 68 6f 6c 64 73 20 61 72 65 20 64 65 73  resholds are des
95a0: 69 67 6e 65 64 20 74 6f 20 67 69 76 65 20 61 20  igned to give a 
95b0: 6d 69 6e 69 6d 75 6d 20 66 61 6e 6f 75 74 20 6f  minimum fanout o
95c0: 66 0a 34 20 66 6f 72 20 69 6e 64 65 78 20 62 2d  f.4 for index b-
95d0: 74 72 65 65 73 20 61 6e 64 20 74 6f 20 6d 61 6b  trees and to mak
95e0: 65 20 73 75 72 65 20 65 6e 6f 75 67 68 20 6f 66  e sure enough of
95f0: 20 74 68 65 20 70 61 79 6c 6f 61 64 0a 69 73 20   the payload.is 
9600: 6f 6e 20 74 68 65 20 62 2d 74 72 65 65 20 70 61  on the b-tree pa
9610: 67 65 20 74 68 61 74 20 74 68 65 20 72 65 63 6f  ge that the reco
9620: 72 64 20 68 65 61 64 65 72 20 63 61 6e 20 75 73  rd header can us
9630: 75 61 6c 6c 79 20 62 65 20 61 63 63 65 73 73 65  ually be accesse
9640: 64 0a 77 69 74 68 6f 75 74 20 63 6f 6e 73 75 6c  d.without consul
9650: 74 69 6e 67 20 61 6e 20 6f 76 65 72 66 6c 6f 77  ting an overflow
9660: 20 70 61 67 65 2e 20 20 49 6e 20 68 69 6e 64 73   page.  In hinds
9670: 69 67 68 74 2c 20 74 68 65 20 64 65 73 69 67 6e  ight, the design
9680: 65 72 73 20 6f 66 0a 74 68 65 20 53 51 4c 69 74  ers of.the SQLit
9690: 65 20 62 2d 74 72 65 65 20 6c 6f 67 69 63 20 72  e b-tree logic r
96a0: 65 61 6c 69 7a 65 20 74 68 61 74 20 74 68 65 73  ealize that thes
96b0: 65 20 74 68 72 65 73 68 6f 6c 64 73 20 63 6f 75  e thresholds cou
96c0: 6c 64 20 68 61 76 65 20 62 65 65 6e 0a 6d 61 64  ld have been.mad
96d0: 65 20 6d 75 63 68 20 73 69 6d 70 6c 65 72 2e 20  e much simpler. 
96e0: 20 48 6f 77 65 76 65 72 2c 20 74 68 65 20 63 6f   However, the co
96f0: 6d 70 75 74 61 74 69 6f 6e 73 20 63 61 6e 6e 6f  mputations canno
9700: 74 20 62 65 20 63 68 61 6e 67 65 64 0a 77 69 74  t be changed.wit
9710: 68 6f 75 74 20 72 65 73 75 6c 74 69 6e 67 20 69  hout resulting i
9720: 6e 20 61 6e 20 69 6e 63 6f 6d 70 61 74 69 62 6c  n an incompatibl
9730: 65 20 66 69 6c 65 20 66 6f 72 6d 61 74 2e 20 20  e file format.  
9740: 41 6e 64 20 74 68 65 20 63 75 72 72 65 6e 74 20  And the current 
9750: 63 6f 6d 70 75 74 61 74 69 6f 6e 73 0a 77 6f 72  computations.wor
9760: 6b 20 77 65 6c 6c 2c 20 65 76 65 6e 20 69 66 20  k well, even if 
9770: 74 68 65 79 20 61 72 65 20 61 20 6c 69 74 74 6c  they are a littl
9780: 65 20 63 6f 6d 70 6c 65 78 2e 3c 2f 70 3e 0a 0a  e complex.</p>..
9790: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
97a0: 20 6f 76 66 6c 70 67 73 20 7b 6f 76 65 72 66 6c   ovflpgs {overfl
97b0: 6f 77 20 70 61 67 65 7d 20 7b 6f 76 65 72 66 6c  ow page} {overfl
97c0: 6f 77 20 70 61 67 65 73 7d 3c 2f 74 63 6c 3e 0a  ow pages}</tcl>.
97d0: 3c 68 32 3e 43 65 6c 6c 20 50 61 79 6c 6f 61 64  <h2>Cell Payload
97e0: 20 4f 76 65 72 66 6c 6f 77 20 50 61 67 65 73 3c   Overflow Pages<
97f0: 2f 68 32 3e 0a 0a 3c 70 3e 5e 57 68 65 6e 20 74  /h2>..<p>^When t
9800: 68 65 20 70 61 79 6c 6f 61 64 20 6f 66 20 61 20  he payload of a 
9810: 62 2d 74 72 65 65 20 63 65 6c 6c 20 69 73 20 74  b-tree cell is t
9820: 6f 6f 20 6c 61 72 67 65 20 66 6f 72 20 74 68 65  oo large for the
9830: 20 62 2d 74 72 65 65 20 70 61 67 65 2c 0a 74 68   b-tree page,.th
9840: 65 20 73 75 72 70 6c 75 73 20 69 73 20 73 70 69  e surplus is spi
9850: 6c 6c 65 64 20 6f 6e 74 6f 20 6f 76 65 72 66 6c  lled onto overfl
9860: 6f 77 20 70 61 67 65 73 2e 20 20 5e 4f 76 65 72  ow pages.  ^Over
9870: 66 6c 6f 77 20 70 61 67 65 73 20 66 6f 72 6d 20  flow pages form 
9880: 61 20 6c 69 6e 6b 65 64 0a 6c 69 73 74 2e 20 20  a linked.list.  
9890: 5e 54 68 65 20 66 69 72 73 74 20 66 6f 75 72 20  ^The first four 
98a0: 62 79 74 65 73 20 6f 66 20 65 61 63 68 20 6f 76  bytes of each ov
98b0: 65 72 66 6c 6f 77 20 70 61 67 65 20 61 72 65 20  erflow page are 
98c0: 61 20 62 69 67 2d 65 6e 64 69 61 6e 0a 69 6e 74  a big-endian.int
98d0: 65 67 65 72 20 77 68 69 63 68 20 69 73 20 74 68  eger which is th
98e0: 65 20 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66  e page number of
98f0: 20 74 68 65 20 6e 65 78 74 20 70 61 67 65 20 69   the next page i
9900: 6e 20 74 68 65 20 63 68 61 69 6e 2c 20 6f 72 20  n the chain, or 
9910: 7a 65 72 6f 0a 66 6f 72 20 74 68 65 20 66 69 6e  zero.for the fin
9920: 61 6c 20 70 61 67 65 20 69 6e 20 74 68 65 20 63  al page in the c
9930: 68 61 69 6e 2e 20 20 5e 54 68 65 20 66 69 66 74  hain.  ^The fift
9940: 68 20 62 79 74 65 20 74 68 72 6f 75 67 68 20 74  h byte through t
9950: 68 65 20 6c 61 73 74 20 75 73 61 62 6c 65 0a 62  he last usable.b
9960: 79 74 65 20 61 72 65 20 75 73 65 64 20 74 6f 20  yte are used to 
9970: 68 6f 6c 64 20 6f 76 65 72 66 6c 6f 77 20 63 6f  hold overflow co
9980: 6e 74 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c 68 32 3e  ntent.</p>..<h2>
9990: 50 6f 69 6e 74 65 72 20 4d 61 70 20 6f 72 20 50  Pointer Map or P
99a0: 74 72 6d 61 70 20 50 61 67 65 73 3c 2f 68 32 3e  trmap Pages</h2>
99b0: 0a 0a 3c 70 3e 50 6f 69 6e 74 65 72 20 6d 61 70  ..<p>Pointer map
99c0: 20 6f 72 20 70 74 72 6d 61 70 20 70 61 67 65 73   or ptrmap pages
99d0: 20 61 72 65 20 65 78 74 72 61 20 70 61 67 65 73   are extra pages
99e0: 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 74   inserted into t
99f0: 68 65 20 64 61 74 61 62 61 73 65 0a 74 6f 20 6d  he database.to m
9a00: 61 6b 65 20 74 68 65 20 6f 70 65 72 61 74 69 6f  ake the operatio
9a10: 6e 20 6f 66 20 5b 61 75 74 6f 5f 76 61 63 75 75  n of [auto_vacuu
9a20: 6d 5d 20 61 6e 64 20 5b 69 6e 63 72 65 6d 65 6e  m] and [incremen
9a30: 74 61 6c 5f 76 61 63 75 75 6d 5d 20 6d 6f 64 65  tal_vacuum] mode
9a40: 73 0a 6d 6f 72 65 20 65 66 66 69 63 69 65 6e 74  s.more efficient
9a50: 2e 20 20 4f 74 68 65 72 20 70 61 67 65 20 74 79  .  Other page ty
9a60: 70 65 73 20 69 6e 20 74 68 65 20 64 61 74 61 62  pes in the datab
9a70: 61 73 65 20 74 79 70 69 63 61 6c 6c 79 20 68 61  ase typically ha
9a80: 76 65 20 70 6f 69 6e 74 65 72 73 0a 66 72 6f 6d  ve pointers.from
9a90: 20 70 61 72 65 6e 74 20 74 6f 20 63 68 69 6c 64   parent to child
9aa0: 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20  .  For example, 
9ab0: 61 6e 20 69 6e 74 65 72 69 6f 72 20 62 2d 74 72  an interior b-tr
9ac0: 65 65 20 70 61 67 65 20 63 6f 6e 74 61 69 6e 73  ee page contains
9ad0: 20 70 6f 69 6e 74 65 72 73 0a 74 6f 20 69 74 73   pointers.to its
9ae0: 20 63 68 69 6c 64 20 62 2d 74 72 65 65 20 70 61   child b-tree pa
9af0: 67 65 73 20 61 6e 64 20 61 6e 20 6f 76 65 72 66  ges and an overf
9b00: 6c 6f 77 20 63 68 61 69 6e 20 68 61 73 20 61 20  low chain has a 
9b10: 70 6f 69 6e 74 65 72 0a 66 72 6f 6d 20 65 61 72  pointer.from ear
9b20: 6c 69 65 72 20 74 6f 20 6c 61 74 65 72 20 6c 69  lier to later li
9b30: 6e 6b 73 20 69 6e 20 74 68 65 20 63 68 61 69 6e  nks in the chain
9b40: 2e 20 20 41 20 70 74 72 6d 61 70 20 70 61 67 65  .  A ptrmap page
9b50: 20 63 6f 6e 74 61 69 6e 73 20 6c 69 6e 6b 61 67   contains linkag
9b60: 65 0a 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 67 6f  e.information go
9b70: 69 6e 67 20 69 6e 20 74 68 65 20 6f 70 70 6f 73  ing in the oppos
9b80: 69 74 65 20 64 69 72 65 63 74 69 6f 6e 2c 20 66  ite direction, f
9b90: 72 6f 6d 20 63 68 69 6c 64 20 74 6f 20 70 61 72  rom child to par
9ba0: 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 50 74  ent.</p>..<p>^Pt
9bb0: 72 6d 61 70 20 70 61 67 65 73 20 6d 75 73 74 20  rmap pages must 
9bc0: 65 78 69 73 74 20 69 6e 20 61 6e 79 20 64 61 74  exist in any dat
9bd0: 61 62 61 73 65 20 66 69 6c 65 20 77 68 69 63 68  abase file which
9be0: 20 68 61 73 20 61 20 6e 6f 6e 2d 7a 65 72 6f 0a   has a non-zero.
9bf0: 6c 61 72 67 65 73 74 20 72 6f 6f 74 20 62 2d 74  largest root b-t
9c00: 72 65 65 20 70 61 67 65 20 76 61 6c 75 65 20 61  ree page value a
9c10: 74 20 6f 66 66 73 65 74 20 35 32 20 69 6e 20 74  t offset 52 in t
9c20: 68 65 20 64 61 74 61 62 61 73 65 20 68 65 61 64  he database head
9c30: 65 72 2e 0a 5e 49 66 20 74 68 65 20 6c 61 72 67  er..^If the larg
9c40: 65 73 74 20 72 6f 6f 74 20 62 2d 74 72 65 65 20  est root b-tree 
9c50: 70 61 67 65 20 76 61 6c 75 65 20 69 73 20 7a 65  page value is ze
9c60: 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 64 61 74  ro, then the dat
9c70: 61 62 61 73 65 20 6d 75 73 74 20 6e 6f 74 0a 63  abase must not.c
9c80: 6f 6e 74 61 69 6e 20 70 74 72 6d 61 70 20 70 61  ontain ptrmap pa
9c90: 67 65 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 6e  ges.</p>..<p>^In
9ca0: 20 61 20 64 61 74 61 62 61 73 65 20 77 69 74 68   a database with
9cb0: 20 70 74 72 6d 61 70 20 70 61 67 65 73 2c 20 74   ptrmap pages, t
9cc0: 68 65 20 66 69 72 73 74 20 70 74 72 6d 61 70 20  he first ptrmap 
9cd0: 70 61 67 65 20 69 73 20 70 61 67 65 20 32 2e 0a  page is page 2..
9ce0: 41 20 70 74 72 6d 61 70 20 70 61 67 65 20 63 6f  A ptrmap page co
9cf0: 6e 73 69 73 74 73 20 6f 66 20 61 6e 20 61 72 72  nsists of an arr
9d00: 61 79 20 6f 66 20 35 2d 62 79 74 65 20 65 6e 74  ay of 5-byte ent
9d10: 72 69 65 73 2e 20 20 4c 65 74 20 4a 20 62 65 20  ries.  Let J be 
9d20: 74 68 65 0a 6e 75 6d 62 65 72 20 6f 66 20 35 2d  the.number of 5-
9d30: 62 79 74 65 20 65 6e 74 72 69 65 73 20 74 68 61  byte entries tha
9d40: 74 20 77 69 6c 6c 20 66 69 74 20 69 6e 20 74 68  t will fit in th
9d50: 65 20 75 73 61 62 6c 65 20 73 70 61 63 65 20 6f  e usable space o
9d60: 66 20 61 20 70 61 67 65 2e 0a 28 49 6e 20 6f 74  f a page..(In ot
9d70: 68 65 72 20 77 6f 72 64 73 2c 20 4a 3d 55 2f 35  her words, J=U/5
9d80: 2e 29 20 20 5e 54 68 65 20 66 69 72 73 74 20 70  .)  ^The first p
9d90: 74 72 6d 61 70 20 70 61 67 65 20 77 69 6c 6c 20  trmap page will 
9da0: 63 6f 6e 74 61 69 6e 20 62 61 63 6b 20 70 6f 69  contain back poi
9db0: 6e 74 65 72 0a 69 6e 66 6f 72 6d 61 74 69 6f 6e  nter.information
9dc0: 20 66 6f 72 20 70 61 67 65 73 20 33 20 74 68 72   for pages 3 thr
9dd0: 6f 75 67 68 20 4a 2b 32 2c 20 69 6e 63 6c 75 73  ough J+2, inclus
9de0: 69 76 65 2e 20 20 5e 54 68 65 20 73 65 63 6f 6e  ive.  ^The secon
9df0: 64 20 70 6f 69 6e 74 65 72 20 6d 61 70 0a 70 61  d pointer map.pa
9e00: 67 65 20 77 69 6c 6c 20 62 65 20 6f 6e 20 70 61  ge will be on pa
9e10: 67 65 20 4a 2b 33 20 61 6e 64 20 74 68 61 74 20  ge J+3 and that 
9e20: 70 74 72 6d 61 70 20 70 61 67 65 20 77 69 6c 6c  ptrmap page will
9e30: 20 70 72 6f 76 69 64 65 20 62 61 63 6b 20 70 6f   provide back po
9e40: 69 6e 74 65 72 0a 69 6e 66 6f 72 6d 61 74 69 6f  inter.informatio
9e50: 6e 20 66 6f 72 20 70 61 67 65 73 20 4a 2b 34 20  n for pages J+4 
9e60: 74 68 72 6f 75 67 68 20 32 2a 4a 2b 33 20 69 6e  through 2*J+3 in
9e70: 63 6c 75 73 69 76 65 2e 20 20 41 6e 64 20 73 6f  clusive.  And so
9e80: 20 66 6f 72 74 68 20 66 6f 72 0a 74 68 65 20 65   forth for.the e
9e90: 6e 74 69 72 65 20 64 61 74 61 62 61 73 65 20 66  ntire database f
9ea0: 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28 49  ile.</p>..<p>^(I
9eb0: 6e 20 61 20 64 61 74 61 62 61 73 65 20 74 68 61  n a database tha
9ec0: 74 20 75 73 65 73 20 70 74 72 6d 61 70 20 70 61  t uses ptrmap pa
9ed0: 67 65 73 2c 20 61 6c 6c 20 70 61 67 65 73 20 61  ges, all pages a
9ee0: 74 20 6c 6f 63 61 74 69 6f 6e 73 20 69 64 65 6e  t locations iden
9ef0: 74 69 66 69 65 64 0a 62 79 20 74 68 65 20 63 6f  tified.by the co
9f00: 6d 70 75 74 61 74 69 6f 6e 20 69 6e 20 74 68 65  mputation in the
9f10: 20 70 72 65 76 69 6f 75 73 20 70 61 72 61 67 72   previous paragr
9f20: 61 70 68 20 6d 75 73 74 20 62 65 20 70 74 72 6d  aph must be ptrm
9f30: 61 70 20 70 61 67 65 20 61 6e 64 20 6e 6f 0a 6f  ap page and no.o
9f40: 74 68 65 72 20 70 61 67 65 20 6d 61 79 20 62 65  ther page may be
9f50: 20 61 20 70 74 72 6d 61 70 20 70 61 67 65 2e 20   a ptrmap page. 
9f60: 20 45 78 63 65 70 74 2c 20 69 66 20 74 68 65 20   Except, if the 
9f70: 62 79 74 65 2d 6c 6f 63 6b 20 70 61 67 65 20 68  byte-lock page h
9f80: 61 70 70 65 6e 73 20 74 6f 0a 66 61 6c 6c 20 6f  appens to.fall o
9f90: 6e 20 74 68 65 20 73 61 6d 65 20 70 61 67 65 20  n the same page 
9fa0: 6e 75 6d 62 65 72 20 61 73 20 61 20 70 74 72 6d  number as a ptrm
9fb0: 61 70 20 70 61 67 65 2c 20 74 68 65 6e 20 74 68  ap page, then th
9fc0: 65 20 70 74 72 6d 61 70 20 69 73 20 6d 6f 76 65  e ptrmap is move
9fd0: 64 0a 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69  d.to the followi
9fe0: 6e 67 20 70 61 67 65 20 66 6f 72 20 74 68 61 74  ng page for that
9ff0: 20 6f 6e 65 20 63 61 73 65 2e 29 5e 3c 2f 70 3e   one case.)^</p>
a000: 0a 0a 3c 70 3e 45 61 63 68 20 35 2d 62 79 74 65  ..<p>Each 5-byte
a010: 20 65 6e 74 72 79 20 6f 6e 20 61 20 70 74 72 6d   entry on a ptrm
a020: 61 70 20 70 61 67 65 20 70 72 6f 76 69 64 65 73  ap page provides
a030: 20 62 61 63 6b 2d 6c 69 6e 6b 20 69 6e 66 6f 72   back-link infor
a040: 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 0a 6f 6e  mation about .on
a050: 65 20 6f 66 20 74 68 65 20 70 61 67 65 73 20 74  e of the pages t
a060: 68 61 74 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  hat immediately 
a070: 66 6f 6c 6c 6f 77 20 74 68 65 20 70 6f 69 6e 74  follow the point
a080: 65 72 20 6d 61 70 2e 20 20 5e 28 49 66 20 70 61  er map.  ^(If pa
a090: 67 65 20 42 20 69 73 20 61 0a 70 74 72 6d 61 70  ge B is a.ptrmap
a0a0: 20 70 61 67 65 20 74 68 65 6e 20 62 61 63 6b 2d   page then back-
a0b0: 6c 69 6e 6b 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  link information
a0c0: 20 61 62 6f 75 74 20 70 61 67 65 20 42 2b 31 20   about page B+1 
a0d0: 69 73 20 70 72 6f 76 69 64 65 64 20 62 79 0a 74  is provided by.t
a0e0: 68 65 20 66 69 72 73 74 20 65 6e 74 72 79 20 6f  he first entry o
a0f0: 6e 20 74 68 65 20 70 6f 69 6e 74 65 72 20 6d 61  n the pointer ma
a100: 70 2e 20 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20  p.  Information 
a110: 61 62 6f 75 74 20 70 61 67 65 20 42 2b 32 20 69  about page B+2 i
a120: 73 0a 70 72 6f 76 69 64 65 64 20 62 79 20 74 68  s.provided by th
a130: 65 20 73 65 63 6f 6e 64 20 65 6e 74 72 79 2e 20  e second entry. 
a140: 20 41 6e 64 20 73 6f 20 66 6f 72 74 68 2e 29 5e   And so forth.)^
a150: 3c 2f 70 3e 0a 0a 3c 70 3e 45 61 63 68 20 35 2d  </p>..<p>Each 5-
a160: 62 79 74 65 20 70 74 72 6d 61 70 20 65 6e 74 72  byte ptrmap entr
a170: 79 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 6f 6e  y consists of on
a180: 65 20 62 79 74 65 20 6f 66 20 22 70 61 67 65 20  e byte of "page 
a190: 74 79 70 65 22 20 69 6e 66 6f 72 6d 61 74 69 6f  type" informatio
a1a0: 6e 0a 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20  n.followed by a 
a1b0: 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61  4-byte big-endia
a1c0: 6e 20 70 61 67 65 20 6e 75 6d 62 65 72 2e 20 20  n page number.  
a1d0: 46 69 76 65 20 70 61 67 65 20 74 79 70 65 73 20  Five page types 
a1e0: 61 72 65 20 72 65 63 6f 67 6e 69 7a 65 64 3a 0a  are recognized:.
a1f0: 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 41  </p>..<ol>.<li>A
a200: 20 62 2d 74 72 65 65 20 72 6f 6f 74 20 70 61 67   b-tree root pag
a210: 65 2e 20 20 54 68 65 0a 70 61 67 65 20 6e 75 6d  e.  The.page num
a220: 62 65 72 20 73 68 6f 75 6c 64 20 62 65 20 7a 65  ber should be ze
a230: 72 6f 2e 0a 3c 6c 69 3e 41 20 66 72 65 65 6c 69  ro..<li>A freeli
a240: 73 74 20 70 61 67 65 2e 20 20 54 68 65 20 70 61  st page.  The pa
a250: 67 65 20 6e 75 6d 62 65 72 20 73 68 6f 75 6c 64  ge number should
a260: 20 62 65 0a 7a 65 72 6f 2e 0a 3c 6c 69 3e 54 68   be.zero..<li>Th
a270: 65 20 66 69 72 73 74 20 70 61 67 65 20 6f 66 20  e first page of 
a280: 61 0a 63 65 6c 6c 20 70 61 79 6c 6f 61 64 20 6f  a.cell payload o
a290: 76 65 72 66 6c 6f 77 20 63 68 61 69 6e 2e 20 20  verflow chain.  
a2a0: 54 68 65 20 70 61 67 65 20 6e 75 6d 62 65 72 20  The page number 
a2b0: 69 73 20 74 68 65 20 62 2d 74 72 65 65 20 70 61  is the b-tree pa
a2c0: 67 65 20 74 68 61 74 0a 63 6f 6e 74 61 69 6e 73  ge that.contains
a2d0: 20 74 68 65 20 63 65 6c 6c 20 77 68 6f 73 65 20   the cell whose 
a2e0: 63 6f 6e 74 65 6e 74 20 68 61 73 20 6f 76 65 72  content has over
a2f0: 66 6c 6f 77 65 64 2e 0a 3c 6c 69 3e 41 20 70 61  flowed..<li>A pa
a300: 67 65 20 69 6e 20 61 6e 20 6f 76 65 72 66 6c 6f  ge in an overflo
a310: 77 20 63 68 61 69 6e 0a 6f 74 68 65 72 20 74 68  w chain.other th
a320: 61 6e 20 74 68 65 20 66 69 72 73 74 20 70 61 67  an the first pag
a330: 65 2e 20 20 54 68 65 20 70 61 67 65 20 6e 75 6d  e.  The page num
a340: 62 65 72 20 69 73 20 74 68 65 20 70 72 69 6f 72  ber is the prior
a350: 20 70 61 67 65 20 6f 66 20 74 68 65 0a 6f 76 65   page of the.ove
a360: 72 66 6c 6f 77 20 63 68 61 69 6e 2e 0a 3c 6c 69  rflow chain..<li
a370: 3e 41 20 6e 6f 6e 2d 72 6f 6f 74 20 62 2d 74 72  >A non-root b-tr
a380: 65 65 20 70 61 67 65 2e 20 20 54 68 65 0a 70 61  ee page.  The.pa
a390: 67 65 20 6e 75 6d 62 65 72 20 69 73 20 74 68 65  ge number is the
a3a0: 20 70 61 72 65 6e 74 20 62 2d 74 72 65 65 20 70   parent b-tree p
a3b0: 61 67 65 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 5e  age..</ol>..<p>^
a3c0: 49 6e 20 61 6e 79 20 64 61 74 61 62 61 73 65 20  In any database 
a3d0: 66 69 6c 65 20 74 68 61 74 20 63 6f 6e 74 61 69  file that contai
a3e0: 6e 73 20 70 74 72 6d 61 70 20 70 61 67 65 73 2c  ns ptrmap pages,
a3f0: 20 61 6c 6c 20 62 2d 74 72 65 65 20 72 6f 6f 74   all b-tree root
a400: 20 70 61 67 65 73 20 0a 6d 75 73 74 20 63 6f 6d   pages .must com
a410: 65 20 62 65 66 6f 72 65 20 61 6e 79 20 6e 6f 6e  e before any non
a420: 2d 72 6f 6f 74 20 62 2d 74 72 65 65 20 70 61 67  -root b-tree pag
a430: 65 2c 20 63 65 6c 6c 20 70 61 79 6c 6f 61 64 20  e, cell payload 
a440: 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 2c 20 6f  overflow page, o
a450: 72 0a 66 72 65 65 6c 69 73 74 20 70 61 67 65 2e  r.freelist page.
a460: 20 20 54 68 69 73 20 72 65 73 74 72 69 63 74 69    This restricti
a470: 6f 6e 20 65 6e 73 75 72 65 73 20 74 68 61 74 20  on ensures that 
a480: 61 20 72 6f 6f 74 20 70 61 67 65 20 77 69 6c 6c  a root page will
a490: 20 6e 65 76 65 72 0a 62 65 20 6d 6f 76 65 64 20   never.be moved 
a4a0: 64 75 72 69 6e 67 20 61 6e 20 61 75 74 6f 2d 76  during an auto-v
a4b0: 61 63 75 75 6d 20 6f 72 20 69 6e 63 72 65 6d 65  acuum or increme
a4c0: 6e 74 61 6c 2d 76 61 63 75 75 6d 2e 20 20 54 68  ntal-vacuum.  Th
a4d0: 65 20 61 75 74 6f 2d 76 61 63 75 75 6d 0a 6c 6f  e auto-vacuum.lo
a4e0: 67 69 63 20 64 6f 65 73 20 6e 6f 74 20 6b 6e 6f  gic does not kno
a4f0: 77 20 68 6f 77 20 74 6f 20 75 70 64 61 74 65 20  w how to update 
a500: 74 68 65 20 72 6f 6f 74 5f 70 61 67 65 20 66 69  the root_page fi
a510: 65 6c 64 20 6f 66 20 74 68 65 20 73 71 6c 69 74  eld of the sqlit
a520: 65 5f 6d 61 73 74 65 72 0a 74 61 62 6c 65 20 61  e_master.table a
a530: 6e 64 20 73 6f 20 69 74 20 69 73 20 6e 65 63 65  nd so it is nece
a540: 73 73 61 72 79 20 74 6f 20 70 72 65 76 65 6e 74  ssary to prevent
a550: 20 72 6f 6f 74 20 70 61 67 65 73 20 66 72 6f 6d   root pages from
a560: 20 62 65 69 6e 67 20 6d 6f 76 65 64 0a 64 75 72   being moved.dur
a570: 69 6e 67 20 61 6e 20 61 75 74 6f 2d 76 61 63 75  ing an auto-vacu
a580: 75 6d 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 70  um in order to p
a590: 72 65 73 65 72 76 65 20 74 68 65 20 69 6e 74 65  reserve the inte
a5a0: 67 72 69 74 79 20 6f 66 20 74 68 65 0a 73 71 6c  grity of the.sql
a5b0: 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65  ite_master table
a5c0: 2e 20 20 5e 52 6f 6f 74 20 70 61 67 65 73 20 61  .  ^Root pages a
a5d0: 72 65 20 6d 6f 76 65 64 20 74 6f 20 74 68 65 20  re moved to the 
a5e0: 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65  beginning of the
a5f0: 0a 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 62  .database file b
a600: 79 20 74 68 65 20 43 52 45 41 54 45 20 54 41 42  y the CREATE TAB
a610: 4c 45 2c 20 43 52 45 41 54 45 20 49 4e 44 45 58  LE, CREATE INDEX
a620: 2c 20 44 52 4f 50 20 54 41 42 4c 45 2c 20 61 6e  , DROP TABLE, an
a630: 64 0a 44 52 4f 50 20 49 4e 44 45 58 20 6f 70 65  d.DROP INDEX ope
a640: 72 61 74 69 6f 6e 73 2e 3c 2f 70 3e 0a 0a 3c 68  rations.</p>..<h
a650: 31 3e 53 63 68 65 6d 61 20 4c 61 79 65 72 3c 2f  1>Schema Layer</
a660: 68 31 3e 0a 0a 3c 70 3e 54 68 65 20 66 6f 72 65  h1>..<p>The fore
a670: 67 6f 69 6e 67 20 74 65 78 74 20 64 65 73 63 72  going text descr
a680: 69 62 65 73 20 6c 6f 77 2d 6c 65 76 65 6c 20 61  ibes low-level a
a690: 73 70 65 63 74 73 20 6f 66 20 74 68 65 20 53 51  spects of the SQ
a6a0: 4c 69 74 65 20 66 69 6c 65 0a 66 6f 72 6d 61 74  Lite file.format
a6b0: 2e 20 20 54 68 65 20 62 2d 74 72 65 65 20 6d 65  .  The b-tree me
a6c0: 63 68 61 6e 69 73 6d 20 70 72 6f 76 69 64 65 73  chanism provides
a6d0: 20 61 20 70 6f 77 65 72 66 75 6c 20 61 6e 64 20   a powerful and 
a6e0: 65 66 66 69 63 69 65 6e 74 20 6d 65 61 6e 73 20  efficient means 
a6f0: 6f 66 0a 61 63 63 65 73 73 69 6e 67 20 61 20 6c  of.accessing a l
a700: 61 72 67 65 20 64 61 74 61 20 73 65 74 2e 20 20  arge data set.  
a710: 54 68 69 73 20 73 65 63 74 69 6f 6e 20 77 69 6c  This section wil
a720: 6c 20 64 65 73 63 72 69 62 65 20 68 6f 77 20 74  l describe how t
a730: 68 65 0a 6c 6f 77 2d 6c 65 76 65 6c 20 62 2d 74  he.low-level b-t
a740: 72 65 65 20 6c 61 79 65 72 20 69 73 20 75 73 65  ree layer is use
a750: 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 68  d to implement h
a760: 69 67 68 65 72 2d 6c 65 76 65 6c 20 53 51 4c 0a  igher-level SQL.
a770: 63 61 70 61 62 69 6c 69 74 69 65 73 2e 3c 2f 70  capabilities.</p
a780: 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
a790: 65 6e 74 20 72 65 63 6f 72 64 5f 66 6f 72 6d 61  ent record_forma
a7a0: 74 20 7b 72 65 63 6f 72 64 20 66 6f 72 6d 61 74  t {record format
a7b0: 7d 3c 2f 74 63 6c 3e 0a 3c 68 32 3e 52 65 63 6f  }</tcl>.<h2>Reco
a7c0: 72 64 20 46 6f 72 6d 61 74 3c 2f 68 32 3e 0a 0a  rd Format</h2>..
a7d0: 3c 70 3e 54 68 65 20 64 61 74 61 20 66 6f 72 20  <p>The data for 
a7e0: 61 20 74 61 62 6c 65 20 62 2d 74 72 65 65 20 6c  a table b-tree l
a7f0: 65 61 66 20 70 61 67 65 20 61 6e 64 20 74 68 65  eaf page and the
a800: 20 6b 65 79 0a 6f 66 20 61 6e 20 69 6e 64 65 78   key.of an index
a810: 20 62 2d 74 72 65 65 20 70 61 67 65 20 77 61 73   b-tree page was
a820: 20 63 68 61 72 61 63 74 65 72 69 7a 65 64 20 61   characterized a
a830: 62 6f 76 65 0a 61 73 20 61 6e 20 61 72 62 69 74  bove.as an arbit
a840: 72 61 72 79 20 73 65 71 75 65 6e 63 65 20 6f 66  rary sequence of
a850: 20 62 79 74 65 73 2e 0a 54 68 65 20 70 72 69 6f   bytes..The prio
a860: 72 20 64 69 73 63 75 73 73 69 6f 6e 20 6d 65 6e  r discussion men
a870: 74 69 6f 6e 65 64 20 6f 6e 65 20 6b 65 79 20 62  tioned one key b
a880: 65 69 6e 67 20 6c 65 73 73 20 74 68 61 6e 20 61  eing less than a
a890: 6e 6f 74 68 65 72 2c 20 62 75 74 0a 64 69 64 20  nother, but.did 
a8a0: 6e 6f 74 20 64 65 66 69 6e 65 20 77 68 61 74 20  not define what 
a8b0: 22 6c 65 73 73 20 74 68 61 6e 22 20 6d 65 61 6e  "less than" mean
a8c0: 74 2e 20 20 54 68 65 20 63 75 72 72 65 6e 74 20  t.  The current 
a8d0: 73 65 63 74 69 6f 6e 20 77 69 6c 6c 20 61 64 64  section will add
a8e0: 72 65 73 73 0a 74 68 65 73 65 20 6f 6d 69 73 73  ress.these omiss
a8f0: 69 6f 6e 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 50 61  ions.</p>..<p>Pa
a900: 79 6c 6f 61 64 2c 20 65 69 74 68 65 72 20 74 61  yload, either ta
a910: 62 6c 65 20 62 2d 74 72 65 65 20 64 61 74 61 20  ble b-tree data 
a920: 6f 72 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20  or index b-tree 
a930: 6b 65 79 73 2c 20 0a 69 73 20 61 6c 77 61 79 73  keys, .is always
a940: 20 69 6e 20 74 68 65 20 22 72 65 63 6f 72 64 20   in the "record 
a950: 66 6f 72 6d 61 74 22 2e 0a 54 68 65 20 72 65 63  format"..The rec
a960: 6f 72 64 20 66 6f 72 6d 61 74 20 64 65 66 69 6e  ord format defin
a970: 65 73 20 61 20 73 65 71 75 65 6e 63 65 20 6f 66  es a sequence of
a980: 20 76 61 6c 75 65 73 20 63 6f 72 72 65 73 70 6f   values correspo
a990: 6e 64 69 6e 67 0a 74 6f 20 63 6f 6c 75 6d 6e 73  nding.to columns
a9a0: 20 69 6e 20 61 20 74 61 62 6c 65 20 6f 72 20 69   in a table or i
a9b0: 6e 64 65 78 2e 20 20 54 68 65 20 72 65 63 6f 72  ndex.  The recor
a9c0: 64 20 66 6f 72 6d 61 74 20 73 70 65 63 69 66 69  d format specifi
a9d0: 65 73 20 74 68 65 20 6e 75 6d 62 65 72 0a 6f 66  es the number.of
a9e0: 20 63 6f 6c 75 6d 6e 73 2c 20 74 68 65 20 64 61   columns, the da
a9f0: 74 61 74 79 70 65 20 6f 66 20 65 61 63 68 20 63  tatype of each c
aa00: 6f 6c 75 6d 6e 2c 20 61 6e 64 20 74 68 65 20 63  olumn, and the c
aa10: 6f 6e 74 65 6e 74 20 6f 66 20 65 61 63 68 20 63  ontent of each c
aa20: 6f 6c 75 6d 6e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54  olumn.</p>..<p>T
aa30: 68 65 20 72 65 63 6f 72 64 20 66 6f 72 6d 61 74  he record format
aa40: 20 6d 61 6b 65 73 20 65 78 74 65 6e 73 69 76 65   makes extensive
aa50: 20 75 73 65 20 6f 66 20 74 68 65 20 0a 5b 76 61   use of the .[va
aa60: 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e  riable-length in
aa70: 74 65 67 65 72 5d 20 6f 72 20 5b 76 61 72 69 6e  teger] or [varin
aa80: 74 5d 0a 72 65 70 72 65 73 65 6e 74 61 74 69 6f  t].representatio
aa90: 6e 20 6f 66 20 36 34 2d 62 69 74 20 73 69 67 6e  n of 64-bit sign
aaa0: 65 64 20 69 6e 74 65 67 65 72 73 20 64 65 66 69  ed integers defi
aab0: 6e 65 64 20 61 62 6f 76 65 2e 3c 2f 70 3e 0a 0a  ned above.</p>..
aac0: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
aad0: 20 73 65 72 69 61 6c 74 79 70 65 20 7b 73 65 72   serialtype {ser
aae0: 69 61 6c 20 74 79 70 65 7d 20 7b 73 65 72 69 61  ial type} {seria
aaf0: 6c 20 74 79 70 65 73 7d 3c 2f 74 63 6c 3e 0a 3c  l types}</tcl>.<
ab00: 70 3e 41 20 72 65 63 6f 72 64 20 63 6f 6e 74 61  p>A record conta
ab10: 69 6e 73 20 61 20 68 65 61 64 65 72 20 61 6e 64  ins a header and
ab20: 20 61 20 62 6f 64 79 2c 20 69 6e 20 74 68 61 74   a body, in that
ab30: 20 6f 72 64 65 72 2e 20 20 0a 5e 28 54 68 65 20   order.  .^(The 
ab40: 68 65 61 64 65 72 20 62 65 67 69 6e 73 20 77 69  header begins wi
ab50: 74 68 20 61 20 73 69 6e 67 6c 65 20 76 61 72 69  th a single vari
ab60: 6e 74 20 77 68 69 63 68 20 64 65 74 65 72 6d 69  nt which determi
ab70: 6e 65 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75  nes the total nu
ab80: 6d 62 65 72 0a 6f 66 20 62 79 74 65 73 20 69 6e  mber.of bytes in
ab90: 20 74 68 65 20 68 65 61 64 65 72 2e 20 20 54 68   the header.  Th
aba0: 65 20 76 61 72 69 6e 74 20 76 61 6c 75 65 20 69  e varint value i
abb0: 73 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68  s the size of th
abc0: 65 20 68 65 61 64 65 72 20 69 6e 0a 62 79 74 65  e header in.byte
abd0: 73 20 69 6e 63 6c 75 64 69 6e 67 20 74 68 65 20  s including the 
abe0: 73 69 7a 65 20 76 61 72 69 6e 74 20 69 74 73 65  size varint itse
abf0: 6c 66 2e 29 5e 20 20 5e 46 6f 6c 6c 6f 77 69 6e  lf.)^  ^Followin
ac00: 67 20 74 68 65 20 73 69 7a 65 20 76 61 72 69 6e  g the size varin
ac10: 74 20 61 72 65 0a 6f 6e 65 20 6f 72 20 6d 6f 72  t are.one or mor
ac20: 65 20 61 64 64 69 74 69 6f 6e 61 6c 20 76 61 72  e additional var
ac30: 69 6e 74 73 2c 20 6f 6e 65 20 70 65 72 20 63 6f  ints, one per co
ac40: 6c 75 6d 6e 2e 20 20 54 68 65 73 65 20 61 64 64  lumn.  These add
ac50: 69 74 69 6f 6e 61 6c 20 76 61 72 69 6e 74 73 0a  itional varints.
ac60: 61 72 65 20 63 61 6c 6c 65 64 20 22 73 65 72 69  are called "seri
ac70: 61 6c 20 74 79 70 65 22 20 6e 75 6d 62 65 72 73  al type" numbers
ac80: 20 61 6e 64 0a 64 65 74 65 72 6d 69 6e 65 20 74   and.determine t
ac90: 68 65 20 64 61 74 61 74 79 70 65 20 6f 66 20 65  he datatype of e
aca0: 61 63 68 20 63 6f 6c 75 6d 6e 2c 20 61 63 63 6f  ach column, acco
acb0: 72 64 69 6e 67 20 74 6f 20 74 68 65 20 66 6f 6c  rding to the fol
acc0: 6c 6f 77 69 6e 67 20 63 68 61 72 74 3a 3c 2f 70  lowing chart:</p
acd0: 3e 0a 0a 3c 63 65 6e 74 65 72 3e 0a 3c 69 3e 53  >..<center>.<i>S
ace0: 65 72 69 61 6c 20 54 79 70 65 20 43 6f 64 65 73  erial Type Codes
acf0: 20 4f 66 20 54 68 65 20 52 65 63 6f 72 64 20 46   Of The Record F
ad00: 6f 72 6d 61 74 3c 2f 69 3e 3c 62 72 3e 0a 3c 74  ormat</i><br>.<t
ad10: 61 62 6c 65 20 77 69 64 74 68 3d 22 38 30 25 22  able width="80%"
ad20: 20 62 6f 72 64 65 72 3d 31 3e 0a 3c 74 72 3e 3c   border=1>.<tr><
ad30: 74 68 3e 53 65 72 69 61 6c 20 54 79 70 65 3c 74  th>Serial Type<t
ad40: 68 3e 43 6f 6e 74 65 6e 74 20 53 69 7a 65 3c 74  h>Content Size<t
ad50: 68 3e 4d 65 61 6e 69 6e 67 0a 3c 74 72 3e 3c 74  h>Meaning.<tr><t
ad60: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
ad70: 67 6e 3d 63 65 6e 74 65 72 3e 30 3c 74 64 20 76  gn=center>0<td v
ad80: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
ad90: 63 65 6e 74 65 72 3e 30 3c 74 64 20 61 6c 69 67  center>0<td alig
ada0: 6e 3d 6c 65 66 74 3e 0a 5e 56 61 6c 75 65 20 69  n=left>.^Value i
adb0: 73 20 61 20 4e 55 4c 4c 2e 0a 3c 74 72 3e 3c 74  s a NULL..<tr><t
adc0: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
add0: 67 6e 3d 63 65 6e 74 65 72 3e 31 3c 74 64 20 76  gn=center>1<td v
ade0: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
adf0: 63 65 6e 74 65 72 3e 31 3c 74 64 20 61 6c 69 67  center>1<td alig
ae00: 6e 3d 6c 65 66 74 3e 0a 5e 56 61 6c 75 65 20 69  n=left>.^Value i
ae10: 73 20 61 6e 20 38 2d 62 69 74 20 74 77 6f 73 2d  s an 8-bit twos-
ae20: 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 74 65 67  complement integ
ae30: 65 72 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  er..<tr><td vali
ae40: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
ae50: 74 65 72 3e 32 3c 74 64 20 76 61 6c 69 67 6e 3d  ter>2<td valign=
ae60: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
ae70: 3e 32 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74  >2<td align=left
ae80: 3e 0a 5e 56 61 6c 75 65 20 69 73 20 61 20 62 69  >.^Value is a bi
ae90: 67 2d 65 6e 64 69 61 6e 20 31 36 2d 62 69 74 20  g-endian 16-bit 
aea0: 74 77 6f 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20  twos-complement 
aeb0: 69 6e 74 65 67 65 72 2e 0a 3c 74 72 3e 3c 74 64  integer..<tr><td
aec0: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
aed0: 6e 3d 63 65 6e 74 65 72 3e 33 3c 74 64 20 76 61  n=center>3<td va
aee0: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
aef0: 65 6e 74 65 72 3e 33 3c 74 64 20 61 6c 69 67 6e  enter>3<td align
af00: 3d 6c 65 66 74 3e 0a 5e 56 61 6c 75 65 20 69 73  =left>.^Value is
af10: 20 61 20 62 69 67 2d 65 6e 64 69 61 6e 20 32 34   a big-endian 24
af20: 2d 62 69 74 20 74 77 6f 73 2d 63 6f 6d 70 6c 65  -bit twos-comple
af30: 6d 65 6e 74 20 69 6e 74 65 67 65 72 2e 0a 3c 74  ment integer..<t
af40: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
af50: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 3c   align=center>4<
af60: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
af70: 69 67 6e 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20  ign=center>4<td 
af80: 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 56 61 6c  align=left>.^Val
af90: 75 65 20 69 73 20 61 20 62 69 67 2d 65 6e 64 69  ue is a big-endi
afa0: 61 6e 20 33 32 2d 62 69 74 20 74 77 6f 73 2d 63  an 32-bit twos-c
afb0: 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 74 65 67 65  omplement intege
afc0: 72 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  r..<tr><td valig
afd0: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
afe0: 65 72 3e 35 3c 74 64 20 76 61 6c 69 67 6e 3d 74  er>5<td valign=t
aff0: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
b000: 36 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e  6<td align=left>
b010: 0a 5e 56 61 6c 75 65 20 69 73 20 61 20 62 69 67  .^Value is a big
b020: 2d 65 6e 64 69 61 6e 20 34 38 2d 62 69 74 20 74  -endian 48-bit t
b030: 77 6f 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 69  wos-complement i
b040: 6e 74 65 67 65 72 2e 0a 3c 74 72 3e 3c 74 64 20  nteger..<tr><td 
b050: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
b060: 3d 63 65 6e 74 65 72 3e 36 3c 74 64 20 76 61 6c  =center>6<td val
b070: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
b080: 6e 74 65 72 3e 38 3c 74 64 20 61 6c 69 67 6e 3d  nter>8<td align=
b090: 6c 65 66 74 3e 0a 5e 56 61 6c 75 65 20 69 73 20  left>.^Value is 
b0a0: 61 20 62 69 67 2d 65 6e 64 69 61 6e 20 36 34 2d  a big-endian 64-
b0b0: 62 69 74 20 74 77 6f 73 2d 63 6f 6d 70 6c 65 6d  bit twos-complem
b0c0: 65 6e 74 20 69 6e 74 65 67 65 72 2e 0a 3c 74 72  ent integer..<tr
b0d0: 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
b0e0: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 37 3c 74  align=center>7<t
b0f0: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
b100: 67 6e 3d 63 65 6e 74 65 72 3e 38 3c 74 64 20 61  gn=center>8<td a
b110: 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 56 61 6c 75  lign=left>.^Valu
b120: 65 20 69 73 20 61 20 62 69 67 2d 65 6e 64 69 61  e is a big-endia
b130: 6e 20 49 45 45 45 20 37 35 34 2d 32 30 30 38 20  n IEEE 754-2008 
b140: 36 34 2d 62 69 74 20 66 6c 6f 61 74 69 6e 67 20  64-bit floating 
b150: 70 6f 69 6e 74 20 6e 75 6d 62 65 72 2e 0a 3c 74  point number..<t
b160: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
b170: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 38 3c   align=center>8<
b180: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
b190: 69 67 6e 3d 63 65 6e 74 65 72 3e 30 3c 74 64 20  ign=center>0<td 
b1a0: 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 56 61 6c  align=left>.^Val
b1b0: 75 65 20 69 73 20 74 68 65 20 69 6e 74 65 67 65  ue is the intege
b1c0: 72 20 30 2e 20 28 4f 6e 6c 79 20 61 76 61 69 6c  r 0. (Only avail
b1d0: 61 62 6c 65 20 66 6f 72 20 5b 73 63 68 65 6d 61  able for [schema
b1e0: 20 66 6f 72 6d 61 74 5d 20 34 20 61 6e 64 20 68   format] 4 and h
b1f0: 69 67 68 65 72 2e 29 0a 3c 74 72 3e 3c 74 64 20  igher.).<tr><td 
b200: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
b210: 3d 63 65 6e 74 65 72 3e 39 3c 74 64 20 76 61 6c  =center>9<td val
b220: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
b230: 6e 74 65 72 3e 30 3c 74 64 20 61 6c 69 67 6e 3d  nter>0<td align=
b240: 6c 65 66 74 3e 0a 5e 56 61 6c 75 65 20 69 73 20  left>.^Value is 
b250: 74 68 65 20 69 6e 74 65 67 65 72 20 31 2e 20 28  the integer 1. (
b260: 4f 6e 6c 79 20 61 76 61 69 6c 61 62 6c 65 20 66  Only available f
b270: 6f 72 20 5b 73 63 68 65 6d 61 20 66 6f 72 6d 61  or [schema forma
b280: 74 5d 20 34 20 61 6e 64 20 68 69 67 68 65 72 2e  t] 4 and higher.
b290: 29 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  ).<tr><td valign
b2a0: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
b2b0: 72 3e 31 30 2c 31 31 0a 20 20 20 20 3c 74 64 20  r>10,11.    <td 
b2c0: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
b2d0: 3d 63 65 6e 74 65 72 3e 26 6e 62 73 70 3b 3c 74  =center>&nbsp;<t
b2e0: 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 3c 69  d align=left>.<i
b2f0: 3e 4e 6f 74 20 75 73 65 64 2e 20 20 52 65 73 65  >Not used.  Rese
b300: 72 76 65 64 20 66 6f 72 20 65 78 70 61 6e 73 69  rved for expansi
b310: 6f 6e 2e 3c 2f 69 3e 0a 3c 74 72 3e 3c 74 64 20  on.</i>.<tr><td 
b320: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
b330: 3d 63 65 6e 74 65 72 3e 4e 26 23 78 32 32 36 35  =center>N&#x2265
b340: 3b 31 32 20 61 6e 64 20 65 76 65 6e 0a 20 20 20  ;12 and even.   
b350: 20 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 28 4e 2d  align=center>(N-
b370: 31 32 29 2f 32 3c 74 64 20 61 6c 69 67 6e 3d 6c  12)/2<td align=l
b380: 65 66 74 3e 0a 5e 56 61 6c 75 65 20 69 73 20 61  eft>.^Value is a
b390: 20 42 4c 4f 42 20 74 68 61 74 20 69 73 20 28 4e   BLOB that is (N
b3a0: 2d 31 32 29 2f 32 20 62 79 74 65 73 20 69 6e 20  -12)/2 bytes in 
b3b0: 6c 65 6e 67 74 68 2e 0a 3c 74 72 3e 3c 74 64 20  length..<tr><td 
b3c0: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
b3d0: 3d 63 65 6e 74 65 72 3e 4e 26 23 78 32 32 36 35  =center>N&#x2265
b3e0: 3b 31 33 20 61 6e 64 20 6f 64 64 0a 20 20 20 20  ;13 and odd.    
b3f0: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
b400: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 28 4e 2d 31  lign=center>(N-1
b410: 33 29 2f 32 3c 74 64 20 61 6c 69 67 6e 3d 6c 65  3)/2<td align=le
b420: 66 74 3e 0a 5e 56 61 6c 75 65 20 69 73 20 61 20  ft>.^Value is a 
b430: 73 74 72 69 6e 67 20 69 6e 20 74 68 65 20 5b 74  string in the [t
b440: 65 78 74 20 65 6e 63 6f 64 69 6e 67 5d 20 61 6e  ext encoding] an
b450: 64 20 28 4e 2d 31 33 29 2f 32 20 62 79 74 65 73  d (N-13)/2 bytes
b460: 20 69 6e 20 6c 65 6e 67 74 68 2e 0a 5e 54 68 65   in length..^The
b470: 20 6e 75 6c 20 74 65 72 6d 69 6e 61 74 6f 72 20   nul terminator 
b480: 69 73 20 6e 6f 74 20 73 74 6f 72 65 64 2e 0a 3c  is not stored..<
b490: 2f 74 61 62 6c 65 3e 3c 2f 63 65 6e 74 65 72 3e  /table></center>
b4a0: 0a 0a 3c 70 3e 4e 6f 74 65 20 74 68 61 74 20 62  ..<p>Note that b
b4b0: 65 63 61 75 73 65 20 6f 66 20 74 68 65 20 77 61  ecause of the wa
b4c0: 79 20 76 61 72 69 6e 74 73 20 61 72 65 20 64 65  y varints are de
b4d0: 66 69 6e 65 64 2c 20 74 68 65 20 68 65 61 64 65  fined, the heade
b4e0: 72 20 73 69 7a 65 20 76 61 72 69 6e 74 0a 61 6e  r size varint.an
b4f0: 64 20 73 65 72 69 61 6c 20 74 79 70 65 20 76 61  d serial type va
b500: 72 69 6e 74 73 20 77 69 6c 6c 20 75 73 75 61 6c  rints will usual
b510: 6c 79 20 63 6f 6e 73 69 73 74 20 6f 66 20 61 20  ly consist of a 
b520: 73 69 6e 67 6c 65 20 62 79 74 65 2e 20 20 54 68  single byte.  Th
b530: 65 0a 73 65 72 69 61 6c 20 74 79 70 65 20 76 61  e.serial type va
b540: 72 69 6e 74 73 20 66 6f 72 20 6c 61 72 67 65 20  rints for large 
b550: 73 74 72 69 6e 67 73 20 61 6e 64 20 42 4c 4f 42  strings and BLOB
b560: 73 20 6d 69 67 68 74 20 65 78 74 65 6e 64 20 74  s might extend t
b570: 6f 20 74 77 6f 20 6f 72 20 74 68 72 65 65 0a 62  o two or three.b
b580: 79 74 65 20 76 61 72 69 6e 74 73 2c 20 62 75 74  yte varints, but
b590: 20 74 68 61 74 20 69 73 20 74 68 65 20 65 78 63   that is the exc
b5a0: 65 70 74 69 6f 6e 20 72 61 74 68 65 72 20 74 68  eption rather th
b5b0: 61 6e 20 74 68 65 20 72 75 6c 65 2e 20 0a 54 68  an the rule. .Th
b5c0: 65 20 76 61 72 69 6e 74 20 66 6f 72 6d 61 74 20  e varint format 
b5d0: 69 73 20 76 65 72 79 20 65 66 66 69 63 69 65 6e  is very efficien
b5e0: 74 20 61 74 20 63 6f 64 69 6e 67 20 74 68 65 20  t at coding the 
b5f0: 72 65 63 6f 72 64 20 68 65 61 64 65 72 2e 3c 2f  record header.</
b600: 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 76 61 6c 75  p>..<p>^The valu
b610: 65 73 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75  es for each colu
b620: 6d 6e 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64  mn in the record
b630: 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c   immediately fol
b640: 6c 6f 77 20 74 68 65 20 68 65 61 64 65 72 2e 0a  low the header..
b650: 5e 28 4e 6f 74 65 20 74 68 61 74 20 66 6f 72 20  ^(Note that for 
b660: 73 65 72 69 61 6c 20 74 79 70 65 73 20 30 2c 20  serial types 0, 
b670: 38 2c 20 39 2c 20 31 32 2c 20 61 6e 64 20 31 33  8, 9, 12, and 13
b680: 2c 20 74 68 65 20 76 61 6c 75 65 20 69 73 20 7a  , the value is z
b690: 65 72 6f 20 62 79 74 65 73 20 69 6e 0a 6c 65 6e  ero bytes in.len
b6a0: 67 74 68 2e 20 20 49 66 20 61 6c 6c 20 63 6f 6c  gth.  If all col
b6b0: 75 6d 6e 73 20 61 72 65 20 6f 66 20 74 68 65 73  umns are of thes
b6c0: 65 20 74 79 70 65 73 20 74 68 65 6e 20 74 68 65  e types then the
b6d0: 20 62 6f 64 79 20 73 65 63 74 69 6f 6e 20 6f 66   body section of
b6e0: 20 74 68 65 0a 72 65 63 6f 72 64 20 69 73 20 65   the.record is e
b6f0: 6d 70 74 79 2e 29 5e 3c 2f 70 3e 0a 0a 3c 68 32  mpty.)^</p>..<h2
b700: 3e 52 65 63 6f 72 64 20 53 6f 72 74 20 4f 72 64  >Record Sort Ord
b710: 65 72 3c 2f 68 32 3e 0a 0a 3c 70 3e 54 68 65 20  er</h2>..<p>The 
b720: 6f 72 64 65 72 20 6f 66 20 6b 65 79 73 20 69 6e  order of keys in
b730: 20 61 6e 20 69 6e 64 65 78 20 62 2d 74 72 65 65   an index b-tree
b740: 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62   is determined b
b750: 79 20 74 68 65 20 73 6f 72 74 20 6f 72 64 65 72  y the sort order
b760: 20 6f 66 0a 74 68 65 20 72 65 63 6f 72 64 73 20   of.the records 
b770: 74 68 61 74 20 74 68 65 20 6b 65 79 73 20 72 65  that the keys re
b780: 70 72 65 73 65 6e 74 2e 20 20 52 65 63 6f 72 64  present.  Record
b790: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 70 72 6f 67   comparison prog
b7a0: 72 65 73 73 65 73 20 63 6f 6c 75 6d 6e 0a 62 79  resses column.by
b7b0: 20 63 6f 6c 75 6d 6e 2e 20 20 43 6f 6c 75 6d 6e   column.  Column
b7c0: 73 20 6f 66 20 61 20 72 65 63 6f 72 64 20 61 72  s of a record ar
b7d0: 65 20 65 78 61 6d 69 6e 65 64 20 66 72 6f 6d 20  e examined from 
b7e0: 6c 65 66 74 20 74 6f 20 72 69 67 68 74 2e 20 20  left to right.  
b7f0: 54 68 65 0a 66 69 72 73 74 20 70 61 69 72 20 6f  The.first pair o
b800: 66 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20 61  f columns that a
b810: 72 65 20 6e 6f 74 20 65 71 75 61 6c 20 64 65 74  re not equal det
b820: 65 72 6d 69 6e 65 73 20 74 68 65 20 72 65 6c 61  ermines the rela
b830: 74 69 76 65 20 6f 72 64 65 72 0a 6f 66 20 74 68  tive order.of th
b840: 65 20 74 77 6f 20 72 65 63 6f 72 64 73 2e 20 20  e two records.  
b850: 54 68 65 20 73 6f 72 74 20 6f 72 64 65 72 20 6f  The sort order o
b860: 66 20 69 6e 64 69 76 69 64 75 61 6c 20 63 6f 6c  f individual col
b870: 75 6d 6e 73 20 69 73 20 61 73 0a 66 6f 6c 6c 6f  umns is as.follo
b880: 77 73 3a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c  ws:</p>..<ol>.<l
b890: 69 3e 5e 28 4e 55 4c 4c 20 76 61 6c 75 65 73 20  i>^(NULL values 
b8a0: 28 73 65 72 69 61 6c 20 74 79 70 65 20 30 29 20  (serial type 0) 
b8b0: 73 6f 72 74 20 66 69 72 73 74 2e 29 5e 0a 3c 6c  sort first.)^.<l
b8c0: 69 3e 5e 28 4e 75 6d 65 72 69 63 20 76 61 6c 75  i>^(Numeric valu
b8d0: 65 73 20 28 73 65 72 69 61 6c 20 74 79 70 65 73  es (serial types
b8e0: 20 31 20 74 68 72 6f 75 67 68 20 39 29 20 73 6f   1 through 9) so
b8f0: 72 74 20 61 66 74 65 72 20 4e 55 4c 4c 73 0a 20  rt after NULLs. 
b900: 20 20 20 20 20 61 6e 64 20 69 6e 20 6e 75 6d 65       and in nume
b910: 72 69 63 20 6f 72 64 65 72 2e 29 5e 0a 3c 6c 69  ric order.)^.<li
b920: 3e 5e 28 54 65 78 74 20 76 61 6c 75 65 73 20 28  >^(Text values (
b930: 6f 64 64 20 73 65 72 69 61 6c 20 74 79 70 65 73  odd serial types
b940: 20 31 33 20 61 6e 64 20 6c 61 72 67 65 72 29 20   13 and larger) 
b950: 73 6f 72 74 20 61 66 74 65 72 20 6e 75 6d 65 72  sort after numer
b960: 69 63 0a 20 20 20 20 76 61 6c 75 65 73 20 69 6e  ic.    values in
b970: 20 74 68 65 20 6f 72 64 65 72 20 64 65 74 65 72   the order deter
b980: 6d 69 6e 65 64 20 62 79 20 74 68 65 20 63 6f 6c  mined by the col
b990: 75 6d 6e 73 20 5b 63 6f 6c 6c 61 74 69 6e 67 20  umns [collating 
b9a0: 66 75 6e 63 74 69 6f 6e 5d 2e 29 5e 0a 3c 6c 69  function].)^.<li
b9b0: 3e 5e 28 42 4c 4f 42 20 76 61 6c 75 65 73 20 28  >^(BLOB values (
b9c0: 65 76 65 6e 20 73 65 72 69 61 6c 20 74 79 70 65  even serial type
b9d0: 73 20 31 32 20 61 6e 64 20 6c 61 72 67 65 72 29  s 12 and larger)
b9e0: 20 73 6f 72 74 20 6c 61 73 74 20 61 6e 64 20 69   sort last and i
b9f0: 6e 20 74 68 65 20 6f 72 64 65 72 20 0a 20 20 20  n the order .   
ba00: 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 6d   determined by m
ba10: 65 6d 63 6d 70 28 29 2e 29 5e 0a 3c 2f 6f 6c 3e  emcmp().)^.</ol>
ba20: 0a 0a 3c 70 3e 41 20 5b 63 6f 6c 6c 61 74 69 6e  ..<p>A [collatin
ba30: 67 20 66 75 6e 63 74 69 6f 6e 5d 20 66 6f 72 20  g function] for 
ba40: 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 73 20 6e  each column is n
ba50: 65 63 65 73 73 61 72 79 20 69 6e 20 6f 72 64 65  ecessary in orde
ba60: 72 20 74 6f 20 63 6f 6d 70 75 74 65 0a 74 68 65  r to compute.the
ba70: 20 6f 72 64 65 72 20 6f 66 20 74 65 78 74 20 66   order of text f
ba80: 69 65 6c 64 73 2e 0a 5e 28 53 51 4c 69 74 65 20  ields..^(SQLite 
ba90: 64 65 66 69 6e 65 73 20 74 68 72 65 65 20 62 75  defines three bu
baa0: 69 6c 74 2d 69 6e 20 63 6f 6c 6c 61 74 69 6e 67  ilt-in collating
bab0: 20 66 75 6e 63 74 69 6f 6e 73 3a 29 5e 0a 3c 2f   functions:)^.</
bac0: 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  p>..<blockquote>
bad0: 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 30 20  <table border=0 
bae0: 63 65 6c 6c 73 70 61 63 69 6e 67 3d 31 30 3e 0a  cellspacing=10>.
baf0: 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74  <tr><td valign=t
bb00: 6f 70 3e 42 49 4e 41 52 59 0a 20 20 20 20 3c 74  op>BINARY.    <t
bb10: 64 3e 20 5e 28 54 68 65 20 62 75 69 6c 74 2d 69  d> ^(The built-i
bb20: 6e 20 42 49 4e 41 52 59 20 63 6f 6c 6c 61 74 69  n BINARY collati
bb30: 6f 6e 20 63 6f 6d 70 61 72 65 73 20 73 74 72 69  on compares stri
bb40: 6e 67 73 20 62 79 74 65 20 62 79 20 62 79 74 65  ngs byte by byte
bb50: 0a 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 74  .        using t
bb60: 68 65 20 6d 65 6d 63 6d 70 28 29 20 66 75 6e 63  he memcmp() func
bb70: 74 69 6f 6e 0a 20 20 20 20 20 20 20 20 66 72 6f  tion.        fro
bb80: 6d 20 74 68 65 20 73 74 61 6e 64 61 72 64 20 43  m the standard C
bb90: 20 6c 69 62 72 61 72 79 2e 29 5e 0a 3c 74 72 3e   library.)^.<tr>
bba0: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 4e  <td valign=top>N
bbb0: 4f 43 41 53 45 0a 20 20 20 20 3c 74 64 3e 20 5e  OCASE.    <td> ^
bbc0: 28 54 68 65 20 4e 4f 43 41 53 45 20 63 6f 6c 6c  (The NOCASE coll
bbd0: 61 74 69 6f 6e 20 69 73 20 6c 69 6b 65 20 42 49  ation is like BI
bbe0: 4e 41 52 59 20 65 78 63 65 70 74 20 74 68 61 74  NARY except that
bbf0: 20 75 70 70 65 72 63 61 73 65 0a 20 20 20 20 20   uppercase.     
bc00: 20 20 20 41 53 43 49 49 20 63 68 61 72 61 63 74     ASCII charact
bc10: 65 72 73 20 28 27 41 27 20 74 68 72 6f 75 67 68  ers ('A' through
bc20: 20 27 5a 27 29 0a 20 20 20 20 20 20 20 20 61 72   'Z').        ar
bc30: 65 20 66 6f 6c 64 65 64 20 69 6e 74 6f 20 74 68  e folded into th
bc40: 65 69 72 20 6c 6f 77 65 72 63 61 73 65 20 65 71  eir lowercase eq
bc50: 75 69 76 61 6c 65 6e 74 73 20 70 72 69 6f 72 20  uivalents prior 
bc60: 74 6f 20 72 75 6e 6e 69 6e 67 20 74 68 65 0a 20  to running the. 
bc70: 20 20 20 20 20 20 20 63 6f 6d 70 61 72 69 73 6f         compariso
bc80: 6e 2e 20 20 4e 6f 74 65 20 74 68 61 74 20 6f 6e  n.  Note that on
bc90: 6c 79 20 41 53 43 49 49 20 63 68 61 72 61 63 74  ly ASCII charact
bca0: 65 72 73 20 61 72 65 20 63 61 73 65 2d 66 6f 6c  ers are case-fol
bcb0: 64 65 64 2e 29 5e 0a 20 20 20 20 20 20 20 20 5e  ded.)^.        ^
bcc0: 28 4e 4f 43 41 53 45 0a 20 20 20 20 20 20 20 20  (NOCASE.        
bcd0: 64 6f 65 73 20 6e 6f 74 20 69 6d 70 6c 65 6d 65  does not impleme
bce0: 6e 74 20 61 20 67 65 6e 65 72 61 6c 20 70 75 72  nt a general pur
bcf0: 70 6f 73 65 20 75 6e 69 63 6f 64 65 20 63 61 73  pose unicode cas
bd00: 65 6c 65 73 73 20 63 6f 6d 70 61 72 69 73 6f 6e  eless comparison
bd10: 2e 29 5e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  .)^.<tr><td vali
bd20: 67 6e 3d 74 6f 70 3e 52 54 52 49 4d 0a 20 20 20  gn=top>RTRIM.   
bd30: 20 3c 74 64 3e 20 5e 28 52 54 52 49 4d 20 69 73   <td> ^(RTRIM is
bd40: 20 6c 69 6b 65 20 42 49 4e 41 52 59 20 65 78 63   like BINARY exc
bd50: 65 70 74 20 74 68 61 74 20 65 78 74 72 61 20 73  ept that extra s
bd60: 70 61 63 65 73 20 61 74 20 74 68 65 20 65 6e 64  paces at the end
bd70: 20 6f 66 20 65 69 74 68 65 72 0a 20 20 20 20 20   of either.     
bd80: 20 20 20 20 73 74 72 69 6e 67 20 64 6f 20 6e 6f      string do no
bd90: 74 20 63 68 61 6e 67 65 20 74 68 65 20 72 65 73  t change the res
bda0: 75 6c 74 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  ult.  In other w
bdb0: 6f 72 64 73 2c 20 73 74 72 69 6e 67 73 20 77 69  ords, strings wi
bdc0: 6c 6c 0a 20 20 20 20 20 20 20 20 20 63 6f 6d 70  ll.         comp
bdd0: 61 72 65 20 65 71 75 61 6c 20 74 6f 20 6f 6e 65  are equal to one
bde0: 20 61 6e 6f 74 68 65 72 20 61 73 20 6c 6f 6e 67   another as long
bdf0: 20 61 73 20 74 68 65 79 0a 20 20 20 20 20 20 20   as they.       
be00: 20 20 64 69 66 66 65 72 20 6f 6e 6c 79 20 69 6e    differ only in
be10: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 73   the number of s
be20: 70 61 63 65 73 20 61 74 20 74 68 65 20 65 6e 64  paces at the end
be30: 2e 29 5e 0a 3c 2f 74 61 62 6c 65 3e 3c 2f 62 6c  .)^.</table></bl
be40: 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 5e 41  ockquote>..<p>^A
be50: 64 64 69 74 69 6f 6e 61 6c 20 61 70 70 6c 69 63  dditional applic
be60: 61 74 69 6f 6e 2d 73 70 65 63 69 66 69 63 20 63  ation-specific c
be70: 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f  ollating functio
be80: 6e 73 20 63 61 6e 20 62 65 20 61 64 64 65 64 20  ns can be added 
be90: 74 6f 0a 53 51 4c 69 74 65 20 75 73 69 6e 67 20  to.SQLite using 
bea0: 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 63 72 65  the [sqlite3_cre
beb0: 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 29 5d  ate_collation()]
bec0: 20 69 6e 74 65 72 66 61 63 65 2e 3c 2f 70 3e 0a   interface.</p>.
bed0: 0a 3c 70 3e 5e 54 68 65 20 64 65 66 61 75 6c 74  .<p>^The default
bee0: 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74   collating funct
bef0: 69 6f 6e 20 66 6f 72 20 61 6c 6c 20 73 74 72 69  ion for all stri
bf00: 6e 67 73 20 69 73 20 42 49 4e 41 52 59 2e 0a 5e  ngs is BINARY..^
bf10: 41 6c 74 65 72 6e 61 74 69 76 65 20 63 6f 6c 6c  Alternative coll
bf20: 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 73 20  ating functions 
bf30: 66 6f 72 20 74 61 62 6c 65 20 63 6f 6c 75 6d 6e  for table column
bf40: 73 20 63 61 6e 20 62 65 20 73 70 65 63 69 66 69  s can be specifi
bf50: 65 64 20 69 6e 20 74 68 65 0a 5b 43 52 45 41 54  ed in the.[CREAT
bf60: 45 20 54 41 42 4c 45 5d 20 73 74 61 74 65 6d 65  E TABLE] stateme
bf70: 6e 74 20 75 73 69 6e 67 20 74 68 65 20 43 4f 4c  nt using the COL
bf80: 4c 41 54 45 20 63 6c 61 75 73 65 20 6f 6e 20 74  LATE clause on t
bf90: 68 65 20 5b 63 6f 6c 75 6d 6e 20 64 65 66 69 6e  he [column defin
bfa0: 69 74 69 6f 6e 5d 2e 0a 5e 57 68 65 6e 20 61 20  ition]..^When a 
bfb0: 63 6f 6c 75 6d 6e 20 69 73 20 69 6e 64 65 78 65  column is indexe
bfc0: 64 2c 20 74 68 65 20 73 61 6d 65 20 63 6f 6c 6c  d, the same coll
bfd0: 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 73  ating function s
bfe0: 70 65 63 69 66 69 65 64 20 69 6e 20 74 68 65 0a  pecified in the.
bff0: 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d 20 73  [CREATE TABLE] s
c000: 74 61 74 65 6d 65 6e 74 20 69 73 20 75 73 65 64  tatement is used
c010: 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20   for the column 
c020: 69 6e 20 74 68 65 20 69 6e 64 65 78 2c 20 62 79  in the index, by
c030: 20 64 65 66 61 75 6c 74 2c 0a 74 68 6f 75 67 68   default,.though
c040: 20 74 68 69 73 20 63 61 6e 20 62 65 20 6f 76 65   this can be ove
c050: 72 72 69 64 64 65 6e 20 75 73 69 6e 67 20 61 20  rridden using a 
c060: 43 4f 4c 4c 41 54 45 20 63 6c 61 75 73 65 20 69  COLLATE clause i
c070: 6e 20 74 68 65 20 0a 5b 43 52 45 41 54 45 20 49  n the .[CREATE I
c080: 4e 44 45 58 5d 20 73 74 61 74 65 6d 65 6e 74 2e  NDEX] statement.
c090: 0a 0a 3c 68 32 3e 52 65 70 72 65 73 65 6e 74 61  ..<h2>Representa
c0a0: 74 69 6f 6e 20 4f 66 20 53 51 4c 20 54 61 62 6c  tion Of SQL Tabl
c0b0: 65 73 3c 2f 68 32 3e 0a 0a 3c 70 3e 20 5e 45 61  es</h2>..<p> ^Ea
c0c0: 63 68 20 6f 72 64 69 6e 61 72 79 20 53 51 4c 20  ch ordinary SQL 
c0d0: 74 61 62 6c 65 20 69 6e 20 74 68 65 20 64 61 74  table in the dat
c0e0: 61 62 61 73 65 20 73 63 68 65 6d 61 20 69 73 20  abase schema is 
c0f0: 72 65 70 72 65 73 65 6e 74 65 64 20 6f 6e 2d 64  represented on-d
c100: 69 73 6b 0a 62 79 20 61 20 74 61 62 6c 65 20 62  isk.by a table b
c110: 2d 74 72 65 65 2e 20 20 5e 45 61 63 68 20 65 6e  -tree.  ^Each en
c120: 74 72 79 20 69 6e 20 74 68 65 20 74 61 62 6c 65  try in the table
c130: 20 62 2d 74 72 65 65 20 63 6f 72 72 65 73 70 6f   b-tree correspo
c140: 6e 64 73 20 74 6f 20 61 20 72 6f 77 0a 6f 66 20  nds to a row.of 
c150: 74 68 65 20 53 51 4c 20 74 61 62 6c 65 2e 20 20  the SQL table.  
c160: 5e 54 68 65 20 5b 72 6f 77 69 64 5d 20 6f 66 20  ^The [rowid] of 
c170: 74 68 65 20 53 51 4c 20 74 61 62 6c 65 20 69 73  the SQL table is
c180: 20 74 68 65 20 36 34 2d 62 69 74 20 73 69 67 6e   the 64-bit sign
c190: 65 64 0a 69 6e 74 65 67 65 72 20 6b 65 79 20 66  ed.integer key f
c1a0: 6f 72 20 65 61 63 68 20 65 6e 74 72 79 20 69 6e  or each entry in
c1b0: 20 74 68 65 20 74 61 62 6c 65 20 62 2d 74 72 65   the table b-tre
c1c0: 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 54 68 65  e.</p>..<p> ^The
c1d0: 20 63 6f 6e 74 65 6e 74 20 6f 66 20 65 61 63 68   content of each
c1e0: 20 53 51 4c 20 74 61 62 6c 65 20 72 6f 77 20 69   SQL table row i
c1f0: 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  s stored in the 
c200: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 62 79  database file by
c210: 0a 66 69 72 73 74 20 63 6f 6d 62 69 6e 69 6e 67  .first combining
c220: 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 74   the values in t
c230: 68 65 20 76 61 72 69 6f 75 73 20 63 6f 6c 75 6d  he various colum
c240: 6e 73 20 69 6e 74 6f 20 61 20 62 79 74 65 20 61  ns into a byte a
c250: 72 72 61 79 0a 69 6e 20 74 68 65 20 72 65 63 6f  rray.in the reco
c260: 72 64 20 66 6f 72 6d 61 74 2c 20 74 68 65 6e 20  rd format, then 
c270: 73 74 6f 72 69 6e 67 20 74 68 61 74 20 62 79 74  storing that byt
c280: 65 20 61 72 72 61 79 20 61 73 20 74 68 65 20 70  e array as the p
c290: 61 79 6c 6f 61 64 20 69 6e 0a 61 6e 20 65 6e 74  ayload in.an ent
c2a0: 72 79 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20  ry in the table 
c2b0: 62 2d 74 72 65 65 2e 20 20 5e 54 68 65 20 6f 72  b-tree.  ^The or
c2c0: 64 65 72 20 6f 66 20 76 61 6c 75 65 73 20 69 6e  der of values in
c2d0: 20 74 68 65 20 72 65 63 6f 72 64 20 69 73 0a 74   the record is.t
c2e0: 68 65 20 73 61 6d 65 20 61 73 20 74 68 65 20 6f  he same as the o
c2f0: 72 64 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  rder of columns 
c300: 69 6e 20 74 68 65 20 53 51 4c 20 74 61 62 6c 65  in the SQL table
c310: 20 64 65 66 69 6e 69 74 69 6f 6e 2e 0a 5e 57 68   definition..^Wh
c320: 65 6e 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20  en an SQL table 
c330: 69 6e 63 6c 75 64 65 73 20 61 6e 0a 5b 49 4e 54  includes an.[INT
c340: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
c350: 5d 20 63 6f 6c 75 6d 6e 20 28 77 68 69 63 68 20  ] column (which 
c360: 61 6c 69 61 73 65 73 20 74 68 65 20 5b 72 6f 77  aliases the [row
c370: 69 64 5d 29 20 74 68 65 6e 20 74 68 61 74 0a 63  id]) then that.c
c380: 6f 6c 75 6d 6e 20 61 70 70 65 61 72 73 20 69 6e  olumn appears in
c390: 20 74 68 65 20 72 65 63 6f 72 64 20 61 73 20 61   the record as a
c3a0: 20 4e 55 4c 4c 20 76 61 6c 75 65 2e 20 20 5e 53   NULL value.  ^S
c3b0: 51 4c 69 74 65 20 77 69 6c 6c 20 61 6c 77 61 79  QLite will alway
c3c0: 73 20 75 73 65 0a 74 68 65 20 74 61 62 6c 65 20  s use.the table 
c3d0: 62 2d 74 72 65 65 20 6b 65 79 20 72 61 74 68 65  b-tree key rathe
c3e0: 72 20 74 68 61 6e 20 74 68 65 20 4e 55 4c 4c 20  r than the NULL 
c3f0: 76 61 6c 75 65 20 77 68 65 6e 20 72 65 66 65 72  value when refer
c400: 65 6e 63 69 6e 67 20 74 68 65 0a 5b 49 4e 54 45  encing the.[INTE
c410: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 5d  GER PRIMARY KEY]
c420: 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 3e 0a 0a 3c 70   column.</p>..<p
c430: 3e 20 5e 49 66 20 74 68 65 20 5b 61 66 66 69 6e  > ^If the [affin
c440: 69 74 79 5d 20 6f 66 20 61 20 63 6f 6c 75 6d 6e  ity] of a column
c450: 20 69 73 20 52 45 41 4c 20 61 6e 64 20 74 68 61   is REAL and tha
c460: 74 20 63 6f 6c 75 6d 6e 20 63 6f 6e 74 61 69 6e  t column contain
c470: 73 20 61 0a 76 61 6c 75 65 20 74 68 61 74 20 63  s a.value that c
c480: 61 6e 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20  an be converted 
c490: 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 77 69  to an integer wi
c4a0: 74 68 6f 75 74 20 6c 6f 73 73 20 6f 66 20 69 6e  thout loss of in
c4b0: 66 6f 72 6d 61 74 69 6f 6e 0a 28 69 66 20 74 68  formation.(if th
c4c0: 65 20 76 61 6c 75 65 20 63 6f 6e 74 61 69 6e 73  e value contains
c4d0: 20 6e 6f 20 66 72 61 63 74 69 6f 6e 61 6c 20 70   no fractional p
c4e0: 61 72 74 20 61 6e 64 20 69 73 20 6e 6f 74 20 74  art and is not t
c4f0: 6f 6f 20 6c 61 72 67 65 20 74 6f 20 62 65 0a 72  oo large to be.r
c500: 65 70 72 65 73 65 6e 74 65 64 20 61 73 20 61 6e  epresented as an
c510: 20 69 6e 74 65 67 65 72 29 20 74 68 65 6e 20 74   integer) then t
c520: 68 65 20 63 6f 6c 75 6d 6e 20 6d 61 79 20 62 65  he column may be
c530: 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 72   stored in the r
c540: 65 63 6f 72 64 0a 61 73 20 61 6e 20 69 6e 74 65  ecord.as an inte
c550: 67 65 72 2e 20 20 5e 53 51 4c 69 74 65 20 77 69  ger.  ^SQLite wi
c560: 6c 6c 20 63 6f 6e 76 65 72 74 20 74 68 65 20 76  ll convert the v
c570: 61 6c 75 65 20 62 61 63 6b 20 74 6f 20 66 6c 6f  alue back to flo
c580: 61 74 69 6e 67 0a 70 6f 69 6e 74 20 77 68 65 6e  ating.point when
c590: 20 65 78 74 72 61 63 74 69 6e 67 20 69 74 20 66   extracting it f
c5a0: 72 6f 6d 20 74 68 65 20 72 65 63 6f 72 64 2e 3c  rom the record.<
c5b0: 2f 70 3e 0a 0a 3c 68 32 3e 52 65 70 72 65 73 65  /p>..<h2>Represe
c5c0: 6e 74 61 74 69 6f 6e 20 6f 66 20 57 49 54 48 4f  ntation of WITHO
c5d0: 55 54 20 52 4f 57 49 44 20 54 61 62 6c 65 73 3c  UT ROWID Tables<
c5e0: 2f 68 32 3e 0a 0a 3c 70 3e 5e 49 66 20 61 6e 20  /h2>..<p>^If an 
c5f0: 53 51 4c 20 74 61 62 6c 65 20 69 73 20 63 72 65  SQL table is cre
c600: 61 74 65 64 20 75 73 69 6e 67 20 74 68 65 20 22  ated using the "
c610: 57 49 54 48 4f 55 54 20 52 4f 57 49 44 22 20 63  WITHOUT ROWID" c
c620: 6c 61 75 73 65 20 61 74 20 74 68 65 0a 65 6e 64  lause at the.end
c630: 20 6f 66 20 69 74 73 20 43 52 45 41 54 45 20 54   of its CREATE T
c640: 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 2c 20  ABLE statement, 
c650: 74 68 65 6e 20 74 68 61 74 20 74 61 62 6c 65 20  then that table 
c660: 69 73 20 61 20 5b 57 49 54 48 4f 55 54 20 52 4f  is a [WITHOUT RO
c670: 57 49 44 5d 0a 74 61 62 6c 65 20 61 6e 64 20 75  WID].table and u
c680: 73 65 73 20 61 20 64 69 66 66 65 72 65 6e 74 20  ses a different 
c690: 6f 6e 2d 64 69 73 6b 20 72 65 70 72 65 73 65 6e  on-disk represen
c6a0: 74 61 74 69 6f 6e 2e 20 20 5e 41 20 57 49 54 48  tation.  ^A WITH
c6b0: 4f 55 54 20 52 4f 57 49 44 0a 74 61 62 6c 65 20  OUT ROWID.table 
c6c0: 75 73 65 73 20 61 6e 20 69 6e 64 65 78 20 62 2d  uses an index b-
c6d0: 74 72 65 65 20 72 61 74 68 65 72 20 74 68 61 6e  tree rather than
c6e0: 20 61 20 74 61 62 6c 65 20 62 2d 74 72 65 65 20   a table b-tree 
c6f0: 66 6f 72 20 73 74 6f 72 61 67 65 2e 0a 5e 54 68  for storage..^Th
c700: 65 20 6b 65 79 20 66 6f 72 20 65 61 63 68 20 65  e key for each e
c710: 6e 74 72 79 20 69 6e 20 74 68 65 20 57 49 54 48  ntry in the WITH
c720: 4f 55 54 20 52 4f 57 49 44 20 62 2d 74 72 65 65  OUT ROWID b-tree
c730: 20 69 73 20 61 20 72 65 63 6f 72 64 20 63 6f 6d   is a record com
c740: 70 6f 73 65 64 0a 6f 66 20 74 68 65 20 63 6f 6c  posed.of the col
c750: 75 6d 6e 73 20 6f 66 20 74 68 65 20 50 52 49 4d  umns of the PRIM
c760: 41 52 59 20 4b 45 59 20 66 6f 6c 6c 6f 77 65 64  ARY KEY followed
c770: 20 62 79 20 61 6c 6c 20 72 65 6d 61 69 6e 69 6e   by all remainin
c780: 67 20 63 6f 6c 75 6d 6e 73 20 6f 66 0a 74 68 65  g columns of.the
c790: 20 74 61 62 6c 65 2e 20 20 5e 54 68 65 20 70 72   table.  ^The pr
c7a0: 69 6d 61 72 79 20 6b 65 79 20 63 6f 6c 75 6d 6e  imary key column
c7b0: 73 20 61 70 70 65 61 72 20 69 6e 20 74 68 65 20  s appear in the 
c7c0: 6f 72 64 65 72 20 74 68 65 79 20 74 68 65 79 20  order they they 
c7d0: 77 65 72 65 0a 64 65 63 6c 61 72 65 64 20 69 6e  were.declared in
c7e0: 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59   the PRIMARY KEY
c7f0: 20 63 6c 61 75 73 65 20 61 6e 64 20 74 68 65 20   clause and the 
c800: 72 65 6d 61 69 6e 69 6e 67 20 63 6f 6c 75 6d 6e  remaining column
c810: 73 20 61 70 70 65 61 72 20 69 6e 0a 74 68 65 20  s appear in.the 
c820: 6f 72 64 65 72 20 74 68 65 79 20 6f 63 63 75 72  order they occur
c830: 20 69 6e 20 74 68 65 20 43 52 45 41 54 45 20 54   in the CREATE T
c840: 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 2e 0a  ABLE statement..
c850: 0a 3c 70 3e 5e 48 65 6e 63 65 2c 20 74 68 65 20  .<p>^Hence, the 
c860: 63 6f 6e 74 65 6e 74 20 65 6e 63 6f 64 69 6e 67  content encoding
c870: 20 66 6f 72 20 61 20 57 49 54 48 4f 55 54 20 52   for a WITHOUT R
c880: 4f 57 49 44 20 74 61 62 6c 65 20 69 73 20 74 68  OWID table is th
c890: 65 20 73 61 6d 65 0a 61 73 20 74 68 65 20 63 6f  e same.as the co
c8a0: 6e 74 65 6e 74 20 65 6e 63 6f 64 69 6e 67 20 66  ntent encoding f
c8b0: 6f 72 20 61 6e 20 6f 72 64 69 6e 61 72 79 20 72  or an ordinary r
c8c0: 6f 77 69 64 20 74 61 62 6c 65 2c 20 65 78 63 65  owid table, exce
c8d0: 70 74 20 74 68 61 74 20 74 68 65 0a 6f 72 64 65  pt that the.orde
c8e0: 72 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73  r of the columns
c8f0: 20 69 73 20 72 65 61 72 72 61 6e 67 65 64 20 73   is rearranged s
c900: 6f 20 74 68 61 74 20 50 52 49 4d 41 52 59 20 4b  o that PRIMARY K
c910: 45 59 20 63 6f 6c 75 6d 6e 73 20 63 6f 6d 65 0a  EY columns come.
c920: 66 69 72 73 74 2c 20 61 6e 64 20 74 68 65 20 63  first, and the c
c930: 6f 6e 74 65 6e 74 20 69 73 20 75 73 65 64 20 61  ontent is used a
c940: 73 20 74 68 65 20 6b 65 79 20 69 6e 20 61 6e 20  s the key in an 
c950: 69 6e 64 65 78 20 62 2d 74 72 65 65 20 72 61 74  index b-tree rat
c960: 68 65 72 0a 74 68 61 6e 20 61 73 20 74 68 65 20  her.than as the 
c970: 64 61 74 61 20 69 6e 20 61 20 74 61 62 6c 65 20  data in a table 
c980: 62 2d 74 72 65 65 2e 0a 5e 54 68 65 20 73 70 65  b-tree..^The spe
c990: 63 69 61 6c 20 65 6e 63 6f 64 69 6e 67 20 72 75  cial encoding ru
c9a0: 6c 65 73 20 66 6f 72 20 63 6f 6c 75 6d 6e 73 20  les for columns 
c9b0: 77 69 74 68 20 52 45 41 4c 20 61 66 66 69 6e 69  with REAL affini
c9c0: 74 79 0a 61 70 70 6c 79 20 74 6f 20 57 49 54 48  ty.apply to WITH
c9d0: 4f 55 54 20 52 4f 57 49 44 20 74 61 62 6c 65 73  OUT ROWID tables
c9e0: 20 74 68 65 20 73 61 6d 65 20 61 73 20 74 68 65   the same as the
c9f0: 79 20 64 6f 20 77 69 74 68 20 72 6f 77 69 64 20  y do with rowid 
ca00: 74 61 62 6c 65 73 2e 0a 0a 3c 68 32 3e 52 65 70  tables...<h2>Rep
ca10: 72 65 73 65 6e 74 61 74 69 6f 6e 20 4f 66 20 53  resentation Of S
ca20: 51 4c 20 49 6e 64 69 63 65 73 3c 2f 68 32 3e 0a  QL Indices</h2>.
ca30: 0a 3c 70 3e 5e 45 61 63 68 20 53 51 4c 20 69 6e  .<p>^Each SQL in
ca40: 64 65 78 2c 20 77 68 65 74 68 65 72 20 65 78 70  dex, whether exp
ca50: 6c 69 63 69 74 6c 79 20 64 65 63 6c 61 72 65 64  licitly declared
ca60: 20 76 69 61 20 61 20 5b 43 52 45 41 54 45 20 49   via a [CREATE I
ca70: 4e 44 45 58 5d 20 73 74 61 74 65 6d 65 6e 74 0a  NDEX] statement.
ca80: 6f 72 20 69 6d 70 6c 69 65 64 20 62 79 20 61 20  or implied by a 
ca90: 55 4e 49 51 55 45 20 6f 72 20 50 52 49 4d 41 52  UNIQUE or PRIMAR
caa0: 59 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74  Y KEY constraint
cab0: 2c 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  , corresponds to
cac0: 20 61 6e 20 0a 69 6e 64 65 78 20 62 2d 74 72 65   an .index b-tre
cad0: 65 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  e in the databas
cae0: 65 20 66 69 6c 65 2e 0a 5e 45 61 63 68 20 65 6e  e file..^Each en
caf0: 74 72 79 20 69 6e 20 74 68 65 20 69 6e 64 65 78  try in the index
cb00: 20 62 2d 74 72 65 65 20 63 6f 72 72 65 73 70 6f   b-tree correspo
cb10: 6e 64 73 20 74 6f 20 61 20 73 69 6e 67 6c 65 20  nds to a single 
cb20: 72 6f 77 20 69 6e 20 74 68 65 20 0a 61 73 73 6f  row in the .asso
cb30: 63 69 61 74 65 64 20 53 51 4c 20 74 61 62 6c 65  ciated SQL table
cb40: 2e 0a 5e 54 68 65 20 6b 65 79 20 74 6f 20 61 6e  ..^The key to an
cb50: 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20 69 73   index b-tree is
cb60: 0a 61 20 72 65 63 6f 72 64 20 63 6f 6d 70 6f 73  .a record compos
cb70: 65 64 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ed of the column
cb80: 73 20 74 68 61 74 20 61 72 65 20 62 65 69 6e 67  s that are being
cb90: 20 69 6e 64 65 78 65 64 20 66 6f 6c 6c 6f 77 65   indexed followe
cba0: 64 20 62 79 20 74 68 65 0a 6b 65 79 20 6f 66 20  d by the.key of 
cbb0: 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
cbc0: 67 20 74 61 62 6c 65 20 72 6f 77 2e 20 20 46 6f  g table row.  Fo
cbd0: 72 20 6f 72 64 69 6e 61 72 79 20 74 61 62 6c 65  r ordinary table
cbe0: 73 2c 20 74 68 65 20 72 6f 77 20 6b 65 79 20 69  s, the row key i
cbf0: 73 0a 74 68 65 20 5b 72 6f 77 69 64 5d 2c 20 61  s.the [rowid], a
cc00: 6e 64 20 66 6f 72 20 5b 57 49 54 48 4f 55 54 20  nd for [WITHOUT 
cc10: 52 4f 57 49 44 5d 20 74 61 62 6c 65 73 20 74 68  ROWID] tables th
cc20: 65 20 72 6f 77 20 6b 65 79 20 69 73 20 74 68 65  e row key is the
cc30: 20 50 52 49 4d 41 52 59 20 4b 45 59 2e 0a 42 65   PRIMARY KEY..Be
cc40: 63 61 75 73 65 20 65 76 65 72 79 20 72 6f 77 20  cause every row 
cc50: 69 6e 20 74 68 65 20 74 61 62 6c 65 20 68 61 73  in the table has
cc60: 20 61 20 75 6e 69 71 75 65 20 72 6f 77 20 6b 65   a unique row ke
cc70: 79 2c 0a 61 6c 6c 20 6b 65 79 73 20 69 6e 20 61  y,.all keys in a
cc80: 6e 20 69 6e 64 65 78 20 61 72 65 20 75 6e 69 71  n index are uniq
cc90: 75 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 6e 20  ue.</p>..<p>^In 
cca0: 61 20 6e 6f 72 6d 61 6c 20 69 6e 64 65 78 2c 20  a normal index, 
ccb0: 74 68 65 72 65 20 69 73 20 61 20 6f 6e 65 2d 74  there is a one-t
ccc0: 6f 2d 6f 6e 65 20 6d 61 70 70 69 6e 67 20 62 65  o-one mapping be
ccd0: 74 77 65 65 6e 20 72 6f 77 73 20 69 6e 20 61 20  tween rows in a 
cce0: 0a 74 61 62 6c 65 20 61 6e 64 20 65 6e 74 72 69  .table and entri
ccf0: 65 73 20 69 6e 20 65 61 63 68 20 69 6e 64 65 78  es in each index
cd00: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
cd10: 20 74 68 61 74 20 74 61 62 6c 65 2e 0a 5e 48 6f   that table..^Ho
cd20: 77 65 76 65 72 2c 20 69 6e 20 61 20 5b 70 61 72  wever, in a [par
cd30: 74 69 61 6c 20 69 6e 64 65 78 5d 2c 20 74 68 65  tial index], the
cd40: 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20 6f 6e   index b-tree on
cd50: 6c 79 20 63 6f 6e 74 61 69 6e 73 20 65 6e 74 72  ly contains entr
cd60: 69 65 73 0a 63 6f 72 72 65 73 70 6f 6e 64 69 6e  ies.correspondin
cd70: 67 20 74 6f 20 74 61 62 6c 65 20 72 6f 77 73 20  g to table rows 
cd80: 66 6f 72 20 77 68 69 63 68 20 74 68 65 20 57 48  for which the WH
cd90: 45 52 45 20 63 6c 61 75 73 65 20 65 78 70 72 65  ERE clause expre
cda0: 73 73 69 6f 6e 20 6f 6e 20 74 68 65 0a 43 52 45  ssion on the.CRE
cdb0: 41 54 45 20 49 4e 44 45 58 20 73 74 61 74 65 6d  ATE INDEX statem
cdc0: 65 6e 74 20 69 73 20 74 72 75 65 2e 0a 5e 43 6f  ent is true..^Co
cdd0: 72 72 65 73 70 6f 6e 64 69 6e 67 20 72 6f 77 73  rresponding rows
cde0: 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20 61 6e   in the index an
cdf0: 64 20 74 61 62 6c 65 20 62 2d 74 72 65 65 73 20  d table b-trees 
ce00: 73 68 61 72 65 20 74 68 65 20 73 61 6d 65 20 72  share the same r
ce10: 6f 77 69 64 0a 6f 72 20 70 72 69 6d 61 72 79 20  owid.or primary 
ce20: 6b 65 79 20 76 61 6c 75 65 73 20 61 6e 64 20 63  key values and c
ce30: 6f 6e 74 61 69 6e 20 74 68 65 20 73 61 6d 65 20  ontain the same 
ce40: 76 61 6c 75 65 20 66 6f 72 20 61 6c 6c 20 69 6e  value for all in
ce50: 64 65 78 65 64 20 63 6f 6c 75 6d 6e 73 2e 3c 2f  dexed columns.</
ce60: 70 3e 0a 0a 3c 68 33 3e 53 75 70 70 72 65 73 73  p>..<h3>Suppress
ce70: 69 6f 6e 20 6f 66 20 72 65 64 75 6e 64 61 6e 74  ion of redundant
ce80: 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 57 49 54 48   columns in WITH
ce90: 4f 55 54 20 52 4f 57 49 44 20 73 65 63 6f 6e 64  OUT ROWID second
cea0: 61 72 79 20 69 6e 64 65 78 65 64 0a 3c 2f 68 33  ary indexed.</h3
ceb0: 3e 0a 0a 3c 70 3e 20 5e 49 6e 20 61 6e 20 69 6e  >..<p> ^In an in
cec0: 64 65 78 20 6f 6e 20 61 20 57 49 54 48 4f 55 54  dex on a WITHOUT
ced0: 20 52 4f 57 49 44 20 74 61 62 6c 65 2c 20 69 66   ROWID table, if
cee0: 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 6f 66 20   one or more of 
cef0: 74 68 65 20 63 6f 6c 75 6d 6e 73 0a 6f 66 20 74  the columns.of t
cf00: 68 65 20 74 61 62 6c 65 20 50 52 49 4d 41 52 59  he table PRIMARY
cf10: 20 4b 45 59 20 61 72 65 20 61 6c 73 6f 20 63 6f   KEY are also co
cf20: 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 69 6e 64  lumns of the ind
cf30: 65 78 2c 20 74 68 65 6e 20 74 68 65 0a 69 6e 64  ex, then the.ind
cf40: 65 78 65 64 20 63 6f 6c 75 6d 6e 20 69 73 20 6e  exed column is n
cf50: 6f 74 20 72 65 70 65 61 74 65 64 20 69 6e 20 74  ot repeated in t
cf60: 68 65 20 74 61 62 6c 65 2d 6b 65 79 20 73 75 66  he table-key suf
cf70: 66 69 78 20 6f 6e 20 74 68 65 20 65 6e 64 20 6f  fix on the end o
cf80: 66 0a 74 68 65 20 69 6e 64 65 78 20 72 65 63 6f  f.the index reco
cf90: 72 64 2e 20 20 5e 28 41 73 20 61 6e 20 65 78 61  rd.  ^(As an exa
cfa0: 6d 70 6c 65 2c 20 63 6f 6e 73 69 64 65 72 20 74  mple, consider t
cfb0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 53 51 4c  he following SQL
cfc0: 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c  :..<blockquote><
cfd0: 70 72 65 3e 0a 43 52 45 41 54 45 20 54 41 42 4c  pre>.CREATE TABL
cfe0: 45 20 65 78 32 35 28 61 2c 62 2c 63 2c 64 2c 65  E ex25(a,b,c,d,e
cff0: 2c 50 52 49 4d 41 52 59 20 4b 45 59 28 64 2c 63  ,PRIMARY KEY(d,c
d000: 2c 61 29 29 20 57 49 54 48 4f 55 54 20 72 6f 77  ,a)) WITHOUT row
d010: 69 64 3b 0a 43 52 45 41 54 45 20 49 4e 44 45 58  id;.CREATE INDEX
d020: 20 65 78 32 35 63 65 20 4f 4e 20 65 78 32 35 28   ex25ce ON ex25(
d030: 63 2c 65 29 3b 0a 43 52 45 41 54 45 20 49 4e 44  c,e);.CREATE IND
d040: 45 58 20 65 78 32 35 61 63 64 65 20 4f 4e 20 65  EX ex25acde ON e
d050: 78 32 35 28 61 2c 63 2c 64 2c 65 29 3b 0a 3c 2f  x25(a,c,d,e);.</
d060: 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  pre></blockquote
d070: 3e 0a 0a 3c 70 3e 45 61 63 68 20 72 6f 77 20 69  >..<p>Each row i
d080: 6e 20 74 68 65 20 65 78 32 35 63 65 20 69 6e 64  n the ex25ce ind
d090: 65 78 20 69 73 20 61 20 72 65 63 6f 72 64 0a 77  ex is a record.w
d0a0: 69 74 68 20 74 68 65 73 65 20 63 6f 6c 75 6d 6e  ith these column
d0b0: 73 3a 20 63 2c 20 65 2c 20 64 2c 20 61 2e 20 20  s: c, e, d, a.  
d0c0: 54 68 65 20 66 69 72 73 74 20 74 77 6f 20 63 6f  The first two co
d0d0: 6c 75 6d 6e 73 20 61 72 65 0a 74 68 65 20 63 6f  lumns are.the co
d0e0: 6c 75 6d 6e 73 20 62 65 69 6e 67 20 69 6e 64 65  lumns being inde
d0f0: 78 65 64 2c 20 63 20 61 6e 64 20 65 2e 20 20 54  xed, c and e.  T
d100: 68 65 20 72 65 6d 61 69 6e 69 6e 67 20 63 6f 6c  he remaining col
d110: 75 6d 6e 73 20 61 72 65 20 74 68 65 20 70 72 69  umns are the pri
d120: 6d 61 72 79 0a 6b 65 79 20 6f 66 20 74 68 65 20  mary.key of the 
d130: 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 61  corresponding ta
d140: 62 6c 65 20 72 6f 77 2e 20 20 4e 6f 72 6d 61 6c  ble row.  Normal
d150: 6c 79 2c 20 74 68 65 20 70 72 69 6d 61 72 79 20  ly, the primary 
d160: 6b 65 79 20 77 6f 75 6c 64 20 62 65 0a 63 6f 6c  key would be.col
d170: 75 6d 6e 73 20 64 2c 20 63 2c 20 61 6e 64 20 61  umns d, c, and a
d180: 2c 20 62 75 74 20 62 65 63 61 75 73 65 20 63 6f  , but because co
d190: 6c 75 6d 6e 20 63 20 61 6c 72 65 61 64 79 20 61  lumn c already a
d1a0: 70 70 65 61 72 73 20 65 61 72 6c 69 65 72 20 69  ppears earlier i
d1b0: 6e 20 74 68 65 0a 69 6e 64 65 78 2c 20 69 74 20  n the.index, it 
d1c0: 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20  is omitted from 
d1d0: 74 68 65 20 6b 65 79 20 73 75 66 66 69 78 2e 29  the key suffix.)
d1e0: 5e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28 49 6e 20 74  ^</p>..<p>^(In t
d1f0: 68 65 20 65 78 74 72 65 6d 65 20 63 61 73 65 20  he extreme case 
d200: 77 68 65 72 65 20 74 68 65 20 63 6f 6c 75 6d 6e  where the column
d210: 73 20 62 65 69 6e 67 20 69 6e 64 65 78 65 64 20  s being indexed 
d220: 63 6f 76 65 72 20 61 6c 6c 20 63 6f 6c 75 6d 6e  cover all column
d230: 73 0a 6f 66 20 74 68 65 20 50 52 49 4d 41 52 59  s.of the PRIMARY
d240: 20 4b 45 59 2c 20 74 68 65 20 69 6e 64 65 78 20   KEY, the index 
d250: 77 69 6c 6c 20 63 6f 6e 73 69 73 74 20 6f 66 20  will consist of 
d260: 6f 6e 6c 79 20 74 68 65 20 63 6f 6c 75 6d 6e 73  only the columns
d270: 20 62 65 69 6e 67 0a 69 6e 64 65 78 65 64 2e 20   being.indexed. 
d280: 20 54 68 65 20 65 78 32 35 61 63 64 65 20 65 78   The ex25acde ex
d290: 61 6d 70 6c 65 20 61 62 6f 76 65 20 64 65 6d 6f  ample above demo
d2a0: 6e 73 74 72 61 74 65 73 20 74 68 69 73 2e 29 5e  nstrates this.)^
d2b0: 20 20 5e 45 61 63 68 20 65 6e 74 72 79 20 69 6e    ^Each entry in
d2c0: 0a 74 68 65 20 65 78 32 35 61 63 64 65 20 69 6e  .the ex25acde in
d2d0: 64 65 78 20 63 6f 6e 73 69 73 74 73 20 6f 66 20  dex consists of 
d2e0: 6f 6e 6c 79 20 74 68 65 20 63 6f 6c 75 6d 6e 73  only the columns
d2f0: 20 61 2c 20 63 2c 20 64 2c 20 61 6e 64 20 65 2c   a, c, d, and e,
d300: 20 69 6e 20 74 68 61 74 0a 6f 72 64 65 72 2e 3c   in that.order.<
d310: 2f 70 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20 73 75  /p>..<p> ^The su
d320: 70 70 72 65 73 73 69 6f 6e 20 6f 66 20 72 65 64  ppression of red
d330: 75 6e 64 61 6e 74 20 63 6f 6c 75 6d 6e 73 20 69  undant columns i
d340: 6e 20 74 68 65 20 6b 65 79 20 73 75 66 66 69 78  n the key suffix
d350: 20 6f 66 20 61 6e 20 69 6e 64 65 78 0a 65 6e 74   of an index.ent
d360: 72 79 20 6f 6e 6c 79 20 6f 63 63 75 72 73 20 69  ry only occurs i
d370: 6e 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44 20  n WITHOUT ROWID 
d380: 74 61 62 6c 65 73 2e 20 20 5e 49 6e 20 61 6e 20  tables.  ^In an 
d390: 6f 72 64 69 6e 61 72 79 20 72 6f 77 69 64 20 74  ordinary rowid t
d3a0: 61 62 6c 65 2c 0a 74 68 65 20 69 6e 64 65 78 20  able,.the index 
d3b0: 65 6e 74 72 79 20 61 6c 77 61 79 73 20 65 6e 64  entry always end
d3c0: 73 20 77 69 74 68 20 74 68 65 20 72 6f 77 69 64  s with the rowid
d3d0: 20 65 76 65 6e 20 69 66 20 74 68 65 20 5b 49 4e   even if the [IN
d3e0: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
d3f0: 59 5d 0a 63 6f 6c 75 6d 6e 20 69 73 20 6f 6e 65  Y].column is one
d400: 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20   of the columns 
d410: 62 65 69 6e 67 20 69 6e 64 65 78 65 64 2e 3c 2f  being indexed.</
d420: 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
d430: 6d 65 6e 74 20 73 71 6c 69 74 65 5f 6d 61 73 74  ment sqlite_mast
d440: 65 72 20 7b 73 71 6c 69 74 65 5f 6d 61 73 74 65  er {sqlite_maste
d450: 72 7d 20 7b 73 71 6c 69 74 65 5f 6d 61 73 74 65  r} {sqlite_maste
d460: 72 20 74 61 62 6c 65 7d 3c 2f 74 63 6c 3e 0a 3c  r table}</tcl>.<
d470: 68 32 3e 53 74 6f 72 61 67 65 20 4f 66 20 54 68  h2>Storage Of Th
d480: 65 20 53 51 4c 20 44 61 74 61 62 61 73 65 20 53  e SQL Database S
d490: 63 68 65 6d 61 3c 2f 68 32 3e 0a 0a 3c 70 3e 5e  chema</h2>..<p>^
d4a0: 50 61 67 65 20 31 20 6f 66 20 61 20 64 61 74 61  Page 1 of a data
d4b0: 62 61 73 65 20 66 69 6c 65 20 69 73 20 74 68 65  base file is the
d4c0: 20 72 6f 6f 74 20 70 61 67 65 20 6f 66 20 61 20   root page of a 
d4d0: 74 61 62 6c 65 20 62 2d 74 72 65 65 20 74 68 61  table b-tree tha
d4e0: 74 0a 68 6f 6c 64 73 20 61 20 73 70 65 63 69 61  t.holds a specia
d4f0: 6c 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 22 73  l table named "s
d500: 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 20 28 6f  qlite_master" (o
d510: 72 20 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d  r "sqlite_temp_m
d520: 61 73 74 65 72 22 20 69 6e 0a 74 68 65 20 63 61  aster" in.the ca
d530: 73 65 20 6f 66 20 61 20 54 45 4d 50 20 64 61 74  se of a TEMP dat
d540: 61 62 61 73 65 29 20 77 68 69 63 68 20 73 74 6f  abase) which sto
d550: 72 65 73 20 74 68 65 20 63 6f 6d 70 6c 65 74 65  res the complete
d560: 0a 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61  .database schema
d570: 2e 20 20 5e 28 54 68 65 20 73 74 72 75 63 74 75  .  ^(The structu
d580: 72 65 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65  re of the sqlite
d590: 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 20 69 73  _master table is
d5a0: 20 61 73 0a 69 66 20 69 74 20 68 61 64 20 62 65   as.if it had be
d5b0: 65 6e 20 63 72 65 61 74 65 64 20 75 73 69 6e 67  en created using
d5c0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 53   the following S
d5d0: 51 4c 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71  QL:</p>..<blockq
d5e0: 75 6f 74 65 3e 3c 70 72 65 3e 0a 43 52 45 41 54  uote><pre>.CREAT
d5f0: 45 20 54 41 42 4c 45 20 73 71 6c 69 74 65 5f 6d  E TABLE sqlite_m
d600: 61 73 74 65 72 28 0a 20 20 74 79 70 65 20 74 65  aster(.  type te
d610: 78 74 2c 0a 20 20 6e 61 6d 65 20 74 65 78 74 2c  xt,.  name text,
d620: 0a 20 20 74 62 6c 5f 6e 61 6d 65 20 74 65 78 74  .  tbl_name text
d630: 2c 0a 20 20 72 6f 6f 74 70 61 67 65 20 69 6e 74  ,.  rootpage int
d640: 65 67 65 72 2c 0a 20 20 73 71 6c 20 74 65 78 74  eger,.  sql text
d650: 0a 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63  .);.</pre></bloc
d660: 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 5e 54  kquote>)^..<p>^T
d670: 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  he sqlite_master
d680: 20 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e 73 20   table contains 
d690: 6f 6e 65 20 72 6f 77 20 66 6f 72 20 65 61 63 68  one row for each
d6a0: 20 74 61 62 6c 65 2c 20 69 6e 64 65 78 2c 20 76   table, index, v
d6b0: 69 65 77 2c 0a 61 6e 64 20 74 72 69 67 67 65 72  iew,.and trigger
d6c0: 20 28 63 6f 6c 6c 65 63 74 69 76 65 6c 79 20 22   (collectively "
d6d0: 6f 62 6a 65 63 74 73 22 29 20 69 6e 20 74 68 65  objects") in the
d6e0: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
d6f0: 2c 20 65 78 63 65 70 74 20 74 68 65 72 65 0a 69  , except there.i
d700: 73 20 6e 6f 20 65 6e 74 72 79 20 66 6f 72 20 74  s no entry for t
d710: 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  he sqlite_master
d720: 20 74 61 62 6c 65 20 69 74 73 65 6c 66 2e 20 20   table itself.  
d730: 5e 54 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74  ^The sqlite_mast
d740: 65 72 20 74 61 62 6c 65 0a 63 6f 6e 74 61 69 6e  er table.contain
d750: 73 20 65 6e 74 72 69 65 73 20 66 6f 72 20 5b 69  s entries for [i
d760: 6e 74 65 72 6e 61 6c 20 73 63 68 65 6d 61 20 6f  nternal schema o
d770: 62 6a 65 63 74 73 5d 20 69 6e 20 61 64 64 69 74  bjects] in addit
d780: 69 6f 6e 20 74 6f 20 61 70 70 6c 69 63 61 74 69  ion to applicati
d790: 6f 6e 2d 0a 61 6e 64 20 70 72 6f 67 72 61 6d 6d  on-.and programm
d7a0: 65 72 2d 64 65 66 69 6e 65 64 20 6f 62 6a 65 63  er-defined objec
d7b0: 74 73 2e 0a 0a 0a 3c 70 3e 5e 28 54 68 65 20 73  ts....<p>^(The s
d7c0: 71 6c 69 74 65 5f 6d 61 73 74 65 72 2e 74 79 70  qlite_master.typ
d7d0: 65 20 63 6f 6c 75 6d 6e 20 77 69 6c 6c 20 62 65  e column will be
d7e0: 20 6f 6e 65 0a 6f 66 20 74 68 65 20 66 6f 6c 6c   one.of the foll
d7f0: 6f 77 69 6e 67 20 74 65 78 74 20 73 74 72 69 6e  owing text strin
d800: 67 73 3a 20 20 27 74 61 62 6c 65 27 2c 20 27 69  gs:  'table', 'i
d810: 6e 64 65 78 27 2c 20 27 76 69 65 77 27 2c 20 6f  ndex', 'view', o
d820: 72 20 27 74 72 69 67 67 65 72 27 0a 61 63 63 6f  r 'trigger'.acco
d830: 72 64 69 6e 67 20 74 6f 20 74 68 65 20 74 79 70  rding to the typ
d840: 65 20 6f 66 20 6f 62 6a 65 63 74 20 64 65 66 69  e of object defi
d850: 6e 65 64 2e 20 20 54 68 65 20 27 74 61 62 6c 65  ned.  The 'table
d860: 27 20 73 74 72 69 6e 67 20 69 73 20 75 73 65 64  ' string is used
d870: 0a 66 6f 72 20 62 6f 74 68 20 6f 72 64 69 6e 61  .for both ordina
d880: 72 79 20 61 6e 64 20 5b 76 69 72 74 75 61 6c 20  ry and [virtual 
d890: 74 61 62 6c 65 73 5d 2e 29 5e 3c 2f 70 3e 0a 0a  tables].)^</p>..
d8a0: 3c 70 3e 5e 28 54 68 65 20 73 71 6c 69 74 65 5f  <p>^(The sqlite_
d8b0: 6d 61 73 74 65 72 2e 6e 61 6d 65 20 63 6f 6c 75  master.name colu
d8c0: 6d 6e 20 77 69 6c 6c 20 68 6f 6c 64 20 74 68 65  mn will hold the
d8d0: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 6f 62 6a   name of the obj
d8e0: 65 63 74 2e 29 5e 0a 5e 28 5b 55 4e 49 51 55 45  ect.)^.^([UNIQUE
d8f0: 5d 20 61 6e 64 20 5b 50 52 49 4d 41 52 59 20 4b  ] and [PRIMARY K
d900: 45 59 5d 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  EY] constraints 
d910: 6f 6e 20 74 61 62 6c 65 73 20 63 61 75 73 65 20  on tables cause 
d920: 53 51 4c 69 74 65 20 74 6f 20 63 72 65 61 74 65  SQLite to create
d930: 0a 5b 69 6e 74 65 72 6e 61 6c 20 69 6e 64 65 78  .[internal index
d940: 65 73 5d 20 77 69 74 68 20 6e 61 6d 65 73 20 6f  es] with names o
d950: 66 20 74 68 65 20 66 6f 72 6d 20 22 73 71 6c 69  f the form "sqli
d960: 74 65 5f 61 75 74 6f 69 6e 64 65 78 5f 54 41 42  te_autoindex_TAB
d970: 4c 45 5f 4e 22 0a 77 68 65 72 65 20 54 41 42 4c  LE_N".where TABL
d980: 45 20 69 73 20 72 65 70 6c 61 63 65 64 20 62 79  E is replaced by
d990: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
d9a0: 20 74 61 62 6c 65 20 74 68 61 74 20 63 6f 6e 74   table that cont
d9b0: 61 69 6e 73 20 74 68 65 0a 63 6f 6e 73 74 72 61  ains the.constra
d9c0: 69 6e 74 20 61 6e 64 20 4e 20 69 73 20 61 6e 20  int and N is an 
d9d0: 69 6e 74 65 67 65 72 20 62 65 67 69 6e 6e 69 6e  integer beginnin
d9e0: 67 20 77 69 74 68 20 31 20 61 6e 64 20 69 6e 63  g with 1 and inc
d9f0: 72 65 61 73 69 6e 67 20 62 79 20 6f 6e 65 0a 77  reasing by one.w
da00: 69 74 68 20 65 61 63 68 20 63 6f 6e 73 74 72 61  ith each constra
da10: 69 6e 74 20 73 65 65 6e 20 69 6e 20 74 68 65 20  int seen in the 
da20: 74 61 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e  table definition
da30: 2e 29 5e 0a 5e 28 49 6e 20 61 20 5b 57 49 54 48  .)^.^(In a [WITH
da40: 4f 55 54 20 52 4f 57 49 44 5d 20 74 61 62 6c 65  OUT ROWID] table
da50: 2c 20 74 68 65 72 65 20 69 73 20 6e 6f 20 73 71  , there is no sq
da60: 6c 69 74 65 5f 6d 61 73 74 65 72 20 65 6e 74 72  lite_master entr
da70: 79 20 66 6f 72 20 74 68 65 0a 50 52 49 4d 41 52  y for the.PRIMAR
da80: 59 20 4b 45 59 2c 20 62 75 74 20 74 68 65 20 22  Y KEY, but the "
da90: 73 71 6c 69 74 65 5f 61 75 74 6f 69 6e 64 65 78  sqlite_autoindex
daa0: 5f 54 41 42 4c 45 5f 4e 22 20 6e 61 6d 65 20 69  _TABLE_N" name i
dab0: 73 20 73 65 74 20 61 73 69 64 65 0a 66 6f 72 20  s set aside.for 
dac0: 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20  the PRIMARY KEY 
dad0: 61 73 20 69 66 20 74 68 65 20 73 71 6c 69 74 65  as if the sqlite
dae0: 5f 6d 61 73 74 65 72 20 65 6e 74 72 79 20 64 69  _master entry di
daf0: 64 20 65 78 69 73 74 2e 20 20 54 68 69 73 0a 77  d exist.  This.w
db00: 69 6c 6c 20 61 66 66 65 63 74 20 74 68 65 20 6e  ill affect the n
db10: 75 6d 62 65 72 69 6e 67 20 6f 66 20 73 75 62 73  umbering of subs
db20: 65 71 75 65 6e 74 20 55 4e 49 51 55 45 20 63 6f  equent UNIQUE co
db30: 6e 73 74 72 61 69 6e 74 73 2e 29 5e 0a 5e 54 68  nstraints.)^.^Th
db40: 65 20 22 73 71 6c 69 74 65 5f 61 75 74 6f 69 6e  e "sqlite_autoin
db50: 64 65 78 5f 54 41 42 4c 45 5f 4e 22 20 6e 61 6d  dex_TABLE_N" nam
db60: 65 20 69 73 20 6e 65 76 65 72 20 61 6c 6c 6f 63  e is never alloc
db70: 61 74 65 64 20 66 6f 72 20 61 6e 0a 5b 49 4e 54  ated for an.[INT
db80: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
db90: 5d 2c 20 65 69 74 68 65 72 20 69 6e 20 72 6f 77  ], either in row
dba0: 69 64 20 74 61 62 6c 65 73 20 6f 72 20 57 49 54  id tables or WIT
dbb0: 48 4f 55 54 20 52 4f 57 49 44 20 74 61 62 6c 65  HOUT ROWID table
dbc0: 73 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  s..</p>..<p>The 
dbd0: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 2e 74 62  sqlite_master.tb
dbe0: 6c 5f 6e 61 6d 65 20 63 6f 6c 75 6d 6e 20 68 6f  l_name column ho
dbf0: 6c 64 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20  lds the name of 
dc00: 61 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77 0a  a table or view.
dc10: 74 68 61 74 20 74 68 65 20 6f 62 6a 65 63 74 20  that the object 
dc20: 69 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  is associated wi
dc30: 74 68 2e 20 20 5e 46 6f 72 20 61 20 74 61 62 6c  th.  ^For a tabl
dc40: 65 20 6f 72 20 76 69 65 77 2c 20 74 68 65 0a 74  e or view, the.t
dc50: 62 6c 5f 6e 61 6d 65 20 63 6f 6c 75 6d 6e 20 69  bl_name column i
dc60: 73 20 61 20 63 6f 70 79 20 6f 66 20 74 68 65 20  s a copy of the 
dc70: 6e 61 6d 65 20 63 6f 6c 75 6d 6e 2e 20 20 5e 46  name column.  ^F
dc80: 6f 72 20 61 6e 20 69 6e 64 65 78 2c 20 74 68 65  or an index, the
dc90: 20 74 62 6c 5f 6e 61 6d 65 0a 69 73 20 74 68 65   tbl_name.is the
dca0: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
dcb0: 6c 65 20 74 68 61 74 20 69 73 20 69 6e 64 65 78  le that is index
dcc0: 65 64 2e 20 20 5e 46 6f 72 20 61 20 74 72 69 67  ed.  ^For a trig
dcd0: 67 65 72 2c 20 74 68 65 20 74 62 6c 5f 6e 61 6d  ger, the tbl_nam
dce0: 65 0a 63 6f 6c 75 6d 6e 20 73 74 6f 72 65 73 20  e.column stores 
dcf0: 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
dd00: 74 61 62 6c 65 20 6f 72 20 76 69 65 77 20 74 68  table or view th
dd10: 61 74 20 63 61 75 73 65 73 20 74 68 65 20 74 72  at causes the tr
dd20: 69 67 67 65 72 20 0a 74 6f 20 66 69 72 65 2e 3c  igger .to fire.<
dd30: 2f 70 3e 0a 0a 3c 70 3e 5e 28 54 68 65 20 73 71  /p>..<p>^(The sq
dd40: 6c 69 74 65 5f 6d 61 73 74 65 72 2e 72 6f 6f 74  lite_master.root
dd50: 70 61 67 65 20 63 6f 6c 75 6d 6e 20 73 74 6f 72  page column stor
dd60: 65 73 20 74 68 65 20 70 61 67 65 20 6e 75 6d 62  es the page numb
dd70: 65 72 20 6f 66 20 74 68 65 20 72 6f 6f 74 0a 62  er of the root.b
dd80: 2d 74 72 65 65 20 70 61 67 65 20 66 6f 72 20 74  -tree page for t
dd90: 61 62 6c 65 73 20 61 6e 64 20 69 6e 64 65 78 65  ables and indexe
dda0: 73 2e 29 5e 20 20 5e 46 6f 72 20 72 6f 77 73 20  s.)^  ^For rows 
ddb0: 74 68 61 74 20 64 65 66 69 6e 65 20 76 69 65 77  that define view
ddc0: 73 2c 20 74 72 69 67 67 65 72 73 2c 0a 61 6e 64  s, triggers,.and
ddd0: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 2c   virtual tables,
dde0: 20 74 68 65 20 72 6f 6f 74 70 61 67 65 20 63 6f   the rootpage co
ddf0: 6c 75 6d 6e 20 69 73 20 30 20 6f 72 20 4e 55 4c  lumn is 0 or NUL
de00: 4c 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28 54 68 65  L.</p>..<p>^(The
de10: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 2e 73   sqlite_master.s
de20: 71 6c 20 63 6f 6c 75 6d 6e 20 73 74 6f 72 65 73  ql column stores
de30: 20 53 51 4c 20 74 65 78 74 20 74 68 61 74 20 64   SQL text that d
de40: 65 73 63 72 69 62 65 73 20 74 68 65 0a 6f 62 6a  escribes the.obj
de50: 65 63 74 2e 20 20 54 68 69 73 20 53 51 4c 20 74  ect.  This SQL t
de60: 65 78 74 20 69 73 20 61 20 5b 43 52 45 41 54 45  ext is a [CREATE
de70: 20 54 41 42 4c 45 5d 2c 20 5b 43 52 45 41 54 45   TABLE], [CREATE
de80: 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 5d 2c   VIRTUAL TABLE],
de90: 0a 5b 43 52 45 41 54 45 20 49 4e 44 45 58 5d 2c  .[CREATE INDEX],
dea0: 0a 5b 43 52 45 41 54 45 20 56 49 45 57 5d 2c 20  .[CREATE VIEW], 
deb0: 6f 72 20 5b 43 52 45 41 54 45 20 54 52 49 47 47  or [CREATE TRIGG
dec0: 45 52 5d 20 73 74 61 74 65 6d 65 6e 74 20 74 68  ER] statement th
ded0: 61 74 20 69 66 20 65 76 61 6c 75 61 74 65 64 20  at if evaluated 
dee0: 61 67 61 69 6e 73 74 0a 74 68 65 20 64 61 74 61  against.the data
def0: 62 61 73 65 20 66 69 6c 65 20 77 68 65 6e 20 69  base file when i
df00: 74 20 69 73 20 74 68 65 20 6d 61 69 6e 20 64 61  t is the main da
df10: 74 61 62 61 73 65 20 6f 66 20 61 20 5b 64 61 74  tabase of a [dat
df20: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
df30: 5d 0a 77 6f 75 6c 64 20 72 65 63 72 65 61 74 65  ].would recreate
df40: 20 74 68 65 20 6f 62 6a 65 63 74 2e 29 5e 20 20   the object.)^  
df50: 54 68 65 20 74 65 78 74 20 69 73 20 75 73 75 61  The text is usua
df60: 6c 6c 79 20 61 20 63 6f 70 79 20 6f 66 20 74 68  lly a copy of th
df70: 65 20 6f 72 69 67 69 6e 61 6c 0a 73 74 61 74 65  e original.state
df80: 6d 65 6e 74 20 75 73 65 64 20 74 6f 20 63 72 65  ment used to cre
df90: 61 74 65 20 74 68 65 20 6f 62 6a 65 63 74 20 62  ate the object b
dfa0: 75 74 20 77 69 74 68 20 6e 6f 72 6d 61 6c 69 7a  ut with normaliz
dfb0: 61 74 69 6f 6e 73 20 61 70 70 6c 69 65 64 20 73  ations applied s
dfc0: 6f 0a 74 68 61 74 20 74 68 65 20 74 65 78 74 20  o.that the text 
dfd0: 63 6f 6e 66 6f 72 6d 73 20 74 6f 20 74 68 65 20  conforms to the 
dfe0: 66 6f 6c 6c 6f 77 69 6e 67 20 72 75 6c 65 73 3a  following rules:
dff0: 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 5e 54 68 65 20  ..<ul>.<li>^The 
e000: 43 52 45 41 54 45 2c 20 54 41 42 4c 45 2c 20 56  CREATE, TABLE, V
e010: 49 45 57 2c 20 54 52 49 47 47 45 52 2c 20 61 6e  IEW, TRIGGER, an
e020: 64 20 49 4e 44 45 58 20 6b 65 79 77 6f 72 64 73  d INDEX keywords
e030: 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e   at the beginnin
e040: 67 0a 6f 66 20 74 68 65 20 73 74 61 74 65 6d 65  g.of the stateme
e050: 6e 74 20 61 72 65 20 63 6f 6e 76 65 72 74 65 64  nt are converted
e060: 20 74 6f 20 61 6c 6c 20 75 70 70 65 72 20 63 61   to all upper ca
e070: 73 65 20 6c 65 74 74 65 72 73 2e 0a 3c 6c 69 3e  se letters..<li>
e080: 5e 54 68 65 20 54 45 4d 50 20 6f 72 20 54 45 4d  ^The TEMP or TEM
e090: 50 4f 52 41 52 59 20 6b 65 79 77 6f 72 64 20 69  PORARY keyword i
e0a0: 73 20 72 65 6d 6f 76 65 64 20 69 66 20 69 74 20  s removed if it 
e0b0: 6f 63 63 75 72 73 20 61 66 74 65 72 20 74 68 65  occurs after the
e0c0: 20 0a 69 6e 69 74 69 61 6c 20 43 52 45 41 54 45   .initial CREATE
e0d0: 20 6b 65 79 77 6f 72 64 2e 0a 3c 6c 69 3e 5e 41   keyword..<li>^A
e0e0: 6e 79 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65  ny database name
e0f0: 20 71 75 61 6c 69 66 69 65 72 20 74 68 61 74 20   qualifier that 
e100: 6f 63 63 75 72 73 20 70 72 69 6f 72 20 74 6f 20  occurs prior to 
e110: 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 0a  the name of the.
e120: 6f 62 6a 65 63 74 20 62 65 69 6e 67 20 63 72 65  object being cre
e130: 61 74 65 64 20 69 73 20 72 65 6d 6f 76 65 64 2e  ated is removed.
e140: 0a 3c 6c 69 3e 5e 4c 65 61 64 69 6e 67 20 73 70  .<li>^Leading sp
e150: 61 63 65 73 20 61 72 65 20 72 65 6d 6f 76 65 64  aces are removed
e160: 2e 0a 3c 6c 69 3e 5e 41 6c 6c 20 73 70 61 63 65  ..<li>^All space
e170: 73 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20  s following the 
e180: 66 69 72 73 74 20 74 77 6f 20 6b 65 79 77 6f 72  first two keywor
e190: 64 73 20 61 72 65 20 63 6f 6e 76 65 72 74 65 64  ds are converted
e1a0: 20 69 6e 74 6f 20 61 20 73 69 6e 67 6c 65 0a 73   into a single.s
e1b0: 70 61 63 65 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e  pace..</ul>..<p>
e1c0: 5e 28 54 68 65 20 74 65 78 74 20 69 6e 20 74 68  ^(The text in th
e1d0: 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 2e  e sqlite_master.
e1e0: 73 71 6c 20 63 6f 6c 75 6d 6e 20 69 73 20 61 20  sql column is a 
e1f0: 63 6f 70 79 20 6f 66 20 74 68 65 20 6f 72 69 67  copy of the orig
e200: 69 6e 61 6c 0a 43 52 45 41 54 45 20 73 74 61 74  inal.CREATE stat
e210: 65 6d 65 6e 74 20 74 65 78 74 20 74 68 61 74 20  ement text that 
e220: 63 72 65 61 74 65 64 20 74 68 65 20 6f 62 6a 65  created the obje
e230: 63 74 2c 20 65 78 63 65 70 74 20 6e 6f 72 6d 61  ct, except norma
e240: 6c 69 7a 65 64 20 61 73 0a 64 65 73 63 72 69 62  lized as.describ
e250: 65 64 20 61 62 6f 76 65 20 61 6e 64 20 61 73 20  ed above and as 
e260: 6d 6f 64 69 66 69 65 64 20 62 79 20 73 75 62 73  modified by subs
e270: 65 71 75 65 6e 74 20 5b 41 4c 54 45 52 20 54 41  equent [ALTER TA
e280: 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74 73 2e  BLE] statements.
e290: 29 5e 0a 5e 28 54 68 65 20 73 71 6c 69 74 65 5f  )^.^(The sqlite_
e2a0: 6d 61 73 74 65 72 2e 73 71 6c 20 69 73 20 4e 55  master.sql is NU
e2b0: 4c 4c 20 66 6f 72 20 74 68 65 20 5b 69 6e 74 65  LL for the [inte
e2c0: 72 6e 61 6c 20 69 6e 64 65 78 65 73 5d 20 74 68  rnal indexes] th
e2d0: 61 74 20 61 72 65 0a 61 75 74 6f 6d 61 74 69 63  at are.automatic
e2e0: 61 6c 6c 79 20 63 72 65 61 74 65 64 20 62 79 20  ally created by 
e2f0: 5b 55 4e 49 51 55 45 5d 20 6f 72 20 5b 50 52 49  [UNIQUE] or [PRI
e300: 4d 41 52 59 20 4b 45 59 5d 20 63 6f 6e 73 74 72  MARY KEY] constr
e310: 61 69 6e 74 73 2e 29 5e 3c 2f 70 3e 0a 0a 0a 3c  aints.)^</p>...<
e320: 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
e330: 69 6e 74 73 63 68 65 6d 61 20 7b 69 6e 74 65 72  intschema {inter
e340: 6e 61 6c 20 73 63 68 65 6d 61 20 6f 62 6a 65 63  nal schema objec
e350: 74 73 7d 20 5c 0a 7b 69 6e 74 65 72 6e 61 6c 20  ts} \.{internal 
e360: 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 7d 20 7b  schema object} {
e370: 69 6e 74 65 72 6e 61 6c 20 69 6e 64 65 78 7d 20  internal index} 
e380: 7b 69 6e 74 65 72 6e 61 6c 20 69 6e 64 65 78 65  {internal indexe
e390: 73 7d 20 5c 0a 7b 69 6e 74 65 72 6e 61 6c 20 74  s} \.{internal t
e3a0: 61 62 6c 65 7d 20 7b 69 6e 74 65 72 6e 61 6c 20  able} {internal 
e3b0: 74 61 62 6c 65 73 7d 3c 2f 74 63 6c 3e 0a 3c 68  tables}</tcl>.<h
e3c0: 33 3e 49 6e 74 65 72 6e 61 6c 20 53 63 68 65 6d  3>Internal Schem
e3d0: 61 20 4f 62 6a 65 63 74 73 3c 2f 68 33 3e 0a 0a  a Objects</h3>..
e3e0: 3c 70 3e 5e 49 6e 20 61 64 64 69 74 69 6f 6e 20  <p>^In addition 
e3f0: 74 6f 20 74 68 65 20 74 61 62 6c 65 73 2c 20 69  to the tables, i
e400: 6e 64 65 78 65 73 2c 20 76 69 65 77 73 2c 20 61  ndexes, views, a
e410: 6e 64 20 74 72 69 67 67 65 72 73 20 63 72 65 61  nd triggers crea
e420: 74 65 64 20 62 79 0a 74 68 65 20 61 70 70 6c 69  ted by.the appli
e430: 63 61 74 69 6f 6e 20 61 6e 64 2f 6f 72 20 74 68  cation and/or th
e440: 65 20 64 65 76 65 6c 6f 70 65 72 20 75 73 69 6e  e developer usin
e450: 67 20 43 52 45 41 54 45 20 73 74 61 74 65 6d 65  g CREATE stateme
e460: 6e 74 73 20 53 51 4c 2c 20 74 68 65 0a 73 71 6c  nts SQL, the.sql
e470: 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65  ite_master table
e480: 20 6d 61 79 20 63 6f 6e 74 61 69 6e 20 7a 65 72   may contain zer
e490: 6f 20 6f 72 20 6d 6f 72 65 20 65 6e 74 72 69 65  o or more entrie
e4a0: 73 20 66 6f 72 20 0a 3c 69 3e 69 6e 74 65 72 6e  s for .<i>intern
e4b0: 61 6c 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74  al schema object
e4c0: 73 3c 2f 69 3e 20 74 68 61 74 20 61 72 65 20 63  s</i> that are c
e4d0: 72 65 61 74 65 64 20 62 79 20 53 51 4c 69 74 65  reated by SQLite
e4e0: 20 66 6f 72 20 69 74 73 20 0a 6f 77 6e 20 69 6e   for its .own in
e4f0: 74 65 72 6e 61 6c 20 75 73 65 2e 20 20 5e 54 68  ternal use.  ^Th
e500: 65 20 6e 61 6d 65 73 20 6f 66 20 69 6e 74 65 72  e names of inter
e510: 6e 61 6c 20 73 63 68 65 6d 61 20 6f 62 6a 65 63  nal schema objec
e520: 74 73 0a 61 6c 77 61 79 73 20 62 65 67 69 6e 20  ts.always begin 
e530: 77 69 74 68 20 22 73 71 6c 69 74 65 5f 22 20 61  with "sqlite_" a
e540: 6e 64 20 61 6e 79 20 74 61 62 6c 65 2c 20 69 6e  nd any table, in
e550: 64 65 78 2c 20 76 69 65 77 2c 20 6f 72 20 74 72  dex, view, or tr
e560: 69 67 67 65 72 0a 77 68 6f 73 65 20 6e 61 6d 65  igger.whose name
e570: 20 62 65 67 69 6e 73 20 77 69 74 68 20 22 73 71   begins with "sq
e580: 6c 69 74 65 5f 22 20 69 73 20 61 6e 20 69 6e 74  lite_" is an int
e590: 65 72 6e 61 6c 20 73 63 68 65 6d 61 20 6f 62 6a  ernal schema obj
e5a0: 65 63 74 2e 0a 5e 53 51 4c 69 74 65 20 70 72 6f  ect..^SQLite pro
e5b0: 68 69 62 69 74 73 20 61 70 70 6c 69 63 61 74 69  hibits applicati
e5c0: 6f 6e 73 20 66 72 6f 6d 20 63 72 65 61 74 69 6e  ons from creatin
e5d0: 67 20 6f 62 6a 65 63 74 73 20 77 68 6f 73 65 20  g objects whose 
e5e0: 6e 61 6d 65 73 20 62 65 67 69 6e 0a 77 69 74 68  names begin.with
e5f0: 20 22 73 71 6c 69 74 65 5f 22 2e 20 20 0a 0a 3c   "sqlite_".  ..<
e600: 70 3e 49 6e 74 65 72 6e 61 6c 20 73 63 68 65 6d  p>Internal schem
e610: 61 20 6f 62 6a 65 63 74 73 20 75 73 65 64 20 62  a objects used b
e620: 79 20 53 51 4c 69 74 65 20 6d 61 79 20 69 6e 63  y SQLite may inc
e630: 6c 75 64 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69  lude the followi
e640: 6e 67 3a 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70  ng:..<ul>.<li><p
e650: 3e 49 6e 64 69 63 65 73 20 77 69 74 68 20 6e 61  >Indices with na
e660: 6d 65 73 20 6f 66 20 74 68 65 20 66 6f 72 6d 20  mes of the form 
e670: 22 73 71 6c 69 74 65 5f 61 75 74 6f 69 6e 64 65  "sqlite_autoinde
e680: 78 5f 54 41 42 4c 45 5f 4e 22 20 74 68 61 74 0a  x_TABLE_N" that.
e690: 20 20 20 20 20 20 20 61 72 65 20 75 73 65 64 20         are used 
e6a0: 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 5b 55 4e  to implement [UN
e6b0: 49 51 55 45 5d 20 61 6e 64 20 5b 50 52 49 4d 41  IQUE] and [PRIMA
e6c0: 52 59 20 4b 45 59 5d 20 63 6f 6e 73 74 72 61 69  RY KEY] constrai
e6d0: 6e 74 73 20 6f 6e 0a 20 20 20 20 20 20 20 6f 72  nts on.       or
e6e0: 64 69 6e 61 72 79 20 74 61 62 6c 65 73 2e 0a 0a  dinary tables...
e6f0: 3c 6c 69 3e 3c 70 3e 41 20 74 61 62 6c 65 20 77  <li><p>A table w
e700: 69 74 68 20 74 68 65 20 6e 61 6d 65 20 22 73 71  ith the name "sq
e710: 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 22 20 74  lite_sequence" t
e720: 68 61 74 20 69 73 20 75 73 65 64 20 74 6f 20 6b  hat is used to k
e730: 65 65 70 20 74 72 61 63 6b 0a 20 20 20 20 20 20  eep track.      
e740: 20 6f 66 20 74 68 65 20 6d 61 78 69 6d 75 6d 20   of the maximum 
e750: 68 69 73 74 6f 72 69 63 61 6c 20 5b 49 4e 54 45  historical [INTE
e760: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 5d  GER PRIMARY KEY]
e770: 20 66 6f 72 20 61 20 74 61 62 6c 65 0a 20 20 20   for a table.   
e780: 20 20 20 20 75 73 69 6e 67 20 5b 41 55 54 4f 49      using [AUTOI
e790: 4e 43 52 45 4d 45 4e 54 5d 2e 0a 0a 3c 6c 69 3e  NCREMENT]...<li>
e7a0: 3c 70 3e 54 61 62 6c 65 73 20 77 69 74 68 20 6e  <p>Tables with n
e7b0: 61 6d 65 73 20 6f 66 20 74 68 65 20 66 6f 72 6d  ames of the form
e7c0: 20 22 73 71 6c 69 74 65 5f 73 74 61 74 4e 22 20   "sqlite_statN" 
e7d0: 77 68 65 72 65 20 4e 20 69 73 20 61 6e 20 69 6e  where N is an in
e7e0: 74 65 67 65 72 2e 0a 20 20 20 20 20 20 20 53 75  teger..       Su
e7f0: 63 68 20 74 61 62 6c 65 73 20 73 74 6f 72 65 20  ch tables store 
e800: 64 61 74 61 62 61 73 65 20 73 74 61 74 69 73 74  database statist
e810: 69 63 73 20 67 61 74 68 65 72 65 64 20 62 79 20  ics gathered by 
e820: 74 68 65 20 5b 41 4e 41 4c 59 5a 45 5d 0a 20 20  the [ANALYZE].  
e830: 20 20 20 20 20 63 6f 6d 6d 61 6e 64 20 61 6e 64       command and
e840: 20 75 73 65 64 20 62 79 20 74 68 65 20 71 75 65   used by the que
e850: 72 79 20 70 6c 61 6e 6e 65 72 20 74 6f 20 68 65  ry planner to he
e860: 6c 70 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65  lp determine the
e870: 20 62 65 73 74 0a 20 20 20 20 20 20 20 61 6c 67   best.       alg
e880: 6f 72 69 74 68 6d 20 74 6f 20 75 73 65 20 66 6f  orithm to use fo
e890: 72 20 65 61 63 68 20 71 75 65 72 79 2e 0a 3c 2f  r each query..</
e8a0: 75 6c 3e 0a 0a 3c 70 3e 4e 65 77 20 69 6e 74 65  ul>..<p>New inte
e8b0: 72 6e 61 6c 20 73 63 68 65 6d 61 20 6f 62 6a 65  rnal schema obje
e8c0: 63 74 73 20 6e 61 6d 65 73 2c 20 61 6c 77 61 79  cts names, alway
e8d0: 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68  s beginning with
e8e0: 20 22 73 71 6c 69 74 65 5f 22 2c 0a 6d 61 79 20   "sqlite_",.may 
e8f0: 62 65 20 61 64 64 65 64 20 74 6f 20 74 68 65 20  be added to the 
e900: 53 51 4c 69 74 65 20 66 69 6c 65 20 66 6f 72 6d  SQLite file form
e910: 61 74 20 69 6e 20 66 75 74 75 72 65 20 72 65 6c  at in future rel
e920: 65 61 73 65 73 2e 0a 0a 3c 74 63 6c 3e 68 64 5f  eases...<tcl>hd_
e930: 66 72 61 67 6d 65 6e 74 20 73 65 71 74 61 62 20  fragment seqtab 
e940: 7b 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65  {sqlite_sequence
e950: 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20  }</tcl>.<h3>The 
e960: 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 20  sqlite_sequence 
e970: 74 61 62 6c 65 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e  table</h3>..<p>^
e980: 54 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65  The sqlite_seque
e990: 6e 63 65 20 74 61 62 6c 65 20 69 73 20 61 6e 20  nce table is an 
e9a0: 69 6e 74 65 72 6e 61 6c 20 74 61 62 6c 65 20 75  internal table u
e9b0: 73 65 64 20 74 6f 20 68 65 6c 70 20 69 6d 70 6c  sed to help impl
e9c0: 65 6d 65 6e 74 0a 5b 41 55 54 4f 49 4e 43 52 45  ement.[AUTOINCRE
e9d0: 4d 45 4e 54 5d 2e 20 20 5e 54 68 65 20 73 71 6c  MENT].  ^The sql
e9e0: 69 74 65 5f 73 65 71 75 65 6e 63 65 20 74 61 62  ite_sequence tab
e9f0: 6c 65 20 69 73 20 63 72 65 61 74 65 64 20 61 75  le is created au
ea00: 74 6f 6d 61 74 69 63 61 6c 6c 79 0a 77 68 65 6e  tomatically.when
ea10: 65 76 65 72 20 61 6e 79 20 6f 72 64 69 6e 61 72  ever any ordinar
ea20: 79 20 74 61 62 6c 65 20 77 69 74 68 20 61 6e 20  y table with an 
ea30: 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 69 6e  AUTOINCREMENT in
ea40: 74 65 67 65 72 20 70 72 69 6d 61 72 79 0a 6b 65  teger primary.ke
ea50: 79 20 69 73 20 63 72 65 61 74 65 64 2e 20 20 5e  y is created.  ^
ea60: 4f 6e 63 65 20 63 72 65 61 74 65 64 2c 20 74 68  Once created, th
ea70: 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63  e sqlite_sequenc
ea80: 65 20 74 61 62 6c 65 20 65 78 69 73 74 73 20 69  e table exists i
ea90: 6e 20 74 68 65 0a 73 71 6c 69 74 65 5f 6d 61 73  n the.sqlite_mas
eaa0: 74 65 72 20 74 61 62 6c 65 20 66 6f 72 65 76 65  ter table foreve
eab0: 72 3b 20 69 74 20 63 61 6e 6e 6f 74 20 62 65 20  r; it cannot be 
eac0: 64 72 6f 70 70 65 64 2e 0a 5e 28 54 68 65 20 73  dropped..^(The s
ead0: 63 68 65 6d 61 20 66 6f 72 20 74 68 65 20 73 71  chema for the sq
eae0: 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 20 74 61  lite_sequence ta
eaf0: 62 6c 65 20 69 73 3a 0a 0a 3c 62 6c 6f 63 6b 71  ble is:..<blockq
eb00: 75 6f 74 65 3e 3c 70 72 65 3e 0a 43 52 45 41 54  uote><pre>.CREAT
eb10: 45 20 54 41 42 4c 45 20 73 71 6c 69 74 65 5f 73  E TABLE sqlite_s
eb20: 65 71 75 65 6e 63 65 28 6e 61 6d 65 2c 73 65 71  equence(name,seq
eb30: 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b  );.</pre></block
eb40: 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 5e 54 68  quote>)^..<p>^Th
eb50: 65 72 65 20 69 73 20 61 20 73 69 6e 67 6c 65 20  ere is a single 
eb60: 72 6f 77 20 69 6e 20 74 68 65 20 73 71 6c 69 74  row in the sqlit
eb70: 65 5f 73 65 71 75 65 6e 63 65 20 74 61 62 6c 65  e_sequence table
eb80: 20 66 6f 72 20 65 61 63 68 20 6f 72 64 69 6e 61   for each ordina
eb90: 72 79 0a 74 61 62 6c 65 20 74 68 61 74 20 75 73  ry.table that us
eba0: 65 73 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  es AUTOINCREMENT
ebb0: 2e 20 20 5e 28 54 68 65 20 6e 61 6d 65 20 6f 66  .  ^(The name of
ebc0: 20 74 68 65 20 74 61 62 6c 65 20 28 61 73 20 69   the table (as i
ebd0: 74 20 61 70 70 65 61 72 73 20 69 6e 0a 73 71 6c  t appears in.sql
ebe0: 69 74 65 5f 6d 61 73 74 65 72 2e 6e 61 6d 65 29  ite_master.name)
ebf0: 20 69 73 20 69 6e 20 74 68 65 20 73 71 6c 69 74   is in the sqlit
ec00: 65 5f 73 65 71 75 65 6e 63 65 2e 6d 61 69 6e 20  e_sequence.main 
ec10: 66 69 65 6c 64 20 61 6e 64 20 74 68 65 20 6c 61  field and the la
ec20: 72 67 65 73 74 0a 5b 49 4e 54 45 47 45 52 20 50  rgest.[INTEGER P
ec30: 52 49 4d 41 52 59 20 4b 45 59 5d 20 65 76 65 72  RIMARY KEY] ever
ec40: 20 75 73 65 64 20 62 79 20 74 68 61 74 20 74 61   used by that ta
ec50: 62 6c 65 20 69 73 20 69 6e 20 74 68 65 20 73 71  ble is in the sq
ec60: 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 2e 73 65  lite_sequence.se
ec70: 71 0a 66 69 65 6c 64 2e 29 5e 20 20 5e 4e 65 77  q.field.)^  ^New
ec80: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 67   automatically g
ec90: 65 6e 65 72 61 74 65 64 20 69 6e 74 65 67 65 72  enerated integer
eca0: 20 70 72 69 6d 61 72 79 20 6b 65 79 73 20 66 6f   primary keys fo
ecb0: 72 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a  r AUTOINCREMENT.
ecc0: 74 61 62 6c 65 73 20 61 72 65 20 67 75 61 72 61  tables are guara
ecd0: 6e 74 65 65 64 20 74 6f 20 62 65 20 6c 61 72 67  nteed to be larg
ece0: 65 72 20 74 68 61 6e 20 74 68 65 20 73 71 6c 69  er than the sqli
ecf0: 74 65 5f 73 65 71 75 65 6e 63 65 2e 73 65 71 20  te_sequence.seq 
ed00: 66 69 65 6c 64 20 66 6f 72 0a 74 68 61 74 20 74  field for.that t
ed10: 61 62 6c 65 2e 0a 5e 28 49 66 20 74 68 65 20 73  able..^(If the s
ed20: 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 2e 73  qlite_sequence.s
ed30: 65 71 20 66 69 65 6c 64 20 6f 66 20 61 6e 20 41  eq field of an A
ed40: 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 74 61 62  UTOINCREMENT tab
ed50: 6c 65 20 69 73 20 61 6c 72 65 61 64 79 20 61 74  le is already at
ed60: 0a 74 68 65 20 6c 61 72 67 65 73 74 20 69 6e 74  .the largest int
ed70: 65 67 65 72 20 76 61 6c 75 65 20 28 39 32 32 33  eger value (9223
ed80: 33 37 32 30 33 36 38 35 34 37 37 35 38 30 37 29  372036854775807)
ed90: 20 74 68 65 6e 20 61 74 74 65 6d 70 74 73 20 74   then attempts t
eda0: 6f 20 61 64 64 20 6e 65 77 0a 72 6f 77 73 20 74  o add new.rows t
edb0: 6f 20 74 68 61 74 20 74 61 62 6c 65 20 77 69 74  o that table wit
edc0: 68 20 61 6e 20 61 75 74 6f 6d 61 74 69 63 61 6c  h an automatical
edd0: 6c 79 20 67 65 6e 65 72 61 74 65 64 20 69 6e 74  ly generated int
ede0: 65 67 65 72 20 70 72 69 6d 61 72 79 20 77 69 6c  eger primary wil
edf0: 6c 20 66 61 69 6c 0a 77 69 74 68 20 61 6e 20 5b  l fail.with an [
ee00: 53 51 4c 49 54 45 5f 46 55 4c 4c 5d 20 65 72 72  SQLITE_FULL] err
ee10: 6f 72 2e 29 5e 0a 5e 54 68 65 20 73 71 6c 69 74  or.)^.^The sqlit
ee20: 65 5f 73 65 71 75 65 6e 63 65 2e 73 65 71 20 66  e_sequence.seq f
ee30: 69 65 6c 64 20 69 73 20 61 75 74 6f 6d 61 74 69  ield is automati
ee40: 63 61 6c 6c 79 20 75 70 64 61 74 65 64 20 69 66  cally updated if
ee50: 20 72 65 71 75 69 72 65 64 20 77 68 65 6e 0a 6e   required when.n
ee60: 65 77 20 65 6e 74 72 69 65 73 20 61 72 65 20 61  ew entries are a
ee70: 64 64 65 64 20 74 6f 20 61 6e 20 41 55 54 4f 49  dded to an AUTOI
ee80: 4e 43 52 45 4d 45 4e 54 20 74 61 62 6c 65 2e 20  NCREMENT table. 
ee90: 20 0a 5e 54 68 65 20 73 71 6c 69 74 65 5f 73 65   .^The sqlite_se
eea0: 71 75 65 6e 63 65 20 72 6f 77 20 66 6f 72 20 61  quence row for a
eeb0: 6e 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20  n AUTOINCREMENT 
eec0: 74 61 62 6c 65 20 69 73 20 61 75 74 6f 6d 61 74  table is automat
eed0: 69 63 61 6c 6c 79 20 64 65 6c 65 74 65 64 0a 77  ically deleted.w
eee0: 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 69 73  hen the table is
eef0: 20 64 72 6f 70 70 65 64 2e 0a 5e 49 66 20 74 68   dropped..^If th
ef00: 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63  e sqlite_sequenc
ef10: 65 20 72 6f 77 20 66 6f 72 20 61 6e 20 41 55 54  e row for an AUT
ef20: 4f 49 4e 43 52 45 4d 45 4e 54 20 74 61 62 6c 65  OINCREMENT table
ef30: 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 20   does not exist 
ef40: 77 68 65 6e 0a 74 68 65 20 41 55 54 4f 49 4e 43  when.the AUTOINC
ef50: 52 45 4d 45 4e 54 20 74 61 62 6c 65 20 69 73 20  REMENT table is 
ef60: 75 70 64 61 74 65 64 2c 20 74 68 65 6e 20 61 20  updated, then a 
ef70: 6e 65 77 20 73 71 6c 69 74 65 5f 73 65 71 75 65  new sqlite_seque
ef80: 6e 63 65 20 72 6f 77 20 69 73 20 63 72 65 61 74  nce row is creat
ef90: 65 64 2e 0a 5e 28 49 66 20 74 68 65 20 73 71 6c  ed..^(If the sql
efa0: 69 74 65 5f 73 65 71 75 65 6e 63 65 2e 73 65 71  ite_sequence.seq
efb0: 20 76 61 6c 75 65 20 66 6f 72 20 61 6e 20 41 55   value for an AU
efc0: 54 4f 49 4e 43 52 45 4d 45 4e 54 20 74 61 62 6c  TOINCREMENT tabl
efd0: 65 20 69 73 20 6d 61 6e 75 61 6c 6c 79 20 0a 73  e is manually .s
efe0: 65 74 20 74 6f 20 73 6f 6d 65 74 68 69 6e 67 20  et to something 
eff0: 6f 74 68 65 72 20 74 68 61 6e 20 61 6e 20 69 6e  other than an in
f000: 74 65 67 65 72 20 61 6e 64 20 74 68 65 72 65 20  teger and there 
f010: 69 73 20 61 20 73 75 62 73 65 71 75 65 6e 74 20  is a subsequent 
f020: 61 74 74 65 6d 70 74 20 74 6f 0a 69 6e 73 65 72  attempt to.inser
f030: 74 20 74 68 65 20 6f 72 20 75 70 64 61 74 65 20  t the or update 
f040: 74 68 65 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e  the AUTOINCREMEN
f050: 54 20 74 61 62 6c 65 2c 20 74 68 65 6e 20 74 68  T table, then th
f060: 65 20 62 65 68 61 76 69 6f 72 20 69 73 20 75 6e  e behavior is un
f070: 64 65 66 69 6e 65 64 2e 29 5e 0a 0a 3c 70 3e 5e  defined.)^..<p>^
f080: 41 70 70 6c 69 63 61 74 69 6f 6e 20 63 6f 64 65  Application code
f090: 20 69 73 20 61 6c 6c 6f 77 65 64 20 74 6f 20 6d   is allowed to m
f0a0: 6f 64 69 66 79 20 74 68 65 20 73 71 6c 69 74 65  odify the sqlite
f0b0: 5f 73 65 71 75 65 6e 63 65 20 74 61 62 6c 65 2c  _sequence table,
f0c0: 20 74 6f 20 61 64 64 0a 6e 65 77 20 72 6f 77 73   to add.new rows
f0d0: 2c 20 74 6f 20 64 65 6c 65 74 65 20 72 6f 77 73  , to delete rows
f0e0: 2c 20 6f 72 20 74 6f 20 6d 6f 64 69 66 79 20 65  , or to modify e
f0f0: 78 69 73 74 69 6e 67 20 72 6f 77 73 2e 20 20 5e  xisting rows.  ^
f100: 48 6f 77 65 76 65 72 2c 20 61 70 70 6c 69 63 61  However, applica
f110: 74 69 6f 6e 0a 63 6f 64 65 20 63 61 6e 6e 6f 74  tion.code cannot
f120: 20 63 72 65 61 74 65 20 74 68 65 20 73 71 6c 69   create the sqli
f130: 74 65 5f 73 65 71 75 65 6e 63 65 20 74 61 62 6c  te_sequence tabl
f140: 65 20 69 66 20 69 74 20 64 6f 65 73 20 6e 6f 74  e if it does not
f150: 20 61 6c 72 65 61 64 79 20 65 78 69 73 74 2e 0a   already exist..
f160: 5e 41 70 70 6c 69 63 61 74 69 6f 6e 20 63 6f 64  ^Application cod
f170: 65 20 63 61 6e 20 64 65 6c 65 74 65 20 61 6c 6c  e can delete all
f180: 20 65 6e 74 72 69 65 73 20 66 72 6f 6d 20 74 68   entries from th
f190: 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63  e sqlite_sequenc
f1a0: 65 20 74 61 62 6c 65 2c 0a 62 75 74 20 61 70 70  e table,.but app
f1b0: 6c 69 63 61 74 69 6f 6e 20 63 6f 64 65 20 63 61  lication code ca
f1c0: 6e 6e 6f 74 20 64 72 6f 70 20 74 68 65 20 73 71  nnot drop the sq
f1d0: 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 20 74 61  lite_sequence ta
f1e0: 62 6c 65 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  ble...<tcl>hd_fr
f1f0: 61 67 6d 65 6e 74 20 73 74 61 74 31 74 61 62 20  agment stat1tab 
f200: 7b 73 71 6c 69 74 65 5f 73 74 61 74 31 7d 20 53  {sqlite_stat1} S
f210: 51 4c 49 54 45 5f 53 54 41 54 31 20 3c 2f 74 63  QLITE_STAT1 </tc
f220: 6c 3e 0a 3c 68 33 3e 54 68 65 20 73 71 6c 69 74  l>.<h3>The sqlit
f230: 65 5f 73 74 61 74 31 20 74 61 62 6c 65 3c 2f 68  e_stat1 table</h
f240: 33 3e 0a 0a 3c 70 3e 5e 54 68 65 20 73 71 6c 69  3>..<p>^The sqli
f250: 74 65 5f 73 74 61 74 31 20 69 73 20 61 6e 20 69  te_stat1 is an i
f260: 6e 74 65 72 6e 61 6c 20 74 61 62 6c 65 20 63 72  nternal table cr
f270: 65 61 74 65 64 20 62 79 20 74 68 65 20 5b 41 4e  eated by the [AN
f280: 41 4c 59 5a 45 5d 20 63 6f 6d 6d 61 6e 64 0a 61  ALYZE] command.a
f290: 6e 64 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20  nd used to hold 
f2a0: 73 75 70 70 6c 65 6d 65 6e 74 61 6c 20 69 6e 66  supplemental inf
f2b0: 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74  ormation about t
f2c0: 61 62 6c 65 73 20 61 6e 64 20 69 6e 64 65 78 65  ables and indexe
f2d0: 73 20 74 68 61 74 20 74 68 65 0a 71 75 65 72 79  s that the.query
f2e0: 20 70 6c 61 6e 6e 65 72 20 63 61 6e 20 75 73 65   planner can use
f2f0: 20 74 6f 20 68 65 6c 70 20 69 74 20 66 69 6e 64   to help it find
f300: 20 62 65 74 74 65 72 20 77 61 79 73 20 6f 66 20   better ways of 
f310: 70 65 72 66 6f 72 6d 69 6e 67 20 71 75 65 72 69  performing queri
f320: 65 73 2e 0a 5e 41 70 70 6c 69 63 61 74 69 6f 6e  es..^Application
f330: 73 20 63 61 6e 20 75 70 64 61 74 65 2c 20 64 65  s can update, de
f340: 6c 65 74 65 20 66 72 6f 6d 2c 20 69 6e 73 65 72  lete from, inser
f350: 74 20 69 6e 74 6f 20 6f 72 20 64 72 6f 70 20 74  t into or drop t
f360: 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 31 0a  he sqlite_stat1.
f370: 74 61 62 6c 65 2c 20 62 75 74 20 6d 61 79 20 6e  table, but may n
f380: 6f 74 20 63 72 65 61 74 65 20 6f 72 20 61 6c 74  ot create or alt
f390: 65 72 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74  er the sqlite_st
f3a0: 61 74 31 20 74 61 62 6c 65 2e 0a 5e 28 54 68 65  at1 table..^(The
f3b0: 20 73 63 68 65 6d 61 20 6f 66 20 74 68 65 20 73   schema of the s
f3c0: 71 6c 69 74 65 5f 73 74 61 74 31 20 74 61 62 6c  qlite_stat1 tabl
f3d0: 65 20 69 73 20 61 73 20 66 6f 6c 6c 6f 77 73 3a  e is as follows:
f3e0: 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70  ..<blockquote><p
f3f0: 72 65 3e 0a 43 52 45 41 54 45 20 54 41 42 4c 45  re>.CREATE TABLE
f400: 20 73 71 6c 69 74 65 5f 73 74 61 74 31 28 74 62   sqlite_stat1(tb
f410: 6c 2c 69 64 78 2c 73 74 61 74 29 3b 0a 3c 2f 70  l,idx,stat);.</p
f420: 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  re></blockquote>
f430: 29 5e 0a 0a 3c 70 3e 20 5e 28 54 68 65 72 65 20  )^..<p> ^(There 
f440: 69 73 20 6e 6f 72 6d 61 6c 6c 79 20 6f 6e 65 20  is normally one 
f450: 72 6f 77 20 70 65 72 20 69 6e 64 65 78 2c 20 77  row per index, w
f460: 69 74 68 20 74 68 65 20 69 6e 64 65 78 20 69 64  ith the index id
f470: 65 6e 74 69 66 69 65 64 20 62 79 20 74 68 65 0a  entified by the.
f480: 6e 61 6d 65 20 69 6e 20 74 68 65 20 73 71 6c 69  name in the sqli
f490: 74 65 5f 73 74 61 74 31 2e 69 64 78 20 63 6f 6c  te_stat1.idx col
f4a0: 75 6d 6e 2e 29 5e 20 20 5e 28 54 68 65 20 73 71  umn.)^  ^(The sq
f4b0: 6c 69 74 65 5f 73 74 61 74 31 2e 74 62 6c 20 63  lite_stat1.tbl c
f4c0: 6f 6c 75 6d 6e 20 69 73 0a 74 68 65 20 6e 61 6d  olumn is.the nam
f4d0: 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74  e of the table t
f4e0: 6f 20 77 68 69 63 68 20 74 68 65 20 69 6e 64 65  o which the inde
f4f0: 78 20 62 65 6c 6f 6e 67 73 2e 29 5e 20 20 5e 28  x belongs.)^  ^(
f500: 49 6e 20 65 61 63 68 20 73 75 63 68 20 72 6f 77  In each such row
f510: 2c 20 0a 74 68 65 20 73 71 6c 69 74 65 5f 73 74  , .the sqlite_st
f520: 61 74 2e 73 74 61 74 20 63 6f 6c 75 6d 6e 20 77  at.stat column w
f530: 69 6c 6c 20 62 65 0a 61 20 73 74 72 69 6e 67 20  ill be.a string 
f540: 63 6f 6e 73 69 73 74 69 6e 67 20 6f 66 20 61 20  consisting of a 
f550: 6c 69 73 74 20 6f 66 20 69 6e 74 65 67 65 72 73  list of integers
f560: 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 7a 65 72   followed by zer
f570: 6f 20 6f 72 20 6d 6f 72 65 20 0a 61 72 67 75 6d  o or more .argum
f580: 65 6e 74 73 2e 29 5e 20 20 5e 54 68 65 20 66 69  ents.)^  ^The fi
f590: 72 73 74 20 69 6e 74 65 67 65 72 20 69 6e 20 74  rst integer in t
f5a0: 68 69 73 0a 6c 69 73 74 20 69 73 20 74 68 65 20  his.list is the 
f5b0: 61 70 70 72 6f 78 69 6d 61 74 65 20 6e 75 6d 62  approximate numb
f5c0: 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68  er of rows in th
f5d0: 65 20 69 6e 64 65 78 2e 20 20 28 54 68 65 20 6e  e index.  (The n
f5e0: 75 6d 62 65 72 20 6f 66 0a 72 6f 77 73 20 69 6e  umber of.rows in
f5f0: 20 74 68 65 20 69 6e 64 65 78 20 69 73 20 74 68   the index is th
f600: 65 20 73 61 6d 65 20 61 73 20 74 68 65 20 6e 75  e same as the nu
f610: 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20  mber of rows in 
f620: 74 68 65 20 74 61 62 6c 65 2c 0a 65 78 63 65 70  the table,.excep
f630: 74 20 66 6f 72 20 5b 70 61 72 74 69 61 6c 20 69  t for [partial i
f640: 6e 64 65 78 65 73 5d 2e 29 0a 5e 54 68 65 20 73  ndexes].).^The s
f650: 65 63 6f 6e 64 20 69 6e 74 65 67 65 72 20 69 73  econd integer is
f660: 20 74 68 65 20 61 70 70 72 6f 78 69 6d 61 74 65   the approximate
f670: 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
f680: 69 6e 20 74 68 65 20 69 6e 64 65 78 0a 74 68 61  in the index.tha
f690: 74 20 68 61 76 65 20 74 68 65 20 73 61 6d 65 20  t have the same 
f6a0: 76 61 6c 75 65 20 69 6e 20 74 68 65 20 66 69 72  value in the fir
f6b0: 73 74 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65  st column of the
f6c0: 20 69 6e 64 65 78 2e 20 20 5e 54 68 65 20 74 68   index.  ^The th
f6d0: 69 72 64 20 0a 69 6e 74 65 67 65 72 20 69 73 20  ird .integer is 
f6e0: 74 68 65 20 6e 75 6d 62 65 72 20 6e 75 6d 62 65  the number numbe
f6f0: 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65  r of rows in the
f700: 20 69 6e 64 65 78 20 74 68 61 74 20 68 61 76 65   index that have
f710: 20 0a 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65   .the same value
f720: 20 66 6f 72 20 74 68 65 20 66 69 72 73 74 20 74   for the first t
f730: 77 6f 20 63 6f 6c 75 6d 6e 73 2e 20 20 5e 54 68  wo columns.  ^Th
f740: 65 20 4e 2d 74 68 20 69 6e 74 65 67 65 72 20 28  e N-th integer (
f750: 66 6f 72 20 4e 3e 31 29 20 0a 69 73 20 74 68 65  for N>1) .is the
f760: 20 65 73 74 69 6d 61 74 65 64 20 61 76 65 72 61   estimated avera
f770: 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  ge number of row
f780: 73 20 69 6e 20 0a 74 68 65 20 69 6e 64 65 78 20  s in .the index 
f790: 77 68 69 63 68 20 68 61 76 65 20 74 68 65 20 73  which have the s
f7a0: 61 6d 65 20 76 61 6c 75 65 20 66 6f 72 20 74 68  ame value for th
f7b0: 65 20 66 69 72 73 74 20 4e 2d 31 20 63 6f 6c 75  e first N-1 colu
f7c0: 6d 6e 73 2e 20 20 5e 46 6f 72 0a 61 20 4b 2d 63  mns.  ^For.a K-c
f7d0: 6f 6c 75 6d 6e 20 69 6e 64 65 78 2c 20 74 68 65  olumn index, the
f7e0: 72 65 20 77 69 6c 6c 20 62 65 20 4b 2b 31 20 69  re will be K+1 i
f7f0: 6e 74 65 67 65 72 73 20 69 6e 20 74 68 65 20 73  ntegers in the s
f800: 74 61 74 20 63 6f 6c 75 6d 6e 2e 20 20 5e 49 66  tat column.  ^If
f810: 0a 74 68 65 20 69 6e 64 65 78 20 69 73 20 75 6e  .the index is un
f820: 69 71 75 65 2c 20 74 68 65 6e 20 74 68 65 20 6c  ique, then the l
f830: 61 73 74 20 69 6e 74 65 67 65 72 20 77 69 6c 6c  ast integer will
f840: 20 62 65 20 31 2e 0a 0a 3c 70 3e 5e 54 68 65 20   be 1...<p>^The 
f850: 6c 69 73 74 20 6f 66 20 69 6e 74 65 67 65 72 73  list of integers
f860: 20 69 6e 20 74 68 65 20 73 74 61 74 20 63 6f 6c   in the stat col
f870: 75 6d 6e 20 63 61 6e 20 6f 70 74 69 6f 6e 61 6c  umn can optional
f880: 6c 79 20 62 65 20 66 6f 6c 6c 6f 77 65 64 0a 62  ly be followed.b
f890: 79 20 61 72 67 75 6d 65 6e 74 73 2c 20 65 61 63  y arguments, eac
f8a0: 68 20 6f 66 20 77 68 69 63 68 20 69 73 20 61 20  h of which is a 
f8b0: 73 65 71 75 65 6e 63 65 20 6f 66 20 6e 6f 6e 2d  sequence of non-
f8c0: 73 70 61 63 65 20 63 68 61 72 61 63 74 65 72 73  space characters
f8d0: 2e 0a 5e 41 6c 6c 20 61 72 67 75 6d 65 6e 74 73  ..^All arguments
f8e0: 20 61 72 65 20 70 72 65 63 65 64 65 64 20 62 79   are preceded by
f8f0: 20 61 20 73 69 6e 67 6c 65 20 73 70 61 63 65 2e   a single space.
f900: 0a 5e 55 6e 72 65 63 6f 67 6e 69 7a 65 64 20 61  .^Unrecognized a
f910: 72 67 75 6d 65 6e 74 73 20 61 72 65 20 73 69 6c  rguments are sil
f920: 65 6e 74 6c 79 20 69 67 6e 6f 72 65 64 2e 0a 0a  ently ignored...
f930: 3c 70 3e 5e 49 66 20 74 68 65 20 22 75 6e 6f 72  <p>^If the "unor
f940: 64 65 72 65 64 22 20 61 72 67 75 6d 65 6e 74 20  dered" argument 
f950: 69 73 20 70 72 65 73 65 6e 74 2c 20 74 68 65 6e  is present, then
f960: 20 74 68 65 20 71 75 65 72 79 20 70 6c 61 6e 6e   the query plann
f970: 65 72 20 61 73 73 75 6d 65 73 0a 74 68 61 74 20  er assumes.that 
f980: 74 68 65 20 69 6e 64 65 78 20 69 73 20 75 6e 6f  the index is uno
f990: 72 64 65 72 65 64 20 61 6e 64 20 77 69 6c 6c 20  rdered and will 
f9a0: 6e 6f 74 20 75 73 65 20 74 68 65 20 69 6e 64 65  not use the inde
f9b0: 78 20 66 6f 72 20 61 20 72 61 6e 67 65 20 71 75  x for a range qu
f9c0: 65 72 79 0a 6f 72 20 66 6f 72 20 73 6f 72 74 69  ery.or for sorti
f9d0: 6e 67 2e 0a 0a 3c 70 3e 5e 54 68 65 20 22 73 7a  ng...<p>^The "sz
f9e0: 3d 4e 4e 4e 22 20 61 72 67 75 6d 65 6e 74 20 28  =NNN" argument (
f9f0: 77 68 65 72 65 20 4e 4e 4e 20 72 65 70 72 65 73  where NNN repres
fa00: 65 6e 74 73 20 61 20 73 65 71 75 65 6e 63 65 20  ents a sequence 
fa10: 6f 66 20 31 20 6f 72 20 6d 6f 72 65 20 64 69 67  of 1 or more dig
fa20: 69 74 73 29 0a 6d 65 61 6e 73 20 74 68 61 74 20  its).means that 
fa30: 74 68 65 20 61 76 65 72 61 67 65 20 72 6f 77 20  the average row 
fa40: 73 69 7a 65 20 6f 76 65 72 20 61 6c 6c 20 72 65  size over all re
fa50: 63 6f 72 64 73 20 6f 66 20 74 68 65 20 74 61 62  cords of the tab
fa60: 6c 65 20 6f 72 0a 69 6e 64 65 78 20 69 73 20 4e  le or.index is N
fa70: 4e 4e 20 62 79 74 65 73 20 70 65 72 20 72 6f 77  NN bytes per row
fa80: 2e 20 20 5e 54 68 65 20 53 51 4c 69 74 65 20 71  .  ^The SQLite q
fa90: 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 6d 69 67  uery planner mig
faa0: 68 74 20 75 73 65 20 74 68 65 0a 65 73 74 69 6d  ht use the.estim
fab0: 61 74 65 64 20 72 6f 77 20 73 69 7a 65 20 69 6e  ated row size in
fac0: 66 6f 72 6d 61 74 69 6f 6e 20 70 72 6f 76 69 64  formation provid
fad0: 65 64 20 62 79 20 74 68 65 20 22 73 7a 3d 4e 4e  ed by the "sz=NN
fae0: 4e 22 20 74 6f 6b 65 6e 0a 74 6f 20 68 65 6c 70  N" token.to help
faf0: 20 69 74 20 63 68 6f 6f 73 65 20 73 6d 61 6c 6c   it choose small
fb00: 65 72 20 74 61 62 6c 65 73 20 61 6e 64 20 69 6e  er tables and in
fb10: 64 65 78 65 73 20 74 68 61 74 20 72 65 71 75 69  dexes that requi
fb20: 72 65 20 6c 65 73 73 20 64 69 73 6b 20 49 2f 4f  re less disk I/O
fb30: 2e 0a 0a 3c 70 3e 5e 28 54 68 65 20 70 72 65 73  ...<p>^(The pres
fb40: 65 6e 63 65 20 6f 66 20 74 68 65 20 22 6e 6f 73  ence of the "nos
fb50: 6b 69 70 73 63 61 6e 22 20 74 6f 6b 65 6e 20 6f  kipscan" token o
fb60: 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61  n the sqlite_sta
fb70: 74 31 2e 73 74 61 74 20 66 69 65 6c 64 0a 6f 66  t1.stat field.of
fb80: 20 61 6e 20 69 6e 64 65 78 20 70 72 65 76 65 6e   an index preven
fb90: 74 73 20 74 68 61 74 20 69 6e 64 65 78 20 66 72  ts that index fr
fba0: 6f 6d 20 62 65 69 6e 67 20 75 73 65 64 20 77 69  om being used wi
fbb0: 74 68 20 74 68 65 0a 5b 73 6b 69 70 2d 73 63 61  th the.[skip-sca
fbc0: 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 5d 2e  n optimization].
fbd0: 29 5e 0a 0a 3c 70 3e 4e 65 77 20 74 65 78 74 20  )^..<p>New text 
fbe0: 74 6f 6b 65 6e 73 20 6d 61 79 20 62 65 20 61 64  tokens may be ad
fbf0: 64 65 64 20 74 6f 20 74 68 65 20 65 6e 64 20 6f  ded to the end o
fc00: 66 20 74 68 65 20 73 74 61 74 20 63 6f 6c 75 6d  f the stat colum
fc10: 6e 20 69 6e 20 66 75 74 75 72 65 0a 65 6e 68 61  n in future.enha
fc20: 6e 63 65 6d 65 6e 74 73 20 74 6f 20 53 51 4c 69  ncements to SQLi
fc30: 74 65 2e 20 20 46 6f 72 20 63 6f 6d 70 61 74 69  te.  For compati
fc40: 62 69 6c 69 74 79 2c 20 75 6e 72 65 63 6f 67 6e  bility, unrecogn
fc50: 69 7a 65 64 20 74 6f 6b 65 6e 73 20 61 74 20 74  ized tokens at t
fc60: 68 65 20 65 6e 64 0a 6f 66 20 74 68 65 20 73 74  he end.of the st
fc70: 61 74 20 63 6f 6c 75 6d 6e 20 61 72 65 20 73 69  at column are si
fc80: 6c 65 6e 74 6c 79 20 69 67 6e 6f 72 65 64 2e 0a  lently ignored..
fc90: 0a 3c 70 3e 5e 28 49 66 20 74 68 65 20 73 71 6c  .<p>^(If the sql
fca0: 69 74 65 5f 73 74 61 74 31 2e 69 64 78 20 63 6f  ite_stat1.idx co
fcb0: 6c 75 6d 6e 20 69 73 20 4e 55 4c 4c 2c 20 74 68  lumn is NULL, th
fcc0: 65 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74  en the sqlite_st
fcd0: 61 74 31 2e 73 74 61 74 0a 63 6f 6c 75 6d 6e 20  at1.stat.column 
fce0: 63 6f 6e 74 61 69 6e 73 20 61 20 73 69 6e 67 6c  contains a singl
fcf0: 65 20 69 6e 74 65 67 65 72 20 77 68 69 63 68 20  e integer which 
fd00: 69 73 20 74 68 65 20 61 70 70 72 6f 78 69 6d 61  is the approxima
fd10: 74 65 20 6e 75 6d 62 65 72 20 6f 66 0a 72 6f 77  te number of.row
fd20: 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 69  s in the table i
fd30: 64 65 6e 74 69 66 69 65 64 20 62 79 20 73 71 6c  dentified by sql
fd40: 69 74 65 5f 73 74 61 74 31 2e 74 62 6c 2e 29 5e  ite_stat1.tbl.)^
fd50: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
fd60: 6e 74 20 73 74 61 74 32 74 61 62 20 7b 73 71 6c  nt stat2tab {sql
fd70: 69 74 65 5f 73 74 61 74 32 7d 3c 2f 74 63 6c 3e  ite_stat2}</tcl>
fd80: 0a 3c 68 33 3e 54 68 65 20 73 71 6c 69 74 65 5f  .<h3>The sqlite_
fd90: 73 74 61 74 32 20 74 61 62 6c 65 3c 2f 68 33 3e  stat2 table</h3>
fda0: 0a 0a 3c 70 3e 54 68 65 20 73 71 6c 69 74 65 5f  ..<p>The sqlite_
fdb0: 73 74 61 74 32 20 69 73 20 6f 6e 6c 79 20 63 72  stat2 is only cr
fdc0: 65 61 74 65 64 20 61 6e 64 20 69 73 20 6f 6e 6c  eated and is onl
fdd0: 79 20 75 73 65 64 20 69 66 20 53 51 4c 69 74 65  y used if SQLite
fde0: 20 69 73 20 63 6f 6d 70 69 6c 65 64 0a 77 69 74   is compiled.wit
fdf0: 68 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  h SQLITE_ENABLE_
fe00: 53 54 41 54 32 20 61 6e 64 20 69 66 20 74 68 65  STAT2 and if the
fe10: 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20   SQLite version 
fe20: 6e 75 6d 62 65 72 20 69 73 20 62 65 74 77 65 65  number is betwee
fe30: 6e 0a 33 2e 36 2e 31 38 20 61 6e 64 20 33 2e 37  n.3.6.18 and 3.7
fe40: 2e 38 2e 20 20 54 68 65 20 73 71 6c 69 74 65 5f  .8.  The sqlite_
fe50: 73 74 61 74 32 20 74 61 62 6c 65 20 69 73 20 6e  stat2 table is n
fe60: 65 69 74 68 65 72 20 72 65 61 64 20 6e 6f 72 20  either read nor 
fe70: 77 72 69 74 74 65 6e 20 62 79 20 61 6e 79 0a 76  written by any.v
fe80: 65 72 73 69 6f 6e 20 6f 66 20 53 51 4c 69 74 65  ersion of SQLite
fe90: 20 62 65 66 6f 72 65 20 33 2e 36 2e 31 38 20 6e   before 3.6.18 n
fea0: 6f 72 20 61 66 74 65 72 20 33 2e 37 2e 38 2e 0a  or after 3.7.8..
feb0: 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 32  The sqlite_stat2
fec0: 20 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e 73 20   table contains 
fed0: 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
fee0: 6d 61 74 69 6f 6e 0a 61 62 6f 75 74 20 74 68 65  mation.about the
fef0: 20 64 69 73 74 72 69 62 75 74 69 6f 6e 20 6f 66   distribution of
ff00: 20 6b 65 79 73 20 77 69 74 68 69 6e 20 61 6e 20   keys within an 
ff10: 69 6e 64 65 78 2e 0a 54 68 65 20 73 63 68 65 6d  index..The schem
ff20: 61 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 5f  a of the sqlite_
ff30: 73 74 61 74 32 20 74 61 62 6c 65 20 69 73 20 61  stat2 table is a
ff40: 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 62 6c 6f  s follows:..<blo
ff50: 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 43 52  ckquote><pre>.CR
ff60: 45 41 54 45 20 54 41 42 4c 45 20 73 71 6c 69 74  EATE TABLE sqlit
ff70: 65 5f 73 74 61 74 32 28 74 62 6c 2c 69 64 78 2c  e_stat2(tbl,idx,
ff80: 73 61 6d 70 6c 65 6e 6f 2c 73 61 6d 70 6c 65 29  sampleno,sample)
ff90: 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71  ;.</pre></blockq
ffa0: 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 73 71  uote>..<p>The sq
ffb0: 6c 69 74 65 5f 73 74 61 74 32 2e 69 64 78 20 63  lite_stat2.idx c
ffc0: 6f 6c 75 6d 6e 20 61 6e 64 20 74 68 65 20 73 71  olumn and the sq
ffd0: 6c 69 74 65 5f 73 74 61 74 32 2e 74 62 6c 20 63  lite_stat2.tbl c
ffe0: 6f 6c 75 6d 6e 20 69 6e 20 65 61 63 68 20 0a 72  olumn in each .r
fff0: 6f 77 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65  ow of the sqlite
10000 5f 73 74 61 74 32 20 74 61 62 6c 65 20 69 64 65  _stat2 table ide
10010 6e 74 69 66 79 20 61 6e 20 69 6e 64 65 78 20 64  ntify an index d
10020 65 73 63 72 69 62 65 64 20 62 79 20 74 68 61 74  escribed by that
10030 20 72 6f 77 2e 0a 54 68 65 72 65 20 61 72 65 20   row..There are 
10040 75 73 75 61 6c 6c 79 20 31 30 20 72 6f 77 73 20  usually 10 rows 
10050 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74  in the sqlite_st
10060 61 74 32 0a 74 61 62 6c 65 20 66 6f 72 20 65 61  at2.table for ea
10070 63 68 20 69 6e 64 65 78 2e 0a 0a 3c 70 3e 54 68  ch index...<p>Th
10080 65 20 73 71 6c 69 74 65 5f 73 74 61 74 32 20 65  e sqlite_stat2 e
10090 6e 74 72 69 65 73 20 66 6f 72 20 61 6e 20 69 6e  ntries for an in
100a0 64 65 78 20 74 68 61 74 20 68 61 76 65 20 73 71  dex that have sq
100b0 6c 69 74 65 5f 73 74 61 74 32 2e 73 61 6d 70 6c  lite_stat2.sampl
100c0 65 6e 6f 0a 62 65 74 77 65 65 6e 20 30 20 61 6e  eno.between 0 an
100d0 64 20 39 20 69 6e 63 6c 75 73 69 76 65 20 61 72  d 9 inclusive ar
100e0 65 20 73 61 6d 70 6c 65 73 20 6f 66 20 74 68 65  e samples of the
100f0 20 6c 65 66 74 2d 6d 6f 73 74 20 6b 65 79 20 76   left-most key v
10100 61 6c 75 65 20 69 6e 20 74 68 65 0a 69 6e 64 65  alue in the.inde
10110 78 20 74 61 6b 65 6e 20 61 74 20 65 76 65 6e 6c  x taken at evenl
10120 79 20 73 70 61 63 65 64 20 70 6f 69 6e 74 73 20  y spaced points 
10130 61 6c 6f 6e 67 20 74 68 65 20 69 6e 64 65 78 2e  along the index.
10140 0a 4c 65 74 20 43 20 62 65 20 74 68 65 20 6e 75  .Let C be the nu
10150 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20  mber of rows in 
10160 74 68 65 20 69 6e 64 65 78 2e 0a 54 68 65 6e 20  the index..Then 
10170 74 68 65 20 73 61 6d 70 6c 65 64 20 72 6f 77 73  the sampled rows
10180 20 61 72 65 20 67 69 76 65 6e 20 62 79 0a 0a 3c   are given by..<
10190 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 20 20  blockquote>.    
101a0 20 72 6f 77 6e 75 6d 62 65 72 20 3d 20 28 69 2a   rownumber = (i*
101b0 43 2a 32 20 2b 20 43 29 2f 32 30 0a 3c 2f 62 6c  C*2 + C)/20.</bl
101c0 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68  ockquote>..<p>Th
101d0 65 20 76 61 72 69 61 62 6c 65 20 69 20 69 6e 20  e variable i in 
101e0 74 68 65 20 70 72 65 76 69 6f 75 73 20 65 78 70  the previous exp
101f0 72 65 73 73 69 6f 6e 20 76 61 72 69 65 73 20 62  ression varies b
10200 65 74 77 65 65 6e 20 30 20 61 6e 64 20 39 2e 0a  etween 0 and 9..
10210 43 6f 6e 63 65 70 74 75 61 6c 6c 79 2c 20 74 68  Conceptually, th
10220 65 20 69 6e 64 65 78 20 73 70 61 63 65 20 69 73  e index space is
10230 20 64 69 76 69 64 65 64 20 69 6e 74 6f 0a 31 30   divided into.10
10240 20 75 6e 69 66 6f 72 6d 20 62 75 63 6b 65 74 73   uniform buckets
10250 20 61 6e 64 20 74 68 65 20 73 61 6d 70 6c 65 73   and the samples
10260 20 61 72 65 20 74 68 65 20 6d 69 64 64 6c 65 20   are the middle 
10270 72 6f 77 20 66 72 6f 6d 20 65 61 63 68 20 62 75  row from each bu
10280 63 6b 65 74 2e 0a 0a 3c 70 3e 54 68 65 20 66 6f  cket...<p>The fo
10290 72 6d 61 74 20 66 6f 72 20 73 71 6c 69 74 65 5f  rmat for sqlite_
102a0 73 74 61 74 32 20 69 73 20 72 65 63 6f 72 64 65  stat2 is recorde
102b0 64 20 68 65 72 65 20 66 6f 72 20 6c 65 67 61 63  d here for legac
102c0 79 20 72 65 66 65 72 65 6e 63 65 2e 20 20 0a 52  y reference.  .R
102d0 65 63 65 6e 74 20 76 65 72 73 69 6f 6e 73 20 6f  ecent versions o
102e0 66 20 53 51 4c 69 74 65 20 6e 6f 20 6c 6f 6e 67  f SQLite no long
102f0 65 72 20 73 75 70 70 6f 72 74 20 73 71 6c 69 74  er support sqlit
10300 65 5f 73 74 61 74 32 20 61 6e 64 20 74 68 65 0a  e_stat2 and the.
10310 73 71 6c 69 74 65 5f 73 74 61 74 32 20 74 61 62  sqlite_stat2 tab
10320 6c 65 2c 20 69 74 20 69 73 20 65 78 69 73 74 73  le, it is exists
10330 2c 20 69 73 20 73 69 6d 70 6c 79 20 69 67 6e 6f  , is simply igno
10340 72 65 64 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  red...<tcl>hd_fr
10350 61 67 6d 65 6e 74 20 73 74 61 74 33 74 61 62 20  agment stat3tab 
10360 7b 73 71 6c 69 74 65 5f 73 74 61 74 33 7d 20 53  {sqlite_stat3} S
10370 51 4c 49 54 45 5f 53 54 41 54 33 3c 2f 74 63 6c  QLITE_STAT3</tcl
10380 3e 0a 3c 68 33 3e 54 68 65 20 73 71 6c 69 74 65  >.<h3>The sqlite
10390 5f 73 74 61 74 33 20 74 61 62 6c 65 3c 2f 68 33  _stat3 table</h3
103a0 3e 0a 0a 3c 70 3e 54 68 65 20 73 71 6c 69 74 65  >..<p>The sqlite
103b0 5f 73 74 61 74 33 20 69 73 20 6f 6e 6c 79 20 75  _stat3 is only u
103c0 73 65 64 20 69 66 20 53 51 4c 69 74 65 20 69 73  sed if SQLite is
103d0 20 63 6f 6d 70 69 6c 65 64 0a 77 69 74 68 20 5b   compiled.with [
103e0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
103f0 41 54 33 5d 20 6f 72 20 5b 53 51 4c 49 54 45 5f  AT3] or [SQLITE_
10400 45 4e 41 42 4c 45 5f 53 54 41 54 34 5d 0a 61 6e  ENABLE_STAT4].an
10410 64 20 69 66 20 74 68 65 20 53 51 4c 69 74 65 20  d if the SQLite 
10420 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 69  version number i
10430 73 20 33 2e 37 2e 39 20 6f 72 20 67 72 65 61 74  s 3.7.9 or great
10440 65 72 2e 0a 54 68 65 20 73 71 6c 69 74 65 5f 73  er..The sqlite_s
10450 74 61 74 33 20 74 61 62 6c 65 20 69 73 20 6e 65  tat3 table is ne
10460 69 74 68 65 72 20 72 65 61 64 20 6e 6f 72 20 77  ither read nor w
10470 72 69 74 74 65 6e 20 62 79 20 61 6e 79 0a 76 65  ritten by any.ve
10480 72 73 69 6f 6e 20 6f 66 20 53 51 4c 69 74 65 20  rsion of SQLite 
10490 62 65 66 6f 72 65 20 33 2e 37 2e 39 2e 0a 49 66  before 3.7.9..If
104a0 20 74 68 65 20 5b 53 51 4c 49 54 45 5f 45 4e 41   the [SQLITE_ENA
104b0 42 4c 45 5f 53 54 41 54 34 5d 20 63 6f 6d 70 69  BLE_STAT4] compi
104c0 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69  le-time option i
104d0 73 20 75 73 65 64 20 61 6e 64 20 74 68 65 0a 53  s used and the.S
104e0 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20 6e 75  QLite version nu
104f0 6d 62 65 72 20 69 73 20 33 2e 38 2e 31 20 6f 72  mber is 3.8.1 or
10500 20 67 72 65 61 74 65 72 2c 20 74 68 65 6e 20 73   greater, then s
10510 71 6c 69 74 65 5f 73 74 61 74 33 20 6d 69 67 68  qlite_stat3 migh
10520 74 0a 62 65 20 72 65 61 64 20 62 75 74 20 6e 6f  t.be read but no
10530 74 20 77 72 69 74 74 65 6e 2e 0a 54 68 65 20 73  t written..The s
10540 71 6c 69 74 65 5f 73 74 61 74 33 20 74 61 62 6c  qlite_stat3 tabl
10550 65 20 63 6f 6e 74 61 69 6e 73 20 61 64 64 69 74  e contains addit
10560 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
10570 6e 0a 61 62 6f 75 74 20 74 68 65 20 64 69 73 74  n.about the dist
10580 72 69 62 75 74 69 6f 6e 20 6f 66 20 6b 65 79 73  ribution of keys
10590 20 77 69 74 68 69 6e 20 61 6e 20 69 6e 64 65 78   within an index
105a0 2c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68  , information th
105b0 61 74 20 74 68 65 0a 71 75 65 72 79 20 70 6c 61  at the.query pla
105c0 6e 6e 65 72 20 63 61 6e 20 75 73 65 20 74 6f 20  nner can use to 
105d0 64 65 76 69 73 65 20 62 65 74 74 65 72 20 61 6e  devise better an
105e0 64 20 66 61 73 74 65 72 20 71 75 65 72 79 20 61  d faster query a
105f0 6c 67 6f 72 69 74 68 6d 73 2e 0a 5e 28 54 68 65  lgorithms..^(The
10600 20 73 63 68 65 6d 61 20 6f 66 20 74 68 65 20 73   schema of the s
10610 71 6c 69 74 65 5f 73 74 61 74 33 20 74 61 62 6c  qlite_stat3 tabl
10620 65 20 69 73 20 61 73 20 66 6f 6c 6c 6f 77 73 3a  e is as follows:
10630 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70  ..<blockquote><p
10640 72 65 3e 0a 43 52 45 41 54 45 20 54 41 42 4c 45  re>.CREATE TABLE
10650 20 73 71 6c 69 74 65 5f 73 74 61 74 33 28 74 62   sqlite_stat3(tb
10660 6c 2c 69 64 78 2c 6e 45 71 2c 6e 4c 74 2c 6e 44  l,idx,nEq,nLt,nD
10670 4c 74 2c 73 61 6d 70 6c 65 29 3b 0a 3c 2f 70 72  Lt,sample);.</pr
10680 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29  e></blockquote>)
10690 5e 0a 0a 3c 70 3e 54 68 65 72 65 20 61 72 65 20  ^..<p>There are 
106a0 75 73 75 61 6c 6c 79 20 6d 75 6c 74 69 70 6c 65  usually multiple
106b0 20 65 6e 74 72 69 65 73 20 69 6e 20 74 68 65 20   entries in the 
106c0 73 71 6c 69 74 65 5f 73 74 61 74 33 20 74 61 62  sqlite_stat3 tab
106d0 6c 65 20 66 6f 72 20 65 61 63 68 20 69 6e 64 65  le for each inde
106e0 78 2e 0a 5e 28 54 68 65 20 73 71 6c 69 74 65 5f  x..^(The sqlite_
106f0 73 74 61 74 33 2e 73 61 6d 70 6c 65 20 63 6f 6c  stat3.sample col
10700 75 6d 6e 20 68 6f 6c 64 73 20 74 68 65 20 76 61  umn holds the va
10710 6c 75 65 20 6f 66 20 74 68 65 20 6c 65 66 74 2d  lue of the left-
10720 6d 6f 73 74 20 66 69 65 6c 64 20 6f 66 20 61 6e  most field of an
10730 0a 69 6e 64 65 78 20 69 64 65 6e 74 69 66 69 65  .index identifie
10740 64 20 62 79 20 73 71 6c 69 74 65 5f 73 74 61 74  d by sqlite_stat
10750 33 2e 69 64 78 20 61 6e 64 20 73 71 6c 69 74 65  3.idx and sqlite
10760 5f 73 74 61 74 33 2e 74 62 6c 2e 29 5e 0a 5e 28  _stat3.tbl.)^.^(
10770 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33  The sqlite_stat3
10780 2e 6e 45 71 20 63 6f 6c 75 6d 6e 20 68 6f 6c 64  .nEq column hold
10790 73 20 74 68 65 20 61 70 70 72 6f 78 69 6d 61 74  s the approximat
107a0 65 0a 6e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72  e.number of entr
107b0 69 65 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78  ies in the index
107c0 20 77 68 6f 73 65 20 6c 65 66 74 2d 6d 6f 73 74   whose left-most
107d0 20 63 6f 6c 75 6d 6e 20 65 78 61 63 74 6c 79 20   column exactly 
107e0 6d 61 74 63 68 65 73 0a 74 68 65 20 73 61 6d 70  matches.the samp
107f0 6c 65 2e 29 5e 0a 5e 28 54 68 65 20 73 71 6c 69  le.)^.^(The sqli
10800 74 65 5f 73 74 61 74 33 2e 6e 4c 74 20 68 6f 6c  te_stat3.nLt hol
10810 64 73 20 74 68 65 20 61 70 70 72 6f 78 69 6d 61  ds the approxima
10820 74 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 6e 74  te number of ent
10830 72 69 65 73 20 69 6e 20 74 68 65 0a 69 6e 64 65  ries in the.inde
10840 78 20 77 68 6f 73 65 20 6c 65 66 74 2d 6d 6f 73  x whose left-mos
10850 74 20 63 6f 6c 75 6d 6e 20 69 73 20 6c 65 73 73  t column is less
10860 20 74 68 61 6e 20 74 68 65 20 73 61 6d 70 6c 65   than the sample
10870 2e 29 5e 0a 5e 28 54 68 65 20 73 71 6c 69 74 65  .)^.^(The sqlite
10880 5f 73 74 61 74 33 2e 6e 44 4c 74 20 63 6f 6c 75  _stat3.nDLt colu
10890 6d 6e 20 68 6f 6c 64 73 20 74 68 65 20 61 70 70  mn holds the app
108a0 72 6f 78 69 6d 61 74 65 0a 6e 75 6d 62 65 72 20  roximate.number 
108b0 6f 66 20 64 69 73 74 69 6e 63 74 20 6c 65 66 74  of distinct left
108c0 2d 6d 6f 73 74 20 65 6e 74 72 69 65 73 20 69 6e  -most entries in
108d0 20 74 68 65 20 69 6e 64 65 78 20 74 68 61 74 20   the index that 
108e0 61 72 65 20 6c 65 73 73 20 74 68 61 6e 0a 74 68  are less than.th
108f0 65 20 73 61 6d 70 6c 65 2e 29 5e 0a 0a 3c 70 3e  e sample.)^..<p>
10900 5e 54 68 65 72 65 20 63 61 6e 20 62 65 20 61 6e  ^There can be an
10910 20 61 72 62 69 74 72 61 72 79 20 6e 75 6d 62 65   arbitrary numbe
10920 72 20 6f 66 20 73 71 6c 69 74 65 5f 73 74 61 74  r of sqlite_stat
10930 33 20 65 6e 74 72 69 65 73 20 70 65 72 20 69 6e  3 entries per in
10940 64 65 78 2e 0a 54 68 65 20 5b 41 4e 41 4c 59 5a  dex..The [ANALYZ
10950 45 5d 20 63 6f 6d 6d 61 6e 64 20 77 69 6c 6c 20  E] command will 
10960 74 79 70 69 63 61 6c 6c 79 20 67 65 6e 65 72 61  typically genera
10970 74 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20  te sqlite_stat3 
10980 74 61 62 6c 65 73 0a 74 68 61 74 20 63 6f 6e 74  tables.that cont
10990 61 69 6e 20 62 65 74 77 65 65 6e 20 31 30 20 61  ain between 10 a
109a0 6e 64 20 34 30 20 73 61 6d 70 6c 65 73 20 74 68  nd 40 samples th
109b0 61 74 20 61 72 65 20 64 69 73 74 72 69 62 75 74  at are distribut
109c0 65 64 20 61 63 72 6f 73 73 0a 74 68 65 20 6b 65  ed across.the ke
109d0 79 20 73 70 61 63 65 20 61 6e 64 20 77 69 74 68  y space and with
109e0 20 6c 61 72 67 65 20 6e 45 71 20 76 61 6c 75 65   large nEq value
109f0 73 2e 0a 0a 3c 70 3e 5e 28 49 6e 20 61 20 77 65  s...<p>^(In a we
10a00 6c 6c 2d 66 6f 72 6d 65 64 20 73 71 6c 69 74 65  ll-formed sqlite
10a10 5f 73 74 61 74 33 20 74 61 62 6c 65 2c 20 74 68  _stat3 table, th
10a20 65 20 73 61 6d 70 6c 65 73 20 66 6f 72 20 61 6e  e samples for an
10a30 79 20 73 69 6e 67 6c 65 0a 69 6e 64 65 78 20 6d  y single.index m
10a40 75 73 74 20 61 70 70 65 61 72 20 69 6e 20 74 68  ust appear in th
10a50 65 20 73 61 6d 65 20 6f 72 64 65 72 20 74 68 61  e same order tha
10a60 74 20 74 68 65 79 20 6f 63 63 75 72 20 69 6e 20  t they occur in 
10a70 74 68 65 20 69 6e 64 65 78 2e 20 20 0a 49 6e 20  the index.  .In 
10a80 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69 66 20  other words, if 
10a90 74 68 65 20 65 6e 74 72 79 20 77 69 74 68 20 6c  the entry with l
10aa0 65 66 74 2d 6d 6f 73 74 20 63 6f 6c 75 6d 6e 20  eft-most column 
10ab0 53 31 20 69 73 20 65 61 72 6c 69 65 72 20 69 6e  S1 is earlier in
10ac0 0a 74 68 65 20 69 6e 64 65 78 20 62 2d 74 72 65  .the index b-tre
10ad0 65 20 74 68 61 6e 20 74 68 65 0a 65 6e 74 72 79  e than the.entry
10ae0 20 77 69 74 68 20 6c 65 66 74 2d 6d 6f 73 74 20   with left-most 
10af0 63 6f 6c 75 6d 6e 20 53 32 2c 20 74 68 65 6e 20  column S2, then 
10b00 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74  in the sqlite_st
10b10 61 74 33 20 74 61 62 6c 65 2c 20 0a 73 61 6d 70  at3 table, .samp
10b20 6c 65 20 53 31 20 6d 75 73 74 20 68 61 76 65 20  le S1 must have 
10b30 61 20 73 6d 61 6c 6c 65 72 20 72 6f 77 69 64 20  a smaller rowid 
10b40 74 68 61 6e 20 73 61 6d 70 6c 65 20 53 32 2e 29  than sample S2.)
10b50 5e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  ^..<tcl>hd_fragm
10b60 65 6e 74 20 73 74 61 74 34 74 61 62 20 7b 73 71  ent stat4tab {sq
10b70 6c 69 74 65 5f 73 74 61 74 34 7d 20 53 51 4c 49  lite_stat4} SQLI
10b80 54 45 5f 53 54 41 54 34 3c 2f 74 63 6c 3e 0a 3c  TE_STAT4</tcl>.<
10b90 68 33 3e 54 68 65 20 73 71 6c 69 74 65 5f 73 74  h3>The sqlite_st
10ba0 61 74 34 20 74 61 62 6c 65 3c 2f 68 33 3e 0a 0a  at4 table</h3>..
10bb0 3c 70 3e 54 68 65 20 73 71 6c 69 74 65 5f 73 74  <p>The sqlite_st
10bc0 61 74 34 20 69 73 20 6f 6e 6c 79 20 63 72 65 61  at4 is only crea
10bd0 74 65 64 20 61 6e 64 20 69 73 20 6f 6e 6c 79 20  ted and is only 
10be0 75 73 65 64 20 69 66 20 53 51 4c 69 74 65 20 69  used if SQLite i
10bf0 73 20 63 6f 6d 70 69 6c 65 64 0a 77 69 74 68 20  s compiled.with 
10c00 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53  [SQLITE_ENABLE_S
10c10 54 41 54 34 5d 20 61 6e 64 20 69 66 20 74 68 65  TAT4] and if the
10c20 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20   SQLite version 
10c30 6e 75 6d 62 65 72 20 69 73 0a 33 2e 38 2e 31 20  number is.3.8.1 
10c40 6f 72 20 67 72 65 61 74 65 72 2e 20 20 54 68 65  or greater.  The
10c50 20 73 71 6c 69 74 65 5f 73 74 61 74 34 20 74 61   sqlite_stat4 ta
10c60 62 6c 65 20 69 73 20 6e 65 69 74 68 65 72 20 72  ble is neither r
10c70 65 61 64 20 6e 6f 72 20 77 72 69 74 74 65 6e 20  ead nor written 
10c80 62 79 20 61 6e 79 0a 76 65 72 73 69 6f 6e 20 6f  by any.version o
10c90 66 20 53 51 4c 69 74 65 20 62 65 66 6f 72 65 20  f SQLite before 
10ca0 33 2e 38 2e 31 2e 0a 54 68 65 20 73 71 6c 69 74  3.8.1..The sqlit
10cb0 65 5f 73 74 61 74 34 20 74 61 62 6c 65 20 63 6f  e_stat4 table co
10cc0 6e 74 61 69 6e 73 20 61 64 64 69 74 69 6f 6e 61  ntains additiona
10cd0 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 61 62  l information.ab
10ce0 6f 75 74 20 74 68 65 20 64 69 73 74 72 69 62 75  out the distribu
10cf0 74 69 6f 6e 20 6f 66 20 6b 65 79 73 20 77 69 74  tion of keys wit
10d00 68 69 6e 20 61 6e 20 69 6e 64 65 78 20 6f 72 20  hin an index or 
10d10 74 68 65 20 64 69 73 74 72 69 62 75 74 69 6f 6e  the distribution
10d20 20 6f 66 0a 6b 65 79 73 20 69 6e 20 74 68 65 20   of.keys in the 
10d30 70 72 69 6d 61 72 79 20 6b 65 79 20 6f 66 20 61  primary key of a
10d40 20 5b 57 49 54 48 4f 55 54 20 52 4f 57 49 44 5d   [WITHOUT ROWID]
10d50 20 74 61 62 6c 65 2e 0a 54 68 65 20 71 75 65 72   table..The quer
10d60 79 20 70 6c 61 6e 6e 65 72 20 63 61 6e 20 73 6f  y planner can so
10d70 6d 65 74 69 6d 65 73 20 75 73 65 20 74 68 65 20  metimes use the 
10d80 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
10d90 6d 61 74 69 6f 6e 20 69 6e 0a 74 68 65 20 73 71  mation in.the sq
10da0 6c 69 74 65 5f 73 74 61 74 34 20 74 61 62 6c 65  lite_stat4 table
10db0 20 74 6f 20 64 65 76 69 73 65 20 62 65 74 74 65   to devise bette
10dc0 72 20 61 6e 64 20 66 61 73 74 65 72 20 71 75 65  r and faster que
10dd0 72 79 20 61 6c 67 6f 72 69 74 68 6d 73 2e 0a 5e  ry algorithms..^
10de0 28 54 68 65 20 73 63 68 65 6d 61 20 6f 66 20 74  (The schema of t
10df0 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 34 20  he sqlite_stat4 
10e00 74 61 62 6c 65 20 69 73 20 61 73 20 66 6f 6c 6c  table is as foll
10e10 6f 77 73 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  ows:..<blockquot
10e20 65 3e 3c 70 72 65 3e 0a 43 52 45 41 54 45 20 54  e><pre>.CREATE T
10e30 41 42 4c 45 20 73 71 6c 69 74 65 5f 73 74 61 74  ABLE sqlite_stat
10e40 34 28 74 62 6c 2c 69 64 78 2c 6e 45 71 2c 6e 4c  4(tbl,idx,nEq,nL
10e50 74 2c 6e 44 4c 74 2c 73 61 6d 70 6c 65 29 3b 0a  t,nDLt,sample);.
10e60 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f  </pre></blockquo
10e70 74 65 3e 29 5e 0a 0a 3c 70 3e 54 68 65 72 65 20  te>)^..<p>There 
10e80 61 72 65 20 74 79 70 69 63 61 6c 6c 79 20 62 65  are typically be
10e90 74 77 65 65 6e 20 31 30 20 74 6f 20 34 30 20 65  tween 10 to 40 e
10ea0 6e 74 72 69 65 73 20 69 6e 20 74 68 65 20 73 71  ntries in the sq
10eb0 6c 69 74 65 5f 73 74 61 74 34 20 74 61 62 6c 65  lite_stat4 table
10ec0 20 66 6f 72 0a 65 61 63 68 20 69 6e 64 65 78 20   for.each index 
10ed0 66 6f 72 20 77 68 69 63 68 20 73 74 61 74 69 73  for which statis
10ee0 74 69 63 73 20 61 72 65 20 61 76 61 69 6c 61 62  tics are availab
10ef0 6c 65 2c 20 68 6f 77 65 76 65 72 20 74 68 65 73  le, however thes
10f00 65 20 6c 69 6d 69 74 73 20 61 72 65 0a 6e 6f 74  e limits are.not
10f10 20 68 61 72 64 20 62 6f 75 6e 64 73 2e 0a 54 68   hard bounds..Th
10f20 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20 74 68  e meanings of th
10f30 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  e columns in the
10f40 20 73 71 6c 69 74 65 5f 73 74 61 74 34 20 74 61   sqlite_stat4 ta
10f50 62 6c 65 20 61 72 65 20 61 73 20 66 6f 6c 6c 6f  ble are as follo
10f60 77 73 3a 0a 0a 3c 63 65 6e 74 65 72 3e 0a 3c 74  ws:..<center>.<t
10f70 61 62 6c 65 20 62 6f 72 64 65 72 3d 22 30 22 20  able border="0" 
10f80 77 69 64 74 68 3d 22 31 30 30 25 22 20 63 65 6c  width="100%" cel
10f90 6c 70 61 64 64 69 6e 67 3d 22 31 30 22 3e 0a 3c  lpadding="10">.<
10fa0 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74  tr><td valign="t
10fb0 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74  op" align="right
10fc0 22 3e 74 62 6c 3a 3c 2f 74 64 3e 0a 20 20 20 20  ">tbl:</td>.    
10fd0 3c 74 64 3e 5e 28 54 68 65 20 73 71 6c 69 74 65  <td>^(The sqlite
10fe0 5f 73 74 61 74 34 2e 74 62 6c 20 63 6f 6c 75 6d  _stat4.tbl colum
10ff0 6e 20 68 6f 6c 64 73 20 6e 61 6d 65 20 6f 66 20  n holds name of 
11000 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 6f  the table that o
11010 77 6e 73 0a 20 20 20 20 74 68 65 20 69 6e 64 65  wns.    the inde
11020 78 20 74 68 61 74 20 74 68 65 20 72 6f 77 20 64  x that the row d
11030 65 73 63 72 69 62 65 73 29 5e 0a 0a 3c 74 72 3e  escribes)^..<tr>
11040 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22  <td valign="top"
11050 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e 69   align="right">i
11060 64 78 3a 3c 2f 74 64 3e 0a 20 20 20 20 3c 74 64  dx:</td>.    <td
11070 3e 5e 28 54 68 65 20 73 71 6c 69 74 65 5f 73 74  >^(The sqlite_st
11080 61 74 34 2e 69 64 78 20 63 6f 6c 75 6d 6e 20 68  at4.idx column h
11090 6f 6c 64 73 20 6e 61 6d 65 20 6f 66 20 74 68 65  olds name of the
110a0 20 69 6e 64 65 78 20 74 68 61 74 20 74 68 65 0a   index that the.
110b0 20 20 20 20 72 6f 77 20 64 65 73 63 72 69 62 65      row describe
110c0 73 2c 20 6f 72 20 69 6e 20 74 68 65 20 63 61 73  s, or in the cas
110d0 65 20 6f 66 0a 20 20 20 20 61 6e 20 73 71 6c 69  e of.    an sqli
110e0 74 65 5f 73 74 61 74 34 20 65 6e 74 72 79 20 66  te_stat4 entry f
110f0 6f 72 20 61 20 5b 57 49 54 48 4f 55 54 20 52 4f  or a [WITHOUT RO
11100 57 49 44 5d 20 74 61 62 6c 65 2c 20 74 68 65 0a  WID] table, the.
11110 20 20 20 20 6e 61 6d 65 20 6f 66 20 74 68 65 20      name of the 
11120 74 61 62 6c 65 20 69 74 73 65 6c 66 2e 29 5e 0a  table itself.)^.
11130 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d  .<tr><td valign=
11140 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67  "top" align="rig
11150 68 74 22 3e 73 61 6d 70 6c 65 3a 3c 2f 74 64 3e  ht">sample:</td>
11160 0a 20 20 20 20 3c 74 64 3e 5e 28 54 68 65 20 73  .    <td>^(The s
11170 71 6c 69 74 65 5f 73 74 61 74 34 2e 73 61 6d 70  qlite_stat4.samp
11180 6c 65 20 63 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20  le column holds 
11190 61 20 42 4c 4f 42 0a 20 20 20 20 69 6e 20 74 68  a BLOB.    in th
111a0 65 20 5b 72 65 63 6f 72 64 20 66 6f 72 6d 61 74  e [record format
111b0 5d 20 74 68 61 74 20 65 6e 63 6f 64 65 73 20 74  ] that encodes t
111c0 68 65 20 69 6e 64 65 78 65 64 20 63 6f 6c 75 6d  he indexed colum
111d0 6e 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 0a 20  ns followed by. 
111e0 20 20 20 74 68 65 20 72 6f 77 69 64 20 66 6f 72     the rowid for
111f0 20 61 20 72 6f 77 69 64 20 74 61 62 6c 65 20 6f   a rowid table o
11200 72 20 62 79 20 74 68 65 20 63 6f 6c 75 6d 6e 73  r by the columns
11210 20 6f 66 20 74 68 65 20 70 72 69 6d 61 72 79 20   of the primary 
11220 6b 65 79 20 0a 20 20 20 20 66 6f 72 20 61 20 57  key .    for a W
11230 49 54 48 4f 55 54 20 52 4f 57 49 44 20 74 61 62  ITHOUT ROWID tab
11240 6c 65 2e 29 5e 0a 20 20 20 20 5e 28 54 68 65 20  le.)^.    ^(The 
11250 73 71 6c 69 74 65 5f 73 74 61 74 34 2e 73 61 6d  sqlite_stat4.sam
11260 70 6c 65 20 42 4c 4f 42 20 66 6f 72 20 74 68 65  ple BLOB for the
11270 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44 20 74   WITHOUT ROWID t
11280 61 62 6c 65 20 69 74 73 65 6c 66 20 0a 20 20 20  able itself .   
11290 20 63 6f 6e 74 61 69 6e 73 20 6a 75 73 74 20 74   contains just t
112a0 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68  he columns of th
112b0 65 20 70 72 69 6d 61 72 79 20 6b 65 79 2e 29 5e  e primary key.)^
112c0 0a 20 20 20 20 4c 65 74 20 74 68 65 20 6e 75 6d  .    Let the num
112d0 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 65  ber of columns e
112e0 6e 63 6f 64 65 64 20 62 79 20 74 68 65 20 73 71  ncoded by the sq
112f0 6c 69 74 65 5f 73 74 61 74 34 2e 73 61 6d 70 6c  lite_stat4.sampl
11300 65 20 62 6c 6f 62 20 62 65 20 4e 2e 0a 20 20 20  e blob be N..   
11310 20 5e 46 6f 72 20 69 6e 64 65 78 65 73 20 6f 6e   ^For indexes on
11320 20 61 6e 20 6f 72 64 69 6e 61 72 79 20 72 6f 77   an ordinary row
11330 69 64 20 74 61 62 6c 65 2c 20 4e 20 77 69 6c 6c  id table, N will
11340 20 62 65 20 6f 6e 65 20 6d 6f 72 65 20 74 68 61   be one more tha
11350 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 0a 20 20  n the number .  
11360 20 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 64    of columns ind
11370 65 78 65 64 2e 0a 20 20 20 20 5e 46 6f 72 20 69  exed..    ^For i
11380 6e 64 65 78 65 73 20 6f 6e 20 57 49 54 48 4f 55  ndexes on WITHOU
11390 54 20 52 4f 57 49 44 20 74 61 62 6c 65 73 2c 20  T ROWID tables, 
113a0 4e 20 77 69 6c 6c 20 62 65 20 74 68 65 20 6e 75  N will be the nu
113b0 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 0a  mber of columns.
113c0 20 20 20 20 69 6e 64 65 78 65 64 20 70 6c 75 73      indexed plus
113d0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63   the number of c
113e0 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 70 72  olumns in the pr
113f0 69 6d 61 72 79 20 6b 65 79 2e 0a 20 20 20 20 5e  imary key..    ^
11400 46 6f 72 20 61 20 57 49 54 48 4f 55 54 20 52 4f  For a WITHOUT RO
11410 57 49 44 20 74 61 62 6c 65 2c 20 4e 20 77 69 6c  WID table, N wil
11420 6c 20 62 65 20 74 68 65 20 6e 75 6d 62 65 72 20  l be the number 
11430 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
11440 65 0a 20 20 20 20 70 72 69 6d 61 72 79 20 6b 65  e.    primary ke
11450 79 2e 0a 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  y...<tr><td vali
11460 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22  gn="top" align="
11470 72 69 67 68 74 22 3e 6e 45 71 3a 3c 2f 74 64 3e  right">nEq:</td>
11480 0a 20 20 20 20 3c 74 64 3e 5e 28 54 68 65 20 73  .    <td>^(The s
11490 71 6c 69 74 65 5f 73 74 61 74 34 2e 6e 45 71 20  qlite_stat4.nEq 
114a0 63 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 61 20 6c  column holds a l
114b0 69 73 74 20 6f 66 20 4e 20 69 6e 74 65 67 65 72  ist of N integer
114c0 73 20 77 68 65 72 65 20 0a 20 20 20 20 74 68 65  s where .    the
114d0 20 4b 2d 74 68 20 69 6e 74 65 67 65 72 20 69 73   K-th integer is
114e0 20 74 68 65 20 61 70 70 72 6f 78 69 6d 61 74 65   the approximate
114f0 20 6e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69   number of entri
11500 65 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 0a  es in the index.
11510 20 20 20 20 77 68 6f 73 65 20 6c 65 66 74 2d 6d      whose left-m
11520 6f 73 74 20 4b 20 63 6f 6c 75 6d 6e 73 20 65 78  ost K columns ex
11530 61 63 74 6c 79 20 6d 61 74 63 68 20 74 68 65 20  actly match the 
11540 4b 20 6c 65 66 74 2d 6d 6f 73 74 20 63 6f 6c 75  K left-most colu
11550 6d 6e 73 0a 20 20 20 20 6f 66 20 74 68 65 20 73  mns.    of the s
11560 61 6d 70 6c 65 2e 29 5e 0a 0a 3c 74 72 3e 3c 74  ample.)^..<tr><t
11570 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61  d valign="top" a
11580 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e 6e 4c 74  lign="right">nLt
11590 3a 3c 2f 74 64 3e 0a 20 20 20 20 3c 74 64 3e 5e  :</td>.    <td>^
115a0 28 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74  (The sqlite_stat
115b0 34 2e 6e 4c 74 20 63 6f 6c 75 6d 6e 20 68 6f 6c  4.nLt column hol
115c0 64 73 20 61 20 6c 69 73 74 20 6f 66 20 4e 20 69  ds a list of N i
115d0 6e 74 65 67 65 72 73 20 77 68 65 72 65 0a 20 20  ntegers where.  
115e0 20 20 74 68 65 20 4b 2d 74 68 20 69 6e 74 65 67    the K-th integ
115f0 65 72 20 69 73 20 74 68 65 20 61 70 70 72 6f 78  er is the approx
11600 69 6d 61 74 65 20 6e 75 6d 62 65 72 20 6f 66 20  imate number of 
11610 65 6e 74 72 69 65 73 20 69 6e 20 74 68 65 0a 20  entries in the. 
11620 20 20 20 69 6e 64 65 78 20 77 68 6f 73 65 20 4b     index whose K
11630 20 6c 65 66 74 2d 6d 6f 73 74 20 63 6f 6c 75 6d   left-most colum
11640 6e 73 20 61 72 65 20 63 6f 6c 6c 65 63 74 69 76  ns are collectiv
11650 65 6c 79 20 6c 65 73 73 20 74 68 61 6e 20 74 68  ely less than th
11660 65 20 0a 20 20 20 20 4b 20 6c 65 66 74 2d 6d 6f  e .    K left-mo
11670 73 74 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68  st columns of th
11680 65 20 73 61 6d 70 6c 65 2e 29 5e 0a 0a 3c 74 72  e sample.)^..<tr
11690 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70  ><td valign="top
116a0 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e  " align="right">
116b0 6e 44 4c 74 3a 3c 2f 74 64 3e 0a 20 20 20 20 3c  nDLt:</td>.    <
116c0 74 64 3e 5e 28 54 68 65 20 73 71 6c 69 74 65 5f  td>^(The sqlite_
116d0 73 74 61 74 34 2e 6e 44 4c 74 20 63 6f 6c 75 6d  stat4.nDLt colum
116e0 6e 20 68 6f 6c 64 73 20 61 20 6c 69 73 74 20 6f  n holds a list o
116f0 66 20 4e 20 69 6e 74 65 67 65 72 73 20 77 68 65  f N integers whe
11700 72 65 0a 20 20 20 20 74 68 65 20 4b 2d 74 68 20  re.    the K-th 
11710 69 6e 74 65 67 65 72 20 69 73 20 74 68 65 20 61  integer is the a
11720 70 70 72 6f 78 69 6d 61 74 65 0a 20 20 20 20 6e  pproximate.    n
11730 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73  umber of entries
11740 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20 74 68   in the index th
11750 61 74 20 61 72 65 20 64 69 73 74 69 6e 63 74 20  at are distinct 
11760 69 6e 20 74 68 65 20 66 69 72 73 74 20 4b 20 63  in the first K c
11770 6f 6c 75 6d 6e 73 20 61 6e 64 0a 20 20 20 20 77  olumns and.    w
11780 68 65 72 65 20 74 68 65 20 6c 65 66 74 2d 6d 6f  here the left-mo
11790 73 74 20 4b 20 63 6f 6c 75 6d 6e 73 20 61 72 65  st K columns are
117a0 20 63 6f 6c 6c 65 63 74 69 76 65 6c 79 20 6c 65   collectively le
117b0 73 73 20 74 68 61 6e 20 74 68 65 20 6c 65 66 74  ss than the left
117c0 2d 6d 6f 73 74 0a 20 20 20 20 4b 20 63 6f 6c 75  -most.    K colu
117d0 6d 6e 73 20 6f 66 20 74 68 65 20 73 61 6d 70 6c  mns of the sampl
117e0 65 2e 29 5e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f  e.)^.</table>.</
117f0 63 65 6e 74 65 72 3e 0a 0a 3c 70 3e 54 68 65 20  center>..<p>The 
11800 73 71 6c 69 74 65 5f 73 74 61 74 34 20 69 73 20  sqlite_stat4 is 
11810 61 20 67 65 6e 65 72 61 6c 69 7a 61 74 69 6f 6e  a generalization
11820 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 5f 73   of the sqlite_s
11830 74 61 74 33 20 74 61 62 6c 65 2e 20 20 54 68 65  tat3 table.  The
11840 0a 73 71 6c 69 74 65 5f 73 74 61 74 33 20 74 61  .sqlite_stat3 ta
11850 62 6c 65 20 70 72 6f 76 69 64 65 73 20 69 6e 66  ble provides inf
11860 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74  ormation about t
11870 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 63 6f 6c  he left-most col
11880 75 6d 6e 20 6f 66 20 61 6e 0a 69 6e 64 65 78 20  umn of an.index 
11890 77 68 65 72 65 61 73 20 74 68 65 20 73 71 6c 69  whereas the sqli
118a0 74 65 5f 73 74 61 74 34 20 74 61 62 6c 65 20 70  te_stat4 table p
118b0 72 6f 76 69 64 65 73 20 69 6e 66 6f 72 6d 61 74  rovides informat
118c0 69 6f 6e 20 61 62 6f 75 74 20 61 6c 6c 20 63 6f  ion about all co
118d0 6c 75 6d 6e 73 0a 6f 66 20 74 68 65 20 69 6e 64  lumns.of the ind
118e0 65 78 2e 0a 0a 3c 70 3e 5e 54 68 65 72 65 20 63  ex...<p>^There c
118f0 61 6e 20 62 65 20 61 6e 20 61 72 62 69 74 72 61  an be an arbitra
11900 72 79 20 6e 75 6d 62 65 72 20 6f 66 20 73 71 6c  ry number of sql
11910 69 74 65 5f 73 74 61 74 34 20 65 6e 74 72 69 65  ite_stat4 entrie
11920 73 20 70 65 72 20 69 6e 64 65 78 2e 0a 54 68 65  s per index..The
11930 20 5b 41 4e 41 4c 59 5a 45 5d 20 63 6f 6d 6d 61   [ANALYZE] comma
11940 6e 64 20 77 69 6c 6c 20 74 79 70 69 63 61 6c 6c  nd will typicall
11950 79 20 67 65 6e 65 72 61 74 65 20 73 71 6c 69 74  y generate sqlit
11960 65 5f 73 74 61 74 34 20 74 61 62 6c 65 73 0a 74  e_stat4 tables.t
11970 68 61 74 20 63 6f 6e 74 61 69 6e 20 62 65 74 77  hat contain betw
11980 65 65 6e 20 31 30 20 61 6e 64 20 34 30 20 73 61  een 10 and 40 sa
11990 6d 70 6c 65 73 20 74 68 61 74 20 61 72 65 20 64  mples that are d
119a0 69 73 74 72 69 62 75 74 65 64 20 61 63 72 6f 73  istributed acros
119b0 73 0a 74 68 65 20 6b 65 79 20 73 70 61 63 65 20  s.the key space 
119c0 61 6e 64 20 77 69 74 68 20 6c 61 72 67 65 20 6e  and with large n
119d0 45 71 20 76 61 6c 75 65 73 2e 0a 0a 3c 70 3e 5e  Eq values...<p>^
119e0 28 49 6e 20 61 20 77 65 6c 6c 2d 66 6f 72 6d 65  (In a well-forme
119f0 64 20 73 71 6c 69 74 65 5f 73 74 61 74 34 20 74  d sqlite_stat4 t
11a00 61 62 6c 65 2c 20 74 68 65 20 73 61 6d 70 6c 65  able, the sample
11a10 73 20 66 6f 72 20 61 6e 79 20 73 69 6e 67 6c 65  s for any single
11a20 0a 69 6e 64 65 78 20 6d 75 73 74 20 61 70 70 65  .index must appe
11a30 61 72 20 69 6e 20 74 68 65 20 73 61 6d 65 20 6f  ar in the same o
11a40 72 64 65 72 20 74 68 61 74 20 74 68 65 79 20 6f  rder that they o
11a50 63 63 75 72 20 69 6e 20 74 68 65 20 69 6e 64 65  ccur in the inde
11a60 78 2e 20 20 0a 49 6e 20 6f 74 68 65 72 20 77 6f  x.  .In other wo
11a70 72 64 73 2c 20 69 66 20 65 6e 74 72 79 20 53 31  rds, if entry S1
11a80 20 69 73 20 65 61 72 6c 69 65 72 20 69 6e 20 74   is earlier in t
11a90 68 65 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20  he index b-tree 
11aa0 74 68 61 6e 20 0a 65 6e 74 72 79 20 53 32 2c 20  than .entry S2, 
11ab0 74 68 65 6e 20 69 6e 20 74 68 65 20 73 71 6c 69  then in the sqli
11ac0 74 65 5f 73 74 61 74 34 20 74 61 62 6c 65 2c 20  te_stat4 table, 
11ad0 73 61 6d 70 6c 65 20 53 31 20 6d 75 73 74 20 68  sample S1 must h
11ae0 61 76 65 20 61 0a 73 6d 61 6c 6c 65 72 20 72 6f  ave a.smaller ro
11af0 77 69 64 20 74 68 61 6e 20 73 61 6d 70 6c 65 20  wid than sample 
11b00 53 32 2e 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  S2.)^..<tcl>hd_f
11b10 72 61 67 6d 65 6e 74 20 72 6f 6c 6c 62 61 63 6b  ragment rollback
11b20 6a 6f 75 72 6e 61 6c 20 7b 72 6f 6c 6c 62 61 63  journal {rollbac
11b30 6b 20 6a 6f 75 72 6e 61 6c 20 66 6f 72 6d 61 74  k journal format
11b40 7d 3c 2f 74 63 6c 3e 0a 3c 68 31 3e 54 68 65 20  }</tcl>.<h1>The 
11b50 52 6f 6c 6c 62 61 63 6b 20 4a 6f 75 72 6e 61 6c  Rollback Journal
11b60 3c 2f 68 31 3e 0a 0a 3c 70 3e 54 68 65 20 72 6f  </h1>..<p>The ro
11b70 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 69  llback journal i
11b80 73 20 61 20 66 69 6c 65 20 61 73 73 6f 63 69 61  s a file associa
11b90 74 65 64 20 77 69 74 68 20 65 61 63 68 20 53 51  ted with each SQ
11ba0 4c 69 74 65 20 64 61 74 61 62 61 73 65 0a 66 69  Lite database.fi
11bb0 6c 65 20 74 68 61 74 20 68 6f 6c 64 20 69 6e 66  le that hold inf
11bc0 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 74 6f  ormation used to
11bd0 20 72 65 73 74 6f 72 65 20 74 68 65 20 64 61 74   restore the dat
11be0 61 62 61 73 65 20 66 69 6c 65 20 74 6f 20 69 74  abase file to it
11bf0 73 20 69 6e 69 74 69 61 6c 0a 73 74 61 74 65 20  s initial.state 
11c00 64 75 72 69 6e 67 20 74 68 65 20 63 6f 75 72 73  during the cours
11c10 65 20 6f 66 20 61 20 74 72 61 6e 73 61 63 74 69  e of a transacti
11c20 6f 6e 2e 0a 5e 54 68 65 20 72 6f 6c 6c 62 61 63  on..^The rollbac
11c30 6b 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 20 69  k journal file i
11c40 73 20 61 6c 77 61 79 73 20 6c 6f 63 61 74 65 64  s always located
11c50 20 69 6e 20 74 68 65 20 73 61 6d 65 20 0a 64 69   in the same .di
11c60 72 65 63 74 6f 72 79 20 61 73 20 74 68 65 20 64  rectory as the d
11c70 61 74 61 62 61 73 65 0a 66 69 6c 65 20 61 6e 64  atabase.file and
11c80 20 68 61 73 20 74 68 65 20 73 61 6d 65 20 6e 61   has the same na
11c90 6d 65 20 61 73 20 74 68 65 20 64 61 74 61 62 61  me as the databa
11ca0 73 65 20 66 69 6c 65 20 62 75 74 20 77 69 74 68  se file but with
11cb0 20 74 68 65 20 73 74 72 69 6e 67 0a 22 3c 74 74   the string."<tt
11cc0 3e 2d 6a 6f 75 72 6e 61 6c 3c 2f 74 74 3e 22 20  >-journal</tt>" 
11cd0 61 70 70 65 6e 64 65 64 2e 20 20 54 68 65 72 65  appended.  There
11ce0 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20 61 20 73   can only be a s
11cf0 69 6e 67 6c 65 20 72 6f 6c 6c 62 61 63 6b 20 6a  ingle rollback j
11d00 6f 75 72 6e 61 6c 0a 61 73 73 6f 63 69 61 74 65  ournal.associate
11d10 64 20 77 69 74 68 20 61 20 67 69 76 65 20 64 61  d with a give da
11d20 74 61 62 61 73 65 20 61 6e 64 20 68 65 6e 63 65  tabase and hence
11d30 20 74 68 65 72 65 20 63 61 6e 20 6f 6e 6c 79 20   there can only 
11d40 62 65 20 6f 6e 65 20 77 72 69 74 65 0a 74 72 61  be one write.tra
11d50 6e 73 61 63 74 69 6f 6e 20 6f 70 65 6e 20 61 67  nsaction open ag
11d60 61 69 6e 73 74 20 61 20 73 69 6e 67 6c 65 20 64  ainst a single d
11d70 61 74 61 62 61 73 65 20 61 74 20 6f 6e 65 20 74  atabase at one t
11d80 69 6d 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 66 20  ime.</p>..<p>If 
11d90 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  a transaction is
11da0 20 61 62 6f 72 74 65 64 20 64 75 65 20 74 6f 20   aborted due to 
11db0 61 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 63  an application c
11dc0 72 61 73 68 2c 20 61 6e 20 6f 70 65 72 61 74 69  rash, an operati
11dd0 6e 67 0a 73 79 73 74 65 6d 20 63 72 61 73 68 2c  ng.system crash,
11de0 20 6f 72 20 61 20 68 61 72 64 77 61 72 65 20 70   or a hardware p
11df0 6f 77 65 72 20 66 61 69 6c 75 72 65 20 6f 72 20  ower failure or 
11e00 63 72 61 73 68 2c 20 74 68 65 6e 20 74 68 65 20  crash, then the 
11e10 64 61 74 61 62 61 73 65 20 6d 61 79 0a 62 65 20  database may.be 
11e20 6c 65 66 74 20 69 6e 20 61 6e 20 69 6e 63 6f 6e  left in an incon
11e30 73 69 73 74 65 6e 74 20 73 74 61 74 65 2e 20 20  sistent state.  
11e40 5e 54 68 65 20 6e 65 78 74 20 74 69 6d 65 20 53  ^The next time S
11e50 51 4c 69 74 65 20 61 74 74 65 6d 70 74 73 20 74  QLite attempts t
11e60 6f 20 6f 70 65 6e 0a 74 68 65 20 64 61 74 61 62  o open.the datab
11e70 61 73 65 20 66 69 6c 65 2c 20 74 68 65 20 70 72  ase file, the pr
11e80 65 73 65 6e 63 65 20 6f 66 20 74 68 65 20 72 6f  esence of the ro
11e90 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 66  llback journal f
11ea0 69 6c 65 20 77 69 6c 6c 20 62 65 20 0a 64 65 74  ile will be .det
11eb0 65 63 74 65 64 20 61 6e 64 20 74 68 65 20 6a 6f  ected and the jo
11ec0 75 72 6e 61 6c 20 77 69 6c 6c 20 62 65 20 61 75  urnal will be au
11ed0 74 6f 6d 61 74 69 63 61 6c 6c 79 20 70 6c 61 79  tomatically play
11ee0 65 64 20 62 61 63 6b 20 74 6f 20 72 65 73 74 6f  ed back to resto
11ef0 72 65 20 74 68 65 0a 64 61 74 61 62 61 73 65 20  re the.database 
11f00 74 6f 20 69 74 73 20 73 74 61 74 65 20 61 74 20  to its state at 
11f10 74 68 65 20 73 74 61 72 74 20 6f 66 20 74 68 65  the start of the
11f20 20 69 6e 63 6f 6d 70 6c 65 74 65 20 74 72 61 6e   incomplete tran
11f30 73 61 63 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 70  saction.</p>..<p
11f40 3e 5e 41 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75  >^A rollback jou
11f50 72 6e 61 6c 20 69 73 20 6f 6e 6c 79 20 63 6f 6e  rnal is only con
11f60 73 69 64 65 72 65 64 20 74 6f 20 62 65 20 76 61  sidered to be va
11f70 6c 69 64 20 69 66 20 69 74 20 65 78 69 73 74 73  lid if it exists
11f80 20 61 6e 64 0a 63 6f 6e 74 61 69 6e 73 20 61 20   and.contains a 
11f90 76 61 6c 69 64 20 68 65 61 64 65 72 2e 20 20 48  valid header.  H
11fa0 65 6e 63 65 20 61 20 74 72 61 6e 73 61 63 74 69  ence a transacti
11fb0 6f 6e 20 63 61 6e 20 62 65 20 63 6f 6d 6d 69 74  on can be commit
11fc0 74 65 64 20 69 6e 20 6f 6e 65 0a 6f 66 20 74 68  ted in one.of th
11fd0 72 65 65 20 77 61 79 73 3a 0a 3c 6f 6c 3e 0a 3c  ree ways:.<ol>.<
11fe0 6c 69 3e 5e 28 54 68 65 20 72 6f 6c 6c 62 61 63  li>^(The rollbac
11ff0 6b 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 20 63  k journal file c
12000 61 6e 20 62 65 20 64 65 6c 65 74 65 64 29 5e 2c  an be deleted)^,
12010 0a 3c 6c 69 3e 5e 28 54 68 65 20 72 6f 6c 6c 62  .<li>^(The rollb
12020 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65  ack journal file
12030 20 63 61 6e 20 62 65 20 74 72 75 6e 63 61 74 65   can be truncate
12040 64 20 74 6f 20 7a 65 72 6f 20 6c 65 6e 67 74 68  d to zero length
12050 29 5e 2c 20 6f 72 0a 3c 6c 69 3e 5e 28 54 68 65  )^, or.<li>^(The
12060 20 68 65 61 64 65 72 20 6f 66 20 74 68 65 20 72   header of the r
12070 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20  ollback journal 
12080 63 61 6e 20 62 65 20 6f 76 65 72 77 72 69 74 74  can be overwritt
12090 65 6e 20 77 69 74 68 0a 69 6e 76 61 6c 69 64 20  en with.invalid 
120a0 68 65 61 64 65 72 20 74 65 78 74 20 28 66 6f 72  header text (for
120b0 20 65 78 61 6d 70 6c 65 2c 20 61 6c 6c 20 7a 65   example, all ze
120c0 72 6f 73 29 2e 29 5e 0a 3c 2f 6f 6c 3e 0a 3c 70  ros).)^.</ol>.<p
120d0 3e 0a 5e 54 68 65 73 65 20 74 68 72 65 65 20 77  >.^These three w
120e0 61 79 73 20 6f 66 20 63 6f 6d 6d 69 74 74 69 6e  ays of committin
120f0 67 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  g a transaction 
12100 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20 74 68  correspond to th
12110 65 20 44 45 4c 45 54 45 2c 0a 54 52 55 4e 43 41  e DELETE,.TRUNCA
12120 54 45 2c 20 61 6e 64 20 50 45 52 53 49 53 54 20  TE, and PERSIST 
12130 73 65 74 74 69 6e 67 73 2c 20 72 65 73 70 65 63  settings, respec
12140 74 69 76 65 6c 79 2c 20 6f 66 20 74 68 65 20 5b  tively, of the [
12150 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20 70 72 61  journal_mode pra
12160 67 6d 61 5d 2e 0a 3c 2f 70 3e 0a 0a 0a 3c 70 3e  gma]..</p>...<p>
12170 41 20 76 61 6c 69 64 20 72 6f 6c 6c 62 61 63 6b  A valid rollback
12180 20 6a 6f 75 72 6e 61 6c 20 62 65 67 69 6e 73 20   journal begins 
12190 77 69 74 68 20 61 20 68 65 61 64 65 72 20 69 6e  with a header in
121a0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 66   the following f
121b0 6f 72 6d 61 74 3a 3c 2f 70 3e 0a 0a 3c 63 65 6e  ormat:</p>..<cen
121c0 74 65 72 3e 0a 3c 69 3e 52 6f 6c 6c 62 61 63 6b  ter>.<i>Rollback
121d0 20 4a 6f 75 72 6e 61 6c 20 48 65 61 64 65 72 20   Journal Header 
121e0 46 6f 72 6d 61 74 3c 2f 69 3e 3c 62 72 3e 0a 3c  Format</i><br>.<
121f0 74 61 62 6c 65 20 77 69 64 74 68 3d 22 38 30 25  table width="80%
12200 22 20 62 6f 72 64 65 72 3d 31 3e 0a 3c 74 72 3e  " border=1>.<tr>
12210 3c 74 68 3e 4f 66 66 73 65 74 3c 74 68 3e 53 69  <th>Offset<th>Si
12220 7a 65 3c 74 68 3e 44 65 73 63 72 69 70 74 69 6f  ze<th>Descriptio
12230 6e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  n.<tr><td valign
12240 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
12250 72 3e 30 0a 20 20 20 20 3c 74 64 20 76 61 6c 69  r>0.    <td vali
12260 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
12270 74 65 72 3e 38 0a 20 20 20 20 3c 74 64 3e 48 65  ter>8.    <td>He
12280 61 64 65 72 20 73 74 72 69 6e 67 3a 20 20 30 78  ader string:  0x
12290 64 39 2c 20 30 78 64 35 2c 20 30 78 30 35 2c 20  d9, 0xd5, 0x05, 
122a0 30 78 66 39 2c 20 30 78 32 30 2c 20 30 78 61 31  0xf9, 0x20, 0xa1
122b0 2c 20 30 78 36 33 2c 20 30 78 64 37 0a 3c 74 72  , 0x63, 0xd7.<tr
122c0 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
122d0 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 38 0a 20  align=center>8. 
122e0 20 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f     <td valign=to
122f0 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34  p align=center>4
12300 0a 20 20 20 20 3c 74 64 3e 54 68 65 20 22 50 61  .    <td>The "Pa
12310 67 65 20 43 6f 75 6e 74 22 20 2d 20 54 68 65 20  ge Count" - The 
12320 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20  number of pages 
12330 69 6e 20 74 68 65 20 6e 65 78 74 20 73 65 67 6d  in the next segm
12340 65 6e 74 20 6f 66 20 74 68 65 20 0a 20 20 20 20  ent of the .    
12350 20 20 20 20 6a 6f 75 72 6e 61 6c 2c 20 6f 72 20      journal, or 
12360 2d 31 20 74 6f 0a 20 20 20 20 20 20 20 20 6d 65  -1 to.        me
12370 61 6e 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 20 74  an all content t
12380 6f 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  o the end of the
12390 20 66 69 6c 65 0a 3c 74 72 3e 3c 74 64 20 76 61   file.<tr><td va
123a0 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
123b0 65 6e 74 65 72 3e 31 32 0a 20 20 20 20 3c 74 64  enter>12.    <td
123c0 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
123d0 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c  n=center>4.    <
123e0 74 64 3e 41 20 72 61 6e 64 6f 6d 20 6e 6f 6e 63  td>A random nonc
123f0 65 20 66 6f 72 20 74 68 65 20 63 68 65 63 6b 73  e for the checks
12400 75 6d 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  um.<tr><td valig
12410 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
12420 65 72 3e 31 36 0a 20 20 20 20 3c 74 64 20 76 61  er>16.    <td va
12430 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
12440 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e  enter>4.    <td>
12450 49 6e 69 74 69 61 6c 20 73 69 7a 65 20 6f 66 20  Initial size of 
12460 74 68 65 20 64 61 74 61 62 61 73 65 20 69 6e 20  the database in 
12470 70 61 67 65 73 0a 3c 74 72 3e 3c 74 64 20 76 61  pages.<tr><td va
12480 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
12490 65 6e 74 65 72 3e 32 30 0a 20 20 20 20 3c 74 64  enter>20.    <td
124a0 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
124b0 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c  n=center>4.    <
124c0 74 64 3e 53 69 7a 65 20 6f 66 20 61 20 64 69 73  td>Size of a dis
124d0 6b 20 73 65 63 74 6f 72 20 61 73 73 75 6d 65 64  k sector assumed
124e0 20 62 79 20 74 68 65 20 70 72 6f 63 65 73 73 20   by the process 
124f0 74 68 61 74 20 77 72 6f 74 65 20 74 68 69 73 0a  that wrote this.
12500 20 20 20 20 20 20 20 20 6a 6f 75 72 6e 61 6c 2e          journal.
12510 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d  .<tr><td valign=
12520 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
12530 3e 32 34 0a 20 20 20 20 3c 74 64 20 76 61 6c 69  >24.    <td vali
12540 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
12550 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 53 69  ter>4.    <td>Si
12560 7a 65 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74  ze of pages in t
12570 68 69 73 20 6a 6f 75 72 6e 61 6c 2e 0a 3c 2f 74  his journal..</t
12580 61 62 6c 65 3e 0a 3c 2f 63 65 6e 74 65 72 3e 0a  able>.</center>.
12590 0a 3c 70 3e 5e 41 20 72 6f 6c 6c 62 61 63 6b 20  .<p>^A rollback 
125a0 6a 6f 75 72 6e 61 6c 20 68 65 61 64 65 72 20 69  journal header i
125b0 73 20 70 61 64 64 65 64 20 77 69 74 68 20 7a 65  s padded with ze
125c0 72 6f 73 20 6f 75 74 20 74 6f 20 74 68 65 20 73  ros out to the s
125d0 69 7a 65 20 6f 66 20 61 20 0a 73 69 6e 67 6c 65  ize of a .single
125e0 20 73 65 63 74 6f 72 20 28 61 73 20 64 65 66 69   sector (as defi
125f0 6e 65 64 20 62 79 20 74 68 65 20 73 65 63 74 6f  ned by the secto
12600 72 20 73 69 7a 65 20 69 6e 74 65 67 65 72 20 61  r size integer a
12610 74 20 6f 66 66 73 65 74 20 32 30 29 2e 0a 54 68  t offset 20)..Th
12620 65 20 68 65 61 64 65 72 20 69 73 20 69 6e 20 61  e header is in a
12630 20 73 65 63 74 6f 72 20 62 79 20 69 74 73 65 6c   sector by itsel
12640 66 20 73 6f 20 74 68 61 74 20 69 66 20 61 20 70  f so that if a p
12650 6f 77 65 72 20 6c 6f 73 73 20 6f 63 63 75 72 73  ower loss occurs
12660 20 77 68 69 6c 65 0a 77 72 69 74 69 6e 67 20 74   while.writing t
12670 68 65 20 73 65 63 74 6f 72 2c 20 69 6e 66 6f 72  he sector, infor
12680 6d 61 74 69 6f 6e 20 74 68 61 74 20 66 6f 6c 6c  mation that foll
12690 6f 77 73 20 74 68 65 20 68 65 61 64 65 72 20 77  ows the header w
126a0 69 6c 6c 20 62 65 0a 28 68 6f 70 65 66 75 6c 6c  ill be.(hopefull
126b0 79 29 20 75 6e 64 61 6d 61 67 65 64 2e 3c 2f 70  y) undamaged.</p
126c0 3e 0a 0a 3c 70 3e 5e 41 66 74 65 72 20 74 68 65  >..<p>^After the
126d0 20 68 65 61 64 65 72 20 61 6e 64 20 7a 65 72 6f   header and zero
126e0 20 70 61 64 64 69 6e 67 20 61 72 65 20 7a 65 72   padding are zer
126f0 6f 20 6f 72 20 6d 6f 72 65 20 70 61 67 65 20 72  o or more page r
12700 65 63 6f 72 64 73 2e 20 20 5e 45 61 63 68 0a 70  ecords.  ^Each.p
12710 61 67 65 20 72 65 63 6f 72 64 20 73 74 6f 72 65  age record store
12720 73 20 61 20 63 6f 70 79 20 6f 66 20 74 68 65 20  s a copy of the 
12730 63 6f 6e 74 65 6e 74 20 6f 66 20 61 20 70 61 67  content of a pag
12740 65 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62  e from the datab
12750 61 73 65 20 66 69 6c 65 0a 62 65 66 6f 72 65 20  ase file.before 
12760 69 74 20 77 61 73 20 63 68 61 6e 67 65 64 2e 20  it was changed. 
12770 20 5e 54 68 65 20 73 61 6d 65 20 70 61 67 65 20   ^The same page 
12780 6d 61 79 20 6e 6f 74 20 61 70 70 65 61 72 20 6d  may not appear m
12790 6f 72 65 20 74 68 61 6e 20 6f 6e 63 65 0a 77 69  ore than once.wi
127a0 74 68 69 6e 20 61 20 73 69 6e 67 6c 65 20 72 6f  thin a single ro
127b0 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 2e 0a  llback journal..
127c0 54 6f 20 72 6f 6c 6c 62 61 63 6b 20 61 6e 20 69  To rollback an i
127d0 6e 63 6f 6d 70 6c 65 74 65 20 74 72 61 6e 73 61  ncomplete transa
127e0 63 74 69 6f 6e 2c 20 61 20 70 72 6f 63 65 73 73  ction, a process
127f0 0a 68 61 73 20 6d 65 72 65 6c 79 20 74 6f 20 72  .has merely to r
12800 65 61 64 20 74 68 65 20 72 6f 6c 6c 62 61 63 6b  ead the rollback
12810 20 6a 6f 75 72 6e 61 6c 20 66 72 6f 6d 20 62 65   journal from be
12820 67 69 6e 6e 69 6e 67 20 74 6f 20 65 6e 64 20 61  ginning to end a
12830 6e 64 0a 77 72 69 74 65 20 70 61 67 65 73 20 66  nd.write pages f
12840 6f 75 6e 64 20 69 6e 20 74 68 65 20 6a 6f 75 72  ound in the jour
12850 6e 61 6c 20 62 61 63 6b 20 69 6e 74 6f 20 74 68  nal back into th
12860 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
12870 61 74 20 74 68 65 0a 61 70 70 72 6f 70 72 69 61  at the.appropria
12880 74 65 20 6c 6f 63 61 74 69 6f 6e 2e 3c 2f 70 3e  te location.</p>
12890 0a 0a 3c 70 3e 4c 65 74 20 74 68 65 20 64 61 74  ..<p>Let the dat
128a0 61 62 61 73 65 20 70 61 67 65 20 73 69 7a 65 20  abase page size 
128b0 28 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68  (the value of th
128c0 65 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66  e integer at off
128d0 73 65 74 20 32 34 20 0a 69 6e 20 74 68 65 20 6a  set 24 .in the j
128e0 6f 75 72 6e 61 6c 20 68 65 61 64 65 72 29 20 62  ournal header) b
128f0 65 20 4e 2e 0a 54 68 65 6e 20 74 68 65 20 66 6f  e N..Then the fo
12900 72 6d 61 74 20 6f 66 20 61 20 70 61 67 65 20 72  rmat of a page r
12910 65 63 6f 72 64 20 69 73 20 61 73 20 66 6f 6c 6c  ecord is as foll
12920 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 63 65 6e 74 65  ows:</p>..<cente
12930 72 3e 0a 3c 69 3e 52 6f 6c 6c 62 61 63 6b 20 4a  r>.<i>Rollback J
12940 6f 75 72 6e 61 6c 20 50 61 67 65 20 52 65 63 6f  ournal Page Reco
12950 72 64 20 46 6f 72 6d 61 74 3c 2f 69 3e 3c 62 72  rd Format</i><br
12960 3e 0a 3c 74 61 62 6c 65 20 77 69 64 74 68 3d 22  >.<table width="
12970 38 30 25 22 20 62 6f 72 64 65 72 3d 31 3e 0a 3c  80%" border=1>.<
12980 74 72 3e 3c 74 68 3e 4f 66 66 73 65 74 3c 74 68  tr><th>Offset<th
12990 3e 53 69 7a 65 3c 74 68 3e 44 65 73 63 72 69 70  >Size<th>Descrip
129a0 74 69 6f 6e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c  tion.<tr><td val
129b0 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
129c0 6e 74 65 72 3e 30 0a 20 20 20 20 3c 74 64 20 76  nter>0.    <td v
129d0 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
129e0 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64  center>4.    <td
129f0 3e 54 68 65 20 70 61 67 65 20 6e 75 6d 62 65 72  >The page number
12a00 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
12a10 20 66 69 6c 65 0a 3c 74 72 3e 3c 74 64 20 76 61   file.<tr><td va
12a20 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
12a30 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 20  enter>4.    <td 
12a40 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
12a50 3d 63 65 6e 74 65 72 3e 4e 0a 20 20 20 20 3c 74  =center>N.    <t
12a60 64 3e 4f 72 69 67 69 6e 61 6c 20 63 6f 6e 74 65  d>Original conte
12a70 6e 74 20 6f 66 20 74 68 65 20 70 61 67 65 20 70  nt of the page p
12a80 72 69 6f 72 20 74 6f 20 74 68 65 20 73 74 61 72  rior to the star
12a90 74 20 6f 66 20 74 68 65 20 74 72 61 6e 73 61 63  t of the transac
12aa0 74 69 6f 6e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c  tion.<tr><td val
12ab0 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
12ac0 6e 74 65 72 3e 4e 2b 34 0a 20 20 20 20 3c 74 64  nter>N+4.    <td
12ad0 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
12ae0 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c  n=center>4.    <
12af0 74 64 3e 43 68 65 63 6b 73 75 6d 0a 3c 2f 74 61  td>Checksum.</ta
12b00 62 6c 65 3e 0a 3c 2f 63 65 6e 74 65 72 3e 0a 0a  ble>.</center>..
12b10 0a 3c 70 3e 5e 28 54 68 65 20 63 68 65 63 6b 73  .<p>^(The checks
12b20 75 6d 20 69 73 20 61 6e 20 75 6e 73 69 67 6e 65  um is an unsigne
12b30 64 20 33 32 2d 62 69 74 20 69 6e 74 65 67 65 72  d 32-bit integer
12b40 20 63 6f 6d 70 75 74 65 64 20 61 73 20 66 6f 6c   computed as fol
12b50 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a  lows:</p>..<ol>.
12b60 3c 6c 69 3e 49 6e 69 74 69 61 6c 69 7a 65 20 74  <li>Initialize t
12b70 68 65 20 63 68 65 63 6b 73 75 6d 20 74 6f 20 74  he checksum to t
12b80 68 65 20 63 68 65 63 6b 73 75 6d 20 6e 6f 6e 63  he checksum nonc
12b90 65 20 76 61 6c 75 65 20 66 6f 75 6e 64 20 69 6e  e value found in
12ba0 20 74 68 65 0a 6a 6f 75 72 6e 61 6c 20 68 65 61   the.journal hea
12bb0 64 65 72 20 61 74 20 6f 66 66 73 65 74 20 31 32  der at offset 12
12bc0 2e 0a 3c 6c 69 3e 49 6e 69 74 69 61 6c 69 7a 65  ..<li>Initialize
12bd0 20 69 6e 64 65 78 20 58 20 74 6f 20 62 65 20 4e   index X to be N
12be0 2d 32 30 30 20 28 77 68 65 72 65 20 4e 20 69 73  -200 (where N is
12bf0 20 74 68 65 20 73 69 7a 65 20 6f 66 20 61 20 64   the size of a d
12c00 61 74 61 62 61 73 65 20 70 61 67 65 0a 69 6e 20  atabase page.in 
12c10 62 79 74 65 73 2e 0a 3c 6c 69 3e 49 6e 74 65 72  bytes..<li>Inter
12c20 70 72 65 74 20 74 68 65 20 66 6f 75 72 20 62 79  pret the four by
12c30 74 65 73 20 61 74 20 6f 66 66 73 65 74 20 58 20  tes at offset X 
12c40 69 6e 74 6f 20 74 68 65 20 70 61 67 65 20 61 73  into the page as
12c50 20 61 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e   a 4-byte big-en
12c60 64 69 61 6e 0a 75 6e 73 69 67 6e 65 64 20 69 6e  dian.unsigned in
12c70 74 65 67 65 72 2e 20 20 41 64 64 20 74 68 65 20  teger.  Add the 
12c80 76 61 6c 75 65 20 6f 66 20 74 68 61 74 20 69 6e  value of that in
12c90 74 65 67 65 72 20 74 6f 20 74 68 65 20 63 68 65  teger to the che
12ca0 63 6b 73 75 6d 2e 0a 3c 6c 69 3e 53 75 62 74 72  cksum..<li>Subtr
12cb0 61 63 65 20 32 30 30 20 66 72 6f 6d 20 58 2e 0a  ace 200 from X..
12cc0 3c 6c 69 3e 49 66 20 58 20 69 73 20 67 72 65 61  <li>If X is grea
12cd0 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ter than or equa
12ce0 6c 20 74 6f 20 7a 65 72 6f 2c 20 67 6f 20 62 61  l to zero, go ba
12cf0 63 6b 20 74 6f 20 73 74 65 70 20 33 2e 0a 3c 2f  ck to step 3..</
12d00 6f 6c 3e 29 5e 0a 0a 3c 70 3e 54 68 65 20 63 68  ol>)^..<p>The ch
12d10 65 63 6b 73 75 6d 20 76 61 6c 75 65 20 69 73 20  ecksum value is 
12d20 75 73 65 64 20 74 6f 20 67 75 61 72 64 20 61 67  used to guard ag
12d30 61 69 6e 73 74 20 69 6e 63 6f 6d 70 6c 65 74 65  ainst incomplete
12d40 20 77 72 69 74 65 73 20 6f 66 0a 61 20 6a 6f 75   writes of.a jou
12d50 72 6e 61 6c 20 70 61 67 65 20 72 65 63 6f 72 64  rnal page record
12d60 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 70 6f 77   following a pow
12d70 65 72 20 66 61 69 6c 75 72 65 2e 20 20 41 20 64  er failure.  A d
12d80 69 66 66 65 72 65 6e 74 20 72 61 6e 64 6f 6d 20  ifferent random 
12d90 6e 6f 6e 63 65 0a 69 73 20 75 73 65 64 20 65 61  nonce.is used ea
12da0 63 68 20 74 69 6d 65 20 61 20 74 72 61 6e 73 61  ch time a transa
12db0 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64  ction is started
12dc0 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6d 69 6e   in order to min
12dd0 69 6d 69 7a 65 20 74 68 65 20 72 69 73 6b 0a 74  imize the risk.t
12de0 68 61 74 20 75 6e 77 72 69 74 74 65 6e 20 73 65  hat unwritten se
12df0 63 74 6f 72 73 20 6d 69 67 68 74 20 62 79 20 63  ctors might by c
12e00 68 61 6e 63 65 20 63 6f 6e 74 61 69 6e 20 64 61  hance contain da
12e10 74 61 20 66 72 6f 6d 20 74 68 65 20 73 61 6d 65  ta from the same
12e20 20 70 61 67 65 0a 74 68 61 74 20 77 61 73 20 61   page.that was a
12e30 20 70 61 72 74 20 6f 66 20 70 72 69 6f 72 20 6a   part of prior j
12e40 6f 75 72 6e 61 6c 73 2e 20 20 42 79 20 63 68 61  ournals.  By cha
12e50 6e 67 69 6e 67 20 74 68 65 20 6e 6f 6e 63 65 20  nging the nonce 
12e60 66 6f 72 20 65 61 63 68 0a 74 72 61 6e 73 61 63  for each.transac
12e70 74 69 6f 6e 2c 20 73 74 61 6c 65 20 64 61 74 61  tion, stale data
12e80 20 6f 6e 20 64 69 73 6b 20 77 69 6c 6c 20 73 74   on disk will st
12e90 69 6c 6c 20 67 65 6e 65 72 61 74 65 20 61 6e 20  ill generate an 
12ea0 69 6e 63 6f 72 72 65 63 74 20 63 68 65 63 6b 73  incorrect checks
12eb0 75 6d 0a 61 6e 64 20 62 65 20 64 65 74 65 63 74  um.and be detect
12ec0 65 64 20 77 69 74 68 20 68 69 67 68 20 70 72 6f  ed with high pro
12ed0 62 61 62 69 6c 69 74 79 2e 20 20 54 68 65 20 63  bability.  The c
12ee0 68 65 63 6b 73 75 6d 20 6f 6e 6c 79 20 75 73 65  hecksum only use
12ef0 73 20 61 20 73 70 61 72 73 65 20 73 61 6d 70 6c  s a sparse sampl
12f00 65 0a 6f 66 20 33 32 2d 62 69 74 20 77 6f 72 64  e.of 32-bit word
12f10 73 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 20  s from the data 
12f20 72 65 63 6f 72 64 20 66 6f 72 20 70 65 72 66 6f  record for perfo
12f30 72 6d 61 6e 63 65 20 72 65 61 73 6f 6e 73 20 2d  rmance reasons -
12f40 20 64 65 73 69 67 6e 20 73 74 75 64 69 65 73 20   design studies 
12f50 0a 64 75 72 69 6e 67 20 74 68 65 20 70 6c 61 6e  .during the plan
12f60 6e 69 6e 67 20 70 68 61 73 65 73 20 6f 66 20 53  ning phases of S
12f70 51 4c 69 74 65 20 33 2e 30 2e 30 20 73 68 6f 77  QLite 3.0.0 show
12f80 65 64 0a 61 20 73 69 67 6e 69 66 69 63 61 6e 74  ed.a significant
12f90 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 68 69 74   performance hit
12fa0 20 69 6e 20 63 68 65 63 6b 73 75 6d 6d 69 6e 67   in checksumming
12fb0 20 74 68 65 20 65 6e 74 69 72 65 20 70 61 67 65   the entire page
12fc0 2e 3c 2f 70 3e 0a 0a 3c 70 3e 4c 65 74 20 74 68  .</p>..<p>Let th
12fd0 65 20 70 61 67 65 20 63 6f 75 6e 74 20 76 61 6c  e page count val
12fe0 75 65 20 61 74 20 6f 66 66 73 65 74 20 38 20 69  ue at offset 8 i
12ff0 6e 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20 68 65  n the journal he
13000 61 64 65 72 20 62 65 20 4d 2e 0a 5e 49 66 20 4d  ader be M..^If M
13010 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e   is greater than
13020 20 7a 65 72 6f 20 74 68 65 6e 20 61 66 74 65 72   zero then after
13030 20 4d 20 70 61 67 65 20 72 65 63 6f 72 64 73 20   M page records 
13040 74 68 65 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65  the journal file
13050 0a 6d 61 79 20 62 65 20 7a 65 72 6f 20 70 61 64  .may be zero pad
13060 64 65 64 20 6f 75 74 20 74 6f 20 74 68 65 20 6e  ded out to the n
13070 65 78 74 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20  ext multiple of 
13080 74 68 65 20 73 65 63 74 6f 72 20 73 69 7a 65 20  the sector size 
13090 61 6e 64 20 61 6e 6f 74 68 65 72 0a 6a 6f 75 72  and another.jour
130a0 6e 61 6c 20 68 65 61 64 65 72 20 6d 61 79 20 62  nal header may b
130b0 65 20 69 6e 73 65 72 74 65 64 2e 20 20 5e 41 6c  e inserted.  ^Al
130c0 6c 20 6a 6f 75 72 6e 61 6c 20 68 65 61 64 65 72  l journal header
130d0 73 20 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d  s within the sam
130e0 65 0a 6a 6f 75 72 6e 61 6c 20 6d 75 73 74 20 63  e.journal must c
130f0 6f 6e 74 61 69 6e 20 74 68 65 20 73 61 6d 65 20  ontain the same 
13100 64 61 74 61 62 61 73 65 20 70 61 67 65 20 73 69  database page si
13110 7a 65 20 61 6e 64 20 73 65 63 74 6f 72 20 73 69  ze and sector si
13120 7a 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20  ze.</p>..<p>^If 
13130 4d 20 69 73 20 2d 31 20 69 6e 20 74 68 65 20 69  M is -1 in the i
13140 6e 69 74 69 61 6c 20 6a 6f 75 72 6e 61 6c 20 68  nitial journal h
13150 65 61 64 65 72 2c 20 74 68 65 6e 20 74 68 65 20  eader, then the 
13160 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 20 72  number of page r
13170 65 63 6f 72 64 73 0a 74 68 61 74 20 66 6f 6c 6c  ecords.that foll
13180 6f 77 20 69 73 20 63 6f 6d 70 75 74 65 64 20 62  ow is computed b
13190 79 20 63 6f 6d 70 75 74 69 6e 67 20 68 6f 77 20  y computing how 
131a0 6d 61 6e 79 20 70 61 67 65 20 72 65 63 6f 72 64  many page record
131b0 73 20 77 69 6c 6c 20 66 69 74 20 69 6e 0a 74 68  s will fit in.th
131c0 65 20 61 76 61 69 6c 61 62 6c 65 20 73 70 61 63  e available spac
131d0 65 20 6f 66 20 74 68 65 20 72 65 6d 61 69 6e 64  e of the remaind
131e0 65 72 20 6f 66 20 74 68 65 20 6a 6f 75 72 6e 61  er of the journa
131f0 6c 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 74 63  l file.</p>..<tc
13200 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 77 61  l>hd_fragment wa
13210 6c 66 6f 72 6d 61 74 20 7b 57 41 4c 20 66 6f 72  lformat {WAL for
13220 6d 61 74 7d 3c 2f 74 63 6c 3e 0a 3c 68 31 3e 54  mat}</tcl>.<h1>T
13230 68 65 20 57 72 69 74 65 2d 41 68 65 61 64 20 4c  he Write-Ahead L
13240 6f 67 3c 2f 68 31 3e 0a 0a 3c 70 3e 42 65 67 69  og</h1>..<p>Begi
13250 6e 6e 69 6e 67 20 77 69 74 68 20 5b 76 65 72 73  nning with [vers
13260 69 6f 6e 20 33 2e 37 2e 30 5d 2c 20 53 51 4c 69  ion 3.7.0], SQLi
13270 74 65 20 73 75 70 70 6f 72 74 73 20 61 20 6e 65  te supports a ne
13280 77 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 63 6f  w transaction.co
13290 6e 74 72 6f 6c 20 6d 65 63 68 61 6e 69 73 6d 20  ntrol mechanism 
132a0 63 61 6c 6c 65 64 20 22 5b 57 41 4c 20 7c 20 77  called "[WAL | w
132b0 72 69 74 65 2d 61 68 65 61 64 20 6c 6f 67 5d 22  rite-ahead log]"
132c0 20 6f 72 20 22 5b 57 41 4c 5d 22 2e 0a 5e 57 68   or "[WAL]"..^Wh
132d0 65 6e 20 61 20 64 61 74 61 62 61 73 65 20 69 73  en a database is
132e0 20 69 6e 20 57 41 4c 20 6d 6f 64 65 2c 20 61 6c   in WAL mode, al
132f0 6c 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 74 6f  l connections to
13300 20 74 68 61 74 20 64 61 74 61 62 61 73 65 20 6d   that database m
13310 75 73 74 0a 75 73 65 20 74 68 65 20 57 41 4c 2e  ust.use the WAL.
13320 20 20 5e 41 20 70 61 72 74 69 63 75 6c 61 72 20    ^A particular 
13330 64 61 74 61 62 61 73 65 20 77 69 6c 6c 20 75 73  database will us
13340 65 20 65 69 74 68 65 72 20 61 20 72 6f 6c 6c 62  e either a rollb
13350 61 63 6b 20 6a 6f 75 72 6e 61 6c 0a 6f 72 20 61  ack journal.or a
13360 20 57 41 4c 2c 20 62 75 74 20 6e 6f 74 20 62 6f   WAL, but not bo
13370 74 68 20 61 74 20 74 68 65 20 73 61 6d 65 20 74  th at the same t
13380 69 6d 65 2e 0a 5e 54 68 65 20 57 41 4c 20 69 73  ime..^The WAL is
13390 20 61 6c 77 61 79 73 20 6c 6f 63 61 74 65 64 20   always located 
133a0 69 6e 20 74 68 65 20 73 61 6d 65 20 64 69 72 65  in the same dire
133b0 63 74 6f 72 79 20 61 73 20 74 68 65 20 64 61 74  ctory as the dat
133c0 61 62 61 73 65 0a 66 69 6c 65 20 61 6e 64 20 68  abase.file and h
133d0 61 73 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65  as the same name
133e0 20 61 73 20 74 68 65 20 64 61 74 61 62 61 73 65   as the database
133f0 20 66 69 6c 65 20 62 75 74 20 77 69 74 68 20 74   file but with t
13400 68 65 20 73 74 72 69 6e 67 0a 22 3c 74 74 3e 2d  he string."<tt>-
13410 77 61 6c 3c 2f 74 74 3e 22 20 61 70 70 65 6e 64  wal</tt>" append
13420 65 64 2e 3c 2f 70 3e 0a 0a 3c 68 32 3e 57 41 4c  ed.</p>..<h2>WAL
13430 20 46 69 6c 65 20 46 6f 72 6d 61 74 3c 2f 68 32   File Format</h2
13440 3e 0a 0a 3c 70 3e 41 20 57 41 4c 20 66 69 6c 65  >..<p>A WAL file
13450 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 68   consists of a h
13460 65 61 64 65 72 20 66 6f 6c 6c 6f 77 65 64 20 62  eader followed b
13470 79 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 22  y zero or more "
13480 66 72 61 6d 65 73 22 2e 0a 45 61 63 68 20 66 72  frames"..Each fr
13490 61 6d 65 20 72 65 63 6f 72 64 73 20 74 68 65 20  ame records the 
134a0 72 65 76 69 73 65 64 20 63 6f 6e 74 65 6e 74 20  revised content 
134b0 6f 66 20 61 20 73 69 6e 67 6c 65 20 70 61 67 65  of a single page
134c0 20 66 72 6f 6d 20 74 68 65 0a 64 61 74 61 62 61   from the.databa
134d0 73 65 20 66 69 6c 65 2e 20 20 41 6c 6c 20 63 68  se file.  All ch
134e0 61 6e 67 65 73 20 74 6f 20 74 68 65 20 64 61 74  anges to the dat
134f0 61 62 61 73 65 20 61 72 65 20 72 65 63 6f 72 64  abase are record
13500 65 64 20 62 79 20 77 72 69 74 69 6e 67 0a 66 72  ed by writing.fr
13510 61 6d 65 73 20 69 6e 74 6f 20 74 68 65 20 57 41  ames into the WA
13520 4c 2e 20 20 54 72 61 6e 73 61 63 74 69 6f 6e 73  L.  Transactions
13530 20 63 6f 6d 6d 69 74 20 77 68 65 6e 20 61 20 66   commit when a f
13540 72 61 6d 65 20 69 73 20 77 72 69 74 74 65 6e 20  rame is written 
13550 74 68 61 74 0a 63 6f 6e 74 61 69 6e 73 20 61 20  that.contains a 
13560 63 6f 6d 6d 69 74 20 6d 61 72 6b 65 72 2e 20 20  commit marker.  
13570 5e 41 20 73 69 6e 67 6c 65 20 57 41 4c 20 63 61  ^A single WAL ca
13580 6e 20 61 6e 64 20 75 73 75 61 6c 6c 79 20 64 6f  n and usually do
13590 65 73 20 72 65 63 6f 72 64 20 0a 6d 75 6c 74 69  es record .multi
135a0 70 6c 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 73  ple transactions
135b0 2e 20 20 50 65 72 69 6f 64 69 63 61 6c 6c 79 2c  .  Periodically,
135c0 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
135d0 74 68 65 20 57 41 4c 20 69 73 0a 74 72 61 6e 73  the WAL is.trans
135e0 66 65 72 72 65 64 20 62 61 63 6b 20 69 6e 74 6f  ferred back into
135f0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
13600 6c 65 20 69 6e 20 61 6e 20 6f 70 65 72 61 74 69  le in an operati
13610 6f 6e 20 63 61 6c 6c 65 64 20 61 0a 22 63 68 65  on called a."che
13620 63 6b 70 6f 69 6e 74 22 2e 3c 2f 70 3e 0a 0a 3c  ckpoint".</p>..<
13630 70 3e 5e 41 20 73 69 6e 67 6c 65 20 57 41 4c 20  p>^A single WAL 
13640 66 69 6c 65 20 63 61 6e 20 62 65 20 72 65 75 73  file can be reus
13650 65 64 20 6d 75 6c 74 69 70 6c 65 20 74 69 6d 65  ed multiple time
13660 73 2e 20 20 5e 49 6e 20 6f 74 68 65 72 20 77 6f  s.  ^In other wo
13670 72 64 73 2c 20 74 68 65 0a 57 41 4c 20 63 61 6e  rds, the.WAL can
13680 20 66 69 6c 6c 20 75 70 20 77 69 74 68 20 66 72   fill up with fr
13690 61 6d 65 73 20 61 6e 64 20 74 68 65 6e 20 62 65  ames and then be
136a0 20 63 68 65 63 6b 70 6f 69 6e 74 65 64 20 61 6e   checkpointed an
136b0 64 20 74 68 65 6e 20 6e 65 77 0a 66 72 61 6d 65  d then new.frame
136c0 73 20 63 61 6e 20 6f 76 65 72 77 72 69 74 65 20  s can overwrite 
136d0 74 68 65 20 6f 6c 64 20 6f 6e 65 73 2e 20 20 5e  the old ones.  ^
136e0 41 20 57 41 4c 20 61 6c 77 61 79 73 20 67 72 6f  A WAL always gro
136f0 77 73 20 66 72 6f 6d 20 62 65 67 69 6e 6e 69 6e  ws from beginnin
13700 67 0a 74 6f 77 61 72 64 20 74 68 65 20 65 6e 64  g.toward the end
13710 2e 20 20 43 68 65 63 6b 73 75 6d 73 20 61 6e 64  .  Checksums and
13720 20 63 6f 75 6e 74 65 72 73 20 61 74 74 61 63 68   counters attach
13730 65 64 20 74 6f 20 65 61 63 68 20 66 72 61 6d 65  ed to each frame
13740 20 61 72 65 0a 75 73 65 64 20 74 6f 20 64 65 74   are.used to det
13750 65 72 6d 69 6e 65 20 77 68 69 63 68 20 66 72 61  ermine which fra
13760 6d 65 73 20 77 69 74 68 69 6e 20 74 68 65 20 57  mes within the W
13770 41 4c 20 61 72 65 20 76 61 6c 69 64 20 61 6e 64  AL are valid and
13780 20 77 68 69 63 68 0a 61 72 65 20 6c 65 66 74 6f   which.are lefto
13790 76 65 72 73 20 66 72 6f 6d 20 70 72 69 6f 72 20  vers from prior 
137a0 63 68 65 63 6b 70 6f 69 6e 74 73 2e 3c 2f 70 3e  checkpoints.</p>
137b0 0a 0a 3c 70 3e 5e 28 54 68 65 20 57 41 4c 20 68  ..<p>^(The WAL h
137c0 65 61 64 65 72 20 69 73 20 33 32 20 62 79 74 65  eader is 32 byte
137d0 73 20 69 6e 20 73 69 7a 65 20 61 6e 64 20 63 6f  s in size and co
137e0 6e 73 69 73 74 73 20 6f 66 20 74 68 65 20 66 6f  nsists of the fo
137f0 6c 6c 6f 77 69 6e 67 20 65 69 67 68 74 0a 62 69  llowing eight.bi
13800 67 2d 65 6e 64 69 61 6e 20 33 32 2d 62 69 74 20  g-endian 32-bit 
13810 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  unsigned integer
13820 20 76 61 6c 75 65 73 3a 3c 2f 70 3e 0a 0a 3c 63   values:</p>..<c
13830 65 6e 74 65 72 3e 0a 3c 69 3e 57 41 4c 20 48 65  enter>.<i>WAL He
13840 61 64 65 72 20 46 6f 72 6d 61 74 3c 2f 69 3e 3c  ader Format</i><
13850 62 72 3e 0a 3c 74 61 62 6c 65 20 77 69 64 74 68  br>.<table width
13860 3d 22 38 30 25 22 20 62 6f 72 64 65 72 3d 31 3e  ="80%" border=1>
13870 0a 3c 74 72 3e 3c 74 68 3e 4f 66 66 73 65 74 3c  .<tr><th>Offset<
13880 74 68 3e 53 69 7a 65 3c 74 68 3e 44 65 73 63 72  th>Size<th>Descr
13890 69 70 74 69 6f 6e 0a 3c 74 72 3e 3c 74 64 20 76  iption.<tr><td v
138a0 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
138b0 63 65 6e 74 65 72 3e 30 3c 74 64 20 76 61 6c 69  center>0<td vali
138c0 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
138d0 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 4d 61  ter>4.    <td>Ma
138e0 67 69 63 20 6e 75 6d 62 65 72 2e 20 20 30 78 33  gic number.  0x3
138f0 37 37 66 30 36 38 32 20 6f 72 20 30 78 33 37 37  77f0682 or 0x377
13900 66 30 36 38 33 0a 3c 74 72 3e 3c 74 64 20 76 61  f0683.<tr><td va
13910 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
13920 65 6e 74 65 72 3e 34 3c 74 64 20 76 61 6c 69 67  enter>4<td valig
13930 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
13940 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 46 69 6c  er>4.    <td>Fil
13950 65 20 66 6f 72 6d 61 74 20 76 65 72 73 69 6f 6e  e format version
13960 2e 20 20 43 75 72 72 65 6e 74 6c 79 20 33 30 30  .  Currently 300
13970 37 30 30 30 2e 0a 3c 74 72 3e 3c 74 64 20 76 61  7000..<tr><td va
13980 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
13990 65 6e 74 65 72 3e 38 3c 74 64 20 76 61 6c 69 67  enter>8<td valig
139a0 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
139b0 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 44 61 74  er>4.    <td>Dat
139c0 61 62 61 73 65 20 70 61 67 65 20 73 69 7a 65 2e  abase page size.
139d0 20 20 45 78 61 6d 70 6c 65 3a 20 31 30 32 34 0a    Example: 1024.
139e0 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74  <tr><td valign=t
139f0 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
13a00 31 32 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  12<td valign=top
13a10 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a   align=center>4.
13a20 20 20 20 20 3c 74 64 3e 43 68 65 63 6b 70 6f 69      <td>Checkpoi
13a30 6e 74 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62  nt sequence numb
13a40 65 72 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  er.<tr><td valig
13a50 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
13a60 65 72 3e 31 36 3c 74 64 20 76 61 6c 69 67 6e 3d  er>16<td valign=
13a70 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
13a80 3e 34 0a 20 20 20 20 3c 74 64 3e 53 61 6c 74 2d  >4.    <td>Salt-
13a90 31 3a 20 72 61 6e 64 6f 6d 20 69 6e 74 65 67 65  1: random intege
13aa0 72 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 77 69  r incremented wi
13ab0 74 68 20 65 61 63 68 20 63 68 65 63 6b 70 6f 69  th each checkpoi
13ac0 6e 74 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  nt.<tr><td valig
13ad0 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
13ae0 65 72 3e 32 30 3c 74 64 20 76 61 6c 69 67 6e 3d  er>20<td valign=
13af0 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
13b00 3e 34 0a 20 20 20 20 3c 74 64 3e 53 61 6c 74 2d  >4.    <td>Salt-
13b10 32 3a 20 61 20 64 69 66 66 65 72 65 6e 74 20 72  2: a different r
13b20 61 6e 64 6f 6d 20 6e 75 6d 62 65 72 20 66 6f 72  andom number for
13b30 20 65 61 63 68 20 63 68 65 63 6b 70 6f 69 6e 74   each checkpoint
13b40 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d  .<tr><td valign=
13b50 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
13b60 3e 32 34 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  >24<td valign=to
13b70 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34  p align=center>4
13b80 0a 20 20 20 20 3c 74 64 3e 43 68 65 63 6b 73 75  .    <td>Checksu
13b90 6d 2d 31 3a 20 46 69 72 73 74 20 70 61 72 74 20  m-1: First part 
13ba0 6f 66 20 61 20 63 68 65 63 6b 73 75 6d 20 6f 6e  of a checksum on
13bb0 20 74 68 65 20 66 69 72 73 74 20 32 34 20 62 79   the first 24 by
13bc0 74 65 73 20 6f 66 20 68 65 61 64 65 72 0a 3c 74  tes of header.<t
13bd0 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
13be0 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32 38   align=center>28
13bf0 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
13c00 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20  lign=center>4.  
13c10 20 20 3c 74 64 3e 43 68 65 63 6b 73 75 6d 2d 32    <td>Checksum-2
13c20 3a 20 53 65 63 6f 6e 64 20 70 61 72 74 20 6f 66  : Second part of
13c30 20 74 68 65 20 63 68 65 63 6b 73 75 6d 20 6f 6e   the checksum on
13c40 20 74 68 65 20 66 69 72 73 74 20 32 34 20 62 79   the first 24 by
13c50 74 65 73 20 6f 66 20 68 65 61 64 65 72 0a 3c 2f  tes of header.</
13c60 74 61 62 6c 65 3e 0a 3c 2f 63 65 6e 74 65 72 3e  table>.</center>
13c70 29 5e 0a 0a 3c 70 3e 5e 49 6d 6d 65 64 69 61 74  )^..<p>^Immediat
13c80 65 6c 79 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68  ely following th
13c90 65 20 77 61 6c 2d 68 65 61 64 65 72 20 61 72 65  e wal-header are
13ca0 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 66 72   zero or more fr
13cb0 61 6d 65 73 2e 20 5e 45 61 63 68 0a 66 72 61 6d  ames. ^Each.fram
13cc0 65 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20  e consists of a 
13cd0 32 34 2d 62 79 74 65 20 66 72 61 6d 65 2d 68 65  24-byte frame-he
13ce0 61 64 65 72 20 66 6f 6c 6c 6f 77 65 64 20 62 79  ader followed by
13cf0 20 61 20 3c 69 3e 70 61 67 65 2d 73 69 7a 65 3c   a <i>page-size<
13d00 2f 69 3e 20 62 79 74 65 73 0a 6f 66 20 70 61 67  /i> bytes.of pag
13d10 65 20 64 61 74 61 2e 20 5e 28 54 68 65 20 66 72  e data. ^(The fr
13d20 61 6d 65 2d 68 65 61 64 65 72 20 69 73 20 73 69  ame-header is si
13d30 78 20 62 69 67 2d 65 6e 64 69 61 6e 20 33 32 2d  x big-endian 32-
13d40 62 69 74 20 75 6e 73 69 67 6e 65 64 20 0a 69 6e  bit unsigned .in
13d50 74 65 67 65 72 20 76 61 6c 75 65 73 2c 20 61 73  teger values, as
13d60 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 63 65 6e 74   follows:..<cent
13d70 65 72 3e 0a 3c 69 3e 57 41 4c 20 46 72 61 6d 65  er>.<i>WAL Frame
13d80 20 48 65 61 64 65 72 20 46 6f 72 6d 61 74 3c 2f   Header Format</
13d90 69 3e 3c 62 72 3e 0a 3c 74 61 62 6c 65 20 77 69  i><br>.<table wi
13da0 64 74 68 3d 22 38 30 25 22 20 62 6f 72 64 65 72  dth="80%" border
13db0 3d 31 3e 0a 3c 74 72 3e 3c 74 68 3e 4f 66 66 73  =1>.<tr><th>Offs
13dc0 65 74 3c 74 68 3e 53 69 7a 65 3c 74 68 3e 44 65  et<th>Size<th>De
13dd0 73 63 72 69 70 74 69 6f 6e 0a 3c 74 72 3e 3c 74  scription.<tr><t
13de0 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
13df0 67 6e 3d 63 65 6e 74 65 72 3e 30 3c 74 64 20 76  gn=center>0<td v
13e00 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
13e10 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64  center>4.    <td
13e20 3e 50 61 67 65 20 6e 75 6d 62 65 72 0a 3c 74 72  >Page number.<tr
13e30 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
13e40 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 3c 74  align=center>4<t
13e50 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
13e60 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20  gn=center>4.    
13e70 3c 74 64 3e 46 6f 72 20 63 6f 6d 6d 69 74 20 72  <td>For commit r
13e80 65 63 6f 72 64 73 2c 20 74 68 65 20 73 69 7a 65  ecords, the size
13e90 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
13ea0 20 66 69 6c 65 20 69 6e 20 70 61 67 65 73 0a 20   file in pages. 
13eb0 20 20 20 20 20 20 20 61 66 74 65 72 20 74 68 65         after the
13ec0 20 63 6f 6d 6d 69 74 2e 20 20 46 6f 72 20 61 6c   commit.  For al
13ed0 6c 20 6f 74 68 65 72 20 72 65 63 6f 72 64 73 2c  l other records,
13ee0 20 7a 65 72 6f 2e 0a 3c 74 72 3e 3c 74 64 20 76   zero..<tr><td v
13ef0 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
13f00 63 65 6e 74 65 72 3e 38 3c 74 64 20 76 61 6c 69  center>8<td vali
13f10 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
13f20 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 53 61  ter>4.    <td>Sa
13f30 6c 74 2d 31 20 63 6f 70 69 65 64 20 66 72 6f 6d  lt-1 copied from
13f40 20 74 68 65 20 57 41 4c 20 68 65 61 64 65 72 0a   the WAL header.
13f50 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74  <tr><td valign=t
13f60 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
13f70 31 32 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  12<td valign=top
13f80 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a   align=center>4.
13f90 20 20 20 20 3c 74 64 3e 53 61 6c 74 2d 32 20 63      <td>Salt-2 c
13fa0 6f 70 69 65 64 20 66 72 6f 6d 20 74 68 65 20 57  opied from the W
13fb0 41 4c 20 68 65 61 64 65 72 0a 3c 74 72 3e 3c 74  AL header.<tr><t
13fc0 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
13fd0 67 6e 3d 63 65 6e 74 65 72 3e 31 36 3c 74 64 20  gn=center>16<td 
13fe0 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
13ff0 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74  =center>4.    <t
14000 64 3e 43 68 65 63 6b 73 75 6d 2d 31 3a 20 20 43  d>Checksum-1:  C
14010 75 6d 75 6c 61 74 69 76 65 20 63 68 65 63 6b 73  umulative checks
14020 75 6d 20 75 70 20 74 68 72 6f 75 67 68 20 61 6e  um up through an
14030 64 20 69 6e 63 6c 75 64 69 6e 67 20 74 68 69 73  d including this
14040 20 70 61 67 65 0a 3c 74 72 3e 3c 74 64 20 76 61   page.<tr><td va
14050 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
14060 65 6e 74 65 72 3e 32 30 3c 74 64 20 76 61 6c 69  enter>20<td vali
14070 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
14080 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 43 68  ter>4.    <td>Ch
14090 65 63 6b 73 75 6d 2d 32 3a 20 20 53 65 63 6f 6e  ecksum-2:  Secon
140a0 64 20 68 61 6c 66 20 6f 66 20 74 68 65 20 63 75  d half of the cu
140b0 6d 75 6c 61 74 69 76 65 20 63 68 65 63 6b 73 75  mulative checksu
140c0 6d 2e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 63 65  m..</table>.</ce
140d0 6e 74 65 72 3e 29 5e 0a 0a 5e 28 3c 70 3e 41 20  nter>)^..^(<p>A 
140e0 66 72 61 6d 65 20 69 73 20 63 6f 6e 73 69 64 65  frame is conside
140f0 72 65 64 20 76 61 6c 69 64 20 69 66 20 61 6e 64  red valid if and
14100 20 6f 6e 6c 79 20 69 66 20 74 68 65 20 66 6f 6c   only if the fol
14110 6c 6f 77 69 6e 67 20 63 6f 6e 64 69 74 69 6f 6e  lowing condition
14120 73 20 61 72 65 0a 74 72 75 65 3a 3c 2f 70 3e 0a  s are.true:</p>.
14130 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 3c 70 3e 54 68 65  .<ol>.<li><p>The
14140 20 73 61 6c 74 2d 31 20 61 6e 64 20 73 61 6c 74   salt-1 and salt
14150 2d 32 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65  -2 values in the
14160 20 66 72 61 6d 65 2d 68 65 61 64 65 72 20 6d 61   frame-header ma
14170 74 63 68 0a 20 20 20 20 20 20 20 73 61 6c 74 20  tch.       salt 
14180 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 77 61  values in the wa
14190 6c 2d 68 65 61 64 65 72 3c 2f 70 3e 3c 2f 6c 69  l-header</p></li
141a0 3e 0a 0a 3c 6c 69 3e 3c 70 3e 54 68 65 20 63 68  >..<li><p>The ch
141b0 65 63 6b 73 75 6d 20 76 61 6c 75 65 73 20 69 6e  ecksum values in
141c0 20 74 68 65 20 66 69 6e 61 6c 20 38 20 62 79 74   the final 8 byt
141d0 65 73 20 6f 66 20 74 68 65 20 66 72 61 6d 65 2d  es of the frame-
141e0 68 65 61 64 65 72 0a 20 20 20 20 20 20 20 65 78  header.       ex
141f0 61 63 74 6c 79 20 6d 61 74 63 68 20 74 68 65 20  actly match the 
14200 63 68 65 63 6b 73 75 6d 20 63 6f 6d 70 75 74 65  checksum compute
14210 64 20 63 6f 6e 73 65 63 75 74 69 76 65 6c 79 20  d consecutively 
14220 6f 6e 20 74 68 65 0a 20 20 20 20 20 20 20 66 69  on the.       fi
14230 72 73 74 20 32 34 20 62 79 74 65 73 20 6f 66 20  rst 24 bytes of 
14240 74 68 65 20 57 41 4c 20 68 65 61 64 65 72 20 61  the WAL header a
14250 6e 64 20 74 68 65 20 66 69 72 73 74 20 38 20 62  nd the first 8 b
14260 79 74 65 73 20 61 6e 64 0a 20 20 20 20 20 20 20  ytes and.       
14270 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61  the content of a
14280 6c 6c 20 66 72 61 6d 65 73 0a 20 20 20 20 20 20  ll frames.      
14290 20 75 70 20 74 6f 20 61 6e 64 20 69 6e 63 6c 75   up to and inclu
142a0 64 69 6e 67 20 74 68 65 20 63 75 72 72 65 6e 74  ding the current
142b0 20 66 72 61 6d 65 2e 3c 2f 70 3e 3c 2f 6c 69 3e   frame.</p></li>
142c0 3c 2f 6c 69 3e 0a 3c 2f 6f 6c 3e 29 5e 0a 0a 3c  </li>.</ol>)^..<
142d0 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
142e0 77 61 6c 63 6b 73 6d 20 7b 57 41 4c 20 63 68 65  walcksm {WAL che
142f0 63 6b 73 75 6d 20 61 6c 67 6f 72 69 74 68 6d 7d  cksum algorithm}
14300 3c 2f 74 63 6c 3e 0a 3c 68 32 3e 43 68 65 63 6b  </tcl>.<h2>Check
14310 73 75 6d 20 41 6c 67 6f 72 69 74 68 6d 3c 2f 68  sum Algorithm</h
14320 32 3e 0a 0a 3c 70 3e 54 68 65 20 63 68 65 63 6b  2>..<p>The check
14330 73 75 6d 20 69 73 20 63 6f 6d 70 75 74 65 64 20  sum is computed 
14340 62 79 20 69 6e 74 65 72 70 72 65 74 69 6e 67 20  by interpreting 
14350 74 68 65 20 69 6e 70 75 74 20 61 73 0a 61 6e 20  the input as.an 
14360 65 76 65 6e 20 6e 75 6d 62 65 72 20 6f 66 20 75  even number of u
14370 6e 73 69 67 6e 65 64 20 33 32 2d 62 69 74 20 69  nsigned 32-bit i
14380 6e 74 65 67 65 72 73 3a 20 78 28 30 29 20 74 68  ntegers: x(0) th
14390 72 6f 75 67 68 20 78 28 4e 29 2e 0a 5e 54 68 65  rough x(N)..^The
143a0 20 33 32 2d 62 69 74 20 69 6e 74 65 67 65 72 73   32-bit integers
143b0 20 61 72 65 20 62 69 67 2d 65 6e 64 69 61 6e 20   are big-endian 
143c0 69 66 20 74 68 65 0a 6d 61 67 69 63 20 6e 75 6d  if the.magic num
143d0 62 65 72 20 69 6e 20 74 68 65 20 66 69 72 73 74  ber in the first
143e0 20 34 20 62 79 74 65 73 20 6f 66 20 74 68 65 20   4 bytes of the 
143f0 57 41 4c 20 68 65 61 64 65 72 20 69 73 20 30 78  WAL header is 0x
14400 33 37 37 66 30 36 38 33 20 61 6e 64 0a 74 68 65  377f0683 and.the
14410 20 69 6e 74 65 67 65 72 73 20 61 72 65 20 6c 69   integers are li
14420 74 74 6c 65 2d 65 6e 64 69 61 6e 20 69 66 20 74  ttle-endian if t
14430 68 65 20 6d 61 67 69 63 20 6e 75 6d 62 65 72 20  he magic number 
14440 69 73 20 30 78 33 37 37 66 30 36 38 32 2e 0a 5e  is 0x377f0682..^
14450 54 68 65 20 63 68 65 63 6b 73 75 6d 20 76 61 6c  The checksum val
14460 75 65 73 20 61 72 65 20 61 6c 77 61 79 73 20 73  ues are always s
14470 74 6f 72 65 64 20 69 6e 20 74 68 65 20 66 72 61  tored in the fra
14480 6d 65 20 68 65 61 64 65 72 20 69 6e 20 61 0a 62  me header in a.b
14490 69 67 2d 65 6e 64 69 61 6e 20 66 6f 72 6d 61 74  ig-endian format
144a0 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77   regardless of w
144b0 68 69 63 68 20 62 79 74 65 20 6f 72 64 65 72 20  hich byte order 
144c0 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6d 70 75  is used to compu
144d0 74 65 0a 74 68 65 20 63 68 65 63 6b 73 75 6d 2e  te.the checksum.
144e0 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 63 68 65  </p>..<p>The che
144f0 63 6b 73 75 6d 20 61 6c 67 6f 72 69 74 68 6d 20  cksum algorithm 
14500 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 63  only works for c
14510 6f 6e 74 65 6e 74 20 77 68 69 63 68 20 69 73 20  ontent which is 
14520 61 20 6d 75 6c 74 69 70 6c 65 20 6f 66 0a 38 20  a multiple of.8 
14530 62 79 74 65 73 20 69 6e 20 6c 65 6e 67 74 68 2e  bytes in length.
14540 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
14550 2c 20 69 66 20 74 68 65 20 69 6e 70 75 74 73 20  , if the inputs 
14560 61 72 65 20 78 28 30 29 20 74 68 72 6f 75 67 68  are x(0) through
14570 20 78 28 4e 29 0a 74 68 65 6e 20 4e 20 6d 75 73   x(N).then N mus
14580 74 20 62 65 20 6f 64 64 2e 0a 5e 28 54 68 65 20  t be odd..^(The 
14590 63 68 65 63 6b 73 75 6d 20 61 6c 67 6f 72 69 74  checksum algorit
145a0 68 6d 20 69 73 20 61 73 20 66 6f 6c 6c 6f 77 73  hm is as follows
145b0 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c  :..<blockquote><
145c0 70 72 65 3e 20 0a 73 30 20 3d 20 73 31 20 3d 20  pre> .s0 = s1 = 
145d0 30 0a 66 6f 72 20 69 20 66 72 6f 6d 20 30 20 74  0.for i from 0 t
145e0 6f 20 6e 2d 31 20 73 74 65 70 20 32 3a 0a 20 20  o n-1 step 2:.  
145f0 20 73 30 20 2b 3d 20 78 28 69 29 20 2b 20 73 31   s0 += x(i) + s1
14600 3b 0a 20 20 20 73 31 20 2b 3d 20 78 28 69 2b 31  ;.   s1 += x(i+1
14610 29 20 2b 20 73 30 3b 0a 65 6e 64 66 6f 72 0a 23  ) + s0;.endfor.#
14620 20 72 65 73 75 6c 74 20 69 6e 20 73 30 20 61 6e   result in s0 an
14630 64 20 73 31 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f  d s1.</pre></blo
14640 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 5e  ckquote>)^..<p>^
14650 54 68 65 20 6f 75 74 70 75 74 73 20 73 30 20 61  The outputs s0 a
14660 6e 64 20 73 31 20 61 72 65 20 62 6f 74 68 20 77  nd s1 are both w
14670 65 69 67 68 74 65 64 20 63 68 65 63 6b 73 75 6d  eighted checksum
14680 73 20 75 73 69 6e 67 20 46 69 62 6f 6e 61 63 63  s using Fibonacc
14690 69 20 77 65 69 67 68 74 73 0a 69 6e 20 72 65 76  i weights.in rev
146a0 65 72 73 65 20 6f 72 64 65 72 2e 20 20 28 5e 54  erse order.  (^T
146b0 68 65 20 6c 61 72 67 65 73 74 20 46 69 62 6f 6e  he largest Fibon
146c0 61 63 63 69 20 77 65 69 67 68 74 20 6f 63 63 75  acci weight occu
146d0 72 73 20 6f 6e 20 74 68 65 20 66 69 72 73 74 20  rs on the first 
146e0 65 6c 65 6d 65 6e 74 0a 6f 66 20 74 68 65 20 73  element.of the s
146f0 65 71 75 65 6e 63 65 20 62 65 69 6e 67 20 73 75  equence being su
14700 6d 6d 65 64 2e 29 20 20 5e 54 68 65 20 73 31 20  mmed.)  ^The s1 
14710 76 61 6c 75 65 20 73 70 61 6e 73 20 61 6c 6c 20  value spans all 
14720 33 32 2d 62 69 74 20 69 6e 74 65 67 65 72 0a 74  32-bit integer.t
14730 65 72 6d 73 20 6f 66 20 74 68 65 20 73 65 71 75  erms of the sequ
14740 65 6e 63 65 20 77 68 65 72 65 61 73 20 73 30 20  ence whereas s0 
14750 6f 6d 69 74 73 20 74 68 65 20 66 69 6e 61 6c 20  omits the final 
14760 74 65 72 6d 2e 3c 2f 70 3e 0a 0a 3c 68 32 3e 43  term.</p>..<h2>C
14770 68 65 63 6b 70 6f 69 6e 74 20 41 6c 67 6f 72 69  heckpoint Algori
14780 74 68 6d 3c 2f 68 32 3e 0a 0a 3c 70 3e 5e 4f 6e  thm</h2>..<p>^On
14790 20 61 20 5b 63 68 65 63 6b 70 6f 69 6e 74 5d 2c   a [checkpoint],
147a0 20 74 68 65 20 57 41 4c 20 69 73 20 66 69 72 73   the WAL is firs
147b0 74 20 66 6c 75 73 68 65 64 20 74 6f 20 70 65 72  t flushed to per
147c0 73 69 73 74 65 6e 74 20 73 74 6f 72 61 67 65 20  sistent storage 
147d0 75 73 69 6e 67 0a 74 68 65 20 78 53 79 6e 63 20  using.the xSync 
147e0 6d 65 74 68 6f 64 20 6f 66 20 74 68 65 20 5b 73  method of the [s
147f0 71 6c 69 74 65 33 5f 69 6f 5f 6d 65 74 68 6f 64  qlite3_io_method
14800 73 20 7c 20 56 46 53 5d 2e 20 0a 5e 54 68 65 6e  s | VFS]. .^Then
14810 20 76 61 6c 69 64 20 63 6f 6e 74 65 6e 74 20 6f   valid content o
14820 66 20 74 68 65 20 57 41 4c 20 69 73 20 74 72 61  f the WAL is tra
14830 6e 73 66 65 72 72 65 64 20 69 6e 74 6f 20 74 68  nsferred into th
14840 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  e database file.
14850 0a 5e 46 69 6e 61 6c 6c 79 2c 20 74 68 65 20 64  .^Finally, the d
14860 61 74 61 62 61 73 65 20 69 73 20 66 6c 75 73 68  atabase is flush
14870 65 64 20 74 6f 20 70 65 72 73 69 73 74 65 6e 74  ed to persistent
14880 20 73 74 6f 72 61 67 65 20 75 73 69 6e 67 20 61   storage using a
14890 6e 6f 74 68 65 72 0a 78 53 79 6e 63 20 6d 65 74  nother.xSync met
148a0 68 6f 64 20 63 61 6c 6c 2e 0a 54 68 65 20 78 53  hod call..The xS
148b0 79 6e 63 20 6f 70 65 72 61 74 69 6f 6e 73 20 73  ync operations s
148c0 65 72 76 65 20 61 73 20 77 72 69 74 65 20 62 61  erve as write ba
148d0 72 72 69 65 72 73 20 2d 20 61 6c 6c 20 77 72 69  rriers - all wri
148e0 74 65 73 20 6c 61 75 6e 63 68 65 64 0a 62 65 66  tes launched.bef
148f0 6f 72 65 20 74 68 65 20 78 53 79 6e 63 20 6d 75  ore the xSync mu
14900 73 74 20 63 6f 6d 70 6c 65 74 65 20 62 65 66 6f  st complete befo
14910 72 65 20 61 6e 79 20 77 72 69 74 65 20 74 68 61  re any write tha
14920 74 20 6c 61 75 6e 63 68 65 73 20 61 66 74 65 72  t launches after
14930 20 74 68 65 0a 78 53 79 6e 63 20 62 65 67 69 6e   the.xSync begin
14940 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 66 74 65  s.</p>..<p>^Afte
14950 72 20 61 20 63 68 65 63 6b 70 6f 69 6e 74 2c 20  r a checkpoint, 
14960 6e 65 77 20 77 72 69 74 65 20 74 72 61 6e 73 61  new write transa
14970 63 74 69 6f 6e 73 20 6f 76 65 72 77 72 69 74 65  ctions overwrite
14980 0a 74 68 65 20 57 41 4c 20 66 69 6c 65 20 66 72  .the WAL file fr
14990 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  om the beginning
149a0 2e 20 20 5e 41 74 20 74 68 65 20 73 74 61 72 74  .  ^At the start
149b0 20 6f 66 20 74 68 65 20 66 69 72 73 74 20 6e 65   of the first ne
149c0 77 0a 77 72 69 74 65 20 74 72 61 6e 73 61 63 74  w.write transact
149d0 69 6f 6e 2c 20 74 68 65 20 57 41 4c 20 68 65 61  ion, the WAL hea
149e0 64 65 72 20 73 61 6c 74 2d 31 20 76 61 6c 75 65  der salt-1 value
149f0 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 0a   is incremented.
14a00 61 6e 64 20 74 68 65 20 73 61 6c 74 2d 32 20 76  and the salt-2 v
14a10 61 6c 75 65 20 69 73 20 72 61 6e 64 6f 6d 69 7a  alue is randomiz
14a20 65 64 2e 20 20 54 68 65 73 65 20 63 68 61 6e 67  ed.  These chang
14a30 65 73 20 74 6f 20 74 68 65 20 73 61 6c 74 73 20  es to the salts 
14a40 69 6e 76 61 6c 69 64 61 74 65 0a 6f 6c 64 20 66  invalidate.old f
14a50 72 61 6d 65 73 20 69 6e 20 74 68 65 20 57 41 4c  rames in the WAL
14a60 20 74 68 61 74 20 68 61 76 65 20 61 6c 72 65 61   that have alrea
14a70 64 79 20 62 65 65 6e 20 63 68 65 63 6b 70 6f 69  dy been checkpoi
14a80 6e 74 65 64 20 62 75 74 20 6e 6f 74 20 79 65 74  nted but not yet
14a90 0a 6f 76 65 72 77 72 69 74 74 65 6e 2c 20 61 6e  .overwritten, an
14aa0 64 20 70 72 65 76 65 6e 74 20 74 68 65 6d 20 66  d prevent them f
14ab0 72 6f 6d 20 62 65 69 6e 67 20 63 68 65 63 6b 70  rom being checkp
14ac0 6f 69 6e 74 65 64 20 61 67 61 69 6e 2e 3c 2f 70  ointed again.</p
14ad0 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
14ae0 65 6e 74 20 77 61 6c 72 65 61 64 20 7b 57 41 4c  ent walread {WAL
14af0 20 72 65 61 64 20 61 6c 67 6f 72 69 74 68 6d 7d   read algorithm}
14b00 3c 2f 74 63 6c 3e 0a 3c 68 32 3e 52 65 61 64 65  </tcl>.<h2>Reade
14b10 72 20 41 6c 67 6f 72 69 74 68 6d 3c 2f 68 32 3e  r Algorithm</h2>
14b20 0a 0a 3c 70 3e 5e 28 54 6f 20 72 65 61 64 20 61  ..<p>^(To read a
14b30 20 70 61 67 65 20 66 72 6f 6d 20 74 68 65 20 64   page from the d
14b40 61 74 61 62 61 73 65 20 28 63 61 6c 6c 20 69 74  atabase (call it
14b50 20 70 61 67 65 20 6e 75 6d 62 65 72 20 50 29 2c   page number P),
14b60 20 61 20 72 65 61 64 65 72 0a 66 69 72 73 74 20   a reader.first 
14b70 63 68 65 63 6b 73 20 74 68 65 20 57 41 4c 20 74  checks the WAL t
14b80 6f 20 73 65 65 20 69 66 20 69 74 20 63 6f 6e 74  o see if it cont
14b90 61 69 6e 73 20 70 61 67 65 20 50 2e 20 20 49 66  ains page P.  If
14ba0 20 73 6f 2c 20 74 68 65 6e 20 74 68 65 0a 6c 61   so, then the.la
14bb0 73 74 20 76 61 6c 69 64 20 69 6e 73 74 61 6e 63  st valid instanc
14bc0 65 20 6f 66 20 70 61 67 65 20 50 20 74 68 61 74  e of page P that
14bd0 20 69 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20   is followed by 
14be0 61 20 63 6f 6d 6d 69 74 20 66 72 61 6d 65 0a 6f  a commit frame.o
14bf0 72 20 69 73 20 61 20 63 6f 6d 6d 69 74 20 66 72  r is a commit fr
14c00 61 6d 65 20 69 74 73 65 6c 66 20 62 65 63 6f 6d  ame itself becom
14c10 65 73 20 74 68 65 20 76 61 6c 75 65 20 72 65 61  es the value rea
14c20 64 2e 29 5e 20 20 5e 49 66 20 74 68 65 20 57 41  d.)^  ^If the WA
14c30 4c 0a 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 63 6f  L.contains no co
14c40 70 69 65 73 20 6f 66 20 70 61 67 65 20 50 20 74  pies of page P t
14c50 68 61 74 20 61 72 65 20 76 61 6c 69 64 20 61 6e  hat are valid an
14c60 64 20 77 68 69 63 68 20 61 72 65 20 61 20 63 6f  d which are a co
14c70 6d 6d 69 74 0a 66 72 61 6d 65 20 6f 72 20 61 72  mmit.frame or ar
14c80 65 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20  e followed by a 
14c90 63 6f 6d 6d 69 74 20 66 72 61 6d 65 2c 20 74 68  commit frame, th
14ca0 65 6e 20 70 61 67 65 20 50 20 69 73 20 72 65 61  en page P is rea
14cb0 64 20 66 72 6f 6d 0a 74 68 65 20 64 61 74 61 62  d from.the datab
14cc0 61 73 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c  ase file.</p>..<
14cd0 70 3e 54 6f 20 73 74 61 72 74 20 61 20 72 65 61  p>To start a rea
14ce0 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74  d transaction, t
14cf0 68 65 20 72 65 61 64 65 72 20 72 65 63 6f 72 64  he reader record
14d00 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74  s the index of t
14d10 68 65 20 6c 61 73 74 0a 76 61 6c 69 64 20 66 72  he last.valid fr
14d20 61 6d 65 20 69 6e 20 74 68 65 20 57 41 4c 2e 20  ame in the WAL. 
14d30 20 54 68 65 20 72 65 61 64 65 72 20 75 73 65 73   The reader uses
14d40 20 74 68 69 73 20 72 65 63 6f 72 64 65 64 20 22   this recorded "
14d50 6d 78 46 72 61 6d 65 22 20 76 61 6c 75 65 0a 66  mxFrame" value.f
14d60 6f 72 20 61 6c 6c 20 73 75 62 73 65 71 75 65 6e  or all subsequen
14d70 74 20 72 65 61 64 20 6f 70 65 72 61 74 69 6f 6e  t read operation
14d80 73 2e 20 20 4e 65 77 20 74 72 61 6e 73 61 63 74  s.  New transact
14d90 69 6f 6e 73 20 63 61 6e 20 62 65 20 61 70 70 65  ions can be appe
14da0 6e 64 65 64 0a 74 6f 20 74 68 65 20 57 41 4c 2c  nded.to the WAL,
14db0 20 62 75 74 20 61 73 20 6c 6f 6e 67 20 61 73 20   but as long as 
14dc0 74 68 65 20 72 65 61 64 65 72 20 75 73 65 73 20  the reader uses 
14dd0 69 74 73 20 6f 72 69 67 69 6e 61 6c 20 6d 78 46  its original mxF
14de0 72 61 6d 65 20 76 61 6c 75 65 0a 61 6e 64 20 69  rame value.and i
14df0 67 6e 6f 72 65 73 20 73 75 62 73 65 71 75 65 6e  gnores subsequen
14e00 74 6c 79 20 61 70 70 65 6e 64 65 64 20 63 6f 6e  tly appended con
14e10 74 65 6e 74 2c 20 74 68 65 20 72 65 61 64 65 72  tent, the reader
14e20 20 77 69 6c 6c 20 73 65 65 20 61 20 0a 63 6f 6e   will see a .con
14e30 73 69 73 74 65 6e 74 20 73 6e 61 70 73 68 6f 74  sistent snapshot
14e40 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
14e50 20 66 72 6f 6d 20 61 20 73 69 6e 67 6c 65 20 70   from a single p
14e60 6f 69 6e 74 20 69 6e 20 74 69 6d 65 2e 20 20 0a  oint in time.  .
14e70 5e 54 68 69 73 20 74 65 63 68 6e 69 71 75 65 20  ^This technique 
14e80 61 6c 6c 6f 77 73 20 6d 75 6c 74 69 70 6c 65 20  allows multiple 
14e90 63 6f 6e 63 75 72 72 65 6e 74 20 72 65 61 64 65  concurrent reade
14ea0 72 73 20 74 6f 20 76 69 65 77 20 64 69 66 66 65  rs to view diffe
14eb0 72 65 6e 74 20 0a 76 65 72 73 69 6f 6e 73 20 6f  rent .versions o
14ec0 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63  f the database c
14ed0 6f 6e 74 65 6e 74 20 73 69 6d 75 6c 74 61 6e 65  ontent simultane
14ee0 6f 75 73 6c 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54  ously.</p>..<p>T
14ef0 68 65 20 72 65 61 64 65 72 20 61 6c 67 6f 72 69  he reader algori
14f00 74 68 6d 20 69 6e 20 74 68 65 20 70 72 65 76 69  thm in the previ
14f10 6f 75 73 20 70 61 72 61 67 72 61 70 68 73 20 77  ous paragraphs w
14f20 6f 72 6b 73 20 63 6f 72 72 65 63 74 6c 79 2c 20  orks correctly, 
14f30 62 75 74 20 0a 62 65 63 61 75 73 65 20 66 72 61  but .because fra
14f40 6d 65 73 20 66 6f 72 20 70 61 67 65 20 50 20 63  mes for page P c
14f50 61 6e 20 61 70 70 65 61 72 20 61 6e 79 77 68 65  an appear anywhe
14f60 72 65 20 77 69 74 68 69 6e 20 74 68 65 20 57 41  re within the WA
14f70 4c 2c 20 74 68 65 0a 72 65 61 64 65 72 20 68 61  L, the.reader ha
14f80 73 20 74 6f 20 73 63 61 6e 20 74 68 65 20 65 6e  s to scan the en
14f90 74 69 72 65 20 57 41 4c 20 6c 6f 6f 6b 69 6e 67  tire WAL looking
14fa0 20 66 6f 72 20 70 61 67 65 20 50 20 66 72 61 6d   for page P fram
14fb0 65 73 2e 20 20 49 66 20 74 68 65 0a 57 41 4c 20  es.  If the.WAL 
14fc0 69 73 20 6c 61 72 67 65 20 28 6d 75 6c 74 69 70  is large (multip
14fd0 6c 65 20 6d 65 67 61 62 79 74 65 73 20 69 73 20  le megabytes is 
14fe0 74 79 70 69 63 61 6c 29 20 74 68 61 74 20 73 63  typical) that sc
14ff0 61 6e 20 63 61 6e 20 62 65 20 73 6c 6f 77 2c 0a  an can be slow,.
15000 61 6e 64 20 72 65 61 64 20 70 65 72 66 6f 72 6d  and read perform
15010 61 6e 63 65 20 73 75 66 66 65 72 73 2e 20 20 5e  ance suffers.  ^
15020 54 6f 20 6f 76 65 72 63 6f 6d 65 20 74 68 69 73  To overcome this
15030 20 70 72 6f 62 6c 65 6d 2c 20 61 20 73 65 70 61   problem, a sepa
15040 72 61 74 65 0a 64 61 74 61 20 73 74 72 75 63 74  rate.data struct
15050 75 72 65 20 63 61 6c 6c 65 64 20 74 68 65 20 77  ure called the w
15060 61 6c 2d 69 6e 64 65 78 20 69 73 20 6d 61 69 6e  al-index is main
15070 74 61 69 6e 65 64 20 74 6f 20 65 78 70 65 64 69  tained to expedi
15080 74 65 20 74 68 65 0a 73 65 61 72 63 68 20 66 6f  te the.search fo
15090 72 20 66 72 61 6d 65 73 20 6f 66 20 61 20 70 61  r frames of a pa
150a0 72 74 69 63 75 6c 61 72 20 70 61 67 65 2e 3c 2f  rticular page.</
150b0 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
150c0 6d 65 6e 74 20 77 61 6c 69 6e 64 65 78 66 6f 72  ment walindexfor
150d0 6d 61 74 20 7b 77 61 6c 2d 69 6e 64 65 78 7d 20  mat {wal-index} 
150e0 7b 57 41 4c 2d 69 6e 64 65 78 20 66 6f 72 6d 61  {WAL-index forma
150f0 74 7d 3c 2f 74 63 6c 3e 0a 3c 68 32 3e 57 41 4c  t}</tcl>.<h2>WAL
15100 2d 49 6e 64 65 78 20 46 6f 72 6d 61 74 3c 2f 68  -Index Format</h
15110 32 3e 0a 0a 3c 70 3e 43 6f 6e 63 65 70 74 75 61  2>..<p>Conceptua
15120 6c 6c 79 2c 20 74 68 65 20 77 61 6c 2d 69 6e 64  lly, the wal-ind
15130 65 78 20 69 73 20 73 68 61 72 65 64 20 6d 65 6d  ex is shared mem
15140 6f 72 79 2c 20 74 68 6f 75 67 68 20 74 68 65 20  ory, though the 
15150 63 75 72 72 65 6e 74 0a 56 46 53 20 69 6d 70 6c  current.VFS impl
15160 65 6d 65 6e 74 61 74 69 6f 6e 73 20 75 73 65 20  ementations use 
15170 61 20 6d 6d 61 70 70 65 64 20 66 69 6c 65 20 66  a mmapped file f
15180 6f 72 20 74 68 65 20 77 61 6c 2d 69 6e 64 65 78  or the wal-index
15190 2e 20 20 5e 54 68 65 20 6d 6d 61 70 70 65 64 0a  .  ^The mmapped.
151a0 66 69 6c 65 20 69 73 20 69 6e 20 74 68 65 20 73  file is in the s
151b0 61 6d 65 20 64 69 72 65 63 74 6f 72 79 20 61 73  ame directory as
151c0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61 6e   the database an
151d0 64 20 68 61 73 20 74 68 65 20 73 61 6d 65 20 6e  d has the same n
151e0 61 6d 65 0a 61 73 20 74 68 65 20 64 61 74 61 62  ame.as the datab
151f0 61 73 65 20 77 69 74 68 20 61 20 22 3c 74 74 3e  ase with a "<tt>
15200 2d 73 68 6d 3c 2f 74 74 3e 22 20 73 75 66 66 69  -shm</tt>" suffi
15210 78 20 61 70 70 65 6e 64 65 64 2e 20 20 42 65 63  x appended.  Bec
15220 61 75 73 65 0a 74 68 65 20 77 61 6c 2d 69 6e 64  ause.the wal-ind
15230 65 78 20 69 73 20 73 68 61 72 65 64 20 6d 65 6d  ex is shared mem
15240 6f 72 79 2c 20 53 51 4c 69 74 65 20 64 6f 65 73  ory, SQLite does
15250 20 6e 6f 74 20 73 75 70 70 6f 72 74 20 0a 5b 50   not support .[P
15260 52 41 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f  RAGMA journal_mo
15270 64 65 20 7c 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64  de | journal_mod
15280 65 3d 57 41 4c 5d 20 0a 6f 6e 20 61 20 6e 65 74  e=WAL] .on a net
15290 77 6f 72 6b 20 66 69 6c 65 73 79 73 74 65 6d 20  work filesystem 
152a0 77 68 65 6e 20 63 6c 69 65 6e 74 73 20 61 72 65  when clients are
152b0 20 6f 6e 20 64 69 66 66 65 72 65 6e 74 20 6d 61   on different ma
152c0 63 68 69 6e 65 73 2e 0a 41 6c 6c 20 75 73 65 72  chines..All user
152d0 73 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  s of the databas
152e0 65 20 6d 75 73 74 20 62 65 20 61 62 6c 65 20 74  e must be able t
152f0 6f 20 73 68 61 72 65 20 74 68 65 20 73 61 6d 65  o share the same
15300 20 6d 65 6d 6f 72 79 2e 3c 2f 70 3e 0a 0a 3c 70   memory.</p>..<p
15310 3e 54 68 65 20 70 75 72 70 6f 73 65 20 6f 66 20  >The purpose of 
15320 74 68 65 20 77 61 6c 2d 69 6e 64 65 78 20 69 73  the wal-index is
15330 20 74 6f 20 61 6e 73 77 65 72 20 74 68 69 73 20   to answer this 
15340 71 75 65 73 74 69 6f 6e 20 71 75 69 63 6b 6c 79  question quickly
15350 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  :</p>..<blockquo
15360 74 65 3e 3c 69 3e 0a 47 69 76 65 6e 20 61 20 70  te><i>.Given a p
15370 61 67 65 20 6e 75 6d 62 65 72 20 50 20 61 6e 64  age number P and
15380 20 61 20 6d 61 78 69 6d 75 6d 20 57 41 4c 20 66   a maximum WAL f
15390 72 61 6d 65 20 69 6e 64 65 78 20 4d 2c 0a 72 65  rame index M,.re
153a0 74 75 72 6e 20 74 68 65 20 6c 61 72 67 65 73 74  turn the largest
153b0 20 57 41 4c 20 66 72 61 6d 65 20 69 6e 64 65 78   WAL frame index
153c0 20 66 6f 72 20 70 61 67 65 20 50 20 74 68 61 74   for page P that
153d0 20 64 6f 65 73 20 6e 6f 74 20 65 78 63 65 65 64   does not exceed
153e0 20 4d 2c 20 0a 6f 72 20 72 65 74 75 72 6e 20 4e   M, .or return N
153f0 55 4c 4c 20 69 66 20 74 68 65 72 65 20 61 72 65  ULL if there are
15400 20 6e 6f 20 66 72 61 6d 65 73 20 66 6f 72 20 70   no frames for p
15410 61 67 65 20 50 20 74 68 61 74 20 64 6f 20 6e 6f  age P that do no
15420 74 20 65 78 63 65 65 64 20 4d 2e 0a 3c 2f 69 3e  t exceed M..</i>
15430 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c  </blockquote>..<
15440 70 3e 54 68 65 20 3c 69 3e 4d 3c 2f 69 3e 20 76  p>The <i>M</i> v
15450 61 6c 75 65 20 69 6e 20 74 68 65 20 70 72 65 76  alue in the prev
15460 69 6f 75 73 20 70 61 72 61 67 72 61 70 68 20 69  ious paragraph i
15470 73 20 74 68 65 20 22 6d 78 46 72 61 6d 65 22 20  s the "mxFrame" 
15480 76 61 6c 75 65 0a 64 65 66 69 6e 65 64 20 69 6e  value.defined in
15490 20 5b 57 41 4c 20 72 65 61 64 20 61 6c 67 6f 72   [WAL read algor
154a0 69 74 68 6d 20 7c 20 73 65 63 74 69 6f 6e 20 34  ithm | section 4
154b0 2e 34 5d 20 74 68 61 74 20 69 73 20 72 65 61 64  .4] that is read
154c0 20 61 74 20 74 68 65 20 73 74 61 72 74 20 0a 6f   at the start .o
154d0 66 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  f a transaction 
154e0 61 6e 64 20 77 68 69 63 68 20 64 65 66 69 6e 65  and which define
154f0 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 66 72  s the maximum fr
15500 61 6d 65 20 66 72 6f 6d 20 74 68 65 20 57 41 4c  ame from the WAL
15510 20 74 68 61 74 20 0a 74 68 65 20 72 65 61 64 65   that .the reade
15520 72 20 77 69 6c 6c 20 75 73 65 2e 3c 2f 70 3e 0a  r will use.</p>.
15530 0a 3c 70 3e 54 68 65 20 77 61 6c 2d 69 6e 64 65  .<p>The wal-inde
15540 78 20 69 73 20 74 72 61 6e 73 69 65 6e 74 2e 20  x is transient. 
15550 20 41 66 74 65 72 20 61 20 63 72 61 73 68 2c 20   After a crash, 
15560 74 68 65 20 77 61 6c 2d 69 6e 64 65 78 20 69 73  the wal-index is
15570 0a 72 65 63 6f 6e 73 74 72 75 63 74 65 64 20 66  .reconstructed f
15580 72 6f 6d 20 74 68 65 20 6f 72 69 67 69 6e 61 6c  rom the original
15590 20 57 41 4c 20 66 69 6c 65 2e 20 20 5e 54 68 65   WAL file.  ^The
155a0 20 56 46 53 20 69 73 20 72 65 71 75 69 72 65 64   VFS is required
155b0 0a 74 6f 20 65 69 74 68 65 72 20 74 72 75 6e 63  .to either trunc
155c0 61 74 65 20 6f 72 20 7a 65 72 6f 20 74 68 65 20  ate or zero the 
155d0 68 65 61 64 65 72 20 6f 66 20 74 68 65 20 77 61  header of the wa
155e0 6c 2d 69 6e 64 65 78 20 77 68 65 6e 20 74 68 65  l-index when the
155f0 20 6c 61 73 74 0a 63 6f 6e 6e 65 63 74 69 6f 6e   last.connection
15600 20 74 6f 20 69 74 20 63 6c 6f 73 65 73 2e 20 20   to it closes.  
15610 42 65 63 61 75 73 65 20 74 68 65 20 77 61 6c 2d  Because the wal-
15620 69 6e 64 65 78 20 69 73 20 74 72 61 6e 73 69 65  index is transie
15630 6e 74 2c 20 69 74 20 63 61 6e 0a 75 73 65 20 61  nt, it can.use a
15640 6e 20 61 72 63 68 69 74 65 63 74 75 72 65 2d 73  n architecture-s
15650 70 65 63 69 66 69 63 20 66 6f 72 6d 61 74 3b 20  pecific format; 
15660 69 74 20 64 6f 65 73 20 6e 6f 74 20 68 61 76 65  it does not have
15670 20 74 6f 20 62 65 20 63 72 6f 73 73 2d 70 6c 61   to be cross-pla
15680 74 66 6f 72 6d 2e 0a 48 65 6e 63 65 2c 20 75 6e  tform..Hence, un
15690 6c 69 6b 65 20 74 68 65 20 64 61 74 61 62 61 73  like the databas
156a0 65 20 61 6e 64 20 57 41 4c 20 66 69 6c 65 20 66  e and WAL file f
156b0 6f 72 6d 61 74 73 20 77 68 69 63 68 20 73 74 6f  ormats which sto
156c0 72 65 20 61 6c 6c 20 76 61 6c 75 65 73 0a 61 73  re all values.as
156d0 20 62 69 67 20 65 6e 64 69 61 6e 2c 20 74 68 65   big endian, the
156e0 20 77 61 6c 2d 69 6e 64 65 78 20 73 74 6f 72 65   wal-index store
156f0 73 20 6d 75 6c 74 69 2d 62 79 74 65 20 76 61 6c  s multi-byte val
15700 75 65 73 20 69 6e 20 74 68 65 20 6e 61 74 69 76  ues in the nativ
15710 65 0a 62 79 74 65 20 6f 72 64 65 72 20 6f 66 20  e.byte order of 
15720 74 68 65 20 68 6f 73 74 20 63 6f 6d 70 75 74 65  the host compute
15730 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 69 73 20  r.</p>..<p>This 
15740 64 6f 63 75 6d 65 6e 74 20 69 73 20 63 6f 6e 63  document is conc
15750 65 72 6e 65 64 20 77 69 74 68 20 74 68 65 20 70  erned with the p
15760 65 72 73 69 73 74 65 6e 74 20 73 74 61 74 65 20  ersistent state 
15770 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 0a  of the database.
15780 66 69 6c 65 2c 20 61 6e 64 20 73 69 6e 63 65 20  file, and since 
15790 74 68 65 20 77 61 6c 2d 69 6e 64 65 78 20 69 73  the wal-index is
157a0 20 61 20 74 72 61 6e 73 69 65 6e 74 20 73 74 72   a transient str
157b0 75 63 74 75 72 65 2c 20 6e 6f 20 66 75 72 74 68  ucture, no furth
157c0 65 72 20 0a 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  er .information 
157d0 61 62 6f 75 74 20 74 68 65 20 66 6f 72 6d 61 74  about the format
157e0 20 6f 66 20 74 68 65 20 77 61 6c 2d 69 6e 64 65   of the wal-inde
157f0 78 20 77 69 6c 6c 20 62 65 20 70 72 6f 76 69 64  x will be provid
15800 65 64 20 68 65 72 65 2e 0a 43 6f 6d 70 6c 65 74  ed here..Complet
15810 65 20 64 65 74 61 69 6c 73 20 6f 6e 20 74 68 65  e details on the
15820 20 66 6f 72 6d 61 74 20 6f 66 20 74 68 65 20 77   format of the w
15830 61 6c 2d 69 6e 64 65 78 20 61 72 65 20 63 6f 6e  al-index are con
15840 74 61 69 6e 65 64 20 77 69 74 68 69 6e 0a 63 6f  tained within.co
15850 6d 6d 65 6e 74 73 20 69 6e 20 53 51 4c 69 74 65  mments in SQLite
15860 20 73 6f 75 72 63 65 20 63 6f 64 65 2e 3c 2f 70   source code.</p
15870 3e 0a                                            >.