Documentation Source Text

Hex Artifact Content
Login

Artifact 1cf0ef3390656a487fa4cfe61f65a13fa49f0f59:


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 64 0a 3c 2f 68  dary indexed.</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 75 73 65 64 20 62 79 20 74 68 61 74 20 74  r used by that t
ef40: 61 62 6c 65 20 69 73 20 69 6e 20 74 68 65 20 73  able is in the s
ef50: 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 2e 73  qlite_sequence.s
ef60: 65 71 0a 66 69 65 6c 64 2e 29 5e 20 20 5e 4e 65  eq.field.)^  ^Ne
ef70: 77 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  w automatically 
ef80: 67 65 6e 65 72 61 74 65 64 20 69 6e 74 65 67 65  generated intege
ef90: 72 20 70 72 69 6d 61 72 79 20 6b 65 79 73 20 66  r primary keys f
efa0: 6f 72 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  or AUTOINCREMENT
efb0: 0a 74 61 62 6c 65 73 20 61 72 65 20 67 75 61 72  .tables are guar
efc0: 61 6e 74 65 65 64 20 74 6f 20 62 65 20 6c 61 72  anteed to be lar
efd0: 67 65 72 20 74 68 61 6e 20 74 68 65 20 73 71 6c  ger than the sql
efe0: 69 74 65 5f 73 65 71 75 65 6e 63 65 2e 73 65 71  ite_sequence.seq
eff0: 20 66 69 65 6c 64 20 66 6f 72 0a 74 68 61 74 20   field for.that 
f000: 74 61 62 6c 65 2e 0a 5e 28 49 66 20 74 68 65 20  table..^(If the 
f010: 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 2e  sqlite_sequence.
f020: 73 65 71 20 66 69 65 6c 64 20 6f 66 20 61 6e 20  seq field of an 
f030: 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 74 61  AUTOINCREMENT ta
f040: 62 6c 65 20 69 73 20 61 6c 72 65 61 64 79 20 61  ble is already a
f050: 74 0a 74 68 65 20 6c 61 72 67 65 73 74 20 69 6e  t.the largest in
f060: 74 65 67 65 72 20 76 61 6c 75 65 20 28 39 32 32  teger value (922
f070: 33 33 37 32 30 33 36 38 35 34 37 37 35 38 30 37  3372036854775807
f080: 29 20 74 68 65 6e 20 61 74 74 65 6d 70 74 73 20  ) then attempts 
f090: 74 6f 20 61 64 64 20 6e 65 77 0a 72 6f 77 73 20  to add new.rows 
f0a0: 74 6f 20 74 68 61 74 20 74 61 62 6c 65 20 77 69  to that table wi
f0b0: 74 68 20 61 6e 20 61 75 74 6f 6d 61 74 69 63 61  th an automatica
f0c0: 6c 6c 79 20 67 65 6e 65 72 61 74 65 64 20 69 6e  lly generated in
f0d0: 74 65 67 65 72 20 70 72 69 6d 61 72 79 20 77 69  teger primary wi
f0e0: 6c 6c 20 66 61 69 6c 0a 77 69 74 68 20 61 6e 20  ll fail.with an 
f0f0: 5b 53 51 4c 49 54 45 5f 46 55 4c 4c 5d 20 65 72  [SQLITE_FULL] er
f100: 72 6f 72 2e 29 5e 0a 5e 54 68 65 20 73 71 6c 69  ror.)^.^The sqli
f110: 74 65 5f 73 65 71 75 65 6e 63 65 2e 73 65 71 20  te_sequence.seq 
f120: 66 69 65 6c 64 20 69 73 20 61 75 74 6f 6d 61 74  field is automat
f130: 69 63 61 6c 6c 79 20 75 70 64 61 74 65 64 20 69  ically updated i
f140: 66 20 72 65 71 75 69 72 65 64 20 77 68 65 6e 0a  f required when.
f150: 6e 65 77 20 65 6e 74 72 69 65 73 20 61 72 65 20  new entries are 
f160: 61 64 64 65 64 20 74 6f 20 61 6e 20 41 55 54 4f  added to an AUTO
f170: 49 4e 43 52 45 4d 45 4e 54 20 74 61 62 6c 65 2e  INCREMENT table.
f180: 20 20 0a 5e 54 68 65 20 73 71 6c 69 74 65 5f 73    .^The sqlite_s
f190: 65 71 75 65 6e 63 65 20 72 6f 77 20 66 6f 72 20  equence row for 
f1a0: 61 6e 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  an AUTOINCREMENT
f1b0: 20 74 61 62 6c 65 20 69 73 20 61 75 74 6f 6d 61   table is automa
f1c0: 74 69 63 61 6c 6c 79 20 64 65 6c 65 74 65 64 0a  tically deleted.
f1d0: 77 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 69  when the table i
f1e0: 73 20 64 72 6f 70 70 65 64 2e 0a 5e 49 66 20 74  s dropped..^If t
f1f0: 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e  he sqlite_sequen
f200: 63 65 20 72 6f 77 20 66 6f 72 20 61 6e 20 41 55  ce row for an AU
f210: 54 4f 49 4e 43 52 45 4d 45 4e 54 20 74 61 62 6c  TOINCREMENT tabl
f220: 65 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74  e does not exist
f230: 20 77 68 65 6e 0a 74 68 65 20 41 55 54 4f 49 4e   when.the AUTOIN
f240: 43 52 45 4d 45 4e 54 20 74 61 62 6c 65 20 69 73  CREMENT table is
f250: 20 75 70 64 61 74 65 64 2c 20 74 68 65 6e 20 61   updated, then a
f260: 20 6e 65 77 20 73 71 6c 69 74 65 5f 73 65 71 75   new sqlite_sequ
f270: 65 6e 63 65 20 72 6f 77 20 69 73 20 63 72 65 61  ence row is crea
f280: 74 65 64 2e 0a 5e 28 49 66 20 74 68 65 20 73 71  ted..^(If the sq
f290: 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 2e 73 65  lite_sequence.se
f2a0: 71 20 76 61 6c 75 65 20 66 6f 72 20 61 6e 20 41  q value for an A
f2b0: 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 74 61 62  UTOINCREMENT tab
f2c0: 6c 65 20 69 73 20 6d 61 6e 75 61 6c 6c 79 20 0a  le is manually .
f2d0: 73 65 74 20 74 6f 20 73 6f 6d 65 74 68 69 6e 67  set to something
f2e0: 20 6f 74 68 65 72 20 74 68 61 6e 20 61 6e 20 69   other than an i
f2f0: 6e 74 65 67 65 72 20 61 6e 64 20 74 68 65 72 65  nteger and there
f300: 20 69 73 20 61 20 73 75 62 73 65 71 75 65 6e 74   is a subsequent
f310: 20 61 74 74 65 6d 70 74 20 74 6f 0a 69 6e 73 65   attempt to.inse
f320: 72 74 20 74 68 65 20 6f 72 20 75 70 64 61 74 65  rt the or update
f330: 20 74 68 65 20 41 55 54 4f 49 4e 43 52 45 4d 45   the AUTOINCREME
f340: 4e 54 20 74 61 62 6c 65 2c 20 74 68 65 6e 20 74  NT table, then t
f350: 68 65 20 62 65 68 61 76 69 6f 72 20 69 73 20 75  he behavior is u
f360: 6e 64 65 66 69 6e 65 64 2e 29 5e 0a 0a 3c 70 3e  ndefined.)^..<p>
f370: 5e 41 70 70 6c 69 63 61 74 69 6f 6e 20 63 6f 64  ^Application cod
f380: 65 20 69 73 20 61 6c 6c 6f 77 65 64 20 74 6f 20  e is allowed to 
f390: 6d 6f 64 69 66 79 20 74 68 65 20 73 71 6c 69 74  modify the sqlit
f3a0: 65 5f 73 65 71 75 65 6e 63 65 20 74 61 62 6c 65  e_sequence table
f3b0: 2c 20 74 6f 20 61 64 64 0a 6e 65 77 20 72 6f 77  , to add.new row
f3c0: 73 2c 20 74 6f 20 64 65 6c 65 74 65 20 72 6f 77  s, to delete row
f3d0: 73 2c 20 6f 72 20 74 6f 20 6d 6f 64 69 66 79 20  s, or to modify 
f3e0: 65 78 69 73 74 69 6e 67 20 72 6f 77 73 2e 20 20  existing rows.  
f3f0: 5e 48 6f 77 65 76 65 72 2c 20 61 70 70 6c 69 63  ^However, applic
f400: 61 74 69 6f 6e 0a 63 6f 64 65 20 63 61 6e 6e 6f  ation.code canno
f410: 74 20 63 72 65 61 74 65 20 74 68 65 20 73 71 6c  t create the sql
f420: 69 74 65 5f 73 65 71 75 65 6e 63 65 20 74 61 62  ite_sequence tab
f430: 6c 65 20 69 66 20 69 74 20 64 6f 65 73 20 6e 6f  le if it does no
f440: 74 20 61 6c 72 65 61 64 79 20 65 78 69 73 74 2e  t already exist.
f450: 0a 5e 41 70 70 6c 69 63 61 74 69 6f 6e 20 63 6f  .^Application co
f460: 64 65 20 63 61 6e 20 64 65 6c 65 74 65 20 61 6c  de can delete al
f470: 6c 20 65 6e 74 72 69 65 73 20 66 72 6f 6d 20 74  l entries from t
f480: 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e  he sqlite_sequen
f490: 63 65 20 74 61 62 6c 65 2c 0a 62 75 74 20 61 70  ce table,.but ap
f4a0: 70 6c 69 63 61 74 69 6f 6e 20 63 6f 64 65 20 63  plication code c
f4b0: 61 6e 6e 6f 74 20 64 72 6f 70 20 74 68 65 20 73  annot drop the s
f4c0: 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 20 74  qlite_sequence t
f4d0: 61 62 6c 65 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  able...<tcl>hd_f
f4e0: 72 61 67 6d 65 6e 74 20 73 74 61 74 31 74 61 62  ragment stat1tab
f4f0: 20 7b 73 71 6c 69 74 65 5f 73 74 61 74 31 7d 20   {sqlite_stat1} 
f500: 53 51 4c 49 54 45 5f 53 54 41 54 31 20 3c 2f 74  SQLITE_STAT1 </t
f510: 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 73 71 6c 69  cl>.<h3>The sqli
f520: 74 65 5f 73 74 61 74 31 20 74 61 62 6c 65 3c 2f  te_stat1 table</
f530: 68 33 3e 0a 0a 3c 70 3e 5e 54 68 65 20 73 71 6c  h3>..<p>^The sql
f540: 69 74 65 5f 73 74 61 74 31 20 69 73 20 61 6e 20  ite_stat1 is an 
f550: 69 6e 74 65 72 6e 61 6c 20 74 61 62 6c 65 20 63  internal table c
f560: 72 65 61 74 65 64 20 62 79 20 74 68 65 20 5b 41  reated by the [A
f570: 4e 41 4c 59 5a 45 5d 20 63 6f 6d 6d 61 6e 64 0a  NALYZE] command.
f580: 61 6e 64 20 75 73 65 64 20 74 6f 20 68 6f 6c 64  and used to hold
f590: 20 73 75 70 70 6c 65 6d 65 6e 74 61 6c 20 69 6e   supplemental in
f5a0: 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
f5b0: 74 61 62 6c 65 73 20 61 6e 64 20 69 6e 64 65 78  tables and index
f5c0: 65 73 20 74 68 61 74 20 74 68 65 0a 71 75 65 72  es that the.quer
f5d0: 79 20 70 6c 61 6e 6e 65 72 20 63 61 6e 20 75 73  y planner can us
f5e0: 65 20 74 6f 20 68 65 6c 70 20 69 74 20 66 69 6e  e to help it fin
f5f0: 64 20 62 65 74 74 65 72 20 77 61 79 73 20 6f 66  d better ways of
f600: 20 70 65 72 66 6f 72 6d 69 6e 67 20 71 75 65 72   performing quer
f610: 69 65 73 2e 0a 5e 41 70 70 6c 69 63 61 74 69 6f  ies..^Applicatio
f620: 6e 73 20 63 61 6e 20 75 70 64 61 74 65 2c 20 64  ns can update, d
f630: 65 6c 65 74 65 20 66 72 6f 6d 2c 20 69 6e 73 65  elete from, inse
f640: 72 74 20 69 6e 74 6f 20 6f 72 20 64 72 6f 70 20  rt into or drop 
f650: 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 31  the sqlite_stat1
f660: 0a 74 61 62 6c 65 2c 20 62 75 74 20 6d 61 79 20  .table, but may 
f670: 6e 6f 74 20 63 72 65 61 74 65 20 6f 72 20 61 6c  not create or al
f680: 74 65 72 20 74 68 65 20 73 71 6c 69 74 65 5f 73  ter the sqlite_s
f690: 74 61 74 31 20 74 61 62 6c 65 2e 0a 5e 28 54 68  tat1 table..^(Th
f6a0: 65 20 73 63 68 65 6d 61 20 6f 66 20 74 68 65 20  e schema of the 
f6b0: 73 71 6c 69 74 65 5f 73 74 61 74 31 20 74 61 62  sqlite_stat1 tab
f6c0: 6c 65 20 69 73 20 61 73 20 66 6f 6c 6c 6f 77 73  le is as follows
f6d0: 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c  :..<blockquote><
f6e0: 70 72 65 3e 0a 43 52 45 41 54 45 20 54 41 42 4c  pre>.CREATE TABL
f6f0: 45 20 73 71 6c 69 74 65 5f 73 74 61 74 31 28 74  E sqlite_stat1(t
f700: 62 6c 2c 69 64 78 2c 73 74 61 74 29 3b 0a 3c 2f  bl,idx,stat);.</
f710: 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  pre></blockquote
f720: 3e 29 5e 0a 0a 3c 70 3e 20 5e 28 54 68 65 72 65  >)^..<p> ^(There
f730: 20 69 73 20 6e 6f 72 6d 61 6c 6c 79 20 6f 6e 65   is normally one
f740: 20 72 6f 77 20 70 65 72 20 69 6e 64 65 78 2c 20   row per index, 
f750: 77 69 74 68 20 74 68 65 20 69 6e 64 65 78 20 69  with the index i
f760: 64 65 6e 74 69 66 69 65 64 20 62 79 20 74 68 65  dentified by the
f770: 0a 6e 61 6d 65 20 69 6e 20 74 68 65 20 73 71 6c  .name in the sql
f780: 69 74 65 5f 73 74 61 74 31 2e 69 64 78 20 63 6f  ite_stat1.idx co
f790: 6c 75 6d 6e 2e 29 5e 20 20 5e 28 54 68 65 20 73  lumn.)^  ^(The s
f7a0: 71 6c 69 74 65 5f 73 74 61 74 31 2e 74 62 6c 20  qlite_stat1.tbl 
f7b0: 63 6f 6c 75 6d 6e 20 69 73 0a 74 68 65 20 6e 61  column is.the na
f7c0: 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
f7d0: 74 6f 20 77 68 69 63 68 20 74 68 65 20 69 6e 64  to which the ind
f7e0: 65 78 20 62 65 6c 6f 6e 67 73 2e 29 5e 20 20 5e  ex belongs.)^  ^
f7f0: 28 49 6e 20 65 61 63 68 20 73 75 63 68 20 72 6f  (In each such ro
f800: 77 2c 20 0a 74 68 65 20 73 71 6c 69 74 65 5f 73  w, .the sqlite_s
f810: 74 61 74 2e 73 74 61 74 20 63 6f 6c 75 6d 6e 20  tat.stat column 
f820: 77 69 6c 6c 20 62 65 0a 61 20 73 74 72 69 6e 67  will be.a string
f830: 20 63 6f 6e 73 69 73 74 69 6e 67 20 6f 66 20 61   consisting of a
f840: 20 6c 69 73 74 20 6f 66 20 69 6e 74 65 67 65 72   list of integer
f850: 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 7a 65  s followed by ze
f860: 72 6f 20 6f 72 20 6d 6f 72 65 20 0a 61 72 67 75  ro or more .argu
f870: 6d 65 6e 74 73 2e 29 5e 20 20 5e 54 68 65 20 66  ments.)^  ^The f
f880: 69 72 73 74 20 69 6e 74 65 67 65 72 20 69 6e 20  irst integer in 
f890: 74 68 69 73 0a 6c 69 73 74 20 69 73 20 74 68 65  this.list is the
f8a0: 20 61 70 70 72 6f 78 69 6d 61 74 65 20 6e 75 6d   approximate num
f8b0: 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74  ber of rows in t
f8c0: 68 65 20 69 6e 64 65 78 2e 20 20 28 54 68 65 20  he index.  (The 
f8d0: 6e 75 6d 62 65 72 20 6f 66 0a 72 6f 77 73 20 69  number of.rows i
f8e0: 6e 20 74 68 65 20 69 6e 64 65 78 20 69 73 20 74  n the index is t
f8f0: 68 65 20 73 61 6d 65 20 61 73 20 74 68 65 20 6e  he same as the n
f900: 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e  umber of rows in
f910: 20 74 68 65 20 74 61 62 6c 65 2c 0a 65 78 63 65   the table,.exce
f920: 70 74 20 66 6f 72 20 5b 70 61 72 74 69 61 6c 20  pt for [partial 
f930: 69 6e 64 65 78 65 73 5d 2e 29 0a 5e 54 68 65 20  indexes].).^The 
f940: 73 65 63 6f 6e 64 20 69 6e 74 65 67 65 72 20 69  second integer i
f950: 73 20 74 68 65 20 61 70 70 72 6f 78 69 6d 61 74  s the approximat
f960: 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  e number of rows
f970: 20 69 6e 20 74 68 65 20 69 6e 64 65 78 0a 74 68   in the index.th
f980: 61 74 20 68 61 76 65 20 74 68 65 20 73 61 6d 65  at have the same
f990: 20 76 61 6c 75 65 20 69 6e 20 74 68 65 20 66 69   value in the fi
f9a0: 72 73 74 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68  rst column of th
f9b0: 65 20 69 6e 64 65 78 2e 20 20 5e 54 68 65 20 74  e index.  ^The t
f9c0: 68 69 72 64 20 0a 69 6e 74 65 67 65 72 20 69 73  hird .integer is
f9d0: 20 74 68 65 20 6e 75 6d 62 65 72 20 6e 75 6d 62   the number numb
f9e0: 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68  er of rows in th
f9f0: 65 20 69 6e 64 65 78 20 74 68 61 74 20 68 61 76  e index that hav
fa00: 65 20 0a 74 68 65 20 73 61 6d 65 20 76 61 6c 75  e .the same valu
fa10: 65 20 66 6f 72 20 74 68 65 20 66 69 72 73 74 20  e for the first 
fa20: 74 77 6f 20 63 6f 6c 75 6d 6e 73 2e 20 20 5e 54  two columns.  ^T
fa30: 68 65 20 4e 2d 74 68 20 69 6e 74 65 67 65 72 20  he N-th integer 
fa40: 28 66 6f 72 20 4e 3e 31 29 20 0a 69 73 20 74 68  (for N>1) .is th
fa50: 65 20 65 73 74 69 6d 61 74 65 64 20 61 76 65 72  e estimated aver
fa60: 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  age number of ro
fa70: 77 73 20 69 6e 20 0a 74 68 65 20 69 6e 64 65 78  ws in .the index
fa80: 20 77 68 69 63 68 20 68 61 76 65 20 74 68 65 20   which have the 
fa90: 73 61 6d 65 20 76 61 6c 75 65 20 66 6f 72 20 74  same value for t
faa0: 68 65 20 66 69 72 73 74 20 4e 2d 31 20 63 6f 6c  he first N-1 col
fab0: 75 6d 6e 73 2e 20 20 5e 46 6f 72 0a 61 20 4b 2d  umns.  ^For.a K-
fac0: 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 2c 20 74 68  column index, th
fad0: 65 72 65 20 77 69 6c 6c 20 62 65 20 4b 2b 31 20  ere will be K+1 
fae0: 69 6e 74 65 67 65 72 73 20 69 6e 20 74 68 65 20  integers in the 
faf0: 73 74 61 74 20 63 6f 6c 75 6d 6e 2e 20 20 5e 49  stat column.  ^I
fb00: 66 0a 74 68 65 20 69 6e 64 65 78 20 69 73 20 75  f.the index is u
fb10: 6e 69 71 75 65 2c 20 74 68 65 6e 20 74 68 65 20  nique, then the 
fb20: 6c 61 73 74 20 69 6e 74 65 67 65 72 20 77 69 6c  last integer wil
fb30: 6c 20 62 65 20 31 2e 0a 0a 3c 70 3e 5e 54 68 65  l be 1...<p>^The
fb40: 20 6c 69 73 74 20 6f 66 20 69 6e 74 65 67 65 72   list of integer
fb50: 73 20 69 6e 20 74 68 65 20 73 74 61 74 20 63 6f  s in the stat co
fb60: 6c 75 6d 6e 20 63 61 6e 20 6f 70 74 69 6f 6e 61  lumn can optiona
fb70: 6c 6c 79 20 62 65 20 66 6f 6c 6c 6f 77 65 64 0a  lly be followed.
fb80: 62 79 20 61 72 67 75 6d 65 6e 74 73 2c 20 65 61  by arguments, ea
fb90: 63 68 20 6f 66 20 77 68 69 63 68 20 69 73 20 61  ch of which is a
fba0: 20 73 65 71 75 65 6e 63 65 20 6f 66 20 6e 6f 6e   sequence of non
fbb0: 2d 73 70 61 63 65 20 63 68 61 72 61 63 74 65 72  -space character
fbc0: 73 2e 0a 5e 41 6c 6c 20 61 72 67 75 6d 65 6e 74  s..^All argument
fbd0: 73 20 61 72 65 20 70 72 65 63 65 64 65 64 20 62  s are preceded b
fbe0: 79 20 61 20 73 69 6e 67 6c 65 20 73 70 61 63 65  y a single space
fbf0: 2e 0a 5e 55 6e 72 65 63 6f 67 6e 69 7a 65 64 20  ..^Unrecognized 
fc00: 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 73 69  arguments are si
fc10: 6c 65 6e 74 6c 79 20 69 67 6e 6f 72 65 64 2e 0a  lently ignored..
fc20: 0a 3c 70 3e 5e 49 66 20 74 68 65 20 22 75 6e 6f  .<p>^If the "uno
fc30: 72 64 65 72 65 64 22 20 61 72 67 75 6d 65 6e 74  rdered" argument
fc40: 20 69 73 20 70 72 65 73 65 6e 74 2c 20 74 68 65   is present, the
fc50: 6e 20 74 68 65 20 71 75 65 72 79 20 70 6c 61 6e  n the query plan
fc60: 6e 65 72 20 61 73 73 75 6d 65 73 0a 74 68 61 74  ner assumes.that
fc70: 20 74 68 65 20 69 6e 64 65 78 20 69 73 20 75 6e   the index is un
fc80: 6f 72 64 65 72 65 64 20 61 6e 64 20 77 69 6c 6c  ordered and will
fc90: 20 6e 6f 74 20 75 73 65 20 74 68 65 20 69 6e 64   not use the ind
fca0: 65 78 20 66 6f 72 20 61 20 72 61 6e 67 65 20 71  ex for a range q
fcb0: 75 65 72 79 0a 6f 72 20 66 6f 72 20 73 6f 72 74  uery.or for sort
fcc0: 69 6e 67 2e 0a 0a 3c 70 3e 5e 54 68 65 20 22 73  ing...<p>^The "s
fcd0: 7a 3d 4e 4e 4e 22 20 61 72 67 75 6d 65 6e 74 20  z=NNN" argument 
fce0: 28 77 68 65 72 65 20 4e 4e 4e 20 72 65 70 72 65  (where NNN repre
fcf0: 73 65 6e 74 73 20 61 20 73 65 71 75 65 6e 63 65  sents a sequence
fd00: 20 6f 66 20 31 20 6f 72 20 6d 6f 72 65 20 64 69   of 1 or more di
fd10: 67 69 74 73 29 0a 6d 65 61 6e 73 20 74 68 61 74  gits).means that
fd20: 20 74 68 65 20 61 76 65 72 61 67 65 20 72 6f 77   the average row
fd30: 20 73 69 7a 65 20 6f 76 65 72 20 61 6c 6c 20 72   size over all r
fd40: 65 63 6f 72 64 73 20 6f 66 20 74 68 65 20 74 61  ecords of the ta
fd50: 62 6c 65 20 6f 72 0a 69 6e 64 65 78 20 69 73 20  ble or.index is 
fd60: 4e 4e 4e 20 62 79 74 65 73 20 70 65 72 20 72 6f  NNN bytes per ro
fd70: 77 2e 20 20 5e 54 68 65 20 53 51 4c 69 74 65 20  w.  ^The SQLite 
fd80: 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 6d 69  query planner mi
fd90: 67 68 74 20 75 73 65 20 74 68 65 0a 65 73 74 69  ght use the.esti
fda0: 6d 61 74 65 64 20 72 6f 77 20 73 69 7a 65 20 69  mated row size i
fdb0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 70 72 6f 76 69  nformation provi
fdc0: 64 65 64 20 62 79 20 74 68 65 20 22 73 7a 3d 4e  ded by the "sz=N
fdd0: 4e 4e 22 20 74 6f 6b 65 6e 0a 74 6f 20 68 65 6c  NN" token.to hel
fde0: 70 20 69 74 20 63 68 6f 6f 73 65 20 73 6d 61 6c  p it choose smal
fdf0: 6c 65 72 20 74 61 62 6c 65 73 20 61 6e 64 20 69  ler tables and i
fe00: 6e 64 65 78 65 73 20 74 68 61 74 20 72 65 71 75  ndexes that requ
fe10: 69 72 65 20 6c 65 73 73 20 64 69 73 6b 20 49 2f  ire less disk I/
fe20: 4f 2e 0a 0a 3c 70 3e 5e 28 54 68 65 20 70 72 65  O...<p>^(The pre
fe30: 73 65 6e 63 65 20 6f 66 20 74 68 65 20 22 6e 6f  sence of the "no
fe40: 73 6b 69 70 73 63 61 6e 22 20 74 6f 6b 65 6e 20  skipscan" token 
fe50: 6f 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74  on the sqlite_st
fe60: 61 74 31 2e 73 74 61 74 20 66 69 65 6c 64 0a 6f  at1.stat field.o
fe70: 66 20 61 6e 20 69 6e 64 65 78 20 70 72 65 76 65  f an index preve
fe80: 6e 74 73 20 74 68 61 74 20 69 6e 64 65 78 20 66  nts that index f
fe90: 72 6f 6d 20 62 65 69 6e 67 20 75 73 65 64 20 77  rom being used w
fea0: 69 74 68 20 74 68 65 0a 5b 73 6b 69 70 2d 73 63  ith the.[skip-sc
feb0: 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 5d  an optimization]
fec0: 2e 29 5e 0a 0a 3c 70 3e 4e 65 77 20 74 65 78 74  .)^..<p>New text
fed0: 20 74 6f 6b 65 6e 73 20 6d 61 79 20 62 65 20 61   tokens may be a
fee0: 64 64 65 64 20 74 6f 20 74 68 65 20 65 6e 64 20  dded to the end 
fef0: 6f 66 20 74 68 65 20 73 74 61 74 20 63 6f 6c 75  of the stat colu
ff00: 6d 6e 20 69 6e 20 66 75 74 75 72 65 0a 65 6e 68  mn in future.enh
ff10: 61 6e 63 65 6d 65 6e 74 73 20 74 6f 20 53 51 4c  ancements to SQL
ff20: 69 74 65 2e 20 20 46 6f 72 20 63 6f 6d 70 61 74  ite.  For compat
ff30: 69 62 69 6c 69 74 79 2c 20 75 6e 72 65 63 6f 67  ibility, unrecog
ff40: 6e 69 7a 65 64 20 74 6f 6b 65 6e 73 20 61 74 20  nized tokens at 
ff50: 74 68 65 20 65 6e 64 0a 6f 66 20 74 68 65 20 73  the end.of the s
ff60: 74 61 74 20 63 6f 6c 75 6d 6e 20 61 72 65 20 73  tat column are s
ff70: 69 6c 65 6e 74 6c 79 20 69 67 6e 6f 72 65 64 2e  ilently ignored.
ff80: 0a 0a 3c 70 3e 5e 28 49 66 20 74 68 65 20 73 71  ..<p>^(If the sq
ff90: 6c 69 74 65 5f 73 74 61 74 31 2e 69 64 78 20 63  lite_stat1.idx c
ffa0: 6f 6c 75 6d 6e 20 69 73 20 4e 55 4c 4c 2c 20 74  olumn is NULL, t
ffb0: 68 65 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73  hen the sqlite_s
ffc0: 74 61 74 31 2e 73 74 61 74 0a 63 6f 6c 75 6d 6e  tat1.stat.column
ffd0: 20 63 6f 6e 74 61 69 6e 73 20 61 20 73 69 6e 67   contains a sing
ffe0: 6c 65 20 69 6e 74 65 67 65 72 20 77 68 69 63 68  le integer which
fff0: 20 69 73 20 74 68 65 20 61 70 70 72 6f 78 69 6d   is the approxim
10000 61 74 65 20 6e 75 6d 62 65 72 20 6f 66 0a 72 6f  ate number of.ro
10010 77 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20  ws in the table 
10020 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 73 71  identified by sq
10030 6c 69 74 65 5f 73 74 61 74 31 2e 74 62 6c 2e 29  lite_stat1.tbl.)
10040 5e 0a 5e 28 49 66 20 74 68 65 20 73 71 6c 69 74  ^.^(If the sqlit
10050 65 5f 73 74 61 74 31 2e 69 64 78 20 63 6f 6c 75  e_stat1.idx colu
10060 6d 6e 20 69 73 20 74 68 65 20 73 61 6d 65 20 61  mn is the same a
10070 73 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61  s the sqlite_sta
10080 74 31 2e 74 62 6c 0a 63 6f 6c 75 6d 6e 2c 20 74  t1.tbl.column, t
10090 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 69 73  hen the table is
100a0 20 61 20 5b 57 49 54 48 4f 55 54 20 52 4f 57 49   a [WITHOUT ROWI
100b0 44 5d 20 74 61 62 6c 65 20 61 6e 64 20 74 68 65  D] table and the
100c0 20 73 71 6c 69 74 65 5f 73 74 61 74 31 2e 73 74   sqlite_stat1.st
100d0 61 74 0a 66 69 65 6c 64 20 63 6f 6e 74 61 69 6e  at.field contain
100e0 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  s information ab
100f0 6f 75 74 20 74 68 65 20 69 6e 64 65 78 20 62 74  out the index bt
10100 72 65 65 20 74 68 61 74 20 69 6d 70 6c 65 6d 65  ree that impleme
10110 6e 74 73 20 74 68 65 0a 57 49 54 48 4f 55 54 20  nts the.WITHOUT 
10120 52 4f 57 49 44 20 74 61 62 6c 65 2e 29 5e 0a 0a  ROWID table.)^..
10130 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
10140 20 73 74 61 74 32 74 61 62 20 7b 73 71 6c 69 74   stat2tab {sqlit
10150 65 5f 73 74 61 74 32 7d 3c 2f 74 63 6c 3e 0a 3c  e_stat2}</tcl>.<
10160 68 33 3e 54 68 65 20 73 71 6c 69 74 65 5f 73 74  h3>The sqlite_st
10170 61 74 32 20 74 61 62 6c 65 3c 2f 68 33 3e 0a 0a  at2 table</h3>..
10180 3c 70 3e 54 68 65 20 73 71 6c 69 74 65 5f 73 74  <p>The sqlite_st
10190 61 74 32 20 69 73 20 6f 6e 6c 79 20 63 72 65 61  at2 is only crea
101a0 74 65 64 20 61 6e 64 20 69 73 20 6f 6e 6c 79 20  ted and is only 
101b0 75 73 65 64 20 69 66 20 53 51 4c 69 74 65 20 69  used if SQLite i
101c0 73 20 63 6f 6d 70 69 6c 65 64 0a 77 69 74 68 20  s compiled.with 
101d0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
101e0 41 54 32 20 61 6e 64 20 69 66 20 74 68 65 20 53  AT2 and if the S
101f0 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20 6e 75  QLite version nu
10200 6d 62 65 72 20 69 73 20 62 65 74 77 65 65 6e 0a  mber is between.
10210 33 2e 36 2e 31 38 20 61 6e 64 20 33 2e 37 2e 38  3.6.18 and 3.7.8
10220 2e 20 20 54 68 65 20 73 71 6c 69 74 65 5f 73 74  .  The sqlite_st
10230 61 74 32 20 74 61 62 6c 65 20 69 73 20 6e 65 69  at2 table is nei
10240 74 68 65 72 20 72 65 61 64 20 6e 6f 72 20 77 72  ther read nor wr
10250 69 74 74 65 6e 20 62 79 20 61 6e 79 0a 76 65 72  itten by any.ver
10260 73 69 6f 6e 20 6f 66 20 53 51 4c 69 74 65 20 62  sion of SQLite b
10270 65 66 6f 72 65 20 33 2e 36 2e 31 38 20 6e 6f 72  efore 3.6.18 nor
10280 20 61 66 74 65 72 20 33 2e 37 2e 38 2e 0a 54 68   after 3.7.8..Th
10290 65 20 73 71 6c 69 74 65 5f 73 74 61 74 32 20 74  e sqlite_stat2 t
102a0 61 62 6c 65 20 63 6f 6e 74 61 69 6e 73 20 61 64  able contains ad
102b0 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
102c0 74 69 6f 6e 0a 61 62 6f 75 74 20 74 68 65 20 64  tion.about the d
102d0 69 73 74 72 69 62 75 74 69 6f 6e 20 6f 66 20 6b  istribution of k
102e0 65 79 73 20 77 69 74 68 69 6e 20 61 6e 20 69 6e  eys within an in
102f0 64 65 78 2e 0a 54 68 65 20 73 63 68 65 6d 61 20  dex..The schema 
10300 6f 66 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74  of the sqlite_st
10310 61 74 32 20 74 61 62 6c 65 20 69 73 20 61 73 20  at2 table is as 
10320 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 62 6c 6f 63 6b  follows:..<block
10330 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 43 52 45 41  quote><pre>.CREA
10340 54 45 20 54 41 42 4c 45 20 73 71 6c 69 74 65 5f  TE TABLE sqlite_
10350 73 74 61 74 32 28 74 62 6c 2c 69 64 78 2c 73 61  stat2(tbl,idx,sa
10360 6d 70 6c 65 6e 6f 2c 73 61 6d 70 6c 65 29 3b 0a  mpleno,sample);.
10370 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f  </pre></blockquo
10380 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 73 71 6c 69  te>..<p>The sqli
10390 74 65 5f 73 74 61 74 32 2e 69 64 78 20 63 6f 6c  te_stat2.idx col
103a0 75 6d 6e 20 61 6e 64 20 74 68 65 20 73 71 6c 69  umn and the sqli
103b0 74 65 5f 73 74 61 74 32 2e 74 62 6c 20 63 6f 6c  te_stat2.tbl col
103c0 75 6d 6e 20 69 6e 20 65 61 63 68 20 0a 72 6f 77  umn in each .row
103d0 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 5f 73   of the sqlite_s
103e0 74 61 74 32 20 74 61 62 6c 65 20 69 64 65 6e 74  tat2 table ident
103f0 69 66 79 20 61 6e 20 69 6e 64 65 78 20 64 65 73  ify an index des
10400 63 72 69 62 65 64 20 62 79 20 74 68 61 74 20 72  cribed by that r
10410 6f 77 2e 0a 54 68 65 72 65 20 61 72 65 20 75 73  ow..There are us
10420 75 61 6c 6c 79 20 31 30 20 72 6f 77 73 20 69 6e  ually 10 rows in
10430 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74   the sqlite_stat
10440 32 0a 74 61 62 6c 65 20 66 6f 72 20 65 61 63 68  2.table for each
10450 20 69 6e 64 65 78 2e 0a 0a 3c 70 3e 54 68 65 20   index...<p>The 
10460 73 71 6c 69 74 65 5f 73 74 61 74 32 20 65 6e 74  sqlite_stat2 ent
10470 72 69 65 73 20 66 6f 72 20 61 6e 20 69 6e 64 65  ries for an inde
10480 78 20 74 68 61 74 20 68 61 76 65 20 73 71 6c 69  x that have sqli
10490 74 65 5f 73 74 61 74 32 2e 73 61 6d 70 6c 65 6e  te_stat2.samplen
104a0 6f 0a 62 65 74 77 65 65 6e 20 30 20 61 6e 64 20  o.between 0 and 
104b0 39 20 69 6e 63 6c 75 73 69 76 65 20 61 72 65 20  9 inclusive are 
104c0 73 61 6d 70 6c 65 73 20 6f 66 20 74 68 65 20 6c  samples of the l
104d0 65 66 74 2d 6d 6f 73 74 20 6b 65 79 20 76 61 6c  eft-most key val
104e0 75 65 20 69 6e 20 74 68 65 0a 69 6e 64 65 78 20  ue in the.index 
104f0 74 61 6b 65 6e 20 61 74 20 65 76 65 6e 6c 79 20  taken at evenly 
10500 73 70 61 63 65 64 20 70 6f 69 6e 74 73 20 61 6c  spaced points al
10510 6f 6e 67 20 74 68 65 20 69 6e 64 65 78 2e 0a 4c  ong the index..L
10520 65 74 20 43 20 62 65 20 74 68 65 20 6e 75 6d 62  et C be the numb
10530 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68  er of rows in th
10540 65 20 69 6e 64 65 78 2e 0a 54 68 65 6e 20 74 68  e index..Then th
10550 65 20 73 61 6d 70 6c 65 64 20 72 6f 77 73 20 61  e sampled rows a
10560 72 65 20 67 69 76 65 6e 20 62 79 0a 0a 3c 62 6c  re given by..<bl
10570 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 20 20 20 72  ockquote>.     r
10580 6f 77 6e 75 6d 62 65 72 20 3d 20 28 69 2a 43 2a  ownumber = (i*C*
10590 32 20 2b 20 43 29 2f 32 30 0a 3c 2f 62 6c 6f 63  2 + C)/20.</bloc
105a0 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 20  kquote>..<p>The 
105b0 76 61 72 69 61 62 6c 65 20 69 20 69 6e 20 74 68  variable i in th
105c0 65 20 70 72 65 76 69 6f 75 73 20 65 78 70 72 65  e previous expre
105d0 73 73 69 6f 6e 20 76 61 72 69 65 73 20 62 65 74  ssion varies bet
105e0 77 65 65 6e 20 30 20 61 6e 64 20 39 2e 0a 43 6f  ween 0 and 9..Co
105f0 6e 63 65 70 74 75 61 6c 6c 79 2c 20 74 68 65 20  nceptually, the 
10600 69 6e 64 65 78 20 73 70 61 63 65 20 69 73 20 64  index space is d
10610 69 76 69 64 65 64 20 69 6e 74 6f 0a 31 30 20 75  ivided into.10 u
10620 6e 69 66 6f 72 6d 20 62 75 63 6b 65 74 73 20 61  niform buckets a
10630 6e 64 20 74 68 65 20 73 61 6d 70 6c 65 73 20 61  nd the samples a
10640 72 65 20 74 68 65 20 6d 69 64 64 6c 65 20 72 6f  re the middle ro
10650 77 20 66 72 6f 6d 20 65 61 63 68 20 62 75 63 6b  w from each buck
10660 65 74 2e 0a 0a 3c 70 3e 54 68 65 20 66 6f 72 6d  et...<p>The form
10670 61 74 20 66 6f 72 20 73 71 6c 69 74 65 5f 73 74  at for sqlite_st
10680 61 74 32 20 69 73 20 72 65 63 6f 72 64 65 64 20  at2 is recorded 
10690 68 65 72 65 20 66 6f 72 20 6c 65 67 61 63 79 20  here for legacy 
106a0 72 65 66 65 72 65 6e 63 65 2e 20 20 0a 52 65 63  reference.  .Rec
106b0 65 6e 74 20 76 65 72 73 69 6f 6e 73 20 6f 66 20  ent versions of 
106c0 53 51 4c 69 74 65 20 6e 6f 20 6c 6f 6e 67 65 72  SQLite no longer
106d0 20 73 75 70 70 6f 72 74 20 73 71 6c 69 74 65 5f   support sqlite_
106e0 73 74 61 74 32 20 61 6e 64 20 74 68 65 0a 73 71  stat2 and the.sq
106f0 6c 69 74 65 5f 73 74 61 74 32 20 74 61 62 6c 65  lite_stat2 table
10700 2c 20 69 74 20 69 73 20 65 78 69 73 74 73 2c 20  , it is exists, 
10710 69 73 20 73 69 6d 70 6c 79 20 69 67 6e 6f 72 65  is simply ignore
10720 64 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  d...<tcl>hd_frag
10730 6d 65 6e 74 20 73 74 61 74 33 74 61 62 20 7b 73  ment stat3tab {s
10740 71 6c 69 74 65 5f 73 74 61 74 33 7d 20 53 51 4c  qlite_stat3} SQL
10750 49 54 45 5f 53 54 41 54 33 3c 2f 74 63 6c 3e 0a  ITE_STAT3</tcl>.
10760 3c 68 33 3e 54 68 65 20 73 71 6c 69 74 65 5f 73  <h3>The sqlite_s
10770 74 61 74 33 20 74 61 62 6c 65 3c 2f 68 33 3e 0a  tat3 table</h3>.
10780 0a 3c 70 3e 54 68 65 20 73 71 6c 69 74 65 5f 73  .<p>The sqlite_s
10790 74 61 74 33 20 69 73 20 6f 6e 6c 79 20 75 73 65  tat3 is only use
107a0 64 20 69 66 20 53 51 4c 69 74 65 20 69 73 20 63  d if SQLite is c
107b0 6f 6d 70 69 6c 65 64 0a 77 69 74 68 20 5b 53 51  ompiled.with [SQ
107c0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
107d0 33 5d 20 6f 72 20 5b 53 51 4c 49 54 45 5f 45 4e  3] or [SQLITE_EN
107e0 41 42 4c 45 5f 53 54 41 54 34 5d 0a 61 6e 64 20  ABLE_STAT4].and 
107f0 69 66 20 74 68 65 20 53 51 4c 69 74 65 20 76 65  if the SQLite ve
10800 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 69 73 20  rsion number is 
10810 33 2e 37 2e 39 20 6f 72 20 67 72 65 61 74 65 72  3.7.9 or greater
10820 2e 0a 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61  ..The sqlite_sta
10830 74 33 20 74 61 62 6c 65 20 69 73 20 6e 65 69 74  t3 table is neit
10840 68 65 72 20 72 65 61 64 20 6e 6f 72 20 77 72 69  her read nor wri
10850 74 74 65 6e 20 62 79 20 61 6e 79 0a 76 65 72 73  tten by any.vers
10860 69 6f 6e 20 6f 66 20 53 51 4c 69 74 65 20 62 65  ion of SQLite be
10870 66 6f 72 65 20 33 2e 37 2e 39 2e 0a 49 66 20 74  fore 3.7.9..If t
10880 68 65 20 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c  he [SQLITE_ENABL
10890 45 5f 53 54 41 54 34 5d 20 63 6f 6d 70 69 6c 65  E_STAT4] compile
108a0 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20  -time option is 
108b0 75 73 65 64 20 61 6e 64 20 74 68 65 0a 53 51 4c  used and the.SQL
108c0 69 74 65 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62  ite version numb
108d0 65 72 20 69 73 20 33 2e 38 2e 31 20 6f 72 20 67  er is 3.8.1 or g
108e0 72 65 61 74 65 72 2c 20 74 68 65 6e 20 73 71 6c  reater, then sql
108f0 69 74 65 5f 73 74 61 74 33 20 6d 69 67 68 74 0a  ite_stat3 might.
10900 62 65 20 72 65 61 64 20 62 75 74 20 6e 6f 74 20  be read but not 
10910 77 72 69 74 74 65 6e 2e 0a 54 68 65 20 73 71 6c  written..The sql
10920 69 74 65 5f 73 74 61 74 33 20 74 61 62 6c 65 20  ite_stat3 table 
10930 63 6f 6e 74 61 69 6e 73 20 61 64 64 69 74 69 6f  contains additio
10940 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a  nal information.
10950 61 62 6f 75 74 20 74 68 65 20 64 69 73 74 72 69  about the distri
10960 62 75 74 69 6f 6e 20 6f 66 20 6b 65 79 73 20 77  bution of keys w
10970 69 74 68 69 6e 20 61 6e 20 69 6e 64 65 78 2c 20  ithin an index, 
10980 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74  information that
10990 20 74 68 65 0a 71 75 65 72 79 20 70 6c 61 6e 6e   the.query plann
109a0 65 72 20 63 61 6e 20 75 73 65 20 74 6f 20 64 65  er can use to de
109b0 76 69 73 65 20 62 65 74 74 65 72 20 61 6e 64 20  vise better and 
109c0 66 61 73 74 65 72 20 71 75 65 72 79 20 61 6c 67  faster query alg
109d0 6f 72 69 74 68 6d 73 2e 0a 5e 28 54 68 65 20 73  orithms..^(The s
109e0 63 68 65 6d 61 20 6f 66 20 74 68 65 20 73 71 6c  chema of the sql
109f0 69 74 65 5f 73 74 61 74 33 20 74 61 62 6c 65 20  ite_stat3 table 
10a00 69 73 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a  is as follows:..
10a10 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65  <blockquote><pre
10a20 3e 0a 43 52 45 41 54 45 20 54 41 42 4c 45 20 73  >.CREATE TABLE s
10a30 71 6c 69 74 65 5f 73 74 61 74 33 28 74 62 6c 2c  qlite_stat3(tbl,
10a40 69 64 78 2c 6e 45 71 2c 6e 4c 74 2c 6e 44 4c 74  idx,nEq,nLt,nDLt
10a50 2c 73 61 6d 70 6c 65 29 3b 0a 3c 2f 70 72 65 3e  ,sample);.</pre>
10a60 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a  </blockquote>)^.
10a70 0a 3c 70 3e 54 68 65 72 65 20 61 72 65 20 75 73  .<p>There are us
10a80 75 61 6c 6c 79 20 6d 75 6c 74 69 70 6c 65 20 65  ually multiple e
10a90 6e 74 72 69 65 73 20 69 6e 20 74 68 65 20 73 71  ntries in the sq
10aa0 6c 69 74 65 5f 73 74 61 74 33 20 74 61 62 6c 65  lite_stat3 table
10ab0 20 66 6f 72 20 65 61 63 68 20 69 6e 64 65 78 2e   for each index.
10ac0 0a 5e 28 54 68 65 20 73 71 6c 69 74 65 5f 73 74  .^(The sqlite_st
10ad0 61 74 33 2e 73 61 6d 70 6c 65 20 63 6f 6c 75 6d  at3.sample colum
10ae0 6e 20 68 6f 6c 64 73 20 74 68 65 20 76 61 6c 75  n holds the valu
10af0 65 20 6f 66 20 74 68 65 20 6c 65 66 74 2d 6d 6f  e of the left-mo
10b00 73 74 20 66 69 65 6c 64 20 6f 66 20 61 6e 0a 69  st field of an.i
10b10 6e 64 65 78 20 69 64 65 6e 74 69 66 69 65 64 20  ndex identified 
10b20 62 79 20 73 71 6c 69 74 65 5f 73 74 61 74 33 2e  by sqlite_stat3.
10b30 69 64 78 20 61 6e 64 20 73 71 6c 69 74 65 5f 73  idx and sqlite_s
10b40 74 61 74 33 2e 74 62 6c 2e 29 5e 0a 5e 28 54 68  tat3.tbl.)^.^(Th
10b50 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33 2e 6e  e sqlite_stat3.n
10b60 45 71 20 63 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20  Eq column holds 
10b70 74 68 65 20 61 70 70 72 6f 78 69 6d 61 74 65 0a  the approximate.
10b80 6e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65  number of entrie
10b90 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20 77  s in the index w
10ba0 68 6f 73 65 20 6c 65 66 74 2d 6d 6f 73 74 20 63  hose left-most c
10bb0 6f 6c 75 6d 6e 20 65 78 61 63 74 6c 79 20 6d 61  olumn exactly ma
10bc0 74 63 68 65 73 0a 74 68 65 20 73 61 6d 70 6c 65  tches.the sample
10bd0 2e 29 5e 0a 5e 28 54 68 65 20 73 71 6c 69 74 65  .)^.^(The sqlite
10be0 5f 73 74 61 74 33 2e 6e 4c 74 20 68 6f 6c 64 73  _stat3.nLt holds
10bf0 20 74 68 65 20 61 70 70 72 6f 78 69 6d 61 74 65   the approximate
10c00 20 6e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69   number of entri
10c10 65 73 20 69 6e 20 74 68 65 0a 69 6e 64 65 78 20  es in the.index 
10c20 77 68 6f 73 65 20 6c 65 66 74 2d 6d 6f 73 74 20  whose left-most 
10c30 63 6f 6c 75 6d 6e 20 69 73 20 6c 65 73 73 20 74  column is less t
10c40 68 61 6e 20 74 68 65 20 73 61 6d 70 6c 65 2e 29  han the sample.)
10c50 5e 0a 5e 28 54 68 65 20 73 71 6c 69 74 65 5f 73  ^.^(The sqlite_s
10c60 74 61 74 33 2e 6e 44 4c 74 20 63 6f 6c 75 6d 6e  tat3.nDLt column
10c70 20 68 6f 6c 64 73 20 74 68 65 20 61 70 70 72 6f   holds the appro
10c80 78 69 6d 61 74 65 0a 6e 75 6d 62 65 72 20 6f 66  ximate.number of
10c90 20 64 69 73 74 69 6e 63 74 20 6c 65 66 74 2d 6d   distinct left-m
10ca0 6f 73 74 20 65 6e 74 72 69 65 73 20 69 6e 20 74  ost entries in t
10cb0 68 65 20 69 6e 64 65 78 20 74 68 61 74 20 61 72  he index that ar
10cc0 65 20 6c 65 73 73 20 74 68 61 6e 0a 74 68 65 20  e less than.the 
10cd0 73 61 6d 70 6c 65 2e 29 5e 0a 0a 3c 70 3e 5e 54  sample.)^..<p>^T
10ce0 68 65 72 65 20 63 61 6e 20 62 65 20 61 6e 20 61  here can be an a
10cf0 72 62 69 74 72 61 72 79 20 6e 75 6d 62 65 72 20  rbitrary number 
10d00 6f 66 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20  of sqlite_stat3 
10d10 65 6e 74 72 69 65 73 20 70 65 72 20 69 6e 64 65  entries per inde
10d20 78 2e 0a 54 68 65 20 5b 41 4e 41 4c 59 5a 45 5d  x..The [ANALYZE]
10d30 20 63 6f 6d 6d 61 6e 64 20 77 69 6c 6c 20 74 79   command will ty
10d40 70 69 63 61 6c 6c 79 20 67 65 6e 65 72 61 74 65  pically generate
10d50 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20 74 61   sqlite_stat3 ta
10d60 62 6c 65 73 0a 74 68 61 74 20 63 6f 6e 74 61 69  bles.that contai
10d70 6e 20 62 65 74 77 65 65 6e 20 31 30 20 61 6e 64  n between 10 and
10d80 20 34 30 20 73 61 6d 70 6c 65 73 20 74 68 61 74   40 samples that
10d90 20 61 72 65 20 64 69 73 74 72 69 62 75 74 65 64   are distributed
10da0 20 61 63 72 6f 73 73 0a 74 68 65 20 6b 65 79 20   across.the key 
10db0 73 70 61 63 65 20 61 6e 64 20 77 69 74 68 20 6c  space and with l
10dc0 61 72 67 65 20 6e 45 71 20 76 61 6c 75 65 73 2e  arge nEq values.
10dd0 0a 0a 3c 70 3e 5e 28 49 6e 20 61 20 77 65 6c 6c  ..<p>^(In a well
10de0 2d 66 6f 72 6d 65 64 20 73 71 6c 69 74 65 5f 73  -formed sqlite_s
10df0 74 61 74 33 20 74 61 62 6c 65 2c 20 74 68 65 20  tat3 table, the 
10e00 73 61 6d 70 6c 65 73 20 66 6f 72 20 61 6e 79 20  samples for any 
10e10 73 69 6e 67 6c 65 0a 69 6e 64 65 78 20 6d 75 73  single.index mus
10e20 74 20 61 70 70 65 61 72 20 69 6e 20 74 68 65 20  t appear in the 
10e30 73 61 6d 65 20 6f 72 64 65 72 20 74 68 61 74 20  same order that 
10e40 74 68 65 79 20 6f 63 63 75 72 20 69 6e 20 74 68  they occur in th
10e50 65 20 69 6e 64 65 78 2e 20 20 0a 49 6e 20 6f 74  e index.  .In ot
10e60 68 65 72 20 77 6f 72 64 73 2c 20 69 66 20 74 68  her words, if th
10e70 65 20 65 6e 74 72 79 20 77 69 74 68 20 6c 65 66  e entry with lef
10e80 74 2d 6d 6f 73 74 20 63 6f 6c 75 6d 6e 20 53 31  t-most column S1
10e90 20 69 73 20 65 61 72 6c 69 65 72 20 69 6e 0a 74   is earlier in.t
10ea0 68 65 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20  he index b-tree 
10eb0 74 68 61 6e 20 74 68 65 0a 65 6e 74 72 79 20 77  than the.entry w
10ec0 69 74 68 20 6c 65 66 74 2d 6d 6f 73 74 20 63 6f  ith left-most co
10ed0 6c 75 6d 6e 20 53 32 2c 20 74 68 65 6e 20 69 6e  lumn S2, then in
10ee0 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74   the sqlite_stat
10ef0 33 20 74 61 62 6c 65 2c 20 0a 73 61 6d 70 6c 65  3 table, .sample
10f00 20 53 31 20 6d 75 73 74 20 68 61 76 65 20 61 20   S1 must have a 
10f10 73 6d 61 6c 6c 65 72 20 72 6f 77 69 64 20 74 68  smaller rowid th
10f20 61 6e 20 73 61 6d 70 6c 65 20 53 32 2e 29 5e 0a  an sample S2.)^.
10f30 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
10f40 74 20 73 74 61 74 34 74 61 62 20 7b 73 71 6c 69  t stat4tab {sqli
10f50 74 65 5f 73 74 61 74 34 7d 20 53 51 4c 49 54 45  te_stat4} SQLITE
10f60 5f 53 54 41 54 34 3c 2f 74 63 6c 3e 0a 3c 68 33  _STAT4</tcl>.<h3
10f70 3e 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74  >The sqlite_stat
10f80 34 20 74 61 62 6c 65 3c 2f 68 33 3e 0a 0a 3c 70  4 table</h3>..<p
10f90 3e 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74  >The sqlite_stat
10fa0 34 20 69 73 20 6f 6e 6c 79 20 63 72 65 61 74 65  4 is only create
10fb0 64 20 61 6e 64 20 69 73 20 6f 6e 6c 79 20 75 73  d and is only us
10fc0 65 64 20 69 66 20 53 51 4c 69 74 65 20 69 73 20  ed if SQLite is 
10fd0 63 6f 6d 70 69 6c 65 64 0a 77 69 74 68 20 5b 53  compiled.with [S
10fe0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
10ff0 54 34 5d 20 61 6e 64 20 69 66 20 74 68 65 20 53  T4] and if the S
11000 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20 6e 75  QLite version nu
11010 6d 62 65 72 20 69 73 0a 33 2e 38 2e 31 20 6f 72  mber is.3.8.1 or
11020 20 67 72 65 61 74 65 72 2e 20 20 54 68 65 20 73   greater.  The s
11030 71 6c 69 74 65 5f 73 74 61 74 34 20 74 61 62 6c  qlite_stat4 tabl
11040 65 20 69 73 20 6e 65 69 74 68 65 72 20 72 65 61  e is neither rea
11050 64 20 6e 6f 72 20 77 72 69 74 74 65 6e 20 62 79  d nor written by
11060 20 61 6e 79 0a 76 65 72 73 69 6f 6e 20 6f 66 20   any.version of 
11070 53 51 4c 69 74 65 20 62 65 66 6f 72 65 20 33 2e  SQLite before 3.
11080 38 2e 31 2e 0a 54 68 65 20 73 71 6c 69 74 65 5f  8.1..The sqlite_
11090 73 74 61 74 34 20 74 61 62 6c 65 20 63 6f 6e 74  stat4 table cont
110a0 61 69 6e 73 20 61 64 64 69 74 69 6f 6e 61 6c 20  ains additional 
110b0 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 61 62 6f 75  information.abou
110c0 74 20 74 68 65 20 64 69 73 74 72 69 62 75 74 69  t the distributi
110d0 6f 6e 20 6f 66 20 6b 65 79 73 20 77 69 74 68 69  on of keys withi
110e0 6e 20 61 6e 20 69 6e 64 65 78 20 6f 72 20 74 68  n an index or th
110f0 65 20 64 69 73 74 72 69 62 75 74 69 6f 6e 20 6f  e distribution o
11100 66 0a 6b 65 79 73 20 69 6e 20 74 68 65 20 70 72  f.keys in the pr
11110 69 6d 61 72 79 20 6b 65 79 20 6f 66 20 61 20 5b  imary key of a [
11120 57 49 54 48 4f 55 54 20 52 4f 57 49 44 5d 20 74  WITHOUT ROWID] t
11130 61 62 6c 65 2e 0a 54 68 65 20 71 75 65 72 79 20  able..The query 
11140 70 6c 61 6e 6e 65 72 20 63 61 6e 20 73 6f 6d 65  planner can some
11150 74 69 6d 65 73 20 75 73 65 20 74 68 65 20 61 64  times use the ad
11160 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
11170 74 69 6f 6e 20 69 6e 0a 74 68 65 20 73 71 6c 69  tion in.the sqli
11180 74 65 5f 73 74 61 74 34 20 74 61 62 6c 65 20 74  te_stat4 table t
11190 6f 20 64 65 76 69 73 65 20 62 65 74 74 65 72 20  o devise better 
111a0 61 6e 64 20 66 61 73 74 65 72 20 71 75 65 72 79  and faster query
111b0 20 61 6c 67 6f 72 69 74 68 6d 73 2e 0a 5e 28 54   algorithms..^(T
111c0 68 65 20 73 63 68 65 6d 61 20 6f 66 20 74 68 65  he schema of the
111d0 20 73 71 6c 69 74 65 5f 73 74 61 74 34 20 74 61   sqlite_stat4 ta
111e0 62 6c 65 20 69 73 20 61 73 20 66 6f 6c 6c 6f 77  ble is as follow
111f0 73 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  s:..<blockquote>
11200 3c 70 72 65 3e 0a 43 52 45 41 54 45 20 54 41 42  <pre>.CREATE TAB
11210 4c 45 20 73 71 6c 69 74 65 5f 73 74 61 74 34 28  LE sqlite_stat4(
11220 74 62 6c 2c 69 64 78 2c 6e 45 71 2c 6e 4c 74 2c  tbl,idx,nEq,nLt,
11230 6e 44 4c 74 2c 73 61 6d 70 6c 65 29 3b 0a 3c 2f  nDLt,sample);.</
11240 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  pre></blockquote
11250 3e 29 5e 0a 0a 3c 70 3e 54 68 65 72 65 20 61 72  >)^..<p>There ar
11260 65 20 74 79 70 69 63 61 6c 6c 79 20 62 65 74 77  e typically betw
11270 65 65 6e 20 31 30 20 74 6f 20 34 30 20 65 6e 74  een 10 to 40 ent
11280 72 69 65 73 20 69 6e 20 74 68 65 20 73 71 6c 69  ries in the sqli
11290 74 65 5f 73 74 61 74 34 20 74 61 62 6c 65 20 66  te_stat4 table f
112a0 6f 72 0a 65 61 63 68 20 69 6e 64 65 78 20 66 6f  or.each index fo
112b0 72 20 77 68 69 63 68 20 73 74 61 74 69 73 74 69  r which statisti
112c0 63 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65  cs are available
112d0 2c 20 68 6f 77 65 76 65 72 20 74 68 65 73 65 20  , however these 
112e0 6c 69 6d 69 74 73 20 61 72 65 0a 6e 6f 74 20 68  limits are.not h
112f0 61 72 64 20 62 6f 75 6e 64 73 2e 0a 54 68 65 20  ard bounds..The 
11300 6d 65 61 6e 69 6e 67 73 20 6f 66 20 74 68 65 20  meanings of the 
11310 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 73  columns in the s
11320 71 6c 69 74 65 5f 73 74 61 74 34 20 74 61 62 6c  qlite_stat4 tabl
11330 65 20 61 72 65 20 61 73 20 66 6f 6c 6c 6f 77 73  e are as follows
11340 3a 0a 0a 3c 63 65 6e 74 65 72 3e 0a 3c 74 61 62  :..<center>.<tab
11350 6c 65 20 62 6f 72 64 65 72 3d 22 30 22 20 77 69  le border="0" wi
11360 64 74 68 3d 22 31 30 30 25 22 20 63 65 6c 6c 70  dth="100%" cellp
11370 61 64 64 69 6e 67 3d 22 31 30 22 3e 0a 3c 74 72  adding="10">.<tr
11380 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70  ><td valign="top
11390 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e  " align="right">
113a0 74 62 6c 3a 3c 2f 74 64 3e 0a 20 20 20 20 3c 74  tbl:</td>.    <t
113b0 64 3e 5e 28 54 68 65 20 73 71 6c 69 74 65 5f 73  d>^(The sqlite_s
113c0 74 61 74 34 2e 74 62 6c 20 63 6f 6c 75 6d 6e 20  tat4.tbl column 
113d0 68 6f 6c 64 73 20 6e 61 6d 65 20 6f 66 20 74 68  holds name of th
113e0 65 20 74 61 62 6c 65 20 74 68 61 74 20 6f 77 6e  e table that own
113f0 73 0a 20 20 20 20 74 68 65 20 69 6e 64 65 78 20  s.    the index 
11400 74 68 61 74 20 74 68 65 20 72 6f 77 20 64 65 73  that the row des
11410 63 72 69 62 65 73 29 5e 0a 0a 3c 74 72 3e 3c 74  cribes)^..<tr><t
11420 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61  d valign="top" a
11430 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e 69 64 78  lign="right">idx
11440 3a 3c 2f 74 64 3e 0a 20 20 20 20 3c 74 64 3e 5e  :</td>.    <td>^
11450 28 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74  (The sqlite_stat
11460 34 2e 69 64 78 20 63 6f 6c 75 6d 6e 20 68 6f 6c  4.idx column hol
11470 64 73 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 69  ds name of the i
11480 6e 64 65 78 20 74 68 61 74 20 74 68 65 0a 20 20  ndex that the.  
11490 20 20 72 6f 77 20 64 65 73 63 72 69 62 65 73 2c    row describes,
114a0 20 6f 72 20 69 6e 20 74 68 65 20 63 61 73 65 20   or in the case 
114b0 6f 66 0a 20 20 20 20 61 6e 20 73 71 6c 69 74 65  of.    an sqlite
114c0 5f 73 74 61 74 34 20 65 6e 74 72 79 20 66 6f 72  _stat4 entry for
114d0 20 61 20 5b 57 49 54 48 4f 55 54 20 52 4f 57 49   a [WITHOUT ROWI
114e0 44 5d 20 74 61 62 6c 65 2c 20 74 68 65 0a 20 20  D] table, the.  
114f0 20 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61    name of the ta
11500 62 6c 65 20 69 74 73 65 6c 66 2e 29 5e 0a 0a 3c  ble itself.)^..<
11510 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74  tr><td valign="t
11520 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74  op" align="right
11530 22 3e 73 61 6d 70 6c 65 3a 3c 2f 74 64 3e 0a 20  ">sample:</td>. 
11540 20 20 20 3c 74 64 3e 5e 28 54 68 65 20 73 71 6c     <td>^(The sql
11550 69 74 65 5f 73 74 61 74 34 2e 73 61 6d 70 6c 65  ite_stat4.sample
11560 20 63 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 61 20   column holds a 
11570 42 4c 4f 42 0a 20 20 20 20 69 6e 20 74 68 65 20  BLOB.    in the 
11580 5b 72 65 63 6f 72 64 20 66 6f 72 6d 61 74 5d 20  [record format] 
11590 74 68 61 74 20 65 6e 63 6f 64 65 73 20 74 68 65  that encodes the
115a0 20 69 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 73   indexed columns
115b0 20 66 6f 6c 6c 6f 77 65 64 20 62 79 0a 20 20 20   followed by.   
115c0 20 74 68 65 20 72 6f 77 69 64 20 66 6f 72 20 61   the rowid for a
115d0 20 72 6f 77 69 64 20 74 61 62 6c 65 20 6f 72 20   rowid table or 
115e0 62 79 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 6f  by the columns o
115f0 66 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b 65  f the primary ke
11600 79 20 0a 20 20 20 20 66 6f 72 20 61 20 57 49 54  y .    for a WIT
11610 48 4f 55 54 20 52 4f 57 49 44 20 74 61 62 6c 65  HOUT ROWID table
11620 2e 29 5e 0a 20 20 20 20 5e 28 54 68 65 20 73 71  .)^.    ^(The sq
11630 6c 69 74 65 5f 73 74 61 74 34 2e 73 61 6d 70 6c  lite_stat4.sampl
11640 65 20 42 4c 4f 42 20 66 6f 72 20 74 68 65 20 57  e BLOB for the W
11650 49 54 48 4f 55 54 20 52 4f 57 49 44 20 74 61 62  ITHOUT ROWID tab
11660 6c 65 20 69 74 73 65 6c 66 20 0a 20 20 20 20 63  le itself .    c
11670 6f 6e 74 61 69 6e 73 20 6a 75 73 74 20 74 68 65  ontains just the
11680 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20   columns of the 
11690 70 72 69 6d 61 72 79 20 6b 65 79 2e 29 5e 0a 20  primary key.)^. 
116a0 20 20 20 4c 65 74 20 74 68 65 20 6e 75 6d 62 65     Let the numbe
116b0 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 65 6e 63  r of columns enc
116c0 6f 64 65 64 20 62 79 20 74 68 65 20 73 71 6c 69  oded by the sqli
116d0 74 65 5f 73 74 61 74 34 2e 73 61 6d 70 6c 65 20  te_stat4.sample 
116e0 62 6c 6f 62 20 62 65 20 4e 2e 0a 20 20 20 20 5e  blob be N..    ^
116f0 46 6f 72 20 69 6e 64 65 78 65 73 20 6f 6e 20 61  For indexes on a
11700 6e 20 6f 72 64 69 6e 61 72 79 20 72 6f 77 69 64  n ordinary rowid
11710 20 74 61 62 6c 65 2c 20 4e 20 77 69 6c 6c 20 62   table, N will b
11720 65 20 6f 6e 65 20 6d 6f 72 65 20 74 68 61 6e 20  e one more than 
11730 74 68 65 20 6e 75 6d 62 65 72 20 0a 20 20 20 20  the number .    
11740 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 64 65 78  of columns index
11750 65 64 2e 0a 20 20 20 20 5e 46 6f 72 20 69 6e 64  ed..    ^For ind
11760 65 78 65 73 20 6f 6e 20 57 49 54 48 4f 55 54 20  exes on WITHOUT 
11770 52 4f 57 49 44 20 74 61 62 6c 65 73 2c 20 4e 20  ROWID tables, N 
11780 77 69 6c 6c 20 62 65 20 74 68 65 20 6e 75 6d 62  will be the numb
11790 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 0a 20 20  er of columns.  
117a0 20 20 69 6e 64 65 78 65 64 20 70 6c 75 73 20 74    indexed plus t
117b0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
117c0 75 6d 6e 73 20 69 6e 20 74 68 65 20 70 72 69 6d  umns in the prim
117d0 61 72 79 20 6b 65 79 2e 0a 20 20 20 20 5e 46 6f  ary key..    ^Fo
117e0 72 20 61 20 57 49 54 48 4f 55 54 20 52 4f 57 49  r a WITHOUT ROWI
117f0 44 20 74 61 62 6c 65 2c 20 4e 20 77 69 6c 6c 20  D table, N will 
11800 62 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  be the number of
11810 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 0a   columns in the.
11820 20 20 20 20 70 72 69 6d 61 72 79 20 6b 65 79 2e      primary key.
11830 0a 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  ..<tr><td valign
11840 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69  ="top" align="ri
11850 67 68 74 22 3e 6e 45 71 3a 3c 2f 74 64 3e 0a 20  ght">nEq:</td>. 
11860 20 20 20 3c 74 64 3e 5e 28 54 68 65 20 73 71 6c     <td>^(The sql
11870 69 74 65 5f 73 74 61 74 34 2e 6e 45 71 20 63 6f  ite_stat4.nEq co
11880 6c 75 6d 6e 20 68 6f 6c 64 73 20 61 20 6c 69 73  lumn holds a lis
11890 74 20 6f 66 20 4e 20 69 6e 74 65 67 65 72 73 20  t of N integers 
118a0 77 68 65 72 65 20 0a 20 20 20 20 74 68 65 20 4b  where .    the K
118b0 2d 74 68 20 69 6e 74 65 67 65 72 20 69 73 20 74  -th integer is t
118c0 68 65 20 61 70 70 72 6f 78 69 6d 61 74 65 20 6e  he approximate n
118d0 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73  umber of entries
118e0 20 69 6e 20 74 68 65 20 69 6e 64 65 78 0a 20 20   in the index.  
118f0 20 20 77 68 6f 73 65 20 6c 65 66 74 2d 6d 6f 73    whose left-mos
11900 74 20 4b 20 63 6f 6c 75 6d 6e 73 20 65 78 61 63  t K columns exac
11910 74 6c 79 20 6d 61 74 63 68 20 74 68 65 20 4b 20  tly match the K 
11920 6c 65 66 74 2d 6d 6f 73 74 20 63 6f 6c 75 6d 6e  left-most column
11930 73 0a 20 20 20 20 6f 66 20 74 68 65 20 73 61 6d  s.    of the sam
11940 70 6c 65 2e 29 5e 0a 0a 3c 74 72 3e 3c 74 64 20  ple.)^..<tr><td 
11950 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69  valign="top" ali
11960 67 6e 3d 22 72 69 67 68 74 22 3e 6e 4c 74 3a 3c  gn="right">nLt:<
11970 2f 74 64 3e 0a 20 20 20 20 3c 74 64 3e 5e 28 54  /td>.    <td>^(T
11980 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 34 2e  he sqlite_stat4.
11990 6e 4c 74 20 63 6f 6c 75 6d 6e 20 68 6f 6c 64 73  nLt column holds
119a0 20 61 20 6c 69 73 74 20 6f 66 20 4e 20 69 6e 74   a list of N int
119b0 65 67 65 72 73 20 77 68 65 72 65 0a 20 20 20 20  egers where.    
119c0 74 68 65 20 4b 2d 74 68 20 69 6e 74 65 67 65 72  the K-th integer
119d0 20 69 73 20 74 68 65 20 61 70 70 72 6f 78 69 6d   is the approxim
119e0 61 74 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 6e  ate number of en
119f0 74 72 69 65 73 20 69 6e 20 74 68 65 0a 20 20 20  tries in the.   
11a00 20 69 6e 64 65 78 20 77 68 6f 73 65 20 4b 20 6c   index whose K l
11a10 65 66 74 2d 6d 6f 73 74 20 63 6f 6c 75 6d 6e 73  eft-most columns
11a20 20 61 72 65 20 63 6f 6c 6c 65 63 74 69 76 65 6c   are collectivel
11a30 79 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20  y less than the 
11a40 0a 20 20 20 20 4b 20 6c 65 66 74 2d 6d 6f 73 74  .    K left-most
11a50 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20   columns of the 
11a60 73 61 6d 70 6c 65 2e 29 5e 0a 0a 3c 74 72 3e 3c  sample.)^..<tr><
11a70 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20  td valign="top" 
11a80 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e 6e 44  align="right">nD
11a90 4c 74 3a 3c 2f 74 64 3e 0a 20 20 20 20 3c 74 64  Lt:</td>.    <td
11aa0 3e 5e 28 54 68 65 20 73 71 6c 69 74 65 5f 73 74  >^(The sqlite_st
11ab0 61 74 34 2e 6e 44 4c 74 20 63 6f 6c 75 6d 6e 20  at4.nDLt column 
11ac0 68 6f 6c 64 73 20 61 20 6c 69 73 74 20 6f 66 20  holds a list of 
11ad0 4e 20 69 6e 74 65 67 65 72 73 20 77 68 65 72 65  N integers where
11ae0 0a 20 20 20 20 74 68 65 20 4b 2d 74 68 20 69 6e  .    the K-th in
11af0 74 65 67 65 72 20 69 73 20 74 68 65 20 61 70 70  teger is the app
11b00 72 6f 78 69 6d 61 74 65 0a 20 20 20 20 6e 75 6d  roximate.    num
11b10 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69  ber of entries i
11b20 6e 20 74 68 65 20 69 6e 64 65 78 20 74 68 61 74  n the index that
11b30 20 61 72 65 20 64 69 73 74 69 6e 63 74 20 69 6e   are distinct in
11b40 20 74 68 65 20 66 69 72 73 74 20 4b 20 63 6f 6c   the first K col
11b50 75 6d 6e 73 20 61 6e 64 0a 20 20 20 20 77 68 65  umns and.    whe
11b60 72 65 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74  re the left-most
11b70 20 4b 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 63   K columns are c
11b80 6f 6c 6c 65 63 74 69 76 65 6c 79 20 6c 65 73 73  ollectively less
11b90 20 74 68 61 6e 20 74 68 65 20 6c 65 66 74 2d 6d   than the left-m
11ba0 6f 73 74 0a 20 20 20 20 4b 20 63 6f 6c 75 6d 6e  ost.    K column
11bb0 73 20 6f 66 20 74 68 65 20 73 61 6d 70 6c 65 2e  s of the sample.
11bc0 29 5e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 63 65  )^.</table>.</ce
11bd0 6e 74 65 72 3e 0a 0a 3c 70 3e 54 68 65 20 73 71  nter>..<p>The sq
11be0 6c 69 74 65 5f 73 74 61 74 34 20 69 73 20 61 20  lite_stat4 is a 
11bf0 67 65 6e 65 72 61 6c 69 7a 61 74 69 6f 6e 20 6f  generalization o
11c00 66 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61  f the sqlite_sta
11c10 74 33 20 74 61 62 6c 65 2e 20 20 54 68 65 0a 73  t3 table.  The.s
11c20 71 6c 69 74 65 5f 73 74 61 74 33 20 74 61 62 6c  qlite_stat3 tabl
11c30 65 20 70 72 6f 76 69 64 65 73 20 69 6e 66 6f 72  e provides infor
11c40 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65  mation about the
11c50 20 6c 65 66 74 2d 6d 6f 73 74 20 63 6f 6c 75 6d   left-most colum
11c60 6e 20 6f 66 20 61 6e 0a 69 6e 64 65 78 20 77 68  n of an.index wh
11c70 65 72 65 61 73 20 74 68 65 20 73 71 6c 69 74 65  ereas the sqlite
11c80 5f 73 74 61 74 34 20 74 61 62 6c 65 20 70 72 6f  _stat4 table pro
11c90 76 69 64 65 73 20 69 6e 66 6f 72 6d 61 74 69 6f  vides informatio
11ca0 6e 20 61 62 6f 75 74 20 61 6c 6c 20 63 6f 6c 75  n about all colu
11cb0 6d 6e 73 0a 6f 66 20 74 68 65 20 69 6e 64 65 78  mns.of the index
11cc0 2e 0a 0a 3c 70 3e 5e 54 68 65 72 65 20 63 61 6e  ...<p>^There can
11cd0 20 62 65 20 61 6e 20 61 72 62 69 74 72 61 72 79   be an arbitrary
11ce0 20 6e 75 6d 62 65 72 20 6f 66 20 73 71 6c 69 74   number of sqlit
11cf0 65 5f 73 74 61 74 34 20 65 6e 74 72 69 65 73 20  e_stat4 entries 
11d00 70 65 72 20 69 6e 64 65 78 2e 0a 54 68 65 20 5b  per index..The [
11d10 41 4e 41 4c 59 5a 45 5d 20 63 6f 6d 6d 61 6e 64  ANALYZE] command
11d20 20 77 69 6c 6c 20 74 79 70 69 63 61 6c 6c 79 20   will typically 
11d30 67 65 6e 65 72 61 74 65 20 73 71 6c 69 74 65 5f  generate sqlite_
11d40 73 74 61 74 34 20 74 61 62 6c 65 73 0a 74 68 61  stat4 tables.tha
11d50 74 20 63 6f 6e 74 61 69 6e 20 62 65 74 77 65 65  t contain betwee
11d60 6e 20 31 30 20 61 6e 64 20 34 30 20 73 61 6d 70  n 10 and 40 samp
11d70 6c 65 73 20 74 68 61 74 20 61 72 65 20 64 69 73  les that are dis
11d80 74 72 69 62 75 74 65 64 20 61 63 72 6f 73 73 0a  tributed across.
11d90 74 68 65 20 6b 65 79 20 73 70 61 63 65 20 61 6e  the key space an
11da0 64 20 77 69 74 68 20 6c 61 72 67 65 20 6e 45 71  d with large nEq
11db0 20 76 61 6c 75 65 73 2e 0a 0a 3c 70 3e 5e 28 49   values...<p>^(I
11dc0 6e 20 61 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20  n a well-formed 
11dd0 73 71 6c 69 74 65 5f 73 74 61 74 34 20 74 61 62  sqlite_stat4 tab
11de0 6c 65 2c 20 74 68 65 20 73 61 6d 70 6c 65 73 20  le, the samples 
11df0 66 6f 72 20 61 6e 79 20 73 69 6e 67 6c 65 0a 69  for any single.i
11e00 6e 64 65 78 20 6d 75 73 74 20 61 70 70 65 61 72  ndex must appear
11e10 20 69 6e 20 74 68 65 20 73 61 6d 65 20 6f 72 64   in the same ord
11e20 65 72 20 74 68 61 74 20 74 68 65 79 20 6f 63 63  er that they occ
11e30 75 72 20 69 6e 20 74 68 65 20 69 6e 64 65 78 2e  ur in the index.
11e40 20 20 0a 49 6e 20 6f 74 68 65 72 20 77 6f 72 64    .In other word
11e50 73 2c 20 69 66 20 65 6e 74 72 79 20 53 31 20 69  s, if entry S1 i
11e60 73 20 65 61 72 6c 69 65 72 20 69 6e 20 74 68 65  s earlier in the
11e70 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20 74 68   index b-tree th
11e80 61 6e 20 0a 65 6e 74 72 79 20 53 32 2c 20 74 68  an .entry S2, th
11e90 65 6e 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65  en in the sqlite
11ea0 5f 73 74 61 74 34 20 74 61 62 6c 65 2c 20 73 61  _stat4 table, sa
11eb0 6d 70 6c 65 20 53 31 20 6d 75 73 74 20 68 61 76  mple S1 must hav
11ec0 65 20 61 0a 73 6d 61 6c 6c 65 72 20 72 6f 77 69  e a.smaller rowi
11ed0 64 20 74 68 61 6e 20 73 61 6d 70 6c 65 20 53 32  d than sample S2
11ee0 2e 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  .)^..<tcl>hd_fra
11ef0 67 6d 65 6e 74 20 72 6f 6c 6c 62 61 63 6b 6a 6f  gment rollbackjo
11f00 75 72 6e 61 6c 20 7b 72 6f 6c 6c 62 61 63 6b 20  urnal {rollback 
11f10 6a 6f 75 72 6e 61 6c 20 66 6f 72 6d 61 74 7d 3c  journal format}<
11f20 2f 74 63 6c 3e 0a 3c 68 31 3e 54 68 65 20 52 6f  /tcl>.<h1>The Ro
11f30 6c 6c 62 61 63 6b 20 4a 6f 75 72 6e 61 6c 3c 2f  llback Journal</
11f40 68 31 3e 0a 0a 3c 70 3e 54 68 65 20 72 6f 6c 6c  h1>..<p>The roll
11f50 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 69 73 20  back journal is 
11f60 61 20 66 69 6c 65 20 61 73 73 6f 63 69 61 74 65  a file associate
11f70 64 20 77 69 74 68 20 65 61 63 68 20 53 51 4c 69  d with each SQLi
11f80 74 65 20 64 61 74 61 62 61 73 65 0a 66 69 6c 65  te database.file
11f90 20 74 68 61 74 20 68 6f 6c 64 20 69 6e 66 6f 72   that hold infor
11fa0 6d 61 74 69 6f 6e 20 75 73 65 64 20 74 6f 20 72  mation used to r
11fb0 65 73 74 6f 72 65 20 74 68 65 20 64 61 74 61 62  estore the datab
11fc0 61 73 65 20 66 69 6c 65 20 74 6f 20 69 74 73 20  ase file to its 
11fd0 69 6e 69 74 69 61 6c 0a 73 74 61 74 65 20 64 75  initial.state du
11fe0 72 69 6e 67 20 74 68 65 20 63 6f 75 72 73 65 20  ring the course 
11ff0 6f 66 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  of a transaction
12000 2e 0a 5e 54 68 65 20 72 6f 6c 6c 62 61 63 6b 20  ..^The rollback 
12010 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 20 69 73 20  journal file is 
12020 61 6c 77 61 79 73 20 6c 6f 63 61 74 65 64 20 69  always located i
12030 6e 20 74 68 65 20 73 61 6d 65 20 0a 64 69 72 65  n the same .dire
12040 63 74 6f 72 79 20 61 73 20 74 68 65 20 64 61 74  ctory as the dat
12050 61 62 61 73 65 0a 66 69 6c 65 20 61 6e 64 20 68  abase.file and h
12060 61 73 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65  as the same name
12070 20 61 73 20 74 68 65 20 64 61 74 61 62 61 73 65   as the database
12080 20 66 69 6c 65 20 62 75 74 20 77 69 74 68 20 74   file but with t
12090 68 65 20 73 74 72 69 6e 67 0a 22 3c 74 74 3e 2d  he string."<tt>-
120a0 6a 6f 75 72 6e 61 6c 3c 2f 74 74 3e 22 20 61 70  journal</tt>" ap
120b0 70 65 6e 64 65 64 2e 20 20 54 68 65 72 65 20 63  pended.  There c
120c0 61 6e 20 6f 6e 6c 79 20 62 65 20 61 20 73 69 6e  an only be a sin
120d0 67 6c 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75  gle rollback jou
120e0 72 6e 61 6c 0a 61 73 73 6f 63 69 61 74 65 64 20  rnal.associated 
120f0 77 69 74 68 20 61 20 67 69 76 65 20 64 61 74 61  with a give data
12100 62 61 73 65 20 61 6e 64 20 68 65 6e 63 65 20 74  base and hence t
12110 68 65 72 65 20 63 61 6e 20 6f 6e 6c 79 20 62 65  here can only be
12120 20 6f 6e 65 20 77 72 69 74 65 0a 74 72 61 6e 73   one write.trans
12130 61 63 74 69 6f 6e 20 6f 70 65 6e 20 61 67 61 69  action open agai
12140 6e 73 74 20 61 20 73 69 6e 67 6c 65 20 64 61 74  nst a single dat
12150 61 62 61 73 65 20 61 74 20 6f 6e 65 20 74 69 6d  abase at one tim
12160 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 66 20 61 20  e.</p>..<p>If a 
12170 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61  transaction is a
12180 62 6f 72 74 65 64 20 64 75 65 20 74 6f 20 61 6e  borted due to an
12190 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 63 72 61   application cra
121a0 73 68 2c 20 61 6e 20 6f 70 65 72 61 74 69 6e 67  sh, an operating
121b0 0a 73 79 73 74 65 6d 20 63 72 61 73 68 2c 20 6f  .system crash, o
121c0 72 20 61 20 68 61 72 64 77 61 72 65 20 70 6f 77  r a hardware pow
121d0 65 72 20 66 61 69 6c 75 72 65 20 6f 72 20 63 72  er failure or cr
121e0 61 73 68 2c 20 74 68 65 6e 20 74 68 65 20 64 61  ash, then the da
121f0 74 61 62 61 73 65 20 6d 61 79 0a 62 65 20 6c 65  tabase may.be le
12200 66 74 20 69 6e 20 61 6e 20 69 6e 63 6f 6e 73 69  ft in an inconsi
12210 73 74 65 6e 74 20 73 74 61 74 65 2e 20 20 5e 54  stent state.  ^T
12220 68 65 20 6e 65 78 74 20 74 69 6d 65 20 53 51 4c  he next time SQL
12230 69 74 65 20 61 74 74 65 6d 70 74 73 20 74 6f 20  ite attempts to 
12240 6f 70 65 6e 0a 74 68 65 20 64 61 74 61 62 61 73  open.the databas
12250 65 20 66 69 6c 65 2c 20 74 68 65 20 70 72 65 73  e file, the pres
12260 65 6e 63 65 20 6f 66 20 74 68 65 20 72 6f 6c 6c  ence of the roll
12270 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 66 69 6c  back journal fil
12280 65 20 77 69 6c 6c 20 62 65 20 0a 64 65 74 65 63  e will be .detec
12290 74 65 64 20 61 6e 64 20 74 68 65 20 6a 6f 75 72  ted and the jour
122a0 6e 61 6c 20 77 69 6c 6c 20 62 65 20 61 75 74 6f  nal will be auto
122b0 6d 61 74 69 63 61 6c 6c 79 20 70 6c 61 79 65 64  matically played
122c0 20 62 61 63 6b 20 74 6f 20 72 65 73 74 6f 72 65   back to restore
122d0 20 74 68 65 0a 64 61 74 61 62 61 73 65 20 74 6f   the.database to
122e0 20 69 74 73 20 73 74 61 74 65 20 61 74 20 74 68   its state at th
122f0 65 20 73 74 61 72 74 20 6f 66 20 74 68 65 20 69  e start of the i
12300 6e 63 6f 6d 70 6c 65 74 65 20 74 72 61 6e 73 61  ncomplete transa
12310 63 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  ction.</p>..<p>^
12320 41 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e  A rollback journ
12330 61 6c 20 69 73 20 6f 6e 6c 79 20 63 6f 6e 73 69  al is only consi
12340 64 65 72 65 64 20 74 6f 20 62 65 20 76 61 6c 69  dered to be vali
12350 64 20 69 66 20 69 74 20 65 78 69 73 74 73 20 61  d if it exists a
12360 6e 64 0a 63 6f 6e 74 61 69 6e 73 20 61 20 76 61  nd.contains a va
12370 6c 69 64 20 68 65 61 64 65 72 2e 20 20 48 65 6e  lid header.  Hen
12380 63 65 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  ce a transaction
12390 20 63 61 6e 20 62 65 20 63 6f 6d 6d 69 74 74 65   can be committe
123a0 64 20 69 6e 20 6f 6e 65 0a 6f 66 20 74 68 72 65  d in one.of thre
123b0 65 20 77 61 79 73 3a 0a 3c 6f 6c 3e 0a 3c 6c 69  e ways:.<ol>.<li
123c0 3e 5e 28 54 68 65 20 72 6f 6c 6c 62 61 63 6b 20  >^(The rollback 
123d0 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 20 63 61 6e  journal file can
123e0 20 62 65 20 64 65 6c 65 74 65 64 29 5e 2c 0a 3c   be deleted)^,.<
123f0 6c 69 3e 5e 28 54 68 65 20 72 6f 6c 6c 62 61 63  li>^(The rollbac
12400 6b 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 20 63  k journal file c
12410 61 6e 20 62 65 20 74 72 75 6e 63 61 74 65 64 20  an be truncated 
12420 74 6f 20 7a 65 72 6f 20 6c 65 6e 67 74 68 29 5e  to zero length)^
12430 2c 20 6f 72 0a 3c 6c 69 3e 5e 28 54 68 65 20 68  , or.<li>^(The h
12440 65 61 64 65 72 20 6f 66 20 74 68 65 20 72 6f 6c  eader of the rol
12450 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 63 61  lback journal ca
12460 6e 20 62 65 20 6f 76 65 72 77 72 69 74 74 65 6e  n be overwritten
12470 20 77 69 74 68 0a 69 6e 76 61 6c 69 64 20 68 65   with.invalid he
12480 61 64 65 72 20 74 65 78 74 20 28 66 6f 72 20 65  ader text (for e
12490 78 61 6d 70 6c 65 2c 20 61 6c 6c 20 7a 65 72 6f  xample, all zero
124a0 73 29 2e 29 5e 0a 3c 2f 6f 6c 3e 0a 3c 70 3e 0a  s).)^.</ol>.<p>.
124b0 5e 54 68 65 73 65 20 74 68 72 65 65 20 77 61 79  ^These three way
124c0 73 20 6f 66 20 63 6f 6d 6d 69 74 74 69 6e 67 20  s of committing 
124d0 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 63 6f  a transaction co
124e0 72 72 65 73 70 6f 6e 64 20 74 6f 20 74 68 65 20  rrespond to the 
124f0 44 45 4c 45 54 45 2c 0a 54 52 55 4e 43 41 54 45  DELETE,.TRUNCATE
12500 2c 20 61 6e 64 20 50 45 52 53 49 53 54 20 73 65  , and PERSIST se
12510 74 74 69 6e 67 73 2c 20 72 65 73 70 65 63 74 69  ttings, respecti
12520 76 65 6c 79 2c 20 6f 66 20 74 68 65 20 5b 6a 6f  vely, of the [jo
12530 75 72 6e 61 6c 5f 6d 6f 64 65 20 70 72 61 67 6d  urnal_mode pragm
12540 61 5d 2e 0a 3c 2f 70 3e 0a 0a 0a 3c 70 3e 41 20  a]..</p>...<p>A 
12550 76 61 6c 69 64 20 72 6f 6c 6c 62 61 63 6b 20 6a  valid rollback j
12560 6f 75 72 6e 61 6c 20 62 65 67 69 6e 73 20 77 69  ournal begins wi
12570 74 68 20 61 20 68 65 61 64 65 72 20 69 6e 20 74  th a header in t
12580 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 66 6f 72  he following for
12590 6d 61 74 3a 3c 2f 70 3e 0a 0a 3c 63 65 6e 74 65  mat:</p>..<cente
125a0 72 3e 0a 3c 69 3e 52 6f 6c 6c 62 61 63 6b 20 4a  r>.<i>Rollback J
125b0 6f 75 72 6e 61 6c 20 48 65 61 64 65 72 20 46 6f  ournal Header Fo
125c0 72 6d 61 74 3c 2f 69 3e 3c 62 72 3e 0a 3c 74 61  rmat</i><br>.<ta
125d0 62 6c 65 20 77 69 64 74 68 3d 22 38 30 25 22 20  ble width="80%" 
125e0 62 6f 72 64 65 72 3d 31 3e 0a 3c 74 72 3e 3c 74  border=1>.<tr><t
125f0 68 3e 4f 66 66 73 65 74 3c 74 68 3e 53 69 7a 65  h>Offset<th>Size
12600 3c 74 68 3e 44 65 73 63 72 69 70 74 69 6f 6e 0a  <th>Description.
12610 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74  <tr><td valign=t
12620 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
12630 30 0a 20 20 20 20 3c 74 64 20 76 61 6c 69 67 6e  0.    <td valign
12640 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
12650 72 3e 38 0a 20 20 20 20 3c 74 64 3e 48 65 61 64  r>8.    <td>Head
12660 65 72 20 73 74 72 69 6e 67 3a 20 20 30 78 64 39  er string:  0xd9
12670 2c 20 30 78 64 35 2c 20 30 78 30 35 2c 20 30 78  , 0xd5, 0x05, 0x
12680 66 39 2c 20 30 78 32 30 2c 20 30 78 61 31 2c 20  f9, 0x20, 0xa1, 
12690 30 78 36 33 2c 20 30 78 64 37 0a 3c 74 72 3e 3c  0x63, 0xd7.<tr><
126a0 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
126b0 69 67 6e 3d 63 65 6e 74 65 72 3e 38 0a 20 20 20  ign=center>8.   
126c0 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20   <td valign=top 
126d0 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20  align=center>4. 
126e0 20 20 20 3c 74 64 3e 54 68 65 20 22 50 61 67 65     <td>The "Page
126f0 20 43 6f 75 6e 74 22 20 2d 20 54 68 65 20 6e 75   Count" - The nu
12700 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e  mber of pages in
12710 20 74 68 65 20 6e 65 78 74 20 73 65 67 6d 65 6e   the next segmen
12720 74 20 6f 66 20 74 68 65 20 0a 20 20 20 20 20 20  t of the .      
12730 20 20 6a 6f 75 72 6e 61 6c 2c 20 6f 72 20 2d 31    journal, or -1
12740 20 74 6f 0a 20 20 20 20 20 20 20 20 6d 65 61 6e   to.        mean
12750 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 20 74 6f 20   all content to 
12760 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 66  the end of the f
12770 69 6c 65 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  ile.<tr><td vali
12780 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
12790 74 65 72 3e 31 32 0a 20 20 20 20 3c 74 64 20 76  ter>12.    <td v
127a0 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
127b0 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64  center>4.    <td
127c0 3e 41 20 72 61 6e 64 6f 6d 20 6e 6f 6e 63 65 20  >A random nonce 
127d0 66 6f 72 20 74 68 65 20 63 68 65 63 6b 73 75 6d  for the checksum
127e0 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d  .<tr><td valign=
127f0 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
12800 3e 31 36 0a 20 20 20 20 3c 74 64 20 76 61 6c 69  >16.    <td vali
12810 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
12820 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 49 6e  ter>4.    <td>In
12830 69 74 69 61 6c 20 73 69 7a 65 20 6f 66 20 74 68  itial size of th
12840 65 20 64 61 74 61 62 61 73 65 20 69 6e 20 70 61  e database in pa
12850 67 65 73 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  ges.<tr><td vali
12860 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
12870 74 65 72 3e 32 30 0a 20 20 20 20 3c 74 64 20 76  ter>20.    <td v
12880 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
12890 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64  center>4.    <td
128a0 3e 53 69 7a 65 20 6f 66 20 61 20 64 69 73 6b 20  >Size of a disk 
128b0 73 65 63 74 6f 72 20 61 73 73 75 6d 65 64 20 62  sector assumed b
128c0 79 20 74 68 65 20 70 72 6f 63 65 73 73 20 74 68  y the process th
128d0 61 74 20 77 72 6f 74 65 20 74 68 69 73 0a 20 20  at wrote this.  
128e0 20 20 20 20 20 20 6a 6f 75 72 6e 61 6c 2e 0a 3c        journal..<
128f0 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
12900 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32  p align=center>2
12910 34 0a 20 20 20 20 3c 74 64 20 76 61 6c 69 67 6e  4.    <td valign
12920 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
12930 72 3e 34 0a 20 20 20 20 3c 74 64 3e 53 69 7a 65  r>4.    <td>Size
12940 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74 68 69   of pages in thi
12950 73 20 6a 6f 75 72 6e 61 6c 2e 0a 3c 2f 74 61 62  s journal..</tab
12960 6c 65 3e 0a 3c 2f 63 65 6e 74 65 72 3e 0a 0a 3c  le>.</center>..<
12970 70 3e 5e 41 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f  p>^A rollback jo
12980 75 72 6e 61 6c 20 68 65 61 64 65 72 20 69 73 20  urnal header is 
12990 70 61 64 64 65 64 20 77 69 74 68 20 7a 65 72 6f  padded with zero
129a0 73 20 6f 75 74 20 74 6f 20 74 68 65 20 73 69 7a  s out to the siz
129b0 65 20 6f 66 20 61 20 0a 73 69 6e 67 6c 65 20 73  e of a .single s
129c0 65 63 74 6f 72 20 28 61 73 20 64 65 66 69 6e 65  ector (as define
129d0 64 20 62 79 20 74 68 65 20 73 65 63 74 6f 72 20  d by the sector 
129e0 73 69 7a 65 20 69 6e 74 65 67 65 72 20 61 74 20  size integer at 
129f0 6f 66 66 73 65 74 20 32 30 29 2e 0a 54 68 65 20  offset 20)..The 
12a00 68 65 61 64 65 72 20 69 73 20 69 6e 20 61 20 73  header is in a s
12a10 65 63 74 6f 72 20 62 79 20 69 74 73 65 6c 66 20  ector by itself 
12a20 73 6f 20 74 68 61 74 20 69 66 20 61 20 70 6f 77  so that if a pow
12a30 65 72 20 6c 6f 73 73 20 6f 63 63 75 72 73 20 77  er loss occurs w
12a40 68 69 6c 65 0a 77 72 69 74 69 6e 67 20 74 68 65  hile.writing the
12a50 20 73 65 63 74 6f 72 2c 20 69 6e 66 6f 72 6d 61   sector, informa
12a60 74 69 6f 6e 20 74 68 61 74 20 66 6f 6c 6c 6f 77  tion that follow
12a70 73 20 74 68 65 20 68 65 61 64 65 72 20 77 69 6c  s the header wil
12a80 6c 20 62 65 0a 28 68 6f 70 65 66 75 6c 6c 79 29  l be.(hopefully)
12a90 20 75 6e 64 61 6d 61 67 65 64 2e 3c 2f 70 3e 0a   undamaged.</p>.
12aa0 0a 3c 70 3e 5e 41 66 74 65 72 20 74 68 65 20 68  .<p>^After the h
12ab0 65 61 64 65 72 20 61 6e 64 20 7a 65 72 6f 20 70  eader and zero p
12ac0 61 64 64 69 6e 67 20 61 72 65 20 7a 65 72 6f 20  adding are zero 
12ad0 6f 72 20 6d 6f 72 65 20 70 61 67 65 20 72 65 63  or more page rec
12ae0 6f 72 64 73 2e 20 20 5e 45 61 63 68 0a 70 61 67  ords.  ^Each.pag
12af0 65 20 72 65 63 6f 72 64 20 73 74 6f 72 65 73 20  e record stores 
12b00 61 20 63 6f 70 79 20 6f 66 20 74 68 65 20 63 6f  a copy of the co
12b10 6e 74 65 6e 74 20 6f 66 20 61 20 70 61 67 65 20  ntent of a page 
12b20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73  from the databas
12b30 65 20 66 69 6c 65 0a 62 65 66 6f 72 65 20 69 74  e file.before it
12b40 20 77 61 73 20 63 68 61 6e 67 65 64 2e 20 20 5e   was changed.  ^
12b50 54 68 65 20 73 61 6d 65 20 70 61 67 65 20 6d 61  The same page ma
12b60 79 20 6e 6f 74 20 61 70 70 65 61 72 20 6d 6f 72  y not appear mor
12b70 65 20 74 68 61 6e 20 6f 6e 63 65 0a 77 69 74 68  e than once.with
12b80 69 6e 20 61 20 73 69 6e 67 6c 65 20 72 6f 6c 6c  in a single roll
12b90 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 2e 0a 54 6f  back journal..To
12ba0 20 72 6f 6c 6c 62 61 63 6b 20 61 6e 20 69 6e 63   rollback an inc
12bb0 6f 6d 70 6c 65 74 65 20 74 72 61 6e 73 61 63 74  omplete transact
12bc0 69 6f 6e 2c 20 61 20 70 72 6f 63 65 73 73 0a 68  ion, a process.h
12bd0 61 73 20 6d 65 72 65 6c 79 20 74 6f 20 72 65 61  as merely to rea
12be0 64 20 74 68 65 20 72 6f 6c 6c 62 61 63 6b 20 6a  d the rollback j
12bf0 6f 75 72 6e 61 6c 20 66 72 6f 6d 20 62 65 67 69  ournal from begi
12c00 6e 6e 69 6e 67 20 74 6f 20 65 6e 64 20 61 6e 64  nning to end and
12c10 0a 77 72 69 74 65 20 70 61 67 65 73 20 66 6f 75  .write pages fou
12c20 6e 64 20 69 6e 20 74 68 65 20 6a 6f 75 72 6e 61  nd in the journa
12c30 6c 20 62 61 63 6b 20 69 6e 74 6f 20 74 68 65 20  l back into the 
12c40 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 74  database file at
12c50 20 74 68 65 0a 61 70 70 72 6f 70 72 69 61 74 65   the.appropriate
12c60 20 6c 6f 63 61 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a   location.</p>..
12c70 3c 70 3e 4c 65 74 20 74 68 65 20 64 61 74 61 62  <p>Let the datab
12c80 61 73 65 20 70 61 67 65 20 73 69 7a 65 20 28 74  ase page size (t
12c90 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
12ca0 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73 65  integer at offse
12cb0 74 20 32 34 20 0a 69 6e 20 74 68 65 20 6a 6f 75  t 24 .in the jou
12cc0 72 6e 61 6c 20 68 65 61 64 65 72 29 20 62 65 20  rnal header) be 
12cd0 4e 2e 0a 54 68 65 6e 20 74 68 65 20 66 6f 72 6d  N..Then the form
12ce0 61 74 20 6f 66 20 61 20 70 61 67 65 20 72 65 63  at of a page rec
12cf0 6f 72 64 20 69 73 20 61 73 20 66 6f 6c 6c 6f 77  ord is as follow
12d00 73 3a 3c 2f 70 3e 0a 0a 3c 63 65 6e 74 65 72 3e  s:</p>..<center>
12d10 0a 3c 69 3e 52 6f 6c 6c 62 61 63 6b 20 4a 6f 75  .<i>Rollback Jou
12d20 72 6e 61 6c 20 50 61 67 65 20 52 65 63 6f 72 64  rnal Page Record
12d30 20 46 6f 72 6d 61 74 3c 2f 69 3e 3c 62 72 3e 0a   Format</i><br>.
12d40 3c 74 61 62 6c 65 20 77 69 64 74 68 3d 22 38 30  <table width="80
12d50 25 22 20 62 6f 72 64 65 72 3d 31 3e 0a 3c 74 72  %" border=1>.<tr
12d60 3e 3c 74 68 3e 4f 66 66 73 65 74 3c 74 68 3e 53  ><th>Offset<th>S
12d70 69 7a 65 3c 74 68 3e 44 65 73 63 72 69 70 74 69  ize<th>Descripti
12d80 6f 6e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  on.<tr><td valig
12d90 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
12da0 65 72 3e 30 0a 20 20 20 20 3c 74 64 20 76 61 6c  er>0.    <td val
12db0 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
12dc0 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 54  nter>4.    <td>T
12dd0 68 65 20 70 61 67 65 20 6e 75 6d 62 65 72 20 69  he page number i
12de0 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  n the database f
12df0 69 6c 65 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  ile.<tr><td vali
12e00 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
12e10 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 20 76 61  ter>4.    <td va
12e20 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
12e30 65 6e 74 65 72 3e 4e 0a 20 20 20 20 3c 74 64 3e  enter>N.    <td>
12e40 4f 72 69 67 69 6e 61 6c 20 63 6f 6e 74 65 6e 74  Original content
12e50 20 6f 66 20 74 68 65 20 70 61 67 65 20 70 72 69   of the page pri
12e60 6f 72 20 74 6f 20 74 68 65 20 73 74 61 72 74 20  or to the start 
12e70 6f 66 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  of the transacti
12e80 6f 6e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  on.<tr><td valig
12e90 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
12ea0 65 72 3e 4e 2b 34 0a 20 20 20 20 3c 74 64 20 76  er>N+4.    <td v
12eb0 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
12ec0 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64  center>4.    <td
12ed0 3e 43 68 65 63 6b 73 75 6d 0a 3c 2f 74 61 62 6c  >Checksum.</tabl
12ee0 65 3e 0a 3c 2f 63 65 6e 74 65 72 3e 0a 0a 0a 3c  e>.</center>...<
12ef0 70 3e 5e 28 54 68 65 20 63 68 65 63 6b 73 75 6d  p>^(The checksum
12f00 20 69 73 20 61 6e 20 75 6e 73 69 67 6e 65 64 20   is an unsigned 
12f10 33 32 2d 62 69 74 20 69 6e 74 65 67 65 72 20 63  32-bit integer c
12f20 6f 6d 70 75 74 65 64 20 61 73 20 66 6f 6c 6c 6f  omputed as follo
12f30 77 73 3a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c  ws:</p>..<ol>.<l
12f40 69 3e 49 6e 69 74 69 61 6c 69 7a 65 20 74 68 65  i>Initialize the
12f50 20 63 68 65 63 6b 73 75 6d 20 74 6f 20 74 68 65   checksum to the
12f60 20 63 68 65 63 6b 73 75 6d 20 6e 6f 6e 63 65 20   checksum nonce 
12f70 76 61 6c 75 65 20 66 6f 75 6e 64 20 69 6e 20 74  value found in t
12f80 68 65 0a 6a 6f 75 72 6e 61 6c 20 68 65 61 64 65  he.journal heade
12f90 72 20 61 74 20 6f 66 66 73 65 74 20 31 32 2e 0a  r at offset 12..
12fa0 3c 6c 69 3e 49 6e 69 74 69 61 6c 69 7a 65 20 69  <li>Initialize i
12fb0 6e 64 65 78 20 58 20 74 6f 20 62 65 20 4e 2d 32  ndex X to be N-2
12fc0 30 30 20 28 77 68 65 72 65 20 4e 20 69 73 20 74  00 (where N is t
12fd0 68 65 20 73 69 7a 65 20 6f 66 20 61 20 64 61 74  he size of a dat
12fe0 61 62 61 73 65 20 70 61 67 65 0a 69 6e 20 62 79  abase page.in by
12ff0 74 65 73 2e 0a 3c 6c 69 3e 49 6e 74 65 72 70 72  tes..<li>Interpr
13000 65 74 20 74 68 65 20 66 6f 75 72 20 62 79 74 65  et the four byte
13010 73 20 61 74 20 6f 66 66 73 65 74 20 58 20 69 6e  s at offset X in
13020 74 6f 20 74 68 65 20 70 61 67 65 20 61 73 20 61  to the page as a
13030 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69   4-byte big-endi
13040 61 6e 0a 75 6e 73 69 67 6e 65 64 20 69 6e 74 65  an.unsigned inte
13050 67 65 72 2e 20 20 41 64 64 20 74 68 65 20 76 61  ger.  Add the va
13060 6c 75 65 20 6f 66 20 74 68 61 74 20 69 6e 74 65  lue of that inte
13070 67 65 72 20 74 6f 20 74 68 65 20 63 68 65 63 6b  ger to the check
13080 73 75 6d 2e 0a 3c 6c 69 3e 53 75 62 74 72 61 63  sum..<li>Subtrac
13090 65 20 32 30 30 20 66 72 6f 6d 20 58 2e 0a 3c 6c  e 200 from X..<l
130a0 69 3e 49 66 20 58 20 69 73 20 67 72 65 61 74 65  i>If X is greate
130b0 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  r than or equal 
130c0 74 6f 20 7a 65 72 6f 2c 20 67 6f 20 62 61 63 6b  to zero, go back
130d0 20 74 6f 20 73 74 65 70 20 33 2e 0a 3c 2f 6f 6c   to step 3..</ol
130e0 3e 29 5e 0a 0a 3c 70 3e 54 68 65 20 63 68 65 63  >)^..<p>The chec
130f0 6b 73 75 6d 20 76 61 6c 75 65 20 69 73 20 75 73  ksum value is us
13100 65 64 20 74 6f 20 67 75 61 72 64 20 61 67 61 69  ed to guard agai
13110 6e 73 74 20 69 6e 63 6f 6d 70 6c 65 74 65 20 77  nst incomplete w
13120 72 69 74 65 73 20 6f 66 0a 61 20 6a 6f 75 72 6e  rites of.a journ
13130 61 6c 20 70 61 67 65 20 72 65 63 6f 72 64 20 66  al page record f
13140 6f 6c 6c 6f 77 69 6e 67 20 61 20 70 6f 77 65 72  ollowing a power
13150 20 66 61 69 6c 75 72 65 2e 20 20 41 20 64 69 66   failure.  A dif
13160 66 65 72 65 6e 74 20 72 61 6e 64 6f 6d 20 6e 6f  ferent random no
13170 6e 63 65 0a 69 73 20 75 73 65 64 20 65 61 63 68  nce.is used each
13180 20 74 69 6d 65 20 61 20 74 72 61 6e 73 61 63 74   time a transact
13190 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64 20 69  ion is started i
131a0 6e 20 6f 72 64 65 72 20 74 6f 20 6d 69 6e 69 6d  n order to minim
131b0 69 7a 65 20 74 68 65 20 72 69 73 6b 0a 74 68 61  ize the risk.tha
131c0 74 20 75 6e 77 72 69 74 74 65 6e 20 73 65 63 74  t unwritten sect
131d0 6f 72 73 20 6d 69 67 68 74 20 62 79 20 63 68 61  ors might by cha
131e0 6e 63 65 20 63 6f 6e 74 61 69 6e 20 64 61 74 61  nce contain data
131f0 20 66 72 6f 6d 20 74 68 65 20 73 61 6d 65 20 70   from the same p
13200 61 67 65 0a 74 68 61 74 20 77 61 73 20 61 20 70  age.that was a p
13210 61 72 74 20 6f 66 20 70 72 69 6f 72 20 6a 6f 75  art of prior jou
13220 72 6e 61 6c 73 2e 20 20 42 79 20 63 68 61 6e 67  rnals.  By chang
13230 69 6e 67 20 74 68 65 20 6e 6f 6e 63 65 20 66 6f  ing the nonce fo
13240 72 20 65 61 63 68 0a 74 72 61 6e 73 61 63 74 69  r each.transacti
13250 6f 6e 2c 20 73 74 61 6c 65 20 64 61 74 61 20 6f  on, stale data o
13260 6e 20 64 69 73 6b 20 77 69 6c 6c 20 73 74 69 6c  n disk will stil
13270 6c 20 67 65 6e 65 72 61 74 65 20 61 6e 20 69 6e  l generate an in
13280 63 6f 72 72 65 63 74 20 63 68 65 63 6b 73 75 6d  correct checksum
13290 0a 61 6e 64 20 62 65 20 64 65 74 65 63 74 65 64  .and be detected
132a0 20 77 69 74 68 20 68 69 67 68 20 70 72 6f 62 61   with high proba
132b0 62 69 6c 69 74 79 2e 20 20 54 68 65 20 63 68 65  bility.  The che
132c0 63 6b 73 75 6d 20 6f 6e 6c 79 20 75 73 65 73 20  cksum only uses 
132d0 61 20 73 70 61 72 73 65 20 73 61 6d 70 6c 65 0a  a sparse sample.
132e0 6f 66 20 33 32 2d 62 69 74 20 77 6f 72 64 73 20  of 32-bit words 
132f0 66 72 6f 6d 20 74 68 65 20 64 61 74 61 20 72 65  from the data re
13300 63 6f 72 64 20 66 6f 72 20 70 65 72 66 6f 72 6d  cord for perform
13310 61 6e 63 65 20 72 65 61 73 6f 6e 73 20 2d 20 64  ance reasons - d
13320 65 73 69 67 6e 20 73 74 75 64 69 65 73 20 0a 64  esign studies .d
13330 75 72 69 6e 67 20 74 68 65 20 70 6c 61 6e 6e 69  uring the planni
13340 6e 67 20 70 68 61 73 65 73 20 6f 66 20 53 51 4c  ng phases of SQL
13350 69 74 65 20 33 2e 30 2e 30 20 73 68 6f 77 65 64  ite 3.0.0 showed
13360 0a 61 20 73 69 67 6e 69 66 69 63 61 6e 74 20 70  .a significant p
13370 65 72 66 6f 72 6d 61 6e 63 65 20 68 69 74 20 69  erformance hit i
13380 6e 20 63 68 65 63 6b 73 75 6d 6d 69 6e 67 20 74  n checksumming t
13390 68 65 20 65 6e 74 69 72 65 20 70 61 67 65 2e 3c  he entire page.<
133a0 2f 70 3e 0a 0a 3c 70 3e 4c 65 74 20 74 68 65 20  /p>..<p>Let the 
133b0 70 61 67 65 20 63 6f 75 6e 74 20 76 61 6c 75 65  page count value
133c0 20 61 74 20 6f 66 66 73 65 74 20 38 20 69 6e 20   at offset 8 in 
133d0 74 68 65 20 6a 6f 75 72 6e 61 6c 20 68 65 61 64  the journal head
133e0 65 72 20 62 65 20 4d 2e 0a 5e 49 66 20 4d 20 69  er be M..^If M i
133f0 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 7a  s greater than z
13400 65 72 6f 20 74 68 65 6e 20 61 66 74 65 72 20 4d  ero then after M
13410 20 70 61 67 65 20 72 65 63 6f 72 64 73 20 74 68   page records th
13420 65 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 0a 6d  e journal file.m
13430 61 79 20 62 65 20 7a 65 72 6f 20 70 61 64 64 65  ay be zero padde
13440 64 20 6f 75 74 20 74 6f 20 74 68 65 20 6e 65 78  d out to the nex
13450 74 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20 74 68  t multiple of th
13460 65 20 73 65 63 74 6f 72 20 73 69 7a 65 20 61 6e  e sector size an
13470 64 20 61 6e 6f 74 68 65 72 0a 6a 6f 75 72 6e 61  d another.journa
13480 6c 20 68 65 61 64 65 72 20 6d 61 79 20 62 65 20  l header may be 
13490 69 6e 73 65 72 74 65 64 2e 20 20 5e 41 6c 6c 20  inserted.  ^All 
134a0 6a 6f 75 72 6e 61 6c 20 68 65 61 64 65 72 73 20  journal headers 
134b0 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d 65 0a  within the same.
134c0 6a 6f 75 72 6e 61 6c 20 6d 75 73 74 20 63 6f 6e  journal must con
134d0 74 61 69 6e 20 74 68 65 20 73 61 6d 65 20 64 61  tain the same da
134e0 74 61 62 61 73 65 20 70 61 67 65 20 73 69 7a 65  tabase page size
134f0 20 61 6e 64 20 73 65 63 74 6f 72 20 73 69 7a 65   and sector size
13500 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20 4d 20  .</p>..<p>^If M 
13510 69 73 20 2d 31 20 69 6e 20 74 68 65 20 69 6e 69  is -1 in the ini
13520 74 69 61 6c 20 6a 6f 75 72 6e 61 6c 20 68 65 61  tial journal hea
13530 64 65 72 2c 20 74 68 65 6e 20 74 68 65 20 6e 75  der, then the nu
13540 6d 62 65 72 20 6f 66 20 70 61 67 65 20 72 65 63  mber of page rec
13550 6f 72 64 73 0a 74 68 61 74 20 66 6f 6c 6c 6f 77  ords.that follow
13560 20 69 73 20 63 6f 6d 70 75 74 65 64 20 62 79 20   is computed by 
13570 63 6f 6d 70 75 74 69 6e 67 20 68 6f 77 20 6d 61  computing how ma
13580 6e 79 20 70 61 67 65 20 72 65 63 6f 72 64 73 20  ny page records 
13590 77 69 6c 6c 20 66 69 74 20 69 6e 0a 74 68 65 20  will fit in.the 
135a0 61 76 61 69 6c 61 62 6c 65 20 73 70 61 63 65 20  available space 
135b0 6f 66 20 74 68 65 20 72 65 6d 61 69 6e 64 65 72  of the remainder
135c0 20 6f 66 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20   of the journal 
135d0 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  file.</p>..<tcl>
135e0 68 64 5f 66 72 61 67 6d 65 6e 74 20 77 61 6c 66  hd_fragment walf
135f0 6f 72 6d 61 74 20 7b 57 41 4c 20 66 6f 72 6d 61  ormat {WAL forma
13600 74 7d 3c 2f 74 63 6c 3e 0a 3c 68 31 3e 54 68 65  t}</tcl>.<h1>The
13610 20 57 72 69 74 65 2d 41 68 65 61 64 20 4c 6f 67   Write-Ahead Log
13620 3c 2f 68 31 3e 0a 0a 3c 70 3e 42 65 67 69 6e 6e  </h1>..<p>Beginn
13630 69 6e 67 20 77 69 74 68 20 5b 76 65 72 73 69 6f  ing with [versio
13640 6e 20 33 2e 37 2e 30 5d 20 28 64 61 74 65 6f 66  n 3.7.0] (dateof
13650 3a 33 2e 37 2e 30 29 2c 20 0a 53 51 4c 69 74 65  :3.7.0), .SQLite
13660 20 73 75 70 70 6f 72 74 73 20 61 20 6e 65 77 20   supports a new 
13670 74 72 61 6e 73 61 63 74 69 6f 6e 0a 63 6f 6e 74  transaction.cont
13680 72 6f 6c 20 6d 65 63 68 61 6e 69 73 6d 20 63 61  rol mechanism ca
13690 6c 6c 65 64 20 22 5b 57 41 4c 20 7c 20 77 72 69  lled "[WAL | wri
136a0 74 65 2d 61 68 65 61 64 20 6c 6f 67 5d 22 20 6f  te-ahead log]" o
136b0 72 20 22 5b 57 41 4c 5d 22 2e 0a 5e 57 68 65 6e  r "[WAL]"..^When
136c0 20 61 20 64 61 74 61 62 61 73 65 20 69 73 20 69   a database is i
136d0 6e 20 57 41 4c 20 6d 6f 64 65 2c 20 61 6c 6c 20  n WAL mode, all 
136e0 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 74 6f 20 74  connections to t
136f0 68 61 74 20 64 61 74 61 62 61 73 65 20 6d 75 73  hat database mus
13700 74 0a 75 73 65 20 74 68 65 20 57 41 4c 2e 20 20  t.use the WAL.  
13710 5e 41 20 70 61 72 74 69 63 75 6c 61 72 20 64 61  ^A particular da
13720 74 61 62 61 73 65 20 77 69 6c 6c 20 75 73 65 20  tabase will use 
13730 65 69 74 68 65 72 20 61 20 72 6f 6c 6c 62 61 63  either a rollbac
13740 6b 20 6a 6f 75 72 6e 61 6c 0a 6f 72 20 61 20 57  k journal.or a W
13750 41 4c 2c 20 62 75 74 20 6e 6f 74 20 62 6f 74 68  AL, but not both
13760 20 61 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d   at the same tim
13770 65 2e 0a 5e 54 68 65 20 57 41 4c 20 69 73 20 61  e..^The WAL is a
13780 6c 77 61 79 73 20 6c 6f 63 61 74 65 64 20 69 6e  lways located in
13790 20 74 68 65 20 73 61 6d 65 20 64 69 72 65 63 74   the same direct
137a0 6f 72 79 20 61 73 20 74 68 65 20 64 61 74 61 62  ory as the datab
137b0 61 73 65 0a 66 69 6c 65 20 61 6e 64 20 68 61 73  ase.file and has
137c0 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 61   the same name a
137d0 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  s the database f
137e0 69 6c 65 20 62 75 74 20 77 69 74 68 20 74 68 65  ile but with the
137f0 20 73 74 72 69 6e 67 0a 22 3c 74 74 3e 2d 77 61   string."<tt>-wa
13800 6c 3c 2f 74 74 3e 22 20 61 70 70 65 6e 64 65 64  l</tt>" appended
13810 2e 3c 2f 70 3e 0a 0a 3c 68 32 3e 57 41 4c 20 46  .</p>..<h2>WAL F
13820 69 6c 65 20 46 6f 72 6d 61 74 3c 2f 68 32 3e 0a  ile Format</h2>.
13830 0a 3c 70 3e 41 20 57 41 4c 20 66 69 6c 65 20 63  .<p>A WAL file c
13840 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 68 65 61  onsists of a hea
13850 64 65 72 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20  der followed by 
13860 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 22 66 72  zero or more "fr
13870 61 6d 65 73 22 2e 0a 45 61 63 68 20 66 72 61 6d  ames"..Each fram
13880 65 20 72 65 63 6f 72 64 73 20 74 68 65 20 72 65  e records the re
13890 76 69 73 65 64 20 63 6f 6e 74 65 6e 74 20 6f 66  vised content of
138a0 20 61 20 73 69 6e 67 6c 65 20 70 61 67 65 20 66   a single page f
138b0 72 6f 6d 20 74 68 65 0a 64 61 74 61 62 61 73 65  rom the.database
138c0 20 66 69 6c 65 2e 20 20 41 6c 6c 20 63 68 61 6e   file.  All chan
138d0 67 65 73 20 74 6f 20 74 68 65 20 64 61 74 61 62  ges to the datab
138e0 61 73 65 20 61 72 65 20 72 65 63 6f 72 64 65 64  ase are recorded
138f0 20 62 79 20 77 72 69 74 69 6e 67 0a 66 72 61 6d   by writing.fram
13900 65 73 20 69 6e 74 6f 20 74 68 65 20 57 41 4c 2e  es into the WAL.
13910 20 20 54 72 61 6e 73 61 63 74 69 6f 6e 73 20 63    Transactions c
13920 6f 6d 6d 69 74 20 77 68 65 6e 20 61 20 66 72 61  ommit when a fra
13930 6d 65 20 69 73 20 77 72 69 74 74 65 6e 20 74 68  me is written th
13940 61 74 0a 63 6f 6e 74 61 69 6e 73 20 61 20 63 6f  at.contains a co
13950 6d 6d 69 74 20 6d 61 72 6b 65 72 2e 20 20 5e 41  mmit marker.  ^A
13960 20 73 69 6e 67 6c 65 20 57 41 4c 20 63 61 6e 20   single WAL can 
13970 61 6e 64 20 75 73 75 61 6c 6c 79 20 64 6f 65 73  and usually does
13980 20 72 65 63 6f 72 64 20 0a 6d 75 6c 74 69 70 6c   record .multipl
13990 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e 20  e transactions. 
139a0 20 50 65 72 69 6f 64 69 63 61 6c 6c 79 2c 20 74   Periodically, t
139b0 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68  he content of th
139c0 65 20 57 41 4c 20 69 73 0a 74 72 61 6e 73 66 65  e WAL is.transfe
139d0 72 72 65 64 20 62 61 63 6b 20 69 6e 74 6f 20 74  rred back into t
139e0 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
139f0 20 69 6e 20 61 6e 20 6f 70 65 72 61 74 69 6f 6e   in an operation
13a00 20 63 61 6c 6c 65 64 20 61 0a 22 63 68 65 63 6b   called a."check
13a10 70 6f 69 6e 74 22 2e 3c 2f 70 3e 0a 0a 3c 70 3e  point".</p>..<p>
13a20 5e 41 20 73 69 6e 67 6c 65 20 57 41 4c 20 66 69  ^A single WAL fi
13a30 6c 65 20 63 61 6e 20 62 65 20 72 65 75 73 65 64  le can be reused
13a40 20 6d 75 6c 74 69 70 6c 65 20 74 69 6d 65 73 2e   multiple times.
13a50 20 20 5e 49 6e 20 6f 74 68 65 72 20 77 6f 72 64    ^In other word
13a60 73 2c 20 74 68 65 0a 57 41 4c 20 63 61 6e 20 66  s, the.WAL can f
13a70 69 6c 6c 20 75 70 20 77 69 74 68 20 66 72 61 6d  ill up with fram
13a80 65 73 20 61 6e 64 20 74 68 65 6e 20 62 65 20 63  es and then be c
13a90 68 65 63 6b 70 6f 69 6e 74 65 64 20 61 6e 64 20  heckpointed and 
13aa0 74 68 65 6e 20 6e 65 77 0a 66 72 61 6d 65 73 20  then new.frames 
13ab0 63 61 6e 20 6f 76 65 72 77 72 69 74 65 20 74 68  can overwrite th
13ac0 65 20 6f 6c 64 20 6f 6e 65 73 2e 20 20 5e 41 20  e old ones.  ^A 
13ad0 57 41 4c 20 61 6c 77 61 79 73 20 67 72 6f 77 73  WAL always grows
13ae0 20 66 72 6f 6d 20 62 65 67 69 6e 6e 69 6e 67 0a   from beginning.
13af0 74 6f 77 61 72 64 20 74 68 65 20 65 6e 64 2e 20  toward the end. 
13b00 20 43 68 65 63 6b 73 75 6d 73 20 61 6e 64 20 63   Checksums and c
13b10 6f 75 6e 74 65 72 73 20 61 74 74 61 63 68 65 64  ounters attached
13b20 20 74 6f 20 65 61 63 68 20 66 72 61 6d 65 20 61   to each frame a
13b30 72 65 0a 75 73 65 64 20 74 6f 20 64 65 74 65 72  re.used to deter
13b40 6d 69 6e 65 20 77 68 69 63 68 20 66 72 61 6d 65  mine which frame
13b50 73 20 77 69 74 68 69 6e 20 74 68 65 20 57 41 4c  s within the WAL
13b60 20 61 72 65 20 76 61 6c 69 64 20 61 6e 64 20 77   are valid and w
13b70 68 69 63 68 0a 61 72 65 20 6c 65 66 74 6f 76 65  hich.are leftove
13b80 72 73 20 66 72 6f 6d 20 70 72 69 6f 72 20 63 68  rs from prior ch
13b90 65 63 6b 70 6f 69 6e 74 73 2e 3c 2f 70 3e 0a 0a  eckpoints.</p>..
13ba0 3c 70 3e 5e 28 54 68 65 20 57 41 4c 20 68 65 61  <p>^(The WAL hea
13bb0 64 65 72 20 69 73 20 33 32 20 62 79 74 65 73 20  der is 32 bytes 
13bc0 69 6e 20 73 69 7a 65 20 61 6e 64 20 63 6f 6e 73  in size and cons
13bd0 69 73 74 73 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ists of the foll
13be0 6f 77 69 6e 67 20 65 69 67 68 74 0a 62 69 67 2d  owing eight.big-
13bf0 65 6e 64 69 61 6e 20 33 32 2d 62 69 74 20 75 6e  endian 32-bit un
13c00 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 76  signed integer v
13c10 61 6c 75 65 73 3a 3c 2f 70 3e 0a 0a 3c 63 65 6e  alues:</p>..<cen
13c20 74 65 72 3e 0a 3c 69 3e 57 41 4c 20 48 65 61 64  ter>.<i>WAL Head
13c30 65 72 20 46 6f 72 6d 61 74 3c 2f 69 3e 3c 62 72  er Format</i><br
13c40 3e 0a 3c 74 61 62 6c 65 20 77 69 64 74 68 3d 22  >.<table width="
13c50 38 30 25 22 20 62 6f 72 64 65 72 3d 31 3e 0a 3c  80%" border=1>.<
13c60 74 72 3e 3c 74 68 3e 4f 66 66 73 65 74 3c 74 68  tr><th>Offset<th
13c70 3e 53 69 7a 65 3c 74 68 3e 44 65 73 63 72 69 70  >Size<th>Descrip
13c80 74 69 6f 6e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c  tion.<tr><td val
13c90 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
13ca0 6e 74 65 72 3e 30 3c 74 64 20 76 61 6c 69 67 6e  nter>0<td valign
13cb0 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
13cc0 72 3e 34 0a 20 20 20 20 3c 74 64 3e 4d 61 67 69  r>4.    <td>Magi
13cd0 63 20 6e 75 6d 62 65 72 2e 20 20 30 78 33 37 37  c number.  0x377
13ce0 66 30 36 38 32 20 6f 72 20 30 78 33 37 37 66 30  f0682 or 0x377f0
13cf0 36 38 33 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  683.<tr><td vali
13d00 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
13d10 74 65 72 3e 34 3c 74 64 20 76 61 6c 69 67 6e 3d  ter>4<td valign=
13d20 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
13d30 3e 34 0a 20 20 20 20 3c 74 64 3e 46 69 6c 65 20  >4.    <td>File 
13d40 66 6f 72 6d 61 74 20 76 65 72 73 69 6f 6e 2e 20  format version. 
13d50 20 43 75 72 72 65 6e 74 6c 79 20 33 30 30 37 30   Currently 30070
13d60 30 30 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  00..<tr><td vali
13d70 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
13d80 74 65 72 3e 38 3c 74 64 20 76 61 6c 69 67 6e 3d  ter>8<td valign=
13d90 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
13da0 3e 34 0a 20 20 20 20 3c 74 64 3e 44 61 74 61 62  >4.    <td>Datab
13db0 61 73 65 20 70 61 67 65 20 73 69 7a 65 2e 20 20  ase page size.  
13dc0 45 78 61 6d 70 6c 65 3a 20 31 30 32 34 0a 3c 74  Example: 1024.<t
13dd0 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
13de0 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 32   align=center>12
13df0 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
13e00 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20  lign=center>4.  
13e10 20 20 3c 74 64 3e 43 68 65 63 6b 70 6f 69 6e 74    <td>Checkpoint
13e20 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72   sequence number
13e30 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d  .<tr><td valign=
13e40 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
13e50 3e 31 36 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  >16<td valign=to
13e60 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34  p align=center>4
13e70 0a 20 20 20 20 3c 74 64 3e 53 61 6c 74 2d 31 3a  .    <td>Salt-1:
13e80 20 72 61 6e 64 6f 6d 20 69 6e 74 65 67 65 72 20   random integer 
13e90 69 6e 63 72 65 6d 65 6e 74 65 64 20 77 69 74 68  incremented with
13ea0 20 65 61 63 68 20 63 68 65 63 6b 70 6f 69 6e 74   each checkpoint
13eb0 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d  .<tr><td valign=
13ec0 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
13ed0 3e 32 30 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  >20<td valign=to
13ee0 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34  p align=center>4
13ef0 0a 20 20 20 20 3c 74 64 3e 53 61 6c 74 2d 32 3a  .    <td>Salt-2:
13f00 20 61 20 64 69 66 66 65 72 65 6e 74 20 72 61 6e   a different ran
13f10 64 6f 6d 20 6e 75 6d 62 65 72 20 66 6f 72 20 65  dom number for e
13f20 61 63 68 20 63 68 65 63 6b 70 6f 69 6e 74 0a 3c  ach checkpoint.<
13f30 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
13f40 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32  p align=center>2
13f50 34 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  4<td valign=top 
13f60 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20  align=center>4. 
13f70 20 20 20 3c 74 64 3e 43 68 65 63 6b 73 75 6d 2d     <td>Checksum-
13f80 31 3a 20 46 69 72 73 74 20 70 61 72 74 20 6f 66  1: First part of
13f90 20 61 20 63 68 65 63 6b 73 75 6d 20 6f 6e 20 74   a checksum on t
13fa0 68 65 20 66 69 72 73 74 20 32 34 20 62 79 74 65  he first 24 byte
13fb0 73 20 6f 66 20 68 65 61 64 65 72 0a 3c 74 72 3e  s of header.<tr>
13fc0 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
13fd0 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32 38 3c 74  lign=center>28<t
13fe0 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
13ff0 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20  gn=center>4.    
14000 3c 74 64 3e 43 68 65 63 6b 73 75 6d 2d 32 3a 20  <td>Checksum-2: 
14010 53 65 63 6f 6e 64 20 70 61 72 74 20 6f 66 20 74  Second part of t
14020 68 65 20 63 68 65 63 6b 73 75 6d 20 6f 6e 20 74  he checksum on t
14030 68 65 20 66 69 72 73 74 20 32 34 20 62 79 74 65  he first 24 byte
14040 73 20 6f 66 20 68 65 61 64 65 72 0a 3c 2f 74 61  s of header.</ta
14050 62 6c 65 3e 0a 3c 2f 63 65 6e 74 65 72 3e 29 5e  ble>.</center>)^
14060 0a 0a 3c 70 3e 5e 49 6d 6d 65 64 69 61 74 65 6c  ..<p>^Immediatel
14070 79 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20  y following the 
14080 77 61 6c 2d 68 65 61 64 65 72 20 61 72 65 20 7a  wal-header are z
14090 65 72 6f 20 6f 72 20 6d 6f 72 65 20 66 72 61 6d  ero or more fram
140a0 65 73 2e 20 5e 45 61 63 68 0a 66 72 61 6d 65 20  es. ^Each.frame 
140b0 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 32 34  consists of a 24
140c0 2d 62 79 74 65 20 66 72 61 6d 65 2d 68 65 61 64  -byte frame-head
140d0 65 72 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61  er followed by a
140e0 20 3c 69 3e 70 61 67 65 2d 73 69 7a 65 3c 2f 69   <i>page-size</i
140f0 3e 20 62 79 74 65 73 0a 6f 66 20 70 61 67 65 20  > bytes.of page 
14100 64 61 74 61 2e 20 5e 28 54 68 65 20 66 72 61 6d  data. ^(The fram
14110 65 2d 68 65 61 64 65 72 20 69 73 20 73 69 78 20  e-header is six 
14120 62 69 67 2d 65 6e 64 69 61 6e 20 33 32 2d 62 69  big-endian 32-bi
14130 74 20 75 6e 73 69 67 6e 65 64 20 0a 69 6e 74 65  t unsigned .inte
14140 67 65 72 20 76 61 6c 75 65 73 2c 20 61 73 20 66  ger values, as f
14150 6f 6c 6c 6f 77 73 3a 0a 0a 3c 63 65 6e 74 65 72  ollows:..<center
14160 3e 0a 3c 69 3e 57 41 4c 20 46 72 61 6d 65 20 48  >.<i>WAL Frame H
14170 65 61 64 65 72 20 46 6f 72 6d 61 74 3c 2f 69 3e  eader Format</i>
14180 3c 62 72 3e 0a 3c 74 61 62 6c 65 20 77 69 64 74  <br>.<table widt
14190 68 3d 22 38 30 25 22 20 62 6f 72 64 65 72 3d 31  h="80%" border=1
141a0 3e 0a 3c 74 72 3e 3c 74 68 3e 4f 66 66 73 65 74  >.<tr><th>Offset
141b0 3c 74 68 3e 53 69 7a 65 3c 74 68 3e 44 65 73 63  <th>Size<th>Desc
141c0 72 69 70 74 69 6f 6e 0a 3c 74 72 3e 3c 74 64 20  ription.<tr><td 
141d0 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
141e0 3d 63 65 6e 74 65 72 3e 30 3c 74 64 20 76 61 6c  =center>0<td val
141f0 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
14200 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 50  nter>4.    <td>P
14210 61 67 65 20 6e 75 6d 62 65 72 0a 3c 74 72 3e 3c  age number.<tr><
14220 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
14230 69 67 6e 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20  ign=center>4<td 
14240 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
14250 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74  =center>4.    <t
14260 64 3e 46 6f 72 20 63 6f 6d 6d 69 74 20 72 65 63  d>For commit rec
14270 6f 72 64 73 2c 20 74 68 65 20 73 69 7a 65 20 6f  ords, the size o
14280 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  f the database f
14290 69 6c 65 20 69 6e 20 70 61 67 65 73 0a 20 20 20  ile in pages.   
142a0 20 20 20 20 20 61 66 74 65 72 20 74 68 65 20 63       after the c
142b0 6f 6d 6d 69 74 2e 20 20 46 6f 72 20 61 6c 6c 20  ommit.  For all 
142c0 6f 74 68 65 72 20 72 65 63 6f 72 64 73 2c 20 7a  other records, z
142d0 65 72 6f 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c  ero..<tr><td val
142e0 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
142f0 6e 74 65 72 3e 38 3c 74 64 20 76 61 6c 69 67 6e  nter>8<td valign
14300 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
14310 72 3e 34 0a 20 20 20 20 3c 74 64 3e 53 61 6c 74  r>4.    <td>Salt
14320 2d 31 20 63 6f 70 69 65 64 20 66 72 6f 6d 20 74  -1 copied from t
14330 68 65 20 57 41 4c 20 68 65 61 64 65 72 0a 3c 74  he WAL header.<t
14340 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
14350 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 32   align=center>12
14360 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
14370 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20  lign=center>4.  
14380 20 20 3c 74 64 3e 53 61 6c 74 2d 32 20 63 6f 70    <td>Salt-2 cop
14390 69 65 64 20 66 72 6f 6d 20 74 68 65 20 57 41 4c  ied from the WAL
143a0 20 68 65 61 64 65 72 0a 3c 74 72 3e 3c 74 64 20   header.<tr><td 
143b0 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
143c0 3d 63 65 6e 74 65 72 3e 31 36 3c 74 64 20 76 61  =center>16<td va
143d0 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
143e0 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e  enter>4.    <td>
143f0 43 68 65 63 6b 73 75 6d 2d 31 3a 20 20 43 75 6d  Checksum-1:  Cum
14400 75 6c 61 74 69 76 65 20 63 68 65 63 6b 73 75 6d  ulative checksum
14410 20 75 70 20 74 68 72 6f 75 67 68 20 61 6e 64 20   up through and 
14420 69 6e 63 6c 75 64 69 6e 67 20 74 68 69 73 20 70  including this p
14430 61 67 65 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  age.<tr><td vali
14440 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
14450 74 65 72 3e 32 30 3c 74 64 20 76 61 6c 69 67 6e  ter>20<td valign
14460 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
14470 72 3e 34 0a 20 20 20 20 3c 74 64 3e 43 68 65 63  r>4.    <td>Chec
14480 6b 73 75 6d 2d 32 3a 20 20 53 65 63 6f 6e 64 20  ksum-2:  Second 
14490 68 61 6c 66 20 6f 66 20 74 68 65 20 63 75 6d 75  half of the cumu
144a0 6c 61 74 69 76 65 20 63 68 65 63 6b 73 75 6d 2e  lative checksum.
144b0 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 63 65 6e 74  .</table>.</cent
144c0 65 72 3e 29 5e 0a 0a 5e 28 3c 70 3e 41 20 66 72  er>)^..^(<p>A fr
144d0 61 6d 65 20 69 73 20 63 6f 6e 73 69 64 65 72 65  ame is considere
144e0 64 20 76 61 6c 69 64 20 69 66 20 61 6e 64 20 6f  d valid if and o
144f0 6e 6c 79 20 69 66 20 74 68 65 20 66 6f 6c 6c 6f  nly if the follo
14500 77 69 6e 67 20 63 6f 6e 64 69 74 69 6f 6e 73 20  wing conditions 
14510 61 72 65 0a 74 72 75 65 3a 3c 2f 70 3e 0a 0a 3c  are.true:</p>..<
14520 6f 6c 3e 0a 3c 6c 69 3e 3c 70 3e 54 68 65 20 73  ol>.<li><p>The s
14530 61 6c 74 2d 31 20 61 6e 64 20 73 61 6c 74 2d 32  alt-1 and salt-2
14540 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 66   values in the f
14550 72 61 6d 65 2d 68 65 61 64 65 72 20 6d 61 74 63  rame-header matc
14560 68 0a 20 20 20 20 20 20 20 73 61 6c 74 20 76 61  h.       salt va
14570 6c 75 65 73 20 69 6e 20 74 68 65 20 77 61 6c 2d  lues in the wal-
14580 68 65 61 64 65 72 3c 2f 70 3e 3c 2f 6c 69 3e 0a  header</p></li>.
14590 0a 3c 6c 69 3e 3c 70 3e 54 68 65 20 63 68 65 63  .<li><p>The chec
145a0 6b 73 75 6d 20 76 61 6c 75 65 73 20 69 6e 20 74  ksum values in t
145b0 68 65 20 66 69 6e 61 6c 20 38 20 62 79 74 65 73  he final 8 bytes
145c0 20 6f 66 20 74 68 65 20 66 72 61 6d 65 2d 68 65   of the frame-he
145d0 61 64 65 72 0a 20 20 20 20 20 20 20 65 78 61 63  ader.       exac
145e0 74 6c 79 20 6d 61 74 63 68 20 74 68 65 20 63 68  tly match the ch
145f0 65 63 6b 73 75 6d 20 63 6f 6d 70 75 74 65 64 20  ecksum computed 
14600 63 6f 6e 73 65 63 75 74 69 76 65 6c 79 20 6f 6e  consecutively on
14610 20 74 68 65 0a 20 20 20 20 20 20 20 66 69 72 73   the.       firs
14620 74 20 32 34 20 62 79 74 65 73 20 6f 66 20 74 68  t 24 bytes of th
14630 65 20 57 41 4c 20 68 65 61 64 65 72 20 61 6e 64  e WAL header and
14640 20 74 68 65 20 66 69 72 73 74 20 38 20 62 79 74   the first 8 byt
14650 65 73 20 61 6e 64 0a 20 20 20 20 20 20 20 74 68  es and.       th
14660 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61 6c 6c  e content of all
14670 20 66 72 61 6d 65 73 0a 20 20 20 20 20 20 20 75   frames.       u
14680 70 20 74 6f 20 61 6e 64 20 69 6e 63 6c 75 64 69  p to and includi
14690 6e 67 20 74 68 65 20 63 75 72 72 65 6e 74 20 66  ng the current f
146a0 72 61 6d 65 2e 3c 2f 70 3e 3c 2f 6c 69 3e 3c 2f  rame.</p></li></
146b0 6c 69 3e 0a 3c 2f 6f 6c 3e 29 5e 0a 0a 3c 74 63  li>.</ol>)^..<tc
146c0 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 77 61  l>hd_fragment wa
146d0 6c 63 6b 73 6d 20 7b 57 41 4c 20 63 68 65 63 6b  lcksm {WAL check
146e0 73 75 6d 20 61 6c 67 6f 72 69 74 68 6d 7d 3c 2f  sum algorithm}</
146f0 74 63 6c 3e 0a 3c 68 32 3e 43 68 65 63 6b 73 75  tcl>.<h2>Checksu
14700 6d 20 41 6c 67 6f 72 69 74 68 6d 3c 2f 68 32 3e  m Algorithm</h2>
14710 0a 0a 3c 70 3e 54 68 65 20 63 68 65 63 6b 73 75  ..<p>The checksu
14720 6d 20 69 73 20 63 6f 6d 70 75 74 65 64 20 62 79  m is computed by
14730 20 69 6e 74 65 72 70 72 65 74 69 6e 67 20 74 68   interpreting th
14740 65 20 69 6e 70 75 74 20 61 73 0a 61 6e 20 65 76  e input as.an ev
14750 65 6e 20 6e 75 6d 62 65 72 20 6f 66 20 75 6e 73  en number of uns
14760 69 67 6e 65 64 20 33 32 2d 62 69 74 20 69 6e 74  igned 32-bit int
14770 65 67 65 72 73 3a 20 78 28 30 29 20 74 68 72 6f  egers: x(0) thro
14780 75 67 68 20 78 28 4e 29 2e 0a 5e 54 68 65 20 33  ugh x(N)..^The 3
14790 32 2d 62 69 74 20 69 6e 74 65 67 65 72 73 20 61  2-bit integers a
147a0 72 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 66  re big-endian if
147b0 20 74 68 65 0a 6d 61 67 69 63 20 6e 75 6d 62 65   the.magic numbe
147c0 72 20 69 6e 20 74 68 65 20 66 69 72 73 74 20 34  r in the first 4
147d0 20 62 79 74 65 73 20 6f 66 20 74 68 65 20 57 41   bytes of the WA
147e0 4c 20 68 65 61 64 65 72 20 69 73 20 30 78 33 37  L header is 0x37
147f0 37 66 30 36 38 33 20 61 6e 64 0a 74 68 65 20 69  7f0683 and.the i
14800 6e 74 65 67 65 72 73 20 61 72 65 20 6c 69 74 74  ntegers are litt
14810 6c 65 2d 65 6e 64 69 61 6e 20 69 66 20 74 68 65  le-endian if the
14820 20 6d 61 67 69 63 20 6e 75 6d 62 65 72 20 69 73   magic number is
14830 20 30 78 33 37 37 66 30 36 38 32 2e 0a 5e 54 68   0x377f0682..^Th
14840 65 20 63 68 65 63 6b 73 75 6d 20 76 61 6c 75 65  e checksum value
14850 73 20 61 72 65 20 61 6c 77 61 79 73 20 73 74 6f  s are always sto
14860 72 65 64 20 69 6e 20 74 68 65 20 66 72 61 6d 65  red in the frame
14870 20 68 65 61 64 65 72 20 69 6e 20 61 0a 62 69 67   header in a.big
14880 2d 65 6e 64 69 61 6e 20 66 6f 72 6d 61 74 20 72  -endian format r
14890 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 69  egardless of whi
148a0 63 68 20 62 79 74 65 20 6f 72 64 65 72 20 69 73  ch byte order is
148b0 20 75 73 65 64 20 74 6f 20 63 6f 6d 70 75 74 65   used to compute
148c0 0a 74 68 65 20 63 68 65 63 6b 73 75 6d 2e 3c 2f  .the checksum.</
148d0 70 3e 0a 0a 3c 70 3e 54 68 65 20 63 68 65 63 6b  p>..<p>The check
148e0 73 75 6d 20 61 6c 67 6f 72 69 74 68 6d 20 6f 6e  sum algorithm on
148f0 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 63 6f 6e  ly works for con
14900 74 65 6e 74 20 77 68 69 63 68 20 69 73 20 61 20  tent which is a 
14910 6d 75 6c 74 69 70 6c 65 20 6f 66 0a 38 20 62 79  multiple of.8 by
14920 74 65 73 20 69 6e 20 6c 65 6e 67 74 68 2e 20 20  tes in length.  
14930 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
14940 69 66 20 74 68 65 20 69 6e 70 75 74 73 20 61 72  if the inputs ar
14950 65 20 78 28 30 29 20 74 68 72 6f 75 67 68 20 78  e x(0) through x
14960 28 4e 29 0a 74 68 65 6e 20 4e 20 6d 75 73 74 20  (N).then N must 
14970 62 65 20 6f 64 64 2e 0a 5e 28 54 68 65 20 63 68  be odd..^(The ch
14980 65 63 6b 73 75 6d 20 61 6c 67 6f 72 69 74 68 6d  ecksum algorithm
14990 20 69 73 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a   is as follows:.
149a0 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72  .<blockquote><pr
149b0 65 3e 20 0a 73 30 20 3d 20 73 31 20 3d 20 30 0a  e> .s0 = s1 = 0.
149c0 66 6f 72 20 69 20 66 72 6f 6d 20 30 20 74 6f 20  for i from 0 to 
149d0 6e 2d 31 20 73 74 65 70 20 32 3a 0a 20 20 20 73  n-1 step 2:.   s
149e0 30 20 2b 3d 20 78 28 69 29 20 2b 20 73 31 3b 0a  0 += x(i) + s1;.
149f0 20 20 20 73 31 20 2b 3d 20 78 28 69 2b 31 29 20     s1 += x(i+1) 
14a00 2b 20 73 30 3b 0a 65 6e 64 66 6f 72 0a 23 20 72  + s0;.endfor.# r
14a10 65 73 75 6c 74 20 69 6e 20 73 30 20 61 6e 64 20  esult in s0 and 
14a20 73 31 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b  s1.</pre></block
14a30 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 5e 54 68  quote>)^..<p>^Th
14a40 65 20 6f 75 74 70 75 74 73 20 73 30 20 61 6e 64  e outputs s0 and
14a50 20 73 31 20 61 72 65 20 62 6f 74 68 20 77 65 69   s1 are both wei
14a60 67 68 74 65 64 20 63 68 65 63 6b 73 75 6d 73 20  ghted checksums 
14a70 75 73 69 6e 67 20 46 69 62 6f 6e 61 63 63 69 20  using Fibonacci 
14a80 77 65 69 67 68 74 73 0a 69 6e 20 72 65 76 65 72  weights.in rever
14a90 73 65 20 6f 72 64 65 72 2e 20 20 28 5e 54 68 65  se order.  (^The
14aa0 20 6c 61 72 67 65 73 74 20 46 69 62 6f 6e 61 63   largest Fibonac
14ab0 63 69 20 77 65 69 67 68 74 20 6f 63 63 75 72 73  ci weight occurs
14ac0 20 6f 6e 20 74 68 65 20 66 69 72 73 74 20 65 6c   on the first el
14ad0 65 6d 65 6e 74 0a 6f 66 20 74 68 65 20 73 65 71  ement.of the seq
14ae0 75 65 6e 63 65 20 62 65 69 6e 67 20 73 75 6d 6d  uence being summ
14af0 65 64 2e 29 20 20 5e 54 68 65 20 73 31 20 76 61  ed.)  ^The s1 va
14b00 6c 75 65 20 73 70 61 6e 73 20 61 6c 6c 20 33 32  lue spans all 32
14b10 2d 62 69 74 20 69 6e 74 65 67 65 72 0a 74 65 72  -bit integer.ter
14b20 6d 73 20 6f 66 20 74 68 65 20 73 65 71 75 65 6e  ms of the sequen
14b30 63 65 20 77 68 65 72 65 61 73 20 73 30 20 6f 6d  ce whereas s0 om
14b40 69 74 73 20 74 68 65 20 66 69 6e 61 6c 20 74 65  its the final te
14b50 72 6d 2e 3c 2f 70 3e 0a 0a 3c 68 32 3e 43 68 65  rm.</p>..<h2>Che
14b60 63 6b 70 6f 69 6e 74 20 41 6c 67 6f 72 69 74 68  ckpoint Algorith
14b70 6d 3c 2f 68 32 3e 0a 0a 3c 70 3e 5e 4f 6e 20 61  m</h2>..<p>^On a
14b80 20 5b 63 68 65 63 6b 70 6f 69 6e 74 5d 2c 20 74   [checkpoint], t
14b90 68 65 20 57 41 4c 20 69 73 20 66 69 72 73 74 20  he WAL is first 
14ba0 66 6c 75 73 68 65 64 20 74 6f 20 70 65 72 73 69  flushed to persi
14bb0 73 74 65 6e 74 20 73 74 6f 72 61 67 65 20 75 73  stent storage us
14bc0 69 6e 67 0a 74 68 65 20 78 53 79 6e 63 20 6d 65  ing.the xSync me
14bd0 74 68 6f 64 20 6f 66 20 74 68 65 20 5b 73 71 6c  thod of the [sql
14be0 69 74 65 33 5f 69 6f 5f 6d 65 74 68 6f 64 73 20  ite3_io_methods 
14bf0 7c 20 56 46 53 5d 2e 20 0a 5e 54 68 65 6e 20 76  | VFS]. .^Then v
14c00 61 6c 69 64 20 63 6f 6e 74 65 6e 74 20 6f 66 20  alid content of 
14c10 74 68 65 20 57 41 4c 20 69 73 20 74 72 61 6e 73  the WAL is trans
14c20 66 65 72 72 65 64 20 69 6e 74 6f 20 74 68 65 20  ferred into the 
14c30 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 5e  database file..^
14c40 46 69 6e 61 6c 6c 79 2c 20 74 68 65 20 64 61 74  Finally, the dat
14c50 61 62 61 73 65 20 69 73 20 66 6c 75 73 68 65 64  abase is flushed
14c60 20 74 6f 20 70 65 72 73 69 73 74 65 6e 74 20 73   to persistent s
14c70 74 6f 72 61 67 65 20 75 73 69 6e 67 20 61 6e 6f  torage using ano
14c80 74 68 65 72 0a 78 53 79 6e 63 20 6d 65 74 68 6f  ther.xSync metho
14c90 64 20 63 61 6c 6c 2e 0a 54 68 65 20 78 53 79 6e  d call..The xSyn
14ca0 63 20 6f 70 65 72 61 74 69 6f 6e 73 20 73 65 72  c operations ser
14cb0 76 65 20 61 73 20 77 72 69 74 65 20 62 61 72 72  ve as write barr
14cc0 69 65 72 73 20 2d 20 61 6c 6c 20 77 72 69 74 65  iers - all write
14cd0 73 20 6c 61 75 6e 63 68 65 64 0a 62 65 66 6f 72  s launched.befor
14ce0 65 20 74 68 65 20 78 53 79 6e 63 20 6d 75 73 74  e the xSync must
14cf0 20 63 6f 6d 70 6c 65 74 65 20 62 65 66 6f 72 65   complete before
14d00 20 61 6e 79 20 77 72 69 74 65 20 74 68 61 74 20   any write that 
14d10 6c 61 75 6e 63 68 65 73 20 61 66 74 65 72 20 74  launches after t
14d20 68 65 0a 78 53 79 6e 63 20 62 65 67 69 6e 73 2e  he.xSync begins.
14d30 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 66 74 65 72 20  </p>..<p>^After 
14d40 61 20 63 68 65 63 6b 70 6f 69 6e 74 2c 20 6e 65  a checkpoint, ne
14d50 77 20 77 72 69 74 65 20 74 72 61 6e 73 61 63 74  w write transact
14d60 69 6f 6e 73 20 6f 76 65 72 77 72 69 74 65 0a 74  ions overwrite.t
14d70 68 65 20 57 41 4c 20 66 69 6c 65 20 66 72 6f 6d  he WAL file from
14d80 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 20   the beginning. 
14d90 20 5e 41 74 20 74 68 65 20 73 74 61 72 74 20 6f   ^At the start o
14da0 66 20 74 68 65 20 66 69 72 73 74 20 6e 65 77 0a  f the first new.
14db0 77 72 69 74 65 20 74 72 61 6e 73 61 63 74 69 6f  write transactio
14dc0 6e 2c 20 74 68 65 20 57 41 4c 20 68 65 61 64 65  n, the WAL heade
14dd0 72 20 73 61 6c 74 2d 31 20 76 61 6c 75 65 20 69  r salt-1 value i
14de0 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 0a 61 6e  s incremented.an
14df0 64 20 74 68 65 20 73 61 6c 74 2d 32 20 76 61 6c  d the salt-2 val
14e00 75 65 20 69 73 20 72 61 6e 64 6f 6d 69 7a 65 64  ue is randomized
14e10 2e 20 20 54 68 65 73 65 20 63 68 61 6e 67 65 73  .  These changes
14e20 20 74 6f 20 74 68 65 20 73 61 6c 74 73 20 69 6e   to the salts in
14e30 76 61 6c 69 64 61 74 65 0a 6f 6c 64 20 66 72 61  validate.old fra
14e40 6d 65 73 20 69 6e 20 74 68 65 20 57 41 4c 20 74  mes in the WAL t
14e50 68 61 74 20 68 61 76 65 20 61 6c 72 65 61 64 79  hat have already
14e60 20 62 65 65 6e 20 63 68 65 63 6b 70 6f 69 6e 74   been checkpoint
14e70 65 64 20 62 75 74 20 6e 6f 74 20 79 65 74 0a 6f  ed but not yet.o
14e80 76 65 72 77 72 69 74 74 65 6e 2c 20 61 6e 64 20  verwritten, and 
14e90 70 72 65 76 65 6e 74 20 74 68 65 6d 20 66 72 6f  prevent them fro
14ea0 6d 20 62 65 69 6e 67 20 63 68 65 63 6b 70 6f 69  m being checkpoi
14eb0 6e 74 65 64 20 61 67 61 69 6e 2e 3c 2f 70 3e 0a  nted again.</p>.
14ec0 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
14ed0 74 20 77 61 6c 72 65 61 64 20 7b 57 41 4c 20 72  t walread {WAL r
14ee0 65 61 64 20 61 6c 67 6f 72 69 74 68 6d 7d 3c 2f  ead algorithm}</
14ef0 74 63 6c 3e 0a 3c 68 32 3e 52 65 61 64 65 72 20  tcl>.<h2>Reader 
14f00 41 6c 67 6f 72 69 74 68 6d 3c 2f 68 32 3e 0a 0a  Algorithm</h2>..
14f10 3c 70 3e 5e 28 54 6f 20 72 65 61 64 20 61 20 70  <p>^(To read a p
14f20 61 67 65 20 66 72 6f 6d 20 74 68 65 20 64 61 74  age from the dat
14f30 61 62 61 73 65 20 28 63 61 6c 6c 20 69 74 20 70  abase (call it p
14f40 61 67 65 20 6e 75 6d 62 65 72 20 50 29 2c 20 61  age number P), a
14f50 20 72 65 61 64 65 72 0a 66 69 72 73 74 20 63 68   reader.first ch
14f60 65 63 6b 73 20 74 68 65 20 57 41 4c 20 74 6f 20  ecks the WAL to 
14f70 73 65 65 20 69 66 20 69 74 20 63 6f 6e 74 61 69  see if it contai
14f80 6e 73 20 70 61 67 65 20 50 2e 20 20 49 66 20 73  ns page P.  If s
14f90 6f 2c 20 74 68 65 6e 20 74 68 65 0a 6c 61 73 74  o, then the.last
14fa0 20 76 61 6c 69 64 20 69 6e 73 74 61 6e 63 65 20   valid instance 
14fb0 6f 66 20 70 61 67 65 20 50 20 74 68 61 74 20 69  of page P that i
14fc0 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20  s followed by a 
14fd0 63 6f 6d 6d 69 74 20 66 72 61 6d 65 0a 6f 72 20  commit frame.or 
14fe0 69 73 20 61 20 63 6f 6d 6d 69 74 20 66 72 61 6d  is a commit fram
14ff0 65 20 69 74 73 65 6c 66 20 62 65 63 6f 6d 65 73  e itself becomes
15000 20 74 68 65 20 76 61 6c 75 65 20 72 65 61 64 2e   the value read.
15010 29 5e 20 20 5e 49 66 20 74 68 65 20 57 41 4c 0a  )^  ^If the WAL.
15020 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 63 6f 70 69  contains no copi
15030 65 73 20 6f 66 20 70 61 67 65 20 50 20 74 68 61  es of page P tha
15040 74 20 61 72 65 20 76 61 6c 69 64 20 61 6e 64 20  t are valid and 
15050 77 68 69 63 68 20 61 72 65 20 61 20 63 6f 6d 6d  which are a comm
15060 69 74 0a 66 72 61 6d 65 20 6f 72 20 61 72 65 20  it.frame or are 
15070 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 63 6f  followed by a co
15080 6d 6d 69 74 20 66 72 61 6d 65 2c 20 74 68 65 6e  mmit frame, then
15090 20 70 61 67 65 20 50 20 69 73 20 72 65 61 64 20   page P is read 
150a0 66 72 6f 6d 0a 74 68 65 20 64 61 74 61 62 61 73  from.the databas
150b0 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e  e file.</p>..<p>
150c0 54 6f 20 73 74 61 72 74 20 61 20 72 65 61 64 20  To start a read 
150d0 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65  transaction, the
150e0 20 72 65 61 64 65 72 20 72 65 63 6f 72 64 73 20   reader records 
150f0 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65  the index of the
15100 20 6c 61 73 74 0a 76 61 6c 69 64 20 66 72 61 6d   last.valid fram
15110 65 20 69 6e 20 74 68 65 20 57 41 4c 2e 20 20 54  e in the WAL.  T
15120 68 65 20 72 65 61 64 65 72 20 75 73 65 73 20 74  he reader uses t
15130 68 69 73 20 72 65 63 6f 72 64 65 64 20 22 6d 78  his recorded "mx
15140 46 72 61 6d 65 22 20 76 61 6c 75 65 0a 66 6f 72  Frame" value.for
15150 20 61 6c 6c 20 73 75 62 73 65 71 75 65 6e 74 20   all subsequent 
15160 72 65 61 64 20 6f 70 65 72 61 74 69 6f 6e 73 2e  read operations.
15170 20 20 4e 65 77 20 74 72 61 6e 73 61 63 74 69 6f    New transactio
15180 6e 73 20 63 61 6e 20 62 65 20 61 70 70 65 6e 64  ns can be append
15190 65 64 0a 74 6f 20 74 68 65 20 57 41 4c 2c 20 62  ed.to the WAL, b
151a0 75 74 20 61 73 20 6c 6f 6e 67 20 61 73 20 74 68  ut as long as th
151b0 65 20 72 65 61 64 65 72 20 75 73 65 73 20 69 74  e reader uses it
151c0 73 20 6f 72 69 67 69 6e 61 6c 20 6d 78 46 72 61  s original mxFra
151d0 6d 65 20 76 61 6c 75 65 0a 61 6e 64 20 69 67 6e  me value.and ign
151e0 6f 72 65 73 20 73 75 62 73 65 71 75 65 6e 74 6c  ores subsequentl
151f0 79 20 61 70 70 65 6e 64 65 64 20 63 6f 6e 74 65  y appended conte
15200 6e 74 2c 20 74 68 65 20 72 65 61 64 65 72 20 77  nt, the reader w
15210 69 6c 6c 20 73 65 65 20 61 20 0a 63 6f 6e 73 69  ill see a .consi
15220 73 74 65 6e 74 20 73 6e 61 70 73 68 6f 74 20 6f  stent snapshot o
15230 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  f the database f
15240 72 6f 6d 20 61 20 73 69 6e 67 6c 65 20 70 6f 69  rom a single poi
15250 6e 74 20 69 6e 20 74 69 6d 65 2e 20 20 0a 5e 54  nt in time.  .^T
15260 68 69 73 20 74 65 63 68 6e 69 71 75 65 20 61 6c  his technique al
15270 6c 6f 77 73 20 6d 75 6c 74 69 70 6c 65 20 63 6f  lows multiple co
15280 6e 63 75 72 72 65 6e 74 20 72 65 61 64 65 72 73  ncurrent readers
15290 20 74 6f 20 76 69 65 77 20 64 69 66 66 65 72 65   to view differe
152a0 6e 74 20 0a 76 65 72 73 69 6f 6e 73 20 6f 66 20  nt .versions of 
152b0 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  the database con
152c0 74 65 6e 74 20 73 69 6d 75 6c 74 61 6e 65 6f 75  tent simultaneou
152d0 73 6c 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  sly.</p>..<p>The
152e0 20 72 65 61 64 65 72 20 61 6c 67 6f 72 69 74 68   reader algorith
152f0 6d 20 69 6e 20 74 68 65 20 70 72 65 76 69 6f 75  m in the previou
15300 73 20 70 61 72 61 67 72 61 70 68 73 20 77 6f 72  s paragraphs wor
15310 6b 73 20 63 6f 72 72 65 63 74 6c 79 2c 20 62 75  ks correctly, bu
15320 74 20 0a 62 65 63 61 75 73 65 20 66 72 61 6d 65  t .because frame
15330 73 20 66 6f 72 20 70 61 67 65 20 50 20 63 61 6e  s for page P can
15340 20 61 70 70 65 61 72 20 61 6e 79 77 68 65 72 65   appear anywhere
15350 20 77 69 74 68 69 6e 20 74 68 65 20 57 41 4c 2c   within the WAL,
15360 20 74 68 65 0a 72 65 61 64 65 72 20 68 61 73 20   the.reader has 
15370 74 6f 20 73 63 61 6e 20 74 68 65 20 65 6e 74 69  to scan the enti
15380 72 65 20 57 41 4c 20 6c 6f 6f 6b 69 6e 67 20 66  re WAL looking f
15390 6f 72 20 70 61 67 65 20 50 20 66 72 61 6d 65 73  or page P frames
153a0 2e 20 20 49 66 20 74 68 65 0a 57 41 4c 20 69 73  .  If the.WAL is
153b0 20 6c 61 72 67 65 20 28 6d 75 6c 74 69 70 6c 65   large (multiple
153c0 20 6d 65 67 61 62 79 74 65 73 20 69 73 20 74 79   megabytes is ty
153d0 70 69 63 61 6c 29 20 74 68 61 74 20 73 63 61 6e  pical) that scan
153e0 20 63 61 6e 20 62 65 20 73 6c 6f 77 2c 0a 61 6e   can be slow,.an
153f0 64 20 72 65 61 64 20 70 65 72 66 6f 72 6d 61 6e  d read performan
15400 63 65 20 73 75 66 66 65 72 73 2e 20 20 5e 54 6f  ce suffers.  ^To
15410 20 6f 76 65 72 63 6f 6d 65 20 74 68 69 73 20 70   overcome this p
15420 72 6f 62 6c 65 6d 2c 20 61 20 73 65 70 61 72 61  roblem, a separa
15430 74 65 0a 64 61 74 61 20 73 74 72 75 63 74 75 72  te.data structur
15440 65 20 63 61 6c 6c 65 64 20 74 68 65 20 77 61 6c  e called the wal
15450 2d 69 6e 64 65 78 20 69 73 20 6d 61 69 6e 74 61  -index is mainta
15460 69 6e 65 64 20 74 6f 20 65 78 70 65 64 69 74 65  ined to expedite
15470 20 74 68 65 0a 73 65 61 72 63 68 20 66 6f 72 20   the.search for 
15480 66 72 61 6d 65 73 20 6f 66 20 61 20 70 61 72 74  frames of a part
15490 69 63 75 6c 61 72 20 70 61 67 65 2e 3c 2f 70 3e  icular page.</p>
154a0 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
154b0 6e 74 20 77 61 6c 69 6e 64 65 78 66 6f 72 6d 61  nt walindexforma
154c0 74 20 7b 77 61 6c 2d 69 6e 64 65 78 7d 20 7b 57  t {wal-index} {W
154d0 41 4c 2d 69 6e 64 65 78 20 66 6f 72 6d 61 74 7d  AL-index format}
154e0 3c 2f 74 63 6c 3e 0a 3c 68 32 3e 57 41 4c 2d 49  </tcl>.<h2>WAL-I
154f0 6e 64 65 78 20 46 6f 72 6d 61 74 3c 2f 68 32 3e  ndex Format</h2>
15500 0a 0a 3c 70 3e 43 6f 6e 63 65 70 74 75 61 6c 6c  ..<p>Conceptuall
15510 79 2c 20 74 68 65 20 77 61 6c 2d 69 6e 64 65 78  y, the wal-index
15520 20 69 73 20 73 68 61 72 65 64 20 6d 65 6d 6f 72   is shared memor
15530 79 2c 20 74 68 6f 75 67 68 20 74 68 65 20 63 75  y, though the cu
15540 72 72 65 6e 74 0a 56 46 53 20 69 6d 70 6c 65 6d  rrent.VFS implem
15550 65 6e 74 61 74 69 6f 6e 73 20 75 73 65 20 61 20  entations use a 
15560 6d 6d 61 70 70 65 64 20 66 69 6c 65 20 66 6f 72  mmapped file for
15570 20 74 68 65 20 77 61 6c 2d 69 6e 64 65 78 2e 20   the wal-index. 
15580 20 5e 54 68 65 20 6d 6d 61 70 70 65 64 0a 66 69   ^The mmapped.fi
15590 6c 65 20 69 73 20 69 6e 20 74 68 65 20 73 61 6d  le is in the sam
155a0 65 20 64 69 72 65 63 74 6f 72 79 20 61 73 20 74  e directory as t
155b0 68 65 20 64 61 74 61 62 61 73 65 20 61 6e 64 20  he database and 
155c0 68 61 73 20 74 68 65 20 73 61 6d 65 20 6e 61 6d  has the same nam
155d0 65 0a 61 73 20 74 68 65 20 64 61 74 61 62 61 73  e.as the databas
155e0 65 20 77 69 74 68 20 61 20 22 3c 74 74 3e 2d 73  e with a "<tt>-s
155f0 68 6d 3c 2f 74 74 3e 22 20 73 75 66 66 69 78 20  hm</tt>" suffix 
15600 61 70 70 65 6e 64 65 64 2e 20 20 42 65 63 61 75  appended.  Becau
15610 73 65 0a 74 68 65 20 77 61 6c 2d 69 6e 64 65 78  se.the wal-index
15620 20 69 73 20 73 68 61 72 65 64 20 6d 65 6d 6f 72   is shared memor
15630 79 2c 20 53 51 4c 69 74 65 20 64 6f 65 73 20 6e  y, SQLite does n
15640 6f 74 20 73 75 70 70 6f 72 74 20 0a 5b 50 52 41  ot support .[PRA
15650 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65  GMA journal_mode
15660 20 7c 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 3d   | journal_mode=
15670 57 41 4c 5d 20 0a 6f 6e 20 61 20 6e 65 74 77 6f  WAL] .on a netwo
15680 72 6b 20 66 69 6c 65 73 79 73 74 65 6d 20 77 68  rk filesystem wh
15690 65 6e 20 63 6c 69 65 6e 74 73 20 61 72 65 20 6f  en clients are o
156a0 6e 20 64 69 66 66 65 72 65 6e 74 20 6d 61 63 68  n different mach
156b0 69 6e 65 73 2e 0a 41 6c 6c 20 75 73 65 72 73 20  ines..All users 
156c0 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
156d0 6d 75 73 74 20 62 65 20 61 62 6c 65 20 74 6f 20  must be able to 
156e0 73 68 61 72 65 20 74 68 65 20 73 61 6d 65 20 6d  share the same m
156f0 65 6d 6f 72 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54  emory.</p>..<p>T
15700 68 65 20 70 75 72 70 6f 73 65 20 6f 66 20 74 68  he purpose of th
15710 65 20 77 61 6c 2d 69 6e 64 65 78 20 69 73 20 74  e wal-index is t
15720 6f 20 61 6e 73 77 65 72 20 74 68 69 73 20 71 75  o answer this qu
15730 65 73 74 69 6f 6e 20 71 75 69 63 6b 6c 79 3a 3c  estion quickly:<
15740 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
15750 3e 3c 69 3e 0a 47 69 76 65 6e 20 61 20 70 61 67  ><i>.Given a pag
15760 65 20 6e 75 6d 62 65 72 20 50 20 61 6e 64 20 61  e number P and a
15770 20 6d 61 78 69 6d 75 6d 20 57 41 4c 20 66 72 61   maximum WAL fra
15780 6d 65 20 69 6e 64 65 78 20 4d 2c 0a 72 65 74 75  me index M,.retu
15790 72 6e 20 74 68 65 20 6c 61 72 67 65 73 74 20 57  rn the largest W
157a0 41 4c 20 66 72 61 6d 65 20 69 6e 64 65 78 20 66  AL frame index f
157b0 6f 72 20 70 61 67 65 20 50 20 74 68 61 74 20 64  or page P that d
157c0 6f 65 73 20 6e 6f 74 20 65 78 63 65 65 64 20 4d  oes not exceed M
157d0 2c 20 0a 6f 72 20 72 65 74 75 72 6e 20 4e 55 4c  , .or return NUL
157e0 4c 20 69 66 20 74 68 65 72 65 20 61 72 65 20 6e  L if there are n
157f0 6f 20 66 72 61 6d 65 73 20 66 6f 72 20 70 61 67  o frames for pag
15800 65 20 50 20 74 68 61 74 20 64 6f 20 6e 6f 74 20  e P that do not 
15810 65 78 63 65 65 64 20 4d 2e 0a 3c 2f 69 3e 3c 2f  exceed M..</i></
15820 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e  blockquote>..<p>
15830 54 68 65 20 3c 69 3e 4d 3c 2f 69 3e 20 76 61 6c  The <i>M</i> val
15840 75 65 20 69 6e 20 74 68 65 20 70 72 65 76 69 6f  ue in the previo
15850 75 73 20 70 61 72 61 67 72 61 70 68 20 69 73 20  us paragraph is 
15860 74 68 65 20 22 6d 78 46 72 61 6d 65 22 20 76 61  the "mxFrame" va
15870 6c 75 65 0a 64 65 66 69 6e 65 64 20 69 6e 20 5b  lue.defined in [
15880 57 41 4c 20 72 65 61 64 20 61 6c 67 6f 72 69 74  WAL read algorit
15890 68 6d 20 7c 20 73 65 63 74 69 6f 6e 20 34 2e 34  hm | section 4.4
158a0 5d 20 74 68 61 74 20 69 73 20 72 65 61 64 20 61  ] that is read a
158b0 74 20 74 68 65 20 73 74 61 72 74 20 0a 6f 66 20  t the start .of 
158c0 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6e  a transaction an
158d0 64 20 77 68 69 63 68 20 64 65 66 69 6e 65 73 20  d which defines 
158e0 74 68 65 20 6d 61 78 69 6d 75 6d 20 66 72 61 6d  the maximum fram
158f0 65 20 66 72 6f 6d 20 74 68 65 20 57 41 4c 20 74  e from the WAL t
15900 68 61 74 20 0a 74 68 65 20 72 65 61 64 65 72 20  hat .the reader 
15910 77 69 6c 6c 20 75 73 65 2e 3c 2f 70 3e 0a 0a 3c  will use.</p>..<
15920 70 3e 54 68 65 20 77 61 6c 2d 69 6e 64 65 78 20  p>The wal-index 
15930 69 73 20 74 72 61 6e 73 69 65 6e 74 2e 20 20 41  is transient.  A
15940 66 74 65 72 20 61 20 63 72 61 73 68 2c 20 74 68  fter a crash, th
15950 65 20 77 61 6c 2d 69 6e 64 65 78 20 69 73 0a 72  e wal-index is.r
15960 65 63 6f 6e 73 74 72 75 63 74 65 64 20 66 72 6f  econstructed fro
15970 6d 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 57  m the original W
15980 41 4c 20 66 69 6c 65 2e 20 20 5e 54 68 65 20 56  AL file.  ^The V
15990 46 53 20 69 73 20 72 65 71 75 69 72 65 64 0a 74  FS is required.t
159a0 6f 20 65 69 74 68 65 72 20 74 72 75 6e 63 61 74  o either truncat
159b0 65 20 6f 72 20 7a 65 72 6f 20 74 68 65 20 68 65  e or zero the he
159c0 61 64 65 72 20 6f 66 20 74 68 65 20 77 61 6c 2d  ader of the wal-
159d0 69 6e 64 65 78 20 77 68 65 6e 20 74 68 65 20 6c  index when the l
159e0 61 73 74 0a 63 6f 6e 6e 65 63 74 69 6f 6e 20 74  ast.connection t
159f0 6f 20 69 74 20 63 6c 6f 73 65 73 2e 20 20 42 65  o it closes.  Be
15a00 63 61 75 73 65 20 74 68 65 20 77 61 6c 2d 69 6e  cause the wal-in
15a10 64 65 78 20 69 73 20 74 72 61 6e 73 69 65 6e 74  dex is transient
15a20 2c 20 69 74 20 63 61 6e 0a 75 73 65 20 61 6e 20  , it can.use an 
15a30 61 72 63 68 69 74 65 63 74 75 72 65 2d 73 70 65  architecture-spe
15a40 63 69 66 69 63 20 66 6f 72 6d 61 74 3b 20 69 74  cific format; it
15a50 20 64 6f 65 73 20 6e 6f 74 20 68 61 76 65 20 74   does not have t
15a60 6f 20 62 65 20 63 72 6f 73 73 2d 70 6c 61 74 66  o be cross-platf
15a70 6f 72 6d 2e 0a 48 65 6e 63 65 2c 20 75 6e 6c 69  orm..Hence, unli
15a80 6b 65 20 74 68 65 20 64 61 74 61 62 61 73 65 20  ke the database 
15a90 61 6e 64 20 57 41 4c 20 66 69 6c 65 20 66 6f 72  and WAL file for
15aa0 6d 61 74 73 20 77 68 69 63 68 20 73 74 6f 72 65  mats which store
15ab0 20 61 6c 6c 20 76 61 6c 75 65 73 0a 61 73 20 62   all values.as b
15ac0 69 67 20 65 6e 64 69 61 6e 2c 20 74 68 65 20 77  ig endian, the w
15ad0 61 6c 2d 69 6e 64 65 78 20 73 74 6f 72 65 73 20  al-index stores 
15ae0 6d 75 6c 74 69 2d 62 79 74 65 20 76 61 6c 75 65  multi-byte value
15af0 73 20 69 6e 20 74 68 65 20 6e 61 74 69 76 65 0a  s in the native.
15b00 62 79 74 65 20 6f 72 64 65 72 20 6f 66 20 74 68  byte order of th
15b10 65 20 68 6f 73 74 20 63 6f 6d 70 75 74 65 72 2e  e host computer.
15b20 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 69 73 20 64 6f  </p>..<p>This do
15b30 63 75 6d 65 6e 74 20 69 73 20 63 6f 6e 63 65 72  cument is concer
15b40 6e 65 64 20 77 69 74 68 20 74 68 65 20 70 65 72  ned with the per
15b50 73 69 73 74 65 6e 74 20 73 74 61 74 65 20 6f 66  sistent state of
15b60 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 66 69   the database.fi
15b70 6c 65 2c 20 61 6e 64 20 73 69 6e 63 65 20 74 68  le, and since th
15b80 65 20 77 61 6c 2d 69 6e 64 65 78 20 69 73 20 61  e wal-index is a
15b90 20 74 72 61 6e 73 69 65 6e 74 20 73 74 72 75 63   transient struc
15ba0 74 75 72 65 2c 20 6e 6f 20 66 75 72 74 68 65 72  ture, no further
15bb0 20 0a 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62   .information ab
15bc0 6f 75 74 20 74 68 65 20 66 6f 72 6d 61 74 20 6f  out the format o
15bd0 66 20 74 68 65 20 77 61 6c 2d 69 6e 64 65 78 20  f the wal-index 
15be0 77 69 6c 6c 20 62 65 20 70 72 6f 76 69 64 65 64  will be provided
15bf0 20 68 65 72 65 2e 0a 43 6f 6d 70 6c 65 74 65 20   here..Complete 
15c00 64 65 74 61 69 6c 73 20 6f 6e 20 74 68 65 20 66  details on the f
15c10 6f 72 6d 61 74 20 6f 66 20 74 68 65 20 77 61 6c  ormat of the wal
15c20 2d 69 6e 64 65 78 20 61 72 65 20 63 6f 6e 74 61  -index are conta
15c30 69 6e 65 64 20 77 69 74 68 69 6e 0a 63 6f 6d 6d  ined within.comm
15c40 65 6e 74 73 20 69 6e 20 53 51 4c 69 74 65 20 73  ents in SQLite s
15c50 6f 75 72 63 65 20 63 6f 64 65 2e 3c 2f 70 3e 0a  ource code.</p>.