Documentation Source Text

Hex Artifact Content
Login

Artifact 82e89da26ffe82e79f1f405a7faa4abfde823e27e3db52e5523a19a10ade3365:


0000: 3c 74 69 74 6c 65 3e 44 61 74 61 62 61 73 65 20  <title>Database 
0010: 46 69 6c 65 20 46 6f 72 6d 61 74 3c 2f 74 69 74  File Format</tit
0020: 6c 65 3e 0a 3c 61 6c 74 2d 74 69 74 6c 65 3e 4f  le>.<alt-title>O
0030: 6e 2d 44 69 73 6b 20 46 6f 72 6d 61 74 3c 2f 61  n-Disk Format</a
0040: 6c 74 2d 74 69 74 6c 65 3e 0a 3c 74 63 6c 3e 68  lt-title>.<tcl>h
0050: 64 5f 6b 65 79 77 6f 72 64 73 20 7b 66 69 6c 65  d_keywords {file
0060: 20 66 6f 72 6d 61 74 7d 20 7b 73 65 63 6f 6e 64   format} {second
0070: 20 65 64 69 74 69 6f 6e 20 66 69 6c 65 20 66 6f   edition file fo
0080: 72 6d 61 74 20 64 6f 63 75 6d 65 6e 74 7d 3c 2f  rmat document}</
0090: 74 63 6c 3e 0a 0a 3c 74 61 62 6c 65 5f 6f 66 5f  tcl>..<table_of_
00a0: 63 6f 6e 74 65 6e 74 73 3e 0a 0a 3c 70 3e 54 68  contents>..<p>Th
00b0: 69 73 20 64 6f 63 75 6d 65 6e 74 20 64 65 73 63  is document desc
00c0: 72 69 62 65 73 20 61 6e 64 20 64 65 66 69 6e 65  ribes and define
00d0: 73 20 74 68 65 20 6f 6e 2d 64 69 73 6b 20 64 61  s the on-disk da
00e0: 74 61 62 61 73 65 20 66 69 6c 65 0a 66 6f 72 6d  tabase file.form
00f0: 61 74 20 75 73 65 64 20 62 79 20 53 51 4c 69 74  at used by SQLit
0100: 65 2e 3c 2f 70 3e 0a 0a 3c 68 31 3e 54 68 65 20  e.</p>..<h1>The 
0110: 44 61 74 61 62 61 73 65 20 46 69 6c 65 3c 2f 68  Database File</h
0120: 31 3e 0a 0a 3c 70 3e 54 68 65 20 63 6f 6d 70 6c  1>..<p>The compl
0130: 65 74 65 20 73 74 61 74 65 20 6f 66 20 61 6e 20  ete state of an 
0140: 53 51 4c 69 74 65 20 64 61 74 61 62 61 73 65 20  SQLite database 
0150: 69 73 20 75 73 75 61 6c 6c 79 0a 63 6f 6e 74 61  is usually.conta
0160: 69 6e 65 64 20 69 6e 20 61 20 73 69 6e 67 6c 65  ined in a single
0170: 20 66 69 6c 65 20 6f 6e 20 64 69 73 6b 20 63 61   file on disk ca
0180: 6c 6c 65 64 20 74 68 65 20 22 6d 61 69 6e 20 64  lled the "main d
0190: 61 74 61 62 61 73 65 20 66 69 6c 65 22 2e 3c 2f  atabase file".</
01a0: 70 3e 0a 0a 3c 70 3e 44 75 72 69 6e 67 20 61 20  p>..<p>During a 
01b0: 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 53 51 4c  transaction, SQL
01c0: 69 74 65 20 73 74 6f 72 65 73 20 61 64 64 69 74  ite stores addit
01d0: 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
01e0: 6e 20 0a 69 6e 20 61 20 73 65 63 6f 6e 64 20 66  n .in a second f
01f0: 69 6c 65 20 63 61 6c 6c 65 64 20 74 68 65 20 22  ile called the "
0200: 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c  rollback journal
0210: 22 2c 20 6f 72 20 69 66 20 53 51 4c 69 74 65 20  ", or if SQLite 
0220: 69 73 20 69 6e 0a 5b 57 41 4c 20 6d 6f 64 65 5d  is in.[WAL mode]
0230: 2c 20 61 20 77 72 69 74 65 2d 61 68 65 61 64 20  , a write-ahead 
0240: 6c 6f 67 20 66 69 6c 65 2e 0a 49 66 20 74 68 65  log file..If the
0250: 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 6f 72 0a   application or.
0260: 68 6f 73 74 20 63 6f 6d 70 75 74 65 72 20 63 72  host computer cr
0270: 61 73 68 65 73 20 62 65 66 6f 72 65 20 74 68 65  ashes before the
0280: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 63 6f 6d   transaction com
0290: 70 6c 65 74 65 73 2c 20 74 68 65 6e 20 74 68 65  pletes, then the
02a0: 20 72 6f 6c 6c 62 61 63 6b 0a 6a 6f 75 72 6e 61   rollback.journa
02b0: 6c 20 6f 72 20 77 72 69 74 65 2d 61 68 65 61 64  l or write-ahead
02c0: 20 6c 6f 67 20 63 6f 6e 74 61 69 6e 73 20 69 6e   log contains in
02d0: 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64  formation needed
02e0: 20 0a 74 6f 20 72 65 73 74 6f 72 65 20 74 68 65   .to restore the
02f0: 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
0300: 69 6c 65 20 74 6f 20 61 20 63 6f 6e 73 69 73 74  ile to a consist
0310: 65 6e 74 20 73 74 61 74 65 2e 20 20 57 68 65 6e  ent state.  When
0320: 20 61 20 72 6f 6c 6c 62 61 63 6b 20 0a 6a 6f 75   a rollback .jou
0330: 72 6e 61 6c 20 6f 72 20 77 72 69 74 65 2d 61 68  rnal or write-ah
0340: 65 61 64 20 6c 6f 67 20 63 6f 6e 74 61 69 6e 73  ead log contains
0350: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 63   information nec
0360: 65 73 73 61 72 79 20 66 6f 72 20 72 65 63 6f 76  essary for recov
0370: 65 72 69 6e 67 20 0a 74 68 65 20 73 74 61 74 65  ering .the state
0380: 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
0390: 2c 20 74 68 65 79 20 61 72 65 20 63 61 6c 6c 65  , they are calle
03a0: 64 20 61 20 22 68 6f 74 20 6a 6f 75 72 6e 61 6c  d a "hot journal
03b0: 22 20 6f 72 20 22 68 6f 74 20 57 41 4c 20 66 69  " or "hot WAL fi
03c0: 6c 65 22 2e 0a 48 6f 74 20 6a 6f 75 72 6e 61 6c  le"..Hot journal
03d0: 73 20 61 6e 64 20 57 41 4c 20 66 69 6c 65 73 20  s and WAL files 
03e0: 61 72 65 20 6f 6e 6c 79 20 61 20 66 61 63 74 6f  are only a facto
03f0: 72 20 64 75 72 69 6e 67 20 65 72 72 6f 72 20 72  r during error r
0400: 65 63 6f 76 65 72 79 0a 73 63 65 6e 61 72 69 6f  ecovery.scenario
0410: 73 20 61 6e 64 20 73 6f 20 61 72 65 20 75 6e 63  s and so are unc
0420: 6f 6d 6d 6f 6e 2c 20 62 75 74 20 74 68 65 79 20  ommon, but they 
0430: 61 72 65 20 70 61 72 74 20 6f 66 20 74 68 65 20  are part of the 
0440: 73 74 61 74 65 20 6f 66 20 61 6e 20 53 51 4c 69  state of an SQLi
0450: 74 65 0a 64 61 74 61 62 61 73 65 20 61 6e 64 20  te.database and 
0460: 73 6f 20 63 61 6e 6e 6f 74 20 62 65 20 69 67 6e  so cannot be ign
0470: 6f 72 65 64 2e 20 20 54 68 69 73 20 64 6f 63 75  ored.  This docu
0480: 6d 65 6e 74 20 64 65 66 69 6e 65 73 20 74 68 65  ment defines the
0490: 20 66 6f 72 6d 61 74 0a 6f 66 20 61 20 72 6f 6c   format.of a rol
04a0: 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 61 6e  lback journal an
04b0: 64 20 74 68 65 20 77 72 69 74 65 2d 61 68 65 61  d the write-ahea
04c0: 64 20 6c 6f 67 20 66 69 6c 65 2c 20 62 75 74 20  d log file, but 
04d0: 74 68 65 20 66 6f 63 75 73 20 69 73 0a 6f 6e 20  the focus is.on 
04e0: 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
04f0: 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 68 32  e file.</p>..<h2
0500: 3e 50 61 67 65 73 3c 2f 68 32 3e 0a 0a 3c 70 3e  >Pages</h2>..<p>
0510: 54 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  The main databas
0520: 65 20 66 69 6c 65 20 63 6f 6e 73 69 73 74 73 20  e file consists 
0530: 6f 66 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 70  of one or more p
0540: 61 67 65 73 2e 20 20 5e 54 68 65 20 73 69 7a 65  ages.  ^The size
0550: 20 6f 66 20 61 0a 70 61 67 65 20 69 73 20 61 20   of a.page is a 
0560: 70 6f 77 65 72 20 6f 66 20 74 77 6f 20 62 65 74  power of two bet
0570: 77 65 65 6e 20 35 31 32 20 61 6e 64 20 36 35 35  ween 512 and 655
0580: 33 36 20 69 6e 63 6c 75 73 69 76 65 2e 20 20 41  36 inclusive.  A
0590: 6c 6c 20 70 61 67 65 73 20 77 69 74 68 69 6e 0a  ll pages within.
05a0: 74 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73  the same databas
05b0: 65 20 61 72 65 20 74 68 65 20 73 61 6d 65 20 73  e are the same s
05c0: 69 7a 65 2e 20 20 5e 54 68 65 20 70 61 67 65 20  ize.  ^The page 
05d0: 73 69 7a 65 20 66 6f 72 20 61 20 64 61 74 61 62  size for a datab
05e0: 61 73 65 20 66 69 6c 65 0a 69 73 20 64 65 74 65  ase file.is dete
05f0: 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 32 2d  rmined by the 2-
0600: 62 79 74 65 20 69 6e 74 65 67 65 72 20 6c 6f 63  byte integer loc
0610: 61 74 65 64 20 61 74 20 61 6e 20 6f 66 66 73 65  ated at an offse
0620: 74 20 6f 66 0a 31 36 20 62 79 74 65 73 20 66 72  t of.16 bytes fr
0630: 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  om the beginning
0640: 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
0650: 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 50   file.</p>..<p>P
0660: 61 67 65 73 20 61 72 65 20 6e 75 6d 62 65 72 65  ages are numbere
0670: 64 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68  d beginning with
0680: 20 31 2e 20 20 54 68 65 20 6d 61 78 69 6d 75 6d   1.  The maximum
0690: 20 70 61 67 65 20 6e 75 6d 62 65 72 20 69 73 0a   page number is.
06a0: 32 31 34 37 34 38 33 36 34 36 20 28 32 3c 73 75  2147483646 (2<su
06b0: 70 3e 3c 73 6d 61 6c 6c 3e 33 31 3c 2f 73 6d 61  p><small>31</sma
06c0: 6c 6c 3e 3c 2f 73 75 70 3e 20 2d 20 32 29 2e 20  ll></sup> - 2). 
06d0: 20 54 68 65 20 6d 69 6e 69 6d 75 6d 20 73 69 7a   The minimum siz
06e0: 65 0a 53 51 4c 69 74 65 20 64 61 74 61 62 61 73  e.SQLite databas
06f0: 65 20 69 73 20 61 20 73 69 6e 67 6c 65 20 35 31  e is a single 51
0700: 32 2d 62 79 74 65 20 70 61 67 65 2e 0a 54 68 65  2-byte page..The
0710: 20 6d 61 78 69 6d 75 6d 20 73 69 7a 65 20 64 61   maximum size da
0720: 74 61 62 61 73 65 20 77 6f 75 6c 64 20 62 65 20  tabase would be 
0730: 32 31 34 37 34 38 33 36 34 36 20 70 61 67 65 73  2147483646 pages
0740: 20 61 74 20 36 35 35 33 36 20 62 79 74 65 73 20   at 65536 bytes 
0750: 70 65 72 0a 70 61 67 65 20 6f 72 20 31 34 30 2c  per.page or 140,
0760: 37 33 37 2c 34 38 38 2c 32 32 34 2c 32 35 36 20  737,488,224,256 
0770: 62 79 74 65 73 20 28 61 62 6f 75 74 20 31 34 30  bytes (about 140
0780: 20 74 65 72 61 62 79 74 65 73 29 2e 20 20 55 73   terabytes).  Us
0790: 75 61 6c 6c 79 20 53 51 4c 69 74 65 20 77 69 6c  ually SQLite wil
07a0: 6c 0a 68 69 74 20 74 68 65 20 6d 61 78 69 6d 75  l.hit the maximu
07b0: 6d 20 66 69 6c 65 20 73 69 7a 65 20 6c 69 6d 69  m file size limi
07c0: 74 20 6f 66 20 74 68 65 20 75 6e 64 65 72 6c 79  t of the underly
07d0: 69 6e 67 20 66 69 6c 65 73 79 73 74 65 6d 20 6f  ing filesystem o
07e0: 72 20 64 69 73 6b 0a 68 61 72 64 77 61 72 65 20  r disk.hardware 
07f0: 6c 6f 6e 67 20 62 65 66 6f 72 65 20 69 74 20 68  long before it h
0800: 69 74 73 20 69 74 73 20 6f 77 6e 20 69 6e 74 65  its its own inte
0810: 72 6e 61 6c 20 73 69 7a 65 20 6c 69 6d 69 74 2e  rnal size limit.
0820: 3c 2f 70 3e 0a 0a 3c 70 3e 49 6e 20 63 6f 6d 6d  </p>..<p>In comm
0830: 6f 6e 20 75 73 65 2c 20 53 51 4c 69 74 65 20 64  on use, SQLite d
0840: 61 74 61 62 61 73 65 73 20 74 65 6e 64 20 74 6f  atabases tend to
0850: 20 72 61 6e 67 65 20 69 6e 20 73 69 7a 65 20 66   range in size f
0860: 72 6f 6d 20 61 20 66 65 77 20 6b 69 6c 6f 62 79  rom a few kiloby
0870: 74 65 73 0a 74 6f 20 61 20 66 65 77 20 67 69 67  tes.to a few gig
0880: 61 62 79 74 65 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e  abytes.</p>..<p>
0890: 41 74 20 61 6e 79 20 70 6f 69 6e 74 20 69 6e 20  At any point in 
08a0: 74 69 6d 65 2c 20 65 76 65 72 79 20 70 61 67 65  time, every page
08b0: 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74   in the main dat
08c0: 61 62 61 73 65 20 68 61 73 20 61 20 73 69 6e 67  abase has a sing
08d0: 6c 65 0a 75 73 65 20 77 68 69 63 68 20 69 73 20  le.use which is 
08e0: 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  one of the follo
08f0: 77 69 6e 67 3a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 54  wing:.<ul>.<li>T
0900: 68 65 20 6c 6f 63 6b 2d 62 79 74 65 20 70 61 67  he lock-byte pag
0910: 65 0a 3c 6c 69 3e 41 20 66 72 65 65 6c 69 73 74  e.<li>A freelist
0920: 20 70 61 67 65 0a 3c 75 6c 3e 0a 3c 6c 69 3e 41   page.<ul>.<li>A
0930: 20 66 72 65 65 6c 69 73 74 20 74 72 75 6e 6b 20   freelist trunk 
0940: 70 61 67 65 0a 3c 6c 69 3e 41 20 66 72 65 65 6c  page.<li>A freel
0950: 69 73 74 20 6c 65 61 66 20 70 61 67 65 0a 3c 2f  ist leaf page.</
0960: 75 6c 3e 0a 3c 6c 69 3e 41 20 62 2d 74 72 65 65  ul>.<li>A b-tree
0970: 20 70 61 67 65 0a 3c 75 6c 3e 0a 3c 6c 69 3e 41   page.<ul>.<li>A
0980: 20 74 61 62 6c 65 20 62 2d 74 72 65 65 20 69 6e   table b-tree in
0990: 74 65 72 69 6f 72 20 70 61 67 65 0a 3c 6c 69 3e  terior page.<li>
09a0: 41 20 74 61 62 6c 65 20 62 2d 74 72 65 65 20 6c  A table b-tree l
09b0: 65 61 66 20 70 61 67 65 0a 3c 6c 69 3e 41 6e 20  eaf page.<li>An 
09c0: 69 6e 64 65 78 20 62 2d 74 72 65 65 20 69 6e 74  index b-tree int
09d0: 65 72 69 6f 72 20 70 61 67 65 0a 3c 6c 69 3e 41  erior page.<li>A
09e0: 6e 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20 6c  n index b-tree l
09f0: 65 61 66 20 70 61 67 65 0a 3c 2f 75 6c 3e 0a 3c  eaf page.</ul>.<
0a00: 6c 69 3e 41 20 70 61 79 6c 6f 61 64 20 6f 76 65  li>A payload ove
0a10: 72 66 6c 6f 77 20 70 61 67 65 0a 3c 6c 69 3e 41  rflow page.<li>A
0a20: 20 70 6f 69 6e 74 65 72 20 6d 61 70 20 70 61 67   pointer map pag
0a30: 65 0a 3c 2f 75 6c 3e 0a 3c 2f 70 3e 0a 0a 3c 70  e.</ul>.</p>..<p
0a40: 3e 5e 41 6c 6c 20 72 65 61 64 73 20 66 72 6f 6d  >^All reads from
0a50: 20 61 6e 64 20 77 72 69 74 65 73 20 74 6f 20 74   and writes to t
0a60: 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
0a70: 20 66 69 6c 65 20 62 65 67 69 6e 20 61 74 20 61   file begin at a
0a80: 20 70 61 67 65 0a 62 6f 75 6e 64 61 72 79 20 61   page.boundary a
0a90: 6e 64 20 61 6c 6c 20 77 72 69 74 65 73 20 61 72  nd all writes ar
0aa0: 65 20 61 6e 20 69 6e 74 65 67 65 72 20 6e 75 6d  e an integer num
0ab0: 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20  ber of pages in 
0ac0: 73 69 7a 65 2e 20 20 5e 52 65 61 64 73 0a 61 72  size.  ^Reads.ar
0ad0: 65 20 61 6c 73 6f 20 75 73 75 61 6c 6c 79 20 61  e also usually a
0ae0: 6e 20 69 6e 74 65 67 65 72 20 6e 75 6d 62 65 72  n integer number
0af0: 20 6f 66 20 70 61 67 65 73 20 69 6e 20 73 69 7a   of pages in siz
0b00: 65 2c 20 77 69 74 68 20 74 68 65 20 6f 6e 65 20  e, with the one 
0b10: 65 78 63 65 70 74 69 6f 6e 0a 74 68 61 74 20 77  exception.that w
0b20: 68 65 6e 20 74 68 65 20 64 61 74 61 62 61 73 65  hen the database
0b30: 20 69 73 20 66 69 72 73 74 20 6f 70 65 6e 65 64   is first opened
0b40: 2c 20 74 68 65 20 66 69 72 73 74 20 31 30 30 20  , the first 100 
0b50: 62 79 74 65 73 20 6f 66 20 74 68 65 0a 64 61 74  bytes of the.dat
0b60: 61 62 61 73 65 20 66 69 6c 65 20 28 74 68 65 20  abase file (the 
0b70: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 68 65  database file he
0b80: 61 64 65 72 29 20 61 72 65 20 72 65 61 64 20 61  ader) are read a
0b90: 73 20 61 20 73 75 62 2d 70 61 67 65 20 73 69 7a  s a sub-page siz
0ba0: 65 20 75 6e 69 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e  e unit.</p>..<p>
0bb0: 5e 42 65 66 6f 72 65 20 61 6e 79 20 69 6e 66 6f  ^Before any info
0bc0: 72 6d 61 74 69 6f 6e 2d 62 65 61 72 69 6e 67 20  rmation-bearing 
0bd0: 70 61 67 65 20 6f 66 20 74 68 65 20 64 61 74 61  page of the data
0be0: 62 61 73 65 20 69 73 20 6d 6f 64 69 66 69 65 64  base is modified
0bf0: 2c 20 0a 74 68 65 20 6f 72 69 67 69 6e 61 6c 20  , .the original 
0c00: 75 6e 6d 6f 64 69 66 69 65 64 20 63 6f 6e 74 65  unmodified conte
0c10: 6e 74 20 6f 66 20 74 68 61 74 20 70 61 67 65 20  nt of that page 
0c20: 69 73 20 77 72 69 74 74 65 6e 20 69 6e 74 6f 20  is written into 
0c30: 74 68 65 20 0a 72 6f 6c 6c 62 61 63 6b 20 6a 6f  the .rollback jo
0c40: 75 72 6e 61 6c 2e 20 20 49 66 20 61 20 74 72 61  urnal.  If a tra
0c50: 6e 73 61 63 74 69 6f 6e 20 69 73 20 69 6e 74 65  nsaction is inte
0c60: 72 72 75 70 74 65 64 20 61 6e 64 20 6e 65 65 64  rrupted and need
0c70: 73 20 74 6f 20 62 65 20 0a 72 6f 6c 6c 65 64 20  s to be .rolled 
0c80: 62 61 63 6b 2c 20 74 68 65 20 72 6f 6c 6c 62 61  back, the rollba
0c90: 63 6b 20 6a 6f 75 72 6e 61 6c 20 63 61 6e 20 74  ck journal can t
0ca0: 68 65 6e 20 62 65 20 75 73 65 64 20 74 6f 20 72  hen be used to r
0cb0: 65 73 74 6f 72 65 20 74 68 65 0a 64 61 74 61 62  estore the.datab
0cc0: 61 73 65 20 74 6f 20 69 74 73 20 6f 72 69 67 69  ase to its origi
0cd0: 6e 61 6c 20 73 74 61 74 65 2e 20 20 5e 46 72 65  nal state.  ^Fre
0ce0: 65 6c 69 73 74 20 6c 65 61 66 20 70 61 67 65 73  elist leaf pages
0cf0: 20 62 65 61 72 20 6e 6f 0a 69 6e 66 6f 72 6d 61   bear no.informa
0d00: 74 69 6f 6e 20 74 68 61 74 20 77 6f 75 6c 64 20  tion that would 
0d10: 6e 65 65 64 20 74 6f 20 62 65 20 72 65 73 74 6f  need to be resto
0d20: 72 65 64 20 6f 6e 20 61 20 72 6f 6c 6c 62 61 63  red on a rollbac
0d30: 6b 20 61 6e 64 20 73 6f 20 74 68 65 79 0a 61 72  k and so they.ar
0d40: 65 20 6e 6f 74 20 77 72 69 74 74 65 6e 20 74 6f  e not written to
0d50: 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20 70 72 69   the journal pri
0d60: 6f 72 20 74 6f 20 6d 6f 64 69 66 69 63 61 74 69  or to modificati
0d70: 6f 6e 2c 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a  on, in order to.
0d80: 72 65 64 75 63 65 20 64 69 73 6b 20 49 2f 4f 2e  reduce disk I/O.
0d90: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  </p>..<tcl>hd_fr
0da0: 61 67 6d 65 6e 74 20 64 61 74 61 62 61 73 65 5f  agment database_
0db0: 68 65 61 64 65 72 20 7b 64 61 74 61 62 61 73 65  header {database
0dc0: 20 68 65 61 64 65 72 7d 3c 2f 74 63 6c 3e 0a 3c   header}</tcl>.<
0dd0: 68 32 3e 54 68 65 20 44 61 74 61 62 61 73 65 20  h2>The Database 
0de0: 48 65 61 64 65 72 3c 2f 68 32 3e 0a 0a 3c 70 3e  Header</h2>..<p>
0df0: 54 68 65 20 66 69 72 73 74 20 31 30 30 20 62 79  The first 100 by
0e00: 74 65 73 20 6f 66 20 74 68 65 20 64 61 74 61 62  tes of the datab
0e10: 61 73 65 20 66 69 6c 65 20 63 6f 6d 70 72 69 73  ase file compris
0e20: 65 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  e the database f
0e30: 69 6c 65 20 0a 68 65 61 64 65 72 2e 20 20 54 68  ile .header.  Th
0e40: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
0e50: 68 65 61 64 65 72 20 69 73 20 64 69 76 69 64 65  header is divide
0e60: 64 20 69 6e 74 6f 20 66 69 65 6c 64 73 20 61 73  d into fields as
0e70: 20 73 68 6f 77 6e 20 62 79 0a 74 68 65 20 74 61   shown by.the ta
0e80: 62 6c 65 20 62 65 6c 6f 77 2e 20 20 41 6c 6c 20  ble below.  All 
0e90: 6d 75 6c 74 69 62 79 74 65 20 66 69 65 6c 64 73  multibyte fields
0ea0: 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
0eb0: 20 66 69 6c 65 20 68 65 61 64 65 72 20 61 72 65   file header are
0ec0: 0a 73 74 6f 72 65 64 20 77 69 74 68 20 74 68 65  .stored with the
0ed0: 20 6d 6f 73 74 20 73 69 67 6e 69 66 69 63 61 6e   most significan
0ee0: 74 20 62 79 74 65 20 66 69 72 73 74 20 28 62 69  t byte first (bi
0ef0: 67 2d 65 6e 64 69 61 6e 29 2e 3c 2f 70 3e 0a 0a  g-endian).</p>..
0f00: 3c 63 65 6e 74 65 72 3e 0a 3c 69 3e 44 61 74 61  <center>.<i>Data
0f10: 62 61 73 65 20 48 65 61 64 65 72 20 46 6f 72 6d  base Header Form
0f20: 61 74 3c 2f 69 3e 3c 62 72 3e 0a 3c 74 61 62 6c  at</i><br>.<tabl
0f30: 65 20 77 69 64 74 68 3d 22 38 30 25 22 20 62 6f  e width="80%" bo
0f40: 72 64 65 72 3d 31 3e 0a 3c 74 72 3e 3c 74 68 3e  rder=1>.<tr><th>
0f50: 4f 66 66 73 65 74 3c 74 68 3e 53 69 7a 65 3c 74  Offset<th>Size<t
0f60: 68 3e 44 65 73 63 72 69 70 74 69 6f 6e 0a 3c 74  h>Description.<t
0f70: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
0f80: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 30 3c   align=center>0<
0f90: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
0fa0: 69 67 6e 3d 63 65 6e 74 65 72 3e 31 36 3c 74 64  ign=center>16<td
0fb0: 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 54 68 65   align=left>.The
0fc0: 20 68 65 61 64 65 72 20 73 74 72 69 6e 67 3a 20   header string: 
0fd0: 22 53 51 4c 69 74 65 20 66 6f 72 6d 61 74 20 33  "SQLite format 3
0fe0: 5c 30 30 30 22 0a 3c 74 72 3e 3c 74 64 20 76 61  \000".<tr><td va
0ff0: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
1000: 65 6e 74 65 72 3e 31 36 3c 74 64 20 76 61 6c 69  enter>16<td vali
1010: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
1020: 74 65 72 3e 32 3c 74 64 20 61 6c 69 67 6e 3d 6c  ter>2<td align=l
1030: 65 66 74 3e 0a 54 68 65 20 64 61 74 61 62 61 73  eft>.The databas
1040: 65 20 70 61 67 65 20 73 69 7a 65 20 69 6e 20 62  e page size in b
1050: 79 74 65 73 2e 20 20 4d 75 73 74 20 62 65 20 61  ytes.  Must be a
1060: 20 70 6f 77 65 72 20 6f 66 20 74 77 6f 20 62 65   power of two be
1070: 74 77 65 65 6e 20 35 31 32 0a 61 6e 64 20 33 32  tween 512.and 32
1080: 37 36 38 20 69 6e 63 6c 75 73 69 76 65 2c 20 6f  768 inclusive, o
1090: 72 20 74 68 65 20 76 61 6c 75 65 20 31 20 72 65  r the value 1 re
10a0: 70 72 65 73 65 6e 74 69 6e 67 20 61 20 70 61 67  presenting a pag
10b0: 65 20 73 69 7a 65 20 6f 66 20 36 35 35 33 36 2e  e size of 65536.
10c0: 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d  .<tr><td valign=
10d0: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
10e0: 3e 31 38 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  >18<td valign=to
10f0: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31  p align=center>1
1100: 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a  <td align=left>.
1110: 46 69 6c 65 20 66 6f 72 6d 61 74 20 77 72 69 74  File format writ
1120: 65 20 76 65 72 73 69 6f 6e 2e 20 20 31 20 66 6f  e version.  1 fo
1130: 72 20 6c 65 67 61 63 79 3b 20 32 20 66 6f 72 20  r legacy; 2 for 
1140: 5b 57 41 4c 5d 2e 0a 3c 74 72 3e 3c 74 64 20 76  [WAL]..<tr><td v
1150: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
1160: 63 65 6e 74 65 72 3e 31 39 3c 74 64 20 76 61 6c  center>19<td val
1170: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
1180: 6e 74 65 72 3e 31 3c 74 64 20 61 6c 69 67 6e 3d  nter>1<td align=
1190: 6c 65 66 74 3e 0a 46 69 6c 65 20 66 6f 72 6d 61  left>.File forma
11a0: 74 20 72 65 61 64 20 76 65 72 73 69 6f 6e 2e 20  t read version. 
11b0: 20 31 20 66 6f 72 20 6c 65 67 61 63 79 3b 20 32   1 for legacy; 2
11c0: 20 66 6f 72 20 5b 57 41 4c 5d 2e 0a 3c 74 72 3e   for [WAL]..<tr>
11d0: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
11e0: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32 30 3c 74  lign=center>20<t
11f0: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
1200: 67 6e 3d 63 65 6e 74 65 72 3e 31 3c 74 64 20 61  gn=center>1<td a
1210: 6c 69 67 6e 3d 6c 65 66 74 3e 0a 42 79 74 65 73  lign=left>.Bytes
1220: 20 6f 66 20 75 6e 75 73 65 64 20 22 72 65 73 65   of unused "rese
1230: 72 76 65 64 22 20 73 70 61 63 65 20 61 74 20 74  rved" space at t
1240: 68 65 20 65 6e 64 20 6f 66 20 65 61 63 68 20 70  he end of each p
1250: 61 67 65 2e 20 20 55 73 75 61 6c 6c 79 20 30 2e  age.  Usually 0.
1260: 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d  .<tr><td valign=
1270: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
1280: 3e 32 31 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  >21<td valign=to
1290: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31  p align=center>1
12a0: 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a  <td align=left>.
12b0: 4d 61 78 69 6d 75 6d 20 65 6d 62 65 64 64 65 64  Maximum embedded
12c0: 20 70 61 79 6c 6f 61 64 20 66 72 61 63 74 69 6f   payload fractio
12d0: 6e 2e 20 20 4d 75 73 74 20 62 65 20 36 34 2e 0a  n.  Must be 64..
12e0: 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74  <tr><td valign=t
12f0: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
1300: 32 32 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  22<td valign=top
1310: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 3c   align=center>1<
1320: 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 4d  td align=left>.M
1330: 69 6e 69 6d 75 6d 20 65 6d 62 65 64 64 65 64 20  inimum embedded 
1340: 70 61 79 6c 6f 61 64 20 66 72 61 63 74 69 6f 6e  payload fraction
1350: 2e 20 20 4d 75 73 74 20 62 65 20 33 32 2e 0a 3c  .  Must be 32..<
1360: 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
1370: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32  p align=center>2
1380: 33 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  3<td valign=top 
1390: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 3c 74  align=center>1<t
13a0: 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 4c 65  d align=left>.Le
13b0: 61 66 20 70 61 79 6c 6f 61 64 20 66 72 61 63 74  af payload fract
13c0: 69 6f 6e 2e 20 20 4d 75 73 74 20 62 65 20 33 32  ion.  Must be 32
13d0: 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  ..<tr><td valign
13e0: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
13f0: 72 3e 32 34 3c 74 64 20 76 61 6c 69 67 6e 3d 74  r>24<td valign=t
1400: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
1410: 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e  4<td align=left>
1420: 0a 46 69 6c 65 20 63 68 61 6e 67 65 20 63 6f 75  .File change cou
1430: 6e 74 65 72 2e 0a 3c 74 72 3e 3c 74 64 20 76 61  nter..<tr><td va
1440: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
1450: 65 6e 74 65 72 3e 32 38 3c 74 64 20 76 61 6c 69  enter>28<td vali
1460: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
1470: 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c  ter>4<td align=l
1480: 65 66 74 3e 0a 53 69 7a 65 20 6f 66 20 74 68 65  eft>.Size of the
1490: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
14a0: 6e 20 70 61 67 65 73 2e 20 20 54 68 65 20 22 69  n pages.  The "i
14b0: 6e 2d 68 65 61 64 65 72 20 64 61 74 61 62 61 73  n-header databas
14c0: 65 20 73 69 7a 65 22 2e 0a 3c 74 72 3e 3c 74 64  e size"..<tr><td
14d0: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
14e0: 6e 3d 63 65 6e 74 65 72 3e 33 32 3c 74 64 20 76  n=center>32<td v
14f0: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
1500: 63 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69 67  center>4<td alig
1510: 6e 3d 6c 65 66 74 3e 0a 50 61 67 65 20 6e 75 6d  n=left>.Page num
1520: 62 65 72 20 6f 66 20 74 68 65 20 66 69 72 73 74  ber of the first
1530: 20 66 72 65 65 6c 69 73 74 20 74 72 75 6e 6b 20   freelist trunk 
1540: 70 61 67 65 2e 0a 3c 74 72 3e 3c 74 64 20 76 61  page..<tr><td va
1550: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
1560: 65 6e 74 65 72 3e 33 36 3c 74 64 20 76 61 6c 69  enter>36<td vali
1570: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
1580: 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c  ter>4<td align=l
1590: 65 66 74 3e 0a 54 6f 74 61 6c 20 6e 75 6d 62 65  eft>.Total numbe
15a0: 72 20 6f 66 20 66 72 65 65 6c 69 73 74 20 70 61  r of freelist pa
15b0: 67 65 73 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c  ges..<tr><td val
15c0: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
15d0: 6e 74 65 72 3e 34 30 3c 74 64 20 76 61 6c 69 67  nter>40<td valig
15e0: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
15f0: 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65  er>4<td align=le
1600: 66 74 3e 0a 54 68 65 20 73 63 68 65 6d 61 20 63  ft>.The schema c
1610: 6f 6f 6b 69 65 2e 0a 3c 74 72 3e 3c 74 64 20 76  ookie..<tr><td v
1620: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
1630: 63 65 6e 74 65 72 3e 34 34 3c 74 64 20 76 61 6c  center>44<td val
1640: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
1650: 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d  nter>4<td align=
1660: 6c 65 66 74 3e 0a 54 68 65 20 73 63 68 65 6d 61  left>.The schema
1670: 20 66 6f 72 6d 61 74 20 6e 75 6d 62 65 72 2e 20   format number. 
1680: 20 53 75 70 70 6f 72 74 65 64 20 73 63 68 65 6d   Supported schem
1690: 61 20 66 6f 72 6d 61 74 73 20 61 72 65 20 31 2c  a formats are 1,
16a0: 20 32 2c 20 33 2c 20 61 6e 64 20 34 2e 0a 3c 74   2, 3, and 4..<t
16b0: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
16c0: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 38   align=center>48
16d0: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
16e0: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 3c 74 64  lign=center>4<td
16f0: 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 44 65 66   align=left>.Def
1700: 61 75 6c 74 20 70 61 67 65 20 63 61 63 68 65 20  ault page cache 
1710: 73 69 7a 65 2e 0a 3c 74 72 3e 3c 74 64 20 76 61  size..<tr><td va
1720: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
1730: 65 6e 74 65 72 3e 35 32 3c 74 64 20 76 61 6c 69  enter>52<td vali
1740: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
1750: 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c  ter>4<td align=l
1760: 65 66 74 3e 0a 54 68 65 20 70 61 67 65 20 6e 75  eft>.The page nu
1770: 6d 62 65 72 20 6f 66 20 74 68 65 20 6c 61 72 67  mber of the larg
1780: 65 73 74 20 72 6f 6f 74 20 62 2d 74 72 65 65 20  est root b-tree 
1790: 70 61 67 65 20 77 68 65 6e 20 69 6e 20 61 75 74  page when in aut
17a0: 6f 2d 76 61 63 75 75 6d 20 6f 72 0a 69 6e 63 72  o-vacuum or.incr
17b0: 65 6d 65 6e 74 61 6c 2d 76 61 63 75 75 6d 20 6d  emental-vacuum m
17c0: 6f 64 65 73 2c 20 6f 72 20 7a 65 72 6f 20 6f 74  odes, or zero ot
17d0: 68 65 72 77 69 73 65 2e 0a 3c 74 72 3e 3c 74 64  herwise..<tr><td
17e0: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
17f0: 6e 3d 63 65 6e 74 65 72 3e 35 36 3c 74 64 20 76  n=center>56<td v
1800: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
1810: 63 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69 67  center>4<td alig
1820: 6e 3d 6c 65 66 74 3e 0a 54 68 65 20 64 61 74 61  n=left>.The data
1830: 62 61 73 65 20 74 65 78 74 20 65 6e 63 6f 64 69  base text encodi
1840: 6e 67 2e 20 20 41 20 76 61 6c 75 65 20 6f 66 20  ng.  A value of 
1850: 31 20 6d 65 61 6e 73 20 55 54 46 2d 38 2e 20 20  1 means UTF-8.  
1860: 41 20 76 61 6c 75 65 20 6f 66 20 32 0a 6d 65 61  A value of 2.mea
1870: 6e 73 20 55 54 46 2d 31 36 6c 65 2e 20 20 41 20  ns UTF-16le.  A 
1880: 76 61 6c 75 65 20 6f 66 20 33 20 6d 65 61 6e 73  value of 3 means
1890: 20 55 54 46 2d 31 36 62 65 2e 0a 3c 74 72 3e 3c   UTF-16be..<tr><
18a0: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
18b0: 69 67 6e 3d 63 65 6e 74 65 72 3e 36 30 3c 74 64  ign=center>60<td
18c0: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
18d0: 6e 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c  n=center>4<td al
18e0: 69 67 6e 3d 6c 65 66 74 3e 0a 54 68 65 20 22 75  ign=left>.The "u
18f0: 73 65 72 20 76 65 72 73 69 6f 6e 22 20 61 73 20  ser version" as 
1900: 72 65 61 64 20 61 6e 64 20 73 65 74 20 62 79 20  read and set by 
1910: 74 68 65 20 5b 75 73 65 72 5f 76 65 72 73 69 6f  the [user_versio
1920: 6e 20 70 72 61 67 6d 61 5d 2e 0a 3c 74 72 3e 3c  n pragma]..<tr><
1930: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
1940: 69 67 6e 3d 63 65 6e 74 65 72 3e 36 34 3c 74 64  ign=center>64<td
1950: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
1960: 6e 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c  n=center>4<td al
1970: 69 67 6e 3d 6c 65 66 74 3e 0a 54 72 75 65 20 28  ign=left>.True (
1980: 6e 6f 6e 2d 7a 65 72 6f 29 20 66 6f 72 20 69 6e  non-zero) for in
1990: 63 72 65 6d 65 6e 74 61 6c 2d 76 61 63 75 75 6d  cremental-vacuum
19a0: 20 6d 6f 64 65 2e 20 20 46 61 6c 73 65 20 28 7a   mode.  False (z
19b0: 65 72 6f 29 20 6f 74 68 65 72 77 69 73 65 2e 0a  ero) otherwise..
19c0: 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74  <tr><td valign=t
19d0: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
19e0: 36 38 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  68<td valign=top
19f0: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 3c   align=center>4<
1a00: 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 54  td align=left>.T
1a10: 68 65 20 22 41 70 70 6c 69 63 61 74 69 6f 6e 20  he "Application 
1a20: 49 44 22 20 73 65 74 20 62 79 20 5b 50 52 41 47  ID" set by [PRAG
1a30: 4d 41 20 61 70 70 6c 69 63 61 74 69 6f 6e 5f 69  MA application_i
1a40: 64 5d 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  d]..<tr><td vali
1a50: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
1a60: 74 65 72 3e 37 32 3c 74 64 20 76 61 6c 69 67 6e  ter>72<td valign
1a70: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
1a80: 72 3e 32 30 3c 74 64 20 61 6c 69 67 6e 3d 6c 65  r>20<td align=le
1a90: 66 74 3e 0a 52 65 73 65 72 76 65 64 20 66 6f 72  ft>.Reserved for
1aa0: 20 65 78 70 61 6e 73 69 6f 6e 2e 20 20 4d 75 73   expansion.  Mus
1ab0: 74 20 62 65 20 7a 65 72 6f 2e 0a 3c 74 72 3e 3c  t be zero..<tr><
1ac0: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
1ad0: 69 67 6e 3d 63 65 6e 74 65 72 3e 39 32 3c 74 64  ign=center>92<td
1ae0: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
1af0: 6e 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c  n=center>4<td al
1b00: 69 67 6e 3d 6c 65 66 74 3e 0a 54 68 65 20 5b 76  ign=left>.The [v
1b10: 65 72 73 69 6f 6e 2d 76 61 6c 69 64 2d 66 6f 72  ersion-valid-for
1b20: 20 6e 75 6d 62 65 72 5d 2e 0a 3c 74 72 3e 3c 74   number]..<tr><t
1b30: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
1b40: 67 6e 3d 63 65 6e 74 65 72 3e 39 36 3c 74 64 20  gn=center>96<td 
1b50: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
1b60: 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69  =center>4<td ali
1b70: 67 6e 3d 6c 65 66 74 3e 0a 5b 53 51 4c 49 54 45  gn=left>.[SQLITE
1b80: 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42 45 52 5d  _VERSION_NUMBER]
1b90: 0a 3c 2f 74 61 62 6c 65 3e 3c 2f 63 65 6e 74 65  .</table></cente
1ba0: 72 3e 0a 0a 3c 68 33 3e 4d 61 67 69 63 20 48 65  r>..<h3>Magic He
1bb0: 61 64 65 72 20 53 74 72 69 6e 67 3c 2f 68 33 3e  ader String</h3>
1bc0: 0a 0a 3c 70 3e 5e 45 76 65 72 79 20 76 61 6c 69  ..<p>^Every vali
1bd0: 64 20 53 51 4c 69 74 65 20 64 61 74 61 62 61 73  d SQLite databas
1be0: 65 20 66 69 6c 65 20 62 65 67 69 6e 73 20 77 69  e file begins wi
1bf0: 74 68 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  th the following
1c00: 20 31 36 20 62 79 74 65 73 20 0a 28 69 6e 20 68   16 bytes .(in h
1c10: 65 78 29 3a 20 35 33 20 35 31 20 34 63 20 36 39  ex): 53 51 4c 69
1c20: 20 37 34 20 36 35 20 32 30 20 36 36 20 36 66 20   74 65 20 66 6f 
1c30: 37 32 20 36 64 20 36 31 20 37 34 20 32 30 20 33  72 6d 61 74 20 3
1c40: 33 20 30 30 2e 20 20 54 68 69 73 20 62 79 74 65  3 00.  This byte
1c50: 20 73 65 71 75 65 6e 63 65 0a 63 6f 72 72 65 73   sequence.corres
1c60: 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 55 54 46  ponds to the UTF
1c70: 2d 38 20 73 74 72 69 6e 67 20 22 53 51 4c 69 74  -8 string "SQLit
1c80: 65 20 66 6f 72 6d 61 74 20 33 22 20 69 6e 63 6c  e format 3" incl
1c90: 75 64 69 6e 67 20 74 68 65 20 6e 75 6c 0a 74 65  uding the nul.te
1ca0: 72 6d 69 6e 61 74 6f 72 20 63 68 61 72 61 63 74  rminator charact
1cb0: 65 72 20 61 74 20 74 68 65 20 65 6e 64 2e 3c 2f  er at the end.</
1cc0: 70 3e 0a 0a 3c 68 33 3e 50 61 67 65 20 53 69 7a  p>..<h3>Page Siz
1cd0: 65 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 74  e</h3>..<p>The t
1ce0: 77 6f 2d 62 79 74 65 20 76 61 6c 75 65 20 62 65  wo-byte value be
1cf0: 67 69 6e 6e 69 6e 67 20 61 74 20 6f 66 66 73 65  ginning at offse
1d00: 74 20 31 36 20 64 65 74 65 72 6d 69 6e 65 73 20  t 16 determines 
1d10: 74 68 65 20 70 61 67 65 20 73 69 7a 65 20 6f 66  the page size of
1d20: 20 0a 74 68 65 20 64 61 74 61 62 61 73 65 2e 20   .the database. 
1d30: 20 46 6f 72 20 53 51 4c 69 74 65 20 76 65 72 73   For SQLite vers
1d40: 69 6f 6e 73 20 33 2e 37 2e 30 2e 31 20 61 6e 64  ions 3.7.0.1 and
1d50: 20 65 61 72 6c 69 65 72 2c 20 74 68 69 73 20 76   earlier, this v
1d60: 61 6c 75 65 20 69 73 20 0a 69 6e 74 65 72 70 72  alue is .interpr
1d70: 65 74 65 64 20 61 73 20 61 20 62 69 67 2d 65 6e  eted as a big-en
1d80: 64 69 61 6e 20 69 6e 74 65 67 65 72 20 61 6e 64  dian integer and
1d90: 20 6d 75 73 74 20 62 65 20 61 20 70 6f 77 65 72   must be a power
1da0: 20 6f 66 20 74 77 6f 20 62 65 74 77 65 65 6e 0a   of two between.
1db0: 35 31 32 20 61 6e 64 20 33 32 37 36 38 2c 20 69  512 and 32768, i
1dc0: 6e 63 6c 75 73 69 76 65 2e 20 20 42 65 67 69 6e  nclusive.  Begin
1dd0: 6e 69 6e 67 20 77 69 74 68 20 53 51 4c 69 74 65  ning with SQLite
1de0: 20 5b 76 65 72 73 69 6f 6e 20 33 2e 37 2e 31 5d   [version 3.7.1]
1df0: 0a 28 5b 64 61 74 65 6f 66 3a 33 2e 37 2e 31 5d  .([dateof:3.7.1]
1e00: 29 2c 20 61 20 70 61 67 65 0a 73 69 7a 65 20 6f  ), a page.size o
1e10: 66 20 36 35 35 33 36 20 62 79 74 65 73 20 69 73  f 65536 bytes is
1e20: 20 73 75 70 70 6f 72 74 65 64 2e 20 20 54 68 65   supported.  The
1e30: 20 76 61 6c 75 65 20 36 35 35 33 36 20 77 69 6c   value 65536 wil
1e40: 6c 20 6e 6f 74 20 66 69 74 20 69 6e 20 61 0a 74  l not fit in a.t
1e50: 77 6f 2d 62 79 74 65 20 69 6e 74 65 67 65 72 2c  wo-byte integer,
1e60: 20 73 6f 20 74 6f 20 73 70 65 63 69 66 79 20 61   so to specify a
1e70: 20 36 35 35 33 36 2d 62 79 74 65 20 70 61 67 65   65536-byte page
1e80: 20 73 69 7a 65 2c 20 74 68 65 20 76 61 6c 75 65   size, the value
1e90: 0a 61 74 20 6f 66 66 73 65 74 20 31 36 20 69 73  .at offset 16 is
1ea0: 20 30 78 30 30 20 30 78 30 31 2e 0a 54 68 69 73   0x00 0x01..This
1eb0: 20 76 61 6c 75 65 20 63 61 6e 20 62 65 20 69 6e   value can be in
1ec0: 74 65 72 70 72 65 74 65 64 20 61 73 20 61 20 62  terpreted as a b
1ed0: 69 67 2d 65 6e 64 69 61 6e 0a 31 20 61 6e 64 20  ig-endian.1 and 
1ee0: 74 68 6f 75 67 68 74 20 6f 66 20 69 73 20 61 73  thought of is as
1ef0: 20 61 20 6d 61 67 69 63 20 6e 75 6d 62 65 72 20   a magic number 
1f00: 74 6f 20 72 65 70 72 65 73 65 6e 74 20 74 68 65  to represent the
1f10: 20 36 35 35 33 36 20 70 61 67 65 20 73 69 7a 65   65536 page size
1f20: 2e 0a 4f 72 20 6f 6e 65 20 63 61 6e 20 76 69 65  ..Or one can vie
1f30: 77 20 74 68 65 20 74 77 6f 2d 62 79 74 65 20 66  w the two-byte f
1f40: 69 65 6c 64 20 61 73 20 61 20 6c 69 74 74 6c 65  ield as a little
1f50: 20 65 6e 64 69 61 6e 20 6e 75 6d 62 65 72 20 61   endian number a
1f60: 6e 64 20 73 61 79 0a 74 68 61 74 20 69 74 20 72  nd say.that it r
1f70: 65 70 72 65 73 65 6e 74 73 20 74 68 65 20 70 61  epresents the pa
1f80: 67 65 20 73 69 7a 65 20 64 69 76 69 64 65 64 20  ge size divided 
1f90: 62 79 20 32 35 36 2e 20 20 54 68 65 73 65 20 74  by 256.  These t
1fa0: 77 6f 20 0a 69 6e 74 65 72 70 72 65 74 61 74 69  wo .interpretati
1fb0: 6f 6e 73 20 6f 66 20 74 68 65 20 70 61 67 65 2d  ons of the page-
1fc0: 73 69 7a 65 20 66 69 65 6c 64 20 61 72 65 20 65  size field are e
1fd0: 71 75 69 76 61 6c 65 6e 74 2e 3c 2f 70 3e 0a 0a  quivalent.</p>..
1fe0: 3c 68 33 3e 46 69 6c 65 20 66 6f 72 6d 61 74 20  <h3>File format 
1ff0: 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 73 3c  version numbers<
2000: 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 66 69 6c  /h3>..<p>The fil
2010: 65 20 66 6f 72 6d 61 74 20 77 72 69 74 65 20 76  e format write v
2020: 65 72 73 69 6f 6e 20 61 6e 64 20 66 69 6c 65 20  ersion and file 
2030: 66 6f 72 6d 61 74 20 72 65 61 64 20 76 65 72 73  format read vers
2040: 69 6f 6e 20 61 74 20 6f 66 66 73 65 74 73 0a 31  ion at offsets.1
2050: 38 20 61 6e 64 20 31 39 20 61 72 65 20 69 6e 74  8 and 19 are int
2060: 65 6e 64 65 64 20 74 6f 20 61 6c 6c 6f 77 20 66  ended to allow f
2070: 6f 72 20 65 6e 68 61 6e 63 65 6d 65 6e 74 73 20  or enhancements 
2080: 6f 66 20 74 68 65 20 66 69 6c 65 20 66 6f 72 6d  of the file form
2090: 61 74 0a 69 6e 20 66 75 74 75 72 65 20 76 65 72  at.in future ver
20a0: 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 2e  sions of SQLite.
20b0: 20 20 49 6e 20 63 75 72 72 65 6e 74 20 76 65 72    In current ver
20c0: 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 2c  sions of SQLite,
20d0: 20 62 6f 74 68 20 6f 66 0a 74 68 65 73 65 20 76   both of.these v
20e0: 61 6c 75 65 73 20 61 72 65 20 31 20 66 6f 72 20  alues are 1 for 
20f0: 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c  rollback journal
2100: 6c 69 6e 67 20 6d 6f 64 65 73 20 61 6e 64 20 32  ling modes and 2
2110: 20 66 6f 72 20 5b 57 41 4c 5d 0a 6a 6f 75 72 6e   for [WAL].journ
2120: 61 6c 6c 69 6e 67 20 6d 6f 64 65 2e 20 20 49 66  alling mode.  If
2130: 20 61 20 76 65 72 73 69 6f 6e 20 6f 66 20 53 51   a version of SQ
2140: 4c 69 74 65 20 63 6f 64 65 64 20 74 6f 20 74 68  Lite coded to th
2150: 65 20 63 75 72 72 65 6e 74 0a 66 69 6c 65 20 66  e current.file f
2160: 6f 72 6d 61 74 20 73 70 65 63 69 66 69 63 61 74  ormat specificat
2170: 69 6f 6e 20 65 6e 63 6f 75 6e 74 65 72 73 20 61  ion encounters a
2180: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 77   database file w
2190: 68 65 72 65 20 74 68 65 20 72 65 61 64 0a 76 65  here the read.ve
21a0: 72 73 69 6f 6e 20 69 73 20 31 20 6f 72 20 32 20  rsion is 1 or 2 
21b0: 62 75 74 20 74 68 65 20 77 72 69 74 65 20 76 65  but the write ve
21c0: 72 73 69 6f 6e 20 69 73 20 67 72 65 61 74 65 72  rsion is greater
21d0: 20 74 68 61 6e 20 32 2c 20 74 68 65 6e 20 74 68   than 2, then th
21e0: 65 20 64 61 74 61 62 61 73 65 0a 66 69 6c 65 20  e database.file 
21f0: 6d 75 73 74 20 62 65 20 74 72 65 61 74 65 64 20  must be treated 
2200: 61 73 20 72 65 61 64 2d 6f 6e 6c 79 2e 20 20 49  as read-only.  I
2210: 66 20 61 20 64 61 74 61 62 61 73 65 20 66 69 6c  f a database fil
2220: 65 20 77 69 74 68 20 61 20 72 65 61 64 20 76 65  e with a read ve
2230: 72 73 69 6f 6e 0a 67 72 65 61 74 65 72 20 74 68  rsion.greater th
2240: 61 6e 20 32 20 69 73 20 65 6e 63 6f 75 6e 74 65  an 2 is encounte
2250: 72 65 64 2c 20 74 68 65 6e 20 74 68 61 74 20 64  red, then that d
2260: 61 74 61 62 61 73 65 20 63 61 6e 6e 6f 74 20 62  atabase cannot b
2270: 65 20 72 65 61 64 20 6f 72 20 77 72 69 74 74 65  e read or writte
2280: 6e 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 52 65 73 65  n.</p>..<h3>Rese
2290: 72 76 65 64 20 62 79 74 65 73 20 70 65 72 20 70  rved bytes per p
22a0: 61 67 65 3c 2f 68 33 3e 0a 0a 3c 70 3e 53 51 4c  age</h3>..<p>SQL
22b0: 69 74 65 20 68 61 73 20 74 68 65 20 61 62 69 6c  ite has the abil
22c0: 69 74 79 20 74 6f 20 73 65 74 20 61 73 69 64 65  ity to set aside
22d0: 20 61 20 73 6d 61 6c 6c 20 6e 75 6d 62 65 72 20   a small number 
22e0: 6f 66 20 65 78 74 72 61 20 62 79 74 65 73 20 61  of extra bytes a
22f0: 74 0a 74 68 65 20 65 6e 64 20 6f 66 20 65 76 65  t.the end of eve
2300: 72 79 20 70 61 67 65 20 66 6f 72 20 75 73 65 20  ry page for use 
2310: 62 79 20 65 78 74 65 6e 73 69 6f 6e 73 2e 20 20  by extensions.  
2320: 54 68 65 73 65 20 65 78 74 72 61 20 62 79 74 65  These extra byte
2330: 73 20 61 72 65 0a 75 73 65 64 2c 20 66 6f 72 20  s are.used, for 
2340: 65 78 61 6d 70 6c 65 2c 20 62 79 20 74 68 65 20  example, by the 
2350: 53 51 4c 69 74 65 20 45 6e 63 72 79 70 74 69 6f  SQLite Encryptio
2360: 6e 20 45 78 74 65 6e 73 69 6f 6e 20 74 6f 20 73  n Extension to s
2370: 74 6f 72 65 20 61 20 6e 6f 6e 63 65 0a 61 6e 64  tore a nonce.and
2380: 2f 6f 72 20 63 72 79 70 74 6f 67 72 61 70 68 69  /or cryptographi
2390: 63 20 63 68 65 63 6b 73 75 6d 20 61 73 73 6f 63  c checksum assoc
23a0: 69 61 74 65 64 20 77 69 74 68 20 65 61 63 68 20  iated with each 
23b0: 70 61 67 65 2e 20 20 5e 54 68 65 20 0a 22 72 65  page.  ^The ."re
23c0: 73 65 72 76 65 64 20 73 70 61 63 65 22 20 73 69  served space" si
23d0: 7a 65 20 69 6e 20 74 68 65 20 31 2d 62 79 74 65  ze in the 1-byte
23e0: 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73   integer at offs
23f0: 65 74 20 32 30 20 69 73 20 74 68 65 20 6e 75 6d  et 20 is the num
2400: 62 65 72 0a 6f 66 20 62 79 74 65 73 20 6f 66 20  ber.of bytes of 
2410: 73 70 61 63 65 20 61 74 20 74 68 65 20 65 6e 64  space at the end
2420: 20 6f 66 20 65 61 63 68 20 70 61 67 65 20 74 6f   of each page to
2430: 20 72 65 73 65 72 76 65 20 66 6f 72 20 65 78 74   reserve for ext
2440: 65 6e 73 69 6f 6e 73 2e 0a 54 68 69 73 20 76 61  ensions..This va
2450: 6c 75 65 20 69 73 20 75 73 75 61 6c 6c 79 20 30  lue is usually 0
2460: 2e 20 20 54 68 65 20 76 61 6c 75 65 20 63 61 6e  .  The value can
2470: 20 62 65 20 6f 64 64 2e 3c 2f 70 3e 0a 0a 3c 74   be odd.</p>..<t
2480: 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 75  cl>hd_fragment u
2490: 73 61 62 6c 65 5f 73 69 7a 65 20 7b 75 73 61 62  sable_size {usab
24a0: 6c 65 20 73 69 7a 65 7d 3c 2f 74 63 6c 3e 0a 3c  le size}</tcl>.<
24b0: 70 3e 54 68 65 20 22 75 73 61 62 6c 65 20 73 69  p>The "usable si
24c0: 7a 65 22 20 6f 66 20 61 20 64 61 74 61 62 61 73  ze" of a databas
24d0: 65 20 70 61 67 65 20 69 73 20 74 68 65 20 70 61  e page is the pa
24e0: 67 65 20 73 69 7a 65 20 73 70 65 63 69 66 79 20  ge size specify 
24f0: 62 79 20 74 68 65 0a 32 2d 62 79 74 65 20 69 6e  by the.2-byte in
2500: 74 65 67 65 72 20 61 74 20 6f 66 66 73 65 74 20  teger at offset 
2510: 31 36 20 69 6e 20 74 68 65 20 68 65 61 64 65 72  16 in the header
2520: 20 6c 65 73 73 20 74 68 65 20 22 72 65 73 65 72   less the "reser
2530: 76 65 64 22 20 73 70 61 63 65 20 73 69 7a 65 0a  ved" space size.
2540: 72 65 63 6f 72 64 65 64 20 69 6e 20 74 68 65 20  recorded in the 
2550: 31 2d 62 79 74 65 20 69 6e 74 65 67 65 72 20 61  1-byte integer a
2560: 74 20 6f 66 66 73 65 74 20 32 30 20 69 6e 20 74  t offset 20 in t
2570: 68 65 20 68 65 61 64 65 72 2e 20 20 54 68 65 20  he header.  The 
2580: 75 73 61 62 6c 65 0a 73 69 7a 65 20 6f 66 20 61  usable.size of a
2590: 20 70 61 67 65 20 6d 69 67 68 74 20 62 65 20 61   page might be a
25a0: 6e 20 6f 64 64 20 6e 75 6d 62 65 72 2e 20 20 5e  n odd number.  ^
25b0: 28 48 6f 77 65 76 65 72 2c 20 74 68 65 20 75 73  (However, the us
25c0: 61 62 6c 65 20 73 69 7a 65 20 69 73 20 6e 6f 74  able size is not
25d0: 0a 61 6c 6c 6f 77 65 64 20 74 6f 20 62 65 20 6c  .allowed to be l
25e0: 65 73 73 20 74 68 61 6e 20 34 38 30 2e 20 20 49  ess than 480.  I
25f0: 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69  n other words, i
2600: 66 20 74 68 65 20 70 61 67 65 20 73 69 7a 65 20  f the page size 
2610: 69 73 20 35 31 32 2c 0a 74 68 65 6e 20 74 68 65  is 512,.then the
2620: 20 72 65 73 65 72 76 65 64 20 73 70 61 63 65 20   reserved space 
2630: 73 69 7a 65 20 63 61 6e 6e 6f 74 20 65 78 63 65  size cannot exce
2640: 65 64 20 33 32 2e 29 5e 3c 2f 70 3e 0a 0a 3c 68  ed 32.)^</p>..<h
2650: 33 3e 50 61 79 6c 6f 61 64 20 66 72 61 63 74 69  3>Payload fracti
2660: 6f 6e 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68  ons</h3>..<p>^Th
2670: 65 20 6d 61 78 69 6d 75 6d 20 61 6e 64 20 6d 69  e maximum and mi
2680: 6e 69 6d 75 6d 20 65 6d 62 65 64 64 65 64 20 70  nimum embedded p
2690: 61 79 6c 6f 61 64 20 66 72 61 63 74 69 6f 6e 73  ayload fractions
26a0: 20 61 6e 64 20 74 68 65 20 6c 65 61 66 0a 70 61   and the leaf.pa
26b0: 79 6c 6f 61 64 20 66 72 61 63 74 69 6f 6e 20 76  yload fraction v
26c0: 61 6c 75 65 73 20 6d 75 73 74 20 62 65 20 36 34  alues must be 64
26d0: 2c 20 33 32 2c 20 61 6e 64 20 33 32 2e 20 20 54  , 32, and 32.  T
26e0: 68 65 73 65 20 76 61 6c 75 65 73 20 77 65 72 65  hese values were
26f0: 0a 6f 72 69 67 69 6e 61 6c 6c 79 20 69 6e 74 65  .originally inte
2700: 6e 64 65 64 20 74 6f 20 62 65 20 74 75 6e 61 62  nded to be tunab
2710: 6c 65 20 70 61 72 61 6d 65 74 65 72 73 20 74 68  le parameters th
2720: 61 74 20 63 6f 75 6c 64 20 62 65 20 75 73 65 64  at could be used
2730: 20 74 6f 0a 6d 6f 64 69 66 79 20 74 68 65 20 73   to.modify the s
2740: 74 6f 72 61 67 65 20 66 6f 72 6d 61 74 20 6f 66  torage format of
2750: 20 74 68 65 20 62 2d 74 72 65 65 20 61 6c 67 6f   the b-tree algo
2760: 72 69 74 68 6d 2e 20 20 48 6f 77 65 76 65 72 2c  rithm.  However,
2770: 20 74 68 61 74 0a 66 75 6e 63 74 69 6f 6e 61 6c   that.functional
2780: 69 74 79 20 69 73 20 6e 6f 74 20 73 75 70 70 6f  ity is not suppo
2790: 72 74 65 64 20 61 6e 64 20 74 68 65 72 65 20 61  rted and there a
27a0: 72 65 20 6e 6f 20 63 75 72 72 65 6e 74 20 70 6c  re no current pl
27b0: 61 6e 73 20 74 6f 20 61 64 64 0a 73 75 70 70 6f  ans to add.suppo
27c0: 72 74 20 69 6e 20 74 68 65 20 66 75 74 75 72 65  rt in the future
27d0: 2e 20 20 48 65 6e 63 65 2c 20 74 68 65 73 65 20  .  Hence, these 
27e0: 74 68 72 65 65 20 62 79 74 65 73 20 61 72 65 20  three bytes are 
27f0: 66 69 78 65 64 20 61 74 20 74 68 65 0a 76 61 6c  fixed at the.val
2800: 75 65 73 20 73 70 65 63 69 66 69 65 64 2e 3c 2f  ues specified.</
2810: 70 3e 0a 0a 3c 68 33 3e 46 69 6c 65 20 63 68 61  p>..<h3>File cha
2820: 6e 67 65 20 63 6f 75 6e 74 65 72 3c 2f 68 33 3e  nge counter</h3>
2830: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
2840: 6e 74 20 63 68 6e 67 63 74 72 20 7b 63 68 61 6e  nt chngctr {chan
2850: 67 65 20 63 6f 75 6e 74 65 72 7d 3c 2f 74 63 6c  ge counter}</tcl
2860: 3e 0a 3c 70 3e 5e 54 68 65 20 66 69 6c 65 20 63  >.<p>^The file c
2870: 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69 73  hange counter is
2880: 20 61 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e   a 4-byte big-en
2890: 64 69 61 6e 20 69 6e 74 65 67 65 72 20 61 74 0a  dian integer at.
28a0: 6f 66 66 73 65 74 20 32 34 20 74 68 61 74 20 69  offset 24 that i
28b0: 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 77 68  s incremented wh
28c0: 65 6e 65 76 65 72 20 74 68 65 20 64 61 74 61 62  enever the datab
28d0: 61 73 65 20 66 69 6c 65 20 69 73 20 75 6e 6c 6f  ase file is unlo
28e0: 63 6b 65 64 0a 61 66 74 65 72 20 68 61 76 69 6e  cked.after havin
28f0: 67 20 62 65 65 6e 20 6d 6f 64 69 66 69 65 64 2e  g been modified.
2900: 0a 57 68 65 6e 20 74 77 6f 20 6f 72 20 6d 6f 72  .When two or mor
2910: 65 20 70 72 6f 63 65 73 73 65 73 20 61 72 65 20  e processes are 
2920: 72 65 61 64 69 6e 67 20 74 68 65 20 73 61 6d 65  reading the same
2930: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2c 20   database file, 
2940: 65 61 63 68 20 0a 70 72 6f 63 65 73 73 20 63 61  each .process ca
2950: 6e 20 64 65 74 65 63 74 20 64 61 74 61 62 61 73  n detect databas
2960: 65 20 63 68 61 6e 67 65 73 20 66 72 6f 6d 20 6f  e changes from o
2970: 74 68 65 72 20 70 72 6f 63 65 73 73 65 73 20 62  ther processes b
2980: 79 20 6d 6f 6e 69 74 6f 72 69 6e 67 20 0a 74 68  y monitoring .th
2990: 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72  e change counter
29a0: 2e 0a 41 20 70 72 6f 63 65 73 73 20 77 69 6c 6c  ..A process will
29b0: 20 6e 6f 72 6d 61 6c 6c 79 20 77 61 6e 74 20 74   normally want t
29c0: 6f 20 66 6c 75 73 68 20 69 74 73 20 64 61 74 61  o flush its data
29d0: 62 61 73 65 20 70 61 67 65 20 63 61 63 68 65 20  base page cache 
29e0: 77 68 65 6e 0a 61 6e 6f 74 68 65 72 20 70 72 6f  when.another pro
29f0: 63 65 73 73 20 6d 6f 64 69 66 69 65 64 20 74 68  cess modified th
2a00: 65 20 64 61 74 61 62 61 73 65 2c 20 73 69 6e 63  e database, sinc
2a10: 65 20 74 68 65 20 63 61 63 68 65 20 68 61 73 20  e the cache has 
2a20: 62 65 63 6f 6d 65 20 73 74 61 6c 65 2e 0a 54 68  become stale..Th
2a30: 65 20 66 69 6c 65 20 63 68 61 6e 67 65 20 63 6f  e file change co
2a40: 75 6e 74 65 72 20 66 61 63 69 6c 69 74 61 74 65  unter facilitate
2a50: 73 20 74 68 69 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e  s this.</p>..<p>
2a60: 49 6e 20 57 41 4c 20 6d 6f 64 65 2c 20 63 68 61  In WAL mode, cha
2a70: 6e 67 65 73 20 74 6f 20 74 68 65 20 64 61 74 61  nges to the data
2a80: 62 61 73 65 20 61 72 65 20 64 65 74 65 63 74 65  base are detecte
2a90: 64 20 75 73 69 6e 67 20 74 68 65 20 77 61 6c 2d  d using the wal-
2aa0: 69 6e 64 65 78 0a 61 6e 64 20 73 6f 20 74 68 65  index.and so the
2ab0: 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20   change counter 
2ac0: 69 73 20 6e 6f 74 20 6e 65 65 64 65 64 2e 20 20  is not needed.  
2ad0: 48 65 6e 63 65 2c 20 74 68 65 20 63 68 61 6e 67  Hence, the chang
2ae0: 65 20 63 6f 75 6e 74 65 72 20 6d 69 67 68 74 0a  e counter might.
2af0: 6e 6f 74 20 62 65 20 69 6e 63 72 65 6d 65 6e 74  not be increment
2b00: 65 64 20 6f 6e 20 65 61 63 68 20 74 72 61 6e 73  ed on each trans
2b10: 61 63 74 69 6f 6e 20 69 6e 20 57 41 4c 20 6d 6f  action in WAL mo
2b20: 64 65 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 49 6e 2d  de.</p>..<h3>In-
2b30: 68 65 61 64 65 72 20 64 61 74 61 62 61 73 65 20  header database 
2b40: 73 69 7a 65 3c 2f 68 33 3e 0a 0a 3c 74 63 6c 3e  size</h3>..<tcl>
2b50: 68 64 5f 66 72 61 67 6d 65 6e 74 20 66 69 6c 65  hd_fragment file
2b60: 73 69 7a 65 20 7b 69 6e 2d 68 65 61 64 65 72 20  size {in-header 
2b70: 64 61 74 61 62 61 73 65 20 73 69 7a 65 7d 3c 2f  database size}</
2b80: 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20 34 2d 62  tcl>.<p>^The 4-b
2b90: 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69  yte big-endian i
2ba0: 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73 65 74  nteger at offset
2bb0: 20 32 38 20 69 6e 74 6f 20 74 68 65 20 68 65 61   28 into the hea
2bc0: 64 65 72 20 0a 73 74 6f 72 65 73 20 74 68 65 20  der .stores the 
2bd0: 73 69 7a 65 20 6f 66 20 74 68 65 20 64 61 74 61  size of the data
2be0: 62 61 73 65 20 66 69 6c 65 20 69 6e 20 70 61 67  base file in pag
2bf0: 65 73 2e 20 20 5e 49 66 20 74 68 69 73 20 69 6e  es.  ^If this in
2c00: 2d 68 65 61 64 65 72 0a 64 61 74 61 73 69 7a 65  -header.datasize
2c10: 20 73 69 7a 65 20 69 73 20 6e 6f 74 20 76 61 6c   size is not val
2c20: 69 64 20 28 73 65 65 20 74 68 65 20 6e 65 78 74  id (see the next
2c30: 20 70 61 72 61 67 72 61 70 68 29 2c 20 74 68 65   paragraph), the
2c40: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 0a  n the database .
2c50: 73 69 7a 65 20 69 73 20 63 6f 6d 70 75 74 65 64  size is computed
2c60: 20 62 79 20 6c 6f 6f 6b 69 6e 67 0a 61 74 20 74   by looking.at t
2c70: 68 65 20 61 63 74 75 61 6c 20 73 69 7a 65 20 6f  he actual size o
2c80: 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  f the database f
2c90: 69 6c 65 2e 20 4f 6c 64 65 72 20 76 65 72 73 69  ile. Older versi
2ca0: 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 0a 69 67  ons of SQLite.ig
2cb0: 6e 6f 72 65 64 20 74 68 65 20 69 6e 2d 68 65 61  nored the in-hea
2cc0: 64 65 72 20 64 61 74 61 62 61 73 65 20 73 69 7a  der database siz
2cd0: 65 20 61 6e 64 20 75 73 65 64 20 74 68 65 20 61  e and used the a
2ce0: 63 74 75 61 6c 20 66 69 6c 65 20 73 69 7a 65 0a  ctual file size.
2cf0: 65 78 63 6c 75 73 69 76 65 6c 79 2e 20 20 5e 4e  exclusively.  ^N
2d00: 65 77 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66  ewer versions of
2d10: 20 53 51 4c 69 74 65 20 75 73 65 20 74 68 65 20   SQLite use the 
2d20: 69 6e 2d 68 65 61 64 65 72 20 64 61 74 61 62 61  in-header databa
2d30: 73 65 0a 73 69 7a 65 20 69 66 20 69 74 20 69 73  se.size if it is
2d40: 20 61 76 61 69 6c 61 62 6c 65 20 62 75 74 20 66   available but f
2d50: 61 6c 6c 20 62 61 63 6b 20 74 6f 20 74 68 65 20  all back to the 
2d60: 61 63 74 75 61 6c 20 66 69 6c 65 20 73 69 7a 65  actual file size
2d70: 20 69 66 0a 74 68 65 20 69 6e 2d 68 65 61 64 65   if.the in-heade
2d80: 72 20 64 61 74 61 62 61 73 65 20 73 69 7a 65 20  r database size 
2d90: 69 73 20 6e 6f 74 20 76 61 6c 69 64 2e 3c 2f 70  is not valid.</p
2da0: 3e 0a 0a 3c 70 3e 5e 54 68 65 20 69 6e 2d 68 65  >..<p>^The in-he
2db0: 61 64 65 72 20 64 61 74 61 62 61 73 65 20 73 69  ader database si
2dc0: 7a 65 20 69 73 20 6f 6e 6c 79 20 63 6f 6e 73 69  ze is only consi
2dd0: 64 65 72 65 64 20 74 6f 20 62 65 20 76 61 6c 69  dered to be vali
2de0: 64 20 69 66 0a 69 74 20 69 73 20 6e 6f 6e 2d 7a  d if.it is non-z
2df0: 65 72 6f 20 61 6e 64 20 69 66 20 74 68 65 20 34  ero and if the 4
2e00: 2d 62 79 74 65 20 5b 63 68 61 6e 67 65 20 63 6f  -byte [change co
2e10: 75 6e 74 65 72 5d 20 61 74 20 6f 66 66 73 65 74  unter] at offset
2e20: 20 32 34 0a 65 78 61 63 74 6c 79 20 6d 61 74 63   24.exactly matc
2e30: 68 65 73 20 74 68 65 20 34 2d 62 79 74 65 20 5b  hes the 4-byte [
2e40: 76 65 72 73 69 6f 6e 2d 76 61 6c 69 64 2d 66 6f  version-valid-fo
2e50: 72 20 6e 75 6d 62 65 72 5d 20 61 74 20 6f 66 66  r number] at off
2e60: 73 65 74 20 39 32 2e 0a 5e 28 54 68 65 20 69 6e  set 92..^(The in
2e70: 2d 68 65 61 64 65 72 20 64 61 74 61 62 61 73 65  -header database
2e80: 20 73 69 7a 65 20 69 73 20 61 6c 77 61 79 73 20   size is always 
2e90: 76 61 6c 69 64 20 0a 77 68 65 6e 20 74 68 65 20  valid .when the 
2ea0: 64 61 74 61 62 61 73 65 20 69 73 20 6f 6e 6c 79  database is only
2eb0: 20 6d 6f 64 69 66 69 65 64 20 75 73 69 6e 67 20   modified using 
2ec0: 72 65 63 65 6e 74 20 76 65 72 73 69 6f 6e 73 20  recent versions 
2ed0: 6f 66 20 53 51 4c 69 74 65 0a 28 76 65 72 73 69  of SQLite.(versi
2ee0: 6f 6e 73 20 33 2e 37 2e 30 20 61 6e 64 20 6c 61  ons 3.7.0 and la
2ef0: 74 65 72 29 2e 29 5e 0a 49 66 20 61 20 6c 65 67  ter).)^.If a leg
2f00: 61 63 79 20 76 65 72 73 69 6f 6e 20 6f 66 20 53  acy version of S
2f10: 51 4c 69 74 65 20 77 72 69 74 65 73 20 74 6f 20  QLite writes to 
2f20: 74 68 65 20 64 61 74 61 62 61 73 65 2c 20 69 74  the database, it
2f30: 20 77 69 6c 6c 20 6e 6f 74 0a 6b 6e 6f 77 20 74   will not.know t
2f40: 6f 20 75 70 64 61 74 65 20 74 68 65 20 69 6e 2d  o update the in-
2f50: 68 65 61 64 65 72 20 64 61 74 61 62 61 73 65 20  header database 
2f60: 73 69 7a 65 20 61 6e 64 20 73 6f 20 74 68 65 20  size and so the 
2f70: 69 6e 2d 68 65 61 64 65 72 0a 64 61 74 61 62 61  in-header.databa
2f80: 73 65 20 73 69 7a 65 20 63 6f 75 6c 64 20 62 65  se size could be
2f90: 20 69 6e 63 6f 72 72 65 63 74 2e 20 20 42 75 74   incorrect.  But
2fa0: 20 6c 65 67 61 63 79 20 76 65 72 73 69 6f 6e 73   legacy versions
2fb0: 20 6f 66 20 53 51 4c 69 74 65 0a 77 69 6c 6c 20   of SQLite.will 
2fc0: 61 6c 73 6f 20 6c 65 61 76 65 20 74 68 65 20 76  also leave the v
2fd0: 65 72 73 69 6f 6e 2d 76 61 6c 69 64 2d 66 6f 72  ersion-valid-for
2fe0: 20 6e 75 6d 62 65 72 20 61 74 20 6f 66 66 73 65   number at offse
2ff0: 74 20 39 32 20 75 6e 63 68 61 6e 67 65 64 0a 73  t 92 unchanged.s
3000: 6f 20 69 74 20 77 69 6c 6c 20 6e 6f 74 20 6d 61  o it will not ma
3010: 74 63 68 20 74 68 65 20 63 68 61 6e 67 65 2d 63  tch the change-c
3020: 6f 75 6e 74 65 72 2e 20 20 48 65 6e 63 65 2c 20  ounter.  Hence, 
3030: 69 6e 76 61 6c 69 64 20 69 6e 2d 68 65 61 64 65  invalid in-heade
3040: 72 0a 64 61 74 61 62 61 73 65 20 73 69 7a 65 73  r.database sizes
3050: 20 63 61 6e 20 62 65 20 64 65 74 65 63 74 65 64   can be detected
3060: 20 28 61 6e 64 20 69 67 6e 6f 72 65 64 29 20 62   (and ignored) b
3070: 79 20 6f 62 73 65 72 76 69 6e 67 20 77 68 65 6e  y observing when
3080: 0a 74 68 65 20 63 68 61 6e 67 65 2d 63 6f 75 6e  .the change-coun
3090: 74 65 72 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74  ter does not mat
30a0: 63 68 20 74 68 65 20 76 65 72 73 69 6f 6e 2d 76  ch the version-v
30b0: 61 6c 69 64 2d 66 6f 72 20 6e 75 6d 62 65 72 2e  alid-for number.
30c0: 3c 2f 70 3e 0a 0a 3c 68 33 3e 46 72 65 65 20 70  </p>..<h3>Free p
30d0: 61 67 65 20 6c 69 73 74 3c 2f 68 33 3e 0a 0a 3c  age list</h3>..<
30e0: 70 3e 55 6e 75 73 65 64 20 70 61 67 65 73 20 69  p>Unused pages i
30f0: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  n the database f
3100: 69 6c 65 20 61 72 65 20 73 74 6f 72 65 64 20 6f  ile are stored o
3110: 6e 20 61 20 66 72 65 65 6c 69 73 74 2e 20 20 5e  n a freelist.  ^
3120: 54 68 65 0a 34 2d 62 79 74 65 20 62 69 67 2d 65  The.4-byte big-e
3130: 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20 61 74  ndian integer at
3140: 20 6f 66 66 73 65 74 20 33 32 20 73 74 6f 72 65   offset 32 store
3150: 73 20 74 68 65 20 70 61 67 65 20 6e 75 6d 62 65  s the page numbe
3160: 72 20 6f 66 0a 74 68 65 20 66 69 72 73 74 20 70  r of.the first p
3170: 61 67 65 20 6f 66 20 74 68 65 20 66 72 65 65 6c  age of the freel
3180: 69 73 74 2c 20 6f 72 20 7a 65 72 6f 20 69 66 20  ist, or zero if 
3190: 74 68 65 20 66 72 65 65 6c 69 73 74 20 69 73 20  the freelist is 
31a0: 65 6d 70 74 79 2e 0a 5e 54 68 65 20 34 2d 62 79  empty..^The 4-by
31b0: 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e  te big-endian in
31c0: 74 65 67 65 72 20 61 74 20 6f 66 66 73 65 74 20  teger at offset 
31d0: 33 36 20 73 74 6f 72 65 73 20 73 74 6f 72 65 73  36 stores stores
31e0: 20 74 68 65 20 74 6f 74 61 6c 20 0a 6e 75 6d 62   the total .numb
31f0: 65 72 20 6f 66 20 70 61 67 65 73 20 6f 6e 20 74  er of pages on t
3200: 68 65 20 66 72 65 65 6c 69 73 74 2e 3c 2f 70 3e  he freelist.</p>
3210: 0a 0a 3c 68 33 3e 53 63 68 65 6d 61 20 63 6f 6f  ..<h3>Schema coo
3220: 6b 69 65 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68  kie</h3>..<p>^Th
3230: 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20  e schema cookie 
3240: 69 73 20 61 20 34 2d 62 79 74 65 20 62 69 67 2d  is a 4-byte big-
3250: 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20 61  endian integer a
3260: 74 20 6f 66 66 73 65 74 20 34 30 0a 74 68 61 74  t offset 40.that
3270: 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
3280: 77 68 65 6e 65 76 65 72 20 74 68 65 20 64 61 74  whenever the dat
3290: 61 62 61 73 65 20 73 63 68 65 6d 61 20 63 68 61  abase schema cha
32a0: 6e 67 65 73 2e 20 20 41 20 0a 70 72 65 70 61 72  nges.  A .prepar
32b0: 65 64 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  ed statement is 
32c0: 63 6f 6d 70 69 6c 65 64 20 61 67 61 69 6e 73 74  compiled against
32d0: 20 61 20 73 70 65 63 69 66 69 63 20 76 65 72 73   a specific vers
32e0: 69 6f 6e 20 6f 66 20 74 68 65 0a 64 61 74 61 62  ion of the.datab
32f0: 61 73 65 20 73 63 68 65 6d 61 2e 20 20 57 68 65  ase schema.  Whe
3300: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  n the database s
3310: 63 68 65 6d 61 20 63 68 61 6e 67 65 73 2c 20 74  chema changes, t
3320: 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 6d 75 73  he statement.mus
3330: 74 20 62 65 20 72 65 70 72 65 70 61 72 65 64 2e  t be reprepared.
3340: 20 20 5e 57 68 65 6e 20 61 20 70 72 65 70 61 72    ^When a prepar
3350: 65 64 20 73 74 61 74 65 6d 65 6e 74 20 72 75 6e  ed statement run
3360: 73 2c 20 69 74 20 66 69 72 73 74 20 63 68 65 63  s, it first chec
3370: 6b 73 0a 74 68 65 20 73 63 68 65 6d 61 20 63 6f  ks.the schema co
3380: 6f 6b 69 65 20 74 6f 20 65 6e 73 75 72 65 20 74  okie to ensure t
3390: 68 65 20 76 61 6c 75 65 20 69 73 20 74 68 65 20  he value is the 
33a0: 73 61 6d 65 20 61 73 20 77 68 65 6e 20 74 68 65  same as when the
33b0: 20 73 74 61 74 65 6d 65 6e 74 0a 77 61 73 20 70   statement.was p
33c0: 72 65 70 61 72 65 64 20 61 6e 64 20 69 66 20 74  repared and if t
33d0: 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65  he schema cookie
33e0: 20 68 61 73 20 63 68 61 6e 67 65 64 2c 20 74 68   has changed, th
33f0: 65 20 73 74 61 74 65 6d 65 6e 74 20 65 69 74 68  e statement eith
3400: 65 72 0a 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  er.automatically
3410: 20 72 65 70 72 65 70 61 72 65 73 20 61 6e 64 20   reprepares and 
3420: 72 65 72 75 6e 73 20 6f 72 20 69 74 20 61 62 6f  reruns or it abo
3430: 72 74 73 20 77 69 74 68 20 61 6e 20 5b 53 51 4c  rts with an [SQL
3440: 49 54 45 5f 53 43 48 45 4d 41 5d 20 0a 65 72 72  ITE_SCHEMA] .err
3450: 6f 72 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  or.</p>..<tcl>hd
3460: 5f 66 72 61 67 6d 65 6e 74 20 7b 73 63 68 65 6d  _fragment {schem
3470: 61 66 6f 72 6d 61 74 7d 20 7b 73 63 68 65 6d 61  aformat} {schema
3480: 20 66 6f 72 6d 61 74 7d 20 7b 73 63 68 65 6d 61   format} {schema
3490: 20 66 6f 72 6d 61 74 20 6e 75 6d 62 65 72 7d 3c   format number}<
34a0: 2f 74 63 6c 3e 0a 3c 68 33 3e 53 63 68 65 6d 61  /tcl>.<h3>Schema
34b0: 20 66 6f 72 6d 61 74 20 6e 75 6d 62 65 72 3c 2f   format number</
34c0: 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 73 63 68 65  h3>..<p>The sche
34d0: 6d 61 20 66 6f 72 6d 61 74 20 6e 75 6d 62 65 72  ma format number
34e0: 20 69 73 20 61 20 34 2d 62 79 74 65 20 62 69 67   is a 4-byte big
34f0: 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20  -endian integer 
3500: 61 74 20 6f 66 66 73 65 74 20 34 34 2e 0a 54 68  at offset 44..Th
3510: 65 20 73 63 68 65 6d 61 20 66 6f 72 6d 61 74 20  e schema format 
3520: 6e 75 6d 62 65 72 20 69 73 20 73 69 6d 69 6c 61  number is simila
3530: 72 20 74 6f 20 74 68 65 20 66 69 6c 65 20 66 6f  r to the file fo
3540: 72 6d 61 74 20 72 65 61 64 20 61 6e 64 20 77 72  rmat read and wr
3550: 69 74 65 0a 76 65 72 73 69 6f 6e 20 6e 75 6d 62  ite.version numb
3560: 65 72 73 20 61 74 20 6f 66 66 73 65 74 73 20 31  ers at offsets 1
3570: 38 20 61 6e 64 20 31 39 20 65 78 63 65 70 74 20  8 and 19 except 
3580: 74 68 61 74 20 74 68 65 20 73 63 68 65 6d 61 20  that the schema 
3590: 66 6f 72 6d 61 74 20 6e 75 6d 62 65 72 0a 72 65  format number.re
35a0: 66 65 72 73 20 74 6f 20 74 68 65 20 68 69 67 68  fers to the high
35b0: 2d 6c 65 76 65 6c 20 53 51 4c 20 66 6f 72 6d 61  -level SQL forma
35c0: 74 74 69 6e 67 20 72 61 74 68 65 72 20 74 68 61  tting rather tha
35d0: 6e 20 74 68 65 20 6c 6f 77 2d 6c 65 76 65 6c 20  n the low-level 
35e0: 62 2d 74 72 65 65 0a 66 6f 72 6d 61 74 74 69 6e  b-tree.formattin
35f0: 67 2e 20 20 46 6f 75 72 20 73 63 68 65 6d 61 20  g.  Four schema 
3600: 66 6f 72 6d 61 74 20 6e 75 6d 62 65 72 73 20 61  format numbers a
3610: 72 65 20 63 75 72 72 65 6e 74 6c 79 20 64 65 66  re currently def
3620: 69 6e 65 64 3a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a  ined:</p>..<ol>.
3630: 3c 6c 69 20 76 61 6c 75 65 3d 31 3e 46 6f 72 6d  <li value=1>Form
3640: 61 74 20 31 20 69 73 20 75 6e 64 65 72 73 74 6f  at 1 is understo
3650: 6f 64 20 62 79 20 61 6c 6c 20 76 65 72 73 69 6f  od by all versio
3660: 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 62 61 63  ns of SQLite bac
3670: 6b 20 74 6f 0a 5b 76 65 72 73 69 6f 6e 20 33 2e  k to.[version 3.
3680: 30 2e 30 5d 20 28 5b 64 61 74 65 6f 66 3a 33 2e  0.0] ([dateof:3.
3690: 30 2e 30 5d 29 2e 3c 2f 6c 69 3e 0a 3c 6c 69 20  0.0]).</li>.<li 
36a0: 76 61 6c 75 65 3d 32 3e 46 6f 72 6d 61 74 20 32  value=2>Format 2
36b0: 20 61 64 64 73 20 74 68 65 20 61 62 69 6c 69 74   adds the abilit
36c0: 79 20 6f 66 20 72 6f 77 73 20 77 69 74 68 69 6e  y of rows within
36d0: 20 74 68 65 20 73 61 6d 65 20 74 61 62 6c 65 0a   the same table.
36e0: 74 6f 20 68 61 76 65 20 61 20 76 61 72 79 69 6e  to have a varyin
36f0: 67 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  g number of colu
3700: 6d 6e 73 2c 20 69 6e 20 6f 72 64 65 72 20 74 6f  mns, in order to
3710: 20 73 75 70 70 6f 72 74 20 74 68 65 0a 5b 41 4c   support the.[AL
3720: 54 45 52 20 54 41 42 4c 45 20 7c 20 41 4c 54 45  TER TABLE | ALTE
3730: 52 20 54 41 42 4c 45 20 2e 2e 2e 20 41 44 44 20  R TABLE ... ADD 
3740: 43 4f 4c 55 4d 4e 5d 20 66 75 6e 63 74 69 6f 6e  COLUMN] function
3750: 61 6c 69 74 79 2e 20 20 53 75 70 70 6f 72 74 20  ality.  Support 
3760: 66 6f 72 0a 72 65 61 64 69 6e 67 20 61 6e 64 20  for.reading and 
3770: 77 72 69 74 69 6e 67 20 66 6f 72 6d 61 74 20 32  writing format 2
3780: 20 77 61 73 20 61 64 64 65 64 20 69 6e 20 53 51   was added in SQ
3790: 4c 69 74 65 20 0a 5b 76 65 72 73 69 6f 6e 20 33  Lite .[version 3
37a0: 2e 31 2e 33 5d 20 6f 6e 20 5b 64 61 74 65 6f 66  .1.3] on [dateof
37b0: 3a 33 2e 31 2e 33 5d 2e 3c 2f 6c 69 3e 0a 3c 6c  :3.1.3].</li>.<l
37c0: 69 20 76 61 6c 75 65 3d 33 3e 46 6f 72 6d 61 74  i value=3>Format
37d0: 20 33 20 61 64 64 73 20 74 68 65 20 61 62 69 6c   3 adds the abil
37e0: 69 74 79 20 6f 66 20 65 78 74 72 61 20 63 6f 6c  ity of extra col
37f0: 75 6d 6e 73 20 61 64 64 65 64 20 62 79 0a 5b 41  umns added by.[A
3800: 4c 54 45 52 20 54 41 42 4c 45 20 7c 20 41 4c 54  LTER TABLE | ALT
3810: 45 52 20 54 41 42 4c 45 20 2e 2e 2e 20 41 44 44  ER TABLE ... ADD
3820: 20 43 4f 4c 55 4d 4e 5d 20 74 6f 20 68 61 76 65   COLUMN] to have
3830: 20 6e 6f 6e 2d 4e 55 4c 4c 20 64 65 66 61 75 6c   non-NULL defaul
3840: 74 0a 76 61 6c 75 65 73 2e 20 20 54 68 69 73 20  t.values.  This 
3850: 63 61 70 61 62 69 6c 69 74 79 20 77 61 73 20 61  capability was a
3860: 64 64 65 64 20 69 6e 20 53 51 4c 69 74 65 20 5b  dded in SQLite [
3870: 76 65 72 73 69 6f 6e 20 33 2e 31 2e 34 5d 0a 6f  version 3.1.4].o
3880: 6e 20 5b 64 61 74 65 6f 66 3a 33 2e 31 2e 34 5d  n [dateof:3.1.4]
3890: 2e 3c 2f 6c 69 3e 0a 3c 6c 69 20 76 61 6c 75 65  .</li>.<li value
38a0: 3d 34 3e 5e 46 6f 72 6d 61 74 20 34 20 63 61 75  =4>^Format 4 cau
38b0: 73 65 73 20 53 51 4c 69 74 65 20 74 6f 20 72 65  ses SQLite to re
38c0: 73 70 65 63 74 20 74 68 65 0a 5b 64 65 73 63 65  spect the.[desce
38d0: 6e 64 69 6e 67 20 69 6e 64 65 78 65 73 20 7c 20  nding indexes | 
38e0: 44 45 53 43 20 6b 65 79 77 6f 72 64 5d 20 6f 6e  DESC keyword] on
38f0: 0a 69 6e 64 65 78 20 64 65 63 6c 61 72 61 74 69  .index declarati
3900: 6f 6e 73 2e 20 20 28 5e 54 68 65 20 44 45 53 43  ons.  (^The DESC
3910: 20 6b 65 79 77 6f 72 64 20 69 73 20 69 67 6e 6f   keyword is igno
3920: 72 65 64 20 69 6e 20 69 6e 64 65 78 65 73 20 66  red in indexes f
3930: 6f 72 20 0a 66 6f 72 6d 61 74 73 20 31 2c 20 32  or .formats 1, 2
3940: 2c 20 61 6e 64 20 33 2e 29 0a 5e 46 6f 72 6d 61  , and 3.).^Forma
3950: 74 20 34 20 61 6c 73 6f 20 61 64 64 73 20 74 77  t 4 also adds tw
3960: 6f 20 6e 65 77 20 62 6f 6f 6c 65 61 6e 20 72 65  o new boolean re
3970: 63 6f 72 64 20 74 79 70 65 20 76 61 6c 75 65 73  cord type values
3980: 20 28 5b 73 65 72 69 61 6c 20 74 79 70 65 73 5d   ([serial types]
3990: 0a 38 20 61 6e 64 20 39 29 2e 20 20 53 75 70 70  .8 and 9).  Supp
39a0: 6f 72 74 20 66 6f 72 20 66 6f 72 6d 61 74 20 34  ort for format 4
39b0: 20 77 61 73 20 61 64 64 65 64 20 69 6e 20 53 51   was added in SQ
39c0: 4c 69 74 65 20 33 2e 33 2e 30 20 6f 6e 0a 32 30  Lite 3.3.0 on.20
39d0: 30 36 2d 30 31 2d 31 30 2e 3c 2f 6c 69 3e 0a 3c  06-01-10.</li>.<
39e0: 2f 6f 6c 3e 0a 0a 3c 70 3e 5e 4e 65 77 20 64 61  /ol>..<p>^New da
39f0: 74 61 62 61 73 65 20 66 69 6c 65 73 20 63 72 65  tabase files cre
3a00: 61 74 65 64 20 62 79 20 53 51 4c 69 74 65 20 75  ated by SQLite u
3a10: 73 65 20 66 6f 72 6d 61 74 20 34 20 62 79 20 64  se format 4 by d
3a20: 65 66 61 75 6c 74 2e 0a 5e 54 68 65 20 5b 6c 65  efault..^The [le
3a30: 67 61 63 79 5f 66 69 6c 65 5f 66 6f 72 6d 61 74  gacy_file_format
3a40: 20 70 72 61 67 6d 61 5d 20 63 61 6e 20 62 65 20   pragma] can be 
3a50: 75 73 65 64 20 74 6f 20 63 61 75 73 65 20 53 51  used to cause SQ
3a60: 4c 69 74 65 0a 74 6f 20 63 72 65 61 74 65 20 6e  Lite.to create n
3a70: 65 77 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ew database file
3a80: 73 20 75 73 69 6e 67 20 66 6f 72 6d 61 74 20 31  s using format 1
3a90: 2e 0a 54 68 65 20 66 6f 72 6d 61 74 20 76 65 72  ..The format ver
3aa0: 73 69 6f 6e 20 6e 75 6d 62 65 72 20 63 61 6e 20  sion number can 
3ab0: 62 65 20 6d 61 64 65 20 74 6f 20 64 65 66 61 75  be made to defau
3ac0: 6c 74 20 74 6f 20 31 20 69 6e 73 74 65 61 64 20  lt to 1 instead 
3ad0: 6f 66 20 34 20 62 79 0a 73 65 74 74 69 6e 67 20  of 4 by.setting 
3ae0: 5b 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f  [SQLITE_DEFAULT_
3af0: 46 49 4c 45 5f 46 4f 52 4d 41 54 5d 3d 31 20 61  FILE_FORMAT]=1 a
3b00: 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 2e 0a  t compile-time..
3b10: 3c 2f 70 3e 0a 0a 3c 68 33 3e 53 75 67 67 65 73  </p>..<h3>Sugges
3b20: 74 65 64 20 63 61 63 68 65 20 73 69 7a 65 3c 2f  ted cache size</
3b30: 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 34 2d 62 79  h3>..<p>The 4-by
3b40: 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 73 69  te big-endian si
3b50: 67 6e 65 64 20 69 6e 74 65 67 65 72 20 61 74 20  gned integer at 
3b60: 6f 66 66 73 65 74 20 34 38 20 69 73 20 74 68 65  offset 48 is the
3b70: 20 73 75 67 67 65 73 74 65 64 0a 63 61 63 68 65   suggested.cache
3b80: 20 73 69 7a 65 20 69 6e 20 70 61 67 65 73 20 66   size in pages f
3b90: 6f 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20  or the database 
3ba0: 66 69 6c 65 2e 20 20 54 68 65 20 76 61 6c 75 65  file.  The value
3bb0: 20 69 73 20 61 20 73 75 67 67 65 73 74 69 6f 6e   is a suggestion
3bc0: 0a 6f 6e 6c 79 20 61 6e 64 20 53 51 4c 69 74 65  .only and SQLite
3bd0: 20 69 73 20 75 6e 64 65 72 20 6e 6f 20 6f 62 6c   is under no obl
3be0: 69 67 61 74 69 6f 6e 20 74 6f 20 68 6f 6e 6f 72  igation to honor
3bf0: 20 69 74 2e 20 20 54 68 65 20 61 62 73 6f 6c 75   it.  The absolu
3c00: 74 65 20 76 61 6c 75 65 0a 6f 66 20 74 68 65 20  te value.of the 
3c10: 69 6e 74 65 67 65 72 20 69 73 20 75 73 65 64 20  integer is used 
3c20: 61 73 20 74 68 65 20 73 75 67 67 65 73 74 65 64  as the suggested
3c30: 20 73 69 7a 65 2e 20 20 54 68 65 20 73 75 67 67   size.  The sugg
3c40: 65 73 74 65 64 20 63 61 63 68 65 20 73 69 7a 65  ested cache size
3c50: 0a 63 61 6e 20 62 65 20 73 65 74 20 75 73 69 6e  .can be set usin
3c60: 67 20 74 68 65 20 5b 64 65 66 61 75 6c 74 5f 63  g the [default_c
3c70: 61 63 68 65 5f 73 69 7a 65 20 70 72 61 67 6d 61  ache_size pragma
3c80: 5d 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 49 6e 63 72  ].</p>..<h3>Incr
3c90: 65 6d 65 6e 74 61 6c 20 76 61 63 75 75 6d 20 73  emental vacuum s
3ca0: 65 74 74 69 6e 67 73 3c 2f 68 33 3e 0a 0a 3c 70  ettings</h3>..<p
3cb0: 3e 54 68 65 20 74 77 6f 20 34 2d 62 79 74 65 20  >The two 4-byte 
3cc0: 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67  big-endian integ
3cd0: 65 72 73 20 61 74 20 6f 66 66 73 65 74 73 20 35  ers at offsets 5
3ce0: 32 20 61 6e 64 20 36 34 20 61 72 65 20 75 73 65  2 and 64 are use
3cf0: 64 0a 74 6f 20 6d 61 6e 61 67 65 20 74 68 65 20  d.to manage the 
3d00: 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d 20 61 6e  [auto_vacuum] an
3d10: 64 20 5b 69 6e 63 72 65 6d 65 6e 74 61 6c 5f 76  d [incremental_v
3d20: 61 63 75 75 6d 5d 20 6d 6f 64 65 73 2e 20 20 5e  acuum] modes.  ^
3d30: 49 66 0a 74 68 65 20 69 6e 74 65 67 65 72 20 61  If.the integer a
3d40: 74 20 6f 66 66 73 65 74 20 35 32 20 69 73 20 7a  t offset 52 is z
3d50: 65 72 6f 20 74 68 65 6e 20 70 6f 69 6e 74 65 72  ero then pointer
3d60: 2d 6d 61 70 20 28 70 74 72 6d 61 70 29 20 70 61  -map (ptrmap) pa
3d70: 67 65 73 20 61 72 65 0a 6f 6d 69 74 74 65 64 20  ges are.omitted 
3d80: 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73  from the databas
3d90: 65 20 66 69 6c 65 20 61 6e 64 20 6e 65 69 74 68  e file and neith
3da0: 65 72 20 61 75 74 6f 5f 76 61 63 75 75 6d 20 6e  er auto_vacuum n
3db0: 6f 72 0a 69 6e 63 72 65 6d 65 6e 74 61 6c 5f 76  or.incremental_v
3dc0: 61 63 75 75 6d 20 61 72 65 20 73 75 70 70 6f 72  acuum are suppor
3dd0: 74 65 64 2e 20 20 5e 49 66 20 74 68 65 20 69 6e  ted.  ^If the in
3de0: 74 65 67 65 72 20 61 74 20 6f 66 66 73 65 74 20  teger at offset 
3df0: 35 32 20 69 73 0a 6e 6f 6e 2d 7a 65 72 6f 20 74  52 is.non-zero t
3e00: 68 65 6e 20 69 74 20 69 73 20 74 68 65 20 70 61  hen it is the pa
3e10: 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65  ge number of the
3e20: 20 6c 61 72 67 65 73 74 20 72 6f 6f 74 20 70 61   largest root pa
3e30: 67 65 20 69 6e 20 74 68 65 0a 64 61 74 61 62 61  ge in the.databa
3e40: 73 65 20 66 69 6c 65 2c 20 74 68 65 20 64 61 74  se file, the dat
3e50: 61 62 61 73 65 20 66 69 6c 65 20 77 69 6c 6c 20  abase file will 
3e60: 63 6f 6e 74 61 69 6e 20 70 74 72 6d 61 70 20 70  contain ptrmap p
3e70: 61 67 65 73 2c 20 61 6e 64 20 74 68 65 0a 6d 6f  ages, and the.mo
3e80: 64 65 20 6d 75 73 74 20 62 65 20 65 69 74 68 65  de must be eithe
3e90: 72 20 61 75 74 6f 5f 76 61 63 75 75 6d 20 6f 72  r auto_vacuum or
3ea0: 20 69 6e 63 72 65 6d 65 6e 74 61 6c 5f 76 61 63   incremental_vac
3eb0: 75 75 6d 2e 20 20 5e 49 6e 20 74 68 69 73 20 6c  uum.  ^In this l
3ec0: 61 74 74 65 72 0a 63 61 73 65 2c 20 74 68 65 20  atter.case, the 
3ed0: 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73 65  integer at offse
3ee0: 74 20 36 34 20 69 73 20 74 72 75 65 20 66 6f 72  t 64 is true for
3ef0: 20 69 6e 63 72 65 6d 65 6e 74 61 6c 5f 76 61 63   incremental_vac
3f00: 75 75 6d 20 61 6e 64 0a 66 61 6c 73 65 20 66 6f  uum and.false fo
3f10: 72 20 61 75 74 6f 5f 76 61 63 75 75 6d 2e 20 20  r auto_vacuum.  
3f20: 5e 49 66 20 74 68 65 20 69 6e 74 65 67 65 72 20  ^If the integer 
3f30: 61 74 20 6f 66 66 73 65 74 20 35 32 20 69 73 20  at offset 52 is 
3f40: 7a 65 72 6f 20 74 68 65 6e 0a 74 68 65 20 69 6e  zero then.the in
3f50: 74 65 67 65 72 20 61 74 20 6f 66 66 73 65 74 20  teger at offset 
3f60: 36 34 20 6d 75 73 74 20 61 6c 73 6f 20 62 65 20  64 must also be 
3f70: 7a 65 72 6f 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  zero.</p>..<tcl>
3f80: 68 64 5f 66 72 61 67 6d 65 6e 74 20 65 6e 63 20  hd_fragment enc 
3f90: 7b 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 7d 3c  {text encoding}<
3fa0: 2f 74 63 6c 3e 0a 3c 68 33 3e 54 65 78 74 20 65  /tcl>.<h3>Text e
3fb0: 6e 63 6f 64 69 6e 67 3c 2f 68 33 3e 0a 0a 3c 70  ncoding</h3>..<p
3fc0: 3e 5e 54 68 65 20 34 2d 62 79 74 65 20 62 69 67  >^The 4-byte big
3fd0: 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20  -endian integer 
3fe0: 61 74 20 6f 66 66 73 65 74 20 35 36 20 64 65 74  at offset 56 det
3ff0: 65 72 6d 69 6e 65 73 20 74 68 65 20 65 6e 63 6f  ermines the enco
4000: 64 69 6e 67 0a 75 73 65 64 20 66 6f 72 20 61 6c  ding.used for al
4010: 6c 20 74 65 78 74 20 73 74 72 69 6e 67 73 20 73  l text strings s
4020: 74 6f 72 65 64 20 69 6e 20 74 68 65 20 64 61 74  tored in the dat
4030: 61 62 61 73 65 2e 20 20 0a 5e 41 20 76 61 6c 75  abase.  .^A valu
4040: 65 20 6f 66 20 31 20 6d 65 61 6e 73 20 55 54 46  e of 1 means UTF
4050: 2d 38 2e 0a 5e 41 20 76 61 6c 75 65 20 6f 66 20  -8..^A value of 
4060: 32 20 6d 65 61 6e 73 20 55 54 46 2d 31 36 6c 65  2 means UTF-16le
4070: 2e 0a 5e 41 20 76 61 6c 75 65 20 6f 66 20 33 20  ..^A value of 3 
4080: 6d 65 61 6e 73 20 55 54 46 2d 31 36 62 65 2e 0a  means UTF-16be..
4090: 4e 6f 20 6f 74 68 65 72 20 76 61 6c 75 65 73 20  No other values 
40a0: 61 72 65 20 61 6c 6c 6f 77 65 64 2e 0a 5e 28 54  are allowed..^(T
40b0: 68 65 20 73 71 6c 69 74 65 33 2e 68 20 68 65 61  he sqlite3.h hea
40c0: 64 65 72 20 66 69 6c 65 20 64 65 66 69 6e 65 73  der file defines
40d0: 20 43 2d 70 72 65 70 72 6f 63 65 73 73 6f 72 20   C-preprocessor 
40e0: 6d 61 63 72 6f 73 20 53 51 4c 49 54 45 5f 55 54  macros SQLITE_UT
40f0: 46 38 20 61 73 20 31 2c 0a 53 51 4c 49 54 45 5f  F8 as 1,.SQLITE_
4100: 55 54 46 31 36 4c 45 20 61 73 20 32 2c 20 61 6e  UTF16LE as 2, an
4110: 64 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45  d SQLITE_UTF16BE
4120: 20 61 73 20 33 2c 20 74 6f 20 75 73 65 20 69 6e   as 3, to use in
4130: 20 70 6c 61 63 65 20 6f 66 0a 74 68 65 20 6e 75   place of.the nu
4140: 6d 65 72 69 63 20 63 6f 64 65 73 20 66 6f 72 20  meric codes for 
4150: 74 68 65 20 74 65 78 74 20 65 6e 63 6f 64 69 6e  the text encodin
4160: 67 2e 29 5e 3c 2f 70 3e 0a 0a 3c 68 33 3e 55 73  g.)^</p>..<h3>Us
4170: 65 72 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65  er version numbe
4180: 72 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68 65 20  r</h3>..<p>^The 
4190: 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61  4-byte big-endia
41a0: 6e 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66  n integer at off
41b0: 73 65 74 20 36 30 20 69 73 20 74 68 65 20 75 73  set 60 is the us
41c0: 65 72 20 76 65 72 73 69 6f 6e 20 77 68 69 63 68  er version which
41d0: 0a 69 73 20 73 65 74 20 61 6e 64 20 71 75 65 72  .is set and quer
41e0: 69 65 64 20 62 79 20 74 68 65 20 5b 75 73 65 72  ied by the [user
41f0: 5f 76 65 72 73 69 6f 6e 20 70 72 61 67 6d 61 5d  _version pragma]
4200: 2e 20 20 54 68 65 20 75 73 65 72 20 76 65 72 73  .  The user vers
4210: 69 6f 6e 20 69 73 0a 6e 6f 74 20 75 73 65 64 20  ion is.not used 
4220: 62 79 20 53 51 4c 69 74 65 2e 3c 2f 70 3e 0a 0a  by SQLite.</p>..
4230: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
4240: 20 61 70 70 69 64 20 7b 41 70 70 6c 69 63 61 74   appid {Applicat
4250: 69 6f 6e 20 49 44 7d 3c 2f 74 63 6c 3e 0a 3c 68  ion ID}</tcl>.<h
4260: 33 3e 41 70 70 6c 69 63 61 74 69 6f 6e 20 49 44  3>Application ID
4270: 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68 65 20 34  </h3>..<p>^The 4
4280: 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e  -byte big-endian
4290: 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73   integer at offs
42a0: 65 74 20 36 38 20 69 73 20 61 6e 20 22 41 70 70  et 68 is an "App
42b0: 6c 69 63 61 74 69 6f 6e 20 49 44 22 20 74 68 61  lication ID" tha
42c0: 74 0a 63 61 6e 20 62 65 20 73 65 74 20 62 79 20  t.can be set by 
42d0: 74 68 65 20 5b 50 52 41 47 4d 41 20 61 70 70 6c  the [PRAGMA appl
42e0: 69 63 61 74 69 6f 6e 5f 69 64 5d 20 63 6f 6d 6d  ication_id] comm
42f0: 61 6e 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  and in order to 
4300: 69 64 65 6e 74 69 66 79 20 74 68 65 0a 64 61 74  identify the.dat
4310: 61 62 61 73 65 20 61 73 20 62 65 6c 6f 6e 67 69  abase as belongi
4320: 6e 67 20 74 6f 20 6f 72 20 61 73 73 6f 63 69 61  ng to or associa
4330: 74 65 64 20 77 69 74 68 20 61 20 70 61 72 74 69  ted with a parti
4340: 63 75 6c 61 72 20 61 70 70 6c 69 63 61 74 69 6f  cular applicatio
4350: 6e 2e 0a 54 68 65 20 61 70 70 6c 69 63 61 74 69  n..The applicati
4360: 6f 6e 20 49 44 20 69 73 20 69 6e 74 65 6e 64 65  on ID is intende
4370: 64 20 66 6f 72 20 64 61 74 61 62 61 73 65 20 66  d for database f
4380: 69 6c 65 73 20 75 73 65 64 20 61 73 20 61 6e 0a  iles used as an.
4390: 5b 61 70 70 6c 69 63 61 74 69 6f 6e 20 66 69 6c  [application fil
43a0: 65 2d 66 6f 72 6d 61 74 5d 2e 20 20 54 68 65 20  e-format].  The 
43b0: 61 70 70 6c 69 63 61 74 69 6f 6e 20 49 44 20 63  application ID c
43c0: 61 6e 20 62 65 20 75 73 65 64 20 62 79 20 75 74  an be used by ut
43d0: 69 6c 69 74 69 65 73 20 0a 73 75 63 68 20 61 73  ilities .such as
43e0: 20 5b 68 74 74 70 3a 2f 2f 77 77 77 2e 64 61 72   [http://www.dar
43f0: 77 69 6e 73 79 73 2e 63 6f 6d 2f 66 69 6c 65 2f  winsys.com/file/
4400: 20 7c 20 66 69 6c 65 28 31 29 5d 20 74 6f 20 64   | file(1)] to d
4410: 65 74 65 72 6d 69 6e 65 20 74 68 65 20 73 70 65  etermine the spe
4420: 63 69 66 69 63 0a 66 69 6c 65 20 74 79 70 65 20  cific.file type 
4430: 72 61 74 68 65 72 20 74 68 61 6e 20 6a 75 73 74  rather than just
4440: 20 72 65 70 6f 72 74 69 6e 67 20 22 53 51 4c 69   reporting "SQLi
4450: 74 65 33 20 44 61 74 61 62 61 73 65 22 2e 20 20  te3 Database".  
4460: 41 20 6c 69 73 74 20 6f 66 0a 61 73 73 69 67 6e  A list of.assign
4470: 65 64 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 49  ed application I
4480: 44 73 20 63 61 6e 20 62 65 20 73 65 65 6e 20 62  Ds can be seen b
4490: 79 20 63 6f 6e 73 75 6c 74 69 6e 67 20 74 68 65  y consulting the
44a0: 0a 5b 68 74 74 70 3a 2f 2f 77 77 77 2e 73 71 6c  .[http://www.sql
44b0: 69 74 65 2e 6f 72 67 2f 73 72 63 2f 61 72 74 69  ite.org/src/arti
44c0: 66 61 63 74 3f 63 69 3d 74 72 75 6e 6b 26 66 69  fact?ci=trunk&fi
44d0: 6c 65 6e 61 6d 65 3d 6d 61 67 69 63 2e 74 78 74  lename=magic.txt
44e0: 7c 6d 61 67 69 63 2e 74 78 74 5d 0a 66 69 6c 65  |magic.txt].file
44f0: 20 69 6e 20 74 68 65 20 53 51 4c 69 74 65 20 73   in the SQLite s
4500: 6f 75 72 63 65 20 72 65 70 6f 73 69 74 6f 72 79  ource repository
4510: 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  .</p>..<tcl>hd_f
4520: 72 61 67 6d 65 6e 74 20 76 61 6c 69 64 66 6f 72  ragment validfor
4530: 20 7b 76 65 72 73 69 6f 6e 2d 76 61 6c 69 64 2d   {version-valid-
4540: 66 6f 72 20 6e 75 6d 62 65 72 7d 3c 2f 74 63 6c  for number}</tcl
4550: 3e 0a 3c 68 33 3e 57 72 69 74 65 20 6c 69 62 72  >.<h3>Write libr
4560: 61 72 79 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62  ary version numb
4570: 65 72 20 61 6e 64 20 76 65 72 73 69 6f 6e 2d 76  er and version-v
4580: 61 6c 69 64 2d 66 6f 72 20 6e 75 6d 62 65 72 3c  alid-for number<
4590: 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68 65 20 34 2d  /h3>..<p>^The 4-
45a0: 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20  byte big-endian 
45b0: 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73 65  integer at offse
45c0: 74 20 39 36 20 73 74 6f 72 65 73 20 74 68 65 20  t 96 stores the 
45d0: 0a 5b 53 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e  .[SQLITE_VERSION
45e0: 5f 4e 55 4d 42 45 52 5d 20 76 61 6c 75 65 20 66  _NUMBER] value f
45f0: 6f 72 20 74 68 65 20 53 51 4c 69 74 65 20 6c 69  or the SQLite li
4600: 62 72 61 72 79 20 74 68 61 74 20 6d 6f 73 74 0a  brary that most.
4610: 72 65 63 65 6e 74 6c 79 20 6d 6f 64 69 66 69 65  recently modifie
4620: 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  d the database f
4630: 69 6c 65 2e 20 20 5e 54 68 65 20 34 2d 62 79 74  ile.  ^The 4-byt
4640: 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74  e big-endian int
4650: 65 67 65 72 20 61 74 0a 6f 66 66 73 65 74 20 39  eger at.offset 9
4660: 32 20 69 73 20 74 68 65 20 76 61 6c 75 65 20 6f  2 is the value o
4670: 66 20 74 68 65 20 5b 63 68 61 6e 67 65 20 63 6f  f the [change co
4680: 75 6e 74 65 72 5d 20 77 68 65 6e 20 74 68 65 20  unter] when the 
4690: 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 0a 77  version number.w
46a0: 61 73 20 73 74 6f 72 65 64 2e 20 20 54 68 65 20  as stored.  The 
46b0: 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73 65  integer at offse
46c0: 74 20 39 32 20 69 6e 64 69 63 61 74 65 73 20 77  t 92 indicates w
46d0: 68 69 63 68 20 74 72 61 6e 73 61 63 74 69 6f 6e  hich transaction
46e0: 0a 74 68 65 20 76 65 72 73 69 6f 6e 20 6e 75 6d  .the version num
46f0: 62 65 72 20 69 73 20 76 61 6c 69 64 20 66 6f 72  ber is valid for
4700: 20 61 6e 64 20 69 73 20 73 6f 6d 65 74 69 6d 65   and is sometime
4710: 73 20 63 61 6c 6c 65 64 20 74 68 65 0a 22 76 65  s called the."ve
4720: 72 73 69 6f 6e 2d 76 61 6c 69 64 2d 66 6f 72 20  rsion-valid-for 
4730: 6e 75 6d 62 65 72 22 2e 0a 0a 3c 68 33 3e 48 65  number"...<h3>He
4740: 61 64 65 72 20 73 70 61 63 65 20 72 65 73 65 72  ader space reser
4750: 76 65 64 20 66 6f 72 20 65 78 70 61 6e 73 69 6f  ved for expansio
4760: 6e 3c 2f 68 33 3e 0a 0a 3c 70 3e 41 6c 6c 20 6f  n</h3>..<p>All o
4770: 74 68 65 72 20 62 79 74 65 73 20 6f 66 20 74 68  ther bytes of th
4780: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
4790: 68 65 61 64 65 72 20 61 72 65 20 72 65 73 65 72  header are reser
47a0: 76 65 64 20 66 6f 72 0a 66 75 74 75 72 65 20 65  ved for.future e
47b0: 78 70 61 6e 73 69 6f 6e 20 61 6e 64 20 6d 75 73  xpansion and mus
47c0: 74 20 62 65 20 73 65 74 20 74 6f 20 7a 65 72 6f  t be set to zero
47d0: 2e 3c 2f 70 3e 0a 0a 3c 68 32 3e 54 68 65 20 4c  .</p>..<h2>The L
47e0: 6f 63 6b 2d 42 79 74 65 20 50 61 67 65 3c 2f 68  ock-Byte Page</h
47f0: 32 3e 0a 0a 3c 70 3e 54 68 65 20 6c 6f 63 6b 2d  2>..<p>The lock-
4800: 62 79 74 65 20 70 61 67 65 20 69 73 20 74 68 65  byte page is the
4810: 20 73 69 6e 67 6c 65 20 70 61 67 65 20 6f 66 20   single page of 
4820: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
4830: 65 0a 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  e.that contains 
4840: 74 68 65 20 62 79 74 65 73 20 61 74 20 6f 66 66  the bytes at off
4850: 73 65 74 73 20 62 65 74 77 65 65 6e 20 31 30 37  sets between 107
4860: 33 37 34 31 38 32 34 20 61 6e 64 20 31 30 37 33  3741824 and 1073
4870: 37 34 32 33 33 35 2c 0a 69 6e 63 6c 75 73 69 76  742335,.inclusiv
4880: 65 2e 20 20 41 20 64 61 74 61 62 61 73 65 20 66  e.  A database f
4890: 69 6c 65 20 74 68 61 74 20 69 73 20 6c 65 73 73  ile that is less
48a0: 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74   than or equal t
48b0: 6f 20 31 30 37 33 37 34 31 38 32 34 20 62 79 74  o 1073741824 byt
48c0: 65 73 20 0a 69 6e 20 73 69 7a 65 20 63 6f 6e 74  es .in size cont
48d0: 61 69 6e 73 20 6e 6f 20 6c 6f 63 6b 2d 62 79 74  ains no lock-byt
48e0: 65 20 70 61 67 65 2e 20 20 41 20 64 61 74 61 62  e page.  A datab
48f0: 61 73 65 20 66 69 6c 65 20 6c 61 72 67 65 72 20  ase file larger 
4900: 74 68 61 6e 0a 31 30 37 33 37 34 31 38 32 34 20  than.1073741824 
4910: 63 6f 6e 74 61 69 6e 73 20 65 78 61 63 74 6c 79  contains exactly
4920: 20 6f 6e 65 20 6c 6f 63 6b 2d 62 79 74 65 20 70   one lock-byte p
4930: 61 67 65 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  age..</p>..<p>Th
4940: 65 20 6c 6f 63 6b 2d 62 79 74 65 20 70 61 67 65  e lock-byte page
4950: 20 69 73 20 73 65 74 20 61 73 69 64 65 20 66 6f   is set aside fo
4960: 72 20 75 73 65 20 62 79 20 74 68 65 20 6f 70 65  r use by the ope
4970: 72 61 74 69 6e 67 2d 73 79 73 74 65 6d 20 73 70  rating-system sp
4980: 65 63 69 66 69 63 0a 5b 56 46 53 5d 20 69 6d 70  ecific.[VFS] imp
4990: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 69 6e 20 69  lementation in i
49a0: 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 74 68 65 20  mplementing the 
49b0: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6c 6f  database file lo
49c0: 63 6b 69 6e 67 20 70 72 69 6d 69 74 69 76 65 73  cking primitives
49d0: 2e 0a 5e 53 51 4c 69 74 65 20 64 6f 65 73 20 6e  ..^SQLite does n
49e0: 6f 74 20 75 73 65 20 74 68 65 20 6c 6f 63 6b 2d  ot use the lock-
49f0: 62 79 74 65 20 70 61 67 65 2e 20 20 5e 54 68 65  byte page.  ^The
4a00: 20 53 51 4c 69 74 65 20 63 6f 72 65 20 0a 77 69   SQLite core .wi
4a10: 6c 6c 20 6e 65 76 65 72 20 72 65 61 64 20 6f 72  ll never read or
4a20: 20 77 72 69 74 65 20 74 68 65 20 6c 6f 63 6b 2d   write the lock-
4a30: 62 79 74 65 20 70 61 67 65 2c 0a 74 68 6f 75 67  byte page,.thoug
4a40: 68 20 6f 70 65 72 61 74 69 6e 67 2d 73 79 73 74  h operating-syst
4a50: 65 6d 20 73 70 65 63 69 66 69 63 20 5b 56 46 53  em specific [VFS
4a60: 5d 20 0a 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ] .implementatio
4a70: 6e 73 20 6d 61 79 20 63 68 6f 6f 73 65 20 74 6f  ns may choose to
4a80: 20 72 65 61 64 20 6f 72 20 77 72 69 74 65 20 62   read or write b
4a90: 79 74 65 73 20 6f 6e 20 74 68 65 20 6c 6f 63 6b  ytes on the lock
4aa0: 2d 62 79 74 65 20 0a 70 61 67 65 20 61 63 63 6f  -byte .page acco
4ab0: 72 64 69 6e 67 20 74 6f 20 74 68 65 20 0a 6e 65  rding to the .ne
4ac0: 65 64 73 20 61 6e 64 20 70 72 6f 63 6c 69 76 69  eds and proclivi
4ad0: 74 69 65 73 20 6f 66 20 74 68 65 20 75 6e 64 65  ties of the unde
4ae0: 72 6c 79 69 6e 67 20 73 79 73 74 65 6d 2e 20 20  rlying system.  
4af0: 54 68 65 20 75 6e 69 78 20 61 6e 64 20 77 69 6e  The unix and win
4b00: 33 32 0a 5b 56 46 53 5d 20 69 6d 70 6c 65 6d 65  32.[VFS] impleme
4b10: 6e 74 61 74 69 6f 6e 73 20 74 68 61 74 20 63 6f  ntations that co
4b20: 6d 65 20 62 75 69 6c 74 20 69 6e 74 6f 20 53 51  me built into SQ
4b30: 4c 69 74 65 20 64 6f 20 6e 6f 74 20 77 72 69 74  Lite do not writ
4b40: 65 20 74 6f 20 74 68 65 0a 6c 6f 63 6b 2d 62 79  e to the.lock-by
4b50: 74 65 20 70 61 67 65 2c 20 62 75 74 20 74 68 69  te page, but thi
4b60: 72 64 2d 70 61 72 74 79 20 56 46 53 20 69 6d 70  rd-party VFS imp
4b70: 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20 66 6f 72  lementations for
4b80: 0a 6f 74 68 65 72 20 6f 70 65 72 61 74 69 6e 67  .other operating
4b90: 20 73 79 73 74 65 6d 73 20 6d 69 67 68 74 2e 3c   systems might.<
4ba0: 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 6c 6f 63 6b  /p>..<p>The lock
4bb0: 2d 62 79 74 65 20 70 61 67 65 20 61 72 6f 73 65  -byte page arose
4bc0: 20 66 72 6f 6d 20 74 68 65 20 6e 65 65 64 20 74   from the need t
4bd0: 6f 20 73 75 70 70 6f 72 74 20 57 69 6e 39 35 20  o support Win95 
4be0: 77 68 69 63 68 20 68 61 64 0a 6f 6e 6c 79 20 6d  which had.only m
4bf0: 61 6e 64 61 74 6f 72 79 20 66 69 6c 65 20 6c 6f  andatory file lo
4c00: 63 6b 69 6e 67 2e 20 20 41 6c 6c 20 6d 6f 64 65  cking.  All mode
4c10: 72 6e 20 6f 70 65 72 61 74 69 6e 67 20 73 79 73  rn operating sys
4c20: 74 65 6d 73 20 74 68 61 74 20 77 65 20 6b 6e 6f  tems that we kno
4c30: 77 20 6f 66 0a 73 75 70 70 6f 72 74 20 61 64 76  w of.support adv
4c40: 69 73 6f 72 79 20 66 69 6c 65 20 6c 6f 63 6b 69  isory file locki
4c50: 6e 67 2c 20 61 6e 64 20 73 6f 20 74 68 65 20 6c  ng, and so the l
4c60: 6f 63 6b 2d 62 79 74 65 20 70 61 67 65 20 69 73  ock-byte page is
4c70: 20 6e 6f 74 20 72 65 61 6c 6c 79 0a 6e 65 65 64   not really.need
4c80: 65 64 20 61 6e 79 20 6d 6f 72 65 2c 20 62 75 74  ed any more, but
4c90: 20 69 73 20 72 65 74 61 69 6e 65 64 20 66 6f 72   is retained for
4ca0: 20 62 61 63 6b 77 61 72 64 73 20 63 6f 6d 70 61   backwards compa
4cb0: 74 69 62 69 6c 69 74 79 2e 3c 2f 70 3e 0a 0a 3c  tibility.</p>..<
4cc0: 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
4cd0: 7b 66 72 65 65 6c 69 73 74 7d 20 7b 66 72 65 65  {freelist} {free
4ce0: 6c 69 73 74 7d 20 7b 66 72 65 65 2d 70 61 67 65  list} {free-page
4cf0: 20 6c 69 73 74 7d 3c 2f 74 63 6c 3e 0a 3c 68 32   list}</tcl>.<h2
4d00: 3e 54 68 65 20 46 72 65 65 6c 69 73 74 3c 2f 68  >The Freelist</h
4d10: 32 3e 0a 0a 3c 70 3e 41 20 64 61 74 61 62 61 73  2>..<p>A databas
4d20: 65 20 66 69 6c 65 20 6d 69 67 68 74 20 63 6f 6e  e file might con
4d30: 74 61 69 6e 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  tain one or more
4d40: 20 70 61 67 65 73 20 74 68 61 74 20 61 72 65 20   pages that are 
4d50: 6e 6f 74 20 69 6e 0a 61 63 74 69 76 65 20 75 73  not in.active us
4d60: 65 2e 20 20 55 6e 75 73 65 64 20 70 61 67 65 73  e.  Unused pages
4d70: 20 63 61 6e 20 63 6f 6d 65 20 61 62 6f 75 74 2c   can come about,
4d80: 20 66 6f 72 20 65 78 61 6d 70 6c 65 2c 20 77 68   for example, wh
4d90: 65 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 69  en information.i
4da0: 73 20 64 65 6c 65 74 65 64 20 66 72 6f 6d 20 74  s deleted from t
4db0: 68 65 20 64 61 74 61 62 61 73 65 2e 20 20 55 6e  he database.  Un
4dc0: 75 73 65 64 20 70 61 67 65 73 20 61 72 65 20 73  used pages are s
4dd0: 74 6f 72 65 64 20 6f 6e 20 74 68 65 20 66 72 65  tored on the fre
4de0: 65 6c 69 73 74 0a 61 6e 64 20 61 72 65 20 72 65  elist.and are re
4df0: 75 73 65 64 20 77 68 65 6e 20 61 64 64 69 74 69  used when additi
4e00: 6f 6e 61 6c 20 70 61 67 65 73 20 61 72 65 20 72  onal pages are r
4e10: 65 71 75 69 72 65 64 2e 3c 2f 70 3e 0a 0a 3c 70  equired.</p>..<p
4e20: 3e 54 68 65 20 66 72 65 65 6c 69 73 74 20 69 73  >The freelist is
4e30: 20 6f 72 67 61 6e 69 7a 65 64 20 61 73 20 61 20   organized as a 
4e40: 6c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 66  linked list of f
4e50: 72 65 65 6c 69 73 74 20 74 72 75 6e 6b 20 70 61  reelist trunk pa
4e60: 67 65 73 0a 77 69 74 68 20 65 61 63 68 20 74 72  ges.with each tr
4e70: 75 6e 6b 20 70 61 67 65 73 20 63 6f 6e 74 61 69  unk pages contai
4e80: 6e 69 6e 67 20 70 61 67 65 20 6e 75 6d 62 65 72  ning page number
4e90: 73 20 66 6f 72 20 7a 65 72 6f 20 6f 72 20 6d 6f  s for zero or mo
4ea0: 72 65 20 66 72 65 65 6c 69 73 74 0a 6c 65 61 66  re freelist.leaf
4eb0: 20 70 61 67 65 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e   pages.</p>..<p>
4ec0: 41 20 66 72 65 65 6c 69 73 74 20 74 72 75 6e 6b  A freelist trunk
4ed0: 20 70 61 67 65 20 63 6f 6e 73 69 73 74 73 20 6f   page consists o
4ee0: 66 20 61 6e 20 61 72 72 61 79 20 6f 66 20 34 2d  f an array of 4-
4ef0: 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20  byte big-endian 
4f00: 69 6e 74 65 67 65 72 73 2e 0a 54 68 65 20 73 69  integers..The si
4f10: 7a 65 20 6f 66 20 74 68 65 20 61 72 72 61 79 20  ze of the array 
4f20: 69 73 20 61 73 20 6d 61 6e 79 20 69 6e 74 65 67  is as many integ
4f30: 65 72 73 20 61 73 20 77 69 6c 6c 20 66 69 74 20  ers as will fit 
4f40: 69 6e 20 74 68 65 20 75 73 61 62 6c 65 20 73 70  in the usable sp
4f50: 61 63 65 0a 6f 66 20 61 20 70 61 67 65 2e 20 20  ace.of a page.  
4f60: 54 68 65 20 6d 69 6e 69 6d 75 6d 20 75 73 61 62  The minimum usab
4f70: 6c 65 20 73 70 61 63 65 20 69 73 20 34 38 30 20  le space is 480 
4f80: 62 79 74 65 73 20 73 6f 20 74 68 65 20 61 72 72  bytes so the arr
4f90: 61 79 20 77 69 6c 6c 20 61 6c 77 61 79 73 0a 62  ay will always.b
4fa0: 65 20 61 74 20 6c 65 61 73 74 20 31 32 30 20 65  e at least 120 e
4fb0: 6e 74 72 69 65 73 20 69 6e 20 6c 65 6e 67 74 68  ntries in length
4fc0: 2e 20 20 5e 54 68 65 20 66 69 72 73 74 20 69 6e  .  ^The first in
4fd0: 74 65 67 65 72 20 6f 6e 20 61 20 66 72 65 65 6c  teger on a freel
4fe0: 69 73 74 20 74 72 75 6e 6b 0a 70 61 67 65 20 69  ist trunk.page i
4ff0: 73 20 74 68 65 20 70 61 67 65 20 6e 75 6d 62 65  s the page numbe
5000: 72 20 6f 66 20 74 68 65 20 6e 65 78 74 20 66 72  r of the next fr
5010: 65 65 6c 69 73 74 20 74 72 75 6e 6b 20 70 61 67  eelist trunk pag
5020: 65 20 69 6e 20 74 68 65 20 6c 69 73 74 20 6f 72  e in the list or
5030: 20 7a 65 72 6f 20 0a 69 66 20 74 68 69 73 20 69   zero .if this i
5040: 73 20 74 68 65 20 6c 61 73 74 20 66 72 65 65 6c  s the last freel
5050: 69 73 74 20 74 72 75 6e 6b 20 70 61 67 65 2e 20  ist trunk page. 
5060: 20 5e 54 68 65 20 73 65 63 6f 6e 64 20 69 6e 74   ^The second int
5070: 65 67 65 72 20 6f 6e 20 61 20 66 72 65 65 6c 69  eger on a freeli
5080: 73 74 0a 74 72 75 6e 6b 20 70 61 67 65 20 69 73  st.trunk page is
5090: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6c   the number of l
50a0: 65 61 66 20 70 61 67 65 20 70 6f 69 6e 74 65 72  eaf page pointer
50b0: 73 20 74 6f 20 66 6f 6c 6c 6f 77 2e 20 20 0a 5e  s to follow.  .^
50c0: 28 43 61 6c 6c 20 74 68 65 20 73 65 63 6f 6e 64  (Call the second
50d0: 20 69 6e 74 65 67 65 72 20 6f 6e 20 61 20 66 72   integer on a fr
50e0: 65 65 6c 69 73 74 20 74 72 75 6e 6b 20 70 61 67  eelist trunk pag
50f0: 65 20 4c 2e 0a 49 66 20 4c 20 69 73 20 67 72 65  e L..If L is gre
5100: 61 74 65 72 20 74 68 61 6e 20 7a 65 72 6f 20 74  ater than zero t
5110: 68 65 6e 20 69 6e 74 65 67 65 72 73 20 77 69 74  hen integers wit
5120: 68 20 61 72 72 61 79 20 69 6e 64 65 78 65 73 20  h array indexes 
5130: 62 65 74 77 65 65 6e 20 32 20 61 6e 64 0a 4c 2b  between 2 and.L+
5140: 31 20 69 6e 63 6c 75 73 69 76 65 20 63 6f 6e 74  1 inclusive cont
5150: 61 69 6e 20 70 61 67 65 20 6e 75 6d 62 65 72 73  ain page numbers
5160: 20 66 6f 72 20 66 72 65 65 6c 69 73 74 20 6c 65   for freelist le
5170: 61 66 20 70 61 67 65 73 2e 29 5e 3c 2f 70 3e 0a  af pages.)^</p>.
5180: 0a 3c 70 3e 46 72 65 65 6c 69 73 74 20 6c 65 61  .<p>Freelist lea
5190: 66 20 70 61 67 65 73 20 63 6f 6e 74 61 69 6e 20  f pages contain 
51a0: 6e 6f 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20  no information. 
51b0: 20 5e 53 51 4c 69 74 65 20 61 76 6f 69 64 73 20   ^SQLite avoids 
51c0: 72 65 61 64 69 6e 67 20 6f 72 0a 77 72 69 74 69  reading or.writi
51d0: 6e 67 20 66 72 65 65 6c 69 73 74 20 6c 65 61 66  ng freelist leaf
51e0: 20 70 61 67 65 73 20 69 6e 20 6f 72 64 65 72 20   pages in order 
51f0: 74 6f 20 72 65 64 75 63 65 20 64 69 73 6b 20 49  to reduce disk I
5200: 2f 4f 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 20 62 75  /O.</p>..<p>A bu
5210: 67 20 69 6e 20 53 51 4c 69 74 65 20 76 65 72 73  g in SQLite vers
5220: 69 6f 6e 73 20 70 72 69 6f 72 20 74 6f 20 33 2e  ions prior to 3.
5230: 36 2e 30 20 63 61 75 73 65 64 20 74 68 65 20 64  6.0 caused the d
5240: 61 74 61 62 61 73 65 20 74 6f 20 62 65 0a 72 65  atabase to be.re
5250: 70 6f 72 74 65 64 20 61 73 20 63 6f 72 72 75 70  ported as corrup
5260: 74 20 69 66 20 61 6e 79 20 6f 66 20 74 68 65 20  t if any of the 
5270: 6c 61 73 74 20 36 20 65 6e 74 72 69 65 73 20 69  last 6 entries i
5280: 6e 20 74 68 65 20 66 72 65 65 6c 69 73 74 20 74  n the freelist t
5290: 72 75 6e 6b 20 70 61 67 65 20 0a 61 72 72 61 79  runk page .array
52a0: 20 63 6f 6e 74 61 69 6e 65 64 20 6e 6f 6e 2d 7a   contained non-z
52b0: 65 72 6f 20 76 61 6c 75 65 73 2e 20 20 4e 65 77  ero values.  New
52c0: 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53  er versions of S
52d0: 51 4c 69 74 65 20 64 6f 20 6e 6f 74 20 68 61 76  QLite do not hav
52e0: 65 0a 74 68 69 73 20 70 72 6f 62 6c 65 6d 2e 20  e.this problem. 
52f0: 20 5e 48 6f 77 65 76 65 72 2c 20 6e 65 77 65 72   ^However, newer
5300: 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c   versions of SQL
5310: 69 74 65 20 73 74 69 6c 6c 20 61 76 6f 69 64 20  ite still avoid 
5320: 75 73 69 6e 67 20 74 68 65 20 0a 6c 61 73 74 20  using the .last 
5330: 73 69 78 20 65 6e 74 72 69 65 73 20 69 6e 20 74  six entries in t
5340: 68 65 20 66 72 65 65 6c 69 73 74 20 74 72 75 6e  he freelist trun
5350: 6b 20 70 61 67 65 20 61 72 72 61 79 20 69 6e 20  k page array in 
5360: 6f 72 64 65 72 20 74 68 61 74 20 64 61 74 61 62  order that datab
5370: 61 73 65 0a 66 69 6c 65 73 20 63 72 65 61 74 65  ase.files create
5380: 64 20 62 79 20 6e 65 77 65 72 20 76 65 72 73 69  d by newer versi
5390: 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 63 61  ons of SQLite ca
53a0: 6e 20 62 65 20 72 65 61 64 20 62 79 20 6f 6c 64  n be read by old
53b0: 65 72 20 76 65 72 73 69 6f 6e 73 0a 6f 66 20 53  er versions.of S
53c0: 51 4c 69 74 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  QLite.</p>..<p>^
53d0: 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 66 72  The number of fr
53e0: 65 65 6c 69 73 74 20 70 61 67 65 73 20 69 73 20  eelist pages is 
53f0: 73 74 6f 72 65 64 20 61 73 20 61 20 34 2d 62 79  stored as a 4-by
5400: 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e  te big-endian in
5410: 74 65 67 65 72 0a 69 6e 20 74 68 65 20 64 61 74  teger.in the dat
5420: 61 62 61 73 65 20 68 65 61 64 65 72 20 61 74 20  abase header at 
5430: 61 6e 20 6f 66 66 73 65 74 20 6f 66 20 33 36 20  an offset of 36 
5440: 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69  from the beginni
5450: 6e 67 20 6f 66 20 74 68 65 20 66 69 6c 65 2e 0a  ng of the file..
5460: 5e 54 68 65 20 64 61 74 61 62 61 73 65 20 68 65  ^The database he
5470: 61 64 65 72 20 61 6c 73 6f 20 73 74 6f 72 65 73  ader also stores
5480: 20 74 68 65 20 70 61 67 65 20 6e 75 6d 62 65 72   the page number
5490: 20 6f 66 20 74 68 65 20 66 69 72 73 74 20 66 72   of the first fr
54a0: 65 65 6c 69 73 74 20 74 72 75 6e 6b 0a 70 61 67  eelist trunk.pag
54b0: 65 20 61 73 20 61 20 34 2d 62 79 74 65 20 62 69  e as a 4-byte bi
54c0: 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72  g-endian integer
54d0: 20 61 74 20 61 6e 20 6f 66 66 73 65 74 20 6f 66   at an offset of
54e0: 20 33 32 20 66 72 6f 6d 20 74 68 65 20 62 65 67   32 from the beg
54f0: 69 6e 6e 69 6e 67 0a 6f 66 20 74 68 65 20 66 69  inning.of the fi
5500: 6c 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  le.</p>..<tcl>hd
5510: 5f 66 72 61 67 6d 65 6e 74 20 62 74 72 65 65 20  _fragment btree 
5520: 7b 42 2a 2d 54 72 65 65 73 7d 20 7b 42 2d 74 72  {B*-Trees} {B-tr
5530: 65 65 7d 3c 2f 74 63 6c 3e 0a 3c 68 32 3e 42 2d  ee}</tcl>.<h2>B-
5540: 74 72 65 65 20 50 61 67 65 73 3c 2f 68 32 3e 0a  tree Pages</h2>.
5550: 0a 3c 70 3e 54 68 65 20 62 2d 74 72 65 65 20 61  .<p>The b-tree a
5560: 6c 67 6f 72 69 74 68 6d 20 70 72 6f 76 69 64 65  lgorithm provide
5570: 73 20 6b 65 79 2f 64 61 74 61 20 73 74 6f 72 61  s key/data stora
5580: 67 65 20 77 69 74 68 20 75 6e 69 71 75 65 20 61  ge with unique a
5590: 6e 64 0a 6f 72 64 65 72 65 64 20 6b 65 79 73 20  nd.ordered keys 
55a0: 6f 6e 20 70 61 67 65 2d 6f 72 69 65 6e 74 65 64  on page-oriented
55b0: 20 73 74 6f 72 61 67 65 20 64 65 76 69 63 65 73   storage devices
55c0: 2e 0a 46 6f 72 20 62 61 63 6b 67 72 6f 75 6e 64  ..For background
55d0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6f 6e 20   information on 
55e0: 62 2d 74 72 65 65 73 2c 20 73 65 65 0a 4b 6e 75  b-trees, see.Knu
55f0: 74 68 2c 20 3c 75 3e 54 68 65 20 41 72 74 20 4f  th, <u>The Art O
5600: 66 20 43 6f 6d 70 75 74 65 72 20 50 72 6f 67 72  f Computer Progr
5610: 61 6d 6d 69 6e 67 3c 2f 75 3e 2c 20 56 6f 6c 75  amming</u>, Volu
5620: 6d 65 20 33 20 22 53 6f 72 74 69 6e 67 0a 61 6e  me 3 "Sorting.an
5630: 64 20 53 65 61 72 63 68 69 6e 67 22 2c 20 70 61  d Searching", pa
5640: 67 65 73 20 34 37 31 2d 34 37 39 2e 20 20 54 77  ges 471-479.  Tw
5650: 6f 20 6b 69 6e 64 73 20 6f 66 20 62 2d 74 72 65  o kinds of b-tre
5660: 65 73 20 61 72 65 20 75 73 65 64 20 62 79 0a 53  es are used by.S
5670: 51 4c 69 74 65 2e 20 20 54 68 65 20 61 6c 67 6f  QLite.  The algo
5680: 72 69 74 68 6d 20 74 68 61 74 20 4b 6e 75 74 68  rithm that Knuth
5690: 20 63 61 6c 6c 73 20 22 42 2a 2d 54 72 65 65 22   calls "B*-Tree"
56a0: 20 73 74 6f 72 65 73 20 61 6c 6c 20 64 61 74 61   stores all data
56b0: 0a 69 6e 20 74 68 65 20 6c 65 61 76 65 73 20 6f  .in the leaves o
56c0: 66 20 74 68 65 20 74 72 65 65 2e 20 20 53 51 4c  f the tree.  SQL
56d0: 69 74 65 20 63 61 6c 6c 73 20 74 68 69 73 20 76  ite calls this v
56e0: 61 72 69 65 74 79 20 6f 66 20 62 2d 74 72 65 65  ariety of b-tree
56f0: 0a 61 20 22 74 61 62 6c 65 20 62 2d 74 72 65 65  .a "table b-tree
5700: 22 2e 20 54 68 65 20 61 6c 67 6f 72 69 74 68 6d  ". The algorithm
5710: 20 74 68 61 74 20 4b 6e 75 74 68 20 63 61 6c 6c   that Knuth call
5720: 73 20 73 69 6d 70 6c 79 20 22 42 2d 54 72 65 65  s simply "B-Tree
5730: 22 0a 73 74 6f 72 65 73 20 62 6f 74 68 20 74 68  ".stores both th
5740: 65 20 6b 65 79 20 61 6e 64 20 74 68 65 20 64 61  e key and the da
5750: 74 61 20 74 6f 67 65 74 68 65 72 20 69 6e 20 62  ta together in b
5760: 6f 74 68 20 6c 65 61 76 65 73 0a 61 6e 64 20 69  oth leaves.and i
5770: 6e 20 69 6e 74 65 72 69 6f 72 20 70 61 67 65 73  n interior pages
5780: 2e 20 20 49 6e 20 74 68 65 20 53 51 4c 69 74 65  .  In the SQLite
5790: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c   implementation,
57a0: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 42 2d   the original.B-
57b0: 54 72 65 65 20 61 6c 67 6f 72 69 74 68 6d 20 73  Tree algorithm s
57c0: 74 6f 72 65 73 20 6b 65 79 73 20 6f 6e 6c 79 2c  tores keys only,
57d0: 20 6f 6d 69 74 74 69 6e 67 20 74 68 65 20 64 61   omitting the da
57e0: 74 61 20 65 6e 74 69 72 65 6c 79 2c 20 61 6e 64  ta entirely, and
57f0: 0a 69 73 20 63 61 6c 6c 65 64 20 61 6e 20 22 69  .is called an "i
5800: 6e 64 65 78 20 62 2d 74 72 65 65 22 2e 0a 0a 3c  ndex b-tree"...<
5810: 70 3e 41 20 62 2d 74 72 65 65 20 70 61 67 65 20  p>A b-tree page 
5820: 69 73 20 65 69 74 68 65 72 20 61 6e 20 69 6e 74  is either an int
5830: 65 72 69 6f 72 20 70 61 67 65 20 6f 72 20 61 20  erior page or a 
5840: 6c 65 61 66 20 70 61 67 65 2e 0a 41 20 6c 65 61  leaf page..A lea
5850: 66 20 70 61 67 65 20 63 6f 6e 74 61 69 6e 73 20  f page contains 
5860: 6b 65 79 73 20 61 6e 64 20 69 6e 20 74 68 65 20  keys and in the 
5870: 63 61 73 65 20 6f 66 20 61 20 74 61 62 6c 65 20  case of a table 
5880: 62 2d 74 72 65 65 20 65 61 63 68 0a 6b 65 79 20  b-tree each.key 
5890: 68 61 73 20 61 73 73 6f 63 69 61 74 65 64 20 64  has associated d
58a0: 61 74 61 2e 20 20 41 6e 20 69 6e 74 65 72 69 6f  ata.  An interio
58b0: 72 20 70 61 67 65 20 63 6f 6e 74 61 69 6e 73 0a  r page contains.
58c0: 4b 20 6b 65 79 73 20 74 6f 67 65 74 68 65 72 20  K keys together 
58d0: 77 69 74 68 20 4b 2b 31 20 70 6f 69 6e 74 65 72  with K+1 pointer
58e0: 73 20 74 6f 20 63 68 69 6c 64 20 62 2d 74 72 65  s to child b-tre
58f0: 65 20 70 61 67 65 73 2e 0a 41 20 22 70 6f 69 6e  e pages..A "poin
5900: 74 65 72 22 20 69 6e 20 61 6e 20 69 6e 74 65 72  ter" in an inter
5910: 69 6f 72 20 62 2d 74 72 65 65 20 70 61 67 65 20  ior b-tree page 
5920: 69 73 20 6a 75 73 74 20 74 68 65 20 33 31 2d 62  is just the 31-b
5930: 69 74 20 69 6e 74 65 67 65 72 0a 70 61 67 65 20  it integer.page 
5940: 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 63 68  number of the ch
5950: 69 6c 64 20 70 61 67 65 2e 3c 2f 70 3e 0a 0a 3c  ild page.</p>..<
5960: 70 3e 44 65 66 69 6e 65 20 74 68 65 20 64 65 70  p>Define the dep
5970: 74 68 0a 6f 66 20 61 20 6c 65 61 66 20 62 2d 74  th.of a leaf b-t
5980: 72 65 65 20 74 6f 20 62 65 20 31 20 61 6e 64 20  ree to be 1 and 
5990: 74 68 65 20 64 65 70 74 68 20 6f 66 20 61 6e 79  the depth of any
59a0: 20 69 6e 74 65 72 69 6f 72 20 62 2d 74 72 65 65   interior b-tree
59b0: 20 74 6f 20 62 65 20 6f 6e 65 0a 6d 6f 72 65 20   to be one.more 
59c0: 74 68 61 6e 20 74 68 65 20 6d 61 78 69 6d 75 6d  than the maximum
59d0: 20 64 65 70 74 68 20 6f 66 20 61 6e 79 20 6f 66   depth of any of
59e0: 20 69 74 73 20 63 68 69 6c 64 72 65 6e 2e 20 20   its children.  
59f0: 5e 49 6e 20 61 20 77 65 6c 6c 2d 66 6f 72 6d 65  ^In a well-forme
5a00: 64 0a 64 61 74 61 62 61 73 65 2c 20 61 6c 6c 20  d.database, all 
5a10: 63 68 69 6c 64 72 65 6e 20 6f 66 20 61 6e 20 69  children of an i
5a20: 6e 74 65 72 69 6f 72 20 62 2d 74 72 65 65 20 68  nterior b-tree h
5a30: 61 76 65 20 74 68 65 20 73 61 6d 65 20 64 65 70  ave the same dep
5a40: 74 68 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 6e 20 61  th.</p>..<p>In a
5a50: 6e 20 69 6e 74 65 72 69 6f 72 20 62 2d 74 72 65  n interior b-tre
5a60: 65 20 70 61 67 65 2c 20 74 68 65 20 70 6f 69 6e  e page, the poin
5a70: 74 65 72 73 20 61 6e 64 20 6b 65 79 73 20 6c 6f  ters and keys lo
5a80: 67 69 63 61 6c 6c 79 20 61 6c 74 65 72 6e 61 74  gically alternat
5a90: 65 20 0a 77 69 74 68 20 61 20 70 6f 69 6e 74 65  e .with a pointe
5aa0: 72 20 6f 6e 20 62 6f 74 68 20 65 6e 64 73 2e 20  r on both ends. 
5ab0: 28 54 68 65 20 70 72 65 76 69 6f 75 73 20 73 65  (The previous se
5ac0: 6e 74 65 6e 63 65 20 69 73 20 74 6f 20 62 65 20  ntence is to be 
5ad0: 75 6e 64 65 72 73 74 6f 6f 64 0a 63 6f 6e 63 65  understood.conce
5ae0: 70 74 75 61 6c 6c 79 20 2d 20 74 68 65 20 61 63  ptually - the ac
5af0: 74 75 61 6c 20 6c 61 79 6f 75 74 20 6f 66 20 74  tual layout of t
5b00: 68 65 20 6b 65 79 73 20 61 6e 64 0a 70 6f 69 6e  he keys and.poin
5b10: 74 65 72 73 20 77 69 74 68 69 6e 20 74 68 65 20  ters within the 
5b20: 70 61 67 65 20 69 73 20 6d 6f 72 65 20 63 6f 6d  page is more com
5b30: 70 6c 69 63 61 74 65 64 20 61 6e 64 20 77 69 6c  plicated and wil
5b40: 6c 20 62 65 20 64 65 73 63 72 69 62 65 64 20 69  l be described i
5b50: 6e 0a 74 68 65 20 73 65 71 75 65 6c 2e 29 20 20  n.the sequel.)  
5b60: 41 6c 6c 20 6b 65 79 73 20 77 69 74 68 69 6e 20  All keys within 
5b70: 74 68 65 20 73 61 6d 65 20 70 61 67 65 20 61 72  the same page ar
5b80: 65 20 75 6e 69 71 75 65 20 61 6e 64 20 61 72 65  e unique and are
5b90: 20 6c 6f 67 69 63 61 6c 6c 79 0a 6f 72 67 61 6e   logically.organ
5ba0: 69 7a 65 64 20 69 6e 20 61 73 63 65 6e 64 69 6e  ized in ascendin
5bb0: 67 20 6f 72 64 65 72 20 66 72 6f 6d 20 6c 65 66  g order from lef
5bc0: 74 20 74 6f 20 72 69 67 68 74 2e 20 20 28 41 67  t to right.  (Ag
5bd0: 61 69 6e 2c 20 74 68 69 73 20 6f 72 64 65 72 69  ain, this orderi
5be0: 6e 67 0a 69 73 20 6c 6f 67 69 63 61 6c 2c 20 6e  ng.is logical, n
5bf0: 6f 74 20 70 68 79 73 69 63 61 6c 2e 20 20 54 68  ot physical.  Th
5c00: 65 20 61 63 74 75 61 6c 20 6c 6f 63 61 74 69 6f  e actual locatio
5c10: 6e 20 6f 66 20 6b 65 79 73 20 77 69 74 68 69 6e  n of keys within
5c20: 20 74 68 65 20 70 61 67 65 0a 69 73 20 61 72 62   the page.is arb
5c30: 69 74 72 61 72 79 2e 29 20 5e 46 6f 72 20 61 6e  itrary.) ^For an
5c40: 79 20 6b 65 79 20 58 2c 20 70 6f 69 6e 74 65 72  y key X, pointer
5c50: 73 20 74 6f 20 74 68 65 20 6c 65 66 74 0a 6f 66  s to the left.of
5c60: 20 61 20 58 20 72 65 66 65 72 20 74 6f 20 62 2d   a X refer to b-
5c70: 74 72 65 65 20 70 61 67 65 73 20 6f 6e 20 77 68  tree pages on wh
5c80: 69 63 68 20 61 6c 6c 20 6b 65 79 73 20 61 72 65  ich all keys are
5c90: 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71   less than or eq
5ca0: 75 61 6c 20 74 6f 20 58 2e 0a 5e 50 6f 69 6e 74  ual to X..^Point
5cb0: 65 72 73 20 74 6f 20 74 68 65 20 72 69 67 68 74  ers to the right
5cc0: 20 6f 66 20 58 20 72 65 66 65 72 20 74 6f 20 70   of X refer to p
5cd0: 61 67 65 73 20 77 68 65 72 65 20 61 6c 6c 20 6b  ages where all k
5ce0: 65 79 73 20 61 72 65 20 0a 67 72 65 61 74 65 72  eys are .greater
5cf0: 20 74 68 61 6e 20 58 2e 3c 2f 70 3e 0a 0a 3c 70   than X.</p>..<p
5d00: 3e 57 69 74 68 69 6e 20 61 6e 20 69 6e 74 65 72  >Within an inter
5d10: 69 6f 72 20 62 2d 74 72 65 65 20 70 61 67 65 2c  ior b-tree page,
5d20: 20 65 61 63 68 20 6b 65 79 20 61 6e 64 20 74 68   each key and th
5d30: 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 69 74 73  e pointer to its
5d40: 0a 69 6d 6d 65 64 69 61 74 65 20 6c 65 66 74 20  .immediate left 
5d50: 61 72 65 20 63 6f 6d 62 69 6e 65 64 20 69 6e 74  are combined int
5d60: 6f 20 61 20 73 74 72 75 63 74 75 72 65 20 63 61  o a structure ca
5d70: 6c 6c 65 64 20 61 20 22 63 65 6c 6c 22 2e 20 20  lled a "cell".  
5d80: 54 68 65 0a 72 69 67 68 74 2d 6d 6f 73 74 20 70  The.right-most p
5d90: 6f 69 6e 74 65 72 20 69 73 20 68 65 6c 64 20 73  ointer is held s
5da0: 65 70 61 72 61 74 65 6c 79 2e 20 20 41 20 6c 65  eparately.  A le
5db0: 61 66 20 62 2d 74 72 65 65 20 70 61 67 65 20 68  af b-tree page h
5dc0: 61 73 20 6e 6f 0a 70 6f 69 6e 74 65 72 73 2c 20  as no.pointers, 
5dd0: 62 75 74 20 69 74 20 73 74 69 6c 6c 20 75 73 65  but it still use
5de0: 73 20 74 68 65 20 63 65 6c 6c 20 73 74 72 75 63  s the cell struc
5df0: 74 75 72 65 20 74 6f 20 68 6f 6c 64 20 6b 65 79  ture to hold key
5e00: 73 20 66 6f 72 0a 69 6e 64 65 78 20 62 2d 74 72  s for.index b-tr
5e10: 65 65 73 20 6f 72 20 6b 65 79 73 20 61 6e 64 20  ees or keys and 
5e20: 63 6f 6e 74 65 6e 74 20 66 6f 72 20 74 61 62 6c  content for tabl
5e30: 65 20 62 2d 74 72 65 65 73 2e 20 20 44 61 74 61  e b-trees.  Data
5e40: 20 69 73 20 61 6c 73 6f 0a 63 6f 6e 74 61 69 6e   is also.contain
5e50: 65 64 20 69 6e 20 74 68 65 20 63 65 6c 6c 2e 0a  ed in the cell..
5e60: 3c 2f 70 3e 0a 0a 3c 70 3e 45 76 65 72 79 20 62  </p>..<p>Every b
5e70: 2d 74 72 65 65 20 70 61 67 65 20 68 61 73 20 61  -tree page has a
5e80: 74 20 6d 6f 73 74 20 6f 6e 65 20 70 61 72 65 6e  t most one paren
5e90: 74 20 62 2d 74 72 65 65 20 70 61 67 65 2e 0a 41  t b-tree page..A
5ea0: 20 62 2d 74 72 65 65 20 70 61 67 65 20 77 69 74   b-tree page wit
5eb0: 68 6f 75 74 20 61 20 70 61 72 65 6e 74 20 69 73  hout a parent is
5ec0: 20 63 61 6c 6c 65 64 20 61 20 72 6f 6f 74 20 70   called a root p
5ed0: 61 67 65 2e 20 20 41 20 72 6f 6f 74 20 62 2d 74  age.  A root b-t
5ee0: 72 65 65 20 70 61 67 65 0a 74 6f 67 65 74 68 65  ree page.togethe
5ef0: 72 20 77 69 74 68 20 74 68 65 20 63 6c 6f 73 75  r with the closu
5f00: 72 65 20 6f 66 20 69 74 73 20 63 68 69 6c 64 72  re of its childr
5f10: 65 6e 20 66 6f 72 6d 20 61 20 63 6f 6d 70 6c 65  en form a comple
5f20: 74 65 20 62 2d 74 72 65 65 2e 0a 49 74 20 69 73  te b-tree..It is
5f30: 20 70 6f 73 73 69 62 6c 65 20 28 61 6e 64 20 69   possible (and i
5f40: 6e 20 66 61 63 74 20 72 61 74 68 65 72 20 63 6f  n fact rather co
5f50: 6d 6d 6f 6e 29 20 74 6f 20 68 61 76 65 20 61 20  mmon) to have a 
5f60: 63 6f 6d 70 6c 65 74 65 20 62 2d 74 72 65 65 0a  complete b-tree.
5f70: 74 68 61 74 20 63 6f 6e 73 69 73 74 73 20 6f 66  that consists of
5f80: 20 61 20 73 69 6e 67 6c 65 20 70 61 67 65 20 74   a single page t
5f90: 68 61 74 20 69 73 20 62 6f 74 68 20 61 20 6c 65  hat is both a le
5fa0: 61 66 20 61 6e 64 20 74 68 65 20 72 6f 6f 74 2e  af and the root.
5fb0: 0a 42 65 63 61 75 73 65 20 74 68 65 72 65 20 61  .Because there a
5fc0: 72 65 20 70 6f 69 6e 74 65 72 73 20 66 72 6f 6d  re pointers from
5fd0: 20 70 61 72 65 6e 74 73 20 74 6f 20 63 68 69 6c   parents to chil
5fe0: 64 72 65 6e 2c 20 65 76 65 72 79 20 70 61 67 65  dren, every page
5ff0: 20 6f 66 20 61 0a 63 6f 6d 70 6c 65 74 65 20 62   of a.complete b
6000: 2d 74 72 65 65 20 63 61 6e 20 62 65 20 6c 6f 63  -tree can be loc
6010: 61 74 65 64 20 69 66 20 6f 6e 6c 79 20 74 68 65  ated if only the
6020: 20 72 6f 6f 74 20 70 61 67 65 20 69 73 20 6b 6e   root page is kn
6030: 6f 77 6e 2e 20 20 48 65 6e 63 65 2c 0a 62 2d 74  own.  Hence,.b-t
6040: 72 65 65 73 20 61 72 65 20 69 64 65 6e 74 69 66  rees are identif
6050: 69 65 64 20 62 79 20 74 68 65 69 72 20 72 6f 6f  ied by their roo
6060: 74 20 70 61 67 65 20 6e 75 6d 62 65 72 2e 3c 2f  t page number.</
6070: 70 3e 0a 0a 3c 70 3e 41 20 62 2d 74 72 65 65 20  p>..<p>A b-tree 
6080: 70 61 67 65 20 69 73 20 65 69 74 68 65 72 20 61  page is either a
6090: 20 74 61 62 6c 65 20 62 2d 74 72 65 65 20 70 61   table b-tree pa
60a0: 67 65 20 6f 72 20 61 6e 20 69 6e 64 65 78 20 62  ge or an index b
60b0: 2d 74 72 65 65 20 70 61 67 65 2e 0a 41 6c 6c 20  -tree page..All 
60c0: 70 61 67 65 73 20 77 69 74 68 69 6e 20 65 61 63  pages within eac
60d0: 68 20 63 6f 6d 70 6c 65 74 65 20 62 2d 74 72 65  h complete b-tre
60e0: 65 20 61 72 65 20 6f 66 20 74 68 65 20 73 61 6d  e are of the sam
60f0: 65 20 74 79 70 65 3a 20 65 69 74 68 65 72 20 74  e type: either t
6100: 61 62 6c 65 0a 6f 72 20 69 6e 64 65 78 2e 20 20  able.or index.  
6110: 54 68 65 72 65 20 69 73 20 6f 6e 65 20 74 61 62  There is one tab
6120: 6c 65 20 62 2d 74 72 65 65 73 20 69 6e 20 74 68  le b-trees in th
6130: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a  e database file.
6140: 66 6f 72 20 65 61 63 68 20 72 6f 77 69 64 20 74  for each rowid t
6150: 61 62 6c 65 20 69 6e 20 74 68 65 20 64 61 74 61  able in the data
6160: 62 61 73 65 20 73 63 68 65 6d 61 2c 20 69 6e 63  base schema, inc
6170: 6c 75 64 69 6e 67 20 73 79 73 74 65 6d 20 74 61  luding system ta
6180: 62 6c 65 73 0a 73 75 63 68 20 61 73 20 73 71 6c  bles.such as sql
6190: 69 74 65 5f 6d 61 73 74 65 72 2e 20 20 54 68 65  ite_master.  The
61a0: 72 65 20 69 73 20 6f 6e 65 20 69 6e 64 65 78 20  re is one index 
61b0: 62 2d 74 72 65 65 0a 69 6e 20 74 68 65 20 64 61  b-tree.in the da
61c0: 74 61 62 61 73 65 20 66 69 6c 65 20 66 6f 72 20  tabase file for 
61d0: 65 61 63 68 20 69 6e 64 65 78 20 69 6e 20 74 68  each index in th
61e0: 65 20 73 63 68 65 6d 61 2c 20 69 6e 63 6c 75 64  e schema, includ
61f0: 69 6e 67 20 69 6d 70 6c 69 65 64 20 69 6e 64 65  ing implied inde
6200: 78 65 73 0a 63 72 65 61 74 65 64 20 62 79 20 75  xes.created by u
6210: 6e 69 71 75 65 6e 65 73 73 20 63 6f 6e 73 74 72  niqueness constr
6220: 61 69 6e 74 73 2e 20 20 54 68 65 72 65 20 61 72  aints.  There ar
6230: 65 20 6e 6f 20 62 2d 74 72 65 65 73 20 61 73 73  e no b-trees ass
6240: 6f 63 69 61 74 65 64 20 77 69 74 68 0a 5b 76 69  ociated with.[vi
6250: 72 74 75 61 6c 20 74 61 62 6c 65 73 5d 2e 20 20  rtual tables].  
6260: 53 70 65 63 69 66 69 63 20 76 69 72 74 75 61 6c  Specific virtual
6270: 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74   table implement
6280: 61 74 69 6f 6e 73 20 6d 69 67 68 74 20 6d 61 6b  ations might mak
6290: 65 20 75 73 65 0a 6f 66 20 5b 73 68 61 64 6f 77  e use.of [shadow
62a0: 20 74 61 62 6c 65 73 5d 20 66 6f 72 20 73 74 6f   tables] for sto
62b0: 72 61 67 65 2c 20 62 75 74 20 74 68 6f 73 65 20  rage, but those 
62c0: 73 68 61 64 6f 77 20 74 61 62 6c 65 73 20 77 69  shadow tables wi
62d0: 6c 6c 20 68 61 76 65 20 73 65 70 61 72 61 74 65  ll have separate
62e0: 0a 65 6e 74 72 69 65 73 20 69 6e 20 74 68 65 20  .entries in the 
62f0: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e  database schema.
6300: 20 20 5b 57 49 54 48 4f 55 54 20 52 4f 57 49 44    [WITHOUT ROWID
6310: 5d 20 74 61 62 6c 65 73 20 75 73 65 20 69 6e 64  ] tables use ind
6320: 65 78 20 62 2d 74 72 65 65 73 0a 72 61 74 68 65  ex b-trees.rathe
6330: 72 20 74 68 61 6e 20 61 20 74 61 62 6c 65 20 62  r than a table b
6340: 2d 74 72 65 65 73 2c 20 73 6f 20 74 68 65 72 65  -trees, so there
6350: 20 69 73 20 6f 6e 65 0a 69 6e 64 65 78 20 62 2d   is one.index b-
6360: 74 72 65 65 20 69 6e 20 74 68 65 20 64 61 74 61  tree in the data
6370: 62 61 73 65 20 66 69 6c 65 20 66 6f 72 20 65 61  base file for ea
6380: 63 68 20 5b 57 49 54 48 4f 55 54 20 52 4f 57 49  ch [WITHOUT ROWI
6390: 44 5d 20 74 61 62 6c 65 2e 0a 54 68 65 20 62 2d  D] table..The b-
63a0: 74 72 65 65 20 63 6f 72 72 65 73 70 6f 6e 64 69  tree correspondi
63b0: 6e 67 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65  ng to the sqlite
63c0: 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 20 69 73  _master table is
63d0: 20 61 6c 77 61 79 73 20 61 20 74 61 62 6c 65 0a   always a table.
63e0: 62 2d 74 72 65 65 20 61 6e 64 20 61 6c 77 61 79  b-tree and alway
63f0: 73 20 68 61 73 20 61 20 72 6f 6f 74 20 70 61 67  s has a root pag
6400: 65 20 6f 66 20 31 2e 0a 54 68 65 20 73 71 6c 69  e of 1..The sqli
6410: 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 20  te_master table 
6420: 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 72 6f 6f  contains the roo
6430: 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20 66 6f  t page number fo
6440: 72 20 65 76 65 72 79 20 6f 74 68 65 72 20 0a 74  r every other .t
6450: 61 62 6c 65 20 61 6e 64 20 69 6e 64 65 78 20 69  able and index i
6460: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  n the database f
6470: 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 45 61 63  ile.</p>..<p>Eac
6480: 68 20 65 6e 74 72 79 20 69 6e 20 61 20 74 61 62  h entry in a tab
6490: 6c 65 20 62 2d 74 72 65 65 20 63 6f 6e 73 69 73  le b-tree consis
64a0: 74 73 20 6f 66 20 61 20 36 34 2d 62 69 74 20 73  ts of a 64-bit s
64b0: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 6b 65  igned integer ke
64c0: 79 0a 61 6e 64 20 75 70 20 74 6f 20 32 31 34 37  y.and up to 2147
64d0: 34 38 33 36 34 37 20 62 79 74 65 73 20 6f 66 20  483647 bytes of 
64e0: 61 72 62 69 74 72 61 72 79 20 64 61 74 61 2e 20  arbitrary data. 
64f0: 20 28 54 68 65 20 6b 65 79 20 6f 66 20 61 20 74   (The key of a t
6500: 61 62 6c 65 20 62 2d 74 72 65 65 0a 63 6f 72 72  able b-tree.corr
6510: 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 5b  esponds to the [
6520: 72 6f 77 69 64 5d 20 6f 66 20 74 68 65 20 53 51  rowid] of the SQ
6530: 4c 20 74 61 62 6c 65 20 74 68 61 74 20 74 68 65  L table that the
6540: 20 62 2d 74 72 65 65 20 69 6d 70 6c 65 6d 65 6e   b-tree implemen
6550: 74 73 2e 29 0a 49 6e 74 65 72 69 6f 72 20 74 61  ts.).Interior ta
6560: 62 6c 65 20 62 2d 74 72 65 65 73 20 68 6f 6c 64  ble b-trees hold
6570: 20 6f 6e 6c 79 20 6b 65 79 73 20 61 6e 64 20 70   only keys and p
6580: 6f 69 6e 74 65 72 73 20 74 6f 20 63 68 69 6c 64  ointers to child
6590: 72 65 6e 2e 0a 41 6c 6c 20 64 61 74 61 20 69 73  ren..All data is
65a0: 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68   contained in th
65b0: 65 20 74 61 62 6c 65 20 62 2d 74 72 65 65 20 6c  e table b-tree l
65c0: 65 61 76 65 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 45  eaves.</p>..<p>E
65d0: 61 63 68 20 65 6e 74 72 79 20 69 6e 20 61 6e 20  ach entry in an 
65e0: 69 6e 64 65 78 20 62 2d 74 72 65 65 20 63 6f 6e  index b-tree con
65f0: 73 69 73 74 73 20 6f 66 20 61 6e 20 61 72 62 69  sists of an arbi
6600: 74 72 61 72 79 20 6b 65 79 20 6f 66 20 75 70 0a  trary key of up.
6610: 74 6f 20 32 31 34 37 34 38 33 36 34 37 20 62 79  to 2147483647 by
6620: 74 65 73 20 69 6e 20 6c 65 6e 67 74 68 20 61 6e  tes in length an
6630: 64 20 6e 6f 20 64 61 74 61 2e 3c 2f 70 3e 0a 0a  d no data.</p>..
6640: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
6650: 20 63 65 6c 6c 5f 70 61 79 6c 6f 61 64 20 7b 63   cell_payload {c
6660: 65 6c 6c 20 70 61 79 6c 6f 61 64 7d 3c 2f 74 63  ell payload}</tc
6670: 6c 3e 0a 3c 70 3e 44 65 66 69 6e 65 20 74 68 65  l>.<p>Define the
6680: 20 22 70 61 79 6c 6f 61 64 22 20 6f 66 20 61 20   "payload" of a 
6690: 63 65 6c 6c 20 74 6f 20 62 65 20 74 68 65 20 61  cell to be the a
66a0: 72 62 69 74 72 61 72 79 20 6c 65 6e 67 74 68 20  rbitrary length 
66b0: 73 65 63 74 69 6f 6e 0a 6f 66 20 74 68 65 20 63  section.of the c
66c0: 65 6c 6c 2e 20 20 46 6f 72 20 61 6e 20 69 6e 64  ell.  For an ind
66d0: 65 78 20 62 2d 74 72 65 65 2c 20 74 68 65 20 6b  ex b-tree, the k
66e0: 65 79 20 69 73 20 61 6c 77 61 79 73 20 61 72 62  ey is always arb
66f0: 69 74 72 61 72 79 20 69 6e 20 6c 65 6e 67 74 68  itrary in length
6700: 0a 61 6e 64 20 68 65 6e 63 65 20 74 68 65 20 70  .and hence the p
6710: 61 79 6c 6f 61 64 20 69 73 20 74 68 65 20 6b 65  ayload is the ke
6720: 79 2e 20 20 54 68 65 72 65 20 61 72 65 20 6e 6f  y.  There are no
6730: 20 61 72 62 69 74 72 61 72 79 20 6c 65 6e 67 74   arbitrary lengt
6740: 68 20 65 6c 65 6d 65 6e 74 73 0a 69 6e 20 74 68  h elements.in th
6750: 65 20 63 65 6c 6c 73 20 6f 66 20 69 6e 74 65 72  e cells of inter
6760: 69 6f 72 20 74 61 62 6c 65 20 62 2d 74 72 65 65  ior table b-tree
6770: 20 70 61 67 65 73 20 61 6e 64 20 73 6f 20 74 68   pages and so th
6780: 6f 73 65 20 63 65 6c 6c 73 20 68 61 76 65 20 6e  ose cells have n
6790: 6f 0a 70 61 79 6c 6f 61 64 2e 20 20 54 61 62 6c  o.payload.  Tabl
67a0: 65 20 62 2d 74 72 65 65 20 6c 65 61 66 20 70 61  e b-tree leaf pa
67b0: 67 65 73 20 63 6f 6e 74 61 69 6e 20 61 72 62 69  ges contain arbi
67c0: 74 72 61 72 79 20 6c 65 6e 67 74 68 20 63 6f 6e  trary length con
67d0: 74 65 6e 74 20 61 6e 64 0a 73 6f 20 66 6f 72 20  tent and.so for 
67e0: 63 65 6c 6c 73 20 6f 6e 20 74 68 6f 73 65 20 70  cells on those p
67f0: 61 67 65 73 20 74 68 65 20 70 61 79 6c 6f 61 64  ages the payload
6800: 20 69 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 2e   is the content.
6810: 0a 3c 70 3e 57 68 65 6e 20 74 68 65 20 73 69 7a  .<p>When the siz
6820: 65 20 6f 66 20 70 61 79 6c 6f 61 64 20 66 6f 72  e of payload for
6830: 20 61 20 63 65 6c 6c 20 65 78 63 65 65 64 73 20   a cell exceeds 
6840: 61 20 63 65 72 74 61 69 6e 20 74 68 72 65 73 68  a certain thresh
6850: 6f 6c 64 20 28 74 6f 0a 62 65 20 64 65 66 69 6e  old (to.be defin
6860: 65 64 20 6c 61 74 65 72 29 20 74 68 65 6e 20 6f  ed later) then o
6870: 6e 6c 79 20 74 68 65 20 66 69 72 73 74 20 66 65  nly the first fe
6880: 77 20 62 79 74 65 73 20 6f 66 20 74 68 65 20 70  w bytes of the p
6890: 61 79 6c 6f 61 64 0a 61 72 65 20 73 74 6f 72 65  ayload.are store
68a0: 64 20 6f 6e 20 74 68 65 20 62 2d 74 72 65 65 20  d on the b-tree 
68b0: 70 61 67 65 20 61 6e 64 20 74 68 65 20 62 61 6c  page and the bal
68c0: 61 6e 63 65 20 69 73 20 73 74 6f 72 65 64 20 69  ance is stored i
68d0: 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 0a  n a linked list.
68e0: 6f 66 20 63 6f 6e 74 65 6e 74 20 6f 76 65 72 66  of content overf
68f0: 6c 6f 77 20 70 61 67 65 73 2e 3c 2f 70 3e 0a 0a  low pages.</p>..
6900: 3c 70 3e 41 20 62 2d 74 72 65 65 20 70 61 67 65  <p>A b-tree page
6910: 20 69 73 20 64 69 76 69 64 65 64 20 69 6e 74 6f   is divided into
6920: 20 72 65 67 69 6f 6e 73 20 69 6e 20 74 68 65 20   regions in the 
6930: 66 6f 6c 6c 6f 77 69 6e 67 20 6f 72 64 65 72 3a  following order:
6940: 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 54 68 65 20 31  ..<ol>.<li>The 1
6950: 30 30 2d 62 79 74 65 20 64 61 74 61 62 61 73 65  00-byte database
6960: 20 66 69 6c 65 20 68 65 61 64 65 72 20 28 66 6f   file header (fo
6970: 75 6e 64 20 6f 6e 20 70 61 67 65 20 31 20 6f 6e  und on page 1 on
6980: 6c 79 29 0a 3c 6c 69 3e 54 68 65 20 38 20 6f 72  ly).<li>The 8 or
6990: 20 31 32 20 62 79 74 65 20 62 2d 74 72 65 65 20   12 byte b-tree 
69a0: 70 61 67 65 20 68 65 61 64 65 72 0a 3c 6c 69 3e  page header.<li>
69b0: 54 68 65 20 63 65 6c 6c 20 70 6f 69 6e 74 65 72  The cell pointer
69c0: 20 61 72 72 61 79 0a 3c 6c 69 3e 55 6e 61 6c 6c   array.<li>Unall
69d0: 6f 63 61 74 65 64 20 73 70 61 63 65 0a 3c 6c 69  ocated space.<li
69e0: 3e 54 68 65 20 63 65 6c 6c 20 63 6f 6e 74 65 6e  >The cell conten
69f0: 74 20 61 72 65 61 0a 3c 6c 69 3e 54 68 65 20 72  t area.<li>The r
6a00: 65 73 65 72 76 65 64 20 72 65 67 69 6f 6e 2e 0a  eserved region..
6a10: 3c 2f 6f 6c 3e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54  </ol>.</p>..<p>T
6a20: 68 65 20 31 30 30 2d 62 79 74 65 20 64 61 74 61  he 100-byte data
6a30: 62 61 73 65 20 66 69 6c 65 20 68 65 61 64 65 72  base file header
6a40: 20 69 73 20 66 6f 75 6e 64 20 6f 6e 6c 79 20 6f   is found only o
6a50: 6e 20 70 61 67 65 20 31 2c 20 77 68 69 63 68 20  n page 1, which 
6a60: 69 73 0a 61 6c 77 61 79 73 20 61 20 74 61 62 6c  is.always a tabl
6a70: 65 20 62 2d 74 72 65 65 20 70 61 67 65 2e 20 20  e b-tree page.  
6a80: 41 6c 6c 20 6f 74 68 65 72 20 62 2d 74 72 65 65  All other b-tree
6a90: 20 70 61 67 65 73 20 69 6e 20 74 68 65 20 64 61   pages in the da
6aa0: 74 61 62 61 73 65 20 66 69 6c 65 0a 6f 6d 69 74  tabase file.omit
6ab0: 20 74 68 69 73 20 31 30 30 2d 62 79 74 65 20 68   this 100-byte h
6ac0: 65 61 64 65 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54  eader.</p>..<p>T
6ad0: 68 65 20 72 65 73 65 72 76 65 64 20 72 65 67 69  he reserved regi
6ae0: 6f 6e 20 69 73 20 61 6e 20 61 72 65 61 20 6f 66  on is an area of
6af0: 20 75 6e 75 73 65 64 20 73 70 61 63 65 20 61 74   unused space at
6b00: 20 74 68 65 20 65 6e 64 20 6f 66 20 65 76 65 72   the end of ever
6b10: 79 0a 70 61 67 65 20 28 65 78 63 65 70 74 20 74  y.page (except t
6b20: 68 65 20 6c 6f 63 6b 69 6e 67 20 70 61 67 65 29  he locking page)
6b30: 20 74 68 61 74 20 65 78 74 65 6e 73 69 6f 6e 73   that extensions
6b40: 20 63 61 6e 20 75 73 65 20 74 6f 20 68 6f 6c 64   can use to hold
6b50: 20 70 65 72 2d 70 61 67 65 0a 69 6e 66 6f 72 6d   per-page.inform
6b60: 61 74 69 6f 6e 2e 20 20 5e 54 68 65 20 73 69 7a  ation.  ^The siz
6b70: 65 20 6f 66 20 74 68 65 20 72 65 73 65 72 76 65  e of the reserve
6b80: 64 20 72 65 67 69 6f 6e 20 69 73 20 64 65 74 65  d region is dete
6b90: 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 6f 6e  rmined by the on
6ba0: 65 2d 62 79 74 65 0a 75 6e 73 69 67 6e 65 64 20  e-byte.unsigned 
6bb0: 69 6e 74 65 67 65 72 20 66 6f 75 6e 64 20 61 74  integer found at
6bc0: 20 61 6e 20 6f 66 66 73 65 74 20 6f 66 20 32 30   an offset of 20
6bd0: 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61 62 61   into the databa
6be0: 73 65 20 66 69 6c 65 20 68 65 61 64 65 72 2e 0a  se file header..
6bf0: 54 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20  The size of the 
6c00: 72 65 73 65 72 76 65 64 20 72 65 67 69 6f 6e 20  reserved region 
6c10: 69 73 20 75 73 75 61 6c 6c 79 20 7a 65 72 6f 2e  is usually zero.
6c20: 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 62 2d 74  </p>..<p>The b-t
6c30: 72 65 65 20 70 61 67 65 20 68 65 61 64 65 72 20  ree page header 
6c40: 69 73 20 38 20 62 79 74 65 73 20 69 6e 20 73 69  is 8 bytes in si
6c50: 7a 65 20 66 6f 72 20 6c 65 61 66 20 70 61 67 65  ze for leaf page
6c60: 73 20 61 6e 64 20 31 32 0a 62 79 74 65 73 20 66  s and 12.bytes f
6c70: 6f 72 20 69 6e 74 65 72 69 6f 72 20 70 61 67 65  or interior page
6c80: 73 2e 20 20 41 6c 6c 20 6d 75 6c 74 69 62 79 74  s.  All multibyt
6c90: 65 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20  e values in the 
6ca0: 70 61 67 65 20 68 65 61 64 65 72 0a 61 72 65 20  page header.are 
6cb0: 62 69 67 2d 65 6e 64 69 61 6e 2e 0a 54 68 65 20  big-endian..The 
6cc0: 62 2d 74 72 65 65 20 70 61 67 65 20 68 65 61 64  b-tree page head
6cd0: 65 72 20 69 73 20 63 6f 6d 70 6f 73 65 64 20 6f  er is composed o
6ce0: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
6cf0: 66 69 65 6c 64 73 3a 3c 2f 70 3e 0a 0a 3c 63 65  fields:</p>..<ce
6d00: 6e 74 65 72 3e 0a 3c 69 3e 42 2d 74 72 65 65 20  nter>.<i>B-tree 
6d10: 50 61 67 65 20 48 65 61 64 65 72 20 46 6f 72 6d  Page Header Form
6d20: 61 74 3c 2f 69 3e 3c 62 72 3e 0a 3c 74 61 62 6c  at</i><br>.<tabl
6d30: 65 20 62 6f 72 64 65 72 3d 31 20 77 69 64 74 68  e border=1 width
6d40: 3d 22 38 30 25 22 3e 0a 3c 74 72 3e 3c 74 68 3e  ="80%">.<tr><th>
6d50: 4f 66 66 73 65 74 3c 74 68 3e 53 69 7a 65 3c 74  Offset<th>Size<t
6d60: 68 3e 44 65 73 63 72 69 70 74 69 6f 6e 0a 3c 74  h>Description.<t
6d70: 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74  r><td align=cent
6d80: 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 30 3c  er valign=top>0<
6d90: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
6da0: 76 61 6c 69 67 6e 3d 74 6f 70 3e 31 3c 74 64 20  valign=top>1<td 
6db0: 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 54 68 65  align=left>.^The
6dc0: 20 6f 6e 65 2d 62 79 74 65 20 66 6c 61 67 20 61   one-byte flag a
6dd0: 74 20 6f 66 66 73 65 74 20 30 20 69 6e 64 69 63  t offset 0 indic
6de0: 61 74 69 6e 67 20 74 68 65 20 62 2d 74 72 65 65  ating the b-tree
6df0: 20 70 61 67 65 20 74 79 70 65 2e 3c 75 6c 3e 0a   page type.<ul>.
6e00: 3c 6c 69 3e 5e 41 20 76 61 6c 75 65 20 6f 66 20  <li>^A value of 
6e10: 32 20 28 30 78 30 32 29 20 6d 65 61 6e 73 20 74  2 (0x02) means t
6e20: 68 65 20 70 61 67 65 20 69 73 20 61 6e 20 69 6e  he page is an in
6e30: 74 65 72 69 6f 72 20 69 6e 64 65 78 20 62 2d 74  terior index b-t
6e40: 72 65 65 20 70 61 67 65 2e 0a 3c 6c 69 3e 5e 41  ree page..<li>^A
6e50: 20 76 61 6c 75 65 20 6f 66 20 35 20 28 30 78 30   value of 5 (0x0
6e60: 35 29 20 6d 65 61 6e 73 20 74 68 65 20 70 61 67  5) means the pag
6e70: 65 20 69 73 20 61 6e 20 69 6e 74 65 72 69 6f 72  e is an interior
6e80: 20 74 61 62 6c 65 20 62 2d 74 72 65 65 20 70 61   table b-tree pa
6e90: 67 65 2e 0a 3c 6c 69 3e 5e 41 20 76 61 6c 75 65  ge..<li>^A value
6ea0: 20 6f 66 20 31 30 20 28 30 78 30 61 29 20 6d 65   of 10 (0x0a) me
6eb0: 61 6e 73 20 74 68 65 20 70 61 67 65 20 69 73 20  ans the page is 
6ec0: 61 20 6c 65 61 66 20 69 6e 64 65 78 20 62 2d 74  a leaf index b-t
6ed0: 72 65 65 20 70 61 67 65 2e 0a 3c 6c 69 3e 5e 41  ree page..<li>^A
6ee0: 20 76 61 6c 75 65 20 6f 66 20 31 33 20 28 30 78   value of 13 (0x
6ef0: 30 64 29 20 6d 65 61 6e 73 20 74 68 65 20 70 61  0d) means the pa
6f00: 67 65 20 69 73 20 61 20 6c 65 61 66 20 74 61 62  ge is a leaf tab
6f10: 6c 65 20 62 2d 74 72 65 65 20 70 61 67 65 2e 3c  le b-tree page.<
6f20: 2f 75 6c 3e 0a 5e 41 6e 79 20 6f 74 68 65 72 20  /ul>.^Any other 
6f30: 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20 62 2d  value for the b-
6f40: 74 72 65 65 20 70 61 67 65 20 74 79 70 65 20 69  tree page type i
6f50: 73 20 61 6e 20 65 72 72 6f 72 2e 0a 3c 74 72 3e  s an error..<tr>
6f60: 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  <td align=center
6f70: 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 31 3c 74 64   valign=top>1<td
6f80: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61   align=center va
6f90: 6c 69 67 6e 3d 74 6f 70 3e 32 3c 74 64 20 61 6c  lign=top>2<td al
6fa0: 69 67 6e 3d 6c 65 66 74 3e 0a 5e 54 68 65 20 74  ign=left>.^The t
6fb0: 77 6f 2d 62 79 74 65 20 69 6e 74 65 67 65 72 20  wo-byte integer 
6fc0: 61 74 20 6f 66 66 73 65 74 20 31 20 67 69 76 65  at offset 1 give
6fd0: 73 20 74 68 65 20 73 74 61 72 74 20 6f 66 20 74  s the start of t
6fe0: 68 65 0a 66 69 72 73 74 20 66 72 65 65 62 6c 6f  he.first freeblo
6ff0: 63 6b 20 6f 6e 20 74 68 65 20 70 61 67 65 2c 20  ck on the page, 
7000: 6f 72 20 69 73 20 7a 65 72 6f 20 69 66 20 74 68  or is zero if th
7010: 65 72 65 20 61 72 65 20 6e 6f 20 66 72 65 65 62  ere are no freeb
7020: 6c 6f 63 6b 73 2e 0a 3c 74 72 3e 3c 74 64 20 61  locks..<tr><td a
7030: 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69  lign=center vali
7040: 67 6e 3d 74 6f 70 3e 33 3c 74 64 20 61 6c 69 67  gn=top>3<td alig
7050: 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d  n=center valign=
7060: 74 6f 70 3e 32 3c 74 64 20 61 6c 69 67 6e 3d 6c  top>2<td align=l
7070: 65 66 74 3e 0a 5e 54 68 65 20 74 77 6f 2d 62 79  eft>.^The two-by
7080: 74 65 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66  te integer at of
7090: 66 73 65 74 20 33 20 67 69 76 65 73 20 74 68 65  fset 3 gives the
70a0: 20 6e 75 6d 62 65 72 20 6f 66 20 63 65 6c 6c 73   number of cells
70b0: 20 6f 6e 20 74 68 65 20 70 61 67 65 2e 0a 3c 74   on the page..<t
70c0: 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74  r><td align=cent
70d0: 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 35 3c  er valign=top>5<
70e0: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
70f0: 76 61 6c 69 67 6e 3d 74 6f 70 3e 32 3c 74 64 20  valign=top>2<td 
7100: 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 28 54 68  align=left>.^(Th
7110: 65 20 74 77 6f 2d 62 79 74 65 20 69 6e 74 65 67  e two-byte integ
7120: 65 72 20 61 74 20 6f 66 66 73 65 74 20 35 20 64  er at offset 5 d
7130: 65 73 69 67 6e 61 74 65 73 20 74 68 65 20 73 74  esignates the st
7140: 61 72 74 20 6f 66 20 74 68 65 20 63 65 6c 6c 20  art of the cell 
7150: 63 6f 6e 74 65 6e 74 0a 61 72 65 61 2e 20 20 41  content.area.  A
7160: 20 7a 65 72 6f 20 76 61 6c 75 65 20 66 6f 72 20   zero value for 
7170: 74 68 69 73 20 69 6e 74 65 67 65 72 20 69 73 20  this integer is 
7180: 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 36  interpreted as 6
7190: 35 35 33 36 2e 29 5e 0a 3c 74 72 3e 3c 74 64 20  5536.)^.<tr><td 
71a0: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c  align=center val
71b0: 69 67 6e 3d 74 6f 70 3e 37 3c 74 64 20 61 6c 69  ign=top>7<td ali
71c0: 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e  gn=center valign
71d0: 3d 74 6f 70 3e 31 3c 74 64 20 61 6c 69 67 6e 3d  =top>1<td align=
71e0: 6c 65 66 74 3e 0a 5e 54 68 65 20 6f 6e 65 2d 62  left>.^The one-b
71f0: 79 74 65 20 69 6e 74 65 67 65 72 20 61 74 20 6f  yte integer at o
7200: 66 66 73 65 74 20 37 20 67 69 76 65 73 20 74 68  ffset 7 gives th
7210: 65 20 6e 75 6d 62 65 72 20 6f 66 20 66 72 61 67  e number of frag
7220: 6d 65 6e 74 65 64 20 66 72 65 65 0a 62 79 74 65  mented free.byte
7230: 73 20 77 69 74 68 69 6e 20 74 68 65 20 63 65 6c  s within the cel
7240: 6c 20 63 6f 6e 74 65 6e 74 20 61 72 65 61 2e 0a  l content area..
7250: 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65  <tr><td align=ce
7260: 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e  nter valign=top>
7270: 38 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65  8<td align=cente
7280: 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 34 3c 74  r valign=top>4<t
7290: 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 28  d align=left>.^(
72a0: 54 68 65 20 66 6f 75 72 2d 62 79 74 65 20 70 61  The four-byte pa
72b0: 67 65 20 6e 75 6d 62 65 72 20 61 74 20 6f 66 66  ge number at off
72c0: 73 65 74 20 38 20 69 73 20 74 68 65 20 72 69 67  set 8 is the rig
72d0: 68 74 2d 6d 6f 73 74 20 70 6f 69 6e 74 65 72 2e  ht-most pointer.
72e0: 20 20 54 68 69 73 0a 76 61 6c 75 65 20 61 70 70    This.value app
72f0: 65 61 72 73 20 69 6e 20 74 68 65 20 68 65 61 64  ears in the head
7300: 65 72 20 6f 66 20 69 6e 74 65 72 69 6f 72 20 62  er of interior b
7310: 2d 74 72 65 65 20 70 61 67 65 73 20 6f 6e 6c 79  -tree pages only
7320: 20 61 6e 64 20 69 73 20 6f 6d 69 74 74 65 64 20   and is omitted 
7330: 66 72 6f 6d 0a 61 6c 6c 20 6f 74 68 65 72 20 70  from.all other p
7340: 61 67 65 73 2e 29 5e 0a 3c 2f 74 61 62 6c 65 3e  ages.)^.</table>
7350: 3c 2f 63 65 6e 74 65 72 3e 0a 0a 3c 70 3e 5e 54  </center>..<p>^T
7360: 68 65 20 63 65 6c 6c 20 70 6f 69 6e 74 65 72 20  he cell pointer 
7370: 61 72 72 61 79 20 6f 66 20 61 20 62 2d 74 72 65  array of a b-tre
7380: 65 20 70 61 67 65 20 69 6d 6d 65 64 69 61 74 65  e page immediate
7390: 6c 79 20 66 6f 6c 6c 6f 77 73 20 74 68 65 20 62  ly follows the b
73a0: 2d 74 72 65 65 0a 70 61 67 65 20 68 65 61 64 65  -tree.page heade
73b0: 72 2e 20 20 4c 65 74 20 4b 20 62 65 20 74 68 65  r.  Let K be the
73c0: 20 6e 75 6d 62 65 72 20 6f 66 20 63 65 6c 6c 73   number of cells
73d0: 20 6f 6e 20 74 68 65 20 62 74 72 65 65 2e 20 20   on the btree.  
73e0: 5e 54 68 65 20 63 65 6c 6c 20 70 6f 69 6e 74 65  ^The cell pointe
73f0: 72 0a 61 72 72 61 79 20 63 6f 6e 73 69 73 74 73  r.array consists
7400: 20 6f 66 20 4b 20 32 2d 62 79 74 65 20 69 6e 74   of K 2-byte int
7410: 65 67 65 72 20 6f 66 66 73 65 74 73 20 74 6f 20  eger offsets to 
7420: 74 68 65 20 63 65 6c 6c 20 63 6f 6e 74 65 6e 74  the cell content
7430: 73 2e 20 20 5e 54 68 65 0a 63 65 6c 6c 20 70 6f  s.  ^The.cell po
7440: 69 6e 74 65 72 73 20 61 72 65 20 61 72 72 61 6e  inters are arran
7450: 67 65 64 20 69 6e 20 6b 65 79 20 6f 72 64 65 72  ged in key order
7460: 20 77 69 74 68 20 6c 65 66 74 2d 6d 6f 73 74 20   with left-most 
7470: 63 65 6c 6c 20 28 74 68 65 20 63 65 6c 6c 20 77  cell (the cell w
7480: 69 74 68 20 74 68 65 0a 73 6d 61 6c 6c 65 73 74  ith the.smallest
7490: 20 6b 65 79 29 20 66 69 72 73 74 20 61 6e 64 20   key) first and 
74a0: 74 68 65 20 72 69 67 68 74 2d 6d 6f 73 74 20 63  the right-most c
74b0: 65 6c 6c 20 28 74 68 65 20 63 65 6c 6c 20 77 69  ell (the cell wi
74c0: 74 68 20 74 68 65 20 6c 61 72 67 65 73 74 0a 6b  th the largest.k
74d0: 65 79 29 20 6c 61 73 74 2e 3c 2f 70 3e 0a 0a 3c  ey) last.</p>..<
74e0: 70 3e 43 65 6c 6c 20 63 6f 6e 74 65 6e 74 20 69  p>Cell content i
74f0: 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  s stored in the 
7500: 63 65 6c 6c 20 63 6f 6e 74 65 6e 74 20 72 65 67  cell content reg
7510: 69 6f 6e 20 6f 66 20 74 68 65 20 62 2d 74 72 65  ion of the b-tre
7520: 65 20 70 61 67 65 2e 0a 53 51 4c 69 74 65 20 73  e page..SQLite s
7530: 74 72 69 76 65 73 20 74 6f 20 70 6c 61 63 65 20  trives to place 
7540: 63 65 6c 6c 73 20 61 73 20 66 61 72 20 74 6f 77  cells as far tow
7550: 61 72 64 20 74 68 65 20 65 6e 64 20 6f 66 20 74  ard the end of t
7560: 68 65 20 62 2d 74 72 65 65 20 70 61 67 65 20 61  he b-tree page a
7570: 73 0a 69 74 20 63 61 6e 2c 20 69 6e 20 6f 72 64  s.it can, in ord
7580: 65 72 20 74 6f 20 6c 65 61 76 65 20 73 70 61 63  er to leave spac
7590: 65 20 66 6f 72 20 66 75 74 75 72 65 20 67 72 6f  e for future gro
75a0: 77 74 68 20 6f 66 20 74 68 65 20 63 65 6c 6c 20  wth of the cell 
75b0: 70 6f 69 6e 74 65 72 20 61 72 72 61 79 2e 0a 54  pointer array..T
75c0: 68 65 20 61 72 65 61 20 69 6e 20 62 65 74 77 65  he area in betwe
75d0: 65 6e 20 74 68 65 20 6c 61 73 74 20 63 65 6c 6c  en the last cell
75e0: 20 70 6f 69 6e 74 65 72 20 61 72 72 61 79 20 65   pointer array e
75f0: 6e 74 72 79 20 61 6e 64 20 74 68 65 20 62 65 67  ntry and the beg
7600: 69 6e 6e 69 6e 67 20 6f 66 0a 74 68 65 20 66 69  inning of.the fi
7610: 72 73 74 20 63 65 6c 6c 20 69 73 20 74 68 65 20  rst cell is the 
7620: 75 6e 61 6c 6c 6f 63 61 74 65 64 20 72 65 67 69  unallocated regi
7630: 6f 6e 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66  on..</p>..<p>^If
7640: 20 61 20 70 61 67 65 20 63 6f 6e 74 61 69 6e 73   a page contains
7650: 20 6e 6f 20 63 65 6c 6c 73 20 28 77 68 69 63 68   no cells (which
7660: 20 69 73 20 6f 6e 6c 79 20 70 6f 73 73 69 62 6c   is only possibl
7670: 65 20 66 6f 72 20 61 20 72 6f 6f 74 20 70 61 67  e for a root pag
7680: 65 0a 6f 66 20 61 20 74 61 62 6c 65 20 74 68 61  e.of a table tha
7690: 74 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 72 6f  t contains no ro
76a0: 77 73 29 20 74 68 65 6e 20 74 68 65 20 6f 66 66  ws) then the off
76b0: 73 65 74 20 74 6f 20 74 68 65 0a 63 65 6c 6c 20  set to the.cell 
76c0: 63 6f 6e 74 65 6e 74 20 61 72 65 61 20 77 69 6c  content area wil
76d0: 6c 20 65 71 75 61 6c 20 74 68 65 20 70 61 67 65  l equal the page
76e0: 20 73 69 7a 65 20 6d 69 6e 75 73 20 74 68 65 20   size minus the 
76f0: 62 79 74 65 73 20 6f 66 20 72 65 73 65 72 76 65  bytes of reserve
7700: 64 20 73 70 61 63 65 2e 0a 5e 28 49 66 20 74 68  d space..^(If th
7710: 65 20 64 61 74 61 62 61 73 65 20 75 73 65 73 20  e database uses 
7720: 61 20 36 35 35 33 36 2d 62 79 74 65 20 70 61 67  a 65536-byte pag
7730: 65 20 73 69 7a 65 20 61 6e 64 20 74 68 65 20 72  e size and the r
7740: 65 73 65 72 76 65 64 20 73 70 61 63 65 20 69 73  eserved space is
7750: 20 7a 65 72 6f 0a 28 74 68 65 20 75 73 75 61 6c   zero.(the usual
7760: 20 76 61 6c 75 65 20 66 6f 72 20 72 65 73 65 72   value for reser
7770: 76 65 64 20 73 70 61 63 65 29 20 74 68 65 6e 20  ved space) then 
7780: 74 68 65 20 63 65 6c 6c 20 63 6f 6e 74 65 6e 74  the cell content
7790: 20 6f 66 66 73 65 74 20 6f 66 20 61 6e 0a 65 6d   offset of an.em
77a0: 70 74 79 20 70 61 67 65 20 77 61 6e 74 73 20 74  pty page wants t
77b0: 6f 20 62 65 20 36 35 35 33 36 2e 20 20 0a 48 6f  o be 65536.  .Ho
77c0: 77 65 76 65 72 2c 20 74 68 61 74 20 69 6e 74 65  wever, that inte
77d0: 67 65 72 20 69 73 20 74 6f 6f 20 6c 61 72 67 65  ger is too large
77e0: 20 74 6f 20 62 65 20 73 74 6f 72 65 64 20 69 6e   to be stored in
77f0: 20 61 0a 32 2d 62 79 74 65 20 75 6e 73 69 67 6e   a.2-byte unsign
7800: 65 64 20 69 6e 74 65 67 65 72 2c 20 73 6f 20 61  ed integer, so a
7810: 20 76 61 6c 75 65 20 6f 66 20 30 20 69 73 20 75   value of 0 is u
7820: 73 65 64 20 69 6e 20 69 74 73 20 70 6c 61 63 65  sed in its place
7830: 2e 29 5e 0a 0a 3c 70 3e 41 20 66 72 65 65 62 6c  .)^..<p>A freebl
7840: 6f 63 6b 20 69 73 20 61 20 73 74 72 75 63 74 75  ock is a structu
7850: 72 65 20 75 73 65 64 20 74 6f 20 69 64 65 6e 74  re used to ident
7860: 69 66 79 20 75 6e 61 6c 6c 6f 63 61 74 65 64 20  ify unallocated 
7870: 73 70 61 63 65 20 77 69 74 68 69 6e 0a 61 20 62  space within.a b
7880: 2d 74 72 65 65 20 70 61 67 65 2e 20 20 46 72 65  -tree page.  Fre
7890: 65 62 6c 6f 63 6b 73 20 61 72 65 20 6f 72 67 61  eblocks are orga
78a0: 6e 69 7a 65 64 20 61 73 20 61 20 63 68 61 69 6e  nized as a chain
78b0: 2e 20 20 5e 54 68 65 20 66 69 72 73 74 20 32 20  .  ^The first 2 
78c0: 62 79 74 65 73 20 6f 66 0a 61 20 66 72 65 65 62  bytes of.a freeb
78d0: 6c 6f 63 6b 20 61 72 65 20 61 20 62 69 67 2d 65  lock are a big-e
78e0: 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20 77 68  ndian integer wh
78f0: 69 63 68 20 69 73 20 74 68 65 20 6f 66 66 73 65  ich is the offse
7900: 74 20 69 6e 20 74 68 65 20 62 2d 74 72 65 65 20  t in the b-tree 
7910: 70 61 67 65 0a 6f 66 20 74 68 65 20 6e 65 78 74  page.of the next
7920: 20 66 72 65 65 62 6c 6f 63 6b 20 69 6e 20 74 68   freeblock in th
7930: 65 20 63 68 61 69 6e 2c 20 6f 72 20 7a 65 72 6f  e chain, or zero
7940: 20 69 66 20 74 68 65 20 66 72 65 65 62 6c 6f 63   if the freebloc
7950: 6b 20 69 73 20 74 68 65 20 6c 61 73 74 20 6f 6e  k is the last on
7960: 0a 74 68 65 20 63 68 61 69 6e 2e 20 20 5e 54 68  .the chain.  ^Th
7970: 65 20 74 68 69 72 64 20 61 6e 64 20 66 6f 75 72  e third and four
7980: 74 68 20 62 79 74 65 73 20 6f 66 20 65 61 63 68  th bytes of each
7990: 20 66 72 65 65 62 6c 6f 63 6b 20 66 6f 72 6d 0a   freeblock form.
79a0: 61 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74  a big-endian int
79b0: 65 67 65 72 20 77 68 69 63 68 20 69 73 20 74 68  eger which is th
79c0: 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 66 72  e size of the fr
79d0: 65 65 62 6c 6f 63 6b 20 69 6e 20 62 79 74 65 73  eeblock in bytes
79e0: 2c 20 69 6e 63 6c 75 64 69 6e 67 0a 74 68 65 20  , including.the 
79f0: 34 2d 62 79 74 65 20 68 65 61 64 65 72 2e 20 20  4-byte header.  
7a00: 5e 46 72 65 65 62 6c 6f 63 6b 73 20 61 72 65 20  ^Freeblocks are 
7a10: 61 6c 77 61 79 73 20 63 6f 6e 6e 65 63 74 65 64  always connected
7a20: 20 69 6e 20 6f 72 64 65 72 20 0a 6f 66 20 69 6e   in order .of in
7a30: 63 72 65 61 73 69 6e 67 20 6f 66 66 73 65 74 2e  creasing offset.
7a40: 20 20 5e 54 68 65 20 73 65 63 6f 6e 64 20 66 69    ^The second fi
7a50: 65 6c 64 20 6f 66 20 74 68 65 20 62 2d 74 72 65  eld of the b-tre
7a60: 65 20 70 61 67 65 20 68 65 61 64 65 72 20 69 73  e page header is
7a70: 20 74 68 65 0a 6f 66 66 73 65 74 20 6f 66 20 74   the.offset of t
7a80: 68 65 20 66 69 72 73 74 20 66 72 65 65 62 6c 6f  he first freeblo
7a90: 63 6b 2c 20 6f 72 20 7a 65 72 6f 20 69 66 20 74  ck, or zero if t
7aa0: 68 65 72 65 20 61 72 65 20 6e 6f 20 66 72 65 65  here are no free
7ab0: 62 6c 6f 63 6b 73 20 6f 6e 20 74 68 65 0a 70 61  blocks on the.pa
7ac0: 67 65 2e 20 20 5e 49 6e 20 61 20 77 65 6c 6c 2d  ge.  ^In a well-
7ad0: 66 6f 72 6d 65 64 20 62 2d 74 72 65 65 20 70 61  formed b-tree pa
7ae0: 67 65 2c 20 74 68 65 72 65 20 77 69 6c 6c 20 61  ge, there will a
7af0: 6c 77 61 79 73 20 62 65 20 61 74 20 6c 65 61 73  lways be at leas
7b00: 74 20 6f 6e 65 20 63 65 6c 6c 0a 62 65 66 6f 72  t one cell.befor
7b10: 65 20 74 68 65 20 66 69 72 73 74 20 66 72 65 65  e the first free
7b20: 62 6c 6f 63 6b 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41  block.</p>..<p>A
7b30: 20 66 72 65 65 62 6c 6f 63 6b 20 72 65 71 75 69   freeblock requi
7b40: 72 65 73 20 61 74 20 6c 65 61 73 74 20 34 20 62  res at least 4 b
7b50: 79 74 65 73 20 6f 66 20 73 70 61 63 65 2e 20 20  ytes of space.  
7b60: 49 66 20 74 68 65 72 65 20 69 73 20 61 6e 20 69  If there is an i
7b70: 73 6f 6c 61 74 65 64 0a 67 72 6f 75 70 20 6f 66  solated.group of
7b80: 20 31 2c 20 32 2c 20 6f 72 20 33 20 75 6e 75 73   1, 2, or 3 unus
7b90: 65 64 20 62 79 74 65 73 20 77 69 74 68 69 6e 20  ed bytes within 
7ba0: 74 68 65 20 63 65 6c 6c 20 63 6f 6e 74 65 6e 74  the cell content
7bb0: 20 61 72 65 61 2c 20 74 68 6f 73 65 20 62 79 74   area, those byt
7bc0: 65 73 0a 63 6f 6d 70 72 69 73 65 20 61 20 66 72  es.comprise a fr
7bd0: 61 67 6d 65 6e 74 2e 20 20 5e 54 68 65 20 74 6f  agment.  ^The to
7be0: 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 62 79  tal number of by
7bf0: 74 65 73 20 69 6e 20 61 6c 6c 20 66 72 61 67 6d  tes in all fragm
7c00: 65 6e 74 73 20 69 73 20 73 74 6f 72 65 64 0a 69  ents is stored.i
7c10: 6e 20 74 68 65 20 66 69 66 74 68 20 66 69 65 6c  n the fifth fiel
7c20: 64 20 6f 66 20 74 68 65 20 62 2d 74 72 65 65 20  d of the b-tree 
7c30: 70 61 67 65 20 68 65 61 64 65 72 2e 20 20 5e 49  page header.  ^I
7c40: 6e 20 61 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20  n a well-formed 
7c50: 62 2d 74 72 65 65 20 70 61 67 65 2c 0a 74 68 65  b-tree page,.the
7c60: 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66   total number of
7c70: 20 62 79 74 65 73 20 69 6e 20 66 72 61 67 6d 65   bytes in fragme
7c80: 6e 74 73 20 6d 61 79 20 6e 6f 74 20 65 78 63 65  nts may not exce
7c90: 65 64 20 36 30 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54  ed 60.</p>..<p>T
7ca0: 68 65 20 74 6f 74 61 6c 20 61 6d 6f 75 6e 74 20  he total amount 
7cb0: 6f 66 20 66 72 65 65 20 73 70 61 63 65 20 6f 6e  of free space on
7cc0: 20 61 20 62 2d 74 72 65 65 20 70 61 67 65 20 63   a b-tree page c
7cd0: 6f 6e 73 69 73 74 73 20 6f 66 20 74 68 65 20 73  onsists of the s
7ce0: 69 7a 65 0a 6f 66 20 74 68 65 20 75 6e 61 6c 6c  ize.of the unall
7cf0: 6f 63 61 74 65 64 20 72 65 67 69 6f 6e 20 70 6c  ocated region pl
7d00: 75 73 20 74 68 65 20 74 6f 74 61 6c 20 73 69 7a  us the total siz
7d10: 65 20 6f 66 20 61 6c 6c 20 66 72 65 65 62 6c 6f  e of all freeblo
7d20: 63 6b 73 20 70 6c 75 73 20 74 68 65 0a 6e 75 6d  cks plus the.num
7d30: 62 65 72 20 6f 66 20 66 72 61 67 6d 65 6e 74 65  ber of fragmente
7d40: 64 20 66 72 65 65 20 62 79 74 65 73 2e 20 20 5e  d free bytes.  ^
7d50: 53 51 4c 69 74 65 20 6d 61 79 20 66 72 6f 6d 20  SQLite may from 
7d60: 74 69 6d 65 20 74 6f 20 74 69 6d 65 20 72 65 6f  time to time reo
7d70: 72 67 61 6e 69 7a 65 0a 61 20 62 2d 74 72 65 65  rganize.a b-tree
7d80: 20 70 61 67 65 20 73 6f 20 74 68 61 74 20 74 68   page so that th
7d90: 65 72 65 20 61 72 65 20 6e 6f 20 66 72 65 65 62  ere are no freeb
7da0: 6c 6f 63 6b 73 20 6f 72 20 66 72 61 67 6d 65 6e  locks or fragmen
7db0: 74 20 62 79 74 65 73 2c 20 61 6c 6c 0a 75 6e 75  t bytes, all.unu
7dc0: 73 65 64 20 62 79 74 65 73 20 61 72 65 20 63 6f  sed bytes are co
7dd0: 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 65 20 75  ntained in the u
7de0: 6e 61 6c 6c 6f 63 61 74 65 64 20 73 70 61 63 65  nallocated space
7df0: 20 72 65 67 69 6f 6e 2c 20 61 6e 64 20 61 6c 6c   region, and all
7e00: 0a 63 65 6c 6c 73 20 61 72 65 20 70 61 63 6b 65  .cells are packe
7e10: 64 20 74 69 67 68 74 6c 79 20 61 74 20 74 68 65  d tightly at the
7e20: 20 65 6e 64 20 6f 66 20 74 68 65 20 70 61 67 65   end of the page
7e30: 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65  .  This is calle
7e40: 64 20 0a 22 64 65 66 72 61 67 6d 65 6e 74 69 6e  d ."defragmentin
7e50: 67 22 20 74 68 65 20 62 2d 74 72 65 65 20 70 61  g" the b-tree pa
7e60: 67 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  ge.</p>..<tcl>hd
7e70: 5f 66 72 61 67 6d 65 6e 74 20 76 61 72 69 6e 74  _fragment varint
7e80: 20 7b 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74   {variable-lengt
7e90: 68 20 69 6e 74 65 67 65 72 7d 20 7b 76 61 72 69  h integer} {vari
7ea0: 6e 74 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 41 20  nt}</tcl>..<p>A 
7eb0: 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20  variable-length 
7ec0: 69 6e 74 65 67 65 72 20 6f 72 20 22 76 61 72 69  integer or "vari
7ed0: 6e 74 22 20 69 73 20 61 20 73 74 61 74 69 63 20  nt" is a static 
7ee0: 48 75 66 66 6d 61 6e 20 65 6e 63 6f 64 69 6e 67  Huffman encoding
7ef0: 0a 6f 66 20 36 34 2d 62 69 74 20 74 77 6f 73 2d  .of 64-bit twos-
7f00: 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 74 65 67  complement integ
7f10: 65 72 73 20 74 68 61 74 20 75 73 65 73 20 6c 65  ers that uses le
7f20: 73 73 20 73 70 61 63 65 20 66 6f 72 20 73 6d 61  ss space for sma
7f30: 6c 6c 20 70 6f 73 69 74 69 76 65 20 0a 76 61 6c  ll positive .val
7f40: 75 65 73 2e 20 0a 41 20 76 61 72 69 6e 74 20 69  ues. .A varint i
7f50: 73 20 62 65 74 77 65 65 6e 20 31 20 61 6e 64 20  s between 1 and 
7f60: 39 20 62 79 74 65 73 20 69 6e 20 6c 65 6e 67 74  9 bytes in lengt
7f70: 68 2e 20 20 54 68 65 20 76 61 72 69 6e 74 20 63  h.  The varint c
7f80: 6f 6e 73 69 73 74 73 20 6f 66 20 65 69 74 68 65  onsists of eithe
7f90: 72 0a 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 62  r.zero or more b
7fa0: 79 74 65 73 20 77 68 69 63 68 20 68 61 76 65 20  ytes which have 
7fb0: 74 68 65 20 68 69 67 68 2d 6f 72 64 65 72 20 62  the high-order b
7fc0: 69 74 20 73 65 74 20 66 6f 6c 6c 6f 77 65 64 20  it set followed 
7fd0: 62 79 20 61 20 73 69 6e 67 6c 65 20 62 79 74 65  by a single byte
7fe0: 0a 77 69 74 68 20 74 68 65 20 68 69 67 68 2d 6f  .with the high-o
7ff0: 72 64 65 72 20 62 69 74 20 63 6c 65 61 72 2c 20  rder bit clear, 
8000: 6f 72 20 6e 69 6e 65 20 62 79 74 65 73 2c 20 77  or nine bytes, w
8010: 68 69 63 68 65 76 65 72 20 69 73 20 73 68 6f 72  hichever is shor
8020: 74 65 72 2e 0a 54 68 65 20 6c 6f 77 65 72 20 73  ter..The lower s
8030: 65 76 65 6e 20 62 69 74 73 20 6f 66 20 65 61 63  even bits of eac
8040: 68 20 6f 66 20 74 68 65 20 66 69 72 73 74 20 65  h of the first e
8050: 69 67 68 74 20 62 79 74 65 73 20 61 6e 64 20 61  ight bytes and a
8060: 6c 6c 20 38 20 62 69 74 73 20 6f 66 0a 74 68 65  ll 8 bits of.the
8070: 20 6e 69 6e 74 68 20 62 79 74 65 20 61 72 65 20   ninth byte are 
8080: 75 73 65 64 20 74 6f 20 72 65 63 6f 6e 73 74 72  used to reconstr
8090: 75 63 74 20 74 68 65 20 36 34 2d 62 69 74 20 74  uct the 64-bit t
80a0: 77 6f 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 69  wos-complement i
80b0: 6e 74 65 67 65 72 2e 0a 56 61 72 69 6e 74 73 20  nteger..Varints 
80c0: 61 72 65 20 62 69 67 2d 65 6e 64 69 61 6e 3a 20  are big-endian: 
80d0: 62 69 74 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20  bits taken from 
80e0: 74 68 65 20 65 61 72 6c 69 65 72 20 62 79 74 65  the earlier byte
80f0: 20 6f 66 20 74 68 65 20 76 61 72 69 6e 74 0a 61   of the varint.a
8100: 72 65 20 74 68 65 20 6d 6f 72 65 20 73 69 67 6e  re the more sign
8110: 69 66 69 63 61 6e 74 20 74 68 61 6e 20 62 69 74  ificant than bit
8120: 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20 74 68 65  s taken from the
8130: 20 6c 61 74 65 72 20 62 79 74 65 73 2e 20 3c 2f   later bytes. </
8140: 70 3e 0a 0a 3c 70 3e 54 68 65 20 66 6f 72 6d 61  p>..<p>The forma
8150: 74 20 6f 66 20 61 20 63 65 6c 6c 20 64 65 70 65  t of a cell depe
8160: 6e 64 73 20 6f 6e 20 77 68 69 63 68 20 6b 69 6e  nds on which kin
8170: 64 20 6f 66 20 62 2d 74 72 65 65 20 70 61 67 65  d of b-tree page
8180: 20 74 68 65 20 63 65 6c 6c 0a 61 70 70 65 61 72   the cell.appear
8190: 73 20 6f 6e 2e 20 20 54 68 65 20 66 6f 6c 6c 6f  s on.  The follo
81a0: 77 69 6e 67 20 74 61 62 6c 65 20 73 68 6f 77 73  wing table shows
81b0: 20 74 68 65 20 65 6c 65 6d 65 6e 74 73 20 6f 66   the elements of
81c0: 20 61 20 63 65 6c 6c 2c 20 69 6e 0a 6f 72 64 65   a cell, in.orde
81d0: 72 20 6f 66 20 61 70 70 65 61 72 61 6e 63 65 2c  r of appearance,
81e0: 20 66 6f 72 20 74 68 65 20 76 61 72 69 6f 75 73   for the various
81f0: 20 62 2d 74 72 65 65 20 70 61 67 65 20 74 79 70   b-tree page typ
8200: 65 73 2e 0a 0a 3c 64 6c 3e 0a 3c 64 74 3e 3c 70  es...<dl>.<dt><p
8210: 3e 54 61 62 6c 65 20 42 2d 54 72 65 65 20 4c 65  >Table B-Tree Le
8220: 61 66 20 43 65 6c 6c 20 28 68 65 61 64 65 72 20  af Cell (header 
8230: 30 78 30 64 29 3a 3c 2f 70 3e 3c 2f 64 74 3e 0a  0x0d):</p></dt>.
8240: 3c 64 64 3e 3c 70 3e 3c 75 6c 3e 0a 3c 6c 69 3e  <dd><p><ul>.<li>
8250: 41 20 76 61 72 69 6e 74 20 77 68 69 63 68 20 69  A varint which i
8260: 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62  s the total numb
8270: 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 70  er of bytes of p
8280: 61 79 6c 6f 61 64 2c 20 69 6e 63 6c 75 64 69 6e  ayload, includin
8290: 67 20 61 6e 79 0a 6f 76 65 72 66 6c 6f 77 0a 3c  g any.overflow.<
82a0: 6c 69 3e 41 20 76 61 72 69 6e 74 20 77 68 69 63  li>A varint whic
82b0: 68 20 69 73 20 74 68 65 20 69 6e 74 65 67 65 72  h is the integer
82c0: 20 6b 65 79 2c 20 61 2e 6b 2e 61 2e 20 22 5b 72   key, a.k.a. "[r
82d0: 6f 77 69 64 5d 22 0a 3c 6c 69 3e 54 68 65 20 69  owid]".<li>The i
82e0: 6e 69 74 69 61 6c 20 70 6f 72 74 69 6f 6e 20 6f  nitial portion o
82f0: 66 20 74 68 65 20 70 61 79 6c 6f 61 64 20 74 68  f the payload th
8300: 61 74 20 64 6f 65 73 20 6e 6f 74 20 73 70 69 6c  at does not spil
8310: 6c 20 74 6f 20 6f 76 65 72 66 6c 6f 77 0a 70 61  l to overflow.pa
8320: 67 65 73 2e 0a 3c 6c 69 3e 41 20 34 2d 62 79 74  ges..<li>A 4-byt
8330: 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74  e big-endian int
8340: 65 67 65 72 20 70 61 67 65 20 6e 75 6d 62 65 72  eger page number
8350: 20 66 6f 72 20 74 68 65 20 66 69 72 73 74 20 70   for the first p
8360: 61 67 65 20 6f 66 20 74 68 65 0a 6f 76 65 72 66  age of the.overf
8370: 6c 6f 77 20 70 61 67 65 20 6c 69 73 74 20 2d 20  low page list - 
8380: 6f 6d 69 74 74 65 64 20 69 66 20 61 6c 6c 20 70  omitted if all p
8390: 61 79 6c 6f 61 64 20 66 69 74 73 20 6f 6e 20 74  ayload fits on t
83a0: 68 65 20 62 2d 74 72 65 65 20 70 61 67 65 2e 0a  he b-tree page..
83b0: 3c 2f 75 6c 3e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a  </ul></p></dd>..
83c0: 3c 64 74 3e 3c 70 3e 54 61 62 6c 65 20 42 2d 54  <dt><p>Table B-T
83d0: 72 65 65 20 49 6e 74 65 72 69 6f 72 20 43 65 6c  ree Interior Cel
83e0: 6c 20 28 68 65 61 64 65 72 20 30 78 30 35 29 3a  l (header 0x05):
83f0: 3c 2f 70 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70  </p></dt>.<dd><p
8400: 3e 3c 75 6c 3e 0a 3c 6c 69 3e 41 20 34 2d 62 79  ><ul>.<li>A 4-by
8410: 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 70 61  te big-endian pa
8420: 67 65 20 6e 75 6d 62 65 72 20 77 68 69 63 68 20  ge number which 
8430: 69 73 20 74 68 65 20 6c 65 66 74 20 63 68 69 6c  is the left chil
8440: 64 20 70 6f 69 6e 74 65 72 2e 0a 3c 6c 69 3e 41  d pointer..<li>A
8450: 20 76 61 72 69 6e 74 20 77 68 69 63 68 20 69 73   varint which is
8460: 20 74 68 65 20 69 6e 74 65 67 65 72 20 6b 65 79   the integer key
8470: 0a 3c 2f 75 6c 3e 3c 2f 70 3e 3c 2f 64 64 3e 0a  .</ul></p></dd>.
8480: 0a 3c 64 74 3e 3c 70 3e 49 6e 64 65 78 20 42 2d  .<dt><p>Index B-
8490: 54 72 65 65 20 4c 65 61 66 20 43 65 6c 6c 20 28  Tree Leaf Cell (
84a0: 68 65 61 64 65 72 20 30 78 30 61 29 3a 3c 2f 70  header 0x0a):</p
84b0: 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 3c 75  ></dt>.<dd><p><u
84c0: 6c 3e 0a 3c 6c 69 3e 41 20 76 61 72 69 6e 74 20  l>.<li>A varint 
84d0: 77 68 69 63 68 20 69 73 20 74 68 65 20 74 6f 74  which is the tot
84e0: 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74  al number of byt
84f0: 65 73 20 6f 66 20 6b 65 79 20 70 61 79 6c 6f 61  es of key payloa
8500: 64 2c 20 69 6e 63 6c 75 64 69 6e 67 20 61 6e 79  d, including any
8510: 0a 6f 76 65 72 66 6c 6f 77 0a 3c 6c 69 3e 54 68  .overflow.<li>Th
8520: 65 20 69 6e 69 74 69 61 6c 20 70 6f 72 74 69 6f  e initial portio
8530: 6e 20 6f 66 20 74 68 65 20 70 61 79 6c 6f 61 64  n of the payload
8540: 20 74 68 61 74 20 64 6f 65 73 20 6e 6f 74 20 73   that does not s
8550: 70 69 6c 6c 20 74 6f 20 6f 76 65 72 66 6c 6f 77  pill to overflow
8560: 0a 70 61 67 65 73 2e 0a 3c 6c 69 3e 41 20 34 2d  .pages..<li>A 4-
8570: 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20  byte big-endian 
8580: 69 6e 74 65 67 65 72 20 70 61 67 65 20 6e 75 6d  integer page num
8590: 62 65 72 20 66 6f 72 20 74 68 65 20 66 69 72 73  ber for the firs
85a0: 74 20 70 61 67 65 20 6f 66 20 74 68 65 0a 6f 76  t page of the.ov
85b0: 65 72 66 6c 6f 77 20 70 61 67 65 20 6c 69 73 74  erflow page list
85c0: 20 2d 20 6f 6d 69 74 74 65 64 20 69 66 20 61 6c   - omitted if al
85d0: 6c 20 70 61 79 6c 6f 61 64 20 66 69 74 73 20 6f  l payload fits o
85e0: 6e 20 74 68 65 20 62 2d 74 72 65 65 20 70 61 67  n the b-tree pag
85f0: 65 2e 0a 3c 2f 75 6c 3e 3c 2f 70 3e 3c 2f 64 64  e..</ul></p></dd
8600: 3e 0a 0a 3c 64 74 3e 3c 70 3e 49 6e 64 65 78 20  >..<dt><p>Index 
8610: 42 2d 54 72 65 65 20 49 6e 74 65 72 69 6f 72 20  B-Tree Interior 
8620: 43 65 6c 6c 20 28 68 65 61 64 65 72 20 30 78 30  Cell (header 0x0
8630: 32 29 3a 3c 2f 70 3e 3c 2f 64 74 3e 0a 3c 64 64  2):</p></dt>.<dd
8640: 3e 3c 70 3e 3c 75 6c 3e 0a 3c 6c 69 3e 41 20 34  ><p><ul>.<li>A 4
8650: 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e  -byte big-endian
8660: 20 70 61 67 65 20 6e 75 6d 62 65 72 20 77 68 69   page number whi
8670: 63 68 20 69 73 20 74 68 65 20 6c 65 66 74 20 63  ch is the left c
8680: 68 69 6c 64 20 70 6f 69 6e 74 65 72 2e 0a 3c 6c  hild pointer..<l
8690: 69 3e 41 20 76 61 72 69 6e 74 20 77 68 69 63 68  i>A varint which
86a0: 20 69 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75   is the total nu
86b0: 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66  mber of bytes of
86c0: 20 6b 65 79 20 70 61 79 6c 6f 61 64 2c 20 69 6e   key payload, in
86d0: 63 6c 75 64 69 6e 67 20 61 6e 79 0a 6f 76 65 72  cluding any.over
86e0: 66 6c 6f 77 0a 3c 6c 69 3e 54 68 65 20 69 6e 69  flow.<li>The ini
86f0: 74 69 61 6c 20 70 6f 72 74 69 6f 6e 20 6f 66 20  tial portion of 
8700: 74 68 65 20 70 61 79 6c 6f 61 64 20 74 68 61 74  the payload that
8710: 20 64 6f 65 73 20 6e 6f 74 20 73 70 69 6c 6c 20   does not spill 
8720: 74 6f 20 6f 76 65 72 66 6c 6f 77 0a 70 61 67 65  to overflow.page
8730: 73 2e 0a 3c 6c 69 3e 41 20 34 2d 62 79 74 65 20  s..<li>A 4-byte 
8740: 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67  big-endian integ
8750: 65 72 20 70 61 67 65 20 6e 75 6d 62 65 72 20 66  er page number f
8760: 6f 72 20 74 68 65 20 66 69 72 73 74 20 70 61 67  or the first pag
8770: 65 20 6f 66 20 74 68 65 0a 6f 76 65 72 66 6c 6f  e of the.overflo
8780: 77 20 70 61 67 65 20 6c 69 73 74 20 2d 20 6f 6d  w page list - om
8790: 69 74 74 65 64 20 69 66 20 61 6c 6c 20 70 61 79  itted if all pay
87a0: 6c 6f 61 64 20 66 69 74 73 20 6f 6e 20 74 68 65  load fits on the
87b0: 20 62 2d 74 72 65 65 20 70 61 67 65 2e 0a 3c 2f   b-tree page..</
87c0: 75 6c 3e 3c 2f 70 3e 3c 2f 64 64 3e 0a 3c 2f 64  ul></p></dd>.</d
87d0: 6c 3e 0a 0a 3c 70 3e 54 68 65 20 69 6e 66 6f 72  l>..<p>The infor
87e0: 6d 61 74 69 6f 6e 20 61 62 6f 76 65 20 63 61 6e  mation above can
87f0: 20 62 65 20 72 65 63 61 73 74 20 69 6e 74 6f 20   be recast into 
8800: 61 20 74 61 62 6c 65 20 66 6f 72 6d 61 74 20 61  a table format a
8810: 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a  s follows:</p>..
8820: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
8830: 20 63 65 6c 6c 66 6f 72 6d 61 74 20 7b 63 65 6c   cellformat {cel
8840: 6c 20 66 6f 72 6d 61 74 20 73 75 6d 6d 61 72 79  l format summary
8850: 7d 3c 2f 74 63 6c 3e 0a 3c 63 65 6e 74 65 72 3e  }</tcl>.<center>
8860: 0a 3c 69 3e 42 2d 74 72 65 65 20 43 65 6c 6c 20  .<i>B-tree Cell 
8870: 46 6f 72 6d 61 74 3c 2f 69 3e 0a 3c 74 61 62 6c  Format</i>.<tabl
8880: 65 20 62 6f 72 64 65 72 3d 31 20 77 69 64 74 68  e border=1 width
8890: 3d 22 38 30 25 22 3e 0a 3c 74 72 3e 3c 74 68 20  ="80%">.<tr><th 
88a0: 72 6f 77 73 70 61 6e 3d 32 3e 44 61 74 61 74 79  rowspan=2>Dataty
88b0: 70 65 0a 20 20 20 20 3c 74 68 20 63 6f 6c 73 70  pe.    <th colsp
88c0: 61 6e 3d 34 3e 41 70 70 65 61 72 73 20 69 6e 2e  an=4>Appears in.
88d0: 2e 2e 0a 20 20 20 20 3c 74 68 20 72 6f 77 73 70  ...    <th rowsp
88e0: 61 6e 3d 32 3e 44 65 73 63 72 69 70 74 69 6f 6e  an=2>Description
88f0: 0a 3c 74 72 3e 3c 74 68 3e 54 61 62 6c 65 20 4c  .<tr><th>Table L
8900: 65 61 66 20 28 30 78 30 64 29 0a 20 20 20 20 3c  eaf (0x0d).    <
8910: 74 68 3e 54 61 62 6c 65 20 49 6e 74 65 72 69 6f  th>Table Interio
8920: 72 20 28 30 78 30 35 29 0a 20 20 20 20 3c 74 68  r (0x05).    <th
8930: 3e 49 6e 64 65 78 20 4c 65 61 66 20 28 30 78 30  >Index Leaf (0x0
8940: 61 29 0a 20 20 20 20 3c 74 68 3e 49 6e 64 65 78  a).    <th>Index
8950: 20 49 6e 74 65 72 69 6f 72 20 28 30 78 30 32 29   Interior (0x02)
8960: 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63  .<tr><td align=c
8970: 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70  enter valign=top
8980: 3e 34 2d 62 79 74 65 20 69 6e 74 65 67 65 72 0a  >4-byte integer.
8990: 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65      <td align=ce
89a0: 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e  nter valign=top>
89b0: 26 6e 62 73 70 3b 0a 20 20 20 20 3c 74 64 20 61  &nbsp;.    <td a
89c0: 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69  lign=center vali
89d0: 67 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a  gn=top>&#x2714;.
89e0: 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65      <td align=ce
89f0: 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e  nter valign=top>
8a00: 26 6e 62 73 70 3b 0a 20 20 20 20 3c 74 64 20 61  &nbsp;.    <td a
8a10: 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69  lign=center vali
8a20: 67 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a  gn=top>&#x2714;.
8a30: 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 6c 65      <td align=le
8a40: 66 74 3e 50 61 67 65 20 6e 75 6d 62 65 72 20 6f  ft>Page number o
8a50: 66 20 6c 65 66 74 20 63 68 69 6c 64 0a 3c 74 72  f left child.<tr
8a60: 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65  ><td align=cente
8a70: 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 76 61 72  r valign=top>var
8a80: 69 6e 74 0a 20 20 20 20 3c 74 64 20 61 6c 69 67  int.    <td alig
8a90: 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d  n=center valign=
8aa0: 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20 20 20  top>&#x2714;.   
8ab0: 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65   <td align=cente
8ac0: 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 6e 62  r valign=top>&nb
8ad0: 73 70 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67  sp;.    <td alig
8ae0: 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d  n=center valign=
8af0: 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20 20 20  top>&#x2714;.   
8b00: 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65   <td align=cente
8b10: 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78  r valign=top>&#x
8b20: 32 37 31 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c  2714;.    <td al
8b30: 69 67 6e 3d 6c 65 66 74 3e 4e 75 6d 62 65 72 20  ign=left>Number 
8b40: 6f 66 20 62 79 74 65 73 20 6f 66 20 70 61 79 6c  of bytes of payl
8b50: 6f 61 64 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67  oad.<tr><td alig
8b60: 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d  n=center valign=
8b70: 74 6f 70 3e 76 61 72 69 6e 74 0a 20 20 20 20 3c  top>varint.    <
8b80: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
8b90: 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37  valign=top>&#x27
8ba0: 31 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67  14;.    <td alig
8bb0: 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d  n=center valign=
8bc0: 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20 20 20  top>&#x2714;.   
8bd0: 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65   <td align=cente
8be0: 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 6e 62  r valign=top>&nb
8bf0: 73 70 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67  sp;.    <td alig
8c00: 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d  n=center valign=
8c10: 74 6f 70 3e 26 6e 62 73 70 3b 0a 20 20 20 20 3c  top>&nbsp;.    <
8c20: 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 52 6f  td align=left>Ro
8c30: 77 69 64 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67  wid.<tr><td alig
8c40: 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d  n=center valign=
8c50: 74 6f 70 3e 62 79 74 65 20 61 72 72 61 79 0a 20  top>byte array. 
8c60: 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e     <td align=cen
8c70: 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26  ter valign=top>&
8c80: 23 78 32 37 31 34 3b 0a 20 20 20 20 3c 74 64 20  #x2714;.    <td 
8c90: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c  align=center val
8ca0: 69 67 6e 3d 74 6f 70 3e 26 6e 62 73 70 3b 0a 20  ign=top>&nbsp;. 
8cb0: 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e     <td align=cen
8cc0: 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26  ter valign=top>&
8cd0: 23 78 32 37 31 34 3b 0a 20 20 20 20 3c 74 64 20  #x2714;.    <td 
8ce0: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c  align=center val
8cf0: 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b  ign=top>&#x2714;
8d00: 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 6c  .    <td align=l
8d10: 65 66 74 3e 50 61 79 6c 6f 61 64 0a 3c 74 72 3e  eft>Payload.<tr>
8d20: 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  <td align=center
8d30: 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 34 2d 62 79   valign=top>4-by
8d40: 74 65 20 69 6e 74 65 67 65 72 0a 20 20 20 20 3c  te integer.    <
8d50: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
8d60: 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37  valign=top>&#x27
8d70: 31 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67  14;.    <td alig
8d80: 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d  n=center valign=
8d90: 74 6f 70 3e 26 6e 62 73 70 3b 0a 20 20 20 20 3c  top>&nbsp;.    <
8da0: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
8db0: 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37  valign=top>&#x27
8dc0: 31 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67  14;.    <td alig
8dd0: 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d  n=center valign=
8de0: 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20 20 20  top>&#x2714;.   
8df0: 20 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e   <td align=left>
8e00: 50 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 66  Page number of f
8e10: 69 72 73 74 20 6f 76 65 72 66 6c 6f 77 20 70 61  irst overflow pa
8e20: 67 65 0a 3c 2f 74 61 62 6c 65 3e 3c 2f 63 65 6e  ge.</table></cen
8e30: 74 65 72 3e 0a 0a 0a 3c 70 3e 54 68 65 20 61 6d  ter>...<p>The am
8e40: 6f 75 6e 74 20 6f 66 20 70 61 79 6c 6f 61 64 20  ount of payload 
8e50: 74 68 61 74 20 73 70 69 6c 6c 73 20 6f 6e 74 6f  that spills onto
8e60: 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 73 20   overflow pages 
8e70: 61 6c 73 6f 20 64 65 70 65 6e 64 73 20 6f 6e 0a  also depends on.
8e80: 74 68 65 20 70 61 67 65 20 74 79 70 65 2e 20 20  the page type.  
8e90: 46 6f 72 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  For the followin
8ea0: 67 20 63 6f 6d 70 75 74 61 74 69 6f 6e 73 2c 20  g computations, 
8eb0: 6c 65 74 20 55 20 62 65 20 74 68 65 20 75 73 61  let U be the usa
8ec0: 62 6c 65 20 73 69 7a 65 0a 6f 66 20 61 20 64 61  ble size.of a da
8ed0: 74 61 62 61 73 65 20 70 61 67 65 2c 20 74 68 65  tabase page, the
8ee0: 20 74 6f 74 61 6c 20 70 61 67 65 20 73 69 7a 65   total page size
8ef0: 20 6c 65 73 73 20 74 68 65 20 72 65 73 65 72 76   less the reserv
8f00: 65 64 20 73 70 61 63 65 20 61 74 20 74 68 65 0a  ed space at the.
8f10: 65 6e 64 20 6f 66 20 65 61 63 68 20 70 61 67 65  end of each page
8f20: 2e 20 20 41 6e 64 20 6c 65 74 20 50 20 62 65 20  .  And let P be 
8f30: 74 68 65 20 70 61 79 6c 6f 61 64 20 73 69 7a 65  the payload size
8f40: 2e 20 20 49 6e 20 74 68 65 20 66 6f 6c 6c 6f 77  .  In the follow
8f50: 69 6e 67 2c 0a 73 79 6d 62 6f 6c 20 58 20 72 65  ing,.symbol X re
8f60: 70 72 65 73 65 6e 74 73 20 74 68 65 20 6d 61 78  presents the max
8f70: 69 6d 75 6d 20 61 6d 6f 75 6e 74 20 6f 66 20 70  imum amount of p
8f80: 61 79 6c 6f 61 64 20 74 68 61 74 20 63 61 6e 20  ayload that can 
8f90: 62 65 20 73 74 6f 72 65 64 20 64 69 72 65 63 74  be stored direct
8fa0: 6c 79 0a 6f 6e 20 74 68 65 20 62 2d 74 72 65 65  ly.on the b-tree
8fb0: 20 70 61 67 65 20 77 69 74 68 6f 75 74 20 73 70   page without sp
8fc0: 69 6c 6c 69 6e 67 20 6f 6e 74 6f 20 61 6e 20 6f  illing onto an o
8fd0: 76 65 72 66 6c 6f 77 20 70 61 67 65 20 61 6e 64  verflow page and
8fe0: 20 73 79 6d 62 6f 6c 20 4d 0a 72 65 70 72 65 73   symbol M.repres
8ff0: 65 6e 74 73 20 74 68 65 20 6d 69 6e 69 6d 75 6d  ents the minimum
9000: 20 61 6d 6f 75 6e 74 20 6f 66 20 70 61 79 6c 6f   amount of paylo
9010: 61 64 20 74 68 61 74 20 6d 75 73 74 20 62 65 20  ad that must be 
9020: 73 74 6f 72 65 64 20 6f 6e 20 74 68 65 20 62 74  stored on the bt
9030: 72 65 65 0a 70 61 67 65 20 62 65 66 6f 72 65 20  ree.page before 
9040: 73 70 69 6c 6c 69 6e 67 20 69 73 20 61 6c 6c 6f  spilling is allo
9050: 77 65 64 2e 0a 0a 3c 64 6c 3e 0a 3c 64 74 3e 3c  wed...<dl>.<dt><
9060: 70 3e 54 61 62 6c 65 20 42 2d 54 72 65 65 20 4c  p>Table B-Tree L
9070: 65 61 66 20 43 65 6c 6c 3a 3c 2f 64 74 3e 0a 3c  eaf Cell:</dt>.<
9080: 64 64 3e 3c 70 3e 0a 5e 28 4c 65 74 20 58 20 62  dd><p>.^(Let X b
9090: 65 20 55 2d 33 35 2e 20 20 49 66 20 74 68 65 20  e U-35.  If the 
90a0: 70 61 79 6c 6f 61 64 20 73 69 7a 65 20 50 20 69  payload size P i
90b0: 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65  s less than or e
90c0: 71 75 61 6c 20 74 6f 20 58 20 74 68 65 6e 0a 74  qual to X then.t
90d0: 68 65 20 65 6e 74 69 72 65 20 70 61 79 6c 6f 61  he entire payloa
90e0: 64 20 69 73 20 73 74 6f 72 65 64 20 6f 6e 20 74  d is stored on t
90f0: 68 65 20 62 2d 74 72 65 65 20 6c 65 61 66 20 70  he b-tree leaf p
9100: 61 67 65 2e 29 5e 0a 5e 28 4c 65 74 20 4d 20 62  age.)^.^(Let M b
9110: 65 20 28 28 55 2d 31 32 29 2a 33 32 2f 32 35 35  e ((U-12)*32/255
9120: 29 2d 32 33 20 61 6e 64 20 6c 65 74 20 4b 20 62  )-23 and let K b
9130: 65 20 4d 2b 28 28 50 2d 4d 29 25 28 55 2d 34 29  e M+((P-M)%(U-4)
9140: 29 2e 0a 49 66 20 50 20 69 73 20 67 72 65 61 74  )..If P is great
9150: 65 72 20 74 68 61 6e 20 58 0a 74 68 65 6e 20 74  er than X.then t
9160: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74  he number of byt
9170: 65 73 20 73 74 6f 72 65 64 20 6f 6e 20 74 68 65  es stored on the
9180: 20 74 61 62 6c 65 20 62 2d 74 72 65 65 20 6c 65   table b-tree le
9190: 61 66 20 70 61 67 65 20 69 73 20 4b 0a 69 66 20  af page is K.if 
91a0: 4b 20 69 73 20 6c 65 73 73 20 6f 72 20 65 71 75  K is less or equ
91b0: 61 6c 20 74 6f 20 58 20 6f 72 20 4d 20 6f 74 68  al to X or M oth
91c0: 65 72 77 69 73 65 2e 29 5e 0a 5e 28 54 68 65 20  erwise.)^.^(The 
91d0: 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  number of bytes 
91e0: 73 74 6f 72 65 64 20 6f 6e 20 74 68 65 20 6c 65  stored on the le
91f0: 61 66 20 70 61 67 65 20 69 73 20 6e 65 76 65 72  af page is never
9200: 20 6c 65 73 73 20 74 68 61 6e 20 4d 2e 29 5e 0a   less than M.)^.
9210: 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c  </p></dd>..<dt><
9220: 70 3e 54 61 62 6c 65 20 42 2d 54 72 65 65 20 49  p>Table B-Tree I
9230: 6e 74 65 72 69 6f 72 20 43 65 6c 6c 3a 3c 2f 64  nterior Cell:</d
9240: 74 3e 0a 3c 64 64 3e 3c 70 3e 0a 49 6e 74 65 72  t>.<dd><p>.Inter
9250: 69 6f 72 20 70 61 67 65 73 20 6f 66 20 74 61 62  ior pages of tab
9260: 6c 65 20 62 2d 74 72 65 65 73 20 68 61 76 65 20  le b-trees have 
9270: 6e 6f 20 70 61 79 6c 6f 61 64 20 61 6e 64 20 73  no payload and s
9280: 6f 20 74 68 65 72 65 20 69 73 20 6e 65 76 65 72  o there is never
9290: 0a 61 6e 79 20 70 61 79 6c 6f 61 64 20 74 6f 20  .any payload to 
92a0: 73 70 69 6c 6c 2e 0a 3c 2f 70 3e 3c 2f 64 64 3e  spill..</p></dd>
92b0: 0a 0a 3c 64 74 3e 3c 70 3e 49 6e 64 65 78 20 42  ..<dt><p>Index B
92c0: 2d 54 72 65 65 20 4c 65 61 66 20 4f 72 20 49 6e  -Tree Leaf Or In
92d0: 74 65 72 69 6f 72 20 43 65 6c 6c 3a 3c 2f 64 74  terior Cell:</dt
92e0: 3e 0a 3c 64 64 3e 3c 70 3e 0a 5e 28 4c 65 74 20  >.<dd><p>.^(Let 
92f0: 58 20 62 65 20 28 28 55 2d 31 32 29 2a 36 34 2f  X be ((U-12)*64/
9300: 32 35 35 29 2d 32 33 29 2e 20 20 49 66 20 74 68  255)-23).  If th
9310: 65 20 70 61 79 6c 6f 61 64 20 73 69 7a 65 20 50  e payload size P
9320: 20 69 73 20 6c 65 73 73 20 74 68 61 6e 0a 6f 72   is less than.or
9330: 20 65 71 75 61 6c 20 74 6f 20 58 20 74 68 65 6e   equal to X then
9340: 20 74 68 65 20 65 6e 74 69 72 65 20 70 61 79 6c   the entire payl
9350: 6f 61 64 20 69 73 20 73 74 6f 72 65 64 20 6f 6e  oad is stored on
9360: 20 74 68 65 20 62 2d 74 72 65 65 20 70 61 67 65   the b-tree page
9370: 2e 29 5e 0a 5e 28 4c 65 74 20 4d 20 62 65 20 28  .)^.^(Let M be (
9380: 28 55 2d 31 32 29 2a 33 32 2f 32 35 35 29 2d 32  (U-12)*32/255)-2
9390: 33 20 61 6e 64 20 6c 65 74 20 4b 20 62 65 20 4d  3 and let K be M
93a0: 2b 28 28 50 2d 4d 29 25 28 55 2d 34 29 29 2e 0a  +((P-M)%(U-4))..
93b0: 49 66 20 50 20 69 73 20 67 72 65 61 74 65 72 20  If P is greater 
93c0: 74 68 61 6e 20 58 20 74 68 65 6e 20 74 68 65 20  than X then the 
93d0: 6e 75 6d 62 65 72 0a 6f 66 20 62 79 74 65 73 20  number.of bytes 
93e0: 73 74 6f 72 65 64 20 6f 6e 20 74 68 65 20 69 6e  stored on the in
93f0: 64 65 78 20 62 2d 74 72 65 65 20 70 61 67 65 20  dex b-tree page 
9400: 69 73 20 4b 20 69 66 20 4b 20 69 73 20 6c 65 73  is K if K is les
9410: 73 20 74 68 61 6e 20 6f 72 0a 65 71 75 61 6c 20  s than or.equal 
9420: 74 6f 20 58 20 6f 72 20 4d 20 6f 74 68 65 72 77  to X or M otherw
9430: 69 73 65 2e 29 5e 0a 5e 28 54 68 65 20 6e 75 6d  ise.)^.^(The num
9440: 62 65 72 20 6f 66 20 62 79 74 65 73 20 73 74 6f  ber of bytes sto
9450: 72 65 64 20 6f 6e 20 74 68 65 20 69 6e 64 65 78  red on the index
9460: 20 70 61 67 65 20 69 73 20 6e 65 76 65 72 20 6c   page is never l
9470: 65 73 73 20 74 68 61 6e 20 4d 2e 29 5e 0a 3c 2f  ess than M.)^.</
9480: 70 3e 3c 2f 64 64 3e 0a 3c 2f 64 6c 3e 0a 0a 3c  p></dd>.</dl>..<
9490: 70 3e 48 65 72 65 20 69 73 20 61 6e 20 61 6c 74  p>Here is an alt
94a0: 65 72 6e 61 74 69 76 65 20 64 65 73 63 72 69 70  ernative descrip
94b0: 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 61 6d 65  tion of the same
94c0: 20 63 6f 6d 70 75 74 61 74 69 6f 6e 3a 0a 0a 3c   computation:..<
94d0: 75 6c 3e 0a 3c 6c 69 3e 58 20 69 73 20 55 2d 33  ul>.<li>X is U-3
94e0: 35 20 66 6f 72 20 74 61 62 6c 65 20 62 74 72 65  5 for table btre
94f0: 65 20 6c 65 61 66 20 70 61 67 65 73 20 6f 72 0a  e leaf pages or.
9500: 20 20 20 20 28 28 55 2d 31 32 29 2a 36 34 2f 32      ((U-12)*64/2
9510: 35 35 29 2d 32 33 20 66 6f 72 20 69 6e 64 65 78  55)-23 for index
9520: 20 70 61 67 65 73 2e 0a 3c 6c 69 3e 4d 20 69 73   pages..<li>M is
9530: 20 61 6c 77 61 79 73 20 28 28 55 2d 31 32 29 2a   always ((U-12)*
9540: 33 32 2f 32 35 35 29 2d 32 33 2e 0a 3c 6c 69 3e  32/255)-23..<li>
9550: 4c 65 74 20 4b 20 62 65 20 4d 2b 28 28 50 2d 4d  Let K be M+((P-M
9560: 29 25 28 55 2d 34 29 29 2e 0a 3c 6c 69 3e 5e 49  )%(U-4))..<li>^I
9570: 66 20 50 26 6c 74 3b 3d 58 20 74 68 65 6e 20 61  f P&lt;=X then a
9580: 6c 6c 20 50 20 62 79 74 65 73 20 6f 66 20 70 61  ll P bytes of pa
9590: 79 6c 6f 61 64 20 61 72 65 20 73 74 6f 72 65 64  yload are stored
95a0: 20 64 69 72 65 63 74 6c 79 20 6f 6e 20 74 68 65   directly on the
95b0: 20 0a 20 20 20 20 62 74 72 65 65 20 70 61 67 65   .    btree page
95c0: 20 77 69 74 68 6f 75 74 20 6f 76 65 72 66 6c 6f   without overflo
95d0: 77 2e 0a 3c 6c 69 3e 5e 49 66 20 50 26 67 74 3b  w..<li>^If P&gt;
95e0: 58 20 61 6e 64 20 4b 26 6c 74 3b 3d 58 20 74 68  X and K&lt;=X th
95f0: 65 6e 20 74 68 65 20 66 69 72 73 74 20 4b 20 62  en the first K b
9600: 79 74 65 73 20 6f 66 20 50 20 61 72 65 20 73 74  ytes of P are st
9610: 6f 72 65 64 20 6f 6e 20 74 68 65 20 0a 20 20 20  ored on the .   
9620: 20 62 74 72 65 65 20 70 61 67 65 20 61 6e 64 20   btree page and 
9630: 74 68 65 20 72 65 6d 61 69 6e 69 6e 67 20 50 2d  the remaining P-
9640: 4b 20 62 79 74 65 73 20 61 72 65 20 73 74 6f 72  K bytes are stor
9650: 65 64 20 6f 6e 20 6f 76 65 72 66 6c 6f 77 20 70  ed on overflow p
9660: 61 67 65 73 2e 0a 3c 6c 69 3e 5e 49 66 20 50 26  ages..<li>^If P&
9670: 67 74 3b 58 20 61 6e 64 20 4b 26 67 74 3b 58 20  gt;X and K&gt;X 
9680: 74 68 65 6e 20 74 68 65 20 66 69 72 73 74 20 4d  then the first M
9690: 20 62 79 74 65 73 20 6f 66 20 50 20 61 72 65 20   bytes of P are 
96a0: 73 74 6f 72 65 64 20 6f 6e 20 74 68 65 0a 20 20  stored on the.  
96b0: 20 20 62 74 72 65 65 20 70 61 67 65 20 61 6e 64    btree page and
96c0: 20 74 68 65 20 72 65 6d 61 69 6e 69 6e 67 20 50   the remaining P
96d0: 2d 4d 20 62 79 74 65 73 20 61 72 65 20 73 74 6f  -M bytes are sto
96e0: 72 65 64 20 6f 6e 20 6f 76 65 72 66 6c 6f 77 20  red on overflow 
96f0: 70 61 67 65 73 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70  pages..</ul>..<p
9700: 3e 54 68 65 20 6f 76 65 72 66 6c 6f 77 20 74 68  >The overflow th
9710: 72 65 73 68 6f 6c 64 73 20 61 72 65 20 64 65 73  resholds are des
9720: 69 67 6e 65 64 20 74 6f 20 67 69 76 65 20 61 20  igned to give a 
9730: 6d 69 6e 69 6d 75 6d 20 66 61 6e 6f 75 74 20 6f  minimum fanout o
9740: 66 0a 34 20 66 6f 72 20 69 6e 64 65 78 20 62 2d  f.4 for index b-
9750: 74 72 65 65 73 20 61 6e 64 20 74 6f 20 6d 61 6b  trees and to mak
9760: 65 20 73 75 72 65 20 65 6e 6f 75 67 68 20 6f 66  e sure enough of
9770: 20 74 68 65 20 70 61 79 6c 6f 61 64 0a 69 73 20   the payload.is 
9780: 6f 6e 20 74 68 65 20 62 2d 74 72 65 65 20 70 61  on the b-tree pa
9790: 67 65 20 74 68 61 74 20 74 68 65 20 72 65 63 6f  ge that the reco
97a0: 72 64 20 68 65 61 64 65 72 20 63 61 6e 20 75 73  rd header can us
97b0: 75 61 6c 6c 79 20 62 65 20 61 63 63 65 73 73 65  ually be accesse
97c0: 64 0a 77 69 74 68 6f 75 74 20 63 6f 6e 73 75 6c  d.without consul
97d0: 74 69 6e 67 20 61 6e 20 6f 76 65 72 66 6c 6f 77  ting an overflow
97e0: 20 70 61 67 65 2e 20 20 49 6e 20 68 69 6e 64 73   page.  In hinds
97f0: 69 67 68 74 2c 20 74 68 65 20 64 65 73 69 67 6e  ight, the design
9800: 65 72 20 6f 66 0a 74 68 65 20 53 51 4c 69 74 65  er of.the SQLite
9810: 20 62 2d 74 72 65 65 20 6c 6f 67 69 63 20 72 65   b-tree logic re
9820: 61 6c 69 7a 65 64 20 74 68 61 74 20 74 68 65 73  alized that thes
9830: 65 20 74 68 72 65 73 68 6f 6c 64 73 20 63 6f 75  e thresholds cou
9840: 6c 64 20 68 61 76 65 20 62 65 65 6e 0a 6d 61 64  ld have been.mad
9850: 65 20 6d 75 63 68 20 73 69 6d 70 6c 65 72 2e 20  e much simpler. 
9860: 20 48 6f 77 65 76 65 72 2c 20 74 68 65 20 63 6f   However, the co
9870: 6d 70 75 74 61 74 69 6f 6e 73 20 63 61 6e 6e 6f  mputations canno
9880: 74 20 62 65 20 63 68 61 6e 67 65 64 0a 77 69 74  t be changed.wit
9890: 68 6f 75 74 20 72 65 73 75 6c 74 69 6e 67 20 69  hout resulting i
98a0: 6e 20 61 6e 20 69 6e 63 6f 6d 70 61 74 69 62 6c  n an incompatibl
98b0: 65 20 66 69 6c 65 20 66 6f 72 6d 61 74 2e 20 20  e file format.  
98c0: 41 6e 64 20 74 68 65 20 63 75 72 72 65 6e 74 20  And the current 
98d0: 63 6f 6d 70 75 74 61 74 69 6f 6e 73 0a 77 6f 72  computations.wor
98e0: 6b 20 77 65 6c 6c 2c 20 65 76 65 6e 20 69 66 20  k well, even if 
98f0: 74 68 65 79 20 61 72 65 20 61 20 6c 69 74 74 6c  they are a littl
9900: 65 20 63 6f 6d 70 6c 65 78 2e 3c 2f 70 3e 0a 0a  e complex.</p>..
9910: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
9920: 20 6f 76 66 6c 70 67 73 20 7b 6f 76 65 72 66 6c   ovflpgs {overfl
9930: 6f 77 20 70 61 67 65 7d 20 7b 6f 76 65 72 66 6c  ow page} {overfl
9940: 6f 77 20 70 61 67 65 73 7d 3c 2f 74 63 6c 3e 0a  ow pages}</tcl>.
9950: 3c 68 32 3e 43 65 6c 6c 20 50 61 79 6c 6f 61 64  <h2>Cell Payload
9960: 20 4f 76 65 72 66 6c 6f 77 20 50 61 67 65 73 3c   Overflow Pages<
9970: 2f 68 32 3e 0a 0a 3c 70 3e 5e 57 68 65 6e 20 74  /h2>..<p>^When t
9980: 68 65 20 70 61 79 6c 6f 61 64 20 6f 66 20 61 20  he payload of a 
9990: 62 2d 74 72 65 65 20 63 65 6c 6c 20 69 73 20 74  b-tree cell is t
99a0: 6f 6f 20 6c 61 72 67 65 20 66 6f 72 20 74 68 65  oo large for the
99b0: 20 62 2d 74 72 65 65 20 70 61 67 65 2c 0a 74 68   b-tree page,.th
99c0: 65 20 73 75 72 70 6c 75 73 20 69 73 20 73 70 69  e surplus is spi
99d0: 6c 6c 65 64 20 6f 6e 74 6f 20 6f 76 65 72 66 6c  lled onto overfl
99e0: 6f 77 20 70 61 67 65 73 2e 20 20 5e 4f 76 65 72  ow pages.  ^Over
99f0: 66 6c 6f 77 20 70 61 67 65 73 20 66 6f 72 6d 20  flow pages form 
9a00: 61 20 6c 69 6e 6b 65 64 0a 6c 69 73 74 2e 20 20  a linked.list.  
9a10: 5e 54 68 65 20 66 69 72 73 74 20 66 6f 75 72 20  ^The first four 
9a20: 62 79 74 65 73 20 6f 66 20 65 61 63 68 20 6f 76  bytes of each ov
9a30: 65 72 66 6c 6f 77 20 70 61 67 65 20 61 72 65 20  erflow page are 
9a40: 61 20 62 69 67 2d 65 6e 64 69 61 6e 0a 69 6e 74  a big-endian.int
9a50: 65 67 65 72 20 77 68 69 63 68 20 69 73 20 74 68  eger which is th
9a60: 65 20 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66  e page number of
9a70: 20 74 68 65 20 6e 65 78 74 20 70 61 67 65 20 69   the next page i
9a80: 6e 20 74 68 65 20 63 68 61 69 6e 2c 20 6f 72 20  n the chain, or 
9a90: 7a 65 72 6f 0a 66 6f 72 20 74 68 65 20 66 69 6e  zero.for the fin
9aa0: 61 6c 20 70 61 67 65 20 69 6e 20 74 68 65 20 63  al page in the c
9ab0: 68 61 69 6e 2e 20 20 5e 54 68 65 20 66 69 66 74  hain.  ^The fift
9ac0: 68 20 62 79 74 65 20 74 68 72 6f 75 67 68 20 74  h byte through t
9ad0: 68 65 20 6c 61 73 74 20 75 73 61 62 6c 65 0a 62  he last usable.b
9ae0: 79 74 65 20 61 72 65 20 75 73 65 64 20 74 6f 20  yte are used to 
9af0: 68 6f 6c 64 20 6f 76 65 72 66 6c 6f 77 20 63 6f  hold overflow co
9b00: 6e 74 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c 68 32 3e  ntent.</p>..<h2>
9b10: 50 6f 69 6e 74 65 72 20 4d 61 70 20 6f 72 20 50  Pointer Map or P
9b20: 74 72 6d 61 70 20 50 61 67 65 73 3c 2f 68 32 3e  trmap Pages</h2>
9b30: 0a 0a 3c 70 3e 50 6f 69 6e 74 65 72 20 6d 61 70  ..<p>Pointer map
9b40: 20 6f 72 20 70 74 72 6d 61 70 20 70 61 67 65 73   or ptrmap pages
9b50: 20 61 72 65 20 65 78 74 72 61 20 70 61 67 65 73   are extra pages
9b60: 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 74   inserted into t
9b70: 68 65 20 64 61 74 61 62 61 73 65 0a 74 6f 20 6d  he database.to m
9b80: 61 6b 65 20 74 68 65 20 6f 70 65 72 61 74 69 6f  ake the operatio
9b90: 6e 20 6f 66 20 5b 61 75 74 6f 5f 76 61 63 75 75  n of [auto_vacuu
9ba0: 6d 5d 20 61 6e 64 20 5b 69 6e 63 72 65 6d 65 6e  m] and [incremen
9bb0: 74 61 6c 5f 76 61 63 75 75 6d 5d 20 6d 6f 64 65  tal_vacuum] mode
9bc0: 73 0a 6d 6f 72 65 20 65 66 66 69 63 69 65 6e 74  s.more efficient
9bd0: 2e 20 20 4f 74 68 65 72 20 70 61 67 65 20 74 79  .  Other page ty
9be0: 70 65 73 20 69 6e 20 74 68 65 20 64 61 74 61 62  pes in the datab
9bf0: 61 73 65 20 74 79 70 69 63 61 6c 6c 79 20 68 61  ase typically ha
9c00: 76 65 20 70 6f 69 6e 74 65 72 73 0a 66 72 6f 6d  ve pointers.from
9c10: 20 70 61 72 65 6e 74 20 74 6f 20 63 68 69 6c 64   parent to child
9c20: 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20  .  For example, 
9c30: 61 6e 20 69 6e 74 65 72 69 6f 72 20 62 2d 74 72  an interior b-tr
9c40: 65 65 20 70 61 67 65 20 63 6f 6e 74 61 69 6e 73  ee page contains
9c50: 20 70 6f 69 6e 74 65 72 73 0a 74 6f 20 69 74 73   pointers.to its
9c60: 20 63 68 69 6c 64 20 62 2d 74 72 65 65 20 70 61   child b-tree pa
9c70: 67 65 73 20 61 6e 64 20 61 6e 20 6f 76 65 72 66  ges and an overf
9c80: 6c 6f 77 20 63 68 61 69 6e 20 68 61 73 20 61 20  low chain has a 
9c90: 70 6f 69 6e 74 65 72 0a 66 72 6f 6d 20 65 61 72  pointer.from ear
9ca0: 6c 69 65 72 20 74 6f 20 6c 61 74 65 72 20 6c 69  lier to later li
9cb0: 6e 6b 73 20 69 6e 20 74 68 65 20 63 68 61 69 6e  nks in the chain
9cc0: 2e 20 20 41 20 70 74 72 6d 61 70 20 70 61 67 65  .  A ptrmap page
9cd0: 20 63 6f 6e 74 61 69 6e 73 20 6c 69 6e 6b 61 67   contains linkag
9ce0: 65 0a 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 67 6f  e.information go
9cf0: 69 6e 67 20 69 6e 20 74 68 65 20 6f 70 70 6f 73  ing in the oppos
9d00: 69 74 65 20 64 69 72 65 63 74 69 6f 6e 2c 20 66  ite direction, f
9d10: 72 6f 6d 20 63 68 69 6c 64 20 74 6f 20 70 61 72  rom child to par
9d20: 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 50 74  ent.</p>..<p>^Pt
9d30: 72 6d 61 70 20 70 61 67 65 73 20 6d 75 73 74 20  rmap pages must 
9d40: 65 78 69 73 74 20 69 6e 20 61 6e 79 20 64 61 74  exist in any dat
9d50: 61 62 61 73 65 20 66 69 6c 65 20 77 68 69 63 68  abase file which
9d60: 20 68 61 73 20 61 20 6e 6f 6e 2d 7a 65 72 6f 0a   has a non-zero.
9d70: 6c 61 72 67 65 73 74 20 72 6f 6f 74 20 62 2d 74  largest root b-t
9d80: 72 65 65 20 70 61 67 65 20 76 61 6c 75 65 20 61  ree page value a
9d90: 74 20 6f 66 66 73 65 74 20 35 32 20 69 6e 20 74  t offset 52 in t
9da0: 68 65 20 64 61 74 61 62 61 73 65 20 68 65 61 64  he database head
9db0: 65 72 2e 0a 5e 49 66 20 74 68 65 20 6c 61 72 67  er..^If the larg
9dc0: 65 73 74 20 72 6f 6f 74 20 62 2d 74 72 65 65 20  est root b-tree 
9dd0: 70 61 67 65 20 76 61 6c 75 65 20 69 73 20 7a 65  page value is ze
9de0: 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 64 61 74  ro, then the dat
9df0: 61 62 61 73 65 20 6d 75 73 74 20 6e 6f 74 0a 63  abase must not.c
9e00: 6f 6e 74 61 69 6e 20 70 74 72 6d 61 70 20 70 61  ontain ptrmap pa
9e10: 67 65 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 6e  ges.</p>..<p>^In
9e20: 20 61 20 64 61 74 61 62 61 73 65 20 77 69 74 68   a database with
9e30: 20 70 74 72 6d 61 70 20 70 61 67 65 73 2c 20 74   ptrmap pages, t
9e40: 68 65 20 66 69 72 73 74 20 70 74 72 6d 61 70 20  he first ptrmap 
9e50: 70 61 67 65 20 69 73 20 70 61 67 65 20 32 2e 0a  page is page 2..
9e60: 41 20 70 74 72 6d 61 70 20 70 61 67 65 20 63 6f  A ptrmap page co
9e70: 6e 73 69 73 74 73 20 6f 66 20 61 6e 20 61 72 72  nsists of an arr
9e80: 61 79 20 6f 66 20 35 2d 62 79 74 65 20 65 6e 74  ay of 5-byte ent
9e90: 72 69 65 73 2e 20 20 4c 65 74 20 4a 20 62 65 20  ries.  Let J be 
9ea0: 74 68 65 0a 6e 75 6d 62 65 72 20 6f 66 20 35 2d  the.number of 5-
9eb0: 62 79 74 65 20 65 6e 74 72 69 65 73 20 74 68 61  byte entries tha
9ec0: 74 20 77 69 6c 6c 20 66 69 74 20 69 6e 20 74 68  t will fit in th
9ed0: 65 20 75 73 61 62 6c 65 20 73 70 61 63 65 20 6f  e usable space o
9ee0: 66 20 61 20 70 61 67 65 2e 0a 28 49 6e 20 6f 74  f a page..(In ot
9ef0: 68 65 72 20 77 6f 72 64 73 2c 20 4a 3d 55 2f 35  her words, J=U/5
9f00: 2e 29 20 20 5e 54 68 65 20 66 69 72 73 74 20 70  .)  ^The first p
9f10: 74 72 6d 61 70 20 70 61 67 65 20 77 69 6c 6c 20  trmap page will 
9f20: 63 6f 6e 74 61 69 6e 20 62 61 63 6b 20 70 6f 69  contain back poi
9f30: 6e 74 65 72 0a 69 6e 66 6f 72 6d 61 74 69 6f 6e  nter.information
9f40: 20 66 6f 72 20 70 61 67 65 73 20 33 20 74 68 72   for pages 3 thr
9f50: 6f 75 67 68 20 4a 2b 32 2c 20 69 6e 63 6c 75 73  ough J+2, inclus
9f60: 69 76 65 2e 20 20 5e 54 68 65 20 73 65 63 6f 6e  ive.  ^The secon
9f70: 64 20 70 6f 69 6e 74 65 72 20 6d 61 70 0a 70 61  d pointer map.pa
9f80: 67 65 20 77 69 6c 6c 20 62 65 20 6f 6e 20 70 61  ge will be on pa
9f90: 67 65 20 4a 2b 33 20 61 6e 64 20 74 68 61 74 20  ge J+3 and that 
9fa0: 70 74 72 6d 61 70 20 70 61 67 65 20 77 69 6c 6c  ptrmap page will
9fb0: 20 70 72 6f 76 69 64 65 20 62 61 63 6b 20 70 6f   provide back po
9fc0: 69 6e 74 65 72 0a 69 6e 66 6f 72 6d 61 74 69 6f  inter.informatio
9fd0: 6e 20 66 6f 72 20 70 61 67 65 73 20 4a 2b 34 20  n for pages J+4 
9fe0: 74 68 72 6f 75 67 68 20 32 2a 4a 2b 33 20 69 6e  through 2*J+3 in
9ff0: 63 6c 75 73 69 76 65 2e 20 20 41 6e 64 20 73 6f  clusive.  And so
a000: 20 66 6f 72 74 68 20 66 6f 72 0a 74 68 65 20 65   forth for.the e
a010: 6e 74 69 72 65 20 64 61 74 61 62 61 73 65 20 66  ntire database f
a020: 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28 49  ile.</p>..<p>^(I
a030: 6e 20 61 20 64 61 74 61 62 61 73 65 20 74 68 61  n a database tha
a040: 74 20 75 73 65 73 20 70 74 72 6d 61 70 20 70 61  t uses ptrmap pa
a050: 67 65 73 2c 20 61 6c 6c 20 70 61 67 65 73 20 61  ges, all pages a
a060: 74 20 6c 6f 63 61 74 69 6f 6e 73 20 69 64 65 6e  t locations iden
a070: 74 69 66 69 65 64 0a 62 79 20 74 68 65 20 63 6f  tified.by the co
a080: 6d 70 75 74 61 74 69 6f 6e 20 69 6e 20 74 68 65  mputation in the
a090: 20 70 72 65 76 69 6f 75 73 20 70 61 72 61 67 72   previous paragr
a0a0: 61 70 68 20 6d 75 73 74 20 62 65 20 70 74 72 6d  aph must be ptrm
a0b0: 61 70 20 70 61 67 65 20 61 6e 64 20 6e 6f 0a 6f  ap page and no.o
a0c0: 74 68 65 72 20 70 61 67 65 20 6d 61 79 20 62 65  ther page may be
a0d0: 20 61 20 70 74 72 6d 61 70 20 70 61 67 65 2e 20   a ptrmap page. 
a0e0: 20 45 78 63 65 70 74 2c 20 69 66 20 74 68 65 20   Except, if the 
a0f0: 62 79 74 65 2d 6c 6f 63 6b 20 70 61 67 65 20 68  byte-lock page h
a100: 61 70 70 65 6e 73 20 74 6f 0a 66 61 6c 6c 20 6f  appens to.fall o
a110: 6e 20 74 68 65 20 73 61 6d 65 20 70 61 67 65 20  n the same page 
a120: 6e 75 6d 62 65 72 20 61 73 20 61 20 70 74 72 6d  number as a ptrm
a130: 61 70 20 70 61 67 65 2c 20 74 68 65 6e 20 74 68  ap page, then th
a140: 65 20 70 74 72 6d 61 70 20 69 73 20 6d 6f 76 65  e ptrmap is move
a150: 64 0a 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69  d.to the followi
a160: 6e 67 20 70 61 67 65 20 66 6f 72 20 74 68 61 74  ng page for that
a170: 20 6f 6e 65 20 63 61 73 65 2e 29 5e 3c 2f 70 3e   one case.)^</p>
a180: 0a 0a 3c 70 3e 45 61 63 68 20 35 2d 62 79 74 65  ..<p>Each 5-byte
a190: 20 65 6e 74 72 79 20 6f 6e 20 61 20 70 74 72 6d   entry on a ptrm
a1a0: 61 70 20 70 61 67 65 20 70 72 6f 76 69 64 65 73  ap page provides
a1b0: 20 62 61 63 6b 2d 6c 69 6e 6b 20 69 6e 66 6f 72   back-link infor
a1c0: 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 0a 6f 6e  mation about .on
a1d0: 65 20 6f 66 20 74 68 65 20 70 61 67 65 73 20 74  e of the pages t
a1e0: 68 61 74 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  hat immediately 
a1f0: 66 6f 6c 6c 6f 77 20 74 68 65 20 70 6f 69 6e 74  follow the point
a200: 65 72 20 6d 61 70 2e 20 20 5e 28 49 66 20 70 61  er map.  ^(If pa
a210: 67 65 20 42 20 69 73 20 61 0a 70 74 72 6d 61 70  ge B is a.ptrmap
a220: 20 70 61 67 65 20 74 68 65 6e 20 62 61 63 6b 2d   page then back-
a230: 6c 69 6e 6b 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  link information
a240: 20 61 62 6f 75 74 20 70 61 67 65 20 42 2b 31 20   about page B+1 
a250: 69 73 20 70 72 6f 76 69 64 65 64 20 62 79 0a 74  is provided by.t
a260: 68 65 20 66 69 72 73 74 20 65 6e 74 72 79 20 6f  he first entry o
a270: 6e 20 74 68 65 20 70 6f 69 6e 74 65 72 20 6d 61  n the pointer ma
a280: 70 2e 20 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20  p.  Information 
a290: 61 62 6f 75 74 20 70 61 67 65 20 42 2b 32 20 69  about page B+2 i
a2a0: 73 0a 70 72 6f 76 69 64 65 64 20 62 79 20 74 68  s.provided by th
a2b0: 65 20 73 65 63 6f 6e 64 20 65 6e 74 72 79 2e 20  e second entry. 
a2c0: 20 41 6e 64 20 73 6f 20 66 6f 72 74 68 2e 29 5e   And so forth.)^
a2d0: 3c 2f 70 3e 0a 0a 3c 70 3e 45 61 63 68 20 35 2d  </p>..<p>Each 5-
a2e0: 62 79 74 65 20 70 74 72 6d 61 70 20 65 6e 74 72  byte ptrmap entr
a2f0: 79 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 6f 6e  y consists of on
a300: 65 20 62 79 74 65 20 6f 66 20 22 70 61 67 65 20  e byte of "page 
a310: 74 79 70 65 22 20 69 6e 66 6f 72 6d 61 74 69 6f  type" informatio
a320: 6e 0a 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20  n.followed by a 
a330: 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61  4-byte big-endia
a340: 6e 20 70 61 67 65 20 6e 75 6d 62 65 72 2e 20 20  n page number.  
a350: 46 69 76 65 20 70 61 67 65 20 74 79 70 65 73 20  Five page types 
a360: 61 72 65 20 72 65 63 6f 67 6e 69 7a 65 64 3a 0a  are recognized:.
a370: 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 41  </p>..<ol>.<li>A
a380: 20 62 2d 74 72 65 65 20 72 6f 6f 74 20 70 61 67   b-tree root pag
a390: 65 2e 20 20 54 68 65 0a 70 61 67 65 20 6e 75 6d  e.  The.page num
a3a0: 62 65 72 20 73 68 6f 75 6c 64 20 62 65 20 7a 65  ber should be ze
a3b0: 72 6f 2e 0a 3c 6c 69 3e 41 20 66 72 65 65 6c 69  ro..<li>A freeli
a3c0: 73 74 20 70 61 67 65 2e 20 20 54 68 65 20 70 61  st page.  The pa
a3d0: 67 65 20 6e 75 6d 62 65 72 20 73 68 6f 75 6c 64  ge number should
a3e0: 20 62 65 0a 7a 65 72 6f 2e 0a 3c 6c 69 3e 54 68   be.zero..<li>Th
a3f0: 65 20 66 69 72 73 74 20 70 61 67 65 20 6f 66 20  e first page of 
a400: 61 0a 63 65 6c 6c 20 70 61 79 6c 6f 61 64 20 6f  a.cell payload o
a410: 76 65 72 66 6c 6f 77 20 63 68 61 69 6e 2e 20 20  verflow chain.  
a420: 54 68 65 20 70 61 67 65 20 6e 75 6d 62 65 72 20  The page number 
a430: 69 73 20 74 68 65 20 62 2d 74 72 65 65 20 70 61  is the b-tree pa
a440: 67 65 20 74 68 61 74 0a 63 6f 6e 74 61 69 6e 73  ge that.contains
a450: 20 74 68 65 20 63 65 6c 6c 20 77 68 6f 73 65 20   the cell whose 
a460: 63 6f 6e 74 65 6e 74 20 68 61 73 20 6f 76 65 72  content has over
a470: 66 6c 6f 77 65 64 2e 0a 3c 6c 69 3e 41 20 70 61  flowed..<li>A pa
a480: 67 65 20 69 6e 20 61 6e 20 6f 76 65 72 66 6c 6f  ge in an overflo
a490: 77 20 63 68 61 69 6e 0a 6f 74 68 65 72 20 74 68  w chain.other th
a4a0: 61 6e 20 74 68 65 20 66 69 72 73 74 20 70 61 67  an the first pag
a4b0: 65 2e 20 20 54 68 65 20 70 61 67 65 20 6e 75 6d  e.  The page num
a4c0: 62 65 72 20 69 73 20 74 68 65 20 70 72 69 6f 72  ber is the prior
a4d0: 20 70 61 67 65 20 6f 66 20 74 68 65 0a 6f 76 65   page of the.ove
a4e0: 72 66 6c 6f 77 20 63 68 61 69 6e 2e 0a 3c 6c 69  rflow chain..<li
a4f0: 3e 41 20 6e 6f 6e 2d 72 6f 6f 74 20 62 2d 74 72  >A non-root b-tr
a500: 65 65 20 70 61 67 65 2e 20 20 54 68 65 0a 70 61  ee page.  The.pa
a510: 67 65 20 6e 75 6d 62 65 72 20 69 73 20 74 68 65  ge number is the
a520: 20 70 61 72 65 6e 74 20 62 2d 74 72 65 65 20 70   parent b-tree p
a530: 61 67 65 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 5e  age..</ol>..<p>^
a540: 49 6e 20 61 6e 79 20 64 61 74 61 62 61 73 65 20  In any database 
a550: 66 69 6c 65 20 74 68 61 74 20 63 6f 6e 74 61 69  file that contai
a560: 6e 73 20 70 74 72 6d 61 70 20 70 61 67 65 73 2c  ns ptrmap pages,
a570: 20 61 6c 6c 20 62 2d 74 72 65 65 20 72 6f 6f 74   all b-tree root
a580: 20 70 61 67 65 73 20 0a 6d 75 73 74 20 63 6f 6d   pages .must com
a590: 65 20 62 65 66 6f 72 65 20 61 6e 79 20 6e 6f 6e  e before any non
a5a0: 2d 72 6f 6f 74 20 62 2d 74 72 65 65 20 70 61 67  -root b-tree pag
a5b0: 65 2c 20 63 65 6c 6c 20 70 61 79 6c 6f 61 64 20  e, cell payload 
a5c0: 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 2c 20 6f  overflow page, o
a5d0: 72 0a 66 72 65 65 6c 69 73 74 20 70 61 67 65 2e  r.freelist page.
a5e0: 20 20 54 68 69 73 20 72 65 73 74 72 69 63 74 69    This restricti
a5f0: 6f 6e 20 65 6e 73 75 72 65 73 20 74 68 61 74 20  on ensures that 
a600: 61 20 72 6f 6f 74 20 70 61 67 65 20 77 69 6c 6c  a root page will
a610: 20 6e 65 76 65 72 0a 62 65 20 6d 6f 76 65 64 20   never.be moved 
a620: 64 75 72 69 6e 67 20 61 6e 20 61 75 74 6f 2d 76  during an auto-v
a630: 61 63 75 75 6d 20 6f 72 20 69 6e 63 72 65 6d 65  acuum or increme
a640: 6e 74 61 6c 2d 76 61 63 75 75 6d 2e 20 20 54 68  ntal-vacuum.  Th
a650: 65 20 61 75 74 6f 2d 76 61 63 75 75 6d 0a 6c 6f  e auto-vacuum.lo
a660: 67 69 63 20 64 6f 65 73 20 6e 6f 74 20 6b 6e 6f  gic does not kno
a670: 77 20 68 6f 77 20 74 6f 20 75 70 64 61 74 65 20  w how to update 
a680: 74 68 65 20 72 6f 6f 74 5f 70 61 67 65 20 66 69  the root_page fi
a690: 65 6c 64 20 6f 66 20 74 68 65 20 73 71 6c 69 74  eld of the sqlit
a6a0: 65 5f 6d 61 73 74 65 72 0a 74 61 62 6c 65 20 61  e_master.table a
a6b0: 6e 64 20 73 6f 20 69 74 20 69 73 20 6e 65 63 65  nd so it is nece
a6c0: 73 73 61 72 79 20 74 6f 20 70 72 65 76 65 6e 74  ssary to prevent
a6d0: 20 72 6f 6f 74 20 70 61 67 65 73 20 66 72 6f 6d   root pages from
a6e0: 20 62 65 69 6e 67 20 6d 6f 76 65 64 0a 64 75 72   being moved.dur
a6f0: 69 6e 67 20 61 6e 20 61 75 74 6f 2d 76 61 63 75  ing an auto-vacu
a700: 75 6d 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 70  um in order to p
a710: 72 65 73 65 72 76 65 20 74 68 65 20 69 6e 74 65  reserve the inte
a720: 67 72 69 74 79 20 6f 66 20 74 68 65 0a 73 71 6c  grity of the.sql
a730: 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65  ite_master table
a740: 2e 20 20 5e 52 6f 6f 74 20 70 61 67 65 73 20 61  .  ^Root pages a
a750: 72 65 20 6d 6f 76 65 64 20 74 6f 20 74 68 65 20  re moved to the 
a760: 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65  beginning of the
a770: 0a 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 62  .database file b
a780: 79 20 74 68 65 20 43 52 45 41 54 45 20 54 41 42  y the CREATE TAB
a790: 4c 45 2c 20 43 52 45 41 54 45 20 49 4e 44 45 58  LE, CREATE INDEX
a7a0: 2c 20 44 52 4f 50 20 54 41 42 4c 45 2c 20 61 6e  , DROP TABLE, an
a7b0: 64 0a 44 52 4f 50 20 49 4e 44 45 58 20 6f 70 65  d.DROP INDEX ope
a7c0: 72 61 74 69 6f 6e 73 2e 3c 2f 70 3e 0a 0a 3c 68  rations.</p>..<h
a7d0: 31 3e 53 63 68 65 6d 61 20 4c 61 79 65 72 3c 2f  1>Schema Layer</
a7e0: 68 31 3e 0a 0a 3c 70 3e 54 68 65 20 66 6f 72 65  h1>..<p>The fore
a7f0: 67 6f 69 6e 67 20 74 65 78 74 20 64 65 73 63 72  going text descr
a800: 69 62 65 73 20 6c 6f 77 2d 6c 65 76 65 6c 20 61  ibes low-level a
a810: 73 70 65 63 74 73 20 6f 66 20 74 68 65 20 53 51  spects of the SQ
a820: 4c 69 74 65 20 66 69 6c 65 0a 66 6f 72 6d 61 74  Lite file.format
a830: 2e 20 20 54 68 65 20 62 2d 74 72 65 65 20 6d 65  .  The b-tree me
a840: 63 68 61 6e 69 73 6d 20 70 72 6f 76 69 64 65 73  chanism provides
a850: 20 61 20 70 6f 77 65 72 66 75 6c 20 61 6e 64 20   a powerful and 
a860: 65 66 66 69 63 69 65 6e 74 20 6d 65 61 6e 73 20  efficient means 
a870: 6f 66 0a 61 63 63 65 73 73 69 6e 67 20 61 20 6c  of.accessing a l
a880: 61 72 67 65 20 64 61 74 61 20 73 65 74 2e 20 20  arge data set.  
a890: 54 68 69 73 20 73 65 63 74 69 6f 6e 20 77 69 6c  This section wil
a8a0: 6c 20 64 65 73 63 72 69 62 65 20 68 6f 77 20 74  l describe how t
a8b0: 68 65 0a 6c 6f 77 2d 6c 65 76 65 6c 20 62 2d 74  he.low-level b-t
a8c0: 72 65 65 20 6c 61 79 65 72 20 69 73 20 75 73 65  ree layer is use
a8d0: 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 68  d to implement h
a8e0: 69 67 68 65 72 2d 6c 65 76 65 6c 20 53 51 4c 0a  igher-level SQL.
a8f0: 63 61 70 61 62 69 6c 69 74 69 65 73 2e 3c 2f 70  capabilities.</p
a900: 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
a910: 65 6e 74 20 72 65 63 6f 72 64 5f 66 6f 72 6d 61  ent record_forma
a920: 74 20 7b 72 65 63 6f 72 64 20 66 6f 72 6d 61 74  t {record format
a930: 7d 3c 2f 74 63 6c 3e 0a 3c 68 32 3e 52 65 63 6f  }</tcl>.<h2>Reco
a940: 72 64 20 46 6f 72 6d 61 74 3c 2f 68 32 3e 0a 0a  rd Format</h2>..
a950: 3c 70 3e 54 68 65 20 64 61 74 61 20 66 6f 72 20  <p>The data for 
a960: 61 20 74 61 62 6c 65 20 62 2d 74 72 65 65 20 6c  a table b-tree l
a970: 65 61 66 20 70 61 67 65 20 61 6e 64 20 74 68 65  eaf page and the
a980: 20 6b 65 79 0a 6f 66 20 61 6e 20 69 6e 64 65 78   key.of an index
a990: 20 62 2d 74 72 65 65 20 70 61 67 65 20 77 61 73   b-tree page was
a9a0: 20 63 68 61 72 61 63 74 65 72 69 7a 65 64 20 61   characterized a
a9b0: 62 6f 76 65 0a 61 73 20 61 6e 20 61 72 62 69 74  bove.as an arbit
a9c0: 72 61 72 79 20 73 65 71 75 65 6e 63 65 20 6f 66  rary sequence of
a9d0: 20 62 79 74 65 73 2e 0a 54 68 65 20 70 72 69 6f   bytes..The prio
a9e0: 72 20 64 69 73 63 75 73 73 69 6f 6e 20 6d 65 6e  r discussion men
a9f0: 74 69 6f 6e 65 64 20 6f 6e 65 20 6b 65 79 20 62  tioned one key b
aa00: 65 69 6e 67 20 6c 65 73 73 20 74 68 61 6e 20 61  eing less than a
aa10: 6e 6f 74 68 65 72 2c 20 62 75 74 0a 64 69 64 20  nother, but.did 
aa20: 6e 6f 74 20 64 65 66 69 6e 65 20 77 68 61 74 20  not define what 
aa30: 22 6c 65 73 73 20 74 68 61 6e 22 20 6d 65 61 6e  "less than" mean
aa40: 74 2e 20 20 54 68 65 20 63 75 72 72 65 6e 74 20  t.  The current 
aa50: 73 65 63 74 69 6f 6e 20 77 69 6c 6c 20 61 64 64  section will add
aa60: 72 65 73 73 0a 74 68 65 73 65 20 6f 6d 69 73 73  ress.these omiss
aa70: 69 6f 6e 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 50 61  ions.</p>..<p>Pa
aa80: 79 6c 6f 61 64 2c 20 65 69 74 68 65 72 20 74 61  yload, either ta
aa90: 62 6c 65 20 62 2d 74 72 65 65 20 64 61 74 61 20  ble b-tree data 
aaa0: 6f 72 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20  or index b-tree 
aab0: 6b 65 79 73 2c 20 0a 69 73 20 61 6c 77 61 79 73  keys, .is always
aac0: 20 69 6e 20 74 68 65 20 22 72 65 63 6f 72 64 20   in the "record 
aad0: 66 6f 72 6d 61 74 22 2e 0a 54 68 65 20 72 65 63  format"..The rec
aae0: 6f 72 64 20 66 6f 72 6d 61 74 20 64 65 66 69 6e  ord format defin
aaf0: 65 73 20 61 20 73 65 71 75 65 6e 63 65 20 6f 66  es a sequence of
ab00: 20 76 61 6c 75 65 73 20 63 6f 72 72 65 73 70 6f   values correspo
ab10: 6e 64 69 6e 67 0a 74 6f 20 63 6f 6c 75 6d 6e 73  nding.to columns
ab20: 20 69 6e 20 61 20 74 61 62 6c 65 20 6f 72 20 69   in a table or i
ab30: 6e 64 65 78 2e 20 20 54 68 65 20 72 65 63 6f 72  ndex.  The recor
ab40: 64 20 66 6f 72 6d 61 74 20 73 70 65 63 69 66 69  d format specifi
ab50: 65 73 20 74 68 65 20 6e 75 6d 62 65 72 0a 6f 66  es the number.of
ab60: 20 63 6f 6c 75 6d 6e 73 2c 20 74 68 65 20 64 61   columns, the da
ab70: 74 61 74 79 70 65 20 6f 66 20 65 61 63 68 20 63  tatype of each c
ab80: 6f 6c 75 6d 6e 2c 20 61 6e 64 20 74 68 65 20 63  olumn, and the c
ab90: 6f 6e 74 65 6e 74 20 6f 66 20 65 61 63 68 20 63  ontent of each c
aba0: 6f 6c 75 6d 6e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54  olumn.</p>..<p>T
abb0: 68 65 20 72 65 63 6f 72 64 20 66 6f 72 6d 61 74  he record format
abc0: 20 6d 61 6b 65 73 20 65 78 74 65 6e 73 69 76 65   makes extensive
abd0: 20 75 73 65 20 6f 66 20 74 68 65 20 0a 5b 76 61   use of the .[va
abe0: 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e  riable-length in
abf0: 74 65 67 65 72 5d 20 6f 72 20 5b 76 61 72 69 6e  teger] or [varin
ac00: 74 5d 0a 72 65 70 72 65 73 65 6e 74 61 74 69 6f  t].representatio
ac10: 6e 20 6f 66 20 36 34 2d 62 69 74 20 73 69 67 6e  n of 64-bit sign
ac20: 65 64 20 69 6e 74 65 67 65 72 73 20 64 65 66 69  ed integers defi
ac30: 6e 65 64 20 61 62 6f 76 65 2e 3c 2f 70 3e 0a 0a  ned above.</p>..
ac40: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
ac50: 20 73 65 72 69 61 6c 74 79 70 65 20 7b 73 65 72   serialtype {ser
ac60: 69 61 6c 20 74 79 70 65 7d 20 7b 73 65 72 69 61  ial type} {seria
ac70: 6c 20 74 79 70 65 73 7d 3c 2f 74 63 6c 3e 0a 3c  l types}</tcl>.<
ac80: 70 3e 41 20 72 65 63 6f 72 64 20 63 6f 6e 74 61  p>A record conta
ac90: 69 6e 73 20 61 20 68 65 61 64 65 72 20 61 6e 64  ins a header and
aca0: 20 61 20 62 6f 64 79 2c 20 69 6e 20 74 68 61 74   a body, in that
acb0: 20 6f 72 64 65 72 2e 20 20 0a 5e 28 54 68 65 20   order.  .^(The 
acc0: 68 65 61 64 65 72 20 62 65 67 69 6e 73 20 77 69  header begins wi
acd0: 74 68 20 61 20 73 69 6e 67 6c 65 20 76 61 72 69  th a single vari
ace0: 6e 74 20 77 68 69 63 68 20 64 65 74 65 72 6d 69  nt which determi
acf0: 6e 65 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75  nes the total nu
ad00: 6d 62 65 72 0a 6f 66 20 62 79 74 65 73 20 69 6e  mber.of bytes in
ad10: 20 74 68 65 20 68 65 61 64 65 72 2e 20 20 54 68   the header.  Th
ad20: 65 20 76 61 72 69 6e 74 20 76 61 6c 75 65 20 69  e varint value i
ad30: 73 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68  s the size of th
ad40: 65 20 68 65 61 64 65 72 20 69 6e 0a 62 79 74 65  e header in.byte
ad50: 73 20 69 6e 63 6c 75 64 69 6e 67 20 74 68 65 20  s including the 
ad60: 73 69 7a 65 20 76 61 72 69 6e 74 20 69 74 73 65  size varint itse
ad70: 6c 66 2e 29 5e 20 20 5e 46 6f 6c 6c 6f 77 69 6e  lf.)^  ^Followin
ad80: 67 20 74 68 65 20 73 69 7a 65 20 76 61 72 69 6e  g the size varin
ad90: 74 20 61 72 65 0a 6f 6e 65 20 6f 72 20 6d 6f 72  t are.one or mor
ada0: 65 20 61 64 64 69 74 69 6f 6e 61 6c 20 76 61 72  e additional var
adb0: 69 6e 74 73 2c 20 6f 6e 65 20 70 65 72 20 63 6f  ints, one per co
adc0: 6c 75 6d 6e 2e 20 20 54 68 65 73 65 20 61 64 64  lumn.  These add
add0: 69 74 69 6f 6e 61 6c 20 76 61 72 69 6e 74 73 0a  itional varints.
ade0: 61 72 65 20 63 61 6c 6c 65 64 20 22 73 65 72 69  are called "seri
adf0: 61 6c 20 74 79 70 65 22 20 6e 75 6d 62 65 72 73  al type" numbers
ae00: 20 61 6e 64 0a 64 65 74 65 72 6d 69 6e 65 20 74   and.determine t
ae10: 68 65 20 64 61 74 61 74 79 70 65 20 6f 66 20 65  he datatype of e
ae20: 61 63 68 20 63 6f 6c 75 6d 6e 2c 20 61 63 63 6f  ach column, acco
ae30: 72 64 69 6e 67 20 74 6f 20 74 68 65 20 66 6f 6c  rding to the fol
ae40: 6c 6f 77 69 6e 67 20 63 68 61 72 74 3a 3c 2f 70  lowing chart:</p
ae50: 3e 0a 0a 3c 63 65 6e 74 65 72 3e 0a 3c 69 3e 53  >..<center>.<i>S
ae60: 65 72 69 61 6c 20 54 79 70 65 20 43 6f 64 65 73  erial Type Codes
ae70: 20 4f 66 20 54 68 65 20 52 65 63 6f 72 64 20 46   Of The Record F
ae80: 6f 72 6d 61 74 3c 2f 69 3e 3c 62 72 3e 0a 3c 74  ormat</i><br>.<t
ae90: 61 62 6c 65 20 77 69 64 74 68 3d 22 38 30 25 22  able width="80%"
aea0: 20 62 6f 72 64 65 72 3d 31 3e 0a 3c 74 72 3e 3c   border=1>.<tr><
aeb0: 74 68 3e 53 65 72 69 61 6c 20 54 79 70 65 3c 74  th>Serial Type<t
aec0: 68 3e 43 6f 6e 74 65 6e 74 20 53 69 7a 65 3c 74  h>Content Size<t
aed0: 68 3e 4d 65 61 6e 69 6e 67 0a 3c 74 72 3e 3c 74  h>Meaning.<tr><t
aee0: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
aef0: 67 6e 3d 63 65 6e 74 65 72 3e 30 3c 74 64 20 76  gn=center>0<td v
af00: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
af10: 63 65 6e 74 65 72 3e 30 3c 74 64 20 61 6c 69 67  center>0<td alig
af20: 6e 3d 6c 65 66 74 3e 0a 5e 56 61 6c 75 65 20 69  n=left>.^Value i
af30: 73 20 61 20 4e 55 4c 4c 2e 0a 3c 74 72 3e 3c 74  s a NULL..<tr><t
af40: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
af50: 67 6e 3d 63 65 6e 74 65 72 3e 31 3c 74 64 20 76  gn=center>1<td v
af60: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
af70: 63 65 6e 74 65 72 3e 31 3c 74 64 20 61 6c 69 67  center>1<td alig
af80: 6e 3d 6c 65 66 74 3e 0a 5e 56 61 6c 75 65 20 69  n=left>.^Value i
af90: 73 20 61 6e 20 38 2d 62 69 74 20 74 77 6f 73 2d  s an 8-bit twos-
afa0: 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 74 65 67  complement integ
afb0: 65 72 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  er..<tr><td vali
afc0: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
afd0: 74 65 72 3e 32 3c 74 64 20 76 61 6c 69 67 6e 3d  ter>2<td valign=
afe0: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
aff0: 3e 32 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74  >2<td align=left
b000: 3e 0a 5e 56 61 6c 75 65 20 69 73 20 61 20 62 69  >.^Value is a bi
b010: 67 2d 65 6e 64 69 61 6e 20 31 36 2d 62 69 74 20  g-endian 16-bit 
b020: 74 77 6f 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20  twos-complement 
b030: 69 6e 74 65 67 65 72 2e 0a 3c 74 72 3e 3c 74 64  integer..<tr><td
b040: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
b050: 6e 3d 63 65 6e 74 65 72 3e 33 3c 74 64 20 76 61  n=center>3<td va
b060: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
b070: 65 6e 74 65 72 3e 33 3c 74 64 20 61 6c 69 67 6e  enter>3<td align
b080: 3d 6c 65 66 74 3e 0a 5e 56 61 6c 75 65 20 69 73  =left>.^Value is
b090: 20 61 20 62 69 67 2d 65 6e 64 69 61 6e 20 32 34   a big-endian 24
b0a0: 2d 62 69 74 20 74 77 6f 73 2d 63 6f 6d 70 6c 65  -bit twos-comple
b0b0: 6d 65 6e 74 20 69 6e 74 65 67 65 72 2e 0a 3c 74  ment integer..<t
b0c0: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
b0d0: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 3c   align=center>4<
b0e0: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
b0f0: 69 67 6e 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20  ign=center>4<td 
b100: 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 56 61 6c  align=left>.^Val
b110: 75 65 20 69 73 20 61 20 62 69 67 2d 65 6e 64 69  ue is a big-endi
b120: 61 6e 20 33 32 2d 62 69 74 20 74 77 6f 73 2d 63  an 32-bit twos-c
b130: 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 74 65 67 65  omplement intege
b140: 72 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  r..<tr><td valig
b150: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
b160: 65 72 3e 35 3c 74 64 20 76 61 6c 69 67 6e 3d 74  er>5<td valign=t
b170: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
b180: 36 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e  6<td align=left>
b190: 0a 5e 56 61 6c 75 65 20 69 73 20 61 20 62 69 67  .^Value is a big
b1a0: 2d 65 6e 64 69 61 6e 20 34 38 2d 62 69 74 20 74  -endian 48-bit t
b1b0: 77 6f 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 69  wos-complement i
b1c0: 6e 74 65 67 65 72 2e 0a 3c 74 72 3e 3c 74 64 20  nteger..<tr><td 
b1d0: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
b1e0: 3d 63 65 6e 74 65 72 3e 36 3c 74 64 20 76 61 6c  =center>6<td val
b1f0: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
b200: 6e 74 65 72 3e 38 3c 74 64 20 61 6c 69 67 6e 3d  nter>8<td align=
b210: 6c 65 66 74 3e 0a 5e 56 61 6c 75 65 20 69 73 20  left>.^Value is 
b220: 61 20 62 69 67 2d 65 6e 64 69 61 6e 20 36 34 2d  a big-endian 64-
b230: 62 69 74 20 74 77 6f 73 2d 63 6f 6d 70 6c 65 6d  bit twos-complem
b240: 65 6e 74 20 69 6e 74 65 67 65 72 2e 0a 3c 74 72  ent integer..<tr
b250: 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
b260: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 37 3c 74  align=center>7<t
b270: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
b280: 67 6e 3d 63 65 6e 74 65 72 3e 38 3c 74 64 20 61  gn=center>8<td a
b290: 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 56 61 6c 75  lign=left>.^Valu
b2a0: 65 20 69 73 20 61 20 62 69 67 2d 65 6e 64 69 61  e is a big-endia
b2b0: 6e 20 49 45 45 45 20 37 35 34 2d 32 30 30 38 20  n IEEE 754-2008 
b2c0: 36 34 2d 62 69 74 20 66 6c 6f 61 74 69 6e 67 20  64-bit floating 
b2d0: 70 6f 69 6e 74 20 6e 75 6d 62 65 72 2e 0a 3c 74  point number..<t
b2e0: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
b2f0: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 38 3c   align=center>8<
b300: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
b310: 69 67 6e 3d 63 65 6e 74 65 72 3e 30 3c 74 64 20  ign=center>0<td 
b320: 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 56 61 6c  align=left>.^Val
b330: 75 65 20 69 73 20 74 68 65 20 69 6e 74 65 67 65  ue is the intege
b340: 72 20 30 2e 20 28 4f 6e 6c 79 20 61 76 61 69 6c  r 0. (Only avail
b350: 61 62 6c 65 20 66 6f 72 20 5b 73 63 68 65 6d 61  able for [schema
b360: 20 66 6f 72 6d 61 74 5d 20 34 20 61 6e 64 20 68   format] 4 and h
b370: 69 67 68 65 72 2e 29 0a 3c 74 72 3e 3c 74 64 20  igher.).<tr><td 
b380: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
b390: 3d 63 65 6e 74 65 72 3e 39 3c 74 64 20 76 61 6c  =center>9<td val
b3a0: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
b3b0: 6e 74 65 72 3e 30 3c 74 64 20 61 6c 69 67 6e 3d  nter>0<td align=
b3c0: 6c 65 66 74 3e 0a 5e 56 61 6c 75 65 20 69 73 20  left>.^Value is 
b3d0: 74 68 65 20 69 6e 74 65 67 65 72 20 31 2e 20 28  the integer 1. (
b3e0: 4f 6e 6c 79 20 61 76 61 69 6c 61 62 6c 65 20 66  Only available f
b3f0: 6f 72 20 5b 73 63 68 65 6d 61 20 66 6f 72 6d 61  or [schema forma
b400: 74 5d 20 34 20 61 6e 64 20 68 69 67 68 65 72 2e  t] 4 and higher.
b410: 29 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  ).<tr><td valign
b420: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
b430: 72 3e 31 30 2c 31 31 0a 20 20 20 20 3c 74 64 20  r>10,11.    <td 
b440: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
b450: 3d 63 65 6e 74 65 72 3e 26 6e 62 73 70 3b 3c 74  =center>&nbsp;<t
b460: 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 3c 69  d align=left>.<i
b470: 3e 4e 6f 74 20 75 73 65 64 2e 20 20 52 65 73 65  >Not used.  Rese
b480: 72 76 65 64 20 66 6f 72 20 65 78 70 61 6e 73 69  rved for expansi
b490: 6f 6e 2e 3c 2f 69 3e 0a 3c 74 72 3e 3c 74 64 20  on.</i>.<tr><td 
b4a0: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
b4b0: 3d 63 65 6e 74 65 72 3e 4e 26 23 78 32 32 36 35  =center>N&#x2265
b4c0: 3b 31 32 20 61 6e 64 20 65 76 65 6e 0a 20 20 20  ;12 and even.   
b4d0: 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20   <td valign=top 
b4e0: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 28 4e 2d  align=center>(N-
b4f0: 31 32 29 2f 32 3c 74 64 20 61 6c 69 67 6e 3d 6c  12)/2<td align=l
b500: 65 66 74 3e 0a 5e 56 61 6c 75 65 20 69 73 20 61  eft>.^Value is a
b510: 20 42 4c 4f 42 20 74 68 61 74 20 69 73 20 28 4e   BLOB that is (N
b520: 2d 31 32 29 2f 32 20 62 79 74 65 73 20 69 6e 20  -12)/2 bytes in 
b530: 6c 65 6e 67 74 68 2e 0a 3c 74 72 3e 3c 74 64 20  length..<tr><td 
b540: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
b550: 3d 63 65 6e 74 65 72 3e 4e 26 23 78 32 32 36 35  =center>N&#x2265
b560: 3b 31 33 20 61 6e 64 20 6f 64 64 0a 20 20 20 20  ;13 and odd.    
b570: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
b580: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 28 4e 2d 31  lign=center>(N-1
b590: 33 29 2f 32 3c 74 64 20 61 6c 69 67 6e 3d 6c 65  3)/2<td align=le
b5a0: 66 74 3e 0a 5e 56 61 6c 75 65 20 69 73 20 61 20  ft>.^Value is a 
b5b0: 73 74 72 69 6e 67 20 69 6e 20 74 68 65 20 5b 74  string in the [t
b5c0: 65 78 74 20 65 6e 63 6f 64 69 6e 67 5d 20 61 6e  ext encoding] an
b5d0: 64 20 28 4e 2d 31 33 29 2f 32 20 62 79 74 65 73  d (N-13)/2 bytes
b5e0: 20 69 6e 20 6c 65 6e 67 74 68 2e 0a 5e 54 68 65   in length..^The
b5f0: 20 6e 75 6c 20 74 65 72 6d 69 6e 61 74 6f 72 20   nul terminator 
b600: 69 73 20 6e 6f 74 20 73 74 6f 72 65 64 2e 0a 3c  is not stored..<
b610: 2f 74 61 62 6c 65 3e 3c 2f 63 65 6e 74 65 72 3e  /table></center>
b620: 0a 0a 3c 70 3e 54 68 65 20 68 65 61 64 65 72 20  ..<p>The header 
b630: 73 69 7a 65 20 76 61 72 69 6e 74 0a 61 6e 64 20  size varint.and 
b640: 73 65 72 69 61 6c 20 74 79 70 65 20 76 61 72 69  serial type vari
b650: 6e 74 73 20 77 69 6c 6c 20 75 73 75 61 6c 6c 79  nts will usually
b660: 20 63 6f 6e 73 69 73 74 20 6f 66 20 61 20 73 69   consist of a si
b670: 6e 67 6c 65 20 62 79 74 65 2e 20 20 54 68 65 0a  ngle byte.  The.
b680: 73 65 72 69 61 6c 20 74 79 70 65 20 76 61 72 69  serial type vari
b690: 6e 74 73 20 66 6f 72 20 6c 61 72 67 65 20 73 74  nts for large st
b6a0: 72 69 6e 67 73 20 61 6e 64 20 42 4c 4f 42 73 20  rings and BLOBs 
b6b0: 6d 69 67 68 74 20 65 78 74 65 6e 64 20 74 6f 20  might extend to 
b6c0: 74 77 6f 20 6f 72 20 74 68 72 65 65 0a 62 79 74  two or three.byt
b6d0: 65 20 76 61 72 69 6e 74 73 2c 20 62 75 74 20 74  e varints, but t
b6e0: 68 61 74 20 69 73 20 74 68 65 20 65 78 63 65 70  hat is the excep
b6f0: 74 69 6f 6e 20 72 61 74 68 65 72 20 74 68 61 6e  tion rather than
b700: 20 74 68 65 20 72 75 6c 65 2e 20 0a 54 68 65 20   the rule. .The 
b710: 76 61 72 69 6e 74 20 66 6f 72 6d 61 74 20 69 73  varint format is
b720: 20 76 65 72 79 20 65 66 66 69 63 69 65 6e 74 20   very efficient 
b730: 61 74 20 63 6f 64 69 6e 67 20 74 68 65 20 72 65  at coding the re
b740: 63 6f 72 64 20 68 65 61 64 65 72 2e 3c 2f 70 3e  cord header.</p>
b750: 0a 0a 3c 70 3e 5e 54 68 65 20 76 61 6c 75 65 73  ..<p>^The values
b760: 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   for each column
b770: 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 69   in the record i
b780: 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f  mmediately follo
b790: 77 20 74 68 65 20 68 65 61 64 65 72 2e 0a 5e 28  w the header..^(
b7a0: 46 6f 72 20 73 65 72 69 61 6c 20 74 79 70 65 73  For serial types
b7b0: 20 30 2c 20 38 2c 20 39 2c 20 31 32 2c 20 61 6e   0, 8, 9, 12, an
b7c0: 64 20 31 33 2c 20 74 68 65 20 76 61 6c 75 65 20  d 13, the value 
b7d0: 69 73 20 7a 65 72 6f 20 62 79 74 65 73 20 69 6e  is zero bytes in
b7e0: 0a 6c 65 6e 67 74 68 2e 20 20 49 66 20 61 6c 6c  .length.  If all
b7f0: 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 6f 66 20   columns are of 
b800: 74 68 65 73 65 20 74 79 70 65 73 20 74 68 65 6e  these types then
b810: 20 74 68 65 20 62 6f 64 79 20 73 65 63 74 69 6f   the body sectio
b820: 6e 20 6f 66 20 74 68 65 0a 72 65 63 6f 72 64 20  n of the.record 
b830: 69 73 20 65 6d 70 74 79 2e 29 5e 3c 2f 70 3e 0a  is empty.)^</p>.
b840: 0a 3c 70 3e 5e 41 20 72 65 63 6f 72 64 20 6d 69  .<p>^A record mi
b850: 67 68 74 20 68 61 76 65 20 66 65 77 65 72 20 76  ght have fewer v
b860: 61 6c 75 65 73 20 74 68 61 6e 20 74 68 65 20 6e  alues than the n
b870: 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
b880: 20 69 6e 20 74 68 65 0a 63 6f 72 72 65 73 70 6f   in the.correspo
b890: 6e 64 69 6e 67 20 74 61 62 6c 65 2e 20 20 54 68  nding table.  Th
b8a0: 69 73 20 63 61 6e 20 68 61 70 70 65 6e 2c 20 66  is can happen, f
b8b0: 6f 72 20 65 78 61 6d 70 6c 65 2c 20 61 66 74 65  or example, afte
b8c0: 72 20 61 6e 0a 5b 41 4c 54 45 52 20 54 41 42 4c  r an.[ALTER TABL
b8d0: 45 7c 41 4c 54 45 52 20 54 41 42 4c 45 20 2e 2e  E|ALTER TABLE ..
b8e0: 2e 20 41 44 44 20 43 4f 4c 55 4d 4e 5d 20 53 51  . ADD COLUMN] SQ
b8f0: 4c 20 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20  L statement has 
b900: 69 6e 63 72 65 61 73 65 64 0a 74 68 65 20 6e 75  increased.the nu
b910: 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
b920: 69 6e 20 74 68 65 20 74 61 62 6c 65 20 73 63 68  in the table sch
b930: 65 6d 61 20 77 69 74 68 6f 75 74 20 6d 6f 64 69  ema without modi
b940: 66 79 69 6e 67 20 70 72 65 65 78 69 73 74 69 6e  fying preexistin
b950: 67 20 72 6f 77 73 0a 69 6e 20 74 68 65 20 74 61  g rows.in the ta
b960: 62 6c 65 2e 0a 5e 4d 69 73 73 69 6e 67 20 76 61  ble..^Missing va
b970: 6c 75 65 73 20 61 74 20 74 68 65 20 65 6e 64 20  lues at the end 
b980: 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 61 72  of the record ar
b990: 65 20 66 69 6c 6c 65 64 20 69 6e 20 75 73 69 6e  e filled in usin
b9a0: 67 20 74 68 65 0a 5b 64 65 66 61 75 6c 74 20 76  g the.[default v
b9b0: 61 6c 75 65 5d 20 66 6f 72 20 74 68 65 20 63 6f  alue] for the co
b9c0: 72 72 65 73 70 6f 6e 64 69 6e 67 20 63 6f 6c 75  rresponding colu
b9d0: 6d 6e 73 20 64 65 66 69 6e 65 64 20 69 6e 20 74  mns defined in t
b9e0: 68 65 20 74 61 62 6c 65 20 73 63 68 65 6d 61 2e  he table schema.
b9f0: 0a 3c 2f 70 3e 0a 0a 0a 3c 68 32 3e 52 65 63 6f  .</p>...<h2>Reco
ba00: 72 64 20 53 6f 72 74 20 4f 72 64 65 72 3c 2f 68  rd Sort Order</h
ba10: 32 3e 0a 0a 3c 70 3e 54 68 65 20 6f 72 64 65 72  2>..<p>The order
ba20: 20 6f 66 20 6b 65 79 73 20 69 6e 20 61 6e 20 69   of keys in an i
ba30: 6e 64 65 78 20 62 2d 74 72 65 65 20 69 73 20 64  ndex b-tree is d
ba40: 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65  etermined by the
ba50: 20 73 6f 72 74 20 6f 72 64 65 72 20 6f 66 0a 74   sort order of.t
ba60: 68 65 20 72 65 63 6f 72 64 73 20 74 68 61 74 20  he records that 
ba70: 74 68 65 20 6b 65 79 73 20 72 65 70 72 65 73 65  the keys represe
ba80: 6e 74 2e 20 20 52 65 63 6f 72 64 20 63 6f 6d 70  nt.  Record comp
ba90: 61 72 69 73 6f 6e 20 70 72 6f 67 72 65 73 73 65  arison progresse
baa0: 73 20 63 6f 6c 75 6d 6e 0a 62 79 20 63 6f 6c 75  s column.by colu
bab0: 6d 6e 2e 20 20 43 6f 6c 75 6d 6e 73 20 6f 66 20  mn.  Columns of 
bac0: 61 20 72 65 63 6f 72 64 20 61 72 65 20 65 78 61  a record are exa
bad0: 6d 69 6e 65 64 20 66 72 6f 6d 20 6c 65 66 74 20  mined from left 
bae0: 74 6f 20 72 69 67 68 74 2e 20 20 54 68 65 0a 66  to right.  The.f
baf0: 69 72 73 74 20 70 61 69 72 20 6f 66 20 63 6f 6c  irst pair of col
bb00: 75 6d 6e 73 20 74 68 61 74 20 61 72 65 20 6e 6f  umns that are no
bb10: 74 20 65 71 75 61 6c 20 64 65 74 65 72 6d 69 6e  t equal determin
bb20: 65 73 20 74 68 65 20 72 65 6c 61 74 69 76 65 20  es the relative 
bb30: 6f 72 64 65 72 0a 6f 66 20 74 68 65 20 74 77 6f  order.of the two
bb40: 20 72 65 63 6f 72 64 73 2e 20 20 54 68 65 20 73   records.  The s
bb50: 6f 72 74 20 6f 72 64 65 72 20 6f 66 20 69 6e 64  ort order of ind
bb60: 69 76 69 64 75 61 6c 20 63 6f 6c 75 6d 6e 73 20  ividual columns 
bb70: 69 73 20 61 73 0a 66 6f 6c 6c 6f 77 73 3a 3c 2f  is as.follows:</
bb80: 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 5e 28 4e  p>..<ol>.<li>^(N
bb90: 55 4c 4c 20 76 61 6c 75 65 73 20 28 73 65 72 69  ULL values (seri
bba0: 61 6c 20 74 79 70 65 20 30 29 20 73 6f 72 74 20  al type 0) sort 
bbb0: 66 69 72 73 74 2e 29 5e 0a 3c 6c 69 3e 5e 28 4e  first.)^.<li>^(N
bbc0: 75 6d 65 72 69 63 20 76 61 6c 75 65 73 20 28 73  umeric values (s
bbd0: 65 72 69 61 6c 20 74 79 70 65 73 20 31 20 74 68  erial types 1 th
bbe0: 72 6f 75 67 68 20 39 29 20 73 6f 72 74 20 61 66  rough 9) sort af
bbf0: 74 65 72 20 4e 55 4c 4c 73 0a 20 20 20 20 20 20  ter NULLs.      
bc00: 61 6e 64 20 69 6e 20 6e 75 6d 65 72 69 63 20 6f  and in numeric o
bc10: 72 64 65 72 2e 29 5e 0a 3c 6c 69 3e 5e 28 54 65  rder.)^.<li>^(Te
bc20: 78 74 20 76 61 6c 75 65 73 20 28 6f 64 64 20 73  xt values (odd s
bc30: 65 72 69 61 6c 20 74 79 70 65 73 20 31 33 20 61  erial types 13 a
bc40: 6e 64 20 6c 61 72 67 65 72 29 20 73 6f 72 74 20  nd larger) sort 
bc50: 61 66 74 65 72 20 6e 75 6d 65 72 69 63 0a 20 20  after numeric.  
bc60: 20 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20    values in the 
bc70: 6f 72 64 65 72 20 64 65 74 65 72 6d 69 6e 65 64  order determined
bc80: 20 62 79 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20   by the columns 
bc90: 5b 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74  [collating funct
bca0: 69 6f 6e 5d 2e 29 5e 0a 3c 6c 69 3e 5e 28 42 4c  ion].)^.<li>^(BL
bcb0: 4f 42 20 76 61 6c 75 65 73 20 28 65 76 65 6e 20  OB values (even 
bcc0: 73 65 72 69 61 6c 20 74 79 70 65 73 20 31 32 20  serial types 12 
bcd0: 61 6e 64 20 6c 61 72 67 65 72 29 20 73 6f 72 74  and larger) sort
bce0: 20 6c 61 73 74 20 61 6e 64 20 69 6e 20 74 68 65   last and in the
bcf0: 20 6f 72 64 65 72 20 0a 20 20 20 20 64 65 74 65   order .    dete
bd00: 72 6d 69 6e 65 64 20 62 79 20 6d 65 6d 63 6d 70  rmined by memcmp
bd10: 28 29 2e 29 5e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e  ().)^.</ol>..<p>
bd20: 41 20 5b 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e  A [collating fun
bd30: 63 74 69 6f 6e 5d 20 66 6f 72 20 65 61 63 68 20  ction] for each 
bd40: 63 6f 6c 75 6d 6e 20 69 73 20 6e 65 63 65 73 73  column is necess
bd50: 61 72 79 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  ary in order to 
bd60: 63 6f 6d 70 75 74 65 0a 74 68 65 20 6f 72 64 65  compute.the orde
bd70: 72 20 6f 66 20 74 65 78 74 20 66 69 65 6c 64 73  r of text fields
bd80: 2e 0a 5e 28 53 51 4c 69 74 65 20 64 65 66 69 6e  ..^(SQLite defin
bd90: 65 73 20 74 68 72 65 65 20 62 75 69 6c 74 2d 69  es three built-i
bda0: 6e 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63  n collating func
bdb0: 74 69 6f 6e 73 3a 29 5e 0a 3c 2f 70 3e 0a 0a 3c  tions:)^.</p>..<
bdc0: 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 74 61 62 6c  blockquote><tabl
bdd0: 65 20 62 6f 72 64 65 72 3d 30 20 63 65 6c 6c 73  e border=0 cells
bde0: 70 61 63 69 6e 67 3d 31 30 3e 0a 3c 74 72 3e 3c  pacing=10>.<tr><
bdf0: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 42 49  td valign=top>BI
be00: 4e 41 52 59 0a 20 20 20 20 3c 74 64 3e 20 5e 28  NARY.    <td> ^(
be10: 54 68 65 20 62 75 69 6c 74 2d 69 6e 20 42 49 4e  The built-in BIN
be20: 41 52 59 20 63 6f 6c 6c 61 74 69 6f 6e 20 63 6f  ARY collation co
be30: 6d 70 61 72 65 73 20 73 74 72 69 6e 67 73 20 62  mpares strings b
be40: 79 74 65 20 62 79 20 62 79 74 65 0a 20 20 20 20  yte by byte.    
be50: 20 20 20 20 75 73 69 6e 67 20 74 68 65 20 6d 65      using the me
be60: 6d 63 6d 70 28 29 20 66 75 6e 63 74 69 6f 6e 0a  mcmp() function.
be70: 20 20 20 20 20 20 20 20 66 72 6f 6d 20 74 68 65          from the
be80: 20 73 74 61 6e 64 61 72 64 20 43 20 6c 69 62 72   standard C libr
be90: 61 72 79 2e 29 5e 0a 3c 74 72 3e 3c 74 64 20 76  ary.)^.<tr><td v
bea0: 61 6c 69 67 6e 3d 74 6f 70 3e 4e 4f 43 41 53 45  align=top>NOCASE
beb0: 0a 20 20 20 20 3c 74 64 3e 20 5e 28 54 68 65 20  .    <td> ^(The 
bec0: 4e 4f 43 41 53 45 20 63 6f 6c 6c 61 74 69 6f 6e  NOCASE collation
bed0: 20 69 73 20 6c 69 6b 65 20 42 49 4e 41 52 59 20   is like BINARY 
bee0: 65 78 63 65 70 74 20 74 68 61 74 20 75 70 70 65  except that uppe
bef0: 72 63 61 73 65 0a 20 20 20 20 20 20 20 20 41 53  rcase.        AS
bf00: 43 49 49 20 63 68 61 72 61 63 74 65 72 73 20 28  CII characters (
bf10: 27 41 27 20 74 68 72 6f 75 67 68 20 27 5a 27 29  'A' through 'Z')
bf20: 0a 20 20 20 20 20 20 20 20 61 72 65 20 66 6f 6c  .        are fol
bf30: 64 65 64 20 69 6e 74 6f 20 74 68 65 69 72 20 6c  ded into their l
bf40: 6f 77 65 72 63 61 73 65 20 65 71 75 69 76 61 6c  owercase equival
bf50: 65 6e 74 73 20 70 72 69 6f 72 20 74 6f 20 72 75  ents prior to ru
bf60: 6e 6e 69 6e 67 20 74 68 65 0a 20 20 20 20 20 20  nning the.      
bf70: 20 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 4f    comparison.  O
bf80: 6e 6c 79 20 41 53 43 49 49 20 63 68 61 72 61 63  nly ASCII charac
bf90: 74 65 72 73 20 61 72 65 20 63 61 73 65 2d 66 6f  ters are case-fo
bfa0: 6c 64 65 64 2e 29 5e 0a 20 20 20 20 20 20 20 20  lded.)^.        
bfb0: 5e 28 4e 4f 43 41 53 45 0a 20 20 20 20 20 20 20  ^(NOCASE.       
bfc0: 20 64 6f 65 73 20 6e 6f 74 20 69 6d 70 6c 65 6d   does not implem
bfd0: 65 6e 74 20 61 20 67 65 6e 65 72 61 6c 20 70 75  ent a general pu
bfe0: 72 70 6f 73 65 20 75 6e 69 63 6f 64 65 20 63 61  rpose unicode ca
bff0: 73 65 6c 65 73 73 20 63 6f 6d 70 61 72 69 73 6f  seless compariso
c000: 6e 2e 29 5e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c  n.)^.<tr><td val
c010: 69 67 6e 3d 74 6f 70 3e 52 54 52 49 4d 0a 20 20  ign=top>RTRIM.  
c020: 20 20 3c 74 64 3e 20 5e 28 52 54 52 49 4d 20 69    <td> ^(RTRIM i
c030: 73 20 6c 69 6b 65 20 42 49 4e 41 52 59 20 65 78  s like BINARY ex
c040: 63 65 70 74 20 74 68 61 74 20 65 78 74 72 61 20  cept that extra 
c050: 73 70 61 63 65 73 20 61 74 20 74 68 65 20 65 6e  spaces at the en
c060: 64 20 6f 66 20 65 69 74 68 65 72 0a 20 20 20 20  d of either.    
c070: 20 20 20 20 20 73 74 72 69 6e 67 20 64 6f 20 6e       string do n
c080: 6f 74 20 63 68 61 6e 67 65 20 74 68 65 20 72 65  ot change the re
c090: 73 75 6c 74 2e 20 20 49 6e 20 6f 74 68 65 72 20  sult.  In other 
c0a0: 77 6f 72 64 73 2c 20 73 74 72 69 6e 67 73 20 77  words, strings w
c0b0: 69 6c 6c 0a 20 20 20 20 20 20 20 20 20 63 6f 6d  ill.         com
c0c0: 70 61 72 65 20 65 71 75 61 6c 20 74 6f 20 6f 6e  pare equal to on
c0d0: 65 20 61 6e 6f 74 68 65 72 20 61 73 20 6c 6f 6e  e another as lon
c0e0: 67 20 61 73 20 74 68 65 79 0a 20 20 20 20 20 20  g as they.      
c0f0: 20 20 20 64 69 66 66 65 72 20 6f 6e 6c 79 20 69     differ only i
c100: 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  n the number of 
c110: 73 70 61 63 65 73 20 61 74 20 74 68 65 20 65 6e  spaces at the en
c120: 64 2e 29 5e 0a 3c 2f 74 61 62 6c 65 3e 3c 2f 62  d.)^.</table></b
c130: 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 5e  lockquote>..<p>^
c140: 41 64 64 69 74 69 6f 6e 61 6c 20 61 70 70 6c 69  Additional appli
c150: 63 61 74 69 6f 6e 2d 73 70 65 63 69 66 69 63 20  cation-specific 
c160: 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69  collating functi
c170: 6f 6e 73 20 63 61 6e 20 62 65 20 61 64 64 65 64  ons can be added
c180: 20 74 6f 0a 53 51 4c 69 74 65 20 75 73 69 6e 67   to.SQLite using
c190: 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 63 72   the [sqlite3_cr
c1a0: 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 29  eate_collation()
c1b0: 5d 20 69 6e 74 65 72 66 61 63 65 2e 3c 2f 70 3e  ] interface.</p>
c1c0: 0a 0a 3c 70 3e 5e 54 68 65 20 64 65 66 61 75 6c  ..<p>^The defaul
c1d0: 74 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63  t collating func
c1e0: 74 69 6f 6e 20 66 6f 72 20 61 6c 6c 20 73 74 72  tion for all str
c1f0: 69 6e 67 73 20 69 73 20 42 49 4e 41 52 59 2e 0a  ings is BINARY..
c200: 5e 41 6c 74 65 72 6e 61 74 69 76 65 20 63 6f 6c  ^Alternative col
c210: 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 73  lating functions
c220: 20 66 6f 72 20 74 61 62 6c 65 20 63 6f 6c 75 6d   for table colum
c230: 6e 73 20 63 61 6e 20 62 65 20 73 70 65 63 69 66  ns can be specif
c240: 69 65 64 20 69 6e 20 74 68 65 0a 5b 43 52 45 41  ied in the.[CREA
c250: 54 45 20 54 41 42 4c 45 5d 20 73 74 61 74 65 6d  TE TABLE] statem
c260: 65 6e 74 20 75 73 69 6e 67 20 74 68 65 20 43 4f  ent using the CO
c270: 4c 4c 41 54 45 20 63 6c 61 75 73 65 20 6f 6e 20  LLATE clause on 
c280: 74 68 65 20 5b 63 6f 6c 75 6d 6e 20 64 65 66 69  the [column defi
c290: 6e 69 74 69 6f 6e 5d 2e 0a 5e 57 68 65 6e 20 61  nition]..^When a
c2a0: 20 63 6f 6c 75 6d 6e 20 69 73 20 69 6e 64 65 78   column is index
c2b0: 65 64 2c 20 74 68 65 20 73 61 6d 65 20 63 6f 6c  ed, the same col
c2c0: 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20  lating function 
c2d0: 73 70 65 63 69 66 69 65 64 20 69 6e 20 74 68 65  specified in the
c2e0: 0a 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d 20  .[CREATE TABLE] 
c2f0: 73 74 61 74 65 6d 65 6e 74 20 69 73 20 75 73 65  statement is use
c300: 64 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e  d for the column
c310: 20 69 6e 20 74 68 65 20 69 6e 64 65 78 2c 20 62   in the index, b
c320: 79 20 64 65 66 61 75 6c 74 2c 0a 74 68 6f 75 67  y default,.thoug
c330: 68 20 74 68 69 73 20 63 61 6e 20 62 65 20 6f 76  h this can be ov
c340: 65 72 72 69 64 64 65 6e 20 75 73 69 6e 67 20 61  erridden using a
c350: 20 43 4f 4c 4c 41 54 45 20 63 6c 61 75 73 65 20   COLLATE clause 
c360: 69 6e 20 74 68 65 20 0a 5b 43 52 45 41 54 45 20  in the .[CREATE 
c370: 49 4e 44 45 58 5d 20 73 74 61 74 65 6d 65 6e 74  INDEX] statement
c380: 2e 0a 0a 3c 68 32 3e 52 65 70 72 65 73 65 6e 74  ...<h2>Represent
c390: 61 74 69 6f 6e 20 4f 66 20 53 51 4c 20 54 61 62  ation Of SQL Tab
c3a0: 6c 65 73 3c 2f 68 32 3e 0a 0a 3c 70 3e 20 5e 45  les</h2>..<p> ^E
c3b0: 61 63 68 20 6f 72 64 69 6e 61 72 79 20 53 51 4c  ach ordinary SQL
c3c0: 20 74 61 62 6c 65 20 69 6e 20 74 68 65 20 64 61   table in the da
c3d0: 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 69 73  tabase schema is
c3e0: 20 72 65 70 72 65 73 65 6e 74 65 64 20 6f 6e 2d   represented on-
c3f0: 64 69 73 6b 0a 62 79 20 61 20 74 61 62 6c 65 20  disk.by a table 
c400: 62 2d 74 72 65 65 2e 20 20 5e 45 61 63 68 20 65  b-tree.  ^Each e
c410: 6e 74 72 79 20 69 6e 20 74 68 65 20 74 61 62 6c  ntry in the tabl
c420: 65 20 62 2d 74 72 65 65 20 63 6f 72 72 65 73 70  e b-tree corresp
c430: 6f 6e 64 73 20 74 6f 20 61 20 72 6f 77 0a 6f 66  onds to a row.of
c440: 20 74 68 65 20 53 51 4c 20 74 61 62 6c 65 2e 20   the SQL table. 
c450: 20 5e 54 68 65 20 5b 72 6f 77 69 64 5d 20 6f 66   ^The [rowid] of
c460: 20 74 68 65 20 53 51 4c 20 74 61 62 6c 65 20 69   the SQL table i
c470: 73 20 74 68 65 20 36 34 2d 62 69 74 20 73 69 67  s the 64-bit sig
c480: 6e 65 64 0a 69 6e 74 65 67 65 72 20 6b 65 79 20  ned.integer key 
c490: 66 6f 72 20 65 61 63 68 20 65 6e 74 72 79 20 69  for each entry i
c4a0: 6e 20 74 68 65 20 74 61 62 6c 65 20 62 2d 74 72  n the table b-tr
c4b0: 65 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 54 68  ee.</p>..<p> ^Th
c4c0: 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 65 61 63  e content of eac
c4d0: 68 20 53 51 4c 20 74 61 62 6c 65 20 72 6f 77 20  h SQL table row 
c4e0: 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  is stored in the
c4f0: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 62   database file b
c500: 79 0a 66 69 72 73 74 20 63 6f 6d 62 69 6e 69 6e  y.first combinin
c510: 67 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20  g the values in 
c520: 74 68 65 20 76 61 72 69 6f 75 73 20 63 6f 6c 75  the various colu
c530: 6d 6e 73 20 69 6e 74 6f 20 61 20 62 79 74 65 20  mns into a byte 
c540: 61 72 72 61 79 0a 69 6e 20 74 68 65 20 72 65 63  array.in the rec
c550: 6f 72 64 20 66 6f 72 6d 61 74 2c 20 74 68 65 6e  ord format, then
c560: 20 73 74 6f 72 69 6e 67 20 74 68 61 74 20 62 79   storing that by
c570: 74 65 20 61 72 72 61 79 20 61 73 20 74 68 65 20  te array as the 
c580: 70 61 79 6c 6f 61 64 20 69 6e 0a 61 6e 20 65 6e  payload in.an en
c590: 74 72 79 20 69 6e 20 74 68 65 20 74 61 62 6c 65  try in the table
c5a0: 20 62 2d 74 72 65 65 2e 20 20 5e 54 68 65 20 6f   b-tree.  ^The o
c5b0: 72 64 65 72 20 6f 66 20 76 61 6c 75 65 73 20 69  rder of values i
c5c0: 6e 20 74 68 65 20 72 65 63 6f 72 64 20 69 73 0a  n the record is.
c5d0: 74 68 65 20 73 61 6d 65 20 61 73 20 74 68 65 20  the same as the 
c5e0: 6f 72 64 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  order of columns
c5f0: 20 69 6e 20 74 68 65 20 53 51 4c 20 74 61 62 6c   in the SQL tabl
c600: 65 20 64 65 66 69 6e 69 74 69 6f 6e 2e 0a 5e 57  e definition..^W
c610: 68 65 6e 20 61 6e 20 53 51 4c 20 74 61 62 6c 65  hen an SQL table
c620: 20 69 6e 63 6c 75 64 65 73 20 61 6e 0a 5b 49 4e   includes an.[IN
c630: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
c640: 59 5d 20 63 6f 6c 75 6d 6e 20 28 77 68 69 63 68  Y] column (which
c650: 20 61 6c 69 61 73 65 73 20 74 68 65 20 5b 72 6f   aliases the [ro
c660: 77 69 64 5d 29 20 74 68 65 6e 20 74 68 61 74 0a  wid]) then that.
c670: 63 6f 6c 75 6d 6e 20 61 70 70 65 61 72 73 20 69  column appears i
c680: 6e 20 74 68 65 20 72 65 63 6f 72 64 20 61 73 20  n the record as 
c690: 61 20 4e 55 4c 4c 20 76 61 6c 75 65 2e 20 20 5e  a NULL value.  ^
c6a0: 53 51 4c 69 74 65 20 77 69 6c 6c 20 61 6c 77 61  SQLite will alwa
c6b0: 79 73 20 75 73 65 0a 74 68 65 20 74 61 62 6c 65  ys use.the table
c6c0: 20 62 2d 74 72 65 65 20 6b 65 79 20 72 61 74 68   b-tree key rath
c6d0: 65 72 20 74 68 61 6e 20 74 68 65 20 4e 55 4c 4c  er than the NULL
c6e0: 20 76 61 6c 75 65 20 77 68 65 6e 20 72 65 66 65   value when refe
c6f0: 72 65 6e 63 69 6e 67 20 74 68 65 0a 5b 49 4e 54  rencing the.[INT
c700: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
c710: 5d 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 3e 0a 0a 3c  ] column.</p>..<
c720: 70 3e 20 5e 49 66 20 74 68 65 20 5b 61 66 66 69  p> ^If the [affi
c730: 6e 69 74 79 5d 20 6f 66 20 61 20 63 6f 6c 75 6d  nity] of a colum
c740: 6e 20 69 73 20 52 45 41 4c 20 61 6e 64 20 74 68  n is REAL and th
c750: 61 74 20 63 6f 6c 75 6d 6e 20 63 6f 6e 74 61 69  at column contai
c760: 6e 73 20 61 0a 76 61 6c 75 65 20 74 68 61 74 20  ns a.value that 
c770: 63 61 6e 20 62 65 20 63 6f 6e 76 65 72 74 65 64  can be converted
c780: 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 77   to an integer w
c790: 69 74 68 6f 75 74 20 6c 6f 73 73 20 6f 66 20 69  ithout loss of i
c7a0: 6e 66 6f 72 6d 61 74 69 6f 6e 0a 28 69 66 20 74  nformation.(if t
c7b0: 68 65 20 76 61 6c 75 65 20 63 6f 6e 74 61 69 6e  he value contain
c7c0: 73 20 6e 6f 20 66 72 61 63 74 69 6f 6e 61 6c 20  s no fractional 
c7d0: 70 61 72 74 20 61 6e 64 20 69 73 20 6e 6f 74 20  part and is not 
c7e0: 74 6f 6f 20 6c 61 72 67 65 20 74 6f 20 62 65 0a  too large to be.
c7f0: 72 65 70 72 65 73 65 6e 74 65 64 20 61 73 20 61  represented as a
c800: 6e 20 69 6e 74 65 67 65 72 29 20 74 68 65 6e 20  n integer) then 
c810: 74 68 65 20 63 6f 6c 75 6d 6e 20 6d 61 79 20 62  the column may b
c820: 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  e stored in the 
c830: 72 65 63 6f 72 64 0a 61 73 20 61 6e 20 69 6e 74  record.as an int
c840: 65 67 65 72 2e 20 20 5e 53 51 4c 69 74 65 20 77  eger.  ^SQLite w
c850: 69 6c 6c 20 63 6f 6e 76 65 72 74 20 74 68 65 20  ill convert the 
c860: 76 61 6c 75 65 20 62 61 63 6b 20 74 6f 20 66 6c  value back to fl
c870: 6f 61 74 69 6e 67 0a 70 6f 69 6e 74 20 77 68 65  oating.point whe
c880: 6e 20 65 78 74 72 61 63 74 69 6e 67 20 69 74 20  n extracting it 
c890: 66 72 6f 6d 20 74 68 65 20 72 65 63 6f 72 64 2e  from the record.
c8a0: 3c 2f 70 3e 0a 0a 3c 68 32 3e 52 65 70 72 65 73  </p>..<h2>Repres
c8b0: 65 6e 74 61 74 69 6f 6e 20 6f 66 20 57 49 54 48  entation of WITH
c8c0: 4f 55 54 20 52 4f 57 49 44 20 54 61 62 6c 65 73  OUT ROWID Tables
c8d0: 3c 2f 68 32 3e 0a 0a 3c 70 3e 5e 49 66 20 61 6e  </h2>..<p>^If an
c8e0: 20 53 51 4c 20 74 61 62 6c 65 20 69 73 20 63 72   SQL table is cr
c8f0: 65 61 74 65 64 20 75 73 69 6e 67 20 74 68 65 20  eated using the 
c900: 22 57 49 54 48 4f 55 54 20 52 4f 57 49 44 22 20  "WITHOUT ROWID" 
c910: 63 6c 61 75 73 65 20 61 74 20 74 68 65 0a 65 6e  clause at the.en
c920: 64 20 6f 66 20 69 74 73 20 43 52 45 41 54 45 20  d of its CREATE 
c930: 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 2c  TABLE statement,
c940: 20 74 68 65 6e 20 74 68 61 74 20 74 61 62 6c 65   then that table
c950: 20 69 73 20 61 20 5b 57 49 54 48 4f 55 54 20 52   is a [WITHOUT R
c960: 4f 57 49 44 5d 0a 74 61 62 6c 65 20 61 6e 64 20  OWID].table and 
c970: 75 73 65 73 20 61 20 64 69 66 66 65 72 65 6e 74  uses a different
c980: 20 6f 6e 2d 64 69 73 6b 20 72 65 70 72 65 73 65   on-disk represe
c990: 6e 74 61 74 69 6f 6e 2e 20 20 5e 41 20 57 49 54  ntation.  ^A WIT
c9a0: 48 4f 55 54 20 52 4f 57 49 44 0a 74 61 62 6c 65  HOUT ROWID.table
c9b0: 20 75 73 65 73 20 61 6e 20 69 6e 64 65 78 20 62   uses an index b
c9c0: 2d 74 72 65 65 20 72 61 74 68 65 72 20 74 68 61  -tree rather tha
c9d0: 6e 20 61 20 74 61 62 6c 65 20 62 2d 74 72 65 65  n a table b-tree
c9e0: 20 66 6f 72 20 73 74 6f 72 61 67 65 2e 0a 5e 54   for storage..^T
c9f0: 68 65 20 6b 65 79 20 66 6f 72 20 65 61 63 68 20  he key for each 
ca00: 65 6e 74 72 79 20 69 6e 20 74 68 65 20 57 49 54  entry in the WIT
ca10: 48 4f 55 54 20 52 4f 57 49 44 20 62 2d 74 72 65  HOUT ROWID b-tre
ca20: 65 20 69 73 20 61 20 72 65 63 6f 72 64 20 63 6f  e is a record co
ca30: 6d 70 6f 73 65 64 0a 6f 66 20 74 68 65 20 63 6f  mposed.of the co
ca40: 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 50 52 49  lumns of the PRI
ca50: 4d 41 52 59 20 4b 45 59 20 66 6f 6c 6c 6f 77 65  MARY KEY followe
ca60: 64 20 62 79 20 61 6c 6c 20 72 65 6d 61 69 6e 69  d by all remaini
ca70: 6e 67 20 63 6f 6c 75 6d 6e 73 20 6f 66 0a 74 68  ng columns of.th
ca80: 65 20 74 61 62 6c 65 2e 20 20 5e 54 68 65 20 70  e table.  ^The p
ca90: 72 69 6d 61 72 79 20 6b 65 79 20 63 6f 6c 75 6d  rimary key colum
caa0: 6e 73 20 61 70 70 65 61 72 20 69 6e 20 74 68 65  ns appear in the
cab0: 20 6f 72 64 65 72 20 74 68 65 79 20 74 68 65 79   order they they
cac0: 20 77 65 72 65 0a 64 65 63 6c 61 72 65 64 20 69   were.declared i
cad0: 6e 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  n the PRIMARY KE
cae0: 59 20 63 6c 61 75 73 65 20 61 6e 64 20 74 68 65  Y clause and the
caf0: 20 72 65 6d 61 69 6e 69 6e 67 20 63 6f 6c 75 6d   remaining colum
cb00: 6e 73 20 61 70 70 65 61 72 20 69 6e 0a 74 68 65  ns appear in.the
cb10: 20 6f 72 64 65 72 20 74 68 65 79 20 6f 63 63 75   order they occu
cb20: 72 20 69 6e 20 74 68 65 20 43 52 45 41 54 45 20  r in the CREATE 
cb30: 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 2e  TABLE statement.
cb40: 0a 0a 3c 70 3e 5e 48 65 6e 63 65 2c 20 74 68 65  ..<p>^Hence, the
cb50: 20 63 6f 6e 74 65 6e 74 20 65 6e 63 6f 64 69 6e   content encodin
cb60: 67 20 66 6f 72 20 61 20 57 49 54 48 4f 55 54 20  g for a WITHOUT 
cb70: 52 4f 57 49 44 20 74 61 62 6c 65 20 69 73 20 74  ROWID table is t
cb80: 68 65 20 73 61 6d 65 0a 61 73 20 74 68 65 20 63  he same.as the c
cb90: 6f 6e 74 65 6e 74 20 65 6e 63 6f 64 69 6e 67 20  ontent encoding 
cba0: 66 6f 72 20 61 6e 20 6f 72 64 69 6e 61 72 79 20  for an ordinary 
cbb0: 72 6f 77 69 64 20 74 61 62 6c 65 2c 20 65 78 63  rowid table, exc
cbc0: 65 70 74 20 74 68 61 74 20 74 68 65 0a 6f 72 64  ept that the.ord
cbd0: 65 72 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  er of the column
cbe0: 73 20 69 73 20 72 65 61 72 72 61 6e 67 65 64 20  s is rearranged 
cbf0: 73 6f 20 74 68 61 74 20 50 52 49 4d 41 52 59 20  so that PRIMARY 
cc00: 4b 45 59 20 63 6f 6c 75 6d 6e 73 20 63 6f 6d 65  KEY columns come
cc10: 0a 66 69 72 73 74 2c 20 61 6e 64 20 74 68 65 20  .first, and the 
cc20: 63 6f 6e 74 65 6e 74 20 69 73 20 75 73 65 64 20  content is used 
cc30: 61 73 20 74 68 65 20 6b 65 79 20 69 6e 20 61 6e  as the key in an
cc40: 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20 72 61   index b-tree ra
cc50: 74 68 65 72 0a 74 68 61 6e 20 61 73 20 74 68 65  ther.than as the
cc60: 20 64 61 74 61 20 69 6e 20 61 20 74 61 62 6c 65   data in a table
cc70: 20 62 2d 74 72 65 65 2e 0a 5e 54 68 65 20 73 70   b-tree..^The sp
cc80: 65 63 69 61 6c 20 65 6e 63 6f 64 69 6e 67 20 72  ecial encoding r
cc90: 75 6c 65 73 20 66 6f 72 20 63 6f 6c 75 6d 6e 73  ules for columns
cca0: 20 77 69 74 68 20 52 45 41 4c 20 61 66 66 69 6e   with REAL affin
ccb0: 69 74 79 0a 61 70 70 6c 79 20 74 6f 20 57 49 54  ity.apply to WIT
ccc0: 48 4f 55 54 20 52 4f 57 49 44 20 74 61 62 6c 65  HOUT ROWID table
ccd0: 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 74 68  s the same as th
cce0: 65 79 20 64 6f 20 77 69 74 68 20 72 6f 77 69 64  ey do with rowid
ccf0: 20 74 61 62 6c 65 73 2e 0a 0a 3c 68 32 3e 52 65   tables...<h2>Re
cd00: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 4f 66 20  presentation Of 
cd10: 53 51 4c 20 49 6e 64 69 63 65 73 3c 2f 68 32 3e  SQL Indices</h2>
cd20: 0a 0a 3c 70 3e 5e 45 61 63 68 20 53 51 4c 20 69  ..<p>^Each SQL i
cd30: 6e 64 65 78 2c 20 77 68 65 74 68 65 72 20 65 78  ndex, whether ex
cd40: 70 6c 69 63 69 74 6c 79 20 64 65 63 6c 61 72 65  plicitly declare
cd50: 64 20 76 69 61 20 61 20 5b 43 52 45 41 54 45 20  d via a [CREATE 
cd60: 49 4e 44 45 58 5d 20 73 74 61 74 65 6d 65 6e 74  INDEX] statement
cd70: 0a 6f 72 20 69 6d 70 6c 69 65 64 20 62 79 20 61  .or implied by a
cd80: 20 55 4e 49 51 55 45 20 6f 72 20 50 52 49 4d 41   UNIQUE or PRIMA
cd90: 52 59 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e  RY KEY constrain
cda0: 74 2c 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74  t, corresponds t
cdb0: 6f 20 61 6e 20 0a 69 6e 64 65 78 20 62 2d 74 72  o an .index b-tr
cdc0: 65 65 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ee in the databa
cdd0: 73 65 20 66 69 6c 65 2e 0a 5e 45 61 63 68 20 65  se file..^Each e
cde0: 6e 74 72 79 20 69 6e 20 74 68 65 20 69 6e 64 65  ntry in the inde
cdf0: 78 20 62 2d 74 72 65 65 20 63 6f 72 72 65 73 70  x b-tree corresp
ce00: 6f 6e 64 73 20 74 6f 20 61 20 73 69 6e 67 6c 65  onds to a single
ce10: 20 72 6f 77 20 69 6e 20 74 68 65 20 0a 61 73 73   row in the .ass
ce20: 6f 63 69 61 74 65 64 20 53 51 4c 20 74 61 62 6c  ociated SQL tabl
ce30: 65 2e 0a 5e 54 68 65 20 6b 65 79 20 74 6f 20 61  e..^The key to a
ce40: 6e 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20 69  n index b-tree i
ce50: 73 0a 61 20 72 65 63 6f 72 64 20 63 6f 6d 70 6f  s.a record compo
ce60: 73 65 64 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  sed of the colum
ce70: 6e 73 20 74 68 61 74 20 61 72 65 20 62 65 69 6e  ns that are bein
ce80: 67 20 69 6e 64 65 78 65 64 20 66 6f 6c 6c 6f 77  g indexed follow
ce90: 65 64 20 62 79 20 74 68 65 0a 6b 65 79 20 6f 66  ed by the.key of
cea0: 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
ceb0: 6e 67 20 74 61 62 6c 65 20 72 6f 77 2e 20 20 46  ng table row.  F
cec0: 6f 72 20 6f 72 64 69 6e 61 72 79 20 74 61 62 6c  or ordinary tabl
ced0: 65 73 2c 20 74 68 65 20 72 6f 77 20 6b 65 79 20  es, the row key 
cee0: 69 73 0a 74 68 65 20 5b 72 6f 77 69 64 5d 2c 20  is.the [rowid], 
cef0: 61 6e 64 20 66 6f 72 20 5b 57 49 54 48 4f 55 54  and for [WITHOUT
cf00: 20 52 4f 57 49 44 5d 20 74 61 62 6c 65 73 20 74   ROWID] tables t
cf10: 68 65 20 72 6f 77 20 6b 65 79 20 69 73 20 74 68  he row key is th
cf20: 65 20 50 52 49 4d 41 52 59 20 4b 45 59 2e 0a 42  e PRIMARY KEY..B
cf30: 65 63 61 75 73 65 20 65 76 65 72 79 20 72 6f 77  ecause every row
cf40: 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 68 61   in the table ha
cf50: 73 20 61 20 75 6e 69 71 75 65 20 72 6f 77 20 6b  s a unique row k
cf60: 65 79 2c 0a 61 6c 6c 20 6b 65 79 73 20 69 6e 20  ey,.all keys in 
cf70: 61 6e 20 69 6e 64 65 78 20 61 72 65 20 75 6e 69  an index are uni
cf80: 71 75 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 6e  que.</p>..<p>^In
cf90: 20 61 20 6e 6f 72 6d 61 6c 20 69 6e 64 65 78 2c   a normal index,
cfa0: 20 74 68 65 72 65 20 69 73 20 61 20 6f 6e 65 2d   there is a one-
cfb0: 74 6f 2d 6f 6e 65 20 6d 61 70 70 69 6e 67 20 62  to-one mapping b
cfc0: 65 74 77 65 65 6e 20 72 6f 77 73 20 69 6e 20 61  etween rows in a
cfd0: 20 0a 74 61 62 6c 65 20 61 6e 64 20 65 6e 74 72   .table and entr
cfe0: 69 65 73 20 69 6e 20 65 61 63 68 20 69 6e 64 65  ies in each inde
cff0: 78 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  x associated wit
d000: 68 20 74 68 61 74 20 74 61 62 6c 65 2e 0a 5e 48  h that table..^H
d010: 6f 77 65 76 65 72 2c 20 69 6e 20 61 20 5b 70 61  owever, in a [pa
d020: 72 74 69 61 6c 20 69 6e 64 65 78 5d 2c 20 74 68  rtial index], th
d030: 65 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20 6f  e index b-tree o
d040: 6e 6c 79 20 63 6f 6e 74 61 69 6e 73 20 65 6e 74  nly contains ent
d050: 72 69 65 73 0a 63 6f 72 72 65 73 70 6f 6e 64 69  ries.correspondi
d060: 6e 67 20 74 6f 20 74 61 62 6c 65 20 72 6f 77 73  ng to table rows
d070: 20 66 6f 72 20 77 68 69 63 68 20 74 68 65 20 57   for which the W
d080: 48 45 52 45 20 63 6c 61 75 73 65 20 65 78 70 72  HERE clause expr
d090: 65 73 73 69 6f 6e 20 6f 6e 20 74 68 65 0a 43 52  ession on the.CR
d0a0: 45 41 54 45 20 49 4e 44 45 58 20 73 74 61 74 65  EATE INDEX state
d0b0: 6d 65 6e 74 20 69 73 20 74 72 75 65 2e 0a 5e 43  ment is true..^C
d0c0: 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 72 6f 77  orresponding row
d0d0: 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20 61  s in the index a
d0e0: 6e 64 20 74 61 62 6c 65 20 62 2d 74 72 65 65 73  nd table b-trees
d0f0: 20 73 68 61 72 65 20 74 68 65 20 73 61 6d 65 20   share the same 
d100: 72 6f 77 69 64 0a 6f 72 20 70 72 69 6d 61 72 79  rowid.or primary
d110: 20 6b 65 79 20 76 61 6c 75 65 73 20 61 6e 64 20   key values and 
d120: 63 6f 6e 74 61 69 6e 20 74 68 65 20 73 61 6d 65  contain the same
d130: 20 76 61 6c 75 65 20 66 6f 72 20 61 6c 6c 20 69   value for all i
d140: 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 73 2e 3c  ndexed columns.<
d150: 2f 70 3e 0a 0a 3c 68 33 3e 53 75 70 70 72 65 73  /p>..<h3>Suppres
d160: 73 69 6f 6e 20 6f 66 20 72 65 64 75 6e 64 61 6e  sion of redundan
d170: 74 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 57 49 54  t columns in WIT
d180: 48 4f 55 54 20 52 4f 57 49 44 20 73 65 63 6f 6e  HOUT ROWID secon
d190: 64 61 72 79 20 69 6e 64 65 78 65 73 0a 3c 2f 68  dary indexes.</h
d1a0: 33 3e 0a 0a 3c 70 3e 20 5e 49 6e 20 61 6e 20 69  3>..<p> ^In an i
d1b0: 6e 64 65 78 20 6f 6e 20 61 20 57 49 54 48 4f 55  ndex on a WITHOU
d1c0: 54 20 52 4f 57 49 44 20 74 61 62 6c 65 2c 20 69  T ROWID table, i
d1d0: 66 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 6f 66  f one or more of
d1e0: 20 74 68 65 20 63 6f 6c 75 6d 6e 73 0a 6f 66 20   the columns.of 
d1f0: 74 68 65 20 74 61 62 6c 65 20 50 52 49 4d 41 52  the table PRIMAR
d200: 59 20 4b 45 59 20 61 72 65 20 61 6c 73 6f 20 63  Y KEY are also c
d210: 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 69 6e  olumns of the in
d220: 64 65 78 2c 20 74 68 65 6e 20 74 68 65 0a 69 6e  dex, then the.in
d230: 64 65 78 65 64 20 63 6f 6c 75 6d 6e 20 69 73 20  dexed column is 
d240: 6e 6f 74 20 72 65 70 65 61 74 65 64 20 69 6e 20  not repeated in 
d250: 74 68 65 20 74 61 62 6c 65 2d 6b 65 79 20 73 75  the table-key su
d260: 66 66 69 78 20 6f 6e 20 74 68 65 20 65 6e 64 20  ffix on the end 
d270: 6f 66 0a 74 68 65 20 69 6e 64 65 78 20 72 65 63  of.the index rec
d280: 6f 72 64 2e 20 20 5e 28 41 73 20 61 6e 20 65 78  ord.  ^(As an ex
d290: 61 6d 70 6c 65 2c 20 63 6f 6e 73 69 64 65 72 20  ample, consider 
d2a0: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 53 51  the following SQ
d2b0: 4c 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  L:..<blockquote>
d2c0: 3c 70 72 65 3e 0a 43 52 45 41 54 45 20 54 41 42  <pre>.CREATE TAB
d2d0: 4c 45 20 65 78 32 35 28 61 2c 62 2c 63 2c 64 2c  LE ex25(a,b,c,d,
d2e0: 65 2c 50 52 49 4d 41 52 59 20 4b 45 59 28 64 2c  e,PRIMARY KEY(d,
d2f0: 63 2c 61 29 29 20 57 49 54 48 4f 55 54 20 72 6f  c,a)) WITHOUT ro
d300: 77 69 64 3b 0a 43 52 45 41 54 45 20 49 4e 44 45  wid;.CREATE INDE
d310: 58 20 65 78 32 35 63 65 20 4f 4e 20 65 78 32 35  X ex25ce ON ex25
d320: 28 63 2c 65 29 3b 0a 43 52 45 41 54 45 20 49 4e  (c,e);.CREATE IN
d330: 44 45 58 20 65 78 32 35 61 63 64 65 20 4f 4e 20  DEX ex25acde ON 
d340: 65 78 32 35 28 61 2c 63 2c 64 2c 65 29 3b 0a 3c  ex25(a,c,d,e);.<
d350: 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74  /pre></blockquot
d360: 65 3e 0a 0a 3c 70 3e 45 61 63 68 20 72 6f 77 20  e>..<p>Each row 
d370: 69 6e 20 74 68 65 20 65 78 32 35 63 65 20 69 6e  in the ex25ce in
d380: 64 65 78 20 69 73 20 61 20 72 65 63 6f 72 64 0a  dex is a record.
d390: 77 69 74 68 20 74 68 65 73 65 20 63 6f 6c 75 6d  with these colum
d3a0: 6e 73 3a 20 63 2c 20 65 2c 20 64 2c 20 61 2e 20  ns: c, e, d, a. 
d3b0: 20 54 68 65 20 66 69 72 73 74 20 74 77 6f 20 63   The first two c
d3c0: 6f 6c 75 6d 6e 73 20 61 72 65 0a 74 68 65 20 63  olumns are.the c
d3d0: 6f 6c 75 6d 6e 73 20 62 65 69 6e 67 20 69 6e 64  olumns being ind
d3e0: 65 78 65 64 2c 20 63 20 61 6e 64 20 65 2e 20 20  exed, c and e.  
d3f0: 54 68 65 20 72 65 6d 61 69 6e 69 6e 67 20 63 6f  The remaining co
d400: 6c 75 6d 6e 73 20 61 72 65 20 74 68 65 20 70 72  lumns are the pr
d410: 69 6d 61 72 79 0a 6b 65 79 20 6f 66 20 74 68 65  imary.key of the
d420: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74   corresponding t
d430: 61 62 6c 65 20 72 6f 77 2e 20 20 4e 6f 72 6d 61  able row.  Norma
d440: 6c 6c 79 2c 20 74 68 65 20 70 72 69 6d 61 72 79  lly, the primary
d450: 20 6b 65 79 20 77 6f 75 6c 64 20 62 65 0a 63 6f   key would be.co
d460: 6c 75 6d 6e 73 20 64 2c 20 63 2c 20 61 6e 64 20  lumns d, c, and 
d470: 61 2c 20 62 75 74 20 62 65 63 61 75 73 65 20 63  a, but because c
d480: 6f 6c 75 6d 6e 20 63 20 61 6c 72 65 61 64 79 20  olumn c already 
d490: 61 70 70 65 61 72 73 20 65 61 72 6c 69 65 72 20  appears earlier 
d4a0: 69 6e 20 74 68 65 0a 69 6e 64 65 78 2c 20 69 74  in the.index, it
d4b0: 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d   is omitted from
d4c0: 20 74 68 65 20 6b 65 79 20 73 75 66 66 69 78 2e   the key suffix.
d4d0: 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28 49 6e 20  )^</p>..<p>^(In 
d4e0: 74 68 65 20 65 78 74 72 65 6d 65 20 63 61 73 65  the extreme case
d4f0: 20 77 68 65 72 65 20 74 68 65 20 63 6f 6c 75 6d   where the colum
d500: 6e 73 20 62 65 69 6e 67 20 69 6e 64 65 78 65 64  ns being indexed
d510: 20 63 6f 76 65 72 20 61 6c 6c 20 63 6f 6c 75 6d   cover all colum
d520: 6e 73 0a 6f 66 20 74 68 65 20 50 52 49 4d 41 52  ns.of the PRIMAR
d530: 59 20 4b 45 59 2c 20 74 68 65 20 69 6e 64 65 78  Y KEY, the index
d540: 20 77 69 6c 6c 20 63 6f 6e 73 69 73 74 20 6f 66   will consist of
d550: 20 6f 6e 6c 79 20 74 68 65 20 63 6f 6c 75 6d 6e   only the column
d560: 73 20 62 65 69 6e 67 0a 69 6e 64 65 78 65 64 2e  s being.indexed.
d570: 20 20 54 68 65 20 65 78 32 35 61 63 64 65 20 65    The ex25acde e
d580: 78 61 6d 70 6c 65 20 61 62 6f 76 65 20 64 65 6d  xample above dem
d590: 6f 6e 73 74 72 61 74 65 73 20 74 68 69 73 2e 29  onstrates this.)
d5a0: 5e 20 20 5e 45 61 63 68 20 65 6e 74 72 79 20 69  ^  ^Each entry i
d5b0: 6e 0a 74 68 65 20 65 78 32 35 61 63 64 65 20 69  n.the ex25acde i
d5c0: 6e 64 65 78 20 63 6f 6e 73 69 73 74 73 20 6f 66  ndex consists of
d5d0: 20 6f 6e 6c 79 20 74 68 65 20 63 6f 6c 75 6d 6e   only the column
d5e0: 73 20 61 2c 20 63 2c 20 64 2c 20 61 6e 64 20 65  s a, c, d, and e
d5f0: 2c 20 69 6e 20 74 68 61 74 0a 6f 72 64 65 72 2e  , in that.order.
d600: 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20 73  </p>..<p> ^The s
d610: 75 70 70 72 65 73 73 69 6f 6e 20 6f 66 20 72 65  uppression of re
d620: 64 75 6e 64 61 6e 74 20 63 6f 6c 75 6d 6e 73 20  dundant columns 
d630: 69 6e 20 74 68 65 20 6b 65 79 20 73 75 66 66 69  in the key suffi
d640: 78 20 6f 66 20 61 6e 20 69 6e 64 65 78 0a 65 6e  x of an index.en
d650: 74 72 79 20 6f 6e 6c 79 20 6f 63 63 75 72 73 20  try only occurs 
d660: 69 6e 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44  in WITHOUT ROWID
d670: 20 74 61 62 6c 65 73 2e 20 20 5e 49 6e 20 61 6e   tables.  ^In an
d680: 20 6f 72 64 69 6e 61 72 79 20 72 6f 77 69 64 20   ordinary rowid 
d690: 74 61 62 6c 65 2c 0a 74 68 65 20 69 6e 64 65 78  table,.the index
d6a0: 20 65 6e 74 72 79 20 61 6c 77 61 79 73 20 65 6e   entry always en
d6b0: 64 73 20 77 69 74 68 20 74 68 65 20 72 6f 77 69  ds with the rowi
d6c0: 64 20 65 76 65 6e 20 69 66 20 74 68 65 20 5b 49  d even if the [I
d6d0: 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
d6e0: 45 59 5d 0a 63 6f 6c 75 6d 6e 20 69 73 20 6f 6e  EY].column is on
d6f0: 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73  e of the columns
d700: 20 62 65 69 6e 67 20 69 6e 64 65 78 65 64 2e 3c   being indexed.<
d710: 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  /p>..<tcl>hd_fra
d720: 67 6d 65 6e 74 20 73 71 6c 69 74 65 5f 6d 61 73  gment sqlite_mas
d730: 74 65 72 20 7b 73 71 6c 69 74 65 5f 6d 61 73 74  ter {sqlite_mast
d740: 65 72 7d 20 7b 73 71 6c 69 74 65 5f 6d 61 73 74  er} {sqlite_mast
d750: 65 72 20 74 61 62 6c 65 7d 3c 2f 74 63 6c 3e 0a  er table}</tcl>.
d760: 3c 68 32 3e 53 74 6f 72 61 67 65 20 4f 66 20 54  <h2>Storage Of T
d770: 68 65 20 53 51 4c 20 44 61 74 61 62 61 73 65 20  he SQL Database 
d780: 53 63 68 65 6d 61 3c 2f 68 32 3e 0a 0a 3c 70 3e  Schema</h2>..<p>
d790: 5e 50 61 67 65 20 31 20 6f 66 20 61 20 64 61 74  ^Page 1 of a dat
d7a0: 61 62 61 73 65 20 66 69 6c 65 20 69 73 20 74 68  abase file is th
d7b0: 65 20 72 6f 6f 74 20 70 61 67 65 20 6f 66 20 61  e root page of a
d7c0: 20 74 61 62 6c 65 20 62 2d 74 72 65 65 20 74 68   table b-tree th
d7d0: 61 74 0a 68 6f 6c 64 73 20 61 20 73 70 65 63 69  at.holds a speci
d7e0: 61 6c 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 22  al table named "
d7f0: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 20 28  sqlite_master" (
d800: 6f 72 20 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f  or "sqlite_temp_
d810: 6d 61 73 74 65 72 22 20 69 6e 0a 74 68 65 20 63  master" in.the c
d820: 61 73 65 20 6f 66 20 61 20 54 45 4d 50 20 64 61  ase of a TEMP da
d830: 74 61 62 61 73 65 29 20 77 68 69 63 68 20 73 74  tabase) which st
d840: 6f 72 65 73 20 74 68 65 20 63 6f 6d 70 6c 65 74  ores the complet
d850: 65 0a 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e.database schem
d860: 61 2e 20 20 5e 28 54 68 65 20 73 74 72 75 63 74  a.  ^(The struct
d870: 75 72 65 20 6f 66 20 74 68 65 20 73 71 6c 69 74  ure of the sqlit
d880: 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 20 69  e_master table i
d890: 73 20 61 73 0a 69 66 20 69 74 20 68 61 64 20 62  s as.if it had b
d8a0: 65 65 6e 20 63 72 65 61 74 65 64 20 75 73 69 6e  een created usin
d8b0: 67 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  g the following 
d8c0: 53 51 4c 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b  SQL:</p>..<block
d8d0: 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 43 52 45 41  quote><pre>.CREA
d8e0: 54 45 20 54 41 42 4c 45 20 73 71 6c 69 74 65 5f  TE TABLE sqlite_
d8f0: 6d 61 73 74 65 72 28 0a 20 20 74 79 70 65 20 74  master(.  type t
d900: 65 78 74 2c 0a 20 20 6e 61 6d 65 20 74 65 78 74  ext,.  name text
d910: 2c 0a 20 20 74 62 6c 5f 6e 61 6d 65 20 74 65 78  ,.  tbl_name tex
d920: 74 2c 0a 20 20 72 6f 6f 74 70 61 67 65 20 69 6e  t,.  rootpage in
d930: 74 65 67 65 72 2c 0a 20 20 73 71 6c 20 74 65 78  teger,.  sql tex
d940: 74 0a 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f  t.);.</pre></blo
d950: 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 5e  ckquote>)^..<p>^
d960: 54 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  The sqlite_maste
d970: 72 20 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e 73  r table contains
d980: 20 6f 6e 65 20 72 6f 77 20 66 6f 72 20 65 61 63   one row for eac
d990: 68 20 74 61 62 6c 65 2c 20 69 6e 64 65 78 2c 20  h table, index, 
d9a0: 76 69 65 77 2c 0a 61 6e 64 20 74 72 69 67 67 65  view,.and trigge
d9b0: 72 20 28 63 6f 6c 6c 65 63 74 69 76 65 6c 79 20  r (collectively 
d9c0: 22 6f 62 6a 65 63 74 73 22 29 20 69 6e 20 74 68  "objects") in th
d9d0: 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
d9e0: 61 2c 20 65 78 63 65 70 74 20 74 68 65 72 65 0a  a, except there.
d9f0: 69 73 20 6e 6f 20 65 6e 74 72 79 20 66 6f 72 20  is no entry for 
da00: 74 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  the sqlite_maste
da10: 72 20 74 61 62 6c 65 20 69 74 73 65 6c 66 2e 20  r table itself. 
da20: 20 5e 54 68 65 20 73 71 6c 69 74 65 5f 6d 61 73   ^The sqlite_mas
da30: 74 65 72 20 74 61 62 6c 65 0a 63 6f 6e 74 61 69  ter table.contai
da40: 6e 73 20 65 6e 74 72 69 65 73 20 66 6f 72 20 5b  ns entries for [
da50: 69 6e 74 65 72 6e 61 6c 20 73 63 68 65 6d 61 20  internal schema 
da60: 6f 62 6a 65 63 74 73 5d 20 69 6e 20 61 64 64 69  objects] in addi
da70: 74 69 6f 6e 20 74 6f 20 61 70 70 6c 69 63 61 74  tion to applicat
da80: 69 6f 6e 2d 0a 61 6e 64 20 70 72 6f 67 72 61 6d  ion-.and program
da90: 6d 65 72 2d 64 65 66 69 6e 65 64 20 6f 62 6a 65  mer-defined obje
daa0: 63 74 73 2e 0a 0a 0a 3c 70 3e 5e 28 54 68 65 20  cts....<p>^(The 
dab0: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 2e 74 79  sqlite_master.ty
dac0: 70 65 20 63 6f 6c 75 6d 6e 20 77 69 6c 6c 20 62  pe column will b
dad0: 65 20 6f 6e 65 0a 6f 66 20 74 68 65 20 66 6f 6c  e one.of the fol
dae0: 6c 6f 77 69 6e 67 20 74 65 78 74 20 73 74 72 69  lowing text stri
daf0: 6e 67 73 3a 20 20 27 74 61 62 6c 65 27 2c 20 27  ngs:  'table', '
db00: 69 6e 64 65 78 27 2c 20 27 76 69 65 77 27 2c 20  index', 'view', 
db10: 6f 72 20 27 74 72 69 67 67 65 72 27 0a 61 63 63  or 'trigger'.acc
db20: 6f 72 64 69 6e 67 20 74 6f 20 74 68 65 20 74 79  ording to the ty
db30: 70 65 20 6f 66 20 6f 62 6a 65 63 74 20 64 65 66  pe of object def
db40: 69 6e 65 64 2e 20 20 54 68 65 20 27 74 61 62 6c  ined.  The 'tabl
db50: 65 27 20 73 74 72 69 6e 67 20 69 73 20 75 73 65  e' string is use
db60: 64 0a 66 6f 72 20 62 6f 74 68 20 6f 72 64 69 6e  d.for both ordin
db70: 61 72 79 20 61 6e 64 20 5b 76 69 72 74 75 61 6c  ary and [virtual
db80: 20 74 61 62 6c 65 73 5d 2e 29 5e 3c 2f 70 3e 0a   tables].)^</p>.
db90: 0a 3c 70 3e 5e 28 54 68 65 20 73 71 6c 69 74 65  .<p>^(The sqlite
dba0: 5f 6d 61 73 74 65 72 2e 6e 61 6d 65 20 63 6f 6c  _master.name col
dbb0: 75 6d 6e 20 77 69 6c 6c 20 68 6f 6c 64 20 74 68  umn will hold th
dbc0: 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 6f 62  e name of the ob
dbd0: 6a 65 63 74 2e 29 5e 0a 5e 28 5b 55 4e 49 51 55  ject.)^.^([UNIQU
dbe0: 45 5d 20 61 6e 64 20 5b 50 52 49 4d 41 52 59 20  E] and [PRIMARY 
dbf0: 4b 45 59 5d 20 63 6f 6e 73 74 72 61 69 6e 74 73  KEY] constraints
dc00: 20 6f 6e 20 74 61 62 6c 65 73 20 63 61 75 73 65   on tables cause
dc10: 20 53 51 4c 69 74 65 20 74 6f 20 63 72 65 61 74   SQLite to creat
dc20: 65 0a 5b 69 6e 74 65 72 6e 61 6c 20 69 6e 64 65  e.[internal inde
dc30: 78 65 73 5d 20 77 69 74 68 20 6e 61 6d 65 73 20  xes] with names 
dc40: 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 73 71 6c  of the form "sql
dc50: 69 74 65 5f 61 75 74 6f 69 6e 64 65 78 5f 54 41  ite_autoindex_TA
dc60: 42 4c 45 5f 4e 22 0a 77 68 65 72 65 20 54 41 42  BLE_N".where TAB
dc70: 4c 45 20 69 73 20 72 65 70 6c 61 63 65 64 20 62  LE is replaced b
dc80: 79 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  y the name of th
dc90: 65 20 74 61 62 6c 65 20 74 68 61 74 20 63 6f 6e  e table that con
dca0: 74 61 69 6e 73 20 74 68 65 0a 63 6f 6e 73 74 72  tains the.constr
dcb0: 61 69 6e 74 20 61 6e 64 20 4e 20 69 73 20 61 6e  aint and N is an
dcc0: 20 69 6e 74 65 67 65 72 20 62 65 67 69 6e 6e 69   integer beginni
dcd0: 6e 67 20 77 69 74 68 20 31 20 61 6e 64 20 69 6e  ng with 1 and in
dce0: 63 72 65 61 73 69 6e 67 20 62 79 20 6f 6e 65 0a  creasing by one.
dcf0: 77 69 74 68 20 65 61 63 68 20 63 6f 6e 73 74 72  with each constr
dd00: 61 69 6e 74 20 73 65 65 6e 20 69 6e 20 74 68 65  aint seen in the
dd10: 20 74 61 62 6c 65 20 64 65 66 69 6e 69 74 69 6f   table definitio
dd20: 6e 2e 29 5e 0a 5e 28 49 6e 20 61 20 5b 57 49 54  n.)^.^(In a [WIT
dd30: 48 4f 55 54 20 52 4f 57 49 44 5d 20 74 61 62 6c  HOUT ROWID] tabl
dd40: 65 2c 20 74 68 65 72 65 20 69 73 20 6e 6f 20 73  e, there is no s
dd50: 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 65 6e 74  qlite_master ent
dd60: 72 79 20 66 6f 72 20 74 68 65 0a 50 52 49 4d 41  ry for the.PRIMA
dd70: 52 59 20 4b 45 59 2c 20 62 75 74 20 74 68 65 20  RY KEY, but the 
dd80: 22 73 71 6c 69 74 65 5f 61 75 74 6f 69 6e 64 65  "sqlite_autoinde
dd90: 78 5f 54 41 42 4c 45 5f 4e 22 20 6e 61 6d 65 20  x_TABLE_N" name 
dda0: 69 73 20 73 65 74 20 61 73 69 64 65 0a 66 6f 72  is set aside.for
ddb0: 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59   the PRIMARY KEY
ddc0: 20 61 73 20 69 66 20 74 68 65 20 73 71 6c 69 74   as if the sqlit
ddd0: 65 5f 6d 61 73 74 65 72 20 65 6e 74 72 79 20 64  e_master entry d
dde0: 69 64 20 65 78 69 73 74 2e 20 20 54 68 69 73 0a  id exist.  This.
ddf0: 77 69 6c 6c 20 61 66 66 65 63 74 20 74 68 65 20  will affect the 
de00: 6e 75 6d 62 65 72 69 6e 67 20 6f 66 20 73 75 62  numbering of sub
de10: 73 65 71 75 65 6e 74 20 55 4e 49 51 55 45 20 63  sequent UNIQUE c
de20: 6f 6e 73 74 72 61 69 6e 74 73 2e 29 5e 0a 5e 54  onstraints.)^.^T
de30: 68 65 20 22 73 71 6c 69 74 65 5f 61 75 74 6f 69  he "sqlite_autoi
de40: 6e 64 65 78 5f 54 41 42 4c 45 5f 4e 22 20 6e 61  ndex_TABLE_N" na
de50: 6d 65 20 69 73 20 6e 65 76 65 72 20 61 6c 6c 6f  me is never allo
de60: 63 61 74 65 64 20 66 6f 72 20 61 6e 0a 5b 49 4e  cated for an.[IN
de70: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
de80: 59 5d 2c 20 65 69 74 68 65 72 20 69 6e 20 72 6f  Y], either in ro
de90: 77 69 64 20 74 61 62 6c 65 73 20 6f 72 20 57 49  wid tables or WI
dea0: 54 48 4f 55 54 20 52 4f 57 49 44 20 74 61 62 6c  THOUT ROWID tabl
deb0: 65 73 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  es..</p>..<p>The
dec0: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 2e 74   sqlite_master.t
ded0: 62 6c 5f 6e 61 6d 65 20 63 6f 6c 75 6d 6e 20 68  bl_name column h
dee0: 6f 6c 64 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  olds the name of
def0: 20 61 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77   a table or view
df00: 0a 74 68 61 74 20 74 68 65 20 6f 62 6a 65 63 74  .that the object
df10: 20 69 73 20 61 73 73 6f 63 69 61 74 65 64 20 77   is associated w
df20: 69 74 68 2e 20 20 5e 46 6f 72 20 61 20 74 61 62  ith.  ^For a tab
df30: 6c 65 20 6f 72 20 76 69 65 77 2c 20 74 68 65 0a  le or view, the.
df40: 74 62 6c 5f 6e 61 6d 65 20 63 6f 6c 75 6d 6e 20  tbl_name column 
df50: 69 73 20 61 20 63 6f 70 79 20 6f 66 20 74 68 65  is a copy of the
df60: 20 6e 61 6d 65 20 63 6f 6c 75 6d 6e 2e 20 20 5e   name column.  ^
df70: 46 6f 72 20 61 6e 20 69 6e 64 65 78 2c 20 74 68  For an index, th
df80: 65 20 74 62 6c 5f 6e 61 6d 65 0a 69 73 20 74 68  e tbl_name.is th
df90: 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  e name of the ta
dfa0: 62 6c 65 20 74 68 61 74 20 69 73 20 69 6e 64 65  ble that is inde
dfb0: 78 65 64 2e 20 20 5e 46 6f 72 20 61 20 74 72 69  xed.  ^For a tri
dfc0: 67 67 65 72 2c 20 74 68 65 20 74 62 6c 5f 6e 61  gger, the tbl_na
dfd0: 6d 65 0a 63 6f 6c 75 6d 6e 20 73 74 6f 72 65 73  me.column stores
dfe0: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
dff0: 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77 20 74   table or view t
e000: 68 61 74 20 63 61 75 73 65 73 20 74 68 65 20 74  hat causes the t
e010: 72 69 67 67 65 72 20 0a 74 6f 20 66 69 72 65 2e  rigger .to fire.
e020: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28 54 68 65 20 73  </p>..<p>^(The s
e030: 71 6c 69 74 65 5f 6d 61 73 74 65 72 2e 72 6f 6f  qlite_master.roo
e040: 74 70 61 67 65 20 63 6f 6c 75 6d 6e 20 73 74 6f  tpage column sto
e050: 72 65 73 20 74 68 65 20 70 61 67 65 20 6e 75 6d  res the page num
e060: 62 65 72 20 6f 66 20 74 68 65 20 72 6f 6f 74 0a  ber of the root.
e070: 62 2d 74 72 65 65 20 70 61 67 65 20 66 6f 72 20  b-tree page for 
e080: 74 61 62 6c 65 73 20 61 6e 64 20 69 6e 64 65 78  tables and index
e090: 65 73 2e 29 5e 20 20 5e 46 6f 72 20 72 6f 77 73  es.)^  ^For rows
e0a0: 20 74 68 61 74 20 64 65 66 69 6e 65 20 76 69 65   that define vie
e0b0: 77 73 2c 20 74 72 69 67 67 65 72 73 2c 0a 61 6e  ws, triggers,.an
e0c0: 64 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73  d virtual tables
e0d0: 2c 20 74 68 65 20 72 6f 6f 74 70 61 67 65 20 63  , the rootpage c
e0e0: 6f 6c 75 6d 6e 20 69 73 20 30 20 6f 72 20 4e 55  olumn is 0 or NU
e0f0: 4c 4c 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28 54 68  LL.</p>..<p>^(Th
e100: 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 2e  e sqlite_master.
e110: 73 71 6c 20 63 6f 6c 75 6d 6e 20 73 74 6f 72 65  sql column store
e120: 73 20 53 51 4c 20 74 65 78 74 20 74 68 61 74 20  s SQL text that 
e130: 64 65 73 63 72 69 62 65 73 20 74 68 65 0a 6f 62  describes the.ob
e140: 6a 65 63 74 2e 20 20 54 68 69 73 20 53 51 4c 20  ject.  This SQL 
e150: 74 65 78 74 20 69 73 20 61 20 5b 43 52 45 41 54  text is a [CREAT
e160: 45 20 54 41 42 4c 45 5d 2c 20 5b 43 52 45 41 54  E TABLE], [CREAT
e170: 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 5d  E VIRTUAL TABLE]
e180: 2c 0a 5b 43 52 45 41 54 45 20 49 4e 44 45 58 5d  ,.[CREATE INDEX]
e190: 2c 0a 5b 43 52 45 41 54 45 20 56 49 45 57 5d 2c  ,.[CREATE VIEW],
e1a0: 20 6f 72 20 5b 43 52 45 41 54 45 20 54 52 49 47   or [CREATE TRIG
e1b0: 47 45 52 5d 20 73 74 61 74 65 6d 65 6e 74 20 74  GER] statement t
e1c0: 68 61 74 20 69 66 20 65 76 61 6c 75 61 74 65 64  hat if evaluated
e1d0: 20 61 67 61 69 6e 73 74 0a 74 68 65 20 64 61 74   against.the dat
e1e0: 61 62 61 73 65 20 66 69 6c 65 20 77 68 65 6e 20  abase file when 
e1f0: 69 74 20 69 73 20 74 68 65 20 6d 61 69 6e 20 64  it is the main d
e200: 61 74 61 62 61 73 65 20 6f 66 20 61 20 5b 64 61  atabase of a [da
e210: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
e220: 6e 5d 0a 77 6f 75 6c 64 20 72 65 63 72 65 61 74  n].would recreat
e230: 65 20 74 68 65 20 6f 62 6a 65 63 74 2e 29 5e 20  e the object.)^ 
e240: 20 54 68 65 20 74 65 78 74 20 69 73 20 75 73 75   The text is usu
e250: 61 6c 6c 79 20 61 20 63 6f 70 79 20 6f 66 20 74  ally a copy of t
e260: 68 65 20 6f 72 69 67 69 6e 61 6c 0a 73 74 61 74  he original.stat
e270: 65 6d 65 6e 74 20 75 73 65 64 20 74 6f 20 63 72  ement used to cr
e280: 65 61 74 65 20 74 68 65 20 6f 62 6a 65 63 74 20  eate the object 
e290: 62 75 74 20 77 69 74 68 20 6e 6f 72 6d 61 6c 69  but with normali
e2a0: 7a 61 74 69 6f 6e 73 20 61 70 70 6c 69 65 64 20  zations applied 
e2b0: 73 6f 0a 74 68 61 74 20 74 68 65 20 74 65 78 74  so.that the text
e2c0: 20 63 6f 6e 66 6f 72 6d 73 20 74 6f 20 74 68 65   conforms to the
e2d0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 72 75 6c 65 73   following rules
e2e0: 3a 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 5e 54 68 65  :..<ul>.<li>^The
e2f0: 20 43 52 45 41 54 45 2c 20 54 41 42 4c 45 2c 20   CREATE, TABLE, 
e300: 56 49 45 57 2c 20 54 52 49 47 47 45 52 2c 20 61  VIEW, TRIGGER, a
e310: 6e 64 20 49 4e 44 45 58 20 6b 65 79 77 6f 72 64  nd INDEX keyword
e320: 73 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69  s at the beginni
e330: 6e 67 0a 6f 66 20 74 68 65 20 73 74 61 74 65 6d  ng.of the statem
e340: 65 6e 74 20 61 72 65 20 63 6f 6e 76 65 72 74 65  ent are converte
e350: 64 20 74 6f 20 61 6c 6c 20 75 70 70 65 72 20 63  d to all upper c
e360: 61 73 65 20 6c 65 74 74 65 72 73 2e 0a 3c 6c 69  ase letters..<li
e370: 3e 5e 54 68 65 20 54 45 4d 50 20 6f 72 20 54 45  >^The TEMP or TE
e380: 4d 50 4f 52 41 52 59 20 6b 65 79 77 6f 72 64 20  MPORARY keyword 
e390: 69 73 20 72 65 6d 6f 76 65 64 20 69 66 20 69 74  is removed if it
e3a0: 20 6f 63 63 75 72 73 20 61 66 74 65 72 20 74 68   occurs after th
e3b0: 65 20 0a 69 6e 69 74 69 61 6c 20 43 52 45 41 54  e .initial CREAT
e3c0: 45 20 6b 65 79 77 6f 72 64 2e 0a 3c 6c 69 3e 5e  E keyword..<li>^
e3d0: 41 6e 79 20 64 61 74 61 62 61 73 65 20 6e 61 6d  Any database nam
e3e0: 65 20 71 75 61 6c 69 66 69 65 72 20 74 68 61 74  e qualifier that
e3f0: 20 6f 63 63 75 72 73 20 70 72 69 6f 72 20 74 6f   occurs prior to
e400: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
e410: 0a 6f 62 6a 65 63 74 20 62 65 69 6e 67 20 63 72  .object being cr
e420: 65 61 74 65 64 20 69 73 20 72 65 6d 6f 76 65 64  eated is removed
e430: 2e 0a 3c 6c 69 3e 5e 4c 65 61 64 69 6e 67 20 73  ..<li>^Leading s
e440: 70 61 63 65 73 20 61 72 65 20 72 65 6d 6f 76 65  paces are remove
e450: 64 2e 0a 3c 6c 69 3e 5e 41 6c 6c 20 73 70 61 63  d..<li>^All spac
e460: 65 73 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65  es following the
e470: 20 66 69 72 73 74 20 74 77 6f 20 6b 65 79 77 6f   first two keywo
e480: 72 64 73 20 61 72 65 20 63 6f 6e 76 65 72 74 65  rds are converte
e490: 64 20 69 6e 74 6f 20 61 20 73 69 6e 67 6c 65 0a  d into a single.
e4a0: 73 70 61 63 65 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70  space..</ul>..<p
e4b0: 3e 5e 28 54 68 65 20 74 65 78 74 20 69 6e 20 74  >^(The text in t
e4c0: 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  he sqlite_master
e4d0: 2e 73 71 6c 20 63 6f 6c 75 6d 6e 20 69 73 20 61  .sql column is a
e4e0: 20 63 6f 70 79 20 6f 66 20 74 68 65 20 6f 72 69   copy of the ori
e4f0: 67 69 6e 61 6c 0a 43 52 45 41 54 45 20 73 74 61  ginal.CREATE sta
e500: 74 65 6d 65 6e 74 20 74 65 78 74 20 74 68 61 74  tement text that
e510: 20 63 72 65 61 74 65 64 20 74 68 65 20 6f 62 6a   created the obj
e520: 65 63 74 2c 20 65 78 63 65 70 74 20 6e 6f 72 6d  ect, except norm
e530: 61 6c 69 7a 65 64 20 61 73 0a 64 65 73 63 72 69  alized as.descri
e540: 62 65 64 20 61 62 6f 76 65 20 61 6e 64 20 61 73  bed above and as
e550: 20 6d 6f 64 69 66 69 65 64 20 62 79 20 73 75 62   modified by sub
e560: 73 65 71 75 65 6e 74 20 5b 41 4c 54 45 52 20 54  sequent [ALTER T
e570: 41 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74 73  ABLE] statements
e580: 2e 29 5e 0a 5e 28 54 68 65 20 73 71 6c 69 74 65  .)^.^(The sqlite
e590: 5f 6d 61 73 74 65 72 2e 73 71 6c 20 69 73 20 4e  _master.sql is N
e5a0: 55 4c 4c 20 66 6f 72 20 74 68 65 20 5b 69 6e 74  ULL for the [int
e5b0: 65 72 6e 61 6c 20 69 6e 64 65 78 65 73 5d 20 74  ernal indexes] t
e5c0: 68 61 74 20 61 72 65 0a 61 75 74 6f 6d 61 74 69  hat are.automati
e5d0: 63 61 6c 6c 79 20 63 72 65 61 74 65 64 20 62 79  cally created by
e5e0: 20 5b 55 4e 49 51 55 45 5d 20 6f 72 20 5b 50 52   [UNIQUE] or [PR
e5f0: 49 4d 41 52 59 20 4b 45 59 5d 20 63 6f 6e 73 74  IMARY KEY] const
e600: 72 61 69 6e 74 73 2e 29 5e 3c 2f 70 3e 0a 0a 0a  raints.)^</p>...
e610: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
e620: 20 69 6e 74 73 63 68 65 6d 61 20 7b 69 6e 74 65   intschema {inte
e630: 72 6e 61 6c 20 73 63 68 65 6d 61 20 6f 62 6a 65  rnal schema obje
e640: 63 74 73 7d 20 5c 0a 7b 69 6e 74 65 72 6e 61 6c  cts} \.{internal
e650: 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 7d 20   schema object} 
e660: 7b 69 6e 74 65 72 6e 61 6c 20 69 6e 64 65 78 7d  {internal index}
e670: 20 7b 69 6e 74 65 72 6e 61 6c 20 69 6e 64 65 78   {internal index
e680: 65 73 7d 20 5c 0a 7b 69 6e 74 65 72 6e 61 6c 20  es} \.{internal 
e690: 74 61 62 6c 65 7d 20 7b 69 6e 74 65 72 6e 61 6c  table} {internal
e6a0: 20 74 61 62 6c 65 73 7d 3c 2f 74 63 6c 3e 0a 3c   tables}</tcl>.<
e6b0: 68 33 3e 49 6e 74 65 72 6e 61 6c 20 53 63 68 65  h3>Internal Sche
e6c0: 6d 61 20 4f 62 6a 65 63 74 73 3c 2f 68 33 3e 0a  ma Objects</h3>.
e6d0: 0a 3c 70 3e 5e 49 6e 20 61 64 64 69 74 69 6f 6e  .<p>^In addition
e6e0: 20 74 6f 20 74 68 65 20 74 61 62 6c 65 73 2c 20   to the tables, 
e6f0: 69 6e 64 65 78 65 73 2c 20 76 69 65 77 73 2c 20  indexes, views, 
e700: 61 6e 64 20 74 72 69 67 67 65 72 73 20 63 72 65  and triggers cre
e710: 61 74 65 64 20 62 79 0a 74 68 65 20 61 70 70 6c  ated by.the appl
e720: 69 63 61 74 69 6f 6e 20 61 6e 64 2f 6f 72 20 74  ication and/or t
e730: 68 65 20 64 65 76 65 6c 6f 70 65 72 20 75 73 69  he developer usi
e740: 6e 67 20 43 52 45 41 54 45 20 73 74 61 74 65 6d  ng CREATE statem
e750: 65 6e 74 73 20 53 51 4c 2c 20 74 68 65 0a 73 71  ents SQL, the.sq
e760: 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c  lite_master tabl
e770: 65 20 6d 61 79 20 63 6f 6e 74 61 69 6e 20 7a 65  e may contain ze
e780: 72 6f 20 6f 72 20 6d 6f 72 65 20 65 6e 74 72 69  ro or more entri
e790: 65 73 20 66 6f 72 20 0a 3c 69 3e 69 6e 74 65 72  es for .<i>inter
e7a0: 6e 61 6c 20 73 63 68 65 6d 61 20 6f 62 6a 65 63  nal schema objec
e7b0: 74 73 3c 2f 69 3e 20 74 68 61 74 20 61 72 65 20  ts</i> that are 
e7c0: 63 72 65 61 74 65 64 20 62 79 20 53 51 4c 69 74  created by SQLit
e7d0: 65 20 66 6f 72 20 69 74 73 20 0a 6f 77 6e 20 69  e for its .own i
e7e0: 6e 74 65 72 6e 61 6c 20 75 73 65 2e 20 20 5e 54  nternal use.  ^T
e7f0: 68 65 20 6e 61 6d 65 73 20 6f 66 20 69 6e 74 65  he names of inte
e800: 72 6e 61 6c 20 73 63 68 65 6d 61 20 6f 62 6a 65  rnal schema obje
e810: 63 74 73 0a 61 6c 77 61 79 73 20 62 65 67 69 6e  cts.always begin
e820: 20 77 69 74 68 20 22 73 71 6c 69 74 65 5f 22 20   with "sqlite_" 
e830: 61 6e 64 20 61 6e 79 20 74 61 62 6c 65 2c 20 69  and any table, i
e840: 6e 64 65 78 2c 20 76 69 65 77 2c 20 6f 72 20 74  ndex, view, or t
e850: 72 69 67 67 65 72 0a 77 68 6f 73 65 20 6e 61 6d  rigger.whose nam
e860: 65 20 62 65 67 69 6e 73 20 77 69 74 68 20 22 73  e begins with "s
e870: 71 6c 69 74 65 5f 22 20 69 73 20 61 6e 20 69 6e  qlite_" is an in
e880: 74 65 72 6e 61 6c 20 73 63 68 65 6d 61 20 6f 62  ternal schema ob
e890: 6a 65 63 74 2e 0a 5e 53 51 4c 69 74 65 20 70 72  ject..^SQLite pr
e8a0: 6f 68 69 62 69 74 73 20 61 70 70 6c 69 63 61 74  ohibits applicat
e8b0: 69 6f 6e 73 20 66 72 6f 6d 20 63 72 65 61 74 69  ions from creati
e8c0: 6e 67 20 6f 62 6a 65 63 74 73 20 77 68 6f 73 65  ng objects whose
e8d0: 20 6e 61 6d 65 73 20 62 65 67 69 6e 0a 77 69 74   names begin.wit
e8e0: 68 20 22 73 71 6c 69 74 65 5f 22 2e 20 20 0a 0a  h "sqlite_".  ..
e8f0: 3c 70 3e 49 6e 74 65 72 6e 61 6c 20 73 63 68 65  <p>Internal sche
e900: 6d 61 20 6f 62 6a 65 63 74 73 20 75 73 65 64 20  ma objects used 
e910: 62 79 20 53 51 4c 69 74 65 20 6d 61 79 20 69 6e  by SQLite may in
e920: 63 6c 75 64 65 20 74 68 65 20 66 6f 6c 6c 6f 77  clude the follow
e930: 69 6e 67 3a 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c  ing:..<ul>.<li><
e940: 70 3e 49 6e 64 69 63 65 73 20 77 69 74 68 20 6e  p>Indices with n
e950: 61 6d 65 73 20 6f 66 20 74 68 65 20 66 6f 72 6d  ames of the form
e960: 20 22 73 71 6c 69 74 65 5f 61 75 74 6f 69 6e 64   "sqlite_autoind
e970: 65 78 5f 54 41 42 4c 45 5f 4e 22 20 74 68 61 74  ex_TABLE_N" that
e980: 0a 20 20 20 20 20 20 20 61 72 65 20 75 73 65 64  .       are used
e990: 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 5b 55   to implement [U
e9a0: 4e 49 51 55 45 5d 20 61 6e 64 20 5b 50 52 49 4d  NIQUE] and [PRIM
e9b0: 41 52 59 20 4b 45 59 5d 20 63 6f 6e 73 74 72 61  ARY KEY] constra
e9c0: 69 6e 74 73 20 6f 6e 0a 20 20 20 20 20 20 20 6f  ints on.       o
e9d0: 72 64 69 6e 61 72 79 20 74 61 62 6c 65 73 2e 0a  rdinary tables..
e9e0: 0a 3c 6c 69 3e 3c 70 3e 41 20 74 61 62 6c 65 20  .<li><p>A table 
e9f0: 77 69 74 68 20 74 68 65 20 6e 61 6d 65 20 22 73  with the name "s
ea00: 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 22 20  qlite_sequence" 
ea10: 74 68 61 74 20 69 73 20 75 73 65 64 20 74 6f 20  that is used to 
ea20: 6b 65 65 70 20 74 72 61 63 6b 0a 20 20 20 20 20  keep track.     
ea30: 20 20 6f 66 20 74 68 65 20 6d 61 78 69 6d 75 6d    of the maximum
ea40: 20 68 69 73 74 6f 72 69 63 61 6c 20 5b 49 4e 54   historical [INT
ea50: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
ea60: 5d 20 66 6f 72 20 61 20 74 61 62 6c 65 0a 20 20  ] for a table.  
ea70: 20 20 20 20 20 75 73 69 6e 67 20 5b 41 55 54 4f       using [AUTO
ea80: 49 4e 43 52 45 4d 45 4e 54 5d 2e 0a 0a 3c 6c 69  INCREMENT]...<li
ea90: 3e 3c 70 3e 54 61 62 6c 65 73 20 77 69 74 68 20  ><p>Tables with 
eaa0: 6e 61 6d 65 73 20 6f 66 20 74 68 65 20 66 6f 72  names of the for
eab0: 6d 20 22 73 71 6c 69 74 65 5f 73 74 61 74 4e 22  m "sqlite_statN"
eac0: 20 77 68 65 72 65 20 4e 20 69 73 20 61 6e 20 69   where N is an i
ead0: 6e 74 65 67 65 72 2e 0a 20 20 20 20 20 20 20 53  nteger..       S
eae0: 75 63 68 20 74 61 62 6c 65 73 20 73 74 6f 72 65  uch tables store
eaf0: 20 64 61 74 61 62 61 73 65 20 73 74 61 74 69 73   database statis
eb00: 74 69 63 73 20 67 61 74 68 65 72 65 64 20 62 79  tics gathered by
eb10: 20 74 68 65 20 5b 41 4e 41 4c 59 5a 45 5d 0a 20   the [ANALYZE]. 
eb20: 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 20 61 6e        command an
eb30: 64 20 75 73 65 64 20 62 79 20 74 68 65 20 71 75  d used by the qu
eb40: 65 72 79 20 70 6c 61 6e 6e 65 72 20 74 6f 20 68  ery planner to h
eb50: 65 6c 70 20 64 65 74 65 72 6d 69 6e 65 20 74 68  elp determine th
eb60: 65 20 62 65 73 74 0a 20 20 20 20 20 20 20 61 6c  e best.       al
eb70: 67 6f 72 69 74 68 6d 20 74 6f 20 75 73 65 20 66  gorithm to use f
eb80: 6f 72 20 65 61 63 68 20 71 75 65 72 79 2e 0a 3c  or each query..<
eb90: 2f 75 6c 3e 0a 0a 3c 70 3e 4e 65 77 20 69 6e 74  /ul>..<p>New int
eba0: 65 72 6e 61 6c 20 73 63 68 65 6d 61 20 6f 62 6a  ernal schema obj
ebb0: 65 63 74 73 20 6e 61 6d 65 73 2c 20 61 6c 77 61  ects names, alwa
ebc0: 79 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74  ys beginning wit
ebd0: 68 20 22 73 71 6c 69 74 65 5f 22 2c 0a 6d 61 79  h "sqlite_",.may
ebe0: 20 62 65 20 61 64 64 65 64 20 74 6f 20 74 68 65   be added to the
ebf0: 20 53 51 4c 69 74 65 20 66 69 6c 65 20 66 6f 72   SQLite file for
ec00: 6d 61 74 20 69 6e 20 66 75 74 75 72 65 20 72 65  mat in future re
ec10: 6c 65 61 73 65 73 2e 0a 0a 3c 74 63 6c 3e 68 64  leases...<tcl>hd
ec20: 5f 66 72 61 67 6d 65 6e 74 20 73 65 71 74 61 62  _fragment seqtab
ec30: 20 7b 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63   {sqlite_sequenc
ec40: 65 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65  e}</tcl>.<h3>The
ec50: 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65   sqlite_sequence
ec60: 20 74 61 62 6c 65 3c 2f 68 33 3e 0a 0a 3c 70 3e   table</h3>..<p>
ec70: 5e 54 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75  ^The sqlite_sequ
ec80: 65 6e 63 65 20 74 61 62 6c 65 20 69 73 20 61 6e  ence table is an
ec90: 20 69 6e 74 65 72 6e 61 6c 20 74 61 62 6c 65 20   internal table 
eca0: 75 73 65 64 20 74 6f 20 68 65 6c 70 20 69 6d 70  used to help imp
ecb0: 6c 65 6d 65 6e 74 0a 5b 41 55 54 4f 49 4e 43 52  lement.[AUTOINCR
ecc0: 45 4d 45 4e 54 5d 2e 20 20 5e 54 68 65 20 73 71  EMENT].  ^The sq
ecd0: 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 20 74 61  lite_sequence ta
ece0: 62 6c 65 20 69 73 20 63 72 65 61 74 65 64 20 61  ble is created a
ecf0: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 0a 77 68 65  utomatically.whe
ed00: 6e 65 76 65 72 20 61 6e 79 20 6f 72 64 69 6e 61  never any ordina
ed10: 72 79 20 74 61 62 6c 65 20 77 69 74 68 20 61 6e  ry table with an
ed20: 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 69   AUTOINCREMENT i
ed30: 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 0a 6b  nteger primary.k
ed40: 65 79 20 69 73 20 63 72 65 61 74 65 64 2e 20 20  ey is created.  
ed50: 5e 4f 6e 63 65 20 63 72 65 61 74 65 64 2c 20 74  ^Once created, t
ed60: 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e  he sqlite_sequen
ed70: 63 65 20 74 61 62 6c 65 20 65 78 69 73 74 73 20  ce table exists 
ed80: 69 6e 20 74 68 65 0a 73 71 6c 69 74 65 5f 6d 61  in the.sqlite_ma
ed90: 73 74 65 72 20 74 61 62 6c 65 20 66 6f 72 65 76  ster table forev
eda0: 65 72 3b 20 69 74 20 63 61 6e 6e 6f 74 20 62 65  er; it cannot be
edb0: 20 64 72 6f 70 70 65 64 2e 0a 5e 28 54 68 65 20   dropped..^(The 
edc0: 73 63 68 65 6d 61 20 66 6f 72 20 74 68 65 20 73  schema for the s
edd0: 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 20 74  qlite_sequence t
ede0: 61 62 6c 65 20 69 73 3a 0a 0a 3c 62 6c 6f 63 6b  able is:..<block
edf0: 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 43 52 45 41  quote><pre>.CREA
ee00: 54 45 20 54 41 42 4c 45 20 73 71 6c 69 74 65 5f  TE TABLE sqlite_
ee10: 73 65 71 75 65 6e 63 65 28 6e 61 6d 65 2c 73 65  sequence(name,se
ee20: 71 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63  q);.</pre></bloc
ee30: 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 5e 54  kquote>)^..<p>^T
ee40: 68 65 72 65 20 69 73 20 61 20 73 69 6e 67 6c 65  here is a single
ee50: 20 72 6f 77 20 69 6e 20 74 68 65 20 73 71 6c 69   row in the sqli
ee60: 74 65 5f 73 65 71 75 65 6e 63 65 20 74 61 62 6c  te_sequence tabl
ee70: 65 20 66 6f 72 20 65 61 63 68 20 6f 72 64 69 6e  e for each ordin
ee80: 61 72 79 0a 74 61 62 6c 65 20 74 68 61 74 20 75  ary.table that u
ee90: 73 65 73 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e  ses AUTOINCREMEN
eea0: 54 2e 20 20 5e 28 54 68 65 20 6e 61 6d 65 20 6f  T.  ^(The name o
eeb0: 66 20 74 68 65 20 74 61 62 6c 65 20 28 61 73 20  f the table (as 
eec0: 69 74 20 61 70 70 65 61 72 73 20 69 6e 0a 73 71  it appears in.sq
eed0: 6c 69 74 65 5f 6d 61 73 74 65 72 2e 6e 61 6d 65  lite_master.name
eee0: 29 20 69 73 20 69 6e 20 74 68 65 20 73 71 6c 69  ) is in the sqli
eef0: 74 65 5f 73 65 71 75 65 6e 63 65 2e 6d 61 69 6e  te_sequence.main
ef00: 20 66 69 65 6c 64 20 61 6e 64 20 74 68 65 20 6c   field and the l
ef10: 61 72 67 65 73 74 0a 5b 49 4e 54 45 47 45 52 20  argest.[INTEGER 
ef20: 50 52 49 4d 41 52 59 20 4b 45 59 5d 20 65 76 65  PRIMARY KEY] eve
ef30: 72 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20  r inserted into 
ef40: 74 68 61 74 20 74 61 62 6c 65 20 69 73 20 0a 69  that table is .i
ef50: 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73 65 71  n the sqlite_seq
ef60: 75 65 6e 63 65 2e 73 65 71 20 66 69 65 6c 64 2e  uence.seq field.
ef70: 29 5e 20 20 0a 5e 4e 65 77 20 61 75 74 6f 6d 61  )^  .^New automa
ef80: 74 69 63 61 6c 6c 79 20 67 65 6e 65 72 61 74 65  tically generate
ef90: 64 20 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72  d integer primar
efa0: 79 20 6b 65 79 73 20 66 6f 72 20 41 55 54 4f 49  y keys for AUTOI
efb0: 4e 43 52 45 4d 45 4e 54 0a 74 61 62 6c 65 73 20  NCREMENT.tables 
efc0: 61 72 65 20 67 75 61 72 61 6e 74 65 65 64 20 74  are guaranteed t
efd0: 6f 20 62 65 20 6c 61 72 67 65 72 20 74 68 61 6e  o be larger than
efe0: 20 74 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75   the sqlite_sequ
eff0: 65 6e 63 65 2e 73 65 71 20 66 69 65 6c 64 20 66  ence.seq field f
f000: 6f 72 0a 74 68 61 74 20 74 61 62 6c 65 2e 0a 5e  or.that table..^
f010: 28 49 66 20 74 68 65 20 73 71 6c 69 74 65 5f 73  (If the sqlite_s
f020: 65 71 75 65 6e 63 65 2e 73 65 71 20 66 69 65 6c  equence.seq fiel
f030: 64 20 6f 66 20 61 6e 20 41 55 54 4f 49 4e 43 52  d of an AUTOINCR
f040: 45 4d 45 4e 54 20 74 61 62 6c 65 20 69 73 20 61  EMENT table is a
f050: 6c 72 65 61 64 79 20 61 74 0a 74 68 65 20 6c 61  lready at.the la
f060: 72 67 65 73 74 20 69 6e 74 65 67 65 72 20 76 61  rgest integer va
f070: 6c 75 65 20 28 39 32 32 33 33 37 32 30 33 36 38  lue (92233720368
f080: 35 34 37 37 35 38 30 37 29 20 74 68 65 6e 20 61  54775807) then a
f090: 74 74 65 6d 70 74 73 20 74 6f 20 61 64 64 20 6e  ttempts to add n
f0a0: 65 77 0a 72 6f 77 73 20 74 6f 20 74 68 61 74 20  ew.rows to that 
f0b0: 74 61 62 6c 65 20 77 69 74 68 20 61 6e 20 61 75  table with an au
f0c0: 74 6f 6d 61 74 69 63 61 6c 6c 79 20 67 65 6e 65  tomatically gene
f0d0: 72 61 74 65 64 20 69 6e 74 65 67 65 72 20 70 72  rated integer pr
f0e0: 69 6d 61 72 79 20 77 69 6c 6c 20 66 61 69 6c 0a  imary will fail.
f0f0: 77 69 74 68 20 61 6e 20 5b 53 51 4c 49 54 45 5f  with an [SQLITE_
f100: 46 55 4c 4c 5d 20 65 72 72 6f 72 2e 29 5e 0a 5e  FULL] error.)^.^
f110: 54 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65  The sqlite_seque
f120: 6e 63 65 2e 73 65 71 20 66 69 65 6c 64 20 69 73  nce.seq field is
f130: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 75   automatically u
f140: 70 64 61 74 65 64 20 69 66 20 72 65 71 75 69 72  pdated if requir
f150: 65 64 20 77 68 65 6e 0a 6e 65 77 20 65 6e 74 72  ed when.new entr
f160: 69 65 73 20 61 72 65 20 69 6e 73 65 72 74 65 64  ies are inserted
f170: 20 74 6f 20 61 6e 20 41 55 54 4f 49 4e 43 52 45   to an AUTOINCRE
f180: 4d 45 4e 54 20 74 61 62 6c 65 2e 20 20 0a 5e 54  MENT table.  .^T
f190: 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e  he sqlite_sequen
f1a0: 63 65 20 72 6f 77 20 66 6f 72 20 61 6e 20 41 55  ce row for an AU
f1b0: 54 4f 49 4e 43 52 45 4d 45 4e 54 20 74 61 62 6c  TOINCREMENT tabl
f1c0: 65 20 69 73 20 61 75 74 6f 6d 61 74 69 63 61 6c  e is automatical
f1d0: 6c 79 20 64 65 6c 65 74 65 64 0a 77 68 65 6e 20  ly deleted.when 
f1e0: 74 68 65 20 74 61 62 6c 65 20 69 73 20 64 72 6f  the table is dro
f1f0: 70 70 65 64 2e 0a 5e 49 66 20 74 68 65 20 73 71  pped..^If the sq
f200: 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 20 72 6f  lite_sequence ro
f210: 77 20 66 6f 72 20 61 6e 20 41 55 54 4f 49 4e 43  w for an AUTOINC
f220: 52 45 4d 45 4e 54 20 74 61 62 6c 65 20 64 6f 65  REMENT table doe
f230: 73 20 6e 6f 74 20 65 78 69 73 74 20 77 68 65 6e  s not exist when
f240: 0a 74 68 65 20 41 55 54 4f 49 4e 43 52 45 4d 45  .the AUTOINCREME
f250: 4e 54 20 74 61 62 6c 65 20 69 73 20 75 70 64 61  NT table is upda
f260: 74 65 64 2c 20 74 68 65 6e 20 61 20 6e 65 77 20  ted, then a new 
f270: 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 20  sqlite_sequence 
f280: 72 6f 77 20 69 73 20 63 72 65 61 74 65 64 2e 0a  row is created..
f290: 5e 28 49 66 20 74 68 65 20 73 71 6c 69 74 65 5f  ^(If the sqlite_
f2a0: 73 65 71 75 65 6e 63 65 2e 73 65 71 20 76 61 6c  sequence.seq val
f2b0: 75 65 20 66 6f 72 20 61 6e 20 41 55 54 4f 49 4e  ue for an AUTOIN
f2c0: 43 52 45 4d 45 4e 54 20 74 61 62 6c 65 20 69 73  CREMENT table is
f2d0: 20 6d 61 6e 75 61 6c 6c 79 20 0a 73 65 74 20 74   manually .set t
f2e0: 6f 20 73 6f 6d 65 74 68 69 6e 67 20 6f 74 68 65  o something othe
f2f0: 72 20 74 68 61 6e 20 61 6e 20 69 6e 74 65 67 65  r than an intege
f300: 72 20 61 6e 64 20 74 68 65 72 65 20 69 73 20 61  r and there is a
f310: 20 73 75 62 73 65 71 75 65 6e 74 20 61 74 74 65   subsequent atte
f320: 6d 70 74 20 74 6f 0a 69 6e 73 65 72 74 20 74 68  mpt to.insert th
f330: 65 20 6f 72 20 75 70 64 61 74 65 20 74 68 65 20  e or update the 
f340: 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 74 61  AUTOINCREMENT ta
f350: 62 6c 65 2c 20 74 68 65 6e 20 74 68 65 20 62 65  ble, then the be
f360: 68 61 76 69 6f 72 20 69 73 20 75 6e 64 65 66 69  havior is undefi
f370: 6e 65 64 2e 29 5e 0a 0a 3c 70 3e 5e 41 70 70 6c  ned.)^..<p>^Appl
f380: 69 63 61 74 69 6f 6e 20 63 6f 64 65 20 69 73 20  ication code is 
f390: 61 6c 6c 6f 77 65 64 20 74 6f 20 6d 6f 64 69 66  allowed to modif
f3a0: 79 20 74 68 65 20 73 71 6c 69 74 65 5f 73 65 71  y the sqlite_seq
f3b0: 75 65 6e 63 65 20 74 61 62 6c 65 2c 20 74 6f 20  uence table, to 
f3c0: 61 64 64 0a 6e 65 77 20 72 6f 77 73 2c 20 74 6f  add.new rows, to
f3d0: 20 64 65 6c 65 74 65 20 72 6f 77 73 2c 20 6f 72   delete rows, or
f3e0: 20 74 6f 20 6d 6f 64 69 66 79 20 65 78 69 73 74   to modify exist
f3f0: 69 6e 67 20 72 6f 77 73 2e 20 20 5e 48 6f 77 65  ing rows.  ^Howe
f400: 76 65 72 2c 20 61 70 70 6c 69 63 61 74 69 6f 6e  ver, application
f410: 0a 63 6f 64 65 20 63 61 6e 6e 6f 74 20 63 72 65  .code cannot cre
f420: 61 74 65 20 74 68 65 20 73 71 6c 69 74 65 5f 73  ate the sqlite_s
f430: 65 71 75 65 6e 63 65 20 74 61 62 6c 65 20 69 66  equence table if
f440: 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 61 6c 72   it does not alr
f450: 65 61 64 79 20 65 78 69 73 74 2e 0a 5e 41 70 70  eady exist..^App
f460: 6c 69 63 61 74 69 6f 6e 20 63 6f 64 65 20 63 61  lication code ca
f470: 6e 20 64 65 6c 65 74 65 20 61 6c 6c 20 65 6e 74  n delete all ent
f480: 72 69 65 73 20 66 72 6f 6d 20 74 68 65 20 73 71  ries from the sq
f490: 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 20 74 61  lite_sequence ta
f4a0: 62 6c 65 2c 0a 62 75 74 20 61 70 70 6c 69 63 61  ble,.but applica
f4b0: 74 69 6f 6e 20 63 6f 64 65 20 63 61 6e 6e 6f 74  tion code cannot
f4c0: 20 64 72 6f 70 20 74 68 65 20 73 71 6c 69 74 65   drop the sqlite
f4d0: 5f 73 65 71 75 65 6e 63 65 20 74 61 62 6c 65 2e  _sequence table.
f4e0: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
f4f0: 6e 74 20 73 74 61 74 31 74 61 62 20 7b 73 71 6c  nt stat1tab {sql
f500: 69 74 65 5f 73 74 61 74 31 7d 20 53 51 4c 49 54  ite_stat1} SQLIT
f510: 45 5f 53 54 41 54 31 20 3c 2f 74 63 6c 3e 0a 3c  E_STAT1 </tcl>.<
f520: 68 33 3e 54 68 65 20 73 71 6c 69 74 65 5f 73 74  h3>The sqlite_st
f530: 61 74 31 20 74 61 62 6c 65 3c 2f 68 33 3e 0a 0a  at1 table</h3>..
f540: 3c 70 3e 5e 54 68 65 20 73 71 6c 69 74 65 5f 73  <p>^The sqlite_s
f550: 74 61 74 31 20 69 73 20 61 6e 20 69 6e 74 65 72  tat1 is an inter
f560: 6e 61 6c 20 74 61 62 6c 65 20 63 72 65 61 74 65  nal table create
f570: 64 20 62 79 20 74 68 65 20 5b 41 4e 41 4c 59 5a  d by the [ANALYZ
f580: 45 5d 20 63 6f 6d 6d 61 6e 64 0a 61 6e 64 20 75  E] command.and u
f590: 73 65 64 20 74 6f 20 68 6f 6c 64 20 73 75 70 70  sed to hold supp
f5a0: 6c 65 6d 65 6e 74 61 6c 20 69 6e 66 6f 72 6d 61  lemental informa
f5b0: 74 69 6f 6e 20 61 62 6f 75 74 20 74 61 62 6c 65  tion about table
f5c0: 73 20 61 6e 64 20 69 6e 64 65 78 65 73 20 74 68  s and indexes th
f5d0: 61 74 20 74 68 65 0a 71 75 65 72 79 20 70 6c 61  at the.query pla
f5e0: 6e 6e 65 72 20 63 61 6e 20 75 73 65 20 74 6f 20  nner can use to 
f5f0: 68 65 6c 70 20 69 74 20 66 69 6e 64 20 62 65 74  help it find bet
f600: 74 65 72 20 77 61 79 73 20 6f 66 20 70 65 72 66  ter ways of perf
f610: 6f 72 6d 69 6e 67 20 71 75 65 72 69 65 73 2e 0a  orming queries..
f620: 5e 41 70 70 6c 69 63 61 74 69 6f 6e 73 20 63 61  ^Applications ca
f630: 6e 20 75 70 64 61 74 65 2c 20 64 65 6c 65 74 65  n update, delete
f640: 20 66 72 6f 6d 2c 20 69 6e 73 65 72 74 20 69 6e   from, insert in
f650: 74 6f 20 6f 72 20 64 72 6f 70 20 74 68 65 20 73  to or drop the s
f660: 71 6c 69 74 65 5f 73 74 61 74 31 0a 74 61 62 6c  qlite_stat1.tabl
f670: 65 2c 20 62 75 74 20 6d 61 79 20 6e 6f 74 20 63  e, but may not c
f680: 72 65 61 74 65 20 6f 72 20 61 6c 74 65 72 20 74  reate or alter t
f690: 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20  he sqlite_stat1 
f6a0: 74 61 62 6c 65 2e 0a 5e 28 54 68 65 20 73 63 68  table..^(The sch
f6b0: 65 6d 61 20 6f 66 20 74 68 65 20 73 71 6c 69 74  ema of the sqlit
f6c0: 65 5f 73 74 61 74 31 20 74 61 62 6c 65 20 69 73  e_stat1 table is
f6d0: 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 62   as follows:..<b
f6e0: 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a  lockquote><pre>.
f6f0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 71 6c  CREATE TABLE sql
f700: 69 74 65 5f 73 74 61 74 31 28 74 62 6c 2c 69 64  ite_stat1(tbl,id
f710: 78 2c 73 74 61 74 29 3b 0a 3c 2f 70 72 65 3e 3c  x,stat);.</pre><
f720: 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a  /blockquote>)^..
f730: 3c 70 3e 20 5e 28 54 68 65 72 65 20 69 73 20 6e  <p> ^(There is n
f740: 6f 72 6d 61 6c 6c 79 20 6f 6e 65 20 72 6f 77 20  ormally one row 
f750: 70 65 72 20 69 6e 64 65 78 2c 20 77 69 74 68 20  per index, with 
f760: 74 68 65 20 69 6e 64 65 78 20 69 64 65 6e 74 69  the index identi
f770: 66 69 65 64 20 62 79 20 74 68 65 0a 6e 61 6d 65  fied by the.name
f780: 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73   in the sqlite_s
f790: 74 61 74 31 2e 69 64 78 20 63 6f 6c 75 6d 6e 2e  tat1.idx column.
f7a0: 29 5e 20 20 5e 28 54 68 65 20 73 71 6c 69 74 65  )^  ^(The sqlite
f7b0: 5f 73 74 61 74 31 2e 74 62 6c 20 63 6f 6c 75 6d  _stat1.tbl colum
f7c0: 6e 20 69 73 0a 74 68 65 20 6e 61 6d 65 20 6f 66  n is.the name of
f7d0: 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 77 68   the table to wh
f7e0: 69 63 68 20 74 68 65 20 69 6e 64 65 78 20 62 65  ich the index be
f7f0: 6c 6f 6e 67 73 2e 29 5e 20 20 5e 28 49 6e 20 65  longs.)^  ^(In e
f800: 61 63 68 20 73 75 63 68 20 72 6f 77 2c 20 0a 74  ach such row, .t
f810: 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 2e 73  he sqlite_stat.s
f820: 74 61 74 20 63 6f 6c 75 6d 6e 20 77 69 6c 6c 20  tat column will 
f830: 62 65 0a 61 20 73 74 72 69 6e 67 20 63 6f 6e 73  be.a string cons
f840: 69 73 74 69 6e 67 20 6f 66 20 61 20 6c 69 73 74  isting of a list
f850: 20 6f 66 20 69 6e 74 65 67 65 72 73 20 66 6f 6c   of integers fol
f860: 6c 6f 77 65 64 20 62 79 20 7a 65 72 6f 20 6f 72  lowed by zero or
f870: 20 6d 6f 72 65 20 0a 61 72 67 75 6d 65 6e 74 73   more .arguments
f880: 2e 29 5e 20 20 5e 54 68 65 20 66 69 72 73 74 20  .)^  ^The first 
f890: 69 6e 74 65 67 65 72 20 69 6e 20 74 68 69 73 0a  integer in this.
f8a0: 6c 69 73 74 20 69 73 20 74 68 65 20 61 70 70 72  list is the appr
f8b0: 6f 78 69 6d 61 74 65 20 6e 75 6d 62 65 72 20 6f  oximate number o
f8c0: 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20 69 6e  f rows in the in
f8d0: 64 65 78 2e 20 20 28 54 68 65 20 6e 75 6d 62 65  dex.  (The numbe
f8e0: 72 20 6f 66 0a 72 6f 77 73 20 69 6e 20 74 68 65  r of.rows in the
f8f0: 20 69 6e 64 65 78 20 69 73 20 74 68 65 20 73 61   index is the sa
f900: 6d 65 20 61 73 20 74 68 65 20 6e 75 6d 62 65 72  me as the number
f910: 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20   of rows in the 
f920: 74 61 62 6c 65 2c 0a 65 78 63 65 70 74 20 66 6f  table,.except fo
f930: 72 20 5b 70 61 72 74 69 61 6c 20 69 6e 64 65 78  r [partial index
f940: 65 73 5d 2e 29 0a 5e 54 68 65 20 73 65 63 6f 6e  es].).^The secon
f950: 64 20 69 6e 74 65 67 65 72 20 69 73 20 74 68 65  d integer is the
f960: 20 61 70 70 72 6f 78 69 6d 61 74 65 20 6e 75 6d   approximate num
f970: 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74  ber of rows in t
f980: 68 65 20 69 6e 64 65 78 0a 74 68 61 74 20 68 61  he index.that ha
f990: 76 65 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75  ve the same valu
f9a0: 65 20 69 6e 20 74 68 65 20 66 69 72 73 74 20 63  e in the first c
f9b0: 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 69 6e 64  olumn of the ind
f9c0: 65 78 2e 20 20 5e 54 68 65 20 74 68 69 72 64 20  ex.  ^The third 
f9d0: 0a 69 6e 74 65 67 65 72 20 69 73 20 74 68 65 20  .integer is the 
f9e0: 6e 75 6d 62 65 72 20 6e 75 6d 62 65 72 20 6f 66  number number of
f9f0: 20 72 6f 77 73 20 69 6e 20 74 68 65 20 69 6e 64   rows in the ind
fa00: 65 78 20 74 68 61 74 20 68 61 76 65 20 0a 74 68  ex that have .th
fa10: 65 20 73 61 6d 65 20 76 61 6c 75 65 20 66 6f 72  e same value for
fa20: 20 74 68 65 20 66 69 72 73 74 20 74 77 6f 20 63   the first two c
fa30: 6f 6c 75 6d 6e 73 2e 20 20 5e 54 68 65 20 4e 2d  olumns.  ^The N-
fa40: 74 68 20 69 6e 74 65 67 65 72 20 28 66 6f 72 20  th integer (for 
fa50: 4e 3e 31 29 20 0a 69 73 20 74 68 65 20 65 73 74  N>1) .is the est
fa60: 69 6d 61 74 65 64 20 61 76 65 72 61 67 65 20 6e  imated average n
fa70: 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e  umber of rows in
fa80: 20 0a 74 68 65 20 69 6e 64 65 78 20 77 68 69 63   .the index whic
fa90: 68 20 68 61 76 65 20 74 68 65 20 73 61 6d 65 20  h have the same 
faa0: 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20 66 69  value for the fi
fab0: 72 73 74 20 4e 2d 31 20 63 6f 6c 75 6d 6e 73 2e  rst N-1 columns.
fac0: 20 20 5e 46 6f 72 0a 61 20 4b 2d 63 6f 6c 75 6d    ^For.a K-colum
fad0: 6e 20 69 6e 64 65 78 2c 20 74 68 65 72 65 20 77  n index, there w
fae0: 69 6c 6c 20 62 65 20 4b 2b 31 20 69 6e 74 65 67  ill be K+1 integ
faf0: 65 72 73 20 69 6e 20 74 68 65 20 73 74 61 74 20  ers in the stat 
fb00: 63 6f 6c 75 6d 6e 2e 20 20 5e 49 66 0a 74 68 65  column.  ^If.the
fb10: 20 69 6e 64 65 78 20 69 73 20 75 6e 69 71 75 65   index is unique
fb20: 2c 20 74 68 65 6e 20 74 68 65 20 6c 61 73 74 20  , then the last 
fb30: 69 6e 74 65 67 65 72 20 77 69 6c 6c 20 62 65 20  integer will be 
fb40: 31 2e 0a 0a 3c 70 3e 5e 54 68 65 20 6c 69 73 74  1...<p>^The list
fb50: 20 6f 66 20 69 6e 74 65 67 65 72 73 20 69 6e 20   of integers in 
fb60: 74 68 65 20 73 74 61 74 20 63 6f 6c 75 6d 6e 20  the stat column 
fb70: 63 61 6e 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 62  can optionally b
fb80: 65 20 66 6f 6c 6c 6f 77 65 64 0a 62 79 20 61 72  e followed.by ar
fb90: 67 75 6d 65 6e 74 73 2c 20 65 61 63 68 20 6f 66  guments, each of
fba0: 20 77 68 69 63 68 20 69 73 20 61 20 73 65 71 75   which is a sequ
fbb0: 65 6e 63 65 20 6f 66 20 6e 6f 6e 2d 73 70 61 63  ence of non-spac
fbc0: 65 20 63 68 61 72 61 63 74 65 72 73 2e 0a 5e 41  e characters..^A
fbd0: 6c 6c 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65  ll arguments are
fbe0: 20 70 72 65 63 65 64 65 64 20 62 79 20 61 20 73   preceded by a s
fbf0: 69 6e 67 6c 65 20 73 70 61 63 65 2e 0a 5e 55 6e  ingle space..^Un
fc00: 72 65 63 6f 67 6e 69 7a 65 64 20 61 72 67 75 6d  recognized argum
fc10: 65 6e 74 73 20 61 72 65 20 73 69 6c 65 6e 74 6c  ents are silentl
fc20: 79 20 69 67 6e 6f 72 65 64 2e 0a 0a 3c 70 3e 5e  y ignored...<p>^
fc30: 49 66 20 74 68 65 20 22 75 6e 6f 72 64 65 72 65  If the "unordere
fc40: 64 22 20 61 72 67 75 6d 65 6e 74 20 69 73 20 70  d" argument is p
fc50: 72 65 73 65 6e 74 2c 20 74 68 65 6e 20 74 68 65  resent, then the
fc60: 20 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 61   query planner a
fc70: 73 73 75 6d 65 73 0a 74 68 61 74 20 74 68 65 20  ssumes.that the 
fc80: 69 6e 64 65 78 20 69 73 20 75 6e 6f 72 64 65 72  index is unorder
fc90: 65 64 20 61 6e 64 20 77 69 6c 6c 20 6e 6f 74 20  ed and will not 
fca0: 75 73 65 20 74 68 65 20 69 6e 64 65 78 20 66 6f  use the index fo
fcb0: 72 20 61 20 72 61 6e 67 65 20 71 75 65 72 79 0a  r a range query.
fcc0: 6f 72 20 66 6f 72 20 73 6f 72 74 69 6e 67 2e 0a  or for sorting..
fcd0: 0a 3c 70 3e 5e 54 68 65 20 22 73 7a 3d 4e 4e 4e  .<p>^The "sz=NNN
fce0: 22 20 61 72 67 75 6d 65 6e 74 20 28 77 68 65 72  " argument (wher
fcf0: 65 20 4e 4e 4e 20 72 65 70 72 65 73 65 6e 74 73  e NNN represents
fd00: 20 61 20 73 65 71 75 65 6e 63 65 20 6f 66 20 31   a sequence of 1
fd10: 20 6f 72 20 6d 6f 72 65 20 64 69 67 69 74 73 29   or more digits)
fd20: 0a 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20  .means that the 
fd30: 61 76 65 72 61 67 65 20 72 6f 77 20 73 69 7a 65  average row size
fd40: 20 6f 76 65 72 20 61 6c 6c 20 72 65 63 6f 72 64   over all record
fd50: 73 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 6f  s of the table o
fd60: 72 0a 69 6e 64 65 78 20 69 73 20 4e 4e 4e 20 62  r.index is NNN b
fd70: 79 74 65 73 20 70 65 72 20 72 6f 77 2e 20 20 5e  ytes per row.  ^
fd80: 54 68 65 20 53 51 4c 69 74 65 20 71 75 65 72 79  The SQLite query
fd90: 20 70 6c 61 6e 6e 65 72 20 6d 69 67 68 74 20 75   planner might u
fda0: 73 65 20 74 68 65 0a 65 73 74 69 6d 61 74 65 64  se the.estimated
fdb0: 20 72 6f 77 20 73 69 7a 65 20 69 6e 66 6f 72 6d   row size inform
fdc0: 61 74 69 6f 6e 20 70 72 6f 76 69 64 65 64 20 62  ation provided b
fdd0: 79 20 74 68 65 20 22 73 7a 3d 4e 4e 4e 22 20 74  y the "sz=NNN" t
fde0: 6f 6b 65 6e 0a 74 6f 20 68 65 6c 70 20 69 74 20  oken.to help it 
fdf0: 63 68 6f 6f 73 65 20 73 6d 61 6c 6c 65 72 20 74  choose smaller t
fe00: 61 62 6c 65 73 20 61 6e 64 20 69 6e 64 65 78 65  ables and indexe
fe10: 73 20 74 68 61 74 20 72 65 71 75 69 72 65 20 6c  s that require l
fe20: 65 73 73 20 64 69 73 6b 20 49 2f 4f 2e 0a 0a 3c  ess disk I/O...<
fe30: 70 3e 5e 28 54 68 65 20 70 72 65 73 65 6e 63 65  p>^(The presence
fe40: 20 6f 66 20 74 68 65 20 22 6e 6f 73 6b 69 70 73   of the "noskips
fe50: 63 61 6e 22 20 74 6f 6b 65 6e 20 6f 6e 20 74 68  can" token on th
fe60: 65 20 73 71 6c 69 74 65 5f 73 74 61 74 31 2e 73  e sqlite_stat1.s
fe70: 74 61 74 20 66 69 65 6c 64 0a 6f 66 20 61 6e 20  tat field.of an 
fe80: 69 6e 64 65 78 20 70 72 65 76 65 6e 74 73 20 74  index prevents t
fe90: 68 61 74 20 69 6e 64 65 78 20 66 72 6f 6d 20 62  hat index from b
fea0: 65 69 6e 67 20 75 73 65 64 20 77 69 74 68 20 74  eing used with t
feb0: 68 65 0a 5b 73 6b 69 70 2d 73 63 61 6e 20 6f 70  he.[skip-scan op
fec0: 74 69 6d 69 7a 61 74 69 6f 6e 5d 2e 29 5e 0a 0a  timization].)^..
fed0: 3c 70 3e 4e 65 77 20 74 65 78 74 20 74 6f 6b 65  <p>New text toke
fee0: 6e 73 20 6d 61 79 20 62 65 20 61 64 64 65 64 20  ns may be added 
fef0: 74 6f 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  to the end of th
ff00: 65 20 73 74 61 74 20 63 6f 6c 75 6d 6e 20 69 6e  e stat column in
ff10: 20 66 75 74 75 72 65 0a 65 6e 68 61 6e 63 65 6d   future.enhancem
ff20: 65 6e 74 73 20 74 6f 20 53 51 4c 69 74 65 2e 20  ents to SQLite. 
ff30: 20 46 6f 72 20 63 6f 6d 70 61 74 69 62 69 6c 69   For compatibili
ff40: 74 79 2c 20 75 6e 72 65 63 6f 67 6e 69 7a 65 64  ty, unrecognized
ff50: 20 74 6f 6b 65 6e 73 20 61 74 20 74 68 65 20 65   tokens at the e
ff60: 6e 64 0a 6f 66 20 74 68 65 20 73 74 61 74 20 63  nd.of the stat c
ff70: 6f 6c 75 6d 6e 20 61 72 65 20 73 69 6c 65 6e 74  olumn are silent
ff80: 6c 79 20 69 67 6e 6f 72 65 64 2e 0a 0a 3c 70 3e  ly ignored...<p>
ff90: 5e 28 49 66 20 74 68 65 20 73 71 6c 69 74 65 5f  ^(If the sqlite_
ffa0: 73 74 61 74 31 2e 69 64 78 20 63 6f 6c 75 6d 6e  stat1.idx column
ffb0: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74   is NULL, then t
ffc0: 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 31 2e  he sqlite_stat1.
ffd0: 73 74 61 74 0a 63 6f 6c 75 6d 6e 20 63 6f 6e 74  stat.column cont
ffe0: 61 69 6e 73 20 61 20 73 69 6e 67 6c 65 20 69 6e  ains a single in
fff0: 74 65 67 65 72 20 77 68 69 63 68 20 69 73 20 74  teger which is t
10000 68 65 20 61 70 70 72 6f 78 69 6d 61 74 65 20 6e  he approximate n
10010 75 6d 62 65 72 20 6f 66 0a 72 6f 77 73 20 69 6e  umber of.rows in
10020 20 74 68 65 20 74 61 62 6c 65 20 69 64 65 6e 74   the table ident
10030 69 66 69 65 64 20 62 79 20 73 71 6c 69 74 65 5f  ified by sqlite_
10040 73 74 61 74 31 2e 74 62 6c 2e 29 5e 0a 5e 28 49  stat1.tbl.)^.^(I
10050 66 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61  f the sqlite_sta
10060 74 31 2e 69 64 78 20 63 6f 6c 75 6d 6e 20 69 73  t1.idx column is
10070 20 74 68 65 20 73 61 6d 65 20 61 73 20 74 68 65   the same as the
10080 20 73 71 6c 69 74 65 5f 73 74 61 74 31 2e 74 62   sqlite_stat1.tb
10090 6c 0a 63 6f 6c 75 6d 6e 2c 20 74 68 65 6e 20 74  l.column, then t
100a0 68 65 20 74 61 62 6c 65 20 69 73 20 61 20 5b 57  he table is a [W
100b0 49 54 48 4f 55 54 20 52 4f 57 49 44 5d 20 74 61  ITHOUT ROWID] ta
100c0 62 6c 65 20 61 6e 64 20 74 68 65 20 73 71 6c 69  ble and the sqli
100d0 74 65 5f 73 74 61 74 31 2e 73 74 61 74 0a 66 69  te_stat1.stat.fi
100e0 65 6c 64 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66  eld contains inf
100f0 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74  ormation about t
10100 68 65 20 69 6e 64 65 78 20 62 74 72 65 65 20 74  he index btree t
10110 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74  hat implements t
10120 68 65 0a 57 49 54 48 4f 55 54 20 52 4f 57 49 44  he.WITHOUT ROWID
10130 20 74 61 62 6c 65 2e 29 5e 0a 0a 3c 74 63 6c 3e   table.)^..<tcl>
10140 68 64 5f 66 72 61 67 6d 65 6e 74 20 73 74 61 74  hd_fragment stat
10150 32 74 61 62 20 7b 73 71 6c 69 74 65 5f 73 74 61  2tab {sqlite_sta
10160 74 32 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68  t2}</tcl>.<h3>Th
10170 65 20 73 71 6c 69 74 65 5f 73 74 61 74 32 20 74  e sqlite_stat2 t
10180 61 62 6c 65 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68  able</h3>..<p>Th
10190 65 20 73 71 6c 69 74 65 5f 73 74 61 74 32 20 69  e sqlite_stat2 i
101a0 73 20 6f 6e 6c 79 20 63 72 65 61 74 65 64 20 61  s only created a
101b0 6e 64 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20  nd is only used 
101c0 69 66 20 53 51 4c 69 74 65 20 69 73 20 63 6f 6d  if SQLite is com
101d0 70 69 6c 65 64 0a 77 69 74 68 20 53 51 4c 49 54  piled.with SQLIT
101e0 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 32 20 61  E_ENABLE_STAT2 a
101f0 6e 64 20 69 66 20 74 68 65 20 53 51 4c 69 74 65  nd if the SQLite
10200 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20   version number 
10210 69 73 20 62 65 74 77 65 65 6e 0a 33 2e 36 2e 31  is between.3.6.1
10220 38 20 61 6e 64 20 33 2e 37 2e 38 2e 20 20 54 68  8 and 3.7.8.  Th
10230 65 20 73 71 6c 69 74 65 5f 73 74 61 74 32 20 74  e sqlite_stat2 t
10240 61 62 6c 65 20 69 73 20 6e 65 69 74 68 65 72 20  able is neither 
10250 72 65 61 64 20 6e 6f 72 20 77 72 69 74 74 65 6e  read nor written
10260 20 62 79 20 61 6e 79 0a 76 65 72 73 69 6f 6e 20   by any.version 
10270 6f 66 20 53 51 4c 69 74 65 20 62 65 66 6f 72 65  of SQLite before
10280 20 33 2e 36 2e 31 38 20 6e 6f 72 20 61 66 74 65   3.6.18 nor afte
10290 72 20 33 2e 37 2e 38 2e 0a 54 68 65 20 73 71 6c  r 3.7.8..The sql
102a0 69 74 65 5f 73 74 61 74 32 20 74 61 62 6c 65 20  ite_stat2 table 
102b0 63 6f 6e 74 61 69 6e 73 20 61 64 64 69 74 69 6f  contains additio
102c0 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a  nal information.
102d0 61 62 6f 75 74 20 74 68 65 20 64 69 73 74 72 69  about the distri
102e0 62 75 74 69 6f 6e 20 6f 66 20 6b 65 79 73 20 77  bution of keys w
102f0 69 74 68 69 6e 20 61 6e 20 69 6e 64 65 78 2e 0a  ithin an index..
10300 54 68 65 20 73 63 68 65 6d 61 20 6f 66 20 74 68  The schema of th
10310 65 20 73 71 6c 69 74 65 5f 73 74 61 74 32 20 74  e sqlite_stat2 t
10320 61 62 6c 65 20 69 73 20 61 73 20 66 6f 6c 6c 6f  able is as follo
10330 77 73 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  ws:..<blockquote
10340 3e 3c 70 72 65 3e 0a 43 52 45 41 54 45 20 54 41  ><pre>.CREATE TA
10350 42 4c 45 20 73 71 6c 69 74 65 5f 73 74 61 74 32  BLE sqlite_stat2
10360 28 74 62 6c 2c 69 64 78 2c 73 61 6d 70 6c 65 6e  (tbl,idx,samplen
10370 6f 2c 73 61 6d 70 6c 65 29 3b 0a 3c 2f 70 72 65  o,sample);.</pre
10380 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a  ></blockquote>..
10390 3c 70 3e 54 68 65 20 73 71 6c 69 74 65 5f 73 74  <p>The sqlite_st
103a0 61 74 32 2e 69 64 78 20 63 6f 6c 75 6d 6e 20 61  at2.idx column a
103b0 6e 64 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74  nd the sqlite_st
103c0 61 74 32 2e 74 62 6c 20 63 6f 6c 75 6d 6e 20 69  at2.tbl column i
103d0 6e 20 65 61 63 68 20 0a 72 6f 77 20 6f 66 20 74  n each .row of t
103e0 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 32 20  he sqlite_stat2 
103f0 74 61 62 6c 65 20 69 64 65 6e 74 69 66 79 20 61  table identify a
10400 6e 20 69 6e 64 65 78 20 64 65 73 63 72 69 62 65  n index describe
10410 64 20 62 79 20 74 68 61 74 20 72 6f 77 2e 0a 54  d by that row..T
10420 68 65 72 65 20 61 72 65 20 75 73 75 61 6c 6c 79  here are usually
10430 20 31 30 20 72 6f 77 73 20 69 6e 20 74 68 65 20   10 rows in the 
10440 73 71 6c 69 74 65 5f 73 74 61 74 32 0a 74 61 62  sqlite_stat2.tab
10450 6c 65 20 66 6f 72 20 65 61 63 68 20 69 6e 64 65  le for each inde
10460 78 2e 0a 0a 3c 70 3e 54 68 65 20 73 71 6c 69 74  x...<p>The sqlit
10470 65 5f 73 74 61 74 32 20 65 6e 74 72 69 65 73 20  e_stat2 entries 
10480 66 6f 72 20 61 6e 20 69 6e 64 65 78 20 74 68 61  for an index tha
10490 74 20 68 61 76 65 20 73 71 6c 69 74 65 5f 73 74  t have sqlite_st
104a0 61 74 32 2e 73 61 6d 70 6c 65 6e 6f 0a 62 65 74  at2.sampleno.bet
104b0 77 65 65 6e 20 30 20 61 6e 64 20 39 20 69 6e 63  ween 0 and 9 inc
104c0 6c 75 73 69 76 65 20 61 72 65 20 73 61 6d 70 6c  lusive are sampl
104d0 65 73 20 6f 66 20 74 68 65 20 6c 65 66 74 2d 6d  es of the left-m
104e0 6f 73 74 20 6b 65 79 20 76 61 6c 75 65 20 69 6e  ost key value in
104f0 20 74 68 65 0a 69 6e 64 65 78 20 74 61 6b 65 6e   the.index taken
10500 20 61 74 20 65 76 65 6e 6c 79 20 73 70 61 63 65   at evenly space
10510 64 20 70 6f 69 6e 74 73 20 61 6c 6f 6e 67 20 74  d points along t
10520 68 65 20 69 6e 64 65 78 2e 0a 4c 65 74 20 43 20  he index..Let C 
10530 62 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  be the number of
10540 20 72 6f 77 73 20 69 6e 20 74 68 65 20 69 6e 64   rows in the ind
10550 65 78 2e 0a 54 68 65 6e 20 74 68 65 20 73 61 6d  ex..Then the sam
10560 70 6c 65 64 20 72 6f 77 73 20 61 72 65 20 67 69  pled rows are gi
10570 76 65 6e 20 62 79 0a 0a 3c 62 6c 6f 63 6b 71 75  ven by..<blockqu
10580 6f 74 65 3e 0a 20 20 20 20 20 72 6f 77 6e 75 6d  ote>.     rownum
10590 62 65 72 20 3d 20 28 69 2a 43 2a 32 20 2b 20 43  ber = (i*C*2 + C
105a0 29 2f 32 30 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74  )/20.</blockquot
105b0 65 3e 0a 0a 3c 70 3e 54 68 65 20 76 61 72 69 61  e>..<p>The varia
105c0 62 6c 65 20 69 20 69 6e 20 74 68 65 20 70 72 65  ble i in the pre
105d0 76 69 6f 75 73 20 65 78 70 72 65 73 73 69 6f 6e  vious expression
105e0 20 76 61 72 69 65 73 20 62 65 74 77 65 65 6e 20   varies between 
105f0 30 20 61 6e 64 20 39 2e 0a 43 6f 6e 63 65 70 74  0 and 9..Concept
10600 75 61 6c 6c 79 2c 20 74 68 65 20 69 6e 64 65 78  ually, the index
10610 20 73 70 61 63 65 20 69 73 20 64 69 76 69 64 65   space is divide
10620 64 20 69 6e 74 6f 0a 31 30 20 75 6e 69 66 6f 72  d into.10 unifor
10630 6d 20 62 75 63 6b 65 74 73 20 61 6e 64 20 74 68  m buckets and th
10640 65 20 73 61 6d 70 6c 65 73 20 61 72 65 20 74 68  e samples are th
10650 65 20 6d 69 64 64 6c 65 20 72 6f 77 20 66 72 6f  e middle row fro
10660 6d 20 65 61 63 68 20 62 75 63 6b 65 74 2e 0a 0a  m each bucket...
10670 3c 70 3e 54 68 65 20 66 6f 72 6d 61 74 20 66 6f  <p>The format fo
10680 72 20 73 71 6c 69 74 65 5f 73 74 61 74 32 20 69  r sqlite_stat2 i
10690 73 20 72 65 63 6f 72 64 65 64 20 68 65 72 65 20  s recorded here 
106a0 66 6f 72 20 6c 65 67 61 63 79 20 72 65 66 65 72  for legacy refer
106b0 65 6e 63 65 2e 20 20 0a 52 65 63 65 6e 74 20 76  ence.  .Recent v
106c0 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74  ersions of SQLit
106d0 65 20 6e 6f 20 6c 6f 6e 67 65 72 20 73 75 70 70  e no longer supp
106e0 6f 72 74 20 73 71 6c 69 74 65 5f 73 74 61 74 32  ort sqlite_stat2
106f0 20 61 6e 64 20 74 68 65 0a 73 71 6c 69 74 65 5f   and the.sqlite_
10700 73 74 61 74 32 20 74 61 62 6c 65 2c 20 69 66 20  stat2 table, if 
10710 69 73 20 65 78 69 73 74 73 2c 20 69 73 20 73 69  is exists, is si
10720 6d 70 6c 79 20 69 67 6e 6f 72 65 64 2e 0a 0a 3c  mply ignored...<
10730 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
10740 73 74 61 74 33 74 61 62 20 7b 73 71 6c 69 74 65  stat3tab {sqlite
10750 5f 73 74 61 74 33 7d 20 53 51 4c 49 54 45 5f 53  _stat3} SQLITE_S
10760 54 41 54 33 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54  TAT3</tcl>.<h3>T
10770 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20  he sqlite_stat3 
10780 74 61 62 6c 65 3c 2f 68 33 3e 0a 0a 3c 70 3e 54  table</h3>..<p>T
10790 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20  he sqlite_stat3 
107a0 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 69 66 20  is only used if 
107b0 53 51 4c 69 74 65 20 69 73 20 63 6f 6d 70 69 6c  SQLite is compil
107c0 65 64 0a 77 69 74 68 20 5b 53 51 4c 49 54 45 5f  ed.with [SQLITE_
107d0 45 4e 41 42 4c 45 5f 53 54 41 54 33 5d 20 6f 72  ENABLE_STAT3] or
107e0 20 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f   [SQLITE_ENABLE_
107f0 53 54 41 54 34 5d 0a 61 6e 64 20 69 66 20 74 68  STAT4].and if th
10800 65 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e  e SQLite version
10810 20 6e 75 6d 62 65 72 20 69 73 20 33 2e 37 2e 39   number is 3.7.9
10820 20 6f 72 20 67 72 65 61 74 65 72 2e 0a 54 68 65   or greater..The
10830 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20 74 61   sqlite_stat3 ta
10840 62 6c 65 20 69 73 20 6e 65 69 74 68 65 72 20 72  ble is neither r
10850 65 61 64 20 6e 6f 72 20 77 72 69 74 74 65 6e 20  ead nor written 
10860 62 79 20 61 6e 79 0a 76 65 72 73 69 6f 6e 20 6f  by any.version o
10870 66 20 53 51 4c 69 74 65 20 62 65 66 6f 72 65 20  f SQLite before 
10880 33 2e 37 2e 39 2e 0a 49 66 20 74 68 65 20 5b 53  3.7.9..If the [S
10890 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
108a0 54 34 5d 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  T4] compile-time
108b0 20 6f 70 74 69 6f 6e 20 69 73 20 75 73 65 64 20   option is used 
108c0 61 6e 64 20 74 68 65 0a 53 51 4c 69 74 65 20 76  and the.SQLite v
108d0 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 69 73  ersion number is
108e0 20 33 2e 38 2e 31 20 6f 72 20 67 72 65 61 74 65   3.8.1 or greate
108f0 72 2c 20 74 68 65 6e 20 73 71 6c 69 74 65 5f 73  r, then sqlite_s
10900 74 61 74 33 20 6d 69 67 68 74 0a 62 65 20 72 65  tat3 might.be re
10910 61 64 20 62 75 74 20 6e 6f 74 20 77 72 69 74 74  ad but not writt
10920 65 6e 2e 0a 54 68 65 20 73 71 6c 69 74 65 5f 73  en..The sqlite_s
10930 74 61 74 33 20 74 61 62 6c 65 20 63 6f 6e 74 61  tat3 table conta
10940 69 6e 73 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  ins additional i
10950 6e 66 6f 72 6d 61 74 69 6f 6e 0a 61 62 6f 75 74  nformation.about
10960 20 74 68 65 20 64 69 73 74 72 69 62 75 74 69 6f   the distributio
10970 6e 20 6f 66 20 6b 65 79 73 20 77 69 74 68 69 6e  n of keys within
10980 20 61 6e 20 69 6e 64 65 78 2c 20 69 6e 66 6f 72   an index, infor
10990 6d 61 74 69 6f 6e 20 74 68 61 74 20 74 68 65 0a  mation that the.
109a0 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 63 61  query planner ca
109b0 6e 20 75 73 65 20 74 6f 20 64 65 76 69 73 65 20  n use to devise 
109c0 62 65 74 74 65 72 20 61 6e 64 20 66 61 73 74 65  better and faste
109d0 72 20 71 75 65 72 79 20 61 6c 67 6f 72 69 74 68  r query algorith
109e0 6d 73 2e 0a 5e 28 54 68 65 20 73 63 68 65 6d 61  ms..^(The schema
109f0 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 5f 73   of the sqlite_s
10a00 74 61 74 33 20 74 61 62 6c 65 20 69 73 20 61 73  tat3 table is as
10a10 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 62 6c 6f 63   follows:..<bloc
10a20 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 43 52 45  kquote><pre>.CRE
10a30 41 54 45 20 54 41 42 4c 45 20 73 71 6c 69 74 65  ATE TABLE sqlite
10a40 5f 73 74 61 74 33 28 74 62 6c 2c 69 64 78 2c 6e  _stat3(tbl,idx,n
10a50 45 71 2c 6e 4c 74 2c 6e 44 4c 74 2c 73 61 6d 70  Eq,nLt,nDLt,samp
10a60 6c 65 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f  le);.</pre></blo
10a70 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 54  ckquote>)^..<p>T
10a80 68 65 72 65 20 61 72 65 20 75 73 75 61 6c 6c 79  here are usually
10a90 20 6d 75 6c 74 69 70 6c 65 20 65 6e 74 72 69 65   multiple entrie
10aa0 73 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f  s in the sqlite_
10ab0 73 74 61 74 33 20 74 61 62 6c 65 20 66 6f 72 20  stat3 table for 
10ac0 65 61 63 68 20 69 6e 64 65 78 2e 0a 5e 28 54 68  each index..^(Th
10ad0 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33 2e 73  e sqlite_stat3.s
10ae0 61 6d 70 6c 65 20 63 6f 6c 75 6d 6e 20 68 6f 6c  ample column hol
10af0 64 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  ds the value of 
10b00 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 66 69  the left-most fi
10b10 65 6c 64 20 6f 66 20 61 6e 0a 69 6e 64 65 78 20  eld of an.index 
10b20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 73 71  identified by sq
10b30 6c 69 74 65 5f 73 74 61 74 33 2e 69 64 78 20 61  lite_stat3.idx a
10b40 6e 64 20 73 71 6c 69 74 65 5f 73 74 61 74 33 2e  nd sqlite_stat3.
10b50 74 62 6c 2e 29 5e 0a 5e 28 54 68 65 20 73 71 6c  tbl.)^.^(The sql
10b60 69 74 65 5f 73 74 61 74 33 2e 6e 45 71 20 63 6f  ite_stat3.nEq co
10b70 6c 75 6d 6e 20 68 6f 6c 64 73 20 74 68 65 20 61  lumn holds the a
10b80 70 70 72 6f 78 69 6d 61 74 65 0a 6e 75 6d 62 65  pproximate.numbe
10b90 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20  r of entries in 
10ba0 74 68 65 20 69 6e 64 65 78 20 77 68 6f 73 65 20  the index whose 
10bb0 6c 65 66 74 2d 6d 6f 73 74 20 63 6f 6c 75 6d 6e  left-most column
10bc0 20 65 78 61 63 74 6c 79 20 6d 61 74 63 68 65 73   exactly matches
10bd0 0a 74 68 65 20 73 61 6d 70 6c 65 2e 29 5e 0a 5e  .the sample.)^.^
10be0 28 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74  (The sqlite_stat
10bf0 33 2e 6e 4c 74 20 68 6f 6c 64 73 20 74 68 65 20  3.nLt holds the 
10c00 61 70 70 72 6f 78 69 6d 61 74 65 20 6e 75 6d 62  approximate numb
10c10 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e  er of entries in
10c20 20 74 68 65 0a 69 6e 64 65 78 20 77 68 6f 73 65   the.index whose
10c30 20 6c 65 66 74 2d 6d 6f 73 74 20 63 6f 6c 75 6d   left-most colum
10c40 6e 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74  n is less than t
10c50 68 65 20 73 61 6d 70 6c 65 2e 29 5e 0a 5e 28 54  he sample.)^.^(T
10c60 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33 2e  he sqlite_stat3.
10c70 6e 44 4c 74 20 63 6f 6c 75 6d 6e 20 68 6f 6c 64  nDLt column hold
10c80 73 20 74 68 65 20 61 70 70 72 6f 78 69 6d 61 74  s the approximat
10c90 65 0a 6e 75 6d 62 65 72 20 6f 66 20 64 69 73 74  e.number of dist
10ca0 69 6e 63 74 20 6c 65 66 74 2d 6d 6f 73 74 20 65  inct left-most e
10cb0 6e 74 72 69 65 73 20 69 6e 20 74 68 65 20 69 6e  ntries in the in
10cc0 64 65 78 20 74 68 61 74 20 61 72 65 20 6c 65 73  dex that are les
10cd0 73 20 74 68 61 6e 0a 74 68 65 20 73 61 6d 70 6c  s than.the sampl
10ce0 65 2e 29 5e 0a 0a 3c 70 3e 5e 54 68 65 72 65 20  e.)^..<p>^There 
10cf0 63 61 6e 20 62 65 20 61 6e 20 61 72 62 69 74 72  can be an arbitr
10d00 61 72 79 20 6e 75 6d 62 65 72 20 6f 66 20 73 71  ary number of sq
10d10 6c 69 74 65 5f 73 74 61 74 33 20 65 6e 74 72 69  lite_stat3 entri
10d20 65 73 20 70 65 72 20 69 6e 64 65 78 2e 0a 54 68  es per index..Th
10d30 65 20 5b 41 4e 41 4c 59 5a 45 5d 20 63 6f 6d 6d  e [ANALYZE] comm
10d40 61 6e 64 20 77 69 6c 6c 20 74 79 70 69 63 61 6c  and will typical
10d50 6c 79 20 67 65 6e 65 72 61 74 65 20 73 71 6c 69  ly generate sqli
10d60 74 65 5f 73 74 61 74 33 20 74 61 62 6c 65 73 0a  te_stat3 tables.
10d70 74 68 61 74 20 63 6f 6e 74 61 69 6e 20 62 65 74  that contain bet
10d80 77 65 65 6e 20 31 30 20 61 6e 64 20 34 30 20 73  ween 10 and 40 s
10d90 61 6d 70 6c 65 73 20 74 68 61 74 20 61 72 65 20  amples that are 
10da0 64 69 73 74 72 69 62 75 74 65 64 20 61 63 72 6f  distributed acro
10db0 73 73 0a 74 68 65 20 6b 65 79 20 73 70 61 63 65  ss.the key space
10dc0 20 61 6e 64 20 77 69 74 68 20 6c 61 72 67 65 20   and with large 
10dd0 6e 45 71 20 76 61 6c 75 65 73 2e 0a 0a 3c 70 3e  nEq values...<p>
10de0 5e 28 49 6e 20 61 20 77 65 6c 6c 2d 66 6f 72 6d  ^(In a well-form
10df0 65 64 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20  ed sqlite_stat3 
10e00 74 61 62 6c 65 2c 20 74 68 65 20 73 61 6d 70 6c  table, the sampl
10e10 65 73 20 66 6f 72 20 61 6e 79 20 73 69 6e 67 6c  es for any singl
10e20 65 0a 69 6e 64 65 78 20 6d 75 73 74 20 61 70 70  e.index must app
10e30 65 61 72 20 69 6e 20 74 68 65 20 73 61 6d 65 20  ear in the same 
10e40 6f 72 64 65 72 20 74 68 61 74 20 74 68 65 79 20  order that they 
10e50 6f 63 63 75 72 20 69 6e 20 74 68 65 20 69 6e 64  occur in the ind
10e60 65 78 2e 20 20 0a 49 6e 20 6f 74 68 65 72 20 77  ex.  .In other w
10e70 6f 72 64 73 2c 20 69 66 20 74 68 65 20 65 6e 74  ords, if the ent
10e80 72 79 20 77 69 74 68 20 6c 65 66 74 2d 6d 6f 73  ry with left-mos
10e90 74 20 63 6f 6c 75 6d 6e 20 53 31 20 69 73 20 65  t column S1 is e
10ea0 61 72 6c 69 65 72 20 69 6e 0a 74 68 65 20 69 6e  arlier in.the in
10eb0 64 65 78 20 62 2d 74 72 65 65 20 74 68 61 6e 20  dex b-tree than 
10ec0 74 68 65 0a 65 6e 74 72 79 20 77 69 74 68 20 6c  the.entry with l
10ed0 65 66 74 2d 6d 6f 73 74 20 63 6f 6c 75 6d 6e 20  eft-most column 
10ee0 53 32 2c 20 74 68 65 6e 20 69 6e 20 74 68 65 20  S2, then in the 
10ef0 73 71 6c 69 74 65 5f 73 74 61 74 33 20 74 61 62  sqlite_stat3 tab
10f00 6c 65 2c 20 0a 73 61 6d 70 6c 65 20 53 31 20 6d  le, .sample S1 m
10f10 75 73 74 20 68 61 76 65 20 61 20 73 6d 61 6c 6c  ust have a small
10f20 65 72 20 72 6f 77 69 64 20 74 68 61 6e 20 73 61  er rowid than sa
10f30 6d 70 6c 65 20 53 32 2e 29 5e 0a 0a 3c 74 63 6c  mple S2.)^..<tcl
10f40 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 73 74 61  >hd_fragment sta
10f50 74 34 74 61 62 20 7b 73 71 6c 69 74 65 5f 73 74  t4tab {sqlite_st
10f60 61 74 34 7d 20 53 51 4c 49 54 45 5f 53 54 41 54  at4} SQLITE_STAT
10f70 34 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20  4</tcl>.<h3>The 
10f80 73 71 6c 69 74 65 5f 73 74 61 74 34 20 74 61 62  sqlite_stat4 tab
10f90 6c 65 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20  le</h3>..<p>The 
10fa0 73 71 6c 69 74 65 5f 73 74 61 74 34 20 69 73 20  sqlite_stat4 is 
10fb0 6f 6e 6c 79 20 63 72 65 61 74 65 64 20 61 6e 64  only created and
10fc0 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 69 66   is only used if
10fd0 20 53 51 4c 69 74 65 20 69 73 20 63 6f 6d 70 69   SQLite is compi
10fe0 6c 65 64 0a 77 69 74 68 20 5b 53 51 4c 49 54 45  led.with [SQLITE
10ff0 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 5d 20 61  _ENABLE_STAT4] a
11000 6e 64 20 69 66 20 74 68 65 20 53 51 4c 69 74 65  nd if the SQLite
11010 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20   version number 
11020 69 73 0a 33 2e 38 2e 31 20 6f 72 20 67 72 65 61  is.3.8.1 or grea
11030 74 65 72 2e 20 20 54 68 65 20 73 71 6c 69 74 65  ter.  The sqlite
11040 5f 73 74 61 74 34 20 74 61 62 6c 65 20 69 73 20  _stat4 table is 
11050 6e 65 69 74 68 65 72 20 72 65 61 64 20 6e 6f 72  neither read nor
11060 20 77 72 69 74 74 65 6e 20 62 79 20 61 6e 79 0a   written by any.
11070 76 65 72 73 69 6f 6e 20 6f 66 20 53 51 4c 69 74  version of SQLit
11080 65 20 62 65 66 6f 72 65 20 33 2e 38 2e 31 2e 0a  e before 3.8.1..
11090 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 34  The sqlite_stat4
110a0 20 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e 73 20   table contains 
110b0 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
110c0 6d 61 74 69 6f 6e 0a 61 62 6f 75 74 20 74 68 65  mation.about the
110d0 20 64 69 73 74 72 69 62 75 74 69 6f 6e 20 6f 66   distribution of
110e0 20 6b 65 79 73 20 77 69 74 68 69 6e 20 61 6e 20   keys within an 
110f0 69 6e 64 65 78 20 6f 72 20 74 68 65 20 64 69 73  index or the dis
11100 74 72 69 62 75 74 69 6f 6e 20 6f 66 0a 6b 65 79  tribution of.key
11110 73 20 69 6e 20 74 68 65 20 70 72 69 6d 61 72 79  s in the primary
11120 20 6b 65 79 20 6f 66 20 61 20 5b 57 49 54 48 4f   key of a [WITHO
11130 55 54 20 52 4f 57 49 44 5d 20 74 61 62 6c 65 2e  UT ROWID] table.
11140 0a 54 68 65 20 71 75 65 72 79 20 70 6c 61 6e 6e  .The query plann
11150 65 72 20 63 61 6e 20 73 6f 6d 65 74 69 6d 65 73  er can sometimes
11160 20 75 73 65 20 74 68 65 20 61 64 64 69 74 69 6f   use the additio
11170 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  nal information 
11180 69 6e 0a 74 68 65 20 73 71 6c 69 74 65 5f 73 74  in.the sqlite_st
11190 61 74 34 20 74 61 62 6c 65 20 74 6f 20 64 65 76  at4 table to dev
111a0 69 73 65 20 62 65 74 74 65 72 20 61 6e 64 20 66  ise better and f
111b0 61 73 74 65 72 20 71 75 65 72 79 20 61 6c 67 6f  aster query algo
111c0 72 69 74 68 6d 73 2e 0a 5e 28 54 68 65 20 73 63  rithms..^(The sc
111d0 68 65 6d 61 20 6f 66 20 74 68 65 20 73 71 6c 69  hema of the sqli
111e0 74 65 5f 73 74 61 74 34 20 74 61 62 6c 65 20 69  te_stat4 table i
111f0 73 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c  s as follows:..<
11200 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e  blockquote><pre>
11210 0a 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 71  .CREATE TABLE sq
11220 6c 69 74 65 5f 73 74 61 74 34 28 74 62 6c 2c 69  lite_stat4(tbl,i
11230 64 78 2c 6e 45 71 2c 6e 4c 74 2c 6e 44 4c 74 2c  dx,nEq,nLt,nDLt,
11240 73 61 6d 70 6c 65 29 3b 0a 3c 2f 70 72 65 3e 3c  sample);.</pre><
11250 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a  /blockquote>)^..
11260 3c 70 3e 54 68 65 72 65 20 61 72 65 20 74 79 70  <p>There are typ
11270 69 63 61 6c 6c 79 20 62 65 74 77 65 65 6e 20 31  ically between 1
11280 30 20 74 6f 20 34 30 20 65 6e 74 72 69 65 73 20  0 to 40 entries 
11290 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74  in the sqlite_st
112a0 61 74 34 20 74 61 62 6c 65 20 66 6f 72 0a 65 61  at4 table for.ea
112b0 63 68 20 69 6e 64 65 78 20 66 6f 72 20 77 68 69  ch index for whi
112c0 63 68 20 73 74 61 74 69 73 74 69 63 73 20 61 72  ch statistics ar
112d0 65 20 61 76 61 69 6c 61 62 6c 65 2c 20 68 6f 77  e available, how
112e0 65 76 65 72 20 74 68 65 73 65 20 6c 69 6d 69 74  ever these limit
112f0 73 20 61 72 65 0a 6e 6f 74 20 68 61 72 64 20 62  s are.not hard b
11300 6f 75 6e 64 73 2e 0a 54 68 65 20 6d 65 61 6e 69  ounds..The meani
11310 6e 67 73 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  ngs of the colum
11320 6e 73 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65  ns in the sqlite
11330 5f 73 74 61 74 34 20 74 61 62 6c 65 20 61 72 65  _stat4 table are
11340 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 63   as follows:..<c
11350 65 6e 74 65 72 3e 0a 3c 74 61 62 6c 65 20 62 6f  enter>.<table bo
11360 72 64 65 72 3d 22 30 22 20 77 69 64 74 68 3d 22  rder="0" width="
11370 31 30 30 25 22 20 63 65 6c 6c 70 61 64 64 69 6e  100%" cellpaddin
11380 67 3d 22 31 30 22 3e 0a 3c 74 72 3e 3c 74 64 20  g="10">.<tr><td 
11390 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69  valign="top" ali
113a0 67 6e 3d 22 72 69 67 68 74 22 3e 74 62 6c 3a 3c  gn="right">tbl:<
113b0 2f 74 64 3e 0a 20 20 20 20 3c 74 64 3e 5e 28 54  /td>.    <td>^(T
113c0 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 34 2e  he sqlite_stat4.
113d0 74 62 6c 20 63 6f 6c 75 6d 6e 20 68 6f 6c 64 73  tbl column holds
113e0 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
113f0 6c 65 20 74 68 61 74 20 6f 77 6e 73 0a 20 20 20  le that owns.   
11400 20 74 68 65 20 69 6e 64 65 78 20 74 68 61 74 20   the index that 
11410 74 68 65 20 72 6f 77 20 64 65 73 63 72 69 62 65  the row describe
11420 73 29 5e 0a 0a 3c 74 72 3e 3c 74 64 20 76 61 6c  s)^..<tr><td val
11430 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d  ign="top" align=
11440 22 72 69 67 68 74 22 3e 69 64 78 3a 3c 2f 74 64  "right">idx:</td
11450 3e 0a 20 20 20 20 3c 74 64 3e 5e 28 54 68 65 20  >.    <td>^(The 
11460 73 71 6c 69 74 65 5f 73 74 61 74 34 2e 69 64 78  sqlite_stat4.idx
11470 20 63 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 6e 61   column holds na
11480 6d 65 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20  me of the index 
11490 74 68 61 74 20 74 68 65 0a 20 20 20 20 72 6f 77  that the.    row
114a0 20 64 65 73 63 72 69 62 65 73 2c 20 6f 72 20 69   describes, or i
114b0 6e 20 74 68 65 20 63 61 73 65 20 6f 66 0a 20 20  n the case of.  
114c0 20 20 61 6e 20 73 71 6c 69 74 65 5f 73 74 61 74    an sqlite_stat
114d0 34 20 65 6e 74 72 79 20 66 6f 72 20 61 20 5b 57  4 entry for a [W
114e0 49 54 48 4f 55 54 20 52 4f 57 49 44 5d 20 74 61  ITHOUT ROWID] ta
114f0 62 6c 65 2c 20 74 68 65 0a 20 20 20 20 6e 61 6d  ble, the.    nam
11500 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 69  e of the table i
11510 74 73 65 6c 66 2e 29 5e 0a 0a 3c 74 72 3e 3c 74  tself.)^..<tr><t
11520 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61  d valign="top" a
11530 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e 73 61 6d  lign="right">sam
11540 70 6c 65 3a 3c 2f 74 64 3e 0a 20 20 20 20 3c 74  ple:</td>.    <t
11550 64 3e 5e 28 54 68 65 20 73 71 6c 69 74 65 5f 73  d>^(The sqlite_s
11560 74 61 74 34 2e 73 61 6d 70 6c 65 20 63 6f 6c 75  tat4.sample colu
11570 6d 6e 20 68 6f 6c 64 73 20 61 20 42 4c 4f 42 0a  mn holds a BLOB.
11580 20 20 20 20 69 6e 20 74 68 65 20 5b 72 65 63 6f      in the [reco
11590 72 64 20 66 6f 72 6d 61 74 5d 20 74 68 61 74 20  rd format] that 
115a0 65 6e 63 6f 64 65 73 20 74 68 65 20 69 6e 64 65  encodes the inde
115b0 78 65 64 20 63 6f 6c 75 6d 6e 73 20 66 6f 6c 6c  xed columns foll
115c0 6f 77 65 64 20 62 79 0a 20 20 20 20 74 68 65 20  owed by.    the 
115d0 72 6f 77 69 64 20 66 6f 72 20 61 20 72 6f 77 69  rowid for a rowi
115e0 64 20 74 61 62 6c 65 20 6f 72 20 62 79 20 74 68  d table or by th
115f0 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65  e columns of the
11600 20 70 72 69 6d 61 72 79 20 6b 65 79 20 0a 20 20   primary key .  
11610 20 20 66 6f 72 20 61 20 57 49 54 48 4f 55 54 20    for a WITHOUT 
11620 52 4f 57 49 44 20 74 61 62 6c 65 2e 29 5e 0a 20  ROWID table.)^. 
11630 20 20 20 5e 28 54 68 65 20 73 71 6c 69 74 65 5f     ^(The sqlite_
11640 73 74 61 74 34 2e 73 61 6d 70 6c 65 20 42 4c 4f  stat4.sample BLO
11650 42 20 66 6f 72 20 74 68 65 20 57 49 54 48 4f 55  B for the WITHOU
11660 54 20 52 4f 57 49 44 20 74 61 62 6c 65 20 69 74  T ROWID table it
11670 73 65 6c 66 20 0a 20 20 20 20 63 6f 6e 74 61 69  self .    contai
11680 6e 73 20 6a 75 73 74 20 74 68 65 20 63 6f 6c 75  ns just the colu
11690 6d 6e 73 20 6f 66 20 74 68 65 20 70 72 69 6d 61  mns of the prima
116a0 72 79 20 6b 65 79 2e 29 5e 0a 20 20 20 20 4c 65  ry key.)^.    Le
116b0 74 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  t the number of 
116c0 63 6f 6c 75 6d 6e 73 20 65 6e 63 6f 64 65 64 20  columns encoded 
116d0 62 79 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74  by the sqlite_st
116e0 61 74 34 2e 73 61 6d 70 6c 65 20 62 6c 6f 62 20  at4.sample blob 
116f0 62 65 20 4e 2e 0a 20 20 20 20 5e 46 6f 72 20 69  be N..    ^For i
11700 6e 64 65 78 65 73 20 6f 6e 20 61 6e 20 6f 72 64  ndexes on an ord
11710 69 6e 61 72 79 20 72 6f 77 69 64 20 74 61 62 6c  inary rowid tabl
11720 65 2c 20 4e 20 77 69 6c 6c 20 62 65 20 6f 6e 65  e, N will be one
11730 20 6d 6f 72 65 20 74 68 61 6e 20 74 68 65 20 6e   more than the n
11740 75 6d 62 65 72 20 0a 20 20 20 20 6f 66 20 63 6f  umber .    of co
11750 6c 75 6d 6e 73 20 69 6e 64 65 78 65 64 2e 0a 20  lumns indexed.. 
11760 20 20 20 5e 46 6f 72 20 69 6e 64 65 78 65 73 20     ^For indexes 
11770 6f 6e 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44  on WITHOUT ROWID
11780 20 74 61 62 6c 65 73 2c 20 4e 20 77 69 6c 6c 20   tables, N will 
11790 62 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  be the number of
117a0 20 63 6f 6c 75 6d 6e 73 0a 20 20 20 20 69 6e 64   columns.    ind
117b0 65 78 65 64 20 70 6c 75 73 20 74 68 65 20 6e 75  exed plus the nu
117c0 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
117d0 69 6e 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b  in the primary k
117e0 65 79 2e 0a 20 20 20 20 5e 46 6f 72 20 61 20 57  ey..    ^For a W
117f0 49 54 48 4f 55 54 20 52 4f 57 49 44 20 74 61 62  ITHOUT ROWID tab
11800 6c 65 2c 20 4e 20 77 69 6c 6c 20 62 65 20 74 68  le, N will be th
11810 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
11820 6d 6e 73 20 69 6e 20 74 68 65 0a 20 20 20 20 70  mns in the.    p
11830 72 69 6d 61 72 79 20 6b 65 79 2e 0a 0a 3c 74 72  rimary key...<tr
11840 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70  ><td valign="top
11850 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e  " align="right">
11860 6e 45 71 3a 3c 2f 74 64 3e 0a 20 20 20 20 3c 74  nEq:</td>.    <t
11870 64 3e 5e 28 54 68 65 20 73 71 6c 69 74 65 5f 73  d>^(The sqlite_s
11880 74 61 74 34 2e 6e 45 71 20 63 6f 6c 75 6d 6e 20  tat4.nEq column 
11890 68 6f 6c 64 73 20 61 20 6c 69 73 74 20 6f 66 20  holds a list of 
118a0 4e 20 69 6e 74 65 67 65 72 73 20 77 68 65 72 65  N integers where
118b0 20 0a 20 20 20 20 74 68 65 20 4b 2d 74 68 20 69   .    the K-th i
118c0 6e 74 65 67 65 72 20 69 73 20 74 68 65 20 61 70  nteger is the ap
118d0 70 72 6f 78 69 6d 61 74 65 20 6e 75 6d 62 65 72  proximate number
118e0 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 74   of entries in t
118f0 68 65 20 69 6e 64 65 78 0a 20 20 20 20 77 68 6f  he index.    who
11900 73 65 20 6c 65 66 74 2d 6d 6f 73 74 20 4b 20 63  se left-most K c
11910 6f 6c 75 6d 6e 73 20 65 78 61 63 74 6c 79 20 6d  olumns exactly m
11920 61 74 63 68 20 74 68 65 20 4b 20 6c 65 66 74 2d  atch the K left-
11930 6d 6f 73 74 20 63 6f 6c 75 6d 6e 73 0a 20 20 20  most columns.   
11940 20 6f 66 20 74 68 65 20 73 61 6d 70 6c 65 2e 29   of the sample.)
11950 5e 0a 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  ^..<tr><td valig
11960 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72  n="top" align="r
11970 69 67 68 74 22 3e 6e 4c 74 3a 3c 2f 74 64 3e 0a  ight">nLt:</td>.
11980 20 20 20 20 3c 74 64 3e 5e 28 54 68 65 20 73 71      <td>^(The sq
11990 6c 69 74 65 5f 73 74 61 74 34 2e 6e 4c 74 20 63  lite_stat4.nLt c
119a0 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 61 20 6c 69  olumn holds a li
119b0 73 74 20 6f 66 20 4e 20 69 6e 74 65 67 65 72 73  st of N integers
119c0 20 77 68 65 72 65 0a 20 20 20 20 74 68 65 20 4b   where.    the K
119d0 2d 74 68 20 69 6e 74 65 67 65 72 20 69 73 20 74  -th integer is t
119e0 68 65 20 61 70 70 72 6f 78 69 6d 61 74 65 20 6e  he approximate n
119f0 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73  umber of entries
11a00 20 69 6e 20 74 68 65 0a 20 20 20 20 69 6e 64 65   in the.    inde
11a10 78 20 77 68 6f 73 65 20 4b 20 6c 65 66 74 2d 6d  x whose K left-m
11a20 6f 73 74 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20  ost columns are 
11a30 63 6f 6c 6c 65 63 74 69 76 65 6c 79 20 6c 65 73  collectively les
11a40 73 20 74 68 61 6e 20 74 68 65 20 0a 20 20 20 20  s than the .    
11a50 4b 20 6c 65 66 74 2d 6d 6f 73 74 20 63 6f 6c 75  K left-most colu
11a60 6d 6e 73 20 6f 66 20 74 68 65 20 73 61 6d 70 6c  mns of the sampl
11a70 65 2e 29 5e 0a 0a 3c 74 72 3e 3c 74 64 20 76 61  e.)^..<tr><td va
11a80 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e  lign="top" align
11a90 3d 22 72 69 67 68 74 22 3e 6e 44 4c 74 3a 3c 2f  ="right">nDLt:</
11aa0 74 64 3e 0a 20 20 20 20 3c 74 64 3e 5e 28 54 68  td>.    <td>^(Th
11ab0 65 20 73 71 6c 69 74 65 5f 73 74 61 74 34 2e 6e  e sqlite_stat4.n
11ac0 44 4c 74 20 63 6f 6c 75 6d 6e 20 68 6f 6c 64 73  DLt column holds
11ad0 20 61 20 6c 69 73 74 20 6f 66 20 4e 20 69 6e 74   a list of N int
11ae0 65 67 65 72 73 20 77 68 65 72 65 0a 20 20 20 20  egers where.    
11af0 74 68 65 20 4b 2d 74 68 20 69 6e 74 65 67 65 72  the K-th integer
11b00 20 69 73 20 74 68 65 20 61 70 70 72 6f 78 69 6d   is the approxim
11b10 61 74 65 0a 20 20 20 20 6e 75 6d 62 65 72 20 6f  ate.    number o
11b20 66 20 65 6e 74 72 69 65 73 20 69 6e 20 74 68 65  f entries in the
11b30 20 69 6e 64 65 78 20 74 68 61 74 20 61 72 65 20   index that are 
11b40 64 69 73 74 69 6e 63 74 20 69 6e 20 74 68 65 20  distinct in the 
11b50 66 69 72 73 74 20 4b 20 63 6f 6c 75 6d 6e 73 20  first K columns 
11b60 61 6e 64 0a 20 20 20 20 77 68 65 72 65 20 74 68  and.    where th
11b70 65 20 6c 65 66 74 2d 6d 6f 73 74 20 4b 20 63 6f  e left-most K co
11b80 6c 75 6d 6e 73 20 61 72 65 20 63 6f 6c 6c 65 63  lumns are collec
11b90 74 69 76 65 6c 79 20 6c 65 73 73 20 74 68 61 6e  tively less than
11ba0 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 0a 20   the left-most. 
11bb0 20 20 20 4b 20 63 6f 6c 75 6d 6e 73 20 6f 66 20     K columns of 
11bc0 74 68 65 20 73 61 6d 70 6c 65 2e 29 5e 0a 3c 2f  the sample.)^.</
11bd0 74 61 62 6c 65 3e 0a 3c 2f 63 65 6e 74 65 72 3e  table>.</center>
11be0 0a 0a 3c 70 3e 54 68 65 20 73 71 6c 69 74 65 5f  ..<p>The sqlite_
11bf0 73 74 61 74 34 20 69 73 20 61 20 67 65 6e 65 72  stat4 is a gener
11c00 61 6c 69 7a 61 74 69 6f 6e 20 6f 66 20 74 68 65  alization of the
11c10 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20 74 61   sqlite_stat3 ta
11c20 62 6c 65 2e 20 20 54 68 65 0a 73 71 6c 69 74 65  ble.  The.sqlite
11c30 5f 73 74 61 74 33 20 74 61 62 6c 65 20 70 72 6f  _stat3 table pro
11c40 76 69 64 65 73 20 69 6e 66 6f 72 6d 61 74 69 6f  vides informatio
11c50 6e 20 61 62 6f 75 74 20 74 68 65 20 6c 65 66 74  n about the left
11c60 2d 6d 6f 73 74 20 63 6f 6c 75 6d 6e 20 6f 66 20  -most column of 
11c70 61 6e 0a 69 6e 64 65 78 20 77 68 65 72 65 61 73  an.index whereas
11c80 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74   the sqlite_stat
11c90 34 20 74 61 62 6c 65 20 70 72 6f 76 69 64 65 73  4 table provides
11ca0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   information abo
11cb0 75 74 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 0a 6f  ut all columns.o
11cc0 66 20 74 68 65 20 69 6e 64 65 78 2e 0a 0a 3c 70  f the index...<p
11cd0 3e 5e 54 68 65 72 65 20 63 61 6e 20 62 65 20 61  >^There can be a
11ce0 6e 20 61 72 62 69 74 72 61 72 79 20 6e 75 6d 62  n arbitrary numb
11cf0 65 72 20 6f 66 20 73 71 6c 69 74 65 5f 73 74 61  er of sqlite_sta
11d00 74 34 20 65 6e 74 72 69 65 73 20 70 65 72 20 69  t4 entries per i
11d10 6e 64 65 78 2e 0a 54 68 65 20 5b 41 4e 41 4c 59  ndex..The [ANALY
11d20 5a 45 5d 20 63 6f 6d 6d 61 6e 64 20 77 69 6c 6c  ZE] command will
11d30 20 74 79 70 69 63 61 6c 6c 79 20 67 65 6e 65 72   typically gener
11d40 61 74 65 20 73 71 6c 69 74 65 5f 73 74 61 74 34  ate sqlite_stat4
11d50 20 74 61 62 6c 65 73 0a 74 68 61 74 20 63 6f 6e   tables.that con
11d60 74 61 69 6e 20 62 65 74 77 65 65 6e 20 31 30 20  tain between 10 
11d70 61 6e 64 20 34 30 20 73 61 6d 70 6c 65 73 20 74  and 40 samples t
11d80 68 61 74 20 61 72 65 20 64 69 73 74 72 69 62 75  hat are distribu
11d90 74 65 64 20 61 63 72 6f 73 73 0a 74 68 65 20 6b  ted across.the k
11da0 65 79 20 73 70 61 63 65 20 61 6e 64 20 77 69 74  ey space and wit
11db0 68 20 6c 61 72 67 65 20 6e 45 71 20 76 61 6c 75  h large nEq valu
11dc0 65 73 2e 0a 0a 3c 70 3e 5e 28 49 6e 20 61 20 77  es...<p>^(In a w
11dd0 65 6c 6c 2d 66 6f 72 6d 65 64 20 73 71 6c 69 74  ell-formed sqlit
11de0 65 5f 73 74 61 74 34 20 74 61 62 6c 65 2c 20 74  e_stat4 table, t
11df0 68 65 20 73 61 6d 70 6c 65 73 20 66 6f 72 20 61  he samples for a
11e00 6e 79 20 73 69 6e 67 6c 65 0a 69 6e 64 65 78 20  ny single.index 
11e10 6d 75 73 74 20 61 70 70 65 61 72 20 69 6e 20 74  must appear in t
11e20 68 65 20 73 61 6d 65 20 6f 72 64 65 72 20 74 68  he same order th
11e30 61 74 20 74 68 65 79 20 6f 63 63 75 72 20 69 6e  at they occur in
11e40 20 74 68 65 20 69 6e 64 65 78 2e 20 20 0a 49 6e   the index.  .In
11e50 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69 66   other words, if
11e60 20 65 6e 74 72 79 20 53 31 20 69 73 20 65 61 72   entry S1 is ear
11e70 6c 69 65 72 20 69 6e 20 74 68 65 20 69 6e 64 65  lier in the inde
11e80 78 20 62 2d 74 72 65 65 20 74 68 61 6e 20 0a 65  x b-tree than .e
11e90 6e 74 72 79 20 53 32 2c 20 74 68 65 6e 20 69 6e  ntry S2, then in
11ea0 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74   the sqlite_stat
11eb0 34 20 74 61 62 6c 65 2c 20 73 61 6d 70 6c 65 20  4 table, sample 
11ec0 53 31 20 6d 75 73 74 20 68 61 76 65 20 61 0a 73  S1 must have a.s
11ed0 6d 61 6c 6c 65 72 20 72 6f 77 69 64 20 74 68 61  maller rowid tha
11ee0 6e 20 73 61 6d 70 6c 65 20 53 32 2e 29 5e 0a 0a  n sample S2.)^..
11ef0 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
11f00 20 72 6f 6c 6c 62 61 63 6b 6a 6f 75 72 6e 61 6c   rollbackjournal
11f10 20 7b 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e   {rollback journ
11f20 61 6c 20 66 6f 72 6d 61 74 7d 3c 2f 74 63 6c 3e  al format}</tcl>
11f30 0a 3c 68 31 3e 54 68 65 20 52 6f 6c 6c 62 61 63  .<h1>The Rollbac
11f40 6b 20 4a 6f 75 72 6e 61 6c 3c 2f 68 31 3e 0a 0a  k Journal</h1>..
11f50 3c 70 3e 54 68 65 20 72 6f 6c 6c 62 61 63 6b 20  <p>The rollback 
11f60 6a 6f 75 72 6e 61 6c 20 69 73 20 61 20 66 69 6c  journal is a fil
11f70 65 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  e associated wit
11f80 68 20 65 61 63 68 20 53 51 4c 69 74 65 20 64 61  h each SQLite da
11f90 74 61 62 61 73 65 0a 66 69 6c 65 20 74 68 61 74  tabase.file that
11fa0 20 68 6f 6c 64 73 20 69 6e 66 6f 72 6d 61 74 69   holds informati
11fb0 6f 6e 20 75 73 65 64 20 74 6f 20 72 65 73 74 6f  on used to resto
11fc0 72 65 20 74 68 65 20 64 61 74 61 62 61 73 65 20  re the database 
11fd0 66 69 6c 65 20 74 6f 20 69 74 73 20 69 6e 69 74  file to its init
11fe0 69 61 6c 0a 73 74 61 74 65 20 64 75 72 69 6e 67  ial.state during
11ff0 20 74 68 65 20 63 6f 75 72 73 65 20 6f 66 20 61   the course of a
12000 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e 54   transaction..^T
12010 68 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72  he rollback jour
12020 6e 61 6c 20 66 69 6c 65 20 69 73 20 61 6c 77 61  nal file is alwa
12030 79 73 20 6c 6f 63 61 74 65 64 20 69 6e 20 74 68  ys located in th
12040 65 20 73 61 6d 65 20 0a 64 69 72 65 63 74 6f 72  e same .director
12050 79 20 61 73 20 74 68 65 20 64 61 74 61 62 61 73  y as the databas
12060 65 0a 66 69 6c 65 20 61 6e 64 20 68 61 73 20 74  e.file and has t
12070 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 61 73 20  he same name as 
12080 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
12090 65 20 62 75 74 20 77 69 74 68 20 74 68 65 20 73  e but with the s
120a0 74 72 69 6e 67 0a 22 3c 74 74 3e 2d 6a 6f 75 72  tring."<tt>-jour
120b0 6e 61 6c 3c 2f 74 74 3e 22 20 61 70 70 65 6e 64  nal</tt>" append
120c0 65 64 2e 20 20 54 68 65 72 65 20 63 61 6e 20 6f  ed.  There can o
120d0 6e 6c 79 20 62 65 20 61 20 73 69 6e 67 6c 65 20  nly be a single 
120e0 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c  rollback journal
120f0 0a 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68  .associated with
12100 20 61 20 67 69 76 65 20 64 61 74 61 62 61 73 65   a give database
12110 20 61 6e 64 20 68 65 6e 63 65 20 74 68 65 72 65   and hence there
12120 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20 6f 6e 65   can only be one
12130 20 77 72 69 74 65 0a 74 72 61 6e 73 61 63 74 69   write.transacti
12140 6f 6e 20 6f 70 65 6e 20 61 67 61 69 6e 73 74 20  on open against 
12150 61 20 73 69 6e 67 6c 65 20 64 61 74 61 62 61 73  a single databas
12160 65 20 61 74 20 6f 6e 65 20 74 69 6d 65 2e 3c 2f  e at one time.</
12170 70 3e 0a 0a 3c 70 3e 49 66 20 61 20 74 72 61 6e  p>..<p>If a tran
12180 73 61 63 74 69 6f 6e 20 69 73 20 61 62 6f 72 74  saction is abort
12190 65 64 20 64 75 65 20 74 6f 20 61 6e 20 61 70 70  ed due to an app
121a0 6c 69 63 61 74 69 6f 6e 20 63 72 61 73 68 2c 20  lication crash, 
121b0 61 6e 20 6f 70 65 72 61 74 69 6e 67 0a 73 79 73  an operating.sys
121c0 74 65 6d 20 63 72 61 73 68 2c 20 6f 72 20 61 20  tem crash, or a 
121d0 68 61 72 64 77 61 72 65 20 70 6f 77 65 72 20 66  hardware power f
121e0 61 69 6c 75 72 65 20 6f 72 20 63 72 61 73 68 2c  ailure or crash,
121f0 20 74 68 65 6e 20 74 68 65 20 64 61 74 61 62 61   then the databa
12200 73 65 20 6d 61 79 0a 62 65 20 6c 65 66 74 20 69  se may.be left i
12210 6e 20 61 6e 20 69 6e 63 6f 6e 73 69 73 74 65 6e  n an inconsisten
12220 74 20 73 74 61 74 65 2e 20 20 5e 54 68 65 20 6e  t state.  ^The n
12230 65 78 74 20 74 69 6d 65 20 53 51 4c 69 74 65 20  ext time SQLite 
12240 61 74 74 65 6d 70 74 73 20 74 6f 20 6f 70 65 6e  attempts to open
12250 0a 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69  .the database fi
12260 6c 65 2c 20 74 68 65 20 70 72 65 73 65 6e 63 65  le, the presence
12270 20 6f 66 20 74 68 65 20 72 6f 6c 6c 62 61 63 6b   of the rollback
12280 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 20 77 69   journal file wi
12290 6c 6c 20 62 65 20 0a 64 65 74 65 63 74 65 64 20  ll be .detected 
122a0 61 6e 64 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20  and the journal 
122b0 77 69 6c 6c 20 62 65 20 61 75 74 6f 6d 61 74 69  will be automati
122c0 63 61 6c 6c 79 20 70 6c 61 79 65 64 20 62 61 63  cally played bac
122d0 6b 20 74 6f 20 72 65 73 74 6f 72 65 20 74 68 65  k to restore the
122e0 0a 64 61 74 61 62 61 73 65 20 74 6f 20 69 74 73  .database to its
122f0 20 73 74 61 74 65 20 61 74 20 74 68 65 20 73 74   state at the st
12300 61 72 74 20 6f 66 20 74 68 65 20 69 6e 63 6f 6d  art of the incom
12310 70 6c 65 74 65 20 74 72 61 6e 73 61 63 74 69 6f  plete transactio
12320 6e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 20 72 6f  n.</p>..<p>^A ro
12330 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 69  llback journal i
12340 73 20 6f 6e 6c 79 20 63 6f 6e 73 69 64 65 72 65  s only considere
12350 64 20 74 6f 20 62 65 20 76 61 6c 69 64 20 69 66  d to be valid if
12360 20 69 74 20 65 78 69 73 74 73 20 61 6e 64 0a 63   it exists and.c
12370 6f 6e 74 61 69 6e 73 20 61 20 76 61 6c 69 64 20  ontains a valid 
12380 68 65 61 64 65 72 2e 20 20 48 65 6e 63 65 20 61  header.  Hence a
12390 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 63 61 6e   transaction can
123a0 20 62 65 20 63 6f 6d 6d 69 74 74 65 64 20 69 6e   be committed in
123b0 20 6f 6e 65 0a 6f 66 20 74 68 72 65 65 20 77 61   one.of three wa
123c0 79 73 3a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 5e 28 54  ys:.<ol>.<li>^(T
123d0 68 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72  he rollback jour
123e0 6e 61 6c 20 66 69 6c 65 20 63 61 6e 20 62 65 20  nal file can be 
123f0 64 65 6c 65 74 65 64 29 5e 2c 0a 3c 6c 69 3e 5e  deleted)^,.<li>^
12400 28 54 68 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f  (The rollback jo
12410 75 72 6e 61 6c 20 66 69 6c 65 20 63 61 6e 20 62  urnal file can b
12420 65 20 74 72 75 6e 63 61 74 65 64 20 74 6f 20 7a  e truncated to z
12430 65 72 6f 20 6c 65 6e 67 74 68 29 5e 2c 20 6f 72  ero length)^, or
12440 0a 3c 6c 69 3e 5e 28 54 68 65 20 68 65 61 64 65  .<li>^(The heade
12450 72 20 6f 66 20 74 68 65 20 72 6f 6c 6c 62 61 63  r of the rollbac
12460 6b 20 6a 6f 75 72 6e 61 6c 20 63 61 6e 20 62 65  k journal can be
12470 20 6f 76 65 72 77 72 69 74 74 65 6e 20 77 69 74   overwritten wit
12480 68 0a 69 6e 76 61 6c 69 64 20 68 65 61 64 65 72  h.invalid header
12490 20 74 65 78 74 20 28 66 6f 72 20 65 78 61 6d 70   text (for examp
124a0 6c 65 2c 20 61 6c 6c 20 7a 65 72 6f 73 29 2e 29  le, all zeros).)
124b0 5e 0a 3c 2f 6f 6c 3e 0a 3c 70 3e 0a 5e 54 68 65  ^.</ol>.<p>.^The
124c0 73 65 20 74 68 72 65 65 20 77 61 79 73 20 6f 66  se three ways of
124d0 20 63 6f 6d 6d 69 74 74 69 6e 67 20 61 20 74 72   committing a tr
124e0 61 6e 73 61 63 74 69 6f 6e 20 63 6f 72 72 65 73  ansaction corres
124f0 70 6f 6e 64 20 74 6f 20 74 68 65 20 44 45 4c 45  pond to the DELE
12500 54 45 2c 0a 54 52 55 4e 43 41 54 45 2c 20 61 6e  TE,.TRUNCATE, an
12510 64 20 50 45 52 53 49 53 54 20 73 65 74 74 69 6e  d PERSIST settin
12520 67 73 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79  gs, respectively
12530 2c 20 6f 66 20 74 68 65 20 5b 6a 6f 75 72 6e 61  , of the [journa
12540 6c 5f 6d 6f 64 65 20 70 72 61 67 6d 61 5d 2e 0a  l_mode pragma]..
12550 3c 2f 70 3e 0a 0a 0a 3c 70 3e 41 20 76 61 6c 69  </p>...<p>A vali
12560 64 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e  d rollback journ
12570 61 6c 20 62 65 67 69 6e 73 20 77 69 74 68 20 61  al begins with a
12580 20 68 65 61 64 65 72 20 69 6e 20 74 68 65 20 66   header in the f
12590 6f 6c 6c 6f 77 69 6e 67 20 66 6f 72 6d 61 74 3a  ollowing format:
125a0 3c 2f 70 3e 0a 0a 3c 63 65 6e 74 65 72 3e 0a 3c  </p>..<center>.<
125b0 69 3e 52 6f 6c 6c 62 61 63 6b 20 4a 6f 75 72 6e  i>Rollback Journ
125c0 61 6c 20 48 65 61 64 65 72 20 46 6f 72 6d 61 74  al Header Format
125d0 3c 2f 69 3e 3c 62 72 3e 0a 3c 74 61 62 6c 65 20  </i><br>.<table 
125e0 77 69 64 74 68 3d 22 38 30 25 22 20 62 6f 72 64  width="80%" bord
125f0 65 72 3d 31 3e 0a 3c 74 72 3e 3c 74 68 3e 4f 66  er=1>.<tr><th>Of
12600 66 73 65 74 3c 74 68 3e 53 69 7a 65 3c 74 68 3e  fset<th>Size<th>
12610 44 65 73 63 72 69 70 74 69 6f 6e 0a 3c 74 72 3e  Description.<tr>
12620 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
12630 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 30 0a 20 20  lign=center>0.  
12640 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70    <td valign=top
12650 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 38 0a   align=center>8.
12660 20 20 20 20 3c 74 64 3e 48 65 61 64 65 72 20 73      <td>Header s
12670 74 72 69 6e 67 3a 20 20 30 78 64 39 2c 20 30 78  tring:  0xd9, 0x
12680 64 35 2c 20 30 78 30 35 2c 20 30 78 66 39 2c 20  d5, 0x05, 0xf9, 
12690 30 78 32 30 2c 20 30 78 61 31 2c 20 30 78 36 33  0x20, 0xa1, 0x63
126a0 2c 20 30 78 64 37 0a 3c 74 72 3e 3c 74 64 20 76  , 0xd7.<tr><td v
126b0 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
126c0 63 65 6e 74 65 72 3e 38 0a 20 20 20 20 3c 74 64  center>8.    <td
126d0 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
126e0 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c  n=center>4.    <
126f0 74 64 3e 54 68 65 20 22 50 61 67 65 20 43 6f 75  td>The "Page Cou
12700 6e 74 22 20 2d 20 54 68 65 20 6e 75 6d 62 65 72  nt" - The number
12710 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74 68 65   of pages in the
12720 20 6e 65 78 74 20 73 65 67 6d 65 6e 74 20 6f 66   next segment of
12730 20 74 68 65 20 0a 20 20 20 20 20 20 20 20 6a 6f   the .        jo
12740 75 72 6e 61 6c 2c 20 6f 72 20 2d 31 20 74 6f 0a  urnal, or -1 to.
12750 20 20 20 20 20 20 20 20 6d 65 61 6e 20 61 6c 6c          mean all
12760 20 63 6f 6e 74 65 6e 74 20 74 6f 20 74 68 65 20   content to the 
12770 65 6e 64 20 6f 66 20 74 68 65 20 66 69 6c 65 0a  end of the file.
12780 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74  <tr><td valign=t
12790 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
127a0 31 32 0a 20 20 20 20 3c 74 64 20 76 61 6c 69 67  12.    <td valig
127b0 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
127c0 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 41 20 72  er>4.    <td>A r
127d0 61 6e 64 6f 6d 20 6e 6f 6e 63 65 20 66 6f 72 20  andom nonce for 
127e0 74 68 65 20 63 68 65 63 6b 73 75 6d 0a 3c 74 72  the checksum.<tr
127f0 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
12800 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 36 0a  align=center>16.
12810 20 20 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74      <td valign=t
12820 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
12830 34 0a 20 20 20 20 3c 74 64 3e 49 6e 69 74 69 61  4.    <td>Initia
12840 6c 20 73 69 7a 65 20 6f 66 20 74 68 65 20 64 61  l size of the da
12850 74 61 62 61 73 65 20 69 6e 20 70 61 67 65 73 0a  tabase in pages.
12860 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74  <tr><td valign=t
12870 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
12880 32 30 0a 20 20 20 20 3c 74 64 20 76 61 6c 69 67  20.    <td valig
12890 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
128a0 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 53 69 7a  er>4.    <td>Siz
128b0 65 20 6f 66 20 61 20 64 69 73 6b 20 73 65 63 74  e of a disk sect
128c0 6f 72 20 61 73 73 75 6d 65 64 20 62 79 20 74 68  or assumed by th
128d0 65 20 70 72 6f 63 65 73 73 20 74 68 61 74 20 77  e process that w
128e0 72 6f 74 65 20 74 68 69 73 0a 20 20 20 20 20 20  rote this.      
128f0 20 20 6a 6f 75 72 6e 61 6c 2e 0a 3c 74 72 3e 3c    journal..<tr><
12900 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
12910 69 67 6e 3d 63 65 6e 74 65 72 3e 32 34 0a 20 20  ign=center>24.  
12920 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70    <td valign=top
12930 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a   align=center>4.
12940 20 20 20 20 3c 74 64 3e 53 69 7a 65 20 6f 66 20      <td>Size of 
12950 70 61 67 65 73 20 69 6e 20 74 68 69 73 20 6a 6f  pages in this jo
12960 75 72 6e 61 6c 2e 0a 3c 2f 74 61 62 6c 65 3e 0a  urnal..</table>.
12970 3c 2f 63 65 6e 74 65 72 3e 0a 0a 3c 70 3e 5e 41  </center>..<p>^A
12980 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61   rollback journa
12990 6c 20 68 65 61 64 65 72 20 69 73 20 70 61 64 64  l header is padd
129a0 65 64 20 77 69 74 68 20 7a 65 72 6f 73 20 6f 75  ed with zeros ou
129b0 74 20 74 6f 20 74 68 65 20 73 69 7a 65 20 6f 66  t to the size of
129c0 20 61 20 0a 73 69 6e 67 6c 65 20 73 65 63 74 6f   a .single secto
129d0 72 20 28 61 73 20 64 65 66 69 6e 65 64 20 62 79  r (as defined by
129e0 20 74 68 65 20 73 65 63 74 6f 72 20 73 69 7a 65   the sector size
129f0 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73   integer at offs
12a00 65 74 20 32 30 29 2e 0a 54 68 65 20 68 65 61 64  et 20)..The head
12a10 65 72 20 69 73 20 69 6e 20 61 20 73 65 63 74 6f  er is in a secto
12a20 72 20 62 79 20 69 74 73 65 6c 66 20 73 6f 20 74  r by itself so t
12a30 68 61 74 20 69 66 20 61 20 70 6f 77 65 72 20 6c  hat if a power l
12a40 6f 73 73 20 6f 63 63 75 72 73 20 77 68 69 6c 65  oss occurs while
12a50 0a 77 72 69 74 69 6e 67 20 74 68 65 20 73 65 63  .writing the sec
12a60 74 6f 72 2c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  tor, information
12a70 20 74 68 61 74 20 66 6f 6c 6c 6f 77 73 20 74 68   that follows th
12a80 65 20 68 65 61 64 65 72 20 77 69 6c 6c 20 62 65  e header will be
12a90 0a 28 68 6f 70 65 66 75 6c 6c 79 29 20 75 6e 64  .(hopefully) und
12aa0 61 6d 61 67 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e  amaged.</p>..<p>
12ab0 5e 41 66 74 65 72 20 74 68 65 20 68 65 61 64 65  ^After the heade
12ac0 72 20 61 6e 64 20 7a 65 72 6f 20 70 61 64 64 69  r and zero paddi
12ad0 6e 67 20 61 72 65 20 7a 65 72 6f 20 6f 72 20 6d  ng are zero or m
12ae0 6f 72 65 20 70 61 67 65 20 72 65 63 6f 72 64 73  ore page records
12af0 2e 20 20 5e 45 61 63 68 0a 70 61 67 65 20 72 65  .  ^Each.page re
12b00 63 6f 72 64 20 73 74 6f 72 65 73 20 61 20 63 6f  cord stores a co
12b10 70 79 20 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e  py of the conten
12b20 74 20 6f 66 20 61 20 70 61 67 65 20 66 72 6f 6d  t of a page from
12b30 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
12b40 6c 65 0a 62 65 66 6f 72 65 20 69 74 20 77 61 73  le.before it was
12b50 20 63 68 61 6e 67 65 64 2e 20 20 5e 54 68 65 20   changed.  ^The 
12b60 73 61 6d 65 20 70 61 67 65 20 6d 61 79 20 6e 6f  same page may no
12b70 74 20 61 70 70 65 61 72 20 6d 6f 72 65 20 74 68  t appear more th
12b80 61 6e 20 6f 6e 63 65 0a 77 69 74 68 69 6e 20 61  an once.within a
12b90 20 73 69 6e 67 6c 65 20 72 6f 6c 6c 62 61 63 6b   single rollback
12ba0 20 6a 6f 75 72 6e 61 6c 2e 0a 54 6f 20 72 6f 6c   journal..To rol
12bb0 6c 62 61 63 6b 20 61 6e 20 69 6e 63 6f 6d 70 6c  lback an incompl
12bc0 65 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c  ete transaction,
12bd0 20 61 20 70 72 6f 63 65 73 73 0a 68 61 73 20 6d   a process.has m
12be0 65 72 65 6c 79 20 74 6f 20 72 65 61 64 20 74 68  erely to read th
12bf0 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e  e rollback journ
12c00 61 6c 20 66 72 6f 6d 20 62 65 67 69 6e 6e 69 6e  al from beginnin
12c10 67 20 74 6f 20 65 6e 64 20 61 6e 64 0a 77 72 69  g to end and.wri
12c20 74 65 20 70 61 67 65 73 20 66 6f 75 6e 64 20 69  te pages found i
12c30 6e 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20 62 61  n the journal ba
12c40 63 6b 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61  ck into the data
12c50 62 61 73 65 20 66 69 6c 65 20 61 74 20 74 68 65  base file at the
12c60 0a 61 70 70 72 6f 70 72 69 61 74 65 20 6c 6f 63  .appropriate loc
12c70 61 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 4c  ation.</p>..<p>L
12c80 65 74 20 74 68 65 20 64 61 74 61 62 61 73 65 20  et the database 
12c90 70 61 67 65 20 73 69 7a 65 20 28 74 68 65 20 76  page size (the v
12ca0 61 6c 75 65 20 6f 66 20 74 68 65 20 69 6e 74 65  alue of the inte
12cb0 67 65 72 20 61 74 20 6f 66 66 73 65 74 20 32 34  ger at offset 24
12cc0 20 0a 69 6e 20 74 68 65 20 6a 6f 75 72 6e 61 6c   .in the journal
12cd0 20 68 65 61 64 65 72 29 20 62 65 20 4e 2e 0a 54   header) be N..T
12ce0 68 65 6e 20 74 68 65 20 66 6f 72 6d 61 74 20 6f  hen the format o
12cf0 66 20 61 20 70 61 67 65 20 72 65 63 6f 72 64 20  f a page record 
12d00 69 73 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f  is as follows:</
12d10 70 3e 0a 0a 3c 63 65 6e 74 65 72 3e 0a 3c 69 3e  p>..<center>.<i>
12d20 52 6f 6c 6c 62 61 63 6b 20 4a 6f 75 72 6e 61 6c  Rollback Journal
12d30 20 50 61 67 65 20 52 65 63 6f 72 64 20 46 6f 72   Page Record For
12d40 6d 61 74 3c 2f 69 3e 3c 62 72 3e 0a 3c 74 61 62  mat</i><br>.<tab
12d50 6c 65 20 77 69 64 74 68 3d 22 38 30 25 22 20 62  le width="80%" b
12d60 6f 72 64 65 72 3d 31 3e 0a 3c 74 72 3e 3c 74 68  order=1>.<tr><th
12d70 3e 4f 66 66 73 65 74 3c 74 68 3e 53 69 7a 65 3c  >Offset<th>Size<
12d80 74 68 3e 44 65 73 63 72 69 70 74 69 6f 6e 0a 3c  th>Description.<
12d90 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
12da0 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 30  p align=center>0
12db0 0a 20 20 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d  .    <td valign=
12dc0 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
12dd0 3e 34 0a 20 20 20 20 3c 74 64 3e 54 68 65 20 70  >4.    <td>The p
12de0 61 67 65 20 6e 75 6d 62 65 72 20 69 6e 20 74 68  age number in th
12df0 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a  e database file.
12e00 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74  <tr><td valign=t
12e10 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
12e20 34 0a 20 20 20 20 3c 74 64 20 76 61 6c 69 67 6e  4.    <td valign
12e30 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
12e40 72 3e 4e 0a 20 20 20 20 3c 74 64 3e 4f 72 69 67  r>N.    <td>Orig
12e50 69 6e 61 6c 20 63 6f 6e 74 65 6e 74 20 6f 66 20  inal content of 
12e60 74 68 65 20 70 61 67 65 20 70 72 69 6f 72 20 74  the page prior t
12e70 6f 20 74 68 65 20 73 74 61 72 74 20 6f 66 20 74  o the start of t
12e80 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 3c  he transaction.<
12e90 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
12ea0 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 4e  p align=center>N
12eb0 2b 34 0a 20 20 20 20 3c 74 64 20 76 61 6c 69 67  +4.    <td valig
12ec0 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
12ed0 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 43 68 65  er>4.    <td>Che
12ee0 63 6b 73 75 6d 0a 3c 2f 74 61 62 6c 65 3e 0a 3c  cksum.</table>.<
12ef0 2f 63 65 6e 74 65 72 3e 0a 0a 0a 3c 70 3e 5e 28  /center>...<p>^(
12f00 54 68 65 20 63 68 65 63 6b 73 75 6d 20 69 73 20  The checksum is 
12f10 61 6e 20 75 6e 73 69 67 6e 65 64 20 33 32 2d 62  an unsigned 32-b
12f20 69 74 20 69 6e 74 65 67 65 72 20 63 6f 6d 70 75  it integer compu
12f30 74 65 64 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c  ted as follows:<
12f40 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 49 6e  /p>..<ol>.<li>In
12f50 69 74 69 61 6c 69 7a 65 20 74 68 65 20 63 68 65  itialize the che
12f60 63 6b 73 75 6d 20 74 6f 20 74 68 65 20 63 68 65  cksum to the che
12f70 63 6b 73 75 6d 20 6e 6f 6e 63 65 20 76 61 6c 75  cksum nonce valu
12f80 65 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 0a 6a  e found in the.j
12f90 6f 75 72 6e 61 6c 20 68 65 61 64 65 72 20 61 74  ournal header at
12fa0 20 6f 66 66 73 65 74 20 31 32 2e 0a 3c 6c 69 3e   offset 12..<li>
12fb0 49 6e 69 74 69 61 6c 69 7a 65 20 69 6e 64 65 78  Initialize index
12fc0 20 58 20 74 6f 20 62 65 20 4e 2d 32 30 30 20 28   X to be N-200 (
12fd0 77 68 65 72 65 20 4e 20 69 73 20 74 68 65 20 73  where N is the s
12fe0 69 7a 65 20 6f 66 20 61 20 64 61 74 61 62 61 73  ize of a databas
12ff0 65 20 70 61 67 65 0a 69 6e 20 62 79 74 65 73 2e  e page.in bytes.
13000 0a 3c 6c 69 3e 49 6e 74 65 72 70 72 65 74 20 74  .<li>Interpret t
13010 68 65 20 62 79 74 65 20 61 74 20 6f 66 66 73 65  he byte at offse
13020 74 20 58 20 69 6e 74 6f 20 74 68 65 20 70 61 67  t X into the pag
13030 65 20 61 73 20 61 6e 20 38 2d 62 69 74 20 75 6e  e as an 8-bit un
13040 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 0a 20  signed integer. 
13050 61 6e 64 20 61 64 64 20 74 68 65 20 76 61 6c 75  and add the valu
13060 65 20 6f 66 20 74 68 61 74 20 69 6e 74 65 67 65  e of that intege
13070 72 20 74 6f 20 74 68 65 20 63 68 65 63 6b 73 75  r to the checksu
13080 6d 2e 0a 3c 6c 69 3e 53 75 62 74 72 61 63 74 20  m..<li>Subtract 
13090 32 30 30 20 66 72 6f 6d 20 58 2e 0a 3c 6c 69 3e  200 from X..<li>
130a0 49 66 20 58 20 69 73 20 67 72 65 61 74 65 72 20  If X is greater 
130b0 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f  than or equal to
130c0 20 7a 65 72 6f 2c 20 67 6f 20 62 61 63 6b 20 74   zero, go back t
130d0 6f 20 73 74 65 70 20 33 2e 0a 3c 2f 6f 6c 3e 29  o step 3..</ol>)
130e0 5e 0a 0a 3c 70 3e 54 68 65 20 63 68 65 63 6b 73  ^..<p>The checks
130f0 75 6d 20 76 61 6c 75 65 20 69 73 20 75 73 65 64  um value is used
13100 20 74 6f 20 67 75 61 72 64 20 61 67 61 69 6e 73   to guard agains
13110 74 20 69 6e 63 6f 6d 70 6c 65 74 65 20 77 72 69  t incomplete wri
13120 74 65 73 20 6f 66 0a 61 20 6a 6f 75 72 6e 61 6c  tes of.a journal
13130 20 70 61 67 65 20 72 65 63 6f 72 64 20 66 6f 6c   page record fol
13140 6c 6f 77 69 6e 67 20 61 20 70 6f 77 65 72 20 66  lowing a power f
13150 61 69 6c 75 72 65 2e 20 20 41 20 64 69 66 66 65  ailure.  A diffe
13160 72 65 6e 74 20 72 61 6e 64 6f 6d 20 6e 6f 6e 63  rent random nonc
13170 65 0a 69 73 20 75 73 65 64 20 65 61 63 68 20 74  e.is used each t
13180 69 6d 65 20 61 20 74 72 61 6e 73 61 63 74 69 6f  ime a transactio
13190 6e 20 69 73 20 73 74 61 72 74 65 64 20 69 6e 20  n is started in 
131a0 6f 72 64 65 72 20 74 6f 20 6d 69 6e 69 6d 69 7a  order to minimiz
131b0 65 20 74 68 65 20 72 69 73 6b 0a 74 68 61 74 20  e the risk.that 
131c0 75 6e 77 72 69 74 74 65 6e 20 73 65 63 74 6f 72  unwritten sector
131d0 73 20 6d 69 67 68 74 20 62 79 20 63 68 61 6e 63  s might by chanc
131e0 65 20 63 6f 6e 74 61 69 6e 20 64 61 74 61 20 66  e contain data f
131f0 72 6f 6d 20 74 68 65 20 73 61 6d 65 20 70 61 67  rom the same pag
13200 65 0a 74 68 61 74 20 77 61 73 20 61 20 70 61 72  e.that was a par
13210 74 20 6f 66 20 70 72 69 6f 72 20 6a 6f 75 72 6e  t of prior journ
13220 61 6c 73 2e 20 20 42 79 20 63 68 61 6e 67 69 6e  als.  By changin
13230 67 20 74 68 65 20 6e 6f 6e 63 65 20 66 6f 72 20  g the nonce for 
13240 65 61 63 68 0a 74 72 61 6e 73 61 63 74 69 6f 6e  each.transaction
13250 2c 20 73 74 61 6c 65 20 64 61 74 61 20 6f 6e 20  , stale data on 
13260 64 69 73 6b 20 77 69 6c 6c 20 73 74 69 6c 6c 20  disk will still 
13270 67 65 6e 65 72 61 74 65 20 61 6e 20 69 6e 63 6f  generate an inco
13280 72 72 65 63 74 20 63 68 65 63 6b 73 75 6d 0a 61  rrect checksum.a
13290 6e 64 20 62 65 20 64 65 74 65 63 74 65 64 20 77  nd be detected w
132a0 69 74 68 20 68 69 67 68 20 70 72 6f 62 61 62 69  ith high probabi
132b0 6c 69 74 79 2e 20 20 54 68 65 20 63 68 65 63 6b  lity.  The check
132c0 73 75 6d 20 6f 6e 6c 79 20 75 73 65 73 20 61 20  sum only uses a 
132d0 73 70 61 72 73 65 20 73 61 6d 70 6c 65 0a 6f 66  sparse sample.of
132e0 20 33 32 2d 62 69 74 20 77 6f 72 64 73 20 66 72   32-bit words fr
132f0 6f 6d 20 74 68 65 20 64 61 74 61 20 72 65 63 6f  om the data reco
13300 72 64 20 66 6f 72 20 70 65 72 66 6f 72 6d 61 6e  rd for performan
13310 63 65 20 72 65 61 73 6f 6e 73 20 2d 20 64 65 73  ce reasons - des
13320 69 67 6e 20 73 74 75 64 69 65 73 20 0a 64 75 72  ign studies .dur
13330 69 6e 67 20 74 68 65 20 70 6c 61 6e 6e 69 6e 67  ing the planning
13340 20 70 68 61 73 65 73 20 6f 66 20 53 51 4c 69 74   phases of SQLit
13350 65 20 33 2e 30 2e 30 20 73 68 6f 77 65 64 0a 61  e 3.0.0 showed.a
13360 20 73 69 67 6e 69 66 69 63 61 6e 74 20 70 65 72   significant per
13370 66 6f 72 6d 61 6e 63 65 20 68 69 74 20 69 6e 20  formance hit in 
13380 63 68 65 63 6b 73 75 6d 6d 69 6e 67 20 74 68 65  checksumming the
13390 20 65 6e 74 69 72 65 20 70 61 67 65 2e 3c 2f 70   entire page.</p
133a0 3e 0a 0a 3c 70 3e 4c 65 74 20 74 68 65 20 70 61  >..<p>Let the pa
133b0 67 65 20 63 6f 75 6e 74 20 76 61 6c 75 65 20 61  ge count value a
133c0 74 20 6f 66 66 73 65 74 20 38 20 69 6e 20 74 68  t offset 8 in th
133d0 65 20 6a 6f 75 72 6e 61 6c 20 68 65 61 64 65 72  e journal header
133e0 20 62 65 20 4d 2e 0a 5e 49 66 20 4d 20 69 73 20   be M..^If M is 
133f0 67 72 65 61 74 65 72 20 74 68 61 6e 20 7a 65 72  greater than zer
13400 6f 20 74 68 65 6e 20 61 66 74 65 72 20 4d 20 70  o then after M p
13410 61 67 65 20 72 65 63 6f 72 64 73 20 74 68 65 20  age records the 
13420 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 0a 6d 61 79  journal file.may
13430 20 62 65 20 7a 65 72 6f 20 70 61 64 64 65 64 20   be zero padded 
13440 6f 75 74 20 74 6f 20 74 68 65 20 6e 65 78 74 20  out to the next 
13450 6d 75 6c 74 69 70 6c 65 20 6f 66 20 74 68 65 20  multiple of the 
13460 73 65 63 74 6f 72 20 73 69 7a 65 20 61 6e 64 20  sector size and 
13470 61 6e 6f 74 68 65 72 0a 6a 6f 75 72 6e 61 6c 20  another.journal 
13480 68 65 61 64 65 72 20 6d 61 79 20 62 65 20 69 6e  header may be in
13490 73 65 72 74 65 64 2e 20 20 5e 41 6c 6c 20 6a 6f  serted.  ^All jo
134a0 75 72 6e 61 6c 20 68 65 61 64 65 72 73 20 77 69  urnal headers wi
134b0 74 68 69 6e 20 74 68 65 20 73 61 6d 65 0a 6a 6f  thin the same.jo
134c0 75 72 6e 61 6c 20 6d 75 73 74 20 63 6f 6e 74 61  urnal must conta
134d0 69 6e 20 74 68 65 20 73 61 6d 65 20 64 61 74 61  in the same data
134e0 62 61 73 65 20 70 61 67 65 20 73 69 7a 65 20 61  base page size a
134f0 6e 64 20 73 65 63 74 6f 72 20 73 69 7a 65 2e 3c  nd sector size.<
13500 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20 4d 20 69 73  /p>..<p>^If M is
13510 20 2d 31 20 69 6e 20 74 68 65 20 69 6e 69 74 69   -1 in the initi
13520 61 6c 20 6a 6f 75 72 6e 61 6c 20 68 65 61 64 65  al journal heade
13530 72 2c 20 74 68 65 6e 20 74 68 65 20 6e 75 6d 62  r, then the numb
13540 65 72 20 6f 66 20 70 61 67 65 20 72 65 63 6f 72  er of page recor
13550 64 73 0a 74 68 61 74 20 66 6f 6c 6c 6f 77 20 69  ds.that follow i
13560 73 20 63 6f 6d 70 75 74 65 64 20 62 79 20 63 6f  s computed by co
13570 6d 70 75 74 69 6e 67 20 68 6f 77 20 6d 61 6e 79  mputing how many
13580 20 70 61 67 65 20 72 65 63 6f 72 64 73 20 77 69   page records wi
13590 6c 6c 20 66 69 74 20 69 6e 0a 74 68 65 20 61 76  ll fit in.the av
135a0 61 69 6c 61 62 6c 65 20 73 70 61 63 65 20 6f 66  ailable space of
135b0 20 74 68 65 20 72 65 6d 61 69 6e 64 65 72 20 6f   the remainder o
135c0 66 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20 66 69  f the journal fi
135d0 6c 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  le.</p>..<tcl>hd
135e0 5f 66 72 61 67 6d 65 6e 74 20 77 61 6c 66 6f 72  _fragment walfor
135f0 6d 61 74 20 7b 57 41 4c 20 66 6f 72 6d 61 74 7d  mat {WAL format}
13600 3c 2f 74 63 6c 3e 0a 3c 68 31 3e 54 68 65 20 57  </tcl>.<h1>The W
13610 72 69 74 65 2d 41 68 65 61 64 20 4c 6f 67 3c 2f  rite-Ahead Log</
13620 68 31 3e 0a 0a 3c 70 3e 42 65 67 69 6e 6e 69 6e  h1>..<p>Beginnin
13630 67 20 77 69 74 68 20 5b 76 65 72 73 69 6f 6e 20  g with [version 
13640 33 2e 37 2e 30 5d 20 28 5b 64 61 74 65 6f 66 3a  3.7.0] ([dateof:
13650 33 2e 37 2e 30 5d 29 2c 20 0a 53 51 4c 69 74 65  3.7.0]), .SQLite
13660 20 73 75 70 70 6f 72 74 73 20 61 20 6e 65 77 20   supports a new 
13670 74 72 61 6e 73 61 63 74 69 6f 6e 0a 63 6f 6e 74  transaction.cont
13680 72 6f 6c 20 6d 65 63 68 61 6e 69 73 6d 20 63 61  rol mechanism ca
13690 6c 6c 65 64 20 22 5b 57 41 4c 20 7c 20 77 72 69  lled "[WAL | wri
136a0 74 65 2d 61 68 65 61 64 20 6c 6f 67 5d 22 20 6f  te-ahead log]" o
136b0 72 20 22 5b 57 41 4c 5d 22 2e 0a 5e 57 68 65 6e  r "[WAL]"..^When
136c0 20 61 20 64 61 74 61 62 61 73 65 20 69 73 20 69   a database is i
136d0 6e 20 57 41 4c 20 6d 6f 64 65 2c 20 61 6c 6c 20  n WAL mode, all 
136e0 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 74 6f 20 74  connections to t
136f0 68 61 74 20 64 61 74 61 62 61 73 65 20 6d 75 73  hat database mus
13700 74 0a 75 73 65 20 74 68 65 20 57 41 4c 2e 20 20  t.use the WAL.  
13710 5e 41 20 70 61 72 74 69 63 75 6c 61 72 20 64 61  ^A particular da
13720 74 61 62 61 73 65 20 77 69 6c 6c 20 75 73 65 20  tabase will use 
13730 65 69 74 68 65 72 20 61 20 72 6f 6c 6c 62 61 63  either a rollbac
13740 6b 20 6a 6f 75 72 6e 61 6c 0a 6f 72 20 61 20 57  k journal.or a W
13750 41 4c 2c 20 62 75 74 20 6e 6f 74 20 62 6f 74 68  AL, but not both
13760 20 61 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d   at the same tim
13770 65 2e 0a 5e 54 68 65 20 57 41 4c 20 69 73 20 61  e..^The WAL is a
13780 6c 77 61 79 73 20 6c 6f 63 61 74 65 64 20 69 6e  lways located in
13790 20 74 68 65 20 73 61 6d 65 20 64 69 72 65 63 74   the same direct
137a0 6f 72 79 20 61 73 20 74 68 65 20 64 61 74 61 62  ory as the datab
137b0 61 73 65 0a 66 69 6c 65 20 61 6e 64 20 68 61 73  ase.file and has
137c0 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 61   the same name a
137d0 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  s the database f
137e0 69 6c 65 20 62 75 74 20 77 69 74 68 20 74 68 65  ile but with the
137f0 20 73 74 72 69 6e 67 0a 22 3c 74 74 3e 2d 77 61   string."<tt>-wa
13800 6c 3c 2f 74 74 3e 22 20 61 70 70 65 6e 64 65 64  l</tt>" appended
13810 2e 3c 2f 70 3e 0a 0a 3c 68 32 3e 57 41 4c 20 46  .</p>..<h2>WAL F
13820 69 6c 65 20 46 6f 72 6d 61 74 3c 2f 68 32 3e 0a  ile Format</h2>.
13830 0a 3c 70 3e 41 20 57 41 4c 20 66 69 6c 65 20 63  .<p>A WAL file c
13840 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 68 65 61  onsists of a hea
13850 64 65 72 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20  der followed by 
13860 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 22 66 72  zero or more "fr
13870 61 6d 65 73 22 2e 0a 45 61 63 68 20 66 72 61 6d  ames"..Each fram
13880 65 20 72 65 63 6f 72 64 73 20 74 68 65 20 72 65  e records the re
13890 76 69 73 65 64 20 63 6f 6e 74 65 6e 74 20 6f 66  vised content of
138a0 20 61 20 73 69 6e 67 6c 65 20 70 61 67 65 20 66   a single page f
138b0 72 6f 6d 20 74 68 65 0a 64 61 74 61 62 61 73 65  rom the.database
138c0 20 66 69 6c 65 2e 20 20 41 6c 6c 20 63 68 61 6e   file.  All chan
138d0 67 65 73 20 74 6f 20 74 68 65 20 64 61 74 61 62  ges to the datab
138e0 61 73 65 20 61 72 65 20 72 65 63 6f 72 64 65 64  ase are recorded
138f0 20 62 79 20 77 72 69 74 69 6e 67 0a 66 72 61 6d   by writing.fram
13900 65 73 20 69 6e 74 6f 20 74 68 65 20 57 41 4c 2e  es into the WAL.
13910 20 20 54 72 61 6e 73 61 63 74 69 6f 6e 73 20 63    Transactions c
13920 6f 6d 6d 69 74 20 77 68 65 6e 20 61 20 66 72 61  ommit when a fra
13930 6d 65 20 69 73 20 77 72 69 74 74 65 6e 20 74 68  me is written th
13940 61 74 0a 63 6f 6e 74 61 69 6e 73 20 61 20 63 6f  at.contains a co
13950 6d 6d 69 74 20 6d 61 72 6b 65 72 2e 20 20 5e 41  mmit marker.  ^A
13960 20 73 69 6e 67 6c 65 20 57 41 4c 20 63 61 6e 20   single WAL can 
13970 61 6e 64 20 75 73 75 61 6c 6c 79 20 64 6f 65 73  and usually does
13980 20 72 65 63 6f 72 64 20 0a 6d 75 6c 74 69 70 6c   record .multipl
13990 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e 20  e transactions. 
139a0 20 50 65 72 69 6f 64 69 63 61 6c 6c 79 2c 20 74   Periodically, t
139b0 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68  he content of th
139c0 65 20 57 41 4c 20 69 73 0a 74 72 61 6e 73 66 65  e WAL is.transfe
139d0 72 72 65 64 20 62 61 63 6b 20 69 6e 74 6f 20 74  rred back into t
139e0 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
139f0 20 69 6e 20 61 6e 20 6f 70 65 72 61 74 69 6f 6e   in an operation
13a00 20 63 61 6c 6c 65 64 20 61 0a 22 63 68 65 63 6b   called a."check
13a10 70 6f 69 6e 74 22 2e 3c 2f 70 3e 0a 0a 3c 70 3e  point".</p>..<p>
13a20 5e 41 20 73 69 6e 67 6c 65 20 57 41 4c 20 66 69  ^A single WAL fi
13a30 6c 65 20 63 61 6e 20 62 65 20 72 65 75 73 65 64  le can be reused
13a40 20 6d 75 6c 74 69 70 6c 65 20 74 69 6d 65 73 2e   multiple times.
13a50 20 20 5e 49 6e 20 6f 74 68 65 72 20 77 6f 72 64    ^In other word
13a60 73 2c 20 74 68 65 0a 57 41 4c 20 63 61 6e 20 66  s, the.WAL can f
13a70 69 6c 6c 20 75 70 20 77 69 74 68 20 66 72 61 6d  ill up with fram
13a80 65 73 20 61 6e 64 20 74 68 65 6e 20 62 65 20 63  es and then be c
13a90 68 65 63 6b 70 6f 69 6e 74 65 64 20 61 6e 64 20  heckpointed and 
13aa0 74 68 65 6e 20 6e 65 77 0a 66 72 61 6d 65 73 20  then new.frames 
13ab0 63 61 6e 20 6f 76 65 72 77 72 69 74 65 20 74 68  can overwrite th
13ac0 65 20 6f 6c 64 20 6f 6e 65 73 2e 20 20 5e 41 20  e old ones.  ^A 
13ad0 57 41 4c 20 61 6c 77 61 79 73 20 67 72 6f 77 73  WAL always grows
13ae0 20 66 72 6f 6d 20 62 65 67 69 6e 6e 69 6e 67 0a   from beginning.
13af0 74 6f 77 61 72 64 20 74 68 65 20 65 6e 64 2e 20  toward the end. 
13b00 20 43 68 65 63 6b 73 75 6d 73 20 61 6e 64 20 63   Checksums and c
13b10 6f 75 6e 74 65 72 73 20 61 74 74 61 63 68 65 64  ounters attached
13b20 20 74 6f 20 65 61 63 68 20 66 72 61 6d 65 20 61   to each frame a
13b30 72 65 0a 75 73 65 64 20 74 6f 20 64 65 74 65 72  re.used to deter
13b40 6d 69 6e 65 20 77 68 69 63 68 20 66 72 61 6d 65  mine which frame
13b50 73 20 77 69 74 68 69 6e 20 74 68 65 20 57 41 4c  s within the WAL
13b60 20 61 72 65 20 76 61 6c 69 64 20 61 6e 64 20 77   are valid and w
13b70 68 69 63 68 0a 61 72 65 20 6c 65 66 74 6f 76 65  hich.are leftove
13b80 72 73 20 66 72 6f 6d 20 70 72 69 6f 72 20 63 68  rs from prior ch
13b90 65 63 6b 70 6f 69 6e 74 73 2e 3c 2f 70 3e 0a 0a  eckpoints.</p>..
13ba0 3c 70 3e 5e 28 54 68 65 20 57 41 4c 20 68 65 61  <p>^(The WAL hea
13bb0 64 65 72 20 69 73 20 33 32 20 62 79 74 65 73 20  der is 32 bytes 
13bc0 69 6e 20 73 69 7a 65 20 61 6e 64 20 63 6f 6e 73  in size and cons
13bd0 69 73 74 73 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ists of the foll
13be0 6f 77 69 6e 67 20 65 69 67 68 74 0a 62 69 67 2d  owing eight.big-
13bf0 65 6e 64 69 61 6e 20 33 32 2d 62 69 74 20 75 6e  endian 32-bit un
13c00 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 76  signed integer v
13c10 61 6c 75 65 73 3a 3c 2f 70 3e 0a 0a 3c 63 65 6e  alues:</p>..<cen
13c20 74 65 72 3e 0a 3c 69 3e 57 41 4c 20 48 65 61 64  ter>.<i>WAL Head
13c30 65 72 20 46 6f 72 6d 61 74 3c 2f 69 3e 3c 62 72  er Format</i><br
13c40 3e 0a 3c 74 61 62 6c 65 20 77 69 64 74 68 3d 22  >.<table width="
13c50 38 30 25 22 20 62 6f 72 64 65 72 3d 31 3e 0a 3c  80%" border=1>.<
13c60 74 72 3e 3c 74 68 3e 4f 66 66 73 65 74 3c 74 68  tr><th>Offset<th
13c70 3e 53 69 7a 65 3c 74 68 3e 44 65 73 63 72 69 70  >Size<th>Descrip
13c80 74 69 6f 6e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c  tion.<tr><td val
13c90 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
13ca0 6e 74 65 72 3e 30 3c 74 64 20 76 61 6c 69 67 6e  nter>0<td valign
13cb0 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
13cc0 72 3e 34 0a 20 20 20 20 3c 74 64 3e 4d 61 67 69  r>4.    <td>Magi
13cd0 63 20 6e 75 6d 62 65 72 2e 20 20 30 78 33 37 37  c number.  0x377
13ce0 66 30 36 38 32 20 6f 72 20 30 78 33 37 37 66 30  f0682 or 0x377f0
13cf0 36 38 33 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  683.<tr><td vali
13d00 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
13d10 74 65 72 3e 34 3c 74 64 20 76 61 6c 69 67 6e 3d  ter>4<td valign=
13d20 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
13d30 3e 34 0a 20 20 20 20 3c 74 64 3e 46 69 6c 65 20  >4.    <td>File 
13d40 66 6f 72 6d 61 74 20 76 65 72 73 69 6f 6e 2e 20  format version. 
13d50 20 43 75 72 72 65 6e 74 6c 79 20 33 30 30 37 30   Currently 30070
13d60 30 30 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  00..<tr><td vali
13d70 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
13d80 74 65 72 3e 38 3c 74 64 20 76 61 6c 69 67 6e 3d  ter>8<td valign=
13d90 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
13da0 3e 34 0a 20 20 20 20 3c 74 64 3e 44 61 74 61 62  >4.    <td>Datab
13db0 61 73 65 20 70 61 67 65 20 73 69 7a 65 2e 20 20  ase page size.  
13dc0 45 78 61 6d 70 6c 65 3a 20 31 30 32 34 0a 3c 74  Example: 1024.<t
13dd0 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
13de0 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 32   align=center>12
13df0 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
13e00 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20  lign=center>4.  
13e10 20 20 3c 74 64 3e 43 68 65 63 6b 70 6f 69 6e 74    <td>Checkpoint
13e20 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72   sequence number
13e30 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d  .<tr><td valign=
13e40 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
13e50 3e 31 36 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  >16<td valign=to
13e60 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34  p align=center>4
13e70 0a 20 20 20 20 3c 74 64 3e 53 61 6c 74 2d 31 3a  .    <td>Salt-1:
13e80 20 72 61 6e 64 6f 6d 20 69 6e 74 65 67 65 72 20   random integer 
13e90 69 6e 63 72 65 6d 65 6e 74 65 64 20 77 69 74 68  incremented with
13ea0 20 65 61 63 68 20 63 68 65 63 6b 70 6f 69 6e 74   each checkpoint
13eb0 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d  .<tr><td valign=
13ec0 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
13ed0 3e 32 30 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  >20<td valign=to
13ee0 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34  p align=center>4
13ef0 0a 20 20 20 20 3c 74 64 3e 53 61 6c 74 2d 32 3a  .    <td>Salt-2:
13f00 20 61 20 64 69 66 66 65 72 65 6e 74 20 72 61 6e   a different ran
13f10 64 6f 6d 20 6e 75 6d 62 65 72 20 66 6f 72 20 65  dom number for e
13f20 61 63 68 20 63 68 65 63 6b 70 6f 69 6e 74 0a 3c  ach checkpoint.<
13f30 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
13f40 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32  p align=center>2
13f50 34 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  4<td valign=top 
13f60 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20  align=center>4. 
13f70 20 20 20 3c 74 64 3e 43 68 65 63 6b 73 75 6d 2d     <td>Checksum-
13f80 31 3a 20 46 69 72 73 74 20 70 61 72 74 20 6f 66  1: First part of
13f90 20 61 20 63 68 65 63 6b 73 75 6d 20 6f 6e 20 74   a checksum on t
13fa0 68 65 20 66 69 72 73 74 20 32 34 20 62 79 74 65  he first 24 byte
13fb0 73 20 6f 66 20 68 65 61 64 65 72 0a 3c 74 72 3e  s of header.<tr>
13fc0 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
13fd0 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32 38 3c 74  lign=center>28<t
13fe0 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
13ff0 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20  gn=center>4.    
14000 3c 74 64 3e 43 68 65 63 6b 73 75 6d 2d 32 3a 20  <td>Checksum-2: 
14010 53 65 63 6f 6e 64 20 70 61 72 74 20 6f 66 20 74  Second part of t
14020 68 65 20 63 68 65 63 6b 73 75 6d 20 6f 6e 20 74  he checksum on t
14030 68 65 20 66 69 72 73 74 20 32 34 20 62 79 74 65  he first 24 byte
14040 73 20 6f 66 20 68 65 61 64 65 72 0a 3c 2f 74 61  s of header.</ta
14050 62 6c 65 3e 0a 3c 2f 63 65 6e 74 65 72 3e 29 5e  ble>.</center>)^
14060 0a 0a 3c 70 3e 5e 49 6d 6d 65 64 69 61 74 65 6c  ..<p>^Immediatel
14070 79 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20  y following the 
14080 77 61 6c 2d 68 65 61 64 65 72 20 61 72 65 20 7a  wal-header are z
14090 65 72 6f 20 6f 72 20 6d 6f 72 65 20 66 72 61 6d  ero or more fram
140a0 65 73 2e 20 5e 45 61 63 68 0a 66 72 61 6d 65 20  es. ^Each.frame 
140b0 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 32 34  consists of a 24
140c0 2d 62 79 74 65 20 66 72 61 6d 65 2d 68 65 61 64  -byte frame-head
140d0 65 72 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61  er followed by a
140e0 20 3c 69 3e 70 61 67 65 2d 73 69 7a 65 3c 2f 69   <i>page-size</i
140f0 3e 20 62 79 74 65 73 0a 6f 66 20 70 61 67 65 20  > bytes.of page 
14100 64 61 74 61 2e 20 5e 28 54 68 65 20 66 72 61 6d  data. ^(The fram
14110 65 2d 68 65 61 64 65 72 20 69 73 20 73 69 78 20  e-header is six 
14120 62 69 67 2d 65 6e 64 69 61 6e 20 33 32 2d 62 69  big-endian 32-bi
14130 74 20 75 6e 73 69 67 6e 65 64 20 0a 69 6e 74 65  t unsigned .inte
14140 67 65 72 20 76 61 6c 75 65 73 2c 20 61 73 20 66  ger values, as f
14150 6f 6c 6c 6f 77 73 3a 0a 0a 3c 63 65 6e 74 65 72  ollows:..<center
14160 3e 0a 3c 69 3e 57 41 4c 20 46 72 61 6d 65 20 48  >.<i>WAL Frame H
14170 65 61 64 65 72 20 46 6f 72 6d 61 74 3c 2f 69 3e  eader Format</i>
14180 3c 62 72 3e 0a 3c 74 61 62 6c 65 20 77 69 64 74  <br>.<table widt
14190 68 3d 22 38 30 25 22 20 62 6f 72 64 65 72 3d 31  h="80%" border=1
141a0 3e 0a 3c 74 72 3e 3c 74 68 3e 4f 66 66 73 65 74  >.<tr><th>Offset
141b0 3c 74 68 3e 53 69 7a 65 3c 74 68 3e 44 65 73 63  <th>Size<th>Desc
141c0 72 69 70 74 69 6f 6e 0a 3c 74 72 3e 3c 74 64 20  ription.<tr><td 
141d0 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
141e0 3d 63 65 6e 74 65 72 3e 30 3c 74 64 20 76 61 6c  =center>0<td val
141f0 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
14200 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 50  nter>4.    <td>P
14210 61 67 65 20 6e 75 6d 62 65 72 0a 3c 74 72 3e 3c  age number.<tr><
14220 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
14230 69 67 6e 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20  ign=center>4<td 
14240 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
14250 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74  =center>4.    <t
14260 64 3e 46 6f 72 20 63 6f 6d 6d 69 74 20 72 65 63  d>For commit rec
14270 6f 72 64 73 2c 20 74 68 65 20 73 69 7a 65 20 6f  ords, the size o
14280 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  f the database f
14290 69 6c 65 20 69 6e 20 70 61 67 65 73 0a 20 20 20  ile in pages.   
142a0 20 20 20 20 20 61 66 74 65 72 20 74 68 65 20 63       after the c
142b0 6f 6d 6d 69 74 2e 20 20 46 6f 72 20 61 6c 6c 20  ommit.  For all 
142c0 6f 74 68 65 72 20 72 65 63 6f 72 64 73 2c 20 7a  other records, z
142d0 65 72 6f 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c  ero..<tr><td val
142e0 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
142f0 6e 74 65 72 3e 38 3c 74 64 20 76 61 6c 69 67 6e  nter>8<td valign
14300 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
14310 72 3e 34 0a 20 20 20 20 3c 74 64 3e 53 61 6c 74  r>4.    <td>Salt
14320 2d 31 20 63 6f 70 69 65 64 20 66 72 6f 6d 20 74  -1 copied from t
14330 68 65 20 57 41 4c 20 68 65 61 64 65 72 0a 3c 74  he WAL header.<t
14340 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
14350 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 32   align=center>12
14360 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
14370 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20  lign=center>4.  
14380 20 20 3c 74 64 3e 53 61 6c 74 2d 32 20 63 6f 70    <td>Salt-2 cop
14390 69 65 64 20 66 72 6f 6d 20 74 68 65 20 57 41 4c  ied from the WAL
143a0 20 68 65 61 64 65 72 0a 3c 74 72 3e 3c 74 64 20   header.<tr><td 
143b0 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
143c0 3d 63 65 6e 74 65 72 3e 31 36 3c 74 64 20 76 61  =center>16<td va
143d0 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
143e0 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e  enter>4.    <td>
143f0 43 68 65 63 6b 73 75 6d 2d 31 3a 20 20 43 75 6d  Checksum-1:  Cum
14400 75 6c 61 74 69 76 65 20 63 68 65 63 6b 73 75 6d  ulative checksum
14410 20 75 70 20 74 68 72 6f 75 67 68 20 61 6e 64 20   up through and 
14420 69 6e 63 6c 75 64 69 6e 67 20 74 68 69 73 20 70  including this p
14430 61 67 65 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  age.<tr><td vali
14440 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
14450 74 65 72 3e 32 30 3c 74 64 20 76 61 6c 69 67 6e  ter>20<td valign
14460 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
14470 72 3e 34 0a 20 20 20 20 3c 74 64 3e 43 68 65 63  r>4.    <td>Chec
14480 6b 73 75 6d 2d 32 3a 20 20 53 65 63 6f 6e 64 20  ksum-2:  Second 
14490 68 61 6c 66 20 6f 66 20 74 68 65 20 63 75 6d 75  half of the cumu
144a0 6c 61 74 69 76 65 20 63 68 65 63 6b 73 75 6d 2e  lative checksum.
144b0 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 63 65 6e 74  .</table>.</cent
144c0 65 72 3e 29 5e 0a 0a 5e 28 3c 70 3e 41 20 66 72  er>)^..^(<p>A fr
144d0 61 6d 65 20 69 73 20 63 6f 6e 73 69 64 65 72 65  ame is considere
144e0 64 20 76 61 6c 69 64 20 69 66 20 61 6e 64 20 6f  d valid if and o
144f0 6e 6c 79 20 69 66 20 74 68 65 20 66 6f 6c 6c 6f  nly if the follo
14500 77 69 6e 67 20 63 6f 6e 64 69 74 69 6f 6e 73 20  wing conditions 
14510 61 72 65 0a 74 72 75 65 3a 3c 2f 70 3e 0a 0a 3c  are.true:</p>..<
14520 6f 6c 3e 0a 3c 6c 69 3e 3c 70 3e 54 68 65 20 73  ol>.<li><p>The s
14530 61 6c 74 2d 31 20 61 6e 64 20 73 61 6c 74 2d 32  alt-1 and salt-2
14540 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 66   values in the f
14550 72 61 6d 65 2d 68 65 61 64 65 72 20 6d 61 74 63  rame-header matc
14560 68 0a 20 20 20 20 20 20 20 73 61 6c 74 20 76 61  h.       salt va
14570 6c 75 65 73 20 69 6e 20 74 68 65 20 77 61 6c 2d  lues in the wal-
14580 68 65 61 64 65 72 3c 2f 70 3e 3c 2f 6c 69 3e 0a  header</p></li>.
14590 0a 3c 6c 69 3e 3c 70 3e 54 68 65 20 63 68 65 63  .<li><p>The chec
145a0 6b 73 75 6d 20 76 61 6c 75 65 73 20 69 6e 20 74  ksum values in t
145b0 68 65 20 66 69 6e 61 6c 20 38 20 62 79 74 65 73  he final 8 bytes
145c0 20 6f 66 20 74 68 65 20 66 72 61 6d 65 2d 68 65   of the frame-he
145d0 61 64 65 72 0a 20 20 20 20 20 20 20 65 78 61 63  ader.       exac
145e0 74 6c 79 20 6d 61 74 63 68 20 74 68 65 20 63 68  tly match the ch
145f0 65 63 6b 73 75 6d 20 63 6f 6d 70 75 74 65 64 20  ecksum computed 
14600 63 6f 6e 73 65 63 75 74 69 76 65 6c 79 20 6f 6e  consecutively on
14610 20 74 68 65 0a 20 20 20 20 20 20 20 66 69 72 73   the.       firs
14620 74 20 32 34 20 62 79 74 65 73 20 6f 66 20 74 68  t 24 bytes of th
14630 65 20 57 41 4c 20 68 65 61 64 65 72 20 61 6e 64  e WAL header and
14640 20 74 68 65 20 66 69 72 73 74 20 38 20 62 79 74   the first 8 byt
14650 65 73 20 61 6e 64 0a 20 20 20 20 20 20 20 74 68  es and.       th
14660 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61 6c 6c  e content of all
14670 20 66 72 61 6d 65 73 0a 20 20 20 20 20 20 20 75   frames.       u
14680 70 20 74 6f 20 61 6e 64 20 69 6e 63 6c 75 64 69  p to and includi
14690 6e 67 20 74 68 65 20 63 75 72 72 65 6e 74 20 66  ng the current f
146a0 72 61 6d 65 2e 3c 2f 70 3e 3c 2f 6c 69 3e 3c 2f  rame.</p></li></
146b0 6c 69 3e 0a 3c 2f 6f 6c 3e 29 5e 0a 0a 3c 74 63  li>.</ol>)^..<tc
146c0 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 77 61  l>hd_fragment wa
146d0 6c 63 6b 73 6d 20 7b 57 41 4c 20 63 68 65 63 6b  lcksm {WAL check
146e0 73 75 6d 20 61 6c 67 6f 72 69 74 68 6d 7d 3c 2f  sum algorithm}</
146f0 74 63 6c 3e 0a 3c 68 32 3e 43 68 65 63 6b 73 75  tcl>.<h2>Checksu
14700 6d 20 41 6c 67 6f 72 69 74 68 6d 3c 2f 68 32 3e  m Algorithm</h2>
14710 0a 0a 3c 70 3e 54 68 65 20 63 68 65 63 6b 73 75  ..<p>The checksu
14720 6d 20 69 73 20 63 6f 6d 70 75 74 65 64 20 62 79  m is computed by
14730 20 69 6e 74 65 72 70 72 65 74 69 6e 67 20 74 68   interpreting th
14740 65 20 69 6e 70 75 74 20 61 73 0a 61 6e 20 65 76  e input as.an ev
14750 65 6e 20 6e 75 6d 62 65 72 20 6f 66 20 75 6e 73  en number of uns
14760 69 67 6e 65 64 20 33 32 2d 62 69 74 20 69 6e 74  igned 32-bit int
14770 65 67 65 72 73 3a 20 78 28 30 29 20 74 68 72 6f  egers: x(0) thro
14780 75 67 68 20 78 28 4e 29 2e 0a 5e 54 68 65 20 33  ugh x(N)..^The 3
14790 32 2d 62 69 74 20 69 6e 74 65 67 65 72 73 20 61  2-bit integers a
147a0 72 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 66  re big-endian if
147b0 20 74 68 65 0a 6d 61 67 69 63 20 6e 75 6d 62 65   the.magic numbe
147c0 72 20 69 6e 20 74 68 65 20 66 69 72 73 74 20 34  r in the first 4
147d0 20 62 79 74 65 73 20 6f 66 20 74 68 65 20 57 41   bytes of the WA
147e0 4c 20 68 65 61 64 65 72 20 69 73 20 30 78 33 37  L header is 0x37
147f0 37 66 30 36 38 33 20 61 6e 64 0a 74 68 65 20 69  7f0683 and.the i
14800 6e 74 65 67 65 72 73 20 61 72 65 20 6c 69 74 74  ntegers are litt
14810 6c 65 2d 65 6e 64 69 61 6e 20 69 66 20 74 68 65  le-endian if the
14820 20 6d 61 67 69 63 20 6e 75 6d 62 65 72 20 69 73   magic number is
14830 20 30 78 33 37 37 66 30 36 38 32 2e 0a 5e 54 68   0x377f0682..^Th
14840 65 20 63 68 65 63 6b 73 75 6d 20 76 61 6c 75 65  e checksum value
14850 73 20 61 72 65 20 61 6c 77 61 79 73 20 73 74 6f  s are always sto
14860 72 65 64 20 69 6e 20 74 68 65 20 66 72 61 6d 65  red in the frame
14870 20 68 65 61 64 65 72 20 69 6e 20 61 0a 62 69 67   header in a.big
14880 2d 65 6e 64 69 61 6e 20 66 6f 72 6d 61 74 20 72  -endian format r
14890 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 69  egardless of whi
148a0 63 68 20 62 79 74 65 20 6f 72 64 65 72 20 69 73  ch byte order is
148b0 20 75 73 65 64 20 74 6f 20 63 6f 6d 70 75 74 65   used to compute
148c0 0a 74 68 65 20 63 68 65 63 6b 73 75 6d 2e 3c 2f  .the checksum.</
148d0 70 3e 0a 0a 3c 70 3e 54 68 65 20 63 68 65 63 6b  p>..<p>The check
148e0 73 75 6d 20 61 6c 67 6f 72 69 74 68 6d 20 6f 6e  sum algorithm on
148f0 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 63 6f 6e  ly works for con
14900 74 65 6e 74 20 77 68 69 63 68 20 69 73 20 61 20  tent which is a 
14910 6d 75 6c 74 69 70 6c 65 20 6f 66 0a 38 20 62 79  multiple of.8 by
14920 74 65 73 20 69 6e 20 6c 65 6e 67 74 68 2e 20 20  tes in length.  
14930 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
14940 69 66 20 74 68 65 20 69 6e 70 75 74 73 20 61 72  if the inputs ar
14950 65 20 78 28 30 29 20 74 68 72 6f 75 67 68 20 78  e x(0) through x
14960 28 4e 29 0a 74 68 65 6e 20 4e 20 6d 75 73 74 20  (N).then N must 
14970 62 65 20 6f 64 64 2e 0a 5e 28 54 68 65 20 63 68  be odd..^(The ch
14980 65 63 6b 73 75 6d 20 61 6c 67 6f 72 69 74 68 6d  ecksum algorithm
14990 20 69 73 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a   is as follows:.
149a0 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72  .<blockquote><pr
149b0 65 3e 20 0a 73 30 20 3d 20 73 31 20 3d 20 30 0a  e> .s0 = s1 = 0.
149c0 66 6f 72 20 69 20 66 72 6f 6d 20 30 20 74 6f 20  for i from 0 to 
149d0 6e 2d 31 20 73 74 65 70 20 32 3a 0a 20 20 20 73  n-1 step 2:.   s
149e0 30 20 2b 3d 20 78 28 69 29 20 2b 20 73 31 3b 0a  0 += x(i) + s1;.
149f0 20 20 20 73 31 20 2b 3d 20 78 28 69 2b 31 29 20     s1 += x(i+1) 
14a00 2b 20 73 30 3b 0a 65 6e 64 66 6f 72 0a 23 20 72  + s0;.endfor.# r
14a10 65 73 75 6c 74 20 69 6e 20 73 30 20 61 6e 64 20  esult in s0 and 
14a20 73 31 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b  s1.</pre></block
14a30 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 5e 54 68  quote>)^..<p>^Th
14a40 65 20 6f 75 74 70 75 74 73 20 73 30 20 61 6e 64  e outputs s0 and
14a50 20 73 31 20 61 72 65 20 62 6f 74 68 20 77 65 69   s1 are both wei
14a60 67 68 74 65 64 20 63 68 65 63 6b 73 75 6d 73 20  ghted checksums 
14a70 75 73 69 6e 67 20 46 69 62 6f 6e 61 63 63 69 20  using Fibonacci 
14a80 77 65 69 67 68 74 73 0a 69 6e 20 72 65 76 65 72  weights.in rever
14a90 73 65 20 6f 72 64 65 72 2e 20 20 28 5e 54 68 65  se order.  (^The
14aa0 20 6c 61 72 67 65 73 74 20 46 69 62 6f 6e 61 63   largest Fibonac
14ab0 63 69 20 77 65 69 67 68 74 20 6f 63 63 75 72 73  ci weight occurs
14ac0 20 6f 6e 20 74 68 65 20 66 69 72 73 74 20 65 6c   on the first el
14ad0 65 6d 65 6e 74 0a 6f 66 20 74 68 65 20 73 65 71  ement.of the seq
14ae0 75 65 6e 63 65 20 62 65 69 6e 67 20 73 75 6d 6d  uence being summ
14af0 65 64 2e 29 20 20 5e 54 68 65 20 73 31 20 76 61  ed.)  ^The s1 va
14b00 6c 75 65 20 73 70 61 6e 73 20 61 6c 6c 20 33 32  lue spans all 32
14b10 2d 62 69 74 20 69 6e 74 65 67 65 72 0a 74 65 72  -bit integer.ter
14b20 6d 73 20 6f 66 20 74 68 65 20 73 65 71 75 65 6e  ms of the sequen
14b30 63 65 20 77 68 65 72 65 61 73 20 73 30 20 6f 6d  ce whereas s0 om
14b40 69 74 73 20 74 68 65 20 66 69 6e 61 6c 20 74 65  its the final te
14b50 72 6d 2e 3c 2f 70 3e 0a 0a 3c 68 32 3e 43 68 65  rm.</p>..<h2>Che
14b60 63 6b 70 6f 69 6e 74 20 41 6c 67 6f 72 69 74 68  ckpoint Algorith
14b70 6d 3c 2f 68 32 3e 0a 0a 3c 70 3e 5e 4f 6e 20 61  m</h2>..<p>^On a
14b80 20 5b 63 68 65 63 6b 70 6f 69 6e 74 5d 2c 20 74   [checkpoint], t
14b90 68 65 20 57 41 4c 20 69 73 20 66 69 72 73 74 20  he WAL is first 
14ba0 66 6c 75 73 68 65 64 20 74 6f 20 70 65 72 73 69  flushed to persi
14bb0 73 74 65 6e 74 20 73 74 6f 72 61 67 65 20 75 73  stent storage us
14bc0 69 6e 67 0a 74 68 65 20 78 53 79 6e 63 20 6d 65  ing.the xSync me
14bd0 74 68 6f 64 20 6f 66 20 74 68 65 20 5b 73 71 6c  thod of the [sql
14be0 69 74 65 33 5f 69 6f 5f 6d 65 74 68 6f 64 73 20  ite3_io_methods 
14bf0 7c 20 56 46 53 5d 2e 20 0a 5e 54 68 65 6e 20 76  | VFS]. .^Then v
14c00 61 6c 69 64 20 63 6f 6e 74 65 6e 74 20 6f 66 20  alid content of 
14c10 74 68 65 20 57 41 4c 20 69 73 20 74 72 61 6e 73  the WAL is trans
14c20 66 65 72 72 65 64 20 69 6e 74 6f 20 74 68 65 20  ferred into the 
14c30 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 5e  database file..^
14c40 46 69 6e 61 6c 6c 79 2c 20 74 68 65 20 64 61 74  Finally, the dat
14c50 61 62 61 73 65 20 69 73 20 66 6c 75 73 68 65 64  abase is flushed
14c60 20 74 6f 20 70 65 72 73 69 73 74 65 6e 74 20 73   to persistent s
14c70 74 6f 72 61 67 65 20 75 73 69 6e 67 20 61 6e 6f  torage using ano
14c80 74 68 65 72 0a 78 53 79 6e 63 20 6d 65 74 68 6f  ther.xSync metho
14c90 64 20 63 61 6c 6c 2e 0a 54 68 65 20 78 53 79 6e  d call..The xSyn
14ca0 63 20 6f 70 65 72 61 74 69 6f 6e 73 20 73 65 72  c operations ser
14cb0 76 65 20 61 73 20 77 72 69 74 65 20 62 61 72 72  ve as write barr
14cc0 69 65 72 73 20 2d 20 61 6c 6c 20 77 72 69 74 65  iers - all write
14cd0 73 20 6c 61 75 6e 63 68 65 64 0a 62 65 66 6f 72  s launched.befor
14ce0 65 20 74 68 65 20 78 53 79 6e 63 20 6d 75 73 74  e the xSync must
14cf0 20 63 6f 6d 70 6c 65 74 65 20 62 65 66 6f 72 65   complete before
14d00 20 61 6e 79 20 77 72 69 74 65 20 74 68 61 74 20   any write that 
14d10 6c 61 75 6e 63 68 65 73 20 61 66 74 65 72 20 74  launches after t
14d20 68 65 0a 78 53 79 6e 63 20 62 65 67 69 6e 73 2e  he.xSync begins.
14d30 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 66 74 65 72 20  </p>..<p>^After 
14d40 61 20 63 68 65 63 6b 70 6f 69 6e 74 2c 20 6e 65  a checkpoint, ne
14d50 77 20 77 72 69 74 65 20 74 72 61 6e 73 61 63 74  w write transact
14d60 69 6f 6e 73 20 6f 76 65 72 77 72 69 74 65 0a 74  ions overwrite.t
14d70 68 65 20 57 41 4c 20 66 69 6c 65 20 66 72 6f 6d  he WAL file from
14d80 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 20   the beginning. 
14d90 20 5e 41 74 20 74 68 65 20 73 74 61 72 74 20 6f   ^At the start o
14da0 66 20 74 68 65 20 66 69 72 73 74 20 6e 65 77 0a  f the first new.
14db0 77 72 69 74 65 20 74 72 61 6e 73 61 63 74 69 6f  write transactio
14dc0 6e 2c 20 74 68 65 20 57 41 4c 20 68 65 61 64 65  n, the WAL heade
14dd0 72 20 73 61 6c 74 2d 31 20 76 61 6c 75 65 20 69  r salt-1 value i
14de0 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 0a 61 6e  s incremented.an
14df0 64 20 74 68 65 20 73 61 6c 74 2d 32 20 76 61 6c  d the salt-2 val
14e00 75 65 20 69 73 20 72 61 6e 64 6f 6d 69 7a 65 64  ue is randomized
14e10 2e 20 20 54 68 65 73 65 20 63 68 61 6e 67 65 73  .  These changes
14e20 20 74 6f 20 74 68 65 20 73 61 6c 74 73 20 69 6e   to the salts in
14e30 76 61 6c 69 64 61 74 65 0a 6f 6c 64 20 66 72 61  validate.old fra
14e40 6d 65 73 20 69 6e 20 74 68 65 20 57 41 4c 20 74  mes in the WAL t
14e50 68 61 74 20 68 61 76 65 20 61 6c 72 65 61 64 79  hat have already
14e60 20 62 65 65 6e 20 63 68 65 63 6b 70 6f 69 6e 74   been checkpoint
14e70 65 64 20 62 75 74 20 6e 6f 74 20 79 65 74 0a 6f  ed but not yet.o
14e80 76 65 72 77 72 69 74 74 65 6e 2c 20 61 6e 64 20  verwritten, and 
14e90 70 72 65 76 65 6e 74 20 74 68 65 6d 20 66 72 6f  prevent them fro
14ea0 6d 20 62 65 69 6e 67 20 63 68 65 63 6b 70 6f 69  m being checkpoi
14eb0 6e 74 65 64 20 61 67 61 69 6e 2e 3c 2f 70 3e 0a  nted again.</p>.
14ec0 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
14ed0 74 20 77 61 6c 72 65 61 64 20 7b 57 41 4c 20 72  t walread {WAL r
14ee0 65 61 64 20 61 6c 67 6f 72 69 74 68 6d 7d 3c 2f  ead algorithm}</
14ef0 74 63 6c 3e 0a 3c 68 32 3e 52 65 61 64 65 72 20  tcl>.<h2>Reader 
14f00 41 6c 67 6f 72 69 74 68 6d 3c 2f 68 32 3e 0a 0a  Algorithm</h2>..
14f10 3c 70 3e 5e 28 54 6f 20 72 65 61 64 20 61 20 70  <p>^(To read a p
14f20 61 67 65 20 66 72 6f 6d 20 74 68 65 20 64 61 74  age from the dat
14f30 61 62 61 73 65 20 28 63 61 6c 6c 20 69 74 20 70  abase (call it p
14f40 61 67 65 20 6e 75 6d 62 65 72 20 50 29 2c 20 61  age number P), a
14f50 20 72 65 61 64 65 72 0a 66 69 72 73 74 20 63 68   reader.first ch
14f60 65 63 6b 73 20 74 68 65 20 57 41 4c 20 74 6f 20  ecks the WAL to 
14f70 73 65 65 20 69 66 20 69 74 20 63 6f 6e 74 61 69  see if it contai
14f80 6e 73 20 70 61 67 65 20 50 2e 20 20 49 66 20 73  ns page P.  If s
14f90 6f 2c 20 74 68 65 6e 20 74 68 65 0a 6c 61 73 74  o, then the.last
14fa0 20 76 61 6c 69 64 20 69 6e 73 74 61 6e 63 65 20   valid instance 
14fb0 6f 66 20 70 61 67 65 20 50 20 74 68 61 74 20 69  of page P that i
14fc0 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20  s followed by a 
14fd0 63 6f 6d 6d 69 74 20 66 72 61 6d 65 0a 6f 72 20  commit frame.or 
14fe0 69 73 20 61 20 63 6f 6d 6d 69 74 20 66 72 61 6d  is a commit fram
14ff0 65 20 69 74 73 65 6c 66 20 62 65 63 6f 6d 65 73  e itself becomes
15000 20 74 68 65 20 76 61 6c 75 65 20 72 65 61 64 2e   the value read.
15010 29 5e 20 20 5e 49 66 20 74 68 65 20 57 41 4c 0a  )^  ^If the WAL.
15020 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 63 6f 70 69  contains no copi
15030 65 73 20 6f 66 20 70 61 67 65 20 50 20 74 68 61  es of page P tha
15040 74 20 61 72 65 20 76 61 6c 69 64 20 61 6e 64 20  t are valid and 
15050 77 68 69 63 68 20 61 72 65 20 61 20 63 6f 6d 6d  which are a comm
15060 69 74 0a 66 72 61 6d 65 20 6f 72 20 61 72 65 20  it.frame or are 
15070 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 63 6f  followed by a co
15080 6d 6d 69 74 20 66 72 61 6d 65 2c 20 74 68 65 6e  mmit frame, then
15090 20 70 61 67 65 20 50 20 69 73 20 72 65 61 64 20   page P is read 
150a0 66 72 6f 6d 0a 74 68 65 20 64 61 74 61 62 61 73  from.the databas
150b0 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e  e file.</p>..<p>
150c0 54 6f 20 73 74 61 72 74 20 61 20 72 65 61 64 20  To start a read 
150d0 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65  transaction, the
150e0 20 72 65 61 64 65 72 20 72 65 63 6f 72 64 73 20   reader records 
150f0 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65  the index of the
15100 20 6c 61 73 74 0a 76 61 6c 69 64 20 66 72 61 6d   last.valid fram
15110 65 20 69 6e 20 74 68 65 20 57 41 4c 2e 20 20 54  e in the WAL.  T
15120 68 65 20 72 65 61 64 65 72 20 75 73 65 73 20 74  he reader uses t
15130 68 69 73 20 72 65 63 6f 72 64 65 64 20 22 6d 78  his recorded "mx
15140 46 72 61 6d 65 22 20 76 61 6c 75 65 0a 66 6f 72  Frame" value.for
15150 20 61 6c 6c 20 73 75 62 73 65 71 75 65 6e 74 20   all subsequent 
15160 72 65 61 64 20 6f 70 65 72 61 74 69 6f 6e 73 2e  read operations.
15170 20 20 4e 65 77 20 74 72 61 6e 73 61 63 74 69 6f    New transactio
15180 6e 73 20 63 61 6e 20 62 65 20 61 70 70 65 6e 64  ns can be append
15190 65 64 0a 74 6f 20 74 68 65 20 57 41 4c 2c 20 62  ed.to the WAL, b
151a0 75 74 20 61 73 20 6c 6f 6e 67 20 61 73 20 74 68  ut as long as th
151b0 65 20 72 65 61 64 65 72 20 75 73 65 73 20 69 74  e reader uses it
151c0 73 20 6f 72 69 67 69 6e 61 6c 20 6d 78 46 72 61  s original mxFra
151d0 6d 65 20 76 61 6c 75 65 0a 61 6e 64 20 69 67 6e  me value.and ign
151e0 6f 72 65 73 20 73 75 62 73 65 71 75 65 6e 74 6c  ores subsequentl
151f0 79 20 61 70 70 65 6e 64 65 64 20 63 6f 6e 74 65  y appended conte
15200 6e 74 2c 20 74 68 65 20 72 65 61 64 65 72 20 77  nt, the reader w
15210 69 6c 6c 20 73 65 65 20 61 20 0a 63 6f 6e 73 69  ill see a .consi
15220 73 74 65 6e 74 20 73 6e 61 70 73 68 6f 74 20 6f  stent snapshot o
15230 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  f the database f
15240 72 6f 6d 20 61 20 73 69 6e 67 6c 65 20 70 6f 69  rom a single poi
15250 6e 74 20 69 6e 20 74 69 6d 65 2e 20 20 0a 5e 54  nt in time.  .^T
15260 68 69 73 20 74 65 63 68 6e 69 71 75 65 20 61 6c  his technique al
15270 6c 6f 77 73 20 6d 75 6c 74 69 70 6c 65 20 63 6f  lows multiple co
15280 6e 63 75 72 72 65 6e 74 20 72 65 61 64 65 72 73  ncurrent readers
15290 20 74 6f 20 76 69 65 77 20 64 69 66 66 65 72 65   to view differe
152a0 6e 74 20 0a 76 65 72 73 69 6f 6e 73 20 6f 66 20  nt .versions of 
152b0 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  the database con
152c0 74 65 6e 74 20 73 69 6d 75 6c 74 61 6e 65 6f 75  tent simultaneou
152d0 73 6c 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  sly.</p>..<p>The
152e0 20 72 65 61 64 65 72 20 61 6c 67 6f 72 69 74 68   reader algorith
152f0 6d 20 69 6e 20 74 68 65 20 70 72 65 76 69 6f 75  m in the previou
15300 73 20 70 61 72 61 67 72 61 70 68 73 20 77 6f 72  s paragraphs wor
15310 6b 73 20 63 6f 72 72 65 63 74 6c 79 2c 20 62 75  ks correctly, bu
15320 74 20 0a 62 65 63 61 75 73 65 20 66 72 61 6d 65  t .because frame
15330 73 20 66 6f 72 20 70 61 67 65 20 50 20 63 61 6e  s for page P can
15340 20 61 70 70 65 61 72 20 61 6e 79 77 68 65 72 65   appear anywhere
15350 20 77 69 74 68 69 6e 20 74 68 65 20 57 41 4c 2c   within the WAL,
15360 20 74 68 65 0a 72 65 61 64 65 72 20 68 61 73 20   the.reader has 
15370 74 6f 20 73 63 61 6e 20 74 68 65 20 65 6e 74 69  to scan the enti
15380 72 65 20 57 41 4c 20 6c 6f 6f 6b 69 6e 67 20 66  re WAL looking f
15390 6f 72 20 70 61 67 65 20 50 20 66 72 61 6d 65 73  or page P frames
153a0 2e 20 20 49 66 20 74 68 65 0a 57 41 4c 20 69 73  .  If the.WAL is
153b0 20 6c 61 72 67 65 20 28 6d 75 6c 74 69 70 6c 65   large (multiple
153c0 20 6d 65 67 61 62 79 74 65 73 20 69 73 20 74 79   megabytes is ty
153d0 70 69 63 61 6c 29 20 74 68 61 74 20 73 63 61 6e  pical) that scan
153e0 20 63 61 6e 20 62 65 20 73 6c 6f 77 2c 0a 61 6e   can be slow,.an
153f0 64 20 72 65 61 64 20 70 65 72 66 6f 72 6d 61 6e  d read performan
15400 63 65 20 73 75 66 66 65 72 73 2e 20 20 5e 54 6f  ce suffers.  ^To
15410 20 6f 76 65 72 63 6f 6d 65 20 74 68 69 73 20 70   overcome this p
15420 72 6f 62 6c 65 6d 2c 20 61 20 73 65 70 61 72 61  roblem, a separa
15430 74 65 0a 64 61 74 61 20 73 74 72 75 63 74 75 72  te.data structur
15440 65 20 63 61 6c 6c 65 64 20 74 68 65 20 77 61 6c  e called the wal
15450 2d 69 6e 64 65 78 20 69 73 20 6d 61 69 6e 74 61  -index is mainta
15460 69 6e 65 64 20 74 6f 20 65 78 70 65 64 69 74 65  ined to expedite
15470 20 74 68 65 0a 73 65 61 72 63 68 20 66 6f 72 20   the.search for 
15480 66 72 61 6d 65 73 20 6f 66 20 61 20 70 61 72 74  frames of a part
15490 69 63 75 6c 61 72 20 70 61 67 65 2e 3c 2f 70 3e  icular page.</p>
154a0 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
154b0 6e 74 20 77 61 6c 69 6e 64 65 78 66 6f 72 6d 61  nt walindexforma
154c0 74 20 7b 77 61 6c 2d 69 6e 64 65 78 7d 20 7b 57  t {wal-index} {W
154d0 41 4c 2d 69 6e 64 65 78 20 66 6f 72 6d 61 74 7d  AL-index format}
154e0 3c 2f 74 63 6c 3e 0a 3c 68 32 3e 57 41 4c 2d 49  </tcl>.<h2>WAL-I
154f0 6e 64 65 78 20 46 6f 72 6d 61 74 3c 2f 68 32 3e  ndex Format</h2>
15500 0a 0a 3c 70 3e 43 6f 6e 63 65 70 74 75 61 6c 6c  ..<p>Conceptuall
15510 79 2c 20 74 68 65 20 77 61 6c 2d 69 6e 64 65 78  y, the wal-index
15520 20 69 73 20 73 68 61 72 65 64 20 6d 65 6d 6f 72   is shared memor
15530 79 2c 20 74 68 6f 75 67 68 20 74 68 65 20 63 75  y, though the cu
15540 72 72 65 6e 74 0a 56 46 53 20 69 6d 70 6c 65 6d  rrent.VFS implem
15550 65 6e 74 61 74 69 6f 6e 73 20 75 73 65 20 61 20  entations use a 
15560 6d 6d 61 70 70 65 64 20 66 69 6c 65 20 66 6f 72  mmapped file for
15570 20 74 68 65 20 77 61 6c 2d 69 6e 64 65 78 2e 20   the wal-index. 
15580 20 5e 54 68 65 20 6d 6d 61 70 70 65 64 0a 66 69   ^The mmapped.fi
15590 6c 65 20 69 73 20 69 6e 20 74 68 65 20 73 61 6d  le is in the sam
155a0 65 20 64 69 72 65 63 74 6f 72 79 20 61 73 20 74  e directory as t
155b0 68 65 20 64 61 74 61 62 61 73 65 20 61 6e 64 20  he database and 
155c0 68 61 73 20 74 68 65 20 73 61 6d 65 20 6e 61 6d  has the same nam
155d0 65 0a 61 73 20 74 68 65 20 64 61 74 61 62 61 73  e.as the databas
155e0 65 20 77 69 74 68 20 61 20 22 3c 74 74 3e 2d 73  e with a "<tt>-s
155f0 68 6d 3c 2f 74 74 3e 22 20 73 75 66 66 69 78 20  hm</tt>" suffix 
15600 61 70 70 65 6e 64 65 64 2e 20 20 42 65 63 61 75  appended.  Becau
15610 73 65 0a 74 68 65 20 77 61 6c 2d 69 6e 64 65 78  se.the wal-index
15620 20 69 73 20 73 68 61 72 65 64 20 6d 65 6d 6f 72   is shared memor
15630 79 2c 20 53 51 4c 69 74 65 20 64 6f 65 73 20 6e  y, SQLite does n
15640 6f 74 20 73 75 70 70 6f 72 74 20 0a 5b 50 52 41  ot support .[PRA
15650 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65  GMA journal_mode
15660 20 7c 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 3d   | journal_mode=
15670 57 41 4c 5d 20 0a 6f 6e 20 61 20 6e 65 74 77 6f  WAL] .on a netwo
15680 72 6b 20 66 69 6c 65 73 79 73 74 65 6d 20 77 68  rk filesystem wh
15690 65 6e 20 63 6c 69 65 6e 74 73 20 61 72 65 20 6f  en clients are o
156a0 6e 20 64 69 66 66 65 72 65 6e 74 20 6d 61 63 68  n different mach
156b0 69 6e 65 73 2e 0a 41 6c 6c 20 75 73 65 72 73 20  ines..All users 
156c0 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
156d0 6d 75 73 74 20 62 65 20 61 62 6c 65 20 74 6f 20  must be able to 
156e0 73 68 61 72 65 20 74 68 65 20 73 61 6d 65 20 6d  share the same m
156f0 65 6d 6f 72 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54  emory.</p>..<p>T
15700 68 65 20 70 75 72 70 6f 73 65 20 6f 66 20 74 68  he purpose of th
15710 65 20 77 61 6c 2d 69 6e 64 65 78 20 69 73 20 74  e wal-index is t
15720 6f 20 61 6e 73 77 65 72 20 74 68 69 73 20 71 75  o answer this qu
15730 65 73 74 69 6f 6e 20 71 75 69 63 6b 6c 79 3a 3c  estion quickly:<
15740 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
15750 3e 3c 69 3e 0a 47 69 76 65 6e 20 61 20 70 61 67  ><i>.Given a pag
15760 65 20 6e 75 6d 62 65 72 20 50 20 61 6e 64 20 61  e number P and a
15770 20 6d 61 78 69 6d 75 6d 20 57 41 4c 20 66 72 61   maximum WAL fra
15780 6d 65 20 69 6e 64 65 78 20 4d 2c 0a 72 65 74 75  me index M,.retu
15790 72 6e 20 74 68 65 20 6c 61 72 67 65 73 74 20 57  rn the largest W
157a0 41 4c 20 66 72 61 6d 65 20 69 6e 64 65 78 20 66  AL frame index f
157b0 6f 72 20 70 61 67 65 20 50 20 74 68 61 74 20 64  or page P that d
157c0 6f 65 73 20 6e 6f 74 20 65 78 63 65 65 64 20 4d  oes not exceed M
157d0 2c 20 0a 6f 72 20 72 65 74 75 72 6e 20 4e 55 4c  , .or return NUL
157e0 4c 20 69 66 20 74 68 65 72 65 20 61 72 65 20 6e  L if there are n
157f0 6f 20 66 72 61 6d 65 73 20 66 6f 72 20 70 61 67  o frames for pag
15800 65 20 50 20 74 68 61 74 20 64 6f 20 6e 6f 74 20  e P that do not 
15810 65 78 63 65 65 64 20 4d 2e 0a 3c 2f 69 3e 3c 2f  exceed M..</i></
15820 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e  blockquote>..<p>
15830 54 68 65 20 3c 69 3e 4d 3c 2f 69 3e 20 76 61 6c  The <i>M</i> val
15840 75 65 20 69 6e 20 74 68 65 20 70 72 65 76 69 6f  ue in the previo
15850 75 73 20 70 61 72 61 67 72 61 70 68 20 69 73 20  us paragraph is 
15860 74 68 65 20 22 6d 78 46 72 61 6d 65 22 20 76 61  the "mxFrame" va
15870 6c 75 65 0a 64 65 66 69 6e 65 64 20 69 6e 20 5b  lue.defined in [
15880 57 41 4c 20 72 65 61 64 20 61 6c 67 6f 72 69 74  WAL read algorit
15890 68 6d 20 7c 20 73 65 63 74 69 6f 6e 20 34 2e 34  hm | section 4.4
158a0 5d 20 74 68 61 74 20 69 73 20 72 65 61 64 20 61  ] that is read a
158b0 74 20 74 68 65 20 73 74 61 72 74 20 0a 6f 66 20  t the start .of 
158c0 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6e  a transaction an
158d0 64 20 77 68 69 63 68 20 64 65 66 69 6e 65 73 20  d which defines 
158e0 74 68 65 20 6d 61 78 69 6d 75 6d 20 66 72 61 6d  the maximum fram
158f0 65 20 66 72 6f 6d 20 74 68 65 20 57 41 4c 20 74  e from the WAL t
15900 68 61 74 20 0a 74 68 65 20 72 65 61 64 65 72 20  hat .the reader 
15910 77 69 6c 6c 20 75 73 65 2e 3c 2f 70 3e 0a 0a 3c  will use.</p>..<
15920 70 3e 54 68 65 20 77 61 6c 2d 69 6e 64 65 78 20  p>The wal-index 
15930 69 73 20 74 72 61 6e 73 69 65 6e 74 2e 20 20 41  is transient.  A
15940 66 74 65 72 20 61 20 63 72 61 73 68 2c 20 74 68  fter a crash, th
15950 65 20 77 61 6c 2d 69 6e 64 65 78 20 69 73 0a 72  e wal-index is.r
15960 65 63 6f 6e 73 74 72 75 63 74 65 64 20 66 72 6f  econstructed fro
15970 6d 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 57  m the original W
15980 41 4c 20 66 69 6c 65 2e 20 20 5e 54 68 65 20 56  AL file.  ^The V
15990 46 53 20 69 73 20 72 65 71 75 69 72 65 64 0a 74  FS is required.t
159a0 6f 20 65 69 74 68 65 72 20 74 72 75 6e 63 61 74  o either truncat
159b0 65 20 6f 72 20 7a 65 72 6f 20 74 68 65 20 68 65  e or zero the he
159c0 61 64 65 72 20 6f 66 20 74 68 65 20 77 61 6c 2d  ader of the wal-
159d0 69 6e 64 65 78 20 77 68 65 6e 20 74 68 65 20 6c  index when the l
159e0 61 73 74 0a 63 6f 6e 6e 65 63 74 69 6f 6e 20 74  ast.connection t
159f0 6f 20 69 74 20 63 6c 6f 73 65 73 2e 20 20 42 65  o it closes.  Be
15a00 63 61 75 73 65 20 74 68 65 20 77 61 6c 2d 69 6e  cause the wal-in
15a10 64 65 78 20 69 73 20 74 72 61 6e 73 69 65 6e 74  dex is transient
15a20 2c 20 69 74 20 63 61 6e 0a 75 73 65 20 61 6e 20  , it can.use an 
15a30 61 72 63 68 69 74 65 63 74 75 72 65 2d 73 70 65  architecture-spe
15a40 63 69 66 69 63 20 66 6f 72 6d 61 74 3b 20 69 74  cific format; it
15a50 20 64 6f 65 73 20 6e 6f 74 20 68 61 76 65 20 74   does not have t
15a60 6f 20 62 65 20 63 72 6f 73 73 2d 70 6c 61 74 66  o be cross-platf
15a70 6f 72 6d 2e 0a 48 65 6e 63 65 2c 20 75 6e 6c 69  orm..Hence, unli
15a80 6b 65 20 74 68 65 20 64 61 74 61 62 61 73 65 20  ke the database 
15a90 61 6e 64 20 57 41 4c 20 66 69 6c 65 20 66 6f 72  and WAL file for
15aa0 6d 61 74 73 20 77 68 69 63 68 20 73 74 6f 72 65  mats which store
15ab0 20 61 6c 6c 20 76 61 6c 75 65 73 0a 61 73 20 62   all values.as b
15ac0 69 67 20 65 6e 64 69 61 6e 2c 20 74 68 65 20 77  ig endian, the w
15ad0 61 6c 2d 69 6e 64 65 78 20 73 74 6f 72 65 73 20  al-index stores 
15ae0 6d 75 6c 74 69 2d 62 79 74 65 20 76 61 6c 75 65  multi-byte value
15af0 73 20 69 6e 20 74 68 65 20 6e 61 74 69 76 65 0a  s in the native.
15b00 62 79 74 65 20 6f 72 64 65 72 20 6f 66 20 74 68  byte order of th
15b10 65 20 68 6f 73 74 20 63 6f 6d 70 75 74 65 72 2e  e host computer.
15b20 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 69 73 20 64 6f  </p>..<p>This do
15b30 63 75 6d 65 6e 74 20 69 73 20 63 6f 6e 63 65 72  cument is concer
15b40 6e 65 64 20 77 69 74 68 20 74 68 65 20 70 65 72  ned with the per
15b50 73 69 73 74 65 6e 74 20 73 74 61 74 65 20 6f 66  sistent state of
15b60 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 66 69   the database.fi
15b70 6c 65 2c 20 61 6e 64 20 73 69 6e 63 65 20 74 68  le, and since th
15b80 65 20 77 61 6c 2d 69 6e 64 65 78 20 69 73 20 61  e wal-index is a
15b90 20 74 72 61 6e 73 69 65 6e 74 20 73 74 72 75 63   transient struc
15ba0 74 75 72 65 2c 20 6e 6f 20 66 75 72 74 68 65 72  ture, no further
15bb0 20 0a 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62   .information ab
15bc0 6f 75 74 20 74 68 65 20 66 6f 72 6d 61 74 20 6f  out the format o
15bd0 66 20 74 68 65 20 77 61 6c 2d 69 6e 64 65 78 20  f the wal-index 
15be0 77 69 6c 6c 20 62 65 20 70 72 6f 76 69 64 65 64  will be provided
15bf0 20 68 65 72 65 2e 0a 43 6f 6d 70 6c 65 74 65 20   here..Complete 
15c00 64 65 74 61 69 6c 73 20 6f 6e 20 74 68 65 20 66  details on the f
15c10 6f 72 6d 61 74 20 6f 66 20 74 68 65 20 77 61 6c  ormat of the wal
15c20 2d 69 6e 64 65 78 20 61 72 65 20 63 6f 6e 74 61  -index are conta
15c30 69 6e 65 64 20 77 69 74 68 69 6e 0a 63 6f 6d 6d  ined within.comm
15c40 65 6e 74 73 20 69 6e 20 53 51 4c 69 74 65 20 73  ents in SQLite s
15c50 6f 75 72 63 65 20 63 6f 64 65 2e 3c 2f 70 3e 0a  ource code.</p>.