Documentation Source Text

Hex Artifact Content
Login

Artifact d3f50b69e9eb1c649c591c906d5332342d32b69343c6e4c02534fe5d8b3f4963:


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 20 69 6e 66 6f 72 6d 61 74 69 6f   hold informatio
11fb0 6e 20 75 73 65 64 20 74 6f 20 72 65 73 74 6f 72  n used to restor
11fc0 65 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  e the database f
11fd0 69 6c 65 20 74 6f 20 69 74 73 20 69 6e 69 74 69  ile to its initi
11fe0 61 6c 0a 73 74 61 74 65 20 64 75 72 69 6e 67 20  al.state during 
11ff0 74 68 65 20 63 6f 75 72 73 65 20 6f 66 20 61 20  the course of a 
12000 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e 54 68  transaction..^Th
12010 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e  e rollback journ
12020 61 6c 20 66 69 6c 65 20 69 73 20 61 6c 77 61 79  al file is alway
12030 73 20 6c 6f 63 61 74 65 64 20 69 6e 20 74 68 65  s located in the
12040 20 73 61 6d 65 20 0a 64 69 72 65 63 74 6f 72 79   same .directory
12050 20 61 73 20 74 68 65 20 64 61 74 61 62 61 73 65   as the database
12060 0a 66 69 6c 65 20 61 6e 64 20 68 61 73 20 74 68  .file and has th
12070 65 20 73 61 6d 65 20 6e 61 6d 65 20 61 73 20 74  e same name as t
12080 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
12090 20 62 75 74 20 77 69 74 68 20 74 68 65 20 73 74   but with the st
120a0 72 69 6e 67 0a 22 3c 74 74 3e 2d 6a 6f 75 72 6e  ring."<tt>-journ
120b0 61 6c 3c 2f 74 74 3e 22 20 61 70 70 65 6e 64 65  al</tt>" appende
120c0 64 2e 20 20 54 68 65 72 65 20 63 61 6e 20 6f 6e  d.  There can on
120d0 6c 79 20 62 65 20 61 20 73 69 6e 67 6c 65 20 72  ly be a single r
120e0 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 0a  ollback journal.
120f0 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
12100 61 20 67 69 76 65 20 64 61 74 61 62 61 73 65 20  a give database 
12110 61 6e 64 20 68 65 6e 63 65 20 74 68 65 72 65 20  and hence there 
12120 63 61 6e 20 6f 6e 6c 79 20 62 65 20 6f 6e 65 20  can only be one 
12130 77 72 69 74 65 0a 74 72 61 6e 73 61 63 74 69 6f  write.transactio
12140 6e 20 6f 70 65 6e 20 61 67 61 69 6e 73 74 20 61  n open against a
12150 20 73 69 6e 67 6c 65 20 64 61 74 61 62 61 73 65   single database
12160 20 61 74 20 6f 6e 65 20 74 69 6d 65 2e 3c 2f 70   at one time.</p
12170 3e 0a 0a 3c 70 3e 49 66 20 61 20 74 72 61 6e 73  >..<p>If a trans
12180 61 63 74 69 6f 6e 20 69 73 20 61 62 6f 72 74 65  action is aborte
12190 64 20 64 75 65 20 74 6f 20 61 6e 20 61 70 70 6c  d due to an appl
121a0 69 63 61 74 69 6f 6e 20 63 72 61 73 68 2c 20 61  ication crash, a
121b0 6e 20 6f 70 65 72 61 74 69 6e 67 0a 73 79 73 74  n operating.syst
121c0 65 6d 20 63 72 61 73 68 2c 20 6f 72 20 61 20 68  em crash, or a h
121d0 61 72 64 77 61 72 65 20 70 6f 77 65 72 20 66 61  ardware power fa
121e0 69 6c 75 72 65 20 6f 72 20 63 72 61 73 68 2c 20  ilure or crash, 
121f0 74 68 65 6e 20 74 68 65 20 64 61 74 61 62 61 73  then the databas
12200 65 20 6d 61 79 0a 62 65 20 6c 65 66 74 20 69 6e  e may.be left in
12210 20 61 6e 20 69 6e 63 6f 6e 73 69 73 74 65 6e 74   an inconsistent
12220 20 73 74 61 74 65 2e 20 20 5e 54 68 65 20 6e 65   state.  ^The ne
12230 78 74 20 74 69 6d 65 20 53 51 4c 69 74 65 20 61  xt time SQLite a
12240 74 74 65 6d 70 74 73 20 74 6f 20 6f 70 65 6e 0a  ttempts to open.
12250 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
12260 65 2c 20 74 68 65 20 70 72 65 73 65 6e 63 65 20  e, the presence 
12270 6f 66 20 74 68 65 20 72 6f 6c 6c 62 61 63 6b 20  of the rollback 
12280 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 20 77 69 6c  journal file wil
12290 6c 20 62 65 20 0a 64 65 74 65 63 74 65 64 20 61  l be .detected a
122a0 6e 64 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20 77  nd the journal w
122b0 69 6c 6c 20 62 65 20 61 75 74 6f 6d 61 74 69 63  ill be automatic
122c0 61 6c 6c 79 20 70 6c 61 79 65 64 20 62 61 63 6b  ally played back
122d0 20 74 6f 20 72 65 73 74 6f 72 65 20 74 68 65 0a   to restore the.
122e0 64 61 74 61 62 61 73 65 20 74 6f 20 69 74 73 20  database to its 
122f0 73 74 61 74 65 20 61 74 20 74 68 65 20 73 74 61  state at the sta
12300 72 74 20 6f 66 20 74 68 65 20 69 6e 63 6f 6d 70  rt of the incomp
12310 6c 65 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e  lete transaction
12320 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 20 72 6f 6c  .</p>..<p>^A rol
12330 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 69 73  lback journal is
12340 20 6f 6e 6c 79 20 63 6f 6e 73 69 64 65 72 65 64   only considered
12350 20 74 6f 20 62 65 20 76 61 6c 69 64 20 69 66 20   to be valid if 
12360 69 74 20 65 78 69 73 74 73 20 61 6e 64 0a 63 6f  it exists and.co
12370 6e 74 61 69 6e 73 20 61 20 76 61 6c 69 64 20 68  ntains a valid h
12380 65 61 64 65 72 2e 20 20 48 65 6e 63 65 20 61 20  eader.  Hence a 
12390 74 72 61 6e 73 61 63 74 69 6f 6e 20 63 61 6e 20  transaction can 
123a0 62 65 20 63 6f 6d 6d 69 74 74 65 64 20 69 6e 20  be committed in 
123b0 6f 6e 65 0a 6f 66 20 74 68 72 65 65 20 77 61 79  one.of three way
123c0 73 3a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 5e 28 54 68  s:.<ol>.<li>^(Th
123d0 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e  e rollback journ
123e0 61 6c 20 66 69 6c 65 20 63 61 6e 20 62 65 20 64  al file can be d
123f0 65 6c 65 74 65 64 29 5e 2c 0a 3c 6c 69 3e 5e 28  eleted)^,.<li>^(
12400 54 68 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75  The rollback jou
12410 72 6e 61 6c 20 66 69 6c 65 20 63 61 6e 20 62 65  rnal file can be
12420 20 74 72 75 6e 63 61 74 65 64 20 74 6f 20 7a 65   truncated to ze
12430 72 6f 20 6c 65 6e 67 74 68 29 5e 2c 20 6f 72 0a  ro length)^, or.
12440 3c 6c 69 3e 5e 28 54 68 65 20 68 65 61 64 65 72  <li>^(The header
12450 20 6f 66 20 74 68 65 20 72 6f 6c 6c 62 61 63 6b   of the rollback
12460 20 6a 6f 75 72 6e 61 6c 20 63 61 6e 20 62 65 20   journal can be 
12470 6f 76 65 72 77 72 69 74 74 65 6e 20 77 69 74 68  overwritten with
12480 0a 69 6e 76 61 6c 69 64 20 68 65 61 64 65 72 20  .invalid header 
12490 74 65 78 74 20 28 66 6f 72 20 65 78 61 6d 70 6c  text (for exampl
124a0 65 2c 20 61 6c 6c 20 7a 65 72 6f 73 29 2e 29 5e  e, all zeros).)^
124b0 0a 3c 2f 6f 6c 3e 0a 3c 70 3e 0a 5e 54 68 65 73  .</ol>.<p>.^Thes
124c0 65 20 74 68 72 65 65 20 77 61 79 73 20 6f 66 20  e three ways of 
124d0 63 6f 6d 6d 69 74 74 69 6e 67 20 61 20 74 72 61  committing a tra
124e0 6e 73 61 63 74 69 6f 6e 20 63 6f 72 72 65 73 70  nsaction corresp
124f0 6f 6e 64 20 74 6f 20 74 68 65 20 44 45 4c 45 54  ond to the DELET
12500 45 2c 0a 54 52 55 4e 43 41 54 45 2c 20 61 6e 64  E,.TRUNCATE, and
12510 20 50 45 52 53 49 53 54 20 73 65 74 74 69 6e 67   PERSIST setting
12520 73 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2c  s, respectively,
12530 20 6f 66 20 74 68 65 20 5b 6a 6f 75 72 6e 61 6c   of the [journal
12540 5f 6d 6f 64 65 20 70 72 61 67 6d 61 5d 2e 0a 3c  _mode pragma]..<
12550 2f 70 3e 0a 0a 0a 3c 70 3e 41 20 76 61 6c 69 64  /p>...<p>A valid
12560 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61   rollback journa
12570 6c 20 62 65 67 69 6e 73 20 77 69 74 68 20 61 20  l begins with a 
12580 68 65 61 64 65 72 20 69 6e 20 74 68 65 20 66 6f  header in the fo
12590 6c 6c 6f 77 69 6e 67 20 66 6f 72 6d 61 74 3a 3c  llowing format:<
125a0 2f 70 3e 0a 0a 3c 63 65 6e 74 65 72 3e 0a 3c 69  /p>..<center>.<i
125b0 3e 52 6f 6c 6c 62 61 63 6b 20 4a 6f 75 72 6e 61  >Rollback Journa
125c0 6c 20 48 65 61 64 65 72 20 46 6f 72 6d 61 74 3c  l Header Format<
125d0 2f 69 3e 3c 62 72 3e 0a 3c 74 61 62 6c 65 20 77  /i><br>.<table w
125e0 69 64 74 68 3d 22 38 30 25 22 20 62 6f 72 64 65  idth="80%" borde
125f0 72 3d 31 3e 0a 3c 74 72 3e 3c 74 68 3e 4f 66 66  r=1>.<tr><th>Off
12600 73 65 74 3c 74 68 3e 53 69 7a 65 3c 74 68 3e 44  set<th>Size<th>D
12610 65 73 63 72 69 70 74 69 6f 6e 0a 3c 74 72 3e 3c  escription.<tr><
12620 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
12630 69 67 6e 3d 63 65 6e 74 65 72 3e 30 0a 20 20 20  ign=center>0.   
12640 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20   <td valign=top 
12650 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 38 0a 20  align=center>8. 
12660 20 20 20 3c 74 64 3e 48 65 61 64 65 72 20 73 74     <td>Header st
12670 72 69 6e 67 3a 20 20 30 78 64 39 2c 20 30 78 64  ring:  0xd9, 0xd
12680 35 2c 20 30 78 30 35 2c 20 30 78 66 39 2c 20 30  5, 0x05, 0xf9, 0
12690 78 32 30 2c 20 30 78 61 31 2c 20 30 78 36 33 2c  x20, 0xa1, 0x63,
126a0 20 30 78 64 37 0a 3c 74 72 3e 3c 74 64 20 76 61   0xd7.<tr><td va
126b0 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
126c0 65 6e 74 65 72 3e 38 0a 20 20 20 20 3c 74 64 20  enter>8.    <td 
126d0 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
126e0 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74  =center>4.    <t
126f0 64 3e 54 68 65 20 22 50 61 67 65 20 43 6f 75 6e  d>The "Page Coun
12700 74 22 20 2d 20 54 68 65 20 6e 75 6d 62 65 72 20  t" - The number 
12710 6f 66 20 70 61 67 65 73 20 69 6e 20 74 68 65 20  of pages in the 
12720 6e 65 78 74 20 73 65 67 6d 65 6e 74 20 6f 66 20  next segment of 
12730 74 68 65 20 0a 20 20 20 20 20 20 20 20 6a 6f 75  the .        jou
12740 72 6e 61 6c 2c 20 6f 72 20 2d 31 20 74 6f 0a 20  rnal, or -1 to. 
12750 20 20 20 20 20 20 20 6d 65 61 6e 20 61 6c 6c 20         mean all 
12760 63 6f 6e 74 65 6e 74 20 74 6f 20 74 68 65 20 65  content to the e
12770 6e 64 20 6f 66 20 74 68 65 20 66 69 6c 65 0a 3c  nd of the file.<
12780 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
12790 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31  p align=center>1
127a0 32 0a 20 20 20 20 3c 74 64 20 76 61 6c 69 67 6e  2.    <td valign
127b0 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
127c0 72 3e 34 0a 20 20 20 20 3c 74 64 3e 41 20 72 61  r>4.    <td>A ra
127d0 6e 64 6f 6d 20 6e 6f 6e 63 65 20 66 6f 72 20 74  ndom nonce for t
127e0 68 65 20 63 68 65 63 6b 73 75 6d 0a 3c 74 72 3e  he checksum.<tr>
127f0 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
12800 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 36 0a 20  lign=center>16. 
12810 20 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f     <td valign=to
12820 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34  p align=center>4
12830 0a 20 20 20 20 3c 74 64 3e 49 6e 69 74 69 61 6c  .    <td>Initial
12840 20 73 69 7a 65 20 6f 66 20 74 68 65 20 64 61 74   size of the dat
12850 61 62 61 73 65 20 69 6e 20 70 61 67 65 73 0a 3c  abase in pages.<
12860 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
12870 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32  p align=center>2
12880 30 0a 20 20 20 20 3c 74 64 20 76 61 6c 69 67 6e  0.    <td valign
12890 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
128a0 72 3e 34 0a 20 20 20 20 3c 74 64 3e 53 69 7a 65  r>4.    <td>Size
128b0 20 6f 66 20 61 20 64 69 73 6b 20 73 65 63 74 6f   of a disk secto
128c0 72 20 61 73 73 75 6d 65 64 20 62 79 20 74 68 65  r assumed by the
128d0 20 70 72 6f 63 65 73 73 20 74 68 61 74 20 77 72   process that wr
128e0 6f 74 65 20 74 68 69 73 0a 20 20 20 20 20 20 20  ote this.       
128f0 20 6a 6f 75 72 6e 61 6c 2e 0a 3c 74 72 3e 3c 74   journal..<tr><t
12900 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
12910 67 6e 3d 63 65 6e 74 65 72 3e 32 34 0a 20 20 20  gn=center>24.   
12920 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20   <td valign=top 
12930 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20  align=center>4. 
12940 20 20 20 3c 74 64 3e 53 69 7a 65 20 6f 66 20 70     <td>Size of p
12950 61 67 65 73 20 69 6e 20 74 68 69 73 20 6a 6f 75  ages in this jou
12960 72 6e 61 6c 2e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c  rnal..</table>.<
12970 2f 63 65 6e 74 65 72 3e 0a 0a 3c 70 3e 5e 41 20  /center>..<p>^A 
12980 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c  rollback journal
12990 20 68 65 61 64 65 72 20 69 73 20 70 61 64 64 65   header is padde
129a0 64 20 77 69 74 68 20 7a 65 72 6f 73 20 6f 75 74  d with zeros out
129b0 20 74 6f 20 74 68 65 20 73 69 7a 65 20 6f 66 20   to the size of 
129c0 61 20 0a 73 69 6e 67 6c 65 20 73 65 63 74 6f 72  a .single sector
129d0 20 28 61 73 20 64 65 66 69 6e 65 64 20 62 79 20   (as defined by 
129e0 74 68 65 20 73 65 63 74 6f 72 20 73 69 7a 65 20  the sector size 
129f0 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73 65  integer at offse
12a00 74 20 32 30 29 2e 0a 54 68 65 20 68 65 61 64 65  t 20)..The heade
12a10 72 20 69 73 20 69 6e 20 61 20 73 65 63 74 6f 72  r is in a sector
12a20 20 62 79 20 69 74 73 65 6c 66 20 73 6f 20 74 68   by itself so th
12a30 61 74 20 69 66 20 61 20 70 6f 77 65 72 20 6c 6f  at if a power lo
12a40 73 73 20 6f 63 63 75 72 73 20 77 68 69 6c 65 0a  ss occurs while.
12a50 77 72 69 74 69 6e 67 20 74 68 65 20 73 65 63 74  writing the sect
12a60 6f 72 2c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  or, information 
12a70 74 68 61 74 20 66 6f 6c 6c 6f 77 73 20 74 68 65  that follows the
12a80 20 68 65 61 64 65 72 20 77 69 6c 6c 20 62 65 0a   header will be.
12a90 28 68 6f 70 65 66 75 6c 6c 79 29 20 75 6e 64 61  (hopefully) unda
12aa0 6d 61 67 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  maged.</p>..<p>^
12ab0 41 66 74 65 72 20 74 68 65 20 68 65 61 64 65 72  After the header
12ac0 20 61 6e 64 20 7a 65 72 6f 20 70 61 64 64 69 6e   and zero paddin
12ad0 67 20 61 72 65 20 7a 65 72 6f 20 6f 72 20 6d 6f  g are zero or mo
12ae0 72 65 20 70 61 67 65 20 72 65 63 6f 72 64 73 2e  re page records.
12af0 20 20 5e 45 61 63 68 0a 70 61 67 65 20 72 65 63    ^Each.page rec
12b00 6f 72 64 20 73 74 6f 72 65 73 20 61 20 63 6f 70  ord stores a cop
12b10 79 20 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e 74  y of the content
12b20 20 6f 66 20 61 20 70 61 67 65 20 66 72 6f 6d 20   of a page from 
12b30 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
12b40 65 0a 62 65 66 6f 72 65 20 69 74 20 77 61 73 20  e.before it was 
12b50 63 68 61 6e 67 65 64 2e 20 20 5e 54 68 65 20 73  changed.  ^The s
12b60 61 6d 65 20 70 61 67 65 20 6d 61 79 20 6e 6f 74  ame page may not
12b70 20 61 70 70 65 61 72 20 6d 6f 72 65 20 74 68 61   appear more tha
12b80 6e 20 6f 6e 63 65 0a 77 69 74 68 69 6e 20 61 20  n once.within a 
12b90 73 69 6e 67 6c 65 20 72 6f 6c 6c 62 61 63 6b 20  single rollback 
12ba0 6a 6f 75 72 6e 61 6c 2e 0a 54 6f 20 72 6f 6c 6c  journal..To roll
12bb0 62 61 63 6b 20 61 6e 20 69 6e 63 6f 6d 70 6c 65  back an incomple
12bc0 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20  te transaction, 
12bd0 61 20 70 72 6f 63 65 73 73 0a 68 61 73 20 6d 65  a process.has me
12be0 72 65 6c 79 20 74 6f 20 72 65 61 64 20 74 68 65  rely to read the
12bf0 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61   rollback journa
12c00 6c 20 66 72 6f 6d 20 62 65 67 69 6e 6e 69 6e 67  l from beginning
12c10 20 74 6f 20 65 6e 64 20 61 6e 64 0a 77 72 69 74   to end and.writ
12c20 65 20 70 61 67 65 73 20 66 6f 75 6e 64 20 69 6e  e pages found in
12c30 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20 62 61 63   the journal bac
12c40 6b 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61 62  k into the datab
12c50 61 73 65 20 66 69 6c 65 20 61 74 20 74 68 65 0a  ase file at the.
12c60 61 70 70 72 6f 70 72 69 61 74 65 20 6c 6f 63 61  appropriate loca
12c70 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 4c 65  tion.</p>..<p>Le
12c80 74 20 74 68 65 20 64 61 74 61 62 61 73 65 20 70  t the database p
12c90 61 67 65 20 73 69 7a 65 20 28 74 68 65 20 76 61  age size (the va
12ca0 6c 75 65 20 6f 66 20 74 68 65 20 69 6e 74 65 67  lue of the integ
12cb0 65 72 20 61 74 20 6f 66 66 73 65 74 20 32 34 20  er at offset 24 
12cc0 0a 69 6e 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20  .in the journal 
12cd0 68 65 61 64 65 72 29 20 62 65 20 4e 2e 0a 54 68  header) be N..Th
12ce0 65 6e 20 74 68 65 20 66 6f 72 6d 61 74 20 6f 66  en the format of
12cf0 20 61 20 70 61 67 65 20 72 65 63 6f 72 64 20 69   a page record i
12d00 73 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f 70  s as follows:</p
12d10 3e 0a 0a 3c 63 65 6e 74 65 72 3e 0a 3c 69 3e 52  >..<center>.<i>R
12d20 6f 6c 6c 62 61 63 6b 20 4a 6f 75 72 6e 61 6c 20  ollback Journal 
12d30 50 61 67 65 20 52 65 63 6f 72 64 20 46 6f 72 6d  Page Record Form
12d40 61 74 3c 2f 69 3e 3c 62 72 3e 0a 3c 74 61 62 6c  at</i><br>.<tabl
12d50 65 20 77 69 64 74 68 3d 22 38 30 25 22 20 62 6f  e width="80%" bo
12d60 72 64 65 72 3d 31 3e 0a 3c 74 72 3e 3c 74 68 3e  rder=1>.<tr><th>
12d70 4f 66 66 73 65 74 3c 74 68 3e 53 69 7a 65 3c 74  Offset<th>Size<t
12d80 68 3e 44 65 73 63 72 69 70 74 69 6f 6e 0a 3c 74  h>Description.<t
12d90 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
12da0 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 30 0a   align=center>0.
12db0 20 20 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74      <td valign=t
12dc0 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
12dd0 34 0a 20 20 20 20 3c 74 64 3e 54 68 65 20 70 61  4.    <td>The pa
12de0 67 65 20 6e 75 6d 62 65 72 20 69 6e 20 74 68 65  ge number in the
12df0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 3c   database file.<
12e00 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
12e10 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34  p align=center>4
12e20 0a 20 20 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d  .    <td valign=
12e30 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
12e40 3e 4e 0a 20 20 20 20 3c 74 64 3e 4f 72 69 67 69  >N.    <td>Origi
12e50 6e 61 6c 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74  nal content of t
12e60 68 65 20 70 61 67 65 20 70 72 69 6f 72 20 74 6f  he page prior to
12e70 20 74 68 65 20 73 74 61 72 74 20 6f 66 20 74 68   the start of th
12e80 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 3c 74  e transaction.<t
12e90 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
12ea0 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 4e 2b   align=center>N+
12eb0 34 0a 20 20 20 20 3c 74 64 20 76 61 6c 69 67 6e  4.    <td valign
12ec0 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
12ed0 72 3e 34 0a 20 20 20 20 3c 74 64 3e 43 68 65 63  r>4.    <td>Chec
12ee0 6b 73 75 6d 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f  ksum.</table>.</
12ef0 63 65 6e 74 65 72 3e 0a 0a 0a 3c 70 3e 5e 28 54  center>...<p>^(T
12f00 68 65 20 63 68 65 63 6b 73 75 6d 20 69 73 20 61  he checksum is a
12f10 6e 20 75 6e 73 69 67 6e 65 64 20 33 32 2d 62 69  n unsigned 32-bi
12f20 74 20 69 6e 74 65 67 65 72 20 63 6f 6d 70 75 74  t integer comput
12f30 65 64 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f  ed as follows:</
12f40 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 49 6e 69  p>..<ol>.<li>Ini
12f50 74 69 61 6c 69 7a 65 20 74 68 65 20 63 68 65 63  tialize the chec
12f60 6b 73 75 6d 20 74 6f 20 74 68 65 20 63 68 65 63  ksum to the chec
12f70 6b 73 75 6d 20 6e 6f 6e 63 65 20 76 61 6c 75 65  ksum nonce value
12f80 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 0a 6a 6f   found in the.jo
12f90 75 72 6e 61 6c 20 68 65 61 64 65 72 20 61 74 20  urnal header at 
12fa0 6f 66 66 73 65 74 20 31 32 2e 0a 3c 6c 69 3e 49  offset 12..<li>I
12fb0 6e 69 74 69 61 6c 69 7a 65 20 69 6e 64 65 78 20  nitialize index 
12fc0 58 20 74 6f 20 62 65 20 4e 2d 32 30 30 20 28 77  X to be N-200 (w
12fd0 68 65 72 65 20 4e 20 69 73 20 74 68 65 20 73 69  here N is the si
12fe0 7a 65 20 6f 66 20 61 20 64 61 74 61 62 61 73 65  ze of a database
12ff0 20 70 61 67 65 0a 69 6e 20 62 79 74 65 73 2e 0a   page.in bytes..
13000 3c 6c 69 3e 49 6e 74 65 72 70 72 65 74 20 74 68  <li>Interpret th
13010 65 20 62 79 74 65 20 61 74 20 6f 66 66 73 65 74  e byte at offset
13020 20 58 20 69 6e 74 6f 20 74 68 65 20 70 61 67 65   X into the page
13030 20 61 73 20 61 6e 20 38 2d 62 69 74 20 75 6e 73   as an 8-bit uns
13040 69 67 6e 65 64 20 69 6e 74 65 67 65 72 0a 20 61  igned integer. a
13050 6e 64 20 61 64 64 20 74 68 65 20 76 61 6c 75 65  nd add the value
13060 20 6f 66 20 74 68 61 74 20 69 6e 74 65 67 65 72   of that integer
13070 20 74 6f 20 74 68 65 20 63 68 65 63 6b 73 75 6d   to the checksum
13080 2e 0a 3c 6c 69 3e 53 75 62 74 72 61 63 74 20 32  ..<li>Subtract 2
13090 30 30 20 66 72 6f 6d 20 58 2e 0a 3c 6c 69 3e 49  00 from X..<li>I
130a0 66 20 58 20 69 73 20 67 72 65 61 74 65 72 20 74  f X is greater t
130b0 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
130c0 7a 65 72 6f 2c 20 67 6f 20 62 61 63 6b 20 74 6f  zero, go back to
130d0 20 73 74 65 70 20 33 2e 0a 3c 2f 6f 6c 3e 29 5e   step 3..</ol>)^
130e0 0a 0a 3c 70 3e 54 68 65 20 63 68 65 63 6b 73 75  ..<p>The checksu
130f0 6d 20 76 61 6c 75 65 20 69 73 20 75 73 65 64 20  m value is used 
13100 74 6f 20 67 75 61 72 64 20 61 67 61 69 6e 73 74  to guard against
13110 20 69 6e 63 6f 6d 70 6c 65 74 65 20 77 72 69 74   incomplete writ
13120 65 73 20 6f 66 0a 61 20 6a 6f 75 72 6e 61 6c 20  es of.a journal 
13130 70 61 67 65 20 72 65 63 6f 72 64 20 66 6f 6c 6c  page record foll
13140 6f 77 69 6e 67 20 61 20 70 6f 77 65 72 20 66 61  owing a power fa
13150 69 6c 75 72 65 2e 20 20 41 20 64 69 66 66 65 72  ilure.  A differ
13160 65 6e 74 20 72 61 6e 64 6f 6d 20 6e 6f 6e 63 65  ent random nonce
13170 0a 69 73 20 75 73 65 64 20 65 61 63 68 20 74 69  .is used each ti
13180 6d 65 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  me a transaction
13190 20 69 73 20 73 74 61 72 74 65 64 20 69 6e 20 6f   is started in o
131a0 72 64 65 72 20 74 6f 20 6d 69 6e 69 6d 69 7a 65  rder to minimize
131b0 20 74 68 65 20 72 69 73 6b 0a 74 68 61 74 20 75   the risk.that u
131c0 6e 77 72 69 74 74 65 6e 20 73 65 63 74 6f 72 73  nwritten sectors
131d0 20 6d 69 67 68 74 20 62 79 20 63 68 61 6e 63 65   might by chance
131e0 20 63 6f 6e 74 61 69 6e 20 64 61 74 61 20 66 72   contain data fr
131f0 6f 6d 20 74 68 65 20 73 61 6d 65 20 70 61 67 65  om the same page
13200 0a 74 68 61 74 20 77 61 73 20 61 20 70 61 72 74  .that was a part
13210 20 6f 66 20 70 72 69 6f 72 20 6a 6f 75 72 6e 61   of prior journa
13220 6c 73 2e 20 20 42 79 20 63 68 61 6e 67 69 6e 67  ls.  By changing
13230 20 74 68 65 20 6e 6f 6e 63 65 20 66 6f 72 20 65   the nonce for e
13240 61 63 68 0a 74 72 61 6e 73 61 63 74 69 6f 6e 2c  ach.transaction,
13250 20 73 74 61 6c 65 20 64 61 74 61 20 6f 6e 20 64   stale data on d
13260 69 73 6b 20 77 69 6c 6c 20 73 74 69 6c 6c 20 67  isk will still g
13270 65 6e 65 72 61 74 65 20 61 6e 20 69 6e 63 6f 72  enerate an incor
13280 72 65 63 74 20 63 68 65 63 6b 73 75 6d 0a 61 6e  rect checksum.an
13290 64 20 62 65 20 64 65 74 65 63 74 65 64 20 77 69  d be detected wi
132a0 74 68 20 68 69 67 68 20 70 72 6f 62 61 62 69 6c  th high probabil
132b0 69 74 79 2e 20 20 54 68 65 20 63 68 65 63 6b 73  ity.  The checks
132c0 75 6d 20 6f 6e 6c 79 20 75 73 65 73 20 61 20 73  um only uses a s
132d0 70 61 72 73 65 20 73 61 6d 70 6c 65 0a 6f 66 20  parse sample.of 
132e0 33 32 2d 62 69 74 20 77 6f 72 64 73 20 66 72 6f  32-bit words fro
132f0 6d 20 74 68 65 20 64 61 74 61 20 72 65 63 6f 72  m the data recor
13300 64 20 66 6f 72 20 70 65 72 66 6f 72 6d 61 6e 63  d for performanc
13310 65 20 72 65 61 73 6f 6e 73 20 2d 20 64 65 73 69  e reasons - desi
13320 67 6e 20 73 74 75 64 69 65 73 20 0a 64 75 72 69  gn studies .duri
13330 6e 67 20 74 68 65 20 70 6c 61 6e 6e 69 6e 67 20  ng the planning 
13340 70 68 61 73 65 73 20 6f 66 20 53 51 4c 69 74 65  phases of SQLite
13350 20 33 2e 30 2e 30 20 73 68 6f 77 65 64 0a 61 20   3.0.0 showed.a 
13360 73 69 67 6e 69 66 69 63 61 6e 74 20 70 65 72 66  significant perf
13370 6f 72 6d 61 6e 63 65 20 68 69 74 20 69 6e 20 63  ormance hit in c
13380 68 65 63 6b 73 75 6d 6d 69 6e 67 20 74 68 65 20  hecksumming the 
13390 65 6e 74 69 72 65 20 70 61 67 65 2e 3c 2f 70 3e  entire page.</p>
133a0 0a 0a 3c 70 3e 4c 65 74 20 74 68 65 20 70 61 67  ..<p>Let the pag
133b0 65 20 63 6f 75 6e 74 20 76 61 6c 75 65 20 61 74  e count value at
133c0 20 6f 66 66 73 65 74 20 38 20 69 6e 20 74 68 65   offset 8 in the
133d0 20 6a 6f 75 72 6e 61 6c 20 68 65 61 64 65 72 20   journal header 
133e0 62 65 20 4d 2e 0a 5e 49 66 20 4d 20 69 73 20 67  be M..^If M is g
133f0 72 65 61 74 65 72 20 74 68 61 6e 20 7a 65 72 6f  reater than zero
13400 20 74 68 65 6e 20 61 66 74 65 72 20 4d 20 70 61   then after M pa
13410 67 65 20 72 65 63 6f 72 64 73 20 74 68 65 20 6a  ge records the j
13420 6f 75 72 6e 61 6c 20 66 69 6c 65 0a 6d 61 79 20  ournal file.may 
13430 62 65 20 7a 65 72 6f 20 70 61 64 64 65 64 20 6f  be zero padded o
13440 75 74 20 74 6f 20 74 68 65 20 6e 65 78 74 20 6d  ut to the next m
13450 75 6c 74 69 70 6c 65 20 6f 66 20 74 68 65 20 73  ultiple of the s
13460 65 63 74 6f 72 20 73 69 7a 65 20 61 6e 64 20 61  ector size and a
13470 6e 6f 74 68 65 72 0a 6a 6f 75 72 6e 61 6c 20 68  nother.journal h
13480 65 61 64 65 72 20 6d 61 79 20 62 65 20 69 6e 73  eader may be ins
13490 65 72 74 65 64 2e 20 20 5e 41 6c 6c 20 6a 6f 75  erted.  ^All jou
134a0 72 6e 61 6c 20 68 65 61 64 65 72 73 20 77 69 74  rnal headers wit
134b0 68 69 6e 20 74 68 65 20 73 61 6d 65 0a 6a 6f 75  hin the same.jou
134c0 72 6e 61 6c 20 6d 75 73 74 20 63 6f 6e 74 61 69  rnal must contai
134d0 6e 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62  n the same datab
134e0 61 73 65 20 70 61 67 65 20 73 69 7a 65 20 61 6e  ase page size an
134f0 64 20 73 65 63 74 6f 72 20 73 69 7a 65 2e 3c 2f  d sector size.</
13500 70 3e 0a 0a 3c 70 3e 5e 49 66 20 4d 20 69 73 20  p>..<p>^If M is 
13510 2d 31 20 69 6e 20 74 68 65 20 69 6e 69 74 69 61  -1 in the initia
13520 6c 20 6a 6f 75 72 6e 61 6c 20 68 65 61 64 65 72  l journal header
13530 2c 20 74 68 65 6e 20 74 68 65 20 6e 75 6d 62 65  , then the numbe
13540 72 20 6f 66 20 70 61 67 65 20 72 65 63 6f 72 64  r of page record
13550 73 0a 74 68 61 74 20 66 6f 6c 6c 6f 77 20 69 73  s.that follow is
13560 20 63 6f 6d 70 75 74 65 64 20 62 79 20 63 6f 6d   computed by com
13570 70 75 74 69 6e 67 20 68 6f 77 20 6d 61 6e 79 20  puting how many 
13580 70 61 67 65 20 72 65 63 6f 72 64 73 20 77 69 6c  page records wil
13590 6c 20 66 69 74 20 69 6e 0a 74 68 65 20 61 76 61  l fit in.the ava
135a0 69 6c 61 62 6c 65 20 73 70 61 63 65 20 6f 66 20  ilable space of 
135b0 74 68 65 20 72 65 6d 61 69 6e 64 65 72 20 6f 66  the remainder of
135c0 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20 66 69 6c   the journal fil
135d0 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f  e.</p>..<tcl>hd_
135e0 66 72 61 67 6d 65 6e 74 20 77 61 6c 66 6f 72 6d  fragment walform
135f0 61 74 20 7b 57 41 4c 20 66 6f 72 6d 61 74 7d 3c  at {WAL format}<
13600 2f 74 63 6c 3e 0a 3c 68 31 3e 54 68 65 20 57 72  /tcl>.<h1>The Wr
13610 69 74 65 2d 41 68 65 61 64 20 4c 6f 67 3c 2f 68  ite-Ahead Log</h
13620 31 3e 0a 0a 3c 70 3e 42 65 67 69 6e 6e 69 6e 67  1>..<p>Beginning
13630 20 77 69 74 68 20 5b 76 65 72 73 69 6f 6e 20 33   with [version 3
13640 2e 37 2e 30 5d 20 28 5b 64 61 74 65 6f 66 3a 33  .7.0] ([dateof:3
13650 2e 37 2e 30 5d 29 2c 20 0a 53 51 4c 69 74 65 20  .7.0]), .SQLite 
13660 73 75 70 70 6f 72 74 73 20 61 20 6e 65 77 20 74  supports a new t
13670 72 61 6e 73 61 63 74 69 6f 6e 0a 63 6f 6e 74 72  ransaction.contr
13680 6f 6c 20 6d 65 63 68 61 6e 69 73 6d 20 63 61 6c  ol mechanism cal
13690 6c 65 64 20 22 5b 57 41 4c 20 7c 20 77 72 69 74  led "[WAL | writ
136a0 65 2d 61 68 65 61 64 20 6c 6f 67 5d 22 20 6f 72  e-ahead log]" or
136b0 20 22 5b 57 41 4c 5d 22 2e 0a 5e 57 68 65 6e 20   "[WAL]"..^When 
136c0 61 20 64 61 74 61 62 61 73 65 20 69 73 20 69 6e  a database is in
136d0 20 57 41 4c 20 6d 6f 64 65 2c 20 61 6c 6c 20 63   WAL mode, all c
136e0 6f 6e 6e 65 63 74 69 6f 6e 73 20 74 6f 20 74 68  onnections to th
136f0 61 74 20 64 61 74 61 62 61 73 65 20 6d 75 73 74  at database must
13700 0a 75 73 65 20 74 68 65 20 57 41 4c 2e 20 20 5e  .use the WAL.  ^
13710 41 20 70 61 72 74 69 63 75 6c 61 72 20 64 61 74  A particular dat
13720 61 62 61 73 65 20 77 69 6c 6c 20 75 73 65 20 65  abase will use e
13730 69 74 68 65 72 20 61 20 72 6f 6c 6c 62 61 63 6b  ither a rollback
13740 20 6a 6f 75 72 6e 61 6c 0a 6f 72 20 61 20 57 41   journal.or a WA
13750 4c 2c 20 62 75 74 20 6e 6f 74 20 62 6f 74 68 20  L, but not both 
13760 61 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d 65  at the same time
13770 2e 0a 5e 54 68 65 20 57 41 4c 20 69 73 20 61 6c  ..^The WAL is al
13780 77 61 79 73 20 6c 6f 63 61 74 65 64 20 69 6e 20  ways located in 
13790 74 68 65 20 73 61 6d 65 20 64 69 72 65 63 74 6f  the same directo
137a0 72 79 20 61 73 20 74 68 65 20 64 61 74 61 62 61  ry as the databa
137b0 73 65 0a 66 69 6c 65 20 61 6e 64 20 68 61 73 20  se.file and has 
137c0 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 61 73  the same name as
137d0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
137e0 6c 65 20 62 75 74 20 77 69 74 68 20 74 68 65 20  le but with the 
137f0 73 74 72 69 6e 67 0a 22 3c 74 74 3e 2d 77 61 6c  string."<tt>-wal
13800 3c 2f 74 74 3e 22 20 61 70 70 65 6e 64 65 64 2e  </tt>" appended.
13810 3c 2f 70 3e 0a 0a 3c 68 32 3e 57 41 4c 20 46 69  </p>..<h2>WAL Fi
13820 6c 65 20 46 6f 72 6d 61 74 3c 2f 68 32 3e 0a 0a  le Format</h2>..
13830 3c 70 3e 41 20 57 41 4c 20 66 69 6c 65 20 63 6f  <p>A WAL file co
13840 6e 73 69 73 74 73 20 6f 66 20 61 20 68 65 61 64  nsists of a head
13850 65 72 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 7a  er followed by z
13860 65 72 6f 20 6f 72 20 6d 6f 72 65 20 22 66 72 61  ero or more "fra
13870 6d 65 73 22 2e 0a 45 61 63 68 20 66 72 61 6d 65  mes"..Each frame
13880 20 72 65 63 6f 72 64 73 20 74 68 65 20 72 65 76   records the rev
13890 69 73 65 64 20 63 6f 6e 74 65 6e 74 20 6f 66 20  ised content of 
138a0 61 20 73 69 6e 67 6c 65 20 70 61 67 65 20 66 72  a single page fr
138b0 6f 6d 20 74 68 65 0a 64 61 74 61 62 61 73 65 20  om the.database 
138c0 66 69 6c 65 2e 20 20 41 6c 6c 20 63 68 61 6e 67  file.  All chang
138d0 65 73 20 74 6f 20 74 68 65 20 64 61 74 61 62 61  es to the databa
138e0 73 65 20 61 72 65 20 72 65 63 6f 72 64 65 64 20  se are recorded 
138f0 62 79 20 77 72 69 74 69 6e 67 0a 66 72 61 6d 65  by writing.frame
13900 73 20 69 6e 74 6f 20 74 68 65 20 57 41 4c 2e 20  s into the WAL. 
13910 20 54 72 61 6e 73 61 63 74 69 6f 6e 73 20 63 6f   Transactions co
13920 6d 6d 69 74 20 77 68 65 6e 20 61 20 66 72 61 6d  mmit when a fram
13930 65 20 69 73 20 77 72 69 74 74 65 6e 20 74 68 61  e is written tha
13940 74 0a 63 6f 6e 74 61 69 6e 73 20 61 20 63 6f 6d  t.contains a com
13950 6d 69 74 20 6d 61 72 6b 65 72 2e 20 20 5e 41 20  mit marker.  ^A 
13960 73 69 6e 67 6c 65 20 57 41 4c 20 63 61 6e 20 61  single WAL can a
13970 6e 64 20 75 73 75 61 6c 6c 79 20 64 6f 65 73 20  nd usually does 
13980 72 65 63 6f 72 64 20 0a 6d 75 6c 74 69 70 6c 65  record .multiple
13990 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e 20 20   transactions.  
139a0 50 65 72 69 6f 64 69 63 61 6c 6c 79 2c 20 74 68  Periodically, th
139b0 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65  e content of the
139c0 20 57 41 4c 20 69 73 0a 74 72 61 6e 73 66 65 72   WAL is.transfer
139d0 72 65 64 20 62 61 63 6b 20 69 6e 74 6f 20 74 68  red back into th
139e0 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
139f0 69 6e 20 61 6e 20 6f 70 65 72 61 74 69 6f 6e 20  in an operation 
13a00 63 61 6c 6c 65 64 20 61 0a 22 63 68 65 63 6b 70  called a."checkp
13a10 6f 69 6e 74 22 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  oint".</p>..<p>^
13a20 41 20 73 69 6e 67 6c 65 20 57 41 4c 20 66 69 6c  A single WAL fil
13a30 65 20 63 61 6e 20 62 65 20 72 65 75 73 65 64 20  e can be reused 
13a40 6d 75 6c 74 69 70 6c 65 20 74 69 6d 65 73 2e 20  multiple times. 
13a50 20 5e 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73   ^In other words
13a60 2c 20 74 68 65 0a 57 41 4c 20 63 61 6e 20 66 69  , the.WAL can fi
13a70 6c 6c 20 75 70 20 77 69 74 68 20 66 72 61 6d 65  ll up with frame
13a80 73 20 61 6e 64 20 74 68 65 6e 20 62 65 20 63 68  s and then be ch
13a90 65 63 6b 70 6f 69 6e 74 65 64 20 61 6e 64 20 74  eckpointed and t
13aa0 68 65 6e 20 6e 65 77 0a 66 72 61 6d 65 73 20 63  hen new.frames c
13ab0 61 6e 20 6f 76 65 72 77 72 69 74 65 20 74 68 65  an overwrite the
13ac0 20 6f 6c 64 20 6f 6e 65 73 2e 20 20 5e 41 20 57   old ones.  ^A W
13ad0 41 4c 20 61 6c 77 61 79 73 20 67 72 6f 77 73 20  AL always grows 
13ae0 66 72 6f 6d 20 62 65 67 69 6e 6e 69 6e 67 0a 74  from beginning.t
13af0 6f 77 61 72 64 20 74 68 65 20 65 6e 64 2e 20 20  oward the end.  
13b00 43 68 65 63 6b 73 75 6d 73 20 61 6e 64 20 63 6f  Checksums and co
13b10 75 6e 74 65 72 73 20 61 74 74 61 63 68 65 64 20  unters attached 
13b20 74 6f 20 65 61 63 68 20 66 72 61 6d 65 20 61 72  to each frame ar
13b30 65 0a 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d  e.used to determ
13b40 69 6e 65 20 77 68 69 63 68 20 66 72 61 6d 65 73  ine which frames
13b50 20 77 69 74 68 69 6e 20 74 68 65 20 57 41 4c 20   within the WAL 
13b60 61 72 65 20 76 61 6c 69 64 20 61 6e 64 20 77 68  are valid and wh
13b70 69 63 68 0a 61 72 65 20 6c 65 66 74 6f 76 65 72  ich.are leftover
13b80 73 20 66 72 6f 6d 20 70 72 69 6f 72 20 63 68 65  s from prior che
13b90 63 6b 70 6f 69 6e 74 73 2e 3c 2f 70 3e 0a 0a 3c  ckpoints.</p>..<
13ba0 70 3e 5e 28 54 68 65 20 57 41 4c 20 68 65 61 64  p>^(The WAL head
13bb0 65 72 20 69 73 20 33 32 20 62 79 74 65 73 20 69  er is 32 bytes i
13bc0 6e 20 73 69 7a 65 20 61 6e 64 20 63 6f 6e 73 69  n size and consi
13bd0 73 74 73 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  sts of the follo
13be0 77 69 6e 67 20 65 69 67 68 74 0a 62 69 67 2d 65  wing eight.big-e
13bf0 6e 64 69 61 6e 20 33 32 2d 62 69 74 20 75 6e 73  ndian 32-bit uns
13c00 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 76 61  igned integer va
13c10 6c 75 65 73 3a 3c 2f 70 3e 0a 0a 3c 63 65 6e 74  lues:</p>..<cent
13c20 65 72 3e 0a 3c 69 3e 57 41 4c 20 48 65 61 64 65  er>.<i>WAL Heade
13c30 72 20 46 6f 72 6d 61 74 3c 2f 69 3e 3c 62 72 3e  r Format</i><br>
13c40 0a 3c 74 61 62 6c 65 20 77 69 64 74 68 3d 22 38  .<table width="8
13c50 30 25 22 20 62 6f 72 64 65 72 3d 31 3e 0a 3c 74  0%" border=1>.<t
13c60 72 3e 3c 74 68 3e 4f 66 66 73 65 74 3c 74 68 3e  r><th>Offset<th>
13c70 53 69 7a 65 3c 74 68 3e 44 65 73 63 72 69 70 74  Size<th>Descript
13c80 69 6f 6e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  ion.<tr><td vali
13c90 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
13ca0 74 65 72 3e 30 3c 74 64 20 76 61 6c 69 67 6e 3d  ter>0<td valign=
13cb0 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
13cc0 3e 34 0a 20 20 20 20 3c 74 64 3e 4d 61 67 69 63  >4.    <td>Magic
13cd0 20 6e 75 6d 62 65 72 2e 20 20 30 78 33 37 37 66   number.  0x377f
13ce0 30 36 38 32 20 6f 72 20 30 78 33 37 37 66 30 36  0682 or 0x377f06
13cf0 38 33 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  83.<tr><td valig
13d00 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
13d10 65 72 3e 34 3c 74 64 20 76 61 6c 69 67 6e 3d 74  er>4<td valign=t
13d20 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
13d30 34 0a 20 20 20 20 3c 74 64 3e 46 69 6c 65 20 66  4.    <td>File f
13d40 6f 72 6d 61 74 20 76 65 72 73 69 6f 6e 2e 20 20  ormat version.  
13d50 43 75 72 72 65 6e 74 6c 79 20 33 30 30 37 30 30  Currently 300700
13d60 30 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  0..<tr><td valig
13d70 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
13d80 65 72 3e 38 3c 74 64 20 76 61 6c 69 67 6e 3d 74  er>8<td valign=t
13d90 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
13da0 34 0a 20 20 20 20 3c 74 64 3e 44 61 74 61 62 61  4.    <td>Databa
13db0 73 65 20 70 61 67 65 20 73 69 7a 65 2e 20 20 45  se page size.  E
13dc0 78 61 6d 70 6c 65 3a 20 31 30 32 34 0a 3c 74 72  xample: 1024.<tr
13dd0 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
13de0 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 32 3c  align=center>12<
13df0 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
13e00 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20  ign=center>4.   
13e10 20 3c 74 64 3e 43 68 65 63 6b 70 6f 69 6e 74 20   <td>Checkpoint 
13e20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 0a  sequence number.
13e30 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74  <tr><td valign=t
13e40 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
13e50 31 36 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  16<td valign=top
13e60 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a   align=center>4.
13e70 20 20 20 20 3c 74 64 3e 53 61 6c 74 2d 31 3a 20      <td>Salt-1: 
13e80 72 61 6e 64 6f 6d 20 69 6e 74 65 67 65 72 20 69  random integer i
13e90 6e 63 72 65 6d 65 6e 74 65 64 20 77 69 74 68 20  ncremented with 
13ea0 65 61 63 68 20 63 68 65 63 6b 70 6f 69 6e 74 0a  each checkpoint.
13eb0 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74  <tr><td valign=t
13ec0 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
13ed0 32 30 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  20<td valign=top
13ee0 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a   align=center>4.
13ef0 20 20 20 20 3c 74 64 3e 53 61 6c 74 2d 32 3a 20      <td>Salt-2: 
13f00 61 20 64 69 66 66 65 72 65 6e 74 20 72 61 6e 64  a different rand
13f10 6f 6d 20 6e 75 6d 62 65 72 20 66 6f 72 20 65 61  om number for ea
13f20 63 68 20 63 68 65 63 6b 70 6f 69 6e 74 0a 3c 74  ch checkpoint.<t
13f30 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
13f40 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32 34   align=center>24
13f50 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
13f60 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20  lign=center>4.  
13f70 20 20 3c 74 64 3e 43 68 65 63 6b 73 75 6d 2d 31    <td>Checksum-1
13f80 3a 20 46 69 72 73 74 20 70 61 72 74 20 6f 66 20  : First part of 
13f90 61 20 63 68 65 63 6b 73 75 6d 20 6f 6e 20 74 68  a checksum on th
13fa0 65 20 66 69 72 73 74 20 32 34 20 62 79 74 65 73  e first 24 bytes
13fb0 20 6f 66 20 68 65 61 64 65 72 0a 3c 74 72 3e 3c   of header.<tr><
13fc0 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
13fd0 69 67 6e 3d 63 65 6e 74 65 72 3e 32 38 3c 74 64  ign=center>28<td
13fe0 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
13ff0 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c  n=center>4.    <
14000 74 64 3e 43 68 65 63 6b 73 75 6d 2d 32 3a 20 53  td>Checksum-2: S
14010 65 63 6f 6e 64 20 70 61 72 74 20 6f 66 20 74 68  econd part of th
14020 65 20 63 68 65 63 6b 73 75 6d 20 6f 6e 20 74 68  e checksum on th
14030 65 20 66 69 72 73 74 20 32 34 20 62 79 74 65 73  e first 24 bytes
14040 20 6f 66 20 68 65 61 64 65 72 0a 3c 2f 74 61 62   of header.</tab
14050 6c 65 3e 0a 3c 2f 63 65 6e 74 65 72 3e 29 5e 0a  le>.</center>)^.
14060 0a 3c 70 3e 5e 49 6d 6d 65 64 69 61 74 65 6c 79  .<p>^Immediately
14070 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20 77   following the w
14080 61 6c 2d 68 65 61 64 65 72 20 61 72 65 20 7a 65  al-header are ze
14090 72 6f 20 6f 72 20 6d 6f 72 65 20 66 72 61 6d 65  ro or more frame
140a0 73 2e 20 5e 45 61 63 68 0a 66 72 61 6d 65 20 63  s. ^Each.frame c
140b0 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 32 34 2d  onsists of a 24-
140c0 62 79 74 65 20 66 72 61 6d 65 2d 68 65 61 64 65  byte frame-heade
140d0 72 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20  r followed by a 
140e0 3c 69 3e 70 61 67 65 2d 73 69 7a 65 3c 2f 69 3e  <i>page-size</i>
140f0 20 62 79 74 65 73 0a 6f 66 20 70 61 67 65 20 64   bytes.of page d
14100 61 74 61 2e 20 5e 28 54 68 65 20 66 72 61 6d 65  ata. ^(The frame
14110 2d 68 65 61 64 65 72 20 69 73 20 73 69 78 20 62  -header is six b
14120 69 67 2d 65 6e 64 69 61 6e 20 33 32 2d 62 69 74  ig-endian 32-bit
14130 20 75 6e 73 69 67 6e 65 64 20 0a 69 6e 74 65 67   unsigned .integ
14140 65 72 20 76 61 6c 75 65 73 2c 20 61 73 20 66 6f  er values, as fo
14150 6c 6c 6f 77 73 3a 0a 0a 3c 63 65 6e 74 65 72 3e  llows:..<center>
14160 0a 3c 69 3e 57 41 4c 20 46 72 61 6d 65 20 48 65  .<i>WAL Frame He
14170 61 64 65 72 20 46 6f 72 6d 61 74 3c 2f 69 3e 3c  ader Format</i><
14180 62 72 3e 0a 3c 74 61 62 6c 65 20 77 69 64 74 68  br>.<table width
14190 3d 22 38 30 25 22 20 62 6f 72 64 65 72 3d 31 3e  ="80%" border=1>
141a0 0a 3c 74 72 3e 3c 74 68 3e 4f 66 66 73 65 74 3c  .<tr><th>Offset<
141b0 74 68 3e 53 69 7a 65 3c 74 68 3e 44 65 73 63 72  th>Size<th>Descr
141c0 69 70 74 69 6f 6e 0a 3c 74 72 3e 3c 74 64 20 76  iption.<tr><td v
141d0 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
141e0 63 65 6e 74 65 72 3e 30 3c 74 64 20 76 61 6c 69  center>0<td vali
141f0 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
14200 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 50 61  ter>4.    <td>Pa
14210 67 65 20 6e 75 6d 62 65 72 0a 3c 74 72 3e 3c 74  ge number.<tr><t
14220 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
14230 67 6e 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20 76  gn=center>4<td v
14240 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
14250 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64  center>4.    <td
14260 3e 46 6f 72 20 63 6f 6d 6d 69 74 20 72 65 63 6f  >For commit reco
14270 72 64 73 2c 20 74 68 65 20 73 69 7a 65 20 6f 66  rds, the size of
14280 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
14290 6c 65 20 69 6e 20 70 61 67 65 73 0a 20 20 20 20  le in pages.    
142a0 20 20 20 20 61 66 74 65 72 20 74 68 65 20 63 6f      after the co
142b0 6d 6d 69 74 2e 20 20 46 6f 72 20 61 6c 6c 20 6f  mmit.  For all o
142c0 74 68 65 72 20 72 65 63 6f 72 64 73 2c 20 7a 65  ther records, ze
142d0 72 6f 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  ro..<tr><td vali
142e0 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
142f0 74 65 72 3e 38 3c 74 64 20 76 61 6c 69 67 6e 3d  ter>8<td valign=
14300 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
14310 3e 34 0a 20 20 20 20 3c 74 64 3e 53 61 6c 74 2d  >4.    <td>Salt-
14320 31 20 63 6f 70 69 65 64 20 66 72 6f 6d 20 74 68  1 copied from th
14330 65 20 57 41 4c 20 68 65 61 64 65 72 0a 3c 74 72  e WAL header.<tr
14340 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
14350 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 32 3c  align=center>12<
14360 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
14370 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20  ign=center>4.   
14380 20 3c 74 64 3e 53 61 6c 74 2d 32 20 63 6f 70 69   <td>Salt-2 copi
14390 65 64 20 66 72 6f 6d 20 74 68 65 20 57 41 4c 20  ed from the WAL 
143a0 68 65 61 64 65 72 0a 3c 74 72 3e 3c 74 64 20 76  header.<tr><td v
143b0 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
143c0 63 65 6e 74 65 72 3e 31 36 3c 74 64 20 76 61 6c  center>16<td val
143d0 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
143e0 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 43  nter>4.    <td>C
143f0 68 65 63 6b 73 75 6d 2d 31 3a 20 20 43 75 6d 75  hecksum-1:  Cumu
14400 6c 61 74 69 76 65 20 63 68 65 63 6b 73 75 6d 20  lative checksum 
14410 75 70 20 74 68 72 6f 75 67 68 20 61 6e 64 20 69  up through and i
14420 6e 63 6c 75 64 69 6e 67 20 74 68 69 73 20 70 61  ncluding this pa
14430 67 65 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  ge.<tr><td valig
14440 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
14450 65 72 3e 32 30 3c 74 64 20 76 61 6c 69 67 6e 3d  er>20<td valign=
14460 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
14470 3e 34 0a 20 20 20 20 3c 74 64 3e 43 68 65 63 6b  >4.    <td>Check
14480 73 75 6d 2d 32 3a 20 20 53 65 63 6f 6e 64 20 68  sum-2:  Second h
14490 61 6c 66 20 6f 66 20 74 68 65 20 63 75 6d 75 6c  alf of the cumul
144a0 61 74 69 76 65 20 63 68 65 63 6b 73 75 6d 2e 0a  ative checksum..
144b0 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 63 65 6e 74 65  </table>.</cente
144c0 72 3e 29 5e 0a 0a 5e 28 3c 70 3e 41 20 66 72 61  r>)^..^(<p>A fra
144d0 6d 65 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64  me is considered
144e0 20 76 61 6c 69 64 20 69 66 20 61 6e 64 20 6f 6e   valid if and on
144f0 6c 79 20 69 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ly if the follow
14500 69 6e 67 20 63 6f 6e 64 69 74 69 6f 6e 73 20 61  ing conditions a
14510 72 65 0a 74 72 75 65 3a 3c 2f 70 3e 0a 0a 3c 6f  re.true:</p>..<o
14520 6c 3e 0a 3c 6c 69 3e 3c 70 3e 54 68 65 20 73 61  l>.<li><p>The sa
14530 6c 74 2d 31 20 61 6e 64 20 73 61 6c 74 2d 32 20  lt-1 and salt-2 
14540 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 66 72  values in the fr
14550 61 6d 65 2d 68 65 61 64 65 72 20 6d 61 74 63 68  ame-header match
14560 0a 20 20 20 20 20 20 20 73 61 6c 74 20 76 61 6c  .       salt val
14570 75 65 73 20 69 6e 20 74 68 65 20 77 61 6c 2d 68  ues in the wal-h
14580 65 61 64 65 72 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a  eader</p></li>..
14590 3c 6c 69 3e 3c 70 3e 54 68 65 20 63 68 65 63 6b  <li><p>The check
145a0 73 75 6d 20 76 61 6c 75 65 73 20 69 6e 20 74 68  sum values in th
145b0 65 20 66 69 6e 61 6c 20 38 20 62 79 74 65 73 20  e final 8 bytes 
145c0 6f 66 20 74 68 65 20 66 72 61 6d 65 2d 68 65 61  of the frame-hea
145d0 64 65 72 0a 20 20 20 20 20 20 20 65 78 61 63 74  der.       exact
145e0 6c 79 20 6d 61 74 63 68 20 74 68 65 20 63 68 65  ly match the che
145f0 63 6b 73 75 6d 20 63 6f 6d 70 75 74 65 64 20 63  cksum computed c
14600 6f 6e 73 65 63 75 74 69 76 65 6c 79 20 6f 6e 20  onsecutively on 
14610 74 68 65 0a 20 20 20 20 20 20 20 66 69 72 73 74  the.       first
14620 20 32 34 20 62 79 74 65 73 20 6f 66 20 74 68 65   24 bytes of the
14630 20 57 41 4c 20 68 65 61 64 65 72 20 61 6e 64 20   WAL header and 
14640 74 68 65 20 66 69 72 73 74 20 38 20 62 79 74 65  the first 8 byte
14650 73 20 61 6e 64 0a 20 20 20 20 20 20 20 74 68 65  s and.       the
14660 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61 6c 6c 20   content of all 
14670 66 72 61 6d 65 73 0a 20 20 20 20 20 20 20 75 70  frames.       up
14680 20 74 6f 20 61 6e 64 20 69 6e 63 6c 75 64 69 6e   to and includin
14690 67 20 74 68 65 20 63 75 72 72 65 6e 74 20 66 72  g the current fr
146a0 61 6d 65 2e 3c 2f 70 3e 3c 2f 6c 69 3e 3c 2f 6c  ame.</p></li></l
146b0 69 3e 0a 3c 2f 6f 6c 3e 29 5e 0a 0a 3c 74 63 6c  i>.</ol>)^..<tcl
146c0 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 77 61 6c  >hd_fragment wal
146d0 63 6b 73 6d 20 7b 57 41 4c 20 63 68 65 63 6b 73  cksm {WAL checks
146e0 75 6d 20 61 6c 67 6f 72 69 74 68 6d 7d 3c 2f 74  um algorithm}</t
146f0 63 6c 3e 0a 3c 68 32 3e 43 68 65 63 6b 73 75 6d  cl>.<h2>Checksum
14700 20 41 6c 67 6f 72 69 74 68 6d 3c 2f 68 32 3e 0a   Algorithm</h2>.
14710 0a 3c 70 3e 54 68 65 20 63 68 65 63 6b 73 75 6d  .<p>The checksum
14720 20 69 73 20 63 6f 6d 70 75 74 65 64 20 62 79 20   is computed by 
14730 69 6e 74 65 72 70 72 65 74 69 6e 67 20 74 68 65  interpreting the
14740 20 69 6e 70 75 74 20 61 73 0a 61 6e 20 65 76 65   input as.an eve
14750 6e 20 6e 75 6d 62 65 72 20 6f 66 20 75 6e 73 69  n number of unsi
14760 67 6e 65 64 20 33 32 2d 62 69 74 20 69 6e 74 65  gned 32-bit inte
14770 67 65 72 73 3a 20 78 28 30 29 20 74 68 72 6f 75  gers: x(0) throu
14780 67 68 20 78 28 4e 29 2e 0a 5e 54 68 65 20 33 32  gh x(N)..^The 32
14790 2d 62 69 74 20 69 6e 74 65 67 65 72 73 20 61 72  -bit integers ar
147a0 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 66 20  e big-endian if 
147b0 74 68 65 0a 6d 61 67 69 63 20 6e 75 6d 62 65 72  the.magic number
147c0 20 69 6e 20 74 68 65 20 66 69 72 73 74 20 34 20   in the first 4 
147d0 62 79 74 65 73 20 6f 66 20 74 68 65 20 57 41 4c  bytes of the WAL
147e0 20 68 65 61 64 65 72 20 69 73 20 30 78 33 37 37   header is 0x377
147f0 66 30 36 38 33 20 61 6e 64 0a 74 68 65 20 69 6e  f0683 and.the in
14800 74 65 67 65 72 73 20 61 72 65 20 6c 69 74 74 6c  tegers are littl
14810 65 2d 65 6e 64 69 61 6e 20 69 66 20 74 68 65 20  e-endian if the 
14820 6d 61 67 69 63 20 6e 75 6d 62 65 72 20 69 73 20  magic number is 
14830 30 78 33 37 37 66 30 36 38 32 2e 0a 5e 54 68 65  0x377f0682..^The
14840 20 63 68 65 63 6b 73 75 6d 20 76 61 6c 75 65 73   checksum values
14850 20 61 72 65 20 61 6c 77 61 79 73 20 73 74 6f 72   are always stor
14860 65 64 20 69 6e 20 74 68 65 20 66 72 61 6d 65 20  ed in the frame 
14870 68 65 61 64 65 72 20 69 6e 20 61 0a 62 69 67 2d  header in a.big-
14880 65 6e 64 69 61 6e 20 66 6f 72 6d 61 74 20 72 65  endian format re
14890 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 69 63  gardless of whic
148a0 68 20 62 79 74 65 20 6f 72 64 65 72 20 69 73 20  h byte order is 
148b0 75 73 65 64 20 74 6f 20 63 6f 6d 70 75 74 65 0a  used to compute.
148c0 74 68 65 20 63 68 65 63 6b 73 75 6d 2e 3c 2f 70  the checksum.</p
148d0 3e 0a 0a 3c 70 3e 54 68 65 20 63 68 65 63 6b 73  >..<p>The checks
148e0 75 6d 20 61 6c 67 6f 72 69 74 68 6d 20 6f 6e 6c  um algorithm onl
148f0 79 20 77 6f 72 6b 73 20 66 6f 72 20 63 6f 6e 74  y works for cont
14900 65 6e 74 20 77 68 69 63 68 20 69 73 20 61 20 6d  ent which is a m
14910 75 6c 74 69 70 6c 65 20 6f 66 0a 38 20 62 79 74  ultiple of.8 byt
14920 65 73 20 69 6e 20 6c 65 6e 67 74 68 2e 20 20 49  es in length.  I
14930 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69  n other words, i
14940 66 20 74 68 65 20 69 6e 70 75 74 73 20 61 72 65  f the inputs are
14950 20 78 28 30 29 20 74 68 72 6f 75 67 68 20 78 28   x(0) through x(
14960 4e 29 0a 74 68 65 6e 20 4e 20 6d 75 73 74 20 62  N).then N must b
14970 65 20 6f 64 64 2e 0a 5e 28 54 68 65 20 63 68 65  e odd..^(The che
14980 63 6b 73 75 6d 20 61 6c 67 6f 72 69 74 68 6d 20  cksum algorithm 
14990 69 73 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a  is as follows:..
149a0 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65  <blockquote><pre
149b0 3e 20 0a 73 30 20 3d 20 73 31 20 3d 20 30 0a 66  > .s0 = s1 = 0.f
149c0 6f 72 20 69 20 66 72 6f 6d 20 30 20 74 6f 20 6e  or i from 0 to n
149d0 2d 31 20 73 74 65 70 20 32 3a 0a 20 20 20 73 30  -1 step 2:.   s0
149e0 20 2b 3d 20 78 28 69 29 20 2b 20 73 31 3b 0a 20   += x(i) + s1;. 
149f0 20 20 73 31 20 2b 3d 20 78 28 69 2b 31 29 20 2b    s1 += x(i+1) +
14a00 20 73 30 3b 0a 65 6e 64 66 6f 72 0a 23 20 72 65   s0;.endfor.# re
14a10 73 75 6c 74 20 69 6e 20 73 30 20 61 6e 64 20 73  sult in s0 and s
14a20 31 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71  1.</pre></blockq
14a30 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 5e 54 68 65  uote>)^..<p>^The
14a40 20 6f 75 74 70 75 74 73 20 73 30 20 61 6e 64 20   outputs s0 and 
14a50 73 31 20 61 72 65 20 62 6f 74 68 20 77 65 69 67  s1 are both weig
14a60 68 74 65 64 20 63 68 65 63 6b 73 75 6d 73 20 75  hted checksums u
14a70 73 69 6e 67 20 46 69 62 6f 6e 61 63 63 69 20 77  sing Fibonacci w
14a80 65 69 67 68 74 73 0a 69 6e 20 72 65 76 65 72 73  eights.in revers
14a90 65 20 6f 72 64 65 72 2e 20 20 28 5e 54 68 65 20  e order.  (^The 
14aa0 6c 61 72 67 65 73 74 20 46 69 62 6f 6e 61 63 63  largest Fibonacc
14ab0 69 20 77 65 69 67 68 74 20 6f 63 63 75 72 73 20  i weight occurs 
14ac0 6f 6e 20 74 68 65 20 66 69 72 73 74 20 65 6c 65  on the first ele
14ad0 6d 65 6e 74 0a 6f 66 20 74 68 65 20 73 65 71 75  ment.of the sequ
14ae0 65 6e 63 65 20 62 65 69 6e 67 20 73 75 6d 6d 65  ence being summe
14af0 64 2e 29 20 20 5e 54 68 65 20 73 31 20 76 61 6c  d.)  ^The s1 val
14b00 75 65 20 73 70 61 6e 73 20 61 6c 6c 20 33 32 2d  ue spans all 32-
14b10 62 69 74 20 69 6e 74 65 67 65 72 0a 74 65 72 6d  bit integer.term
14b20 73 20 6f 66 20 74 68 65 20 73 65 71 75 65 6e 63  s of the sequenc
14b30 65 20 77 68 65 72 65 61 73 20 73 30 20 6f 6d 69  e whereas s0 omi
14b40 74 73 20 74 68 65 20 66 69 6e 61 6c 20 74 65 72  ts the final ter
14b50 6d 2e 3c 2f 70 3e 0a 0a 3c 68 32 3e 43 68 65 63  m.</p>..<h2>Chec
14b60 6b 70 6f 69 6e 74 20 41 6c 67 6f 72 69 74 68 6d  kpoint Algorithm
14b70 3c 2f 68 32 3e 0a 0a 3c 70 3e 5e 4f 6e 20 61 20  </h2>..<p>^On a 
14b80 5b 63 68 65 63 6b 70 6f 69 6e 74 5d 2c 20 74 68  [checkpoint], th
14b90 65 20 57 41 4c 20 69 73 20 66 69 72 73 74 20 66  e WAL is first f
14ba0 6c 75 73 68 65 64 20 74 6f 20 70 65 72 73 69 73  lushed to persis
14bb0 74 65 6e 74 20 73 74 6f 72 61 67 65 20 75 73 69  tent storage usi
14bc0 6e 67 0a 74 68 65 20 78 53 79 6e 63 20 6d 65 74  ng.the xSync met
14bd0 68 6f 64 20 6f 66 20 74 68 65 20 5b 73 71 6c 69  hod of the [sqli
14be0 74 65 33 5f 69 6f 5f 6d 65 74 68 6f 64 73 20 7c  te3_io_methods |
14bf0 20 56 46 53 5d 2e 20 0a 5e 54 68 65 6e 20 76 61   VFS]. .^Then va
14c00 6c 69 64 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74  lid content of t
14c10 68 65 20 57 41 4c 20 69 73 20 74 72 61 6e 73 66  he WAL is transf
14c20 65 72 72 65 64 20 69 6e 74 6f 20 74 68 65 20 64  erred into the d
14c30 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 5e 46  atabase file..^F
14c40 69 6e 61 6c 6c 79 2c 20 74 68 65 20 64 61 74 61  inally, the data
14c50 62 61 73 65 20 69 73 20 66 6c 75 73 68 65 64 20  base is flushed 
14c60 74 6f 20 70 65 72 73 69 73 74 65 6e 74 20 73 74  to persistent st
14c70 6f 72 61 67 65 20 75 73 69 6e 67 20 61 6e 6f 74  orage using anot
14c80 68 65 72 0a 78 53 79 6e 63 20 6d 65 74 68 6f 64  her.xSync method
14c90 20 63 61 6c 6c 2e 0a 54 68 65 20 78 53 79 6e 63   call..The xSync
14ca0 20 6f 70 65 72 61 74 69 6f 6e 73 20 73 65 72 76   operations serv
14cb0 65 20 61 73 20 77 72 69 74 65 20 62 61 72 72 69  e as write barri
14cc0 65 72 73 20 2d 20 61 6c 6c 20 77 72 69 74 65 73  ers - all writes
14cd0 20 6c 61 75 6e 63 68 65 64 0a 62 65 66 6f 72 65   launched.before
14ce0 20 74 68 65 20 78 53 79 6e 63 20 6d 75 73 74 20   the xSync must 
14cf0 63 6f 6d 70 6c 65 74 65 20 62 65 66 6f 72 65 20  complete before 
14d00 61 6e 79 20 77 72 69 74 65 20 74 68 61 74 20 6c  any write that l
14d10 61 75 6e 63 68 65 73 20 61 66 74 65 72 20 74 68  aunches after th
14d20 65 0a 78 53 79 6e 63 20 62 65 67 69 6e 73 2e 3c  e.xSync begins.<
14d30 2f 70 3e 0a 0a 3c 70 3e 5e 41 66 74 65 72 20 61  /p>..<p>^After a
14d40 20 63 68 65 63 6b 70 6f 69 6e 74 2c 20 6e 65 77   checkpoint, new
14d50 20 77 72 69 74 65 20 74 72 61 6e 73 61 63 74 69   write transacti
14d60 6f 6e 73 20 6f 76 65 72 77 72 69 74 65 0a 74 68  ons overwrite.th
14d70 65 20 57 41 4c 20 66 69 6c 65 20 66 72 6f 6d 20  e WAL file from 
14d80 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 20 20  the beginning.  
14d90 5e 41 74 20 74 68 65 20 73 74 61 72 74 20 6f 66  ^At the start of
14da0 20 74 68 65 20 66 69 72 73 74 20 6e 65 77 0a 77   the first new.w
14db0 72 69 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e  rite transaction
14dc0 2c 20 74 68 65 20 57 41 4c 20 68 65 61 64 65 72  , the WAL header
14dd0 20 73 61 6c 74 2d 31 20 76 61 6c 75 65 20 69 73   salt-1 value is
14de0 20 69 6e 63 72 65 6d 65 6e 74 65 64 0a 61 6e 64   incremented.and
14df0 20 74 68 65 20 73 61 6c 74 2d 32 20 76 61 6c 75   the salt-2 valu
14e00 65 20 69 73 20 72 61 6e 64 6f 6d 69 7a 65 64 2e  e is randomized.
14e10 20 20 54 68 65 73 65 20 63 68 61 6e 67 65 73 20    These changes 
14e20 74 6f 20 74 68 65 20 73 61 6c 74 73 20 69 6e 76  to the salts inv
14e30 61 6c 69 64 61 74 65 0a 6f 6c 64 20 66 72 61 6d  alidate.old fram
14e40 65 73 20 69 6e 20 74 68 65 20 57 41 4c 20 74 68  es in the WAL th
14e50 61 74 20 68 61 76 65 20 61 6c 72 65 61 64 79 20  at have already 
14e60 62 65 65 6e 20 63 68 65 63 6b 70 6f 69 6e 74 65  been checkpointe
14e70 64 20 62 75 74 20 6e 6f 74 20 79 65 74 0a 6f 76  d but not yet.ov
14e80 65 72 77 72 69 74 74 65 6e 2c 20 61 6e 64 20 70  erwritten, and p
14e90 72 65 76 65 6e 74 20 74 68 65 6d 20 66 72 6f 6d  revent them from
14ea0 20 62 65 69 6e 67 20 63 68 65 63 6b 70 6f 69 6e   being checkpoin
14eb0 74 65 64 20 61 67 61 69 6e 2e 3c 2f 70 3e 0a 0a  ted again.</p>..
14ec0 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
14ed0 20 77 61 6c 72 65 61 64 20 7b 57 41 4c 20 72 65   walread {WAL re
14ee0 61 64 20 61 6c 67 6f 72 69 74 68 6d 7d 3c 2f 74  ad algorithm}</t
14ef0 63 6c 3e 0a 3c 68 32 3e 52 65 61 64 65 72 20 41  cl>.<h2>Reader A
14f00 6c 67 6f 72 69 74 68 6d 3c 2f 68 32 3e 0a 0a 3c  lgorithm</h2>..<
14f10 70 3e 5e 28 54 6f 20 72 65 61 64 20 61 20 70 61  p>^(To read a pa
14f20 67 65 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61  ge from the data
14f30 62 61 73 65 20 28 63 61 6c 6c 20 69 74 20 70 61  base (call it pa
14f40 67 65 20 6e 75 6d 62 65 72 20 50 29 2c 20 61 20  ge number P), a 
14f50 72 65 61 64 65 72 0a 66 69 72 73 74 20 63 68 65  reader.first che
14f60 63 6b 73 20 74 68 65 20 57 41 4c 20 74 6f 20 73  cks the WAL to s
14f70 65 65 20 69 66 20 69 74 20 63 6f 6e 74 61 69 6e  ee if it contain
14f80 73 20 70 61 67 65 20 50 2e 20 20 49 66 20 73 6f  s page P.  If so
14f90 2c 20 74 68 65 6e 20 74 68 65 0a 6c 61 73 74 20  , then the.last 
14fa0 76 61 6c 69 64 20 69 6e 73 74 61 6e 63 65 20 6f  valid instance o
14fb0 66 20 70 61 67 65 20 50 20 74 68 61 74 20 69 73  f page P that is
14fc0 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 63   followed by a c
14fd0 6f 6d 6d 69 74 20 66 72 61 6d 65 0a 6f 72 20 69  ommit frame.or i
14fe0 73 20 61 20 63 6f 6d 6d 69 74 20 66 72 61 6d 65  s a commit frame
14ff0 20 69 74 73 65 6c 66 20 62 65 63 6f 6d 65 73 20   itself becomes 
15000 74 68 65 20 76 61 6c 75 65 20 72 65 61 64 2e 29  the value read.)
15010 5e 20 20 5e 49 66 20 74 68 65 20 57 41 4c 0a 63  ^  ^If the WAL.c
15020 6f 6e 74 61 69 6e 73 20 6e 6f 20 63 6f 70 69 65  ontains no copie
15030 73 20 6f 66 20 70 61 67 65 20 50 20 74 68 61 74  s of page P that
15040 20 61 72 65 20 76 61 6c 69 64 20 61 6e 64 20 77   are valid and w
15050 68 69 63 68 20 61 72 65 20 61 20 63 6f 6d 6d 69  hich are a commi
15060 74 0a 66 72 61 6d 65 20 6f 72 20 61 72 65 20 66  t.frame or are f
15070 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 63 6f 6d  ollowed by a com
15080 6d 69 74 20 66 72 61 6d 65 2c 20 74 68 65 6e 20  mit frame, then 
15090 70 61 67 65 20 50 20 69 73 20 72 65 61 64 20 66  page P is read f
150a0 72 6f 6d 0a 74 68 65 20 64 61 74 61 62 61 73 65  rom.the database
150b0 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54   file.</p>..<p>T
150c0 6f 20 73 74 61 72 74 20 61 20 72 65 61 64 20 74  o start a read t
150d0 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 20  ransaction, the 
150e0 72 65 61 64 65 72 20 72 65 63 6f 72 64 73 20 74  reader records t
150f0 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20  he index of the 
15100 6c 61 73 74 0a 76 61 6c 69 64 20 66 72 61 6d 65  last.valid frame
15110 20 69 6e 20 74 68 65 20 57 41 4c 2e 20 20 54 68   in the WAL.  Th
15120 65 20 72 65 61 64 65 72 20 75 73 65 73 20 74 68  e reader uses th
15130 69 73 20 72 65 63 6f 72 64 65 64 20 22 6d 78 46  is recorded "mxF
15140 72 61 6d 65 22 20 76 61 6c 75 65 0a 66 6f 72 20  rame" value.for 
15150 61 6c 6c 20 73 75 62 73 65 71 75 65 6e 74 20 72  all subsequent r
15160 65 61 64 20 6f 70 65 72 61 74 69 6f 6e 73 2e 20  ead operations. 
15170 20 4e 65 77 20 74 72 61 6e 73 61 63 74 69 6f 6e   New transaction
15180 73 20 63 61 6e 20 62 65 20 61 70 70 65 6e 64 65  s can be appende
15190 64 0a 74 6f 20 74 68 65 20 57 41 4c 2c 20 62 75  d.to the WAL, bu
151a0 74 20 61 73 20 6c 6f 6e 67 20 61 73 20 74 68 65  t as long as the
151b0 20 72 65 61 64 65 72 20 75 73 65 73 20 69 74 73   reader uses its
151c0 20 6f 72 69 67 69 6e 61 6c 20 6d 78 46 72 61 6d   original mxFram
151d0 65 20 76 61 6c 75 65 0a 61 6e 64 20 69 67 6e 6f  e value.and igno
151e0 72 65 73 20 73 75 62 73 65 71 75 65 6e 74 6c 79  res subsequently
151f0 20 61 70 70 65 6e 64 65 64 20 63 6f 6e 74 65 6e   appended conten
15200 74 2c 20 74 68 65 20 72 65 61 64 65 72 20 77 69  t, the reader wi
15210 6c 6c 20 73 65 65 20 61 20 0a 63 6f 6e 73 69 73  ll see a .consis
15220 74 65 6e 74 20 73 6e 61 70 73 68 6f 74 20 6f 66  tent snapshot of
15230 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 72   the database fr
15240 6f 6d 20 61 20 73 69 6e 67 6c 65 20 70 6f 69 6e  om a single poin
15250 74 20 69 6e 20 74 69 6d 65 2e 20 20 0a 5e 54 68  t in time.  .^Th
15260 69 73 20 74 65 63 68 6e 69 71 75 65 20 61 6c 6c  is technique all
15270 6f 77 73 20 6d 75 6c 74 69 70 6c 65 20 63 6f 6e  ows multiple con
15280 63 75 72 72 65 6e 74 20 72 65 61 64 65 72 73 20  current readers 
15290 74 6f 20 76 69 65 77 20 64 69 66 66 65 72 65 6e  to view differen
152a0 74 20 0a 76 65 72 73 69 6f 6e 73 20 6f 66 20 74  t .versions of t
152b0 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 74  he database cont
152c0 65 6e 74 20 73 69 6d 75 6c 74 61 6e 65 6f 75 73  ent simultaneous
152d0 6c 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  ly.</p>..<p>The 
152e0 72 65 61 64 65 72 20 61 6c 67 6f 72 69 74 68 6d  reader algorithm
152f0 20 69 6e 20 74 68 65 20 70 72 65 76 69 6f 75 73   in the previous
15300 20 70 61 72 61 67 72 61 70 68 73 20 77 6f 72 6b   paragraphs work
15310 73 20 63 6f 72 72 65 63 74 6c 79 2c 20 62 75 74  s correctly, but
15320 20 0a 62 65 63 61 75 73 65 20 66 72 61 6d 65 73   .because frames
15330 20 66 6f 72 20 70 61 67 65 20 50 20 63 61 6e 20   for page P can 
15340 61 70 70 65 61 72 20 61 6e 79 77 68 65 72 65 20  appear anywhere 
15350 77 69 74 68 69 6e 20 74 68 65 20 57 41 4c 2c 20  within the WAL, 
15360 74 68 65 0a 72 65 61 64 65 72 20 68 61 73 20 74  the.reader has t
15370 6f 20 73 63 61 6e 20 74 68 65 20 65 6e 74 69 72  o scan the entir
15380 65 20 57 41 4c 20 6c 6f 6f 6b 69 6e 67 20 66 6f  e WAL looking fo
15390 72 20 70 61 67 65 20 50 20 66 72 61 6d 65 73 2e  r page P frames.
153a0 20 20 49 66 20 74 68 65 0a 57 41 4c 20 69 73 20    If the.WAL is 
153b0 6c 61 72 67 65 20 28 6d 75 6c 74 69 70 6c 65 20  large (multiple 
153c0 6d 65 67 61 62 79 74 65 73 20 69 73 20 74 79 70  megabytes is typ
153d0 69 63 61 6c 29 20 74 68 61 74 20 73 63 61 6e 20  ical) that scan 
153e0 63 61 6e 20 62 65 20 73 6c 6f 77 2c 0a 61 6e 64  can be slow,.and
153f0 20 72 65 61 64 20 70 65 72 66 6f 72 6d 61 6e 63   read performanc
15400 65 20 73 75 66 66 65 72 73 2e 20 20 5e 54 6f 20  e suffers.  ^To 
15410 6f 76 65 72 63 6f 6d 65 20 74 68 69 73 20 70 72  overcome this pr
15420 6f 62 6c 65 6d 2c 20 61 20 73 65 70 61 72 61 74  oblem, a separat
15430 65 0a 64 61 74 61 20 73 74 72 75 63 74 75 72 65  e.data structure
15440 20 63 61 6c 6c 65 64 20 74 68 65 20 77 61 6c 2d   called the wal-
15450 69 6e 64 65 78 20 69 73 20 6d 61 69 6e 74 61 69  index is maintai
15460 6e 65 64 20 74 6f 20 65 78 70 65 64 69 74 65 20  ned to expedite 
15470 74 68 65 0a 73 65 61 72 63 68 20 66 6f 72 20 66  the.search for f
15480 72 61 6d 65 73 20 6f 66 20 61 20 70 61 72 74 69  rames of a parti
15490 63 75 6c 61 72 20 70 61 67 65 2e 3c 2f 70 3e 0a  cular page.</p>.
154a0 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
154b0 74 20 77 61 6c 69 6e 64 65 78 66 6f 72 6d 61 74  t walindexformat
154c0 20 7b 77 61 6c 2d 69 6e 64 65 78 7d 20 7b 57 41   {wal-index} {WA
154d0 4c 2d 69 6e 64 65 78 20 66 6f 72 6d 61 74 7d 3c  L-index format}<
154e0 2f 74 63 6c 3e 0a 3c 68 32 3e 57 41 4c 2d 49 6e  /tcl>.<h2>WAL-In
154f0 64 65 78 20 46 6f 72 6d 61 74 3c 2f 68 32 3e 0a  dex Format</h2>.
15500 0a 3c 70 3e 43 6f 6e 63 65 70 74 75 61 6c 6c 79  .<p>Conceptually
15510 2c 20 74 68 65 20 77 61 6c 2d 69 6e 64 65 78 20  , the wal-index 
15520 69 73 20 73 68 61 72 65 64 20 6d 65 6d 6f 72 79  is shared memory
15530 2c 20 74 68 6f 75 67 68 20 74 68 65 20 63 75 72  , though the cur
15540 72 65 6e 74 0a 56 46 53 20 69 6d 70 6c 65 6d 65  rent.VFS impleme
15550 6e 74 61 74 69 6f 6e 73 20 75 73 65 20 61 20 6d  ntations use a m
15560 6d 61 70 70 65 64 20 66 69 6c 65 20 66 6f 72 20  mapped file for 
15570 74 68 65 20 77 61 6c 2d 69 6e 64 65 78 2e 20 20  the wal-index.  
15580 5e 54 68 65 20 6d 6d 61 70 70 65 64 0a 66 69 6c  ^The mmapped.fil
15590 65 20 69 73 20 69 6e 20 74 68 65 20 73 61 6d 65  e is in the same
155a0 20 64 69 72 65 63 74 6f 72 79 20 61 73 20 74 68   directory as th
155b0 65 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 68  e database and h
155c0 61 73 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65  as the same name
155d0 0a 61 73 20 74 68 65 20 64 61 74 61 62 61 73 65  .as the database
155e0 20 77 69 74 68 20 61 20 22 3c 74 74 3e 2d 73 68   with a "<tt>-sh
155f0 6d 3c 2f 74 74 3e 22 20 73 75 66 66 69 78 20 61  m</tt>" suffix a
15600 70 70 65 6e 64 65 64 2e 20 20 42 65 63 61 75 73  ppended.  Becaus
15610 65 0a 74 68 65 20 77 61 6c 2d 69 6e 64 65 78 20  e.the wal-index 
15620 69 73 20 73 68 61 72 65 64 20 6d 65 6d 6f 72 79  is shared memory
15630 2c 20 53 51 4c 69 74 65 20 64 6f 65 73 20 6e 6f  , SQLite does no
15640 74 20 73 75 70 70 6f 72 74 20 0a 5b 50 52 41 47  t support .[PRAG
15650 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20  MA journal_mode 
15660 7c 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 3d 57  | journal_mode=W
15670 41 4c 5d 20 0a 6f 6e 20 61 20 6e 65 74 77 6f 72  AL] .on a networ
15680 6b 20 66 69 6c 65 73 79 73 74 65 6d 20 77 68 65  k filesystem whe
15690 6e 20 63 6c 69 65 6e 74 73 20 61 72 65 20 6f 6e  n clients are on
156a0 20 64 69 66 66 65 72 65 6e 74 20 6d 61 63 68 69   different machi
156b0 6e 65 73 2e 0a 41 6c 6c 20 75 73 65 72 73 20 6f  nes..All users o
156c0 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 6d  f the database m
156d0 75 73 74 20 62 65 20 61 62 6c 65 20 74 6f 20 73  ust be able to s
156e0 68 61 72 65 20 74 68 65 20 73 61 6d 65 20 6d 65  hare the same me
156f0 6d 6f 72 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  mory.</p>..<p>Th
15700 65 20 70 75 72 70 6f 73 65 20 6f 66 20 74 68 65  e purpose of the
15710 20 77 61 6c 2d 69 6e 64 65 78 20 69 73 20 74 6f   wal-index is to
15720 20 61 6e 73 77 65 72 20 74 68 69 73 20 71 75 65   answer this que
15730 73 74 69 6f 6e 20 71 75 69 63 6b 6c 79 3a 3c 2f  stion quickly:</
15740 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  p>..<blockquote>
15750 3c 69 3e 0a 47 69 76 65 6e 20 61 20 70 61 67 65  <i>.Given a page
15760 20 6e 75 6d 62 65 72 20 50 20 61 6e 64 20 61 20   number P and a 
15770 6d 61 78 69 6d 75 6d 20 57 41 4c 20 66 72 61 6d  maximum WAL fram
15780 65 20 69 6e 64 65 78 20 4d 2c 0a 72 65 74 75 72  e index M,.retur
15790 6e 20 74 68 65 20 6c 61 72 67 65 73 74 20 57 41  n the largest WA
157a0 4c 20 66 72 61 6d 65 20 69 6e 64 65 78 20 66 6f  L frame index fo
157b0 72 20 70 61 67 65 20 50 20 74 68 61 74 20 64 6f  r page P that do
157c0 65 73 20 6e 6f 74 20 65 78 63 65 65 64 20 4d 2c  es not exceed M,
157d0 20 0a 6f 72 20 72 65 74 75 72 6e 20 4e 55 4c 4c   .or return NULL
157e0 20 69 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f   if there are no
157f0 20 66 72 61 6d 65 73 20 66 6f 72 20 70 61 67 65   frames for page
15800 20 50 20 74 68 61 74 20 64 6f 20 6e 6f 74 20 65   P that do not e
15810 78 63 65 65 64 20 4d 2e 0a 3c 2f 69 3e 3c 2f 62  xceed M..</i></b
15820 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54  lockquote>..<p>T
15830 68 65 20 3c 69 3e 4d 3c 2f 69 3e 20 76 61 6c 75  he <i>M</i> valu
15840 65 20 69 6e 20 74 68 65 20 70 72 65 76 69 6f 75  e in the previou
15850 73 20 70 61 72 61 67 72 61 70 68 20 69 73 20 74  s paragraph is t
15860 68 65 20 22 6d 78 46 72 61 6d 65 22 20 76 61 6c  he "mxFrame" val
15870 75 65 0a 64 65 66 69 6e 65 64 20 69 6e 20 5b 57  ue.defined in [W
15880 41 4c 20 72 65 61 64 20 61 6c 67 6f 72 69 74 68  AL read algorith
15890 6d 20 7c 20 73 65 63 74 69 6f 6e 20 34 2e 34 5d  m | section 4.4]
158a0 20 74 68 61 74 20 69 73 20 72 65 61 64 20 61 74   that is read at
158b0 20 74 68 65 20 73 74 61 72 74 20 0a 6f 66 20 61   the start .of a
158c0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6e 64   transaction and
158d0 20 77 68 69 63 68 20 64 65 66 69 6e 65 73 20 74   which defines t
158e0 68 65 20 6d 61 78 69 6d 75 6d 20 66 72 61 6d 65  he maximum frame
158f0 20 66 72 6f 6d 20 74 68 65 20 57 41 4c 20 74 68   from the WAL th
15900 61 74 20 0a 74 68 65 20 72 65 61 64 65 72 20 77  at .the reader w
15910 69 6c 6c 20 75 73 65 2e 3c 2f 70 3e 0a 0a 3c 70  ill use.</p>..<p
15920 3e 54 68 65 20 77 61 6c 2d 69 6e 64 65 78 20 69  >The wal-index i
15930 73 20 74 72 61 6e 73 69 65 6e 74 2e 20 20 41 66  s transient.  Af
15940 74 65 72 20 61 20 63 72 61 73 68 2c 20 74 68 65  ter a crash, the
15950 20 77 61 6c 2d 69 6e 64 65 78 20 69 73 0a 72 65   wal-index is.re
15960 63 6f 6e 73 74 72 75 63 74 65 64 20 66 72 6f 6d  constructed from
15970 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 57 41   the original WA
15980 4c 20 66 69 6c 65 2e 20 20 5e 54 68 65 20 56 46  L file.  ^The VF
15990 53 20 69 73 20 72 65 71 75 69 72 65 64 0a 74 6f  S is required.to
159a0 20 65 69 74 68 65 72 20 74 72 75 6e 63 61 74 65   either truncate
159b0 20 6f 72 20 7a 65 72 6f 20 74 68 65 20 68 65 61   or zero the hea
159c0 64 65 72 20 6f 66 20 74 68 65 20 77 61 6c 2d 69  der of the wal-i
159d0 6e 64 65 78 20 77 68 65 6e 20 74 68 65 20 6c 61  ndex when the la
159e0 73 74 0a 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f  st.connection to
159f0 20 69 74 20 63 6c 6f 73 65 73 2e 20 20 42 65 63   it closes.  Bec
15a00 61 75 73 65 20 74 68 65 20 77 61 6c 2d 69 6e 64  ause the wal-ind
15a10 65 78 20 69 73 20 74 72 61 6e 73 69 65 6e 74 2c  ex is transient,
15a20 20 69 74 20 63 61 6e 0a 75 73 65 20 61 6e 20 61   it can.use an a
15a30 72 63 68 69 74 65 63 74 75 72 65 2d 73 70 65 63  rchitecture-spec
15a40 69 66 69 63 20 66 6f 72 6d 61 74 3b 20 69 74 20  ific format; it 
15a50 64 6f 65 73 20 6e 6f 74 20 68 61 76 65 20 74 6f  does not have to
15a60 20 62 65 20 63 72 6f 73 73 2d 70 6c 61 74 66 6f   be cross-platfo
15a70 72 6d 2e 0a 48 65 6e 63 65 2c 20 75 6e 6c 69 6b  rm..Hence, unlik
15a80 65 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61  e the database a
15a90 6e 64 20 57 41 4c 20 66 69 6c 65 20 66 6f 72 6d  nd WAL file form
15aa0 61 74 73 20 77 68 69 63 68 20 73 74 6f 72 65 20  ats which store 
15ab0 61 6c 6c 20 76 61 6c 75 65 73 0a 61 73 20 62 69  all values.as bi
15ac0 67 20 65 6e 64 69 61 6e 2c 20 74 68 65 20 77 61  g endian, the wa
15ad0 6c 2d 69 6e 64 65 78 20 73 74 6f 72 65 73 20 6d  l-index stores m
15ae0 75 6c 74 69 2d 62 79 74 65 20 76 61 6c 75 65 73  ulti-byte values
15af0 20 69 6e 20 74 68 65 20 6e 61 74 69 76 65 0a 62   in the native.b
15b00 79 74 65 20 6f 72 64 65 72 20 6f 66 20 74 68 65  yte order of the
15b10 20 68 6f 73 74 20 63 6f 6d 70 75 74 65 72 2e 3c   host computer.<
15b20 2f 70 3e 0a 0a 3c 70 3e 54 68 69 73 20 64 6f 63  /p>..<p>This doc
15b30 75 6d 65 6e 74 20 69 73 20 63 6f 6e 63 65 72 6e  ument is concern
15b40 65 64 20 77 69 74 68 20 74 68 65 20 70 65 72 73  ed with the pers
15b50 69 73 74 65 6e 74 20 73 74 61 74 65 20 6f 66 20  istent state of 
15b60 74 68 65 20 64 61 74 61 62 61 73 65 0a 66 69 6c  the database.fil
15b70 65 2c 20 61 6e 64 20 73 69 6e 63 65 20 74 68 65  e, and since the
15b80 20 77 61 6c 2d 69 6e 64 65 78 20 69 73 20 61 20   wal-index is a 
15b90 74 72 61 6e 73 69 65 6e 74 20 73 74 72 75 63 74  transient struct
15ba0 75 72 65 2c 20 6e 6f 20 66 75 72 74 68 65 72 20  ure, no further 
15bb0 0a 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f  .information abo
15bc0 75 74 20 74 68 65 20 66 6f 72 6d 61 74 20 6f 66  ut the format of
15bd0 20 74 68 65 20 77 61 6c 2d 69 6e 64 65 78 20 77   the wal-index w
15be0 69 6c 6c 20 62 65 20 70 72 6f 76 69 64 65 64 20  ill be provided 
15bf0 68 65 72 65 2e 0a 43 6f 6d 70 6c 65 74 65 20 64  here..Complete d
15c00 65 74 61 69 6c 73 20 6f 6e 20 74 68 65 20 66 6f  etails on the fo
15c10 72 6d 61 74 20 6f 66 20 74 68 65 20 77 61 6c 2d  rmat of the wal-
15c20 69 6e 64 65 78 20 61 72 65 20 63 6f 6e 74 61 69  index are contai
15c30 6e 65 64 20 77 69 74 68 69 6e 0a 63 6f 6d 6d 65  ned within.comme
15c40 6e 74 73 20 69 6e 20 53 51 4c 69 74 65 20 73 6f  nts in SQLite so
15c50 75 72 63 65 20 63 6f 64 65 2e 3c 2f 70 3e 0a     urce code.</p>.