Documentation Source Text

Hex Artifact Content
Login

Artifact 68d36b1a6f8f591e8993c83cff75b3cf966caabd:


0000: 3c 74 69 74 6c 65 3e 46 69 6c 65 20 46 6f 72 6d  <title>File Form
0010: 61 74 20 46 6f 72 20 53 51 4c 69 74 65 20 44 61  at For SQLite Da
0020: 74 61 62 61 73 65 73 3c 2f 74 69 74 6c 65 3e 0a  tabases</title>.
0030: 3c 74 63 6c 3e 68 64 5f 6b 65 79 77 6f 72 64 73  <tcl>hd_keywords
0040: 20 7b 66 69 6c 65 20 66 6f 72 6d 61 74 7d 20 7b   {file format} {
0050: 73 65 63 6f 6e 64 20 65 64 69 74 69 6f 6e 20 66  second edition f
0060: 69 6c 65 20 66 6f 72 6d 61 74 20 64 6f 63 75 6d  ile format docum
0070: 65 6e 74 7d 3c 2f 74 63 6c 3e 0a 0a 3c 68 31 20  ent}</tcl>..<h1 
0080: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 0a 54 68  align=center>.Th
0090: 65 20 53 51 4c 69 74 65 20 44 61 74 61 62 61 73  e SQLite Databas
00a0: 65 20 46 69 6c 65 20 46 6f 72 6d 61 74 0a 3c 2f  e File Format.</
00b0: 68 31 3e 0a 0a 3c 70 3e 54 68 69 73 20 64 6f 63  h1>..<p>This doc
00c0: 75 6d 65 6e 74 20 64 65 73 63 72 69 62 65 73 20  ument describes 
00d0: 61 6e 64 20 64 65 66 69 6e 65 73 20 74 68 65 20  and defines the 
00e0: 6f 6e 2d 64 69 73 6b 20 64 61 74 61 62 61 73 65  on-disk database
00f0: 20 66 69 6c 65 0a 66 6f 72 6d 61 74 20 75 73 65   file.format use
0100: 64 20 62 79 20 53 51 4c 69 74 65 2e 3c 2f 70 3e  d by SQLite.</p>
0110: 0a 0a 3c 68 32 3e 31 2e 30 20 54 68 65 20 44 61  ..<h2>1.0 The Da
0120: 74 61 62 61 73 65 20 46 69 6c 65 3c 2f 68 32 3e  tabase File</h2>
0130: 0a 0a 3c 70 3e 54 68 65 20 63 6f 6d 70 6c 65 74  ..<p>The complet
0140: 65 20 73 74 61 74 65 20 6f 66 20 61 6e 20 53 51  e state of an SQ
0150: 4c 69 74 65 20 64 61 74 61 62 61 73 65 20 69 73  Lite database is
0160: 20 75 73 75 61 6c 6c 79 0a 63 6f 6e 74 61 69 6e   usually.contain
0170: 65 64 20 61 20 73 69 6e 67 6c 65 20 66 69 6c 65  ed a single file
0180: 20 6f 6e 20 64 69 73 6b 20 63 61 6c 6c 65 64 20   on disk called 
0190: 74 68 65 20 22 6d 61 69 6e 20 64 61 74 61 62 61  the "main databa
01a0: 73 65 20 66 69 6c 65 22 2e 3c 2f 70 3e 0a 0a 3c  se file".</p>..<
01b0: 70 3e 44 75 72 69 6e 67 20 61 20 74 72 61 6e 73  p>During a trans
01c0: 61 63 74 69 6f 6e 2c 20 53 51 4c 69 74 65 20 73  action, SQLite s
01d0: 74 6f 72 65 73 20 61 64 64 69 74 69 6f 6e 61 6c  tores additional
01e0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 0a 69 6e   information .in
01f0: 20 61 20 73 65 63 6f 6e 64 20 66 69 6c 65 20 63   a second file c
0200: 61 6c 6c 65 64 20 74 68 65 20 22 72 6f 6c 6c 62  alled the "rollb
0210: 61 63 6b 20 6a 6f 75 72 6e 61 6c 22 2c 20 6f 72  ack journal", or
0220: 20 69 66 20 53 51 4c 69 74 65 20 69 73 20 69 6e   if SQLite is in
0230: 0a 5b 57 41 4c 20 6d 6f 64 65 5d 2c 20 61 20 77  .[WAL mode], a w
0240: 72 69 74 65 2d 61 68 65 61 64 20 6c 6f 67 20 66  rite-ahead log f
0250: 69 6c 65 2e 0a 49 66 20 74 68 65 20 61 70 70 6c  ile..If the appl
0260: 69 63 61 74 69 6f 6e 20 6f 72 0a 68 6f 73 74 20  ication or.host 
0270: 63 6f 6d 70 75 74 65 72 20 63 72 61 73 68 65 73  computer crashes
0280: 20 62 65 66 6f 72 65 20 74 68 65 20 74 72 61 6e   before the tran
0290: 73 61 63 74 69 6f 6e 20 63 6f 6d 70 6c 65 74 65  saction complete
02a0: 73 2c 20 74 68 65 6e 20 74 68 65 20 72 6f 6c 6c  s, then the roll
02b0: 62 61 63 6b 0a 6a 6f 75 72 6e 61 6c 20 6f 72 20  back.journal or 
02c0: 77 72 69 74 65 2d 61 68 65 61 64 20 6c 6f 67 20  write-ahead log 
02d0: 63 6f 6e 74 61 69 6e 73 20 63 72 69 74 69 63 61  contains critica
02e0: 6c 20 73 74 61 74 65 20 69 6e 66 6f 72 6d 61 74  l state informat
02f0: 69 6f 6e 20 6e 65 65 64 65 64 20 0a 74 6f 20 72  ion needed .to r
0300: 65 73 74 6f 72 65 20 74 68 65 20 6d 61 69 6e 20  estore the main 
0310: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 74 6f  database file to
0320: 20 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 73 74   a consistent st
0330: 61 74 65 2e 20 20 57 68 65 6e 20 61 20 72 6f 6c  ate.  When a rol
0340: 6c 62 61 63 6b 20 0a 6a 6f 75 72 6e 61 6c 20 6f  lback .journal o
0350: 72 20 77 72 69 74 65 2d 61 68 65 61 64 20 6c 6f  r write-ahead lo
0360: 67 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72  g contains infor
0370: 6d 61 74 69 6f 6e 20 6e 65 63 65 73 73 61 72 79  mation necessary
0380: 20 66 6f 72 20 72 65 63 6f 76 65 72 69 6e 67 20   for recovering 
0390: 0a 74 68 65 20 73 74 61 74 65 20 6f 66 20 74 68  .the state of th
03a0: 65 20 64 61 74 61 62 61 73 65 2c 20 74 68 65 79  e database, they
03b0: 20 61 72 65 20 63 61 6c 6c 65 64 20 61 20 22 68   are called a "h
03c0: 6f 74 20 6a 6f 75 72 6e 61 6c 22 20 6f 72 20 22  ot journal" or "
03d0: 68 6f 74 20 57 41 4c 20 66 69 6c 65 22 2e 0a 48  hot WAL file"..H
03e0: 6f 74 20 6a 6f 75 72 6e 61 6c 73 20 61 6e 64 20  ot journals and 
03f0: 57 41 4c 20 66 69 6c 65 73 20 61 72 65 20 6f 6e  WAL files are on
0400: 6c 79 20 61 20 66 61 63 74 6f 72 20 64 75 72 69  ly a factor duri
0410: 6e 67 20 65 72 72 6f 72 20 72 65 63 6f 76 65 72  ng error recover
0420: 79 0a 73 63 65 6e 61 72 69 6f 73 20 61 6e 64 20  y.scenarios and 
0430: 73 6f 20 61 72 65 20 75 6e 63 6f 6d 6d 6f 6e 2c  so are uncommon,
0440: 20 62 75 74 20 74 68 65 79 20 61 72 65 20 70 61   but they are pa
0450: 72 74 20 6f 66 20 74 68 65 20 73 74 61 74 65 20  rt of the state 
0460: 6f 66 20 61 6e 20 53 51 4c 69 74 65 0a 64 61 74  of an SQLite.dat
0470: 61 62 61 73 65 20 61 6e 64 20 73 6f 20 63 61 6e  abase and so can
0480: 6e 6f 74 20 62 65 20 69 67 6e 6f 72 65 64 2e 20  not be ignored. 
0490: 20 54 68 69 73 20 64 6f 63 75 6d 65 6e 74 20 64   This document d
04a0: 65 66 69 6e 65 73 20 74 68 65 20 66 6f 72 6d 61  efines the forma
04b0: 74 0a 6f 66 20 61 20 72 6f 6c 6c 62 61 63 6b 20  t.of a rollback 
04c0: 6a 6f 75 72 6e 61 6c 20 61 6e 64 20 74 68 65 20  journal and the 
04d0: 77 72 69 74 65 2d 61 68 65 61 64 20 6c 6f 67 20  write-ahead log 
04e0: 66 69 6c 65 2c 20 62 75 74 20 74 68 65 20 66 6f  file, but the fo
04f0: 63 75 73 20 69 73 0a 6f 6e 20 74 68 65 20 6d 61  cus is.on the ma
0500: 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
0510: 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 31 2e 31 20 50  .</p>..<h3>1.1 P
0520: 61 67 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68  ages</h3>..<p>Th
0530: 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
0540: 66 69 6c 65 20 63 6f 6e 73 69 73 74 73 20 6f 66  file consists of
0550: 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 70 61 67   one or more pag
0560: 65 73 2e 20 20 5e 54 68 65 20 73 69 7a 65 20 6f  es.  ^The size o
0570: 66 20 61 0a 70 61 67 65 20 69 73 20 61 20 70 6f  f a.page is a po
0580: 77 65 72 20 6f 66 20 74 77 6f 20 62 65 74 77 65  wer of two betwe
0590: 65 6e 20 35 31 32 20 61 6e 64 20 36 35 35 33 36  en 512 and 65536
05a0: 20 69 6e 63 6c 75 73 69 76 65 2e 20 20 41 6c 6c   inclusive.  All
05b0: 20 70 61 67 65 73 20 77 69 74 68 69 6e 0a 74 68   pages within.th
05c0: 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65 20  e same database 
05d0: 61 72 65 20 74 68 65 20 73 61 6d 65 20 73 69 7a  are the same siz
05e0: 65 2e 20 20 5e 54 68 65 20 70 61 67 65 20 73 69  e.  ^The page si
05f0: 7a 65 20 66 6f 72 20 61 20 64 61 74 61 62 61 73  ze for a databas
0600: 65 20 66 69 6c 65 0a 69 73 20 64 65 74 65 72 6d  e file.is determ
0610: 69 6e 65 64 20 62 79 20 74 68 65 20 32 2d 62 79  ined by the 2-by
0620: 74 65 20 69 6e 74 65 67 65 72 20 6c 6f 63 61 74  te integer locat
0630: 65 64 20 61 74 20 61 6e 20 6f 66 66 73 65 74 20  ed at an offset 
0640: 6f 66 0a 31 36 20 62 79 74 65 73 20 66 72 6f 6d  of.16 bytes from
0650: 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f   the beginning o
0660: 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  f the database f
0670: 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 50 61 67  ile.</p>..<p>Pag
0680: 65 73 20 61 72 65 20 6e 75 6d 62 65 72 65 64 20  es are numbered 
0690: 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 31  beginning with 1
06a0: 2e 20 20 54 68 65 20 6d 61 78 69 6d 75 6d 20 70  .  The maximum p
06b0: 61 67 65 20 6e 75 6d 62 65 72 20 69 73 0a 32 31  age number is.21
06c0: 34 37 34 38 33 36 34 36 20 28 32 3c 73 75 70 3e  47483646 (2<sup>
06d0: 3c 73 6d 61 6c 6c 3e 33 31 3c 2f 73 6d 61 6c 6c  <small>31</small
06e0: 3e 3c 2f 73 75 70 3e 20 2d 20 32 29 2e 20 20 54  ></sup> - 2).  T
06f0: 68 65 20 6d 69 6e 69 6d 75 6d 20 73 69 7a 65 0a  he minimum size.
0700: 53 51 4c 69 74 65 20 64 61 74 61 62 61 73 65 20  SQLite database 
0710: 69 73 20 61 20 73 69 6e 67 6c 65 20 35 31 32 2d  is a single 512-
0720: 62 79 74 65 20 70 61 67 65 2e 0a 54 68 65 20 6d  byte page..The m
0730: 61 78 69 6d 75 6d 20 73 69 7a 65 20 64 61 74 61  aximum size data
0740: 62 61 73 65 20 77 6f 75 6c 64 20 62 65 20 32 31  base would be 21
0750: 34 37 34 38 33 36 34 36 20 70 61 67 65 73 20 61  47483646 pages a
0760: 74 20 36 35 35 33 36 20 62 79 74 65 73 20 70 65  t 65536 bytes pe
0770: 72 0a 70 61 67 65 20 6f 72 20 31 34 30 2c 37 33  r.page or 140,73
0780: 37 2c 34 38 38 2c 32 32 34 2c 32 35 36 20 62 79  7,488,224,256 by
0790: 74 65 73 20 28 61 62 6f 75 74 20 31 34 30 20 74  tes (about 140 t
07a0: 65 72 61 62 79 74 65 73 29 2e 20 20 55 73 75 61  erabytes).  Usua
07b0: 6c 6c 79 20 53 51 4c 69 74 65 20 77 69 6c 6c 0a  lly SQLite will.
07c0: 68 69 74 20 74 68 65 20 6d 61 78 69 6d 75 6d 20  hit the maximum 
07d0: 66 69 6c 65 20 73 69 7a 65 20 6c 69 6d 69 74 20  file size limit 
07e0: 6f 66 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e  of the underlyin
07f0: 67 20 66 69 6c 65 73 79 73 74 65 6d 20 6f 72 20  g filesystem or 
0800: 64 69 73 6b 0a 68 61 72 64 77 61 72 65 20 73 69  disk.hardware si
0810: 7a 65 20 6c 69 6d 69 74 20 6c 6f 6e 67 20 62 65  ze limit long be
0820: 66 6f 72 65 20 69 74 20 68 69 74 73 20 69 74 73  fore it hits its
0830: 20 6f 77 6e 20 69 6e 74 65 72 6e 61 6c 20 73 69   own internal si
0840: 7a 65 20 6c 69 6d 69 74 2e 3c 2f 70 3e 0a 0a 3c  ze limit.</p>..<
0850: 70 3e 49 6e 20 63 6f 6d 6d 6f 6e 20 75 73 65 2c  p>In common use,
0860: 20 53 51 4c 69 74 65 20 64 61 74 61 62 61 73 65   SQLite database
0870: 73 20 74 65 6e 64 20 74 6f 20 72 61 6e 67 65 20  s tend to range 
0880: 69 6e 20 73 69 7a 65 20 66 72 6f 6d 20 61 20 66  in size from a f
0890: 65 77 20 6b 69 6c 6f 62 79 74 65 73 0a 74 6f 20  ew kilobytes.to 
08a0: 61 20 66 65 77 20 67 69 67 61 62 79 74 65 73 2e  a few gigabytes.
08b0: 3c 2f 70 3e 0a 0a 3c 70 3e 41 74 20 61 6e 79 20  </p>..<p>At any 
08c0: 70 6f 69 6e 74 20 69 6e 20 74 69 6d 65 2c 20 65  point in time, e
08d0: 76 65 72 79 20 70 61 67 65 20 69 6e 20 74 68 65  very page in the
08e0: 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 68   main database h
08f0: 61 73 20 61 20 73 69 6e 67 6c 65 0a 75 73 65 20  as a single.use 
0900: 77 68 69 63 68 20 69 73 20 6f 6e 65 20 6f 66 20  which is one of 
0910: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 3a 0a 3c  the following:.<
0920: 75 6c 3e 0a 3c 6c 69 3e 54 68 65 20 6c 6f 63 6b  ul>.<li>The lock
0930: 2d 62 79 74 65 20 70 61 67 65 0a 3c 6c 69 3e 41  -byte page.<li>A
0940: 20 66 72 65 65 6c 69 73 74 20 70 61 67 65 0a 3c   freelist page.<
0950: 75 6c 3e 0a 3c 6c 69 3e 41 20 66 72 65 65 6c 69  ul>.<li>A freeli
0960: 73 74 20 74 72 75 6e 6b 20 70 61 67 65 0a 3c 6c  st trunk page.<l
0970: 69 3e 41 20 66 72 65 65 6c 69 73 74 20 6c 65 61  i>A freelist lea
0980: 66 20 70 61 67 65 0a 3c 2f 75 6c 3e 0a 3c 6c 69  f page.</ul>.<li
0990: 3e 41 20 62 2d 74 72 65 65 20 70 61 67 65 0a 3c  >A b-tree page.<
09a0: 75 6c 3e 0a 3c 6c 69 3e 41 20 74 61 62 6c 65 20  ul>.<li>A table 
09b0: 62 2d 74 72 65 65 20 69 6e 74 65 72 69 6f 72 20  b-tree interior 
09c0: 70 61 67 65 0a 3c 6c 69 3e 41 20 74 61 62 6c 65  page.<li>A table
09d0: 20 62 2d 74 72 65 65 20 6c 65 61 66 20 70 61 67   b-tree leaf pag
09e0: 65 0a 3c 6c 69 3e 41 6e 20 69 6e 64 65 78 20 62  e.<li>An index b
09f0: 2d 74 72 65 65 20 69 6e 74 65 72 69 6f 72 20 70  -tree interior p
0a00: 61 67 65 0a 3c 6c 69 3e 41 6e 20 69 6e 64 65 78  age.<li>An index
0a10: 20 62 2d 74 72 65 65 20 6c 65 61 66 20 70 61 67   b-tree leaf pag
0a20: 65 0a 3c 2f 75 6c 3e 0a 3c 6c 69 3e 41 20 70 61  e.</ul>.<li>A pa
0a30: 79 6c 6f 61 64 20 6f 76 65 72 66 6c 6f 77 20 70  yload overflow p
0a40: 61 67 65 0a 3c 6c 69 3e 41 20 70 6f 69 6e 74 65  age.<li>A pointe
0a50: 72 20 6d 61 70 20 70 61 67 65 0a 3c 2f 75 6c 3e  r map page.</ul>
0a60: 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 6c 6c 20 72  .</p>..<p>^All r
0a70: 65 61 64 73 20 66 72 6f 6d 20 61 6e 64 20 77 72  eads from and wr
0a80: 69 74 65 73 20 74 6f 20 74 68 65 20 6d 61 69 6e  ites to the main
0a90: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 62   database file b
0aa0: 65 67 69 6e 20 61 74 20 61 20 70 61 67 65 0a 62  egin at a page.b
0ab0: 6f 75 6e 64 61 72 79 20 61 6e 64 20 61 6c 6c 20  oundary and all 
0ac0: 77 72 69 74 65 73 20 61 72 65 20 61 6e 20 69 6e  writes are an in
0ad0: 74 65 67 65 72 20 6e 75 6d 62 65 72 20 6f 66 20  teger number of 
0ae0: 70 61 67 65 73 20 69 6e 20 73 69 7a 65 2e 20 20  pages in size.  
0af0: 5e 52 65 61 64 73 0a 61 72 65 20 61 6c 73 6f 20  ^Reads.are also 
0b00: 75 73 75 61 6c 6c 79 20 61 6e 20 69 6e 74 65 67  usually an integ
0b10: 65 72 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67  er number of pag
0b20: 65 73 20 69 6e 20 73 69 7a 65 2c 20 77 69 74 68  es in size, with
0b30: 20 74 68 65 20 6f 6e 65 20 65 78 63 65 70 74 69   the one excepti
0b40: 6f 6e 0a 74 68 61 74 20 77 68 65 6e 20 74 68 65  on.that when the
0b50: 20 64 61 74 61 62 61 73 65 20 69 73 20 66 69 72   database is fir
0b60: 73 74 20 6f 70 65 6e 65 64 2c 20 74 68 65 20 66  st opened, the f
0b70: 69 72 73 74 20 31 30 30 20 62 79 74 65 73 20 6f  irst 100 bytes o
0b80: 66 20 74 68 65 0a 64 61 74 61 62 61 73 65 20 66  f the.database f
0b90: 69 6c 65 20 28 74 68 65 20 64 61 74 61 62 61 73  ile (the databas
0ba0: 65 20 66 69 6c 65 20 68 65 61 64 65 72 29 20 61  e file header) a
0bb0: 72 65 20 72 65 61 64 20 61 73 20 61 20 73 75 62  re read as a sub
0bc0: 2d 70 61 67 65 20 73 69 7a 65 20 75 6e 69 74 2e  -page size unit.
0bd0: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 42 65 66 6f 72 65  </p>..<p>^Before
0be0: 20 61 6e 79 20 69 6e 66 6f 72 6d 61 74 69 6f 6e   any information
0bf0: 2d 62 65 61 72 69 6e 67 20 70 61 67 65 20 6f 66  -bearing page of
0c00: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73   the database is
0c10: 20 6d 6f 64 69 66 69 65 64 2c 20 0a 74 68 65 20   modified, .the 
0c20: 6f 72 69 67 69 6e 61 6c 20 75 6e 6d 6f 64 69 66  original unmodif
0c30: 69 65 64 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74  ied content of t
0c40: 68 61 74 20 70 61 67 65 20 69 73 20 77 72 69 74  hat page is writ
0c50: 74 65 6e 20 69 6e 74 6f 20 74 68 65 20 0a 72 6f  ten into the .ro
0c60: 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 2e 20  llback journal. 
0c70: 20 49 66 20 61 20 74 72 61 6e 73 61 63 74 69 6f   If a transactio
0c80: 6e 20 69 73 20 69 6e 74 65 72 72 75 70 74 65 64  n is interrupted
0c90: 20 61 6e 64 20 6e 65 65 64 73 20 74 6f 20 62 65   and needs to be
0ca0: 20 0a 72 6f 6c 6c 65 64 20 62 61 63 6b 2c 20 74   .rolled back, t
0cb0: 68 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72  he rollback jour
0cc0: 6e 61 6c 20 63 61 6e 20 74 68 65 6e 20 62 65 20  nal can then be 
0cd0: 75 73 65 64 20 74 6f 20 72 65 73 74 6f 72 65 20  used to restore 
0ce0: 74 68 65 0a 64 61 74 61 62 61 73 65 20 74 6f 20  the.database to 
0cf0: 69 74 73 20 6f 72 69 67 69 6e 61 6c 20 73 74 61  its original sta
0d00: 74 65 2e 20 20 5e 46 72 65 65 6c 69 73 74 20 6c  te.  ^Freelist l
0d10: 65 61 66 20 70 61 67 65 73 20 62 65 61 72 20 6e  eaf pages bear n
0d20: 6f 0a 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68  o.information th
0d30: 61 74 20 77 6f 75 6c 64 20 6e 65 65 64 20 74 6f  at would need to
0d40: 20 62 65 20 72 65 73 74 6f 72 65 64 20 6f 6e 20   be restored on 
0d50: 61 20 72 6f 6c 6c 62 61 63 6b 20 61 6e 64 20 73  a rollback and s
0d60: 6f 20 74 68 65 79 0a 61 72 65 20 6e 6f 74 20 77  o they.are not w
0d70: 72 69 74 74 65 6e 20 74 6f 20 74 68 65 20 6a 6f  ritten to the jo
0d80: 75 72 6e 61 6c 20 70 72 69 6f 72 20 74 6f 20 6d  urnal prior to m
0d90: 6f 64 69 66 69 63 61 74 69 6f 6e 2c 20 69 6e 20  odification, in 
0da0: 6f 72 64 65 72 20 74 6f 0a 72 65 64 75 63 65 20  order to.reduce 
0db0: 64 69 73 6b 20 49 2f 4f 2e 3c 2f 70 3e 0a 0a 3c  disk I/O.</p>..<
0dc0: 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
0dd0: 64 61 74 61 62 61 73 65 5f 68 65 61 64 65 72 20  database_header 
0de0: 7b 64 61 74 61 62 61 73 65 20 68 65 61 64 65 72  {database header
0df0: 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 31 2e 32 20  }</tcl>.<h3>1.2 
0e00: 54 68 65 20 44 61 74 61 62 61 73 65 20 48 65 61  The Database Hea
0e10: 64 65 72 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65  der</h3>..<p>The
0e20: 20 66 69 72 73 74 20 31 30 30 20 62 79 74 65 73   first 100 bytes
0e30: 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
0e40: 20 66 69 6c 65 20 63 6f 6d 70 72 69 73 65 20 74   file comprise t
0e50: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
0e60: 20 0a 68 65 61 64 65 72 2e 20 20 54 68 65 20 64   .header.  The d
0e70: 61 74 61 62 61 73 65 20 66 69 6c 65 20 68 65 61  atabase file hea
0e80: 64 65 72 20 69 73 20 64 69 76 69 64 65 64 20 69  der is divided i
0e90: 6e 74 6f 20 66 69 65 6c 64 73 20 61 73 20 73 68  nto fields as sh
0ea0: 6f 77 6e 20 62 79 0a 74 68 65 20 74 61 62 6c 65  own by.the table
0eb0: 20 62 65 6c 6f 77 2e 20 20 41 6c 6c 20 6d 75 6c   below.  All mul
0ec0: 74 69 62 79 74 65 20 66 69 65 6c 64 73 20 69 6e  tibyte fields in
0ed0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
0ee0: 6c 65 20 68 65 61 64 65 72 20 61 72 65 0a 73 74  le header are.st
0ef0: 6f 72 65 64 20 77 69 74 68 20 74 68 65 20 6d 6f  ored with the mo
0f00: 73 74 20 73 69 67 6e 69 66 69 63 61 6e 74 20 62  st significant b
0f10: 79 74 65 20 66 69 72 73 74 20 28 62 69 67 2d 65  yte first (big-e
0f20: 6e 64 69 61 6e 29 2e 3c 2f 70 3e 0a 0a 3c 63 65  ndian).</p>..<ce
0f30: 6e 74 65 72 3e 0a 3c 69 3e 44 61 74 61 62 61 73  nter>.<i>Databas
0f40: 65 20 48 65 61 64 65 72 20 46 6f 72 6d 61 74 3c  e Header Format<
0f50: 2f 69 3e 3c 62 72 3e 0a 3c 74 61 62 6c 65 20 77  /i><br>.<table w
0f60: 69 64 74 68 3d 22 38 30 25 22 20 62 6f 72 64 65  idth="80%" borde
0f70: 72 3d 31 3e 0a 3c 74 72 3e 3c 74 68 3e 4f 66 66  r=1>.<tr><th>Off
0f80: 73 65 74 3c 74 68 3e 53 69 7a 65 3c 74 68 3e 44  set<th>Size<th>D
0f90: 65 73 63 72 69 70 74 69 6f 6e 0a 3c 74 72 3e 3c  escription.<tr><
0fa0: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
0fb0: 69 67 6e 3d 63 65 6e 74 65 72 3e 30 3c 74 64 20  ign=center>0<td 
0fc0: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
0fd0: 3d 63 65 6e 74 65 72 3e 31 36 3c 74 64 20 61 6c  =center>16<td al
0fe0: 69 67 6e 3d 6c 65 66 74 3e 0a 54 68 65 20 68 65  ign=left>.The he
0ff0: 61 64 65 72 20 73 74 72 69 6e 67 3a 20 22 53 51  ader string: "SQ
1000: 4c 69 74 65 20 66 6f 72 6d 61 74 20 33 5c 30 30  Lite format 3\00
1010: 30 22 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  0".<tr><td valig
1020: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
1030: 65 72 3e 31 36 3c 74 64 20 76 61 6c 69 67 6e 3d  er>16<td valign=
1040: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
1050: 3e 32 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74  >2<td align=left
1060: 3e 0a 54 68 65 20 64 61 74 61 62 61 73 65 20 70  >.The database p
1070: 61 67 65 20 73 69 7a 65 20 69 6e 20 62 79 74 65  age size in byte
1080: 73 2e 20 20 4d 75 73 74 20 62 65 20 61 20 70 6f  s.  Must be a po
1090: 77 65 72 20 6f 66 20 74 77 6f 20 62 65 74 77 65  wer of two betwe
10a0: 65 6e 20 35 31 32 0a 61 6e 64 20 33 32 37 36 38  en 512.and 32768
10b0: 20 69 6e 63 6c 75 73 69 76 65 2c 20 6f 72 20 74   inclusive, or t
10c0: 68 65 20 76 61 6c 75 65 20 31 20 72 65 70 72 65  he value 1 repre
10d0: 73 65 6e 74 69 6e 67 20 61 20 70 61 67 65 20 73  senting a page s
10e0: 69 7a 65 20 6f 66 20 36 35 35 33 36 2e 0a 3c 74  ize of 65536..<t
10f0: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
1100: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 38   align=center>18
1110: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
1120: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 3c 74 64  lign=center>1<td
1130: 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 46 69 6c   align=left>.Fil
1140: 65 20 66 6f 72 6d 61 74 20 77 72 69 74 65 20 76  e format write v
1150: 65 72 73 69 6f 6e 2e 20 20 31 20 66 6f 72 20 6c  ersion.  1 for l
1160: 65 67 61 63 79 3b 20 32 20 66 6f 72 20 5b 57 41  egacy; 2 for [WA
1170: 4c 5d 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  L]..<tr><td vali
1180: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
1190: 74 65 72 3e 31 39 3c 74 64 20 76 61 6c 69 67 6e  ter>19<td valign
11a0: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
11b0: 72 3e 31 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66  r>1<td align=lef
11c0: 74 3e 0a 46 69 6c 65 20 66 6f 72 6d 61 74 20 72  t>.File format r
11d0: 65 61 64 20 76 65 72 73 69 6f 6e 2e 20 20 31 20  ead version.  1 
11e0: 66 6f 72 20 6c 65 67 61 63 79 3b 20 32 20 66 6f  for legacy; 2 fo
11f0: 72 20 5b 57 41 4c 5d 2e 0a 3c 74 72 3e 3c 74 64  r [WAL]..<tr><td
1200: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
1210: 6e 3d 63 65 6e 74 65 72 3e 32 30 3c 74 64 20 76  n=center>20<td v
1220: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
1230: 63 65 6e 74 65 72 3e 31 3c 74 64 20 61 6c 69 67  center>1<td alig
1240: 6e 3d 6c 65 66 74 3e 0a 42 79 74 65 73 20 6f 66  n=left>.Bytes of
1250: 20 75 6e 75 73 65 64 20 22 72 65 73 65 72 76 65   unused "reserve
1260: 64 22 20 73 70 61 63 65 20 61 74 20 74 68 65 20  d" space at the 
1270: 65 6e 64 20 6f 66 20 65 61 63 68 20 70 61 67 65  end of each page
1280: 2e 20 20 55 73 75 61 6c 6c 79 20 30 2e 0a 3c 74  .  Usually 0..<t
1290: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
12a0: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32 31   align=center>21
12b0: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
12c0: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 3c 74 64  lign=center>1<td
12d0: 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 4d 61 78   align=left>.Max
12e0: 69 6d 75 6d 20 65 6d 62 65 64 64 65 64 20 70 61  imum embedded pa
12f0: 79 6c 6f 61 64 20 66 72 61 63 74 69 6f 6e 2e 20  yload fraction. 
1300: 20 4d 75 73 74 20 62 65 20 36 34 2e 0a 3c 74 72   Must be 64..<tr
1310: 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
1320: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32 32 3c  align=center>22<
1330: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
1340: 69 67 6e 3d 63 65 6e 74 65 72 3e 31 3c 74 64 20  ign=center>1<td 
1350: 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 4d 69 6e 69  align=left>.Mini
1360: 6d 75 6d 20 65 6d 62 65 64 64 65 64 20 70 61 79  mum embedded pay
1370: 6c 6f 61 64 20 66 72 61 63 74 69 6f 6e 2e 20 20  load fraction.  
1380: 4d 75 73 74 20 62 65 20 33 32 2e 0a 3c 74 72 3e  Must be 32..<tr>
1390: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
13a0: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32 33 3c 74  lign=center>23<t
13b0: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
13c0: 67 6e 3d 63 65 6e 74 65 72 3e 31 3c 74 64 20 61  gn=center>1<td a
13d0: 6c 69 67 6e 3d 6c 65 66 74 3e 0a 4c 65 61 66 20  lign=left>.Leaf 
13e0: 70 61 79 6c 6f 61 64 20 66 72 61 63 74 69 6f 6e  payload fraction
13f0: 2e 20 20 4d 75 73 74 20 62 65 20 33 32 2e 0a 3c  .  Must be 32..<
1400: 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
1410: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32  p align=center>2
1420: 34 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  4<td valign=top 
1430: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 3c 74  align=center>4<t
1440: 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 46 69  d align=left>.Fi
1450: 6c 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65  le change counte
1460: 72 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  r..<tr><td valig
1470: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
1480: 65 72 3e 32 38 3c 74 64 20 76 61 6c 69 67 6e 3d  er>28<td valign=
1490: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
14a0: 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74  >4<td align=left
14b0: 3e 0a 53 69 7a 65 20 6f 66 20 74 68 65 20 64 61  >.Size of the da
14c0: 74 61 62 61 73 65 20 66 69 6c 65 20 69 6e 20 70  tabase file in p
14d0: 61 67 65 73 2e 20 20 54 68 65 20 22 69 6e 2d 68  ages.  The "in-h
14e0: 65 61 64 65 72 20 64 61 74 61 62 61 73 65 20 73  eader database s
14f0: 69 7a 65 22 2e 0a 3c 74 72 3e 3c 74 64 20 76 61  ize"..<tr><td va
1500: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
1510: 65 6e 74 65 72 3e 33 32 3c 74 64 20 76 61 6c 69  enter>32<td vali
1520: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
1530: 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c  ter>4<td align=l
1540: 65 66 74 3e 0a 50 61 67 65 20 6e 75 6d 62 65 72  eft>.Page number
1550: 20 6f 66 20 74 68 65 20 66 69 72 73 74 20 66 72   of the first fr
1560: 65 65 6c 69 73 74 20 74 72 75 6e 6b 20 70 61 67  eelist trunk pag
1570: 65 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  e..<tr><td valig
1580: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
1590: 65 72 3e 33 36 3c 74 64 20 76 61 6c 69 67 6e 3d  er>36<td valign=
15a0: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
15b0: 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74  >4<td align=left
15c0: 3e 0a 54 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f  >.Total number o
15d0: 66 20 66 72 65 65 6c 69 73 74 20 70 61 67 65 73  f freelist pages
15e0: 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  ..<tr><td valign
15f0: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
1600: 72 3e 34 30 3c 74 64 20 76 61 6c 69 67 6e 3d 74  r>40<td valign=t
1610: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
1620: 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e  4<td align=left>
1630: 0a 54 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b  .The schema cook
1640: 69 65 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  ie..<tr><td vali
1650: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
1660: 74 65 72 3e 34 34 3c 74 64 20 76 61 6c 69 67 6e  ter>44<td valign
1670: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
1680: 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66  r>4<td align=lef
1690: 74 3e 0a 54 68 65 20 73 63 68 65 6d 61 20 66 6f  t>.The schema fo
16a0: 72 6d 61 74 20 6e 75 6d 62 65 72 2e 20 20 53 75  rmat number.  Su
16b0: 70 70 6f 72 74 65 64 20 73 63 68 65 6d 61 20 66  pported schema f
16c0: 6f 72 6d 61 74 73 20 61 72 65 20 31 2c 20 32 2c  ormats are 1, 2,
16d0: 20 33 2c 20 61 6e 64 20 34 2e 0a 3c 74 72 3e 3c   3, and 4..<tr><
16e0: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
16f0: 69 67 6e 3d 63 65 6e 74 65 72 3e 34 38 3c 74 64  ign=center>48<td
1700: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
1710: 6e 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c  n=center>4<td al
1720: 69 67 6e 3d 6c 65 66 74 3e 0a 44 65 66 61 75 6c  ign=left>.Defaul
1730: 74 20 70 61 67 65 20 63 61 63 68 65 20 73 69 7a  t page cache siz
1740: 65 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  e..<tr><td valig
1750: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
1760: 65 72 3e 35 32 3c 74 64 20 76 61 6c 69 67 6e 3d  er>52<td valign=
1770: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
1780: 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74  >4<td align=left
1790: 3e 0a 54 68 65 20 70 61 67 65 20 6e 75 6d 62 65  >.The page numbe
17a0: 72 20 6f 66 20 74 68 65 20 6c 61 72 67 65 73 74  r of the largest
17b0: 20 72 6f 6f 74 20 62 2d 74 72 65 65 20 70 61 67   root b-tree pag
17c0: 65 20 77 68 65 6e 20 69 6e 20 61 75 74 6f 2d 76  e when in auto-v
17d0: 61 63 75 75 6d 20 6f 72 0a 69 6e 63 72 65 6d 65  acuum or.increme
17e0: 6e 74 61 6c 2d 76 61 63 75 75 6d 20 6d 6f 64 65  ntal-vacuum mode
17f0: 73 2c 20 6f 72 20 7a 65 72 6f 20 6f 74 68 65 72  s, or zero other
1800: 77 69 73 65 2e 0a 3c 74 72 3e 3c 74 64 20 76 61  wise..<tr><td va
1810: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
1820: 65 6e 74 65 72 3e 35 36 3c 74 64 20 76 61 6c 69  enter>56<td vali
1830: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
1840: 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c  ter>4<td align=l
1850: 65 66 74 3e 0a 54 68 65 20 64 61 74 61 62 61 73  eft>.The databas
1860: 65 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 2e  e text encoding.
1870: 20 20 41 20 76 61 6c 75 65 20 6f 66 20 31 20 6d    A value of 1 m
1880: 65 61 6e 73 20 55 54 46 2d 38 2e 20 20 41 20 76  eans UTF-8.  A v
1890: 61 6c 75 65 20 6f 66 20 32 0a 6d 65 61 6e 73 20  alue of 2.means 
18a0: 55 54 46 2d 31 36 6c 65 2e 20 20 41 20 76 61 6c  UTF-16le.  A val
18b0: 75 65 20 6f 66 20 33 20 6d 65 61 6e 73 20 55 54  ue of 3 means UT
18c0: 46 2d 31 36 62 65 2e 0a 3c 74 72 3e 3c 74 64 20  F-16be..<tr><td 
18d0: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
18e0: 3d 63 65 6e 74 65 72 3e 36 30 3c 74 64 20 76 61  =center>60<td va
18f0: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
1900: 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e  enter>4<td align
1910: 3d 6c 65 66 74 3e 0a 54 68 65 20 22 75 73 65 72  =left>.The "user
1920: 20 76 65 72 73 69 6f 6e 22 20 61 73 20 72 65 61   version" as rea
1930: 64 20 61 6e 64 20 73 65 74 20 62 79 20 74 68 65  d and set by the
1940: 20 5b 75 73 65 72 5f 76 65 72 73 69 6f 6e 20 70   [user_version p
1950: 72 61 67 6d 61 5d 2e 0a 3c 74 72 3e 3c 74 64 20  ragma]..<tr><td 
1960: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
1970: 3d 63 65 6e 74 65 72 3e 36 34 3c 74 64 20 76 61  =center>64<td va
1980: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
1990: 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e  enter>4<td align
19a0: 3d 6c 65 66 74 3e 0a 54 72 75 65 20 28 6e 6f 6e  =left>.True (non
19b0: 2d 7a 65 72 6f 29 20 66 6f 72 20 69 6e 63 72 65  -zero) for incre
19c0: 6d 65 6e 74 61 6c 2d 76 61 63 75 75 6d 20 6d 6f  mental-vacuum mo
19d0: 64 65 2e 20 20 46 61 6c 73 65 20 28 7a 65 72 6f  de.  False (zero
19e0: 29 20 6f 74 68 65 72 77 69 73 65 2e 0a 3c 74 72  ) otherwise..<tr
19f0: 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
1a00: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 36 38 3c  align=center>68<
1a10: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
1a20: 69 67 6e 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20  ign=center>4<td 
1a30: 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 54 68 65 20  align=left>.The 
1a40: 22 41 70 70 6c 69 63 61 74 69 6f 6e 20 49 44 22  "Application ID"
1a50: 20 73 65 74 20 62 79 20 5b 50 52 41 47 4d 41 20   set by [PRAGMA 
1a60: 61 70 70 6c 69 63 61 74 69 6f 6e 5f 69 64 5d 2e  application_id].
1a70: 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d  .<tr><td valign=
1a80: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
1a90: 3e 37 32 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  >72<td valign=to
1aa0: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32  p align=center>2
1ab0: 30 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e  0<td align=left>
1ac0: 0a 52 65 73 65 72 76 65 64 20 66 6f 72 20 65 78  .Reserved for ex
1ad0: 70 61 6e 73 69 6f 6e 2e 20 20 4d 75 73 74 20 62  pansion.  Must b
1ae0: 65 20 7a 65 72 6f 2e 0a 3c 74 72 3e 3c 74 64 20  e zero..<tr><td 
1af0: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
1b00: 3d 63 65 6e 74 65 72 3e 39 32 3c 74 64 20 76 61  =center>92<td va
1b10: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
1b20: 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e  enter>4<td align
1b30: 3d 6c 65 66 74 3e 0a 54 68 65 20 5b 76 65 72 73  =left>.The [vers
1b40: 69 6f 6e 2d 76 61 6c 69 64 2d 66 6f 72 20 6e 75  ion-valid-for nu
1b50: 6d 62 65 72 5d 2e 0a 3c 74 72 3e 3c 74 64 20 76  mber]..<tr><td v
1b60: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
1b70: 63 65 6e 74 65 72 3e 39 36 3c 74 64 20 76 61 6c  center>96<td val
1b80: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
1b90: 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d  nter>4<td align=
1ba0: 6c 65 66 74 3e 0a 5b 53 51 4c 49 54 45 5f 56 45  left>.[SQLITE_VE
1bb0: 52 53 49 4f 4e 5f 4e 55 4d 42 45 52 5d 0a 3c 2f  RSION_NUMBER].</
1bc0: 74 61 62 6c 65 3e 3c 2f 63 65 6e 74 65 72 3e 0a  table></center>.
1bd0: 0a 3c 68 34 3e 31 2e 32 2e 31 20 4d 61 67 69 63  .<h4>1.2.1 Magic
1be0: 20 48 65 61 64 65 72 20 53 74 72 69 6e 67 3c 2f   Header String</
1bf0: 68 34 3e 0a 0a 3c 70 3e 5e 45 76 65 72 79 20 76  h4>..<p>^Every v
1c00: 61 6c 69 64 20 53 51 4c 69 74 65 20 64 61 74 61  alid SQLite data
1c10: 62 61 73 65 20 66 69 6c 65 20 62 65 67 69 6e 73  base file begins
1c20: 20 77 69 74 68 20 74 68 65 20 66 6f 6c 6c 6f 77   with the follow
1c30: 69 6e 67 20 31 36 20 62 79 74 65 73 20 0a 28 69  ing 16 bytes .(i
1c40: 6e 20 68 65 78 29 3a 20 35 33 20 35 31 20 34 63  n hex): 53 51 4c
1c50: 20 36 39 20 37 34 20 36 35 20 32 30 20 36 36 20   69 74 65 20 66 
1c60: 36 66 20 37 32 20 36 64 20 36 31 20 37 34 20 32  6f 72 6d 61 74 2
1c70: 30 20 33 33 20 30 30 2e 20 20 54 68 69 73 20 62  0 33 00.  This b
1c80: 79 74 65 20 73 65 71 75 65 6e 63 65 0a 63 6f 72  yte sequence.cor
1c90: 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20  responds to the 
1ca0: 55 54 46 2d 38 20 73 74 72 69 6e 67 20 22 53 51  UTF-8 string "SQ
1cb0: 4c 69 74 65 20 66 6f 72 6d 61 74 20 33 22 20 69  Lite format 3" i
1cc0: 6e 63 6c 75 64 69 6e 67 20 74 68 65 20 6e 75 6c  ncluding the nul
1cd0: 0a 74 65 72 6d 69 6e 61 74 6f 72 20 63 68 61 72  .terminator char
1ce0: 61 63 74 65 72 20 61 74 20 74 68 65 20 65 6e 64  acter at the end
1cf0: 2e 3c 2f 70 3e 0a 0a 3c 68 34 3e 31 2e 32 2e 32  .</p>..<h4>1.2.2
1d00: 20 50 61 67 65 20 53 69 7a 65 3c 2f 68 34 3e 0a   Page Size</h4>.
1d10: 0a 3c 70 3e 54 68 65 20 74 77 6f 2d 62 79 74 65  .<p>The two-byte
1d20: 20 76 61 6c 75 65 20 62 65 67 69 6e 6e 69 6e 67   value beginning
1d30: 20 61 74 20 6f 66 66 73 65 74 20 31 36 20 64 65   at offset 16 de
1d40: 74 65 72 6d 69 6e 65 73 20 74 68 65 20 70 61 67  termines the pag
1d50: 65 20 73 69 7a 65 20 6f 66 20 0a 74 68 65 20 64  e size of .the d
1d60: 61 74 61 62 61 73 65 2e 20 20 46 6f 72 20 53 51  atabase.  For SQ
1d70: 4c 69 74 65 20 76 65 72 73 69 6f 6e 73 20 33 2e  Lite versions 3.
1d80: 37 2e 30 2e 31 20 61 6e 64 20 65 61 72 6c 69 65  7.0.1 and earlie
1d90: 72 2c 20 74 68 69 73 20 76 61 6c 75 65 20 69 73  r, this value is
1da0: 20 0a 69 6e 74 65 72 70 72 65 74 65 64 20 61 73   .interpreted as
1db0: 20 61 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e   a big-endian in
1dc0: 74 65 67 65 72 20 61 6e 64 20 6d 75 73 74 20 62  teger and must b
1dd0: 65 20 61 20 70 6f 77 65 72 20 6f 66 20 74 77 6f  e a power of two
1de0: 20 62 65 74 77 65 65 6e 0a 35 31 32 20 61 6e 64   between.512 and
1df0: 20 33 32 37 36 38 2c 20 69 6e 63 6c 75 73 69 76   32768, inclusiv
1e00: 65 2e 20 20 42 65 67 69 6e 6e 69 6e 67 20 77 69  e.  Beginning wi
1e10: 74 68 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f  th SQLite versio
1e20: 6e 20 33 2e 37 2e 31 2c 20 61 20 70 61 67 65 0a  n 3.7.1, a page.
1e30: 73 69 7a 65 20 6f 66 20 36 35 35 33 36 20 62 79  size of 65536 by
1e40: 74 65 73 20 69 73 20 73 75 70 70 6f 72 74 65 64  tes is supported
1e50: 2e 20 20 54 68 65 20 76 61 6c 75 65 20 36 35 35  .  The value 655
1e60: 33 36 20 77 69 6c 6c 20 6e 6f 74 20 66 69 74 20  36 will not fit 
1e70: 69 6e 20 61 0a 74 77 6f 2d 62 79 74 65 20 69 6e  in a.two-byte in
1e80: 74 65 67 65 72 2c 20 73 6f 20 74 6f 20 73 70 65  teger, so to spe
1e90: 63 69 66 79 20 61 20 36 35 35 33 36 2d 62 79 74  cify a 65536-byt
1ea0: 65 20 70 61 67 65 20 73 69 7a 65 2c 20 74 68 65  e page size, the
1eb0: 20 76 61 6c 75 65 20 69 73 0a 61 74 20 6f 66 66   value is.at off
1ec0: 73 65 74 20 31 36 20 69 73 20 30 78 30 30 20 30  set 16 is 0x00 0
1ed0: 78 30 31 2e 0a 54 68 69 73 20 76 61 6c 75 65 20  x01..This value 
1ee0: 63 61 6e 20 62 65 20 69 6e 74 65 72 70 72 65 74  can be interpret
1ef0: 65 64 20 61 73 20 61 20 62 69 67 2d 65 6e 64 69  ed as a big-endi
1f00: 61 6e 0a 31 20 61 6e 64 20 74 68 6f 75 67 68 74  an.1 and thought
1f10: 20 6f 66 20 69 73 20 61 73 20 61 20 6d 61 67 69   of is as a magi
1f20: 63 20 6e 75 6d 62 65 72 20 74 6f 20 72 65 70 72  c number to repr
1f30: 65 73 65 6e 74 20 74 68 65 20 36 35 35 33 36 20  esent the 65536 
1f40: 70 61 67 65 20 73 69 7a 65 2e 0a 4f 72 20 6f 6e  page size..Or on
1f50: 65 20 63 61 6e 20 76 69 65 77 20 74 68 65 20 74  e can view the t
1f60: 77 6f 2d 62 79 74 65 20 66 69 65 6c 64 20 61 73  wo-byte field as
1f70: 20 61 20 6c 69 74 74 6c 65 20 65 6e 64 69 61 6e   a little endian
1f80: 20 6e 75 6d 62 65 72 20 61 6e 64 20 73 61 79 0a   number and say.
1f90: 74 68 61 74 20 69 74 20 72 65 70 72 65 73 65 6e  that it represen
1fa0: 74 73 20 74 68 65 20 70 61 67 65 20 73 69 7a 65  ts the page size
1fb0: 20 64 69 76 69 64 65 64 20 62 79 20 32 35 36 2e   divided by 256.
1fc0: 20 20 54 68 65 73 65 20 74 77 6f 20 0a 69 6e 74    These two .int
1fd0: 65 72 70 72 65 74 61 74 69 6f 6e 73 20 6f 66 20  erpretations of 
1fe0: 74 68 65 20 70 61 67 65 2d 73 69 7a 65 20 66 69  the page-size fi
1ff0: 65 6c 64 20 61 72 65 20 65 71 75 69 76 61 6c 65  eld are equivale
2000: 6e 74 2e 3c 2f 70 3e 0a 0a 3c 68 34 3e 31 2e 32  nt.</p>..<h4>1.2
2010: 2e 33 20 46 69 6c 65 20 66 6f 72 6d 61 74 20 76  .3 File format v
2020: 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 73 3c 2f  ersion numbers</
2030: 68 34 3e 0a 0a 3c 70 3e 54 68 65 20 66 69 6c 65  h4>..<p>The file
2040: 20 66 6f 72 6d 61 74 20 77 72 69 74 65 20 76 65   format write ve
2050: 72 73 69 6f 6e 20 61 6e 64 20 66 69 6c 65 20 66  rsion and file f
2060: 6f 72 6d 61 74 20 72 65 61 64 20 76 65 72 73 69  ormat read versi
2070: 6f 6e 20 61 74 20 6f 66 66 73 65 74 73 0a 31 38  on at offsets.18
2080: 20 61 6e 64 20 31 39 20 61 72 65 20 69 6e 74 65   and 19 are inte
2090: 6e 64 65 64 20 74 6f 20 61 6c 6c 6f 77 20 66 6f  nded to allow fo
20a0: 72 20 65 6e 68 61 6e 63 65 6d 65 6e 74 73 20 6f  r enhancements o
20b0: 66 20 74 68 65 20 66 69 6c 65 20 66 6f 72 6d 61  f the file forma
20c0: 74 0a 69 6e 20 66 75 74 75 72 65 20 76 65 72 73  t.in future vers
20d0: 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 2e 20  ions of SQLite. 
20e0: 20 49 6e 20 63 75 72 72 65 6e 74 20 76 65 72 73   In current vers
20f0: 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 2c 20  ions of SQLite, 
2100: 62 6f 74 68 20 6f 66 0a 74 68 65 73 65 20 76 61  both of.these va
2110: 6c 75 65 73 20 61 72 65 20 31 20 66 6f 72 20 72  lues are 1 for r
2120: 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 6c  ollback journall
2130: 69 6e 67 20 6d 6f 64 65 73 20 61 6e 64 20 32 20  ing modes and 2 
2140: 66 6f 72 20 5b 57 41 4c 5d 0a 6a 6f 75 72 6e 61  for [WAL].journa
2150: 6c 6c 69 6e 67 20 6d 6f 64 65 2e 20 20 49 66 20  lling mode.  If 
2160: 61 20 76 65 72 73 69 6f 6e 20 6f 66 20 53 51 4c  a version of SQL
2170: 69 74 65 20 63 6f 64 65 64 20 74 6f 20 74 68 65  ite coded to the
2180: 20 63 75 72 72 65 6e 74 0a 66 69 6c 65 20 66 6f   current.file fo
2190: 72 6d 61 74 20 73 70 65 63 69 66 69 63 61 74 69  rmat specificati
21a0: 6f 6e 20 65 6e 63 6f 75 6e 74 65 72 73 20 61 20  on encounters a 
21b0: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 77 68  database file wh
21c0: 65 72 65 20 74 68 65 20 72 65 61 64 0a 76 65 72  ere the read.ver
21d0: 73 69 6f 6e 20 69 73 20 31 20 6f 72 20 32 20 62  sion is 1 or 2 b
21e0: 75 74 20 74 68 65 20 77 72 69 74 65 20 76 65 72  ut the write ver
21f0: 73 69 6f 6e 20 69 73 20 67 72 65 61 74 65 72 20  sion is greater 
2200: 74 68 61 6e 20 32 2c 20 74 68 65 6e 20 74 68 65  than 2, then the
2210: 20 64 61 74 61 62 61 73 65 0a 66 69 6c 65 20 6d   database.file m
2220: 75 73 74 20 62 65 20 74 72 65 61 74 65 64 20 61  ust be treated a
2230: 73 20 72 65 61 64 2d 6f 6e 6c 79 2e 20 20 49 66  s read-only.  If
2240: 20 61 20 64 61 74 61 62 61 73 65 20 66 69 6c 65   a database file
2250: 20 77 69 74 68 20 61 20 72 65 61 64 20 76 65 72   with a read ver
2260: 73 69 6f 6e 0a 67 72 65 61 74 65 72 20 74 68 61  sion.greater tha
2270: 6e 20 32 20 69 73 20 65 6e 63 6f 75 6e 74 65 72  n 2 is encounter
2280: 2c 20 74 68 65 6e 20 74 68 61 74 20 64 61 74 61  , then that data
2290: 62 61 73 65 20 63 61 6e 6e 6f 74 20 62 65 20 72  base cannot be r
22a0: 65 61 64 20 6f 72 20 77 72 69 74 74 65 6e 2e 3c  ead or written.<
22b0: 2f 70 3e 0a 0a 3c 68 34 3e 31 2e 32 2e 34 20 52  /p>..<h4>1.2.4 R
22c0: 65 73 65 72 76 65 64 20 62 79 74 65 73 20 70 65  eserved bytes pe
22d0: 72 20 70 61 67 65 3c 2f 68 34 3e 0a 0a 3c 70 3e  r page</h4>..<p>
22e0: 53 51 4c 69 74 65 20 68 61 73 20 74 68 65 20 61  SQLite has the a
22f0: 62 69 6c 69 74 79 20 74 6f 20 73 65 74 20 61 73  bility to set as
2300: 69 64 65 20 61 20 73 6d 61 6c 6c 20 6e 75 6d 62  ide a small numb
2310: 65 72 20 6f 66 20 65 78 74 72 61 20 62 79 74 65  er of extra byte
2320: 73 20 61 74 0a 74 68 65 20 65 6e 64 20 6f 66 20  s at.the end of 
2330: 65 76 65 72 79 20 70 61 67 65 20 66 6f 72 20 75  every page for u
2340: 73 65 20 62 79 20 65 78 74 65 6e 73 69 6f 6e 73  se by extensions
2350: 2e 20 20 54 68 65 73 65 20 65 78 74 72 61 20 62  .  These extra b
2360: 79 74 65 73 20 61 72 65 0a 75 73 65 64 2c 20 66  ytes are.used, f
2370: 6f 72 20 65 78 61 6d 70 6c 65 2c 20 62 79 20 74  or example, by t
2380: 68 65 20 53 51 4c 69 74 65 20 45 6e 63 72 79 70  he SQLite Encryp
2390: 74 69 6f 6e 20 45 78 74 65 6e 73 69 6f 6e 20 74  tion Extension t
23a0: 6f 20 73 74 6f 72 65 20 61 20 6e 6f 6e 63 65 0a  o store a nonce.
23b0: 61 6e 64 2f 6f 72 20 63 72 79 70 74 6f 67 72 61  and/or cryptogra
23c0: 70 68 69 63 20 63 68 65 63 6b 73 75 6d 20 61 73  phic checksum as
23d0: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 65 61  sociated with ea
23e0: 63 68 20 70 61 67 65 2e 20 20 5e 54 68 65 20 0a  ch page.  ^The .
23f0: 22 72 65 73 65 72 76 65 64 20 73 70 61 63 65 22  "reserved space"
2400: 20 73 69 7a 65 20 69 6e 20 74 68 65 20 31 2d 62   size in the 1-b
2410: 79 74 65 20 69 6e 74 65 67 65 72 20 61 74 20 6f  yte integer at o
2420: 66 66 73 65 74 20 32 30 20 69 73 20 74 68 65 20  ffset 20 is the 
2430: 6e 75 6d 62 65 72 0a 6f 66 20 62 79 74 65 73 20  number.of bytes 
2440: 6f 66 20 73 70 61 63 65 20 61 74 20 74 68 65 20  of space at the 
2450: 65 6e 64 20 6f 66 20 65 61 63 68 20 70 61 67 65  end of each page
2460: 20 74 6f 20 72 65 73 65 72 76 65 20 66 6f 72 20   to reserve for 
2470: 65 78 74 65 6e 73 69 6f 6e 73 2e 0a 54 68 69 73  extensions..This
2480: 20 76 61 6c 75 65 20 69 73 20 75 73 75 61 6c 6c   value is usuall
2490: 79 20 30 2e 20 20 54 68 65 20 76 61 6c 75 65 20  y 0.  The value 
24a0: 63 61 6e 20 62 65 20 6f 64 64 2e 3c 2f 70 3e 0a  can be odd.</p>.
24b0: 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
24c0: 74 20 75 73 61 62 6c 65 5f 73 69 7a 65 20 7b 75  t usable_size {u
24d0: 73 61 62 6c 65 20 73 69 7a 65 7d 3c 2f 74 63 6c  sable size}</tcl
24e0: 3e 0a 3c 70 3e 54 68 65 20 22 75 73 61 62 6c 65  >.<p>The "usable
24f0: 20 73 69 7a 65 22 20 6f 66 20 61 20 64 61 74 61   size" of a data
2500: 62 61 73 65 20 70 61 67 65 20 69 73 20 74 68 65  base page is the
2510: 20 70 61 67 65 20 73 69 7a 65 20 73 70 65 63 69   page size speci
2520: 66 79 20 62 79 20 74 68 65 0a 32 2d 62 79 74 65  fy by the.2-byte
2530: 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73   integer at offs
2540: 65 74 20 31 36 20 69 6e 20 74 68 65 20 68 65 61  et 16 in the hea
2550: 64 65 72 20 6c 65 73 73 20 74 68 65 20 22 72 65  der less the "re
2560: 73 65 72 76 65 64 22 20 73 70 61 63 65 20 73 69  served" space si
2570: 7a 65 0a 72 65 63 6f 72 64 65 64 20 69 6e 20 74  ze.recorded in t
2580: 68 65 20 31 2d 62 79 74 65 20 69 6e 74 65 67 65  he 1-byte intege
2590: 72 20 61 74 20 6f 66 66 73 65 74 20 32 30 20 69  r at offset 20 i
25a0: 6e 20 74 68 65 20 68 65 61 64 65 72 2e 20 20 54  n the header.  T
25b0: 68 65 20 75 73 61 62 6c 65 0a 73 69 7a 65 20 6f  he usable.size o
25c0: 66 20 61 20 70 61 67 65 20 6d 69 67 68 74 20 62  f a page might b
25d0: 65 20 61 6e 20 6f 64 64 20 6e 75 6d 62 65 72 2e  e an odd number.
25e0: 20 20 5e 28 48 6f 77 65 76 65 72 2c 20 74 68 65    ^(However, the
25f0: 20 75 73 61 62 6c 65 20 73 69 7a 65 20 69 73 20   usable size is 
2600: 6e 6f 74 0a 61 6c 6c 6f 77 65 64 20 74 6f 20 62  not.allowed to b
2610: 65 20 6c 65 73 73 20 74 68 61 6e 20 34 38 30 2e  e less than 480.
2620: 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
2630: 2c 20 69 66 20 74 68 65 20 70 61 67 65 20 73 69  , if the page si
2640: 7a 65 20 69 73 20 35 31 32 2c 0a 74 68 65 6e 20  ze is 512,.then 
2650: 74 68 65 20 72 65 73 65 72 76 65 64 20 73 70 61  the reserved spa
2660: 63 65 20 73 69 7a 65 20 63 61 6e 6e 6f 74 20 65  ce size cannot e
2670: 78 63 65 65 64 20 33 32 2e 29 5e 3c 2f 70 3e 0a  xceed 32.)^</p>.
2680: 0a 3c 68 34 3e 31 2e 32 2e 35 20 50 61 79 6c 6f  .<h4>1.2.5 Paylo
2690: 61 64 20 66 72 61 63 74 69 6f 6e 73 3c 2f 68 34  ad fractions</h4
26a0: 3e 0a 0a 3c 70 3e 5e 54 68 65 20 6d 61 78 69 6d  >..<p>^The maxim
26b0: 75 6d 20 61 6e 64 20 6d 69 6e 69 6d 75 6d 20 65  um and minimum e
26c0: 6d 62 65 64 64 65 64 20 70 61 79 6c 6f 61 64 20  mbedded payload 
26d0: 66 72 61 63 74 69 6f 6e 73 20 61 6e 64 20 74 68  fractions and th
26e0: 65 20 6c 65 61 66 0a 70 61 79 6c 6f 61 64 20 66  e leaf.payload f
26f0: 72 61 63 74 69 6f 6e 20 76 61 6c 75 65 73 20 6d  raction values m
2700: 75 73 74 20 62 65 20 36 34 2c 20 33 32 2c 20 61  ust be 64, 32, a
2710: 6e 64 20 33 32 2e 20 20 54 68 65 73 65 20 76 61  nd 32.  These va
2720: 6c 75 65 73 20 77 65 72 65 0a 6f 72 69 67 69 6e  lues were.origin
2730: 61 6c 6c 79 20 69 6e 74 65 6e 64 65 64 20 74 6f  ally intended to
2740: 20 61 73 20 74 75 6e 61 62 6c 65 20 70 61 72 61   as tunable para
2750: 6d 65 74 65 72 73 20 74 68 61 74 20 63 6f 75 6c  meters that coul
2760: 64 20 62 65 20 75 73 65 64 20 74 6f 0a 6d 6f 64  d be used to.mod
2770: 69 66 79 20 74 68 65 20 73 74 6f 72 61 67 65 20  ify the storage 
2780: 66 6f 72 6d 61 74 20 6f 66 20 74 68 65 20 62 2d  format of the b-
2790: 74 72 65 65 20 61 6c 67 6f 72 69 74 68 6d 2e 20  tree algorithm. 
27a0: 20 48 6f 77 65 76 65 72 2c 20 74 68 61 74 0a 66   However, that.f
27b0: 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73 20  unctionality is 
27c0: 6e 6f 74 20 73 75 70 70 6f 72 74 65 64 20 61 6e  not supported an
27d0: 64 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 63  d there are no c
27e0: 75 72 72 65 6e 74 20 70 6c 61 6e 73 20 74 6f 20  urrent plans to 
27f0: 61 64 64 0a 73 75 70 70 6f 72 74 20 69 6e 20 74  add.support in t
2800: 68 65 20 66 75 74 75 72 65 2e 20 20 48 65 6e 63  he future.  Henc
2810: 65 2c 20 74 68 65 73 65 20 74 68 72 65 65 20 62  e, these three b
2820: 79 74 65 73 20 61 72 65 20 66 69 78 65 64 20 61  ytes are fixed a
2830: 74 20 74 68 65 0a 76 61 6c 75 65 73 20 73 70 65  t the.values spe
2840: 63 69 66 69 65 64 2e 3c 2f 70 3e 0a 0a 3c 68 34  cified.</p>..<h4
2850: 3e 31 2e 32 2e 36 20 46 69 6c 65 20 63 68 61 6e  >1.2.6 File chan
2860: 67 65 20 63 6f 75 6e 74 65 72 3c 2f 68 34 3e 0a  ge counter</h4>.
2870: 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
2880: 74 20 63 68 6e 67 63 74 72 20 7b 63 68 61 6e 67  t chngctr {chang
2890: 65 20 63 6f 75 6e 74 65 72 7d 3c 2f 74 63 6c 3e  e counter}</tcl>
28a0: 0a 3c 70 3e 5e 54 68 65 20 66 69 6c 65 20 63 68  .<p>^The file ch
28b0: 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69 73 20  ange counter is 
28c0: 61 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64  a 4-byte big-end
28d0: 69 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69 63  ian integer whic
28e0: 68 20 69 73 0a 69 6e 63 72 65 6d 65 6e 74 65 64  h is.incremented
28f0: 20 77 68 65 6e 65 76 65 72 20 74 68 65 20 64 61   whenever the da
2900: 74 61 62 61 73 65 20 66 69 6c 65 20 69 73 20 75  tabase file is u
2910: 6e 6c 6f 63 6b 65 64 20 61 66 74 65 72 20 68 61  nlocked after ha
2920: 76 69 6e 67 0a 62 65 65 6e 20 6d 6f 64 69 66 69  ving.been modifi
2930: 65 64 2e 0a 57 68 65 6e 20 74 77 6f 20 6f 72 20  ed..When two or 
2940: 6d 6f 72 65 20 70 72 6f 63 65 73 73 65 73 20 61  more processes a
2950: 72 65 20 72 65 61 64 69 6e 67 20 74 68 65 20 73  re reading the s
2960: 61 6d 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  ame database fil
2970: 65 2c 20 65 61 63 68 20 0a 70 72 6f 63 65 73 73  e, each .process
2980: 20 63 61 6e 20 64 65 74 65 63 74 20 64 61 74 61   can detect data
2990: 62 61 73 65 20 63 68 61 6e 67 65 73 20 66 72 6f  base changes fro
29a0: 6d 20 6f 74 68 65 72 20 70 72 6f 63 65 73 73 65  m other processe
29b0: 73 20 62 79 20 6d 6f 6e 69 74 6f 72 69 6e 67 20  s by monitoring 
29c0: 0a 74 68 65 20 63 68 61 6e 67 65 20 63 6f 75 6e  .the change coun
29d0: 74 65 72 2e 0a 41 20 70 72 6f 63 65 73 73 20 77  ter..A process w
29e0: 69 6c 6c 20 6e 6f 72 6d 61 6c 6c 79 20 77 61 6e  ill normally wan
29f0: 74 20 74 6f 20 66 6c 75 73 68 20 69 74 73 20 64  t to flush its d
2a00: 61 74 61 62 61 73 65 20 70 61 67 65 20 63 61 63  atabase page cac
2a10: 68 65 20 77 68 65 6e 0a 61 6e 6f 74 68 65 72 20  he when.another 
2a20: 70 72 6f 63 65 73 73 20 6d 6f 64 69 66 69 65 64  process modified
2a30: 20 74 68 65 20 64 61 74 61 62 61 73 65 2c 20 73   the database, s
2a40: 69 6e 63 65 20 74 68 65 20 63 61 63 68 65 20 68  ince the cache h
2a50: 61 73 20 62 65 63 6f 6d 65 20 73 74 61 6c 65 2e  as become stale.
2a60: 0a 54 68 65 20 66 69 6c 65 20 63 68 61 6e 67 65  .The file change
2a70: 20 63 6f 75 6e 74 65 72 20 66 61 63 69 6c 69 74   counter facilit
2a80: 61 74 65 73 20 74 68 69 73 2e 3c 2f 70 3e 0a 0a  ates this.</p>..
2a90: 3c 70 3e 49 6e 20 57 41 4c 20 6d 6f 64 65 2c 20  <p>In WAL mode, 
2aa0: 63 68 61 6e 67 65 73 20 74 6f 20 74 68 65 20 64  changes to the d
2ab0: 61 74 61 62 61 73 65 20 61 72 65 20 64 65 74 65  atabase are dete
2ac0: 63 74 65 64 20 75 73 69 6e 67 20 74 68 65 20 77  cted using the w
2ad0: 61 6c 2d 69 6e 64 65 78 0a 61 6e 64 20 73 6f 20  al-index.and so 
2ae0: 74 68 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74  the change count
2af0: 65 72 20 69 73 20 6e 6f 74 20 6e 65 65 64 65 64  er is not needed
2b00: 2e 20 20 48 65 6e 63 65 2c 20 74 68 65 20 63 68  .  Hence, the ch
2b10: 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 6d 69 67  ange counter mig
2b20: 68 74 0a 6e 6f 74 20 62 65 20 69 6e 63 72 65 6d  ht.not be increm
2b30: 65 6e 74 65 64 20 6f 6e 20 65 61 63 68 20 74 72  ented on each tr
2b40: 61 6e 73 61 63 74 69 6f 6e 20 69 6e 20 57 41 4c  ansaction in WAL
2b50: 20 6d 6f 64 65 2e 3c 2f 70 3e 0a 0a 3c 68 34 3e   mode.</p>..<h4>
2b60: 31 2e 32 2e 37 20 49 6e 2d 68 65 61 64 65 72 20  1.2.7 In-header 
2b70: 64 61 74 61 62 61 73 65 20 73 69 7a 65 3c 2f 68  database size</h
2b80: 34 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  4>..<tcl>hd_frag
2b90: 6d 65 6e 74 20 66 69 6c 65 73 69 7a 65 20 7b 69  ment filesize {i
2ba0: 6e 2d 68 65 61 64 65 72 20 64 61 74 61 62 61 73  n-header databas
2bb0: 65 20 73 69 7a 65 7d 3c 2f 74 63 6c 3e 0a 3c 70  e size}</tcl>.<p
2bc0: 3e 5e 54 68 65 20 34 2d 62 79 74 65 20 62 69 67  >^The 4-byte big
2bd0: 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20  -endian integer 
2be0: 61 74 20 6f 66 66 73 65 74 20 32 38 20 69 6e 74  at offset 28 int
2bf0: 6f 20 74 68 65 20 68 65 61 64 65 72 20 0a 73 74  o the header .st
2c00: 6f 72 65 73 20 74 68 65 20 73 69 7a 65 20 6f 66  ores the size of
2c10: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
2c20: 6c 65 20 69 6e 20 70 61 67 65 73 2e 20 20 5e 49  le in pages.  ^I
2c30: 66 20 74 68 69 73 20 69 6e 2d 68 65 61 64 65 72  f this in-header
2c40: 0a 64 61 74 61 73 69 7a 65 20 73 69 7a 65 20 69  .datasize size i
2c50: 73 20 6e 6f 74 20 76 61 6c 69 64 20 28 73 65 65  s not valid (see
2c60: 20 74 68 65 20 6e 65 78 74 20 70 61 72 61 67 72   the next paragr
2c70: 61 70 68 29 2c 20 74 68 65 6e 20 74 68 65 20 64  aph), then the d
2c80: 61 74 61 62 61 73 65 20 0a 73 69 7a 65 20 69 73  atabase .size is
2c90: 20 63 6f 6d 70 75 74 65 64 20 62 79 20 6c 6f 6f   computed by loo
2ca0: 6b 69 6e 67 0a 61 74 20 74 68 65 20 61 63 74 75  king.at the actu
2cb0: 61 6c 20 73 69 7a 65 20 6f 66 20 74 68 65 20 64  al size of the d
2cc0: 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 4f 6c  atabase file. Ol
2cd0: 64 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66 20  der versions of 
2ce0: 53 51 4c 69 74 65 0a 69 67 6e 6f 72 65 64 20 74  SQLite.ignored t
2cf0: 68 65 20 69 6e 2d 68 65 61 64 65 72 20 64 61 74  he in-header dat
2d00: 61 62 61 73 65 20 73 69 7a 65 20 61 6e 64 20 75  abase size and u
2d10: 73 65 64 20 74 68 65 20 61 63 74 75 61 6c 20 66  sed the actual f
2d20: 69 6c 65 20 73 69 7a 65 0a 65 78 63 6c 75 73 69  ile size.exclusi
2d30: 76 65 6c 79 2e 20 20 5e 4e 65 77 65 72 20 76 65  vely.  ^Newer ve
2d40: 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65  rsions of SQLite
2d50: 20 75 73 65 20 74 68 65 20 69 6e 2d 68 65 61 64   use the in-head
2d60: 65 72 20 64 61 74 61 62 61 73 65 0a 73 69 7a 65  er database.size
2d70: 20 69 66 20 69 74 20 69 73 20 61 76 61 69 6c 61   if it is availa
2d80: 62 6c 65 20 62 75 74 20 66 61 6c 6c 20 62 61 63  ble but fall bac
2d90: 6b 20 74 6f 20 74 68 65 20 61 63 74 75 61 6c 20  k to the actual 
2da0: 66 69 6c 65 20 73 69 7a 65 20 69 66 0a 74 68 65  file size if.the
2db0: 20 69 6e 2d 68 65 61 64 65 72 20 64 61 74 61 62   in-header datab
2dc0: 61 73 65 20 73 69 7a 65 20 69 73 20 6e 6f 74 20  ase size is not 
2dd0: 76 61 6c 69 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  valid.</p>..<p>^
2de0: 54 68 65 20 69 6e 2d 68 65 61 64 65 72 20 64 61  The in-header da
2df0: 74 61 62 61 73 65 20 73 69 7a 65 20 69 73 20 6f  tabase size is o
2e00: 6e 6c 79 20 63 6f 6e 73 69 64 65 72 65 64 20 74  nly considered t
2e10: 6f 20 62 65 20 76 61 6c 69 64 20 69 66 0a 69 74  o be valid if.it
2e20: 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 20 61 6e 64   is non-zero and
2e30: 20 69 66 20 74 68 65 20 34 2d 62 79 74 65 20 5b   if the 4-byte [
2e40: 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 5d 20  change counter] 
2e50: 61 74 20 6f 66 66 73 65 74 20 32 34 0a 65 78 61  at offset 24.exa
2e60: 63 74 6c 79 20 6d 61 74 63 68 65 73 20 74 68 65  ctly matches the
2e70: 20 34 2d 62 79 74 65 20 5b 76 65 72 73 69 6f 6e   4-byte [version
2e80: 2d 76 61 6c 69 64 2d 66 6f 72 20 6e 75 6d 62 65  -valid-for numbe
2e90: 72 5d 20 61 74 20 6f 66 66 73 65 74 20 39 32 2e  r] at offset 92.
2ea0: 0a 5e 28 54 68 65 20 69 6e 2d 68 65 61 64 65 72  .^(The in-header
2eb0: 20 64 61 74 61 62 61 73 65 20 73 69 7a 65 20 69   database size i
2ec0: 73 20 61 6c 77 61 79 73 20 76 61 6c 69 64 20 0a  s always valid .
2ed0: 77 68 65 6e 20 74 68 65 20 64 61 74 61 62 61 73  when the databas
2ee0: 65 20 69 73 20 6f 6e 6c 79 20 6d 6f 64 69 66 69  e is only modifi
2ef0: 65 64 20 75 73 69 6e 67 20 72 65 63 65 6e 74 20  ed using recent 
2f00: 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69  versions of SQLi
2f10: 74 65 0a 28 76 65 72 73 69 6f 6e 73 20 33 2e 37  te.(versions 3.7
2f20: 2e 30 20 61 6e 64 20 6c 61 74 65 72 29 2e 29 5e  .0 and later).)^
2f30: 0a 49 66 20 61 20 6c 65 67 61 63 79 20 76 65 72  .If a legacy ver
2f40: 73 69 6f 6e 20 6f 66 20 53 51 4c 69 74 65 20 77  sion of SQLite w
2f50: 72 69 74 65 73 20 74 6f 20 74 68 65 20 64 61 74  rites to the dat
2f60: 61 62 61 73 65 2c 20 69 74 20 77 69 6c 6c 20 6e  abase, it will n
2f70: 6f 74 0a 6b 6e 6f 77 20 74 6f 20 75 70 64 61 74  ot.know to updat
2f80: 65 20 74 68 65 20 69 6e 2d 68 65 61 64 65 72 20  e the in-header 
2f90: 64 61 74 61 62 61 73 65 20 73 69 7a 65 20 61 6e  database size an
2fa0: 64 20 73 6f 20 74 68 65 20 69 6e 2d 68 65 61 64  d so the in-head
2fb0: 65 72 0a 64 61 74 61 62 61 73 65 20 73 69 7a 65  er.database size
2fc0: 20 63 6f 75 6c 64 20 62 65 20 69 6e 63 6f 72 72   could be incorr
2fd0: 65 63 74 2e 20 20 42 75 74 20 6c 65 67 61 63 79  ect.  But legacy
2fe0: 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c   versions of SQL
2ff0: 69 74 65 0a 77 69 6c 6c 20 61 6c 73 6f 20 6c 65  ite.will also le
3000: 61 76 65 20 74 68 65 20 76 65 72 73 69 6f 6e 2d  ave the version-
3010: 76 61 6c 69 64 2d 66 6f 72 20 6e 75 6d 62 65 72  valid-for number
3020: 20 61 74 20 6f 66 66 73 65 74 20 39 32 20 75 6e   at offset 92 un
3030: 63 68 61 6e 67 65 64 0a 73 6f 20 69 74 20 77 69  changed.so it wi
3040: 6c 6c 20 6e 6f 74 20 6d 61 74 63 68 20 74 68 65  ll not match the
3050: 20 63 68 61 6e 67 65 2d 63 6f 75 6e 74 65 72 2e   change-counter.
3060: 20 20 48 65 6e 63 65 2c 20 69 6e 76 61 6c 69 64    Hence, invalid
3070: 20 69 6e 2d 68 65 61 64 65 72 0a 64 61 74 61 62   in-header.datab
3080: 61 73 65 20 73 69 7a 65 73 20 63 61 6e 20 62 65  ase sizes can be
3090: 20 64 65 74 65 63 74 65 64 20 28 61 6e 64 20 69   detected (and i
30a0: 67 6e 6f 72 65 64 29 20 62 79 20 6f 62 73 65 72  gnored) by obser
30b0: 76 69 6e 67 20 77 68 65 6e 0a 74 68 65 20 63 68  ving when.the ch
30c0: 61 6e 67 65 2d 63 6f 75 6e 74 65 72 20 64 6f 65  ange-counter doe
30d0: 73 20 6e 6f 74 20 6d 61 74 63 68 20 74 68 65 20  s not match the 
30e0: 76 65 72 73 69 6f 6e 2d 76 61 6c 69 64 2d 66 6f  version-valid-fo
30f0: 72 20 6e 75 6d 62 65 72 2e 3c 2f 70 3e 0a 0a 3c  r number.</p>..<
3100: 68 34 3e 31 2e 32 2e 38 20 46 72 65 65 20 70 61  h4>1.2.8 Free pa
3110: 67 65 20 6c 69 73 74 3c 2f 68 34 3e 0a 0a 3c 70  ge list</h4>..<p
3120: 3e 55 6e 75 73 65 64 20 70 61 67 65 73 20 69 6e  >Unused pages in
3130: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
3140: 6c 65 20 61 72 65 20 73 74 6f 72 65 64 20 6f 6e  le are stored on
3150: 20 61 20 66 72 65 65 6c 69 73 74 2e 20 20 5e 54   a freelist.  ^T
3160: 68 65 0a 34 2d 62 79 74 65 20 62 69 67 2d 65 6e  he.4-byte big-en
3170: 64 69 61 6e 20 69 6e 74 65 67 65 72 20 61 74 20  dian integer at 
3180: 6f 66 66 73 65 74 20 33 32 20 73 74 6f 72 65 73  offset 32 stores
3190: 20 74 68 65 20 70 61 67 65 20 6e 75 6d 62 65 72   the page number
31a0: 20 6f 66 0a 74 68 65 20 66 69 72 73 74 20 70 61   of.the first pa
31b0: 67 65 20 6f 66 20 74 68 65 20 66 72 65 65 6c 69  ge of the freeli
31c0: 73 74 2c 20 6f 72 20 7a 65 72 6f 20 69 66 20 74  st, or zero if t
31d0: 68 65 20 66 72 65 65 6c 69 73 74 20 69 73 20 65  he freelist is e
31e0: 6d 70 74 79 2e 0a 5e 54 68 65 20 34 2d 62 79 74  mpty..^The 4-byt
31f0: 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74  e big-endian int
3200: 65 67 65 72 20 61 74 20 6f 66 66 73 65 74 20 33  eger at offset 3
3210: 36 20 73 74 6f 72 65 73 20 73 74 6f 72 65 73 20  6 stores stores 
3220: 74 68 65 20 74 6f 74 61 6c 20 0a 6e 75 6d 62 65  the total .numbe
3230: 72 20 6f 66 20 70 61 67 65 73 20 6f 6e 20 74 68  r of pages on th
3240: 65 20 66 72 65 65 6c 69 73 74 2e 3c 2f 70 3e 0a  e freelist.</p>.
3250: 0a 3c 68 34 3e 31 2e 32 2e 39 20 53 63 68 65 6d  .<h4>1.2.9 Schem
3260: 61 20 63 6f 6f 6b 69 65 3c 2f 68 34 3e 0a 0a 3c  a cookie</h4>..<
3270: 70 3e 5e 54 68 65 20 73 63 68 65 6d 61 20 63 6f  p>^The schema co
3280: 6f 6b 69 65 20 69 73 20 61 20 34 2d 62 79 74 65  okie is a 4-byte
3290: 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65   big-endian inte
32a0: 67 65 72 20 61 74 20 6f 66 66 73 65 74 20 34 30  ger at offset 40
32b0: 0a 74 68 61 74 20 69 73 20 69 6e 63 72 65 6d 65  .that is increme
32c0: 6e 74 65 64 20 77 68 65 6e 65 76 65 72 20 74 68  nted whenever th
32d0: 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
32e0: 61 20 63 68 61 6e 67 65 73 2e 20 20 41 20 0a 70  a changes.  A .p
32f0: 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
3300: 74 20 69 73 20 63 6f 6d 70 69 6c 65 64 20 61 67  t is compiled ag
3310: 61 69 6e 73 74 20 61 20 73 70 65 63 69 66 69 63  ainst a specific
3320: 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 68 65 0a   version of the.
3330: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e  database schema.
3340: 20 20 5e 57 68 65 6e 65 76 65 72 20 74 68 65 20    ^Whenever the 
3350: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
3360: 63 68 61 6e 67 65 73 2c 20 74 68 65 20 73 74 61  changes, the sta
3370: 74 65 6d 65 6e 74 0a 6d 75 73 74 20 62 65 20 72  tement.must be r
3380: 65 70 72 65 70 61 72 65 64 2e 20 20 5e 57 68 65  eprepared.  ^Whe
3390: 6e 65 76 65 72 20 61 20 70 72 65 70 61 72 65 64  never a prepared
33a0: 20 73 74 61 74 65 6d 65 6e 74 20 72 75 6e 73 2c   statement runs,
33b0: 20 69 74 20 66 69 72 73 74 20 63 68 65 63 6b 73   it first checks
33c0: 0a 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b  .the schema cook
33d0: 69 65 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20  ie to make sure 
33e0: 74 68 65 20 76 61 6c 75 65 20 69 73 20 74 68 65  the value is the
33f0: 20 73 61 6d 65 20 61 73 20 77 68 65 6e 20 74 68   same as when th
3400: 65 20 73 74 61 74 65 6d 65 6e 74 0a 77 61 73 20  e statement.was 
3410: 70 72 65 70 61 72 65 64 20 61 6e 64 20 69 66 20  prepared and if 
3420: 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69  the schema cooki
3430: 65 20 68 61 73 20 63 68 61 6e 67 65 64 2c 20 74  e has changed, t
3440: 68 65 20 73 74 61 74 65 6d 65 6e 74 20 61 62 6f  he statement abo
3450: 72 74 73 0a 69 6e 20 6f 72 64 65 72 20 74 6f 20  rts.in order to 
3460: 66 6f 72 63 65 20 74 68 65 20 73 74 61 74 65 6d  force the statem
3470: 65 6e 74 20 74 6f 20 62 65 20 72 65 70 72 65 70  ent to be reprep
3480: 61 72 65 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  ared.</p>..<tcl>
3490: 68 64 5f 66 72 61 67 6d 65 6e 74 20 7b 73 63 68  hd_fragment {sch
34a0: 65 6d 61 66 6f 72 6d 61 74 7d 20 7b 73 63 68 65  emaformat} {sche
34b0: 6d 61 20 66 6f 72 6d 61 74 20 6e 75 6d 62 65 72  ma format number
34c0: 7d 3c 2f 74 63 6c 3e 0a 3c 68 34 3e 31 2e 32 2e  }</tcl>.<h4>1.2.
34d0: 31 30 20 53 63 68 65 6d 61 20 66 6f 72 6d 61 74  10 Schema format
34e0: 20 6e 75 6d 62 65 72 3c 2f 68 34 3e 0a 0a 3c 70   number</h4>..<p
34f0: 3e 54 68 65 20 73 63 68 65 6d 61 20 66 6f 72 6d  >The schema form
3500: 61 74 20 6e 75 6d 62 65 72 20 69 73 20 61 20 34  at number is a 4
3510: 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e  -byte big-endian
3520: 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73   integer at offs
3530: 65 74 20 34 34 2e 0a 54 68 65 20 73 63 68 65 6d  et 44..The schem
3540: 61 20 66 6f 72 6d 61 74 20 6e 75 6d 62 65 72 20  a format number 
3550: 69 73 20 73 69 6d 69 6c 61 72 20 74 6f 20 74 68  is similar to th
3560: 65 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 72 65  e file format re
3570: 61 64 20 61 6e 64 20 77 72 69 74 65 0a 76 65 72  ad and write.ver
3580: 73 69 6f 6e 20 6e 75 6d 62 65 72 73 20 61 74 20  sion numbers at 
3590: 6f 66 66 73 65 74 73 20 31 38 20 61 6e 64 20 31  offsets 18 and 1
35a0: 39 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68  9 except that th
35b0: 65 20 73 63 68 65 6d 61 20 66 6f 72 6d 61 74 20  e schema format 
35c0: 6e 75 6d 62 65 72 0a 72 65 66 65 72 73 20 74 6f  number.refers to
35d0: 20 74 68 65 20 68 69 67 68 2d 6c 65 76 65 6c 20   the high-level 
35e0: 53 51 4c 20 66 6f 72 6d 61 74 74 69 6e 67 20 72  SQL formatting r
35f0: 61 74 68 65 72 20 74 68 61 6e 20 74 68 65 20 6c  ather than the l
3600: 6f 77 2d 6c 65 76 65 6c 20 62 2d 74 72 65 65 0a  ow-level b-tree.
3610: 66 6f 72 6d 61 74 74 69 6e 67 2e 20 20 46 6f 75  formatting.  Fou
3620: 72 20 73 63 68 65 6d 61 20 66 6f 72 6d 61 74 20  r schema format 
3630: 6e 75 6d 62 65 72 73 20 61 72 65 20 63 75 72 72  numbers are curr
3640: 65 6e 74 6c 79 20 64 65 66 69 6e 65 64 3a 3c 2f  ently defined:</
3650: 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 20 76 61 6c  p>..<ol>.<li val
3660: 75 65 3d 31 3e 46 6f 72 6d 61 74 20 31 20 69 73  ue=1>Format 1 is
3670: 20 75 6e 64 65 72 73 74 6f 6f 64 20 62 79 20 61   understood by a
3680: 6c 6c 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53  ll versions of S
3690: 51 4c 69 74 65 20 62 61 63 6b 20 74 6f 0a 76 65  QLite back to.ve
36a0: 72 73 69 6f 6e 20 33 2e 30 2e 30 2e 3c 2f 6c 69  rsion 3.0.0.</li
36b0: 3e 0a 3c 6c 69 20 76 61 6c 75 65 3d 32 3e 46 6f  >.<li value=2>Fo
36c0: 72 6d 61 74 20 32 20 61 64 64 73 20 74 68 65 20  rmat 2 adds the 
36d0: 61 62 69 6c 69 74 79 20 6f 66 20 72 6f 77 73 20  ability of rows 
36e0: 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d 65 20  within the same 
36f0: 74 61 62 6c 65 0a 74 6f 20 68 61 76 65 20 61 20  table.to have a 
3700: 76 61 72 79 69 6e 67 20 6e 75 6d 62 65 72 20 6f  varying number o
3710: 66 20 63 6f 6c 75 6d 6e 73 2c 20 69 6e 20 6f 72  f columns, in or
3720: 64 65 72 20 74 6f 20 73 75 70 70 6f 72 74 20 74  der to support t
3730: 68 65 0a 5b 41 4c 54 45 52 20 54 41 42 4c 45 20  he.[ALTER TABLE 
3740: 7c 20 41 4c 54 45 52 20 54 41 42 4c 45 20 2e 2e  | ALTER TABLE ..
3750: 2e 20 41 44 44 20 43 4f 4c 55 4d 4e 5d 20 66 75  . ADD COLUMN] fu
3760: 6e 63 74 69 6f 6e 61 6c 69 74 79 2e 20 20 53 75  nctionality.  Su
3770: 70 70 6f 72 74 20 66 6f 72 0a 72 65 61 64 69 6e  pport for.readin
3780: 67 20 61 6e 64 20 77 72 69 74 69 6e 67 20 66 6f  g and writing fo
3790: 72 6d 61 74 20 32 20 77 61 73 20 61 64 64 65 64  rmat 2 was added
37a0: 20 69 6e 20 53 51 4c 69 74 65 20 76 65 72 73 69   in SQLite versi
37b0: 6f 6e 20 33 2e 31 2e 33 20 0a 6f 6e 20 32 30 30  on 3.1.3 .on 200
37c0: 35 2d 30 32 2d 31 39 2e 3c 2f 6c 69 3e 0a 3c 6c  5-02-19.</li>.<l
37d0: 69 20 76 61 6c 75 65 3d 33 3e 46 6f 72 6d 61 74  i value=3>Format
37e0: 20 33 20 61 64 64 73 20 74 68 65 20 61 62 69 6c   3 adds the abil
37f0: 69 74 79 20 6f 66 20 65 78 74 72 61 20 63 6f 6c  ity of extra col
3800: 75 6d 6e 73 20 61 64 64 65 64 20 62 79 0a 5b 41  umns added by.[A
3810: 4c 54 45 52 20 54 41 42 4c 45 20 7c 20 41 4c 54  LTER TABLE | ALT
3820: 45 52 20 54 41 42 4c 45 20 2e 2e 2e 20 41 44 44  ER TABLE ... ADD
3830: 20 43 4f 4c 55 4d 4e 5d 20 74 6f 20 68 61 76 65   COLUMN] to have
3840: 20 6e 6f 6e 2d 4e 55 4c 4c 20 64 65 66 61 75 6c   non-NULL defaul
3850: 74 0a 76 61 6c 75 65 73 2e 20 20 54 68 69 73 20  t.values.  This 
3860: 63 61 70 61 62 69 6c 69 74 79 20 77 61 73 20 61  capability was a
3870: 64 64 65 64 20 69 6e 20 53 51 4c 69 74 65 20 76  dded in SQLite v
3880: 65 72 73 69 6f 6e 20 33 2e 31 2e 34 20 0a 6f 6e  ersion 3.1.4 .on
3890: 20 32 30 30 35 2d 30 33 2d 31 31 2e 3c 2f 6c 69   2005-03-11.</li
38a0: 3e 0a 3c 6c 69 20 76 61 6c 75 65 3d 34 3e 5e 46  >.<li value=4>^F
38b0: 6f 72 6d 61 74 20 34 20 63 61 75 73 65 73 20 53  ormat 4 causes S
38c0: 51 4c 69 74 65 20 74 6f 20 72 65 73 70 65 63 74  QLite to respect
38d0: 20 74 68 65 0a 5b 64 65 73 63 65 6e 64 69 6e 67   the.[descending
38e0: 20 69 6e 64 69 63 65 73 20 7c 20 44 45 53 43 20   indices | DESC 
38f0: 6b 65 79 77 6f 72 64 5d 20 6f 6e 0a 69 6e 64 65  keyword] on.inde
3900: 78 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 2e 20  x declarations. 
3910: 20 28 5e 54 68 65 20 44 45 53 43 20 6b 65 79 77   (^The DESC keyw
3920: 6f 72 64 20 69 73 20 69 67 6e 6f 72 65 64 20 69  ord is ignored i
3930: 6e 20 69 6e 64 69 63 65 73 20 66 6f 72 20 0a 66  n indices for .f
3940: 6f 72 6d 61 74 73 20 31 2c 20 32 2c 20 61 6e 64  ormats 1, 2, and
3950: 20 33 2e 29 0a 5e 46 6f 72 6d 61 74 20 34 20 61   3.).^Format 4 a
3960: 6c 73 6f 20 61 64 64 73 20 74 77 6f 20 6e 65 77  lso adds two new
3970: 20 62 6f 6f 6c 65 61 6e 20 72 65 63 6f 72 64 20   boolean record 
3980: 74 79 70 65 20 76 61 6c 75 65 73 20 28 5b 73 65  type values ([se
3990: 72 69 61 6c 20 74 79 70 65 73 5d 0a 38 20 61 6e  rial types].8 an
39a0: 64 20 39 2e 29 20 20 53 75 70 70 6f 72 74 20 66  d 9.)  Support f
39b0: 6f 72 20 66 6f 72 6d 61 74 20 34 20 77 61 73 20  or format 4 was 
39c0: 61 64 64 65 64 20 69 6e 20 53 51 4c 69 74 65 20  added in SQLite 
39d0: 33 2e 33 2e 30 20 6f 6e 0a 32 30 30 36 2d 30 31  3.3.0 on.2006-01
39e0: 2d 31 30 2e 3c 2f 6c 69 3e 0a 3c 2f 6f 6c 3e 0a  -10.</li>.</ol>.
39f0: 0a 3c 70 3e 5e 4e 65 77 20 64 61 74 61 62 61 73  .<p>^New databas
3a00: 65 20 66 69 6c 65 73 20 63 72 65 61 74 65 64 20  e files created 
3a10: 62 79 20 53 51 4c 69 74 65 20 75 73 65 20 66 6f  by SQLite use fo
3a20: 72 6d 61 74 20 34 20 62 79 20 64 65 66 61 75 6c  rmat 4 by defaul
3a30: 74 2e 0a 5e 54 68 65 20 5b 6c 65 67 61 63 79 5f  t..^The [legacy_
3a40: 66 69 6c 65 5f 66 6f 72 6d 61 74 20 70 72 61 67  file_format prag
3a50: 6d 61 5d 20 63 61 6e 20 62 65 20 75 73 65 64 20  ma] can be used 
3a60: 74 6f 20 63 61 75 73 65 20 53 51 4c 69 74 65 0a  to cause SQLite.
3a70: 74 6f 20 63 72 65 61 74 65 20 6e 65 77 20 64 61  to create new da
3a80: 74 61 62 61 73 65 20 66 69 6c 65 73 20 75 73 69  tabase files usi
3a90: 6e 67 20 66 6f 72 6d 61 74 20 31 2e 0a 54 68 65  ng format 1..The
3aa0: 20 66 6f 72 6d 61 74 20 76 65 72 73 69 6f 6e 20   format version 
3ab0: 6e 75 6d 62 65 72 20 63 61 6e 20 62 65 20 6d 61  number can be ma
3ac0: 64 65 20 74 6f 20 64 65 66 61 75 6c 74 20 74 6f  de to default to
3ad0: 20 31 20 69 6e 73 74 65 61 64 20 6f 66 20 34 20   1 instead of 4 
3ae0: 62 79 0a 73 65 74 74 69 6e 67 20 5b 53 51 4c 49  by.setting [SQLI
3af0: 54 45 5f 44 45 46 41 55 4c 54 5f 46 49 4c 45 5f  TE_DEFAULT_FILE_
3b00: 46 4f 52 4d 41 54 5d 3d 31 20 61 74 20 63 6f 6d  FORMAT]=1 at com
3b10: 70 69 6c 65 2d 74 69 6d 65 2e 0a 3c 2f 70 3e 0a  pile-time..</p>.
3b20: 0a 3c 68 34 3e 31 2e 32 2e 31 31 20 53 75 67 67  .<h4>1.2.11 Sugg
3b30: 65 73 74 65 64 20 63 61 63 68 65 20 73 69 7a 65  ested cache size
3b40: 3c 2f 68 34 3e 0a 0a 3c 70 3e 54 68 65 20 34 2d  </h4>..<p>The 4-
3b50: 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20  byte big-endian 
3b60: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 61  signed integer a
3b70: 74 20 6f 66 66 73 65 74 20 34 38 20 69 73 20 74  t offset 48 is t
3b80: 68 65 20 73 75 67 67 65 73 74 65 64 0a 63 61 63  he suggested.cac
3b90: 68 65 20 73 69 7a 65 20 69 6e 20 70 61 67 65 73  he size in pages
3ba0: 20 66 6f 72 20 74 68 65 20 64 61 74 61 62 61 73   for the databas
3bb0: 65 20 66 69 6c 65 2e 20 20 54 68 65 20 76 61 6c  e file.  The val
3bc0: 75 65 20 69 73 20 61 20 73 75 67 67 65 73 74 69  ue is a suggesti
3bd0: 6f 6e 0a 6f 6e 6c 79 20 61 6e 64 20 53 51 4c 69  on.only and SQLi
3be0: 74 65 20 69 73 20 75 6e 64 65 72 20 6e 6f 20 6f  te is under no o
3bf0: 62 6c 69 67 61 74 69 6f 6e 20 74 6f 20 68 6f 6e  bligation to hon
3c00: 6f 72 20 69 74 2e 20 20 54 68 65 20 61 62 73 6f  or it.  The abso
3c10: 6c 75 74 65 20 76 61 6c 75 65 0a 6f 66 20 74 68  lute value.of th
3c20: 65 20 69 6e 74 65 67 65 72 20 69 73 20 75 73 65  e integer is use
3c30: 64 20 61 73 20 74 68 65 20 73 75 67 67 65 73 74  d as the suggest
3c40: 65 64 20 73 69 7a 65 2e 20 20 54 68 65 20 73 75  ed size.  The su
3c50: 67 67 65 73 74 65 64 20 63 61 63 68 65 20 73 69  ggested cache si
3c60: 7a 65 0a 63 61 6e 20 62 65 20 73 65 74 20 75 73  ze.can be set us
3c70: 69 6e 67 20 74 68 65 20 5b 64 65 66 61 75 6c 74  ing the [default
3c80: 5f 63 61 63 68 65 5f 73 69 7a 65 20 70 72 61 67  _cache_size prag
3c90: 6d 61 5d 2e 3c 2f 70 3e 0a 0a 3c 68 34 3e 31 2e  ma].</p>..<h4>1.
3ca0: 32 2e 31 32 20 49 6e 63 72 65 6d 65 6e 74 61 6c  2.12 Incremental
3cb0: 20 76 61 63 75 75 6d 20 73 65 74 74 69 6e 67 73   vacuum settings
3cc0: 3c 2f 68 34 3e 0a 0a 3c 70 3e 54 68 65 20 74 77  </h4>..<p>The tw
3cd0: 6f 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64  o 4-byte big-end
3ce0: 69 61 6e 20 69 6e 74 65 67 65 72 73 20 61 74 20  ian integers at 
3cf0: 6f 66 66 73 65 74 73 20 35 32 20 61 6e 64 20 36  offsets 52 and 6
3d00: 34 20 61 72 65 20 75 73 65 64 0a 74 6f 20 6d 61  4 are used.to ma
3d10: 6e 61 67 65 20 74 68 65 20 5b 61 75 74 6f 5f 76  nage the [auto_v
3d20: 61 63 75 75 6d 5d 20 61 6e 64 20 5b 69 6e 63 72  acuum] and [incr
3d30: 65 6d 65 6e 74 61 6c 5f 76 61 63 75 75 6d 5d 20  emental_vacuum] 
3d40: 6d 6f 64 65 73 2e 20 20 5e 49 66 0a 74 68 65 20  modes.  ^If.the 
3d50: 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73 65  integer at offse
3d60: 74 20 35 32 20 69 73 20 7a 65 72 6f 20 74 68 65  t 52 is zero the
3d70: 6e 20 70 6f 69 6e 74 65 72 2d 6d 61 70 20 28 70  n pointer-map (p
3d80: 74 72 6d 61 70 29 20 70 61 67 65 73 20 61 72 65  trmap) pages are
3d90: 0a 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68  .omitted from th
3da0: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
3db0: 61 6e 64 20 6e 65 69 74 68 65 72 20 61 75 74 6f  and neither auto
3dc0: 5f 76 61 63 75 75 6d 20 6e 6f 72 0a 69 6e 63 72  _vacuum nor.incr
3dd0: 65 6d 65 6e 74 61 6c 5f 76 61 63 75 75 6d 20 61  emental_vacuum a
3de0: 72 65 20 73 75 70 70 6f 72 74 65 64 2e 20 20 5e  re supported.  ^
3df0: 49 66 20 74 68 65 20 69 6e 74 65 67 65 72 20 61  If the integer a
3e00: 74 20 6f 66 66 73 65 74 20 35 32 20 69 73 0a 6e  t offset 52 is.n
3e10: 6f 6e 2d 7a 65 72 6f 20 74 68 65 6e 20 69 74 20  on-zero then it 
3e20: 69 73 20 74 68 65 20 70 61 67 65 20 6e 75 6d 62  is the page numb
3e30: 65 72 20 6f 66 20 74 68 65 20 6c 61 72 67 65 73  er of the larges
3e40: 74 20 72 6f 6f 74 20 70 61 67 65 20 69 6e 20 74  t root page in t
3e50: 68 65 0a 64 61 74 61 62 61 73 65 20 66 69 6c 65  he.database file
3e60: 2c 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  , the database f
3e70: 69 6c 65 20 77 69 6c 6c 20 63 6f 6e 74 61 69 6e  ile will contain
3e80: 20 70 74 72 6d 61 70 20 70 61 67 65 73 2c 20 61   ptrmap pages, a
3e90: 6e 64 20 74 68 65 0a 6d 6f 64 65 20 6d 75 73 74  nd the.mode must
3ea0: 20 62 65 20 65 69 74 68 65 72 20 61 75 74 6f 5f   be either auto_
3eb0: 76 61 63 75 75 6d 20 6f 72 20 69 6e 63 72 65 6d  vacuum or increm
3ec0: 65 6e 74 61 6c 5f 76 61 63 75 75 6d 2e 20 20 5e  ental_vacuum.  ^
3ed0: 49 6e 20 74 68 69 73 20 6c 61 74 74 65 72 0a 63  In this latter.c
3ee0: 61 73 65 2c 20 74 68 65 20 69 6e 74 65 67 65 72  ase, the integer
3ef0: 20 61 74 20 6f 66 66 73 65 74 20 36 34 20 69 73   at offset 64 is
3f00: 20 74 72 75 65 20 66 6f 72 20 69 6e 63 72 65 6d   true for increm
3f10: 65 6e 74 61 6c 5f 76 61 63 75 75 6d 20 61 6e 64  ental_vacuum and
3f20: 0a 66 61 6c 73 65 20 66 6f 72 20 61 75 74 6f 5f  .false for auto_
3f30: 76 61 63 75 75 6d 2e 20 20 5e 49 66 20 74 68 65  vacuum.  ^If the
3f40: 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73   integer at offs
3f50: 65 74 20 35 32 20 69 73 20 7a 65 72 6f 20 74 68  et 52 is zero th
3f60: 65 6e 0a 74 68 65 20 69 6e 74 65 67 65 72 20 61  en.the integer a
3f70: 74 20 6f 66 66 73 65 74 20 36 34 20 6d 75 73 74  t offset 64 must
3f80: 20 61 6c 73 6f 20 62 65 20 7a 65 72 6f 2e 3c 2f   also be zero.</
3f90: 70 3e 0a 0a 3c 68 34 3e 31 2e 32 2e 31 33 20 54  p>..<h4>1.2.13 T
3fa0: 65 78 74 20 65 6e 63 6f 64 69 6e 67 3c 2f 68 34  ext encoding</h4
3fb0: 3e 0a 0a 3c 70 3e 5e 54 68 65 20 34 2d 62 79 74  >..<p>^The 4-byt
3fc0: 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74  e big-endian int
3fd0: 65 67 65 72 20 61 74 20 6f 66 66 73 65 74 20 35  eger at offset 5
3fe0: 36 20 64 65 74 65 72 6d 69 6e 65 73 20 74 68 65  6 determines the
3ff0: 20 65 6e 63 6f 64 69 6e 67 0a 75 73 65 64 20 66   encoding.used f
4000: 6f 72 20 61 6c 6c 20 74 65 78 74 20 73 74 72 69  or all text stri
4010: 6e 67 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68  ngs stored in th
4020: 65 20 64 61 74 61 62 61 73 65 2e 20 20 5e 41 20  e database.  ^A 
4030: 76 61 6c 75 65 20 6f 66 20 31 20 6d 65 61 6e 73  value of 1 means
4040: 0a 55 54 46 2d 38 2e 20 20 5e 41 20 76 61 6c 75  .UTF-8.  ^A valu
4050: 65 20 6f 66 20 32 20 6d 65 61 6e 73 20 55 54 46  e of 2 means UTF
4060: 2d 31 36 6c 65 2e 20 20 5e 41 20 76 61 6c 75 65  -16le.  ^A value
4070: 20 6f 66 20 33 20 6d 65 61 6e 73 20 55 54 46 2d   of 3 means UTF-
4080: 31 36 62 65 2e 0a 4e 6f 20 6f 74 68 65 72 20 76  16be..No other v
4090: 61 6c 75 65 73 20 61 72 65 20 61 6c 6c 6f 77 65  alues are allowe
40a0: 64 2e 3c 2f 70 3e 0a 0a 3c 68 34 3e 31 2e 32 2e  d.</p>..<h4>1.2.
40b0: 31 34 20 55 73 65 72 20 76 65 72 73 69 6f 6e 20  14 User version 
40c0: 6e 75 6d 62 65 72 3c 2f 68 34 3e 0a 0a 3c 70 3e  number</h4>..<p>
40d0: 5e 54 68 65 20 34 2d 62 79 74 65 20 62 69 67 2d  ^The 4-byte big-
40e0: 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20 61  endian integer a
40f0: 74 20 6f 66 66 73 65 74 20 36 30 20 69 73 20 74  t offset 60 is t
4100: 68 65 20 75 73 65 72 20 76 65 72 73 69 6f 6e 20  he user version 
4110: 77 68 69 63 68 0a 69 73 20 73 65 74 20 61 6e 64  which.is set and
4120: 20 71 75 65 72 69 65 64 20 62 79 20 74 68 65 20   queried by the 
4130: 5b 75 73 65 72 5f 76 65 72 73 69 6f 6e 20 70 72  [user_version pr
4140: 61 67 6d 61 5d 2e 20 20 54 68 65 20 75 73 65 72  agma].  The user
4150: 20 76 65 72 73 69 6f 6e 20 69 73 0a 6e 6f 74 20   version is.not 
4160: 75 73 65 64 20 62 79 20 53 51 4c 69 74 65 2e 3c  used by SQLite.<
4170: 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  /p>..<tcl>hd_fra
4180: 67 6d 65 6e 74 20 61 70 70 69 64 20 7b 41 70 70  gment appid {App
4190: 6c 69 63 61 74 69 6f 6e 20 49 44 7d 3c 2f 74 63  lication ID}</tc
41a0: 6c 3e 0a 3c 68 34 3e 31 2e 32 2e 31 35 20 41 70  l>.<h4>1.2.15 Ap
41b0: 70 6c 69 63 61 74 69 6f 6e 20 49 44 3c 2f 68 34  plication ID</h4
41c0: 3e 0a 0a 3c 70 3e 5e 54 68 65 20 34 2d 62 79 74  >..<p>^The 4-byt
41d0: 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74  e big-endian int
41e0: 65 67 65 72 20 61 74 20 6f 66 66 73 65 74 20 36  eger at offset 6
41f0: 38 20 69 73 20 61 6e 20 22 41 70 70 6c 69 63 61  8 is an "Applica
4200: 74 69 6f 6e 20 49 44 22 20 74 68 61 74 0a 63 61  tion ID" that.ca
4210: 6e 20 62 65 20 73 65 74 20 62 79 20 74 68 65 20  n be set by the 
4220: 5b 50 52 41 47 4d 41 20 61 70 70 6c 69 63 61 74  [PRAGMA applicat
4230: 69 6f 6e 5f 69 64 5d 20 63 6f 6d 6d 61 6e 64 20  ion_id] command 
4240: 69 6e 20 6f 72 64 65 72 20 74 6f 20 69 64 65 6e  in order to iden
4250: 74 69 66 79 20 74 68 65 0a 64 61 74 61 62 61 73  tify the.databas
4260: 65 20 61 73 20 62 65 6c 6f 6e 67 69 6e 67 20 74  e as belonging t
4270: 6f 20 6f 72 20 61 73 73 6f 63 69 61 74 65 64 20  o or associated 
4280: 77 69 74 68 20 61 20 70 61 72 74 69 63 75 6c 61  with a particula
4290: 72 20 61 70 70 6c 69 63 61 74 69 6f 6e 2e 0a 54  r application..T
42a0: 68 65 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 49  he application I
42b0: 44 20 69 73 20 69 6e 74 65 6e 64 65 64 20 66 6f  D is intended fo
42c0: 72 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73  r database files
42d0: 20 75 73 65 64 20 61 73 20 61 6e 0a 5b 61 70 70   used as an.[app
42e0: 6c 69 63 61 74 69 6f 6e 20 66 69 6c 65 2d 66 6f  lication file-fo
42f0: 72 6d 61 74 5d 2e 20 20 54 68 65 20 61 70 70 6c  rmat].  The appl
4300: 69 63 61 74 69 6f 6e 20 49 44 20 63 61 6e 20 62  ication ID can b
4310: 65 20 75 73 65 64 20 62 79 20 75 74 69 6c 69 74  e used by utilit
4320: 69 65 73 20 0a 73 75 63 68 20 61 73 20 5b 68 74  ies .such as [ht
4330: 74 70 3a 2f 2f 77 77 77 2e 64 61 72 77 69 6e 73  tp://www.darwins
4340: 79 73 2e 63 6f 6d 2f 66 69 6c 65 2f 20 7c 20 66  ys.com/file/ | f
4350: 69 6c 65 28 31 29 5d 20 74 6f 20 64 65 74 65 72  ile(1)] to deter
4360: 6d 69 6e 65 20 74 68 65 20 73 70 65 63 69 66 69  mine the specifi
4370: 63 0a 66 69 6c 65 20 74 79 70 65 20 72 61 74 68  c.file type rath
4380: 65 72 20 74 68 61 6e 20 6a 75 73 74 20 72 65 70  er than just rep
4390: 6f 72 74 69 6e 67 20 22 53 51 4c 69 74 65 33 20  orting "SQLite3 
43a0: 44 61 74 61 62 61 73 65 22 2e 20 20 41 20 6c 69  Database".  A li
43b0: 73 74 20 6f 66 0a 61 73 73 69 67 6e 65 64 20 61  st of.assigned a
43c0: 70 70 6c 69 63 61 74 69 6f 6e 20 49 44 73 20 63  pplication IDs c
43d0: 61 6e 20 62 65 20 73 65 65 6e 20 62 79 20 63 6f  an be seen by co
43e0: 6e 73 75 6c 74 69 6e 67 20 74 68 65 0a 5b 68 74  nsulting the.[ht
43f0: 74 70 3a 2f 2f 77 77 77 2e 73 71 6c 69 74 65 2e  tp://www.sqlite.
4400: 6f 72 67 2f 73 72 63 2f 61 72 74 69 66 61 63 74  org/src/artifact
4410: 3f 63 69 3d 74 72 75 6e 6b 26 66 69 6c 65 6e 61  ?ci=trunk&filena
4420: 6d 65 3d 6d 61 67 69 63 2e 74 78 74 7c 6d 61 67  me=magic.txt|mag
4430: 69 63 2e 74 78 74 5d 0a 66 69 6c 65 20 69 6e 20  ic.txt].file in 
4440: 74 68 65 20 53 51 4c 69 74 65 20 73 6f 75 72 63  the SQLite sourc
4450: 65 20 72 65 70 6f 73 69 74 6f 72 79 2e 3c 2f 70  e repository.</p
4460: 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
4470: 65 6e 74 20 76 61 6c 69 64 66 6f 72 20 7b 76 65  ent validfor {ve
4480: 72 73 69 6f 6e 2d 76 61 6c 69 64 2d 66 6f 72 20  rsion-valid-for 
4490: 6e 75 6d 62 65 72 7d 3c 2f 74 63 6c 3e 0a 3c 68  number}</tcl>.<h
44a0: 34 3e 31 2e 32 2e 31 36 20 57 72 69 74 65 20 6c  4>1.2.16 Write l
44b0: 69 62 72 61 72 79 20 76 65 72 73 69 6f 6e 20 6e  ibrary version n
44c0: 75 6d 62 65 72 20 61 6e 64 20 76 65 72 73 69 6f  umber and versio
44d0: 6e 2d 76 61 6c 69 64 2d 66 6f 72 20 6e 75 6d 62  n-valid-for numb
44e0: 65 72 3c 2f 68 34 3e 0a 0a 3c 70 3e 5e 54 68 65  er</h4>..<p>^The
44f0: 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69   4-byte big-endi
4500: 61 6e 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66  an integer at of
4510: 66 73 65 74 20 39 36 20 73 74 6f 72 65 73 20 74  fset 96 stores t
4520: 68 65 20 0a 5b 53 51 4c 49 54 45 5f 56 45 52 53  he .[SQLITE_VERS
4530: 49 4f 4e 5f 4e 55 4d 42 45 52 5d 20 76 61 6c 75  ION_NUMBER] valu
4540: 65 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65  e for the SQLite
4550: 20 6c 69 62 72 61 72 79 20 74 68 61 74 20 6d 6f   library that mo
4560: 73 74 0a 72 65 63 65 6e 74 6c 79 20 6d 6f 64 69  st.recently modi
4570: 66 69 65 64 20 74 68 65 20 64 61 74 61 62 61 73  fied the databas
4580: 65 20 66 69 6c 65 2e 20 20 5e 54 68 65 20 34 2d  e file.  ^The 4-
4590: 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20  byte big-endian 
45a0: 69 6e 74 65 67 65 72 20 61 74 0a 6f 66 66 73 65  integer at.offse
45b0: 74 20 39 32 20 69 73 20 74 68 65 20 76 61 6c 75  t 92 is the valu
45c0: 65 20 6f 66 20 74 68 65 20 5b 63 68 61 6e 67 65  e of the [change
45d0: 20 63 6f 75 6e 74 65 72 5d 20 77 68 65 6e 20 74   counter] when t
45e0: 68 65 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65  he version numbe
45f0: 72 0a 77 61 73 20 73 74 6f 72 65 64 2e 20 20 54  r.was stored.  T
4600: 68 65 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66  he integer at of
4610: 66 73 65 74 20 39 32 20 69 6e 64 69 63 61 74 65  fset 92 indicate
4620: 73 20 77 68 69 63 68 20 74 72 61 6e 73 61 63 74  s which transact
4630: 69 6f 6e 0a 74 68 65 20 76 65 72 73 69 6f 6e 20  ion.the version 
4640: 6e 75 6d 62 65 72 20 69 73 20 76 61 6c 69 64 20  number is valid 
4650: 66 6f 72 20 61 6e 64 20 69 73 20 73 6f 6d 65 74  for and is somet
4660: 69 6d 65 73 20 63 61 6c 6c 65 64 20 74 68 65 0a  imes called the.
4670: 22 76 65 72 73 69 6f 6e 2d 76 61 6c 69 64 2d 66  "version-valid-f
4680: 6f 72 20 6e 75 6d 62 65 72 22 2e 0a 0a 3c 68 34  or number"...<h4
4690: 3e 31 2e 32 2e 31 36 20 48 65 61 64 65 72 20 73  >1.2.16 Header s
46a0: 70 61 63 65 20 72 65 73 65 72 76 65 64 20 66 6f  pace reserved fo
46b0: 72 20 65 78 70 61 6e 73 69 6f 6e 3c 2f 68 34 3e  r expansion</h4>
46c0: 0a 0a 3c 70 3e 41 6c 6c 20 6f 74 68 65 72 20 62  ..<p>All other b
46d0: 79 74 65 73 20 6f 66 20 74 68 65 20 64 61 74 61  ytes of the data
46e0: 62 61 73 65 20 66 69 6c 65 20 68 65 61 64 65 72  base file header
46f0: 20 61 72 65 20 72 65 73 65 72 76 65 64 20 66 6f   are reserved fo
4700: 72 0a 66 75 74 75 72 65 20 65 78 70 61 6e 73 69  r.future expansi
4710: 6f 6e 20 61 6e 64 20 6d 75 73 74 20 62 65 20 73  on and must be s
4720: 65 74 20 74 6f 20 7a 65 72 6f 2e 3c 2f 70 3e 0a  et to zero.</p>.
4730: 0a 3c 68 33 3e 31 2e 33 20 54 68 65 20 4c 6f 63  .<h3>1.3 The Loc
4740: 6b 2d 42 79 74 65 20 50 61 67 65 3c 2f 68 33 3e  k-Byte Page</h3>
4750: 0a 0a 3c 70 3e 54 68 65 20 6c 6f 63 6b 2d 62 79  ..<p>The lock-by
4760: 74 65 20 70 61 67 65 20 69 73 20 74 68 65 20 73  te page is the s
4770: 69 6e 67 6c 65 20 70 61 67 65 20 6f 66 20 74 68  ingle page of th
4780: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a  e database file.
4790: 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68  that contains th
47a0: 65 20 62 79 74 65 73 20 61 74 20 6f 66 66 73 65  e bytes at offse
47b0: 74 73 20 62 65 74 77 65 65 6e 20 31 30 37 33 37  ts between 10737
47c0: 34 31 38 32 34 20 61 6e 64 20 31 30 37 33 37 34  41824 and 107374
47d0: 32 33 33 35 2c 0a 69 6e 63 6c 75 73 69 76 65 2e  2335,.inclusive.
47e0: 20 20 41 20 64 61 74 61 62 61 73 65 20 66 69 6c    A database fil
47f0: 65 20 74 68 61 74 20 69 73 20 6c 65 73 73 20 74  e that is less t
4800: 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
4810: 31 30 37 33 37 34 31 38 32 34 20 62 79 74 65 73  1073741824 bytes
4820: 20 0a 69 6e 20 73 69 7a 65 20 63 6f 6e 74 61 69   .in size contai
4830: 6e 73 20 6e 6f 20 6c 6f 63 6b 2d 62 79 74 65 20  ns no lock-byte 
4840: 70 61 67 65 2e 20 20 41 20 64 61 74 61 62 61 73  page.  A databas
4850: 65 20 66 69 6c 65 20 6c 61 72 67 65 72 20 74 68  e file larger th
4860: 61 6e 0a 31 30 37 33 37 34 31 38 32 34 20 63 6f  an.1073741824 co
4870: 6e 74 61 69 6e 73 20 65 78 61 63 74 6c 79 20 6f  ntains exactly o
4880: 6e 65 20 6c 6f 63 6b 2d 62 79 74 65 20 70 61 67  ne lock-byte pag
4890: 65 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  e..</p>..<p>The 
48a0: 6c 6f 63 6b 2d 62 79 74 65 20 70 61 67 65 20 69  lock-byte page i
48b0: 73 20 73 65 74 20 61 73 69 64 65 20 66 6f 72 20  s set aside for 
48c0: 75 73 65 20 62 79 20 74 68 65 20 6f 70 65 72 61  use by the opera
48d0: 74 69 6e 67 2d 73 79 73 74 65 6d 20 73 70 65 63  ting-system spec
48e0: 69 66 69 63 0a 5b 56 46 53 5d 20 69 6d 70 6c 65  ific.[VFS] imple
48f0: 6d 65 6e 74 61 74 69 6f 6e 20 69 6e 20 69 6d 70  mentation in imp
4900: 6c 65 6d 65 6e 74 69 6e 67 20 74 68 65 20 64 61  lementing the da
4910: 74 61 62 61 73 65 20 66 69 6c 65 20 6c 6f 63 6b  tabase file lock
4920: 69 6e 67 20 70 72 69 6d 69 74 69 76 65 73 2e 0a  ing primitives..
4930: 5e 53 51 4c 69 74 65 20 64 6f 65 73 20 6e 6f 74  ^SQLite does not
4940: 20 75 73 65 20 74 68 65 20 6c 6f 63 6b 2d 62 79   use the lock-by
4950: 74 65 20 70 61 67 65 2e 20 20 5e 54 68 65 20 53  te page.  ^The S
4960: 51 4c 69 74 65 20 63 6f 72 65 20 0a 77 69 6c 6c  QLite core .will
4970: 20 6e 65 76 65 72 20 72 65 61 64 20 6f 72 20 77   never read or w
4980: 72 69 74 65 20 74 68 65 20 6c 6f 63 6b 2d 62 79  rite the lock-by
4990: 74 65 20 70 61 67 65 2c 0a 74 68 6f 75 67 68 20  te page,.though 
49a0: 6f 70 65 72 61 74 69 6e 67 2d 73 79 73 74 65 6d  operating-system
49b0: 20 73 70 65 63 69 66 69 63 20 5b 56 46 53 5d 20   specific [VFS] 
49c0: 0a 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73  .implementations
49d0: 20 6d 61 79 20 63 68 6f 6f 73 65 20 74 6f 20 72   may choose to r
49e0: 65 61 64 20 6f 72 20 77 72 69 74 65 20 62 79 74  ead or write byt
49f0: 65 73 20 6f 6e 20 74 68 65 20 6c 6f 63 6b 2d 62  es on the lock-b
4a00: 79 74 65 20 0a 70 61 67 65 20 61 63 63 6f 72 64  yte .page accord
4a10: 69 6e 67 20 74 6f 20 74 68 65 20 0a 6e 65 65 64  ing to the .need
4a20: 73 20 61 6e 64 20 70 72 6f 63 6c 69 76 69 74 69  s and procliviti
4a30: 65 73 20 6f 66 20 74 68 65 20 75 6e 64 65 72 6c  es of the underl
4a40: 79 69 6e 67 20 73 79 73 74 65 6d 2e 20 20 54 68  ying system.  Th
4a50: 65 20 75 6e 69 78 20 61 6e 64 20 77 69 6e 33 32  e unix and win32
4a60: 0a 5b 56 46 53 5d 20 69 6d 70 6c 65 6d 65 6e 74  .[VFS] implement
4a70: 61 74 69 6f 6e 73 20 74 68 61 74 20 63 6f 6d 65  ations that come
4a80: 20 62 75 69 6c 74 20 69 6e 74 6f 20 53 51 4c 69   built into SQLi
4a90: 74 65 20 64 6f 20 6e 6f 74 20 77 72 69 74 65 20  te do not write 
4aa0: 74 6f 20 74 68 65 0a 6c 6f 63 6b 2d 62 79 74 65  to the.lock-byte
4ab0: 20 70 61 67 65 2c 20 62 75 74 20 74 68 69 72 64   page, but third
4ac0: 2d 70 61 72 74 79 20 56 46 53 20 69 6d 70 6c 65  -party VFS imple
4ad0: 6d 65 6e 74 61 74 69 6f 6e 73 20 66 6f 72 0a 6f  mentations for.o
4ae0: 74 68 65 72 20 6f 70 65 72 61 74 69 6e 67 20 73  ther operating s
4af0: 79 73 74 65 6d 73 20 6d 69 67 68 74 2e 3c 2f 70  ystems might.</p
4b00: 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
4b10: 65 6e 74 20 7b 66 72 65 65 6c 69 73 74 7d 20 7b  ent {freelist} {
4b20: 66 72 65 65 6c 69 73 74 7d 20 7b 66 72 65 65 2d  freelist} {free-
4b30: 70 61 67 65 20 6c 69 73 74 7d 3c 2f 74 63 6c 3e  page list}</tcl>
4b40: 0a 3c 68 33 3e 31 2e 34 20 54 68 65 20 46 72 65  .<h3>1.4 The Fre
4b50: 65 6c 69 73 74 3c 2f 68 33 3e 0a 0a 3c 70 3e 41  elist</h3>..<p>A
4b60: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6d   database file m
4b70: 69 67 68 74 20 63 6f 6e 74 61 69 6e 20 6f 6e 65  ight contain one
4b80: 20 6f 72 20 6d 6f 72 65 20 70 61 67 65 73 20 74   or more pages t
4b90: 68 61 74 20 61 72 65 20 6e 6f 74 20 69 6e 0a 61  hat are not in.a
4ba0: 63 74 69 76 65 20 75 73 65 2e 20 20 55 6e 75 73  ctive use.  Unus
4bb0: 65 64 20 70 61 67 65 73 20 63 61 6e 20 63 6f 6d  ed pages can com
4bc0: 65 20 61 62 6f 75 74 2c 20 66 6f 72 20 65 78 61  e about, for exa
4bd0: 6d 70 6c 65 2c 20 77 68 65 6e 20 69 6e 66 6f 72  mple, when infor
4be0: 6d 61 74 69 6f 6e 0a 69 73 20 64 65 6c 65 74 65  mation.is delete
4bf0: 64 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62  d from the datab
4c00: 61 73 65 2e 20 20 55 6e 75 73 65 64 20 70 61 67  ase.  Unused pag
4c10: 65 73 20 61 72 65 20 73 74 6f 72 65 64 20 6f 6e  es are stored on
4c20: 20 74 68 65 20 66 72 65 65 6c 69 73 74 0a 61 6e   the freelist.an
4c30: 64 20 61 72 65 20 72 65 75 73 65 64 20 77 68 65  d are reused whe
4c40: 6e 20 61 64 64 69 74 69 6f 6e 61 6c 20 70 61 67  n additional pag
4c50: 65 73 20 61 72 65 20 72 65 71 75 69 72 65 64 2e  es are required.
4c60: 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 66 72 65  </p>..<p>The fre
4c70: 65 6c 69 73 74 20 69 73 20 6f 72 67 61 6e 69 7a  elist is organiz
4c80: 65 64 20 61 73 20 61 20 6c 69 6e 6b 65 64 20 6c  ed as a linked l
4c90: 69 73 74 20 6f 66 20 66 72 65 65 6c 69 73 74 20  ist of freelist 
4ca0: 74 72 75 6e 6b 20 70 61 67 65 73 0a 77 69 74 68  trunk pages.with
4cb0: 20 65 61 63 68 20 74 72 75 6e 6b 20 70 61 67 65   each trunk page
4cc0: 73 20 63 6f 6e 74 61 69 6e 69 6e 67 20 70 61 67  s containing pag
4cd0: 65 20 6e 75 6d 62 65 72 73 20 66 6f 72 20 7a 65  e numbers for ze
4ce0: 72 6f 20 6f 72 20 6d 6f 72 65 20 66 72 65 65 6c  ro or more freel
4cf0: 69 73 74 0a 6c 65 61 66 20 70 61 67 65 73 2e 3c  ist.leaf pages.<
4d00: 2f 70 3e 0a 0a 3c 70 3e 41 20 66 72 65 65 6c 69  /p>..<p>A freeli
4d10: 73 74 20 74 72 75 6e 6b 20 70 61 67 65 20 63 6f  st trunk page co
4d20: 6e 73 69 73 74 73 20 6f 66 20 61 6e 20 61 72 72  nsists of an arr
4d30: 61 79 20 6f 66 20 34 2d 62 79 74 65 20 62 69 67  ay of 4-byte big
4d40: 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 73  -endian integers
4d50: 2e 0a 54 68 65 20 73 69 7a 65 20 6f 66 20 74 68  ..The size of th
4d60: 65 20 61 72 72 61 79 20 69 73 20 61 73 20 6d 61  e array is as ma
4d70: 6e 79 20 69 6e 74 65 67 65 72 73 20 61 73 20 77  ny integers as w
4d80: 69 6c 6c 20 66 69 74 20 69 6e 20 74 68 65 20 75  ill fit in the u
4d90: 73 61 62 6c 65 20 73 70 61 63 65 0a 6f 66 20 61  sable space.of a
4da0: 20 70 61 67 65 2e 20 20 54 68 65 20 6d 69 6e 69   page.  The mini
4db0: 6d 75 6d 20 75 73 61 62 6c 65 20 73 70 61 63 65  mum usable space
4dc0: 20 69 73 20 34 38 30 20 62 79 74 65 73 20 73 6f   is 480 bytes so
4dd0: 20 74 68 65 20 61 72 72 61 79 20 77 69 6c 6c 20   the array will 
4de0: 61 6c 77 61 79 73 0a 62 65 20 61 74 20 6c 65 61  always.be at lea
4df0: 73 74 20 31 32 30 20 65 6e 74 72 69 65 73 20 69  st 120 entries i
4e00: 6e 20 6c 65 6e 67 74 68 2e 20 20 5e 54 68 65 20  n length.  ^The 
4e10: 66 69 72 73 74 20 69 6e 74 65 67 65 72 20 69 6e  first integer in
4e20: 20 74 68 65 20 61 72 72 61 79 20 0a 69 73 20 74   the array .is t
4e30: 68 65 20 70 61 67 65 20 6e 75 6d 62 65 72 20 6f  he page number o
4e40: 66 20 74 68 65 20 6e 65 78 74 20 66 72 65 65 6c  f the next freel
4e50: 69 73 74 20 74 72 75 6e 6b 20 70 61 67 65 20 69  ist trunk page i
4e60: 6e 20 74 68 65 20 6c 69 73 74 20 6f 72 20 7a 65  n the list or ze
4e70: 72 6f 20 0a 69 66 20 74 68 69 73 20 69 73 20 74  ro .if this is t
4e80: 68 65 20 6c 61 73 74 20 66 72 65 65 6c 69 73 74  he last freelist
4e90: 20 74 72 75 6e 6b 20 70 61 67 65 2e 20 20 5e 54   trunk page.  ^T
4ea0: 68 65 20 73 65 63 6f 6e 64 20 69 6e 74 65 67 65  he second intege
4eb0: 72 20 69 6e 20 74 68 65 20 61 72 72 61 79 0a 69  r in the array.i
4ec0: 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
4ed0: 6c 65 61 66 20 70 61 67 65 20 70 6f 69 6e 74 65  leaf page pointe
4ee0: 72 73 20 74 6f 20 66 6f 6c 6c 6f 77 2e 20 20 43  rs to follow.  C
4ef0: 61 6c 6c 20 74 68 65 20 73 65 63 6f 6e 64 20 69  all the second i
4f00: 6e 74 65 67 65 72 20 4c 2e 0a 5e 49 66 20 4c 20  nteger L..^If L 
4f10: 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  is greater than 
4f20: 7a 65 72 6f 20 74 68 65 6e 20 69 6e 74 65 67 65  zero then intege
4f30: 72 73 20 77 69 74 68 20 61 72 72 61 79 20 69 6e  rs with array in
4f40: 64 65 78 65 73 20 62 65 74 77 65 65 6e 20 32 20  dexes between 2 
4f50: 61 6e 64 0a 4c 2b 31 20 69 6e 63 6c 75 73 69 76  and.L+1 inclusiv
4f60: 65 20 63 6f 6e 74 61 69 6e 20 70 61 67 65 20 6e  e contain page n
4f70: 75 6d 62 65 72 73 20 66 6f 72 20 66 72 65 65 6c  umbers for freel
4f80: 69 73 74 20 6c 65 61 66 20 70 61 67 65 73 2e 3c  ist leaf pages.<
4f90: 2f 70 3e 0a 0a 3c 70 3e 46 72 65 65 6c 69 73 74  /p>..<p>Freelist
4fa0: 20 6c 65 61 66 20 70 61 67 65 73 20 63 6f 6e 74   leaf pages cont
4fb0: 61 69 6e 20 6e 6f 20 69 6e 66 6f 72 6d 61 74 69  ain no informati
4fc0: 6f 6e 2e 20 20 5e 53 51 4c 69 74 65 20 61 76 6f  on.  ^SQLite avo
4fd0: 69 64 73 20 72 65 61 64 69 6e 67 20 6f 72 0a 77  ids reading or.w
4fe0: 72 69 74 69 6e 67 20 66 72 65 65 6c 69 73 74 20  riting freelist 
4ff0: 6c 65 61 66 20 70 61 67 65 73 20 69 6e 20 6f 72  leaf pages in or
5000: 64 65 72 20 74 6f 20 72 65 64 75 63 65 20 64 69  der to reduce di
5010: 73 6b 20 49 2f 4f 2e 3c 2f 70 3e 0a 0a 3c 70 3e  sk I/O.</p>..<p>
5020: 41 20 62 75 67 20 69 6e 20 53 51 4c 69 74 65 20  A bug in SQLite 
5030: 76 65 72 73 69 6f 6e 73 20 70 72 69 6f 72 20 74  versions prior t
5040: 6f 20 33 2e 36 2e 30 20 63 61 75 73 65 64 20 74  o 3.6.0 caused t
5050: 68 65 20 64 61 74 61 62 61 73 65 20 74 6f 20 62  he database to b
5060: 65 0a 72 65 70 6f 72 74 65 64 20 61 73 20 63 6f  e.reported as co
5070: 72 72 75 70 74 20 69 66 20 61 6e 79 20 6f 66 20  rrupt if any of 
5080: 74 68 65 20 6c 61 73 74 20 36 20 65 6e 74 72 69  the last 6 entri
5090: 65 73 20 69 6e 20 74 68 65 20 66 72 65 65 6c 69  es in the freeli
50a0: 73 74 20 74 72 75 6e 6b 20 70 61 67 65 20 0a 61  st trunk page .a
50b0: 72 72 61 79 20 63 6f 6e 74 61 69 6e 65 64 20 6e  rray contained n
50c0: 6f 6e 2d 7a 65 72 6f 20 76 61 6c 75 65 73 2e 20  on-zero values. 
50d0: 20 4e 65 77 65 72 20 76 65 72 73 69 6f 6e 73 20   Newer versions 
50e0: 6f 66 20 53 51 4c 69 74 65 20 64 6f 20 6e 6f 74  of SQLite do not
50f0: 20 68 61 76 65 0a 74 68 69 73 20 70 72 6f 62 6c   have.this probl
5100: 65 6d 2e 20 20 5e 48 6f 77 65 76 65 72 2c 20 6e  em.  ^However, n
5110: 65 77 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66  ewer versions of
5120: 20 53 51 4c 69 74 65 20 73 74 69 6c 6c 20 61 76   SQLite still av
5130: 6f 69 64 20 75 73 69 6e 67 20 74 68 65 20 0a 6c  oid using the .l
5140: 61 73 74 20 73 69 78 20 65 6e 74 72 69 65 73 20  ast six entries 
5150: 69 6e 20 74 68 65 20 66 72 65 65 6c 69 73 74 20  in the freelist 
5160: 74 72 75 6e 6b 20 70 61 67 65 20 61 72 72 61 79  trunk page array
5170: 20 69 6e 20 6f 72 64 65 72 20 74 68 61 74 20 64   in order that d
5180: 61 74 61 62 61 73 65 0a 66 69 6c 65 73 20 63 72  atabase.files cr
5190: 65 61 74 65 64 20 62 79 20 6e 65 77 65 72 20 76  eated by newer v
51a0: 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74  ersions of SQLit
51b0: 65 20 63 61 6e 20 62 65 20 72 65 61 64 20 62 79  e can be read by
51c0: 20 6f 6c 64 65 72 20 76 65 72 73 69 6f 6e 73 0a   older versions.
51d0: 6f 66 20 53 51 4c 69 74 65 2e 3c 2f 70 3e 0a 0a  of SQLite.</p>..
51e0: 3c 70 3e 5e 54 68 65 20 6e 75 6d 62 65 72 20 6f  <p>^The number o
51f0: 66 20 66 72 65 65 6c 69 73 74 20 70 61 67 65 73  f freelist pages
5200: 20 69 73 20 73 74 6f 72 65 64 20 61 73 20 61 20   is stored as a 
5210: 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61  4-byte big-endia
5220: 6e 20 69 6e 74 65 67 65 72 0a 69 6e 20 74 68 65  n integer.in the
5230: 20 64 61 74 61 62 61 73 65 20 68 65 61 64 65 72   database header
5240: 20 61 74 20 61 6e 20 6f 66 66 73 65 74 20 6f 66   at an offset of
5250: 20 33 36 20 66 72 6f 6d 20 74 68 65 20 62 65 67   36 from the beg
5260: 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20 66 69  inning of the fi
5270: 6c 65 2e 0a 5e 54 68 65 20 64 61 74 61 62 61 73  le..^The databas
5280: 65 20 68 65 61 64 65 72 20 61 6c 73 6f 20 73 74  e header also st
5290: 6f 72 65 73 20 74 68 65 20 70 61 67 65 20 6e 75  ores the page nu
52a0: 6d 62 65 72 20 6f 66 20 74 68 65 20 66 69 72 73  mber of the firs
52b0: 74 20 66 72 65 65 6c 69 73 74 20 74 72 75 6e 6b  t freelist trunk
52c0: 0a 70 61 67 65 20 61 73 20 61 20 34 2d 62 79 74  .page as a 4-byt
52d0: 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74  e big-endian int
52e0: 65 67 65 72 20 61 74 20 61 6e 20 6f 66 66 73 65  eger at an offse
52f0: 74 20 6f 66 20 33 32 20 66 72 6f 6d 20 74 68 65  t of 32 from the
5300: 20 62 65 67 69 6e 6e 69 6e 67 0a 6f 66 20 74 68   beginning.of th
5310: 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 74 63  e file.</p>..<tc
5320: 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 62 74  l>hd_fragment bt
5330: 72 65 65 20 7b 42 2a 2d 54 72 65 65 73 7d 3c 2f  ree {B*-Trees}</
5340: 74 63 6c 3e 0a 3c 68 33 3e 31 2e 35 20 42 2d 74  tcl>.<h3>1.5 B-t
5350: 72 65 65 20 50 61 67 65 73 3c 2f 68 33 3e 0a 0a  ree Pages</h3>..
5360: 3c 70 3e 54 68 65 20 62 2d 74 72 65 65 20 61 6c  <p>The b-tree al
5370: 67 6f 72 69 74 68 6d 20 70 72 6f 76 69 64 65 73  gorithm provides
5380: 20 6b 65 79 2f 64 61 74 61 20 73 74 6f 72 61 67   key/data storag
5390: 65 20 77 69 74 68 20 75 6e 69 71 75 65 20 61 6e  e with unique an
53a0: 64 0a 6f 72 64 65 72 65 64 20 6b 65 79 73 20 6f  d.ordered keys o
53b0: 6e 20 70 61 67 65 2d 6f 72 69 65 6e 74 65 64 20  n page-oriented 
53c0: 73 74 6f 72 61 67 65 20 64 65 76 69 63 65 73 2e  storage devices.
53d0: 0a 46 6f 72 20 62 61 63 6b 67 72 6f 75 6e 64 20  .For background 
53e0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6f 6e 20 62  information on b
53f0: 2d 74 72 65 65 73 2c 20 73 65 65 0a 4b 6e 75 74  -trees, see.Knut
5400: 68 2c 20 3c 75 3e 54 68 65 20 41 72 74 20 4f 66  h, <u>The Art Of
5410: 20 43 6f 6d 70 75 74 65 72 20 50 72 6f 67 72 61   Computer Progra
5420: 6d 6d 69 6e 67 3c 2f 75 3e 2c 20 56 6f 6c 75 6d  mming</u>, Volum
5430: 65 20 33 20 22 53 6f 72 74 69 6e 67 0a 61 6e 64  e 3 "Sorting.and
5440: 20 53 65 61 72 63 68 69 6e 67 22 2c 20 70 61 67   Searching", pag
5450: 65 73 20 34 37 31 2d 34 37 39 2e 20 20 54 77 6f  es 471-479.  Two
5460: 20 6b 69 6e 64 73 20 6f 66 20 62 2d 74 72 65 65   kinds of b-tree
5470: 73 20 61 72 65 20 75 73 65 64 20 62 79 0a 53 51  s are used by.SQ
5480: 4c 69 74 65 2e 20 20 54 68 65 20 61 6c 67 6f 72  Lite.  The algor
5490: 69 74 68 6d 20 74 68 61 74 20 4b 6e 75 74 68 20  ithm that Knuth 
54a0: 63 61 6c 6c 73 20 22 42 2a 2d 54 72 65 65 22 20  calls "B*-Tree" 
54b0: 73 74 6f 72 65 73 20 61 6c 6c 20 64 61 74 61 0a  stores all data.
54c0: 69 6e 20 74 68 65 20 6c 65 61 76 65 73 20 6f 66  in the leaves of
54d0: 20 74 68 65 20 74 72 65 65 2e 20 20 53 51 4c 69   the tree.  SQLi
54e0: 74 65 20 63 61 6c 6c 73 20 74 68 69 73 20 76 61  te calls this va
54f0: 72 69 65 74 79 20 6f 66 20 62 2d 74 72 65 65 0a  riety of b-tree.
5500: 61 20 22 74 61 62 6c 65 20 62 2d 74 72 65 65 22  a "table b-tree"
5510: 2e 20 54 68 65 20 61 6c 67 6f 72 69 74 68 6d 20  . The algorithm 
5520: 74 68 61 74 20 4b 6e 75 74 68 20 63 61 6c 6c 73  that Knuth calls
5530: 20 73 69 6d 70 6c 79 20 22 42 2d 54 72 65 65 22   simply "B-Tree"
5540: 0a 73 74 6f 72 65 73 20 62 6f 74 68 20 74 68 65  .stores both the
5550: 20 6b 65 79 20 61 6e 64 20 74 68 65 20 64 61 74   key and the dat
5560: 61 20 74 6f 67 65 74 68 65 72 20 69 6e 20 62 6f  a together in bo
5570: 74 68 20 6c 65 61 76 65 73 0a 61 6e 64 20 69 6e  th leaves.and in
5580: 20 69 6e 74 65 72 69 6f 72 20 70 61 67 65 73 2e   interior pages.
5590: 20 20 49 6e 20 74 68 65 20 53 51 4c 69 74 65 20    In the SQLite 
55a0: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c 20  implementation, 
55b0: 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 42 2d 54  the original.B-T
55c0: 72 65 65 20 61 6c 67 6f 72 69 74 68 6d 20 73 74  ree algorithm st
55d0: 6f 72 65 73 20 6b 65 79 73 20 6f 6e 6c 79 2c 20  ores keys only, 
55e0: 6f 6d 69 74 74 69 6e 67 20 74 68 65 20 64 61 74  omitting the dat
55f0: 61 20 65 6e 74 69 72 65 6c 79 2c 20 61 6e 64 0a  a entirely, and.
5600: 69 73 20 63 61 6c 6c 65 64 20 61 6e 20 22 69 6e  is called an "in
5610: 64 65 78 20 62 2d 74 72 65 65 22 2e 0a 0a 3c 70  dex b-tree"...<p
5620: 3e 41 20 62 2d 74 72 65 65 20 70 61 67 65 20 69  >A b-tree page i
5630: 73 20 65 69 74 68 65 72 20 61 6e 20 69 6e 74 65  s either an inte
5640: 72 69 6f 72 20 70 61 67 65 20 6f 72 20 61 20 6c  rior page or a l
5650: 65 61 66 20 70 61 67 65 2e 0a 41 20 6c 65 61 66  eaf page..A leaf
5660: 20 70 61 67 65 20 63 6f 6e 74 61 69 6e 73 20 6b   page contains k
5670: 65 79 73 20 61 6e 64 20 69 6e 20 74 68 65 20 63  eys and in the c
5680: 61 73 65 20 6f 66 20 61 20 74 61 62 6c 65 20 62  ase of a table b
5690: 2d 74 72 65 65 20 65 61 63 68 0a 6b 65 79 20 68  -tree each.key h
56a0: 61 73 20 61 73 73 6f 63 69 61 74 65 64 20 64 61  as associated da
56b0: 74 61 2e 20 20 41 6e 20 69 6e 74 65 72 69 6f 72  ta.  An interior
56c0: 20 70 61 67 65 20 63 6f 6e 74 61 69 6e 73 0a 4b   page contains.K
56d0: 20 6b 65 79 73 20 74 6f 67 65 74 68 65 72 20 77   keys together w
56e0: 69 74 68 20 4b 2b 31 20 70 6f 69 6e 74 65 72 73  ith K+1 pointers
56f0: 20 74 6f 20 63 68 69 6c 64 20 62 2d 74 72 65 65   to child b-tree
5700: 20 70 61 67 65 73 2e 0a 41 20 22 70 6f 69 6e 74   pages..A "point
5710: 65 72 22 20 69 6e 20 61 6e 20 69 6e 74 65 72 69  er" in an interi
5720: 6f 72 20 62 2d 74 72 65 65 20 70 61 67 65 20 69  or b-tree page i
5730: 73 20 6a 75 73 74 20 74 68 65 20 33 31 2d 62 69  s just the 31-bi
5740: 74 20 69 6e 74 65 67 65 72 0a 70 61 67 65 20 6e  t integer.page n
5750: 75 6d 62 65 72 20 6f 66 20 74 68 65 20 63 68 69  umber of the chi
5760: 6c 64 20 70 61 67 65 2e 3c 2f 70 3e 0a 0a 3c 70  ld page.</p>..<p
5770: 3e 44 65 66 69 6e 65 20 74 68 65 20 64 65 70 74  >Define the dept
5780: 68 0a 6f 66 20 61 20 6c 65 61 66 20 62 2d 74 72  h.of a leaf b-tr
5790: 65 65 20 74 6f 20 62 65 20 31 20 61 6e 64 20 74  ee to be 1 and t
57a0: 68 65 20 64 65 70 74 68 20 6f 66 20 61 6e 79 20  he depth of any 
57b0: 69 6e 74 65 72 69 6f 72 20 62 2d 74 72 65 65 20  interior b-tree 
57c0: 74 6f 20 62 65 20 6f 6e 65 0a 6d 6f 72 65 20 74  to be one.more t
57d0: 68 61 6e 20 74 68 65 20 6d 61 78 69 6d 75 6d 20  han the maximum 
57e0: 64 65 70 74 68 20 6f 66 20 61 6e 79 20 6f 66 20  depth of any of 
57f0: 69 74 73 20 63 68 69 6c 64 72 65 6e 2e 20 20 5e  its children.  ^
5800: 49 6e 20 61 20 77 65 6c 6c 2d 66 6f 72 6d 65 64  In a well-formed
5810: 0a 64 61 74 61 62 61 73 65 2c 20 61 6c 6c 20 63  .database, all c
5820: 68 69 6c 64 72 65 6e 20 6f 66 20 61 6e 20 69 6e  hildren of an in
5830: 74 65 72 69 6f 72 20 62 2d 74 72 65 65 20 68 61  terior b-tree ha
5840: 76 65 20 74 68 65 20 73 61 6d 65 20 64 65 70 74  ve the same dept
5850: 68 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 6e 20 61 6e  h.</p>..<p>In an
5860: 20 69 6e 74 65 72 69 6f 72 20 62 2d 74 72 65 65   interior b-tree
5870: 20 70 61 67 65 2c 20 74 68 65 20 70 6f 69 6e 74   page, the point
5880: 65 72 73 20 61 6e 64 20 6b 65 79 73 20 6c 6f 67  ers and keys log
5890: 69 63 61 6c 6c 79 20 61 6c 74 65 72 6e 61 74 65  ically alternate
58a0: 20 0a 77 69 74 68 20 61 20 70 6f 69 6e 74 65 72   .with a pointer
58b0: 20 6f 6e 20 62 6f 74 68 20 65 6e 64 73 2e 20 28   on both ends. (
58c0: 54 68 65 20 70 72 65 76 69 6f 75 73 20 73 65 6e  The previous sen
58d0: 74 65 6e 63 65 20 69 73 20 74 6f 20 62 65 20 75  tence is to be u
58e0: 6e 64 65 72 73 74 6f 6f 64 0a 63 6f 6e 63 65 70  nderstood.concep
58f0: 74 75 61 6c 6c 79 20 2d 20 74 68 65 20 61 63 74  tually - the act
5900: 75 61 6c 20 6c 61 79 6f 75 74 20 6f 66 20 74 68  ual layout of th
5910: 65 20 6b 65 79 73 20 61 6e 64 0a 70 6f 69 6e 74  e keys and.point
5920: 65 72 73 20 77 69 74 68 69 6e 20 74 68 65 20 70  ers within the p
5930: 61 67 65 20 69 73 20 6d 6f 72 65 20 63 6f 6d 70  age is more comp
5940: 6c 69 63 61 74 65 64 20 61 6e 64 20 77 69 6c 6c  licated and will
5950: 20 62 65 20 64 65 73 63 72 69 62 65 64 20 69 6e   be described in
5960: 0a 74 68 65 20 73 65 71 75 65 6c 2e 29 20 20 41  .the sequel.)  A
5970: 6c 6c 20 6b 65 79 73 20 77 69 74 68 69 6e 20 74  ll keys within t
5980: 68 65 20 73 61 6d 65 20 70 61 67 65 20 61 72 65  he same page are
5990: 20 75 6e 69 71 75 65 20 61 6e 64 20 61 72 65 20   unique and are 
59a0: 6c 6f 67 69 63 61 6c 6c 79 0a 6f 72 67 61 6e 69  logically.organi
59b0: 7a 65 64 20 69 6e 20 61 73 63 65 6e 64 69 6e 67  zed in ascending
59c0: 20 6f 72 64 65 72 20 66 72 6f 6d 20 6c 65 66 74   order from left
59d0: 20 74 6f 20 72 69 67 68 74 2e 20 20 28 41 67 61   to right.  (Aga
59e0: 69 6e 2c 20 74 68 69 73 20 6f 72 64 65 72 69 6e  in, this orderin
59f0: 67 0a 69 73 20 6c 6f 67 69 63 61 6c 2c 20 6e 6f  g.is logical, no
5a00: 74 20 70 68 79 73 69 63 61 6c 2e 20 20 54 68 65  t physical.  The
5a10: 20 61 63 74 75 61 6c 20 6c 6f 63 61 74 69 6f 6e   actual location
5a20: 20 6f 66 20 6b 65 79 73 20 77 69 74 68 69 6e 20   of keys within 
5a30: 74 68 65 20 70 61 67 65 0a 69 73 20 61 72 62 69  the page.is arbi
5a40: 74 72 61 72 79 2e 29 20 5e 46 6f 72 20 61 6e 79  trary.) ^For any
5a50: 20 6b 65 79 20 58 2c 20 70 6f 69 6e 74 65 72 73   key X, pointers
5a60: 20 74 6f 20 74 68 65 20 6c 65 66 74 0a 6f 66 20   to the left.of 
5a70: 61 20 58 20 72 65 66 65 72 20 74 6f 20 62 2d 74  a X refer to b-t
5a80: 72 65 65 20 70 61 67 65 73 20 6f 6e 20 77 68 69  ree pages on whi
5a90: 63 68 20 61 6c 6c 20 6b 65 79 73 20 61 72 65 20  ch all keys are 
5aa0: 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75  less than or equ
5ab0: 61 6c 20 74 6f 20 58 2e 0a 5e 50 6f 69 6e 74 65  al to X..^Pointe
5ac0: 72 73 20 74 6f 20 74 68 65 20 72 69 67 68 74 20  rs to the right 
5ad0: 6f 66 20 58 20 72 65 66 65 72 20 74 6f 20 70 61  of X refer to pa
5ae0: 67 65 73 20 77 68 65 72 65 20 61 6c 6c 20 6b 65  ges where all ke
5af0: 79 73 20 61 72 65 20 0a 67 72 65 61 74 65 72 20  ys are .greater 
5b00: 74 68 61 6e 20 58 2e 3c 2f 70 3e 0a 0a 3c 70 3e  than X.</p>..<p>
5b10: 57 69 74 68 69 6e 20 61 6e 20 69 6e 74 65 72 69  Within an interi
5b20: 6f 72 20 62 2d 74 72 65 65 20 70 61 67 65 2c 20  or b-tree page, 
5b30: 65 61 63 68 20 6b 65 79 20 61 6e 64 20 74 68 65  each key and the
5b40: 20 70 6f 69 6e 74 65 72 20 74 6f 20 69 74 73 0a   pointer to its.
5b50: 69 6d 6d 65 64 69 61 74 65 20 6c 65 66 74 20 61  immediate left a
5b60: 72 65 20 63 6f 6d 62 69 6e 65 64 20 69 6e 74 6f  re combined into
5b70: 20 61 20 73 74 72 75 63 74 75 72 65 20 63 61 6c   a structure cal
5b80: 6c 65 64 20 61 20 22 63 65 6c 6c 22 2e 20 20 54  led a "cell".  T
5b90: 68 65 0a 72 69 67 68 74 2d 6d 6f 73 74 20 70 6f  he.right-most po
5ba0: 69 6e 74 65 72 20 69 73 20 68 65 6c 64 20 73 65  inter is held se
5bb0: 70 61 72 61 74 65 6c 79 2e 20 20 41 20 6c 65 61  parately.  A lea
5bc0: 66 20 62 2d 74 72 65 65 20 70 61 67 65 20 68 61  f b-tree page ha
5bd0: 73 20 6e 6f 0a 70 6f 69 6e 74 65 72 73 2c 20 62  s no.pointers, b
5be0: 75 74 20 69 74 20 73 74 69 6c 6c 20 75 73 65 73  ut it still uses
5bf0: 20 74 68 65 20 63 65 6c 6c 20 73 74 72 75 63 74   the cell struct
5c00: 75 72 65 20 74 6f 20 68 6f 6c 64 20 6b 65 79 73  ure to hold keys
5c10: 20 66 6f 72 0a 69 6e 64 65 78 20 62 2d 74 72 65   for.index b-tre
5c20: 65 73 20 6f 72 20 6b 65 79 73 20 61 6e 64 20 63  es or keys and c
5c30: 6f 6e 74 65 6e 74 20 66 6f 72 20 74 61 62 6c 65  ontent for table
5c40: 20 62 2d 74 72 65 65 73 2e 20 20 44 61 74 61 20   b-trees.  Data 
5c50: 69 73 20 61 6c 73 6f 0a 63 6f 6e 74 61 69 6e 65  is also.containe
5c60: 64 20 69 6e 20 74 68 65 20 63 65 6c 6c 2e 0a 3c  d in the cell..<
5c70: 2f 70 3e 0a 0a 3c 70 3e 45 76 65 72 79 20 62 2d  /p>..<p>Every b-
5c80: 74 72 65 65 20 70 61 67 65 20 68 61 73 20 61 74  tree page has at
5c90: 20 6d 6f 73 74 20 6f 6e 65 20 70 61 72 65 6e 74   most one parent
5ca0: 20 62 2d 74 72 65 65 20 70 61 67 65 2e 0a 41 20   b-tree page..A 
5cb0: 62 2d 74 72 65 65 20 70 61 67 65 20 77 69 74 68  b-tree page with
5cc0: 6f 75 74 20 61 20 70 61 72 65 6e 74 20 69 73 20  out a parent is 
5cd0: 63 61 6c 6c 65 64 20 61 20 72 6f 6f 74 20 70 61  called a root pa
5ce0: 67 65 2e 20 20 41 20 72 6f 6f 74 20 62 2d 74 72  ge.  A root b-tr
5cf0: 65 65 20 70 61 67 65 0a 74 6f 67 65 74 68 65 72  ee page.together
5d00: 20 77 69 74 68 20 74 68 65 20 63 6c 6f 73 75 72   with the closur
5d10: 65 20 6f 66 20 69 74 73 20 63 68 69 6c 64 72 65  e of its childre
5d20: 6e 20 66 6f 72 6d 20 61 20 63 6f 6d 70 6c 65 74  n form a complet
5d30: 65 20 62 2d 74 72 65 65 2e 0a 49 74 20 69 73 20  e b-tree..It is 
5d40: 70 6f 73 73 69 62 6c 65 20 28 61 6e 64 20 69 6e  possible (and in
5d50: 20 66 61 63 74 20 72 61 74 68 65 72 20 63 6f 6d   fact rather com
5d60: 6d 6f 6e 29 20 74 6f 20 68 61 76 65 20 61 20 63  mon) to have a c
5d70: 6f 6d 70 6c 65 74 65 20 62 2d 74 72 65 65 0a 74  omplete b-tree.t
5d80: 68 61 74 20 63 6f 6e 73 69 73 74 73 20 6f 66 20  hat consists of 
5d90: 61 20 73 69 6e 67 6c 65 20 70 61 67 65 20 74 68  a single page th
5da0: 61 74 20 69 73 20 62 6f 74 68 20 61 20 6c 65 61  at is both a lea
5db0: 66 20 61 6e 64 20 74 68 65 20 72 6f 6f 74 2e 0a  f and the root..
5dc0: 42 65 63 61 75 73 65 20 74 68 65 72 65 20 61 72  Because there ar
5dd0: 65 20 70 6f 69 6e 74 65 72 73 20 66 72 6f 6d 20  e pointers from 
5de0: 70 61 72 65 6e 74 73 20 74 6f 20 63 68 69 6c 64  parents to child
5df0: 72 65 6e 2c 20 65 76 65 72 79 20 70 61 67 65 20  ren, every page 
5e00: 6f 66 20 61 0a 63 6f 6d 70 6c 65 74 65 20 62 2d  of a.complete b-
5e10: 74 72 65 65 20 63 61 6e 20 62 65 20 6c 6f 63 61  tree can be loca
5e20: 74 65 64 20 69 66 20 6f 6e 6c 79 20 74 68 65 20  ted if only the 
5e30: 72 6f 6f 74 20 70 61 67 65 20 69 73 20 6b 6e 6f  root page is kno
5e40: 77 6e 2e 20 20 48 65 6e 63 65 2c 0a 62 2d 74 72  wn.  Hence,.b-tr
5e50: 65 65 73 20 61 72 65 20 69 64 65 6e 74 69 66 69  ees are identifi
5e60: 65 64 20 62 79 20 74 68 65 69 72 20 72 6f 6f 74  ed by their root
5e70: 20 70 61 67 65 20 6e 75 6d 62 65 72 2e 3c 2f 70   page number.</p
5e80: 3e 0a 0a 3c 70 3e 41 20 62 2d 74 72 65 65 20 70  >..<p>A b-tree p
5e90: 61 67 65 20 69 73 20 65 69 74 68 65 72 20 61 20  age is either a 
5ea0: 74 61 62 6c 65 20 62 2d 74 72 65 65 20 70 61 67  table b-tree pag
5eb0: 65 20 6f 72 20 61 6e 20 69 6e 64 65 78 20 62 2d  e or an index b-
5ec0: 74 72 65 65 20 70 61 67 65 2e 0a 41 6c 6c 20 70  tree page..All p
5ed0: 61 67 65 73 20 77 69 74 68 69 6e 20 65 61 63 68  ages within each
5ee0: 20 63 6f 6d 70 6c 65 74 65 20 62 2d 74 72 65 65   complete b-tree
5ef0: 20 61 72 65 20 6f 66 20 74 68 65 20 73 61 6d 65   are of the same
5f00: 20 74 79 70 65 3a 20 65 69 74 68 65 72 20 74 61   type: either ta
5f10: 62 6c 65 0a 6f 72 20 69 6e 64 65 78 2e 20 20 54  ble.or index.  T
5f20: 68 65 72 65 20 69 73 20 61 20 6f 6e 65 20 74 61  here is a one ta
5f30: 62 6c 65 20 62 2d 74 72 65 65 73 20 69 6e 20 74  ble b-trees in t
5f40: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
5f50: 0a 66 6f 72 20 65 61 63 68 20 72 6f 77 69 64 20  .for each rowid 
5f60: 74 61 62 6c 65 20 69 6e 20 74 68 65 20 64 61 74  table in the dat
5f70: 61 62 61 73 65 20 73 63 68 65 6d 61 2c 20 69 6e  abase schema, in
5f80: 63 6c 75 64 69 6e 67 20 73 79 73 74 65 6d 20 74  cluding system t
5f90: 61 62 6c 65 73 0a 73 75 63 68 20 61 73 20 73 71  ables.such as sq
5fa0: 6c 69 74 65 5f 6d 61 73 74 65 72 2e 20 20 54 68  lite_master.  Th
5fb0: 65 72 65 20 69 73 20 6f 6e 65 20 69 6e 64 65 78  ere is one index
5fc0: 20 62 2d 74 72 65 65 73 0a 69 6e 20 74 68 65 20   b-trees.in the 
5fd0: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 66 6f  database file fo
5fe0: 72 20 65 61 63 68 20 69 6e 64 65 78 20 69 6e 20  r each index in 
5ff0: 74 68 65 20 73 63 68 65 6d 61 2c 20 69 6e 63 6c  the schema, incl
6000: 75 64 69 6e 67 20 69 6d 70 6c 69 65 64 20 69 6e  uding implied in
6010: 64 69 63 65 73 0a 63 72 65 61 74 65 64 20 62 79  dices.created by
6020: 20 75 6e 69 71 75 65 6e 65 73 73 20 63 6f 6e 73   uniqueness cons
6030: 74 72 61 69 6e 74 73 2e 20 20 54 68 65 72 65 20  traints.  There 
6040: 61 72 65 20 6e 6f 20 62 2d 74 72 65 65 73 20 61  are no b-trees a
6050: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 0a 5b  ssociated with.[
6060: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 5d 2e  virtual tables].
6070: 20 20 53 70 65 63 69 66 69 63 20 76 69 72 74 75    Specific virtu
6080: 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65  al table impleme
6090: 6e 74 61 74 69 6f 6e 73 20 6d 69 67 68 74 20 6d  ntations might m
60a0: 61 6b 65 20 75 73 65 0a 6f 66 20 5b 73 68 61 64  ake use.of [shad
60b0: 6f 77 20 74 61 62 6c 65 73 5d 20 66 6f 72 20 73  ow tables] for s
60c0: 74 6f 72 61 67 65 2c 20 62 75 74 20 74 68 6f 73  torage, but thos
60d0: 65 20 73 68 61 64 6f 77 20 74 61 62 6c 65 73 20  e shadow tables 
60e0: 77 69 6c 6c 20 68 61 76 65 20 73 65 70 61 72 61  will have separa
60f0: 74 65 0a 65 6e 74 72 69 65 73 20 69 6e 20 74 68  te.entries in th
6100: 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
6110: 61 2e 20 20 5b 57 49 54 48 4f 55 54 20 52 4f 57  a.  [WITHOUT ROW
6120: 49 44 5d 20 74 61 62 6c 65 73 20 75 73 65 20 69  ID] tables use i
6130: 6e 64 65 78 20 62 2d 74 72 65 65 73 0a 72 61 74  ndex b-trees.rat
6140: 68 65 72 20 74 68 61 6e 20 61 20 74 61 62 6c 65  her than a table
6150: 20 62 2d 74 72 65 65 73 2c 20 73 6f 20 74 68 65   b-trees, so the
6160: 72 65 20 69 73 20 6f 6e 65 0a 69 6e 64 65 78 20  re is one.index 
6170: 62 2d 74 72 65 65 20 69 6e 20 74 68 65 20 64 61  b-tree in the da
6180: 74 61 62 61 73 65 20 66 69 6c 65 20 66 6f 72 20  tabase file for 
6190: 65 61 63 68 20 5b 57 49 54 48 4f 55 54 20 52 4f  each [WITHOUT RO
61a0: 57 49 44 5d 20 74 61 62 6c 65 2e 0a 54 68 65 20  WID] table..The 
61b0: 62 2d 74 72 65 65 20 63 6f 72 72 65 73 70 6f 6e  b-tree correspon
61c0: 64 69 6e 67 20 74 6f 20 74 68 65 20 73 71 6c 69  ding to the sqli
61d0: 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 20  te_master table 
61e0: 69 73 20 61 6c 77 61 79 73 20 61 20 74 61 62 6c  is always a tabl
61f0: 65 0a 62 2d 74 72 65 65 20 61 6e 64 20 61 6c 77  e.b-tree and alw
6200: 61 79 73 20 68 61 73 20 61 20 72 6f 6f 74 20 70  ays has a root p
6210: 61 67 65 20 6f 66 20 31 2e 0a 54 68 65 20 73 71  age of 1..The sq
6220: 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c  lite_master tabl
6230: 65 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 72  e contains the r
6240: 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20  oot page number 
6250: 66 6f 72 20 65 76 65 72 79 20 6f 74 68 65 72 20  for every other 
6260: 0a 74 61 62 6c 65 20 61 6e 64 20 69 6e 64 65 78  .table and index
6270: 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
6280: 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 45   file.</p>..<p>E
6290: 61 63 68 20 65 6e 74 72 79 20 69 6e 20 61 20 74  ach entry in a t
62a0: 61 62 6c 65 20 62 2d 74 72 65 65 20 63 6f 6e 73  able b-tree cons
62b0: 69 73 74 73 20 6f 66 20 61 20 36 34 2d 62 69 74  ists of a 64-bit
62c0: 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20   signed integer 
62d0: 6b 65 79 0a 61 6e 64 20 75 70 20 74 6f 20 32 31  key.and up to 21
62e0: 34 37 34 38 33 36 34 37 20 62 79 74 65 73 20 6f  47483647 bytes o
62f0: 66 20 61 72 62 69 74 72 61 72 79 20 64 61 74 61  f arbitrary data
6300: 2e 20 20 28 54 68 65 20 6b 65 79 20 6f 66 20 61  .  (The key of a
6310: 20 74 61 62 6c 65 20 62 2d 74 72 65 65 0a 63 6f   table b-tree.co
6320: 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65  rresponds to the
6330: 20 5b 72 6f 77 69 64 5d 20 6f 66 20 74 68 65 20   [rowid] of the 
6340: 53 51 4c 20 74 61 62 6c 65 20 74 68 61 74 20 74  SQL table that t
6350: 68 65 20 62 2d 74 72 65 65 20 69 6d 70 6c 65 6d  he b-tree implem
6360: 65 6e 74 73 2e 29 0a 49 6e 74 65 72 69 6f 72 20  ents.).Interior 
6370: 74 61 62 6c 65 20 62 2d 74 72 65 65 73 20 68 6f  table b-trees ho
6380: 6c 64 20 6f 6e 6c 79 20 6b 65 79 73 20 61 6e 64  ld only keys and
6390: 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 63 68 69   pointers to chi
63a0: 6c 64 72 65 6e 2e 0a 41 6c 6c 20 64 61 74 61 20  ldren..All data 
63b0: 69 73 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20  is contained in 
63c0: 74 68 65 20 74 61 62 6c 65 20 62 2d 74 72 65 65  the table b-tree
63d0: 20 6c 65 61 76 65 73 2e 3c 2f 70 3e 0a 0a 3c 70   leaves.</p>..<p
63e0: 3e 45 61 63 68 20 65 6e 74 72 79 20 69 6e 20 61  >Each entry in a
63f0: 6e 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20 63  n index b-tree c
6400: 6f 6e 73 69 73 74 73 20 6f 66 20 61 6e 20 61 72  onsists of an ar
6410: 62 69 74 72 61 72 79 20 6b 65 79 20 6f 66 20 75  bitrary key of u
6420: 70 0a 74 6f 20 32 31 34 37 34 38 33 36 34 37 20  p.to 2147483647 
6430: 62 79 74 65 73 20 69 6e 20 6c 65 6e 67 74 68 20  bytes in length 
6440: 61 6e 64 20 6e 6f 20 64 61 74 61 2e 3c 2f 70 3e  and no data.</p>
6450: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
6460: 6e 74 20 63 65 6c 6c 5f 70 61 79 6c 6f 61 64 20  nt cell_payload 
6470: 7b 63 65 6c 6c 20 70 61 79 6c 6f 61 64 7d 3c 2f  {cell payload}</
6480: 74 63 6c 3e 0a 3c 70 3e 44 65 66 69 6e 65 20 74  tcl>.<p>Define t
6490: 68 65 20 22 70 61 79 6c 6f 61 64 22 20 6f 66 20  he "payload" of 
64a0: 61 20 63 65 6c 6c 20 74 6f 20 62 65 20 74 68 65  a cell to be the
64b0: 20 61 72 62 69 74 72 61 72 79 20 6c 65 6e 67 74   arbitrary lengt
64c0: 68 20 73 65 63 74 69 6f 6e 0a 6f 66 20 74 68 65  h section.of the
64d0: 20 63 65 6c 6c 2e 20 20 46 6f 72 20 61 6e 20 69   cell.  For an i
64e0: 6e 64 65 78 20 62 2d 74 72 65 65 2c 20 74 68 65  ndex b-tree, the
64f0: 20 6b 65 79 20 69 73 20 61 6c 77 61 79 73 20 61   key is always a
6500: 72 62 69 74 72 61 72 79 20 69 6e 20 6c 65 6e 67  rbitrary in leng
6510: 74 68 0a 61 6e 64 20 68 65 6e 63 65 20 74 68 65  th.and hence the
6520: 20 70 61 79 6c 6f 61 64 20 69 73 20 74 68 65 20   payload is the 
6530: 6b 65 79 2e 20 20 54 68 65 72 65 20 61 72 65 20  key.  There are 
6540: 6e 6f 20 61 72 62 69 74 72 61 72 79 20 6c 65 6e  no arbitrary len
6550: 67 74 68 20 65 6c 65 6d 65 6e 74 73 0a 69 6e 20  gth elements.in 
6560: 74 68 65 20 63 65 6c 6c 73 20 6f 66 20 69 6e 74  the cells of int
6570: 65 72 69 6f 72 20 74 61 62 6c 65 20 62 2d 74 72  erior table b-tr
6580: 65 65 20 70 61 67 65 73 20 61 6e 64 20 73 6f 20  ee pages and so 
6590: 74 68 6f 73 65 20 63 65 6c 6c 73 20 68 61 76 65  those cells have
65a0: 20 6e 6f 0a 70 61 79 6c 6f 61 64 2e 20 20 54 61   no.payload.  Ta
65b0: 62 6c 65 20 62 2d 74 72 65 65 20 6c 65 61 66 20  ble b-tree leaf 
65c0: 70 61 67 65 73 20 63 6f 6e 74 61 69 6e 20 61 72  pages contain ar
65d0: 62 69 74 72 61 72 79 20 6c 65 6e 67 74 68 20 63  bitrary length c
65e0: 6f 6e 74 65 6e 74 20 61 6e 64 0a 73 6f 20 66 6f  ontent and.so fo
65f0: 72 20 63 65 6c 6c 73 20 6f 6e 20 74 68 6f 73 65  r cells on those
6600: 20 70 61 67 65 73 20 74 68 65 20 70 61 79 6c 6f   pages the paylo
6610: 61 64 20 69 73 20 74 68 65 20 63 6f 6e 74 65 6e  ad is the conten
6620: 74 2e 0a 3c 70 3e 57 68 65 6e 20 74 68 65 20 73  t..<p>When the s
6630: 69 7a 65 20 6f 66 20 70 61 79 6c 6f 61 64 20 66  ize of payload f
6640: 6f 72 20 61 20 63 65 6c 6c 20 65 78 63 65 65 64  or a cell exceed
6650: 73 20 61 20 63 65 72 74 61 69 6e 20 74 68 72 65  s a certain thre
6660: 73 68 6f 6c 64 20 28 74 6f 0a 62 65 20 64 65 66  shold (to.be def
6670: 69 6e 65 64 20 6c 61 74 65 72 29 20 74 68 65 6e  ined later) then
6680: 20 6f 6e 6c 79 20 74 68 65 20 66 69 72 73 74 20   only the first 
6690: 66 65 77 20 62 79 74 65 73 20 6f 66 20 74 68 65  few bytes of the
66a0: 20 70 61 79 6c 6f 61 64 0a 61 72 65 20 73 74 6f   payload.are sto
66b0: 72 65 64 20 6f 6e 20 74 68 65 20 62 2d 74 72 65  red on the b-tre
66c0: 65 20 70 61 67 65 20 61 6e 64 20 74 68 65 20 62  e page and the b
66d0: 61 6c 61 6e 63 65 20 69 73 20 73 74 6f 72 65 64  alance is stored
66e0: 20 69 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73   in a linked lis
66f0: 74 0a 6f 66 20 63 6f 6e 74 65 6e 74 20 6f 76 65  t.of content ove
6700: 72 66 6c 6f 77 20 70 61 67 65 73 2e 3c 2f 70 3e  rflow pages.</p>
6710: 0a 0a 3c 70 3e 41 20 62 2d 74 72 65 65 20 70 61  ..<p>A b-tree pa
6720: 67 65 20 69 73 20 64 69 76 69 64 65 64 20 69 6e  ge is divided in
6730: 74 6f 20 72 65 67 69 6f 6e 73 20 69 6e 20 74 68  to regions in th
6740: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6f 72 64 65  e following orde
6750: 72 3a 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 54 68 65  r:..<ol>.<li>The
6760: 20 31 30 30 2d 62 79 74 65 20 64 61 74 61 62 61   100-byte databa
6770: 73 65 20 66 69 6c 65 20 68 65 61 64 65 72 20 28  se file header (
6780: 66 6f 75 6e 64 20 6f 6e 20 70 61 67 65 20 31 20  found on page 1 
6790: 6f 6e 6c 79 29 0a 3c 6c 69 3e 54 68 65 20 38 20  only).<li>The 8 
67a0: 6f 72 20 31 32 20 62 79 74 65 20 62 2d 74 72 65  or 12 byte b-tre
67b0: 65 20 70 61 67 65 20 68 65 61 64 65 72 0a 3c 6c  e page header.<l
67c0: 69 3e 54 68 65 20 63 65 6c 6c 20 70 6f 69 6e 74  i>The cell point
67d0: 65 72 20 61 72 72 61 79 0a 3c 6c 69 3e 55 6e 61  er array.<li>Una
67e0: 6c 6c 6f 63 61 74 65 64 20 73 70 61 63 65 0a 3c  llocated space.<
67f0: 6c 69 3e 54 68 65 20 63 65 6c 6c 20 63 6f 6e 74  li>The cell cont
6800: 65 6e 74 20 61 72 65 61 0a 3c 6c 69 3e 54 68 65  ent area.<li>The
6810: 20 72 65 73 65 72 76 65 64 20 72 65 67 69 6f 6e   reserved region
6820: 2e 0a 3c 2f 6f 6c 3e 0a 3c 2f 70 3e 0a 0a 3c 70  ..</ol>.</p>..<p
6830: 3e 54 68 65 20 31 30 30 2d 62 79 74 65 20 64 61  >The 100-byte da
6840: 74 61 62 61 73 65 20 66 69 6c 65 20 68 65 61 64  tabase file head
6850: 65 72 20 69 73 20 66 6f 75 6e 64 20 6f 6e 6c 79  er is found only
6860: 20 6f 6e 20 70 61 67 65 20 31 2c 20 77 68 69 63   on page 1, whic
6870: 68 20 69 73 0a 61 6c 77 61 79 73 20 61 20 74 61  h is.always a ta
6880: 62 6c 65 20 62 2d 74 72 65 65 20 70 61 67 65 2e  ble b-tree page.
6890: 20 20 41 6c 6c 20 6f 74 68 65 72 20 62 2d 74 72    All other b-tr
68a0: 65 65 20 70 61 67 65 73 20 69 6e 20 74 68 65 20  ee pages in the 
68b0: 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 6f 6d  database file.om
68c0: 69 74 20 74 68 69 73 20 31 30 30 2d 62 79 74 65  it this 100-byte
68d0: 20 68 65 61 64 65 72 2e 3c 2f 70 3e 0a 0a 3c 70   header.</p>..<p
68e0: 3e 54 68 65 20 72 65 73 65 72 76 65 64 20 72 65  >The reserved re
68f0: 67 69 6f 6e 20 69 73 20 61 6e 20 61 72 65 61 20  gion is an area 
6900: 6f 66 20 75 6e 75 73 65 64 20 73 70 61 63 65 20  of unused space 
6910: 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 65 76  at the end of ev
6920: 65 72 79 0a 70 61 67 65 20 28 65 78 63 65 70 74  ery.page (except
6930: 20 74 68 65 20 6c 6f 63 6b 69 6e 67 20 70 61 67   the locking pag
6940: 65 29 20 74 68 61 74 20 65 78 74 65 6e 73 69 6f  e) that extensio
6950: 6e 73 20 63 61 6e 20 75 73 65 20 74 6f 20 68 6f  ns can use to ho
6960: 6c 64 20 70 65 72 2d 70 61 67 65 0a 69 6e 66 6f  ld per-page.info
6970: 72 6d 61 74 69 6f 6e 2e 20 20 5e 54 68 65 20 73  rmation.  ^The s
6980: 69 7a 65 20 6f 66 20 74 68 65 20 72 65 73 65 72  ize of the reser
6990: 76 65 64 20 72 65 67 69 6f 6e 20 69 73 20 64 65  ved region is de
69a0: 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20  termined by the 
69b0: 6f 6e 65 2d 62 79 74 65 0a 75 6e 73 69 67 6e 65  one-byte.unsigne
69c0: 64 20 69 6e 74 65 67 65 72 20 66 6f 75 6e 64 20  d integer found 
69d0: 61 74 20 61 6e 20 6f 66 66 73 65 74 20 6f 66 20  at an offset of 
69e0: 32 30 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61  20 into the data
69f0: 62 61 73 65 20 66 69 6c 65 20 68 65 61 64 65 72  base file header
6a00: 2e 0a 54 68 65 20 73 69 7a 65 20 6f 66 20 74 68  ..The size of th
6a10: 65 20 72 65 73 65 72 76 65 64 20 72 65 67 69 6f  e reserved regio
6a20: 6e 20 69 73 20 75 73 75 61 6c 6c 79 20 7a 65 72  n is usually zer
6a30: 6f 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 62  o.</p>..<p>The b
6a40: 2d 74 72 65 65 20 70 61 67 65 20 68 65 61 64 65  -tree page heade
6a50: 72 20 69 73 20 38 20 62 79 74 65 73 20 69 6e 20  r is 8 bytes in 
6a60: 73 69 7a 65 20 66 6f 72 20 6c 65 61 66 20 70 61  size for leaf pa
6a70: 67 65 73 20 61 6e 64 20 31 32 0a 62 79 74 65 73  ges and 12.bytes
6a80: 20 66 6f 72 20 69 6e 74 65 72 69 6f 72 20 70 61   for interior pa
6a90: 67 65 73 2e 20 20 41 6c 6c 20 6d 75 6c 74 69 62  ges.  All multib
6aa0: 79 74 65 20 76 61 6c 75 65 73 20 69 6e 20 74 68  yte values in th
6ab0: 65 20 70 61 67 65 20 68 65 61 64 65 72 0a 61 72  e page header.ar
6ac0: 65 20 62 69 67 2d 65 6e 64 69 61 6e 2e 0a 54 68  e big-endian..Th
6ad0: 65 20 62 2d 74 72 65 65 20 70 61 67 65 20 68 65  e b-tree page he
6ae0: 61 64 65 72 20 69 73 20 63 6f 6d 70 6f 73 65 64  ader is composed
6af0: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
6b00: 67 20 66 69 65 6c 64 73 3a 3c 2f 70 3e 0a 0a 3c  g fields:</p>..<
6b10: 63 65 6e 74 65 72 3e 0a 3c 69 3e 42 2d 74 72 65  center>.<i>B-tre
6b20: 65 20 50 61 67 65 20 48 65 61 64 65 72 20 46 6f  e Page Header Fo
6b30: 72 6d 61 74 3c 2f 69 3e 3c 62 72 3e 0a 3c 74 61  rmat</i><br>.<ta
6b40: 62 6c 65 20 62 6f 72 64 65 72 3d 31 20 77 69 64  ble border=1 wid
6b50: 74 68 3d 22 38 30 25 22 3e 0a 3c 74 72 3e 3c 74  th="80%">.<tr><t
6b60: 68 3e 4f 66 66 73 65 74 3c 74 68 3e 53 69 7a 65  h>Offset<th>Size
6b70: 3c 74 68 3e 44 65 73 63 72 69 70 74 69 6f 6e 0a  <th>Description.
6b80: 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65  <tr><td align=ce
6b90: 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e  nter valign=top>
6ba0: 30 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65  0<td align=cente
6bb0: 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 31 3c 74  r valign=top>1<t
6bc0: 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 41 20  d align=left>.A 
6bd0: 66 6c 61 67 20 69 6e 64 69 63 61 74 69 6e 67 20  flag indicating 
6be0: 74 68 65 20 62 2d 74 72 65 65 20 70 61 67 65 20  the b-tree page 
6bf0: 74 79 70 65 0a 5e 41 20 76 61 6c 75 65 20 6f 66  type.^A value of
6c00: 20 32 20 6d 65 61 6e 73 20 74 68 65 20 70 61 67   2 means the pag
6c10: 65 20 69 73 20 61 6e 20 69 6e 74 65 72 69 6f 72  e is an interior
6c20: 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20 70 61   index b-tree pa
6c30: 67 65 2e 0a 5e 41 20 76 61 6c 75 65 20 6f 66 20  ge..^A value of 
6c40: 35 20 6d 65 61 6e 73 20 74 68 65 20 70 61 67 65  5 means the page
6c50: 20 69 73 20 61 6e 20 69 6e 74 65 72 69 6f 72 20   is an interior 
6c60: 74 61 62 6c 65 20 62 2d 74 72 65 65 20 70 61 67  table b-tree pag
6c70: 65 2e 0a 5e 41 20 76 61 6c 75 65 20 6f 66 20 31  e..^A value of 1
6c80: 30 20 6d 65 61 6e 73 20 74 68 65 20 70 61 67 65  0 means the page
6c90: 20 69 73 20 61 20 6c 65 61 66 20 69 6e 64 65 78   is a leaf index
6ca0: 20 62 2d 74 72 65 65 20 70 61 67 65 2e 0a 5e 41   b-tree page..^A
6cb0: 20 76 61 6c 75 65 20 6f 66 20 31 33 20 6d 65 61   value of 13 mea
6cc0: 6e 73 20 74 68 65 20 70 61 67 65 20 69 73 20 61  ns the page is a
6cd0: 20 6c 65 61 66 20 74 61 62 6c 65 20 62 2d 74 72   leaf table b-tr
6ce0: 65 65 20 70 61 67 65 2e 0a 5e 41 6e 79 20 6f 74  ee page..^Any ot
6cf0: 68 65 72 20 76 61 6c 75 65 20 66 6f 72 20 74 68  her value for th
6d00: 65 20 62 2d 74 72 65 65 20 70 61 67 65 20 74 79  e b-tree page ty
6d10: 70 65 20 69 73 20 61 6e 20 65 72 72 6f 72 2e 0a  pe is an error..
6d20: 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65  <tr><td align=ce
6d30: 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e  nter valign=top>
6d40: 31 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65  1<td align=cente
6d50: 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 32 3c 74  r valign=top>2<t
6d60: 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 42 79  d align=left>.By
6d70: 74 65 20 6f 66 66 73 65 74 20 69 6e 74 6f 20 74  te offset into t
6d80: 68 65 20 70 61 67 65 20 6f 66 20 74 68 65 20 66  he page of the f
6d90: 69 72 73 74 20 66 72 65 65 62 6c 6f 63 6b 0a 3c  irst freeblock.<
6da0: 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e  tr><td align=cen
6db0: 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 33  ter valign=top>3
6dc0: 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  <td align=center
6dd0: 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 32 3c 74 64   valign=top>2<td
6de0: 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 4e 75 6d   align=left>.Num
6df0: 62 65 72 20 6f 66 20 63 65 6c 6c 73 20 6f 6e 20  ber of cells on 
6e00: 74 68 69 73 20 70 61 67 65 0a 3c 74 72 3e 3c 74  this page.<tr><t
6e10: 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76  d align=center v
6e20: 61 6c 69 67 6e 3d 74 6f 70 3e 35 3c 74 64 20 61  align=top>5<td a
6e30: 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69  lign=center vali
6e40: 67 6e 3d 74 6f 70 3e 32 3c 74 64 20 61 6c 69 67  gn=top>2<td alig
6e50: 6e 3d 6c 65 66 74 3e 0a 4f 66 66 73 65 74 20 74  n=left>.Offset t
6e60: 6f 20 74 68 65 20 66 69 72 73 74 20 62 79 74 65  o the first byte
6e70: 20 6f 66 20 74 68 65 20 63 65 6c 6c 20 63 6f 6e   of the cell con
6e80: 74 65 6e 74 20 61 72 65 61 2e 20 20 41 20 7a 65  tent area.  A ze
6e90: 72 6f 20 76 61 6c 75 65 20 69 73 20 75 73 65 64  ro value is used
6ea0: 20 74 6f 20 72 65 70 72 65 73 65 6e 74 20 61 6e   to represent an
6eb0: 20 6f 66 66 73 65 74 20 6f 66 20 36 35 35 33 36   offset of 65536
6ec0: 2c 20 77 68 69 63 68 20 6f 63 63 75 72 73 20 6f  , which occurs o
6ed0: 6e 20 61 6e 20 65 6d 70 74 79 20 72 6f 6f 74 20  n an empty root 
6ee0: 70 61 67 65 20 77 68 65 6e 20 75 73 69 6e 67 20  page when using 
6ef0: 61 20 36 35 35 33 36 2d 62 79 74 65 20 70 61 67  a 65536-byte pag
6f00: 65 20 73 69 7a 65 2e 0a 3c 74 72 3e 3c 74 64 20  e size..<tr><td 
6f10: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c  align=center val
6f20: 69 67 6e 3d 74 6f 70 3e 37 3c 74 64 20 61 6c 69  ign=top>7<td ali
6f30: 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e  gn=center valign
6f40: 3d 74 6f 70 3e 31 3c 74 64 20 61 6c 69 67 6e 3d  =top>1<td align=
6f50: 6c 65 66 74 3e 0a 4e 75 6d 62 65 72 20 6f 66 20  left>.Number of 
6f60: 66 72 61 67 6d 65 6e 74 65 64 20 66 72 65 65 20  fragmented free 
6f70: 62 79 74 65 73 20 77 69 74 68 69 6e 20 74 68 65  bytes within the
6f80: 20 63 65 6c 6c 20 63 6f 6e 74 65 6e 74 20 61 72   cell content ar
6f90: 65 61 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e  ea.<tr><td align
6fa0: 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74  =center valign=t
6fb0: 6f 70 3e 38 3c 74 64 20 61 6c 69 67 6e 3d 63 65  op>8<td align=ce
6fc0: 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e  nter valign=top>
6fd0: 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e  4<td align=left>
6fe0: 0a 54 68 65 20 72 69 67 68 74 2d 6d 6f 73 74 20  .The right-most 
6ff0: 70 6f 69 6e 74 65 72 20 28 69 6e 74 65 72 69 6f  pointer (interio
7000: 72 20 62 2d 74 72 65 65 20 70 61 67 65 73 20 6f  r b-tree pages o
7010: 6e 6c 79 29 0a 3c 2f 74 61 62 6c 65 3e 3c 2f 62  nly).</table></b
7020: 6c 6f 63 6b 71 75 6f 74 65 3e 3c 2f 63 65 6e 74  lockquote></cent
7030: 65 72 3e 0a 0a 3c 70 3e 5e 54 68 65 20 63 65 6c  er>..<p>^The cel
7040: 6c 20 70 6f 69 6e 74 65 72 20 61 72 72 61 79 20  l pointer array 
7050: 6f 66 20 61 20 62 2d 74 72 65 65 20 70 61 67 65  of a b-tree page
7060: 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c   immediately fol
7070: 6c 6f 77 73 20 74 68 65 20 62 2d 74 72 65 65 0a  lows the b-tree.
7080: 70 61 67 65 20 68 65 61 64 65 72 2e 20 20 4c 65  page header.  Le
7090: 74 20 4b 20 62 65 20 74 68 65 20 6e 75 6d 62 65  t K be the numbe
70a0: 72 20 6f 66 20 63 65 6c 6c 73 20 6f 6e 20 74 68  r of cells on th
70b0: 65 20 62 74 72 65 65 2e 20 20 5e 54 68 65 20 63  e btree.  ^The c
70c0: 65 6c 6c 20 70 6f 69 6e 74 65 72 0a 61 72 72 61  ell pointer.arra
70d0: 79 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 4b 20  y consists of K 
70e0: 32 2d 62 79 74 65 20 69 6e 74 65 67 65 72 20 6f  2-byte integer o
70f0: 66 66 73 65 74 73 20 74 6f 20 74 68 65 20 63 65  ffsets to the ce
7100: 6c 6c 20 63 6f 6e 74 65 6e 74 73 2e 20 20 5e 54  ll contents.  ^T
7110: 68 65 0a 63 65 6c 6c 20 70 6f 69 6e 74 65 72 73  he.cell pointers
7120: 20 61 72 65 20 61 72 72 61 6e 67 65 64 20 69 6e   are arranged in
7130: 20 6b 65 79 20 6f 72 64 65 72 20 77 69 74 68 20   key order with 
7140: 6c 65 66 74 2d 6d 6f 73 74 20 63 65 6c 6c 20 28  left-most cell (
7150: 74 68 65 20 63 65 6c 6c 20 77 69 74 68 20 74 68  the cell with th
7160: 65 0a 73 6d 61 6c 6c 65 73 74 20 6b 65 79 29 20  e.smallest key) 
7170: 66 69 72 73 74 20 61 6e 64 20 74 68 65 20 72 69  first and the ri
7180: 67 68 74 2d 6d 6f 73 74 20 63 65 6c 6c 20 28 74  ght-most cell (t
7190: 68 65 20 63 65 6c 6c 20 77 69 74 68 20 74 68 65  he cell with the
71a0: 20 6c 61 72 67 65 73 74 0a 6b 65 79 29 20 6c 61   largest.key) la
71b0: 73 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 43 65 6c 6c  st.</p>..<p>Cell
71c0: 20 63 6f 6e 74 65 6e 74 20 69 73 20 73 74 6f 72   content is stor
71d0: 65 64 20 69 6e 20 74 68 65 20 63 65 6c 6c 20 63  ed in the cell c
71e0: 6f 6e 74 65 6e 74 20 72 65 67 69 6f 6e 20 6f 66  ontent region of
71f0: 20 74 68 65 20 62 2d 74 72 65 65 20 70 61 67 65   the b-tree page
7200: 2e 0a 53 51 4c 69 74 65 20 73 74 72 69 76 65 73  ..SQLite strives
7210: 20 74 6f 20 70 6c 61 63 65 20 63 65 6c 6c 73 20   to place cells 
7220: 61 73 20 66 61 72 20 74 6f 77 61 72 64 20 74 68  as far toward th
7230: 65 20 65 6e 64 20 6f 66 20 74 68 65 20 62 2d 74  e end of the b-t
7240: 72 65 65 20 70 61 67 65 20 61 73 0a 69 74 20 63  ree page as.it c
7250: 61 6e 2c 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  an, in order to 
7260: 6c 65 61 76 65 20 73 70 61 63 65 20 66 6f 72 20  leave space for 
7270: 66 75 74 75 72 65 20 67 72 6f 77 74 68 20 6f 66  future growth of
7280: 20 74 68 65 20 63 65 6c 6c 20 70 6f 69 6e 74 65   the cell pointe
7290: 72 20 61 72 72 61 79 2e 0a 54 68 65 20 61 72 65  r array..The are
72a0: 61 20 69 6e 20 62 65 74 77 65 65 6e 20 74 68 65  a in between the
72b0: 20 6c 61 73 74 20 63 65 6c 6c 20 70 6f 69 6e 74   last cell point
72c0: 65 72 20 61 72 72 61 79 20 65 6e 74 72 79 20 61  er array entry a
72d0: 6e 64 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  nd the beginning
72e0: 20 6f 66 0a 74 68 65 20 66 69 72 73 74 20 63 65   of.the first ce
72f0: 6c 6c 20 69 73 20 74 68 65 20 75 6e 61 6c 6c 6f  ll is the unallo
7300: 63 61 74 65 64 20 72 65 67 69 6f 6e 2e 0a 3c 2f  cated region..</
7310: 70 3e 0a 0a 3c 70 3e 5e 49 66 20 61 20 70 61 67  p>..<p>^If a pag
7320: 65 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 63 65  e contains no ce
7330: 6c 6c 73 20 28 77 68 69 63 68 20 69 73 20 6f 6e  lls (which is on
7340: 6c 79 20 70 6f 73 73 69 62 6c 65 20 66 6f 72 20  ly possible for 
7350: 61 20 72 6f 6f 74 20 70 61 67 65 0a 6f 66 20 61  a root page.of a
7360: 20 74 61 62 6c 65 20 74 68 61 74 20 63 6f 6e 74   table that cont
7370: 61 69 6e 73 20 6e 6f 20 72 6f 77 73 29 20 74 68  ains no rows) th
7380: 65 6e 20 74 68 65 20 6f 66 66 73 65 74 20 74 6f  en the offset to
7390: 20 74 68 65 20 63 65 6c 6c 20 63 6f 6e 74 65 6e   the cell conten
73a0: 74 0a 61 72 65 61 20 77 69 6c 6c 20 65 71 75 61  t.area will equa
73b0: 6c 20 74 68 65 20 70 61 67 65 20 73 69 7a 65 20  l the page size 
73c0: 6d 69 6e 75 73 20 74 68 65 20 62 79 74 65 73 20  minus the bytes 
73d0: 6f 66 20 72 65 73 65 72 76 65 64 20 73 70 61 63  of reserved spac
73e0: 65 2e 20 20 5e 28 49 66 0a 74 68 65 20 64 61 74  e.  ^(If.the dat
73f0: 61 62 61 73 65 20 75 73 65 73 20 61 20 36 35 35  abase uses a 655
7400: 33 36 2d 62 79 74 65 20 70 61 67 65 20 73 69 7a  36-byte page siz
7410: 65 20 61 6e 64 20 74 68 65 20 72 65 73 65 72 76  e and the reserv
7420: 65 64 20 73 70 61 63 65 20 69 73 20 7a 65 72 6f  ed space is zero
7430: 0a 28 74 68 65 20 75 73 75 61 6c 20 76 61 6c 75  .(the usual valu
7440: 65 20 66 6f 72 20 72 65 73 65 72 76 65 64 20 73  e for reserved s
7450: 70 61 63 65 29 20 74 68 65 6e 20 74 68 65 20 63  pace) then the c
7460: 65 6c 6c 20 63 6f 6e 74 65 6e 74 20 6f 66 66 73  ell content offs
7470: 65 74 20 6f 66 20 61 6e 0a 65 6d 70 74 79 20 70  et of an.empty p
7480: 61 67 65 20 77 61 6e 74 73 20 74 6f 20 62 65 20  age wants to be 
7490: 36 35 35 33 36 2e 20 20 0a 48 6f 77 65 76 65 72  65536.  .However
74a0: 2c 20 74 68 61 74 20 69 6e 74 65 67 65 72 20 69  , that integer i
74b0: 73 20 74 6f 6f 20 6c 61 72 67 65 20 74 6f 20 62  s too large to b
74c0: 65 20 73 74 6f 72 65 64 20 69 6e 20 61 0a 32 2d  e stored in a.2-
74d0: 62 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e  byte unsigned in
74e0: 74 65 67 65 72 2c 20 73 6f 20 61 20 76 61 6c 75  teger, so a valu
74f0: 65 20 6f 66 20 30 20 69 73 20 75 73 65 64 20 69  e of 0 is used i
7500: 6e 20 69 74 73 20 70 6c 61 63 65 2e 29 5e 0a 0a  n its place.)^..
7510: 3c 70 3e 41 20 66 72 65 65 62 6c 6f 63 6b 20 69  <p>A freeblock i
7520: 73 20 61 20 73 74 72 75 63 74 75 72 65 20 75 73  s a structure us
7530: 65 64 20 74 6f 20 69 64 65 6e 74 69 66 79 20 75  ed to identify u
7540: 6e 61 6c 6c 6f 63 61 74 65 64 20 73 70 61 63 65  nallocated space
7550: 20 77 69 74 68 69 6e 0a 61 20 62 2d 74 72 65 65   within.a b-tree
7560: 20 70 61 67 65 2e 20 20 46 72 65 65 62 6c 6f 63   page.  Freebloc
7570: 6b 73 20 61 72 65 20 6f 72 67 61 6e 69 7a 65 64  ks are organized
7580: 20 61 73 20 61 20 63 68 61 69 6e 2e 20 20 5e 54   as a chain.  ^T
7590: 68 65 20 66 69 72 73 74 20 32 20 62 79 74 65 73  he first 2 bytes
75a0: 20 6f 66 0a 61 20 66 72 65 65 62 6c 6f 63 6b 20   of.a freeblock 
75b0: 61 72 65 20 61 20 62 69 67 2d 65 6e 64 69 61 6e  are a big-endian
75c0: 20 69 6e 74 65 67 65 72 20 77 68 69 63 68 20 69   integer which i
75d0: 73 20 74 68 65 20 6f 66 66 73 65 74 20 69 6e 20  s the offset in 
75e0: 74 68 65 20 62 2d 74 72 65 65 20 70 61 67 65 0a  the b-tree page.
75f0: 6f 66 20 74 68 65 20 6e 65 78 74 20 66 72 65 65  of the next free
7600: 62 6c 6f 63 6b 20 69 6e 20 74 68 65 20 63 68 61  block in the cha
7610: 69 6e 2c 20 6f 72 20 7a 65 72 6f 20 69 66 20 74  in, or zero if t
7620: 68 65 20 66 72 65 65 62 6c 6f 63 6b 20 69 73 20  he freeblock is 
7630: 74 68 65 20 6c 61 73 74 20 6f 6e 0a 74 68 65 20  the last on.the 
7640: 63 68 61 69 6e 2e 20 20 5e 54 68 65 20 74 68 69  chain.  ^The thi
7650: 72 64 20 61 6e 64 20 66 6f 75 72 74 68 20 62 79  rd and fourth by
7660: 74 65 73 20 6f 66 20 65 61 63 68 20 66 72 65 65  tes of each free
7670: 62 6c 6f 63 6b 20 66 6f 72 6d 0a 61 20 62 69 67  block form.a big
7680: 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20  -endian integer 
7690: 77 68 69 63 68 20 69 73 20 74 68 65 20 73 69 7a  which is the siz
76a0: 65 20 6f 66 20 74 68 65 20 66 72 65 65 62 6c 6f  e of the freeblo
76b0: 63 6b 20 69 6e 20 62 79 74 65 73 2c 20 69 6e 63  ck in bytes, inc
76c0: 6c 75 64 69 6e 67 0a 74 68 65 20 34 2d 62 79 74  luding.the 4-byt
76d0: 65 20 68 65 61 64 65 72 2e 20 20 5e 46 72 65 65  e header.  ^Free
76e0: 62 6c 6f 63 6b 73 20 61 72 65 20 61 6c 77 61 79  blocks are alway
76f0: 73 20 63 6f 6e 6e 65 63 74 65 64 20 69 6e 20 6f  s connected in o
7700: 72 64 65 72 20 0a 6f 66 20 69 6e 63 72 65 61 73  rder .of increas
7710: 69 6e 67 20 6f 66 66 73 65 74 2e 20 20 5e 54 68  ing offset.  ^Th
7720: 65 20 73 65 63 6f 6e 64 20 66 69 65 6c 64 20 6f  e second field o
7730: 66 20 74 68 65 20 62 2d 74 72 65 65 20 70 61 67  f the b-tree pag
7740: 65 20 68 65 61 64 65 72 20 69 73 20 74 68 65 0a  e header is the.
7750: 6f 66 66 73 65 74 20 6f 66 20 74 68 65 20 66 69  offset of the fi
7760: 72 73 74 20 66 72 65 65 62 6c 6f 63 6b 2c 20 6f  rst freeblock, o
7770: 72 20 7a 65 72 6f 20 69 66 20 74 68 65 72 65 20  r zero if there 
7780: 61 72 65 20 6e 6f 20 66 72 65 65 62 6c 6f 63 6b  are no freeblock
7790: 73 20 6f 6e 20 74 68 65 0a 70 61 67 65 2e 20 20  s on the.page.  
77a0: 5e 49 6e 20 61 20 77 65 6c 6c 2d 66 6f 72 6d 65  ^In a well-forme
77b0: 64 20 62 2d 74 72 65 65 20 70 61 67 65 2c 20 74  d b-tree page, t
77c0: 68 65 72 65 20 77 69 6c 6c 20 61 6c 77 61 79 73  here will always
77d0: 20 62 65 20 61 74 20 6c 65 61 73 74 20 6f 6e 65   be at least one
77e0: 20 63 65 6c 6c 0a 62 65 66 6f 72 65 20 74 68 65   cell.before the
77f0: 20 66 69 72 73 74 20 66 72 65 65 62 6c 6f 63 6b   first freeblock
7800: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 20 66 72 65 65  .</p>..<p>A free
7810: 62 6c 6f 63 6b 20 72 65 71 75 69 72 65 73 20 61  block requires a
7820: 74 20 6c 65 61 73 74 20 34 20 62 79 74 65 73 20  t least 4 bytes 
7830: 6f 66 20 73 70 61 63 65 2e 20 20 49 66 20 74 68  of space.  If th
7840: 65 72 65 20 69 73 20 61 6e 20 69 73 6f 6c 61 74  ere is an isolat
7850: 65 64 0a 67 72 6f 75 70 20 6f 66 20 31 2c 20 32  ed.group of 1, 2
7860: 2c 20 6f 72 20 33 20 75 6e 75 73 65 64 20 62 79  , or 3 unused by
7870: 74 65 73 20 77 69 74 68 69 6e 20 74 68 65 20 63  tes within the c
7880: 65 6c 6c 20 63 6f 6e 74 65 6e 74 20 61 72 65 61  ell content area
7890: 2c 20 74 68 6f 73 65 20 62 79 74 65 73 0a 63 6f  , those bytes.co
78a0: 6d 70 72 69 73 65 20 61 20 66 72 61 67 6d 65 6e  mprise a fragmen
78b0: 74 2e 20 20 5e 54 68 65 20 74 6f 74 61 6c 20 6e  t.  ^The total n
78c0: 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 69  umber of bytes i
78d0: 6e 20 61 6c 6c 20 66 72 61 67 6d 65 6e 74 73 20  n all fragments 
78e0: 69 73 20 73 74 6f 72 65 64 0a 69 6e 20 74 68 65  is stored.in the
78f0: 20 66 69 66 74 68 20 66 69 65 6c 64 20 6f 66 20   fifth field of 
7900: 74 68 65 20 62 2d 74 72 65 65 20 70 61 67 65 20  the b-tree page 
7910: 68 65 61 64 65 72 2e 20 20 5e 49 6e 20 61 20 77  header.  ^In a w
7920: 65 6c 6c 2d 66 6f 72 6d 65 64 20 62 2d 74 72 65  ell-formed b-tre
7930: 65 20 70 61 67 65 2c 0a 74 68 65 20 74 6f 74 61  e page,.the tota
7940: 6c 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  l number of byte
7950: 73 20 69 6e 20 66 72 61 67 6d 65 6e 74 73 20 6d  s in fragments m
7960: 61 79 20 6e 6f 74 20 65 78 63 65 65 64 20 36 30  ay not exceed 60
7970: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 74 6f  .</p>..<p>The to
7980: 74 61 6c 20 61 6d 6f 75 6e 74 20 6f 66 20 66 72  tal amount of fr
7990: 65 65 20 73 70 61 63 65 20 6f 6e 20 61 20 62 2d  ee space on a b-
79a0: 74 72 65 65 20 70 61 67 65 20 63 6f 6e 73 69 73  tree page consis
79b0: 74 73 20 6f 66 20 74 68 65 20 73 69 7a 65 0a 6f  ts of the size.o
79c0: 66 20 74 68 65 20 75 6e 61 6c 6c 6f 63 61 74 65  f the unallocate
79d0: 64 20 72 65 67 69 6f 6e 20 70 6c 75 73 20 74 68  d region plus th
79e0: 65 20 74 6f 74 61 6c 20 73 69 7a 65 20 6f 66 20  e total size of 
79f0: 61 6c 6c 20 66 72 65 65 62 6c 6f 63 6b 73 20 70  all freeblocks p
7a00: 6c 75 73 20 74 68 65 0a 6e 75 6d 62 65 72 20 6f  lus the.number o
7a10: 66 20 66 72 61 67 6d 65 6e 74 65 64 20 66 72 65  f fragmented fre
7a20: 65 20 62 79 74 65 73 2e 20 20 5e 53 51 4c 69 74  e bytes.  ^SQLit
7a30: 65 20 6d 61 79 20 66 72 6f 6d 20 74 69 6d 65 20  e may from time 
7a40: 74 6f 20 74 69 6d 65 20 72 65 6f 72 67 61 6e 69  to time reorgani
7a50: 7a 65 0a 61 20 62 2d 74 72 65 65 20 70 61 67 65  ze.a b-tree page
7a60: 20 73 6f 20 74 68 61 74 20 74 68 65 72 65 20 61   so that there a
7a70: 72 65 20 6e 6f 20 66 72 65 65 62 6c 6f 63 6b 73  re no freeblocks
7a80: 20 6f 72 20 66 72 61 67 6d 65 6e 74 20 62 79 74   or fragment byt
7a90: 65 73 2c 20 61 6c 6c 0a 75 6e 75 73 65 64 20 62  es, all.unused b
7aa0: 79 74 65 73 20 61 72 65 20 63 6f 6e 74 61 69 6e  ytes are contain
7ab0: 65 64 20 69 6e 20 74 68 65 20 75 6e 61 6c 6c 6f  ed in the unallo
7ac0: 63 61 74 65 64 20 73 70 61 63 65 20 72 65 67 69  cated space regi
7ad0: 6f 6e 2c 20 61 6e 64 20 61 6c 6c 0a 63 65 6c 6c  on, and all.cell
7ae0: 73 20 61 72 65 20 70 61 63 6b 65 64 20 74 69 67  s are packed tig
7af0: 68 74 6c 79 20 61 74 20 74 68 65 20 65 6e 64 20  htly at the end 
7b00: 6f 66 20 74 68 65 20 70 61 67 65 2e 20 20 54 68  of the page.  Th
7b10: 69 73 20 69 73 20 63 61 6c 6c 65 64 20 0a 22 64  is is called ."d
7b20: 65 66 72 61 67 6d 65 6e 74 69 6e 67 22 20 74 68  efragmenting" th
7b30: 65 20 62 2d 74 72 65 65 20 70 61 67 65 2e 3c 2f  e b-tree page.</
7b40: 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
7b50: 6d 65 6e 74 20 76 61 72 69 6e 74 20 7b 76 61 72  ment varint {var
7b60: 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74  iable-length int
7b70: 65 67 65 72 7d 20 7b 76 61 72 69 6e 74 7d 3c 2f  eger} {varint}</
7b80: 74 63 6c 3e 0a 0a 3c 70 3e 41 20 76 61 72 69 61  tcl>..<p>A varia
7b90: 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67  ble-length integ
7ba0: 65 72 20 6f 72 20 22 76 61 72 69 6e 74 22 20 69  er or "varint" i
7bb0: 73 20 61 20 73 74 61 74 69 63 20 48 75 66 66 6d  s a static Huffm
7bc0: 61 6e 20 65 6e 63 6f 64 69 6e 67 0a 6f 66 20 36  an encoding.of 6
7bd0: 34 2d 62 69 74 20 74 77 6f 73 2d 63 6f 6d 70 6c  4-bit twos-compl
7be0: 65 6d 65 6e 74 20 69 6e 74 65 67 65 72 73 20 74  ement integers t
7bf0: 68 61 74 20 75 73 65 73 20 6c 65 73 73 20 73 70  hat uses less sp
7c00: 61 63 65 20 66 6f 72 20 73 6d 61 6c 6c 20 70 6f  ace for small po
7c10: 73 69 74 69 76 65 20 0a 76 61 6c 75 65 73 2e 20  sitive .values. 
7c20: 0a 41 20 76 61 72 69 6e 74 20 69 73 20 62 65 74  .A varint is bet
7c30: 77 65 65 6e 20 31 20 61 6e 64 20 39 20 62 79 74  ween 1 and 9 byt
7c40: 65 73 20 69 6e 20 6c 65 6e 67 74 68 2e 20 20 54  es in length.  T
7c50: 68 65 20 76 61 72 69 6e 74 20 63 6f 6e 73 69 73  he varint consis
7c60: 74 73 20 6f 66 20 65 69 74 68 65 72 0a 7a 65 72  ts of either.zer
7c70: 6f 20 6f 72 20 6d 6f 72 65 20 62 79 74 65 20 77  o or more byte w
7c80: 68 69 63 68 20 68 61 76 65 20 74 68 65 20 68 69  hich have the hi
7c90: 67 68 2d 6f 72 64 65 72 20 62 69 74 20 73 65 74  gh-order bit set
7ca0: 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 73   followed by a s
7cb0: 69 6e 67 6c 65 20 62 79 74 65 0a 77 69 74 68 20  ingle byte.with 
7cc0: 74 68 65 20 68 69 67 68 2d 6f 72 64 65 72 20 62  the high-order b
7cd0: 69 74 20 63 6c 65 61 72 2c 20 6f 72 20 6e 69 6e  it clear, or nin
7ce0: 65 20 62 79 74 65 73 2c 20 77 68 69 63 68 65 76  e bytes, whichev
7cf0: 65 72 20 69 73 20 73 68 6f 72 74 65 72 2e 0a 54  er is shorter..T
7d00: 68 65 20 6c 6f 77 65 72 20 73 65 76 65 6e 20 62  he lower seven b
7d10: 69 74 73 20 6f 66 20 65 61 63 68 20 6f 66 20 74  its of each of t
7d20: 68 65 20 66 69 72 73 74 20 65 69 67 68 74 20 62  he first eight b
7d30: 79 74 65 73 20 61 6e 64 20 61 6c 6c 20 38 20 62  ytes and all 8 b
7d40: 69 74 73 20 6f 66 0a 74 68 65 20 6e 69 6e 74 68  its of.the ninth
7d50: 20 62 79 74 65 20 61 72 65 20 75 73 65 64 20 74   byte are used t
7d60: 6f 20 72 65 63 6f 6e 73 74 72 75 63 74 20 74 68  o reconstruct th
7d70: 65 20 36 34 2d 62 69 74 20 74 77 6f 73 2d 63 6f  e 64-bit twos-co
7d80: 6d 70 6c 65 6d 65 6e 74 20 69 6e 74 65 67 65 72  mplement integer
7d90: 2e 0a 56 61 72 69 6e 74 73 20 61 72 65 20 62 69  ..Varints are bi
7da0: 67 2d 65 6e 64 69 61 6e 3a 20 62 69 74 73 20 74  g-endian: bits t
7db0: 61 6b 65 6e 20 66 72 6f 6d 20 74 68 65 20 65 61  aken from the ea
7dc0: 72 6c 69 65 72 20 62 79 74 65 20 6f 66 20 74 68  rlier byte of th
7dd0: 65 20 76 61 72 69 6e 74 0a 61 72 65 20 74 68 65  e varint.are the
7de0: 20 6d 6f 72 65 20 73 69 67 6e 69 66 69 63 61 6e   more significan
7df0: 74 20 61 6e 64 20 62 69 74 73 20 74 61 6b 65 6e  t and bits taken
7e00: 20 66 72 6f 6d 20 74 68 65 20 6c 61 74 65 72 20   from the later 
7e10: 62 79 74 65 73 2e 20 3c 2f 70 3e 0a 0a 3c 70 3e  bytes. </p>..<p>
7e20: 54 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 61 20  The format of a 
7e30: 63 65 6c 6c 20 64 65 70 65 6e 64 73 20 6f 6e 20  cell depends on 
7e40: 77 68 69 63 68 20 6b 69 6e 64 20 6f 66 20 62 2d  which kind of b-
7e50: 74 72 65 65 20 70 61 67 65 20 74 68 65 20 63 65  tree page the ce
7e60: 6c 6c 0a 61 70 70 65 61 72 73 20 6f 6e 2e 20 20  ll.appears on.  
7e70: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 61  The following ta
7e80: 62 6c 65 20 73 68 6f 77 73 20 74 68 65 20 65 6c  ble shows the el
7e90: 65 6d 65 6e 74 73 20 6f 66 20 61 20 63 65 6c 6c  ements of a cell
7ea0: 2c 20 69 6e 0a 6f 72 64 65 72 20 6f 66 20 61 70  , in.order of ap
7eb0: 70 65 61 72 61 6e 63 65 2c 20 66 6f 72 20 74 68  pearance, for th
7ec0: 65 20 76 61 72 69 6f 75 73 20 62 2d 74 72 65 65  e various b-tree
7ed0: 20 70 61 67 65 20 74 79 70 65 73 2e 3c 2f 70 3e   page types.</p>
7ee0: 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 64  ..<blockquote><d
7ef0: 6c 3e 0a 3c 64 74 3e 3c 70 3e 54 61 62 6c 65 20  l>.<dt><p>Table 
7f00: 42 2d 54 72 65 65 20 4c 65 61 66 20 43 65 6c 6c  B-Tree Leaf Cell
7f10: 3a 3c 2f 70 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c  :</p></dt>.<dd><
7f20: 70 3e 3c 75 6c 3e 0a 3c 6c 69 3e 41 20 76 61 72  p><ul>.<li>A var
7f30: 69 6e 74 20 77 68 69 63 68 20 69 73 20 74 68 65  int which is the
7f40: 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66   total number of
7f50: 20 62 79 74 65 73 20 6f 66 20 70 61 79 6c 6f 61   bytes of payloa
7f60: 64 2c 20 69 6e 63 6c 75 64 69 6e 67 20 61 6e 79  d, including any
7f70: 0a 6f 76 65 72 66 6c 6f 77 0a 3c 6c 69 3e 41 20  .overflow.<li>A 
7f80: 76 61 72 69 6e 74 20 77 68 69 63 68 20 69 73 20  varint which is 
7f90: 74 68 65 20 69 6e 74 65 67 65 72 20 6b 65 79 2c  the integer key,
7fa0: 20 61 2e 6b 2e 61 2e 20 22 5b 72 6f 77 69 64 5d   a.k.a. "[rowid]
7fb0: 22 0a 3c 6c 69 3e 54 68 65 20 69 6e 69 74 69 61  ".<li>The initia
7fc0: 6c 20 70 6f 72 74 69 6f 6e 20 6f 66 20 74 68 65  l portion of the
7fd0: 20 70 61 79 6c 6f 61 64 20 74 68 61 74 20 64 6f   payload that do
7fe0: 65 73 20 6e 6f 74 20 73 70 69 6c 6c 20 74 6f 20  es not spill to 
7ff0: 6f 76 65 72 66 6c 6f 77 0a 70 61 67 65 73 2e 0a  overflow.pages..
8000: 3c 6c 69 3e 41 20 34 2d 62 79 74 65 20 62 69 67  <li>A 4-byte big
8010: 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20  -endian integer 
8020: 70 61 67 65 20 6e 75 6d 62 65 72 20 66 6f 72 20  page number for 
8030: 74 68 65 20 66 69 72 73 74 20 70 61 67 65 20 6f  the first page o
8040: 66 20 74 68 65 0a 6f 76 65 72 66 6c 6f 77 20 70  f the.overflow p
8050: 61 67 65 20 6c 69 73 74 20 2d 20 6f 6d 69 74 74  age list - omitt
8060: 65 64 20 69 66 20 61 6c 6c 20 70 61 79 6c 6f 61  ed if all payloa
8070: 64 20 66 69 74 73 20 6f 6e 20 74 68 65 20 62 2d  d fits on the b-
8080: 74 72 65 65 20 70 61 67 65 2e 0a 3c 2f 75 6c 3e  tree page..</ul>
8090: 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c  </p></dd>..<dt><
80a0: 70 3e 54 61 62 6c 65 20 42 2d 54 72 65 65 20 49  p>Table B-Tree I
80b0: 6e 74 65 72 69 6f 72 20 43 65 6c 6c 3a 3c 2f 70  nterior Cell:</p
80c0: 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 3c 75  ></dt>.<dd><p><u
80d0: 6c 3e 0a 3c 6c 69 3e 41 20 34 2d 62 79 74 65 20  l>.<li>A 4-byte 
80e0: 62 69 67 2d 65 6e 64 69 61 6e 20 70 61 67 65 20  big-endian page 
80f0: 6e 75 6d 62 65 72 20 77 68 69 63 68 20 69 73 20  number which is 
8100: 74 68 65 20 6c 65 66 74 20 63 68 69 6c 64 20 70  the left child p
8110: 6f 69 6e 74 65 72 2e 0a 3c 6c 69 3e 41 20 76 61  ointer..<li>A va
8120: 72 69 6e 74 20 77 68 69 63 68 20 69 73 20 74 68  rint which is th
8130: 65 20 69 6e 74 65 67 65 72 20 6b 65 79 0a 3c 2f  e integer key.</
8140: 75 6c 3e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64  ul></p></dd>..<d
8150: 74 3e 3c 70 3e 49 6e 64 65 78 20 42 2d 54 72 65  t><p>Index B-Tre
8160: 65 20 4c 65 61 66 20 43 65 6c 6c 3a 3c 2f 70 3e  e Leaf Cell:</p>
8170: 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 3c 75 6c  </dt>.<dd><p><ul
8180: 3e 0a 3c 6c 69 3e 41 20 76 61 72 69 6e 74 20 77  >.<li>A varint w
8190: 68 69 63 68 20 69 73 20 74 68 65 20 74 6f 74 61  hich is the tota
81a0: 6c 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  l number of byte
81b0: 73 20 6f 66 20 6b 65 79 20 70 61 79 6c 6f 61 64  s of key payload
81c0: 2c 20 69 6e 63 6c 75 64 69 6e 67 20 61 6e 79 0a  , including any.
81d0: 6f 76 65 72 66 6c 6f 77 0a 3c 6c 69 3e 54 68 65  overflow.<li>The
81e0: 20 69 6e 69 74 69 61 6c 20 70 6f 72 74 69 6f 6e   initial portion
81f0: 20 6f 66 20 74 68 65 20 70 61 79 6c 6f 61 64 20   of the payload 
8200: 74 68 61 74 20 64 6f 65 73 20 6e 6f 74 20 73 70  that does not sp
8210: 69 6c 6c 20 74 6f 20 6f 76 65 72 66 6c 6f 77 0a  ill to overflow.
8220: 70 61 67 65 73 2e 0a 3c 6c 69 3e 41 20 34 2d 62  pages..<li>A 4-b
8230: 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69  yte big-endian i
8240: 6e 74 65 67 65 72 20 70 61 67 65 20 6e 75 6d 62  nteger page numb
8250: 65 72 20 66 6f 72 20 74 68 65 20 66 69 72 73 74  er for the first
8260: 20 70 61 67 65 20 6f 66 20 74 68 65 0a 6f 76 65   page of the.ove
8270: 72 66 6c 6f 77 20 70 61 67 65 20 6c 69 73 74 20  rflow page list 
8280: 2d 20 6f 6d 69 74 74 65 64 20 69 66 20 61 6c 6c  - omitted if all
8290: 20 70 61 79 6c 6f 61 64 20 66 69 74 73 20 6f 6e   payload fits on
82a0: 20 74 68 65 20 62 2d 74 72 65 65 20 70 61 67 65   the b-tree page
82b0: 2e 0a 3c 2f 75 6c 3e 3c 2f 70 3e 3c 2f 64 64 3e  ..</ul></p></dd>
82c0: 0a 0a 3c 64 74 3e 3c 70 3e 49 6e 64 65 78 20 42  ..<dt><p>Index B
82d0: 2d 54 72 65 65 20 49 6e 74 65 72 69 6f 72 20 43  -Tree Interior C
82e0: 65 6c 6c 3a 3c 2f 70 3e 3c 2f 64 74 3e 0a 3c 64  ell:</p></dt>.<d
82f0: 64 3e 3c 70 3e 3c 75 6c 3e 0a 3c 6c 69 3e 41 20  d><p><ul>.<li>A 
8300: 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61  4-byte big-endia
8310: 6e 70 61 67 65 20 6e 75 6d 62 65 72 20 77 68 69  npage number whi
8320: 63 68 20 69 73 20 74 68 65 20 6c 65 66 74 20 63  ch is the left c
8330: 68 69 6c 64 20 70 6f 69 6e 74 65 72 2e 0a 3c 6c  hild pointer..<l
8340: 69 3e 41 20 76 61 72 69 6e 74 20 77 68 69 63 68  i>A varint which
8350: 20 69 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75   is the total nu
8360: 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66  mber of bytes of
8370: 20 6b 65 79 20 70 61 79 6c 6f 61 64 2c 20 69 6e   key payload, in
8380: 63 6c 75 64 69 6e 67 20 61 6e 79 0a 6f 76 65 72  cluding any.over
8390: 66 6c 6f 77 0a 3c 6c 69 3e 54 68 65 20 69 6e 69  flow.<li>The ini
83a0: 74 69 61 6c 20 70 6f 72 74 69 6f 6e 20 6f 66 20  tial portion of 
83b0: 74 68 65 20 70 61 79 6c 6f 61 64 20 74 68 61 74  the payload that
83c0: 20 64 6f 65 73 20 6e 6f 74 20 73 70 69 6c 6c 20   does not spill 
83d0: 74 6f 20 6f 76 65 72 66 6c 6f 77 0a 70 61 67 65  to overflow.page
83e0: 73 2e 0a 3c 6c 69 3e 41 20 34 2d 62 79 74 65 20  s..<li>A 4-byte 
83f0: 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67  big-endian integ
8400: 65 72 20 70 61 67 65 20 6e 75 6d 62 65 72 20 66  er page number f
8410: 6f 72 20 74 68 65 20 66 69 72 73 74 20 70 61 67  or the first pag
8420: 65 20 6f 66 20 74 68 65 0a 6f 76 65 72 66 6c 6f  e of the.overflo
8430: 77 20 70 61 67 65 20 6c 69 73 74 20 2d 20 6f 6d  w page list - om
8440: 69 74 74 65 64 20 69 66 20 61 6c 6c 20 70 61 79  itted if all pay
8450: 6c 6f 61 64 20 66 69 74 73 20 6f 6e 20 74 68 65  load fits on the
8460: 20 62 2d 74 72 65 65 20 70 61 67 65 2e 0a 3c 2f   b-tree page..</
8470: 75 6c 3e 3c 2f 70 3e 3c 2f 64 64 3e 0a 3c 2f 64  ul></p></dd>.</d
8480: 6c 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  l></blockquote>.
8490: 0a 3c 70 3e 54 68 65 20 69 6e 66 6f 72 6d 61 74  .<p>The informat
84a0: 69 6f 6e 20 61 62 6f 76 65 20 63 61 6e 20 62 65  ion above can be
84b0: 20 72 65 63 61 73 74 20 69 6e 74 6f 20 61 20 74   recast into a t
84c0: 61 62 6c 65 20 66 6f 72 6d 61 74 20 61 73 20 66  able format as f
84d0: 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 74 63  ollows:</p>..<tc
84e0: 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 63 65  l>hd_fragment ce
84f0: 6c 6c 66 6f 72 6d 61 74 20 7b 63 65 6c 6c 20 66  llformat {cell f
8500: 6f 72 6d 61 74 20 73 75 6d 6d 61 72 79 7d 3c 2f  ormat summary}</
8510: 74 63 6c 3e 0a 3c 63 65 6e 74 65 72 3e 0a 3c 69  tcl>.<center>.<i
8520: 3e 42 2d 74 72 65 65 20 43 65 6c 6c 20 46 6f 72  >B-tree Cell For
8530: 6d 61 74 3c 2f 69 3e 0a 3c 74 61 62 6c 65 20 62  mat</i>.<table b
8540: 6f 72 64 65 72 3d 31 20 77 69 64 74 68 3d 22 38  order=1 width="8
8550: 30 25 22 3e 0a 3c 74 72 3e 3c 74 68 20 72 6f 77  0%">.<tr><th row
8560: 73 70 61 6e 3d 32 3e 44 61 74 61 74 79 70 65 0a  span=2>Datatype.
8570: 20 20 20 20 3c 74 68 20 63 6f 6c 73 70 61 6e 3d      <th colspan=
8580: 34 3e 41 70 70 65 61 72 73 20 69 6e 2e 2e 2e 0a  4>Appears in....
8590: 20 20 20 20 3c 74 68 20 72 6f 77 73 70 61 6e 3d      <th rowspan=
85a0: 32 3e 44 65 73 63 72 69 70 74 69 6f 6e 0a 3c 74  2>Description.<t
85b0: 72 3e 3c 74 68 3e 54 61 62 6c 65 20 4c 65 61 66  r><th>Table Leaf
85c0: 0a 20 20 20 20 3c 74 68 3e 54 61 62 6c 65 20 49  .    <th>Table I
85d0: 6e 74 65 72 69 6f 72 0a 20 20 20 20 3c 74 68 3e  nterior.    <th>
85e0: 49 6e 64 65 78 20 4c 65 61 66 0a 20 20 20 20 3c  Index Leaf.    <
85f0: 74 68 3e 49 6e 64 65 78 20 49 6e 74 65 72 69 6f  th>Index Interio
8600: 72 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d  r.<tr><td align=
8610: 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f  center valign=to
8620: 70 3e 34 2d 62 79 74 65 20 69 6e 74 65 67 65 72  p>4-byte integer
8630: 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63  .    <td align=c
8640: 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70  enter valign=top
8650: 3e 26 6e 62 73 70 3b 0a 20 20 20 20 3c 74 64 20  >&nbsp;.    <td 
8660: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c  align=center val
8670: 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b  ign=top>&#x2714;
8680: 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63  .    <td align=c
8690: 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70  enter valign=top
86a0: 3e 26 6e 62 73 70 3b 0a 20 20 20 20 3c 74 64 20  >&nbsp;.    <td 
86b0: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c  align=center val
86c0: 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b  ign=top>&#x2714;
86d0: 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 6c  .    <td align=l
86e0: 65 66 74 3e 50 61 67 65 20 6e 75 6d 62 65 72 20  eft>Page number 
86f0: 6f 66 20 6c 65 66 74 20 63 68 69 6c 64 0a 3c 74  of left child.<t
8700: 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74  r><td align=cent
8710: 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 76 61  er valign=top>va
8720: 72 69 6e 74 0a 20 20 20 20 3c 74 64 20 61 6c 69  rint.    <td ali
8730: 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e  gn=center valign
8740: 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20 20  =top>&#x2714;.  
8750: 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74    <td align=cent
8760: 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 6e  er valign=top>&n
8770: 62 73 70 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69  bsp;.    <td ali
8780: 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e  gn=center valign
8790: 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20 20  =top>&#x2714;.  
87a0: 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74    <td align=cent
87b0: 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23  er valign=top>&#
87c0: 78 32 37 31 34 3b 0a 20 20 20 20 3c 74 64 20 61  x2714;.    <td a
87d0: 6c 69 67 6e 3d 6c 65 66 74 3e 4e 75 6d 62 65 72  lign=left>Number
87e0: 20 6f 66 20 62 79 74 65 73 20 6f 66 20 70 61 79   of bytes of pay
87f0: 6c 6f 61 64 0a 3c 74 72 3e 3c 74 64 20 61 6c 69  load.<tr><td ali
8800: 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e  gn=center valign
8810: 3d 74 6f 70 3e 76 61 72 69 6e 74 0a 20 20 20 20  =top>varint.    
8820: 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  <td align=center
8830: 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32   valign=top>&#x2
8840: 37 31 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69  714;.    <td ali
8850: 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e  gn=center valign
8860: 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20 20  =top>&#x2714;.  
8870: 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74    <td align=cent
8880: 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 6e  er valign=top>&n
8890: 62 73 70 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69  bsp;.    <td ali
88a0: 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e  gn=center valign
88b0: 3d 74 6f 70 3e 26 6e 62 73 70 3b 0a 20 20 20 20  =top>&nbsp;.    
88c0: 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 52  <td align=left>R
88d0: 6f 77 69 64 0a 3c 74 72 3e 3c 74 64 20 61 6c 69  owid.<tr><td ali
88e0: 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e  gn=center valign
88f0: 3d 74 6f 70 3e 62 79 74 65 20 61 72 72 61 79 0a  =top>byte array.
8900: 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65      <td align=ce
8910: 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e  nter valign=top>
8920: 26 23 78 32 37 31 34 3b 0a 20 20 20 20 3c 74 64  &#x2714;.    <td
8930: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61   align=center va
8940: 6c 69 67 6e 3d 74 6f 70 3e 26 6e 62 73 70 3b 0a  lign=top>&nbsp;.
8950: 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65      <td align=ce
8960: 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e  nter valign=top>
8970: 26 23 78 32 37 31 34 3b 0a 20 20 20 20 3c 74 64  &#x2714;.    <td
8980: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61   align=center va
8990: 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34  lign=top>&#x2714
89a0: 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d  ;.    <td align=
89b0: 6c 65 66 74 3e 50 61 79 6c 6f 61 64 0a 3c 74 72  left>Payload.<tr
89c0: 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65  ><td align=cente
89d0: 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 34 2d 62  r valign=top>4-b
89e0: 79 74 65 20 69 6e 74 65 67 65 72 0a 20 20 20 20  yte integer.    
89f0: 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  <td align=center
8a00: 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32   valign=top>&#x2
8a10: 37 31 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69  714;.    <td ali
8a20: 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e  gn=center valign
8a30: 3d 74 6f 70 3e 26 6e 62 73 70 3b 0a 20 20 20 20  =top>&nbsp;.    
8a40: 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  <td align=center
8a50: 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32   valign=top>&#x2
8a60: 37 31 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69  714;.    <td ali
8a70: 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e  gn=center valign
8a80: 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20 20  =top>&#x2714;.  
8a90: 20 20 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74    <td align=left
8aa0: 3e 50 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20  >Page number of 
8ab0: 66 69 72 73 74 20 6f 76 65 72 66 6c 6f 77 20 70  first overflow p
8ac0: 61 67 65 0a 3c 2f 74 61 62 6c 65 3e 3c 2f 63 65  age.</table></ce
8ad0: 6e 74 65 72 3e 0a 0a 0a 0a 3c 74 72 3e 3c 74 64  nter>....<tr><td
8ae0: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61   align=center va
8af0: 6c 69 67 6e 3d 74 6f 70 3e 0a 0a 3c 70 3e 54 68  lign=top>..<p>Th
8b00: 65 20 61 6d 6f 75 6e 74 20 6f 66 20 70 61 79 6c  e amount of payl
8b10: 6f 61 64 20 74 68 61 74 20 73 70 69 6c 6c 73 20  oad that spills 
8b20: 6f 6e 74 6f 20 6f 76 65 72 66 6c 6f 77 20 70 61  onto overflow pa
8b30: 67 65 73 20 61 6c 73 6f 20 64 65 70 65 6e 64 73  ges also depends
8b40: 20 6f 6e 0a 74 68 65 20 70 61 67 65 20 74 79 70   on.the page typ
8b50: 65 2e 20 20 46 6f 72 20 74 68 65 20 66 6f 6c 6c  e.  For the foll
8b60: 6f 77 69 6e 67 20 63 6f 6d 70 75 74 61 74 69 6f  owing computatio
8b70: 6e 73 2c 20 6c 65 74 20 55 20 62 65 20 74 68 65  ns, let U be the
8b80: 20 75 73 61 62 6c 65 20 73 69 7a 65 0a 6f 66 20   usable size.of 
8b90: 61 20 64 61 74 61 62 61 73 65 20 70 61 67 65 2c  a database page,
8ba0: 20 74 68 65 20 74 6f 74 61 6c 20 70 61 67 65 20   the total page 
8bb0: 73 69 7a 65 20 6c 65 73 73 20 74 68 65 20 72 65  size less the re
8bc0: 73 65 72 76 65 64 20 73 70 61 63 65 20 61 74 20  served space at 
8bd0: 74 68 65 0a 65 6e 64 20 6f 66 20 65 61 63 68 20  the.end of each 
8be0: 70 61 67 65 2e 20 20 41 6e 64 20 6c 65 74 20 50  page.  And let P
8bf0: 20 62 65 20 74 68 65 20 70 61 79 6c 6f 61 64 20   be the payload 
8c00: 73 69 7a 65 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63  size.</p>..<bloc
8c10: 6b 71 75 6f 74 65 3e 3c 64 6c 3e 0a 3c 64 74 3e  kquote><dl>.<dt>
8c20: 54 61 62 6c 65 20 42 2d 54 72 65 65 20 4c 65 61  Table B-Tree Lea
8c30: 66 20 43 65 6c 6c 3a 3c 2f 64 74 3e 0a 3c 64 64  f Cell:</dt>.<dd
8c40: 3e 3c 70 3e 0a 5e 49 66 20 74 68 65 20 70 61 79  ><p>.^If the pay
8c50: 6c 6f 61 64 20 73 69 7a 65 20 50 20 69 73 20 6c  load size P is l
8c60: 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ess than or equa
8c70: 6c 20 74 6f 20 55 2d 33 35 20 74 68 65 6e 0a 74  l to U-35 then.t
8c80: 68 65 20 65 6e 74 69 72 65 20 70 61 79 6c 6f 61  he entire payloa
8c90: 64 20 69 73 20 73 74 6f 72 65 64 20 6f 6e 20 74  d is stored on t
8ca0: 68 65 20 62 2d 74 72 65 65 20 6c 65 61 66 20 70  he b-tree leaf p
8cb0: 61 67 65 2e 20 20 0a 5e 28 4c 65 74 20 4d 20 62  age.  .^(Let M b
8cc0: 65 20 28 28 55 2d 31 32 29 2a 33 32 2f 32 35 35  e ((U-12)*32/255
8cd0: 29 2d 32 33 2e 20 20 49 66 20 50 20 69 73 20 67  )-23.  If P is g
8ce0: 72 65 61 74 65 72 20 74 68 61 6e 20 55 2d 33 35  reater than U-35
8cf0: 0a 74 68 65 6e 20 74 68 65 20 6e 75 6d 62 65 72  .then the number
8d00: 20 6f 66 20 62 79 74 65 20 73 74 6f 72 65 64 20   of byte stored 
8d10: 6f 6e 20 74 68 65 20 62 2d 74 72 65 65 20 6c 65  on the b-tree le
8d20: 61 66 20 70 61 67 65 20 69 73 20 74 68 65 20 73  af page is the s
8d30: 6d 61 6c 6c 65 72 20 6f 66 0a 4d 2b 28 28 50 2d  maller of.M+((P-
8d40: 4d 29 25 28 55 2d 34 29 29 20 61 6e 64 20 55 2d  M)%(U-4)) and U-
8d50: 33 35 2e 29 5e 0a 5e 28 4e 6f 74 65 20 74 68 61  35.)^.^(Note tha
8d60: 74 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  t number of byte
8d70: 73 20 73 74 6f 72 65 64 20 6f 6e 20 74 68 65 20  s stored on the 
8d80: 6c 65 61 66 20 70 61 67 65 20 69 73 20 6e 65 76  leaf page is nev
8d90: 65 72 20 6c 65 73 73 20 74 68 61 6e 20 4d 2e 29  er less than M.)
8da0: 5e 0a 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74  ^.</p></dd>..<dt
8db0: 3e 54 61 62 6c 65 20 42 2d 54 72 65 65 20 49 6e  >Table B-Tree In
8dc0: 74 65 72 69 6f 72 20 43 65 6c 6c 3a 3c 2f 64 74  terior Cell:</dt
8dd0: 3e 0a 3c 64 64 3e 3c 70 3e 0a 49 6e 74 65 72 69  >.<dd><p>.Interi
8de0: 6f 72 20 70 61 67 65 73 20 6f 66 20 74 61 62 6c  or pages of tabl
8df0: 65 20 62 2d 74 72 65 65 73 20 68 61 76 65 20 6e  e b-trees have n
8e00: 6f 20 70 61 79 6c 6f 61 64 20 61 6e 64 20 73 6f  o payload and so
8e10: 20 74 68 65 72 65 20 69 73 20 6e 65 76 65 72 0a   there is never.
8e20: 61 6e 79 20 70 61 79 6c 6f 61 64 20 74 6f 20 73  any payload to s
8e30: 70 69 6c 6c 2e 0a 3c 2f 70 3e 3c 2f 64 64 3e 0a  pill..</p></dd>.
8e40: 0a 3c 64 74 3e 49 6e 64 65 78 20 42 2d 54 72 65  .<dt>Index B-Tre
8e50: 65 20 4c 65 61 66 20 4f 72 20 49 6e 74 65 72 69  e Leaf Or Interi
8e60: 6f 72 20 43 65 6c 6c 3a 3c 2f 64 74 3e 0a 3c 64  or Cell:</dt>.<d
8e70: 64 3e 3c 70 3e 0a 5e 28 4c 65 74 20 58 20 62 65  d><p>.^(Let X be
8e80: 20 28 28 55 2d 31 32 29 2a 36 34 2f 32 35 35 29   ((U-12)*64/255)
8e90: 2d 32 33 29 2e 20 20 49 66 20 74 68 65 20 70 61  -23).  If the pa
8ea0: 79 6c 6f 61 64 20 73 69 7a 65 20 50 20 69 73 20  yload size P is 
8eb0: 6c 65 73 73 20 74 68 61 6e 0a 6f 72 20 65 71 75  less than.or equ
8ec0: 61 6c 20 74 6f 20 58 20 74 68 65 6e 20 74 68 65  al to X then the
8ed0: 20 65 6e 74 69 72 65 20 70 61 79 6c 6f 61 64 20   entire payload 
8ee0: 69 73 20 73 74 6f 72 65 64 20 6f 6e 20 74 68 65  is stored on the
8ef0: 20 62 2d 74 72 65 65 20 70 61 67 65 2e 29 5e 0a   b-tree page.)^.
8f00: 5e 28 4c 65 74 20 4d 20 62 65 20 28 28 55 2d 31  ^(Let M be ((U-1
8f10: 32 29 2a 33 32 2f 32 35 35 29 2d 32 33 2e 20 20  2)*32/255)-23.  
8f20: 49 66 20 50 20 69 73 20 67 72 65 61 74 65 72 20  If P is greater 
8f30: 74 68 61 6e 20 58 20 74 68 65 6e 20 74 68 65 20  than X then the 
8f40: 6e 75 6d 62 65 72 0a 6f 66 20 62 79 74 65 20 73  number.of byte s
8f50: 74 6f 72 65 64 20 6f 6e 20 74 68 65 20 62 2d 74  tored on the b-t
8f60: 72 65 65 20 70 61 67 65 20 69 73 20 74 68 65 20  ree page is the 
8f70: 73 6d 61 6c 6c 65 72 20 6f 66 0a 4d 2b 28 28 50  smaller of.M+((P
8f80: 2d 4d 29 25 28 55 2d 34 29 29 20 61 6e 64 20 58  -M)%(U-4)) and X
8f90: 2e 29 5e 0a 5e 28 4e 6f 74 65 20 74 68 61 74 20  .)^.^(Note that 
8fa0: 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  number of bytes 
8fb0: 73 74 6f 72 65 64 20 6f 6e 20 74 68 65 20 69 6e  stored on the in
8fc0: 64 65 78 20 70 61 67 65 20 69 73 20 6e 65 76 65  dex page is neve
8fd0: 72 20 6c 65 73 73 20 74 68 61 6e 20 4d 2e 29 5e  r less than M.)^
8fe0: 0a 3c 2f 70 3e 3c 2f 64 64 3e 0a 3c 2f 64 6c 3e  .</p></dd>.</dl>
8ff0: 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c  </blockquote>..<
9000: 70 3e 54 68 65 20 6f 76 65 72 66 6c 6f 77 20 74  p>The overflow t
9010: 68 72 65 73 68 6f 6c 64 73 20 61 72 65 20 64 65  hresholds are de
9020: 73 69 67 6e 65 64 20 74 6f 20 67 69 76 65 20 61  signed to give a
9030: 20 6d 69 6e 69 6d 75 6d 20 66 61 6e 6f 75 74 20   minimum fanout 
9040: 6f 66 0a 34 20 66 6f 72 20 69 6e 64 65 78 20 62  of.4 for index b
9050: 2d 74 72 65 65 73 20 61 6e 64 20 74 6f 20 6d 61  -trees and to ma
9060: 6b 65 20 73 75 72 65 20 65 6e 6f 75 67 68 20 6f  ke sure enough o
9070: 66 20 74 68 65 20 70 61 79 6c 6f 61 64 0a 69 73  f the payload.is
9080: 20 6f 6e 20 74 68 65 20 62 2d 74 72 65 65 20 70   on the b-tree p
9090: 61 67 65 20 74 68 61 74 20 74 68 65 20 72 65 63  age that the rec
90a0: 6f 72 64 20 68 65 61 64 65 72 20 63 61 6e 20 75  ord header can u
90b0: 73 75 61 6c 6c 79 20 62 65 20 61 63 63 65 73 73  sually be access
90c0: 65 64 0a 77 69 74 68 6f 75 74 20 63 6f 6e 73 75  ed.without consu
90d0: 6c 74 69 6e 67 20 61 6e 20 6f 76 65 72 66 6c 6f  lting an overflo
90e0: 77 20 70 61 67 65 2e 20 20 49 6e 20 68 69 6e 64  w page.  In hind
90f0: 73 69 67 68 74 2c 20 74 68 65 20 64 65 73 69 67  sight, the desig
9100: 6e 65 72 73 20 6f 66 0a 74 68 65 20 53 51 4c 69  ners of.the SQLi
9110: 74 65 20 62 2d 74 72 65 65 20 6c 6f 67 69 63 20  te b-tree logic 
9120: 72 65 61 6c 69 7a 65 20 74 68 61 74 20 74 68 65  realize that the
9130: 73 65 20 74 68 72 65 73 68 6f 6c 64 73 20 63 6f  se thresholds co
9140: 75 6c 64 20 68 61 76 65 20 62 65 65 6e 0a 6d 61  uld have been.ma
9150: 64 65 20 6d 75 63 68 20 73 69 6d 70 6c 65 72 2e  de much simpler.
9160: 20 20 48 6f 77 65 76 65 72 2c 20 74 68 65 20 63    However, the c
9170: 6f 6d 70 75 74 61 74 69 6f 6e 73 20 63 61 6e 6e  omputations cann
9180: 6f 74 20 62 65 20 63 68 61 6e 67 65 64 0a 77 69  ot be changed.wi
9190: 74 68 6f 75 74 20 72 65 73 75 6c 74 69 6e 67 20  thout resulting 
91a0: 69 6e 20 61 6e 20 69 6e 63 6f 6d 70 61 74 69 62  in an incompatib
91b0: 6c 65 20 66 69 6c 65 20 66 6f 72 6d 61 74 2e 20  le file format. 
91c0: 20 41 6e 64 20 74 68 65 20 63 75 72 72 65 6e 74   And the current
91d0: 20 63 6f 6d 70 75 74 61 74 69 6f 6e 73 0a 77 6f   computations.wo
91e0: 72 6b 20 77 65 6c 6c 2c 20 65 76 65 6e 20 69 66  rk well, even if
91f0: 20 74 68 65 79 20 61 72 65 20 61 20 6c 69 74 74   they are a litt
9200: 6c 65 20 63 6f 6d 70 6c 65 78 2e 3c 2f 70 3e 0a  le complex.</p>.
9210: 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
9220: 74 20 6f 76 66 6c 70 67 73 20 7b 6f 76 65 72 66  t ovflpgs {overf
9230: 6c 6f 77 20 70 61 67 65 7d 20 7b 6f 76 65 72 66  low page} {overf
9240: 6c 6f 77 20 70 61 67 65 73 7d 3c 2f 74 63 6c 3e  low pages}</tcl>
9250: 0a 3c 68 33 3e 31 2e 36 20 43 65 6c 6c 20 50 61  .<h3>1.6 Cell Pa
9260: 79 6c 6f 61 64 20 4f 76 65 72 66 6c 6f 77 20 50  yload Overflow P
9270: 61 67 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 57  ages</h3>..<p>^W
9280: 68 65 6e 20 74 68 65 20 70 61 79 6c 6f 61 64 20  hen the payload 
9290: 6f 66 20 61 20 62 2d 74 72 65 65 20 63 65 6c 6c  of a b-tree cell
92a0: 20 69 73 20 74 6f 6f 20 6c 61 72 67 65 20 66 6f   is too large fo
92b0: 72 20 74 68 65 20 62 2d 74 72 65 65 20 70 61 67  r the b-tree pag
92c0: 65 2c 0a 74 68 65 20 73 75 72 70 6c 75 73 20 69  e,.the surplus i
92d0: 73 20 73 70 69 6c 6c 65 64 20 6f 6e 74 6f 20 6f  s spilled onto o
92e0: 76 65 72 66 6c 6f 77 20 70 61 67 65 73 2e 20 20  verflow pages.  
92f0: 5e 4f 76 65 72 66 6c 6f 77 20 70 61 67 65 73 20  ^Overflow pages 
9300: 66 6f 72 6d 20 61 20 6c 69 6e 6b 65 64 0a 6c 69  form a linked.li
9310: 73 74 2e 20 20 5e 54 68 65 20 66 69 72 73 74 20  st.  ^The first 
9320: 66 6f 75 72 20 62 79 74 65 73 20 6f 66 20 65 61  four bytes of ea
9330: 63 68 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65  ch overflow page
9340: 20 61 72 65 20 61 20 62 69 67 2d 65 6e 64 69 61   are a big-endia
9350: 6e 0a 69 6e 74 65 67 65 72 20 77 68 69 63 68 20  n.integer which 
9360: 69 73 20 74 68 65 20 70 61 67 65 20 6e 75 6d 62  is the page numb
9370: 65 72 20 6f 66 20 74 68 65 20 6e 65 78 74 20 70  er of the next p
9380: 61 67 65 20 69 6e 20 74 68 65 20 63 68 61 69 6e  age in the chain
9390: 2c 20 6f 72 20 7a 65 72 6f 0a 66 6f 72 20 74 68  , or zero.for th
93a0: 65 20 66 69 6e 61 6c 20 70 61 67 65 20 69 6e 20  e final page in 
93b0: 74 68 65 20 63 68 61 69 6e 2e 20 20 5e 54 68 65  the chain.  ^The
93c0: 20 66 69 66 74 68 20 62 79 74 65 20 74 68 72 6f   fifth byte thro
93d0: 75 67 68 20 74 68 65 20 6c 61 73 74 20 75 73 61  ugh the last usa
93e0: 62 6c 65 0a 62 79 74 65 20 61 72 65 20 75 73 65  ble.byte are use
93f0: 64 20 74 6f 20 68 6f 6c 64 20 6f 76 65 72 66 6c  d to hold overfl
9400: 6f 77 20 63 6f 6e 74 65 6e 74 2e 3c 2f 70 3e 0a  ow content.</p>.
9410: 0a 3c 68 33 3e 31 2e 37 20 50 6f 69 6e 74 65 72  .<h3>1.7 Pointer
9420: 20 4d 61 70 20 6f 72 20 50 74 72 6d 61 70 20 50   Map or Ptrmap P
9430: 61 67 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 50 6f  ages</h3>..<p>Po
9440: 69 6e 74 65 72 20 6d 61 70 20 6f 72 20 70 74 72  inter map or ptr
9450: 6d 61 70 20 70 61 67 65 73 20 61 72 65 20 65 78  map pages are ex
9460: 74 72 61 20 70 61 67 65 73 20 69 6e 73 65 72 74  tra pages insert
9470: 65 64 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61  ed into the data
9480: 62 61 73 65 0a 74 6f 20 6d 61 6b 65 20 74 68 65  base.to make the
9490: 20 6f 70 65 72 61 74 69 6f 6e 20 6f 66 20 5b 61   operation of [a
94a0: 75 74 6f 5f 76 61 63 75 75 6d 5d 20 61 6e 64 20  uto_vacuum] and 
94b0: 5b 69 6e 63 72 65 6d 65 6e 74 61 6c 5f 76 61 63  [incremental_vac
94c0: 75 75 6d 5d 20 6d 6f 64 65 73 0a 6d 6f 72 65 20  uum] modes.more 
94d0: 65 66 66 69 63 69 65 6e 74 2e 20 20 4f 74 68 65  efficient.  Othe
94e0: 72 20 70 61 67 65 20 74 79 70 65 73 20 69 6e 20  r page types in 
94f0: 74 68 65 20 64 61 74 61 62 61 73 65 20 74 79 70  the database typ
9500: 69 63 61 6c 6c 79 20 68 61 76 65 20 70 6f 69 6e  ically have poin
9510: 74 65 72 73 0a 66 72 6f 6d 20 70 61 72 65 6e 74  ters.from parent
9520: 20 74 6f 20 63 68 69 6c 64 2e 20 20 46 6f 72 20   to child.  For 
9530: 65 78 61 6d 70 6c 65 2c 20 61 6e 20 69 6e 74 65  example, an inte
9540: 72 69 6f 72 20 62 2d 74 72 65 65 20 70 61 67 65  rior b-tree page
9550: 20 63 6f 6e 74 61 69 6e 73 20 70 6f 69 6e 74 65   contains pointe
9560: 72 73 0a 74 6f 20 69 74 73 20 63 68 69 6c 64 20  rs.to its child 
9570: 62 2d 74 72 65 65 20 70 61 67 65 73 20 61 6e 64  b-tree pages and
9580: 20 61 6e 20 6f 76 65 72 66 6c 6f 77 20 63 68 61   an overflow cha
9590: 69 6e 20 68 61 73 20 61 20 70 6f 69 6e 74 65 72  in has a pointer
95a0: 0a 66 72 6f 6d 20 65 61 72 6c 69 65 72 20 74 6f  .from earlier to
95b0: 20 6c 61 74 65 72 20 6c 69 6e 6b 73 20 69 6e 20   later links in 
95c0: 74 68 65 20 63 68 61 69 6e 2e 20 20 41 20 70 74  the chain.  A pt
95d0: 72 6d 61 70 20 70 61 67 65 20 63 6f 6e 74 61 69  rmap page contai
95e0: 6e 73 20 6c 69 6e 6b 61 67 65 0a 69 6e 66 6f 72  ns linkage.infor
95f0: 6d 61 74 69 6f 6e 20 67 6f 69 6e 67 20 69 6e 20  mation going in 
9600: 74 68 65 20 6f 70 70 6f 73 69 74 65 20 64 69 72  the opposite dir
9610: 65 63 74 69 6f 6e 2c 20 66 72 6f 6d 20 63 68 69  ection, from chi
9620: 6c 64 20 74 6f 20 70 61 72 65 6e 74 2e 3c 2f 70  ld to parent.</p
9630: 3e 0a 0a 3c 70 3e 5e 50 74 72 6d 61 70 20 70 61  >..<p>^Ptrmap pa
9640: 67 65 73 20 6d 75 73 74 20 65 78 69 73 74 20 69  ges must exist i
9650: 6e 20 61 6e 79 20 64 61 74 61 62 61 73 65 20 66  n any database f
9660: 69 6c 65 20 77 68 69 63 68 20 68 61 73 20 61 20  ile which has a 
9670: 6e 6f 6e 2d 7a 65 72 6f 0a 6c 61 72 67 65 73 74  non-zero.largest
9680: 20 72 6f 6f 74 20 62 2d 74 72 65 65 20 70 61 67   root b-tree pag
9690: 65 20 76 61 6c 75 65 20 61 74 20 6f 66 66 73 65  e value at offse
96a0: 74 20 35 32 20 69 6e 20 74 68 65 20 64 61 74 61  t 52 in the data
96b0: 62 61 73 65 20 68 65 61 64 65 72 2e 0a 5e 49 66  base header..^If
96c0: 20 74 68 65 20 6c 61 72 67 65 73 74 20 72 6f 6f   the largest roo
96d0: 74 20 62 2d 74 72 65 65 20 70 61 67 65 20 76 61  t b-tree page va
96e0: 6c 75 65 20 69 73 20 7a 65 72 6f 2c 20 74 68 65  lue is zero, the
96f0: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 6d  n the database m
9700: 75 73 74 20 6e 6f 74 0a 63 6f 6e 74 61 69 6e 20  ust not.contain 
9710: 70 74 72 6d 61 70 20 70 61 67 65 73 2e 3c 2f 70  ptrmap pages.</p
9720: 3e 0a 0a 3c 70 3e 5e 49 6e 20 61 20 64 61 74 61  >..<p>^In a data
9730: 62 61 73 65 20 77 69 74 68 20 70 74 72 6d 61 70  base with ptrmap
9740: 20 70 61 67 65 73 2c 20 74 68 65 20 66 69 72 73   pages, the firs
9750: 74 20 70 74 72 6d 61 70 20 70 61 67 65 20 69 73  t ptrmap page is
9760: 20 70 61 67 65 20 32 2e 0a 41 20 70 74 72 6d 61   page 2..A ptrma
9770: 70 20 70 61 67 65 20 63 6f 6e 73 69 73 74 73 20  p page consists 
9780: 6f 66 20 61 6e 20 61 72 72 61 79 20 6f 66 20 35  of an array of 5
9790: 2d 62 79 74 65 20 65 6e 74 72 69 65 73 2e 20 20  -byte entries.  
97a0: 4c 65 74 20 4a 20 62 65 20 74 68 65 0a 6e 75 6d  Let J be the.num
97b0: 62 65 72 20 6f 66 20 35 2d 62 79 74 65 20 65 6e  ber of 5-byte en
97c0: 74 72 69 65 73 20 74 68 61 74 20 77 69 6c 6c 20  tries that will 
97d0: 66 69 74 20 69 6e 20 74 68 65 20 75 73 61 62 6c  fit in the usabl
97e0: 65 20 73 70 61 63 65 20 6f 66 20 61 20 70 61 67  e space of a pag
97f0: 65 2e 0a 28 49 6e 20 6f 74 68 65 72 20 77 6f 72  e..(In other wor
9800: 64 73 2c 20 4a 3d 55 2f 35 2e 29 20 20 5e 54 68  ds, J=U/5.)  ^Th
9810: 65 20 66 69 72 73 74 20 70 74 72 6d 61 70 20 70  e first ptrmap p
9820: 61 67 65 20 77 69 6c 6c 20 63 6f 6e 74 61 69 6e  age will contain
9830: 20 62 61 63 6b 20 70 6f 69 6e 74 65 72 0a 69 6e   back pointer.in
9840: 66 6f 72 6d 61 74 69 6f 6e 20 66 6f 72 20 70 61  formation for pa
9850: 67 65 73 20 33 20 74 68 72 6f 75 67 68 20 4a 2b  ges 3 through J+
9860: 32 2c 20 69 6e 63 6c 75 73 69 76 65 2e 20 20 5e  2, inclusive.  ^
9870: 54 68 65 20 73 65 63 6f 6e 64 20 70 6f 69 6e 74  The second point
9880: 65 72 20 6d 61 70 0a 70 61 67 65 20 77 69 6c 6c  er map.page will
9890: 20 62 65 20 6f 6e 20 70 61 67 65 20 4a 2b 33 20   be on page J+3 
98a0: 61 6e 64 20 74 68 61 74 20 70 74 72 6d 61 70 20  and that ptrmap 
98b0: 70 61 67 65 20 77 69 6c 6c 20 70 72 6f 76 69 64  page will provid
98c0: 65 20 62 61 63 6b 20 70 6f 69 6e 74 65 72 0a 69  e back pointer.i
98d0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 6f 72 20 70  nformation for p
98e0: 61 67 65 73 20 4a 2b 34 20 74 68 72 6f 75 67 68  ages J+4 through
98f0: 20 32 2a 4a 2b 33 20 69 6e 63 6c 75 73 69 76 65   2*J+3 inclusive
9900: 2e 20 20 41 6e 64 20 73 6f 20 66 6f 72 74 68 20  .  And so forth 
9910: 66 6f 72 0a 74 68 65 20 65 6e 74 69 72 65 20 64  for.the entire d
9920: 61 74 61 62 61 73 65 20 66 69 6c 65 2e 3c 2f 70  atabase file.</p
9930: 3e 0a 0a 3c 70 3e 5e 28 49 6e 20 61 20 64 61 74  >..<p>^(In a dat
9940: 61 62 61 73 65 20 74 68 61 74 20 75 73 65 73 20  abase that uses 
9950: 70 74 72 6d 61 70 20 70 61 67 65 73 2c 20 61 6c  ptrmap pages, al
9960: 6c 20 70 61 67 65 73 20 61 74 20 6c 6f 63 61 74  l pages at locat
9970: 69 6f 6e 73 20 69 64 65 6e 74 69 66 69 65 64 0a  ions identified.
9980: 62 79 20 74 68 65 20 63 6f 6d 70 75 74 61 74 69  by the computati
9990: 6f 6e 20 69 6e 20 74 68 65 20 70 72 65 76 69 6f  on in the previo
99a0: 75 73 20 70 61 72 61 67 72 61 70 68 20 6d 75 73  us paragraph mus
99b0: 74 20 62 65 20 70 74 72 6d 61 70 20 70 61 67 65  t be ptrmap page
99c0: 20 61 6e 64 20 6e 6f 0a 6f 74 68 65 72 20 70 61   and no.other pa
99d0: 67 65 20 6d 61 79 20 62 65 20 61 20 70 74 72 6d  ge may be a ptrm
99e0: 61 70 20 70 61 67 65 2e 20 20 45 78 63 65 70 74  ap page.  Except
99f0: 2c 20 69 66 20 74 68 65 20 62 79 74 65 2d 6c 6f  , if the byte-lo
9a00: 63 6b 20 70 61 67 65 20 68 61 70 70 65 6e 73 20  ck page happens 
9a10: 74 6f 0a 66 61 6c 6c 20 6f 6e 20 74 68 65 20 73  to.fall on the s
9a20: 61 6d 65 20 70 61 67 65 20 6e 75 6d 62 65 72 20  ame page number 
9a30: 61 73 20 61 20 70 74 72 6d 61 70 20 70 61 67 65  as a ptrmap page
9a40: 2c 20 74 68 65 6e 20 74 68 65 20 70 74 72 6d 61  , then the ptrma
9a50: 70 20 69 73 20 6d 6f 76 65 64 0a 74 6f 20 74 68  p is moved.to th
9a60: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 70 61 67 65  e following page
9a70: 20 66 6f 72 20 74 68 61 74 20 6f 6e 65 20 63 61   for that one ca
9a80: 73 65 2e 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e 45 61  se.)^</p>..<p>Ea
9a90: 63 68 20 35 2d 62 79 74 65 20 65 6e 74 72 79 20  ch 5-byte entry 
9aa0: 6f 6e 20 61 20 70 74 72 6d 61 70 20 70 61 67 65  on a ptrmap page
9ab0: 20 70 72 6f 76 69 64 65 73 20 62 61 63 6b 2d 6c   provides back-l
9ac0: 69 6e 6b 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ink information 
9ad0: 61 62 6f 75 74 20 0a 6f 6e 65 20 6f 66 20 70 61  about .one of pa
9ae0: 67 65 73 20 74 68 61 74 20 69 6d 6d 65 64 69 61  ges that immedia
9af0: 74 65 6c 79 20 66 6f 6c 6c 6f 77 20 74 68 65 20  tely follow the 
9b00: 70 6f 69 6e 74 65 72 20 6d 61 70 2e 20 20 5e 28  pointer map.  ^(
9b10: 49 66 20 70 61 67 65 20 42 20 69 73 20 61 0a 70  If page B is a.p
9b20: 74 72 6d 61 70 20 70 61 67 65 20 74 68 65 6e 20  trmap page then 
9b30: 62 61 63 6b 2d 6c 69 6e 6b 20 69 6e 66 6f 72 6d  back-link inform
9b40: 61 74 69 6f 6e 20 61 62 6f 75 74 20 70 61 67 65  ation about page
9b50: 20 42 2b 31 20 69 73 20 70 72 6f 76 69 64 65 64   B+1 is provided
9b60: 20 62 79 0a 74 68 65 20 66 69 72 73 74 20 65 6e   by.the first en
9b70: 74 72 79 20 6f 6e 20 74 68 65 20 70 6f 69 6e 74  try on the point
9b80: 65 72 20 6d 61 70 2e 20 20 49 6e 66 6f 72 6d 61  er map.  Informa
9b90: 74 69 6f 6e 20 61 62 6f 75 74 20 70 61 67 65 20  tion about page 
9ba0: 42 2b 32 20 69 73 0a 70 72 6f 76 69 64 65 64 20  B+2 is.provided 
9bb0: 62 79 20 74 68 65 20 73 65 63 6f 6e 64 20 65 6e  by the second en
9bc0: 74 72 79 2e 20 20 41 6e 64 20 73 6f 20 66 6f 72  try.  And so for
9bd0: 74 68 2e 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e 45 61  th.)^</p>..<p>Ea
9be0: 63 68 20 35 2d 62 79 74 65 20 70 74 72 6d 61 70  ch 5-byte ptrmap
9bf0: 20 65 6e 74 72 79 20 63 6f 6e 73 69 73 74 73 20   entry consists 
9c00: 6f 66 20 6f 6e 65 20 62 79 74 65 20 6f 66 20 22  of one byte of "
9c10: 70 61 67 65 20 74 79 70 65 22 20 69 6e 66 6f 72  page type" infor
9c20: 6d 61 74 69 6f 6e 0a 66 6f 6c 6c 6f 77 65 64 20  mation.followed 
9c30: 62 79 20 61 20 34 2d 62 79 74 65 20 62 69 67 2d  by a 4-byte big-
9c40: 65 6e 64 69 61 6e 20 70 61 67 65 20 6e 75 6d 62  endian page numb
9c50: 65 72 2e 20 20 46 69 76 65 20 70 61 67 65 20 74  er.  Five page t
9c60: 79 70 65 73 20 61 72 65 20 72 65 63 6f 67 6e 69  ypes are recogni
9c70: 7a 65 64 3a 0a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a  zed:.</p>..<ol>.
9c80: 3c 6c 69 3e 41 20 62 2d 74 72 65 65 20 72 6f 6f  <li>A b-tree roo
9c90: 74 20 70 61 67 65 2e 20 20 54 68 65 0a 70 61 67  t page.  The.pag
9ca0: 65 20 6e 75 6d 62 65 72 20 73 68 6f 75 6c 64 20  e number should 
9cb0: 62 65 20 7a 65 72 6f 2e 0a 3c 6c 69 3e 41 20 66  be zero..<li>A f
9cc0: 72 65 65 6c 69 73 74 20 70 61 67 65 2e 20 20 54  reelist page.  T
9cd0: 68 65 20 70 61 67 65 20 6e 75 6d 62 65 72 20 73  he page number s
9ce0: 68 6f 75 6c 64 20 62 65 0a 7a 65 72 6f 2e 0a 3c  hould be.zero..<
9cf0: 6c 69 3e 54 68 65 20 66 69 72 73 74 20 70 61 67  li>The first pag
9d00: 65 20 6f 66 20 61 0a 63 65 6c 6c 20 70 61 79 6c  e of a.cell payl
9d10: 6f 61 64 20 6f 76 65 72 66 6c 6f 77 20 63 68 61  oad overflow cha
9d20: 69 6e 2e 20 20 54 68 65 20 70 61 67 65 20 6e 75  in.  The page nu
9d30: 6d 62 65 72 20 69 73 20 74 68 65 20 62 2d 74 72  mber is the b-tr
9d40: 65 65 20 70 61 67 65 20 74 68 61 74 0a 63 6f 6e  ee page that.con
9d50: 74 61 69 6e 73 20 74 68 65 20 63 65 6c 6c 20 77  tains the cell w
9d60: 68 6f 73 65 20 63 6f 6e 74 65 6e 74 20 68 61 73  hose content has
9d70: 20 6f 76 65 72 66 6c 6f 77 65 64 2e 0a 3c 6c 69   overflowed..<li
9d80: 3e 41 20 70 61 67 65 20 69 6e 20 61 6e 20 6f 76  >A page in an ov
9d90: 65 72 66 6c 6f 77 20 63 68 61 69 6e 0a 6f 74 68  erflow chain.oth
9da0: 65 72 20 74 68 61 6e 20 74 68 65 20 66 69 72 73  er than the firs
9db0: 74 20 70 61 67 65 2e 20 20 54 68 65 20 70 61 67  t page.  The pag
9dc0: 65 20 6e 75 6d 62 65 72 20 69 73 20 74 68 65 20  e number is the 
9dd0: 70 72 69 6f 72 20 70 61 67 65 20 6f 66 20 74 68  prior page of th
9de0: 65 0a 6f 76 65 72 66 6c 6f 77 20 63 68 61 69 6e  e.overflow chain
9df0: 2e 0a 3c 6c 69 3e 41 20 6e 6f 6e 2d 72 6f 6f 74  ..<li>A non-root
9e00: 20 62 2d 74 72 65 65 20 70 61 67 65 2e 20 20 54   b-tree page.  T
9e10: 68 65 0a 70 61 67 65 20 6e 75 6d 62 65 72 20 69  he.page number i
9e20: 73 20 74 68 65 20 70 61 72 65 6e 74 20 62 2d 74  s the parent b-t
9e30: 72 65 65 20 70 61 67 65 2e 0a 3c 2f 6f 6c 3e 0a  ree page..</ol>.
9e40: 0a 3c 70 3e 5e 49 6e 20 61 6e 79 20 64 61 74 61  .<p>^In any data
9e50: 62 61 73 65 20 66 69 6c 65 20 74 68 61 74 20 63  base file that c
9e60: 6f 6e 74 61 69 6e 73 20 70 74 72 6d 61 70 20 70  ontains ptrmap p
9e70: 61 67 65 73 2c 20 61 6c 6c 20 62 2d 74 72 65 65  ages, all b-tree
9e80: 20 72 6f 6f 74 20 70 61 67 65 73 20 0a 6d 75 73   root pages .mus
9e90: 74 20 63 6f 6d 65 20 62 65 66 6f 72 65 20 61 6e  t come before an
9ea0: 79 20 6e 6f 6e 2d 72 6f 6f 74 20 62 2d 74 72 65  y non-root b-tre
9eb0: 65 20 70 61 67 65 2c 20 63 65 6c 6c 20 70 61 79  e page, cell pay
9ec0: 6c 6f 61 64 20 6f 76 65 72 66 6c 6f 77 20 70 61  load overflow pa
9ed0: 67 65 2c 20 6f 72 0a 66 72 65 65 6c 69 73 74 20  ge, or.freelist 
9ee0: 70 61 67 65 2e 20 20 54 68 69 73 20 72 65 73 74  page.  This rest
9ef0: 72 69 63 74 69 6f 6e 20 65 6e 73 75 72 65 73 20  riction ensures 
9f00: 74 68 61 74 20 61 20 72 6f 6f 74 20 70 61 67 65  that a root page
9f10: 20 77 69 6c 6c 20 6e 65 76 65 72 0a 62 65 20 6d   will never.be m
9f20: 6f 76 65 64 20 64 75 72 69 6e 67 20 61 6e 20 61  oved during an a
9f30: 75 74 6f 2d 76 61 63 75 75 6d 20 6f 72 20 69 6e  uto-vacuum or in
9f40: 63 72 65 6d 65 6e 74 61 6c 2d 76 61 63 75 75 6d  cremental-vacuum
9f50: 2e 20 20 54 68 65 20 61 75 74 6f 2d 76 61 63 75  .  The auto-vacu
9f60: 75 6d 0a 6c 6f 67 69 63 20 64 6f 65 73 20 6e 6f  um.logic does no
9f70: 74 20 6b 6e 6f 77 20 68 6f 77 20 74 6f 20 75 70  t know how to up
9f80: 64 61 74 65 20 74 68 65 20 72 6f 6f 74 5f 70 61  date the root_pa
9f90: 67 65 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20  ge field of the 
9fa0: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 0a 74 61  sqlite_master.ta
9fb0: 62 6c 65 20 61 6e 64 20 73 6f 20 69 74 20 69 73  ble and so it is
9fc0: 20 6e 65 63 65 73 73 61 72 79 20 74 6f 20 70 72   necessary to pr
9fd0: 65 76 65 6e 74 20 72 6f 6f 74 20 70 61 67 65 73  event root pages
9fe0: 20 66 72 6f 6d 20 62 65 69 6e 67 20 6d 6f 76 65   from being move
9ff0: 64 0a 64 75 72 69 6e 67 20 61 6e 20 61 75 74 6f  d.during an auto
a000: 2d 76 61 63 75 75 6d 20 69 6e 20 6f 72 64 65 72  -vacuum in order
a010: 20 74 6f 20 70 72 65 73 65 72 76 65 20 74 68 65   to preserve the
a020: 20 69 6e 74 65 67 72 69 74 79 20 6f 66 20 74 68   integrity of th
a030: 65 0a 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20  e.sqlite_master 
a040: 74 61 62 6c 65 2e 20 20 5e 52 6f 6f 74 20 70 61  table.  ^Root pa
a050: 67 65 73 20 61 72 65 20 6d 6f 76 65 64 20 74 6f  ges are moved to
a060: 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f   the beginning o
a070: 66 20 74 68 65 0a 64 61 74 61 62 61 73 65 20 66  f the.database f
a080: 69 6c 65 20 62 79 20 74 68 65 20 43 52 45 41 54  ile by the CREAT
a090: 45 20 54 41 42 4c 45 2c 20 43 52 45 41 54 45 20  E TABLE, CREATE 
a0a0: 49 4e 44 45 58 2c 20 44 52 4f 50 20 54 41 42 4c  INDEX, DROP TABL
a0b0: 45 2c 20 61 6e 64 0a 44 52 4f 50 20 49 4e 44 45  E, and.DROP INDE
a0c0: 58 20 6f 70 65 72 61 74 69 6f 6e 73 2e 3c 2f 70  X operations.</p
a0d0: 3e 0a 0a 3c 68 32 3e 32 2e 30 20 53 63 68 65 6d  >..<h2>2.0 Schem
a0e0: 61 20 4c 61 79 65 72 3c 2f 68 32 3e 0a 0a 3c 70  a Layer</h2>..<p
a0f0: 3e 54 68 65 20 66 6f 72 65 67 6f 69 6e 67 20 74  >The foregoing t
a100: 65 78 74 20 64 65 73 63 72 69 62 65 73 20 6c 6f  ext describes lo
a110: 77 2d 6c 65 76 65 6c 20 61 73 70 65 63 74 73 20  w-level aspects 
a120: 6f 66 20 74 68 65 20 53 51 4c 69 74 65 20 66 69  of the SQLite fi
a130: 6c 65 0a 66 6f 72 6d 61 74 2e 20 20 54 68 65 20  le.format.  The 
a140: 62 2d 74 72 65 65 20 6d 65 63 68 61 6e 69 73 6d  b-tree mechanism
a150: 20 70 72 6f 76 69 64 65 73 20 61 20 70 6f 77 65   provides a powe
a160: 72 66 75 6c 20 61 6e 64 20 65 66 66 69 63 69 65  rful and efficie
a170: 6e 74 20 6d 65 61 6e 73 20 6f 66 0a 61 63 63 65  nt means of.acce
a180: 73 73 69 6e 67 20 61 20 6c 61 72 67 65 20 64 61  ssing a large da
a190: 74 61 20 73 65 74 2e 20 20 54 68 69 73 20 73 65  ta set.  This se
a1a0: 63 74 69 6f 6e 20 77 69 6c 6c 20 64 65 73 63 72  ction will descr
a1b0: 69 62 65 20 68 6f 77 20 74 68 65 0a 6c 6f 77 2d  ibe how the.low-
a1c0: 6c 65 76 65 6c 20 62 2d 74 72 65 65 20 6c 61 79  level b-tree lay
a1d0: 65 72 20 69 73 20 75 73 65 64 20 74 6f 20 69 6d  er is used to im
a1e0: 70 6c 65 6d 65 6e 74 20 68 69 67 68 65 72 2d 6c  plement higher-l
a1f0: 65 76 65 6c 20 53 51 4c 0a 63 61 70 61 62 69 6c  evel SQL.capabil
a200: 69 74 69 65 73 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c  ities.</p>..<tcl
a210: 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 72 65 63  >hd_fragment rec
a220: 6f 72 64 5f 66 6f 72 6d 61 74 20 7b 72 65 63 6f  ord_format {reco
a230: 72 64 20 66 6f 72 6d 61 74 7d 3c 2f 74 63 6c 3e  rd format}</tcl>
a240: 0a 3c 68 33 3e 32 2e 31 20 52 65 63 6f 72 64 20  .<h3>2.1 Record 
a250: 46 6f 72 6d 61 74 3c 2f 68 33 3e 0a 0a 3c 70 3e  Format</h3>..<p>
a260: 54 68 65 20 64 61 74 61 20 66 6f 72 20 61 20 74  The data for a t
a270: 61 62 6c 65 20 62 2d 74 72 65 65 20 6c 65 61 66  able b-tree leaf
a280: 20 70 61 67 65 20 61 6e 64 20 74 68 65 20 6b 65   page and the ke
a290: 79 0a 6f 66 20 61 6e 20 69 6e 64 65 78 20 62 2d  y.of an index b-
a2a0: 74 72 65 65 20 70 61 67 65 20 77 61 73 20 63 68  tree page was ch
a2b0: 61 72 61 63 74 65 72 69 7a 65 64 20 61 62 6f 76  aracterized abov
a2c0: 65 0a 61 73 20 61 6e 20 61 72 62 69 74 72 61 72  e.as an arbitrar
a2d0: 79 20 73 65 71 75 65 6e 63 65 20 6f 66 20 62 79  y sequence of by
a2e0: 74 65 73 2e 0a 54 68 65 20 70 72 69 6f 72 20 64  tes..The prior d
a2f0: 69 73 63 75 73 73 69 6f 6e 20 6d 65 6e 74 69 6f  iscussion mentio
a300: 6e 65 64 20 6f 6e 65 20 6b 65 79 20 62 65 69 6e  ned one key bein
a310: 67 20 6c 65 73 73 20 74 68 61 6e 20 61 6e 6f 74  g less than anot
a320: 68 65 72 2c 20 62 75 74 0a 64 69 64 20 6e 6f 74  her, but.did not
a330: 20 64 65 66 69 6e 65 20 77 68 61 74 20 22 6c 65   define what "le
a340: 73 73 20 74 68 61 6e 22 20 6d 65 61 6e 74 2e 20  ss than" meant. 
a350: 20 54 68 65 20 63 75 72 72 65 6e 74 20 73 65 63   The current sec
a360: 74 69 6f 6e 20 77 69 6c 6c 20 61 64 64 72 65 73  tion will addres
a370: 73 0a 74 68 65 73 65 20 6f 6d 69 73 73 69 6f 6e  s.these omission
a380: 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 50 61 79 6c 6f  s.</p>..<p>Paylo
a390: 61 64 2c 20 65 69 74 68 65 72 20 74 61 62 6c 65  ad, either table
a3a0: 20 62 2d 74 72 65 65 20 64 61 74 61 20 6f 72 20   b-tree data or 
a3b0: 69 6e 64 65 78 20 62 2d 74 72 65 65 20 6b 65 79  index b-tree key
a3c0: 73 2c 20 0a 69 73 20 61 6c 77 61 79 73 20 69 6e  s, .is always in
a3d0: 20 74 68 65 20 22 72 65 63 6f 72 64 20 66 6f 72   the "record for
a3e0: 6d 61 74 22 2e 0a 54 68 65 20 72 65 63 6f 72 64  mat"..The record
a3f0: 20 66 6f 72 6d 61 74 20 64 65 66 69 6e 65 73 20   format defines 
a400: 61 20 73 65 71 75 65 6e 63 65 20 6f 66 20 76 61  a sequence of va
a410: 6c 75 65 73 20 63 6f 72 72 65 73 70 6f 6e 64 69  lues correspondi
a420: 6e 67 0a 74 6f 20 63 6f 6c 75 6d 6e 73 20 69 6e  ng.to columns in
a430: 20 61 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65   a table or inde
a440: 78 2e 20 20 54 68 65 20 72 65 63 6f 72 64 20 66  x.  The record f
a450: 6f 72 6d 61 74 20 73 70 65 63 69 66 69 65 73 20  ormat specifies 
a460: 74 68 65 20 6e 75 6d 62 65 72 0a 6f 66 20 63 6f  the number.of co
a470: 6c 75 6d 6e 73 2c 20 74 68 65 20 64 61 74 61 74  lumns, the datat
a480: 79 70 65 20 6f 66 20 65 61 63 68 20 63 6f 6c 75  ype of each colu
a490: 6d 6e 2c 20 61 6e 64 20 74 68 65 20 63 6f 6e 74  mn, and the cont
a4a0: 65 6e 74 20 6f 66 20 65 61 63 68 20 63 6f 6c 75  ent of each colu
a4b0: 6d 6e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  mn.</p>..<p>The 
a4c0: 72 65 63 6f 72 64 20 66 6f 72 6d 61 74 20 6d 61  record format ma
a4d0: 6b 65 73 20 65 78 74 65 6e 73 69 76 65 20 75 73  kes extensive us
a4e0: 65 20 6f 66 20 74 68 65 20 0a 5b 76 61 72 69 61  e of the .[varia
a4f0: 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67  ble-length integ
a500: 65 72 5d 20 6f 72 20 5b 76 61 72 69 6e 74 5d 0a  er] or [varint].
a510: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f  representation o
a520: 66 20 36 34 2d 62 69 74 20 73 69 67 6e 65 64 20  f 64-bit signed 
a530: 69 6e 74 65 67 65 72 73 20 64 65 66 69 6e 65 64  integers defined
a540: 20 61 62 6f 76 65 2e 3c 2f 70 3e 0a 0a 3c 74 63   above.</p>..<tc
a550: 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 73 65  l>hd_fragment se
a560: 72 69 61 6c 74 79 70 65 20 7b 73 65 72 69 61 6c  rialtype {serial
a570: 20 74 79 70 65 7d 20 7b 73 65 72 69 61 6c 20 74   type} {serial t
a580: 79 70 65 73 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 41  ypes}</tcl>.<p>A
a590: 20 72 65 63 6f 72 64 20 63 6f 6e 74 61 69 6e 73   record contains
a5a0: 20 61 20 68 65 61 64 65 72 20 61 6e 64 20 61 20   a header and a 
a5b0: 62 6f 64 79 2c 20 69 6e 20 74 68 61 74 20 6f 72  body, in that or
a5c0: 64 65 72 2e 20 20 0a 5e 28 54 68 65 20 68 65 61  der.  .^(The hea
a5d0: 64 65 72 20 62 65 67 69 6e 73 20 77 69 74 68 20  der begins with 
a5e0: 61 20 73 69 6e 67 6c 65 20 76 61 72 69 6e 74 20  a single varint 
a5f0: 77 68 69 63 68 20 64 65 74 65 72 6d 69 6e 65 73  which determines
a600: 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65   the total numbe
a610: 72 0a 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68  r.of bytes in th
a620: 65 20 68 65 61 64 65 72 2e 20 20 54 68 65 20 76  e header.  The v
a630: 61 72 69 6e 74 20 76 61 6c 75 65 20 69 73 20 74  arint value is t
a640: 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 68  he size of the h
a650: 65 61 64 65 72 20 69 6e 0a 62 79 74 65 73 20 69  eader in.bytes i
a660: 6e 63 6c 75 64 69 6e 67 20 74 68 65 20 73 69 7a  ncluding the siz
a670: 65 20 76 61 72 69 6e 74 20 69 74 73 65 6c 66 2e  e varint itself.
a680: 29 5e 20 20 5e 46 6f 6c 6c 6f 77 69 6e 67 20 74  )^  ^Following t
a690: 68 65 20 73 69 7a 65 20 76 61 72 69 6e 74 20 61  he size varint a
a6a0: 72 65 0a 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 61  re.one or more a
a6b0: 64 64 69 74 69 6f 6e 61 6c 20 76 61 72 69 6e 74  dditional varint
a6c0: 73 2c 20 6f 6e 65 20 70 65 72 20 63 6f 6c 75 6d  s, one per colum
a6d0: 6e 2e 20 20 54 68 65 73 65 20 61 64 64 69 74 69  n.  These additi
a6e0: 6f 6e 61 6c 20 76 61 72 69 6e 74 73 0a 61 72 65  onal varints.are
a6f0: 20 63 61 6c 6c 65 64 20 22 73 65 72 69 61 6c 20   called "serial 
a700: 74 79 70 65 22 20 6e 75 6d 62 65 72 73 20 61 6e  type" numbers an
a710: 64 0a 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20  d.determine the 
a720: 64 61 74 61 74 79 70 65 20 6f 66 20 65 61 63 68  datatype of each
a730: 20 63 6f 6c 75 6d 6e 2c 20 61 63 63 6f 72 64 69   column, accordi
a740: 6e 67 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77  ng to the follow
a750: 69 6e 67 20 63 68 61 72 74 3a 3c 2f 70 3e 0a 0a  ing chart:</p>..
a760: 3c 63 65 6e 74 65 72 3e 0a 5e 28 3c 69 3e 53 65  <center>.^(<i>Se
a770: 72 69 61 6c 20 54 79 70 65 20 43 6f 64 65 73 20  rial Type Codes 
a780: 4f 66 20 54 68 65 20 52 65 63 6f 72 64 20 46 6f  Of The Record Fo
a790: 72 6d 61 74 3c 2f 69 3e 3c 62 72 3e 0a 3c 74 61  rmat</i><br>.<ta
a7a0: 62 6c 65 20 77 69 64 74 68 3d 22 38 30 25 22 20  ble width="80%" 
a7b0: 62 6f 72 64 65 72 3d 31 3e 0a 3c 74 72 3e 3c 74  border=1>.<tr><t
a7c0: 68 3e 53 65 72 69 61 6c 20 54 79 70 65 3c 74 68  h>Serial Type<th
a7d0: 3e 43 6f 6e 74 65 6e 74 20 53 69 7a 65 3c 74 68  >Content Size<th
a7e0: 3e 4d 65 61 6e 69 6e 67 0a 3c 74 72 3e 3c 74 64  >Meaning.<tr><td
a7f0: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
a800: 6e 3d 63 65 6e 74 65 72 3e 30 3c 74 64 20 76 61  n=center>0<td va
a810: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
a820: 65 6e 74 65 72 3e 30 3c 74 64 20 61 6c 69 67 6e  enter>0<td align
a830: 3d 6c 65 66 74 3e 0a 4e 55 4c 4c 0a 3c 74 72 3e  =left>.NULL.<tr>
a840: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
a850: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 3c 74 64  lign=center>1<td
a860: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
a870: 6e 3d 63 65 6e 74 65 72 3e 31 3c 74 64 20 61 6c  n=center>1<td al
a880: 69 67 6e 3d 6c 65 66 74 3e 0a 38 2d 62 69 74 20  ign=left>.8-bit 
a890: 74 77 6f 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20  twos-complement 
a8a0: 69 6e 74 65 67 65 72 0a 3c 74 72 3e 3c 74 64 20  integer.<tr><td 
a8b0: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
a8c0: 3d 63 65 6e 74 65 72 3e 32 3c 74 64 20 76 61 6c  =center>2<td val
a8d0: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
a8e0: 6e 74 65 72 3e 32 3c 74 64 20 61 6c 69 67 6e 3d  nter>2<td align=
a8f0: 6c 65 66 74 3e 0a 42 69 67 2d 65 6e 64 69 61 6e  left>.Big-endian
a900: 20 31 36 2d 62 69 74 20 74 77 6f 73 2d 63 6f 6d   16-bit twos-com
a910: 70 6c 65 6d 65 6e 74 20 69 6e 74 65 67 65 72 0a  plement integer.
a920: 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74  <tr><td valign=t
a930: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
a940: 33 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  3<td valign=top 
a950: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 33 3c 74  align=center>3<t
a960: 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 42 69  d align=left>.Bi
a970: 67 2d 65 6e 64 69 61 6e 20 32 34 2d 62 69 74 20  g-endian 24-bit 
a980: 74 77 6f 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20  twos-complement 
a990: 69 6e 74 65 67 65 72 0a 3c 74 72 3e 3c 74 64 20  integer.<tr><td 
a9a0: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
a9b0: 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20 76 61 6c  =center>4<td val
a9c0: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
a9d0: 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d  nter>4<td align=
a9e0: 6c 65 66 74 3e 0a 42 69 67 2d 65 6e 64 69 61 6e  left>.Big-endian
a9f0: 20 33 32 2d 62 69 74 20 74 77 6f 73 2d 63 6f 6d   32-bit twos-com
aa00: 70 6c 65 6d 65 6e 74 20 69 6e 74 65 67 65 72 0a  plement integer.
aa10: 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74  <tr><td valign=t
aa20: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
aa30: 35 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  5<td valign=top 
aa40: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 36 3c 74  align=center>6<t
aa50: 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 42 69  d align=left>.Bi
aa60: 67 2d 65 6e 64 69 61 6e 20 34 38 2d 62 69 74 20  g-endian 48-bit 
aa70: 74 77 6f 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20  twos-complement 
aa80: 69 6e 74 65 67 65 72 0a 3c 74 72 3e 3c 74 64 20  integer.<tr><td 
aa90: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
aaa0: 3d 63 65 6e 74 65 72 3e 36 3c 74 64 20 76 61 6c  =center>6<td val
aab0: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
aac0: 6e 74 65 72 3e 38 3c 74 64 20 61 6c 69 67 6e 3d  nter>8<td align=
aad0: 6c 65 66 74 3e 0a 42 69 67 2d 65 6e 64 69 61 6e  left>.Big-endian
aae0: 20 36 34 2d 62 69 74 20 74 77 6f 73 2d 63 6f 6d   64-bit twos-com
aaf0: 70 6c 65 6d 65 6e 74 20 69 6e 74 65 67 65 72 0a  plement integer.
ab00: 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74  <tr><td valign=t
ab10: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
ab20: 37 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  7<td valign=top 
ab30: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 38 3c 74  align=center>8<t
ab40: 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 42 69  d align=left>.Bi
ab50: 67 2d 65 6e 64 69 61 6e 20 49 45 45 45 20 37 35  g-endian IEEE 75
ab60: 34 2d 32 30 30 38 20 36 34 2d 62 69 74 20 66 6c  4-2008 64-bit fl
ab70: 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 6e 75 6d  oating point num
ab80: 62 65 72 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  ber.<tr><td vali
ab90: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
aba0: 74 65 72 3e 38 3c 74 64 20 76 61 6c 69 67 6e 3d  ter>8<td valign=
abb0: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
abc0: 3e 30 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74  >0<td align=left
abd0: 3e 0a 49 6e 74 65 67 65 72 20 63 6f 6e 73 74 61  >.Integer consta
abe0: 6e 74 20 30 2e 20 20 4f 6e 6c 79 20 61 76 61 69  nt 0.  Only avai
abf0: 6c 61 62 6c 65 20 66 6f 72 20 73 63 68 65 6d 61  lable for schema
ac00: 20 66 6f 72 6d 61 74 20 34 20 61 6e 64 20 68 69   format 4 and hi
ac10: 67 68 65 72 2e 0a 3c 74 72 3e 3c 74 64 20 76 61  gher..<tr><td va
ac20: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
ac30: 65 6e 74 65 72 3e 39 3c 74 64 20 76 61 6c 69 67  enter>9<td valig
ac40: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
ac50: 65 72 3e 30 3c 74 64 20 61 6c 69 67 6e 3d 6c 65  er>0<td align=le
ac60: 66 74 3e 0a 49 6e 74 65 67 65 72 20 63 6f 6e 73  ft>.Integer cons
ac70: 74 61 6e 74 20 31 2e 20 20 4f 6e 6c 79 20 61 76  tant 1.  Only av
ac80: 61 69 6c 61 62 6c 65 20 66 6f 72 20 73 63 68 65  ailable for sche
ac90: 6d 61 20 66 6f 72 6d 61 74 20 34 20 61 6e 64 20  ma format 4 and 
aca0: 68 69 67 68 65 72 2e 0a 3c 74 72 3e 3c 74 64 20  higher..<tr><td 
acb0: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
acc0: 3d 63 65 6e 74 65 72 3e 31 30 2c 31 31 0a 20 20  =center>10,11.  
acd0: 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70    <td valign=top
ace0: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 26 6e   align=center>&n
acf0: 62 73 70 3b 3c 74 64 20 61 6c 69 67 6e 3d 6c 65  bsp;<td align=le
ad00: 66 74 3e 0a 3c 69 3e 4e 6f 74 20 75 73 65 64 2e  ft>.<i>Not used.
ad10: 20 20 52 65 73 65 72 76 65 64 20 66 6f 72 20 65    Reserved for e
ad20: 78 70 61 6e 73 69 6f 6e 2e 3c 2f 69 3e 0a 3c 74  xpansion.</i>.<t
ad30: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
ad40: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 4e 26   align=center>N&
ad50: 23 78 32 32 36 35 3b 31 32 20 61 6e 64 20 65 76  #x2265;12 and ev
ad60: 65 6e 0a 20 20 20 20 3c 74 64 20 76 61 6c 69 67  en.    <td valig
ad70: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
ad80: 65 72 3e 28 4e 2d 31 32 29 2f 32 3c 74 64 20 61  er>(N-12)/2<td a
ad90: 6c 69 67 6e 3d 6c 65 66 74 3e 0a 41 20 42 4c 4f  lign=left>.A BLO
ada0: 42 20 74 68 61 74 20 69 73 20 28 4e 2d 31 32 29  B that is (N-12)
adb0: 2f 32 20 62 79 74 65 73 20 69 6e 20 6c 65 6e 67  /2 bytes in leng
adc0: 74 68 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  th.<tr><td valig
add0: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
ade0: 65 72 3e 4e 26 23 78 32 32 36 35 3b 31 33 20 61  er>N&#x2265;13 a
adf0: 6e 64 20 6f 64 64 0a 20 20 20 20 3c 74 64 20 76  nd odd.    <td v
ae00: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
ae10: 63 65 6e 74 65 72 3e 28 4e 2d 31 33 29 2f 32 3c  center>(N-13)/2<
ae20: 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 41  td align=left>.A
ae30: 20 73 74 72 69 6e 67 20 69 6e 20 74 68 65 20 64   string in the d
ae40: 61 74 61 62 61 73 65 20 65 6e 63 6f 64 69 6e 67  atabase encoding
ae50: 20 61 6e 64 20 28 4e 2d 31 33 29 2f 32 20 62 79   and (N-13)/2 by
ae60: 74 65 73 20 69 6e 20 6c 65 6e 67 74 68 2e 0a 54  tes in length..T
ae70: 68 65 20 6e 75 6c 20 74 65 72 6d 69 6e 61 74 6f  he nul terminato
ae80: 72 20 69 73 20 6f 6d 69 74 74 65 64 2e 0a 3c 2f  r is omitted..</
ae90: 74 61 62 6c 65 3e 3c 2f 63 65 6e 74 65 72 3e 29  table></center>)
aea0: 5e 0a 0a 3c 70 3e 4e 6f 74 65 20 74 68 61 74 20  ^..<p>Note that 
aeb0: 62 65 63 61 75 73 65 20 6f 66 20 74 68 65 20 77  because of the w
aec0: 61 79 20 76 61 72 69 6e 74 73 20 61 72 65 20 64  ay varints are d
aed0: 65 66 69 6e 65 64 2c 20 74 68 65 20 68 65 61 64  efined, the head
aee0: 65 72 20 73 69 7a 65 20 76 61 72 69 6e 74 0a 61  er size varint.a
aef0: 6e 64 20 73 65 72 69 61 6c 20 74 79 70 65 20 76  nd serial type v
af00: 61 72 69 6e 74 73 20 77 69 6c 6c 20 75 73 75 61  arints will usua
af10: 6c 6c 79 20 63 6f 6e 73 69 73 74 20 6f 66 20 61  lly consist of a
af20: 20 73 69 6e 67 6c 65 20 62 79 74 65 2e 20 20 54   single byte.  T
af30: 68 65 0a 73 65 72 69 61 6c 20 74 79 70 65 20 76  he.serial type v
af40: 61 72 69 6e 74 73 20 66 6f 72 20 6c 61 72 67 65  arints for large
af50: 20 73 74 72 69 6e 67 73 20 61 6e 64 20 42 4c 4f   strings and BLO
af60: 42 73 20 6d 69 67 68 74 20 65 78 74 65 6e 64 20  Bs might extend 
af70: 74 6f 20 74 77 6f 20 6f 72 20 74 68 72 65 65 0a  to two or three.
af80: 62 79 74 65 20 76 61 72 69 6e 74 73 2c 20 62 75  byte varints, bu
af90: 74 20 74 68 61 74 20 69 73 20 74 68 65 20 65 78  t that is the ex
afa0: 63 65 70 74 69 6f 6e 20 72 61 74 68 65 72 20 74  ception rather t
afb0: 68 61 6e 20 74 68 65 20 72 75 6c 65 2e 20 0a 54  han the rule. .T
afc0: 68 65 20 76 61 72 69 6e 74 20 66 6f 72 6d 61 74  he varint format
afd0: 20 69 73 20 76 65 72 79 20 65 66 66 69 63 69 65   is very efficie
afe0: 6e 74 20 61 74 20 63 6f 64 69 6e 67 20 74 68 65  nt at coding the
aff0: 20 72 65 63 6f 72 64 20 68 65 61 64 65 72 2e 3c   record header.<
b000: 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 76 61 6c 75  /p>..<p>The valu
b010: 65 73 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75  es for each colu
b020: 6d 6e 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64  mn in the record
b030: 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c   immediately fol
b040: 6c 6f 77 20 74 68 65 20 68 65 61 64 65 72 2e 0a  low the header..
b050: 5e 28 4e 6f 74 65 20 74 68 61 74 20 66 6f 72 20  ^(Note that for 
b060: 73 65 72 69 61 6c 20 74 79 70 65 73 20 30 2c 20  serial types 0, 
b070: 38 2c 20 39 2c 20 31 32 2c 20 61 6e 64 20 31 33  8, 9, 12, and 13
b080: 2c 20 74 68 65 20 76 61 6c 75 65 20 69 73 20 7a  , the value is z
b090: 65 72 6f 20 62 79 74 65 73 20 69 6e 0a 6c 65 6e  ero bytes in.len
b0a0: 67 74 68 2e 20 20 49 66 20 61 6c 6c 20 63 6f 6c  gth.  If all col
b0b0: 75 6d 6e 73 20 61 72 65 20 6f 66 20 74 68 65 73  umns are of thes
b0c0: 65 20 74 79 70 65 73 20 74 68 65 6e 20 74 68 65  e types then the
b0d0: 20 62 6f 64 79 20 73 65 63 74 69 6f 6e 20 6f 66   body section of
b0e0: 20 74 68 65 0a 72 65 63 6f 72 64 20 69 73 20 65   the.record is e
b0f0: 6d 70 74 79 2e 29 5e 3c 2f 70 3e 0a 0a 3c 68 33  mpty.)^</p>..<h3
b100: 3e 32 2e 32 20 52 65 63 6f 72 64 20 53 6f 72 74  >2.2 Record Sort
b110: 20 4f 72 64 65 72 3c 2f 68 33 3e 0a 0a 3c 70 3e   Order</h3>..<p>
b120: 54 68 65 20 6f 72 64 65 72 20 6f 66 20 6b 65 79  The order of key
b130: 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 62 2d  s in an index b-
b140: 74 72 65 65 20 69 73 20 64 65 74 65 72 6d 69 6e  tree is determin
b150: 65 64 20 62 79 20 74 68 65 20 73 6f 72 74 20 6f  ed by the sort o
b160: 72 64 65 72 20 6f 66 0a 74 68 65 20 72 65 63 6f  rder of.the reco
b170: 72 64 73 20 74 68 61 74 20 74 68 65 20 6b 65 79  rds that the key
b180: 73 20 72 65 70 72 65 73 65 6e 74 2e 20 20 52 65  s represent.  Re
b190: 63 6f 72 64 20 63 6f 6d 70 61 72 69 73 6f 6e 20  cord comparison 
b1a0: 70 72 6f 67 72 65 73 73 65 73 20 63 6f 6c 75 6d  progresses colum
b1b0: 6e 0a 62 79 20 63 6f 6c 75 6d 6e 2e 20 20 43 6f  n.by column.  Co
b1c0: 6c 75 6d 6e 73 20 6f 66 20 61 20 72 65 63 6f 72  lumns of a recor
b1d0: 64 20 61 72 65 20 65 78 61 6d 69 6e 65 64 20 66  d are examined f
b1e0: 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68  rom left to righ
b1f0: 74 2e 20 20 54 68 65 0a 66 69 72 73 74 20 70 61  t.  The.first pa
b200: 69 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 74 68  ir of columns th
b210: 61 74 20 61 72 65 20 6e 6f 74 20 65 71 75 61 6c  at are not equal
b220: 20 64 65 74 65 72 6d 69 6e 65 73 20 74 68 65 20   determines the 
b230: 72 65 6c 61 74 69 76 65 20 6f 72 64 65 72 0a 6f  relative order.o
b240: 66 20 74 68 65 20 74 77 6f 20 72 65 63 6f 72 64  f the two record
b250: 73 2e 20 20 54 68 65 20 73 6f 72 74 20 6f 72 64  s.  The sort ord
b260: 65 72 20 6f 66 20 69 6e 64 69 76 69 64 75 61 6c  er of individual
b270: 20 63 6f 6c 75 6d 6e 73 20 69 73 20 61 73 0a 66   columns is as.f
b280: 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 6f 6c  ollows:</p>..<ol
b290: 3e 0a 3c 6c 69 3e 5e 28 4e 55 4c 4c 20 76 61 6c  >.<li>^(NULL val
b2a0: 75 65 73 20 28 73 65 72 69 61 6c 20 74 79 70 65  ues (serial type
b2b0: 20 30 29 20 73 6f 72 74 20 66 69 72 73 74 2e 29   0) sort first.)
b2c0: 5e 0a 3c 6c 69 3e 5e 28 4e 75 6d 65 72 69 63 20  ^.<li>^(Numeric 
b2d0: 76 61 6c 75 65 73 20 28 73 65 72 69 61 6c 20 74  values (serial t
b2e0: 79 70 65 73 20 31 20 74 68 72 6f 75 67 68 20 39  ypes 1 through 9
b2f0: 29 20 73 6f 72 74 20 61 66 74 65 72 20 4e 55 4c  ) sort after NUL
b300: 4c 73 0a 20 20 20 20 20 20 61 6e 64 20 69 6e 20  Ls.      and in 
b310: 6e 75 6d 65 72 69 63 20 6f 72 64 65 72 2e 29 5e  numeric order.)^
b320: 0a 3c 6c 69 3e 5e 28 54 65 78 74 20 76 61 6c 75  .<li>^(Text valu
b330: 65 73 20 28 6f 64 64 20 73 65 72 69 61 6c 20 74  es (odd serial t
b340: 79 70 65 73 20 31 33 20 61 6e 64 20 6c 61 72 67  ypes 13 and larg
b350: 65 72 29 20 73 6f 72 74 20 61 66 74 65 72 20 6e  er) sort after n
b360: 75 6d 65 72 69 63 0a 20 20 20 20 76 61 6c 75 65  umeric.    value
b370: 73 20 69 6e 20 74 68 65 20 6f 72 64 65 72 20 64  s in the order d
b380: 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65  etermined by the
b390: 20 63 6f 6c 75 6d 6e 73 20 5b 63 6f 6c 6c 61 74   columns [collat
b3a0: 69 6e 67 20 66 75 6e 63 74 69 6f 6e 5d 2e 29 5e  ing function].)^
b3b0: 0a 3c 6c 69 3e 5e 28 42 4c 4f 42 20 76 61 6c 75  .<li>^(BLOB valu
b3c0: 65 73 20 28 65 76 65 6e 20 73 65 72 69 61 6c 20  es (even serial 
b3d0: 74 79 70 65 73 20 31 32 20 61 6e 64 20 6c 61 72  types 12 and lar
b3e0: 67 65 72 29 20 73 6f 72 74 20 6c 61 73 74 20 61  ger) sort last a
b3f0: 6e 64 20 69 6e 20 74 68 65 20 6f 72 64 65 72 20  nd in the order 
b400: 0a 20 20 20 20 64 65 74 65 72 6d 69 6e 65 64 20  .    determined 
b410: 62 79 20 6d 65 6d 63 6d 70 28 29 2e 29 5e 0a 3c  by memcmp().)^.<
b420: 2f 6f 6c 3e 0a 0a 3c 70 3e 41 20 5b 63 6f 6c 6c  /ol>..<p>A [coll
b430: 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 5d 20  ating function] 
b440: 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20  for each column 
b450: 69 73 20 6e 65 63 65 73 73 61 72 79 20 69 6e 20  is necessary in 
b460: 6f 72 64 65 72 20 74 6f 20 63 6f 6d 70 75 74 65  order to compute
b470: 0a 74 68 65 20 6f 72 64 65 72 20 6f 66 20 74 65  .the order of te
b480: 78 74 20 66 69 65 6c 64 73 2e 0a 5e 28 53 51 4c  xt fields..^(SQL
b490: 69 74 65 20 64 65 66 69 6e 65 73 20 74 68 72 65  ite defines thre
b4a0: 65 20 62 75 69 6c 74 2d 69 6e 20 63 6f 6c 6c 61  e built-in colla
b4b0: 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 73 3a 29  ting functions:)
b4c0: 5e 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75  ^.</p>..<blockqu
b4d0: 6f 74 65 3e 3c 74 61 62 6c 65 20 62 6f 72 64 65  ote><table borde
b4e0: 72 3d 30 20 63 65 6c 6c 73 70 61 63 69 6e 67 3d  r=0 cellspacing=
b4f0: 31 30 3e 0a 3c 74 72 3e 5e 3c 74 64 20 76 61 6c  10>.<tr>^<td val
b500: 69 67 6e 3d 74 6f 70 3e 42 49 4e 41 52 59 0a 20  ign=top>BINARY. 
b510: 20 20 20 3c 74 64 3e 53 74 72 69 6e 67 73 20 61     <td>Strings a
b520: 72 65 20 63 6f 6d 70 61 72 65 64 20 62 79 74 65  re compared byte
b530: 20 62 79 20 62 79 74 65 20 75 73 69 6e 67 20 74   by byte using t
b540: 68 65 20 6d 65 6d 63 6d 70 28 29 20 66 75 6e 63  he memcmp() func
b550: 74 69 6f 6e 0a 20 20 20 20 20 20 20 20 66 72 6f  tion.        fro
b560: 6d 20 74 68 65 20 73 74 61 6e 64 61 72 64 20 43  m the standard C
b570: 20 6c 69 62 72 61 72 79 2e 0a 3c 74 72 3e 5e 3c   library..<tr>^<
b580: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 4e 4f  td valign=top>NO
b590: 43 41 53 45 0a 20 20 20 20 3c 74 64 3e 4c 69 6b  CASE.    <td>Lik
b5a0: 65 20 42 49 4e 41 52 59 20 65 78 63 65 70 74 20  e BINARY except 
b5b0: 74 68 61 74 20 75 70 70 65 72 63 61 73 65 20 41  that uppercase A
b5c0: 53 43 49 49 20 63 68 61 72 61 63 74 65 72 73 20  SCII characters 
b5d0: 28 27 41 27 20 74 68 72 6f 75 67 68 20 27 5a 27  ('A' through 'Z'
b5e0: 29 0a 20 20 20 20 20 20 20 20 61 72 65 20 66 6f  ).        are fo
b5f0: 6c 64 65 64 20 69 6e 74 6f 20 74 68 65 69 72 20  lded into their 
b600: 6c 6f 77 65 72 63 61 73 65 20 65 71 75 69 76 61  lowercase equiva
b610: 6c 65 6e 74 73 20 70 72 69 6f 72 20 74 6f 20 72  lents prior to r
b620: 75 6e 6e 69 6e 67 20 74 68 65 0a 20 20 20 20 20  unning the.     
b630: 20 20 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20     comparison.  
b640: 4e 6f 74 65 20 74 68 61 74 20 6f 6e 6c 79 20 41  Note that only A
b650: 53 43 49 49 20 63 68 61 72 61 63 74 65 72 73 20  SCII characters 
b660: 61 72 65 20 63 61 73 65 2d 66 6f 6c 64 65 64 2e  are case-folded.
b670: 20 20 5e 4e 4f 43 41 53 45 0a 20 20 20 20 20 20    ^NOCASE.      
b680: 20 20 64 6f 65 73 20 6e 6f 74 20 69 6d 70 6c 65    does not imple
b690: 6d 65 6e 74 20 61 20 67 65 6e 65 72 61 6c 20 70  ment a general p
b6a0: 75 72 70 6f 73 65 20 75 6e 69 63 6f 64 65 20 63  urpose unicode c
b6b0: 61 73 65 6c 65 73 73 20 63 6f 6d 70 61 72 69 73  aseless comparis
b6c0: 6f 6e 2e 0a 3c 74 72 3e 5e 3c 74 64 20 76 61 6c  on..<tr>^<td val
b6d0: 69 67 6e 3d 74 6f 70 3e 52 54 52 49 4d 0a 20 20  ign=top>RTRIM.  
b6e0: 20 20 3c 74 64 3e 4c 69 6b 65 20 42 49 4e 41 52    <td>Like BINAR
b6f0: 59 20 65 78 63 65 70 74 20 74 68 61 74 20 73 70  Y except that sp
b700: 61 63 65 73 20 61 74 20 74 68 65 20 65 6e 64 20  aces at the end 
b710: 6f 66 20 74 68 65 20 73 74 72 69 6e 67 20 61 72  of the string ar
b720: 65 20 65 6c 69 64 65 64 0a 20 20 20 20 20 20 20  e elided.       
b730: 20 70 72 69 6f 72 20 74 6f 20 63 6f 6d 70 61 72   prior to compar
b740: 69 73 6f 6e 2e 0a 3c 2f 74 61 62 6c 65 3e 3c 2f  ison..</table></
b750: 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e  blockquote>..<p>
b760: 5e 41 64 64 69 74 69 6f 6e 61 6c 20 61 70 70 6c  ^Additional appl
b770: 69 63 61 74 69 6f 6e 2d 73 70 65 63 69 66 69 63  ication-specific
b780: 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74   collating funct
b790: 69 6f 6e 73 20 63 61 6e 20 62 65 20 61 64 64 65  ions can be adde
b7a0: 64 20 74 6f 0a 53 51 4c 69 74 65 20 75 73 69 6e  d to.SQLite usin
b7b0: 67 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 63  g the [sqlite3_c
b7c0: 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28  reate_collation(
b7d0: 29 5d 20 69 6e 74 65 72 66 61 63 65 2e 3c 2f 70  )] interface.</p
b7e0: 3e 0a 0a 3c 70 3e 5e 54 68 65 20 64 65 66 61 75  >..<p>^The defau
b7f0: 6c 74 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e  lt collating fun
b800: 63 74 69 6f 6e 20 66 6f 72 20 61 6c 6c 20 73 74  ction for all st
b810: 72 69 6e 67 73 20 69 73 20 42 49 4e 41 52 59 2e  rings is BINARY.
b820: 0a 5e 41 6c 74 65 72 6e 61 74 69 76 65 20 63 6f  .^Alternative co
b830: 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e  llating function
b840: 73 20 66 6f 72 20 74 61 62 6c 65 20 63 6f 6c 75  s for table colu
b850: 6d 6e 73 20 63 61 6e 20 62 65 20 73 70 65 63 69  mns can be speci
b860: 66 69 65 64 20 69 6e 20 74 68 65 0a 5b 43 52 45  fied in the.[CRE
b870: 41 54 45 20 54 41 42 4c 45 5d 20 73 74 61 74 65  ATE TABLE] state
b880: 6d 65 6e 74 20 75 73 69 6e 67 20 74 68 65 20 43  ment using the C
b890: 4f 4c 4c 41 54 45 20 63 6c 61 75 73 65 20 6f 6e  OLLATE clause on
b8a0: 20 74 68 65 20 5b 63 6f 6c 75 6d 6e 20 64 65 66   the [column def
b8b0: 69 6e 69 74 69 6f 6e 5d 2e 0a 5e 57 68 65 6e 20  inition]..^When 
b8c0: 61 20 63 6f 6c 75 6d 6e 20 69 73 20 69 6e 64 65  a column is inde
b8d0: 78 65 64 2c 20 74 68 65 20 73 61 6d 65 20 63 6f  xed, the same co
b8e0: 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e  llating function
b8f0: 20 73 70 65 63 69 66 69 65 64 20 69 6e 20 74 68   specified in th
b900: 65 0a 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d  e.[CREATE TABLE]
b910: 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 75 73   statement is us
b920: 65 64 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d  ed for the colum
b930: 6e 20 69 6e 20 74 68 65 20 69 6e 64 65 78 2c 20  n in the index, 
b940: 62 79 20 64 65 66 61 75 6c 74 2c 0a 74 68 6f 75  by default,.thou
b950: 67 68 20 74 68 69 73 20 63 61 6e 20 62 65 20 6f  gh this can be o
b960: 76 65 72 72 69 64 64 65 6e 20 75 73 69 6e 67 20  verridden using 
b970: 61 20 43 4f 4c 4c 41 54 45 20 63 6c 61 75 73 65  a COLLATE clause
b980: 20 69 6e 20 74 68 65 20 0a 5b 43 52 45 41 54 45   in the .[CREATE
b990: 20 49 4e 44 45 58 5d 20 73 74 61 74 65 6d 65 6e   INDEX] statemen
b9a0: 74 2e 0a 0a 3c 68 33 3e 32 2e 33 20 52 65 70 72  t...<h3>2.3 Repr
b9b0: 65 73 65 6e 74 61 74 69 6f 6e 20 4f 66 20 53 51  esentation Of SQ
b9c0: 4c 20 54 61 62 6c 65 73 3c 2f 68 33 3e 0a 0a 3c  L Tables</h3>..<
b9d0: 70 3e 45 61 63 68 20 6f 72 64 69 6e 61 72 79 20  p>Each ordinary 
b9e0: 53 51 4c 20 74 61 62 6c 65 20 69 6e 20 74 68 65  SQL table in the
b9f0: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
ba00: 20 69 73 20 72 65 70 72 65 73 65 6e 74 65 64 20   is represented 
ba10: 6f 6e 2d 64 69 73 6b 0a 62 79 20 61 20 74 61 62  on-disk.by a tab
ba20: 6c 65 20 62 2d 74 72 65 65 2e 20 20 45 61 63 68  le b-tree.  Each
ba30: 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20 74 61   entry in the ta
ba40: 62 6c 65 20 62 2d 74 72 65 65 20 63 6f 72 72 65  ble b-tree corre
ba50: 73 70 6f 6e 64 73 20 74 6f 20 61 20 72 6f 77 0a  sponds to a row.
ba60: 6f 66 20 74 68 65 20 53 51 4c 20 74 61 62 6c 65  of the SQL table
ba70: 2e 20 20 54 68 65 20 5b 72 6f 77 69 64 5d 20 6f  .  The [rowid] o
ba80: 66 20 74 68 65 20 53 51 4c 20 74 61 62 6c 65 20  f the SQL table 
ba90: 69 73 20 74 68 65 20 36 34 2d 62 69 74 20 73 69  is the 64-bit si
baa0: 67 6e 65 64 0a 69 6e 74 65 67 65 72 20 6b 65 79  gned.integer key
bab0: 20 66 6f 72 20 65 61 63 68 20 65 6e 74 72 79 20   for each entry 
bac0: 69 6e 20 74 68 65 20 74 61 62 6c 65 20 62 2d 74  in the table b-t
bad0: 72 65 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  ree.</p>..<p>The
bae0: 20 63 6f 6e 74 65 6e 74 20 6f 66 20 65 61 63 68   content of each
baf0: 20 53 51 4c 20 74 61 62 6c 65 20 72 6f 77 20 69   SQL table row i
bb00: 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  s stored in the 
bb10: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 62 79  database file by
bb20: 0a 66 69 72 73 74 20 63 6f 6d 62 69 6e 69 6e 67  .first combining
bb30: 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 74   the values in t
bb40: 68 65 20 76 61 72 69 6f 75 73 20 63 6f 6c 75 6d  he various colum
bb50: 6e 73 20 69 6e 74 6f 20 61 20 62 79 74 65 20 61  ns into a byte a
bb60: 72 72 61 79 0a 69 6e 20 74 68 65 20 72 65 63 6f  rray.in the reco
bb70: 72 64 20 66 6f 72 6d 61 74 2c 20 74 68 65 6e 20  rd format, then 
bb80: 73 74 6f 72 69 6e 67 20 74 68 61 74 20 62 79 74  storing that byt
bb90: 65 20 61 72 72 61 79 20 61 73 20 74 68 65 20 70  e array as the p
bba0: 61 79 6c 6f 61 64 20 69 6e 0a 61 6e 20 65 6e 74  ayload in.an ent
bbb0: 72 79 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20  ry in the table 
bbc0: 62 2d 74 72 65 65 2e 20 20 5e 54 68 65 20 6f 72  b-tree.  ^The or
bbd0: 64 65 72 20 6f 66 20 76 61 6c 75 65 73 20 69 6e  der of values in
bbe0: 20 74 68 65 20 72 65 63 6f 72 64 20 69 73 0a 74   the record is.t
bbf0: 68 65 20 73 61 6d 65 20 61 73 20 74 68 65 20 6f  he same as the o
bc00: 72 64 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  rder of columns 
bc10: 69 6e 20 74 68 65 20 53 51 4c 20 74 61 62 6c 65  in the SQL table
bc20: 20 64 65 66 69 6e 69 74 69 6f 6e 2e 0a 5e 57 68   definition..^Wh
bc30: 65 6e 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20  en an SQL table 
bc40: 74 68 61 74 20 69 6e 63 6c 75 64 65 73 20 61 6e  that includes an
bc50: 0a 5b 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  .[INTEGER PRIMAR
bc60: 59 20 4b 45 59 5d 20 63 6f 6c 75 6d 6e 20 28 77  Y KEY] column (w
bc70: 68 69 63 68 20 61 6c 69 61 73 65 73 20 74 68 65  hich aliases the
bc80: 20 5b 72 6f 77 69 64 5d 29 20 74 68 65 6e 20 74   [rowid]) then t
bc90: 68 61 74 0a 63 6f 6c 75 6d 6e 20 61 70 70 65 61  hat.column appea
bca0: 72 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64  rs in the record
bcb0: 20 61 73 20 61 20 4e 55 4c 4c 20 76 61 6c 75 65   as a NULL value
bcc0: 2e 20 20 5e 53 51 4c 69 74 65 20 77 69 6c 6c 20  .  ^SQLite will 
bcd0: 61 6c 77 61 79 73 20 75 73 65 0a 74 68 65 20 74  always use.the t
bce0: 61 62 6c 65 20 62 2d 74 72 65 65 20 6b 65 79 20  able b-tree key 
bcf0: 72 61 74 68 65 72 20 74 68 61 6e 20 74 68 65 20  rather than the 
bd00: 4e 55 4c 4c 20 76 61 6c 75 65 20 77 68 65 6e 20  NULL value when 
bd10: 72 65 66 65 72 65 6e 63 69 6e 67 20 74 68 65 0a  referencing the.
bd20: 5b 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59  [INTEGER PRIMARY
bd30: 20 4b 45 59 5d 20 63 6f 6c 75 6d 6e 2e 3c 2f 70   KEY] column.</p
bd40: 3e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 5b 61  >..<p>^If the [a
bd50: 66 66 69 6e 69 74 79 5d 20 6f 66 20 61 20 63 6f  ffinity] of a co
bd60: 6c 75 6d 6e 20 69 73 20 52 45 41 4c 20 61 6e 64  lumn is REAL and
bd70: 20 74 68 61 74 20 63 6f 6c 75 6d 6e 20 63 6f 6e   that column con
bd80: 74 61 69 6e 73 20 61 0a 76 61 6c 75 65 20 74 68  tains a.value th
bd90: 61 74 20 63 61 6e 20 62 65 20 63 6f 6e 76 65 72  at can be conver
bda0: 74 65 64 20 74 6f 20 61 6e 20 69 6e 74 65 67 65  ted to an intege
bdb0: 72 20 77 69 74 68 6f 75 74 20 6c 6f 73 73 20 6f  r without loss o
bdc0: 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 28 69  f information.(i
bdd0: 66 20 74 68 65 20 76 61 6c 75 65 20 63 6f 6e 74  f the value cont
bde0: 61 69 6e 73 20 6e 6f 20 66 72 61 63 74 69 6f 6e  ains no fraction
bdf0: 61 6c 20 70 61 72 74 20 61 6e 64 20 69 73 20 6e  al part and is n
be00: 6f 74 20 74 6f 6f 20 6c 61 72 67 65 20 74 6f 20  ot too large to 
be10: 62 65 0a 72 65 70 72 65 73 65 6e 74 65 64 20 61  be.represented a
be20: 73 20 61 6e 20 69 6e 74 65 67 65 72 29 20 74 68  s an integer) th
be30: 65 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6d 61  en the column ma
be40: 79 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20 74  y be stored in t
be50: 68 65 20 72 65 63 6f 72 64 0a 61 73 20 61 6e 20  he record.as an 
be60: 69 6e 74 65 67 65 72 2e 20 20 5e 53 51 4c 69 74  integer.  ^SQLit
be70: 65 20 77 69 6c 6c 20 63 6f 6e 76 65 72 74 20 74  e will convert t
be80: 68 65 20 76 61 6c 75 65 20 62 61 63 6b 20 74 6f  he value back to
be90: 20 66 6c 6f 61 74 69 6e 67 0a 70 6f 69 6e 74 20   floating.point 
bea0: 77 68 65 6e 20 65 78 74 72 61 63 74 69 6e 67 20  when extracting 
beb0: 69 74 20 66 72 6f 6d 20 74 68 65 20 72 65 63 6f  it from the reco
bec0: 72 64 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 32 2e 34  rd.</p>..<h3>2.4
bed0: 20 52 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   Representation 
bee0: 6f 66 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44  of WITHOUT ROWID
bef0: 20 54 61 62 6c 65 73 3c 2f 68 33 3e 0a 0a 3c 70   Tables</h3>..<p
bf00: 3e 49 66 20 61 6e 20 53 51 4c 20 74 61 62 6c 65  >If an SQL table
bf10: 20 69 73 20 63 72 65 61 74 65 64 20 75 73 69 6e   is created usin
bf20: 67 20 74 68 65 20 22 57 49 54 48 4f 55 54 20 52  g the "WITHOUT R
bf30: 4f 57 49 44 22 20 63 6c 61 75 73 65 20 61 74 20  OWID" clause at 
bf40: 74 68 65 0a 65 6e 64 20 6f 66 20 69 74 73 20 43  the.end of its C
bf50: 52 45 41 54 45 20 54 41 42 4c 45 20 73 74 61 74  REATE TABLE stat
bf60: 65 6d 65 6e 74 2c 20 74 68 65 6e 20 74 68 61 74  ement, then that
bf70: 20 74 61 62 6c 65 20 69 73 20 61 20 5b 57 49 54   table is a [WIT
bf80: 48 4f 55 54 20 52 4f 57 49 44 5d 0a 74 61 62 6c  HOUT ROWID].tabl
bf90: 65 20 61 6e 64 20 75 73 65 73 20 61 20 64 69 66  e and uses a dif
bfa0: 66 65 72 65 6e 74 20 6f 6e 2d 64 69 73 6b 20 72  ferent on-disk r
bfb0: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 20 20  epresentation.  
bfc0: 41 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44 0a  A WITHOUT ROWID.
bfd0: 74 61 62 6c 65 20 75 73 65 73 20 61 6e 20 69 6e  table uses an in
bfe0: 64 65 78 20 62 2d 74 72 65 65 20 72 61 74 68 65  dex b-tree rathe
bff0: 72 20 74 68 61 6e 20 61 20 74 61 62 6c 65 20 62  r than a table b
c000: 2d 74 72 65 65 20 66 6f 72 20 73 74 6f 72 61 67  -tree for storag
c010: 65 2e 0a 54 68 65 20 6b 65 79 20 66 6f 72 20 65  e..The key for e
c020: 61 63 68 20 65 6e 74 72 79 20 69 6e 20 74 68 65  ach entry in the
c030: 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44 20 62   WITHOUT ROWID b
c040: 2d 74 72 65 65 20 69 73 20 61 20 72 65 63 6f 72  -tree is a recor
c050: 64 20 63 6f 6d 70 6f 73 65 64 0a 6f 66 20 74 68  d composed.of th
c060: 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65  e columns of the
c070: 20 50 52 49 4d 41 52 59 20 4b 45 59 20 66 6f 6c   PRIMARY KEY fol
c080: 6c 6f 77 65 64 20 62 79 20 61 6c 6c 20 72 65 6d  lowed by all rem
c090: 61 69 6e 69 6e 67 20 63 6f 6c 75 6d 6e 73 20 6f  aining columns o
c0a0: 66 0a 74 68 65 20 74 61 62 6c 65 2e 20 20 54 68  f.the table.  Th
c0b0: 65 20 70 72 69 6d 61 72 79 20 6b 65 79 20 63 6f  e primary key co
c0c0: 6c 75 6d 6e 73 20 61 70 70 65 61 72 20 69 6e 20  lumns appear in 
c0d0: 74 68 65 20 6f 72 64 65 72 20 74 68 65 79 20 74  the order they t
c0e0: 68 65 79 20 77 65 72 65 0a 64 65 63 6c 61 72 65  hey were.declare
c0f0: 64 20 69 6e 20 74 68 65 20 50 52 49 4d 41 52 59  d in the PRIMARY
c100: 20 4b 45 59 20 63 6c 61 75 73 65 20 61 6e 64 20   KEY clause and 
c110: 74 68 65 20 72 65 6d 61 69 6e 69 6e 67 20 63 6f  the remaining co
c120: 6c 75 6d 6e 73 20 61 70 70 65 61 72 20 69 6e 0a  lumns appear in.
c130: 74 68 65 20 6f 72 64 65 72 20 74 68 65 79 20 6f  the order they o
c140: 63 63 75 72 20 69 6e 20 74 68 65 20 43 52 45 41  ccur in the CREA
c150: 54 45 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65  TE TABLE stateme
c160: 6e 74 2e 0a 0a 3c 70 3e 5e 48 65 6e 63 65 2c 20  nt...<p>^Hence, 
c170: 74 68 65 20 63 6f 6e 74 65 6e 74 20 65 6e 63 6f  the content enco
c180: 64 69 6e 67 20 66 6f 72 20 61 20 57 49 54 48 4f  ding for a WITHO
c190: 55 54 20 52 4f 57 49 44 20 74 61 62 6c 65 20 69  UT ROWID table i
c1a0: 73 20 74 68 65 20 73 61 6d 65 0a 61 73 20 74 68  s the same.as th
c1b0: 65 20 63 6f 6e 74 65 6e 74 20 65 6e 63 6f 64 69  e content encodi
c1c0: 6e 67 20 66 6f 72 20 61 6e 20 6f 72 64 69 6e 61  ng for an ordina
c1d0: 72 79 20 72 6f 77 69 64 20 74 61 62 6c 65 2c 20  ry rowid table, 
c1e0: 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65 0a  except that the.
c1f0: 6f 72 64 65 72 20 6f 66 20 74 68 65 20 63 6f 6c  order of the col
c200: 75 6d 6e 73 20 69 73 20 72 65 61 72 72 61 6e 67  umns is rearrang
c210: 65 64 20 73 6f 20 74 68 61 74 20 50 52 49 4d 41  ed so that PRIMA
c220: 52 59 20 4b 45 59 20 63 6f 6c 75 6d 6e 73 20 63  RY KEY columns c
c230: 6f 6d 65 0a 66 69 72 73 74 2c 20 61 6e 64 20 74  ome.first, and t
c240: 68 65 20 63 6f 6e 74 65 6e 74 20 69 73 20 75 73  he content is us
c250: 65 64 20 61 73 20 74 68 65 20 6b 65 79 20 69 6e  ed as the key in
c260: 20 61 6e 20 69 6e 64 65 78 20 62 2d 74 72 65 65   an index b-tree
c270: 20 72 61 74 68 65 72 0a 74 68 61 6e 20 61 73 20   rather.than as 
c280: 74 68 65 20 64 61 74 61 20 69 6e 20 61 20 74 61  the data in a ta
c290: 62 6c 65 20 62 2d 74 72 65 65 2e 0a 5e 54 68 65  ble b-tree..^The
c2a0: 20 73 70 65 63 69 61 6c 20 65 6e 63 6f 64 69 6e   special encodin
c2b0: 67 20 72 75 6c 65 73 20 66 6f 72 20 63 6f 6c 75  g rules for colu
c2c0: 6d 6e 73 20 77 69 74 68 20 52 45 41 4c 20 61 66  mns with REAL af
c2d0: 66 69 6e 69 74 79 0a 61 70 70 6c 79 20 74 6f 20  finity.apply to 
c2e0: 57 49 54 48 4f 55 54 20 52 4f 57 49 44 20 74 61  WITHOUT ROWID ta
c2f0: 62 6c 65 73 20 74 68 65 20 73 61 6d 65 20 61 73  bles the same as
c300: 20 74 68 65 79 20 64 6f 20 77 69 74 68 20 72 6f   they do with ro
c310: 77 69 64 20 74 61 62 6c 65 73 2e 0a 0a 3c 68 33  wid tables...<h3
c320: 3e 32 2e 35 20 52 65 70 72 65 73 65 6e 74 61 74  >2.5 Representat
c330: 69 6f 6e 20 4f 66 20 53 51 4c 20 49 6e 64 69 63  ion Of SQL Indic
c340: 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 45 61 63  es</h3>..<p>^Eac
c350: 68 20 53 51 4c 20 69 6e 64 65 78 2c 20 77 68 65  h SQL index, whe
c360: 74 68 65 72 20 65 78 70 6c 69 63 69 74 6c 79 20  ther explicitly 
c370: 64 65 63 6c 61 72 65 64 20 76 69 61 20 61 20 5b  declared via a [
c380: 43 52 45 41 54 45 20 49 4e 44 45 58 5d 20 73 74  CREATE INDEX] st
c390: 61 74 65 6d 65 6e 74 0a 6f 72 20 69 6d 70 6c 69  atement.or impli
c3a0: 65 64 20 62 79 20 61 20 55 4e 49 51 55 45 20 6f  ed by a UNIQUE o
c3b0: 72 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6f  r PRIMARY KEY co
c3c0: 6e 73 74 72 61 69 6e 74 2c 20 63 6f 72 72 65 73  nstraint, corres
c3d0: 70 6f 6e 64 73 20 74 6f 20 61 6e 20 0a 69 6e 64  ponds to an .ind
c3e0: 65 78 20 62 2d 74 72 65 65 20 69 6e 20 74 68 65  ex b-tree in the
c3f0: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a   database file..
c400: 5e 45 61 63 68 20 65 6e 74 72 79 20 69 6e 20 74  ^Each entry in t
c410: 68 65 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20  he index b-tree 
c420: 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 61  corresponds to a
c430: 20 73 69 6e 67 6c 65 20 72 6f 77 20 69 6e 20 74   single row in t
c440: 68 65 20 0a 61 73 73 6f 63 69 61 74 65 64 20 53  he .associated S
c450: 51 4c 20 74 61 62 6c 65 2e 0a 5e 54 68 65 20 6b  QL table..^The k
c460: 65 79 20 74 6f 20 61 6e 20 69 6e 64 65 78 20 62  ey to an index b
c470: 2d 74 72 65 65 20 69 73 0a 61 20 72 65 63 6f 72  -tree is.a recor
c480: 64 20 63 6f 6d 70 6f 73 65 64 20 6f 66 20 74 68  d composed of th
c490: 65 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20 61  e columns that a
c4a0: 72 65 20 62 65 69 6e 67 20 69 6e 64 65 78 65 64  re being indexed
c4b0: 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 74 68 65   followed by the
c4c0: 0a 6b 65 79 20 6f 66 20 74 68 65 20 63 6f 72 72  .key of the corr
c4d0: 65 73 70 6f 6e 64 69 6e 67 20 74 61 62 6c 65 20  esponding table 
c4e0: 72 6f 77 2e 20 20 46 6f 72 20 6f 72 64 69 6e 61  row.  For ordina
c4f0: 72 79 20 74 61 62 6c 65 73 2c 20 74 68 65 20 72  ry tables, the r
c500: 6f 77 20 6b 65 79 20 69 73 0a 74 68 65 20 5b 72  ow key is.the [r
c510: 6f 77 69 64 5d 2c 20 61 6e 64 20 66 6f 72 20 5b  owid], and for [
c520: 57 49 54 48 4f 55 54 20 52 4f 57 49 44 5d 20 74  WITHOUT ROWID] t
c530: 61 62 6c 65 73 20 74 68 65 20 72 6f 77 20 6b 65  ables the row ke
c540: 79 20 69 73 20 74 68 65 20 50 52 49 4d 41 52 59  y is the PRIMARY
c550: 20 4b 45 59 2e 0a 42 65 63 61 75 73 65 20 65 76   KEY..Because ev
c560: 65 72 79 20 72 6f 77 20 69 6e 20 74 68 65 20 74  ery row in the t
c570: 61 62 6c 65 20 68 61 73 20 61 20 75 6e 69 71 75  able has a uniqu
c580: 65 20 72 6f 77 20 6b 65 79 2c 0a 61 6c 6c 20 6b  e row key,.all k
c590: 65 79 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20  eys in an index 
c5a0: 61 72 65 20 75 6e 69 71 75 65 2e 3c 2f 70 3e 0a  are unique.</p>.
c5b0: 0a 3c 70 3e 5e 49 6e 20 61 20 6e 6f 72 6d 61 6c  .<p>^In a normal
c5c0: 20 69 6e 64 65 78 2c 20 74 68 65 72 65 20 69 73   index, there is
c5d0: 20 61 20 6f 6e 65 2d 74 6f 2d 6f 6e 65 20 6d 61   a one-to-one ma
c5e0: 70 70 69 6e 67 20 62 65 74 77 65 65 6e 20 72 6f  pping between ro
c5f0: 77 73 20 69 6e 20 61 20 0a 74 61 62 6c 65 20 61  ws in a .table a
c600: 6e 64 20 65 6e 74 72 69 65 73 20 69 6e 20 65 61  nd entries in ea
c610: 63 68 20 69 6e 64 65 78 20 61 73 73 6f 63 69 61  ch index associa
c620: 74 65 64 20 77 69 74 68 20 74 68 61 74 20 74 61  ted with that ta
c630: 62 6c 65 2e 0a 5e 48 6f 77 65 76 65 72 2c 20 69  ble..^However, i
c640: 6e 20 61 20 5b 70 61 72 74 69 61 6c 20 69 6e 64  n a [partial ind
c650: 65 78 5d 2c 20 74 68 65 20 69 6e 64 65 78 20 62  ex], the index b
c660: 2d 74 72 65 65 20 6f 6e 6c 79 20 63 6f 6e 74 61  -tree only conta
c670: 69 6e 73 20 65 6e 74 72 69 65 73 0a 63 6f 72 72  ins entries.corr
c680: 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 74 61 62  esponding to tab
c690: 6c 65 20 72 6f 77 73 20 66 6f 72 20 77 68 69 63  le rows for whic
c6a0: 68 20 74 68 65 20 57 48 45 52 45 20 63 6c 61 75  h the WHERE clau
c6b0: 73 65 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 6e  se expression on
c6c0: 20 74 68 65 0a 43 52 45 41 54 45 20 49 4e 44 45   the.CREATE INDE
c6d0: 58 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 74  X statement is t
c6e0: 72 75 65 2e 0a 5e 43 6f 72 72 65 73 70 6f 6e 64  rue..^Correspond
c6f0: 69 6e 67 20 72 6f 77 73 20 69 6e 20 74 68 65 20  ing rows in the 
c700: 69 6e 64 65 78 20 61 6e 64 20 74 61 62 6c 65 20  index and table 
c710: 62 2d 74 72 65 65 73 20 73 68 61 72 65 20 74 68  b-trees share th
c720: 65 20 73 61 6d 65 20 72 6f 77 69 64 0a 6f 72 20  e same rowid.or 
c730: 70 72 69 6d 61 72 79 20 6b 65 79 20 76 61 6c 75  primary key valu
c740: 65 73 20 61 6e 64 20 63 6f 6e 74 61 69 6e 20 74  es and contain t
c750: 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20 66 6f  he same value fo
c760: 72 20 61 6c 6c 20 69 6e 64 65 78 65 64 20 63 6f  r all indexed co
c770: 6c 75 6d 6e 73 2e 3c 2f 70 3e 0a 0a 3c 68 34 3e  lumns.</p>..<h4>
c780: 32 2e 35 2e 31 20 53 75 70 70 72 65 73 73 69 6f  2.5.1 Suppressio
c790: 6e 20 6f 66 20 72 65 64 75 6e 64 61 6e 74 20 63  n of redundant c
c7a0: 6f 6c 75 6d 6e 73 20 69 6e 20 57 49 54 48 4f 55  olumns in WITHOU
c7b0: 54 20 52 4f 57 49 44 20 73 65 63 6f 6e 64 61 72  T ROWID secondar
c7c0: 79 20 69 6e 64 65 78 65 64 0a 3c 2f 68 34 3e 0a  y indexed.</h4>.
c7d0: 0a 3c 70 3e 49 6e 20 61 6e 20 69 6e 64 65 78 20  .<p>In an index 
c7e0: 6f 6e 20 61 20 57 49 54 48 4f 55 54 20 52 4f 57  on a WITHOUT ROW
c7f0: 49 44 20 74 61 62 6c 65 2c 20 69 66 20 6f 6e 65  ID table, if one
c800: 20 6f 72 20 6d 6f 72 65 20 6f 66 20 74 68 65 20   or more of the 
c810: 63 6f 6c 75 6d 6e 73 0a 6f 66 20 74 61 62 6c 65  columns.of table
c820: 20 50 52 49 4d 41 52 59 20 4b 45 59 20 61 72 65   PRIMARY KEY are
c830: 20 61 6c 73 6f 20 63 6f 6c 75 6d 6e 73 20 6f 66   also columns of
c840: 20 74 68 65 20 69 6e 64 65 78 2c 20 74 68 65 6e   the index, then
c850: 20 74 68 65 0a 69 6e 64 65 78 65 64 20 63 6f 6c   the.indexed col
c860: 75 6d 6e 20 69 73 20 6e 6f 74 20 72 65 70 65 61  umn is not repea
c870: 74 65 64 20 69 6e 20 74 68 65 20 74 61 62 6c 65  ted in the table
c880: 2d 6b 65 79 20 73 75 66 66 69 78 20 6f 6e 20 74  -key suffix on t
c890: 68 65 20 65 6e 64 20 6f 66 0a 74 68 65 20 69 6e  he end of.the in
c8a0: 64 65 78 20 72 65 63 6f 72 64 2e 20 20 41 73 20  dex record.  As 
c8b0: 61 6e 20 65 78 61 6d 70 6c 65 2c 20 63 6f 6e 73  an example, cons
c8c0: 69 64 65 72 20 74 68 65 20 66 6f 6c 6c 6f 77 69  ider the followi
c8d0: 6e 67 20 53 51 4c 3a 0a 0a 3c 62 6c 6f 63 6b 71  ng SQL:..<blockq
c8e0: 75 6f 74 65 3e 3c 70 72 65 3e 0a 43 52 45 41 54  uote><pre>.CREAT
c8f0: 45 20 54 41 42 4c 45 20 65 78 32 35 28 61 2c 62  E TABLE ex25(a,b
c900: 2c 63 2c 64 2c 65 2c 50 52 49 4d 41 52 59 20 4b  ,c,d,e,PRIMARY K
c910: 45 59 28 64 2c 63 2c 61 29 29 20 57 49 54 48 4f  EY(d,c,a)) WITHO
c920: 55 54 20 72 6f 77 69 64 3b 0a 43 52 45 41 54 45  UT rowid;.CREATE
c930: 20 49 4e 44 45 58 20 65 78 32 35 63 65 20 4f 4e   INDEX ex25ce ON
c940: 20 65 78 32 35 28 63 2c 65 29 3b 0a 43 52 45 41   ex25(c,e);.CREA
c950: 54 45 20 49 4e 44 45 58 20 65 78 32 35 61 63 64  TE INDEX ex25acd
c960: 65 20 4f 4e 20 65 78 32 35 28 61 2c 63 2c 64 2c  e ON ex25(a,c,d,
c970: 65 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63  e);.</pre></bloc
c980: 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 45 61 63 68  kquote>..<p>Each
c990: 20 72 6f 77 20 69 6e 20 74 68 65 20 65 78 32 35   row in the ex25
c9a0: 63 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20  ce index of the 
c9b0: 65 78 61 6d 70 6c 65 20 61 62 6f 76 65 20 63 6f  example above co
c9c0: 6e 73 69 73 74 73 20 6f 66 20 61 20 72 65 63 6f  nsists of a reco
c9d0: 72 64 0a 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  rd.containing th
c9e0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6c 75  e following colu
c9f0: 6d 6e 73 3a 20 63 2c 20 65 2c 20 64 2c 20 61 2e  mns: c, e, d, a.
ca00: 20 20 54 68 65 20 66 69 72 73 74 20 74 77 6f 20    The first two 
ca10: 63 6f 6c 75 6d 6e 73 20 61 72 65 0a 74 68 65 20  columns are.the 
ca20: 63 6f 6c 75 6d 6e 73 20 62 65 69 6e 67 20 69 6e  columns being in
ca30: 64 65 78 65 64 2c 20 63 20 61 6e 64 20 65 2e 20  dexed, c and e. 
ca40: 20 54 68 65 20 72 65 6d 61 69 6e 69 6e 67 20 63   The remaining c
ca50: 6f 6c 75 6d 6e 73 20 61 72 65 20 74 68 65 20 70  olumns are the p
ca60: 72 69 6d 61 72 79 0a 6b 65 79 20 6f 66 20 74 68  rimary.key of th
ca70: 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
ca80: 74 61 62 6c 65 20 72 6f 77 2e 20 20 4e 6f 72 6d  table row.  Norm
ca90: 61 6c 6c 79 2c 20 74 68 65 20 70 72 69 6d 61 72  ally, the primar
caa0: 79 20 6b 65 79 20 77 6f 75 6c 64 20 62 65 0a 63  y key would be.c
cab0: 6f 6c 75 6d 6e 73 20 64 2c 20 63 2c 20 61 6e 64  olumns d, c, and
cac0: 20 61 2c 20 62 75 74 20 62 65 63 61 75 73 65 20   a, but because 
cad0: 63 6f 6c 75 6d 6e 20 63 20 61 6c 72 65 61 64 79  column c already
cae0: 20 61 70 70 65 61 72 73 20 65 61 72 6c 69 65 72   appears earlier
caf0: 20 69 6e 20 74 68 65 0a 69 6e 64 65 78 2c 20 69   in the.index, i
cb00: 74 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f  t is omitted fro
cb10: 6d 20 74 68 65 20 6b 65 79 20 73 75 66 66 69 78  m the key suffix
cb20: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 6e 20 74 68 65  .</p>..<p>In the
cb30: 20 65 78 74 72 65 6d 65 20 63 61 73 65 20 77 68   extreme case wh
cb40: 65 72 65 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20  ere the columns 
cb50: 62 65 69 6e 67 20 69 6e 64 65 78 65 64 20 63 6f  being indexed co
cb60: 76 65 72 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 0a  ver all columns.
cb70: 6f 66 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b  of the PRIMARY K
cb80: 45 59 2c 20 74 68 65 20 69 6e 64 65 78 20 77 69  EY, the index wi
cb90: 6c 6c 20 63 6f 6e 73 69 73 74 20 6f 66 20 6f 6e  ll consist of on
cba0: 6c 79 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 62  ly the columns b
cbb0: 65 69 6e 67 0a 69 6e 64 65 78 65 64 2e 20 20 54  eing.indexed.  T
cbc0: 68 65 20 65 78 32 35 61 63 64 65 20 65 78 61 6d  he ex25acde exam
cbd0: 70 6c 65 20 61 62 6f 76 65 20 64 65 6d 6f 6e 73  ple above demons
cbe0: 74 72 61 74 65 73 20 74 68 69 73 2e 20 20 45 61  trates this.  Ea
cbf0: 63 68 20 65 6e 74 72 79 20 69 6e 0a 74 68 65 20  ch entry in.the 
cc00: 65 78 32 35 61 63 64 65 20 69 6e 64 65 78 20 63  ex25acde index c
cc10: 6f 6e 73 69 73 74 73 20 6f 66 20 6f 6e 6c 79 20  onsists of only 
cc20: 74 68 65 20 63 6f 6c 75 6d 6e 73 20 61 2c 20 63  the columns a, c
cc30: 2c 20 64 2c 20 61 6e 64 20 65 2c 20 69 6e 20 74  , d, and e, in t
cc40: 68 61 74 0a 6f 72 64 65 72 2e 3c 2f 70 3e 0a 0a  hat.order.</p>..
cc50: 3c 70 3e 54 68 65 20 73 75 70 70 72 65 73 73 69  <p>The suppressi
cc60: 6f 6e 20 6f 66 20 72 65 64 75 6e 64 61 6e 74 20  on of redundant 
cc70: 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 6b  columns in the k
cc80: 65 79 20 73 75 66 66 69 78 20 6f 66 20 61 6e 20  ey suffix of an 
cc90: 69 6e 64 65 78 0a 65 6e 74 72 79 20 6f 6e 6c 79  index.entry only
cca0: 20 6f 63 63 75 72 73 20 69 6e 20 57 49 54 48 4f   occurs in WITHO
ccb0: 55 54 20 52 4f 57 49 44 20 74 61 62 6c 65 73 2e  UT ROWID tables.
ccc0: 20 20 49 6e 20 61 6e 20 6f 72 64 69 6e 61 72 79    In an ordinary
ccd0: 20 72 6f 77 69 64 20 74 61 62 6c 65 2c 0a 74 68   rowid table,.th
cce0: 65 20 69 6e 64 65 78 20 65 6e 74 72 79 20 61 6c  e index entry al
ccf0: 77 61 79 73 20 65 6e 64 73 20 77 69 74 68 20 74  ways ends with t
cd00: 68 65 20 72 6f 77 69 64 20 65 76 65 6e 20 69 66  he rowid even if
cd10: 20 74 68 65 20 5b 49 4e 54 45 47 45 52 20 50 52   the [INTEGER PR
cd20: 49 4d 41 52 59 20 4b 45 59 5d 0a 63 6f 6c 75 6d  IMARY KEY].colum
cd30: 6e 20 69 73 20 6f 6e 65 20 6f 66 20 74 68 65 20  n is one of the 
cd40: 63 6f 6c 75 6d 6e 73 20 62 65 69 6e 67 20 69 6e  columns being in
cd50: 64 65 78 65 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c  dexed.</p>..<tcl
cd60: 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 73 71 6c  >hd_fragment sql
cd70: 69 74 65 5f 6d 61 73 74 65 72 20 7b 73 71 6c 69  ite_master {sqli
cd80: 74 65 5f 6d 61 73 74 65 72 7d 20 7b 73 71 6c 69  te_master} {sqli
cd90: 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 7d  te_master table}
cda0: 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 32 2e 36 20 53  </tcl>.<h3>2.6 S
cdb0: 74 6f 72 61 67 65 20 4f 66 20 54 68 65 20 53 51  torage Of The SQ
cdc0: 4c 20 44 61 74 61 62 61 73 65 20 53 63 68 65 6d  L Database Schem
cdd0: 61 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 50 61 67 65  a</h3>..<p>^Page
cde0: 20 31 20 6f 66 20 61 20 64 61 74 61 62 61 73 65   1 of a database
cdf0: 20 66 69 6c 65 20 69 73 20 74 68 65 20 72 6f 6f   file is the roo
ce00: 74 20 70 61 67 65 20 6f 66 20 61 20 74 61 62 6c  t page of a tabl
ce10: 65 20 62 2d 74 72 65 65 20 74 68 61 74 0a 68 6f  e b-tree that.ho
ce20: 6c 64 73 20 61 20 73 70 65 63 69 61 6c 20 74 61  lds a special ta
ce30: 62 6c 65 20 6e 61 6d 65 64 20 22 73 71 6c 69 74  ble named "sqlit
ce40: 65 5f 6d 61 73 74 65 72 22 20 28 6f 72 20 22 73  e_master" (or "s
ce50: 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65  qlite_temp_maste
ce60: 72 22 20 69 6e 0a 74 68 65 20 63 61 73 65 20 6f  r" in.the case o
ce70: 66 20 61 20 54 45 4d 50 20 64 61 74 61 62 61 73  f a TEMP databas
ce80: 65 29 20 77 68 69 63 68 20 73 74 6f 72 65 73 20  e) which stores 
ce90: 74 68 65 20 63 6f 6d 70 6c 65 74 65 0a 64 61 74  the complete.dat
cea0: 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20 20 5e  abase schema.  ^
ceb0: 28 54 68 65 20 73 74 72 75 63 74 75 72 65 20 6f  (The structure o
cec0: 66 20 74 68 65 20 73 71 6c 69 74 65 5f 6d 61 73  f the sqlite_mas
ced0: 74 65 72 20 74 61 62 6c 65 20 69 73 20 61 73 0a  ter table is as.
cee0: 69 66 20 69 74 20 68 61 64 20 62 65 65 6e 20 63  if it had been c
cef0: 72 65 61 74 65 64 20 75 73 69 6e 67 20 74 68 65  reated using the
cf00: 20 66 6f 6c 6c 6f 77 69 6e 67 20 53 51 4c 3a 3c   following SQL:<
cf10: 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
cf20: 3e 3c 70 72 65 3e 0a 43 52 45 41 54 45 20 54 41  ><pre>.CREATE TA
cf30: 42 4c 45 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  BLE sqlite_maste
cf40: 72 28 0a 20 20 74 79 70 65 20 74 65 78 74 2c 0a  r(.  type text,.
cf50: 20 20 6e 61 6d 65 20 74 65 78 74 2c 0a 20 20 74    name text,.  t
cf60: 62 6c 5f 6e 61 6d 65 20 74 65 78 74 2c 0a 20 20  bl_name text,.  
cf70: 72 6f 6f 74 70 61 67 65 20 69 6e 74 65 67 65 72  rootpage integer
cf80: 2c 0a 20 20 73 71 6c 20 74 65 78 74 0a 29 3b 0a  ,.  sql text.);.
cf90: 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f  </pre></blockquo
cfa0: 74 65 3e 29 5e 0a 0a 3c 70 3e 5e 54 68 65 20 73  te>)^..<p>^The s
cfb0: 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62  qlite_master tab
cfc0: 6c 65 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20  le contains one 
cfd0: 72 6f 77 20 66 6f 72 20 65 61 63 68 20 74 61 62  row for each tab
cfe0: 6c 65 2c 20 69 6e 64 65 78 2c 20 76 69 65 77 2c  le, index, view,
cff0: 0a 61 6e 64 20 74 72 69 67 67 65 72 20 28 63 6f  .and trigger (co
d000: 6c 6c 65 63 74 69 76 65 6c 79 20 22 6f 62 6a 65  llectively "obje
d010: 63 74 73 22 29 20 69 6e 20 74 68 65 20 64 61 74  cts") in the dat
d020: 61 62 61 73 65 20 73 63 68 65 6d 61 2c 20 65 78  abase schema, ex
d030: 63 65 70 74 20 74 68 65 72 65 0a 69 73 20 6e 6f  cept there.is no
d040: 20 65 6e 74 72 79 20 66 6f 72 20 74 68 65 20 73   entry for the s
d050: 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62  qlite_master tab
d060: 6c 65 20 69 74 73 65 6c 66 2e 20 20 5e 54 68 65  le itself.  ^The
d070: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74   sqlite_master t
d080: 61 62 6c 65 0a 63 6f 6e 74 61 69 6e 73 20 65 6e  able.contains en
d090: 74 72 69 65 73 20 66 6f 72 20 5b 69 6e 74 65 72  tries for [inter
d0a0: 6e 61 6c 20 73 63 68 65 6d 61 20 6f 62 6a 65 63  nal schema objec
d0b0: 74 73 5d 20 69 6e 20 61 64 64 69 74 69 6f 6e 20  ts] in addition 
d0c0: 74 6f 20 61 70 70 6c 69 63 61 74 69 6f 6e 2d 0a  to application-.
d0d0: 61 6e 64 20 70 72 6f 67 72 61 6d 6d 65 72 2d 64  and programmer-d
d0e0: 65 66 69 6e 65 64 20 6f 62 6a 65 63 74 73 2e 0a  efined objects..
d0f0: 0a 0a 3c 70 3e 5e 28 54 68 65 20 73 71 6c 69 74  ..<p>^(The sqlit
d100: 65 5f 6d 61 73 74 65 72 2e 74 79 70 65 20 63 6f  e_master.type co
d110: 6c 75 6d 6e 20 77 69 6c 6c 20 62 65 20 6f 6e 65  lumn will be one
d120: 0a 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  .of the followin
d130: 67 20 74 65 78 74 20 73 74 72 69 6e 67 73 3a 20  g text strings: 
d140: 20 27 74 61 62 6c 65 27 2c 20 27 69 6e 64 65 78   'table', 'index
d150: 27 2c 20 27 76 69 65 77 27 2c 20 6f 72 20 27 74  ', 'view', or 't
d160: 72 69 67 67 65 72 27 0a 61 63 63 6f 72 64 69 6e  rigger'.accordin
d170: 67 20 74 6f 20 74 68 65 20 74 79 70 65 20 6f 66  g to the type of
d180: 20 6f 62 6a 65 63 74 20 64 65 66 69 6e 65 64 2e   object defined.
d190: 20 20 54 68 65 20 27 74 61 62 6c 65 27 20 73 74    The 'table' st
d1a0: 72 69 6e 67 20 69 73 20 75 73 65 64 0a 66 6f 72  ring is used.for
d1b0: 20 62 6f 74 68 20 6f 72 64 69 6e 61 72 79 20 61   both ordinary a
d1c0: 6e 64 20 5b 76 69 72 74 75 61 6c 20 74 61 62 6c  nd [virtual tabl
d1d0: 65 73 5d 2e 29 5e 3c 2f 70 3e 0a 0a 3c 2f 70 3e  es].)^</p>..</p>
d1e0: 5e 28 54 68 65 20 73 71 6c 69 74 65 5f 6d 61 73  ^(The sqlite_mas
d1f0: 74 65 72 2e 6e 61 6d 65 20 63 6f 6c 75 6d 6e 20  ter.name column 
d200: 77 69 6c 6c 20 68 6f 6c 64 20 74 68 65 20 6e 61  will hold the na
d210: 6d 65 20 6f 66 20 74 68 65 20 6f 62 6a 65 63 74  me of the object
d220: 2e 29 5e 0a 5e 28 5b 55 4e 49 51 55 45 5d 20 61  .)^.^([UNIQUE] a
d230: 6e 64 20 5b 50 52 49 4d 41 52 59 20 4b 45 59 5d  nd [PRIMARY KEY]
d240: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 6f 6e 20   constraints on 
d250: 74 61 62 6c 65 73 20 63 61 75 73 65 20 53 51 4c  tables cause SQL
d260: 69 74 65 20 74 6f 20 63 72 65 61 74 65 0a 5b 69  ite to create.[i
d270: 6e 74 65 72 6e 61 6c 20 69 6e 64 69 63 65 73 5d  nternal indices]
d280: 20 77 69 74 68 20 6e 61 6d 65 73 20 6f 66 20 74   with names of t
d290: 68 65 20 66 6f 72 6d 20 22 73 71 6c 69 74 65 5f  he form "sqlite_
d2a0: 61 75 74 6f 69 6e 64 65 78 5f 54 41 42 4c 45 5f  autoindex_TABLE_
d2b0: 4e 22 0a 77 68 65 72 65 20 54 41 42 4c 45 20 69  N".where TABLE i
d2c0: 73 20 72 65 70 6c 61 63 65 64 20 62 79 20 74 68  s replaced by th
d2d0: 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  e name of the ta
d2e0: 62 6c 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e  ble that contain
d2f0: 73 20 74 68 65 0a 63 6f 6e 73 74 72 61 69 6e 74  s the.constraint
d300: 20 61 6e 64 20 4e 20 69 73 20 61 6e 20 69 6e 74   and N is an int
d310: 65 67 65 72 20 62 65 67 69 6e 6e 69 6e 67 20 77  eger beginning w
d320: 69 74 68 20 31 20 61 6e 64 20 69 6e 63 72 65 61  ith 1 and increa
d330: 73 69 6e 67 20 62 79 20 6f 6e 65 0a 77 69 74 68  sing by one.with
d340: 20 65 61 63 68 20 63 6f 6e 73 74 72 61 69 6e 74   each constraint
d350: 20 73 65 65 6e 20 69 6e 20 74 68 65 20 74 61 62   seen in the tab
d360: 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 2e 29 5e  le definition.)^
d370: 0a 5e 28 49 6e 20 61 20 5b 57 49 54 48 4f 55 54  .^(In a [WITHOUT
d380: 20 52 4f 57 49 44 5d 20 74 61 62 6c 65 2c 20 74   ROWID] table, t
d390: 68 65 72 65 20 69 73 20 6e 6f 20 73 71 6c 69 74  here is no sqlit
d3a0: 65 5f 6d 61 73 74 65 72 20 65 6e 74 72 79 20 66  e_master entry f
d3b0: 6f 72 20 74 68 65 0a 50 52 49 4d 41 52 59 20 4b  or the.PRIMARY K
d3c0: 45 59 2c 20 62 75 74 20 74 68 65 20 22 73 71 6c  EY, but the "sql
d3d0: 69 74 65 5f 61 75 74 6f 69 6e 64 65 78 5f 54 41  ite_autoindex_TA
d3e0: 42 4c 45 5f 4e 22 20 6e 61 6d 65 20 69 73 20 73  BLE_N" name is s
d3f0: 65 74 20 61 73 69 64 65 0a 66 6f 72 20 74 68 65  et aside.for the
d400: 20 50 52 49 4d 41 52 59 20 4b 45 59 20 61 73 20   PRIMARY KEY as 
d410: 69 66 20 74 68 65 20 73 71 6c 69 74 65 5f 6d 61  if the sqlite_ma
d420: 73 74 65 72 20 65 6e 74 72 79 20 64 69 64 20 65  ster entry did e
d430: 78 69 73 74 2e 20 20 54 68 69 73 0a 77 69 6c 6c  xist.  This.will
d440: 20 61 66 66 65 63 74 20 74 68 65 20 6e 75 6d 62   affect the numb
d450: 65 72 69 6e 67 20 6f 66 20 73 75 62 73 65 71 75  ering of subsequ
d460: 65 6e 74 20 55 4e 49 51 55 45 20 63 6f 6e 73 74  ent UNIQUE const
d470: 72 61 69 6e 74 73 2e 29 5e 0a 5e 54 68 65 20 22  raints.)^.^The "
d480: 73 71 6c 69 74 65 5f 61 75 74 6f 69 6e 64 65 78  sqlite_autoindex
d490: 5f 54 41 42 4c 45 5f 4e 22 20 6e 61 6d 65 20 69  _TABLE_N" name i
d4a0: 73 20 6e 65 76 65 72 20 61 6c 6c 6f 63 61 74 65  s never allocate
d4b0: 64 20 66 6f 72 20 61 6e 0a 5b 49 4e 54 45 47 45  d for an.[INTEGE
d4c0: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 5d 2c 20  R PRIMARY KEY], 
d4d0: 65 69 74 68 65 72 20 69 6e 20 72 6f 77 69 64 20  either in rowid 
d4e0: 74 61 62 6c 65 73 20 6f 72 20 57 49 54 48 4f 55  tables or WITHOU
d4f0: 54 20 52 4f 57 49 44 20 74 61 62 6c 65 73 2e 0a  T ROWID tables..
d500: 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 73 71 6c  </p>..<p>The sql
d510: 69 74 65 5f 6d 61 73 74 65 72 2e 74 62 6c 5f 6e  ite_master.tbl_n
d520: 61 6d 65 20 63 6f 6c 75 6d 6e 20 68 6f 6c 64 73  ame column holds
d530: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 74   the name of a t
d540: 61 62 6c 65 20 6f 72 20 76 69 65 77 0a 74 68 61  able or view.tha
d550: 74 20 74 68 65 20 6f 62 6a 65 63 74 20 69 73 20  t the object is 
d560: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 2e  associated with.
d570: 20 20 5e 46 6f 72 20 61 20 74 61 62 6c 65 20 6f    ^For a table o
d580: 72 20 76 69 65 77 2c 20 74 68 65 0a 74 62 6c 5f  r view, the.tbl_
d590: 6e 61 6d 65 20 63 6f 6c 75 6d 6e 20 69 73 20 61  name column is a
d5a0: 20 63 6f 70 79 20 6f 66 20 74 68 65 20 6e 61 6d   copy of the nam
d5b0: 65 20 63 6f 6c 75 6d 6e 2e 20 20 5e 46 6f 72 20  e column.  ^For 
d5c0: 61 6e 20 69 6e 64 65 78 2c 20 74 68 65 20 74 62  an index, the tb
d5d0: 6c 5f 6e 61 6d 65 0a 69 73 20 74 68 65 20 6e 61  l_name.is the na
d5e0: 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
d5f0: 74 68 61 74 20 69 73 20 69 6e 64 65 78 65 64 2e  that is indexed.
d600: 20 20 5e 46 6f 72 20 61 20 74 72 69 67 67 65 72    ^For a trigger
d610: 2c 20 74 68 65 20 74 62 6c 5f 6e 61 6d 65 0a 63  , the tbl_name.c
d620: 6f 6c 75 6d 6e 20 73 74 6f 72 65 73 20 74 68 65  olumn stores the
d630: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
d640: 6c 65 20 6f 72 20 76 69 65 77 20 74 68 61 74 20  le or view that 
d650: 63 61 75 73 65 73 20 74 68 65 20 74 72 69 67 67  causes the trigg
d660: 65 72 20 0a 74 6f 20 66 69 72 65 2e 3c 2f 70 3e  er .to fire.</p>
d670: 0a 0a 3c 70 3e 5e 28 54 68 65 20 73 71 6c 69 74  ..<p>^(The sqlit
d680: 65 5f 6d 61 73 74 65 72 2e 72 6f 6f 74 70 61 67  e_master.rootpag
d690: 65 20 63 6f 6c 75 6d 6e 20 73 74 6f 72 65 73 20  e column stores 
d6a0: 74 68 65 20 70 61 67 65 20 6e 75 6d 62 65 72 20  the page number 
d6b0: 6f 66 20 74 68 65 20 72 6f 6f 74 0a 62 2d 74 72  of the root.b-tr
d6c0: 65 65 20 70 61 67 65 20 66 6f 72 20 74 61 62 6c  ee page for tabl
d6d0: 65 73 20 61 6e 64 20 69 6e 64 69 63 65 73 2e 29  es and indices.)
d6e0: 5e 20 20 5e 46 6f 72 20 72 6f 77 73 20 74 68 61  ^  ^For rows tha
d6f0: 74 20 64 65 66 69 6e 65 20 76 69 65 77 73 2c 20  t define views, 
d700: 74 72 69 67 67 65 72 73 2c 0a 61 6e 64 20 76 69  triggers,.and vi
d710: 72 74 75 61 6c 20 74 61 62 6c 65 73 2c 20 74 68  rtual tables, th
d720: 65 20 72 6f 6f 74 70 61 67 65 20 63 6f 6c 75 6d  e rootpage colum
d730: 6e 20 69 73 20 30 20 6f 72 20 4e 55 4c 4c 2e 3c  n is 0 or NULL.<
d740: 2f 70 3e 0a 0a 3c 70 3e 5e 28 54 68 65 20 73 71  /p>..<p>^(The sq
d750: 6c 69 74 65 5f 6d 61 73 74 65 72 2e 73 71 6c 20  lite_master.sql 
d760: 63 6f 6c 75 6d 6e 20 73 74 6f 72 65 73 20 53 51  column stores SQ
d770: 4c 20 74 65 78 74 20 74 68 61 74 20 64 65 73 63  L text that desc
d780: 72 69 62 65 73 20 74 68 65 0a 6f 62 6a 65 63 74  ribes the.object
d790: 2e 20 20 54 68 69 73 20 53 51 4c 20 74 65 78 74  .  This SQL text
d7a0: 20 69 73 20 61 20 5b 43 52 45 41 54 45 20 54 41   is a [CREATE TA
d7b0: 42 4c 45 5d 2c 20 5b 43 52 45 41 54 45 20 56 49  BLE], [CREATE VI
d7c0: 52 54 55 41 4c 20 54 41 42 4c 45 5d 2c 0a 5b 43  RTUAL TABLE],.[C
d7d0: 52 45 41 54 45 20 49 4e 44 45 58 5d 2c 0a 5b 43  REATE INDEX],.[C
d7e0: 52 45 41 54 45 20 56 49 45 57 5d 2c 20 6f 72 20  REATE VIEW], or 
d7f0: 5b 43 52 45 41 54 45 20 54 52 49 47 47 45 52 5d  [CREATE TRIGGER]
d800: 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20   statement that 
d810: 69 66 20 65 76 61 6c 75 61 74 65 64 20 61 67 61  if evaluated aga
d820: 69 6e 73 74 0a 74 68 65 20 64 61 74 61 62 61 73  inst.the databas
d830: 65 20 66 69 6c 65 20 77 68 65 6e 20 69 74 20 69  e file when it i
d840: 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  s the main datab
d850: 61 73 65 20 6f 66 20 61 20 5b 64 61 74 61 62 61  ase of a [databa
d860: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d 0a 77  se connection].w
d870: 6f 75 6c 64 20 72 65 63 72 65 61 74 65 64 20 74  ould recreated t
d880: 68 65 20 6f 62 6a 65 63 74 2e 29 5e 20 20 54 68  he object.)^  Th
d890: 65 20 74 65 78 74 20 69 73 20 75 73 75 61 6c 6c  e text is usuall
d8a0: 79 20 61 20 63 6f 70 79 20 6f 66 20 74 68 65 20  y a copy of the 
d8b0: 6f 72 69 67 69 6e 61 6c 0a 73 74 61 74 65 6d 65  original.stateme
d8c0: 6e 74 20 75 73 65 64 20 74 6f 20 63 72 65 61 74  nt used to creat
d8d0: 65 20 74 68 65 20 6f 62 6a 65 63 74 20 62 75 74  e the object but
d8e0: 20 77 69 74 68 20 6e 6f 72 6d 61 6c 69 7a 61 74   with normalizat
d8f0: 69 6f 6e 73 20 61 70 70 6c 69 65 64 20 73 6f 0a  ions applied so.
d900: 74 68 61 74 20 74 68 65 20 74 65 78 74 20 63 6f  that the text co
d910: 6e 66 6f 72 6d 73 20 74 6f 20 74 68 65 20 66 6f  nforms to the fo
d920: 6c 6c 6f 77 69 6e 67 20 72 75 6c 65 73 3a 0a 0a  llowing rules:..
d930: 3c 75 6c 3e 0a 3c 6c 69 3e 5e 54 68 65 20 43 52  <ul>.<li>^The CR
d940: 45 41 54 45 2c 20 54 41 42 4c 45 2c 20 56 49 45  EATE, TABLE, VIE
d950: 57 2c 20 54 52 49 47 47 45 52 2c 20 61 6e 64 20  W, TRIGGER, and 
d960: 49 4e 44 45 58 20 6b 65 79 77 6f 72 64 73 20 61  INDEX keywords a
d970: 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 0a  t the beginning.
d980: 6f 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  of the statement
d990: 20 61 72 65 20 63 6f 6e 76 65 72 74 65 64 20 74   are converted t
d9a0: 6f 20 61 6c 6c 20 75 70 70 65 72 20 63 61 73 65  o all upper case
d9b0: 20 6c 65 74 74 65 72 73 2e 0a 3c 6c 69 3e 5e 54   letters..<li>^T
d9c0: 68 65 20 54 45 4d 50 20 6f 72 20 54 45 4d 50 4f  he TEMP or TEMPO
d9d0: 52 41 52 59 20 6b 65 79 77 6f 72 64 20 69 73 20  RARY keyword is 
d9e0: 72 65 6d 6f 76 65 64 20 69 66 20 69 74 20 6f 63  removed if it oc
d9f0: 63 75 72 73 20 61 66 74 65 72 20 74 68 65 20 0a  curs after the .
da00: 69 6e 69 74 69 61 6c 20 43 52 45 41 54 45 20 6b  initial CREATE k
da10: 65 79 77 6f 72 64 2e 0a 3c 6c 69 3e 5e 41 6e 79  eyword..<li>^Any
da20: 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 20 71   database name q
da30: 75 61 6c 69 66 69 65 72 20 74 68 61 74 20 6f 63  ualifier that oc
da40: 63 75 72 73 20 70 72 69 6f 72 20 74 6f 20 74 68  curs prior to th
da50: 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 0a 6f 62  e name of the.ob
da60: 6a 65 63 74 20 62 65 69 6e 67 20 63 72 65 61 74  ject being creat
da70: 65 64 20 69 73 20 72 65 6d 6f 76 65 64 2e 0a 3c  ed is removed..<
da80: 6c 69 3e 5e 4c 65 61 64 69 6e 67 20 73 70 61 63  li>^Leading spac
da90: 65 73 20 61 72 65 20 72 65 6d 6f 76 65 64 2e 0a  es are removed..
daa0: 3c 6c 69 3e 5e 41 6c 6c 20 73 70 61 63 65 73 20  <li>^All spaces 
dab0: 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20 66 69  following the fi
dac0: 72 73 74 20 74 77 6f 20 6b 65 79 77 6f 72 64 73  rst two keywords
dad0: 20 61 72 65 20 63 6f 6e 76 65 72 74 65 64 20 69   are converted i
dae0: 6e 74 6f 20 61 20 73 69 6e 67 6c 65 0a 73 70 61  nto a single.spa
daf0: 63 65 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e 28  ce..</ul>..<p>^(
db00: 54 68 65 20 74 65 78 74 20 69 6e 20 74 68 65 20  The text in the 
db10: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 2e 73 71  sqlite_master.sq
db20: 6c 20 63 6f 6c 75 6d 6e 20 69 73 20 61 20 63 6f  l column is a co
db30: 70 79 20 6f 66 20 74 68 65 20 6f 72 69 67 69 6e  py of the origin
db40: 61 6c 0a 43 52 45 41 54 45 20 73 74 61 74 65 6d  al.CREATE statem
db50: 65 6e 74 20 74 65 78 74 20 74 68 61 74 20 63 72  ent text that cr
db60: 65 61 74 65 64 20 74 68 65 20 6f 62 6a 65 63 74  eated the object
db70: 2c 20 65 78 63 65 70 74 20 6e 6f 72 6d 61 6c 69  , except normali
db80: 7a 65 64 20 61 73 0a 64 65 73 63 72 69 62 65 64  zed as.described
db90: 20 61 62 6f 76 65 20 61 6e 64 20 61 73 20 6d 6f   above and as mo
dba0: 64 69 66 69 65 64 20 62 79 20 73 75 62 73 65 71  dified by subseq
dbb0: 75 65 6e 74 20 5b 41 4c 54 45 52 20 54 41 42 4c  uent [ALTER TABL
dbc0: 45 5d 20 73 74 61 74 65 6d 65 6e 74 73 2e 29 5e  E] statements.)^
dbd0: 0a 5e 28 54 68 65 20 73 71 6c 69 74 65 5f 6d 61  .^(The sqlite_ma
dbe0: 73 74 65 72 2e 73 71 6c 20 69 73 20 4e 55 4c 4c  ster.sql is NULL
dbf0: 20 66 6f 72 20 74 68 65 20 5b 69 6e 74 65 72 6e   for the [intern
dc00: 61 6c 20 69 6e 64 69 63 65 73 5d 20 74 68 61 74  al indices] that
dc10: 20 61 72 65 0a 61 75 74 6f 6d 61 74 69 63 61 6c   are.automatical
dc20: 6c 79 20 63 72 65 61 74 65 64 20 62 79 20 5b 55  ly created by [U
dc30: 4e 49 51 55 45 5d 20 6f 72 20 5b 50 52 49 4d 41  NIQUE] or [PRIMA
dc40: 52 59 20 4b 45 59 5d 20 63 6f 6e 73 74 72 61 69  RY KEY] constrai
dc50: 6e 74 73 2e 29 5e 3c 2f 70 3e 0a 0a 0a 3c 74 63  nts.)^</p>...<tc
dc60: 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 69 6e  l>hd_fragment in
dc70: 74 73 63 68 65 6d 61 20 7b 69 6e 74 65 72 6e 61  tschema {interna
dc80: 6c 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 73  l schema objects
dc90: 7d 20 5c 0a 7b 69 6e 74 65 72 6e 61 6c 20 73 63  } \.{internal sc
dca0: 68 65 6d 61 20 6f 62 6a 65 63 74 7d 20 7b 69 6e  hema object} {in
dcb0: 74 65 72 6e 61 6c 20 69 6e 64 65 78 7d 20 7b 69  ternal index} {i
dcc0: 6e 74 65 72 6e 61 6c 20 69 6e 64 69 63 65 73 7d  nternal indices}
dcd0: 20 5c 0a 7b 69 6e 74 65 72 6e 61 6c 20 74 61 62   \.{internal tab
dce0: 6c 65 7d 20 7b 69 6e 74 65 72 6e 61 6c 20 74 61  le} {internal ta
dcf0: 62 6c 65 73 7d 3c 2f 74 63 6c 3e 0a 3c 68 34 3e  bles}</tcl>.<h4>
dd00: 32 2e 36 2e 31 20 49 6e 74 65 72 6e 61 6c 20 53  2.6.1 Internal S
dd10: 63 68 65 6d 61 20 4f 62 6a 65 63 74 73 3c 2f 68  chema Objects</h
dd20: 34 3e 0a 0a 3c 70 3e 5e 49 6e 20 61 64 64 69 74  4>..<p>^In addit
dd30: 69 6f 6e 20 74 6f 20 74 68 65 20 74 61 62 6c 65  ion to the table
dd40: 73 2c 20 69 6e 64 69 63 65 73 2c 20 76 69 65 77  s, indices, view
dd50: 73 2c 20 61 6e 64 20 74 72 69 67 67 65 72 73 20  s, and triggers 
dd60: 63 72 65 61 74 65 64 20 62 79 0a 74 68 65 20 61  created by.the a
dd70: 70 70 6c 69 63 61 74 69 6f 6e 20 61 6e 64 2f 6f  pplication and/o
dd80: 72 20 74 68 65 20 64 65 76 65 6c 6f 70 65 72 20  r the developer 
dd90: 75 73 69 6e 67 20 43 52 45 41 54 45 20 73 74 61  using CREATE sta
dda0: 74 65 6d 65 6e 74 73 20 53 51 4c 2c 20 74 68 65  tements SQL, the
ddb0: 0a 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74  .sqlite_master t
ddc0: 61 62 6c 65 20 6d 61 79 20 63 6f 6e 74 61 69 6e  able may contain
ddd0: 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 65 6e   zero or more en
dde0: 74 72 69 65 73 20 66 6f 72 20 0a 3c 69 3e 69 6e  tries for .<i>in
ddf0: 74 65 72 6e 61 6c 20 73 63 68 65 6d 61 20 6f 62  ternal schema ob
de00: 6a 65 63 74 73 3c 2f 69 3e 20 74 68 61 74 20 61  jects</i> that a
de10: 72 65 20 63 72 65 61 74 65 64 20 62 79 20 53 51  re created by SQ
de20: 4c 69 74 65 20 66 6f 72 20 69 74 73 20 0a 6f 77  Lite for its .ow
de30: 6e 20 69 6e 74 65 72 6e 61 6c 20 75 73 65 2e 20  n internal use. 
de40: 20 5e 54 68 65 20 6e 61 6d 65 73 20 6f 66 20 69   ^The names of i
de50: 6e 74 65 72 6e 61 6c 20 73 63 68 65 6d 61 20 6f  nternal schema o
de60: 62 6a 65 63 74 73 0a 61 6c 77 61 79 73 20 62 65  bjects.always be
de70: 67 69 6e 20 77 69 74 68 20 22 73 71 6c 69 74 65  gin with "sqlite
de80: 5f 22 20 61 6e 64 20 61 6e 79 20 74 61 62 6c 65  _" and any table
de90: 2c 20 69 6e 64 65 78 2c 20 76 69 65 77 2c 20 6f  , index, view, o
dea0: 72 20 74 72 69 67 67 65 72 0a 77 68 6f 73 65 20  r trigger.whose 
deb0: 6e 61 6d 65 20 62 65 67 69 6e 73 20 77 69 74 68  name begins with
dec0: 20 22 73 71 6c 69 74 65 5f 22 20 69 73 20 61 6e   "sqlite_" is an
ded0: 20 69 6e 74 65 72 6e 61 6c 20 73 63 68 65 6d 61   internal schema
dee0: 20 6f 62 6a 65 63 74 2e 0a 5e 53 51 4c 69 74 65   object..^SQLite
def0: 20 70 72 6f 68 69 62 69 74 73 20 61 70 70 6c 69   prohibits appli
df00: 63 61 74 69 6f 6e 73 20 66 72 6f 6d 20 63 72 65  cations from cre
df10: 61 74 69 6e 67 20 6f 62 6a 65 63 74 73 20 77 68  ating objects wh
df20: 6f 73 65 20 6e 61 6d 65 73 20 62 65 67 69 6e 0a  ose names begin.
df30: 77 69 74 68 20 22 73 71 6c 69 74 65 5f 22 2e 20  with "sqlite_". 
df40: 20 0a 0a 3c 70 3e 49 6e 74 65 72 6e 61 6c 20 73   ..<p>Internal s
df50: 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 20 75 73  chema objects us
df60: 65 64 20 62 79 20 53 51 4c 69 74 65 20 6d 61 79  ed by SQLite may
df70: 20 69 6e 63 6c 75 64 65 20 74 68 65 20 66 6f 6c   include the fol
df80: 6c 6f 77 69 6e 67 3a 0a 0a 3c 75 6c 3e 0a 3c 6c  lowing:..<ul>.<l
df90: 69 3e 3c 70 3e 49 6e 64 69 63 65 73 20 77 69 74  i><p>Indices wit
dfa0: 68 20 6e 61 6d 65 73 20 6f 66 20 74 68 65 20 66  h names of the f
dfb0: 6f 72 6d 20 22 73 71 6c 69 74 65 5f 61 75 74 6f  orm "sqlite_auto
dfc0: 69 6e 64 65 78 5f 54 41 42 4c 45 5f 4e 22 20 74  index_TABLE_N" t
dfd0: 68 61 74 0a 20 20 20 20 20 20 20 61 72 65 20 75  hat.       are u
dfe0: 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74  sed to implement
dff0: 20 5b 55 4e 49 51 55 45 5d 20 61 6e 64 20 5b 50   [UNIQUE] and [P
e000: 52 49 4d 41 52 59 20 4b 45 59 5d 20 63 6f 6e 73  RIMARY KEY] cons
e010: 74 72 61 69 6e 74 73 20 6f 6e 0a 20 20 20 20 20  traints on.     
e020: 20 20 6f 72 64 69 6e 61 72 79 20 74 61 62 6c 65    ordinary table
e030: 73 2e 0a 0a 3c 6c 69 3e 3c 70 3e 41 20 74 61 62  s...<li><p>A tab
e040: 6c 65 20 77 69 74 68 20 74 68 65 20 6e 61 6d 65  le with the name
e050: 20 22 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63   "sqlite_sequenc
e060: 65 22 20 74 68 61 74 20 69 73 20 75 73 65 64 20  e" that is used 
e070: 74 6f 20 6b 65 65 70 20 74 72 61 63 6b 0a 20 20  to keep track.  
e080: 20 20 20 20 20 6f 66 20 74 68 65 20 6d 61 78 69       of the maxi
e090: 6d 75 6d 20 68 69 73 74 6f 72 69 63 61 6c 20 5b  mum historical [
e0a0: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
e0b0: 4b 45 59 5d 20 66 6f 72 20 61 20 74 61 62 6c 65  KEY] for a table
e0c0: 20 74 68 61 74 0a 20 20 20 20 20 20 20 75 73 69   that.       usi
e0d0: 6e 67 20 5b 41 55 54 4f 49 4e 43 52 45 4d 45 4e  ng [AUTOINCREMEN
e0e0: 54 5d 2e 0a 0a 3c 6c 69 3e 3c 70 3e 54 61 62 6c  T]...<li><p>Tabl
e0f0: 65 73 20 77 69 74 68 20 6e 61 6d 65 73 20 6f 66  es with names of
e100: 20 74 68 65 20 66 6f 72 6d 20 22 73 71 6c 69 74   the form "sqlit
e110: 65 5f 73 74 61 74 4e 22 20 77 68 65 72 65 20 4e  e_statN" where N
e120: 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a   is an integer..
e130: 20 20 20 20 20 20 20 53 75 63 68 20 74 61 62 6c         Such tabl
e140: 65 73 20 73 74 6f 72 65 20 64 61 74 61 62 61 73  es store databas
e150: 65 20 73 74 61 74 69 73 74 69 63 73 20 67 61 74  e statistics gat
e160: 68 65 72 65 64 20 62 79 20 74 68 65 20 5b 41 4e  hered by the [AN
e170: 41 4c 59 5a 45 5d 0a 20 20 20 20 20 20 20 63 6f  ALYZE].       co
e180: 6d 6d 61 6e 64 20 61 6e 64 20 75 73 65 64 20 62  mmand and used b
e190: 79 20 74 68 65 20 71 75 65 72 79 20 70 6c 61 6e  y the query plan
e1a0: 6e 65 72 20 74 6f 20 68 65 6c 70 20 64 65 74 65  ner to help dete
e1b0: 72 6d 69 6e 65 20 74 68 65 20 62 65 73 74 0a 20  rmine the best. 
e1c0: 20 20 20 20 20 20 61 6c 67 6f 72 69 74 68 6d 20        algorithm 
e1d0: 74 6f 20 75 73 65 20 66 6f 72 20 65 61 63 68 20  to use for each 
e1e0: 71 75 65 72 79 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70  query..</ul>..<p
e1f0: 3e 4e 65 77 20 69 6e 74 65 72 6e 61 6c 20 73 63  >New internal sc
e200: 68 65 6d 61 20 6f 62 6a 65 63 74 73 20 6e 61 6d  hema objects nam
e210: 65 73 2c 20 61 6c 77 61 79 73 20 62 65 67 69 6e  es, always begin
e220: 6e 69 6e 67 20 77 69 74 68 20 22 73 71 6c 69 74  ning with "sqlit
e230: 65 5f 22 2c 0a 6d 61 79 20 62 65 20 61 64 64 65  e_",.may be adde
e240: 64 20 74 6f 20 74 68 65 20 53 51 4c 69 74 65 20  d to the SQLite 
e250: 66 69 6c 65 20 66 6f 72 6d 61 74 20 69 6e 20 66  file format in f
e260: 75 74 75 72 65 20 72 65 6c 65 61 73 65 73 2e 0a  uture releases..
e270: 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
e280: 74 20 73 65 71 74 61 62 20 7b 73 71 6c 69 74 65  t seqtab {sqlite
e290: 5f 73 65 71 75 65 6e 63 65 7d 3c 2f 74 63 6c 3e  _sequence}</tcl>
e2a0: 0a 3c 68 34 3e 32 2e 36 2e 32 20 54 68 65 20 73  .<h4>2.6.2 The s
e2b0: 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 20 74  qlite_sequence t
e2c0: 61 62 6c 65 3c 2f 68 34 3e 0a 0a 3c 70 3e 5e 54  able</h4>..<p>^T
e2d0: 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e  he sqlite_sequen
e2e0: 63 65 20 74 61 62 6c 65 20 69 73 20 61 6e 20 69  ce table is an i
e2f0: 6e 74 65 72 6e 61 6c 20 74 61 62 6c 65 20 75 73  nternal table us
e300: 65 64 20 74 6f 20 68 65 6c 70 20 69 6d 70 6c 65  ed to help imple
e310: 6d 65 6e 74 0a 5b 41 55 54 4f 49 4e 43 52 45 4d  ment.[AUTOINCREM
e320: 45 4e 54 5d 2e 20 20 5e 54 68 65 20 73 71 6c 69  ENT].  ^The sqli
e330: 74 65 5f 73 65 71 75 65 6e 63 65 20 74 61 62 6c  te_sequence tabl
e340: 65 20 69 73 20 63 72 65 61 74 65 64 20 61 75 74  e is created aut
e350: 6f 6d 61 74 69 63 61 6c 6c 79 0a 77 68 65 6e 65  omatically.whene
e360: 76 65 72 20 61 6e 79 20 6f 72 64 69 6e 61 72 79  ver any ordinary
e370: 20 74 61 62 6c 65 20 77 69 74 68 20 61 6e 20 41   table with an A
e380: 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 69 6e 74  UTOINCREMENT int
e390: 65 67 65 72 20 70 72 69 6d 61 72 79 0a 6b 65 79  eger primary.key
e3a0: 20 69 73 20 63 72 65 61 74 65 64 2e 20 20 5e 4f   is created.  ^O
e3b0: 6e 63 65 20 63 72 65 61 74 65 64 2c 20 74 68 65  nce created, the
e3c0: 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65   sqlite_sequence
e3d0: 20 74 61 62 6c 65 20 65 78 69 73 74 73 20 69 6e   table exists in
e3e0: 20 74 68 65 0a 73 71 6c 69 74 65 5f 6d 61 73 74   the.sqlite_mast
e3f0: 65 72 20 74 61 62 6c 65 20 66 6f 72 65 76 65 72  er table forever
e400: 3b 20 69 74 20 63 61 6e 6e 6f 74 20 62 65 20 64  ; it cannot be d
e410: 72 6f 70 70 65 64 2e 0a 54 68 65 20 73 63 68 65  ropped..The sche
e420: 6d 61 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74  ma for the sqlit
e430: 65 5f 73 65 71 75 65 6e 63 65 20 74 61 62 6c 65  e_sequence table
e440: 20 69 73 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74   is:..<blockquot
e450: 65 3e 3c 70 72 65 3e 0a 43 52 45 41 54 45 20 54  e><pre>.CREATE T
e460: 41 42 4c 45 20 73 71 6c 69 74 65 5f 73 65 71 75  ABLE sqlite_sequ
e470: 65 6e 63 65 28 6e 61 6d 65 2c 73 65 71 29 3b 0a  ence(name,seq);.
e480: 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f  </pre></blockquo
e490: 74 65 3e 0a 0a 3c 70 3e 5e 54 68 65 72 65 20 69  te>..<p>^There i
e4a0: 73 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 69  s a single row i
e4b0: 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73 65 71  n the sqlite_seq
e4c0: 75 65 6e 63 65 20 74 61 62 6c 65 20 66 6f 72 20  uence table for 
e4d0: 65 61 63 68 20 6f 72 64 69 6e 61 72 79 0a 74 61  each ordinary.ta
e4e0: 62 6c 65 20 74 68 61 74 20 75 73 65 73 20 41 55  ble that uses AU
e4f0: 54 4f 49 4e 43 52 45 4d 45 4e 54 2e 20 20 54 68  TOINCREMENT.  Th
e500: 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  e name of the ta
e510: 62 6c 65 20 28 61 73 20 69 74 20 61 70 70 65 61  ble (as it appea
e520: 72 73 20 69 6e 0a 73 71 6c 69 74 65 5f 6d 61 73  rs in.sqlite_mas
e530: 74 65 72 2e 6e 61 6d 65 29 20 69 73 20 69 6e 20  ter.name) is in 
e540: 74 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65  the sqlite_seque
e550: 6e 63 65 2e 6d 61 69 6e 20 66 69 65 6c 64 20 61  nce.main field a
e560: 6e 64 20 74 68 65 20 6c 61 72 67 65 73 74 0a 5b  nd the largest.[
e570: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
e580: 4b 45 59 5d 20 65 76 65 72 20 75 73 65 64 20 62  KEY] ever used b
e590: 79 20 74 68 61 74 20 74 61 62 6c 65 20 69 73 20  y that table is 
e5a0: 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73 65  in the sqlite_se
e5b0: 71 75 65 6e 63 65 2e 73 65 71 0a 66 69 65 6c 64  quence.seq.field
e5c0: 2e 20 20 5e 4e 65 77 20 61 75 74 6f 6d 61 74 69  .  ^New automati
e5d0: 63 61 6c 6c 79 20 67 65 6e 65 72 61 74 65 64 20  cally generated 
e5e0: 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 20  integer primary 
e5f0: 6b 65 79 73 20 66 6f 72 20 41 55 54 4f 49 4e 43  keys for AUTOINC
e600: 52 45 4d 45 4e 54 0a 74 61 62 6c 65 73 20 61 72  REMENT.tables ar
e610: 65 20 67 75 61 72 61 6e 74 65 65 64 20 74 6f 20  e guaranteed to 
e620: 62 65 20 6c 61 72 67 65 72 20 74 68 61 6e 20 74  be larger than t
e630: 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e  he sqlite_sequen
e640: 63 65 2e 73 65 71 20 66 69 65 6c 64 20 66 6f 72  ce.seq field for
e650: 0a 74 68 61 74 20 74 61 62 6c 65 2e 0a 5e 28 49  .that table..^(I
e660: 66 20 74 68 65 20 73 71 6c 69 74 65 5f 73 65 71  f the sqlite_seq
e670: 75 65 6e 63 65 2e 73 65 71 20 66 69 65 6c 64 20  uence.seq field 
e680: 6f 66 20 61 6e 20 41 55 54 4f 49 4e 43 52 45 4d  of an AUTOINCREM
e690: 45 4e 54 20 74 61 62 6c 65 20 69 73 20 61 6c 72  ENT table is alr
e6a0: 65 61 64 79 20 61 74 0a 74 68 65 20 6c 61 72 67  eady at.the larg
e6b0: 65 73 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75  est integer valu
e6c0: 65 20 28 39 32 32 33 33 37 32 30 33 36 38 35 34  e (9223372036854
e6d0: 37 37 35 38 30 37 29 20 74 68 65 6e 20 61 74 74  775807) then att
e6e0: 65 6d 70 74 73 20 74 6f 20 61 64 64 20 6e 65 77  empts to add new
e6f0: 0a 72 6f 77 73 20 74 6f 20 74 68 61 74 20 74 61  .rows to that ta
e700: 62 6c 65 20 77 69 74 68 20 61 6e 20 61 75 74 6f  ble with an auto
e710: 6d 61 74 69 63 61 6c 6c 79 20 67 65 6e 65 72 61  matically genera
e720: 74 65 64 20 69 6e 74 65 67 65 72 20 70 72 69 6d  ted integer prim
e730: 61 72 79 20 77 69 6c 6c 20 66 61 69 6c 0a 77 69  ary will fail.wi
e740: 74 68 20 61 6e 20 5b 53 51 4c 49 54 45 5f 46 55  th an [SQLITE_FU
e750: 4c 4c 5d 20 65 72 72 6f 72 2e 29 5e 0a 5e 54 68  LL] error.)^.^Th
e760: 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63  e sqlite_sequenc
e770: 65 2e 73 65 71 20 66 69 65 6c 64 20 69 73 20 61  e.seq field is a
e780: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 75 70 64  utomatically upd
e790: 61 74 65 64 20 69 66 20 72 65 71 75 69 72 65 64  ated if required
e7a0: 20 77 68 65 6e 0a 6e 65 77 20 65 6e 74 72 69 65   when.new entrie
e7b0: 73 20 61 72 65 20 61 64 64 65 64 20 74 6f 20 61  s are added to a
e7c0: 6e 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20  n AUTOINCREMENT 
e7d0: 74 61 62 6c 65 2e 20 20 0a 5e 54 68 65 20 73 71  table.  .^The sq
e7e0: 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 20 72 6f  lite_sequence ro
e7f0: 77 20 66 6f 72 20 61 6e 20 41 55 54 4f 49 4e 43  w for an AUTOINC
e800: 52 45 4d 45 4e 54 20 74 61 62 6c 65 20 69 73 20  REMENT table is 
e810: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65  automatically de
e820: 6c 65 74 65 64 0a 77 68 65 6e 20 74 68 65 20 74  leted.when the t
e830: 61 62 6c 65 20 69 73 20 64 72 6f 70 70 65 64 2e  able is dropped.
e840: 0a 5e 49 66 20 74 68 65 20 73 71 6c 69 74 65 5f  .^If the sqlite_
e850: 73 65 71 75 65 6e 63 65 20 72 6f 77 20 66 6f 72  sequence row for
e860: 20 61 6e 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e   an AUTOINCREMEN
e870: 54 20 74 61 62 6c 65 20 64 6f 65 73 20 6e 6f 74  T table does not
e880: 20 65 78 69 73 74 20 77 68 65 6e 0a 74 68 65 20   exist when.the 
e890: 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 74 61  AUTOINCREMENT ta
e8a0: 62 6c 65 20 69 73 20 75 70 64 61 74 65 64 2c 20  ble is updated, 
e8b0: 74 68 65 6e 20 61 20 6e 65 77 20 73 71 6c 69 74  then a new sqlit
e8c0: 65 5f 73 65 71 75 65 6e 63 65 20 72 6f 77 20 69  e_sequence row i
e8d0: 73 20 63 72 65 61 74 65 64 2e 0a 5e 28 49 66 20  s created..^(If 
e8e0: 74 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65  the sqlite_seque
e8f0: 6e 63 65 2e 73 65 71 20 76 61 6c 75 65 20 66 6f  nce.seq value fo
e900: 72 20 61 6e 20 41 55 54 4f 49 4e 43 52 45 4d 45  r an AUTOINCREME
e910: 4e 54 20 74 61 62 6c 65 20 69 73 20 6d 61 6e 75  NT table is manu
e920: 61 6c 6c 79 20 0a 73 65 74 20 74 6f 20 73 6f 6d  ally .set to som
e930: 65 74 68 69 6e 67 20 6f 74 68 65 72 20 74 68 61  ething other tha
e940: 6e 20 61 6e 20 69 6e 74 65 67 65 72 20 61 6e 64  n an integer and
e950: 20 74 68 65 72 65 20 69 73 20 61 20 73 75 62 73   there is a subs
e960: 65 71 75 65 6e 74 20 61 74 74 65 6d 70 74 20 74  equent attempt t
e970: 6f 0a 69 6e 73 65 72 74 20 74 68 65 20 6f 72 20  o.insert the or 
e980: 75 70 64 61 74 65 20 74 68 65 20 41 55 54 4f 49  update the AUTOI
e990: 4e 43 52 45 4d 45 4e 54 20 74 61 62 6c 65 2c 20  NCREMENT table, 
e9a0: 74 68 65 6e 20 74 68 65 20 62 65 68 61 76 69 6f  then the behavio
e9b0: 72 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 29  r is undefined.)
e9c0: 5e 0a 0a 3c 70 3e 5e 41 70 70 6c 69 63 61 74 69  ^..<p>^Applicati
e9d0: 6f 6e 20 63 6f 64 65 20 69 73 20 61 6c 6c 6f 77  on code is allow
e9e0: 65 64 20 74 6f 20 6d 6f 64 69 66 79 20 74 68 65  ed to modify the
e9f0: 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65   sqlite_sequence
ea00: 20 74 61 62 6c 65 2c 20 74 6f 20 61 64 64 0a 6e   table, to add.n
ea10: 65 77 20 72 6f 77 73 2c 20 74 6f 20 64 65 6c 65  ew rows, to dele
ea20: 74 65 20 72 6f 77 73 2c 20 6f 72 20 74 6f 20 6d  te rows, or to m
ea30: 6f 64 69 66 79 20 65 78 69 73 74 69 6e 67 20 72  odify existing r
ea40: 6f 77 73 2e 20 20 5e 48 6f 77 65 76 65 72 2c 20  ows.  ^However, 
ea50: 61 70 70 6c 69 63 61 74 69 6f 6e 0a 63 6f 64 65  application.code
ea60: 20 63 61 6e 6e 6f 74 20 63 72 65 61 74 65 20 74   cannot create t
ea70: 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e  he sqlite_sequen
ea80: 63 65 20 74 61 62 6c 65 20 69 66 20 69 74 20 64  ce table if it d
ea90: 6f 65 73 20 6e 6f 74 20 61 6c 72 65 61 64 79 20  oes not already 
eaa0: 65 78 69 73 74 2e 0a 5e 41 70 70 6c 69 63 61 74  exist..^Applicat
eab0: 69 6f 6e 20 63 6f 64 65 20 63 61 6e 20 64 65 6c  ion code can del
eac0: 65 74 65 20 61 6c 6c 20 65 6e 74 72 69 65 73 20  ete all entries 
ead0: 66 72 6f 6d 20 74 68 65 20 73 71 6c 69 74 65 5f  from the sqlite_
eae0: 73 65 71 75 65 6e 63 65 20 74 61 62 6c 65 2c 0a  sequence table,.
eaf0: 62 75 74 20 61 70 70 6c 69 63 61 74 69 6f 6e 20  but application 
eb00: 63 6f 64 65 20 63 61 6e 6e 6f 74 20 64 72 6f 70  code cannot drop
eb10: 20 74 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75   the sqlite_sequ
eb20: 65 6e 63 65 20 74 61 62 6c 65 2e 0a 0a 3c 74 63  ence table...<tc
eb30: 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 73 74  l>hd_fragment st
eb40: 61 74 31 74 61 62 20 7b 73 71 6c 69 74 65 5f 73  at1tab {sqlite_s
eb50: 74 61 74 31 7d 20 53 51 4c 49 54 45 5f 53 54 41  tat1} SQLITE_STA
eb60: 54 31 20 3c 2f 74 63 6c 3e 0a 3c 68 34 3e 32 2e  T1 </tcl>.<h4>2.
eb70: 36 2e 33 20 54 68 65 20 73 71 6c 69 74 65 5f 73  6.3 The sqlite_s
eb80: 74 61 74 31 20 74 61 62 6c 65 3c 2f 68 34 3e 0a  tat1 table</h4>.
eb90: 0a 3c 70 3e 5e 54 68 65 20 73 71 6c 69 74 65 5f  .<p>^The sqlite_
eba0: 73 74 61 74 31 20 69 73 20 61 6e 20 69 6e 74 65  stat1 is an inte
ebb0: 72 6e 61 6c 20 74 61 62 6c 65 20 63 72 65 61 74  rnal table creat
ebc0: 65 64 20 62 79 20 74 68 65 20 5b 41 4e 41 4c 59  ed by the [ANALY
ebd0: 5a 45 5d 20 63 6f 6d 6d 61 6e 64 0a 61 6e 64 20  ZE] command.and 
ebe0: 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 73 75 70  used to hold sup
ebf0: 70 6c 65 6d 65 6e 74 61 6c 20 69 6e 66 6f 72 6d  plemental inform
ec00: 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 61 62 6c  ation about tabl
ec10: 65 73 20 61 6e 64 20 69 6e 64 69 63 65 73 20 74  es and indices t
ec20: 68 61 74 20 74 68 65 0a 71 75 65 72 79 20 70 6c  hat the.query pl
ec30: 61 6e 6e 65 72 20 63 61 6e 20 75 73 65 20 74 6f  anner can use to
ec40: 20 68 65 6c 70 20 69 74 20 66 69 6e 64 20 62 65   help it find be
ec50: 74 74 65 72 20 77 61 79 73 20 6f 66 20 70 65 72  tter ways of per
ec60: 66 6f 72 6d 69 6e 67 20 71 75 65 72 69 65 73 2e  forming queries.
ec70: 0a 5e 41 70 70 6c 69 63 61 74 69 6f 6e 73 20 63  .^Applications c
ec80: 61 6e 20 75 70 64 61 74 65 2c 20 64 65 6c 65 74  an update, delet
ec90: 65 20 66 72 6f 6d 2c 20 69 6e 73 65 72 74 20 69  e from, insert i
eca0: 6e 74 6f 20 6f 72 20 64 72 6f 70 20 74 68 65 20  nto or drop the 
ecb0: 73 71 6c 69 74 65 5f 73 74 61 74 31 0a 74 61 62  sqlite_stat1.tab
ecc0: 6c 65 2c 20 62 75 74 20 6d 61 79 20 6e 6f 74 20  le, but may not 
ecd0: 63 72 65 61 74 65 20 6f 72 20 61 6c 74 65 72 20  create or alter 
ece0: 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 31  the sqlite_stat1
ecf0: 20 74 61 62 6c 65 2e 0a 5e 54 68 65 20 73 63 68   table..^The sch
ed00: 65 6d 61 20 6f 66 20 74 68 65 20 73 71 6c 69 74  ema of the sqlit
ed10: 65 5f 73 74 61 74 31 20 74 61 62 6c 65 20 69 73  e_stat1 table is
ed20: 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 62   as follows:..<b
ed30: 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a  lockquote><pre>.
ed40: 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 71 6c  CREATE TABLE sql
ed50: 69 74 65 5f 73 74 61 74 31 28 74 62 6c 2c 69 64  ite_stat1(tbl,id
ed60: 78 2c 73 74 61 74 29 3b 0a 3c 2f 70 72 65 3e 3c  x,stat);.</pre><
ed70: 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70  /blockquote>..<p
ed80: 3e 54 68 65 72 65 20 69 73 20 6e 6f 72 6d 61 6c  >There is normal
ed90: 6c 79 20 6f 6e 65 20 72 6f 77 20 70 65 72 20 69  ly one row per i
eda0: 6e 64 65 78 2c 20 77 69 74 68 20 74 68 65 20 69  ndex, with the i
edb0: 6e 64 65 78 20 69 64 65 6e 74 69 66 69 65 64 20  ndex identified 
edc0: 62 79 20 74 68 65 0a 6e 61 6d 65 20 69 6e 20 74  by the.name in t
edd0: 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 31 2e  he sqlite_stat1.
ede0: 69 64 78 20 63 6f 6c 75 6d 6e 2e 20 20 54 68 65  idx column.  The
edf0: 20 73 71 6c 69 74 65 5f 73 74 61 74 31 2e 74 62   sqlite_stat1.tb
ee00: 6c 20 63 6f 6c 75 6d 6e 20 69 73 0a 74 68 65 20  l column is.the 
ee10: 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  name of the tabl
ee20: 65 20 74 6f 20 77 68 69 63 68 20 74 68 65 20 69  e to which the i
ee30: 6e 64 65 78 20 62 65 6c 6f 6e 67 73 2e 20 20 49  ndex belongs.  I
ee40: 6e 20 65 61 63 68 20 73 75 63 68 20 72 6f 77 2c  n each such row,
ee50: 20 0a 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61   .the sqlite_sta
ee60: 74 2e 73 74 61 74 20 63 6f 6c 75 6d 6e 20 77 69  t.stat column wi
ee70: 6c 6c 20 62 65 0a 61 20 73 74 72 69 6e 67 20 63  ll be.a string c
ee80: 6f 6e 73 69 73 74 69 6e 67 20 6f 66 20 61 20 6c  onsisting of a l
ee90: 69 73 74 20 6f 66 20 69 6e 74 65 67 65 72 73 2e  ist of integers.
eea0: 20 20 54 68 65 20 66 69 72 73 74 20 69 6e 74 65    The first inte
eeb0: 67 65 72 20 69 6e 20 74 68 69 73 0a 6c 69 73 74  ger in this.list
eec0: 20 69 73 20 74 68 65 20 61 70 70 72 6f 78 69 6d   is the approxim
eed0: 61 74 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  ate number of ro
eee0: 77 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20  ws in the index 
eef0: 61 6e 64 20 69 6e 20 74 68 65 20 74 61 62 6c 65  and in the table
ef00: 2e 20 20 0a 54 68 65 20 73 65 63 6f 6e 64 20 69  .  .The second i
ef10: 6e 74 65 67 65 72 20 69 73 20 74 68 65 20 61 70  nteger is the ap
ef20: 70 72 6f 78 69 6d 61 74 65 20 61 76 65 72 61 67  proximate averag
ef30: 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  e number of rows
ef40: 20 69 6e 20 74 68 65 20 69 6e 64 65 78 0a 74 68   in the index.th
ef50: 61 74 20 68 61 76 65 20 74 68 65 20 73 61 6d 65  at have the same
ef60: 20 76 61 6c 75 65 20 69 6e 20 74 68 65 20 66 69   value in the fi
ef70: 72 73 74 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68  rst column of th
ef80: 65 20 69 6e 64 65 78 2e 20 20 54 68 65 20 74 68  e index.  The th
ef90: 69 72 64 20 0a 69 6e 74 65 67 65 72 20 69 73 20  ird .integer is 
efa0: 74 68 65 20 61 70 70 72 6f 78 69 6d 61 74 65 20  the approximate 
efb0: 61 76 65 72 61 67 65 20 6e 75 6d 62 65 72 20 6f  average number o
efc0: 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20 69 6e  f rows in the in
efd0: 64 65 78 20 74 68 61 74 20 68 61 76 65 20 0a 74  dex that have .t
efe0: 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20 66 6f  he same value fo
eff0: 72 20 74 68 65 20 66 69 72 73 74 20 74 77 6f 20  r the first two 
f000: 63 6f 6c 75 6d 6e 73 2e 20 20 54 68 65 20 4e 2d  columns.  The N-
f010: 74 68 20 69 6e 74 65 67 65 72 20 28 66 6f 72 20  th integer (for 
f020: 4e 3e 31 29 20 0a 69 73 20 74 68 65 20 61 70 70  N>1) .is the app
f030: 72 6f 78 69 6d 61 74 65 20 61 76 65 72 61 67 65  roximate average
f040: 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
f050: 69 6e 20 0a 74 68 65 20 69 6e 64 65 78 20 77 68  in .the index wh
f060: 69 63 68 20 68 61 76 65 20 74 68 65 20 73 61 6d  ich have the sam
f070: 65 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20  e value for the 
f080: 66 69 72 73 74 20 4e 2d 31 20 63 6f 6c 75 6d 6e  first N-1 column
f090: 73 2e 20 20 46 6f 72 0a 61 20 4b 2d 63 6f 6c 75  s.  For.a K-colu
f0a0: 6d 6e 20 69 6e 64 65 78 2c 20 74 68 65 72 65 20  mn index, there 
f0b0: 77 69 6c 6c 20 62 65 20 4b 2b 31 20 69 6e 74 65  will be K+1 inte
f0c0: 67 65 72 73 20 69 6e 20 74 68 65 20 73 74 61 74  gers in the stat
f0d0: 20 63 6f 6c 75 6d 6e 2e 20 20 49 66 0a 74 68 65   column.  If.the
f0e0: 20 69 6e 64 65 78 20 69 73 20 75 6e 69 71 75 65   index is unique
f0f0: 2c 20 74 68 65 6e 20 74 68 65 20 6c 61 73 74 20  , then the last 
f100: 69 6e 74 65 67 65 72 20 77 69 6c 6c 20 62 65 20  integer will be 
f110: 31 2e 0a 0a 3c 70 3e 5e 54 68 65 20 6c 69 73 74  1...<p>^The list
f120: 20 6f 66 20 69 6e 74 65 67 65 72 73 20 69 6e 20   of integers in 
f130: 74 68 65 20 73 74 61 74 20 63 6f 6c 75 6d 6e 20  the stat column 
f140: 63 61 6e 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 62  can optionally b
f150: 65 20 66 6f 6c 6c 6f 77 65 64 0a 62 79 20 74 68  e followed.by th
f160: 65 20 6b 65 79 77 6f 72 64 20 22 75 6e 6f 72 64  e keyword "unord
f170: 65 72 65 64 22 2e 20 20 5e 54 68 65 20 22 75 6e  ered".  ^The "un
f180: 6f 72 64 65 72 65 64 22 20 6b 65 79 77 6f 72 64  ordered" keyword
f190: 2c 20 69 66 20 69 74 20 69 73 20 70 72 65 73 65  , if it is prese
f1a0: 6e 74 2c 0a 6d 75 73 74 20 62 65 20 73 65 70 61  nt,.must be sepa
f1b0: 72 61 74 65 64 20 66 72 6f 6d 20 74 68 65 20 6c  rated from the l
f1c0: 61 73 74 20 69 6e 74 65 67 65 72 20 62 79 20 61  ast integer by a
f1d0: 20 73 69 6e 67 6c 65 20 73 70 61 63 65 2e 20 20   single space.  
f1e0: 5e 49 66 20 74 68 65 0a 22 75 6e 6f 72 64 65 72  ^If the."unorder
f1f0: 65 64 22 20 6b 65 79 77 6f 72 64 20 69 73 20 70  ed" keyword is p
f200: 72 65 73 65 6e 74 2c 20 74 68 65 6e 20 74 68 65  resent, then the
f210: 20 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 61   query planner a
f220: 73 73 75 6d 65 73 20 74 68 61 74 0a 74 68 65 20  ssumes that.the 
f230: 69 6e 64 65 78 20 69 73 20 75 6e 6f 72 64 65 72  index is unorder
f240: 65 64 20 61 6e 64 20 77 69 6c 6c 20 6e 6f 74 20  ed and will not 
f250: 75 73 65 20 74 68 65 20 69 6e 64 65 78 20 66 6f  use the index fo
f260: 72 20 61 20 72 61 6e 67 65 20 71 75 65 72 79 0a  r a range query.
f270: 6f 72 20 66 6f 72 20 73 6f 72 74 69 6e 67 2e 0a  or for sorting..
f280: 0a 3c 70 3e 5e 54 68 65 20 6c 69 73 74 20 6f 66  .<p>^The list of
f290: 20 69 6e 74 65 67 65 72 73 20 69 6e 20 74 68 65   integers in the
f2a0: 20 73 74 61 74 20 63 6f 6c 75 6d 6e 20 63 61 6e   stat column can
f2b0: 20 61 6c 73 6f 20 6f 70 74 69 6f 6e 61 6c 6c 79   also optionally
f2c0: 20 62 65 20 66 6f 6c 6c 6f 77 65 64 0a 62 79 20   be followed.by 
f2d0: 61 20 74 6f 6b 65 6e 20 6f 66 20 74 68 65 20 66  a token of the f
f2e0: 6f 72 6d 20 22 73 7a 3d 4e 4e 4e 22 20 77 68 65  orm "sz=NNN" whe
f2f0: 72 65 20 4e 4e 4e 20 69 73 20 61 6e 20 75 6e 73  re NNN is an uns
f300: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 2e 20 20  igned integer.  
f310: 54 68 65 0a 22 73 7a 3d 4e 4e 4e 22 20 74 6f 6b  The."sz=NNN" tok
f320: 65 6e 2c 20 69 66 20 70 72 65 73 65 6e 74 2c 20  en, if present, 
f330: 6d 75 73 74 20 62 65 20 73 65 70 61 72 61 74 65  must be separate
f340: 64 20 66 72 6f 6d 20 74 68 65 20 6c 61 73 74 20  d from the last 
f350: 69 6e 74 65 67 65 72 20 62 79 20 61 0a 73 69 6e  integer by a.sin
f360: 67 6c 65 20 73 70 61 63 65 2e 20 20 5e 54 68 65  gle space.  ^The
f370: 20 22 73 7a 3d 4e 4e 4e 22 20 74 6f 6b 65 6e 20   "sz=NNN" token 
f380: 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 61  means that the a
f390: 76 65 72 61 67 65 20 72 6f 77 20 73 69 7a 65 20  verage row size 
f3a0: 6f 76 65 72 20 61 6c 6c 20 0a 72 65 63 6f 72 64  over all .record
f3b0: 73 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 6f  s of the table o
f3c0: 72 0a 69 6e 64 65 78 20 69 73 20 4e 4e 4e 20 62  r.index is NNN b
f3d0: 79 74 65 73 20 70 65 72 20 72 6f 77 2e 20 20 5e  ytes per row.  ^
f3e0: 54 68 65 20 53 51 4c 69 74 65 20 71 75 65 72 79  The SQLite query
f3f0: 20 70 6c 61 6e 6e 65 72 20 6d 69 67 68 74 20 75   planner might u
f400: 73 65 20 74 68 65 0a 65 73 74 69 6d 61 74 65 64  se the.estimated
f410: 20 72 6f 77 20 73 69 7a 65 20 69 6e 66 6f 72 6d   row size inform
f420: 61 74 69 6f 6e 20 70 72 6f 76 69 64 65 64 20 62  ation provided b
f430: 79 20 74 68 65 20 22 73 7a 3d 4e 4e 4e 22 20 74  y the "sz=NNN" t
f440: 6f 6b 65 6e 0a 74 6f 20 68 65 6c 70 20 69 74 20  oken.to help it 
f450: 63 68 6f 6f 73 65 20 73 6d 61 6c 6c 65 72 20 74  choose smaller t
f460: 61 62 6c 65 73 20 61 6e 64 20 69 6e 64 69 63 65  ables and indice
f470: 73 20 74 68 61 74 20 72 65 71 75 69 72 65 20 6c  s that require l
f480: 65 73 73 20 64 69 73 6b 20 49 2f 4f 2e 0a 0a 3c  ess disk I/O...<
f490: 70 3e 49 66 20 74 68 65 20 73 71 6c 69 74 65 5f  p>If the sqlite_
f4a0: 73 74 61 74 31 2e 69 64 78 20 63 6f 6c 75 6d 6e  stat1.idx column
f4b0: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74   is NULL, then t
f4c0: 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 31 2e  he sqlite_stat1.
f4d0: 73 74 61 74 0a 63 6f 6c 75 6d 6e 20 63 6f 6e 74  stat.column cont
f4e0: 61 69 6e 73 20 61 20 73 69 6e 67 6c 65 20 69 6e  ains a single in
f4f0: 74 65 67 65 72 20 77 68 69 63 68 20 69 73 20 74  teger which is t
f500: 68 65 20 61 70 70 72 6f 78 69 6d 61 74 65 20 6e  he approximate n
f510: 75 6d 62 65 72 20 6f 66 0a 72 6f 77 73 20 69 6e  umber of.rows in
f520: 20 74 68 65 20 74 61 62 6c 65 20 69 64 65 6e 74   the table ident
f530: 69 66 69 65 64 20 62 79 20 73 71 6c 69 74 65 5f  ified by sqlite_
f540: 73 74 61 74 31 2e 74 62 6c 2e 0a 0a 3c 74 63 6c  stat1.tbl...<tcl
f550: 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 73 74 61  >hd_fragment sta
f560: 74 32 74 61 62 20 7b 73 71 6c 69 74 65 5f 73 74  t2tab {sqlite_st
f570: 61 74 32 7d 3c 2f 74 63 6c 3e 0a 3c 68 34 3e 32  at2}</tcl>.<h4>2
f580: 2e 36 2e 34 20 54 68 65 20 73 71 6c 69 74 65 5f  .6.4 The sqlite_
f590: 73 74 61 74 32 20 74 61 62 6c 65 3c 2f 68 34 3e  stat2 table</h4>
f5a0: 0a 0a 3c 70 3e 54 68 65 20 73 71 6c 69 74 65 5f  ..<p>The sqlite_
f5b0: 73 74 61 74 32 20 69 73 20 6f 6e 6c 79 20 63 72  stat2 is only cr
f5c0: 65 61 74 65 64 20 61 6e 64 20 69 73 20 6f 6e 6c  eated and is onl
f5d0: 79 20 75 73 65 64 20 69 66 20 53 51 4c 69 74 65  y used if SQLite
f5e0: 20 69 73 20 63 6f 6d 70 69 6c 65 64 0a 77 69 74   is compiled.wit
f5f0: 68 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  h SQLITE_ENABLE_
f600: 53 54 41 54 32 20 61 6e 64 20 69 66 20 74 68 65  STAT2 and if the
f610: 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20   SQLite version 
f620: 6e 75 6d 62 65 72 20 69 73 20 62 65 74 77 65 65  number is betwee
f630: 6e 0a 33 2e 36 2e 31 38 20 61 6e 64 20 33 2e 37  n.3.6.18 and 3.7
f640: 2e 38 2e 20 20 54 68 65 20 73 71 6c 69 74 65 5f  .8.  The sqlite_
f650: 73 74 61 74 32 20 74 61 62 6c 65 20 69 73 20 6e  stat2 table is n
f660: 65 69 74 68 65 72 20 72 65 61 64 20 6e 6f 72 20  either read nor 
f670: 77 72 69 74 74 65 6e 20 62 79 20 61 6e 79 0a 76  written by any.v
f680: 65 72 73 69 6f 6e 20 6f 66 20 53 51 4c 69 74 65  ersion of SQLite
f690: 20 62 65 66 6f 72 65 20 33 2e 36 2e 31 38 20 6e   before 3.6.18 n
f6a0: 6f 72 20 61 66 74 65 72 20 33 2e 37 2e 38 2e 0a  or after 3.7.8..
f6b0: 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 32  The sqlite_stat2
f6c0: 20 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e 73 20   table contains 
f6d0: 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
f6e0: 6d 61 74 69 6f 6e 0a 61 62 6f 75 74 20 74 68 65  mation.about the
f6f0: 20 64 69 73 74 72 69 62 75 74 69 6f 6e 20 6f 66   distribution of
f700: 20 6b 65 79 73 20 77 69 74 68 69 6e 20 61 6e 20   keys within an 
f710: 69 6e 64 65 78 2e 0a 54 68 65 20 73 63 68 65 6d  index..The schem
f720: 61 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 5f  a of the sqlite_
f730: 73 74 61 74 32 20 74 61 62 6c 65 20 69 73 20 61  stat2 table is a
f740: 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 62 6c 6f  s follows:..<blo
f750: 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 43 52  ckquote><pre>.CR
f760: 45 41 54 45 20 54 41 42 4c 45 20 73 71 6c 69 74  EATE TABLE sqlit
f770: 65 5f 73 74 61 74 32 28 74 62 6c 2c 69 64 78 2c  e_stat2(tbl,idx,
f780: 73 61 6d 70 6c 65 6e 6f 2c 73 61 6d 70 6c 65 29  sampleno,sample)
f790: 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71  ;.</pre></blockq
f7a0: 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 73 71  uote>..<p>The sq
f7b0: 6c 69 74 65 5f 73 74 61 74 32 2e 69 64 78 20 63  lite_stat2.idx c
f7c0: 6f 6c 75 6d 6e 20 61 6e 64 20 74 68 65 20 73 71  olumn and the sq
f7d0: 6c 69 74 65 5f 73 74 61 74 32 2e 74 62 6c 20 63  lite_stat2.tbl c
f7e0: 6f 6c 75 6d 6e 20 69 6e 20 65 61 63 68 20 0a 72  olumn in each .r
f7f0: 6f 77 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65  ow of the sqlite
f800: 5f 73 74 61 74 32 20 74 61 62 6c 65 20 69 64 65  _stat2 table ide
f810: 6e 74 69 66 79 20 61 6e 20 69 6e 64 65 78 20 64  ntify an index d
f820: 65 73 63 72 69 62 65 64 20 62 79 20 74 68 61 74  escribed by that
f830: 20 72 6f 77 2e 0a 54 68 65 72 65 20 61 72 65 20   row..There are 
f840: 75 73 75 61 6c 6c 79 20 31 30 20 72 6f 77 73 20  usually 10 rows 
f850: 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74  in the sqlite_st
f860: 61 74 32 0a 74 61 62 6c 65 20 66 6f 72 20 65 61  at2.table for ea
f870: 63 68 20 69 6e 64 65 78 2e 0a 0a 3c 70 3e 54 68  ch index...<p>Th
f880: 65 20 73 71 6c 69 74 65 5f 73 74 61 74 32 20 65  e sqlite_stat2 e
f890: 6e 74 72 69 65 73 20 66 6f 72 20 61 6e 20 69 6e  ntries for an in
f8a0: 64 65 78 20 74 68 61 74 20 68 61 76 65 20 73 71  dex that have sq
f8b0: 6c 69 74 65 5f 73 74 61 74 32 2e 73 61 6d 70 6c  lite_stat2.sampl
f8c0: 65 6e 6f 0a 62 65 74 77 65 65 6e 20 30 20 61 6e  eno.between 0 an
f8d0: 64 20 39 20 69 6e 63 6c 75 73 69 76 65 20 61 72  d 9 inclusive ar
f8e0: 65 20 73 61 6d 70 6c 65 73 20 6f 66 20 74 68 65  e samples of the
f8f0: 20 6c 65 66 74 2d 6d 6f 73 74 20 6b 65 79 20 76   left-most key v
f900: 61 6c 75 65 20 69 6e 20 74 68 65 0a 69 6e 64 65  alue in the.inde
f910: 78 20 74 61 6b 65 6e 20 61 74 20 65 76 65 6e 6c  x taken at evenl
f920: 79 20 73 70 61 63 65 64 20 70 6f 69 6e 74 73 20  y spaced points 
f930: 61 6c 6f 6e 67 20 74 68 65 20 69 6e 64 65 78 2e  along the index.
f940: 0a 4c 65 74 20 43 20 62 65 20 74 68 65 20 6e 75  .Let C be the nu
f950: 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20  mber of rows in 
f960: 74 68 65 20 69 6e 64 65 78 2e 0a 54 68 65 6e 20  the index..Then 
f970: 74 68 65 20 73 61 6d 70 6c 65 64 20 72 6f 77 73  the sampled rows
f980: 20 61 72 65 20 67 69 76 65 6e 20 62 79 0a 0a 3c   are given by..<
f990: 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 20 20  blockquote>.    
f9a0: 20 72 6f 77 6e 75 6d 62 65 72 20 3d 20 28 69 2a   rownumber = (i*
f9b0: 43 2a 32 20 2b 20 43 29 2f 32 30 0a 3c 2f 62 6c  C*2 + C)/20.</bl
f9c0: 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68  ockquote>..<p>Th
f9d0: 65 20 76 61 72 69 61 62 6c 65 20 69 20 69 6e 20  e variable i in 
f9e0: 74 68 65 20 70 72 65 76 69 6f 75 73 20 65 78 70  the previous exp
f9f0: 72 65 73 73 69 6f 6e 20 76 61 72 69 65 73 20 62  ression varies b
fa00: 65 74 77 65 65 6e 20 30 20 61 6e 64 20 39 2e 0a  etween 0 and 9..
fa10: 43 6f 6e 63 65 70 74 75 61 6c 6c 79 2c 20 74 68  Conceptually, th
fa20: 65 20 69 6e 64 65 78 20 73 70 61 63 65 20 69 73  e index space is
fa30: 20 64 69 76 69 64 65 64 20 69 6e 74 6f 0a 31 30   divided into.10
fa40: 20 75 6e 69 66 6f 72 6d 20 62 75 63 6b 65 74 73   uniform buckets
fa50: 20 61 6e 64 20 74 68 65 20 73 61 6d 70 6c 65 73   and the samples
fa60: 20 61 72 65 20 74 68 65 20 6d 69 64 64 6c 65 20   are the middle 
fa70: 72 6f 77 20 66 72 6f 6d 20 65 61 63 68 20 62 75  row from each bu
fa80: 63 6b 65 74 2e 0a 0a 3c 70 3e 54 68 65 20 66 6f  cket...<p>The fo
fa90: 72 6d 61 74 20 66 6f 72 20 73 71 6c 69 74 65 5f  rmat for sqlite_
faa0: 73 74 61 74 32 20 69 73 20 72 65 63 6f 72 64 65  stat2 is recorde
fab0: 64 20 68 65 72 65 20 66 6f 72 20 6c 65 67 61 63  d here for legac
fac0: 79 20 72 65 66 65 72 65 6e 63 65 2e 20 20 0a 52  y reference.  .R
fad0: 65 63 65 6e 74 20 76 65 72 73 69 6f 6e 73 20 6f  ecent versions o
fae0: 66 20 53 51 4c 69 74 65 20 6e 6f 20 6c 6f 6e 67  f SQLite no long
faf0: 65 72 20 73 75 70 70 6f 72 74 20 73 71 6c 69 74  er support sqlit
fb00: 65 5f 73 74 61 74 32 20 61 6e 64 20 74 68 65 0a  e_stat2 and the.
fb10: 73 71 6c 69 74 65 5f 73 74 61 74 32 20 74 61 62  sqlite_stat2 tab
fb20: 6c 65 2c 20 69 74 20 69 73 20 65 78 69 73 74 73  le, it is exists
fb30: 2c 20 69 73 20 73 69 6d 70 6c 79 20 69 67 6e 6f  , is simply igno
fb40: 72 65 64 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  red...<tcl>hd_fr
fb50: 61 67 6d 65 6e 74 20 73 74 61 74 33 74 61 62 20  agment stat3tab 
fb60: 7b 73 71 6c 69 74 65 5f 73 74 61 74 33 7d 20 53  {sqlite_stat3} S
fb70: 51 4c 49 54 45 5f 53 54 41 54 33 3c 2f 74 63 6c  QLITE_STAT3</tcl
fb80: 3e 0a 3c 68 34 3e 32 2e 36 2e 35 20 54 68 65 20  >.<h4>2.6.5 The 
fb90: 73 71 6c 69 74 65 5f 73 74 61 74 33 20 74 61 62  sqlite_stat3 tab
fba0: 6c 65 3c 2f 68 34 3e 0a 0a 3c 70 3e 54 68 65 20  le</h4>..<p>The 
fbb0: 73 71 6c 69 74 65 5f 73 74 61 74 33 20 69 73 20  sqlite_stat3 is 
fbc0: 6f 6e 6c 79 20 6f 6e 6c 79 20 75 73 65 64 20 69  only only used i
fbd0: 66 20 53 51 4c 69 74 65 20 69 73 20 63 6f 6d 70  f SQLite is comp
fbe0: 69 6c 65 64 0a 77 69 74 68 20 5b 53 51 4c 49 54  iled.with [SQLIT
fbf0: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5d 20  E_ENABLE_STAT3] 
fc00: 6f 72 20 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c  or [SQLITE_ENABL
fc10: 45 5f 53 54 41 54 34 5d 0a 61 6e 64 20 69 66 20  E_STAT4].and if 
fc20: 74 68 65 20 53 51 4c 69 74 65 20 76 65 72 73 69  the SQLite versi
fc30: 6f 6e 20 6e 75 6d 62 65 72 20 69 73 20 33 2e 37  on number is 3.7
fc40: 2e 39 20 6f 72 20 67 72 65 61 74 65 72 2e 0a 54  .9 or greater..T
fc50: 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20  he sqlite_stat3 
fc60: 74 61 62 6c 65 20 69 73 20 6e 65 69 74 68 65 72  table is neither
fc70: 20 72 65 61 64 20 6e 6f 72 20 77 72 69 74 74 65   read nor writte
fc80: 6e 20 62 79 20 61 6e 79 0a 76 65 72 73 69 6f 6e  n by any.version
fc90: 20 6f 66 20 53 51 4c 69 74 65 20 62 65 66 6f 72   of SQLite befor
fca0: 65 20 33 2e 37 2e 39 2e 0a 49 66 20 74 68 65 20  e 3.7.9..If the 
fcb0: 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53  [SQLITE_ENABLE_S
fcc0: 54 41 54 34 5d 20 63 6f 6d 70 69 6c 65 2d 74 69  TAT4] compile-ti
fcd0: 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20 75 73 65  me option is use
fce0: 64 20 61 6e 64 20 74 68 65 0a 53 51 4c 69 74 65  d and the.SQLite
fcf0: 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20   version number 
fd00: 69 73 20 33 2e 38 2e 31 20 6f 72 20 67 72 65 61  is 3.8.1 or grea
fd10: 74 65 72 2c 20 74 68 65 6e 20 73 71 6c 69 74 65  ter, then sqlite
fd20: 5f 73 74 61 74 33 20 6d 69 67 68 74 0a 62 65 20  _stat3 might.be 
fd30: 72 65 61 64 20 62 75 74 20 6e 6f 74 20 77 72 69  read but not wri
fd40: 74 74 65 6e 2e 0a 54 68 65 20 73 71 6c 69 74 65  tten..The sqlite
fd50: 5f 73 74 61 74 33 20 74 61 62 6c 65 20 63 6f 6e  _stat3 table con
fd60: 74 61 69 6e 73 20 61 64 64 69 74 69 6f 6e 61 6c  tains additional
fd70: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 61 62 6f   information.abo
fd80: 75 74 20 74 68 65 20 64 69 73 74 72 69 62 75 74  ut the distribut
fd90: 69 6f 6e 20 6f 66 20 6b 65 79 73 20 77 69 74 68  ion of keys with
fda0: 69 6e 20 61 6e 20 69 6e 64 65 78 2c 20 69 6e 66  in an index, inf
fdb0: 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 20 74 68  ormation that th
fdc0: 65 0a 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 20  e.query planner 
fdd0: 63 61 6e 20 75 73 65 20 74 6f 20 64 65 76 69 73  can use to devis
fde0: 65 20 62 65 74 74 65 72 20 61 6e 64 20 66 61 73  e better and fas
fdf0: 74 65 72 20 71 75 65 72 79 20 61 6c 67 6f 72 69  ter query algori
fe00: 74 68 6d 73 2e 0a 54 68 65 20 73 63 68 65 6d 61  thms..The schema
fe10: 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 5f 73   of the sqlite_s
fe20: 74 61 74 33 20 74 61 62 6c 65 20 69 73 20 61 73  tat3 table is as
fe30: 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 62 6c 6f 63   follows:..<bloc
fe40: 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 43 52 45  kquote><pre>.CRE
fe50: 41 54 45 20 54 41 42 4c 45 20 73 71 6c 69 74 65  ATE TABLE sqlite
fe60: 5f 73 74 61 74 33 28 74 62 6c 2c 69 64 78 2c 6e  _stat3(tbl,idx,n
fe70: 45 71 2c 6e 4c 74 2c 6e 44 4c 74 2c 73 61 6d 70  Eq,nLt,nDLt,samp
fe80: 6c 65 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f  le);.</pre></blo
fe90: 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65  ckquote>..<p>The
fea0: 72 65 20 61 72 65 20 75 73 75 61 6c 6c 79 20 6d  re are usually m
feb0: 75 6c 74 69 70 6c 65 20 65 6e 74 72 69 65 73 20  ultiple entries 
fec0: 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74  in the sqlite_st
fed0: 61 74 33 20 74 61 62 6c 65 20 66 6f 72 20 65 61  at3 table for ea
fee0: 63 68 20 69 6e 64 65 78 2e 0a 54 68 65 20 73 71  ch index..The sq
fef0: 6c 69 74 65 5f 73 74 61 74 33 2e 73 61 6d 70 6c  lite_stat3.sampl
ff00: 65 20 63 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 74  e column holds t
ff10: 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
ff20: 6c 65 66 74 2d 6d 6f 73 74 20 66 69 65 6c 64 20  left-most field 
ff30: 6f 66 20 61 6e 0a 69 6e 64 65 78 20 69 64 65 6e  of an.index iden
ff40: 74 69 66 69 65 64 20 62 79 20 73 71 6c 69 74 65  tified by sqlite
ff50: 5f 73 74 61 74 33 2e 69 64 78 20 61 6e 64 20 73  _stat3.idx and s
ff60: 71 6c 69 74 65 5f 73 74 61 74 33 2e 74 62 6c 2e  qlite_stat3.tbl.
ff70: 0a 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74  .The sqlite_stat
ff80: 33 2e 6e 45 71 20 63 6f 6c 75 6d 6e 20 68 6f 6c  3.nEq column hol
ff90: 64 73 20 74 68 65 20 61 70 70 72 6f 78 69 6d 61  ds the approxima
ffa0: 74 65 0a 6e 75 6d 62 65 72 20 6f 66 20 65 6e 74  te.number of ent
ffb0: 72 69 65 73 20 69 6e 20 74 68 65 20 69 6e 64 65  ries in the inde
ffc0: 78 20 77 68 6f 73 65 20 6c 65 66 74 2d 6d 6f 73  x whose left-mos
ffd0: 74 20 63 6f 6c 75 6d 6e 20 65 78 61 63 74 6c 79  t column exactly
ffe0: 20 6d 61 74 63 68 65 73 0a 74 68 65 20 73 61 6d   matches.the sam
fff0: 70 6c 65 2e 20 20 0a 54 68 65 20 73 71 6c 69 74  ple.  .The sqlit
10000 65 5f 73 74 61 74 33 2e 6e 4c 74 20 68 6f 6c 64  e_stat3.nLt hold
10010 73 20 74 68 65 20 61 70 70 72 6f 78 69 6d 61 74  s the approximat
10020 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72  e number of entr
10030 69 65 73 20 69 6e 20 74 68 65 0a 69 6e 64 65 78  ies in the.index
10040 20 77 68 6f 73 65 20 6c 65 66 74 2d 6d 6f 73 74   whose left-most
10050 20 63 6f 6c 75 6d 6e 20 69 73 20 6c 65 73 73 20   column is less 
10060 74 68 61 6e 20 74 68 65 20 73 61 6d 70 6c 65 2e  than the sample.
10070 0a 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74  .The sqlite_stat
10080 33 2e 6e 44 4c 74 20 63 6f 6c 75 6d 6e 20 68 6f  3.nDLt column ho
10090 6c 64 73 20 74 68 65 20 61 70 70 72 6f 78 69 6d  lds the approxim
100a0 61 74 65 0a 6e 75 6d 62 65 72 20 6f 66 20 64 69  ate.number of di
100b0 73 74 69 6e 63 74 20 6c 65 66 74 2d 6d 6f 73 74  stinct left-most
100c0 20 65 6e 74 72 69 65 73 20 69 6e 20 74 68 65 20   entries in the 
100d0 69 6e 64 65 78 20 74 68 61 74 20 61 72 65 20 6c  index that are l
100e0 65 73 73 20 74 68 61 6e 0a 74 68 65 20 73 61 6d  ess than.the sam
100f0 70 6c 65 2e 0a 0a 3c 70 3e 54 68 65 72 65 20 63  ple...<p>There c
10100 61 6e 20 62 65 20 61 6e 20 61 72 62 69 74 72 61  an be an arbitra
10110 72 79 20 6e 75 6d 62 65 72 20 6f 66 20 73 71 6c  ry number of sql
10120 69 74 65 5f 73 74 61 74 33 20 65 6e 74 72 69 65  ite_stat3 entrie
10130 73 20 70 65 72 20 69 6e 64 65 78 2e 0a 54 68 65  s per index..The
10140 20 5b 41 4e 41 4c 59 5a 45 5d 20 63 6f 6d 6d 61   [ANALYZE] comma
10150 6e 64 20 77 69 6c 6c 20 74 79 70 69 63 61 6c 6c  nd will typicall
10160 79 20 67 65 6e 65 72 61 74 65 20 73 71 6c 69 74  y generate sqlit
10170 65 5f 73 74 61 74 33 20 74 61 62 6c 65 73 0a 74  e_stat3 tables.t
10180 68 61 74 20 63 6f 6e 74 61 69 6e 20 62 65 74 77  hat contain betw
10190 65 65 6e 20 31 30 20 61 6e 64 20 34 30 20 73 61  een 10 and 40 sa
101a0 6d 70 6c 65 73 20 74 68 61 74 20 61 72 65 20 64  mples that are d
101b0 69 73 74 72 69 62 75 74 65 64 20 61 63 72 6f 73  istributed acros
101c0 73 0a 74 68 65 20 6b 65 79 20 73 70 61 63 65 20  s.the key space 
101d0 61 6e 64 20 77 69 74 68 20 6c 61 72 67 65 20 6e  and with large n
101e0 45 71 20 76 61 6c 75 65 73 2e 0a 0a 3c 74 63 6c  Eq values...<tcl
101f0 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 73 74 61  >hd_fragment sta
10200 74 34 74 61 62 20 7b 73 71 6c 69 74 65 5f 73 74  t4tab {sqlite_st
10210 61 74 34 7d 20 53 51 4c 49 54 45 5f 53 54 41 54  at4} SQLITE_STAT
10220 34 3c 2f 74 63 6c 3e 0a 3c 68 34 3e 32 2e 36 2e  4</tcl>.<h4>2.6.
10230 36 20 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61  6 The sqlite_sta
10240 74 34 20 74 61 62 6c 65 3c 2f 68 34 3e 0a 0a 3c  t4 table</h4>..<
10250 70 3e 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61  p>The sqlite_sta
10260 74 34 20 69 73 20 6f 6e 6c 79 20 63 72 65 61 74  t4 is only creat
10270 65 64 20 61 6e 64 20 69 73 20 6f 6e 6c 79 20 75  ed and is only u
10280 73 65 64 20 69 66 20 53 51 4c 69 74 65 20 69 73  sed if SQLite is
10290 20 63 6f 6d 70 69 6c 65 64 0a 77 69 74 68 20 5b   compiled.with [
102a0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
102b0 41 54 34 5d 20 61 6e 64 20 69 66 20 74 68 65 20  AT4] and if the 
102c0 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20 6e  SQLite version n
102d0 75 6d 62 65 72 20 69 73 0a 33 2e 38 2e 31 20 6f  umber is.3.8.1 o
102e0 72 20 67 72 65 61 74 65 72 2e 20 20 54 68 65 20  r greater.  The 
102f0 73 71 6c 69 74 65 5f 73 74 61 74 34 20 74 61 62  sqlite_stat4 tab
10300 6c 65 20 69 73 20 6e 65 69 74 68 65 72 20 72 65  le is neither re
10310 61 64 20 6e 6f 72 20 77 72 69 74 74 65 6e 20 62  ad nor written b
10320 79 20 61 6e 79 0a 76 65 72 73 69 6f 6e 20 6f 66  y any.version of
10330 20 53 51 4c 69 74 65 20 62 65 66 6f 72 65 20 33   SQLite before 3
10340 2e 38 2e 31 2e 0a 54 68 65 20 73 71 6c 69 74 65  .8.1..The sqlite
10350 5f 73 74 61 74 34 20 74 61 62 6c 65 20 63 6f 6e  _stat4 table con
10360 74 61 69 6e 73 20 61 64 64 69 74 69 6f 6e 61 6c  tains additional
10370 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 61 62 6f   information.abo
10380 75 74 20 74 68 65 20 64 69 73 74 72 69 62 75 74  ut the distribut
10390 69 6f 6e 20 6f 66 20 6b 65 79 73 20 77 69 74 68  ion of keys with
103a0 69 6e 20 61 6e 20 69 6e 64 65 78 2c 20 69 6e 66  in an index, inf
103b0 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 20 74 68  ormation that th
103c0 65 0a 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 20  e.query planner 
103d0 63 61 6e 20 75 73 65 20 74 6f 20 64 65 76 69 73  can use to devis
103e0 65 20 62 65 74 74 65 72 20 61 6e 64 20 66 61 73  e better and fas
103f0 74 65 72 20 71 75 65 72 79 20 61 6c 67 6f 72 69  ter query algori
10400 74 68 6d 73 2e 0a 54 68 65 20 73 63 68 65 6d 61  thms..The schema
10410 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 5f 73   of the sqlite_s
10420 74 61 74 34 20 74 61 62 6c 65 20 69 73 20 61 73  tat4 table is as
10430 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 62 6c 6f 63   follows:..<bloc
10440 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 43 52 45  kquote><pre>.CRE
10450 41 54 45 20 54 41 42 4c 45 20 73 71 6c 69 74 65  ATE TABLE sqlite
10460 5f 73 74 61 74 34 28 74 62 6c 2c 69 64 78 2c 6e  _stat4(tbl,idx,n
10470 45 71 2c 6e 4c 74 2c 6e 44 4c 74 2c 73 61 6d 70  Eq,nLt,nDLt,samp
10480 6c 65 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f  le);.</pre></blo
10490 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65  ckquote>..<p>The
104a0 72 65 20 61 72 65 20 75 73 75 61 6c 6c 79 20 6d  re are usually m
104b0 75 6c 74 69 70 6c 65 20 65 6e 74 72 69 65 73 20  ultiple entries 
104c0 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74  in the sqlite_st
104d0 61 74 34 20 74 61 62 6c 65 20 66 6f 72 20 65 61  at4 table for ea
104e0 63 68 20 69 6e 64 65 78 2e 0a 54 68 65 20 73 71  ch index..The sq
104f0 6c 69 74 65 5f 73 74 61 74 34 2e 73 61 6d 70 6c  lite_stat4.sampl
10500 65 20 63 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 74  e column holds t
10510 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61 6e  he content of an
10520 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69 6e 0a   index entry in.
10530 74 68 65 20 5b 72 65 63 6f 72 64 20 66 6f 72 6d  the [record form
10540 61 74 5d 2e 20 20 54 68 65 20 69 6e 64 65 78 20  at].  The index 
10550 65 6e 74 72 79 20 73 74 6f 72 65 64 20 69 73 20  entry stored is 
10560 74 61 6b 65 6e 20 66 72 6f 6d 20 74 68 65 0a 69  taken from the.i
10570 6e 64 65 78 20 69 64 65 6e 74 69 66 69 65 64 20  ndex identified 
10580 62 79 20 73 71 6c 69 74 65 5f 73 74 61 74 34 2e  by sqlite_stat4.
10590 69 64 78 20 61 6e 64 20 73 71 6c 69 74 65 5f 73  idx and sqlite_s
105a0 74 61 74 34 2e 74 62 6c 2e 0a 54 68 65 20 73 71  tat4.tbl..The sq
105b0 6c 69 74 65 5f 73 74 61 74 34 2e 6e 45 71 20 63  lite_stat4.nEq c
105c0 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 61 20 6c 69  olumn holds a li
105d0 73 74 20 6f 66 20 69 6e 74 65 67 65 72 73 20 77  st of integers w
105e0 68 65 72 65 20 74 68 65 20 4b 2d 74 68 20 69 6e  here the K-th in
105f0 74 65 67 65 72 0a 69 73 20 74 68 65 20 61 70 70  teger.is the app
10600 72 6f 78 69 6d 61 74 65 20 6e 75 6d 62 65 72 20  roximate number 
10610 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 74 68  of entries in th
10620 65 20 69 6e 64 65 78 20 77 68 6f 73 65 20 6c 65  e index whose le
10630 66 74 2d 6d 6f 73 74 20 4b 20 63 6f 6c 75 6d 6e  ft-most K column
10640 73 0a 65 78 61 63 74 6c 79 20 6d 61 74 63 68 20  s.exactly match 
10650 74 68 65 20 4b 20 6c 65 66 74 2d 6d 6f 73 74 20  the K left-most 
10660 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 73  columns of the s
10670 61 6d 70 6c 65 2e 0a 54 68 65 20 73 71 6c 69 74  ample..The sqlit
10680 65 5f 73 74 61 74 34 2e 6e 4c 74 20 68 6f 6c 64  e_stat4.nLt hold
10690 73 20 61 20 6c 69 73 74 20 6f 66 20 69 6e 74 65  s a list of inte
106a0 67 65 72 73 20 77 68 65 72 65 20 74 68 65 20 4b  gers where the K
106b0 2d 74 68 20 69 6e 74 65 67 65 72 20 69 73 0a 74  -th integer is.t
106c0 68 65 20 61 70 70 72 6f 78 69 6d 61 74 65 20 6e  he approximate n
106d0 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73  umber of entries
106e0 20 69 6e 20 74 68 65 0a 69 6e 64 65 78 20 77 68   in the.index wh
106f0 6f 73 65 20 4b 20 6c 65 66 74 2d 6d 6f 73 74 20  ose K left-most 
10700 63 6f 6c 75 6d 6e 73 20 61 72 65 20 63 6f 6c 6c  columns are coll
10710 65 63 74 69 76 65 6c 79 20 6c 65 73 73 20 74 68  ectively less th
10720 61 6e 20 74 68 65 20 0a 4b 20 6c 65 66 74 2d 6d  an the .K left-m
10730 6f 73 74 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74  ost columns of t
10740 68 65 20 73 61 6d 70 6c 65 2e 0a 54 68 65 20 73  he sample..The s
10750 71 6c 69 74 65 5f 73 74 61 74 34 2e 6e 44 4c 74  qlite_stat4.nDLt
10760 20 63 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 61 20   column holds a 
10770 6c 69 73 74 20 6f 66 20 69 6e 74 67 65 72 73 20  list of intgers 
10780 77 68 65 72 65 20 74 68 65 20 4b 2d 74 68 20 0a  where the K-th .
10790 69 6e 74 65 67 65 72 73 20 69 73 20 74 68 65 20  integers is the 
107a0 61 70 70 72 6f 78 69 6d 61 74 65 0a 6e 75 6d 62  approximate.numb
107b0 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e  er of entries in
107c0 20 74 68 65 20 69 6e 64 65 78 20 74 68 61 74 20   the index that 
107d0 61 72 65 20 64 69 73 74 69 6e 63 74 20 69 6e 20  are distinct in 
107e0 74 68 65 20 66 69 72 73 74 20 4b 20 63 6f 6c 75  the first K colu
107f0 6d 6e 73 20 61 6e 64 0a 74 68 61 74 20 61 72 65  mns and.that are
10800 20 77 68 6f 73 65 20 6c 65 66 74 2d 6d 6f 73 74   whose left-most
10810 20 4b 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 63   K columns are c
10820 6f 6c 6c 65 63 74 69 76 65 6c 79 20 6c 65 73 73  ollectively less
10830 20 74 68 61 6e 20 74 68 65 20 6c 65 66 74 2d 6d   than the left-m
10840 6f 73 74 0a 4b 20 63 6f 6c 75 6d 6e 73 20 6f 66  ost.K columns of
10850 20 74 68 65 20 73 61 6d 70 6c 65 2e 0a 0a 3c 70   the sample...<p
10860 3e 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74  >The sqlite_stat
10870 34 20 69 73 20 61 20 67 65 6e 65 72 61 6c 69 7a  4 is a generaliz
10880 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 71 6c  ation of the sql
10890 69 74 65 5f 73 74 61 74 33 20 74 61 62 6c 65 2e  ite_stat3 table.
108a0 20 20 54 68 65 0a 73 71 6c 69 74 65 5f 73 74 61    The.sqlite_sta
108b0 74 33 20 74 61 62 6c 65 20 70 72 6f 76 69 64 65  t3 table provide
108c0 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  s information ab
108d0 6f 75 74 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73  out the left-mos
108e0 74 20 63 6f 6c 75 6d 6e 20 6f 66 20 61 6e 0a 69  t column of an.i
108f0 6e 64 65 78 20 77 68 65 72 65 61 73 20 74 68 65  ndex whereas the
10900 20 73 71 6c 69 74 65 5f 73 74 61 74 34 20 74 61   sqlite_stat4 ta
10910 62 6c 65 20 70 72 6f 76 69 64 65 73 20 69 6e 66  ble provides inf
10920 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 61  ormation about a
10930 6c 6c 20 63 6f 6c 75 6d 6e 73 0a 6f 66 20 74 68  ll columns.of th
10940 65 20 69 6e 64 65 78 2e 0a 0a 3c 70 3e 54 68 65  e index...<p>The
10950 72 65 20 63 61 6e 20 62 65 20 61 6e 20 61 72 62  re can be an arb
10960 69 74 72 61 72 79 20 6e 75 6d 62 65 72 20 6f 66  itrary number of
10970 20 73 71 6c 69 74 65 5f 73 74 61 74 34 20 65 6e   sqlite_stat4 en
10980 74 72 69 65 73 20 70 65 72 20 69 6e 64 65 78 2e  tries per index.
10990 0a 54 68 65 20 5b 41 4e 41 4c 59 5a 45 5d 20 63  .The [ANALYZE] c
109a0 6f 6d 6d 61 6e 64 20 77 69 6c 6c 20 74 79 70 69  ommand will typi
109b0 63 61 6c 6c 79 20 67 65 6e 65 72 61 74 65 20 73  cally generate s
109c0 71 6c 69 74 65 5f 73 74 61 74 34 20 74 61 62 6c  qlite_stat4 tabl
109d0 65 73 0a 74 68 61 74 20 63 6f 6e 74 61 69 6e 20  es.that contain 
109e0 62 65 74 77 65 65 6e 20 31 30 20 61 6e 64 20 34  between 10 and 4
109f0 30 20 73 61 6d 70 6c 65 73 20 74 68 61 74 20 61  0 samples that a
10a00 72 65 20 64 69 73 74 72 69 62 75 74 65 64 20 61  re distributed a
10a10 63 72 6f 73 73 0a 74 68 65 20 6b 65 79 20 73 70  cross.the key sp
10a20 61 63 65 20 61 6e 64 20 77 69 74 68 20 6c 61 72  ace and with lar
10a30 67 65 20 6e 45 71 20 76 61 6c 75 65 73 2e 0a 0a  ge nEq values...
10a40 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
10a50 20 72 6f 6c 6c 62 61 63 6b 6a 6f 75 72 6e 61 6c   rollbackjournal
10a60 20 7b 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e   {rollback journ
10a70 61 6c 20 66 6f 72 6d 61 74 7d 3c 2f 74 63 6c 3e  al format}</tcl>
10a80 0a 3c 68 32 3e 33 2e 30 20 54 68 65 20 52 6f 6c  .<h2>3.0 The Rol
10a90 6c 62 61 63 6b 20 4a 6f 75 72 6e 61 6c 3c 2f 68  lback Journal</h
10aa0 32 3e 0a 0a 3c 70 3e 54 68 65 20 72 6f 6c 6c 62  2>..<p>The rollb
10ab0 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 69 73 20 61  ack journal is a
10ac0 20 66 69 6c 65 20 61 73 73 6f 63 69 61 74 65 64   file associated
10ad0 20 77 69 74 68 20 65 61 63 68 20 53 51 4c 69 74   with each SQLit
10ae0 65 20 64 61 74 61 62 61 73 65 0a 66 69 6c 65 20  e database.file 
10af0 74 68 61 74 20 68 6f 6c 64 20 69 6e 66 6f 72 6d  that hold inform
10b00 61 74 69 6f 6e 20 75 73 65 64 20 74 6f 20 72 65  ation used to re
10b10 73 74 6f 72 65 20 74 68 65 20 64 61 74 61 62 61  store the databa
10b20 73 65 20 66 69 6c 65 20 74 6f 20 69 74 73 20 69  se file to its i
10b30 6e 69 74 69 61 6c 0a 73 74 61 74 65 20 64 75 72  nitial.state dur
10b40 69 6e 67 20 74 68 65 20 63 6f 75 72 73 65 20 6f  ing the course o
10b50 66 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  f a transaction.
10b60 0a 5e 54 68 65 20 72 6f 6c 6c 62 61 63 6b 20 6a  .^The rollback j
10b70 6f 75 72 6e 61 6c 20 66 69 6c 65 20 69 73 20 61  ournal file is a
10b80 6c 77 61 79 73 20 6c 6f 63 61 74 65 64 20 69 6e  lways located in
10b90 20 74 68 65 20 73 61 6d 65 20 0a 64 69 72 65 63   the same .direc
10ba0 74 6f 72 79 20 61 73 20 74 68 65 20 64 61 74 61  tory as the data
10bb0 62 61 73 65 0a 66 69 6c 65 20 61 6e 64 20 68 61  base.file and ha
10bc0 73 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20  s the same name 
10bd0 61 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  as the database 
10be0 66 69 6c 65 20 62 75 74 20 77 69 74 68 20 74 68  file but with th
10bf0 65 20 73 74 72 69 6e 67 0a 22 3c 74 74 3e 2d 6a  e string."<tt>-j
10c00 6f 75 72 6e 61 6c 3c 2f 74 74 3e 22 20 61 70 70  ournal</tt>" app
10c10 65 6e 64 65 64 2e 20 20 54 68 65 72 65 20 63 61  ended.  There ca
10c20 6e 20 6f 6e 6c 79 20 62 65 20 61 20 73 69 6e 67  n only be a sing
10c30 6c 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72  le rollback jour
10c40 6e 61 6c 0a 61 73 73 6f 63 69 61 74 65 64 20 77  nal.associated w
10c50 69 74 68 20 61 20 67 69 76 65 20 64 61 74 61 62  ith a give datab
10c60 61 73 65 20 61 6e 64 20 68 65 6e 63 65 20 74 68  ase and hence th
10c70 65 72 65 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20  ere can only be 
10c80 6f 6e 65 20 77 72 69 74 65 0a 74 72 61 6e 73 61  one write.transa
10c90 63 74 69 6f 6e 20 6f 70 65 6e 20 61 67 61 69 6e  ction open again
10ca0 73 74 20 61 20 73 69 6e 67 6c 65 20 64 61 74 61  st a single data
10cb0 62 61 73 65 20 61 74 20 6f 6e 65 20 74 69 6d 65  base at one time
10cc0 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 66 20 61 20 74  .</p>..<p>If a t
10cd0 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 62  ransaction is ab
10ce0 6f 72 74 65 64 20 64 75 65 20 74 6f 20 61 6e 20  orted due to an 
10cf0 61 70 70 6c 69 63 61 74 69 6f 6e 20 63 72 61 73  application cras
10d00 68 2c 20 61 6e 20 6f 70 65 72 61 74 69 6e 67 0a  h, an operating.
10d10 73 79 73 74 65 6d 20 63 72 61 73 68 2c 20 6f 72  system crash, or
10d20 20 61 20 68 61 72 64 77 61 72 65 20 70 6f 77 65   a hardware powe
10d30 72 20 66 61 69 6c 75 72 65 20 6f 72 20 63 72 61  r failure or cra
10d40 73 68 2c 20 74 68 65 6e 20 74 68 65 20 64 61 74  sh, then the dat
10d50 61 62 61 73 65 20 6d 61 79 0a 62 65 20 6c 65 66  abase may.be lef
10d60 74 20 69 6e 20 61 6e 20 69 6e 63 6f 6e 73 69 73  t in an inconsis
10d70 74 65 6e 74 20 73 74 61 74 65 2e 20 20 5e 54 68  tent state.  ^Th
10d80 65 20 6e 65 78 74 20 74 69 6d 65 20 53 51 4c 69  e next time SQLi
10d90 74 65 20 61 74 74 65 6d 70 74 73 20 74 6f 20 6f  te attempts to o
10da0 70 65 6e 0a 74 68 65 20 64 61 74 61 62 61 73 65  pen.the database
10db0 20 66 69 6c 65 2c 20 74 68 65 20 70 72 65 73 65   file, the prese
10dc0 6e 63 65 20 6f 66 20 74 68 65 20 72 6f 6c 6c 62  nce of the rollb
10dd0 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65  ack journal file
10de0 20 77 69 6c 6c 20 62 65 20 0a 64 65 74 65 63 74   will be .detect
10df0 65 64 20 61 6e 64 20 74 68 65 20 6a 6f 75 72 6e  ed and the journ
10e00 61 6c 20 77 69 6c 6c 20 62 65 20 61 75 74 6f 6d  al will be autom
10e10 61 74 69 63 61 6c 6c 79 20 70 6c 61 79 65 64 20  atically played 
10e20 62 61 63 6b 20 74 6f 20 72 65 73 74 6f 72 65 20  back to restore 
10e30 74 68 65 0a 64 61 74 61 62 61 73 65 20 74 6f 20  the.database to 
10e40 69 74 73 20 73 74 61 74 65 20 61 74 20 74 68 65  its state at the
10e50 20 73 74 61 72 74 20 6f 66 20 74 68 65 20 69 6e   start of the in
10e60 63 6f 6d 70 6c 65 74 65 20 74 72 61 6e 73 61 63  complete transac
10e70 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41  tion.</p>..<p>^A
10e80 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61   rollback journa
10e90 6c 20 69 73 20 6f 6e 6c 79 20 63 6f 6e 73 69 64  l is only consid
10ea0 65 72 65 64 20 74 6f 20 62 65 20 76 61 6c 69 64  ered to be valid
10eb0 20 69 66 20 69 74 20 65 78 69 73 74 73 20 61 6e   if it exists an
10ec0 64 0a 63 6f 6e 74 61 69 6e 73 20 61 20 76 61 6c  d.contains a val
10ed0 69 64 20 68 65 61 64 65 72 2e 20 20 48 65 6e 63  id header.  Henc
10ee0 65 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  e a transaction 
10ef0 63 61 6e 20 62 65 20 63 6f 6d 6d 69 74 74 65 64  can be committed
10f00 20 69 6e 20 6f 6e 65 0a 6f 66 20 74 68 72 65 65   in one.of three
10f10 20 77 61 79 73 3a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e   ways:.<ol>.<li>
10f20 5e 28 54 68 65 20 72 6f 6c 6c 62 61 63 6b 20 6a  ^(The rollback j
10f30 6f 75 72 6e 61 6c 20 66 69 6c 65 20 63 61 6e 20  ournal file can 
10f40 62 65 20 64 65 6c 65 74 65 64 29 5e 2c 0a 3c 6c  be deleted)^,.<l
10f50 69 3e 5e 28 54 68 65 20 72 6f 6c 6c 62 61 63 6b  i>^(The rollback
10f60 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 20 63 61   journal file ca
10f70 6e 20 62 65 20 74 72 75 6e 63 61 74 65 64 20 74  n be truncated t
10f80 6f 20 7a 65 72 6f 20 6c 65 6e 67 74 68 29 5e 2c  o zero length)^,
10f90 20 6f 72 0a 3c 6c 69 3e 5e 28 54 68 65 20 68 65   or.<li>^(The he
10fa0 61 64 65 72 20 6f 66 20 74 68 65 20 72 6f 6c 6c  ader of the roll
10fb0 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 63 61 6e  back journal can
10fc0 20 62 65 20 6f 76 65 72 77 72 69 74 74 65 6e 20   be overwritten 
10fd0 77 69 74 68 0a 69 6e 76 61 6c 69 64 20 68 65 61  with.invalid hea
10fe0 64 65 72 20 74 65 78 74 20 28 66 6f 72 20 65 78  der text (for ex
10ff0 61 6d 70 6c 65 2c 20 61 6c 6c 20 7a 65 72 6f 73  ample, all zeros
11000 29 2e 29 5e 0a 3c 2f 6f 6c 3e 0a 5e 54 68 65 73  ).)^.</ol>.^Thes
11010 65 20 74 68 72 65 65 20 77 61 79 73 20 6f 66 20  e three ways of 
11020 63 6f 6d 6d 69 74 74 69 6e 67 20 61 20 74 72 61  committing a tra
11030 6e 73 61 63 74 69 6f 6e 20 63 6f 72 72 65 73 70  nsaction corresp
11040 6f 6e 64 20 74 6f 20 74 68 65 20 44 45 4c 45 54  ond to the DELET
11050 45 2c 0a 54 52 55 4e 43 41 54 45 2c 20 61 6e 64  E,.TRUNCATE, and
11060 20 50 45 52 53 49 53 54 20 73 65 74 74 69 6e 67   PERSIST setting
11070 73 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2c  s, respectively,
11080 20 6f 66 20 74 68 65 20 5b 6a 6f 75 72 6e 61 6c   of the [journal
11090 5f 6d 6f 64 65 20 70 72 61 67 6d 61 5d 2e 0a 3c  _mode pragma]..<
110a0 2f 70 3e 0a 0a 0a 3c 70 3e 41 20 76 61 6c 69 64  /p>...<p>A valid
110b0 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61   rollback journa
110c0 6c 20 62 65 67 69 6e 73 20 77 69 74 68 20 61 20  l begins with a 
110d0 68 65 61 64 65 72 20 69 6e 20 74 68 65 20 66 6f  header in the fo
110e0 6c 6c 6f 77 69 6e 67 20 66 6f 72 6d 61 74 3a 3c  llowing format:<
110f0 2f 70 3e 0a 0a 3c 63 65 6e 74 65 72 3e 0a 3c 69  /p>..<center>.<i
11100 3e 52 6f 6c 6c 62 61 63 6b 20 4a 6f 75 72 6e 61  >Rollback Journa
11110 6c 20 48 65 61 64 65 72 20 46 6f 72 6d 61 74 3c  l Header Format<
11120 2f 69 3e 3c 62 72 3e 0a 3c 74 61 62 6c 65 20 77  /i><br>.<table w
11130 69 64 74 68 3d 22 38 30 25 22 20 62 6f 72 64 65  idth="80%" borde
11140 72 3d 31 3e 0a 3c 74 72 3e 3c 74 68 3e 4f 66 66  r=1>.<tr><th>Off
11150 73 65 74 3c 74 68 3e 53 69 7a 65 3c 74 68 3e 44  set<th>Size<th>D
11160 65 73 63 72 69 70 74 69 6f 6e 0a 3c 74 72 3e 5e  escription.<tr>^
11170 28 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  (<td valign=top 
11180 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 30 0a 20  align=center>0. 
11190 20 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f     <td valign=to
111a0 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 38  p align=center>8
111b0 0a 20 20 20 20 3c 74 64 3e 48 65 61 64 65 72 20  .    <td>Header 
111c0 73 74 72 69 6e 67 3a 20 20 30 78 64 39 2c 20 30  string:  0xd9, 0
111d0 78 64 35 2c 20 30 78 30 35 2c 20 30 78 66 39 2c  xd5, 0x05, 0xf9,
111e0 20 30 78 32 30 2c 20 30 78 61 31 2c 20 30 78 36   0x20, 0xa1, 0x6
111f0 33 2c 20 30 78 64 37 29 5e 0a 3c 74 72 3e 5e 28  3, 0xd7)^.<tr>^(
11200 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
11210 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 38 0a 20 20  lign=center>8.  
11220 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70    <td valign=top
11230 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a   align=center>4.
11240 20 20 20 20 3c 74 64 3e 54 68 65 20 22 50 61 67      <td>The "Pag
11250 65 20 43 6f 75 6e 74 22 20 2d 20 54 68 65 20 6e  e Count" - The n
11260 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69  umber of pages i
11270 6e 20 74 68 65 20 6e 65 78 74 20 73 65 67 6d 65  n the next segme
11280 6e 74 20 6f 66 20 74 68 65 20 0a 20 20 20 20 20  nt of the .     
11290 20 20 20 6a 6f 75 72 6e 61 6c 2c 20 6f 72 20 2d     journal, or -
112a0 31 20 74 6f 0a 20 20 20 20 20 20 20 20 6d 65 61  1 to.        mea
112b0 6e 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 20 74 6f  n all content to
112c0 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   the end of the 
112d0 66 69 6c 65 29 5e 0a 3c 74 72 3e 5e 28 3c 74 64  file)^.<tr>^(<td
112e0 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
112f0 6e 3d 63 65 6e 74 65 72 3e 31 32 0a 20 20 20 20  n=center>12.    
11300 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
11310 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20  lign=center>4.  
11320 20 20 3c 74 64 3e 41 20 72 61 6e 64 6f 6d 20 6e    <td>A random n
11330 6f 6e 63 65 20 66 6f 72 20 74 68 65 20 63 68 65  once for the che
11340 63 6b 73 75 6d 29 5e 0a 3c 74 72 3e 5e 28 3c 74  cksum)^.<tr>^(<t
11350 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
11360 67 6e 3d 63 65 6e 74 65 72 3e 31 36 0a 20 20 20  gn=center>16.   
11370 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20   <td valign=top 
11380 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20  align=center>4. 
11390 20 20 20 3c 74 64 3e 49 6e 69 74 69 61 6c 20 73     <td>Initial s
113a0 69 7a 65 20 6f 66 20 74 68 65 20 64 61 74 61 62  ize of the datab
113b0 61 73 65 20 69 6e 20 70 61 67 65 73 29 5e 0a 3c  ase in pages)^.<
113c0 74 72 3e 5e 28 3c 74 64 20 76 61 6c 69 67 6e 3d  tr>^(<td valign=
113d0 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
113e0 3e 32 30 0a 20 20 20 20 3c 74 64 20 76 61 6c 69  >20.    <td vali
113f0 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
11400 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 53 69  ter>4.    <td>Si
11410 7a 65 20 6f 66 20 61 20 64 69 73 6b 20 73 65 63  ze of a disk sec
11420 74 6f 72 20 61 73 73 75 6d 65 64 20 62 79 20 74  tor assumed by t
11430 68 65 20 70 72 6f 63 65 73 73 20 74 68 61 74 20  he process that 
11440 77 72 6f 74 65 20 74 68 69 73 0a 20 20 20 20 20  wrote this.     
11450 20 20 20 6a 6f 75 72 6e 61 6c 2e 29 5e 0a 3c 74     journal.)^.<t
11460 72 3e 5e 28 3c 74 64 20 76 61 6c 69 67 6e 3d 74  r>^(<td valign=t
11470 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
11480 32 34 0a 20 20 20 20 3c 74 64 20 76 61 6c 69 67  24.    <td valig
11490 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
114a0 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 53 69 7a  er>4.    <td>Siz
114b0 65 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74 68  e of pages in th
114c0 69 73 20 6a 6f 75 72 6e 61 6c 2e 29 5e 0a 3c 2f  is journal.)^.</
114d0 74 61 62 6c 65 3e 0a 3c 2f 63 65 6e 74 65 72 3e  table>.</center>
114e0 0a 0a 3c 70 3e 5e 41 20 72 6f 6c 6c 62 61 63 6b  ..<p>^A rollback
114f0 20 6a 6f 75 72 6e 61 6c 20 68 65 61 64 65 72 20   journal header 
11500 69 73 20 70 61 64 64 65 64 20 77 69 74 68 20 7a  is padded with z
11510 65 72 6f 73 20 6f 75 74 20 74 6f 20 74 68 65 20  eros out to the 
11520 73 69 7a 65 20 6f 66 20 61 20 0a 73 69 6e 67 6c  size of a .singl
11530 65 20 73 65 63 74 6f 72 20 28 61 73 20 64 65 66  e sector (as def
11540 69 6e 65 64 20 62 79 20 74 68 65 20 73 65 63 74  ined by the sect
11550 6f 72 20 73 69 7a 65 20 69 6e 74 65 67 65 72 20  or size integer 
11560 61 74 20 6f 66 66 73 65 74 20 32 30 29 2e 0a 54  at offset 20)..T
11570 68 65 20 68 65 61 64 65 72 20 69 73 20 69 6e 20  he header is in 
11580 61 20 73 65 63 74 6f 72 20 62 79 20 69 74 73 65  a sector by itse
11590 6c 66 20 73 6f 20 74 68 61 74 20 69 66 20 61 20  lf so that if a 
115a0 70 6f 77 65 72 20 6c 6f 73 73 20 6f 63 63 75 72  power loss occur
115b0 73 20 77 68 69 6c 65 0a 77 72 69 74 69 6e 67 20  s while.writing 
115c0 74 68 65 20 73 65 63 74 6f 72 2c 20 69 6e 66 6f  the sector, info
115d0 72 6d 61 74 69 6f 6e 20 74 68 61 74 20 66 6f 6c  rmation that fol
115e0 6c 6f 77 73 20 74 68 65 20 68 65 61 64 65 72 20  lows the header 
115f0 77 69 6c 6c 20 62 65 0a 28 68 6f 70 65 66 75 6c  will be.(hopeful
11600 6c 79 29 20 75 6e 64 61 6d 61 67 65 64 2e 3c 2f  ly) undamaged.</
11610 70 3e 0a 0a 3c 70 3e 5e 41 66 74 65 72 20 74 68  p>..<p>^After th
11620 65 20 68 65 61 64 65 72 20 61 6e 64 20 7a 65 72  e header and zer
11630 6f 20 70 61 64 64 69 6e 67 20 61 72 65 20 7a 65  o padding are ze
11640 72 6f 20 6f 72 20 6d 6f 72 65 20 70 61 67 65 20  ro or more page 
11650 72 65 63 6f 72 64 73 2e 20 20 5e 45 61 63 68 0a  records.  ^Each.
11660 70 61 67 65 20 72 65 63 6f 72 64 20 73 74 6f 72  page record stor
11670 65 73 20 61 20 63 6f 70 79 20 6f 66 20 74 68 65  es a copy of the
11680 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61 20 70 61   content of a pa
11690 67 65 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61  ge from the data
116a0 62 61 73 65 20 66 69 6c 65 0a 62 65 66 6f 72 65  base file.before
116b0 20 69 74 20 77 61 73 20 63 68 61 6e 67 65 64 2e   it was changed.
116c0 20 20 5e 54 68 65 20 73 61 6d 65 20 70 61 67 65    ^The same page
116d0 20 6d 61 79 20 6e 6f 74 20 61 70 70 65 61 72 20   may not appear 
116e0 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 63 65 0a 77  more than once.w
116f0 69 74 68 69 6e 20 61 20 73 69 6e 67 6c 65 20 72  ithin a single r
11700 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 2e  ollback journal.
11710 0a 54 6f 20 72 6f 6c 6c 62 61 63 6b 20 61 6e 20  .To rollback an 
11720 69 6e 63 6f 6d 70 6c 65 74 65 20 74 72 61 6e 73  incomplete trans
11730 61 63 74 69 6f 6e 2c 20 61 20 70 72 6f 63 65 73  action, a proces
11740 73 0a 68 61 73 20 6d 65 72 65 6c 79 20 74 6f 20  s.has merely to 
11750 72 65 61 64 20 74 68 65 20 72 6f 6c 6c 62 61 63  read the rollbac
11760 6b 20 6a 6f 75 72 6e 61 6c 20 66 72 6f 6d 20 62  k journal from b
11770 65 67 69 6e 6e 69 6e 67 20 74 6f 20 65 6e 64 20  eginning to end 
11780 61 6e 64 0a 77 72 69 74 65 20 70 61 67 65 73 20  and.write pages 
11790 66 6f 75 6e 64 20 69 6e 20 74 68 65 20 6a 6f 75  found in the jou
117a0 72 6e 61 6c 20 62 61 63 6b 20 69 6e 74 6f 20 74  rnal back into t
117b0 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
117c0 20 61 74 20 74 68 65 0a 61 70 70 72 6f 70 72 69   at the.appropri
117d0 61 74 65 20 6c 6f 63 61 74 69 6f 6e 2e 3c 2f 70  ate location.</p
117e0 3e 0a 0a 3c 70 3e 4c 65 74 20 74 68 65 20 64 61  >..<p>Let the da
117f0 74 61 62 61 73 65 20 70 61 67 65 20 73 69 7a 65  tabase page size
11800 20 28 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74   (the value of t
11810 68 65 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66  he integer at of
11820 66 73 65 74 20 32 34 20 0a 69 6e 20 74 68 65 20  fset 24 .in the 
11830 6a 6f 75 72 6e 61 6c 20 68 65 61 64 65 72 29 20  journal header) 
11840 62 65 20 4e 2e 0a 54 68 65 6e 20 74 68 65 20 66  be N..Then the f
11850 6f 72 6d 61 74 20 6f 66 20 61 20 70 61 67 65 20  ormat of a page 
11860 72 65 63 6f 72 64 20 69 73 20 61 73 20 66 6f 6c  record is as fol
11870 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 63 65 6e 74  lows:</p>..<cent
11880 65 72 3e 0a 3c 69 3e 52 6f 6c 6c 62 61 63 6b 20  er>.<i>Rollback 
11890 4a 6f 75 72 6e 61 6c 20 50 61 67 65 20 52 65 63  Journal Page Rec
118a0 6f 72 64 20 46 6f 72 6d 61 74 3c 2f 69 3e 3c 62  ord Format</i><b
118b0 72 3e 0a 3c 74 61 62 6c 65 20 77 69 64 74 68 3d  r>.<table width=
118c0 22 38 30 25 22 20 62 6f 72 64 65 72 3d 31 3e 0a  "80%" border=1>.
118d0 3c 74 72 3e 3c 74 68 3e 4f 66 66 73 65 74 3c 74  <tr><th>Offset<t
118e0 68 3e 53 69 7a 65 3c 74 68 3e 44 65 73 63 72 69  h>Size<th>Descri
118f0 70 74 69 6f 6e 0a 3c 74 72 3e 5e 28 3c 74 64 20  ption.<tr>^(<td 
11900 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
11910 3d 63 65 6e 74 65 72 3e 30 0a 20 20 20 20 3c 74  =center>0.    <t
11920 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
11930 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20  gn=center>4.    
11940 3c 74 64 3e 54 68 65 20 70 61 67 65 20 6e 75 6d  <td>The page num
11950 62 65 72 20 69 6e 20 74 68 65 20 64 61 74 61 62  ber in the datab
11960 61 73 65 20 66 69 6c 65 29 5e 0a 3c 74 72 3e 5e  ase file)^.<tr>^
11970 28 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  (<td valign=top 
11980 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20  align=center>4. 
11990 20 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f     <td valign=to
119a0 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 4e  p align=center>N
119b0 0a 20 20 20 20 3c 74 64 3e 4f 72 69 67 69 6e 61  .    <td>Origina
119c0 6c 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65  l content of the
119d0 20 70 61 67 65 20 70 72 69 6f 72 20 74 6f 20 74   page prior to t
119e0 68 65 20 73 74 61 72 74 20 6f 66 20 74 68 65 20  he start of the 
119f0 74 72 61 6e 73 61 63 74 69 6f 6e 29 5e 0a 3c 74  transaction)^.<t
11a00 72 3e 5e 28 3c 74 64 20 76 61 6c 69 67 6e 3d 74  r>^(<td valign=t
11a10 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
11a20 4e 2b 34 0a 20 20 20 20 3c 74 64 20 76 61 6c 69  N+4.    <td vali
11a30 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
11a40 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 43 68  ter>4.    <td>Ch
11a50 65 63 6b 73 75 6d 29 5e 0a 3c 2f 74 61 62 6c 65  ecksum)^.</table
11a60 3e 0a 3c 2f 63 65 6e 74 65 72 3e 0a 0a 0a 3c 70  >.</center>...<p
11a70 3e 5e 28 54 68 65 20 63 68 65 63 6b 73 75 6d 20  >^(The checksum 
11a80 69 73 20 61 6e 20 75 6e 73 69 67 6e 65 64 20 33  is an unsigned 3
11a90 32 2d 62 69 74 20 69 6e 74 65 67 65 72 20 63 6f  2-bit integer co
11aa0 6d 70 75 74 65 64 20 61 73 20 66 6f 6c 6c 6f 77  mputed as follow
11ab0 73 3a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69  s:</p>..<ol>.<li
11ac0 3e 49 6e 69 74 69 61 6c 69 7a 65 20 74 68 65 20  >Initialize the 
11ad0 63 68 65 63 6b 73 75 6d 20 74 6f 20 74 68 65 20  checksum to the 
11ae0 63 68 65 63 6b 73 75 6d 20 6e 6f 6e 63 65 20 76  checksum nonce v
11af0 61 6c 75 65 20 66 6f 75 6e 64 20 69 6e 20 74 68  alue found in th
11b00 65 0a 6a 6f 75 72 6e 61 6c 20 68 65 61 64 65 72  e.journal header
11b10 20 61 74 20 6f 66 66 73 65 74 20 31 32 2e 0a 3c   at offset 12..<
11b20 6c 69 3e 49 6e 69 74 69 61 6c 69 7a 65 20 69 6e  li>Initialize in
11b30 64 65 78 20 58 20 74 6f 20 62 65 20 4e 2d 32 30  dex X to be N-20
11b40 30 20 28 77 68 65 72 65 20 4e 20 69 73 20 74 68  0 (where N is th
11b50 65 20 73 69 7a 65 20 6f 66 20 61 20 64 61 74 61  e size of a data
11b60 62 61 73 65 20 70 61 67 65 0a 69 6e 20 62 79 74  base page.in byt
11b70 65 73 2e 0a 3c 6c 69 3e 49 6e 74 65 72 70 72 65  es..<li>Interpre
11b80 74 20 74 68 65 20 66 6f 75 72 20 62 79 74 65 73  t the four bytes
11b90 20 61 74 20 6f 66 66 73 65 74 20 58 20 69 6e 74   at offset X int
11ba0 6f 20 74 68 65 20 70 61 67 65 20 61 73 20 61 20  o the page as a 
11bb0 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61  4-byte big-endia
11bc0 6e 0a 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67  n.unsigned integ
11bd0 65 72 2e 20 20 41 64 64 20 74 68 65 20 76 61 6c  er.  Add the val
11be0 75 65 20 6f 66 20 74 68 61 74 20 69 6e 74 65 67  ue of that integ
11bf0 65 72 20 74 6f 20 74 68 65 20 63 68 65 63 6b 73  er to the checks
11c00 75 6d 2e 0a 3c 6c 69 3e 53 75 62 74 72 61 63 65  um..<li>Subtrace
11c10 20 32 30 30 20 66 72 6f 6d 20 58 2e 0a 3c 6c 69   200 from X..<li
11c20 3e 49 66 20 58 20 69 73 20 67 72 65 61 74 65 72  >If X is greater
11c30 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74   than or equal t
11c40 6f 20 7a 65 72 6f 2c 20 67 6f 20 62 61 63 6b 20  o zero, go back 
11c50 74 6f 20 73 74 65 70 20 33 2e 0a 3c 2f 6f 6c 3e  to step 3..</ol>
11c60 29 5e 0a 0a 3c 70 3e 54 68 65 20 63 68 65 63 6b  )^..<p>The check
11c70 73 75 6d 20 76 61 6c 75 65 20 69 73 20 75 73 65  sum value is use
11c80 64 20 74 6f 20 67 75 61 72 64 20 61 67 61 69 6e  d to guard again
11c90 73 74 20 69 6e 63 6f 6d 70 6c 65 74 65 20 77 72  st incomplete wr
11ca0 69 74 65 73 20 6f 66 0a 61 20 6a 6f 75 72 6e 61  ites of.a journa
11cb0 6c 20 70 61 67 65 20 72 65 63 6f 72 64 20 66 6f  l page record fo
11cc0 6c 6c 6f 77 69 6e 67 20 61 20 70 6f 77 65 72 20  llowing a power 
11cd0 66 61 69 6c 75 72 65 2e 20 20 41 20 64 69 66 66  failure.  A diff
11ce0 65 72 65 6e 74 20 72 61 6e 64 6f 6d 20 6e 6f 6e  erent random non
11cf0 63 65 0a 69 73 20 75 73 65 64 20 65 61 63 68 20  ce.is used each 
11d00 74 69 6d 65 20 61 20 74 72 61 6e 73 61 63 74 69  time a transacti
11d10 6f 6e 20 69 73 20 73 74 61 72 74 65 64 20 69 6e  on is started in
11d20 20 6f 72 64 65 72 20 74 6f 20 6d 69 6e 69 6d 69   order to minimi
11d30 7a 65 20 74 68 65 20 72 69 73 6b 0a 74 68 61 74  ze the risk.that
11d40 20 75 6e 77 72 69 74 74 65 6e 20 73 65 63 74 6f   unwritten secto
11d50 72 73 20 6d 69 67 68 74 20 62 79 20 63 68 61 6e  rs might by chan
11d60 63 65 20 63 6f 6e 74 61 69 6e 20 64 61 74 61 20  ce contain data 
11d70 66 72 6f 6d 20 74 68 65 20 73 61 6d 65 20 70 61  from the same pa
11d80 67 65 0a 74 68 61 74 20 77 61 73 20 61 20 70 61  ge.that was a pa
11d90 72 74 20 6f 66 20 70 72 69 6f 72 20 6a 6f 75 72  rt of prior jour
11da0 6e 61 6c 73 2e 20 20 42 79 20 63 68 61 6e 67 69  nals.  By changi
11db0 6e 67 20 74 68 65 20 6e 6f 6e 63 65 20 66 6f 72  ng the nonce for
11dc0 20 65 61 63 68 0a 74 72 61 6e 73 61 63 74 69 6f   each.transactio
11dd0 6e 2c 20 73 74 61 6c 65 20 64 61 74 61 20 6f 6e  n, stale data on
11de0 20 64 69 73 6b 20 77 69 6c 6c 20 73 74 69 6c 6c   disk will still
11df0 20 67 65 6e 65 72 61 74 65 20 61 6e 20 69 6e 63   generate an inc
11e00 6f 72 72 65 63 74 20 63 68 65 63 6b 73 75 6d 0a  orrect checksum.
11e10 61 6e 64 20 62 65 20 64 65 74 65 63 74 65 64 20  and be detected 
11e20 77 69 74 68 20 68 69 67 68 20 70 72 6f 62 61 62  with high probab
11e30 69 6c 69 74 79 2e 20 20 54 68 65 20 63 68 65 63  ility.  The chec
11e40 6b 73 75 6d 20 6f 6e 6c 79 20 75 73 65 73 20 61  ksum only uses a
11e50 20 73 70 61 72 73 65 20 73 61 6d 70 6c 65 0a 6f   sparse sample.o
11e60 66 20 33 32 2d 62 69 74 20 77 6f 72 64 73 20 66  f 32-bit words f
11e70 72 6f 6d 20 74 68 65 20 64 61 74 61 20 72 65 63  rom the data rec
11e80 6f 72 64 20 66 6f 72 20 70 65 72 66 6f 72 6d 61  ord for performa
11e90 6e 63 65 20 72 65 61 73 6f 6e 73 20 2d 20 64 65  nce reasons - de
11ea0 73 69 67 6e 20 73 74 75 64 69 65 73 20 0a 64 75  sign studies .du
11eb0 72 69 6e 67 20 74 68 65 20 70 6c 61 6e 6e 69 6e  ring the plannin
11ec0 67 20 70 68 61 73 65 73 20 6f 66 20 53 51 4c 69  g phases of SQLi
11ed0 74 65 20 33 2e 30 2e 30 20 73 68 6f 77 65 64 0a  te 3.0.0 showed.
11ee0 61 20 73 69 67 6e 69 66 69 63 61 6e 74 20 70 65  a significant pe
11ef0 72 66 6f 72 6d 61 6e 63 65 20 68 69 74 20 69 6e  rformance hit in
11f00 20 63 68 65 63 6b 73 75 6d 6d 69 6e 67 20 74 68   checksumming th
11f10 65 20 65 6e 74 69 72 65 20 70 61 67 65 2e 3c 2f  e entire page.</
11f20 70 3e 0a 0a 3c 70 3e 4c 65 74 20 74 68 65 20 70  p>..<p>Let the p
11f30 61 67 65 20 63 6f 75 6e 74 20 76 61 6c 75 65 20  age count value 
11f40 61 74 20 6f 66 66 73 65 74 20 38 20 69 6e 20 74  at offset 8 in t
11f50 68 65 20 6a 6f 75 72 6e 61 6c 20 68 65 61 64 65  he journal heade
11f60 72 20 62 65 20 4d 2e 0a 5e 49 66 20 4d 20 69 73  r be M..^If M is
11f70 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 7a 65   greater than ze
11f80 72 6f 20 74 68 65 6e 20 61 66 74 65 72 20 4d 20  ro then after M 
11f90 70 61 67 65 20 72 65 63 6f 72 64 73 20 74 68 65  page records the
11fa0 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 0a 6d 61   journal file.ma
11fb0 79 20 62 65 20 7a 65 72 6f 20 70 61 64 64 65 64  y be zero padded
11fc0 20 6f 75 74 20 74 6f 20 74 68 65 20 6e 65 78 74   out to the next
11fd0 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20 74 68 65   multiple of the
11fe0 20 73 65 63 74 6f 72 20 73 69 7a 65 20 61 6e 64   sector size and
11ff0 20 61 6e 6f 74 68 65 72 0a 6a 6f 75 72 6e 61 6c   another.journal
12000 20 68 65 61 64 65 72 20 6d 61 79 20 62 65 20 69   header may be i
12010 6e 73 65 72 74 65 64 2e 20 20 5e 41 6c 6c 20 6a  nserted.  ^All j
12020 6f 75 72 6e 61 6c 20 68 65 61 64 65 72 73 20 77  ournal headers w
12030 69 74 68 69 6e 20 74 68 65 20 73 61 6d 65 0a 6a  ithin the same.j
12040 6f 75 72 6e 61 6c 20 6d 75 73 74 20 63 6f 6e 74  ournal must cont
12050 61 69 6e 20 74 68 65 20 73 61 6d 65 20 64 61 74  ain the same dat
12060 61 62 61 73 65 20 70 61 67 65 20 73 69 7a 65 20  abase page size 
12070 61 6e 64 20 73 65 63 74 6f 72 20 73 69 7a 65 2e  and sector size.
12080 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20 4d 20 69  </p>..<p>^If M i
12090 73 20 2d 31 20 69 6e 20 74 68 65 20 69 6e 69 74  s -1 in the init
120a0 69 61 6c 20 6a 6f 75 72 6e 61 6c 20 68 65 61 64  ial journal head
120b0 65 72 2c 20 74 68 65 6e 20 74 68 65 20 6e 75 6d  er, then the num
120c0 62 65 72 20 6f 66 20 70 61 67 65 20 72 65 63 6f  ber of page reco
120d0 72 64 73 0a 74 68 61 74 20 66 6f 6c 6c 6f 77 20  rds.that follow 
120e0 69 73 20 63 6f 6d 70 75 74 65 64 20 62 79 20 63  is computed by c
120f0 6f 6d 70 75 74 69 6e 67 20 68 6f 77 20 6d 61 6e  omputing how man
12100 79 20 70 61 67 65 20 72 65 63 6f 72 64 73 20 77  y page records w
12110 69 6c 6c 20 66 69 74 20 69 6e 0a 74 68 65 20 61  ill fit in.the a
12120 76 61 69 6c 61 62 6c 65 20 73 70 61 63 65 20 6f  vailable space o
12130 66 20 74 68 65 20 72 65 6d 61 69 6e 64 65 72 20  f the remainder 
12140 6f 66 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20 66  of the journal f
12150 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68  ile.</p>..<tcl>h
12160 64 5f 66 72 61 67 6d 65 6e 74 20 77 61 6c 66 6f  d_fragment walfo
12170 72 6d 61 74 20 7b 57 41 4c 20 66 6f 72 6d 61 74  rmat {WAL format
12180 7d 3c 2f 74 63 6c 3e 0a 3c 68 32 3e 34 2e 30 20  }</tcl>.<h2>4.0 
12190 54 68 65 20 57 72 69 74 65 2d 41 68 65 61 64 20  The Write-Ahead 
121a0 4c 6f 67 3c 2f 68 32 3e 0a 0a 3c 70 3e 42 65 67  Log</h2>..<p>Beg
121b0 69 6e 6e 69 6e 67 20 77 69 74 68 20 5b 76 65 72  inning with [ver
121c0 73 69 6f 6e 20 33 2e 37 2e 30 5d 2c 20 53 51 4c  sion 3.7.0], SQL
121d0 69 74 65 20 73 75 70 70 6f 72 74 73 20 61 20 6e  ite supports a n
121e0 65 77 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 63  ew transaction.c
121f0 6f 6e 74 72 6f 6c 20 6d 65 63 68 61 6e 69 73 6d  ontrol mechanism
12200 20 63 61 6c 6c 65 64 20 22 5b 57 41 4c 20 7c 20   called "[WAL | 
12210 77 72 69 74 65 2d 61 68 65 61 64 20 6c 6f 67 5d  write-ahead log]
12220 22 20 6f 72 20 22 5b 57 41 4c 5d 22 2e 0a 5e 57  " or "[WAL]"..^W
12230 68 65 6e 20 61 20 64 61 74 61 62 61 73 65 20 69  hen a database i
12240 73 20 69 6e 20 57 41 4c 20 6d 6f 64 65 2c 20 61  s in WAL mode, a
12250 6c 6c 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 74  ll connections t
12260 6f 20 74 68 61 74 20 64 61 74 61 62 61 73 65 20  o that database 
12270 6d 75 73 74 0a 75 73 65 20 74 68 65 20 57 41 4c  must.use the WAL
12280 2e 20 20 5e 41 20 70 61 72 74 69 63 75 6c 61 72  .  ^A particular
12290 20 64 61 74 61 62 61 73 65 20 77 69 6c 6c 20 75   database will u
122a0 73 65 20 65 69 74 68 65 72 20 61 20 72 6f 6c 6c  se either a roll
122b0 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 0a 6f 72 20  back journal.or 
122c0 61 20 57 41 4c 2c 20 62 75 74 20 6e 6f 74 20 62  a WAL, but not b
122d0 6f 74 68 20 61 74 20 74 68 65 20 73 61 6d 65 20  oth at the same 
122e0 74 69 6d 65 2e 0a 5e 54 68 65 20 57 41 4c 20 69  time..^The WAL i
122f0 73 20 61 6c 77 61 79 73 20 6c 6f 63 61 74 65 64  s always located
12300 20 69 6e 20 74 68 65 20 73 61 6d 65 20 64 69 72   in the same dir
12310 65 63 74 6f 72 79 20 61 73 20 74 68 65 20 64 61  ectory as the da
12320 74 61 62 61 73 65 0a 66 69 6c 65 20 61 6e 64 20  tabase.file and 
12330 68 61 73 20 74 68 65 20 73 61 6d 65 20 6e 61 6d  has the same nam
12340 65 20 61 73 20 74 68 65 20 64 61 74 61 62 61 73  e as the databas
12350 65 20 66 69 6c 65 20 62 75 74 20 77 69 74 68 20  e file but with 
12360 74 68 65 20 73 74 72 69 6e 67 0a 22 3c 74 74 3e  the string."<tt>
12370 2d 77 61 6c 3c 2f 74 74 3e 22 20 61 70 70 65 6e  -wal</tt>" appen
12380 64 65 64 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 34 2e  ded.</p>..<h3>4.
12390 31 20 57 41 4c 20 46 69 6c 65 20 46 6f 72 6d 61  1 WAL File Forma
123a0 74 3c 2f 68 34 3e 0a 0a 3c 70 3e 41 20 57 41 4c  t</h4>..<p>A WAL
123b0 20 66 69 6c 65 20 63 6f 6e 73 69 73 74 73 20 6f   file consists o
123c0 66 20 61 20 68 65 61 64 65 72 20 66 6f 6c 6c 6f  f a header follo
123d0 77 65 64 20 62 79 20 7a 65 72 6f 20 6f 72 20 6d  wed by zero or m
123e0 6f 72 65 20 22 66 72 61 6d 65 73 22 2e 0a 45 61  ore "frames"..Ea
123f0 63 68 20 66 72 61 6d 65 20 72 65 63 6f 72 64 73  ch frame records
12400 20 74 68 65 20 72 65 76 69 73 65 64 20 63 6f 6e   the revised con
12410 74 65 6e 74 20 6f 66 20 61 20 73 69 6e 67 6c 65  tent of a single
12420 20 70 61 67 65 20 66 72 6f 6d 20 74 68 65 0a 64   page from the.d
12430 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 20 41  atabase file.  A
12440 6c 6c 20 63 68 61 6e 67 65 73 20 74 6f 20 74 68  ll changes to th
12450 65 20 64 61 74 61 62 61 73 65 20 61 72 65 20 72  e database are r
12460 65 63 6f 72 64 65 64 20 62 79 20 77 72 69 74 69  ecorded by writi
12470 6e 67 0a 66 72 61 6d 65 73 20 69 6e 74 6f 20 74  ng.frames into t
12480 68 65 20 57 41 4c 2e 20 20 54 72 61 6e 73 61 63  he WAL.  Transac
12490 74 69 6f 6e 73 20 63 6f 6d 6d 69 74 20 77 68 65  tions commit whe
124a0 6e 20 61 20 66 72 61 6d 65 20 69 73 20 77 72 69  n a frame is wri
124b0 74 74 65 6e 20 74 68 61 74 0a 63 6f 6e 74 61 69  tten that.contai
124c0 6e 73 20 61 20 63 6f 6d 6d 69 74 20 6d 61 72 6b  ns a commit mark
124d0 65 72 2e 20 20 5e 41 20 73 69 6e 67 6c 65 20 57  er.  ^A single W
124e0 41 4c 20 63 61 6e 20 61 6e 64 20 75 73 75 61 6c  AL can and usual
124f0 6c 79 20 64 6f 65 73 20 72 65 63 6f 72 64 20 0a  ly does record .
12500 6d 75 6c 74 69 70 6c 65 20 74 72 61 6e 73 61 63  multiple transac
12510 74 69 6f 6e 73 2e 20 20 50 65 72 69 6f 64 69 63  tions.  Periodic
12520 61 6c 6c 79 2c 20 74 68 65 20 63 6f 6e 74 65 6e  ally, the conten
12530 74 20 6f 66 20 74 68 65 20 57 41 4c 20 69 73 0a  t of the WAL is.
12540 74 72 61 6e 73 66 65 72 72 65 64 20 62 61 63 6b  transferred back
12550 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61 62 61   into the databa
12560 73 65 20 66 69 6c 65 20 69 6e 20 61 6e 20 6f 70  se file in an op
12570 65 72 61 74 69 6f 6e 20 63 61 6c 6c 65 64 20 61  eration called a
12580 0a 22 63 68 65 63 6b 70 6f 69 6e 74 22 2e 3c 2f  ."checkpoint".</
12590 70 3e 0a 0a 3c 70 3e 5e 41 20 73 69 6e 67 6c 65  p>..<p>^A single
125a0 20 57 41 4c 20 66 69 6c 65 20 63 61 6e 20 62 65   WAL file can be
125b0 20 72 65 75 73 65 64 20 6d 75 6c 74 69 70 6c 65   reused multiple
125c0 20 74 69 6d 65 73 2e 20 20 5e 49 6e 20 6f 74 68   times.  ^In oth
125d0 65 72 20 77 6f 72 64 73 2c 20 74 68 65 0a 57 41  er words, the.WA
125e0 4c 20 63 61 6e 20 66 69 6c 6c 20 75 70 20 77 69  L can fill up wi
125f0 74 68 20 66 72 61 6d 65 73 20 61 6e 64 20 74 68  th frames and th
12600 65 6e 20 62 65 20 63 68 65 63 6b 70 6f 69 6e 74  en be checkpoint
12610 65 64 20 61 6e 64 20 74 68 65 6e 20 6e 65 77 0a  ed and then new.
12620 66 72 61 6d 65 73 20 63 61 6e 20 6f 76 65 72 77  frames can overw
12630 72 69 74 65 20 74 68 65 20 6f 6c 64 20 6f 6e 65  rite the old one
12640 73 2e 20 20 5e 41 20 57 41 4c 20 61 6c 77 61 79  s.  ^A WAL alway
12650 73 20 67 72 6f 77 73 20 66 72 6f 6d 20 62 65 67  s grows from beg
12660 69 6e 6e 69 6e 67 0a 74 6f 77 61 72 64 20 74 68  inning.toward th
12670 65 20 65 6e 64 2e 20 20 43 68 65 63 6b 73 75 6d  e end.  Checksum
12680 73 20 61 6e 64 20 63 6f 75 6e 74 65 72 73 20 61  s and counters a
12690 74 74 61 63 68 65 64 20 74 6f 20 65 61 63 68 20  ttached to each 
126a0 66 72 61 6d 65 20 61 72 65 0a 75 73 65 64 20 74  frame are.used t
126b0 6f 20 64 65 74 65 72 6d 69 6e 65 20 77 68 69 63  o determine whic
126c0 68 20 66 72 61 6d 65 73 20 77 69 74 68 69 6e 20  h frames within 
126d0 74 68 65 20 57 41 4c 20 61 72 65 20 76 61 6c 69  the WAL are vali
126e0 64 20 61 6e 64 20 77 68 69 63 68 0a 61 72 65 20  d and which.are 
126f0 6c 65 66 74 6f 76 65 72 73 20 66 72 6f 6d 20 70  leftovers from p
12700 72 69 6f 72 20 63 68 65 63 6b 70 6f 69 6e 74 73  rior checkpoints
12710 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28 54 68 65 20  .</p>..<p>^(The 
12720 57 41 4c 20 68 65 61 64 65 72 20 69 73 20 33 32  WAL header is 32
12730 20 62 79 74 65 73 20 69 6e 20 73 69 7a 65 20 61   bytes in size a
12740 6e 64 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 74  nd consists of t
12750 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 65 69 67  he following eig
12760 68 74 0a 62 69 67 2d 65 6e 64 69 61 6e 20 33 32  ht.big-endian 32
12770 2d 62 69 74 20 75 6e 73 69 67 6e 65 64 20 69 6e  -bit unsigned in
12780 74 65 67 65 72 20 76 61 6c 75 65 73 3a 3c 2f 70  teger values:</p
12790 3e 0a 0a 3c 63 65 6e 74 65 72 3e 0a 3c 69 3e 57  >..<center>.<i>W
127a0 41 4c 20 48 65 61 64 65 72 20 46 6f 72 6d 61 74  AL Header Format
127b0 3c 2f 69 3e 3c 62 72 3e 0a 3c 74 61 62 6c 65 20  </i><br>.<table 
127c0 77 69 64 74 68 3d 22 38 30 25 22 20 62 6f 72 64  width="80%" bord
127d0 65 72 3d 31 3e 0a 3c 74 72 3e 3c 74 68 3e 4f 66  er=1>.<tr><th>Of
127e0 66 73 65 74 3c 74 68 3e 53 69 7a 65 3c 74 68 3e  fset<th>Size<th>
127f0 44 65 73 63 72 69 70 74 69 6f 6e 0a 3c 74 72 3e  Description.<tr>
12800 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
12810 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 30 3c 74 64  lign=center>0<td
12820 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
12830 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c  n=center>4.    <
12840 74 64 3e 4d 61 67 69 63 20 6e 75 6d 62 65 72 2e  td>Magic number.
12850 20 20 30 78 33 37 37 66 30 36 38 32 20 6f 72 20    0x377f0682 or 
12860 30 78 33 37 37 66 30 36 38 33 0a 3c 74 72 3e 3c  0x377f0683.<tr><
12870 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
12880 69 67 6e 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20  ign=center>4<td 
12890 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
128a0 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74  =center>4.    <t
128b0 64 3e 46 69 6c 65 20 66 6f 72 6d 61 74 20 76 65  d>File format ve
128c0 72 73 69 6f 6e 2e 20 20 43 75 72 72 65 6e 74 6c  rsion.  Currentl
128d0 79 20 33 30 30 37 30 30 30 2e 0a 3c 74 72 3e 3c  y 3007000..<tr><
128e0 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
128f0 69 67 6e 3d 63 65 6e 74 65 72 3e 38 3c 74 64 20  ign=center>8<td 
12900 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
12910 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74  =center>4.    <t
12920 64 3e 44 61 74 61 62 61 73 65 20 70 61 67 65 20  d>Database page 
12930 73 69 7a 65 2e 20 20 45 78 61 6d 70 6c 65 3a 20  size.  Example: 
12940 31 30 32 34 0a 3c 74 72 3e 3c 74 64 20 76 61 6c  1024.<tr><td val
12950 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
12960 6e 74 65 72 3e 31 32 3c 74 64 20 76 61 6c 69 67  nter>12<td valig
12970 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
12980 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 43 68 65  er>4.    <td>Che
12990 63 6b 70 6f 69 6e 74 20 73 65 71 75 65 6e 63 65  ckpoint sequence
129a0 20 6e 75 6d 62 65 72 0a 3c 74 72 3e 3c 74 64 20   number.<tr><td 
129b0 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
129c0 3d 63 65 6e 74 65 72 3e 31 36 3c 74 64 20 76 61  =center>16<td va
129d0 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
129e0 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e  enter>4.    <td>
129f0 53 61 6c 74 2d 31 3a 20 72 61 6e 64 6f 6d 20 69  Salt-1: random i
12a00 6e 74 65 67 65 72 20 69 6e 63 72 65 6d 65 6e 74  nteger increment
12a10 65 64 20 77 69 74 68 20 65 61 63 68 20 63 68 65  ed with each che
12a20 63 6b 70 6f 69 6e 74 0a 3c 74 72 3e 3c 74 64 20  ckpoint.<tr><td 
12a30 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
12a40 3d 63 65 6e 74 65 72 3e 32 30 3c 74 64 20 76 61  =center>20<td va
12a50 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
12a60 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e  enter>4.    <td>
12a70 53 61 6c 74 2d 32 3a 20 61 20 64 69 66 66 65 72  Salt-2: a differ
12a80 65 6e 74 20 72 61 6e 64 6f 6d 20 6e 75 6d 62 65  ent random numbe
12a90 72 20 66 6f 72 20 65 61 63 68 20 63 68 65 63 6b  r for each check
12aa0 70 6f 69 6e 74 0a 3c 74 72 3e 3c 74 64 20 76 61  point.<tr><td va
12ab0 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
12ac0 65 6e 74 65 72 3e 32 34 3c 74 64 20 76 61 6c 69  enter>24<td vali
12ad0 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
12ae0 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 43 68  ter>4.    <td>Ch
12af0 65 63 6b 73 75 6d 2d 31 3a 20 46 69 72 73 74 20  ecksum-1: First 
12b00 70 61 72 74 20 6f 66 20 61 20 63 68 65 63 6b 73  part of a checks
12b10 75 6d 20 6f 6e 20 74 68 65 20 66 69 72 73 74 20  um on the first 
12b20 32 34 20 62 79 74 65 73 20 6f 66 20 68 65 61 64  24 bytes of head
12b30 65 72 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  er.<tr><td valig
12b40 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
12b50 65 72 3e 32 38 3c 74 64 20 76 61 6c 69 67 6e 3d  er>28<td valign=
12b60 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
12b70 3e 34 0a 20 20 20 20 3c 74 64 3e 43 68 65 63 6b  >4.    <td>Check
12b80 73 75 6d 2d 32 3a 20 53 65 63 6f 6e 64 20 70 61  sum-2: Second pa
12b90 72 74 20 6f 66 20 74 68 65 20 63 68 65 63 6b 73  rt of the checks
12ba0 75 6d 20 6f 6e 20 74 68 65 20 66 69 72 73 74 20  um on the first 
12bb0 32 34 20 62 79 74 65 73 20 6f 66 20 68 65 61 64  24 bytes of head
12bc0 65 72 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 63 65  er.</table>.</ce
12bd0 6e 74 65 72 3e 29 5e 0a 0a 3c 70 3e 5e 49 6d 6d  nter>)^..<p>^Imm
12be0 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 69  ediately followi
12bf0 6e 67 20 74 68 65 20 77 61 6c 2d 68 65 61 64 65  ng the wal-heade
12c00 72 20 61 72 65 20 7a 65 72 6f 20 6f 72 20 6d 6f  r are zero or mo
12c10 72 65 20 66 72 61 6d 65 73 2e 20 5e 45 61 63 68  re frames. ^Each
12c20 0a 66 72 61 6d 65 20 63 6f 6e 73 69 73 74 73 20  .frame consists 
12c30 6f 66 20 61 20 32 34 2d 62 79 74 65 20 66 72 61  of a 24-byte fra
12c40 6d 65 2d 68 65 61 64 65 72 20 66 6f 6c 6c 6f 77  me-header follow
12c50 65 64 20 62 79 20 61 20 3c 69 3e 70 61 67 65 2d  ed by a <i>page-
12c60 73 69 7a 65 3c 2f 69 3e 20 62 79 74 65 73 0a 6f  size</i> bytes.o
12c70 66 20 70 61 67 65 20 64 61 74 61 2e 20 5e 28 54  f page data. ^(T
12c80 68 65 20 66 72 61 6d 65 2d 68 65 61 64 65 72 20  he frame-header 
12c90 69 73 20 73 69 78 20 62 69 67 2d 65 6e 64 69 61  is six big-endia
12ca0 6e 20 33 32 2d 62 69 74 20 75 6e 73 69 67 6e 65  n 32-bit unsigne
12cb0 64 20 0a 69 6e 74 65 67 65 72 20 76 61 6c 75 65  d .integer value
12cc0 73 2c 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a  s, as follows:..
12cd0 3c 63 65 6e 74 65 72 3e 0a 3c 69 3e 57 41 4c 20  <center>.<i>WAL 
12ce0 46 72 61 6d 65 20 48 65 61 64 65 72 20 46 6f 72  Frame Header For
12cf0 6d 61 74 3c 2f 69 3e 3c 62 72 3e 0a 3c 74 61 62  mat</i><br>.<tab
12d00 6c 65 20 77 69 64 74 68 3d 22 38 30 25 22 20 62  le width="80%" b
12d10 6f 72 64 65 72 3d 31 3e 0a 3c 74 72 3e 3c 74 68  order=1>.<tr><th
12d20 3e 4f 66 66 73 65 74 3c 74 68 3e 53 69 7a 65 3c  >Offset<th>Size<
12d30 74 68 3e 44 65 73 63 72 69 70 74 69 6f 6e 0a 3c  th>Description.<
12d40 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
12d50 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 30  p align=center>0
12d60 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
12d70 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20  lign=center>4.  
12d80 20 20 3c 74 64 3e 50 61 67 65 20 6e 75 6d 62 65    <td>Page numbe
12d90 72 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  r.<tr><td valign
12da0 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
12db0 72 3e 34 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  r>4<td valign=to
12dc0 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34  p align=center>4
12dd0 0a 20 20 20 20 3c 74 64 3e 46 6f 72 20 63 6f 6d  .    <td>For com
12de0 6d 69 74 20 72 65 63 6f 72 64 73 2c 20 74 68 65  mit records, the
12df0 20 73 69 7a 65 20 6f 66 20 74 68 65 20 64 61 74   size of the dat
12e00 61 62 61 73 65 20 66 69 6c 65 20 69 6e 20 70 61  abase file in pa
12e10 67 65 73 0a 20 20 20 20 20 20 20 20 61 66 74 65  ges.        afte
12e20 72 20 74 68 65 20 63 6f 6d 6d 69 74 2e 20 20 46  r the commit.  F
12e30 6f 72 20 61 6c 6c 20 6f 74 68 65 72 20 72 65 63  or all other rec
12e40 6f 72 64 73 2c 20 7a 65 72 6f 2e 0a 3c 74 72 3e  ords, zero..<tr>
12e50 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
12e60 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 38 3c 74 64  lign=center>8<td
12e70 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
12e80 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c  n=center>4.    <
12e90 74 64 3e 53 61 6c 74 2d 31 20 63 6f 70 69 65 64  td>Salt-1 copied
12ea0 20 66 72 6f 6d 20 74 68 65 20 57 41 4c 20 68 65   from the WAL he
12eb0 61 64 65 72 0a 3c 74 72 3e 3c 74 64 20 76 61 6c  ader.<tr><td val
12ec0 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
12ed0 6e 74 65 72 3e 31 32 3c 74 64 20 76 61 6c 69 67  nter>12<td valig
12ee0 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
12ef0 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 53 61 6c  er>4.    <td>Sal
12f00 74 2d 32 20 63 6f 70 69 65 64 20 66 72 6f 6d 20  t-2 copied from 
12f10 74 68 65 20 57 41 4c 20 68 65 61 64 65 72 0a 3c  the WAL header.<
12f20 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
12f30 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31  p align=center>1
12f40 36 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  6<td valign=top 
12f50 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20  align=center>4. 
12f60 20 20 20 3c 74 64 3e 43 68 65 63 6b 73 75 6d 2d     <td>Checksum-
12f70 31 3a 20 20 43 75 6d 75 6c 61 74 69 76 65 20 63  1:  Cumulative c
12f80 68 65 63 6b 73 75 6d 20 75 70 20 74 68 72 6f 75  hecksum up throu
12f90 67 68 20 61 6e 64 20 69 6e 63 6c 75 64 69 6e 67  gh and including
12fa0 20 74 68 69 73 20 70 61 67 65 0a 3c 74 72 3e 3c   this page.<tr><
12fb0 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
12fc0 69 67 6e 3d 63 65 6e 74 65 72 3e 32 30 3c 74 64  ign=center>20<td
12fd0 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
12fe0 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c  n=center>4.    <
12ff0 74 64 3e 43 68 65 63 6b 73 75 6d 2d 32 3a 20 20  td>Checksum-2:  
13000 53 65 63 6f 6e 64 20 68 61 6c 66 20 6f 66 20 74  Second half of t
13010 68 65 20 63 75 6d 75 6c 61 74 69 76 65 20 63 68  he cumulative ch
13020 65 63 6b 73 75 6d 2e 0a 3c 2f 74 61 62 6c 65 3e  ecksum..</table>
13030 0a 3c 2f 63 65 6e 74 65 72 3e 29 5e 0a 0a 5e 28  .</center>)^..^(
13040 3c 70 3e 41 20 66 72 61 6d 65 20 69 73 20 63 6f  <p>A frame is co
13050 6e 73 69 64 65 72 65 64 20 76 61 6c 69 64 20 69  nsidered valid i
13060 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20 74 68  f and only if th
13070 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6e 64  e following cond
13080 69 74 69 6f 6e 73 20 61 72 65 0a 74 72 75 65 3a  itions are.true:
13090 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 3c  </p>..<ol>.<li><
130a0 70 3e 54 68 65 20 73 61 6c 74 2d 31 20 61 6e 64  p>The salt-1 and
130b0 20 73 61 6c 74 2d 32 20 76 61 6c 75 65 73 20 69   salt-2 values i
130c0 6e 20 74 68 65 20 66 72 61 6d 65 2d 68 65 61 64  n the frame-head
130d0 65 72 20 6d 61 74 63 68 0a 20 20 20 20 20 20 20  er match.       
130e0 73 61 6c 74 20 76 61 6c 75 65 73 20 69 6e 20 74  salt values in t
130f0 68 65 20 77 61 6c 2d 68 65 61 64 65 72 3c 2f 70  he wal-header</p
13100 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 54  ></li>..<li><p>T
13110 68 65 20 63 68 65 63 6b 73 75 6d 20 76 61 6c 75  he checksum valu
13120 65 73 20 69 6e 20 74 68 65 20 66 69 6e 61 6c 20  es in the final 
13130 38 20 62 79 74 65 73 20 6f 66 20 74 68 65 20 66  8 bytes of the f
13140 72 61 6d 65 2d 68 65 61 64 65 72 0a 20 20 20 20  rame-header.    
13150 20 20 20 65 78 61 63 74 6c 79 20 6d 61 74 63 68     exactly match
13160 20 74 68 65 20 63 68 65 63 6b 73 75 6d 20 63 6f   the checksum co
13170 6d 70 75 74 65 64 20 63 6f 6e 73 65 63 75 74 69  mputed consecuti
13180 76 65 6c 79 20 6f 6e 20 74 68 65 0a 20 20 20 20  vely on the.    
13190 20 20 20 66 69 72 73 74 20 32 34 20 62 79 74 65     first 24 byte
131a0 73 20 6f 66 20 74 68 65 20 57 41 4c 20 68 65 61  s of the WAL hea
131b0 64 65 72 20 61 6e 64 20 74 68 65 20 66 69 72 73  der and the firs
131c0 74 20 38 20 62 79 74 65 73 20 61 6e 64 0a 20 20  t 8 bytes and.  
131d0 20 20 20 20 20 74 68 65 20 63 6f 6e 74 65 6e 74       the content
131e0 20 6f 66 20 61 6c 6c 20 66 72 61 6d 65 73 0a 20   of all frames. 
131f0 20 20 20 20 20 20 75 70 20 74 6f 20 61 6e 64 20        up to and 
13200 69 6e 63 6c 75 64 69 6e 67 20 74 68 65 20 63 75  including the cu
13210 72 72 65 6e 74 20 66 72 61 6d 65 2e 3c 2f 70 3e  rrent frame.</p>
13220 3c 2f 6c 69 3e 3c 2f 6c 69 3e 0a 3c 2f 6f 6c 3e  </li></li>.</ol>
13230 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  )^..<tcl>hd_frag
13240 6d 65 6e 74 20 77 61 6c 63 6b 73 6d 20 7b 57 41  ment walcksm {WA
13250 4c 20 63 68 65 63 6b 73 75 6d 20 61 6c 67 6f 72  L checksum algor
13260 69 74 68 6d 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e  ithm}</tcl>.<h3>
13270 34 2e 32 20 43 68 65 63 6b 73 75 6d 20 41 6c 67  4.2 Checksum Alg
13280 6f 72 69 74 68 6d 3c 2f 68 33 3e 0a 0a 3c 70 3e  orithm</h3>..<p>
13290 54 68 65 20 63 68 65 63 6b 73 75 6d 20 69 73 20  The checksum is 
132a0 63 6f 6d 70 75 74 65 64 20 62 79 20 69 6e 74 65  computed by inte
132b0 72 70 72 65 74 69 6e 67 20 74 68 65 20 69 6e 70  rpreting the inp
132c0 75 74 20 61 73 0a 61 6e 20 65 76 65 6e 20 6e 75  ut as.an even nu
132d0 6d 62 65 72 20 6f 66 20 75 6e 73 69 67 6e 65 64  mber of unsigned
132e0 20 33 32 2d 62 69 74 20 69 6e 74 65 67 65 72 73   32-bit integers
132f0 3a 20 78 28 30 29 20 74 68 72 6f 75 67 68 20 78  : x(0) through x
13300 28 4e 29 2e 0a 5e 54 68 65 20 33 32 2d 62 69 74  (N)..^The 32-bit
13310 20 69 6e 74 65 67 65 72 73 20 61 72 65 20 62 69   integers are bi
13320 67 2d 65 6e 64 69 61 6e 20 69 66 20 74 68 65 0a  g-endian if the.
13330 6d 61 67 69 63 20 6e 75 6d 62 65 72 20 69 6e 20  magic number in 
13340 74 68 65 20 66 69 72 73 74 20 34 20 62 79 74 65  the first 4 byte
13350 73 20 6f 66 20 74 68 65 20 57 41 4c 20 68 65 61  s of the WAL hea
13360 64 65 72 20 69 73 20 30 78 33 37 37 66 30 36 38  der is 0x377f068
13370 33 20 61 6e 64 0a 74 68 65 20 69 6e 74 65 67 65  3 and.the intege
13380 72 73 20 61 72 65 20 6c 69 74 74 6c 65 2d 65 6e  rs are little-en
13390 64 69 61 6e 20 69 66 20 74 68 65 20 6d 61 67 69  dian if the magi
133a0 63 20 6e 75 6d 62 65 72 20 69 73 20 30 78 33 37  c number is 0x37
133b0 37 66 30 36 38 32 2e 0a 5e 54 68 65 20 63 68 65  7f0682..^The che
133c0 63 6b 73 75 6d 20 76 61 6c 75 65 73 20 61 72 65  cksum values are
133d0 20 61 6c 77 61 79 73 20 73 74 6f 72 65 64 20 69   always stored i
133e0 6e 20 74 68 65 20 66 72 61 6d 65 20 68 65 61 64  n the frame head
133f0 65 72 20 69 6e 20 61 0a 62 69 67 2d 65 6e 64 69  er in a.big-endi
13400 61 6e 20 66 6f 72 6d 61 74 20 72 65 67 61 72 64  an format regard
13410 6c 65 73 73 20 6f 66 20 77 68 69 63 68 20 62 79  less of which by
13420 74 65 20 6f 72 64 65 72 20 69 73 20 75 73 65 64  te order is used
13430 20 74 6f 20 63 6f 6d 70 75 74 65 0a 74 68 65 20   to compute.the 
13440 63 68 65 63 6b 73 75 6d 2e 3c 2f 70 3e 0a 0a 3c  checksum.</p>..<
13450 70 3e 54 68 65 20 63 68 65 63 6b 73 75 6d 20 61  p>The checksum a
13460 6c 67 6f 72 69 74 68 6d 20 6f 6e 6c 79 20 77 6f  lgorithm only wo
13470 72 6b 73 20 66 6f 72 20 63 6f 6e 74 65 6e 74 20  rks for content 
13480 77 68 69 63 68 20 69 73 20 61 20 6d 75 6c 74 69  which is a multi
13490 70 6c 65 20 6f 66 0a 38 20 62 79 74 65 73 20 69  ple of.8 bytes i
134a0 6e 20 6c 65 6e 67 74 68 2e 20 20 49 6e 20 6f 74  n length.  In ot
134b0 68 65 72 20 77 6f 72 64 73 2c 20 69 66 20 74 68  her words, if th
134c0 65 20 69 6e 70 75 74 73 20 61 72 65 20 78 28 30  e inputs are x(0
134d0 29 20 74 68 72 6f 75 67 68 20 78 28 4e 29 0a 74  ) through x(N).t
134e0 68 65 6e 20 4e 20 6d 75 73 74 20 62 65 20 6f 64  hen N must be od
134f0 64 2e 0a 5e 28 54 68 65 20 63 68 65 63 6b 73 75  d..^(The checksu
13500 6d 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 61  m algorithm is a
13510 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 62 6c 6f  s follows:..<blo
13520 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 20 0a 73  ckquote><pre> .s
13530 30 20 3d 20 73 31 20 3d 20 30 0a 66 6f 72 20 69  0 = s1 = 0.for i
13540 20 66 72 6f 6d 20 30 20 74 6f 20 6e 2d 31 20 73   from 0 to n-1 s
13550 74 65 70 20 32 3a 0a 20 20 20 73 30 20 2b 3d 20  tep 2:.   s0 += 
13560 78 28 69 29 20 2b 20 73 31 3b 0a 20 20 20 73 31  x(i) + s1;.   s1
13570 20 2b 3d 20 78 28 69 2b 31 29 20 2b 20 73 30 3b   += x(i+1) + s0;
13580 0a 65 6e 64 66 6f 72 0a 23 20 72 65 73 75 6c 74  .endfor.# result
13590 20 69 6e 20 73 30 20 61 6e 64 20 73 31 0a 3c 2f   in s0 and s1.</
135a0 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  pre></blockquote
135b0 3e 29 5e 0a 0a 3c 70 3e 5e 54 68 65 20 6f 75 74  >)^..<p>^The out
135c0 70 75 74 73 20 73 30 20 61 6e 64 20 73 31 20 61  puts s0 and s1 a
135d0 72 65 20 62 6f 74 68 20 77 65 69 67 68 74 65 64  re both weighted
135e0 20 63 68 65 63 6b 73 75 6d 73 20 75 73 69 6e 67   checksums using
135f0 20 46 69 62 6f 6e 61 63 63 69 20 77 65 69 67 68   Fibonacci weigh
13600 74 73 0a 69 6e 20 72 65 76 65 72 73 65 20 6f 72  ts.in reverse or
13610 64 65 72 2e 20 20 28 5e 54 68 65 20 6c 61 72 67  der.  (^The larg
13620 65 73 74 20 46 69 62 6f 6e 61 63 63 69 20 77 65  est Fibonacci we
13630 69 67 68 74 20 6f 63 63 75 72 73 20 6f 6e 20 74  ight occurs on t
13640 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74  he first element
13650 0a 6f 66 20 74 68 65 20 73 65 71 75 65 6e 63 65  .of the sequence
13660 20 62 65 69 6e 67 20 73 75 6d 6d 65 64 2e 29 20   being summed.) 
13670 20 5e 54 68 65 20 73 31 20 76 61 6c 75 65 20 73   ^The s1 value s
13680 70 61 6e 73 20 61 6c 6c 20 33 32 2d 62 69 74 20  pans all 32-bit 
13690 69 6e 74 65 67 65 72 0a 74 65 72 6d 73 20 6f 66  integer.terms of
136a0 20 74 68 65 20 73 65 71 75 65 6e 63 65 20 77 68   the sequence wh
136b0 65 72 65 61 73 20 73 30 20 6f 6d 69 74 73 20 74  ereas s0 omits t
136c0 68 65 20 66 69 6e 61 6c 20 74 65 72 6d 2e 3c 2f  he final term.</
136d0 70 3e 0a 0a 3c 68 33 3e 34 2e 33 20 43 68 65 63  p>..<h3>4.3 Chec
136e0 6b 70 6f 69 6e 74 20 41 6c 67 6f 72 69 74 68 6d  kpoint Algorithm
136f0 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 4f 6e 20 61 20  </h3>..<p>^On a 
13700 5b 63 68 65 63 6b 70 6f 69 6e 74 5d 2c 20 74 68  [checkpoint], th
13710 65 20 57 41 4c 20 69 73 20 66 69 72 73 74 20 66  e WAL is first f
13720 6c 75 73 68 65 64 20 74 6f 20 70 65 72 73 69 73  lushed to persis
13730 74 65 6e 74 20 73 74 6f 72 61 67 65 20 75 73 69  tent storage usi
13740 6e 67 0a 74 68 65 20 78 53 79 6e 63 20 6d 65 74  ng.the xSync met
13750 68 6f 64 20 6f 66 20 74 68 65 20 5b 73 71 6c 69  hod of the [sqli
13760 74 65 33 5f 69 6f 5f 6d 65 74 68 6f 64 73 20 7c  te3_io_methods |
13770 20 56 46 53 5d 2e 20 0a 5e 54 68 65 6e 20 76 61   VFS]. .^Then va
13780 6c 69 64 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74  lid content of t
13790 68 65 20 57 41 4c 20 69 73 20 74 72 61 6e 73 66  he WAL is transf
137a0 65 72 72 65 64 20 69 6e 74 6f 20 74 68 65 20 64  erred into the d
137b0 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 5e 46  atabase file..^F
137c0 69 6e 61 6c 6c 79 2c 20 74 68 65 20 64 61 74 61  inally, the data
137d0 62 61 73 65 20 69 73 20 66 6c 75 73 68 65 64 20  base is flushed 
137e0 74 6f 20 70 65 72 73 69 73 74 65 6e 74 20 73 74  to persistent st
137f0 6f 72 61 67 65 20 75 73 69 6e 67 20 61 6e 6f 74  orage using anot
13800 68 65 72 0a 78 53 79 6e 63 20 6d 65 74 68 6f 64  her.xSync method
13810 20 63 61 6c 6c 2e 0a 54 68 65 20 78 53 79 6e 63   call..The xSync
13820 20 6f 70 65 72 61 74 69 6f 6e 73 20 73 65 72 76   operations serv
13830 65 20 61 73 20 77 72 69 74 65 20 62 61 72 72 69  e as write barri
13840 65 72 73 20 2d 20 61 6c 6c 20 77 72 69 74 65 73  ers - all writes
13850 20 6c 61 75 6e 63 68 65 64 0a 62 65 66 6f 72 65   launched.before
13860 20 74 68 65 20 78 53 79 6e 63 20 6d 75 73 74 20   the xSync must 
13870 63 6f 6d 70 6c 65 74 65 20 62 65 66 6f 72 65 20  complete before 
13880 61 6e 79 20 77 72 69 74 65 20 74 68 61 74 20 6c  any write that l
13890 61 75 6e 63 68 65 73 20 61 66 74 65 72 20 74 68  aunches after th
138a0 65 0a 78 53 79 6e 63 20 62 65 67 69 6e 73 2e 3c  e.xSync begins.<
138b0 2f 70 3e 0a 0a 3c 70 3e 5e 41 66 74 65 72 20 65  /p>..<p>^After e
138c0 61 63 68 20 63 68 65 63 6b 70 6f 69 6e 74 2c 20  ach checkpoint, 
138d0 74 68 65 20 57 41 4c 20 68 65 61 64 65 72 20 73  the WAL header s
138e0 61 6c 74 2d 31 20 76 61 6c 75 65 20 69 73 20 69  alt-1 value is i
138f0 6e 63 72 65 6d 65 6e 74 65 64 20 61 6e 64 20 74  ncremented and t
13900 68 65 20 0a 73 61 6c 74 2d 32 20 76 61 6c 75 65  he .salt-2 value
13910 20 69 73 20 72 61 6e 64 6f 6d 69 7a 65 64 2e 20   is randomized. 
13920 20 54 68 69 73 20 70 72 65 76 65 6e 74 73 20 6f   This prevents o
13930 6c 64 20 61 6e 64 20 6e 65 77 20 66 72 61 6d 65  ld and new frame
13940 73 20 69 6e 20 74 68 65 20 57 41 4c 20 66 72 6f  s in the WAL fro
13950 6d 0a 62 65 69 6e 67 20 63 6f 6e 73 69 64 65 72  m.being consider
13960 65 64 20 76 61 6c 69 64 20 61 74 20 74 68 65 20  ed valid at the 
13970 73 61 6d 65 20 74 69 6d 65 20 61 6e 64 20 62 65  same time and be
13980 69 6e 67 20 63 68 65 63 6b 70 6f 69 6e 74 69 6e  ing checkpointin
13990 67 20 74 6f 67 65 74 68 65 72 0a 66 6f 6c 6c 6f  g together.follo
139a0 77 69 6e 67 20 61 20 63 72 61 73 68 2e 3c 2f 70  wing a crash.</p
139b0 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
139c0 65 6e 74 20 77 61 6c 72 65 61 64 20 7b 57 41 4c  ent walread {WAL
139d0 20 72 65 61 64 20 61 6c 67 6f 72 69 74 68 6d 7d   read algorithm}
139e0 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 34 2e 34 20 52  </tcl>.<h3>4.4 R
139f0 65 61 64 65 72 20 41 6c 67 6f 72 69 74 68 6d 3c  eader Algorithm<
13a00 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 54 6f 20 72 65  /h3>..<p>^(To re
13a10 61 64 20 61 20 70 61 67 65 20 66 72 6f 6d 20 74  ad a page from t
13a20 68 65 20 64 61 74 61 62 61 73 65 20 28 63 61 6c  he database (cal
13a30 6c 20 69 74 20 70 61 67 65 20 6e 75 6d 62 65 72  l it page number
13a40 20 50 29 2c 20 61 20 72 65 61 64 65 72 0a 66 69   P), a reader.fi
13a50 72 73 74 20 63 68 65 63 6b 73 20 74 68 65 20 57  rst checks the W
13a60 41 4c 20 74 6f 20 73 65 65 20 69 66 20 69 74 20  AL to see if it 
13a70 63 6f 6e 74 61 69 6e 73 20 70 61 67 65 20 50 2e  contains page P.
13a80 20 20 49 66 20 73 6f 2c 20 74 68 65 6e 20 74 68    If so, then th
13a90 65 0a 6c 61 73 74 20 76 61 6c 69 64 20 69 6e 73  e.last valid ins
13aa0 74 61 6e 63 65 20 6f 66 20 70 61 67 65 20 50 20  tance of page P 
13ab0 74 68 61 74 20 69 73 20 66 6f 6c 6c 6f 77 65 64  that is followed
13ac0 20 62 79 20 61 20 63 6f 6d 6d 69 74 20 66 72 61   by a commit fra
13ad0 6d 65 0a 6f 72 20 69 73 20 61 20 63 6f 6d 6d 69  me.or is a commi
13ae0 74 20 66 72 61 6d 65 20 69 74 73 65 6c 66 20 62  t frame itself b
13af0 65 63 6f 6d 65 73 20 74 68 65 20 76 61 6c 75 65  ecomes the value
13b00 20 72 65 61 64 2e 29 5e 20 20 5e 49 66 20 74 68   read.)^  ^If th
13b10 65 20 57 41 4c 0a 63 6f 6e 74 61 69 6e 73 20 6e  e WAL.contains n
13b20 6f 20 63 6f 70 69 65 73 20 6f 66 20 70 61 67 65  o copies of page
13b30 20 50 20 74 68 61 74 20 61 72 65 20 76 61 6c 69   P that are vali
13b40 64 20 61 6e 64 20 77 68 69 63 68 20 61 72 65 20  d and which are 
13b50 61 20 63 6f 6d 6d 69 74 0a 66 72 61 6d 65 20 6f  a commit.frame o
13b60 72 20 61 72 65 20 66 6f 6c 6c 6f 77 65 64 20 62  r are followed b
13b70 79 20 61 20 63 6f 6d 6d 69 74 20 66 72 61 6d 65  y a commit frame
13b80 2c 20 74 68 65 6e 20 70 61 67 65 20 50 20 69 73  , then page P is
13b90 20 72 65 61 64 20 66 72 6f 6d 0a 74 68 65 20 64   read from.the d
13ba0 61 74 61 62 61 73 65 20 66 69 6c 65 2e 3c 2f 70  atabase file.</p
13bb0 3e 0a 0a 3c 70 3e 54 6f 20 73 74 61 72 74 20 61  >..<p>To start a
13bc0 20 72 65 61 64 20 74 72 61 6e 73 61 63 74 69 6f   read transactio
13bd0 6e 2c 20 74 68 65 20 72 65 61 64 65 72 20 72 65  n, the reader re
13be0 63 6f 72 64 73 20 74 68 65 20 69 6e 64 65 78 20  cords the index 
13bf0 6f 66 20 74 68 65 20 6c 61 73 74 0a 76 61 6c 69  of the last.vali
13c00 64 20 66 72 61 6d 65 20 69 6e 20 74 68 65 20 57  d frame in the W
13c10 41 4c 2e 20 20 54 68 65 20 72 65 61 64 65 72 20  AL.  The reader 
13c20 75 73 65 73 20 74 68 69 73 20 72 65 63 6f 72 64  uses this record
13c30 65 64 20 22 6d 78 46 72 61 6d 65 22 20 76 61 6c  ed "mxFrame" val
13c40 75 65 0a 66 6f 72 20 61 6c 6c 20 73 75 62 73 65  ue.for all subse
13c50 71 75 65 6e 74 20 72 65 61 64 20 6f 70 65 72 61  quent read opera
13c60 74 69 6f 6e 73 2e 20 20 4e 65 77 20 74 72 61 6e  tions.  New tran
13c70 73 61 63 74 69 6f 6e 73 20 63 61 6e 20 62 65 20  sactions can be 
13c80 61 70 70 65 6e 64 65 64 0a 74 6f 20 74 68 65 20  appended.to the 
13c90 57 41 4c 2c 20 62 75 74 20 61 73 20 6c 6f 6e 67  WAL, but as long
13ca0 20 61 73 20 74 68 65 20 72 65 61 64 65 72 20 75   as the reader u
13cb0 73 65 73 20 69 74 73 20 6f 72 69 67 69 6e 61 6c  ses its original
13cc0 20 6d 78 46 72 61 6d 65 20 76 61 6c 75 65 0a 61   mxFrame value.a
13cd0 6e 64 20 69 67 6e 6f 72 65 73 20 73 75 62 73 65  nd ignores subse
13ce0 71 75 65 6e 74 6c 79 20 61 70 70 65 6e 64 65 64  quently appended
13cf0 20 63 6f 6e 74 65 6e 74 2c 20 74 68 65 20 72 65   content, the re
13d00 61 64 65 72 20 77 69 6c 6c 20 73 65 65 20 61 20  ader will see a 
13d10 0a 63 6f 6e 73 69 73 74 65 6e 74 20 73 6e 61 70  .consistent snap
13d20 73 68 6f 74 20 6f 66 20 74 68 65 20 64 61 74 61  shot of the data
13d30 62 61 73 65 20 66 72 6f 6d 20 61 20 73 69 6e 67  base from a sing
13d40 6c 65 20 70 6f 69 6e 74 20 69 6e 20 74 69 6d 65  le point in time
13d50 2e 20 20 0a 5e 54 68 69 73 20 74 65 63 68 6e 69  .  .^This techni
13d60 71 75 65 20 61 6c 6c 6f 77 73 20 6d 75 6c 74 69  que allows multi
13d70 70 6c 65 20 63 6f 6e 63 75 72 72 65 6e 74 20 72  ple concurrent r
13d80 65 61 64 65 72 73 20 74 6f 20 76 69 65 77 20 64  eaders to view d
13d90 69 66 66 65 72 65 6e 74 20 0a 76 65 72 73 69 6f  ifferent .versio
13da0 6e 73 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ns of the databa
13db0 73 65 20 63 6f 6e 74 65 6e 74 20 73 69 6d 75 6c  se content simul
13dc0 74 61 6e 65 6f 75 73 6c 79 2e 3c 2f 70 3e 0a 0a  taneously.</p>..
13dd0 3c 70 3e 54 68 65 20 72 65 61 64 65 72 20 61 6c  <p>The reader al
13de0 67 6f 72 69 74 68 6d 20 69 6e 20 74 68 65 20 70  gorithm in the p
13df0 72 65 76 69 6f 75 73 20 70 61 72 61 67 72 61 70  revious paragrap
13e00 68 73 20 77 6f 72 6b 73 20 63 6f 72 72 65 63 74  hs works correct
13e10 6c 79 2c 20 62 75 74 20 0a 62 65 63 61 75 73 65  ly, but .because
13e20 20 66 72 61 6d 65 73 20 66 6f 72 20 70 61 67 65   frames for page
13e30 20 50 20 63 61 6e 20 61 70 70 65 61 72 20 61 6e   P can appear an
13e40 79 77 68 65 72 65 20 77 69 74 68 69 6e 20 74 68  ywhere within th
13e50 65 20 57 41 4c 2c 20 74 68 65 0a 72 65 61 64 65  e WAL, the.reade
13e60 72 20 68 61 73 20 74 6f 20 73 63 61 6e 20 74 68  r has to scan th
13e70 65 20 65 6e 74 69 72 65 20 57 41 4c 20 6c 6f 6f  e entire WAL loo
13e80 6b 69 6e 67 20 66 6f 72 20 70 61 67 65 20 50 20  king for page P 
13e90 66 72 61 6d 65 73 2e 20 20 49 66 20 74 68 65 0a  frames.  If the.
13ea0 57 41 4c 20 69 73 20 6c 61 72 67 65 20 28 6d 75  WAL is large (mu
13eb0 6c 74 69 70 6c 65 20 6d 65 67 61 62 79 74 65 73  ltiple megabytes
13ec0 20 69 73 20 74 79 70 69 63 61 6c 29 20 74 68 61   is typical) tha
13ed0 74 20 73 63 61 6e 20 63 61 6e 20 62 65 20 73 6c  t scan can be sl
13ee0 6f 77 2c 0a 61 6e 64 20 72 65 61 64 20 70 65 72  ow,.and read per
13ef0 66 6f 72 6d 61 6e 63 65 20 73 75 66 66 65 72 73  formance suffers
13f00 2e 20 20 5e 54 6f 20 6f 76 65 72 63 6f 6d 65 20  .  ^To overcome 
13f10 74 68 69 73 20 70 72 6f 62 6c 65 6d 2c 20 61 20  this problem, a 
13f20 73 65 70 61 72 61 74 65 0a 64 61 74 61 20 73 74  separate.data st
13f30 72 75 63 74 75 72 65 20 63 61 6c 6c 65 64 20 74  ructure called t
13f40 68 65 20 77 61 6c 2d 69 6e 64 65 78 20 69 73 20  he wal-index is 
13f50 6d 61 69 6e 74 61 69 6e 65 64 20 74 6f 20 65 78  maintained to ex
13f60 70 65 64 69 74 65 20 74 68 65 0a 73 65 61 72 63  pedite the.searc
13f70 68 20 66 6f 72 20 66 72 61 6d 65 73 20 6f 66 20  h for frames of 
13f80 61 20 70 61 72 74 69 63 75 6c 61 72 20 70 61 67  a particular pag
13f90 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f  e.</p>..<tcl>hd_
13fa0 66 72 61 67 6d 65 6e 74 20 77 61 6c 69 6e 64 65  fragment walinde
13fb0 78 66 6f 72 6d 61 74 20 7b 77 61 6c 2d 69 6e 64  xformat {wal-ind
13fc0 65 78 7d 20 7b 57 41 4c 2d 69 6e 64 65 78 20 66  ex} {WAL-index f
13fd0 6f 72 6d 61 74 7d 3c 2f 74 63 6c 3e 0a 3c 68 33  ormat}</tcl>.<h3
13fe0 3e 34 2e 35 20 57 41 4c 2d 49 6e 64 65 78 20 46  >4.5 WAL-Index F
13ff0 6f 72 6d 61 74 3c 2f 68 33 3e 0a 0a 3c 70 3e 43  ormat</h3>..<p>C
14000 6f 6e 63 65 70 74 75 61 6c 6c 79 2c 20 74 68 65  onceptually, the
14010 20 77 61 6c 2d 69 6e 64 65 78 20 69 73 20 73 68   wal-index is sh
14020 61 72 65 64 20 6d 65 6d 6f 72 79 2c 20 74 68 6f  ared memory, tho
14030 75 67 68 20 74 68 65 20 63 75 72 72 65 6e 74 0a  ugh the current.
14040 56 46 53 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  VFS implementati
14050 6f 6e 73 20 75 73 65 20 61 20 6d 6d 61 70 70 65  ons use a mmappe
14060 64 20 66 69 6c 65 20 66 6f 72 20 74 68 65 20 77  d file for the w
14070 61 6c 2d 69 6e 64 65 78 2e 20 20 5e 54 68 65 20  al-index.  ^The 
14080 6d 6d 61 70 70 65 64 0a 66 69 6c 65 20 69 73 20  mmapped.file is 
14090 69 6e 20 74 68 65 20 73 61 6d 65 20 64 69 72 65  in the same dire
140a0 63 74 6f 72 79 20 61 73 20 74 68 65 20 64 61 74  ctory as the dat
140b0 61 62 61 73 65 20 61 6e 64 20 68 61 73 20 74 68  abase and has th
140c0 65 20 73 61 6d 65 20 6e 61 6d 65 0a 61 73 20 74  e same name.as t
140d0 68 65 20 64 61 74 61 62 61 73 65 20 77 69 74 68  he database with
140e0 20 61 20 22 3c 74 74 3e 2d 73 68 6d 3c 2f 74 74   a "<tt>-shm</tt
140f0 3e 22 20 73 75 66 66 69 78 20 61 70 70 65 6e 64  >" suffix append
14100 65 64 2e 20 20 42 65 63 61 75 73 65 0a 74 68 65  ed.  Because.the
14110 20 77 61 6c 2d 69 6e 64 65 78 20 69 73 20 73 68   wal-index is sh
14120 61 72 65 64 20 6d 65 6d 6f 72 79 2c 20 53 51 4c  ared memory, SQL
14130 69 74 65 20 64 6f 65 73 20 6e 6f 74 20 73 75 70  ite does not sup
14140 70 6f 72 74 20 0a 5b 50 52 41 47 4d 41 20 6a 6f  port .[PRAGMA jo
14150 75 72 6e 61 6c 5f 6d 6f 64 65 20 7c 20 6a 6f 75  urnal_mode | jou
14160 72 6e 61 6c 5f 6d 6f 64 65 3d 57 41 4c 5d 20 0a  rnal_mode=WAL] .
14170 6f 6e 20 61 20 6e 65 74 77 6f 72 6b 20 66 69 6c  on a network fil
14180 65 73 79 73 74 65 6d 20 77 68 65 6e 20 63 6c 69  esystem when cli
14190 65 6e 74 73 20 61 72 65 20 6f 6e 20 64 69 66 66  ents are on diff
141a0 65 72 65 6e 74 20 6d 61 63 68 69 6e 65 73 2e 0a  erent machines..
141b0 41 6c 6c 20 75 73 65 72 73 20 6f 66 20 74 68 65  All users of the
141c0 20 64 61 74 61 62 61 73 65 20 6d 75 73 74 20 62   database must b
141d0 65 20 61 62 6c 65 20 74 6f 20 73 68 61 72 65 20  e able to share 
141e0 74 68 65 20 73 61 6d 65 20 6d 65 6d 6f 72 79 2e  the same memory.
141f0 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 70 75 72  </p>..<p>The pur
14200 70 6f 73 65 20 6f 66 20 74 68 65 20 77 61 6c 2d  pose of the wal-
14210 69 6e 64 65 78 20 69 73 20 74 6f 20 61 6e 73 77  index is to answ
14220 65 72 20 74 68 69 73 20 71 75 65 73 74 69 6f 6e  er this question
14230 20 71 75 69 63 6b 6c 79 3a 3c 2f 70 3e 0a 0a 3c   quickly:</p>..<
14240 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 69 3e 0a 47  blockquote><i>.G
14250 69 76 65 6e 20 61 20 70 61 67 65 20 6e 75 6d 62  iven a page numb
14260 65 72 20 50 20 61 6e 64 20 61 20 6d 61 78 69 6d  er P and a maxim
14270 75 6d 20 57 41 4c 20 66 72 61 6d 65 20 69 6e 64  um WAL frame ind
14280 65 78 20 4d 2c 0a 72 65 74 75 72 6e 20 74 68 65  ex M,.return the
14290 20 6c 61 72 67 65 73 74 20 57 41 4c 20 66 72 61   largest WAL fra
142a0 6d 65 20 69 6e 64 65 78 20 66 6f 72 20 70 61 67  me index for pag
142b0 65 20 50 20 74 68 61 74 20 64 6f 65 73 20 6e 6f  e P that does no
142c0 74 20 65 78 63 65 65 64 20 4d 2c 20 0a 6f 72 20  t exceed M, .or 
142d0 72 65 74 75 72 6e 20 4e 55 4c 4c 20 69 66 20 74  return NULL if t
142e0 68 65 72 65 20 61 72 65 20 6e 6f 20 66 72 61 6d  here are no fram
142f0 65 73 20 66 6f 72 20 70 61 67 65 20 50 20 74 68  es for page P th
14300 61 74 20 64 6f 20 6e 6f 74 20 65 78 63 65 65 64  at do not exceed
14310 20 4d 2e 0a 3c 2f 69 3e 3c 2f 62 6c 6f 63 6b 71   M..</i></blockq
14320 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 3c 69  uote>..<p>The <i
14330 3e 4d 3c 2f 69 3e 20 76 61 6c 75 65 20 69 6e 20  >M</i> value in 
14340 74 68 65 20 70 72 65 76 69 6f 75 73 20 70 61 72  the previous par
14350 61 67 72 61 70 68 20 69 73 20 74 68 65 20 22 6d  agraph is the "m
14360 78 46 72 61 6d 65 22 20 76 61 6c 75 65 0a 64 65  xFrame" value.de
14370 66 69 6e 65 64 20 69 6e 20 5b 57 41 4c 20 72 65  fined in [WAL re
14380 61 64 20 61 6c 67 6f 72 69 74 68 6d 20 7c 20 73  ad algorithm | s
14390 65 63 74 69 6f 6e 20 34 2e 34 5d 20 74 68 61 74  ection 4.4] that
143a0 20 69 73 20 72 65 61 64 20 61 74 20 74 68 65 20   is read at the 
143b0 73 74 61 72 74 20 0a 6f 66 20 61 20 74 72 61 6e  start .of a tran
143c0 73 61 63 74 69 6f 6e 20 61 6e 64 20 77 68 69 63  saction and whic
143d0 68 20 64 65 66 69 6e 65 73 20 74 68 65 20 6d 61  h defines the ma
143e0 78 69 6d 75 6d 20 66 72 61 6d 65 20 66 72 6f 6d  ximum frame from
143f0 20 74 68 65 20 57 41 4c 20 74 68 61 74 20 0a 74   the WAL that .t
14400 68 65 20 72 65 61 64 65 72 20 77 69 6c 6c 20 75  he reader will u
14410 73 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  se.</p>..<p>The 
14420 77 61 6c 2d 69 6e 64 65 78 20 69 73 20 74 72 61  wal-index is tra
14430 6e 73 69 65 6e 74 2e 20 20 41 66 74 65 72 20 61  nsient.  After a
14440 20 63 72 61 73 68 2c 20 74 68 65 20 77 61 6c 2d   crash, the wal-
14450 69 6e 64 65 78 20 69 73 0a 72 65 63 6f 6e 73 74  index is.reconst
14460 72 75 63 74 65 64 20 66 72 6f 6d 20 74 68 65 20  ructed from the 
14470 6f 72 69 67 69 6e 61 6c 20 57 41 4c 20 66 69 6c  original WAL fil
14480 65 2e 20 20 5e 54 68 65 20 56 46 53 20 69 73 20  e.  ^The VFS is 
14490 72 65 71 75 69 72 65 64 0a 74 6f 20 65 69 74 68  required.to eith
144a0 65 72 20 74 72 75 6e 63 61 74 65 20 6f 72 20 7a  er truncate or z
144b0 65 72 6f 20 74 68 65 20 68 65 61 64 65 72 20 6f  ero the header o
144c0 66 20 74 68 65 20 77 61 6c 2d 69 6e 64 65 78 20  f the wal-index 
144d0 77 68 65 6e 20 74 68 65 20 6c 61 73 74 0a 63 6f  when the last.co
144e0 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 69 74 20 63  nnection to it c
144f0 6c 6f 73 65 73 2e 20 20 42 65 63 61 75 73 65 20  loses.  Because 
14500 74 68 65 20 77 61 6c 2d 69 6e 64 65 78 20 69 73  the wal-index is
14510 20 74 72 61 6e 73 69 65 6e 74 2c 20 69 74 20 63   transient, it c
14520 61 6e 0a 75 73 65 20 61 6e 20 61 72 63 68 69 74  an.use an archit
14530 65 63 74 75 72 65 2d 73 70 65 63 69 66 69 63 20  ecture-specific 
14540 66 6f 72 6d 61 74 3b 20 69 74 20 64 6f 65 73 20  format; it does 
14550 6e 6f 74 20 68 61 76 65 20 74 6f 20 62 65 20 63  not have to be c
14560 72 6f 73 73 2d 70 6c 61 74 66 6f 72 6d 2e 0a 48  ross-platform..H
14570 65 6e 63 65 2c 20 75 6e 6c 69 6b 65 20 74 68 65  ence, unlike the
14580 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 57 41   database and WA
14590 4c 20 66 69 6c 65 20 66 6f 72 6d 61 74 73 20 77  L file formats w
145a0 68 69 63 68 20 73 74 6f 72 65 20 61 6c 6c 20 76  hich store all v
145b0 61 6c 75 65 73 0a 61 73 20 62 69 67 20 65 6e 64  alues.as big end
145c0 69 61 6e 2c 20 74 68 65 20 77 61 6c 2d 69 6e 64  ian, the wal-ind
145d0 65 78 20 73 74 6f 72 65 73 20 6d 75 6c 74 69 2d  ex stores multi-
145e0 62 79 74 65 20 76 61 6c 75 65 73 20 69 6e 20 74  byte values in t
145f0 68 65 20 6e 61 74 69 76 65 0a 62 79 74 65 20 6f  he native.byte o
14600 72 64 65 72 20 6f 66 20 74 68 65 20 68 6f 73 74  rder of the host
14610 20 63 6f 6d 70 75 74 65 72 2e 3c 2f 70 3e 0a 0a   computer.</p>..
14620 3c 70 3e 54 68 69 73 20 64 6f 63 75 6d 65 6e 74  <p>This document
14630 20 69 73 20 63 6f 6e 63 65 72 6e 65 64 20 77 69   is concerned wi
14640 74 68 20 74 68 65 20 70 65 72 73 69 73 74 65 6e  th the persisten
14650 74 20 73 74 61 74 65 20 6f 66 20 74 68 65 20 64  t state of the d
14660 61 74 61 62 61 73 65 0a 66 69 6c 65 2c 20 61 6e  atabase.file, an
14670 64 20 73 69 6e 63 65 20 74 68 65 20 77 61 6c 2d  d since the wal-
14680 69 6e 64 65 78 20 69 73 20 61 20 74 72 61 6e 73  index is a trans
14690 69 65 6e 74 20 73 74 72 75 63 74 75 72 65 2c 20  ient structure, 
146a0 6e 6f 20 66 75 72 74 68 65 72 20 0a 69 6e 66 6f  no further .info
146b0 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68  rmation about th
146c0 65 20 66 6f 72 6d 61 74 20 6f 66 20 74 68 65 20  e format of the 
146d0 77 61 6c 2d 69 6e 64 65 78 20 77 69 6c 6c 20 62  wal-index will b
146e0 65 20 70 72 6f 76 69 64 65 64 20 68 65 72 65 2e  e provided here.
146f0 0a 43 6f 6d 70 6c 65 74 65 20 64 65 74 61 69 6c  .Complete detail
14700 73 20 6f 6e 20 74 68 65 20 66 6f 72 6d 61 74 20  s on the format 
14710 6f 66 20 74 68 65 20 77 61 6c 2d 69 6e 64 65 78  of the wal-index
14720 20 61 72 65 20 63 6f 6e 74 61 69 6e 65 64 20 77   are contained w
14730 69 74 68 69 6e 0a 63 6f 6d 6d 65 6e 74 73 20 69  ithin.comments i
14740 6e 20 53 51 4c 69 74 65 20 73 6f 75 72 63 65 20  n SQLite source 
14750 63 6f 64 65 2e 3c 2f 70 3e 0a                    code.</p>.