Documentation Source Text

Hex Artifact Content
Login

Artifact 8c61e1172e970d4c16dc87946105460dd011132b:


0000: 3c 74 69 74 6c 65 3e 44 61 74 61 62 61 73 65 20  <title>Database 
0010: 46 69 6c 65 20 46 6f 72 6d 61 74 3c 2f 74 69 74  File Format</tit
0020: 6c 65 3e 0a 3c 61 6c 74 2d 74 69 74 6c 65 3e 4f  le>.<alt-title>O
0030: 6e 2d 44 69 73 6b 20 46 6f 72 6d 61 74 3c 2f 61  n-Disk Format</a
0040: 6c 74 2d 74 69 74 6c 65 3e 0a 3c 74 63 6c 3e 68  lt-title>.<tcl>h
0050: 64 5f 6b 65 79 77 6f 72 64 73 20 7b 66 69 6c 65  d_keywords {file
0060: 20 66 6f 72 6d 61 74 7d 20 7b 73 65 63 6f 6e 64   format} {second
0070: 20 65 64 69 74 69 6f 6e 20 66 69 6c 65 20 66 6f   edition file fo
0080: 72 6d 61 74 20 64 6f 63 75 6d 65 6e 74 7d 3c 2f  rmat document}</
0090: 74 63 6c 3e 0a 0a 3c 74 61 62 6c 65 5f 6f 66 5f  tcl>..<table_of_
00a0: 63 6f 6e 74 65 6e 74 73 3e 0a 0a 3c 70 3e 54 68  contents>..<p>Th
00b0: 69 73 20 64 6f 63 75 6d 65 6e 74 20 64 65 73 63  is document desc
00c0: 72 69 62 65 73 20 61 6e 64 20 64 65 66 69 6e 65  ribes and define
00d0: 73 20 74 68 65 20 6f 6e 2d 64 69 73 6b 20 64 61  s the on-disk da
00e0: 74 61 62 61 73 65 20 66 69 6c 65 0a 66 6f 72 6d  tabase file.form
00f0: 61 74 20 75 73 65 64 20 62 79 20 53 51 4c 69 74  at used by SQLit
0100: 65 2e 3c 2f 70 3e 0a 0a 3c 68 31 3e 54 68 65 20  e.</p>..<h1>The 
0110: 44 61 74 61 62 61 73 65 20 46 69 6c 65 3c 2f 68  Database File</h
0120: 31 3e 0a 0a 3c 70 3e 54 68 65 20 63 6f 6d 70 6c  1>..<p>The compl
0130: 65 74 65 20 73 74 61 74 65 20 6f 66 20 61 6e 20  ete state of an 
0140: 53 51 4c 69 74 65 20 64 61 74 61 62 61 73 65 20  SQLite database 
0150: 69 73 20 75 73 75 61 6c 6c 79 0a 63 6f 6e 74 61  is usually.conta
0160: 69 6e 65 64 20 69 6e 20 61 20 73 69 6e 67 6c 65  ined in a single
0170: 20 66 69 6c 65 20 6f 6e 20 64 69 73 6b 20 63 61   file on disk ca
0180: 6c 6c 65 64 20 74 68 65 20 22 6d 61 69 6e 20 64  lled the "main d
0190: 61 74 61 62 61 73 65 20 66 69 6c 65 22 2e 3c 2f  atabase file".</
01a0: 70 3e 0a 0a 3c 70 3e 44 75 72 69 6e 67 20 61 20  p>..<p>During a 
01b0: 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 53 51 4c  transaction, SQL
01c0: 69 74 65 20 73 74 6f 72 65 73 20 61 64 64 69 74  ite stores addit
01d0: 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
01e0: 6e 20 0a 69 6e 20 61 20 73 65 63 6f 6e 64 20 66  n .in a second f
01f0: 69 6c 65 20 63 61 6c 6c 65 64 20 74 68 65 20 22  ile called the "
0200: 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c  rollback journal
0210: 22 2c 20 6f 72 20 69 66 20 53 51 4c 69 74 65 20  ", or if SQLite 
0220: 69 73 20 69 6e 0a 5b 57 41 4c 20 6d 6f 64 65 5d  is in.[WAL mode]
0230: 2c 20 61 20 77 72 69 74 65 2d 61 68 65 61 64 20  , a write-ahead 
0240: 6c 6f 67 20 66 69 6c 65 2e 0a 49 66 20 74 68 65  log file..If the
0250: 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 6f 72 0a   application or.
0260: 68 6f 73 74 20 63 6f 6d 70 75 74 65 72 20 63 72  host computer cr
0270: 61 73 68 65 73 20 62 65 66 6f 72 65 20 74 68 65  ashes before the
0280: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 63 6f 6d   transaction com
0290: 70 6c 65 74 65 73 2c 20 74 68 65 6e 20 74 68 65  pletes, then the
02a0: 20 72 6f 6c 6c 62 61 63 6b 0a 6a 6f 75 72 6e 61   rollback.journa
02b0: 6c 20 6f 72 20 77 72 69 74 65 2d 61 68 65 61 64  l or write-ahead
02c0: 20 6c 6f 67 20 63 6f 6e 74 61 69 6e 73 20 69 6e   log contains in
02d0: 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64  formation needed
02e0: 20 0a 74 6f 20 72 65 73 74 6f 72 65 20 74 68 65   .to restore the
02f0: 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
0300: 69 6c 65 20 74 6f 20 61 20 63 6f 6e 73 69 73 74  ile to a consist
0310: 65 6e 74 20 73 74 61 74 65 2e 20 20 57 68 65 6e  ent state.  When
0320: 20 61 20 72 6f 6c 6c 62 61 63 6b 20 0a 6a 6f 75   a rollback .jou
0330: 72 6e 61 6c 20 6f 72 20 77 72 69 74 65 2d 61 68  rnal or write-ah
0340: 65 61 64 20 6c 6f 67 20 63 6f 6e 74 61 69 6e 73  ead log contains
0350: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 63   information nec
0360: 65 73 73 61 72 79 20 66 6f 72 20 72 65 63 6f 76  essary for recov
0370: 65 72 69 6e 67 20 0a 74 68 65 20 73 74 61 74 65  ering .the state
0380: 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
0390: 2c 20 74 68 65 79 20 61 72 65 20 63 61 6c 6c 65  , they are calle
03a0: 64 20 61 20 22 68 6f 74 20 6a 6f 75 72 6e 61 6c  d a "hot journal
03b0: 22 20 6f 72 20 22 68 6f 74 20 57 41 4c 20 66 69  " or "hot WAL fi
03c0: 6c 65 22 2e 0a 48 6f 74 20 6a 6f 75 72 6e 61 6c  le"..Hot journal
03d0: 73 20 61 6e 64 20 57 41 4c 20 66 69 6c 65 73 20  s and WAL files 
03e0: 61 72 65 20 6f 6e 6c 79 20 61 20 66 61 63 74 6f  are only a facto
03f0: 72 20 64 75 72 69 6e 67 20 65 72 72 6f 72 20 72  r during error r
0400: 65 63 6f 76 65 72 79 0a 73 63 65 6e 61 72 69 6f  ecovery.scenario
0410: 73 20 61 6e 64 20 73 6f 20 61 72 65 20 75 6e 63  s and so are unc
0420: 6f 6d 6d 6f 6e 2c 20 62 75 74 20 74 68 65 79 20  ommon, but they 
0430: 61 72 65 20 70 61 72 74 20 6f 66 20 74 68 65 20  are part of the 
0440: 73 74 61 74 65 20 6f 66 20 61 6e 20 53 51 4c 69  state of an SQLi
0450: 74 65 0a 64 61 74 61 62 61 73 65 20 61 6e 64 20  te.database and 
0460: 73 6f 20 63 61 6e 6e 6f 74 20 62 65 20 69 67 6e  so cannot be ign
0470: 6f 72 65 64 2e 20 20 54 68 69 73 20 64 6f 63 75  ored.  This docu
0480: 6d 65 6e 74 20 64 65 66 69 6e 65 73 20 74 68 65  ment defines the
0490: 20 66 6f 72 6d 61 74 0a 6f 66 20 61 20 72 6f 6c   format.of a rol
04a0: 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 61 6e  lback journal an
04b0: 64 20 74 68 65 20 77 72 69 74 65 2d 61 68 65 61  d the write-ahea
04c0: 64 20 6c 6f 67 20 66 69 6c 65 2c 20 62 75 74 20  d log file, but 
04d0: 74 68 65 20 66 6f 63 75 73 20 69 73 0a 6f 6e 20  the focus is.on 
04e0: 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
04f0: 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 68 32  e file.</p>..<h2
0500: 3e 50 61 67 65 73 3c 2f 68 32 3e 0a 0a 3c 70 3e  >Pages</h2>..<p>
0510: 54 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  The main databas
0520: 65 20 66 69 6c 65 20 63 6f 6e 73 69 73 74 73 20  e file consists 
0530: 6f 66 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 70  of one or more p
0540: 61 67 65 73 2e 20 20 5e 54 68 65 20 73 69 7a 65  ages.  ^The size
0550: 20 6f 66 20 61 0a 70 61 67 65 20 69 73 20 61 20   of a.page is a 
0560: 70 6f 77 65 72 20 6f 66 20 74 77 6f 20 62 65 74  power of two bet
0570: 77 65 65 6e 20 35 31 32 20 61 6e 64 20 36 35 35  ween 512 and 655
0580: 33 36 20 69 6e 63 6c 75 73 69 76 65 2e 20 20 41  36 inclusive.  A
0590: 6c 6c 20 70 61 67 65 73 20 77 69 74 68 69 6e 0a  ll pages within.
05a0: 74 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73  the same databas
05b0: 65 20 61 72 65 20 74 68 65 20 73 61 6d 65 20 73  e are the same s
05c0: 69 7a 65 2e 20 20 5e 54 68 65 20 70 61 67 65 20  ize.  ^The page 
05d0: 73 69 7a 65 20 66 6f 72 20 61 20 64 61 74 61 62  size for a datab
05e0: 61 73 65 20 66 69 6c 65 0a 69 73 20 64 65 74 65  ase file.is dete
05f0: 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 32 2d  rmined by the 2-
0600: 62 79 74 65 20 69 6e 74 65 67 65 72 20 6c 6f 63  byte integer loc
0610: 61 74 65 64 20 61 74 20 61 6e 20 6f 66 66 73 65  ated at an offse
0620: 74 20 6f 66 0a 31 36 20 62 79 74 65 73 20 66 72  t of.16 bytes fr
0630: 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  om the beginning
0640: 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
0650: 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 50   file.</p>..<p>P
0660: 61 67 65 73 20 61 72 65 20 6e 75 6d 62 65 72 65  ages are numbere
0670: 64 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68  d beginning with
0680: 20 31 2e 20 20 54 68 65 20 6d 61 78 69 6d 75 6d   1.  The maximum
0690: 20 70 61 67 65 20 6e 75 6d 62 65 72 20 69 73 0a   page number is.
06a0: 32 31 34 37 34 38 33 36 34 36 20 28 32 3c 73 75  2147483646 (2<su
06b0: 70 3e 3c 73 6d 61 6c 6c 3e 33 31 3c 2f 73 6d 61  p><small>31</sma
06c0: 6c 6c 3e 3c 2f 73 75 70 3e 20 2d 20 32 29 2e 20  ll></sup> - 2). 
06d0: 20 54 68 65 20 6d 69 6e 69 6d 75 6d 20 73 69 7a   The minimum siz
06e0: 65 0a 53 51 4c 69 74 65 20 64 61 74 61 62 61 73  e.SQLite databas
06f0: 65 20 69 73 20 61 20 73 69 6e 67 6c 65 20 35 31  e is a single 51
0700: 32 2d 62 79 74 65 20 70 61 67 65 2e 0a 54 68 65  2-byte page..The
0710: 20 6d 61 78 69 6d 75 6d 20 73 69 7a 65 20 64 61   maximum size da
0720: 74 61 62 61 73 65 20 77 6f 75 6c 64 20 62 65 20  tabase would be 
0730: 32 31 34 37 34 38 33 36 34 36 20 70 61 67 65 73  2147483646 pages
0740: 20 61 74 20 36 35 35 33 36 20 62 79 74 65 73 20   at 65536 bytes 
0750: 70 65 72 0a 70 61 67 65 20 6f 72 20 31 34 30 2c  per.page or 140,
0760: 37 33 37 2c 34 38 38 2c 32 32 34 2c 32 35 36 20  737,488,224,256 
0770: 62 79 74 65 73 20 28 61 62 6f 75 74 20 31 34 30  bytes (about 140
0780: 20 74 65 72 61 62 79 74 65 73 29 2e 20 20 55 73   terabytes).  Us
0790: 75 61 6c 6c 79 20 53 51 4c 69 74 65 20 77 69 6c  ually SQLite wil
07a0: 6c 0a 68 69 74 20 74 68 65 20 6d 61 78 69 6d 75  l.hit the maximu
07b0: 6d 20 66 69 6c 65 20 73 69 7a 65 20 6c 69 6d 69  m file size limi
07c0: 74 20 6f 66 20 74 68 65 20 75 6e 64 65 72 6c 79  t of the underly
07d0: 69 6e 67 20 66 69 6c 65 73 79 73 74 65 6d 20 6f  ing filesystem o
07e0: 72 20 64 69 73 6b 0a 68 61 72 64 77 61 72 65 20  r disk.hardware 
07f0: 6c 6f 6e 67 20 62 65 66 6f 72 65 20 69 74 20 68  long before it h
0800: 69 74 73 20 69 74 73 20 6f 77 6e 20 69 6e 74 65  its its own inte
0810: 72 6e 61 6c 20 73 69 7a 65 20 6c 69 6d 69 74 2e  rnal size limit.
0820: 3c 2f 70 3e 0a 0a 3c 70 3e 49 6e 20 63 6f 6d 6d  </p>..<p>In comm
0830: 6f 6e 20 75 73 65 2c 20 53 51 4c 69 74 65 20 64  on use, SQLite d
0840: 61 74 61 62 61 73 65 73 20 74 65 6e 64 20 74 6f  atabases tend to
0850: 20 72 61 6e 67 65 20 69 6e 20 73 69 7a 65 20 66   range in size f
0860: 72 6f 6d 20 61 20 66 65 77 20 6b 69 6c 6f 62 79  rom a few kiloby
0870: 74 65 73 0a 74 6f 20 61 20 66 65 77 20 67 69 67  tes.to a few gig
0880: 61 62 79 74 65 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e  abytes.</p>..<p>
0890: 41 74 20 61 6e 79 20 70 6f 69 6e 74 20 69 6e 20  At any point in 
08a0: 74 69 6d 65 2c 20 65 76 65 72 79 20 70 61 67 65  time, every page
08b0: 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74   in the main dat
08c0: 61 62 61 73 65 20 68 61 73 20 61 20 73 69 6e 67  abase has a sing
08d0: 6c 65 0a 75 73 65 20 77 68 69 63 68 20 69 73 20  le.use which is 
08e0: 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  one of the follo
08f0: 77 69 6e 67 3a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 54  wing:.<ul>.<li>T
0900: 68 65 20 6c 6f 63 6b 2d 62 79 74 65 20 70 61 67  he lock-byte pag
0910: 65 0a 3c 6c 69 3e 41 20 66 72 65 65 6c 69 73 74  e.<li>A freelist
0920: 20 70 61 67 65 0a 3c 75 6c 3e 0a 3c 6c 69 3e 41   page.<ul>.<li>A
0930: 20 66 72 65 65 6c 69 73 74 20 74 72 75 6e 6b 20   freelist trunk 
0940: 70 61 67 65 0a 3c 6c 69 3e 41 20 66 72 65 65 6c  page.<li>A freel
0950: 69 73 74 20 6c 65 61 66 20 70 61 67 65 0a 3c 2f  ist leaf page.</
0960: 75 6c 3e 0a 3c 6c 69 3e 41 20 62 2d 74 72 65 65  ul>.<li>A b-tree
0970: 20 70 61 67 65 0a 3c 75 6c 3e 0a 3c 6c 69 3e 41   page.<ul>.<li>A
0980: 20 74 61 62 6c 65 20 62 2d 74 72 65 65 20 69 6e   table b-tree in
0990: 74 65 72 69 6f 72 20 70 61 67 65 0a 3c 6c 69 3e  terior page.<li>
09a0: 41 20 74 61 62 6c 65 20 62 2d 74 72 65 65 20 6c  A table b-tree l
09b0: 65 61 66 20 70 61 67 65 0a 3c 6c 69 3e 41 6e 20  eaf page.<li>An 
09c0: 69 6e 64 65 78 20 62 2d 74 72 65 65 20 69 6e 74  index b-tree int
09d0: 65 72 69 6f 72 20 70 61 67 65 0a 3c 6c 69 3e 41  erior page.<li>A
09e0: 6e 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20 6c  n index b-tree l
09f0: 65 61 66 20 70 61 67 65 0a 3c 2f 75 6c 3e 0a 3c  eaf page.</ul>.<
0a00: 6c 69 3e 41 20 70 61 79 6c 6f 61 64 20 6f 76 65  li>A payload ove
0a10: 72 66 6c 6f 77 20 70 61 67 65 0a 3c 6c 69 3e 41  rflow page.<li>A
0a20: 20 70 6f 69 6e 74 65 72 20 6d 61 70 20 70 61 67   pointer map pag
0a30: 65 0a 3c 2f 75 6c 3e 0a 3c 2f 70 3e 0a 0a 3c 70  e.</ul>.</p>..<p
0a40: 3e 5e 41 6c 6c 20 72 65 61 64 73 20 66 72 6f 6d  >^All reads from
0a50: 20 61 6e 64 20 77 72 69 74 65 73 20 74 6f 20 74   and writes to t
0a60: 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
0a70: 20 66 69 6c 65 20 62 65 67 69 6e 20 61 74 20 61   file begin at a
0a80: 20 70 61 67 65 0a 62 6f 75 6e 64 61 72 79 20 61   page.boundary a
0a90: 6e 64 20 61 6c 6c 20 77 72 69 74 65 73 20 61 72  nd all writes ar
0aa0: 65 20 61 6e 20 69 6e 74 65 67 65 72 20 6e 75 6d  e an integer num
0ab0: 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20  ber of pages in 
0ac0: 73 69 7a 65 2e 20 20 5e 52 65 61 64 73 0a 61 72  size.  ^Reads.ar
0ad0: 65 20 61 6c 73 6f 20 75 73 75 61 6c 6c 79 20 61  e also usually a
0ae0: 6e 20 69 6e 74 65 67 65 72 20 6e 75 6d 62 65 72  n integer number
0af0: 20 6f 66 20 70 61 67 65 73 20 69 6e 20 73 69 7a   of pages in siz
0b00: 65 2c 20 77 69 74 68 20 74 68 65 20 6f 6e 65 20  e, with the one 
0b10: 65 78 63 65 70 74 69 6f 6e 0a 74 68 61 74 20 77  exception.that w
0b20: 68 65 6e 20 74 68 65 20 64 61 74 61 62 61 73 65  hen the database
0b30: 20 69 73 20 66 69 72 73 74 20 6f 70 65 6e 65 64   is first opened
0b40: 2c 20 74 68 65 20 66 69 72 73 74 20 31 30 30 20  , the first 100 
0b50: 62 79 74 65 73 20 6f 66 20 74 68 65 0a 64 61 74  bytes of the.dat
0b60: 61 62 61 73 65 20 66 69 6c 65 20 28 74 68 65 20  abase file (the 
0b70: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 68 65  database file he
0b80: 61 64 65 72 29 20 61 72 65 20 72 65 61 64 20 61  ader) are read a
0b90: 73 20 61 20 73 75 62 2d 70 61 67 65 20 73 69 7a  s a sub-page siz
0ba0: 65 20 75 6e 69 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e  e unit.</p>..<p>
0bb0: 5e 42 65 66 6f 72 65 20 61 6e 79 20 69 6e 66 6f  ^Before any info
0bc0: 72 6d 61 74 69 6f 6e 2d 62 65 61 72 69 6e 67 20  rmation-bearing 
0bd0: 70 61 67 65 20 6f 66 20 74 68 65 20 64 61 74 61  page of the data
0be0: 62 61 73 65 20 69 73 20 6d 6f 64 69 66 69 65 64  base is modified
0bf0: 2c 20 0a 74 68 65 20 6f 72 69 67 69 6e 61 6c 20  , .the original 
0c00: 75 6e 6d 6f 64 69 66 69 65 64 20 63 6f 6e 74 65  unmodified conte
0c10: 6e 74 20 6f 66 20 74 68 61 74 20 70 61 67 65 20  nt of that page 
0c20: 69 73 20 77 72 69 74 74 65 6e 20 69 6e 74 6f 20  is written into 
0c30: 74 68 65 20 0a 72 6f 6c 6c 62 61 63 6b 20 6a 6f  the .rollback jo
0c40: 75 72 6e 61 6c 2e 20 20 49 66 20 61 20 74 72 61  urnal.  If a tra
0c50: 6e 73 61 63 74 69 6f 6e 20 69 73 20 69 6e 74 65  nsaction is inte
0c60: 72 72 75 70 74 65 64 20 61 6e 64 20 6e 65 65 64  rrupted and need
0c70: 73 20 74 6f 20 62 65 20 0a 72 6f 6c 6c 65 64 20  s to be .rolled 
0c80: 62 61 63 6b 2c 20 74 68 65 20 72 6f 6c 6c 62 61  back, the rollba
0c90: 63 6b 20 6a 6f 75 72 6e 61 6c 20 63 61 6e 20 74  ck journal can t
0ca0: 68 65 6e 20 62 65 20 75 73 65 64 20 74 6f 20 72  hen be used to r
0cb0: 65 73 74 6f 72 65 20 74 68 65 0a 64 61 74 61 62  estore the.datab
0cc0: 61 73 65 20 74 6f 20 69 74 73 20 6f 72 69 67 69  ase to its origi
0cd0: 6e 61 6c 20 73 74 61 74 65 2e 20 20 5e 46 72 65  nal state.  ^Fre
0ce0: 65 6c 69 73 74 20 6c 65 61 66 20 70 61 67 65 73  elist leaf pages
0cf0: 20 62 65 61 72 20 6e 6f 0a 69 6e 66 6f 72 6d 61   bear no.informa
0d00: 74 69 6f 6e 20 74 68 61 74 20 77 6f 75 6c 64 20  tion that would 
0d10: 6e 65 65 64 20 74 6f 20 62 65 20 72 65 73 74 6f  need to be resto
0d20: 72 65 64 20 6f 6e 20 61 20 72 6f 6c 6c 62 61 63  red on a rollbac
0d30: 6b 20 61 6e 64 20 73 6f 20 74 68 65 79 0a 61 72  k and so they.ar
0d40: 65 20 6e 6f 74 20 77 72 69 74 74 65 6e 20 74 6f  e not written to
0d50: 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20 70 72 69   the journal pri
0d60: 6f 72 20 74 6f 20 6d 6f 64 69 66 69 63 61 74 69  or to modificati
0d70: 6f 6e 2c 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a  on, in order to.
0d80: 72 65 64 75 63 65 20 64 69 73 6b 20 49 2f 4f 2e  reduce disk I/O.
0d90: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  </p>..<tcl>hd_fr
0da0: 61 67 6d 65 6e 74 20 64 61 74 61 62 61 73 65 5f  agment database_
0db0: 68 65 61 64 65 72 20 7b 64 61 74 61 62 61 73 65  header {database
0dc0: 20 68 65 61 64 65 72 7d 3c 2f 74 63 6c 3e 0a 3c   header}</tcl>.<
0dd0: 68 32 3e 54 68 65 20 44 61 74 61 62 61 73 65 20  h2>The Database 
0de0: 48 65 61 64 65 72 3c 2f 68 32 3e 0a 0a 3c 70 3e  Header</h2>..<p>
0df0: 54 68 65 20 66 69 72 73 74 20 31 30 30 20 62 79  The first 100 by
0e00: 74 65 73 20 6f 66 20 74 68 65 20 64 61 74 61 62  tes of the datab
0e10: 61 73 65 20 66 69 6c 65 20 63 6f 6d 70 72 69 73  ase file compris
0e20: 65 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  e the database f
0e30: 69 6c 65 20 0a 68 65 61 64 65 72 2e 20 20 54 68  ile .header.  Th
0e40: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
0e50: 68 65 61 64 65 72 20 69 73 20 64 69 76 69 64 65  header is divide
0e60: 64 20 69 6e 74 6f 20 66 69 65 6c 64 73 20 61 73  d into fields as
0e70: 20 73 68 6f 77 6e 20 62 79 0a 74 68 65 20 74 61   shown by.the ta
0e80: 62 6c 65 20 62 65 6c 6f 77 2e 20 20 41 6c 6c 20  ble below.  All 
0e90: 6d 75 6c 74 69 62 79 74 65 20 66 69 65 6c 64 73  multibyte fields
0ea0: 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
0eb0: 20 66 69 6c 65 20 68 65 61 64 65 72 20 61 72 65   file header are
0ec0: 0a 73 74 6f 72 65 64 20 77 69 74 68 20 74 68 65  .stored with the
0ed0: 20 6d 6f 73 74 20 73 69 67 6e 69 66 69 63 61 6e   most significan
0ee0: 74 20 62 79 74 65 20 66 69 72 73 74 20 28 62 69  t byte first (bi
0ef0: 67 2d 65 6e 64 69 61 6e 29 2e 3c 2f 70 3e 0a 0a  g-endian).</p>..
0f00: 3c 63 65 6e 74 65 72 3e 0a 3c 69 3e 44 61 74 61  <center>.<i>Data
0f10: 62 61 73 65 20 48 65 61 64 65 72 20 46 6f 72 6d  base Header Form
0f20: 61 74 3c 2f 69 3e 3c 62 72 3e 0a 3c 74 61 62 6c  at</i><br>.<tabl
0f30: 65 20 77 69 64 74 68 3d 22 38 30 25 22 20 62 6f  e width="80%" bo
0f40: 72 64 65 72 3d 31 3e 0a 3c 74 72 3e 3c 74 68 3e  rder=1>.<tr><th>
0f50: 4f 66 66 73 65 74 3c 74 68 3e 53 69 7a 65 3c 74  Offset<th>Size<t
0f60: 68 3e 44 65 73 63 72 69 70 74 69 6f 6e 0a 3c 74  h>Description.<t
0f70: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
0f80: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 30 3c   align=center>0<
0f90: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
0fa0: 69 67 6e 3d 63 65 6e 74 65 72 3e 31 36 3c 74 64  ign=center>16<td
0fb0: 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 54 68 65   align=left>.The
0fc0: 20 68 65 61 64 65 72 20 73 74 72 69 6e 67 3a 20   header string: 
0fd0: 22 53 51 4c 69 74 65 20 66 6f 72 6d 61 74 20 33  "SQLite format 3
0fe0: 5c 30 30 30 22 0a 3c 74 72 3e 3c 74 64 20 76 61  \000".<tr><td va
0ff0: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
1000: 65 6e 74 65 72 3e 31 36 3c 74 64 20 76 61 6c 69  enter>16<td vali
1010: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
1020: 74 65 72 3e 32 3c 74 64 20 61 6c 69 67 6e 3d 6c  ter>2<td align=l
1030: 65 66 74 3e 0a 54 68 65 20 64 61 74 61 62 61 73  eft>.The databas
1040: 65 20 70 61 67 65 20 73 69 7a 65 20 69 6e 20 62  e page size in b
1050: 79 74 65 73 2e 20 20 4d 75 73 74 20 62 65 20 61  ytes.  Must be a
1060: 20 70 6f 77 65 72 20 6f 66 20 74 77 6f 20 62 65   power of two be
1070: 74 77 65 65 6e 20 35 31 32 0a 61 6e 64 20 33 32  tween 512.and 32
1080: 37 36 38 20 69 6e 63 6c 75 73 69 76 65 2c 20 6f  768 inclusive, o
1090: 72 20 74 68 65 20 76 61 6c 75 65 20 31 20 72 65  r the value 1 re
10a0: 70 72 65 73 65 6e 74 69 6e 67 20 61 20 70 61 67  presenting a pag
10b0: 65 20 73 69 7a 65 20 6f 66 20 36 35 35 33 36 2e  e size of 65536.
10c0: 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d  .<tr><td valign=
10d0: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
10e0: 3e 31 38 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  >18<td valign=to
10f0: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31  p align=center>1
1100: 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a  <td align=left>.
1110: 46 69 6c 65 20 66 6f 72 6d 61 74 20 77 72 69 74  File format writ
1120: 65 20 76 65 72 73 69 6f 6e 2e 20 20 31 20 66 6f  e version.  1 fo
1130: 72 20 6c 65 67 61 63 79 3b 20 32 20 66 6f 72 20  r legacy; 2 for 
1140: 5b 57 41 4c 5d 2e 0a 3c 74 72 3e 3c 74 64 20 76  [WAL]..<tr><td v
1150: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
1160: 63 65 6e 74 65 72 3e 31 39 3c 74 64 20 76 61 6c  center>19<td val
1170: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
1180: 6e 74 65 72 3e 31 3c 74 64 20 61 6c 69 67 6e 3d  nter>1<td align=
1190: 6c 65 66 74 3e 0a 46 69 6c 65 20 66 6f 72 6d 61  left>.File forma
11a0: 74 20 72 65 61 64 20 76 65 72 73 69 6f 6e 2e 20  t read version. 
11b0: 20 31 20 66 6f 72 20 6c 65 67 61 63 79 3b 20 32   1 for legacy; 2
11c0: 20 66 6f 72 20 5b 57 41 4c 5d 2e 0a 3c 74 72 3e   for [WAL]..<tr>
11d0: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
11e0: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32 30 3c 74  lign=center>20<t
11f0: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
1200: 67 6e 3d 63 65 6e 74 65 72 3e 31 3c 74 64 20 61  gn=center>1<td a
1210: 6c 69 67 6e 3d 6c 65 66 74 3e 0a 42 79 74 65 73  lign=left>.Bytes
1220: 20 6f 66 20 75 6e 75 73 65 64 20 22 72 65 73 65   of unused "rese
1230: 72 76 65 64 22 20 73 70 61 63 65 20 61 74 20 74  rved" space at t
1240: 68 65 20 65 6e 64 20 6f 66 20 65 61 63 68 20 70  he end of each p
1250: 61 67 65 2e 20 20 55 73 75 61 6c 6c 79 20 30 2e  age.  Usually 0.
1260: 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d  .<tr><td valign=
1270: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
1280: 3e 32 31 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  >21<td valign=to
1290: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31  p align=center>1
12a0: 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a  <td align=left>.
12b0: 4d 61 78 69 6d 75 6d 20 65 6d 62 65 64 64 65 64  Maximum embedded
12c0: 20 70 61 79 6c 6f 61 64 20 66 72 61 63 74 69 6f   payload fractio
12d0: 6e 2e 20 20 4d 75 73 74 20 62 65 20 36 34 2e 0a  n.  Must be 64..
12e0: 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74  <tr><td valign=t
12f0: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
1300: 32 32 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  22<td valign=top
1310: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 3c   align=center>1<
1320: 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 4d  td align=left>.M
1330: 69 6e 69 6d 75 6d 20 65 6d 62 65 64 64 65 64 20  inimum embedded 
1340: 70 61 79 6c 6f 61 64 20 66 72 61 63 74 69 6f 6e  payload fraction
1350: 2e 20 20 4d 75 73 74 20 62 65 20 33 32 2e 0a 3c  .  Must be 32..<
1360: 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
1370: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32  p align=center>2
1380: 33 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  3<td valign=top 
1390: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 3c 74  align=center>1<t
13a0: 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 4c 65  d align=left>.Le
13b0: 61 66 20 70 61 79 6c 6f 61 64 20 66 72 61 63 74  af payload fract
13c0: 69 6f 6e 2e 20 20 4d 75 73 74 20 62 65 20 33 32  ion.  Must be 32
13d0: 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  ..<tr><td valign
13e0: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
13f0: 72 3e 32 34 3c 74 64 20 76 61 6c 69 67 6e 3d 74  r>24<td valign=t
1400: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
1410: 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e  4<td align=left>
1420: 0a 46 69 6c 65 20 63 68 61 6e 67 65 20 63 6f 75  .File change cou
1430: 6e 74 65 72 2e 0a 3c 74 72 3e 3c 74 64 20 76 61  nter..<tr><td va
1440: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
1450: 65 6e 74 65 72 3e 32 38 3c 74 64 20 76 61 6c 69  enter>28<td vali
1460: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
1470: 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c  ter>4<td align=l
1480: 65 66 74 3e 0a 53 69 7a 65 20 6f 66 20 74 68 65  eft>.Size of the
1490: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
14a0: 6e 20 70 61 67 65 73 2e 20 20 54 68 65 20 22 69  n pages.  The "i
14b0: 6e 2d 68 65 61 64 65 72 20 64 61 74 61 62 61 73  n-header databas
14c0: 65 20 73 69 7a 65 22 2e 0a 3c 74 72 3e 3c 74 64  e size"..<tr><td
14d0: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
14e0: 6e 3d 63 65 6e 74 65 72 3e 33 32 3c 74 64 20 76  n=center>32<td v
14f0: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
1500: 63 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69 67  center>4<td alig
1510: 6e 3d 6c 65 66 74 3e 0a 50 61 67 65 20 6e 75 6d  n=left>.Page num
1520: 62 65 72 20 6f 66 20 74 68 65 20 66 69 72 73 74  ber of the first
1530: 20 66 72 65 65 6c 69 73 74 20 74 72 75 6e 6b 20   freelist trunk 
1540: 70 61 67 65 2e 0a 3c 74 72 3e 3c 74 64 20 76 61  page..<tr><td va
1550: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
1560: 65 6e 74 65 72 3e 33 36 3c 74 64 20 76 61 6c 69  enter>36<td vali
1570: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
1580: 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c  ter>4<td align=l
1590: 65 66 74 3e 0a 54 6f 74 61 6c 20 6e 75 6d 62 65  eft>.Total numbe
15a0: 72 20 6f 66 20 66 72 65 65 6c 69 73 74 20 70 61  r of freelist pa
15b0: 67 65 73 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c  ges..<tr><td val
15c0: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
15d0: 6e 74 65 72 3e 34 30 3c 74 64 20 76 61 6c 69 67  nter>40<td valig
15e0: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
15f0: 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65  er>4<td align=le
1600: 66 74 3e 0a 54 68 65 20 73 63 68 65 6d 61 20 63  ft>.The schema c
1610: 6f 6f 6b 69 65 2e 0a 3c 74 72 3e 3c 74 64 20 76  ookie..<tr><td v
1620: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
1630: 63 65 6e 74 65 72 3e 34 34 3c 74 64 20 76 61 6c  center>44<td val
1640: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
1650: 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d  nter>4<td align=
1660: 6c 65 66 74 3e 0a 54 68 65 20 73 63 68 65 6d 61  left>.The schema
1670: 20 66 6f 72 6d 61 74 20 6e 75 6d 62 65 72 2e 20   format number. 
1680: 20 53 75 70 70 6f 72 74 65 64 20 73 63 68 65 6d   Supported schem
1690: 61 20 66 6f 72 6d 61 74 73 20 61 72 65 20 31 2c  a formats are 1,
16a0: 20 32 2c 20 33 2c 20 61 6e 64 20 34 2e 0a 3c 74   2, 3, and 4..<t
16b0: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
16c0: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 38   align=center>48
16d0: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
16e0: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 3c 74 64  lign=center>4<td
16f0: 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 44 65 66   align=left>.Def
1700: 61 75 6c 74 20 70 61 67 65 20 63 61 63 68 65 20  ault page cache 
1710: 73 69 7a 65 2e 0a 3c 74 72 3e 3c 74 64 20 76 61  size..<tr><td va
1720: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
1730: 65 6e 74 65 72 3e 35 32 3c 74 64 20 76 61 6c 69  enter>52<td vali
1740: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
1750: 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c  ter>4<td align=l
1760: 65 66 74 3e 0a 54 68 65 20 70 61 67 65 20 6e 75  eft>.The page nu
1770: 6d 62 65 72 20 6f 66 20 74 68 65 20 6c 61 72 67  mber of the larg
1780: 65 73 74 20 72 6f 6f 74 20 62 2d 74 72 65 65 20  est root b-tree 
1790: 70 61 67 65 20 77 68 65 6e 20 69 6e 20 61 75 74  page when in aut
17a0: 6f 2d 76 61 63 75 75 6d 20 6f 72 0a 69 6e 63 72  o-vacuum or.incr
17b0: 65 6d 65 6e 74 61 6c 2d 76 61 63 75 75 6d 20 6d  emental-vacuum m
17c0: 6f 64 65 73 2c 20 6f 72 20 7a 65 72 6f 20 6f 74  odes, or zero ot
17d0: 68 65 72 77 69 73 65 2e 0a 3c 74 72 3e 3c 74 64  herwise..<tr><td
17e0: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
17f0: 6e 3d 63 65 6e 74 65 72 3e 35 36 3c 74 64 20 76  n=center>56<td v
1800: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
1810: 63 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69 67  center>4<td alig
1820: 6e 3d 6c 65 66 74 3e 0a 54 68 65 20 64 61 74 61  n=left>.The data
1830: 62 61 73 65 20 74 65 78 74 20 65 6e 63 6f 64 69  base text encodi
1840: 6e 67 2e 20 20 41 20 76 61 6c 75 65 20 6f 66 20  ng.  A value of 
1850: 31 20 6d 65 61 6e 73 20 55 54 46 2d 38 2e 20 20  1 means UTF-8.  
1860: 41 20 76 61 6c 75 65 20 6f 66 20 32 0a 6d 65 61  A value of 2.mea
1870: 6e 73 20 55 54 46 2d 31 36 6c 65 2e 20 20 41 20  ns UTF-16le.  A 
1880: 76 61 6c 75 65 20 6f 66 20 33 20 6d 65 61 6e 73  value of 3 means
1890: 20 55 54 46 2d 31 36 62 65 2e 0a 3c 74 72 3e 3c   UTF-16be..<tr><
18a0: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
18b0: 69 67 6e 3d 63 65 6e 74 65 72 3e 36 30 3c 74 64  ign=center>60<td
18c0: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
18d0: 6e 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c  n=center>4<td al
18e0: 69 67 6e 3d 6c 65 66 74 3e 0a 54 68 65 20 22 75  ign=left>.The "u
18f0: 73 65 72 20 76 65 72 73 69 6f 6e 22 20 61 73 20  ser version" as 
1900: 72 65 61 64 20 61 6e 64 20 73 65 74 20 62 79 20  read and set by 
1910: 74 68 65 20 5b 75 73 65 72 5f 76 65 72 73 69 6f  the [user_versio
1920: 6e 20 70 72 61 67 6d 61 5d 2e 0a 3c 74 72 3e 3c  n pragma]..<tr><
1930: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
1940: 69 67 6e 3d 63 65 6e 74 65 72 3e 36 34 3c 74 64  ign=center>64<td
1950: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
1960: 6e 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c  n=center>4<td al
1970: 69 67 6e 3d 6c 65 66 74 3e 0a 54 72 75 65 20 28  ign=left>.True (
1980: 6e 6f 6e 2d 7a 65 72 6f 29 20 66 6f 72 20 69 6e  non-zero) for in
1990: 63 72 65 6d 65 6e 74 61 6c 2d 76 61 63 75 75 6d  cremental-vacuum
19a0: 20 6d 6f 64 65 2e 20 20 46 61 6c 73 65 20 28 7a   mode.  False (z
19b0: 65 72 6f 29 20 6f 74 68 65 72 77 69 73 65 2e 0a  ero) otherwise..
19c0: 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74  <tr><td valign=t
19d0: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
19e0: 36 38 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  68<td valign=top
19f0: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 3c   align=center>4<
1a00: 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 54  td align=left>.T
1a10: 68 65 20 22 41 70 70 6c 69 63 61 74 69 6f 6e 20  he "Application 
1a20: 49 44 22 20 73 65 74 20 62 79 20 5b 50 52 41 47  ID" set by [PRAG
1a30: 4d 41 20 61 70 70 6c 69 63 61 74 69 6f 6e 5f 69  MA application_i
1a40: 64 5d 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  d]..<tr><td vali
1a50: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
1a60: 74 65 72 3e 37 32 3c 74 64 20 76 61 6c 69 67 6e  ter>72<td valign
1a70: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
1a80: 72 3e 32 30 3c 74 64 20 61 6c 69 67 6e 3d 6c 65  r>20<td align=le
1a90: 66 74 3e 0a 52 65 73 65 72 76 65 64 20 66 6f 72  ft>.Reserved for
1aa0: 20 65 78 70 61 6e 73 69 6f 6e 2e 20 20 4d 75 73   expansion.  Mus
1ab0: 74 20 62 65 20 7a 65 72 6f 2e 0a 3c 74 72 3e 3c  t be zero..<tr><
1ac0: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
1ad0: 69 67 6e 3d 63 65 6e 74 65 72 3e 39 32 3c 74 64  ign=center>92<td
1ae0: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
1af0: 6e 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c  n=center>4<td al
1b00: 69 67 6e 3d 6c 65 66 74 3e 0a 54 68 65 20 5b 76  ign=left>.The [v
1b10: 65 72 73 69 6f 6e 2d 76 61 6c 69 64 2d 66 6f 72  ersion-valid-for
1b20: 20 6e 75 6d 62 65 72 5d 2e 0a 3c 74 72 3e 3c 74   number]..<tr><t
1b30: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
1b40: 67 6e 3d 63 65 6e 74 65 72 3e 39 36 3c 74 64 20  gn=center>96<td 
1b50: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
1b60: 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69  =center>4<td ali
1b70: 67 6e 3d 6c 65 66 74 3e 0a 5b 53 51 4c 49 54 45  gn=left>.[SQLITE
1b80: 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42 45 52 5d  _VERSION_NUMBER]
1b90: 0a 3c 2f 74 61 62 6c 65 3e 3c 2f 63 65 6e 74 65  .</table></cente
1ba0: 72 3e 0a 0a 3c 68 33 3e 4d 61 67 69 63 20 48 65  r>..<h3>Magic He
1bb0: 61 64 65 72 20 53 74 72 69 6e 67 3c 2f 68 33 3e  ader String</h3>
1bc0: 0a 0a 3c 70 3e 5e 45 76 65 72 79 20 76 61 6c 69  ..<p>^Every vali
1bd0: 64 20 53 51 4c 69 74 65 20 64 61 74 61 62 61 73  d SQLite databas
1be0: 65 20 66 69 6c 65 20 62 65 67 69 6e 73 20 77 69  e file begins wi
1bf0: 74 68 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  th the following
1c00: 20 31 36 20 62 79 74 65 73 20 0a 28 69 6e 20 68   16 bytes .(in h
1c10: 65 78 29 3a 20 35 33 20 35 31 20 34 63 20 36 39  ex): 53 51 4c 69
1c20: 20 37 34 20 36 35 20 32 30 20 36 36 20 36 66 20   74 65 20 66 6f 
1c30: 37 32 20 36 64 20 36 31 20 37 34 20 32 30 20 33  72 6d 61 74 20 3
1c40: 33 20 30 30 2e 20 20 54 68 69 73 20 62 79 74 65  3 00.  This byte
1c50: 20 73 65 71 75 65 6e 63 65 0a 63 6f 72 72 65 73   sequence.corres
1c60: 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 55 54 46  ponds to the UTF
1c70: 2d 38 20 73 74 72 69 6e 67 20 22 53 51 4c 69 74  -8 string "SQLit
1c80: 65 20 66 6f 72 6d 61 74 20 33 22 20 69 6e 63 6c  e format 3" incl
1c90: 75 64 69 6e 67 20 74 68 65 20 6e 75 6c 0a 74 65  uding the nul.te
1ca0: 72 6d 69 6e 61 74 6f 72 20 63 68 61 72 61 63 74  rminator charact
1cb0: 65 72 20 61 74 20 74 68 65 20 65 6e 64 2e 3c 2f  er at the end.</
1cc0: 70 3e 0a 0a 3c 68 33 3e 50 61 67 65 20 53 69 7a  p>..<h3>Page Siz
1cd0: 65 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 74  e</h3>..<p>The t
1ce0: 77 6f 2d 62 79 74 65 20 76 61 6c 75 65 20 62 65  wo-byte value be
1cf0: 67 69 6e 6e 69 6e 67 20 61 74 20 6f 66 66 73 65  ginning at offse
1d00: 74 20 31 36 20 64 65 74 65 72 6d 69 6e 65 73 20  t 16 determines 
1d10: 74 68 65 20 70 61 67 65 20 73 69 7a 65 20 6f 66  the page size of
1d20: 20 0a 74 68 65 20 64 61 74 61 62 61 73 65 2e 20   .the database. 
1d30: 20 46 6f 72 20 53 51 4c 69 74 65 20 76 65 72 73   For SQLite vers
1d40: 69 6f 6e 73 20 33 2e 37 2e 30 2e 31 20 61 6e 64  ions 3.7.0.1 and
1d50: 20 65 61 72 6c 69 65 72 2c 20 74 68 69 73 20 76   earlier, this v
1d60: 61 6c 75 65 20 69 73 20 0a 69 6e 74 65 72 70 72  alue is .interpr
1d70: 65 74 65 64 20 61 73 20 61 20 62 69 67 2d 65 6e  eted as a big-en
1d80: 64 69 61 6e 20 69 6e 74 65 67 65 72 20 61 6e 64  dian integer and
1d90: 20 6d 75 73 74 20 62 65 20 61 20 70 6f 77 65 72   must be a power
1da0: 20 6f 66 20 74 77 6f 20 62 65 74 77 65 65 6e 0a   of two between.
1db0: 35 31 32 20 61 6e 64 20 33 32 37 36 38 2c 20 69  512 and 32768, i
1dc0: 6e 63 6c 75 73 69 76 65 2e 20 20 42 65 67 69 6e  nclusive.  Begin
1dd0: 6e 69 6e 67 20 77 69 74 68 20 53 51 4c 69 74 65  ning with SQLite
1de0: 20 5b 76 65 72 73 69 6f 6e 20 33 2e 37 2e 31 5d   [version 3.7.1]
1df0: 0a 28 5b 64 61 74 65 6f 66 3a 33 2e 37 2e 31 5d  .([dateof:3.7.1]
1e00: 29 2c 20 61 20 70 61 67 65 0a 73 69 7a 65 20 6f  ), a page.size o
1e10: 66 20 36 35 35 33 36 20 62 79 74 65 73 20 69 73  f 65536 bytes is
1e20: 20 73 75 70 70 6f 72 74 65 64 2e 20 20 54 68 65   supported.  The
1e30: 20 76 61 6c 75 65 20 36 35 35 33 36 20 77 69 6c   value 65536 wil
1e40: 6c 20 6e 6f 74 20 66 69 74 20 69 6e 20 61 0a 74  l not fit in a.t
1e50: 77 6f 2d 62 79 74 65 20 69 6e 74 65 67 65 72 2c  wo-byte integer,
1e60: 20 73 6f 20 74 6f 20 73 70 65 63 69 66 79 20 61   so to specify a
1e70: 20 36 35 35 33 36 2d 62 79 74 65 20 70 61 67 65   65536-byte page
1e80: 20 73 69 7a 65 2c 20 74 68 65 20 76 61 6c 75 65   size, the value
1e90: 0a 61 74 20 6f 66 66 73 65 74 20 31 36 20 69 73  .at offset 16 is
1ea0: 20 30 78 30 30 20 30 78 30 31 2e 0a 54 68 69 73   0x00 0x01..This
1eb0: 20 76 61 6c 75 65 20 63 61 6e 20 62 65 20 69 6e   value can be in
1ec0: 74 65 72 70 72 65 74 65 64 20 61 73 20 61 20 62  terpreted as a b
1ed0: 69 67 2d 65 6e 64 69 61 6e 0a 31 20 61 6e 64 20  ig-endian.1 and 
1ee0: 74 68 6f 75 67 68 74 20 6f 66 20 69 73 20 61 73  thought of is as
1ef0: 20 61 20 6d 61 67 69 63 20 6e 75 6d 62 65 72 20   a magic number 
1f00: 74 6f 20 72 65 70 72 65 73 65 6e 74 20 74 68 65  to represent the
1f10: 20 36 35 35 33 36 20 70 61 67 65 20 73 69 7a 65   65536 page size
1f20: 2e 0a 4f 72 20 6f 6e 65 20 63 61 6e 20 76 69 65  ..Or one can vie
1f30: 77 20 74 68 65 20 74 77 6f 2d 62 79 74 65 20 66  w the two-byte f
1f40: 69 65 6c 64 20 61 73 20 61 20 6c 69 74 74 6c 65  ield as a little
1f50: 20 65 6e 64 69 61 6e 20 6e 75 6d 62 65 72 20 61   endian number a
1f60: 6e 64 20 73 61 79 0a 74 68 61 74 20 69 74 20 72  nd say.that it r
1f70: 65 70 72 65 73 65 6e 74 73 20 74 68 65 20 70 61  epresents the pa
1f80: 67 65 20 73 69 7a 65 20 64 69 76 69 64 65 64 20  ge size divided 
1f90: 62 79 20 32 35 36 2e 20 20 54 68 65 73 65 20 74  by 256.  These t
1fa0: 77 6f 20 0a 69 6e 74 65 72 70 72 65 74 61 74 69  wo .interpretati
1fb0: 6f 6e 73 20 6f 66 20 74 68 65 20 70 61 67 65 2d  ons of the page-
1fc0: 73 69 7a 65 20 66 69 65 6c 64 20 61 72 65 20 65  size field are e
1fd0: 71 75 69 76 61 6c 65 6e 74 2e 3c 2f 70 3e 0a 0a  quivalent.</p>..
1fe0: 3c 68 33 3e 46 69 6c 65 20 66 6f 72 6d 61 74 20  <h3>File format 
1ff0: 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 73 3c  version numbers<
2000: 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 66 69 6c  /h3>..<p>The fil
2010: 65 20 66 6f 72 6d 61 74 20 77 72 69 74 65 20 76  e format write v
2020: 65 72 73 69 6f 6e 20 61 6e 64 20 66 69 6c 65 20  ersion and file 
2030: 66 6f 72 6d 61 74 20 72 65 61 64 20 76 65 72 73  format read vers
2040: 69 6f 6e 20 61 74 20 6f 66 66 73 65 74 73 0a 31  ion at offsets.1
2050: 38 20 61 6e 64 20 31 39 20 61 72 65 20 69 6e 74  8 and 19 are int
2060: 65 6e 64 65 64 20 74 6f 20 61 6c 6c 6f 77 20 66  ended to allow f
2070: 6f 72 20 65 6e 68 61 6e 63 65 6d 65 6e 74 73 20  or enhancements 
2080: 6f 66 20 74 68 65 20 66 69 6c 65 20 66 6f 72 6d  of the file form
2090: 61 74 0a 69 6e 20 66 75 74 75 72 65 20 76 65 72  at.in future ver
20a0: 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 2e  sions of SQLite.
20b0: 20 20 49 6e 20 63 75 72 72 65 6e 74 20 76 65 72    In current ver
20c0: 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 2c  sions of SQLite,
20d0: 20 62 6f 74 68 20 6f 66 0a 74 68 65 73 65 20 76   both of.these v
20e0: 61 6c 75 65 73 20 61 72 65 20 31 20 66 6f 72 20  alues are 1 for 
20f0: 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c  rollback journal
2100: 6c 69 6e 67 20 6d 6f 64 65 73 20 61 6e 64 20 32  ling modes and 2
2110: 20 66 6f 72 20 5b 57 41 4c 5d 0a 6a 6f 75 72 6e   for [WAL].journ
2120: 61 6c 6c 69 6e 67 20 6d 6f 64 65 2e 20 20 49 66  alling mode.  If
2130: 20 61 20 76 65 72 73 69 6f 6e 20 6f 66 20 53 51   a version of SQ
2140: 4c 69 74 65 20 63 6f 64 65 64 20 74 6f 20 74 68  Lite coded to th
2150: 65 20 63 75 72 72 65 6e 74 0a 66 69 6c 65 20 66  e current.file f
2160: 6f 72 6d 61 74 20 73 70 65 63 69 66 69 63 61 74  ormat specificat
2170: 69 6f 6e 20 65 6e 63 6f 75 6e 74 65 72 73 20 61  ion encounters a
2180: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 77   database file w
2190: 68 65 72 65 20 74 68 65 20 72 65 61 64 0a 76 65  here the read.ve
21a0: 72 73 69 6f 6e 20 69 73 20 31 20 6f 72 20 32 20  rsion is 1 or 2 
21b0: 62 75 74 20 74 68 65 20 77 72 69 74 65 20 76 65  but the write ve
21c0: 72 73 69 6f 6e 20 69 73 20 67 72 65 61 74 65 72  rsion is greater
21d0: 20 74 68 61 6e 20 32 2c 20 74 68 65 6e 20 74 68   than 2, then th
21e0: 65 20 64 61 74 61 62 61 73 65 0a 66 69 6c 65 20  e database.file 
21f0: 6d 75 73 74 20 62 65 20 74 72 65 61 74 65 64 20  must be treated 
2200: 61 73 20 72 65 61 64 2d 6f 6e 6c 79 2e 20 20 49  as read-only.  I
2210: 66 20 61 20 64 61 74 61 62 61 73 65 20 66 69 6c  f a database fil
2220: 65 20 77 69 74 68 20 61 20 72 65 61 64 20 76 65  e with a read ve
2230: 72 73 69 6f 6e 0a 67 72 65 61 74 65 72 20 74 68  rsion.greater th
2240: 61 6e 20 32 20 69 73 20 65 6e 63 6f 75 6e 74 65  an 2 is encounte
2250: 72 65 64 2c 20 74 68 65 6e 20 74 68 61 74 20 64  red, then that d
2260: 61 74 61 62 61 73 65 20 63 61 6e 6e 6f 74 20 62  atabase cannot b
2270: 65 20 72 65 61 64 20 6f 72 20 77 72 69 74 74 65  e read or writte
2280: 6e 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 52 65 73 65  n.</p>..<h3>Rese
2290: 72 76 65 64 20 62 79 74 65 73 20 70 65 72 20 70  rved bytes per p
22a0: 61 67 65 3c 2f 68 33 3e 0a 0a 3c 70 3e 53 51 4c  age</h3>..<p>SQL
22b0: 69 74 65 20 68 61 73 20 74 68 65 20 61 62 69 6c  ite has the abil
22c0: 69 74 79 20 74 6f 20 73 65 74 20 61 73 69 64 65  ity to set aside
22d0: 20 61 20 73 6d 61 6c 6c 20 6e 75 6d 62 65 72 20   a small number 
22e0: 6f 66 20 65 78 74 72 61 20 62 79 74 65 73 20 61  of extra bytes a
22f0: 74 0a 74 68 65 20 65 6e 64 20 6f 66 20 65 76 65  t.the end of eve
2300: 72 79 20 70 61 67 65 20 66 6f 72 20 75 73 65 20  ry page for use 
2310: 62 79 20 65 78 74 65 6e 73 69 6f 6e 73 2e 20 20  by extensions.  
2320: 54 68 65 73 65 20 65 78 74 72 61 20 62 79 74 65  These extra byte
2330: 73 20 61 72 65 0a 75 73 65 64 2c 20 66 6f 72 20  s are.used, for 
2340: 65 78 61 6d 70 6c 65 2c 20 62 79 20 74 68 65 20  example, by the 
2350: 53 51 4c 69 74 65 20 45 6e 63 72 79 70 74 69 6f  SQLite Encryptio
2360: 6e 20 45 78 74 65 6e 73 69 6f 6e 20 74 6f 20 73  n Extension to s
2370: 74 6f 72 65 20 61 20 6e 6f 6e 63 65 0a 61 6e 64  tore a nonce.and
2380: 2f 6f 72 20 63 72 79 70 74 6f 67 72 61 70 68 69  /or cryptographi
2390: 63 20 63 68 65 63 6b 73 75 6d 20 61 73 73 6f 63  c checksum assoc
23a0: 69 61 74 65 64 20 77 69 74 68 20 65 61 63 68 20  iated with each 
23b0: 70 61 67 65 2e 20 20 5e 54 68 65 20 0a 22 72 65  page.  ^The ."re
23c0: 73 65 72 76 65 64 20 73 70 61 63 65 22 20 73 69  served space" si
23d0: 7a 65 20 69 6e 20 74 68 65 20 31 2d 62 79 74 65  ze in the 1-byte
23e0: 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73   integer at offs
23f0: 65 74 20 32 30 20 69 73 20 74 68 65 20 6e 75 6d  et 20 is the num
2400: 62 65 72 0a 6f 66 20 62 79 74 65 73 20 6f 66 20  ber.of bytes of 
2410: 73 70 61 63 65 20 61 74 20 74 68 65 20 65 6e 64  space at the end
2420: 20 6f 66 20 65 61 63 68 20 70 61 67 65 20 74 6f   of each page to
2430: 20 72 65 73 65 72 76 65 20 66 6f 72 20 65 78 74   reserve for ext
2440: 65 6e 73 69 6f 6e 73 2e 0a 54 68 69 73 20 76 61  ensions..This va
2450: 6c 75 65 20 69 73 20 75 73 75 61 6c 6c 79 20 30  lue is usually 0
2460: 2e 20 20 54 68 65 20 76 61 6c 75 65 20 63 61 6e  .  The value can
2470: 20 62 65 20 6f 64 64 2e 3c 2f 70 3e 0a 0a 3c 74   be odd.</p>..<t
2480: 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 75  cl>hd_fragment u
2490: 73 61 62 6c 65 5f 73 69 7a 65 20 7b 75 73 61 62  sable_size {usab
24a0: 6c 65 20 73 69 7a 65 7d 3c 2f 74 63 6c 3e 0a 3c  le size}</tcl>.<
24b0: 70 3e 54 68 65 20 22 75 73 61 62 6c 65 20 73 69  p>The "usable si
24c0: 7a 65 22 20 6f 66 20 61 20 64 61 74 61 62 61 73  ze" of a databas
24d0: 65 20 70 61 67 65 20 69 73 20 74 68 65 20 70 61  e page is the pa
24e0: 67 65 20 73 69 7a 65 20 73 70 65 63 69 66 79 20  ge size specify 
24f0: 62 79 20 74 68 65 0a 32 2d 62 79 74 65 20 69 6e  by the.2-byte in
2500: 74 65 67 65 72 20 61 74 20 6f 66 66 73 65 74 20  teger at offset 
2510: 31 36 20 69 6e 20 74 68 65 20 68 65 61 64 65 72  16 in the header
2520: 20 6c 65 73 73 20 74 68 65 20 22 72 65 73 65 72   less the "reser
2530: 76 65 64 22 20 73 70 61 63 65 20 73 69 7a 65 0a  ved" space size.
2540: 72 65 63 6f 72 64 65 64 20 69 6e 20 74 68 65 20  recorded in the 
2550: 31 2d 62 79 74 65 20 69 6e 74 65 67 65 72 20 61  1-byte integer a
2560: 74 20 6f 66 66 73 65 74 20 32 30 20 69 6e 20 74  t offset 20 in t
2570: 68 65 20 68 65 61 64 65 72 2e 20 20 54 68 65 20  he header.  The 
2580: 75 73 61 62 6c 65 0a 73 69 7a 65 20 6f 66 20 61  usable.size of a
2590: 20 70 61 67 65 20 6d 69 67 68 74 20 62 65 20 61   page might be a
25a0: 6e 20 6f 64 64 20 6e 75 6d 62 65 72 2e 20 20 5e  n odd number.  ^
25b0: 28 48 6f 77 65 76 65 72 2c 20 74 68 65 20 75 73  (However, the us
25c0: 61 62 6c 65 20 73 69 7a 65 20 69 73 20 6e 6f 74  able size is not
25d0: 0a 61 6c 6c 6f 77 65 64 20 74 6f 20 62 65 20 6c  .allowed to be l
25e0: 65 73 73 20 74 68 61 6e 20 34 38 30 2e 20 20 49  ess than 480.  I
25f0: 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69  n other words, i
2600: 66 20 74 68 65 20 70 61 67 65 20 73 69 7a 65 20  f the page size 
2610: 69 73 20 35 31 32 2c 0a 74 68 65 6e 20 74 68 65  is 512,.then the
2620: 20 72 65 73 65 72 76 65 64 20 73 70 61 63 65 20   reserved space 
2630: 73 69 7a 65 20 63 61 6e 6e 6f 74 20 65 78 63 65  size cannot exce
2640: 65 64 20 33 32 2e 29 5e 3c 2f 70 3e 0a 0a 3c 68  ed 32.)^</p>..<h
2650: 33 3e 50 61 79 6c 6f 61 64 20 66 72 61 63 74 69  3>Payload fracti
2660: 6f 6e 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68  ons</h3>..<p>^Th
2670: 65 20 6d 61 78 69 6d 75 6d 20 61 6e 64 20 6d 69  e maximum and mi
2680: 6e 69 6d 75 6d 20 65 6d 62 65 64 64 65 64 20 70  nimum embedded p
2690: 61 79 6c 6f 61 64 20 66 72 61 63 74 69 6f 6e 73  ayload fractions
26a0: 20 61 6e 64 20 74 68 65 20 6c 65 61 66 0a 70 61   and the leaf.pa
26b0: 79 6c 6f 61 64 20 66 72 61 63 74 69 6f 6e 20 76  yload fraction v
26c0: 61 6c 75 65 73 20 6d 75 73 74 20 62 65 20 36 34  alues must be 64
26d0: 2c 20 33 32 2c 20 61 6e 64 20 33 32 2e 20 20 54  , 32, and 32.  T
26e0: 68 65 73 65 20 76 61 6c 75 65 73 20 77 65 72 65  hese values were
26f0: 0a 6f 72 69 67 69 6e 61 6c 6c 79 20 69 6e 74 65  .originally inte
2700: 6e 64 65 64 20 74 6f 20 62 65 20 74 75 6e 61 62  nded to be tunab
2710: 6c 65 20 70 61 72 61 6d 65 74 65 72 73 20 74 68  le parameters th
2720: 61 74 20 63 6f 75 6c 64 20 62 65 20 75 73 65 64  at could be used
2730: 20 74 6f 0a 6d 6f 64 69 66 79 20 74 68 65 20 73   to.modify the s
2740: 74 6f 72 61 67 65 20 66 6f 72 6d 61 74 20 6f 66  torage format of
2750: 20 74 68 65 20 62 2d 74 72 65 65 20 61 6c 67 6f   the b-tree algo
2760: 72 69 74 68 6d 2e 20 20 48 6f 77 65 76 65 72 2c  rithm.  However,
2770: 20 74 68 61 74 0a 66 75 6e 63 74 69 6f 6e 61 6c   that.functional
2780: 69 74 79 20 69 73 20 6e 6f 74 20 73 75 70 70 6f  ity is not suppo
2790: 72 74 65 64 20 61 6e 64 20 74 68 65 72 65 20 61  rted and there a
27a0: 72 65 20 6e 6f 20 63 75 72 72 65 6e 74 20 70 6c  re no current pl
27b0: 61 6e 73 20 74 6f 20 61 64 64 0a 73 75 70 70 6f  ans to add.suppo
27c0: 72 74 20 69 6e 20 74 68 65 20 66 75 74 75 72 65  rt in the future
27d0: 2e 20 20 48 65 6e 63 65 2c 20 74 68 65 73 65 20  .  Hence, these 
27e0: 74 68 72 65 65 20 62 79 74 65 73 20 61 72 65 20  three bytes are 
27f0: 66 69 78 65 64 20 61 74 20 74 68 65 0a 76 61 6c  fixed at the.val
2800: 75 65 73 20 73 70 65 63 69 66 69 65 64 2e 3c 2f  ues specified.</
2810: 70 3e 0a 0a 3c 68 33 3e 46 69 6c 65 20 63 68 61  p>..<h3>File cha
2820: 6e 67 65 20 63 6f 75 6e 74 65 72 3c 2f 68 33 3e  nge counter</h3>
2830: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
2840: 6e 74 20 63 68 6e 67 63 74 72 20 7b 63 68 61 6e  nt chngctr {chan
2850: 67 65 20 63 6f 75 6e 74 65 72 7d 3c 2f 74 63 6c  ge counter}</tcl
2860: 3e 0a 3c 70 3e 5e 54 68 65 20 66 69 6c 65 20 63  >.<p>^The file c
2870: 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69 73  hange counter is
2880: 20 61 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e   a 4-byte big-en
2890: 64 69 61 6e 20 69 6e 74 65 67 65 72 20 61 74 0a  dian integer at.
28a0: 6f 66 66 73 65 74 20 32 34 20 74 68 61 74 20 69  offset 24 that i
28b0: 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 77 68  s incremented wh
28c0: 65 6e 65 76 65 72 20 74 68 65 20 64 61 74 61 62  enever the datab
28d0: 61 73 65 20 66 69 6c 65 20 69 73 20 75 6e 6c 6f  ase file is unlo
28e0: 63 6b 65 64 0a 61 66 74 65 72 20 68 61 76 69 6e  cked.after havin
28f0: 67 20 62 65 65 6e 20 6d 6f 64 69 66 69 65 64 2e  g been modified.
2900: 0a 57 68 65 6e 20 74 77 6f 20 6f 72 20 6d 6f 72  .When two or mor
2910: 65 20 70 72 6f 63 65 73 73 65 73 20 61 72 65 20  e processes are 
2920: 72 65 61 64 69 6e 67 20 74 68 65 20 73 61 6d 65  reading the same
2930: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2c 20   database file, 
2940: 65 61 63 68 20 0a 70 72 6f 63 65 73 73 20 63 61  each .process ca
2950: 6e 20 64 65 74 65 63 74 20 64 61 74 61 62 61 73  n detect databas
2960: 65 20 63 68 61 6e 67 65 73 20 66 72 6f 6d 20 6f  e changes from o
2970: 74 68 65 72 20 70 72 6f 63 65 73 73 65 73 20 62  ther processes b
2980: 79 20 6d 6f 6e 69 74 6f 72 69 6e 67 20 0a 74 68  y monitoring .th
2990: 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72  e change counter
29a0: 2e 0a 41 20 70 72 6f 63 65 73 73 20 77 69 6c 6c  ..A process will
29b0: 20 6e 6f 72 6d 61 6c 6c 79 20 77 61 6e 74 20 74   normally want t
29c0: 6f 20 66 6c 75 73 68 20 69 74 73 20 64 61 74 61  o flush its data
29d0: 62 61 73 65 20 70 61 67 65 20 63 61 63 68 65 20  base page cache 
29e0: 77 68 65 6e 0a 61 6e 6f 74 68 65 72 20 70 72 6f  when.another pro
29f0: 63 65 73 73 20 6d 6f 64 69 66 69 65 64 20 74 68  cess modified th
2a00: 65 20 64 61 74 61 62 61 73 65 2c 20 73 69 6e 63  e database, sinc
2a10: 65 20 74 68 65 20 63 61 63 68 65 20 68 61 73 20  e the cache has 
2a20: 62 65 63 6f 6d 65 20 73 74 61 6c 65 2e 0a 54 68  become stale..Th
2a30: 65 20 66 69 6c 65 20 63 68 61 6e 67 65 20 63 6f  e file change co
2a40: 75 6e 74 65 72 20 66 61 63 69 6c 69 74 61 74 65  unter facilitate
2a50: 73 20 74 68 69 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e  s this.</p>..<p>
2a60: 49 6e 20 57 41 4c 20 6d 6f 64 65 2c 20 63 68 61  In WAL mode, cha
2a70: 6e 67 65 73 20 74 6f 20 74 68 65 20 64 61 74 61  nges to the data
2a80: 62 61 73 65 20 61 72 65 20 64 65 74 65 63 74 65  base are detecte
2a90: 64 20 75 73 69 6e 67 20 74 68 65 20 77 61 6c 2d  d using the wal-
2aa0: 69 6e 64 65 78 0a 61 6e 64 20 73 6f 20 74 68 65  index.and so the
2ab0: 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20   change counter 
2ac0: 69 73 20 6e 6f 74 20 6e 65 65 64 65 64 2e 20 20  is not needed.  
2ad0: 48 65 6e 63 65 2c 20 74 68 65 20 63 68 61 6e 67  Hence, the chang
2ae0: 65 20 63 6f 75 6e 74 65 72 20 6d 69 67 68 74 0a  e counter might.
2af0: 6e 6f 74 20 62 65 20 69 6e 63 72 65 6d 65 6e 74  not be increment
2b00: 65 64 20 6f 6e 20 65 61 63 68 20 74 72 61 6e 73  ed on each trans
2b10: 61 63 74 69 6f 6e 20 69 6e 20 57 41 4c 20 6d 6f  action in WAL mo
2b20: 64 65 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 49 6e 2d  de.</p>..<h3>In-
2b30: 68 65 61 64 65 72 20 64 61 74 61 62 61 73 65 20  header database 
2b40: 73 69 7a 65 3c 2f 68 33 3e 0a 0a 3c 74 63 6c 3e  size</h3>..<tcl>
2b50: 68 64 5f 66 72 61 67 6d 65 6e 74 20 66 69 6c 65  hd_fragment file
2b60: 73 69 7a 65 20 7b 69 6e 2d 68 65 61 64 65 72 20  size {in-header 
2b70: 64 61 74 61 62 61 73 65 20 73 69 7a 65 7d 3c 2f  database size}</
2b80: 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20 34 2d 62  tcl>.<p>^The 4-b
2b90: 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69  yte big-endian i
2ba0: 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73 65 74  nteger at offset
2bb0: 20 32 38 20 69 6e 74 6f 20 74 68 65 20 68 65 61   28 into the hea
2bc0: 64 65 72 20 0a 73 74 6f 72 65 73 20 74 68 65 20  der .stores the 
2bd0: 73 69 7a 65 20 6f 66 20 74 68 65 20 64 61 74 61  size of the data
2be0: 62 61 73 65 20 66 69 6c 65 20 69 6e 20 70 61 67  base file in pag
2bf0: 65 73 2e 20 20 5e 49 66 20 74 68 69 73 20 69 6e  es.  ^If this in
2c00: 2d 68 65 61 64 65 72 0a 64 61 74 61 73 69 7a 65  -header.datasize
2c10: 20 73 69 7a 65 20 69 73 20 6e 6f 74 20 76 61 6c   size is not val
2c20: 69 64 20 28 73 65 65 20 74 68 65 20 6e 65 78 74  id (see the next
2c30: 20 70 61 72 61 67 72 61 70 68 29 2c 20 74 68 65   paragraph), the
2c40: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 0a  n the database .
2c50: 73 69 7a 65 20 69 73 20 63 6f 6d 70 75 74 65 64  size is computed
2c60: 20 62 79 20 6c 6f 6f 6b 69 6e 67 0a 61 74 20 74   by looking.at t
2c70: 68 65 20 61 63 74 75 61 6c 20 73 69 7a 65 20 6f  he actual size o
2c80: 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  f the database f
2c90: 69 6c 65 2e 20 4f 6c 64 65 72 20 76 65 72 73 69  ile. Older versi
2ca0: 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 0a 69 67  ons of SQLite.ig
2cb0: 6e 6f 72 65 64 20 74 68 65 20 69 6e 2d 68 65 61  nored the in-hea
2cc0: 64 65 72 20 64 61 74 61 62 61 73 65 20 73 69 7a  der database siz
2cd0: 65 20 61 6e 64 20 75 73 65 64 20 74 68 65 20 61  e and used the a
2ce0: 63 74 75 61 6c 20 66 69 6c 65 20 73 69 7a 65 0a  ctual file size.
2cf0: 65 78 63 6c 75 73 69 76 65 6c 79 2e 20 20 5e 4e  exclusively.  ^N
2d00: 65 77 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66  ewer versions of
2d10: 20 53 51 4c 69 74 65 20 75 73 65 20 74 68 65 20   SQLite use the 
2d20: 69 6e 2d 68 65 61 64 65 72 20 64 61 74 61 62 61  in-header databa
2d30: 73 65 0a 73 69 7a 65 20 69 66 20 69 74 20 69 73  se.size if it is
2d40: 20 61 76 61 69 6c 61 62 6c 65 20 62 75 74 20 66   available but f
2d50: 61 6c 6c 20 62 61 63 6b 20 74 6f 20 74 68 65 20  all back to the 
2d60: 61 63 74 75 61 6c 20 66 69 6c 65 20 73 69 7a 65  actual file size
2d70: 20 69 66 0a 74 68 65 20 69 6e 2d 68 65 61 64 65   if.the in-heade
2d80: 72 20 64 61 74 61 62 61 73 65 20 73 69 7a 65 20  r database size 
2d90: 69 73 20 6e 6f 74 20 76 61 6c 69 64 2e 3c 2f 70  is not valid.</p
2da0: 3e 0a 0a 3c 70 3e 5e 54 68 65 20 69 6e 2d 68 65  >..<p>^The in-he
2db0: 61 64 65 72 20 64 61 74 61 62 61 73 65 20 73 69  ader database si
2dc0: 7a 65 20 69 73 20 6f 6e 6c 79 20 63 6f 6e 73 69  ze is only consi
2dd0: 64 65 72 65 64 20 74 6f 20 62 65 20 76 61 6c 69  dered to be vali
2de0: 64 20 69 66 0a 69 74 20 69 73 20 6e 6f 6e 2d 7a  d if.it is non-z
2df0: 65 72 6f 20 61 6e 64 20 69 66 20 74 68 65 20 34  ero and if the 4
2e00: 2d 62 79 74 65 20 5b 63 68 61 6e 67 65 20 63 6f  -byte [change co
2e10: 75 6e 74 65 72 5d 20 61 74 20 6f 66 66 73 65 74  unter] at offset
2e20: 20 32 34 0a 65 78 61 63 74 6c 79 20 6d 61 74 63   24.exactly matc
2e30: 68 65 73 20 74 68 65 20 34 2d 62 79 74 65 20 5b  hes the 4-byte [
2e40: 76 65 72 73 69 6f 6e 2d 76 61 6c 69 64 2d 66 6f  version-valid-fo
2e50: 72 20 6e 75 6d 62 65 72 5d 20 61 74 20 6f 66 66  r number] at off
2e60: 73 65 74 20 39 32 2e 0a 5e 28 54 68 65 20 69 6e  set 92..^(The in
2e70: 2d 68 65 61 64 65 72 20 64 61 74 61 62 61 73 65  -header database
2e80: 20 73 69 7a 65 20 69 73 20 61 6c 77 61 79 73 20   size is always 
2e90: 76 61 6c 69 64 20 0a 77 68 65 6e 20 74 68 65 20  valid .when the 
2ea0: 64 61 74 61 62 61 73 65 20 69 73 20 6f 6e 6c 79  database is only
2eb0: 20 6d 6f 64 69 66 69 65 64 20 75 73 69 6e 67 20   modified using 
2ec0: 72 65 63 65 6e 74 20 76 65 72 73 69 6f 6e 73 20  recent versions 
2ed0: 6f 66 20 53 51 4c 69 74 65 0a 28 76 65 72 73 69  of SQLite.(versi
2ee0: 6f 6e 73 20 33 2e 37 2e 30 20 61 6e 64 20 6c 61  ons 3.7.0 and la
2ef0: 74 65 72 29 2e 29 5e 0a 49 66 20 61 20 6c 65 67  ter).)^.If a leg
2f00: 61 63 79 20 76 65 72 73 69 6f 6e 20 6f 66 20 53  acy version of S
2f10: 51 4c 69 74 65 20 77 72 69 74 65 73 20 74 6f 20  QLite writes to 
2f20: 74 68 65 20 64 61 74 61 62 61 73 65 2c 20 69 74  the database, it
2f30: 20 77 69 6c 6c 20 6e 6f 74 0a 6b 6e 6f 77 20 74   will not.know t
2f40: 6f 20 75 70 64 61 74 65 20 74 68 65 20 69 6e 2d  o update the in-
2f50: 68 65 61 64 65 72 20 64 61 74 61 62 61 73 65 20  header database 
2f60: 73 69 7a 65 20 61 6e 64 20 73 6f 20 74 68 65 20  size and so the 
2f70: 69 6e 2d 68 65 61 64 65 72 0a 64 61 74 61 62 61  in-header.databa
2f80: 73 65 20 73 69 7a 65 20 63 6f 75 6c 64 20 62 65  se size could be
2f90: 20 69 6e 63 6f 72 72 65 63 74 2e 20 20 42 75 74   incorrect.  But
2fa0: 20 6c 65 67 61 63 79 20 76 65 72 73 69 6f 6e 73   legacy versions
2fb0: 20 6f 66 20 53 51 4c 69 74 65 0a 77 69 6c 6c 20   of SQLite.will 
2fc0: 61 6c 73 6f 20 6c 65 61 76 65 20 74 68 65 20 76  also leave the v
2fd0: 65 72 73 69 6f 6e 2d 76 61 6c 69 64 2d 66 6f 72  ersion-valid-for
2fe0: 20 6e 75 6d 62 65 72 20 61 74 20 6f 66 66 73 65   number at offse
2ff0: 74 20 39 32 20 75 6e 63 68 61 6e 67 65 64 0a 73  t 92 unchanged.s
3000: 6f 20 69 74 20 77 69 6c 6c 20 6e 6f 74 20 6d 61  o it will not ma
3010: 74 63 68 20 74 68 65 20 63 68 61 6e 67 65 2d 63  tch the change-c
3020: 6f 75 6e 74 65 72 2e 20 20 48 65 6e 63 65 2c 20  ounter.  Hence, 
3030: 69 6e 76 61 6c 69 64 20 69 6e 2d 68 65 61 64 65  invalid in-heade
3040: 72 0a 64 61 74 61 62 61 73 65 20 73 69 7a 65 73  r.database sizes
3050: 20 63 61 6e 20 62 65 20 64 65 74 65 63 74 65 64   can be detected
3060: 20 28 61 6e 64 20 69 67 6e 6f 72 65 64 29 20 62   (and ignored) b
3070: 79 20 6f 62 73 65 72 76 69 6e 67 20 77 68 65 6e  y observing when
3080: 0a 74 68 65 20 63 68 61 6e 67 65 2d 63 6f 75 6e  .the change-coun
3090: 74 65 72 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74  ter does not mat
30a0: 63 68 20 74 68 65 20 76 65 72 73 69 6f 6e 2d 76  ch the version-v
30b0: 61 6c 69 64 2d 66 6f 72 20 6e 75 6d 62 65 72 2e  alid-for number.
30c0: 3c 2f 70 3e 0a 0a 3c 68 33 3e 46 72 65 65 20 70  </p>..<h3>Free p
30d0: 61 67 65 20 6c 69 73 74 3c 2f 68 33 3e 0a 0a 3c  age list</h3>..<
30e0: 70 3e 55 6e 75 73 65 64 20 70 61 67 65 73 20 69  p>Unused pages i
30f0: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  n the database f
3100: 69 6c 65 20 61 72 65 20 73 74 6f 72 65 64 20 6f  ile are stored o
3110: 6e 20 61 20 66 72 65 65 6c 69 73 74 2e 20 20 5e  n a freelist.  ^
3120: 54 68 65 0a 34 2d 62 79 74 65 20 62 69 67 2d 65  The.4-byte big-e
3130: 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20 61 74  ndian integer at
3140: 20 6f 66 66 73 65 74 20 33 32 20 73 74 6f 72 65   offset 32 store
3150: 73 20 74 68 65 20 70 61 67 65 20 6e 75 6d 62 65  s the page numbe
3160: 72 20 6f 66 0a 74 68 65 20 66 69 72 73 74 20 70  r of.the first p
3170: 61 67 65 20 6f 66 20 74 68 65 20 66 72 65 65 6c  age of the freel
3180: 69 73 74 2c 20 6f 72 20 7a 65 72 6f 20 69 66 20  ist, or zero if 
3190: 74 68 65 20 66 72 65 65 6c 69 73 74 20 69 73 20  the freelist is 
31a0: 65 6d 70 74 79 2e 0a 5e 54 68 65 20 34 2d 62 79  empty..^The 4-by
31b0: 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e  te big-endian in
31c0: 74 65 67 65 72 20 61 74 20 6f 66 66 73 65 74 20  teger at offset 
31d0: 33 36 20 73 74 6f 72 65 73 20 73 74 6f 72 65 73  36 stores stores
31e0: 20 74 68 65 20 74 6f 74 61 6c 20 0a 6e 75 6d 62   the total .numb
31f0: 65 72 20 6f 66 20 70 61 67 65 73 20 6f 6e 20 74  er of pages on t
3200: 68 65 20 66 72 65 65 6c 69 73 74 2e 3c 2f 70 3e  he freelist.</p>
3210: 0a 0a 3c 68 33 3e 53 63 68 65 6d 61 20 63 6f 6f  ..<h3>Schema coo
3220: 6b 69 65 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68  kie</h3>..<p>^Th
3230: 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20  e schema cookie 
3240: 69 73 20 61 20 34 2d 62 79 74 65 20 62 69 67 2d  is a 4-byte big-
3250: 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20 61  endian integer a
3260: 74 20 6f 66 66 73 65 74 20 34 30 0a 74 68 61 74  t offset 40.that
3270: 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
3280: 77 68 65 6e 65 76 65 72 20 74 68 65 20 64 61 74  whenever the dat
3290: 61 62 61 73 65 20 73 63 68 65 6d 61 20 63 68 61  abase schema cha
32a0: 6e 67 65 73 2e 20 20 41 20 0a 70 72 65 70 61 72  nges.  A .prepar
32b0: 65 64 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  ed statement is 
32c0: 63 6f 6d 70 69 6c 65 64 20 61 67 61 69 6e 73 74  compiled against
32d0: 20 61 20 73 70 65 63 69 66 69 63 20 76 65 72 73   a specific vers
32e0: 69 6f 6e 20 6f 66 20 74 68 65 0a 64 61 74 61 62  ion of the.datab
32f0: 61 73 65 20 73 63 68 65 6d 61 2e 20 20 57 68 65  ase schema.  Whe
3300: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  n the database s
3310: 63 68 65 6d 61 20 63 68 61 6e 67 65 73 2c 20 74  chema changes, t
3320: 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 6d 75 73  he statement.mus
3330: 74 20 62 65 20 72 65 70 72 65 70 61 72 65 64 2e  t be reprepared.
3340: 20 20 5e 57 68 65 6e 20 61 20 70 72 65 70 61 72    ^When a prepar
3350: 65 64 20 73 74 61 74 65 6d 65 6e 74 20 72 75 6e  ed statement run
3360: 73 2c 20 69 74 20 66 69 72 73 74 20 63 68 65 63  s, it first chec
3370: 6b 73 0a 74 68 65 20 73 63 68 65 6d 61 20 63 6f  ks.the schema co
3380: 6f 6b 69 65 20 74 6f 20 65 6e 73 75 72 65 20 74  okie to ensure t
3390: 68 65 20 76 61 6c 75 65 20 69 73 20 74 68 65 20  he value is the 
33a0: 73 61 6d 65 20 61 73 20 77 68 65 6e 20 74 68 65  same as when the
33b0: 20 73 74 61 74 65 6d 65 6e 74 0a 77 61 73 20 70   statement.was p
33c0: 72 65 70 61 72 65 64 20 61 6e 64 20 69 66 20 74  repared and if t
33d0: 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65  he schema cookie
33e0: 20 68 61 73 20 63 68 61 6e 67 65 64 2c 20 74 68   has changed, th
33f0: 65 20 73 74 61 74 65 6d 65 6e 74 20 65 69 74 68  e statement eith
3400: 65 72 0a 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  er.automatically
3410: 20 72 65 70 72 65 70 61 72 65 73 20 61 6e 64 20   reprepares and 
3420: 72 65 72 75 6e 73 20 6f 72 20 69 74 20 61 62 6f  reruns or it abo
3430: 72 74 73 20 77 69 74 68 20 61 6e 20 5b 53 51 4c  rts with an [SQL
3440: 49 54 45 5f 53 43 48 45 4d 41 5d 20 0a 65 72 72  ITE_SCHEMA] .err
3450: 6f 72 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  or.</p>..<tcl>hd
3460: 5f 66 72 61 67 6d 65 6e 74 20 7b 73 63 68 65 6d  _fragment {schem
3470: 61 66 6f 72 6d 61 74 7d 20 7b 73 63 68 65 6d 61  aformat} {schema
3480: 20 66 6f 72 6d 61 74 7d 20 7b 73 63 68 65 6d 61   format} {schema
3490: 20 66 6f 72 6d 61 74 20 6e 75 6d 62 65 72 7d 3c   format number}<
34a0: 2f 74 63 6c 3e 0a 3c 68 33 3e 53 63 68 65 6d 61  /tcl>.<h3>Schema
34b0: 20 66 6f 72 6d 61 74 20 6e 75 6d 62 65 72 3c 2f   format number</
34c0: 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 73 63 68 65  h3>..<p>The sche
34d0: 6d 61 20 66 6f 72 6d 61 74 20 6e 75 6d 62 65 72  ma format number
34e0: 20 69 73 20 61 20 34 2d 62 79 74 65 20 62 69 67   is a 4-byte big
34f0: 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20  -endian integer 
3500: 61 74 20 6f 66 66 73 65 74 20 34 34 2e 0a 54 68  at offset 44..Th
3510: 65 20 73 63 68 65 6d 61 20 66 6f 72 6d 61 74 20  e schema format 
3520: 6e 75 6d 62 65 72 20 69 73 20 73 69 6d 69 6c 61  number is simila
3530: 72 20 74 6f 20 74 68 65 20 66 69 6c 65 20 66 6f  r to the file fo
3540: 72 6d 61 74 20 72 65 61 64 20 61 6e 64 20 77 72  rmat read and wr
3550: 69 74 65 0a 76 65 72 73 69 6f 6e 20 6e 75 6d 62  ite.version numb
3560: 65 72 73 20 61 74 20 6f 66 66 73 65 74 73 20 31  ers at offsets 1
3570: 38 20 61 6e 64 20 31 39 20 65 78 63 65 70 74 20  8 and 19 except 
3580: 74 68 61 74 20 74 68 65 20 73 63 68 65 6d 61 20  that the schema 
3590: 66 6f 72 6d 61 74 20 6e 75 6d 62 65 72 0a 72 65  format number.re
35a0: 66 65 72 73 20 74 6f 20 74 68 65 20 68 69 67 68  fers to the high
35b0: 2d 6c 65 76 65 6c 20 53 51 4c 20 66 6f 72 6d 61  -level SQL forma
35c0: 74 74 69 6e 67 20 72 61 74 68 65 72 20 74 68 61  tting rather tha
35d0: 6e 20 74 68 65 20 6c 6f 77 2d 6c 65 76 65 6c 20  n the low-level 
35e0: 62 2d 74 72 65 65 0a 66 6f 72 6d 61 74 74 69 6e  b-tree.formattin
35f0: 67 2e 20 20 46 6f 75 72 20 73 63 68 65 6d 61 20  g.  Four schema 
3600: 66 6f 72 6d 61 74 20 6e 75 6d 62 65 72 73 20 61  format numbers a
3610: 72 65 20 63 75 72 72 65 6e 74 6c 79 20 64 65 66  re currently def
3620: 69 6e 65 64 3a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a  ined:</p>..<ol>.
3630: 3c 6c 69 20 76 61 6c 75 65 3d 31 3e 46 6f 72 6d  <li value=1>Form
3640: 61 74 20 31 20 69 73 20 75 6e 64 65 72 73 74 6f  at 1 is understo
3650: 6f 64 20 62 79 20 61 6c 6c 20 76 65 72 73 69 6f  od by all versio
3660: 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 62 61 63  ns of SQLite bac
3670: 6b 20 74 6f 0a 5b 76 65 72 73 69 6f 6e 20 33 2e  k to.[version 3.
3680: 30 2e 30 5d 20 28 5b 64 61 74 65 6f 66 3a 33 2e  0.0] ([dateof:3.
3690: 30 2e 30 5d 29 2e 3c 2f 6c 69 3e 0a 3c 6c 69 20  0.0]).</li>.<li 
36a0: 76 61 6c 75 65 3d 32 3e 46 6f 72 6d 61 74 20 32  value=2>Format 2
36b0: 20 61 64 64 73 20 74 68 65 20 61 62 69 6c 69 74   adds the abilit
36c0: 79 20 6f 66 20 72 6f 77 73 20 77 69 74 68 69 6e  y of rows within
36d0: 20 74 68 65 20 73 61 6d 65 20 74 61 62 6c 65 0a   the same table.
36e0: 74 6f 20 68 61 76 65 20 61 20 76 61 72 79 69 6e  to have a varyin
36f0: 67 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  g number of colu
3700: 6d 6e 73 2c 20 69 6e 20 6f 72 64 65 72 20 74 6f  mns, in order to
3710: 20 73 75 70 70 6f 72 74 20 74 68 65 0a 5b 41 4c   support the.[AL
3720: 54 45 52 20 54 41 42 4c 45 20 7c 20 41 4c 54 45  TER TABLE | ALTE
3730: 52 20 54 41 42 4c 45 20 2e 2e 2e 20 41 44 44 20  R TABLE ... ADD 
3740: 43 4f 4c 55 4d 4e 5d 20 66 75 6e 63 74 69 6f 6e  COLUMN] function
3750: 61 6c 69 74 79 2e 20 20 53 75 70 70 6f 72 74 20  ality.  Support 
3760: 66 6f 72 0a 72 65 61 64 69 6e 67 20 61 6e 64 20  for.reading and 
3770: 77 72 69 74 69 6e 67 20 66 6f 72 6d 61 74 20 32  writing format 2
3780: 20 77 61 73 20 61 64 64 65 64 20 69 6e 20 53 51   was added in SQ
3790: 4c 69 74 65 20 0a 5b 76 65 72 73 69 6f 6e 20 33  Lite .[version 3
37a0: 2e 31 2e 33 5d 20 6f 6e 20 5b 64 61 74 65 6f 66  .1.3] on [dateof
37b0: 3a 33 2e 31 2e 33 5d 2e 3c 2f 6c 69 3e 0a 3c 6c  :3.1.3].</li>.<l
37c0: 69 20 76 61 6c 75 65 3d 33 3e 46 6f 72 6d 61 74  i value=3>Format
37d0: 20 33 20 61 64 64 73 20 74 68 65 20 61 62 69 6c   3 adds the abil
37e0: 69 74 79 20 6f 66 20 65 78 74 72 61 20 63 6f 6c  ity of extra col
37f0: 75 6d 6e 73 20 61 64 64 65 64 20 62 79 0a 5b 41  umns added by.[A
3800: 4c 54 45 52 20 54 41 42 4c 45 20 7c 20 41 4c 54  LTER TABLE | ALT
3810: 45 52 20 54 41 42 4c 45 20 2e 2e 2e 20 41 44 44  ER TABLE ... ADD
3820: 20 43 4f 4c 55 4d 4e 5d 20 74 6f 20 68 61 76 65   COLUMN] to have
3830: 20 6e 6f 6e 2d 4e 55 4c 4c 20 64 65 66 61 75 6c   non-NULL defaul
3840: 74 0a 76 61 6c 75 65 73 2e 20 20 54 68 69 73 20  t.values.  This 
3850: 63 61 70 61 62 69 6c 69 74 79 20 77 61 73 20 61  capability was a
3860: 64 64 65 64 20 69 6e 20 53 51 4c 69 74 65 20 5b  dded in SQLite [
3870: 76 65 72 73 69 6f 6e 20 33 2e 31 2e 34 5d 0a 6f  version 3.1.4].o
3880: 6e 20 5b 64 61 74 65 6f 66 3a 33 2e 31 2e 34 5d  n [dateof:3.1.4]
3890: 2e 3c 2f 6c 69 3e 0a 3c 6c 69 20 76 61 6c 75 65  .</li>.<li value
38a0: 3d 34 3e 5e 46 6f 72 6d 61 74 20 34 20 63 61 75  =4>^Format 4 cau
38b0: 73 65 73 20 53 51 4c 69 74 65 20 74 6f 20 72 65  ses SQLite to re
38c0: 73 70 65 63 74 20 74 68 65 0a 5b 64 65 73 63 65  spect the.[desce
38d0: 6e 64 69 6e 67 20 69 6e 64 65 78 65 73 20 7c 20  nding indexes | 
38e0: 44 45 53 43 20 6b 65 79 77 6f 72 64 5d 20 6f 6e  DESC keyword] on
38f0: 0a 69 6e 64 65 78 20 64 65 63 6c 61 72 61 74 69  .index declarati
3900: 6f 6e 73 2e 20 20 28 5e 54 68 65 20 44 45 53 43  ons.  (^The DESC
3910: 20 6b 65 79 77 6f 72 64 20 69 73 20 69 67 6e 6f   keyword is igno
3920: 72 65 64 20 69 6e 20 69 6e 64 65 78 65 73 20 66  red in indexes f
3930: 6f 72 20 0a 66 6f 72 6d 61 74 73 20 31 2c 20 32  or .formats 1, 2
3940: 2c 20 61 6e 64 20 33 2e 29 0a 5e 46 6f 72 6d 61  , and 3.).^Forma
3950: 74 20 34 20 61 6c 73 6f 20 61 64 64 73 20 74 77  t 4 also adds tw
3960: 6f 20 6e 65 77 20 62 6f 6f 6c 65 61 6e 20 72 65  o new boolean re
3970: 63 6f 72 64 20 74 79 70 65 20 76 61 6c 75 65 73  cord type values
3980: 20 28 5b 73 65 72 69 61 6c 20 74 79 70 65 73 5d   ([serial types]
3990: 0a 38 20 61 6e 64 20 39 29 2e 20 20 53 75 70 70  .8 and 9).  Supp
39a0: 6f 72 74 20 66 6f 72 20 66 6f 72 6d 61 74 20 34  ort for format 4
39b0: 20 77 61 73 20 61 64 64 65 64 20 69 6e 20 53 51   was added in SQ
39c0: 4c 69 74 65 20 33 2e 33 2e 30 20 6f 6e 0a 32 30  Lite 3.3.0 on.20
39d0: 30 36 2d 30 31 2d 31 30 2e 3c 2f 6c 69 3e 0a 3c  06-01-10.</li>.<
39e0: 2f 6f 6c 3e 0a 0a 3c 70 3e 5e 4e 65 77 20 64 61  /ol>..<p>^New da
39f0: 74 61 62 61 73 65 20 66 69 6c 65 73 20 63 72 65  tabase files cre
3a00: 61 74 65 64 20 62 79 20 53 51 4c 69 74 65 20 75  ated by SQLite u
3a10: 73 65 20 66 6f 72 6d 61 74 20 34 20 62 79 20 64  se format 4 by d
3a20: 65 66 61 75 6c 74 2e 0a 5e 54 68 65 20 5b 6c 65  efault..^The [le
3a30: 67 61 63 79 5f 66 69 6c 65 5f 66 6f 72 6d 61 74  gacy_file_format
3a40: 20 70 72 61 67 6d 61 5d 20 63 61 6e 20 62 65 20   pragma] can be 
3a50: 75 73 65 64 20 74 6f 20 63 61 75 73 65 20 53 51  used to cause SQ
3a60: 4c 69 74 65 0a 74 6f 20 63 72 65 61 74 65 20 6e  Lite.to create n
3a70: 65 77 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ew database file
3a80: 73 20 75 73 69 6e 67 20 66 6f 72 6d 61 74 20 31  s using format 1
3a90: 2e 0a 54 68 65 20 66 6f 72 6d 61 74 20 76 65 72  ..The format ver
3aa0: 73 69 6f 6e 20 6e 75 6d 62 65 72 20 63 61 6e 20  sion number can 
3ab0: 62 65 20 6d 61 64 65 20 74 6f 20 64 65 66 61 75  be made to defau
3ac0: 6c 74 20 74 6f 20 31 20 69 6e 73 74 65 61 64 20  lt to 1 instead 
3ad0: 6f 66 20 34 20 62 79 0a 73 65 74 74 69 6e 67 20  of 4 by.setting 
3ae0: 5b 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f  [SQLITE_DEFAULT_
3af0: 46 49 4c 45 5f 46 4f 52 4d 41 54 5d 3d 31 20 61  FILE_FORMAT]=1 a
3b00: 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 2e 0a  t compile-time..
3b10: 3c 2f 70 3e 0a 0a 3c 68 33 3e 53 75 67 67 65 73  </p>..<h3>Sugges
3b20: 74 65 64 20 63 61 63 68 65 20 73 69 7a 65 3c 2f  ted cache size</
3b30: 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 34 2d 62 79  h3>..<p>The 4-by
3b40: 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 73 69  te big-endian si
3b50: 67 6e 65 64 20 69 6e 74 65 67 65 72 20 61 74 20  gned integer at 
3b60: 6f 66 66 73 65 74 20 34 38 20 69 73 20 74 68 65  offset 48 is the
3b70: 20 73 75 67 67 65 73 74 65 64 0a 63 61 63 68 65   suggested.cache
3b80: 20 73 69 7a 65 20 69 6e 20 70 61 67 65 73 20 66   size in pages f
3b90: 6f 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20  or the database 
3ba0: 66 69 6c 65 2e 20 20 54 68 65 20 76 61 6c 75 65  file.  The value
3bb0: 20 69 73 20 61 20 73 75 67 67 65 73 74 69 6f 6e   is a suggestion
3bc0: 0a 6f 6e 6c 79 20 61 6e 64 20 53 51 4c 69 74 65  .only and SQLite
3bd0: 20 69 73 20 75 6e 64 65 72 20 6e 6f 20 6f 62 6c   is under no obl
3be0: 69 67 61 74 69 6f 6e 20 74 6f 20 68 6f 6e 6f 72  igation to honor
3bf0: 20 69 74 2e 20 20 54 68 65 20 61 62 73 6f 6c 75   it.  The absolu
3c00: 74 65 20 76 61 6c 75 65 0a 6f 66 20 74 68 65 20  te value.of the 
3c10: 69 6e 74 65 67 65 72 20 69 73 20 75 73 65 64 20  integer is used 
3c20: 61 73 20 74 68 65 20 73 75 67 67 65 73 74 65 64  as the suggested
3c30: 20 73 69 7a 65 2e 20 20 54 68 65 20 73 75 67 67   size.  The sugg
3c40: 65 73 74 65 64 20 63 61 63 68 65 20 73 69 7a 65  ested cache size
3c50: 0a 63 61 6e 20 62 65 20 73 65 74 20 75 73 69 6e  .can be set usin
3c60: 67 20 74 68 65 20 5b 64 65 66 61 75 6c 74 5f 63  g the [default_c
3c70: 61 63 68 65 5f 73 69 7a 65 20 70 72 61 67 6d 61  ache_size pragma
3c80: 5d 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 49 6e 63 72  ].</p>..<h3>Incr
3c90: 65 6d 65 6e 74 61 6c 20 76 61 63 75 75 6d 20 73  emental vacuum s
3ca0: 65 74 74 69 6e 67 73 3c 2f 68 33 3e 0a 0a 3c 70  ettings</h3>..<p
3cb0: 3e 54 68 65 20 74 77 6f 20 34 2d 62 79 74 65 20  >The two 4-byte 
3cc0: 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67  big-endian integ
3cd0: 65 72 73 20 61 74 20 6f 66 66 73 65 74 73 20 35  ers at offsets 5
3ce0: 32 20 61 6e 64 20 36 34 20 61 72 65 20 75 73 65  2 and 64 are use
3cf0: 64 0a 74 6f 20 6d 61 6e 61 67 65 20 74 68 65 20  d.to manage the 
3d00: 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d 20 61 6e  [auto_vacuum] an
3d10: 64 20 5b 69 6e 63 72 65 6d 65 6e 74 61 6c 5f 76  d [incremental_v
3d20: 61 63 75 75 6d 5d 20 6d 6f 64 65 73 2e 20 20 5e  acuum] modes.  ^
3d30: 49 66 0a 74 68 65 20 69 6e 74 65 67 65 72 20 61  If.the integer a
3d40: 74 20 6f 66 66 73 65 74 20 35 32 20 69 73 20 7a  t offset 52 is z
3d50: 65 72 6f 20 74 68 65 6e 20 70 6f 69 6e 74 65 72  ero then pointer
3d60: 2d 6d 61 70 20 28 70 74 72 6d 61 70 29 20 70 61  -map (ptrmap) pa
3d70: 67 65 73 20 61 72 65 0a 6f 6d 69 74 74 65 64 20  ges are.omitted 
3d80: 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73  from the databas
3d90: 65 20 66 69 6c 65 20 61 6e 64 20 6e 65 69 74 68  e file and neith
3da0: 65 72 20 61 75 74 6f 5f 76 61 63 75 75 6d 20 6e  er auto_vacuum n
3db0: 6f 72 0a 69 6e 63 72 65 6d 65 6e 74 61 6c 5f 76  or.incremental_v
3dc0: 61 63 75 75 6d 20 61 72 65 20 73 75 70 70 6f 72  acuum are suppor
3dd0: 74 65 64 2e 20 20 5e 49 66 20 74 68 65 20 69 6e  ted.  ^If the in
3de0: 74 65 67 65 72 20 61 74 20 6f 66 66 73 65 74 20  teger at offset 
3df0: 35 32 20 69 73 0a 6e 6f 6e 2d 7a 65 72 6f 20 74  52 is.non-zero t
3e00: 68 65 6e 20 69 74 20 69 73 20 74 68 65 20 70 61  hen it is the pa
3e10: 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65  ge number of the
3e20: 20 6c 61 72 67 65 73 74 20 72 6f 6f 74 20 70 61   largest root pa
3e30: 67 65 20 69 6e 20 74 68 65 0a 64 61 74 61 62 61  ge in the.databa
3e40: 73 65 20 66 69 6c 65 2c 20 74 68 65 20 64 61 74  se file, the dat
3e50: 61 62 61 73 65 20 66 69 6c 65 20 77 69 6c 6c 20  abase file will 
3e60: 63 6f 6e 74 61 69 6e 20 70 74 72 6d 61 70 20 70  contain ptrmap p
3e70: 61 67 65 73 2c 20 61 6e 64 20 74 68 65 0a 6d 6f  ages, and the.mo
3e80: 64 65 20 6d 75 73 74 20 62 65 20 65 69 74 68 65  de must be eithe
3e90: 72 20 61 75 74 6f 5f 76 61 63 75 75 6d 20 6f 72  r auto_vacuum or
3ea0: 20 69 6e 63 72 65 6d 65 6e 74 61 6c 5f 76 61 63   incremental_vac
3eb0: 75 75 6d 2e 20 20 5e 49 6e 20 74 68 69 73 20 6c  uum.  ^In this l
3ec0: 61 74 74 65 72 0a 63 61 73 65 2c 20 74 68 65 20  atter.case, the 
3ed0: 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73 65  integer at offse
3ee0: 74 20 36 34 20 69 73 20 74 72 75 65 20 66 6f 72  t 64 is true for
3ef0: 20 69 6e 63 72 65 6d 65 6e 74 61 6c 5f 76 61 63   incremental_vac
3f00: 75 75 6d 20 61 6e 64 0a 66 61 6c 73 65 20 66 6f  uum and.false fo
3f10: 72 20 61 75 74 6f 5f 76 61 63 75 75 6d 2e 20 20  r auto_vacuum.  
3f20: 5e 49 66 20 74 68 65 20 69 6e 74 65 67 65 72 20  ^If the integer 
3f30: 61 74 20 6f 66 66 73 65 74 20 35 32 20 69 73 20  at offset 52 is 
3f40: 7a 65 72 6f 20 74 68 65 6e 0a 74 68 65 20 69 6e  zero then.the in
3f50: 74 65 67 65 72 20 61 74 20 6f 66 66 73 65 74 20  teger at offset 
3f60: 36 34 20 6d 75 73 74 20 61 6c 73 6f 20 62 65 20  64 must also be 
3f70: 7a 65 72 6f 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  zero.</p>..<tcl>
3f80: 68 64 5f 66 72 61 67 6d 65 6e 74 20 65 6e 63 20  hd_fragment enc 
3f90: 7b 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 7d 3c  {text encoding}<
3fa0: 2f 74 63 6c 3e 0a 3c 68 33 3e 54 65 78 74 20 65  /tcl>.<h3>Text e
3fb0: 6e 63 6f 64 69 6e 67 3c 2f 68 33 3e 0a 0a 3c 70  ncoding</h3>..<p
3fc0: 3e 5e 54 68 65 20 34 2d 62 79 74 65 20 62 69 67  >^The 4-byte big
3fd0: 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20  -endian integer 
3fe0: 61 74 20 6f 66 66 73 65 74 20 35 36 20 64 65 74  at offset 56 det
3ff0: 65 72 6d 69 6e 65 73 20 74 68 65 20 65 6e 63 6f  ermines the enco
4000: 64 69 6e 67 0a 75 73 65 64 20 66 6f 72 20 61 6c  ding.used for al
4010: 6c 20 74 65 78 74 20 73 74 72 69 6e 67 73 20 73  l text strings s
4020: 74 6f 72 65 64 20 69 6e 20 74 68 65 20 64 61 74  tored in the dat
4030: 61 62 61 73 65 2e 20 20 0a 5e 41 20 76 61 6c 75  abase.  .^A valu
4040: 65 20 6f 66 20 31 20 6d 65 61 6e 73 20 55 54 46  e of 1 means UTF
4050: 2d 38 2e 0a 5e 41 20 76 61 6c 75 65 20 6f 66 20  -8..^A value of 
4060: 32 20 6d 65 61 6e 73 20 55 54 46 2d 31 36 6c 65  2 means UTF-16le
4070: 2e 0a 5e 41 20 76 61 6c 75 65 20 6f 66 20 33 20  ..^A value of 3 
4080: 6d 65 61 6e 73 20 55 54 46 2d 31 36 62 65 2e 0a  means UTF-16be..
4090: 4e 6f 20 6f 74 68 65 72 20 76 61 6c 75 65 73 20  No other values 
40a0: 61 72 65 20 61 6c 6c 6f 77 65 64 2e 0a 5e 28 54  are allowed..^(T
40b0: 68 65 20 73 71 6c 69 74 65 33 2e 68 20 68 65 61  he sqlite3.h hea
40c0: 64 65 72 20 66 69 6c 65 20 64 65 66 69 6e 65 73  der file defines
40d0: 20 43 2d 70 72 65 70 72 6f 63 65 73 73 6f 72 20   C-preprocessor 
40e0: 6d 61 63 72 6f 73 20 53 51 4c 49 54 45 5f 55 54  macros SQLITE_UT
40f0: 46 38 20 61 73 20 31 2c 0a 53 51 4c 49 54 45 5f  F8 as 1,.SQLITE_
4100: 55 54 46 31 36 4c 45 20 61 73 20 32 2c 20 61 6e  UTF16LE as 2, an
4110: 64 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45  d SQLITE_UTF16BE
4120: 20 61 73 20 33 2c 20 74 6f 20 75 73 65 20 69 6e   as 3, to use in
4130: 20 70 6c 61 63 65 20 6f 66 0a 74 68 65 20 6e 75   place of.the nu
4140: 6d 65 72 69 63 20 63 6f 64 65 73 20 66 6f 72 20  meric codes for 
4150: 74 68 65 20 74 65 78 74 20 65 6e 63 6f 64 69 6e  the text encodin
4160: 67 2e 29 5e 3c 2f 70 3e 0a 0a 3c 68 33 3e 55 73  g.)^</p>..<h3>Us
4170: 65 72 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65  er version numbe
4180: 72 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68 65 20  r</h3>..<p>^The 
4190: 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61  4-byte big-endia
41a0: 6e 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66  n integer at off
41b0: 73 65 74 20 36 30 20 69 73 20 74 68 65 20 75 73  set 60 is the us
41c0: 65 72 20 76 65 72 73 69 6f 6e 20 77 68 69 63 68  er version which
41d0: 0a 69 73 20 73 65 74 20 61 6e 64 20 71 75 65 72  .is set and quer
41e0: 69 65 64 20 62 79 20 74 68 65 20 5b 75 73 65 72  ied by the [user
41f0: 5f 76 65 72 73 69 6f 6e 20 70 72 61 67 6d 61 5d  _version pragma]
4200: 2e 20 20 54 68 65 20 75 73 65 72 20 76 65 72 73  .  The user vers
4210: 69 6f 6e 20 69 73 0a 6e 6f 74 20 75 73 65 64 20  ion is.not used 
4220: 62 79 20 53 51 4c 69 74 65 2e 3c 2f 70 3e 0a 0a  by SQLite.</p>..
4230: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
4240: 20 61 70 70 69 64 20 7b 41 70 70 6c 69 63 61 74   appid {Applicat
4250: 69 6f 6e 20 49 44 7d 3c 2f 74 63 6c 3e 0a 3c 68  ion ID}</tcl>.<h
4260: 33 3e 41 70 70 6c 69 63 61 74 69 6f 6e 20 49 44  3>Application ID
4270: 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68 65 20 34  </h3>..<p>^The 4
4280: 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e  -byte big-endian
4290: 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73   integer at offs
42a0: 65 74 20 36 38 20 69 73 20 61 6e 20 22 41 70 70  et 68 is an "App
42b0: 6c 69 63 61 74 69 6f 6e 20 49 44 22 20 74 68 61  lication ID" tha
42c0: 74 0a 63 61 6e 20 62 65 20 73 65 74 20 62 79 20  t.can be set by 
42d0: 74 68 65 20 5b 50 52 41 47 4d 41 20 61 70 70 6c  the [PRAGMA appl
42e0: 69 63 61 74 69 6f 6e 5f 69 64 5d 20 63 6f 6d 6d  ication_id] comm
42f0: 61 6e 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  and in order to 
4300: 69 64 65 6e 74 69 66 79 20 74 68 65 0a 64 61 74  identify the.dat
4310: 61 62 61 73 65 20 61 73 20 62 65 6c 6f 6e 67 69  abase as belongi
4320: 6e 67 20 74 6f 20 6f 72 20 61 73 73 6f 63 69 61  ng to or associa
4330: 74 65 64 20 77 69 74 68 20 61 20 70 61 72 74 69  ted with a parti
4340: 63 75 6c 61 72 20 61 70 70 6c 69 63 61 74 69 6f  cular applicatio
4350: 6e 2e 0a 54 68 65 20 61 70 70 6c 69 63 61 74 69  n..The applicati
4360: 6f 6e 20 49 44 20 69 73 20 69 6e 74 65 6e 64 65  on ID is intende
4370: 64 20 66 6f 72 20 64 61 74 61 62 61 73 65 20 66  d for database f
4380: 69 6c 65 73 20 75 73 65 64 20 61 73 20 61 6e 0a  iles used as an.
4390: 5b 61 70 70 6c 69 63 61 74 69 6f 6e 20 66 69 6c  [application fil
43a0: 65 2d 66 6f 72 6d 61 74 5d 2e 20 20 54 68 65 20  e-format].  The 
43b0: 61 70 70 6c 69 63 61 74 69 6f 6e 20 49 44 20 63  application ID c
43c0: 61 6e 20 62 65 20 75 73 65 64 20 62 79 20 75 74  an be used by ut
43d0: 69 6c 69 74 69 65 73 20 0a 73 75 63 68 20 61 73  ilities .such as
43e0: 20 5b 68 74 74 70 3a 2f 2f 77 77 77 2e 64 61 72   [http://www.dar
43f0: 77 69 6e 73 79 73 2e 63 6f 6d 2f 66 69 6c 65 2f  winsys.com/file/
4400: 20 7c 20 66 69 6c 65 28 31 29 5d 20 74 6f 20 64   | file(1)] to d
4410: 65 74 65 72 6d 69 6e 65 20 74 68 65 20 73 70 65  etermine the spe
4420: 63 69 66 69 63 0a 66 69 6c 65 20 74 79 70 65 20  cific.file type 
4430: 72 61 74 68 65 72 20 74 68 61 6e 20 6a 75 73 74  rather than just
4440: 20 72 65 70 6f 72 74 69 6e 67 20 22 53 51 4c 69   reporting "SQLi
4450: 74 65 33 20 44 61 74 61 62 61 73 65 22 2e 20 20  te3 Database".  
4460: 41 20 6c 69 73 74 20 6f 66 0a 61 73 73 69 67 6e  A list of.assign
4470: 65 64 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 49  ed application I
4480: 44 73 20 63 61 6e 20 62 65 20 73 65 65 6e 20 62  Ds can be seen b
4490: 79 20 63 6f 6e 73 75 6c 74 69 6e 67 20 74 68 65  y consulting the
44a0: 0a 5b 68 74 74 70 3a 2f 2f 77 77 77 2e 73 71 6c  .[http://www.sql
44b0: 69 74 65 2e 6f 72 67 2f 73 72 63 2f 61 72 74 69  ite.org/src/arti
44c0: 66 61 63 74 3f 63 69 3d 74 72 75 6e 6b 26 66 69  fact?ci=trunk&fi
44d0: 6c 65 6e 61 6d 65 3d 6d 61 67 69 63 2e 74 78 74  lename=magic.txt
44e0: 7c 6d 61 67 69 63 2e 74 78 74 5d 0a 66 69 6c 65  |magic.txt].file
44f0: 20 69 6e 20 74 68 65 20 53 51 4c 69 74 65 20 73   in the SQLite s
4500: 6f 75 72 63 65 20 72 65 70 6f 73 69 74 6f 72 79  ource repository
4510: 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  .</p>..<tcl>hd_f
4520: 72 61 67 6d 65 6e 74 20 76 61 6c 69 64 66 6f 72  ragment validfor
4530: 20 7b 76 65 72 73 69 6f 6e 2d 76 61 6c 69 64 2d   {version-valid-
4540: 66 6f 72 20 6e 75 6d 62 65 72 7d 3c 2f 74 63 6c  for number}</tcl
4550: 3e 0a 3c 68 33 3e 57 72 69 74 65 20 6c 69 62 72  >.<h3>Write libr
4560: 61 72 79 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62  ary version numb
4570: 65 72 20 61 6e 64 20 76 65 72 73 69 6f 6e 2d 76  er and version-v
4580: 61 6c 69 64 2d 66 6f 72 20 6e 75 6d 62 65 72 3c  alid-for number<
4590: 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68 65 20 34 2d  /h3>..<p>^The 4-
45a0: 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20  byte big-endian 
45b0: 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73 65  integer at offse
45c0: 74 20 39 36 20 73 74 6f 72 65 73 20 74 68 65 20  t 96 stores the 
45d0: 0a 5b 53 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e  .[SQLITE_VERSION
45e0: 5f 4e 55 4d 42 45 52 5d 20 76 61 6c 75 65 20 66  _NUMBER] value f
45f0: 6f 72 20 74 68 65 20 53 51 4c 69 74 65 20 6c 69  or the SQLite li
4600: 62 72 61 72 79 20 74 68 61 74 20 6d 6f 73 74 0a  brary that most.
4610: 72 65 63 65 6e 74 6c 79 20 6d 6f 64 69 66 69 65  recently modifie
4620: 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  d the database f
4630: 69 6c 65 2e 20 20 5e 54 68 65 20 34 2d 62 79 74  ile.  ^The 4-byt
4640: 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74  e big-endian int
4650: 65 67 65 72 20 61 74 0a 6f 66 66 73 65 74 20 39  eger at.offset 9
4660: 32 20 69 73 20 74 68 65 20 76 61 6c 75 65 20 6f  2 is the value o
4670: 66 20 74 68 65 20 5b 63 68 61 6e 67 65 20 63 6f  f the [change co
4680: 75 6e 74 65 72 5d 20 77 68 65 6e 20 74 68 65 20  unter] when the 
4690: 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 0a 77  version number.w
46a0: 61 73 20 73 74 6f 72 65 64 2e 20 20 54 68 65 20  as stored.  The 
46b0: 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73 65  integer at offse
46c0: 74 20 39 32 20 69 6e 64 69 63 61 74 65 73 20 77  t 92 indicates w
46d0: 68 69 63 68 20 74 72 61 6e 73 61 63 74 69 6f 6e  hich transaction
46e0: 0a 74 68 65 20 76 65 72 73 69 6f 6e 20 6e 75 6d  .the version num
46f0: 62 65 72 20 69 73 20 76 61 6c 69 64 20 66 6f 72  ber is valid for
4700: 20 61 6e 64 20 69 73 20 73 6f 6d 65 74 69 6d 65   and is sometime
4710: 73 20 63 61 6c 6c 65 64 20 74 68 65 0a 22 76 65  s called the."ve
4720: 72 73 69 6f 6e 2d 76 61 6c 69 64 2d 66 6f 72 20  rsion-valid-for 
4730: 6e 75 6d 62 65 72 22 2e 0a 0a 3c 68 33 3e 48 65  number"...<h3>He
4740: 61 64 65 72 20 73 70 61 63 65 20 72 65 73 65 72  ader space reser
4750: 76 65 64 20 66 6f 72 20 65 78 70 61 6e 73 69 6f  ved for expansio
4760: 6e 3c 2f 68 33 3e 0a 0a 3c 70 3e 41 6c 6c 20 6f  n</h3>..<p>All o
4770: 74 68 65 72 20 62 79 74 65 73 20 6f 66 20 74 68  ther bytes of th
4780: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
4790: 68 65 61 64 65 72 20 61 72 65 20 72 65 73 65 72  header are reser
47a0: 76 65 64 20 66 6f 72 0a 66 75 74 75 72 65 20 65  ved for.future e
47b0: 78 70 61 6e 73 69 6f 6e 20 61 6e 64 20 6d 75 73  xpansion and mus
47c0: 74 20 62 65 20 73 65 74 20 74 6f 20 7a 65 72 6f  t be set to zero
47d0: 2e 3c 2f 70 3e 0a 0a 3c 68 32 3e 54 68 65 20 4c  .</p>..<h2>The L
47e0: 6f 63 6b 2d 42 79 74 65 20 50 61 67 65 3c 2f 68  ock-Byte Page</h
47f0: 32 3e 0a 0a 3c 70 3e 54 68 65 20 6c 6f 63 6b 2d  2>..<p>The lock-
4800: 62 79 74 65 20 70 61 67 65 20 69 73 20 74 68 65  byte page is the
4810: 20 73 69 6e 67 6c 65 20 70 61 67 65 20 6f 66 20   single page of 
4820: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
4830: 65 0a 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  e.that contains 
4840: 74 68 65 20 62 79 74 65 73 20 61 74 20 6f 66 66  the bytes at off
4850: 73 65 74 73 20 62 65 74 77 65 65 6e 20 31 30 37  sets between 107
4860: 33 37 34 31 38 32 34 20 61 6e 64 20 31 30 37 33  3741824 and 1073
4870: 37 34 32 33 33 35 2c 0a 69 6e 63 6c 75 73 69 76  742335,.inclusiv
4880: 65 2e 20 20 41 20 64 61 74 61 62 61 73 65 20 66  e.  A database f
4890: 69 6c 65 20 74 68 61 74 20 69 73 20 6c 65 73 73  ile that is less
48a0: 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74   than or equal t
48b0: 6f 20 31 30 37 33 37 34 31 38 32 34 20 62 79 74  o 1073741824 byt
48c0: 65 73 20 0a 69 6e 20 73 69 7a 65 20 63 6f 6e 74  es .in size cont
48d0: 61 69 6e 73 20 6e 6f 20 6c 6f 63 6b 2d 62 79 74  ains no lock-byt
48e0: 65 20 70 61 67 65 2e 20 20 41 20 64 61 74 61 62  e page.  A datab
48f0: 61 73 65 20 66 69 6c 65 20 6c 61 72 67 65 72 20  ase file larger 
4900: 74 68 61 6e 0a 31 30 37 33 37 34 31 38 32 34 20  than.1073741824 
4910: 63 6f 6e 74 61 69 6e 73 20 65 78 61 63 74 6c 79  contains exactly
4920: 20 6f 6e 65 20 6c 6f 63 6b 2d 62 79 74 65 20 70   one lock-byte p
4930: 61 67 65 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  age..</p>..<p>Th
4940: 65 20 6c 6f 63 6b 2d 62 79 74 65 20 70 61 67 65  e lock-byte page
4950: 20 69 73 20 73 65 74 20 61 73 69 64 65 20 66 6f   is set aside fo
4960: 72 20 75 73 65 20 62 79 20 74 68 65 20 6f 70 65  r use by the ope
4970: 72 61 74 69 6e 67 2d 73 79 73 74 65 6d 20 73 70  rating-system sp
4980: 65 63 69 66 69 63 0a 5b 56 46 53 5d 20 69 6d 70  ecific.[VFS] imp
4990: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 69 6e 20 69  lementation in i
49a0: 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 74 68 65 20  mplementing the 
49b0: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6c 6f  database file lo
49c0: 63 6b 69 6e 67 20 70 72 69 6d 69 74 69 76 65 73  cking primitives
49d0: 2e 0a 5e 53 51 4c 69 74 65 20 64 6f 65 73 20 6e  ..^SQLite does n
49e0: 6f 74 20 75 73 65 20 74 68 65 20 6c 6f 63 6b 2d  ot use the lock-
49f0: 62 79 74 65 20 70 61 67 65 2e 20 20 5e 54 68 65  byte page.  ^The
4a00: 20 53 51 4c 69 74 65 20 63 6f 72 65 20 0a 77 69   SQLite core .wi
4a10: 6c 6c 20 6e 65 76 65 72 20 72 65 61 64 20 6f 72  ll never read or
4a20: 20 77 72 69 74 65 20 74 68 65 20 6c 6f 63 6b 2d   write the lock-
4a30: 62 79 74 65 20 70 61 67 65 2c 0a 74 68 6f 75 67  byte page,.thoug
4a40: 68 20 6f 70 65 72 61 74 69 6e 67 2d 73 79 73 74  h operating-syst
4a50: 65 6d 20 73 70 65 63 69 66 69 63 20 5b 56 46 53  em specific [VFS
4a60: 5d 20 0a 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ] .implementatio
4a70: 6e 73 20 6d 61 79 20 63 68 6f 6f 73 65 20 74 6f  ns may choose to
4a80: 20 72 65 61 64 20 6f 72 20 77 72 69 74 65 20 62   read or write b
4a90: 79 74 65 73 20 6f 6e 20 74 68 65 20 6c 6f 63 6b  ytes on the lock
4aa0: 2d 62 79 74 65 20 0a 70 61 67 65 20 61 63 63 6f  -byte .page acco
4ab0: 72 64 69 6e 67 20 74 6f 20 74 68 65 20 0a 6e 65  rding to the .ne
4ac0: 65 64 73 20 61 6e 64 20 70 72 6f 63 6c 69 76 69  eds and proclivi
4ad0: 74 69 65 73 20 6f 66 20 74 68 65 20 75 6e 64 65  ties of the unde
4ae0: 72 6c 79 69 6e 67 20 73 79 73 74 65 6d 2e 20 20  rlying system.  
4af0: 54 68 65 20 75 6e 69 78 20 61 6e 64 20 77 69 6e  The unix and win
4b00: 33 32 0a 5b 56 46 53 5d 20 69 6d 70 6c 65 6d 65  32.[VFS] impleme
4b10: 6e 74 61 74 69 6f 6e 73 20 74 68 61 74 20 63 6f  ntations that co
4b20: 6d 65 20 62 75 69 6c 74 20 69 6e 74 6f 20 53 51  me built into SQ
4b30: 4c 69 74 65 20 64 6f 20 6e 6f 74 20 77 72 69 74  Lite do not writ
4b40: 65 20 74 6f 20 74 68 65 0a 6c 6f 63 6b 2d 62 79  e to the.lock-by
4b50: 74 65 20 70 61 67 65 2c 20 62 75 74 20 74 68 69  te page, but thi
4b60: 72 64 2d 70 61 72 74 79 20 56 46 53 20 69 6d 70  rd-party VFS imp
4b70: 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20 66 6f 72  lementations for
4b80: 0a 6f 74 68 65 72 20 6f 70 65 72 61 74 69 6e 67  .other operating
4b90: 20 73 79 73 74 65 6d 73 20 6d 69 67 68 74 2e 3c   systems might.<
4ba0: 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 6c 6f 63 6b  /p>..<p>The lock
4bb0: 2d 62 79 74 65 20 70 61 67 65 20 61 72 6f 73 65  -byte page arose
4bc0: 20 66 72 6f 6d 20 74 68 65 20 6e 65 65 64 20 74   from the need t
4bd0: 6f 20 73 75 70 70 6f 72 74 20 57 69 6e 39 35 20  o support Win95 
4be0: 77 68 69 63 68 20 68 61 64 0a 6f 6e 6c 79 20 6d  which had.only m
4bf0: 61 6e 64 61 74 6f 72 79 20 66 69 6c 65 20 6c 6f  andatory file lo
4c00: 63 6b 69 6e 67 2e 20 20 41 6c 6c 20 6d 6f 64 65  cking.  All mode
4c10: 72 6e 20 6f 70 65 72 61 74 69 6e 67 20 73 79 73  rn operating sys
4c20: 74 65 6d 73 20 74 68 61 74 20 77 65 20 6b 6e 6f  tems that we kno
4c30: 77 20 6f 66 0a 73 75 70 70 6f 72 74 20 61 64 76  w of.support adv
4c40: 69 73 6f 72 79 20 66 69 6c 65 20 6c 6f 63 6b 69  isory file locki
4c50: 6e 67 2c 20 61 6e 64 20 73 6f 20 74 68 65 20 6c  ng, and so the l
4c60: 6f 63 6b 2d 62 79 74 65 20 70 61 67 65 20 69 73  ock-byte page is
4c70: 20 6e 6f 74 20 72 65 61 6c 6c 79 0a 6e 65 65 64   not really.need
4c80: 65 64 20 61 6e 79 20 6d 6f 72 65 2c 20 62 75 74  ed any more, but
4c90: 20 69 73 20 72 65 74 61 69 6e 65 64 20 66 6f 72   is retained for
4ca0: 20 62 61 63 6b 77 61 72 64 73 20 63 6f 6d 70 61   backwards compa
4cb0: 74 69 62 69 6c 69 74 79 2e 3c 2f 70 3e 0a 0a 3c  tibility.</p>..<
4cc0: 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
4cd0: 7b 66 72 65 65 6c 69 73 74 7d 20 7b 66 72 65 65  {freelist} {free
4ce0: 6c 69 73 74 7d 20 7b 66 72 65 65 2d 70 61 67 65  list} {free-page
4cf0: 20 6c 69 73 74 7d 3c 2f 74 63 6c 3e 0a 3c 68 32   list}</tcl>.<h2
4d00: 3e 54 68 65 20 46 72 65 65 6c 69 73 74 3c 2f 68  >The Freelist</h
4d10: 32 3e 0a 0a 3c 70 3e 41 20 64 61 74 61 62 61 73  2>..<p>A databas
4d20: 65 20 66 69 6c 65 20 6d 69 67 68 74 20 63 6f 6e  e file might con
4d30: 74 61 69 6e 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  tain one or more
4d40: 20 70 61 67 65 73 20 74 68 61 74 20 61 72 65 20   pages that are 
4d50: 6e 6f 74 20 69 6e 0a 61 63 74 69 76 65 20 75 73  not in.active us
4d60: 65 2e 20 20 55 6e 75 73 65 64 20 70 61 67 65 73  e.  Unused pages
4d70: 20 63 61 6e 20 63 6f 6d 65 20 61 62 6f 75 74 2c   can come about,
4d80: 20 66 6f 72 20 65 78 61 6d 70 6c 65 2c 20 77 68   for example, wh
4d90: 65 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 69  en information.i
4da0: 73 20 64 65 6c 65 74 65 64 20 66 72 6f 6d 20 74  s deleted from t
4db0: 68 65 20 64 61 74 61 62 61 73 65 2e 20 20 55 6e  he database.  Un
4dc0: 75 73 65 64 20 70 61 67 65 73 20 61 72 65 20 73  used pages are s
4dd0: 74 6f 72 65 64 20 6f 6e 20 74 68 65 20 66 72 65  tored on the fre
4de0: 65 6c 69 73 74 0a 61 6e 64 20 61 72 65 20 72 65  elist.and are re
4df0: 75 73 65 64 20 77 68 65 6e 20 61 64 64 69 74 69  used when additi
4e00: 6f 6e 61 6c 20 70 61 67 65 73 20 61 72 65 20 72  onal pages are r
4e10: 65 71 75 69 72 65 64 2e 3c 2f 70 3e 0a 0a 3c 70  equired.</p>..<p
4e20: 3e 54 68 65 20 66 72 65 65 6c 69 73 74 20 69 73  >The freelist is
4e30: 20 6f 72 67 61 6e 69 7a 65 64 20 61 73 20 61 20   organized as a 
4e40: 6c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 66  linked list of f
4e50: 72 65 65 6c 69 73 74 20 74 72 75 6e 6b 20 70 61  reelist trunk pa
4e60: 67 65 73 0a 77 69 74 68 20 65 61 63 68 20 74 72  ges.with each tr
4e70: 75 6e 6b 20 70 61 67 65 73 20 63 6f 6e 74 61 69  unk pages contai
4e80: 6e 69 6e 67 20 70 61 67 65 20 6e 75 6d 62 65 72  ning page number
4e90: 73 20 66 6f 72 20 7a 65 72 6f 20 6f 72 20 6d 6f  s for zero or mo
4ea0: 72 65 20 66 72 65 65 6c 69 73 74 0a 6c 65 61 66  re freelist.leaf
4eb0: 20 70 61 67 65 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e   pages.</p>..<p>
4ec0: 41 20 66 72 65 65 6c 69 73 74 20 74 72 75 6e 6b  A freelist trunk
4ed0: 20 70 61 67 65 20 63 6f 6e 73 69 73 74 73 20 6f   page consists o
4ee0: 66 20 61 6e 20 61 72 72 61 79 20 6f 66 20 34 2d  f an array of 4-
4ef0: 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20  byte big-endian 
4f00: 69 6e 74 65 67 65 72 73 2e 0a 54 68 65 20 73 69  integers..The si
4f10: 7a 65 20 6f 66 20 74 68 65 20 61 72 72 61 79 20  ze of the array 
4f20: 69 73 20 61 73 20 6d 61 6e 79 20 69 6e 74 65 67  is as many integ
4f30: 65 72 73 20 61 73 20 77 69 6c 6c 20 66 69 74 20  ers as will fit 
4f40: 69 6e 20 74 68 65 20 75 73 61 62 6c 65 20 73 70  in the usable sp
4f50: 61 63 65 0a 6f 66 20 61 20 70 61 67 65 2e 20 20  ace.of a page.  
4f60: 54 68 65 20 6d 69 6e 69 6d 75 6d 20 75 73 61 62  The minimum usab
4f70: 6c 65 20 73 70 61 63 65 20 69 73 20 34 38 30 20  le space is 480 
4f80: 62 79 74 65 73 20 73 6f 20 74 68 65 20 61 72 72  bytes so the arr
4f90: 61 79 20 77 69 6c 6c 20 61 6c 77 61 79 73 0a 62  ay will always.b
4fa0: 65 20 61 74 20 6c 65 61 73 74 20 31 32 30 20 65  e at least 120 e
4fb0: 6e 74 72 69 65 73 20 69 6e 20 6c 65 6e 67 74 68  ntries in length
4fc0: 2e 20 20 5e 54 68 65 20 66 69 72 73 74 20 69 6e  .  ^The first in
4fd0: 74 65 67 65 72 20 6f 6e 20 61 20 66 72 65 65 6c  teger on a freel
4fe0: 69 73 74 20 74 72 75 6e 6b 0a 70 61 67 65 20 69  ist trunk.page i
4ff0: 73 20 74 68 65 20 70 61 67 65 20 6e 75 6d 62 65  s the page numbe
5000: 72 20 6f 66 20 74 68 65 20 6e 65 78 74 20 66 72  r of the next fr
5010: 65 65 6c 69 73 74 20 74 72 75 6e 6b 20 70 61 67  eelist trunk pag
5020: 65 20 69 6e 20 74 68 65 20 6c 69 73 74 20 6f 72  e in the list or
5030: 20 7a 65 72 6f 20 0a 69 66 20 74 68 69 73 20 69   zero .if this i
5040: 73 20 74 68 65 20 6c 61 73 74 20 66 72 65 65 6c  s the last freel
5050: 69 73 74 20 74 72 75 6e 6b 20 70 61 67 65 2e 20  ist trunk page. 
5060: 20 5e 54 68 65 20 73 65 63 6f 6e 64 20 69 6e 74   ^The second int
5070: 65 67 65 72 20 6f 6e 20 61 20 66 72 65 65 6c 69  eger on a freeli
5080: 73 74 0a 74 72 75 6e 6b 20 70 61 67 65 20 69 73  st.trunk page is
5090: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6c   the number of l
50a0: 65 61 66 20 70 61 67 65 20 70 6f 69 6e 74 65 72  eaf page pointer
50b0: 73 20 74 6f 20 66 6f 6c 6c 6f 77 2e 20 20 0a 5e  s to follow.  .^
50c0: 28 43 61 6c 6c 20 74 68 65 20 73 65 63 6f 6e 64  (Call the second
50d0: 20 69 6e 74 65 67 65 72 20 6f 6e 20 61 20 66 72   integer on a fr
50e0: 65 65 6c 69 73 74 20 74 72 75 6e 6b 20 70 61 67  eelist trunk pag
50f0: 65 20 4c 2e 0a 49 66 20 4c 20 69 73 20 67 72 65  e L..If L is gre
5100: 61 74 65 72 20 74 68 61 6e 20 7a 65 72 6f 20 74  ater than zero t
5110: 68 65 6e 20 69 6e 74 65 67 65 72 73 20 77 69 74  hen integers wit
5120: 68 20 61 72 72 61 79 20 69 6e 64 65 78 65 73 20  h array indexes 
5130: 62 65 74 77 65 65 6e 20 32 20 61 6e 64 0a 4c 2b  between 2 and.L+
5140: 31 20 69 6e 63 6c 75 73 69 76 65 20 63 6f 6e 74  1 inclusive cont
5150: 61 69 6e 20 70 61 67 65 20 6e 75 6d 62 65 72 73  ain page numbers
5160: 20 66 6f 72 20 66 72 65 65 6c 69 73 74 20 6c 65   for freelist le
5170: 61 66 20 70 61 67 65 73 2e 29 5e 3c 2f 70 3e 0a  af pages.)^</p>.
5180: 0a 3c 70 3e 46 72 65 65 6c 69 73 74 20 6c 65 61  .<p>Freelist lea
5190: 66 20 70 61 67 65 73 20 63 6f 6e 74 61 69 6e 20  f pages contain 
51a0: 6e 6f 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20  no information. 
51b0: 20 5e 53 51 4c 69 74 65 20 61 76 6f 69 64 73 20   ^SQLite avoids 
51c0: 72 65 61 64 69 6e 67 20 6f 72 0a 77 72 69 74 69  reading or.writi
51d0: 6e 67 20 66 72 65 65 6c 69 73 74 20 6c 65 61 66  ng freelist leaf
51e0: 20 70 61 67 65 73 20 69 6e 20 6f 72 64 65 72 20   pages in order 
51f0: 74 6f 20 72 65 64 75 63 65 20 64 69 73 6b 20 49  to reduce disk I
5200: 2f 4f 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 20 62 75  /O.</p>..<p>A bu
5210: 67 20 69 6e 20 53 51 4c 69 74 65 20 76 65 72 73  g in SQLite vers
5220: 69 6f 6e 73 20 70 72 69 6f 72 20 74 6f 20 33 2e  ions prior to 3.
5230: 36 2e 30 20 63 61 75 73 65 64 20 74 68 65 20 64  6.0 caused the d
5240: 61 74 61 62 61 73 65 20 74 6f 20 62 65 0a 72 65  atabase to be.re
5250: 70 6f 72 74 65 64 20 61 73 20 63 6f 72 72 75 70  ported as corrup
5260: 74 20 69 66 20 61 6e 79 20 6f 66 20 74 68 65 20  t if any of the 
5270: 6c 61 73 74 20 36 20 65 6e 74 72 69 65 73 20 69  last 6 entries i
5280: 6e 20 74 68 65 20 66 72 65 65 6c 69 73 74 20 74  n the freelist t
5290: 72 75 6e 6b 20 70 61 67 65 20 0a 61 72 72 61 79  runk page .array
52a0: 20 63 6f 6e 74 61 69 6e 65 64 20 6e 6f 6e 2d 7a   contained non-z
52b0: 65 72 6f 20 76 61 6c 75 65 73 2e 20 20 4e 65 77  ero values.  New
52c0: 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53  er versions of S
52d0: 51 4c 69 74 65 20 64 6f 20 6e 6f 74 20 68 61 76  QLite do not hav
52e0: 65 0a 74 68 69 73 20 70 72 6f 62 6c 65 6d 2e 20  e.this problem. 
52f0: 20 5e 48 6f 77 65 76 65 72 2c 20 6e 65 77 65 72   ^However, newer
5300: 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c   versions of SQL
5310: 69 74 65 20 73 74 69 6c 6c 20 61 76 6f 69 64 20  ite still avoid 
5320: 75 73 69 6e 67 20 74 68 65 20 0a 6c 61 73 74 20  using the .last 
5330: 73 69 78 20 65 6e 74 72 69 65 73 20 69 6e 20 74  six entries in t
5340: 68 65 20 66 72 65 65 6c 69 73 74 20 74 72 75 6e  he freelist trun
5350: 6b 20 70 61 67 65 20 61 72 72 61 79 20 69 6e 20  k page array in 
5360: 6f 72 64 65 72 20 74 68 61 74 20 64 61 74 61 62  order that datab
5370: 61 73 65 0a 66 69 6c 65 73 20 63 72 65 61 74 65  ase.files create
5380: 64 20 62 79 20 6e 65 77 65 72 20 76 65 72 73 69  d by newer versi
5390: 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 63 61  ons of SQLite ca
53a0: 6e 20 62 65 20 72 65 61 64 20 62 79 20 6f 6c 64  n be read by old
53b0: 65 72 20 76 65 72 73 69 6f 6e 73 0a 6f 66 20 53  er versions.of S
53c0: 51 4c 69 74 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  QLite.</p>..<p>^
53d0: 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 66 72  The number of fr
53e0: 65 65 6c 69 73 74 20 70 61 67 65 73 20 69 73 20  eelist pages is 
53f0: 73 74 6f 72 65 64 20 61 73 20 61 20 34 2d 62 79  stored as a 4-by
5400: 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e  te big-endian in
5410: 74 65 67 65 72 0a 69 6e 20 74 68 65 20 64 61 74  teger.in the dat
5420: 61 62 61 73 65 20 68 65 61 64 65 72 20 61 74 20  abase header at 
5430: 61 6e 20 6f 66 66 73 65 74 20 6f 66 20 33 36 20  an offset of 36 
5440: 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69  from the beginni
5450: 6e 67 20 6f 66 20 74 68 65 20 66 69 6c 65 2e 0a  ng of the file..
5460: 5e 54 68 65 20 64 61 74 61 62 61 73 65 20 68 65  ^The database he
5470: 61 64 65 72 20 61 6c 73 6f 20 73 74 6f 72 65 73  ader also stores
5480: 20 74 68 65 20 70 61 67 65 20 6e 75 6d 62 65 72   the page number
5490: 20 6f 66 20 74 68 65 20 66 69 72 73 74 20 66 72   of the first fr
54a0: 65 65 6c 69 73 74 20 74 72 75 6e 6b 0a 70 61 67  eelist trunk.pag
54b0: 65 20 61 73 20 61 20 34 2d 62 79 74 65 20 62 69  e as a 4-byte bi
54c0: 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72  g-endian integer
54d0: 20 61 74 20 61 6e 20 6f 66 66 73 65 74 20 6f 66   at an offset of
54e0: 20 33 32 20 66 72 6f 6d 20 74 68 65 20 62 65 67   32 from the beg
54f0: 69 6e 6e 69 6e 67 0a 6f 66 20 74 68 65 20 66 69  inning.of the fi
5500: 6c 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  le.</p>..<tcl>hd
5510: 5f 66 72 61 67 6d 65 6e 74 20 62 74 72 65 65 20  _fragment btree 
5520: 7b 42 2a 2d 54 72 65 65 73 7d 20 7b 42 2d 74 72  {B*-Trees} {B-tr
5530: 65 65 7d 3c 2f 74 63 6c 3e 0a 3c 68 32 3e 42 2d  ee}</tcl>.<h2>B-
5540: 74 72 65 65 20 50 61 67 65 73 3c 2f 68 32 3e 0a  tree Pages</h2>.
5550: 0a 3c 70 3e 54 68 65 20 62 2d 74 72 65 65 20 61  .<p>The b-tree a
5560: 6c 67 6f 72 69 74 68 6d 20 70 72 6f 76 69 64 65  lgorithm provide
5570: 73 20 6b 65 79 2f 64 61 74 61 20 73 74 6f 72 61  s key/data stora
5580: 67 65 20 77 69 74 68 20 75 6e 69 71 75 65 20 61  ge with unique a
5590: 6e 64 0a 6f 72 64 65 72 65 64 20 6b 65 79 73 20  nd.ordered keys 
55a0: 6f 6e 20 70 61 67 65 2d 6f 72 69 65 6e 74 65 64  on page-oriented
55b0: 20 73 74 6f 72 61 67 65 20 64 65 76 69 63 65 73   storage devices
55c0: 2e 0a 46 6f 72 20 62 61 63 6b 67 72 6f 75 6e 64  ..For background
55d0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6f 6e 20   information on 
55e0: 62 2d 74 72 65 65 73 2c 20 73 65 65 0a 4b 6e 75  b-trees, see.Knu
55f0: 74 68 2c 20 3c 75 3e 54 68 65 20 41 72 74 20 4f  th, <u>The Art O
5600: 66 20 43 6f 6d 70 75 74 65 72 20 50 72 6f 67 72  f Computer Progr
5610: 61 6d 6d 69 6e 67 3c 2f 75 3e 2c 20 56 6f 6c 75  amming</u>, Volu
5620: 6d 65 20 33 20 22 53 6f 72 74 69 6e 67 0a 61 6e  me 3 "Sorting.an
5630: 64 20 53 65 61 72 63 68 69 6e 67 22 2c 20 70 61  d Searching", pa
5640: 67 65 73 20 34 37 31 2d 34 37 39 2e 20 20 54 77  ges 471-479.  Tw
5650: 6f 20 6b 69 6e 64 73 20 6f 66 20 62 2d 74 72 65  o kinds of b-tre
5660: 65 73 20 61 72 65 20 75 73 65 64 20 62 79 0a 53  es are used by.S
5670: 51 4c 69 74 65 2e 20 20 54 68 65 20 61 6c 67 6f  QLite.  The algo
5680: 72 69 74 68 6d 20 74 68 61 74 20 4b 6e 75 74 68  rithm that Knuth
5690: 20 63 61 6c 6c 73 20 22 42 2a 2d 54 72 65 65 22   calls "B*-Tree"
56a0: 20 73 74 6f 72 65 73 20 61 6c 6c 20 64 61 74 61   stores all data
56b0: 0a 69 6e 20 74 68 65 20 6c 65 61 76 65 73 20 6f  .in the leaves o
56c0: 66 20 74 68 65 20 74 72 65 65 2e 20 20 53 51 4c  f the tree.  SQL
56d0: 69 74 65 20 63 61 6c 6c 73 20 74 68 69 73 20 76  ite calls this v
56e0: 61 72 69 65 74 79 20 6f 66 20 62 2d 74 72 65 65  ariety of b-tree
56f0: 0a 61 20 22 74 61 62 6c 65 20 62 2d 74 72 65 65  .a "table b-tree
5700: 22 2e 20 54 68 65 20 61 6c 67 6f 72 69 74 68 6d  ". The algorithm
5710: 20 74 68 61 74 20 4b 6e 75 74 68 20 63 61 6c 6c   that Knuth call
5720: 73 20 73 69 6d 70 6c 79 20 22 42 2d 54 72 65 65  s simply "B-Tree
5730: 22 0a 73 74 6f 72 65 73 20 62 6f 74 68 20 74 68  ".stores both th
5740: 65 20 6b 65 79 20 61 6e 64 20 74 68 65 20 64 61  e key and the da
5750: 74 61 20 74 6f 67 65 74 68 65 72 20 69 6e 20 62  ta together in b
5760: 6f 74 68 20 6c 65 61 76 65 73 0a 61 6e 64 20 69  oth leaves.and i
5770: 6e 20 69 6e 74 65 72 69 6f 72 20 70 61 67 65 73  n interior pages
5780: 2e 20 20 49 6e 20 74 68 65 20 53 51 4c 69 74 65  .  In the SQLite
5790: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c   implementation,
57a0: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 42 2d   the original.B-
57b0: 54 72 65 65 20 61 6c 67 6f 72 69 74 68 6d 20 73  Tree algorithm s
57c0: 74 6f 72 65 73 20 6b 65 79 73 20 6f 6e 6c 79 2c  tores keys only,
57d0: 20 6f 6d 69 74 74 69 6e 67 20 74 68 65 20 64 61   omitting the da
57e0: 74 61 20 65 6e 74 69 72 65 6c 79 2c 20 61 6e 64  ta entirely, and
57f0: 0a 69 73 20 63 61 6c 6c 65 64 20 61 6e 20 22 69  .is called an "i
5800: 6e 64 65 78 20 62 2d 74 72 65 65 22 2e 0a 0a 3c  ndex b-tree"...<
5810: 70 3e 41 20 62 2d 74 72 65 65 20 70 61 67 65 20  p>A b-tree page 
5820: 69 73 20 65 69 74 68 65 72 20 61 6e 20 69 6e 74  is either an int
5830: 65 72 69 6f 72 20 70 61 67 65 20 6f 72 20 61 20  erior page or a 
5840: 6c 65 61 66 20 70 61 67 65 2e 0a 41 20 6c 65 61  leaf page..A lea
5850: 66 20 70 61 67 65 20 63 6f 6e 74 61 69 6e 73 20  f page contains 
5860: 6b 65 79 73 20 61 6e 64 20 69 6e 20 74 68 65 20  keys and in the 
5870: 63 61 73 65 20 6f 66 20 61 20 74 61 62 6c 65 20  case of a table 
5880: 62 2d 74 72 65 65 20 65 61 63 68 0a 6b 65 79 20  b-tree each.key 
5890: 68 61 73 20 61 73 73 6f 63 69 61 74 65 64 20 64  has associated d
58a0: 61 74 61 2e 20 20 41 6e 20 69 6e 74 65 72 69 6f  ata.  An interio
58b0: 72 20 70 61 67 65 20 63 6f 6e 74 61 69 6e 73 0a  r page contains.
58c0: 4b 20 6b 65 79 73 20 74 6f 67 65 74 68 65 72 20  K keys together 
58d0: 77 69 74 68 20 4b 2b 31 20 70 6f 69 6e 74 65 72  with K+1 pointer
58e0: 73 20 74 6f 20 63 68 69 6c 64 20 62 2d 74 72 65  s to child b-tre
58f0: 65 20 70 61 67 65 73 2e 0a 41 20 22 70 6f 69 6e  e pages..A "poin
5900: 74 65 72 22 20 69 6e 20 61 6e 20 69 6e 74 65 72  ter" in an inter
5910: 69 6f 72 20 62 2d 74 72 65 65 20 70 61 67 65 20  ior b-tree page 
5920: 69 73 20 6a 75 73 74 20 74 68 65 20 33 31 2d 62  is just the 31-b
5930: 69 74 20 69 6e 74 65 67 65 72 0a 70 61 67 65 20  it integer.page 
5940: 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 63 68  number of the ch
5950: 69 6c 64 20 70 61 67 65 2e 3c 2f 70 3e 0a 0a 3c  ild page.</p>..<
5960: 70 3e 44 65 66 69 6e 65 20 74 68 65 20 64 65 70  p>Define the dep
5970: 74 68 0a 6f 66 20 61 20 6c 65 61 66 20 62 2d 74  th.of a leaf b-t
5980: 72 65 65 20 74 6f 20 62 65 20 31 20 61 6e 64 20  ree to be 1 and 
5990: 74 68 65 20 64 65 70 74 68 20 6f 66 20 61 6e 79  the depth of any
59a0: 20 69 6e 74 65 72 69 6f 72 20 62 2d 74 72 65 65   interior b-tree
59b0: 20 74 6f 20 62 65 20 6f 6e 65 0a 6d 6f 72 65 20   to be one.more 
59c0: 74 68 61 6e 20 74 68 65 20 6d 61 78 69 6d 75 6d  than the maximum
59d0: 20 64 65 70 74 68 20 6f 66 20 61 6e 79 20 6f 66   depth of any of
59e0: 20 69 74 73 20 63 68 69 6c 64 72 65 6e 2e 20 20   its children.  
59f0: 5e 49 6e 20 61 20 77 65 6c 6c 2d 66 6f 72 6d 65  ^In a well-forme
5a00: 64 0a 64 61 74 61 62 61 73 65 2c 20 61 6c 6c 20  d.database, all 
5a10: 63 68 69 6c 64 72 65 6e 20 6f 66 20 61 6e 20 69  children of an i
5a20: 6e 74 65 72 69 6f 72 20 62 2d 74 72 65 65 20 68  nterior b-tree h
5a30: 61 76 65 20 74 68 65 20 73 61 6d 65 20 64 65 70  ave the same dep
5a40: 74 68 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 6e 20 61  th.</p>..<p>In a
5a50: 6e 20 69 6e 74 65 72 69 6f 72 20 62 2d 74 72 65  n interior b-tre
5a60: 65 20 70 61 67 65 2c 20 74 68 65 20 70 6f 69 6e  e page, the poin
5a70: 74 65 72 73 20 61 6e 64 20 6b 65 79 73 20 6c 6f  ters and keys lo
5a80: 67 69 63 61 6c 6c 79 20 61 6c 74 65 72 6e 61 74  gically alternat
5a90: 65 20 0a 77 69 74 68 20 61 20 70 6f 69 6e 74 65  e .with a pointe
5aa0: 72 20 6f 6e 20 62 6f 74 68 20 65 6e 64 73 2e 20  r on both ends. 
5ab0: 28 54 68 65 20 70 72 65 76 69 6f 75 73 20 73 65  (The previous se
5ac0: 6e 74 65 6e 63 65 20 69 73 20 74 6f 20 62 65 20  ntence is to be 
5ad0: 75 6e 64 65 72 73 74 6f 6f 64 0a 63 6f 6e 63 65  understood.conce
5ae0: 70 74 75 61 6c 6c 79 20 2d 20 74 68 65 20 61 63  ptually - the ac
5af0: 74 75 61 6c 20 6c 61 79 6f 75 74 20 6f 66 20 74  tual layout of t
5b00: 68 65 20 6b 65 79 73 20 61 6e 64 0a 70 6f 69 6e  he keys and.poin
5b10: 74 65 72 73 20 77 69 74 68 69 6e 20 74 68 65 20  ters within the 
5b20: 70 61 67 65 20 69 73 20 6d 6f 72 65 20 63 6f 6d  page is more com
5b30: 70 6c 69 63 61 74 65 64 20 61 6e 64 20 77 69 6c  plicated and wil
5b40: 6c 20 62 65 20 64 65 73 63 72 69 62 65 64 20 69  l be described i
5b50: 6e 0a 74 68 65 20 73 65 71 75 65 6c 2e 29 20 20  n.the sequel.)  
5b60: 41 6c 6c 20 6b 65 79 73 20 77 69 74 68 69 6e 20  All keys within 
5b70: 74 68 65 20 73 61 6d 65 20 70 61 67 65 20 61 72  the same page ar
5b80: 65 20 75 6e 69 71 75 65 20 61 6e 64 20 61 72 65  e unique and are
5b90: 20 6c 6f 67 69 63 61 6c 6c 79 0a 6f 72 67 61 6e   logically.organ
5ba0: 69 7a 65 64 20 69 6e 20 61 73 63 65 6e 64 69 6e  ized in ascendin
5bb0: 67 20 6f 72 64 65 72 20 66 72 6f 6d 20 6c 65 66  g order from lef
5bc0: 74 20 74 6f 20 72 69 67 68 74 2e 20 20 28 41 67  t to right.  (Ag
5bd0: 61 69 6e 2c 20 74 68 69 73 20 6f 72 64 65 72 69  ain, this orderi
5be0: 6e 67 0a 69 73 20 6c 6f 67 69 63 61 6c 2c 20 6e  ng.is logical, n
5bf0: 6f 74 20 70 68 79 73 69 63 61 6c 2e 20 20 54 68  ot physical.  Th
5c00: 65 20 61 63 74 75 61 6c 20 6c 6f 63 61 74 69 6f  e actual locatio
5c10: 6e 20 6f 66 20 6b 65 79 73 20 77 69 74 68 69 6e  n of keys within
5c20: 20 74 68 65 20 70 61 67 65 0a 69 73 20 61 72 62   the page.is arb
5c30: 69 74 72 61 72 79 2e 29 20 5e 46 6f 72 20 61 6e  itrary.) ^For an
5c40: 79 20 6b 65 79 20 58 2c 20 70 6f 69 6e 74 65 72  y key X, pointer
5c50: 73 20 74 6f 20 74 68 65 20 6c 65 66 74 0a 6f 66  s to the left.of
5c60: 20 61 20 58 20 72 65 66 65 72 20 74 6f 20 62 2d   a X refer to b-
5c70: 74 72 65 65 20 70 61 67 65 73 20 6f 6e 20 77 68  tree pages on wh
5c80: 69 63 68 20 61 6c 6c 20 6b 65 79 73 20 61 72 65  ich all keys are
5c90: 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71   less than or eq
5ca0: 75 61 6c 20 74 6f 20 58 2e 0a 5e 50 6f 69 6e 74  ual to X..^Point
5cb0: 65 72 73 20 74 6f 20 74 68 65 20 72 69 67 68 74  ers to the right
5cc0: 20 6f 66 20 58 20 72 65 66 65 72 20 74 6f 20 70   of X refer to p
5cd0: 61 67 65 73 20 77 68 65 72 65 20 61 6c 6c 20 6b  ages where all k
5ce0: 65 79 73 20 61 72 65 20 0a 67 72 65 61 74 65 72  eys are .greater
5cf0: 20 74 68 61 6e 20 58 2e 3c 2f 70 3e 0a 0a 3c 70   than X.</p>..<p
5d00: 3e 57 69 74 68 69 6e 20 61 6e 20 69 6e 74 65 72  >Within an inter
5d10: 69 6f 72 20 62 2d 74 72 65 65 20 70 61 67 65 2c  ior b-tree page,
5d20: 20 65 61 63 68 20 6b 65 79 20 61 6e 64 20 74 68   each key and th
5d30: 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 69 74 73  e pointer to its
5d40: 0a 69 6d 6d 65 64 69 61 74 65 20 6c 65 66 74 20  .immediate left 
5d50: 61 72 65 20 63 6f 6d 62 69 6e 65 64 20 69 6e 74  are combined int
5d60: 6f 20 61 20 73 74 72 75 63 74 75 72 65 20 63 61  o a structure ca
5d70: 6c 6c 65 64 20 61 20 22 63 65 6c 6c 22 2e 20 20  lled a "cell".  
5d80: 54 68 65 0a 72 69 67 68 74 2d 6d 6f 73 74 20 70  The.right-most p
5d90: 6f 69 6e 74 65 72 20 69 73 20 68 65 6c 64 20 73  ointer is held s
5da0: 65 70 61 72 61 74 65 6c 79 2e 20 20 41 20 6c 65  eparately.  A le
5db0: 61 66 20 62 2d 74 72 65 65 20 70 61 67 65 20 68  af b-tree page h
5dc0: 61 73 20 6e 6f 0a 70 6f 69 6e 74 65 72 73 2c 20  as no.pointers, 
5dd0: 62 75 74 20 69 74 20 73 74 69 6c 6c 20 75 73 65  but it still use
5de0: 73 20 74 68 65 20 63 65 6c 6c 20 73 74 72 75 63  s the cell struc
5df0: 74 75 72 65 20 74 6f 20 68 6f 6c 64 20 6b 65 79  ture to hold key
5e00: 73 20 66 6f 72 0a 69 6e 64 65 78 20 62 2d 74 72  s for.index b-tr
5e10: 65 65 73 20 6f 72 20 6b 65 79 73 20 61 6e 64 20  ees or keys and 
5e20: 63 6f 6e 74 65 6e 74 20 66 6f 72 20 74 61 62 6c  content for tabl
5e30: 65 20 62 2d 74 72 65 65 73 2e 20 20 44 61 74 61  e b-trees.  Data
5e40: 20 69 73 20 61 6c 73 6f 0a 63 6f 6e 74 61 69 6e   is also.contain
5e50: 65 64 20 69 6e 20 74 68 65 20 63 65 6c 6c 2e 0a  ed in the cell..
5e60: 3c 2f 70 3e 0a 0a 3c 70 3e 45 76 65 72 79 20 62  </p>..<p>Every b
5e70: 2d 74 72 65 65 20 70 61 67 65 20 68 61 73 20 61  -tree page has a
5e80: 74 20 6d 6f 73 74 20 6f 6e 65 20 70 61 72 65 6e  t most one paren
5e90: 74 20 62 2d 74 72 65 65 20 70 61 67 65 2e 0a 41  t b-tree page..A
5ea0: 20 62 2d 74 72 65 65 20 70 61 67 65 20 77 69 74   b-tree page wit
5eb0: 68 6f 75 74 20 61 20 70 61 72 65 6e 74 20 69 73  hout a parent is
5ec0: 20 63 61 6c 6c 65 64 20 61 20 72 6f 6f 74 20 70   called a root p
5ed0: 61 67 65 2e 20 20 41 20 72 6f 6f 74 20 62 2d 74  age.  A root b-t
5ee0: 72 65 65 20 70 61 67 65 0a 74 6f 67 65 74 68 65  ree page.togethe
5ef0: 72 20 77 69 74 68 20 74 68 65 20 63 6c 6f 73 75  r with the closu
5f00: 72 65 20 6f 66 20 69 74 73 20 63 68 69 6c 64 72  re of its childr
5f10: 65 6e 20 66 6f 72 6d 20 61 20 63 6f 6d 70 6c 65  en form a comple
5f20: 74 65 20 62 2d 74 72 65 65 2e 0a 49 74 20 69 73  te b-tree..It is
5f30: 20 70 6f 73 73 69 62 6c 65 20 28 61 6e 64 20 69   possible (and i
5f40: 6e 20 66 61 63 74 20 72 61 74 68 65 72 20 63 6f  n fact rather co
5f50: 6d 6d 6f 6e 29 20 74 6f 20 68 61 76 65 20 61 20  mmon) to have a 
5f60: 63 6f 6d 70 6c 65 74 65 20 62 2d 74 72 65 65 0a  complete b-tree.
5f70: 74 68 61 74 20 63 6f 6e 73 69 73 74 73 20 6f 66  that consists of
5f80: 20 61 20 73 69 6e 67 6c 65 20 70 61 67 65 20 74   a single page t
5f90: 68 61 74 20 69 73 20 62 6f 74 68 20 61 20 6c 65  hat is both a le
5fa0: 61 66 20 61 6e 64 20 74 68 65 20 72 6f 6f 74 2e  af and the root.
5fb0: 0a 42 65 63 61 75 73 65 20 74 68 65 72 65 20 61  .Because there a
5fc0: 72 65 20 70 6f 69 6e 74 65 72 73 20 66 72 6f 6d  re pointers from
5fd0: 20 70 61 72 65 6e 74 73 20 74 6f 20 63 68 69 6c   parents to chil
5fe0: 64 72 65 6e 2c 20 65 76 65 72 79 20 70 61 67 65  dren, every page
5ff0: 20 6f 66 20 61 0a 63 6f 6d 70 6c 65 74 65 20 62   of a.complete b
6000: 2d 74 72 65 65 20 63 61 6e 20 62 65 20 6c 6f 63  -tree can be loc
6010: 61 74 65 64 20 69 66 20 6f 6e 6c 79 20 74 68 65  ated if only the
6020: 20 72 6f 6f 74 20 70 61 67 65 20 69 73 20 6b 6e   root page is kn
6030: 6f 77 6e 2e 20 20 48 65 6e 63 65 2c 0a 62 2d 74  own.  Hence,.b-t
6040: 72 65 65 73 20 61 72 65 20 69 64 65 6e 74 69 66  rees are identif
6050: 69 65 64 20 62 79 20 74 68 65 69 72 20 72 6f 6f  ied by their roo
6060: 74 20 70 61 67 65 20 6e 75 6d 62 65 72 2e 3c 2f  t page number.</
6070: 70 3e 0a 0a 3c 70 3e 41 20 62 2d 74 72 65 65 20  p>..<p>A b-tree 
6080: 70 61 67 65 20 69 73 20 65 69 74 68 65 72 20 61  page is either a
6090: 20 74 61 62 6c 65 20 62 2d 74 72 65 65 20 70 61   table b-tree pa
60a0: 67 65 20 6f 72 20 61 6e 20 69 6e 64 65 78 20 62  ge or an index b
60b0: 2d 74 72 65 65 20 70 61 67 65 2e 0a 41 6c 6c 20  -tree page..All 
60c0: 70 61 67 65 73 20 77 69 74 68 69 6e 20 65 61 63  pages within eac
60d0: 68 20 63 6f 6d 70 6c 65 74 65 20 62 2d 74 72 65  h complete b-tre
60e0: 65 20 61 72 65 20 6f 66 20 74 68 65 20 73 61 6d  e are of the sam
60f0: 65 20 74 79 70 65 3a 20 65 69 74 68 65 72 20 74  e type: either t
6100: 61 62 6c 65 0a 6f 72 20 69 6e 64 65 78 2e 20 20  able.or index.  
6110: 54 68 65 72 65 20 69 73 20 6f 6e 65 20 74 61 62  There is one tab
6120: 6c 65 20 62 2d 74 72 65 65 73 20 69 6e 20 74 68  le b-trees in th
6130: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a  e database file.
6140: 66 6f 72 20 65 61 63 68 20 72 6f 77 69 64 20 74  for each rowid t
6150: 61 62 6c 65 20 69 6e 20 74 68 65 20 64 61 74 61  able in the data
6160: 62 61 73 65 20 73 63 68 65 6d 61 2c 20 69 6e 63  base schema, inc
6170: 6c 75 64 69 6e 67 20 73 79 73 74 65 6d 20 74 61  luding system ta
6180: 62 6c 65 73 0a 73 75 63 68 20 61 73 20 73 71 6c  bles.such as sql
6190: 69 74 65 5f 6d 61 73 74 65 72 2e 20 20 54 68 65  ite_master.  The
61a0: 72 65 20 69 73 20 6f 6e 65 20 69 6e 64 65 78 20  re is one index 
61b0: 62 2d 74 72 65 65 0a 69 6e 20 74 68 65 20 64 61  b-tree.in the da
61c0: 74 61 62 61 73 65 20 66 69 6c 65 20 66 6f 72 20  tabase file for 
61d0: 65 61 63 68 20 69 6e 64 65 78 20 69 6e 20 74 68  each index in th
61e0: 65 20 73 63 68 65 6d 61 2c 20 69 6e 63 6c 75 64  e schema, includ
61f0: 69 6e 67 20 69 6d 70 6c 69 65 64 20 69 6e 64 65  ing implied inde
6200: 78 65 73 0a 63 72 65 61 74 65 64 20 62 79 20 75  xes.created by u
6210: 6e 69 71 75 65 6e 65 73 73 20 63 6f 6e 73 74 72  niqueness constr
6220: 61 69 6e 74 73 2e 20 20 54 68 65 72 65 20 61 72  aints.  There ar
6230: 65 20 6e 6f 20 62 2d 74 72 65 65 73 20 61 73 73  e no b-trees ass
6240: 6f 63 69 61 74 65 64 20 77 69 74 68 0a 5b 76 69  ociated with.[vi
6250: 72 74 75 61 6c 20 74 61 62 6c 65 73 5d 2e 20 20  rtual tables].  
6260: 53 70 65 63 69 66 69 63 20 76 69 72 74 75 61 6c  Specific virtual
6270: 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74   table implement
6280: 61 74 69 6f 6e 73 20 6d 69 67 68 74 20 6d 61 6b  ations might mak
6290: 65 20 75 73 65 0a 6f 66 20 5b 73 68 61 64 6f 77  e use.of [shadow
62a0: 20 74 61 62 6c 65 73 5d 20 66 6f 72 20 73 74 6f   tables] for sto
62b0: 72 61 67 65 2c 20 62 75 74 20 74 68 6f 73 65 20  rage, but those 
62c0: 73 68 61 64 6f 77 20 74 61 62 6c 65 73 20 77 69  shadow tables wi
62d0: 6c 6c 20 68 61 76 65 20 73 65 70 61 72 61 74 65  ll have separate
62e0: 0a 65 6e 74 72 69 65 73 20 69 6e 20 74 68 65 20  .entries in the 
62f0: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e  database schema.
6300: 20 20 5b 57 49 54 48 4f 55 54 20 52 4f 57 49 44    [WITHOUT ROWID
6310: 5d 20 74 61 62 6c 65 73 20 75 73 65 20 69 6e 64  ] tables use ind
6320: 65 78 20 62 2d 74 72 65 65 73 0a 72 61 74 68 65  ex b-trees.rathe
6330: 72 20 74 68 61 6e 20 61 20 74 61 62 6c 65 20 62  r than a table b
6340: 2d 74 72 65 65 73 2c 20 73 6f 20 74 68 65 72 65  -trees, so there
6350: 20 69 73 20 6f 6e 65 0a 69 6e 64 65 78 20 62 2d   is one.index b-
6360: 74 72 65 65 20 69 6e 20 74 68 65 20 64 61 74 61  tree in the data
6370: 62 61 73 65 20 66 69 6c 65 20 66 6f 72 20 65 61  base file for ea
6380: 63 68 20 5b 57 49 54 48 4f 55 54 20 52 4f 57 49  ch [WITHOUT ROWI
6390: 44 5d 20 74 61 62 6c 65 2e 0a 54 68 65 20 62 2d  D] table..The b-
63a0: 74 72 65 65 20 63 6f 72 72 65 73 70 6f 6e 64 69  tree correspondi
63b0: 6e 67 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65  ng to the sqlite
63c0: 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 20 69 73  _master table is
63d0: 20 61 6c 77 61 79 73 20 61 20 74 61 62 6c 65 0a   always a table.
63e0: 62 2d 74 72 65 65 20 61 6e 64 20 61 6c 77 61 79  b-tree and alway
63f0: 73 20 68 61 73 20 61 20 72 6f 6f 74 20 70 61 67  s has a root pag
6400: 65 20 6f 66 20 31 2e 0a 54 68 65 20 73 71 6c 69  e of 1..The sqli
6410: 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 20  te_master table 
6420: 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 72 6f 6f  contains the roo
6430: 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20 66 6f  t page number fo
6440: 72 20 65 76 65 72 79 20 6f 74 68 65 72 20 0a 74  r every other .t
6450: 61 62 6c 65 20 61 6e 64 20 69 6e 64 65 78 20 69  able and index i
6460: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  n the database f
6470: 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 45 61 63  ile.</p>..<p>Eac
6480: 68 20 65 6e 74 72 79 20 69 6e 20 61 20 74 61 62  h entry in a tab
6490: 6c 65 20 62 2d 74 72 65 65 20 63 6f 6e 73 69 73  le b-tree consis
64a0: 74 73 20 6f 66 20 61 20 36 34 2d 62 69 74 20 73  ts of a 64-bit s
64b0: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 6b 65  igned integer ke
64c0: 79 0a 61 6e 64 20 75 70 20 74 6f 20 32 31 34 37  y.and up to 2147
64d0: 34 38 33 36 34 37 20 62 79 74 65 73 20 6f 66 20  483647 bytes of 
64e0: 61 72 62 69 74 72 61 72 79 20 64 61 74 61 2e 20  arbitrary data. 
64f0: 20 28 54 68 65 20 6b 65 79 20 6f 66 20 61 20 74   (The key of a t
6500: 61 62 6c 65 20 62 2d 74 72 65 65 0a 63 6f 72 72  able b-tree.corr
6510: 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 5b  esponds to the [
6520: 72 6f 77 69 64 5d 20 6f 66 20 74 68 65 20 53 51  rowid] of the SQ
6530: 4c 20 74 61 62 6c 65 20 74 68 61 74 20 74 68 65  L table that the
6540: 20 62 2d 74 72 65 65 20 69 6d 70 6c 65 6d 65 6e   b-tree implemen
6550: 74 73 2e 29 0a 49 6e 74 65 72 69 6f 72 20 74 61  ts.).Interior ta
6560: 62 6c 65 20 62 2d 74 72 65 65 73 20 68 6f 6c 64  ble b-trees hold
6570: 20 6f 6e 6c 79 20 6b 65 79 73 20 61 6e 64 20 70   only keys and p
6580: 6f 69 6e 74 65 72 73 20 74 6f 20 63 68 69 6c 64  ointers to child
6590: 72 65 6e 2e 0a 41 6c 6c 20 64 61 74 61 20 69 73  ren..All data is
65a0: 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68   contained in th
65b0: 65 20 74 61 62 6c 65 20 62 2d 74 72 65 65 20 6c  e table b-tree l
65c0: 65 61 76 65 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 45  eaves.</p>..<p>E
65d0: 61 63 68 20 65 6e 74 72 79 20 69 6e 20 61 6e 20  ach entry in an 
65e0: 69 6e 64 65 78 20 62 2d 74 72 65 65 20 63 6f 6e  index b-tree con
65f0: 73 69 73 74 73 20 6f 66 20 61 6e 20 61 72 62 69  sists of an arbi
6600: 74 72 61 72 79 20 6b 65 79 20 6f 66 20 75 70 0a  trary key of up.
6610: 74 6f 20 32 31 34 37 34 38 33 36 34 37 20 62 79  to 2147483647 by
6620: 74 65 73 20 69 6e 20 6c 65 6e 67 74 68 20 61 6e  tes in length an
6630: 64 20 6e 6f 20 64 61 74 61 2e 3c 2f 70 3e 0a 0a  d no data.</p>..
6640: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
6650: 20 63 65 6c 6c 5f 70 61 79 6c 6f 61 64 20 7b 63   cell_payload {c
6660: 65 6c 6c 20 70 61 79 6c 6f 61 64 7d 3c 2f 74 63  ell payload}</tc
6670: 6c 3e 0a 3c 70 3e 44 65 66 69 6e 65 20 74 68 65  l>.<p>Define the
6680: 20 22 70 61 79 6c 6f 61 64 22 20 6f 66 20 61 20   "payload" of a 
6690: 63 65 6c 6c 20 74 6f 20 62 65 20 74 68 65 20 61  cell to be the a
66a0: 72 62 69 74 72 61 72 79 20 6c 65 6e 67 74 68 20  rbitrary length 
66b0: 73 65 63 74 69 6f 6e 0a 6f 66 20 74 68 65 20 63  section.of the c
66c0: 65 6c 6c 2e 20 20 46 6f 72 20 61 6e 20 69 6e 64  ell.  For an ind
66d0: 65 78 20 62 2d 74 72 65 65 2c 20 74 68 65 20 6b  ex b-tree, the k
66e0: 65 79 20 69 73 20 61 6c 77 61 79 73 20 61 72 62  ey is always arb
66f0: 69 74 72 61 72 79 20 69 6e 20 6c 65 6e 67 74 68  itrary in length
6700: 0a 61 6e 64 20 68 65 6e 63 65 20 74 68 65 20 70  .and hence the p
6710: 61 79 6c 6f 61 64 20 69 73 20 74 68 65 20 6b 65  ayload is the ke
6720: 79 2e 20 20 54 68 65 72 65 20 61 72 65 20 6e 6f  y.  There are no
6730: 20 61 72 62 69 74 72 61 72 79 20 6c 65 6e 67 74   arbitrary lengt
6740: 68 20 65 6c 65 6d 65 6e 74 73 0a 69 6e 20 74 68  h elements.in th
6750: 65 20 63 65 6c 6c 73 20 6f 66 20 69 6e 74 65 72  e cells of inter
6760: 69 6f 72 20 74 61 62 6c 65 20 62 2d 74 72 65 65  ior table b-tree
6770: 20 70 61 67 65 73 20 61 6e 64 20 73 6f 20 74 68   pages and so th
6780: 6f 73 65 20 63 65 6c 6c 73 20 68 61 76 65 20 6e  ose cells have n
6790: 6f 0a 70 61 79 6c 6f 61 64 2e 20 20 54 61 62 6c  o.payload.  Tabl
67a0: 65 20 62 2d 74 72 65 65 20 6c 65 61 66 20 70 61  e b-tree leaf pa
67b0: 67 65 73 20 63 6f 6e 74 61 69 6e 20 61 72 62 69  ges contain arbi
67c0: 74 72 61 72 79 20 6c 65 6e 67 74 68 20 63 6f 6e  trary length con
67d0: 74 65 6e 74 20 61 6e 64 0a 73 6f 20 66 6f 72 20  tent and.so for 
67e0: 63 65 6c 6c 73 20 6f 6e 20 74 68 6f 73 65 20 70  cells on those p
67f0: 61 67 65 73 20 74 68 65 20 70 61 79 6c 6f 61 64  ages the payload
6800: 20 69 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 2e   is the content.
6810: 0a 3c 70 3e 57 68 65 6e 20 74 68 65 20 73 69 7a  .<p>When the siz
6820: 65 20 6f 66 20 70 61 79 6c 6f 61 64 20 66 6f 72  e of payload for
6830: 20 61 20 63 65 6c 6c 20 65 78 63 65 65 64 73 20   a cell exceeds 
6840: 61 20 63 65 72 74 61 69 6e 20 74 68 72 65 73 68  a certain thresh
6850: 6f 6c 64 20 28 74 6f 0a 62 65 20 64 65 66 69 6e  old (to.be defin
6860: 65 64 20 6c 61 74 65 72 29 20 74 68 65 6e 20 6f  ed later) then o
6870: 6e 6c 79 20 74 68 65 20 66 69 72 73 74 20 66 65  nly the first fe
6880: 77 20 62 79 74 65 73 20 6f 66 20 74 68 65 20 70  w bytes of the p
6890: 61 79 6c 6f 61 64 0a 61 72 65 20 73 74 6f 72 65  ayload.are store
68a0: 64 20 6f 6e 20 74 68 65 20 62 2d 74 72 65 65 20  d on the b-tree 
68b0: 70 61 67 65 20 61 6e 64 20 74 68 65 20 62 61 6c  page and the bal
68c0: 61 6e 63 65 20 69 73 20 73 74 6f 72 65 64 20 69  ance is stored i
68d0: 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 0a  n a linked list.
68e0: 6f 66 20 63 6f 6e 74 65 6e 74 20 6f 76 65 72 66  of content overf
68f0: 6c 6f 77 20 70 61 67 65 73 2e 3c 2f 70 3e 0a 0a  low pages.</p>..
6900: 3c 70 3e 41 20 62 2d 74 72 65 65 20 70 61 67 65  <p>A b-tree page
6910: 20 69 73 20 64 69 76 69 64 65 64 20 69 6e 74 6f   is divided into
6920: 20 72 65 67 69 6f 6e 73 20 69 6e 20 74 68 65 20   regions in the 
6930: 66 6f 6c 6c 6f 77 69 6e 67 20 6f 72 64 65 72 3a  following order:
6940: 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 54 68 65 20 31  ..<ol>.<li>The 1
6950: 30 30 2d 62 79 74 65 20 64 61 74 61 62 61 73 65  00-byte database
6960: 20 66 69 6c 65 20 68 65 61 64 65 72 20 28 66 6f   file header (fo
6970: 75 6e 64 20 6f 6e 20 70 61 67 65 20 31 20 6f 6e  und on page 1 on
6980: 6c 79 29 0a 3c 6c 69 3e 54 68 65 20 38 20 6f 72  ly).<li>The 8 or
6990: 20 31 32 20 62 79 74 65 20 62 2d 74 72 65 65 20   12 byte b-tree 
69a0: 70 61 67 65 20 68 65 61 64 65 72 0a 3c 6c 69 3e  page header.<li>
69b0: 54 68 65 20 63 65 6c 6c 20 70 6f 69 6e 74 65 72  The cell pointer
69c0: 20 61 72 72 61 79 0a 3c 6c 69 3e 55 6e 61 6c 6c   array.<li>Unall
69d0: 6f 63 61 74 65 64 20 73 70 61 63 65 0a 3c 6c 69  ocated space.<li
69e0: 3e 54 68 65 20 63 65 6c 6c 20 63 6f 6e 74 65 6e  >The cell conten
69f0: 74 20 61 72 65 61 0a 3c 6c 69 3e 54 68 65 20 72  t area.<li>The r
6a00: 65 73 65 72 76 65 64 20 72 65 67 69 6f 6e 2e 0a  eserved region..
6a10: 3c 2f 6f 6c 3e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54  </ol>.</p>..<p>T
6a20: 68 65 20 31 30 30 2d 62 79 74 65 20 64 61 74 61  he 100-byte data
6a30: 62 61 73 65 20 66 69 6c 65 20 68 65 61 64 65 72  base file header
6a40: 20 69 73 20 66 6f 75 6e 64 20 6f 6e 6c 79 20 6f   is found only o
6a50: 6e 20 70 61 67 65 20 31 2c 20 77 68 69 63 68 20  n page 1, which 
6a60: 69 73 0a 61 6c 77 61 79 73 20 61 20 74 61 62 6c  is.always a tabl
6a70: 65 20 62 2d 74 72 65 65 20 70 61 67 65 2e 20 20  e b-tree page.  
6a80: 41 6c 6c 20 6f 74 68 65 72 20 62 2d 74 72 65 65  All other b-tree
6a90: 20 70 61 67 65 73 20 69 6e 20 74 68 65 20 64 61   pages in the da
6aa0: 74 61 62 61 73 65 20 66 69 6c 65 0a 6f 6d 69 74  tabase file.omit
6ab0: 20 74 68 69 73 20 31 30 30 2d 62 79 74 65 20 68   this 100-byte h
6ac0: 65 61 64 65 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54  eader.</p>..<p>T
6ad0: 68 65 20 72 65 73 65 72 76 65 64 20 72 65 67 69  he reserved regi
6ae0: 6f 6e 20 69 73 20 61 6e 20 61 72 65 61 20 6f 66  on is an area of
6af0: 20 75 6e 75 73 65 64 20 73 70 61 63 65 20 61 74   unused space at
6b00: 20 74 68 65 20 65 6e 64 20 6f 66 20 65 76 65 72   the end of ever
6b10: 79 0a 70 61 67 65 20 28 65 78 63 65 70 74 20 74  y.page (except t
6b20: 68 65 20 6c 6f 63 6b 69 6e 67 20 70 61 67 65 29  he locking page)
6b30: 20 74 68 61 74 20 65 78 74 65 6e 73 69 6f 6e 73   that extensions
6b40: 20 63 61 6e 20 75 73 65 20 74 6f 20 68 6f 6c 64   can use to hold
6b50: 20 70 65 72 2d 70 61 67 65 0a 69 6e 66 6f 72 6d   per-page.inform
6b60: 61 74 69 6f 6e 2e 20 20 5e 54 68 65 20 73 69 7a  ation.  ^The siz
6b70: 65 20 6f 66 20 74 68 65 20 72 65 73 65 72 76 65  e of the reserve
6b80: 64 20 72 65 67 69 6f 6e 20 69 73 20 64 65 74 65  d region is dete
6b90: 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 6f 6e  rmined by the on
6ba0: 65 2d 62 79 74 65 0a 75 6e 73 69 67 6e 65 64 20  e-byte.unsigned 
6bb0: 69 6e 74 65 67 65 72 20 66 6f 75 6e 64 20 61 74  integer found at
6bc0: 20 61 6e 20 6f 66 66 73 65 74 20 6f 66 20 32 30   an offset of 20
6bd0: 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61 62 61   into the databa
6be0: 73 65 20 66 69 6c 65 20 68 65 61 64 65 72 2e 0a  se file header..
6bf0: 54 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20  The size of the 
6c00: 72 65 73 65 72 76 65 64 20 72 65 67 69 6f 6e 20  reserved region 
6c10: 69 73 20 75 73 75 61 6c 6c 79 20 7a 65 72 6f 2e  is usually zero.
6c20: 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 62 2d 74  </p>..<p>The b-t
6c30: 72 65 65 20 70 61 67 65 20 68 65 61 64 65 72 20  ree page header 
6c40: 69 73 20 38 20 62 79 74 65 73 20 69 6e 20 73 69  is 8 bytes in si
6c50: 7a 65 20 66 6f 72 20 6c 65 61 66 20 70 61 67 65  ze for leaf page
6c60: 73 20 61 6e 64 20 31 32 0a 62 79 74 65 73 20 66  s and 12.bytes f
6c70: 6f 72 20 69 6e 74 65 72 69 6f 72 20 70 61 67 65  or interior page
6c80: 73 2e 20 20 41 6c 6c 20 6d 75 6c 74 69 62 79 74  s.  All multibyt
6c90: 65 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20  e values in the 
6ca0: 70 61 67 65 20 68 65 61 64 65 72 0a 61 72 65 20  page header.are 
6cb0: 62 69 67 2d 65 6e 64 69 61 6e 2e 0a 54 68 65 20  big-endian..The 
6cc0: 62 2d 74 72 65 65 20 70 61 67 65 20 68 65 61 64  b-tree page head
6cd0: 65 72 20 69 73 20 63 6f 6d 70 6f 73 65 64 20 6f  er is composed o
6ce0: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
6cf0: 66 69 65 6c 64 73 3a 3c 2f 70 3e 0a 0a 3c 63 65  fields:</p>..<ce
6d00: 6e 74 65 72 3e 0a 3c 69 3e 42 2d 74 72 65 65 20  nter>.<i>B-tree 
6d10: 50 61 67 65 20 48 65 61 64 65 72 20 46 6f 72 6d  Page Header Form
6d20: 61 74 3c 2f 69 3e 3c 62 72 3e 0a 3c 74 61 62 6c  at</i><br>.<tabl
6d30: 65 20 62 6f 72 64 65 72 3d 31 20 77 69 64 74 68  e border=1 width
6d40: 3d 22 38 30 25 22 3e 0a 3c 74 72 3e 3c 74 68 3e  ="80%">.<tr><th>
6d50: 4f 66 66 73 65 74 3c 74 68 3e 53 69 7a 65 3c 74  Offset<th>Size<t
6d60: 68 3e 44 65 73 63 72 69 70 74 69 6f 6e 0a 3c 74  h>Description.<t
6d70: 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74  r><td align=cent
6d80: 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 30 3c  er valign=top>0<
6d90: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
6da0: 76 61 6c 69 67 6e 3d 74 6f 70 3e 31 3c 74 64 20  valign=top>1<td 
6db0: 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 54 68 65  align=left>.^The
6dc0: 20 6f 6e 65 2d 62 79 74 65 20 66 6c 61 67 20 61   one-byte flag a
6dd0: 74 20 6f 66 66 73 65 74 20 30 20 69 6e 64 69 63  t offset 0 indic
6de0: 61 74 69 6e 67 20 74 68 65 20 62 2d 74 72 65 65  ating the b-tree
6df0: 20 70 61 67 65 20 74 79 70 65 2e 3c 75 6c 3e 0a   page type.<ul>.
6e00: 3c 6c 69 3e 5e 41 20 76 61 6c 75 65 20 6f 66 20  <li>^A value of 
6e10: 32 20 28 30 78 30 32 29 20 6d 65 61 6e 73 20 74  2 (0x02) means t
6e20: 68 65 20 70 61 67 65 20 69 73 20 61 6e 20 69 6e  he page is an in
6e30: 74 65 72 69 6f 72 20 69 6e 64 65 78 20 62 2d 74  terior index b-t
6e40: 72 65 65 20 70 61 67 65 2e 0a 3c 6c 69 3e 5e 41  ree page..<li>^A
6e50: 20 76 61 6c 75 65 20 6f 66 20 35 20 28 30 78 30   value of 5 (0x0
6e60: 35 29 20 6d 65 61 6e 73 20 74 68 65 20 70 61 67  5) means the pag
6e70: 65 20 69 73 20 61 6e 20 69 6e 74 65 72 69 6f 72  e is an interior
6e80: 20 74 61 62 6c 65 20 62 2d 74 72 65 65 20 70 61   table b-tree pa
6e90: 67 65 2e 0a 3c 6c 69 3e 5e 41 20 76 61 6c 75 65  ge..<li>^A value
6ea0: 20 6f 66 20 31 30 20 28 30 78 30 61 29 20 6d 65   of 10 (0x0a) me
6eb0: 61 6e 73 20 74 68 65 20 70 61 67 65 20 69 73 20  ans the page is 
6ec0: 61 20 6c 65 61 66 20 69 6e 64 65 78 20 62 2d 74  a leaf index b-t
6ed0: 72 65 65 20 70 61 67 65 2e 0a 3c 6c 69 3e 5e 41  ree page..<li>^A
6ee0: 20 76 61 6c 75 65 20 6f 66 20 31 33 20 28 30 78   value of 13 (0x
6ef0: 30 64 29 20 6d 65 61 6e 73 20 74 68 65 20 70 61  0d) means the pa
6f00: 67 65 20 69 73 20 61 20 6c 65 61 66 20 74 61 62  ge is a leaf tab
6f10: 6c 65 20 62 2d 74 72 65 65 20 70 61 67 65 2e 3c  le b-tree page.<
6f20: 2f 75 6c 3e 0a 5e 41 6e 79 20 6f 74 68 65 72 20  /ul>.^Any other 
6f30: 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20 62 2d  value for the b-
6f40: 74 72 65 65 20 70 61 67 65 20 74 79 70 65 20 69  tree page type i
6f50: 73 20 61 6e 20 65 72 72 6f 72 2e 0a 3c 74 72 3e  s an error..<tr>
6f60: 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  <td align=center
6f70: 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 31 3c 74 64   valign=top>1<td
6f80: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61   align=center va
6f90: 6c 69 67 6e 3d 74 6f 70 3e 32 3c 74 64 20 61 6c  lign=top>2<td al
6fa0: 69 67 6e 3d 6c 65 66 74 3e 0a 5e 54 68 65 20 74  ign=left>.^The t
6fb0: 77 6f 2d 62 79 74 65 20 69 6e 74 65 67 65 72 20  wo-byte integer 
6fc0: 61 74 20 6f 66 66 73 65 74 20 31 20 67 69 76 65  at offset 1 give
6fd0: 73 20 74 68 65 20 73 74 61 72 74 20 6f 66 20 74  s the start of t
6fe0: 68 65 0a 66 69 72 73 74 20 66 72 65 65 62 6c 6f  he.first freeblo
6ff0: 63 6b 20 6f 6e 20 74 68 65 20 70 61 67 65 2c 20  ck on the page, 
7000: 6f 72 20 69 73 20 7a 65 72 6f 20 69 66 20 74 68  or is zero if th
7010: 65 72 65 20 61 72 65 20 6e 6f 20 66 72 65 65 62  ere are no freeb
7020: 6c 6f 63 6b 73 2e 0a 3c 74 72 3e 3c 74 64 20 61  locks..<tr><td a
7030: 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69  lign=center vali
7040: 67 6e 3d 74 6f 70 3e 33 3c 74 64 20 61 6c 69 67  gn=top>3<td alig
7050: 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d  n=center valign=
7060: 74 6f 70 3e 32 3c 74 64 20 61 6c 69 67 6e 3d 6c  top>2<td align=l
7070: 65 66 74 3e 0a 5e 54 68 65 20 74 77 6f 2d 62 79  eft>.^The two-by
7080: 74 65 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66  te integer at of
7090: 66 73 65 74 20 33 20 67 69 76 65 73 20 74 68 65  fset 3 gives the
70a0: 20 6e 75 6d 62 65 72 20 6f 66 20 63 65 6c 6c 73   number of cells
70b0: 20 6f 6e 20 74 68 65 20 70 61 67 65 2e 0a 3c 74   on the page..<t
70c0: 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74  r><td align=cent
70d0: 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 35 3c  er valign=top>5<
70e0: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
70f0: 76 61 6c 69 67 6e 3d 74 6f 70 3e 32 3c 74 64 20  valign=top>2<td 
7100: 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 28 54 68  align=left>.^(Th
7110: 65 20 74 77 6f 2d 62 79 74 65 20 69 6e 74 65 67  e two-byte integ
7120: 65 72 20 61 74 20 6f 66 66 73 65 74 20 35 20 64  er at offset 5 d
7130: 65 73 69 67 6e 61 74 65 73 20 74 68 65 20 73 74  esignates the st
7140: 61 72 74 20 6f 66 20 74 68 65 20 63 65 6c 6c 20  art of the cell 
7150: 63 6f 6e 74 65 6e 74 0a 61 72 65 61 2e 20 20 41  content.area.  A
7160: 20 7a 65 72 6f 20 76 61 6c 75 65 20 66 6f 72 20   zero value for 
7170: 74 68 69 73 20 69 6e 74 65 67 65 72 20 69 73 20  this integer is 
7180: 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 36  interpreted as 6
7190: 35 35 33 36 2e 29 5e 0a 3c 74 72 3e 3c 74 64 20  5536.)^.<tr><td 
71a0: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c  align=center val
71b0: 69 67 6e 3d 74 6f 70 3e 37 3c 74 64 20 61 6c 69  ign=top>7<td ali
71c0: 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e  gn=center valign
71d0: 3d 74 6f 70 3e 31 3c 74 64 20 61 6c 69 67 6e 3d  =top>1<td align=
71e0: 6c 65 66 74 3e 0a 5e 54 68 65 20 6f 6e 65 2d 62  left>.^The one-b
71f0: 79 74 65 20 69 6e 74 65 67 65 72 20 61 74 20 6f  yte integer at o
7200: 66 66 73 65 74 20 37 20 67 69 76 65 73 20 74 68  ffset 7 gives th
7210: 65 20 6e 75 6d 62 65 72 20 6f 66 20 66 72 61 67  e number of frag
7220: 6d 65 6e 74 65 64 20 66 72 65 65 0a 62 79 74 65  mented free.byte
7230: 73 20 77 69 74 68 69 6e 20 74 68 65 20 63 65 6c  s within the cel
7240: 6c 20 63 6f 6e 74 65 6e 74 20 61 72 65 61 2e 0a  l content area..
7250: 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65  <tr><td align=ce
7260: 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e  nter valign=top>
7270: 38 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65  8<td align=cente
7280: 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 34 3c 74  r valign=top>4<t
7290: 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 28  d align=left>.^(
72a0: 54 68 65 20 66 6f 75 72 2d 62 79 74 65 20 70 61  The four-byte pa
72b0: 67 65 20 6e 75 6d 62 65 72 20 61 74 20 6f 66 66  ge number at off
72c0: 73 65 74 20 38 20 69 73 20 74 68 65 20 72 69 67  set 8 is the rig
72d0: 68 74 2d 6d 6f 73 74 20 70 6f 69 6e 74 65 72 2e  ht-most pointer.
72e0: 20 20 54 68 69 73 0a 76 61 6c 75 65 20 61 70 70    This.value app
72f0: 65 61 72 73 20 69 6e 20 74 68 65 20 68 65 61 64  ears in the head
7300: 65 72 20 6f 66 20 69 6e 74 65 72 69 6f 72 20 62  er of interior b
7310: 2d 74 72 65 65 20 70 61 67 65 73 20 6f 6e 6c 79  -tree pages only
7320: 20 61 6e 64 20 69 73 20 6f 6d 69 74 74 65 64 20   and is omitted 
7330: 66 72 6f 6d 0a 61 6c 6c 20 6f 74 68 65 72 20 70  from.all other p
7340: 61 67 65 73 2e 29 5e 0a 3c 2f 74 61 62 6c 65 3e  ages.)^.</table>
7350: 3c 2f 63 65 6e 74 65 72 3e 0a 0a 3c 70 3e 5e 54  </center>..<p>^T
7360: 68 65 20 63 65 6c 6c 20 70 6f 69 6e 74 65 72 20  he cell pointer 
7370: 61 72 72 61 79 20 6f 66 20 61 20 62 2d 74 72 65  array of a b-tre
7380: 65 20 70 61 67 65 20 69 6d 6d 65 64 69 61 74 65  e page immediate
7390: 6c 79 20 66 6f 6c 6c 6f 77 73 20 74 68 65 20 62  ly follows the b
73a0: 2d 74 72 65 65 0a 70 61 67 65 20 68 65 61 64 65  -tree.page heade
73b0: 72 2e 20 20 4c 65 74 20 4b 20 62 65 20 74 68 65  r.  Let K be the
73c0: 20 6e 75 6d 62 65 72 20 6f 66 20 63 65 6c 6c 73   number of cells
73d0: 20 6f 6e 20 74 68 65 20 62 74 72 65 65 2e 20 20   on the btree.  
73e0: 5e 54 68 65 20 63 65 6c 6c 20 70 6f 69 6e 74 65  ^The cell pointe
73f0: 72 0a 61 72 72 61 79 20 63 6f 6e 73 69 73 74 73  r.array consists
7400: 20 6f 66 20 4b 20 32 2d 62 79 74 65 20 69 6e 74   of K 2-byte int
7410: 65 67 65 72 20 6f 66 66 73 65 74 73 20 74 6f 20  eger offsets to 
7420: 74 68 65 20 63 65 6c 6c 20 63 6f 6e 74 65 6e 74  the cell content
7430: 73 2e 20 20 5e 54 68 65 0a 63 65 6c 6c 20 70 6f  s.  ^The.cell po
7440: 69 6e 74 65 72 73 20 61 72 65 20 61 72 72 61 6e  inters are arran
7450: 67 65 64 20 69 6e 20 6b 65 79 20 6f 72 64 65 72  ged in key order
7460: 20 77 69 74 68 20 6c 65 66 74 2d 6d 6f 73 74 20   with left-most 
7470: 63 65 6c 6c 20 28 74 68 65 20 63 65 6c 6c 20 77  cell (the cell w
7480: 69 74 68 20 74 68 65 0a 73 6d 61 6c 6c 65 73 74  ith the.smallest
7490: 20 6b 65 79 29 20 66 69 72 73 74 20 61 6e 64 20   key) first and 
74a0: 74 68 65 20 72 69 67 68 74 2d 6d 6f 73 74 20 63  the right-most c
74b0: 65 6c 6c 20 28 74 68 65 20 63 65 6c 6c 20 77 69  ell (the cell wi
74c0: 74 68 20 74 68 65 20 6c 61 72 67 65 73 74 0a 6b  th the largest.k
74d0: 65 79 29 20 6c 61 73 74 2e 3c 2f 70 3e 0a 0a 3c  ey) last.</p>..<
74e0: 70 3e 43 65 6c 6c 20 63 6f 6e 74 65 6e 74 20 69  p>Cell content i
74f0: 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  s stored in the 
7500: 63 65 6c 6c 20 63 6f 6e 74 65 6e 74 20 72 65 67  cell content reg
7510: 69 6f 6e 20 6f 66 20 74 68 65 20 62 2d 74 72 65  ion of the b-tre
7520: 65 20 70 61 67 65 2e 0a 53 51 4c 69 74 65 20 73  e page..SQLite s
7530: 74 72 69 76 65 73 20 74 6f 20 70 6c 61 63 65 20  trives to place 
7540: 63 65 6c 6c 73 20 61 73 20 66 61 72 20 74 6f 77  cells as far tow
7550: 61 72 64 20 74 68 65 20 65 6e 64 20 6f 66 20 74  ard the end of t
7560: 68 65 20 62 2d 74 72 65 65 20 70 61 67 65 20 61  he b-tree page a
7570: 73 0a 69 74 20 63 61 6e 2c 20 69 6e 20 6f 72 64  s.it can, in ord
7580: 65 72 20 74 6f 20 6c 65 61 76 65 20 73 70 61 63  er to leave spac
7590: 65 20 66 6f 72 20 66 75 74 75 72 65 20 67 72 6f  e for future gro
75a0: 77 74 68 20 6f 66 20 74 68 65 20 63 65 6c 6c 20  wth of the cell 
75b0: 70 6f 69 6e 74 65 72 20 61 72 72 61 79 2e 0a 54  pointer array..T
75c0: 68 65 20 61 72 65 61 20 69 6e 20 62 65 74 77 65  he area in betwe
75d0: 65 6e 20 74 68 65 20 6c 61 73 74 20 63 65 6c 6c  en the last cell
75e0: 20 70 6f 69 6e 74 65 72 20 61 72 72 61 79 20 65   pointer array e
75f0: 6e 74 72 79 20 61 6e 64 20 74 68 65 20 62 65 67  ntry and the beg
7600: 69 6e 6e 69 6e 67 20 6f 66 0a 74 68 65 20 66 69  inning of.the fi
7610: 72 73 74 20 63 65 6c 6c 20 69 73 20 74 68 65 20  rst cell is the 
7620: 75 6e 61 6c 6c 6f 63 61 74 65 64 20 72 65 67 69  unallocated regi
7630: 6f 6e 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66  on..</p>..<p>^If
7640: 20 61 20 70 61 67 65 20 63 6f 6e 74 61 69 6e 73   a page contains
7650: 20 6e 6f 20 63 65 6c 6c 73 20 28 77 68 69 63 68   no cells (which
7660: 20 69 73 20 6f 6e 6c 79 20 70 6f 73 73 69 62 6c   is only possibl
7670: 65 20 66 6f 72 20 61 20 72 6f 6f 74 20 70 61 67  e for a root pag
7680: 65 0a 6f 66 20 61 20 74 61 62 6c 65 20 74 68 61  e.of a table tha
7690: 74 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 72 6f  t contains no ro
76a0: 77 73 29 20 74 68 65 6e 20 74 68 65 20 6f 66 66  ws) then the off
76b0: 73 65 74 20 74 6f 20 74 68 65 0a 63 65 6c 6c 20  set to the.cell 
76c0: 63 6f 6e 74 65 6e 74 20 61 72 65 61 20 77 69 6c  content area wil
76d0: 6c 20 65 71 75 61 6c 20 74 68 65 20 70 61 67 65  l equal the page
76e0: 20 73 69 7a 65 20 6d 69 6e 75 73 20 74 68 65 20   size minus the 
76f0: 62 79 74 65 73 20 6f 66 20 72 65 73 65 72 76 65  bytes of reserve
7700: 64 20 73 70 61 63 65 2e 0a 5e 28 49 66 20 74 68  d space..^(If th
7710: 65 20 64 61 74 61 62 61 73 65 20 75 73 65 73 20  e database uses 
7720: 61 20 36 35 35 33 36 2d 62 79 74 65 20 70 61 67  a 65536-byte pag
7730: 65 20 73 69 7a 65 20 61 6e 64 20 74 68 65 20 72  e size and the r
7740: 65 73 65 72 76 65 64 20 73 70 61 63 65 20 69 73  eserved space is
7750: 20 7a 65 72 6f 0a 28 74 68 65 20 75 73 75 61 6c   zero.(the usual
7760: 20 76 61 6c 75 65 20 66 6f 72 20 72 65 73 65 72   value for reser
7770: 76 65 64 20 73 70 61 63 65 29 20 74 68 65 6e 20  ved space) then 
7780: 74 68 65 20 63 65 6c 6c 20 63 6f 6e 74 65 6e 74  the cell content
7790: 20 6f 66 66 73 65 74 20 6f 66 20 61 6e 0a 65 6d   offset of an.em
77a0: 70 74 79 20 70 61 67 65 20 77 61 6e 74 73 20 74  pty page wants t
77b0: 6f 20 62 65 20 36 35 35 33 36 2e 20 20 0a 48 6f  o be 65536.  .Ho
77c0: 77 65 76 65 72 2c 20 74 68 61 74 20 69 6e 74 65  wever, that inte
77d0: 67 65 72 20 69 73 20 74 6f 6f 20 6c 61 72 67 65  ger is too large
77e0: 20 74 6f 20 62 65 20 73 74 6f 72 65 64 20 69 6e   to be stored in
77f0: 20 61 0a 32 2d 62 79 74 65 20 75 6e 73 69 67 6e   a.2-byte unsign
7800: 65 64 20 69 6e 74 65 67 65 72 2c 20 73 6f 20 61  ed integer, so a
7810: 20 76 61 6c 75 65 20 6f 66 20 30 20 69 73 20 75   value of 0 is u
7820: 73 65 64 20 69 6e 20 69 74 73 20 70 6c 61 63 65  sed in its place
7830: 2e 29 5e 0a 0a 3c 70 3e 41 20 66 72 65 65 62 6c  .)^..<p>A freebl
7840: 6f 63 6b 20 69 73 20 61 20 73 74 72 75 63 74 75  ock is a structu
7850: 72 65 20 75 73 65 64 20 74 6f 20 69 64 65 6e 74  re used to ident
7860: 69 66 79 20 75 6e 61 6c 6c 6f 63 61 74 65 64 20  ify unallocated 
7870: 73 70 61 63 65 20 77 69 74 68 69 6e 0a 61 20 62  space within.a b
7880: 2d 74 72 65 65 20 70 61 67 65 2e 20 20 46 72 65  -tree page.  Fre
7890: 65 62 6c 6f 63 6b 73 20 61 72 65 20 6f 72 67 61  eblocks are orga
78a0: 6e 69 7a 65 64 20 61 73 20 61 20 63 68 61 69 6e  nized as a chain
78b0: 2e 20 20 5e 54 68 65 20 66 69 72 73 74 20 32 20  .  ^The first 2 
78c0: 62 79 74 65 73 20 6f 66 0a 61 20 66 72 65 65 62  bytes of.a freeb
78d0: 6c 6f 63 6b 20 61 72 65 20 61 20 62 69 67 2d 65  lock are a big-e
78e0: 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20 77 68  ndian integer wh
78f0: 69 63 68 20 69 73 20 74 68 65 20 6f 66 66 73 65  ich is the offse
7900: 74 20 69 6e 20 74 68 65 20 62 2d 74 72 65 65 20  t in the b-tree 
7910: 70 61 67 65 0a 6f 66 20 74 68 65 20 6e 65 78 74  page.of the next
7920: 20 66 72 65 65 62 6c 6f 63 6b 20 69 6e 20 74 68   freeblock in th
7930: 65 20 63 68 61 69 6e 2c 20 6f 72 20 7a 65 72 6f  e chain, or zero
7940: 20 69 66 20 74 68 65 20 66 72 65 65 62 6c 6f 63   if the freebloc
7950: 6b 20 69 73 20 74 68 65 20 6c 61 73 74 20 6f 6e  k is the last on
7960: 0a 74 68 65 20 63 68 61 69 6e 2e 20 20 5e 54 68  .the chain.  ^Th
7970: 65 20 74 68 69 72 64 20 61 6e 64 20 66 6f 75 72  e third and four
7980: 74 68 20 62 79 74 65 73 20 6f 66 20 65 61 63 68  th bytes of each
7990: 20 66 72 65 65 62 6c 6f 63 6b 20 66 6f 72 6d 0a   freeblock form.
79a0: 61 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74  a big-endian int
79b0: 65 67 65 72 20 77 68 69 63 68 20 69 73 20 74 68  eger which is th
79c0: 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 66 72  e size of the fr
79d0: 65 65 62 6c 6f 63 6b 20 69 6e 20 62 79 74 65 73  eeblock in bytes
79e0: 2c 20 69 6e 63 6c 75 64 69 6e 67 0a 74 68 65 20  , including.the 
79f0: 34 2d 62 79 74 65 20 68 65 61 64 65 72 2e 20 20  4-byte header.  
7a00: 5e 46 72 65 65 62 6c 6f 63 6b 73 20 61 72 65 20  ^Freeblocks are 
7a10: 61 6c 77 61 79 73 20 63 6f 6e 6e 65 63 74 65 64  always connected
7a20: 20 69 6e 20 6f 72 64 65 72 20 0a 6f 66 20 69 6e   in order .of in
7a30: 63 72 65 61 73 69 6e 67 20 6f 66 66 73 65 74 2e  creasing offset.
7a40: 20 20 5e 54 68 65 20 73 65 63 6f 6e 64 20 66 69    ^The second fi
7a50: 65 6c 64 20 6f 66 20 74 68 65 20 62 2d 74 72 65  eld of the b-tre
7a60: 65 20 70 61 67 65 20 68 65 61 64 65 72 20 69 73  e page header is
7a70: 20 74 68 65 0a 6f 66 66 73 65 74 20 6f 66 20 74   the.offset of t
7a80: 68 65 20 66 69 72 73 74 20 66 72 65 65 62 6c 6f  he first freeblo
7a90: 63 6b 2c 20 6f 72 20 7a 65 72 6f 20 69 66 20 74  ck, or zero if t
7aa0: 68 65 72 65 20 61 72 65 20 6e 6f 20 66 72 65 65  here are no free
7ab0: 62 6c 6f 63 6b 73 20 6f 6e 20 74 68 65 0a 70 61  blocks on the.pa
7ac0: 67 65 2e 20 20 5e 49 6e 20 61 20 77 65 6c 6c 2d  ge.  ^In a well-
7ad0: 66 6f 72 6d 65 64 20 62 2d 74 72 65 65 20 70 61  formed b-tree pa
7ae0: 67 65 2c 20 74 68 65 72 65 20 77 69 6c 6c 20 61  ge, there will a
7af0: 6c 77 61 79 73 20 62 65 20 61 74 20 6c 65 61 73  lways be at leas
7b00: 74 20 6f 6e 65 20 63 65 6c 6c 0a 62 65 66 6f 72  t one cell.befor
7b10: 65 20 74 68 65 20 66 69 72 73 74 20 66 72 65 65  e the first free
7b20: 62 6c 6f 63 6b 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41  block.</p>..<p>A
7b30: 20 66 72 65 65 62 6c 6f 63 6b 20 72 65 71 75 69   freeblock requi
7b40: 72 65 73 20 61 74 20 6c 65 61 73 74 20 34 20 62  res at least 4 b
7b50: 79 74 65 73 20 6f 66 20 73 70 61 63 65 2e 20 20  ytes of space.  
7b60: 49 66 20 74 68 65 72 65 20 69 73 20 61 6e 20 69  If there is an i
7b70: 73 6f 6c 61 74 65 64 0a 67 72 6f 75 70 20 6f 66  solated.group of
7b80: 20 31 2c 20 32 2c 20 6f 72 20 33 20 75 6e 75 73   1, 2, or 3 unus
7b90: 65 64 20 62 79 74 65 73 20 77 69 74 68 69 6e 20  ed bytes within 
7ba0: 74 68 65 20 63 65 6c 6c 20 63 6f 6e 74 65 6e 74  the cell content
7bb0: 20 61 72 65 61 2c 20 74 68 6f 73 65 20 62 79 74   area, those byt
7bc0: 65 73 0a 63 6f 6d 70 72 69 73 65 20 61 20 66 72  es.comprise a fr
7bd0: 61 67 6d 65 6e 74 2e 20 20 5e 54 68 65 20 74 6f  agment.  ^The to
7be0: 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 62 79  tal number of by
7bf0: 74 65 73 20 69 6e 20 61 6c 6c 20 66 72 61 67 6d  tes in all fragm
7c00: 65 6e 74 73 20 69 73 20 73 74 6f 72 65 64 0a 69  ents is stored.i
7c10: 6e 20 74 68 65 20 66 69 66 74 68 20 66 69 65 6c  n the fifth fiel
7c20: 64 20 6f 66 20 74 68 65 20 62 2d 74 72 65 65 20  d of the b-tree 
7c30: 70 61 67 65 20 68 65 61 64 65 72 2e 20 20 5e 49  page header.  ^I
7c40: 6e 20 61 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20  n a well-formed 
7c50: 62 2d 74 72 65 65 20 70 61 67 65 2c 0a 74 68 65  b-tree page,.the
7c60: 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66   total number of
7c70: 20 62 79 74 65 73 20 69 6e 20 66 72 61 67 6d 65   bytes in fragme
7c80: 6e 74 73 20 6d 61 79 20 6e 6f 74 20 65 78 63 65  nts may not exce
7c90: 65 64 20 36 30 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54  ed 60.</p>..<p>T
7ca0: 68 65 20 74 6f 74 61 6c 20 61 6d 6f 75 6e 74 20  he total amount 
7cb0: 6f 66 20 66 72 65 65 20 73 70 61 63 65 20 6f 6e  of free space on
7cc0: 20 61 20 62 2d 74 72 65 65 20 70 61 67 65 20 63   a b-tree page c
7cd0: 6f 6e 73 69 73 74 73 20 6f 66 20 74 68 65 20 73  onsists of the s
7ce0: 69 7a 65 0a 6f 66 20 74 68 65 20 75 6e 61 6c 6c  ize.of the unall
7cf0: 6f 63 61 74 65 64 20 72 65 67 69 6f 6e 20 70 6c  ocated region pl
7d00: 75 73 20 74 68 65 20 74 6f 74 61 6c 20 73 69 7a  us the total siz
7d10: 65 20 6f 66 20 61 6c 6c 20 66 72 65 65 62 6c 6f  e of all freeblo
7d20: 63 6b 73 20 70 6c 75 73 20 74 68 65 0a 6e 75 6d  cks plus the.num
7d30: 62 65 72 20 6f 66 20 66 72 61 67 6d 65 6e 74 65  ber of fragmente
7d40: 64 20 66 72 65 65 20 62 79 74 65 73 2e 20 20 5e  d free bytes.  ^
7d50: 53 51 4c 69 74 65 20 6d 61 79 20 66 72 6f 6d 20  SQLite may from 
7d60: 74 69 6d 65 20 74 6f 20 74 69 6d 65 20 72 65 6f  time to time reo
7d70: 72 67 61 6e 69 7a 65 0a 61 20 62 2d 74 72 65 65  rganize.a b-tree
7d80: 20 70 61 67 65 20 73 6f 20 74 68 61 74 20 74 68   page so that th
7d90: 65 72 65 20 61 72 65 20 6e 6f 20 66 72 65 65 62  ere are no freeb
7da0: 6c 6f 63 6b 73 20 6f 72 20 66 72 61 67 6d 65 6e  locks or fragmen
7db0: 74 20 62 79 74 65 73 2c 20 61 6c 6c 0a 75 6e 75  t bytes, all.unu
7dc0: 73 65 64 20 62 79 74 65 73 20 61 72 65 20 63 6f  sed bytes are co
7dd0: 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 65 20 75  ntained in the u
7de0: 6e 61 6c 6c 6f 63 61 74 65 64 20 73 70 61 63 65  nallocated space
7df0: 20 72 65 67 69 6f 6e 2c 20 61 6e 64 20 61 6c 6c   region, and all
7e00: 0a 63 65 6c 6c 73 20 61 72 65 20 70 61 63 6b 65  .cells are packe
7e10: 64 20 74 69 67 68 74 6c 79 20 61 74 20 74 68 65  d tightly at the
7e20: 20 65 6e 64 20 6f 66 20 74 68 65 20 70 61 67 65   end of the page
7e30: 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65  .  This is calle
7e40: 64 20 0a 22 64 65 66 72 61 67 6d 65 6e 74 69 6e  d ."defragmentin
7e50: 67 22 20 74 68 65 20 62 2d 74 72 65 65 20 70 61  g" the b-tree pa
7e60: 67 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  ge.</p>..<tcl>hd
7e70: 5f 66 72 61 67 6d 65 6e 74 20 76 61 72 69 6e 74  _fragment varint
7e80: 20 7b 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74   {variable-lengt
7e90: 68 20 69 6e 74 65 67 65 72 7d 20 7b 76 61 72 69  h integer} {vari
7ea0: 6e 74 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 41 20  nt}</tcl>..<p>A 
7eb0: 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20  variable-length 
7ec0: 69 6e 74 65 67 65 72 20 6f 72 20 22 76 61 72 69  integer or "vari
7ed0: 6e 74 22 20 69 73 20 61 20 73 74 61 74 69 63 20  nt" is a static 
7ee0: 48 75 66 66 6d 61 6e 20 65 6e 63 6f 64 69 6e 67  Huffman encoding
7ef0: 0a 6f 66 20 36 34 2d 62 69 74 20 74 77 6f 73 2d  .of 64-bit twos-
7f00: 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 74 65 67  complement integ
7f10: 65 72 73 20 74 68 61 74 20 75 73 65 73 20 6c 65  ers that uses le
7f20: 73 73 20 73 70 61 63 65 20 66 6f 72 20 73 6d 61  ss space for sma
7f30: 6c 6c 20 70 6f 73 69 74 69 76 65 20 0a 76 61 6c  ll positive .val
7f40: 75 65 73 2e 20 0a 41 20 76 61 72 69 6e 74 20 69  ues. .A varint i
7f50: 73 20 62 65 74 77 65 65 6e 20 31 20 61 6e 64 20  s between 1 and 
7f60: 39 20 62 79 74 65 73 20 69 6e 20 6c 65 6e 67 74  9 bytes in lengt
7f70: 68 2e 20 20 54 68 65 20 76 61 72 69 6e 74 20 63  h.  The varint c
7f80: 6f 6e 73 69 73 74 73 20 6f 66 20 65 69 74 68 65  onsists of eithe
7f90: 72 0a 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 62  r.zero or more b
7fa0: 79 74 65 73 20 77 68 69 63 68 20 68 61 76 65 20  ytes which have 
7fb0: 74 68 65 20 68 69 67 68 2d 6f 72 64 65 72 20 62  the high-order b
7fc0: 69 74 20 73 65 74 20 66 6f 6c 6c 6f 77 65 64 20  it set followed 
7fd0: 62 79 20 61 20 73 69 6e 67 6c 65 20 62 79 74 65  by a single byte
7fe0: 0a 77 69 74 68 20 74 68 65 20 68 69 67 68 2d 6f  .with the high-o
7ff0: 72 64 65 72 20 62 69 74 20 63 6c 65 61 72 2c 20  rder bit clear, 
8000: 6f 72 20 6e 69 6e 65 20 62 79 74 65 73 2c 20 77  or nine bytes, w
8010: 68 69 63 68 65 76 65 72 20 69 73 20 73 68 6f 72  hichever is shor
8020: 74 65 72 2e 0a 54 68 65 20 6c 6f 77 65 72 20 73  ter..The lower s
8030: 65 76 65 6e 20 62 69 74 73 20 6f 66 20 65 61 63  even bits of eac
8040: 68 20 6f 66 20 74 68 65 20 66 69 72 73 74 20 65  h of the first e
8050: 69 67 68 74 20 62 79 74 65 73 20 61 6e 64 20 61  ight bytes and a
8060: 6c 6c 20 38 20 62 69 74 73 20 6f 66 0a 74 68 65  ll 8 bits of.the
8070: 20 6e 69 6e 74 68 20 62 79 74 65 20 61 72 65 20   ninth byte are 
8080: 75 73 65 64 20 74 6f 20 72 65 63 6f 6e 73 74 72  used to reconstr
8090: 75 63 74 20 74 68 65 20 36 34 2d 62 69 74 20 74  uct the 64-bit t
80a0: 77 6f 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 69  wos-complement i
80b0: 6e 74 65 67 65 72 2e 0a 56 61 72 69 6e 74 73 20  nteger..Varints 
80c0: 61 72 65 20 62 69 67 2d 65 6e 64 69 61 6e 3a 20  are big-endian: 
80d0: 62 69 74 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20  bits taken from 
80e0: 74 68 65 20 65 61 72 6c 69 65 72 20 62 79 74 65  the earlier byte
80f0: 20 6f 66 20 74 68 65 20 76 61 72 69 6e 74 0a 61   of the varint.a
8100: 72 65 20 74 68 65 20 6d 6f 72 65 20 73 69 67 6e  re the more sign
8110: 69 66 69 63 61 6e 74 20 74 68 61 6e 20 62 69 74  ificant than bit
8120: 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20 74 68 65  s taken from the
8130: 20 6c 61 74 65 72 20 62 79 74 65 73 2e 20 3c 2f   later bytes. </
8140: 70 3e 0a 0a 3c 70 3e 54 68 65 20 66 6f 72 6d 61  p>..<p>The forma
8150: 74 20 6f 66 20 61 20 63 65 6c 6c 20 64 65 70 65  t of a cell depe
8160: 6e 64 73 20 6f 6e 20 77 68 69 63 68 20 6b 69 6e  nds on which kin
8170: 64 20 6f 66 20 62 2d 74 72 65 65 20 70 61 67 65  d of b-tree page
8180: 20 74 68 65 20 63 65 6c 6c 0a 61 70 70 65 61 72   the cell.appear
8190: 73 20 6f 6e 2e 20 20 54 68 65 20 66 6f 6c 6c 6f  s on.  The follo
81a0: 77 69 6e 67 20 74 61 62 6c 65 20 73 68 6f 77 73  wing table shows
81b0: 20 74 68 65 20 65 6c 65 6d 65 6e 74 73 20 6f 66   the elements of
81c0: 20 61 20 63 65 6c 6c 2c 20 69 6e 0a 6f 72 64 65   a cell, in.orde
81d0: 72 20 6f 66 20 61 70 70 65 61 72 61 6e 63 65 2c  r of appearance,
81e0: 20 66 6f 72 20 74 68 65 20 76 61 72 69 6f 75 73   for the various
81f0: 20 62 2d 74 72 65 65 20 70 61 67 65 20 74 79 70   b-tree page typ
8200: 65 73 2e 0a 0a 3c 64 6c 3e 0a 3c 64 74 3e 3c 70  es...<dl>.<dt><p
8210: 3e 54 61 62 6c 65 20 42 2d 54 72 65 65 20 4c 65  >Table B-Tree Le
8220: 61 66 20 43 65 6c 6c 20 28 68 65 61 64 65 72 20  af Cell (header 
8230: 30 78 30 64 29 3a 3c 2f 70 3e 3c 2f 64 74 3e 0a  0x0d):</p></dt>.
8240: 3c 64 64 3e 3c 70 3e 3c 75 6c 3e 0a 3c 6c 69 3e  <dd><p><ul>.<li>
8250: 41 20 76 61 72 69 6e 74 20 77 68 69 63 68 20 69  A varint which i
8260: 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62  s the total numb
8270: 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 70  er of bytes of p
8280: 61 79 6c 6f 61 64 2c 20 69 6e 63 6c 75 64 69 6e  ayload, includin
8290: 67 20 61 6e 79 0a 6f 76 65 72 66 6c 6f 77 0a 3c  g any.overflow.<
82a0: 6c 69 3e 41 20 76 61 72 69 6e 74 20 77 68 69 63  li>A varint whic
82b0: 68 20 69 73 20 74 68 65 20 69 6e 74 65 67 65 72  h is the integer
82c0: 20 6b 65 79 2c 20 61 2e 6b 2e 61 2e 20 22 5b 72   key, a.k.a. "[r
82d0: 6f 77 69 64 5d 22 0a 3c 6c 69 3e 54 68 65 20 69  owid]".<li>The i
82e0: 6e 69 74 69 61 6c 20 70 6f 72 74 69 6f 6e 20 6f  nitial portion o
82f0: 66 20 74 68 65 20 70 61 79 6c 6f 61 64 20 74 68  f the payload th
8300: 61 74 20 64 6f 65 73 20 6e 6f 74 20 73 70 69 6c  at does not spil
8310: 6c 20 74 6f 20 6f 76 65 72 66 6c 6f 77 0a 70 61  l to overflow.pa
8320: 67 65 73 2e 0a 3c 6c 69 3e 41 20 34 2d 62 79 74  ges..<li>A 4-byt
8330: 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74  e big-endian int
8340: 65 67 65 72 20 70 61 67 65 20 6e 75 6d 62 65 72  eger page number
8350: 20 66 6f 72 20 74 68 65 20 66 69 72 73 74 20 70   for the first p
8360: 61 67 65 20 6f 66 20 74 68 65 0a 6f 76 65 72 66  age of the.overf
8370: 6c 6f 77 20 70 61 67 65 20 6c 69 73 74 20 2d 20  low page list - 
8380: 6f 6d 69 74 74 65 64 20 69 66 20 61 6c 6c 20 70  omitted if all p
8390: 61 79 6c 6f 61 64 20 66 69 74 73 20 6f 6e 20 74  ayload fits on t
83a0: 68 65 20 62 2d 74 72 65 65 20 70 61 67 65 2e 0a  he b-tree page..
83b0: 3c 2f 75 6c 3e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a  </ul></p></dd>..
83c0: 3c 64 74 3e 3c 70 3e 54 61 62 6c 65 20 42 2d 54  <dt><p>Table B-T
83d0: 72 65 65 20 49 6e 74 65 72 69 6f 72 20 43 65 6c  ree Interior Cel
83e0: 6c 20 28 68 65 61 64 65 72 20 30 78 30 35 29 3a  l (header 0x05):
83f0: 3c 2f 70 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70  </p></dt>.<dd><p
8400: 3e 3c 75 6c 3e 0a 3c 6c 69 3e 41 20 34 2d 62 79  ><ul>.<li>A 4-by
8410: 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 70 61  te big-endian pa
8420: 67 65 20 6e 75 6d 62 65 72 20 77 68 69 63 68 20  ge number which 
8430: 69 73 20 74 68 65 20 6c 65 66 74 20 63 68 69 6c  is the left chil
8440: 64 20 70 6f 69 6e 74 65 72 2e 0a 3c 6c 69 3e 41  d pointer..<li>A
8450: 20 76 61 72 69 6e 74 20 77 68 69 63 68 20 69 73   varint which is
8460: 20 74 68 65 20 69 6e 74 65 67 65 72 20 6b 65 79   the integer key
8470: 0a 3c 2f 75 6c 3e 3c 2f 70 3e 3c 2f 64 64 3e 0a  .</ul></p></dd>.
8480: 0a 3c 64 74 3e 3c 70 3e 49 6e 64 65 78 20 42 2d  .<dt><p>Index B-
8490: 54 72 65 65 20 4c 65 61 66 20 43 65 6c 6c 20 28  Tree Leaf Cell (
84a0: 68 65 61 64 65 72 20 30 78 30 61 29 3a 3c 2f 70  header 0x0a):</p
84b0: 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 3c 75  ></dt>.<dd><p><u
84c0: 6c 3e 0a 3c 6c 69 3e 41 20 76 61 72 69 6e 74 20  l>.<li>A varint 
84d0: 77 68 69 63 68 20 69 73 20 74 68 65 20 74 6f 74  which is the tot
84e0: 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74  al number of byt
84f0: 65 73 20 6f 66 20 6b 65 79 20 70 61 79 6c 6f 61  es of key payloa
8500: 64 2c 20 69 6e 63 6c 75 64 69 6e 67 20 61 6e 79  d, including any
8510: 0a 6f 76 65 72 66 6c 6f 77 0a 3c 6c 69 3e 54 68  .overflow.<li>Th
8520: 65 20 69 6e 69 74 69 61 6c 20 70 6f 72 74 69 6f  e initial portio
8530: 6e 20 6f 66 20 74 68 65 20 70 61 79 6c 6f 61 64  n of the payload
8540: 20 74 68 61 74 20 64 6f 65 73 20 6e 6f 74 20 73   that does not s
8550: 70 69 6c 6c 20 74 6f 20 6f 76 65 72 66 6c 6f 77  pill to overflow
8560: 0a 70 61 67 65 73 2e 0a 3c 6c 69 3e 41 20 34 2d  .pages..<li>A 4-
8570: 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20  byte big-endian 
8580: 69 6e 74 65 67 65 72 20 70 61 67 65 20 6e 75 6d  integer page num
8590: 62 65 72 20 66 6f 72 20 74 68 65 20 66 69 72 73  ber for the firs
85a0: 74 20 70 61 67 65 20 6f 66 20 74 68 65 0a 6f 76  t page of the.ov
85b0: 65 72 66 6c 6f 77 20 70 61 67 65 20 6c 69 73 74  erflow page list
85c0: 20 2d 20 6f 6d 69 74 74 65 64 20 69 66 20 61 6c   - omitted if al
85d0: 6c 20 70 61 79 6c 6f 61 64 20 66 69 74 73 20 6f  l payload fits o
85e0: 6e 20 74 68 65 20 62 2d 74 72 65 65 20 70 61 67  n the b-tree pag
85f0: 65 2e 0a 3c 2f 75 6c 3e 3c 2f 70 3e 3c 2f 64 64  e..</ul></p></dd
8600: 3e 0a 0a 3c 64 74 3e 3c 70 3e 49 6e 64 65 78 20  >..<dt><p>Index 
8610: 42 2d 54 72 65 65 20 49 6e 74 65 72 69 6f 72 20  B-Tree Interior 
8620: 43 65 6c 6c 20 28 68 65 61 64 65 72 20 30 78 30  Cell (header 0x0
8630: 32 29 3a 3c 2f 70 3e 3c 2f 64 74 3e 0a 3c 64 64  2):</p></dt>.<dd
8640: 3e 3c 70 3e 3c 75 6c 3e 0a 3c 6c 69 3e 41 20 34  ><p><ul>.<li>A 4
8650: 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e  -byte big-endian
8660: 20 70 61 67 65 20 6e 75 6d 62 65 72 20 77 68 69   page number whi
8670: 63 68 20 69 73 20 74 68 65 20 6c 65 66 74 20 63  ch is the left c
8680: 68 69 6c 64 20 70 6f 69 6e 74 65 72 2e 0a 3c 6c  hild pointer..<l
8690: 69 3e 41 20 76 61 72 69 6e 74 20 77 68 69 63 68  i>A varint which
86a0: 20 69 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75   is the total nu
86b0: 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66  mber of bytes of
86c0: 20 6b 65 79 20 70 61 79 6c 6f 61 64 2c 20 69 6e   key payload, in
86d0: 63 6c 75 64 69 6e 67 20 61 6e 79 0a 6f 76 65 72  cluding any.over
86e0: 66 6c 6f 77 0a 3c 6c 69 3e 54 68 65 20 69 6e 69  flow.<li>The ini
86f0: 74 69 61 6c 20 70 6f 72 74 69 6f 6e 20 6f 66 20  tial portion of 
8700: 74 68 65 20 70 61 79 6c 6f 61 64 20 74 68 61 74  the payload that
8710: 20 64 6f 65 73 20 6e 6f 74 20 73 70 69 6c 6c 20   does not spill 
8720: 74 6f 20 6f 76 65 72 66 6c 6f 77 0a 70 61 67 65  to overflow.page
8730: 73 2e 0a 3c 6c 69 3e 41 20 34 2d 62 79 74 65 20  s..<li>A 4-byte 
8740: 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67  big-endian integ
8750: 65 72 20 70 61 67 65 20 6e 75 6d 62 65 72 20 66  er page number f
8760: 6f 72 20 74 68 65 20 66 69 72 73 74 20 70 61 67  or the first pag
8770: 65 20 6f 66 20 74 68 65 0a 6f 76 65 72 66 6c 6f  e of the.overflo
8780: 77 20 70 61 67 65 20 6c 69 73 74 20 2d 20 6f 6d  w page list - om
8790: 69 74 74 65 64 20 69 66 20 61 6c 6c 20 70 61 79  itted if all pay
87a0: 6c 6f 61 64 20 66 69 74 73 20 6f 6e 20 74 68 65  load fits on the
87b0: 20 62 2d 74 72 65 65 20 70 61 67 65 2e 0a 3c 2f   b-tree page..</
87c0: 75 6c 3e 3c 2f 70 3e 3c 2f 64 64 3e 0a 3c 2f 64  ul></p></dd>.</d
87d0: 6c 3e 0a 0a 3c 70 3e 54 68 65 20 69 6e 66 6f 72  l>..<p>The infor
87e0: 6d 61 74 69 6f 6e 20 61 62 6f 76 65 20 63 61 6e  mation above can
87f0: 20 62 65 20 72 65 63 61 73 74 20 69 6e 74 6f 20   be recast into 
8800: 61 20 74 61 62 6c 65 20 66 6f 72 6d 61 74 20 61  a table format a
8810: 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a  s follows:</p>..
8820: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
8830: 20 63 65 6c 6c 66 6f 72 6d 61 74 20 7b 63 65 6c   cellformat {cel
8840: 6c 20 66 6f 72 6d 61 74 20 73 75 6d 6d 61 72 79  l format summary
8850: 7d 3c 2f 74 63 6c 3e 0a 3c 63 65 6e 74 65 72 3e  }</tcl>.<center>
8860: 0a 3c 69 3e 42 2d 74 72 65 65 20 43 65 6c 6c 20  .<i>B-tree Cell 
8870: 46 6f 72 6d 61 74 3c 2f 69 3e 0a 3c 74 61 62 6c  Format</i>.<tabl
8880: 65 20 62 6f 72 64 65 72 3d 31 20 77 69 64 74 68  e border=1 width
8890: 3d 22 38 30 25 22 3e 0a 3c 74 72 3e 3c 74 68 20  ="80%">.<tr><th 
88a0: 72 6f 77 73 70 61 6e 3d 32 3e 44 61 74 61 74 79  rowspan=2>Dataty
88b0: 70 65 0a 20 20 20 20 3c 74 68 20 63 6f 6c 73 70  pe.    <th colsp
88c0: 61 6e 3d 34 3e 41 70 70 65 61 72 73 20 69 6e 2e  an=4>Appears in.
88d0: 2e 2e 0a 20 20 20 20 3c 74 68 20 72 6f 77 73 70  ...    <th rowsp
88e0: 61 6e 3d 32 3e 44 65 73 63 72 69 70 74 69 6f 6e  an=2>Description
88f0: 0a 3c 74 72 3e 3c 74 68 3e 54 61 62 6c 65 20 4c  .<tr><th>Table L
8900: 65 61 66 20 28 30 78 30 64 29 0a 20 20 20 20 3c  eaf (0x0d).    <
8910: 74 68 3e 54 61 62 6c 65 20 49 6e 74 65 72 69 6f  th>Table Interio
8920: 72 20 28 30 78 30 35 29 0a 20 20 20 20 3c 74 68  r (0x05).    <th
8930: 3e 49 6e 64 65 78 20 4c 65 61 66 20 28 30 78 30  >Index Leaf (0x0
8940: 61 29 0a 20 20 20 20 3c 74 68 3e 49 6e 64 65 78  a).    <th>Index
8950: 20 49 6e 74 65 72 69 6f 72 20 28 30 78 30 32 29   Interior (0x02)
8960: 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63  .<tr><td align=c
8970: 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70  enter valign=top
8980: 3e 34 2d 62 79 74 65 20 69 6e 74 65 67 65 72 0a  >4-byte integer.
8990: 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65      <td align=ce
89a0: 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e  nter valign=top>
89b0: 26 6e 62 73 70 3b 0a 20 20 20 20 3c 74 64 20 61  &nbsp;.    <td a
89c0: 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69  lign=center vali
89d0: 67 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a  gn=top>&#x2714;.
89e0: 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65      <td align=ce
89f0: 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e  nter valign=top>
8a00: 26 6e 62 73 70 3b 0a 20 20 20 20 3c 74 64 20 61  &nbsp;.    <td a
8a10: 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69  lign=center vali
8a20: 67 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a  gn=top>&#x2714;.
8a30: 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 6c 65      <td align=le
8a40: 66 74 3e 50 61 67 65 20 6e 75 6d 62 65 72 20 6f  ft>Page number o
8a50: 66 20 6c 65 66 74 20 63 68 69 6c 64 0a 3c 74 72  f left child.<tr
8a60: 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65  ><td align=cente
8a70: 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 76 61 72  r valign=top>var
8a80: 69 6e 74 0a 20 20 20 20 3c 74 64 20 61 6c 69 67  int.    <td alig
8a90: 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d  n=center valign=
8aa0: 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20 20 20  top>&#x2714;.   
8ab0: 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65   <td align=cente
8ac0: 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 6e 62  r valign=top>&nb
8ad0: 73 70 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67  sp;.    <td alig
8ae0: 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d  n=center valign=
8af0: 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20 20 20  top>&#x2714;.   
8b00: 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65   <td align=cente
8b10: 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78  r valign=top>&#x
8b20: 32 37 31 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c  2714;.    <td al
8b30: 69 67 6e 3d 6c 65 66 74 3e 4e 75 6d 62 65 72 20  ign=left>Number 
8b40: 6f 66 20 62 79 74 65 73 20 6f 66 20 70 61 79 6c  of bytes of payl
8b50: 6f 61 64 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67  oad.<tr><td alig
8b60: 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d  n=center valign=
8b70: 74 6f 70 3e 76 61 72 69 6e 74 0a 20 20 20 20 3c  top>varint.    <
8b80: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
8b90: 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37  valign=top>&#x27
8ba0: 31 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67  14;.    <td alig
8bb0: 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d  n=center valign=
8bc0: 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20 20 20  top>&#x2714;.   
8bd0: 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65   <td align=cente
8be0: 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 6e 62  r valign=top>&nb
8bf0: 73 70 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67  sp;.    <td alig
8c00: 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d  n=center valign=
8c10: 74 6f 70 3e 26 6e 62 73 70 3b 0a 20 20 20 20 3c  top>&nbsp;.    <
8c20: 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 52 6f  td align=left>Ro
8c30: 77 69 64 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67  wid.<tr><td alig
8c40: 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d  n=center valign=
8c50: 74 6f 70 3e 62 79 74 65 20 61 72 72 61 79 0a 20  top>byte array. 
8c60: 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e     <td align=cen
8c70: 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26  ter valign=top>&
8c80: 23 78 32 37 31 34 3b 0a 20 20 20 20 3c 74 64 20  #x2714;.    <td 
8c90: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c  align=center val
8ca0: 69 67 6e 3d 74 6f 70 3e 26 6e 62 73 70 3b 0a 20  ign=top>&nbsp;. 
8cb0: 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e     <td align=cen
8cc0: 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26  ter valign=top>&
8cd0: 23 78 32 37 31 34 3b 0a 20 20 20 20 3c 74 64 20  #x2714;.    <td 
8ce0: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c  align=center val
8cf0: 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b  ign=top>&#x2714;
8d00: 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 6c  .    <td align=l
8d10: 65 66 74 3e 50 61 79 6c 6f 61 64 0a 3c 74 72 3e  eft>Payload.<tr>
8d20: 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  <td align=center
8d30: 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 34 2d 62 79   valign=top>4-by
8d40: 74 65 20 69 6e 74 65 67 65 72 0a 20 20 20 20 3c  te integer.    <
8d50: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
8d60: 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37  valign=top>&#x27
8d70: 31 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67  14;.    <td alig
8d80: 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d  n=center valign=
8d90: 74 6f 70 3e 26 6e 62 73 70 3b 0a 20 20 20 20 3c  top>&nbsp;.    <
8da0: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
8db0: 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37  valign=top>&#x27
8dc0: 31 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67  14;.    <td alig
8dd0: 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d  n=center valign=
8de0: 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20 20 20  top>&#x2714;.   
8df0: 20 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e   <td align=left>
8e00: 50 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 66  Page number of f
8e10: 69 72 73 74 20 6f 76 65 72 66 6c 6f 77 20 70 61  irst overflow pa
8e20: 67 65 0a 3c 2f 74 61 62 6c 65 3e 3c 2f 63 65 6e  ge.</table></cen
8e30: 74 65 72 3e 0a 0a 0a 3c 70 3e 54 68 65 20 61 6d  ter>...<p>The am
8e40: 6f 75 6e 74 20 6f 66 20 70 61 79 6c 6f 61 64 20  ount of payload 
8e50: 74 68 61 74 20 73 70 69 6c 6c 73 20 6f 6e 74 6f  that spills onto
8e60: 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 73 20   overflow pages 
8e70: 61 6c 73 6f 20 64 65 70 65 6e 64 73 20 6f 6e 0a  also depends on.
8e80: 74 68 65 20 70 61 67 65 20 74 79 70 65 2e 20 20  the page type.  
8e90: 46 6f 72 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  For the followin
8ea0: 67 20 63 6f 6d 70 75 74 61 74 69 6f 6e 73 2c 20  g computations, 
8eb0: 6c 65 74 20 55 20 62 65 20 74 68 65 20 75 73 61  let U be the usa
8ec0: 62 6c 65 20 73 69 7a 65 0a 6f 66 20 61 20 64 61  ble size.of a da
8ed0: 74 61 62 61 73 65 20 70 61 67 65 2c 20 74 68 65  tabase page, the
8ee0: 20 74 6f 74 61 6c 20 70 61 67 65 20 73 69 7a 65   total page size
8ef0: 20 6c 65 73 73 20 74 68 65 20 72 65 73 65 72 76   less the reserv
8f00: 65 64 20 73 70 61 63 65 20 61 74 20 74 68 65 0a  ed space at the.
8f10: 65 6e 64 20 6f 66 20 65 61 63 68 20 70 61 67 65  end of each page
8f20: 2e 20 20 41 6e 64 20 6c 65 74 20 50 20 62 65 20  .  And let P be 
8f30: 74 68 65 20 70 61 79 6c 6f 61 64 20 73 69 7a 65  the payload size
8f40: 2e 20 20 49 6e 20 74 68 65 20 66 6f 6c 6c 6f 77  .  In the follow
8f50: 69 6e 67 2c 0a 73 79 6d 62 6f 6c 20 58 20 72 65  ing,.symbol X re
8f60: 70 72 65 73 65 6e 74 73 20 74 68 65 20 6d 61 78  presents the max
8f70: 69 6d 75 6d 20 61 6d 6f 75 6e 74 20 6f 66 20 70  imum amount of p
8f80: 61 79 6c 6f 61 64 20 74 68 61 74 20 63 61 6e 20  ayload that can 
8f90: 62 65 20 73 74 6f 72 65 64 20 64 69 72 65 63 74  be stored direct
8fa0: 6c 79 0a 6f 6e 20 74 68 65 20 62 2d 74 72 65 65  ly.on the b-tree
8fb0: 20 70 61 67 65 20 77 69 74 68 6f 75 74 20 73 70   page without sp
8fc0: 69 6c 6c 69 6e 67 20 6f 6e 74 6f 20 61 6e 20 6f  illing onto an o
8fd0: 76 65 72 66 6c 6f 77 20 70 61 67 65 20 61 6e 64  verflow page and
8fe0: 20 73 79 6d 62 6f 6c 20 4d 0a 72 65 70 72 65 73   symbol M.repres
8ff0: 65 6e 74 73 20 74 68 65 20 6d 69 6e 69 6d 75 6d  ents the minimum
9000: 20 61 6d 6f 75 6e 74 20 6f 66 20 70 61 79 6c 6f   amount of paylo
9010: 61 64 20 74 68 61 74 20 6d 75 73 74 20 62 65 20  ad that must be 
9020: 73 74 6f 72 65 64 20 6f 6e 20 74 68 65 20 62 74  stored on the bt
9030: 72 65 65 0a 70 61 67 65 20 62 65 66 6f 72 65 20  ree.page before 
9040: 73 70 69 6c 6c 69 6e 67 20 69 73 20 61 6c 6c 6f  spilling is allo
9050: 77 65 64 2e 0a 0a 3c 64 6c 3e 0a 3c 64 74 3e 3c  wed...<dl>.<dt><
9060: 70 3e 54 61 62 6c 65 20 42 2d 54 72 65 65 20 4c  p>Table B-Tree L
9070: 65 61 66 20 43 65 6c 6c 3a 3c 2f 64 74 3e 0a 3c  eaf Cell:</dt>.<
9080: 64 64 3e 3c 70 3e 0a 5e 28 4c 65 74 20 58 20 62  dd><p>.^(Let X b
9090: 65 20 55 2d 33 35 2e 20 20 49 66 20 74 68 65 20  e U-35.  If the 
90a0: 70 61 79 6c 6f 61 64 20 73 69 7a 65 20 50 20 69  payload size P i
90b0: 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65  s less than or e
90c0: 71 75 61 6c 20 74 6f 20 58 20 74 68 65 6e 0a 74  qual to X then.t
90d0: 68 65 20 65 6e 74 69 72 65 20 70 61 79 6c 6f 61  he entire payloa
90e0: 64 20 69 73 20 73 74 6f 72 65 64 20 6f 6e 20 74  d is stored on t
90f0: 68 65 20 62 2d 74 72 65 65 20 6c 65 61 66 20 70  he b-tree leaf p
9100: 61 67 65 2e 29 5e 0a 5e 28 4c 65 74 20 4d 20 62  age.)^.^(Let M b
9110: 65 20 28 28 55 2d 31 32 29 2a 33 32 2f 32 35 35  e ((U-12)*32/255
9120: 29 2d 32 33 20 61 6e 64 20 6c 65 74 20 4b 20 62  )-23 and let K b
9130: 65 20 4d 2b 28 28 50 2d 4d 29 25 28 55 2d 34 29  e M+((P-M)%(U-4)
9140: 29 2e 0a 49 66 20 50 20 69 73 20 67 72 65 61 74  )..If P is great
9150: 65 72 20 74 68 61 6e 20 58 0a 74 68 65 6e 20 74  er than X.then t
9160: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74  he number of byt
9170: 65 73 20 73 74 6f 72 65 64 20 6f 6e 20 74 68 65  es stored on the
9180: 20 74 61 62 6c 65 20 62 2d 74 72 65 65 20 6c 65   table b-tree le
9190: 61 66 20 70 61 67 65 20 69 73 20 4b 0a 69 66 20  af page is K.if 
91a0: 4b 20 69 73 20 6c 65 73 73 20 6f 72 20 65 71 75  K is less or equ
91b0: 61 6c 20 74 6f 20 58 20 6f 72 20 4d 20 6f 74 68  al to X or M oth
91c0: 65 72 77 69 73 65 2e 29 5e 0a 5e 28 54 68 65 20  erwise.)^.^(The 
91d0: 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  number of bytes 
91e0: 73 74 6f 72 65 64 20 6f 6e 20 74 68 65 20 6c 65  stored on the le
91f0: 61 66 20 70 61 67 65 20 69 73 20 6e 65 76 65 72  af page is never
9200: 20 6c 65 73 73 20 74 68 61 6e 20 4d 2e 29 5e 0a   less than M.)^.
9210: 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c  </p></dd>..<dt><
9220: 70 3e 54 61 62 6c 65 20 42 2d 54 72 65 65 20 49  p>Table B-Tree I
9230: 6e 74 65 72 69 6f 72 20 43 65 6c 6c 3a 3c 2f 64  nterior Cell:</d
9240: 74 3e 0a 3c 64 64 3e 3c 70 3e 0a 49 6e 74 65 72  t>.<dd><p>.Inter
9250: 69 6f 72 20 70 61 67 65 73 20 6f 66 20 74 61 62  ior pages of tab
9260: 6c 65 20 62 2d 74 72 65 65 73 20 68 61 76 65 20  le b-trees have 
9270: 6e 6f 20 70 61 79 6c 6f 61 64 20 61 6e 64 20 73  no payload and s
9280: 6f 20 74 68 65 72 65 20 69 73 20 6e 65 76 65 72  o there is never
9290: 0a 61 6e 79 20 70 61 79 6c 6f 61 64 20 74 6f 20  .any payload to 
92a0: 73 70 69 6c 6c 2e 0a 3c 2f 70 3e 3c 2f 64 64 3e  spill..</p></dd>
92b0: 0a 0a 3c 64 74 3e 3c 70 3e 49 6e 64 65 78 20 42  ..<dt><p>Index B
92c0: 2d 54 72 65 65 20 4c 65 61 66 20 4f 72 20 49 6e  -Tree Leaf Or In
92d0: 74 65 72 69 6f 72 20 43 65 6c 6c 3a 3c 2f 64 74  terior Cell:</dt
92e0: 3e 0a 3c 64 64 3e 3c 70 3e 0a 5e 28 4c 65 74 20  >.<dd><p>.^(Let 
92f0: 58 20 62 65 20 28 28 55 2d 31 32 29 2a 36 34 2f  X be ((U-12)*64/
9300: 32 35 35 29 2d 32 33 29 2e 20 20 49 66 20 74 68  255)-23).  If th
9310: 65 20 70 61 79 6c 6f 61 64 20 73 69 7a 65 20 50  e payload size P
9320: 20 69 73 20 6c 65 73 73 20 74 68 61 6e 0a 6f 72   is less than.or
9330: 20 65 71 75 61 6c 20 74 6f 20 58 20 74 68 65 6e   equal to X then
9340: 20 74 68 65 20 65 6e 74 69 72 65 20 70 61 79 6c   the entire payl
9350: 6f 61 64 20 69 73 20 73 74 6f 72 65 64 20 6f 6e  oad is stored on
9360: 20 74 68 65 20 62 2d 74 72 65 65 20 70 61 67 65   the b-tree page
9370: 2e 29 5e 0a 5e 28 4c 65 74 20 4d 20 62 65 20 28  .)^.^(Let M be (
9380: 28 55 2d 31 32 29 2a 33 32 2f 32 35 35 29 2d 32  (U-12)*32/255)-2
9390: 33 20 61 6e 64 20 6c 65 74 20 4b 20 62 65 20 4d  3 and let K be M
93a0: 2b 28 28 50 2d 4d 29 25 28 55 2d 34 29 29 2e 0a  +((P-M)%(U-4))..
93b0: 49 66 20 50 20 69 73 20 67 72 65 61 74 65 72 20  If P is greater 
93c0: 74 68 61 6e 20 58 20 74 68 65 6e 20 74 68 65 20  than X then the 
93d0: 6e 75 6d 62 65 72 0a 6f 66 20 62 79 74 65 73 20  number.of bytes 
93e0: 73 74 6f 72 65 64 20 6f 6e 20 74 68 65 20 69 6e  stored on the in
93f0: 64 65 78 20 62 2d 74 72 65 65 20 70 61 67 65 20  dex b-tree page 
9400: 69 73 20 4b 20 69 66 20 4b 20 69 73 20 6c 65 73  is K if K is les
9410: 73 20 74 68 61 6e 20 6f 72 0a 65 71 75 61 6c 20  s than or.equal 
9420: 74 6f 20 58 20 6f 72 20 4d 20 6f 74 68 65 72 77  to X or M otherw
9430: 69 73 65 2e 29 5e 0a 5e 28 54 68 65 20 6e 75 6d  ise.)^.^(The num
9440: 62 65 72 20 6f 66 20 62 79 74 65 73 20 73 74 6f  ber of bytes sto
9450: 72 65 64 20 6f 6e 20 74 68 65 20 69 6e 64 65 78  red on the index
9460: 20 70 61 67 65 20 69 73 20 6e 65 76 65 72 20 6c   page is never l
9470: 65 73 73 20 74 68 61 6e 20 4d 2e 29 5e 0a 3c 2f  ess than M.)^.</
9480: 70 3e 3c 2f 64 64 3e 0a 3c 2f 64 6c 3e 0a 0a 3c  p></dd>.</dl>..<
9490: 70 3e 48 65 72 65 20 69 73 20 61 6e 20 61 6c 74  p>Here is an alt
94a0: 65 72 6e 61 74 69 76 65 20 64 65 73 63 72 69 70  ernative descrip
94b0: 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 61 6d 65  tion of the same
94c0: 20 63 6f 6d 70 75 74 61 74 69 6f 6e 3a 0a 0a 3c   computation:..<
94d0: 75 6c 3e 0a 3c 6c 69 3e 58 20 69 73 20 55 2d 33  ul>.<li>X is U-3
94e0: 35 20 66 6f 72 20 74 61 62 6c 65 20 62 74 72 65  5 for table btre
94f0: 65 20 6c 65 61 66 20 70 61 67 65 73 20 6f 72 0a  e leaf pages or.
9500: 20 20 20 20 28 28 55 2d 31 32 29 2a 36 34 2f 32      ((U-12)*64/2
9510: 35 35 29 2d 32 33 20 66 6f 72 20 69 6e 64 65 78  55)-23 for index
9520: 20 70 61 67 65 73 2e 0a 3c 6c 69 3e 4d 20 69 73   pages..<li>M is
9530: 20 61 6c 77 61 79 73 20 28 28 55 2d 31 32 29 2a   always ((U-12)*
9540: 33 32 2f 32 35 35 29 2d 32 33 2e 0a 3c 6c 69 3e  32/255)-23..<li>
9550: 4c 65 74 20 4b 20 62 65 20 4d 2b 28 28 50 2d 4d  Let K be M+((P-M
9560: 29 25 28 55 2d 34 29 29 2e 0a 3c 6c 69 3e 5e 49  )%(U-4))..<li>^I
9570: 66 20 50 26 6c 74 3b 3d 58 20 74 68 65 6e 20 61  f P&lt;=X then a
9580: 6c 6c 20 50 20 62 79 74 65 73 20 6f 66 20 70 61  ll P bytes of pa
9590: 79 6c 6f 61 64 20 61 72 65 20 73 74 6f 72 65 64  yload are stored
95a0: 20 64 69 72 65 63 74 6c 79 20 6f 6e 20 74 68 65   directly on the
95b0: 20 0a 20 20 20 20 62 74 72 65 65 20 70 61 67 65   .    btree page
95c0: 20 77 69 74 68 6f 75 74 20 6f 76 65 72 66 6c 6f   without overflo
95d0: 77 2e 0a 3c 6c 69 3e 5e 49 66 20 50 26 67 74 3b  w..<li>^If P&gt;
95e0: 58 20 61 6e 64 20 4b 26 6c 74 3b 3d 58 20 74 68  X and K&lt;=X th
95f0: 65 6e 20 74 68 65 20 66 69 72 73 74 20 4b 20 62  en the first K b
9600: 79 74 65 73 20 6f 66 20 50 20 61 72 65 20 73 74  ytes of P are st
9610: 6f 72 65 64 20 6f 6e 20 74 68 65 20 0a 20 20 20  ored on the .   
9620: 20 62 74 72 65 65 20 70 61 67 65 20 61 6e 64 20   btree page and 
9630: 74 68 65 20 72 65 6d 61 69 6e 69 6e 67 20 50 2d  the remaining P-
9640: 4b 20 62 79 74 65 73 20 61 72 65 20 73 74 6f 72  K bytes are stor
9650: 65 64 20 6f 6e 20 6f 76 65 72 66 6c 6f 77 20 70  ed on overflow p
9660: 61 67 65 73 2e 0a 3c 6c 69 3e 5e 49 66 20 50 26  ages..<li>^If P&
9670: 67 74 3b 58 20 61 6e 64 20 4b 26 67 74 3b 58 20  gt;X and K&gt;X 
9680: 74 68 65 6e 20 74 68 65 20 66 69 72 73 74 20 4d  then the first M
9690: 20 62 79 74 65 73 20 6f 66 20 50 20 61 72 65 20   bytes of P are 
96a0: 73 74 6f 72 65 64 20 6f 6e 20 74 68 65 0a 20 20  stored on the.  
96b0: 20 20 62 74 72 65 65 20 70 61 67 65 20 61 6e 64    btree page and
96c0: 20 74 68 65 20 72 65 6d 61 69 6e 69 6e 67 20 50   the remaining P
96d0: 2d 4d 20 62 79 74 65 73 20 61 72 65 20 73 74 6f  -M bytes are sto
96e0: 72 65 64 20 6f 6e 20 6f 76 65 72 66 6c 6f 77 20  red on overflow 
96f0: 70 61 67 65 73 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70  pages..</ul>..<p
9700: 3e 54 68 65 20 6f 76 65 72 66 6c 6f 77 20 74 68  >The overflow th
9710: 72 65 73 68 6f 6c 64 73 20 61 72 65 20 64 65 73  resholds are des
9720: 69 67 6e 65 64 20 74 6f 20 67 69 76 65 20 61 20  igned to give a 
9730: 6d 69 6e 69 6d 75 6d 20 66 61 6e 6f 75 74 20 6f  minimum fanout o
9740: 66 0a 34 20 66 6f 72 20 69 6e 64 65 78 20 62 2d  f.4 for index b-
9750: 74 72 65 65 73 20 61 6e 64 20 74 6f 20 6d 61 6b  trees and to mak
9760: 65 20 73 75 72 65 20 65 6e 6f 75 67 68 20 6f 66  e sure enough of
9770: 20 74 68 65 20 70 61 79 6c 6f 61 64 0a 69 73 20   the payload.is 
9780: 6f 6e 20 74 68 65 20 62 2d 74 72 65 65 20 70 61  on the b-tree pa
9790: 67 65 20 74 68 61 74 20 74 68 65 20 72 65 63 6f  ge that the reco
97a0: 72 64 20 68 65 61 64 65 72 20 63 61 6e 20 75 73  rd header can us
97b0: 75 61 6c 6c 79 20 62 65 20 61 63 63 65 73 73 65  ually be accesse
97c0: 64 0a 77 69 74 68 6f 75 74 20 63 6f 6e 73 75 6c  d.without consul
97d0: 74 69 6e 67 20 61 6e 20 6f 76 65 72 66 6c 6f 77  ting an overflow
97e0: 20 70 61 67 65 2e 20 20 49 6e 20 68 69 6e 64 73   page.  In hinds
97f0: 69 67 68 74 2c 20 74 68 65 20 64 65 73 69 67 6e  ight, the design
9800: 65 72 20 6f 66 0a 74 68 65 20 53 51 4c 69 74 65  er of.the SQLite
9810: 20 62 2d 74 72 65 65 20 6c 6f 67 69 63 20 72 65   b-tree logic re
9820: 61 6c 69 7a 65 64 20 74 68 61 74 20 74 68 65 73  alized that thes
9830: 65 20 74 68 72 65 73 68 6f 6c 64 73 20 63 6f 75  e thresholds cou
9840: 6c 64 20 68 61 76 65 20 62 65 65 6e 0a 6d 61 64  ld have been.mad
9850: 65 20 6d 75 63 68 20 73 69 6d 70 6c 65 72 2e 20  e much simpler. 
9860: 20 48 6f 77 65 76 65 72 2c 20 74 68 65 20 63 6f   However, the co
9870: 6d 70 75 74 61 74 69 6f 6e 73 20 63 61 6e 6e 6f  mputations canno
9880: 74 20 62 65 20 63 68 61 6e 67 65 64 0a 77 69 74  t be changed.wit
9890: 68 6f 75 74 20 72 65 73 75 6c 74 69 6e 67 20 69  hout resulting i
98a0: 6e 20 61 6e 20 69 6e 63 6f 6d 70 61 74 69 62 6c  n an incompatibl
98b0: 65 20 66 69 6c 65 20 66 6f 72 6d 61 74 2e 20 20  e file format.  
98c0: 41 6e 64 20 74 68 65 20 63 75 72 72 65 6e 74 20  And the current 
98d0: 63 6f 6d 70 75 74 61 74 69 6f 6e 73 0a 77 6f 72  computations.wor
98e0: 6b 20 77 65 6c 6c 2c 20 65 76 65 6e 20 69 66 20  k well, even if 
98f0: 74 68 65 79 20 61 72 65 20 61 20 6c 69 74 74 6c  they are a littl
9900: 65 20 63 6f 6d 70 6c 65 78 2e 3c 2f 70 3e 0a 0a  e complex.</p>..
9910: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
9920: 20 6f 76 66 6c 70 67 73 20 7b 6f 76 65 72 66 6c   ovflpgs {overfl
9930: 6f 77 20 70 61 67 65 7d 20 7b 6f 76 65 72 66 6c  ow page} {overfl
9940: 6f 77 20 70 61 67 65 73 7d 3c 2f 74 63 6c 3e 0a  ow pages}</tcl>.
9950: 3c 68 32 3e 43 65 6c 6c 20 50 61 79 6c 6f 61 64  <h2>Cell Payload
9960: 20 4f 76 65 72 66 6c 6f 77 20 50 61 67 65 73 3c   Overflow Pages<
9970: 2f 68 32 3e 0a 0a 3c 70 3e 5e 57 68 65 6e 20 74  /h2>..<p>^When t
9980: 68 65 20 70 61 79 6c 6f 61 64 20 6f 66 20 61 20  he payload of a 
9990: 62 2d 74 72 65 65 20 63 65 6c 6c 20 69 73 20 74  b-tree cell is t
99a0: 6f 6f 20 6c 61 72 67 65 20 66 6f 72 20 74 68 65  oo large for the
99b0: 20 62 2d 74 72 65 65 20 70 61 67 65 2c 0a 74 68   b-tree page,.th
99c0: 65 20 73 75 72 70 6c 75 73 20 69 73 20 73 70 69  e surplus is spi
99d0: 6c 6c 65 64 20 6f 6e 74 6f 20 6f 76 65 72 66 6c  lled onto overfl
99e0: 6f 77 20 70 61 67 65 73 2e 20 20 5e 4f 76 65 72  ow pages.  ^Over
99f0: 66 6c 6f 77 20 70 61 67 65 73 20 66 6f 72 6d 20  flow pages form 
9a00: 61 20 6c 69 6e 6b 65 64 0a 6c 69 73 74 2e 20 20  a linked.list.  
9a10: 5e 54 68 65 20 66 69 72 73 74 20 66 6f 75 72 20  ^The first four 
9a20: 62 79 74 65 73 20 6f 66 20 65 61 63 68 20 6f 76  bytes of each ov
9a30: 65 72 66 6c 6f 77 20 70 61 67 65 20 61 72 65 20  erflow page are 
9a40: 61 20 62 69 67 2d 65 6e 64 69 61 6e 0a 69 6e 74  a big-endian.int
9a50: 65 67 65 72 20 77 68 69 63 68 20 69 73 20 74 68  eger which is th
9a60: 65 20 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66  e page number of
9a70: 20 74 68 65 20 6e 65 78 74 20 70 61 67 65 20 69   the next page i
9a80: 6e 20 74 68 65 20 63 68 61 69 6e 2c 20 6f 72 20  n the chain, or 
9a90: 7a 65 72 6f 0a 66 6f 72 20 74 68 65 20 66 69 6e  zero.for the fin
9aa0: 61 6c 20 70 61 67 65 20 69 6e 20 74 68 65 20 63  al page in the c
9ab0: 68 61 69 6e 2e 20 20 5e 54 68 65 20 66 69 66 74  hain.  ^The fift
9ac0: 68 20 62 79 74 65 20 74 68 72 6f 75 67 68 20 74  h byte through t
9ad0: 68 65 20 6c 61 73 74 20 75 73 61 62 6c 65 0a 62  he last usable.b
9ae0: 79 74 65 20 61 72 65 20 75 73 65 64 20 74 6f 20  yte are used to 
9af0: 68 6f 6c 64 20 6f 76 65 72 66 6c 6f 77 20 63 6f  hold overflow co
9b00: 6e 74 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c 68 32 3e  ntent.</p>..<h2>
9b10: 50 6f 69 6e 74 65 72 20 4d 61 70 20 6f 72 20 50  Pointer Map or P
9b20: 74 72 6d 61 70 20 50 61 67 65 73 3c 2f 68 32 3e  trmap Pages</h2>
9b30: 0a 0a 3c 70 3e 50 6f 69 6e 74 65 72 20 6d 61 70  ..<p>Pointer map
9b40: 20 6f 72 20 70 74 72 6d 61 70 20 70 61 67 65 73   or ptrmap pages
9b50: 20 61 72 65 20 65 78 74 72 61 20 70 61 67 65 73   are extra pages
9b60: 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 74   inserted into t
9b70: 68 65 20 64 61 74 61 62 61 73 65 0a 74 6f 20 6d  he database.to m
9b80: 61 6b 65 20 74 68 65 20 6f 70 65 72 61 74 69 6f  ake the operatio
9b90: 6e 20 6f 66 20 5b 61 75 74 6f 5f 76 61 63 75 75  n of [auto_vacuu
9ba0: 6d 5d 20 61 6e 64 20 5b 69 6e 63 72 65 6d 65 6e  m] and [incremen
9bb0: 74 61 6c 5f 76 61 63 75 75 6d 5d 20 6d 6f 64 65  tal_vacuum] mode
9bc0: 73 0a 6d 6f 72 65 20 65 66 66 69 63 69 65 6e 74  s.more efficient
9bd0: 2e 20 20 4f 74 68 65 72 20 70 61 67 65 20 74 79  .  Other page ty
9be0: 70 65 73 20 69 6e 20 74 68 65 20 64 61 74 61 62  pes in the datab
9bf0: 61 73 65 20 74 79 70 69 63 61 6c 6c 79 20 68 61  ase typically ha
9c00: 76 65 20 70 6f 69 6e 74 65 72 73 0a 66 72 6f 6d  ve pointers.from
9c10: 20 70 61 72 65 6e 74 20 74 6f 20 63 68 69 6c 64   parent to child
9c20: 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20  .  For example, 
9c30: 61 6e 20 69 6e 74 65 72 69 6f 72 20 62 2d 74 72  an interior b-tr
9c40: 65 65 20 70 61 67 65 20 63 6f 6e 74 61 69 6e 73  ee page contains
9c50: 20 70 6f 69 6e 74 65 72 73 0a 74 6f 20 69 74 73   pointers.to its
9c60: 20 63 68 69 6c 64 20 62 2d 74 72 65 65 20 70 61   child b-tree pa
9c70: 67 65 73 20 61 6e 64 20 61 6e 20 6f 76 65 72 66  ges and an overf
9c80: 6c 6f 77 20 63 68 61 69 6e 20 68 61 73 20 61 20  low chain has a 
9c90: 70 6f 69 6e 74 65 72 0a 66 72 6f 6d 20 65 61 72  pointer.from ear
9ca0: 6c 69 65 72 20 74 6f 20 6c 61 74 65 72 20 6c 69  lier to later li
9cb0: 6e 6b 73 20 69 6e 20 74 68 65 20 63 68 61 69 6e  nks in the chain
9cc0: 2e 20 20 41 20 70 74 72 6d 61 70 20 70 61 67 65  .  A ptrmap page
9cd0: 20 63 6f 6e 74 61 69 6e 73 20 6c 69 6e 6b 61 67   contains linkag
9ce0: 65 0a 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 67 6f  e.information go
9cf0: 69 6e 67 20 69 6e 20 74 68 65 20 6f 70 70 6f 73  ing in the oppos
9d00: 69 74 65 20 64 69 72 65 63 74 69 6f 6e 2c 20 66  ite direction, f
9d10: 72 6f 6d 20 63 68 69 6c 64 20 74 6f 20 70 61 72  rom child to par
9d20: 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 50 74  ent.</p>..<p>^Pt
9d30: 72 6d 61 70 20 70 61 67 65 73 20 6d 75 73 74 20  rmap pages must 
9d40: 65 78 69 73 74 20 69 6e 20 61 6e 79 20 64 61 74  exist in any dat
9d50: 61 62 61 73 65 20 66 69 6c 65 20 77 68 69 63 68  abase file which
9d60: 20 68 61 73 20 61 20 6e 6f 6e 2d 7a 65 72 6f 0a   has a non-zero.
9d70: 6c 61 72 67 65 73 74 20 72 6f 6f 74 20 62 2d 74  largest root b-t
9d80: 72 65 65 20 70 61 67 65 20 76 61 6c 75 65 20 61  ree page value a
9d90: 74 20 6f 66 66 73 65 74 20 35 32 20 69 6e 20 74  t offset 52 in t
9da0: 68 65 20 64 61 74 61 62 61 73 65 20 68 65 61 64  he database head
9db0: 65 72 2e 0a 5e 49 66 20 74 68 65 20 6c 61 72 67  er..^If the larg
9dc0: 65 73 74 20 72 6f 6f 74 20 62 2d 74 72 65 65 20  est root b-tree 
9dd0: 70 61 67 65 20 76 61 6c 75 65 20 69 73 20 7a 65  page value is ze
9de0: 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 64 61 74  ro, then the dat
9df0: 61 62 61 73 65 20 6d 75 73 74 20 6e 6f 74 0a 63  abase must not.c
9e00: 6f 6e 74 61 69 6e 20 70 74 72 6d 61 70 20 70 61  ontain ptrmap pa
9e10: 67 65 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 6e  ges.</p>..<p>^In
9e20: 20 61 20 64 61 74 61 62 61 73 65 20 77 69 74 68   a database with
9e30: 20 70 74 72 6d 61 70 20 70 61 67 65 73 2c 20 74   ptrmap pages, t
9e40: 68 65 20 66 69 72 73 74 20 70 74 72 6d 61 70 20  he first ptrmap 
9e50: 70 61 67 65 20 69 73 20 70 61 67 65 20 32 2e 0a  page is page 2..
9e60: 41 20 70 74 72 6d 61 70 20 70 61 67 65 20 63 6f  A ptrmap page co
9e70: 6e 73 69 73 74 73 20 6f 66 20 61 6e 20 61 72 72  nsists of an arr
9e80: 61 79 20 6f 66 20 35 2d 62 79 74 65 20 65 6e 74  ay of 5-byte ent
9e90: 72 69 65 73 2e 20 20 4c 65 74 20 4a 20 62 65 20  ries.  Let J be 
9ea0: 74 68 65 0a 6e 75 6d 62 65 72 20 6f 66 20 35 2d  the.number of 5-
9eb0: 62 79 74 65 20 65 6e 74 72 69 65 73 20 74 68 61  byte entries tha
9ec0: 74 20 77 69 6c 6c 20 66 69 74 20 69 6e 20 74 68  t will fit in th
9ed0: 65 20 75 73 61 62 6c 65 20 73 70 61 63 65 20 6f  e usable space o
9ee0: 66 20 61 20 70 61 67 65 2e 0a 28 49 6e 20 6f 74  f a page..(In ot
9ef0: 68 65 72 20 77 6f 72 64 73 2c 20 4a 3d 55 2f 35  her words, J=U/5
9f00: 2e 29 20 20 5e 54 68 65 20 66 69 72 73 74 20 70  .)  ^The first p
9f10: 74 72 6d 61 70 20 70 61 67 65 20 77 69 6c 6c 20  trmap page will 
9f20: 63 6f 6e 74 61 69 6e 20 62 61 63 6b 20 70 6f 69  contain back poi
9f30: 6e 74 65 72 0a 69 6e 66 6f 72 6d 61 74 69 6f 6e  nter.information
9f40: 20 66 6f 72 20 70 61 67 65 73 20 33 20 74 68 72   for pages 3 thr
9f50: 6f 75 67 68 20 4a 2b 32 2c 20 69 6e 63 6c 75 73  ough J+2, inclus
9f60: 69 76 65 2e 20 20 5e 54 68 65 20 73 65 63 6f 6e  ive.  ^The secon
9f70: 64 20 70 6f 69 6e 74 65 72 20 6d 61 70 0a 70 61  d pointer map.pa
9f80: 67 65 20 77 69 6c 6c 20 62 65 20 6f 6e 20 70 61  ge will be on pa
9f90: 67 65 20 4a 2b 33 20 61 6e 64 20 74 68 61 74 20  ge J+3 and that 
9fa0: 70 74 72 6d 61 70 20 70 61 67 65 20 77 69 6c 6c  ptrmap page will
9fb0: 20 70 72 6f 76 69 64 65 20 62 61 63 6b 20 70 6f   provide back po
9fc0: 69 6e 74 65 72 0a 69 6e 66 6f 72 6d 61 74 69 6f  inter.informatio
9fd0: 6e 20 66 6f 72 20 70 61 67 65 73 20 4a 2b 34 20  n for pages J+4 
9fe0: 74 68 72 6f 75 67 68 20 32 2a 4a 2b 33 20 69 6e  through 2*J+3 in
9ff0: 63 6c 75 73 69 76 65 2e 20 20 41 6e 64 20 73 6f  clusive.  And so
a000: 20 66 6f 72 74 68 20 66 6f 72 0a 74 68 65 20 65   forth for.the e
a010: 6e 74 69 72 65 20 64 61 74 61 62 61 73 65 20 66  ntire database f
a020: 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28 49  ile.</p>..<p>^(I
a030: 6e 20 61 20 64 61 74 61 62 61 73 65 20 74 68 61  n a database tha
a040: 74 20 75 73 65 73 20 70 74 72 6d 61 70 20 70 61  t uses ptrmap pa
a050: 67 65 73 2c 20 61 6c 6c 20 70 61 67 65 73 20 61  ges, all pages a
a060: 74 20 6c 6f 63 61 74 69 6f 6e 73 20 69 64 65 6e  t locations iden
a070: 74 69 66 69 65 64 0a 62 79 20 74 68 65 20 63 6f  tified.by the co
a080: 6d 70 75 74 61 74 69 6f 6e 20 69 6e 20 74 68 65  mputation in the
a090: 20 70 72 65 76 69 6f 75 73 20 70 61 72 61 67 72   previous paragr
a0a0: 61 70 68 20 6d 75 73 74 20 62 65 20 70 74 72 6d  aph must be ptrm
a0b0: 61 70 20 70 61 67 65 20 61 6e 64 20 6e 6f 0a 6f  ap page and no.o
a0c0: 74 68 65 72 20 70 61 67 65 20 6d 61 79 20 62 65  ther page may be
a0d0: 20 61 20 70 74 72 6d 61 70 20 70 61 67 65 2e 20   a ptrmap page. 
a0e0: 20 45 78 63 65 70 74 2c 20 69 66 20 74 68 65 20   Except, if the 
a0f0: 62 79 74 65 2d 6c 6f 63 6b 20 70 61 67 65 20 68  byte-lock page h
a100: 61 70 70 65 6e 73 20 74 6f 0a 66 61 6c 6c 20 6f  appens to.fall o
a110: 6e 20 74 68 65 20 73 61 6d 65 20 70 61 67 65 20  n the same page 
a120: 6e 75 6d 62 65 72 20 61 73 20 61 20 70 74 72 6d  number as a ptrm
a130: 61 70 20 70 61 67 65 2c 20 74 68 65 6e 20 74 68  ap page, then th
a140: 65 20 70 74 72 6d 61 70 20 69 73 20 6d 6f 76 65  e ptrmap is move
a150: 64 0a 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69  d.to the followi
a160: 6e 67 20 70 61 67 65 20 66 6f 72 20 74 68 61 74  ng page for that
a170: 20 6f 6e 65 20 63 61 73 65 2e 29 5e 3c 2f 70 3e   one case.)^</p>
a180: 0a 0a 3c 70 3e 45 61 63 68 20 35 2d 62 79 74 65  ..<p>Each 5-byte
a190: 20 65 6e 74 72 79 20 6f 6e 20 61 20 70 74 72 6d   entry on a ptrm
a1a0: 61 70 20 70 61 67 65 20 70 72 6f 76 69 64 65 73  ap page provides
a1b0: 20 62 61 63 6b 2d 6c 69 6e 6b 20 69 6e 66 6f 72   back-link infor
a1c0: 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 0a 6f 6e  mation about .on
a1d0: 65 20 6f 66 20 74 68 65 20 70 61 67 65 73 20 74  e of the pages t
a1e0: 68 61 74 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  hat immediately 
a1f0: 66 6f 6c 6c 6f 77 20 74 68 65 20 70 6f 69 6e 74  follow the point
a200: 65 72 20 6d 61 70 2e 20 20 5e 28 49 66 20 70 61  er map.  ^(If pa
a210: 67 65 20 42 20 69 73 20 61 0a 70 74 72 6d 61 70  ge B is a.ptrmap
a220: 20 70 61 67 65 20 74 68 65 6e 20 62 61 63 6b 2d   page then back-
a230: 6c 69 6e 6b 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  link information
a240: 20 61 62 6f 75 74 20 70 61 67 65 20 42 2b 31 20   about page B+1 
a250: 69 73 20 70 72 6f 76 69 64 65 64 20 62 79 0a 74  is provided by.t
a260: 68 65 20 66 69 72 73 74 20 65 6e 74 72 79 20 6f  he first entry o
a270: 6e 20 74 68 65 20 70 6f 69 6e 74 65 72 20 6d 61  n the pointer ma
a280: 70 2e 20 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20  p.  Information 
a290: 61 62 6f 75 74 20 70 61 67 65 20 42 2b 32 20 69  about page B+2 i
a2a0: 73 0a 70 72 6f 76 69 64 65 64 20 62 79 20 74 68  s.provided by th
a2b0: 65 20 73 65 63 6f 6e 64 20 65 6e 74 72 79 2e 20  e second entry. 
a2c0: 20 41 6e 64 20 73 6f 20 66 6f 72 74 68 2e 29 5e   And so forth.)^
a2d0: 3c 2f 70 3e 0a 0a 3c 70 3e 45 61 63 68 20 35 2d  </p>..<p>Each 5-
a2e0: 62 79 74 65 20 70 74 72 6d 61 70 20 65 6e 74 72  byte ptrmap entr
a2f0: 79 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 6f 6e  y consists of on
a300: 65 20 62 79 74 65 20 6f 66 20 22 70 61 67 65 20  e byte of "page 
a310: 74 79 70 65 22 20 69 6e 66 6f 72 6d 61 74 69 6f  type" informatio
a320: 6e 0a 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20  n.followed by a 
a330: 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61  4-byte big-endia
a340: 6e 20 70 61 67 65 20 6e 75 6d 62 65 72 2e 20 20  n page number.  
a350: 46 69 76 65 20 70 61 67 65 20 74 79 70 65 73 20  Five page types 
a360: 61 72 65 20 72 65 63 6f 67 6e 69 7a 65 64 3a 0a  are recognized:.
a370: 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 41  </p>..<ol>.<li>A
a380: 20 62 2d 74 72 65 65 20 72 6f 6f 74 20 70 61 67   b-tree root pag
a390: 65 2e 20 20 54 68 65 0a 70 61 67 65 20 6e 75 6d  e.  The.page num
a3a0: 62 65 72 20 73 68 6f 75 6c 64 20 62 65 20 7a 65  ber should be ze
a3b0: 72 6f 2e 0a 3c 6c 69 3e 41 20 66 72 65 65 6c 69  ro..<li>A freeli
a3c0: 73 74 20 70 61 67 65 2e 20 20 54 68 65 20 70 61  st page.  The pa
a3d0: 67 65 20 6e 75 6d 62 65 72 20 73 68 6f 75 6c 64  ge number should
a3e0: 20 62 65 0a 7a 65 72 6f 2e 0a 3c 6c 69 3e 54 68   be.zero..<li>Th
a3f0: 65 20 66 69 72 73 74 20 70 61 67 65 20 6f 66 20  e first page of 
a400: 61 0a 63 65 6c 6c 20 70 61 79 6c 6f 61 64 20 6f  a.cell payload o
a410: 76 65 72 66 6c 6f 77 20 63 68 61 69 6e 2e 20 20  verflow chain.  
a420: 54 68 65 20 70 61 67 65 20 6e 75 6d 62 65 72 20  The page number 
a430: 69 73 20 74 68 65 20 62 2d 74 72 65 65 20 70 61  is the b-tree pa
a440: 67 65 20 74 68 61 74 0a 63 6f 6e 74 61 69 6e 73  ge that.contains
a450: 20 74 68 65 20 63 65 6c 6c 20 77 68 6f 73 65 20   the cell whose 
a460: 63 6f 6e 74 65 6e 74 20 68 61 73 20 6f 76 65 72  content has over
a470: 66 6c 6f 77 65 64 2e 0a 3c 6c 69 3e 41 20 70 61  flowed..<li>A pa
a480: 67 65 20 69 6e 20 61 6e 20 6f 76 65 72 66 6c 6f  ge in an overflo
a490: 77 20 63 68 61 69 6e 0a 6f 74 68 65 72 20 74 68  w chain.other th
a4a0: 61 6e 20 74 68 65 20 66 69 72 73 74 20 70 61 67  an the first pag
a4b0: 65 2e 20 20 54 68 65 20 70 61 67 65 20 6e 75 6d  e.  The page num
a4c0: 62 65 72 20 69 73 20 74 68 65 20 70 72 69 6f 72  ber is the prior
a4d0: 20 70 61 67 65 20 6f 66 20 74 68 65 0a 6f 76 65   page of the.ove
a4e0: 72 66 6c 6f 77 20 63 68 61 69 6e 2e 0a 3c 6c 69  rflow chain..<li
a4f0: 3e 41 20 6e 6f 6e 2d 72 6f 6f 74 20 62 2d 74 72  >A non-root b-tr
a500: 65 65 20 70 61 67 65 2e 20 20 54 68 65 0a 70 61  ee page.  The.pa
a510: 67 65 20 6e 75 6d 62 65 72 20 69 73 20 74 68 65  ge number is the
a520: 20 70 61 72 65 6e 74 20 62 2d 74 72 65 65 20 70   parent b-tree p
a530: 61 67 65 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 5e  age..</ol>..<p>^
a540: 49 6e 20 61 6e 79 20 64 61 74 61 62 61 73 65 20  In any database 
a550: 66 69 6c 65 20 74 68 61 74 20 63 6f 6e 74 61 69  file that contai
a560: 6e 73 20 70 74 72 6d 61 70 20 70 61 67 65 73 2c  ns ptrmap pages,
a570: 20 61 6c 6c 20 62 2d 74 72 65 65 20 72 6f 6f 74   all b-tree root
a580: 20 70 61 67 65 73 20 0a 6d 75 73 74 20 63 6f 6d   pages .must com
a590: 65 20 62 65 66 6f 72 65 20 61 6e 79 20 6e 6f 6e  e before any non
a5a0: 2d 72 6f 6f 74 20 62 2d 74 72 65 65 20 70 61 67  -root b-tree pag
a5b0: 65 2c 20 63 65 6c 6c 20 70 61 79 6c 6f 61 64 20  e, cell payload 
a5c0: 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 2c 20 6f  overflow page, o
a5d0: 72 0a 66 72 65 65 6c 69 73 74 20 70 61 67 65 2e  r.freelist page.
a5e0: 20 20 54 68 69 73 20 72 65 73 74 72 69 63 74 69    This restricti
a5f0: 6f 6e 20 65 6e 73 75 72 65 73 20 74 68 61 74 20  on ensures that 
a600: 61 20 72 6f 6f 74 20 70 61 67 65 20 77 69 6c 6c  a root page will
a610: 20 6e 65 76 65 72 0a 62 65 20 6d 6f 76 65 64 20   never.be moved 
a620: 64 75 72 69 6e 67 20 61 6e 20 61 75 74 6f 2d 76  during an auto-v
a630: 61 63 75 75 6d 20 6f 72 20 69 6e 63 72 65 6d 65  acuum or increme
a640: 6e 74 61 6c 2d 76 61 63 75 75 6d 2e 20 20 54 68  ntal-vacuum.  Th
a650: 65 20 61 75 74 6f 2d 76 61 63 75 75 6d 0a 6c 6f  e auto-vacuum.lo
a660: 67 69 63 20 64 6f 65 73 20 6e 6f 74 20 6b 6e 6f  gic does not kno
a670: 77 20 68 6f 77 20 74 6f 20 75 70 64 61 74 65 20  w how to update 
a680: 74 68 65 20 72 6f 6f 74 5f 70 61 67 65 20 66 69  the root_page fi
a690: 65 6c 64 20 6f 66 20 74 68 65 20 73 71 6c 69 74  eld of the sqlit
a6a0: 65 5f 6d 61 73 74 65 72 0a 74 61 62 6c 65 20 61  e_master.table a
a6b0: 6e 64 20 73 6f 20 69 74 20 69 73 20 6e 65 63 65  nd so it is nece
a6c0: 73 73 61 72 79 20 74 6f 20 70 72 65 76 65 6e 74  ssary to prevent
a6d0: 20 72 6f 6f 74 20 70 61 67 65 73 20 66 72 6f 6d   root pages from
a6e0: 20 62 65 69 6e 67 20 6d 6f 76 65 64 0a 64 75 72   being moved.dur
a6f0: 69 6e 67 20 61 6e 20 61 75 74 6f 2d 76 61 63 75  ing an auto-vacu
a700: 75 6d 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 70  um in order to p
a710: 72 65 73 65 72 76 65 20 74 68 65 20 69 6e 74 65  reserve the inte
a720: 67 72 69 74 79 20 6f 66 20 74 68 65 0a 73 71 6c  grity of the.sql
a730: 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65  ite_master table
a740: 2e 20 20 5e 52 6f 6f 74 20 70 61 67 65 73 20 61  .  ^Root pages a
a750: 72 65 20 6d 6f 76 65 64 20 74 6f 20 74 68 65 20  re moved to the 
a760: 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65  beginning of the
a770: 0a 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 62  .database file b
a780: 79 20 74 68 65 20 43 52 45 41 54 45 20 54 41 42  y the CREATE TAB
a790: 4c 45 2c 20 43 52 45 41 54 45 20 49 4e 44 45 58  LE, CREATE INDEX
a7a0: 2c 20 44 52 4f 50 20 54 41 42 4c 45 2c 20 61 6e  , DROP TABLE, an
a7b0: 64 0a 44 52 4f 50 20 49 4e 44 45 58 20 6f 70 65  d.DROP INDEX ope
a7c0: 72 61 74 69 6f 6e 73 2e 3c 2f 70 3e 0a 0a 3c 68  rations.</p>..<h
a7d0: 31 3e 53 63 68 65 6d 61 20 4c 61 79 65 72 3c 2f  1>Schema Layer</
a7e0: 68 31 3e 0a 0a 3c 70 3e 54 68 65 20 66 6f 72 65  h1>..<p>The fore
a7f0: 67 6f 69 6e 67 20 74 65 78 74 20 64 65 73 63 72  going text descr
a800: 69 62 65 73 20 6c 6f 77 2d 6c 65 76 65 6c 20 61  ibes low-level a
a810: 73 70 65 63 74 73 20 6f 66 20 74 68 65 20 53 51  spects of the SQ
a820: 4c 69 74 65 20 66 69 6c 65 0a 66 6f 72 6d 61 74  Lite file.format
a830: 2e 20 20 54 68 65 20 62 2d 74 72 65 65 20 6d 65  .  The b-tree me
a840: 63 68 61 6e 69 73 6d 20 70 72 6f 76 69 64 65 73  chanism provides
a850: 20 61 20 70 6f 77 65 72 66 75 6c 20 61 6e 64 20   a powerful and 
a860: 65 66 66 69 63 69 65 6e 74 20 6d 65 61 6e 73 20  efficient means 
a870: 6f 66 0a 61 63 63 65 73 73 69 6e 67 20 61 20 6c  of.accessing a l
a880: 61 72 67 65 20 64 61 74 61 20 73 65 74 2e 20 20  arge data set.  
a890: 54 68 69 73 20 73 65 63 74 69 6f 6e 20 77 69 6c  This section wil
a8a0: 6c 20 64 65 73 63 72 69 62 65 20 68 6f 77 20 74  l describe how t
a8b0: 68 65 0a 6c 6f 77 2d 6c 65 76 65 6c 20 62 2d 74  he.low-level b-t
a8c0: 72 65 65 20 6c 61 79 65 72 20 69 73 20 75 73 65  ree layer is use
a8d0: 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 68  d to implement h
a8e0: 69 67 68 65 72 2d 6c 65 76 65 6c 20 53 51 4c 0a  igher-level SQL.
a8f0: 63 61 70 61 62 69 6c 69 74 69 65 73 2e 3c 2f 70  capabilities.</p
a900: 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
a910: 65 6e 74 20 72 65 63 6f 72 64 5f 66 6f 72 6d 61  ent record_forma
a920: 74 20 7b 72 65 63 6f 72 64 20 66 6f 72 6d 61 74  t {record format
a930: 7d 3c 2f 74 63 6c 3e 0a 3c 68 32 3e 52 65 63 6f  }</tcl>.<h2>Reco
a940: 72 64 20 46 6f 72 6d 61 74 3c 2f 68 32 3e 0a 0a  rd Format</h2>..
a950: 3c 70 3e 54 68 65 20 64 61 74 61 20 66 6f 72 20  <p>The data for 
a960: 61 20 74 61 62 6c 65 20 62 2d 74 72 65 65 20 6c  a table b-tree l
a970: 65 61 66 20 70 61 67 65 20 61 6e 64 20 74 68 65  eaf page and the
a980: 20 6b 65 79 0a 6f 66 20 61 6e 20 69 6e 64 65 78   key.of an index
a990: 20 62 2d 74 72 65 65 20 70 61 67 65 20 77 61 73   b-tree page was
a9a0: 20 63 68 61 72 61 63 74 65 72 69 7a 65 64 20 61   characterized a
a9b0: 62 6f 76 65 0a 61 73 20 61 6e 20 61 72 62 69 74  bove.as an arbit
a9c0: 72 61 72 79 20 73 65 71 75 65 6e 63 65 20 6f 66  rary sequence of
a9d0: 20 62 79 74 65 73 2e 0a 54 68 65 20 70 72 69 6f   bytes..The prio
a9e0: 72 20 64 69 73 63 75 73 73 69 6f 6e 20 6d 65 6e  r discussion men
a9f0: 74 69 6f 6e 65 64 20 6f 6e 65 20 6b 65 79 20 62  tioned one key b
aa00: 65 69 6e 67 20 6c 65 73 73 20 74 68 61 6e 20 61  eing less than a
aa10: 6e 6f 74 68 65 72 2c 20 62 75 74 0a 64 69 64 20  nother, but.did 
aa20: 6e 6f 74 20 64 65 66 69 6e 65 20 77 68 61 74 20  not define what 
aa30: 22 6c 65 73 73 20 74 68 61 6e 22 20 6d 65 61 6e  "less than" mean
aa40: 74 2e 20 20 54 68 65 20 63 75 72 72 65 6e 74 20  t.  The current 
aa50: 73 65 63 74 69 6f 6e 20 77 69 6c 6c 20 61 64 64  section will add
aa60: 72 65 73 73 0a 74 68 65 73 65 20 6f 6d 69 73 73  ress.these omiss
aa70: 69 6f 6e 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 50 61  ions.</p>..<p>Pa
aa80: 79 6c 6f 61 64 2c 20 65 69 74 68 65 72 20 74 61  yload, either ta
aa90: 62 6c 65 20 62 2d 74 72 65 65 20 64 61 74 61 20  ble b-tree data 
aaa0: 6f 72 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20  or index b-tree 
aab0: 6b 65 79 73 2c 20 0a 69 73 20 61 6c 77 61 79 73  keys, .is always
aac0: 20 69 6e 20 74 68 65 20 22 72 65 63 6f 72 64 20   in the "record 
aad0: 66 6f 72 6d 61 74 22 2e 0a 54 68 65 20 72 65 63  format"..The rec
aae0: 6f 72 64 20 66 6f 72 6d 61 74 20 64 65 66 69 6e  ord format defin
aaf0: 65 73 20 61 20 73 65 71 75 65 6e 63 65 20 6f 66  es a sequence of
ab00: 20 76 61 6c 75 65 73 20 63 6f 72 72 65 73 70 6f   values correspo
ab10: 6e 64 69 6e 67 0a 74 6f 20 63 6f 6c 75 6d 6e 73  nding.to columns
ab20: 20 69 6e 20 61 20 74 61 62 6c 65 20 6f 72 20 69   in a table or i
ab30: 6e 64 65 78 2e 20 20 54 68 65 20 72 65 63 6f 72  ndex.  The recor
ab40: 64 20 66 6f 72 6d 61 74 20 73 70 65 63 69 66 69  d format specifi
ab50: 65 73 20 74 68 65 20 6e 75 6d 62 65 72 0a 6f 66  es the number.of
ab60: 20 63 6f 6c 75 6d 6e 73 2c 20 74 68 65 20 64 61   columns, the da
ab70: 74 61 74 79 70 65 20 6f 66 20 65 61 63 68 20 63  tatype of each c
ab80: 6f 6c 75 6d 6e 2c 20 61 6e 64 20 74 68 65 20 63  olumn, and the c
ab90: 6f 6e 74 65 6e 74 20 6f 66 20 65 61 63 68 20 63  ontent of each c
aba0: 6f 6c 75 6d 6e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54  olumn.</p>..<p>T
abb0: 68 65 20 72 65 63 6f 72 64 20 66 6f 72 6d 61 74  he record format
abc0: 20 6d 61 6b 65 73 20 65 78 74 65 6e 73 69 76 65   makes extensive
abd0: 20 75 73 65 20 6f 66 20 74 68 65 20 0a 5b 76 61   use of the .[va
abe0: 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e  riable-length in
abf0: 74 65 67 65 72 5d 20 6f 72 20 5b 76 61 72 69 6e  teger] or [varin
ac00: 74 5d 0a 72 65 70 72 65 73 65 6e 74 61 74 69 6f  t].representatio
ac10: 6e 20 6f 66 20 36 34 2d 62 69 74 20 73 69 67 6e  n of 64-bit sign
ac20: 65 64 20 69 6e 74 65 67 65 72 73 20 64 65 66 69  ed integers defi
ac30: 6e 65 64 20 61 62 6f 76 65 2e 3c 2f 70 3e 0a 0a  ned above.</p>..
ac40: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
ac50: 20 73 65 72 69 61 6c 74 79 70 65 20 7b 73 65 72   serialtype {ser
ac60: 69 61 6c 20 74 79 70 65 7d 20 7b 73 65 72 69 61  ial type} {seria
ac70: 6c 20 74 79 70 65 73 7d 3c 2f 74 63 6c 3e 0a 3c  l types}</tcl>.<
ac80: 70 3e 41 20 72 65 63 6f 72 64 20 63 6f 6e 74 61  p>A record conta
ac90: 69 6e 73 20 61 20 68 65 61 64 65 72 20 61 6e 64  ins a header and
aca0: 20 61 20 62 6f 64 79 2c 20 69 6e 20 74 68 61 74   a body, in that
acb0: 20 6f 72 64 65 72 2e 20 20 0a 5e 28 54 68 65 20   order.  .^(The 
acc0: 68 65 61 64 65 72 20 62 65 67 69 6e 73 20 77 69  header begins wi
acd0: 74 68 20 61 20 73 69 6e 67 6c 65 20 76 61 72 69  th a single vari
ace0: 6e 74 20 77 68 69 63 68 20 64 65 74 65 72 6d 69  nt which determi
acf0: 6e 65 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75  nes the total nu
ad00: 6d 62 65 72 0a 6f 66 20 62 79 74 65 73 20 69 6e  mber.of bytes in
ad10: 20 74 68 65 20 68 65 61 64 65 72 2e 20 20 54 68   the header.  Th
ad20: 65 20 76 61 72 69 6e 74 20 76 61 6c 75 65 20 69  e varint value i
ad30: 73 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68  s the size of th
ad40: 65 20 68 65 61 64 65 72 20 69 6e 0a 62 79 74 65  e header in.byte
ad50: 73 20 69 6e 63 6c 75 64 69 6e 67 20 74 68 65 20  s including the 
ad60: 73 69 7a 65 20 76 61 72 69 6e 74 20 69 74 73 65  size varint itse
ad70: 6c 66 2e 29 5e 20 20 5e 46 6f 6c 6c 6f 77 69 6e  lf.)^  ^Followin
ad80: 67 20 74 68 65 20 73 69 7a 65 20 76 61 72 69 6e  g the size varin
ad90: 74 20 61 72 65 0a 6f 6e 65 20 6f 72 20 6d 6f 72  t are.one or mor
ada0: 65 20 61 64 64 69 74 69 6f 6e 61 6c 20 76 61 72  e additional var
adb0: 69 6e 74 73 2c 20 6f 6e 65 20 70 65 72 20 63 6f  ints, one per co
adc0: 6c 75 6d 6e 2e 20 20 54 68 65 73 65 20 61 64 64  lumn.  These add
add0: 69 74 69 6f 6e 61 6c 20 76 61 72 69 6e 74 73 0a  itional varints.
ade0: 61 72 65 20 63 61 6c 6c 65 64 20 22 73 65 72 69  are called "seri
adf0: 61 6c 20 74 79 70 65 22 20 6e 75 6d 62 65 72 73  al type" numbers
ae00: 20 61 6e 64 0a 64 65 74 65 72 6d 69 6e 65 20 74   and.determine t
ae10: 68 65 20 64 61 74 61 74 79 70 65 20 6f 66 20 65  he datatype of e
ae20: 61 63 68 20 63 6f 6c 75 6d 6e 2c 20 61 63 63 6f  ach column, acco
ae30: 72 64 69 6e 67 20 74 6f 20 74 68 65 20 66 6f 6c  rding to the fol
ae40: 6c 6f 77 69 6e 67 20 63 68 61 72 74 3a 3c 2f 70  lowing chart:</p
ae50: 3e 0a 0a 3c 63 65 6e 74 65 72 3e 0a 3c 69 3e 53  >..<center>.<i>S
ae60: 65 72 69 61 6c 20 54 79 70 65 20 43 6f 64 65 73  erial Type Codes
ae70: 20 4f 66 20 54 68 65 20 52 65 63 6f 72 64 20 46   Of The Record F
ae80: 6f 72 6d 61 74 3c 2f 69 3e 3c 62 72 3e 0a 3c 74  ormat</i><br>.<t
ae90: 61 62 6c 65 20 77 69 64 74 68 3d 22 38 30 25 22  able width="80%"
aea0: 20 62 6f 72 64 65 72 3d 31 3e 0a 3c 74 72 3e 3c   border=1>.<tr><
aeb0: 74 68 3e 53 65 72 69 61 6c 20 54 79 70 65 3c 74  th>Serial Type<t
aec0: 68 3e 43 6f 6e 74 65 6e 74 20 53 69 7a 65 3c 74  h>Content Size<t
aed0: 68 3e 4d 65 61 6e 69 6e 67 0a 3c 74 72 3e 3c 74  h>Meaning.<tr><t
aee0: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
aef0: 67 6e 3d 63 65 6e 74 65 72 3e 30 3c 74 64 20 76  gn=center>0<td v
af00: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
af10: 63 65 6e 74 65 72 3e 30 3c 74 64 20 61 6c 69 67  center>0<td alig
af20: 6e 3d 6c 65 66 74 3e 0a 5e 56 61 6c 75 65 20 69  n=left>.^Value i
af30: 73 20 61 20 4e 55 4c 4c 2e 0a 3c 74 72 3e 3c 74  s a NULL..<tr><t
af40: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
af50: 67 6e 3d 63 65 6e 74 65 72 3e 31 3c 74 64 20 76  gn=center>1<td v
af60: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
af70: 63 65 6e 74 65 72 3e 31 3c 74 64 20 61 6c 69 67  center>1<td alig
af80: 6e 3d 6c 65 66 74 3e 0a 5e 56 61 6c 75 65 20 69  n=left>.^Value i
af90: 73 20 61 6e 20 38 2d 62 69 74 20 74 77 6f 73 2d  s an 8-bit twos-
afa0: 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 74 65 67  complement integ
afb0: 65 72 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  er..<tr><td vali
afc0: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
afd0: 74 65 72 3e 32 3c 74 64 20 76 61 6c 69 67 6e 3d  ter>2<td valign=
afe0: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
aff0: 3e 32 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74  >2<td align=left
b000: 3e 0a 5e 56 61 6c 75 65 20 69 73 20 61 20 62 69  >.^Value is a bi
b010: 67 2d 65 6e 64 69 61 6e 20 31 36 2d 62 69 74 20  g-endian 16-bit 
b020: 74 77 6f 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20  twos-complement 
b030: 69 6e 74 65 67 65 72 2e 0a 3c 74 72 3e 3c 74 64  integer..<tr><td
b040: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
b050: 6e 3d 63 65 6e 74 65 72 3e 33 3c 74 64 20 76 61  n=center>3<td va
b060: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
b070: 65 6e 74 65 72 3e 33 3c 74 64 20 61 6c 69 67 6e  enter>3<td align
b080: 3d 6c 65 66 74 3e 0a 5e 56 61 6c 75 65 20 69 73  =left>.^Value is
b090: 20 61 20 62 69 67 2d 65 6e 64 69 61 6e 20 32 34   a big-endian 24
b0a0: 2d 62 69 74 20 74 77 6f 73 2d 63 6f 6d 70 6c 65  -bit twos-comple
b0b0: 6d 65 6e 74 20 69 6e 74 65 67 65 72 2e 0a 3c 74  ment integer..<t
b0c0: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
b0d0: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 3c   align=center>4<
b0e0: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
b0f0: 69 67 6e 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20  ign=center>4<td 
b100: 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 56 61 6c  align=left>.^Val
b110: 75 65 20 69 73 20 61 20 62 69 67 2d 65 6e 64 69  ue is a big-endi
b120: 61 6e 20 33 32 2d 62 69 74 20 74 77 6f 73 2d 63  an 32-bit twos-c
b130: 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 74 65 67 65  omplement intege
b140: 72 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  r..<tr><td valig
b150: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
b160: 65 72 3e 35 3c 74 64 20 76 61 6c 69 67 6e 3d 74  er>5<td valign=t
b170: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
b180: 36 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e  6<td align=left>
b190: 0a 5e 56 61 6c 75 65 20 69 73 20 61 20 62 69 67  .^Value is a big
b1a0: 2d 65 6e 64 69 61 6e 20 34 38 2d 62 69 74 20 74  -endian 48-bit t
b1b0: 77 6f 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 69  wos-complement i
b1c0: 6e 74 65 67 65 72 2e 0a 3c 74 72 3e 3c 74 64 20  nteger..<tr><td 
b1d0: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
b1e0: 3d 63 65 6e 74 65 72 3e 36 3c 74 64 20 76 61 6c  =center>6<td val
b1f0: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
b200: 6e 74 65 72 3e 38 3c 74 64 20 61 6c 69 67 6e 3d  nter>8<td align=
b210: 6c 65 66 74 3e 0a 5e 56 61 6c 75 65 20 69 73 20  left>.^Value is 
b220: 61 20 62 69 67 2d 65 6e 64 69 61 6e 20 36 34 2d  a big-endian 64-
b230: 62 69 74 20 74 77 6f 73 2d 63 6f 6d 70 6c 65 6d  bit twos-complem
b240: 65 6e 74 20 69 6e 74 65 67 65 72 2e 0a 3c 74 72  ent integer..<tr
b250: 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
b260: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 37 3c 74  align=center>7<t
b270: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
b280: 67 6e 3d 63 65 6e 74 65 72 3e 38 3c 74 64 20 61  gn=center>8<td a
b290: 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 56 61 6c 75  lign=left>.^Valu
b2a0: 65 20 69 73 20 61 20 62 69 67 2d 65 6e 64 69 61  e is a big-endia
b2b0: 6e 20 49 45 45 45 20 37 35 34 2d 32 30 30 38 20  n IEEE 754-2008 
b2c0: 36 34 2d 62 69 74 20 66 6c 6f 61 74 69 6e 67 20  64-bit floating 
b2d0: 70 6f 69 6e 74 20 6e 75 6d 62 65 72 2e 0a 3c 74  point number..<t
b2e0: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
b2f0: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 38 3c   align=center>8<
b300: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
b310: 69 67 6e 3d 63 65 6e 74 65 72 3e 30 3c 74 64 20  ign=center>0<td 
b320: 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 56 61 6c  align=left>.^Val
b330: 75 65 20 69 73 20 74 68 65 20 69 6e 74 65 67 65  ue is the intege
b340: 72 20 30 2e 20 28 4f 6e 6c 79 20 61 76 61 69 6c  r 0. (Only avail
b350: 61 62 6c 65 20 66 6f 72 20 5b 73 63 68 65 6d 61  able for [schema
b360: 20 66 6f 72 6d 61 74 5d 20 34 20 61 6e 64 20 68   format] 4 and h
b370: 69 67 68 65 72 2e 29 0a 3c 74 72 3e 3c 74 64 20  igher.).<tr><td 
b380: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
b390: 3d 63 65 6e 74 65 72 3e 39 3c 74 64 20 76 61 6c  =center>9<td val
b3a0: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
b3b0: 6e 74 65 72 3e 30 3c 74 64 20 61 6c 69 67 6e 3d  nter>0<td align=
b3c0: 6c 65 66 74 3e 0a 5e 56 61 6c 75 65 20 69 73 20  left>.^Value is 
b3d0: 74 68 65 20 69 6e 74 65 67 65 72 20 31 2e 20 28  the integer 1. (
b3e0: 4f 6e 6c 79 20 61 76 61 69 6c 61 62 6c 65 20 66  Only available f
b3f0: 6f 72 20 5b 73 63 68 65 6d 61 20 66 6f 72 6d 61  or [schema forma
b400: 74 5d 20 34 20 61 6e 64 20 68 69 67 68 65 72 2e  t] 4 and higher.
b410: 29 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  ).<tr><td valign
b420: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
b430: 72 3e 31 30 2c 31 31 0a 20 20 20 20 3c 74 64 20  r>10,11.    <td 
b440: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
b450: 3d 63 65 6e 74 65 72 3e 26 6e 62 73 70 3b 3c 74  =center>&nbsp;<t
b460: 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 3c 69  d align=left>.<i
b470: 3e 4e 6f 74 20 75 73 65 64 2e 20 20 52 65 73 65  >Not used.  Rese
b480: 72 76 65 64 20 66 6f 72 20 65 78 70 61 6e 73 69  rved for expansi
b490: 6f 6e 2e 3c 2f 69 3e 0a 3c 74 72 3e 3c 74 64 20  on.</i>.<tr><td 
b4a0: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
b4b0: 3d 63 65 6e 74 65 72 3e 4e 26 23 78 32 32 36 35  =center>N&#x2265
b4c0: 3b 31 32 20 61 6e 64 20 65 76 65 6e 0a 20 20 20  ;12 and even.   
b4d0: 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20   <td valign=top 
b4e0: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 28 4e 2d  align=center>(N-
b4f0: 31 32 29 2f 32 3c 74 64 20 61 6c 69 67 6e 3d 6c  12)/2<td align=l
b500: 65 66 74 3e 0a 5e 56 61 6c 75 65 20 69 73 20 61  eft>.^Value is a
b510: 20 42 4c 4f 42 20 74 68 61 74 20 69 73 20 28 4e   BLOB that is (N
b520: 2d 31 32 29 2f 32 20 62 79 74 65 73 20 69 6e 20  -12)/2 bytes in 
b530: 6c 65 6e 67 74 68 2e 0a 3c 74 72 3e 3c 74 64 20  length..<tr><td 
b540: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
b550: 3d 63 65 6e 74 65 72 3e 4e 26 23 78 32 32 36 35  =center>N&#x2265
b560: 3b 31 33 20 61 6e 64 20 6f 64 64 0a 20 20 20 20  ;13 and odd.    
b570: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
b580: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 28 4e 2d 31  lign=center>(N-1
b590: 33 29 2f 32 3c 74 64 20 61 6c 69 67 6e 3d 6c 65  3)/2<td align=le
b5a0: 66 74 3e 0a 5e 56 61 6c 75 65 20 69 73 20 61 20  ft>.^Value is a 
b5b0: 73 74 72 69 6e 67 20 69 6e 20 74 68 65 20 5b 74  string in the [t
b5c0: 65 78 74 20 65 6e 63 6f 64 69 6e 67 5d 20 61 6e  ext encoding] an
b5d0: 64 20 28 4e 2d 31 33 29 2f 32 20 62 79 74 65 73  d (N-13)/2 bytes
b5e0: 20 69 6e 20 6c 65 6e 67 74 68 2e 0a 5e 54 68 65   in length..^The
b5f0: 20 6e 75 6c 20 74 65 72 6d 69 6e 61 74 6f 72 20   nul terminator 
b600: 69 73 20 6e 6f 74 20 73 74 6f 72 65 64 2e 0a 3c  is not stored..<
b610: 2f 74 61 62 6c 65 3e 3c 2f 63 65 6e 74 65 72 3e  /table></center>
b620: 0a 0a 3c 70 3e 54 68 65 20 68 65 61 64 65 72 20  ..<p>The header 
b630: 73 69 7a 65 20 76 61 72 69 6e 74 0a 61 6e 64 20  size varint.and 
b640: 73 65 72 69 61 6c 20 74 79 70 65 20 76 61 72 69  serial type vari
b650: 6e 74 73 20 77 69 6c 6c 20 75 73 75 61 6c 6c 79  nts will usually
b660: 20 63 6f 6e 73 69 73 74 20 6f 66 20 61 20 73 69   consist of a si
b670: 6e 67 6c 65 20 62 79 74 65 2e 20 20 54 68 65 0a  ngle byte.  The.
b680: 73 65 72 69 61 6c 20 74 79 70 65 20 76 61 72 69  serial type vari
b690: 6e 74 73 20 66 6f 72 20 6c 61 72 67 65 20 73 74  nts for large st
b6a0: 72 69 6e 67 73 20 61 6e 64 20 42 4c 4f 42 73 20  rings and BLOBs 
b6b0: 6d 69 67 68 74 20 65 78 74 65 6e 64 20 74 6f 20  might extend to 
b6c0: 74 77 6f 20 6f 72 20 74 68 72 65 65 0a 62 79 74  two or three.byt
b6d0: 65 20 76 61 72 69 6e 74 73 2c 20 62 75 74 20 74  e varints, but t
b6e0: 68 61 74 20 69 73 20 74 68 65 20 65 78 63 65 70  hat is the excep
b6f0: 74 69 6f 6e 20 72 61 74 68 65 72 20 74 68 61 6e  tion rather than
b700: 20 74 68 65 20 72 75 6c 65 2e 20 0a 54 68 65 20   the rule. .The 
b710: 76 61 72 69 6e 74 20 66 6f 72 6d 61 74 20 69 73  varint format is
b720: 20 76 65 72 79 20 65 66 66 69 63 69 65 6e 74 20   very efficient 
b730: 61 74 20 63 6f 64 69 6e 67 20 74 68 65 20 72 65  at coding the re
b740: 63 6f 72 64 20 68 65 61 64 65 72 2e 3c 2f 70 3e  cord header.</p>
b750: 0a 0a 3c 70 3e 5e 54 68 65 20 76 61 6c 75 65 73  ..<p>^The values
b760: 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   for each column
b770: 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 69   in the record i
b780: 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f  mmediately follo
b790: 77 20 74 68 65 20 68 65 61 64 65 72 2e 0a 5e 28  w the header..^(
b7a0: 46 6f 72 20 73 65 72 69 61 6c 20 74 79 70 65 73  For serial types
b7b0: 20 30 2c 20 38 2c 20 39 2c 20 31 32 2c 20 61 6e   0, 8, 9, 12, an
b7c0: 64 20 31 33 2c 20 74 68 65 20 76 61 6c 75 65 20  d 13, the value 
b7d0: 69 73 20 7a 65 72 6f 20 62 79 74 65 73 20 69 6e  is zero bytes in
b7e0: 0a 6c 65 6e 67 74 68 2e 20 20 49 66 20 61 6c 6c  .length.  If all
b7f0: 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 6f 66 20   columns are of 
b800: 74 68 65 73 65 20 74 79 70 65 73 20 74 68 65 6e  these types then
b810: 20 74 68 65 20 62 6f 64 79 20 73 65 63 74 69 6f   the body sectio
b820: 6e 20 6f 66 20 74 68 65 0a 72 65 63 6f 72 64 20  n of the.record 
b830: 69 73 20 65 6d 70 74 79 2e 29 5e 3c 2f 70 3e 0a  is empty.)^</p>.
b840: 0a 3c 70 3e 5e 41 20 72 65 63 6f 72 64 20 6d 69  .<p>^A record mi
b850: 67 68 74 20 68 61 76 65 20 66 65 77 65 72 20 76  ght have fewer v
b860: 61 6c 75 65 73 20 74 68 61 6e 20 74 68 65 20 6e  alues than the n
b870: 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
b880: 20 69 6e 20 74 68 65 0a 63 6f 72 72 65 73 70 6f   in the.correspo
b890: 6e 64 69 6e 67 20 74 61 62 6c 65 2e 20 20 54 68  nding table.  Th
b8a0: 69 73 20 63 61 6e 20 68 61 70 70 65 6e 2c 20 66  is can happen, f
b8b0: 6f 72 20 65 78 61 6d 70 6c 65 2c 20 61 66 74 65  or example, afte
b8c0: 72 20 61 6e 0a 5b 41 4c 54 45 52 20 54 41 42 4c  r an.[ALTER TABL
b8d0: 45 7c 41 4c 54 45 52 20 54 41 42 4c 45 20 2e 2e  E|ALTER TABLE ..
b8e0: 2e 20 41 44 44 20 43 4f 4c 55 4d 4e 5d 20 53 51  . ADD COLUMN] SQ
b8f0: 4c 20 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20  L statement has 
b900: 69 6e 63 72 65 61 73 65 64 0a 74 68 65 20 6e 75  increased.the nu
b910: 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
b920: 69 6e 20 74 68 65 20 74 61 62 6c 65 20 73 63 68  in the table sch
b930: 65 6d 61 20 77 69 74 68 6f 75 74 20 6d 6f 64 69  ema without modi
b940: 66 79 69 6e 67 20 70 72 65 65 78 69 73 74 69 6e  fying preexistin
b950: 67 20 72 6f 77 73 0a 69 6e 20 74 68 65 20 74 61  g rows.in the ta
b960: 62 6c 65 2e 0a 5e 4d 69 73 73 69 6e 67 20 76 61  ble..^Missing va
b970: 6c 75 65 73 20 61 74 20 74 68 65 20 65 6e 64 20  lues at the end 
b980: 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 61 72  of the record ar
b990: 65 20 66 69 6c 6c 65 64 20 69 6e 20 75 73 69 6e  e filled in usin
b9a0: 67 20 74 68 65 0a 5b 64 65 66 61 75 6c 74 20 76  g the.[default v
b9b0: 61 6c 75 65 5d 20 66 6f 72 20 74 68 65 20 63 6f  alue] for the co
b9c0: 72 72 65 73 70 6f 6e 64 69 6e 67 20 63 6f 6c 75  rresponding colu
b9d0: 6d 6e 73 20 64 65 66 69 6e 65 64 20 69 6e 20 74  mns defined in t
b9e0: 68 65 20 74 61 62 6c 65 20 73 63 68 65 6d 61 2e  he table schema.
b9f0: 0a 3c 2f 70 3e 0a 0a 0a 3c 68 32 3e 52 65 63 6f  .</p>...<h2>Reco
ba00: 72 64 20 53 6f 72 74 20 4f 72 64 65 72 3c 2f 68  rd Sort Order</h
ba10: 32 3e 0a 0a 3c 70 3e 54 68 65 20 6f 72 64 65 72  2>..<p>The order
ba20: 20 6f 66 20 6b 65 79 73 20 69 6e 20 61 6e 20 69   of keys in an i
ba30: 6e 64 65 78 20 62 2d 74 72 65 65 20 69 73 20 64  ndex b-tree is d
ba40: 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65  etermined by the
ba50: 20 73 6f 72 74 20 6f 72 64 65 72 20 6f 66 0a 74   sort order of.t
ba60: 68 65 20 72 65 63 6f 72 64 73 20 74 68 61 74 20  he records that 
ba70: 74 68 65 20 6b 65 79 73 20 72 65 70 72 65 73 65  the keys represe
ba80: 6e 74 2e 20 20 52 65 63 6f 72 64 20 63 6f 6d 70  nt.  Record comp
ba90: 61 72 69 73 6f 6e 20 70 72 6f 67 72 65 73 73 65  arison progresse
baa0: 73 20 63 6f 6c 75 6d 6e 0a 62 79 20 63 6f 6c 75  s column.by colu
bab0: 6d 6e 2e 20 20 43 6f 6c 75 6d 6e 73 20 6f 66 20  mn.  Columns of 
bac0: 61 20 72 65 63 6f 72 64 20 61 72 65 20 65 78 61  a record are exa
bad0: 6d 69 6e 65 64 20 66 72 6f 6d 20 6c 65 66 74 20  mined from left 
bae0: 74 6f 20 72 69 67 68 74 2e 20 20 54 68 65 0a 66  to right.  The.f
baf0: 69 72 73 74 20 70 61 69 72 20 6f 66 20 63 6f 6c  irst pair of col
bb00: 75 6d 6e 73 20 74 68 61 74 20 61 72 65 20 6e 6f  umns that are no
bb10: 74 20 65 71 75 61 6c 20 64 65 74 65 72 6d 69 6e  t equal determin
bb20: 65 73 20 74 68 65 20 72 65 6c 61 74 69 76 65 20  es the relative 
bb30: 6f 72 64 65 72 0a 6f 66 20 74 68 65 20 74 77 6f  order.of the two
bb40: 20 72 65 63 6f 72 64 73 2e 20 20 54 68 65 20 73   records.  The s
bb50: 6f 72 74 20 6f 72 64 65 72 20 6f 66 20 69 6e 64  ort order of ind
bb60: 69 76 69 64 75 61 6c 20 63 6f 6c 75 6d 6e 73 20  ividual columns 
bb70: 69 73 20 61 73 0a 66 6f 6c 6c 6f 77 73 3a 3c 2f  is as.follows:</
bb80: 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 5e 28 4e  p>..<ol>.<li>^(N
bb90: 55 4c 4c 20 76 61 6c 75 65 73 20 28 73 65 72 69  ULL values (seri
bba0: 61 6c 20 74 79 70 65 20 30 29 20 73 6f 72 74 20  al type 0) sort 
bbb0: 66 69 72 73 74 2e 29 5e 0a 3c 6c 69 3e 5e 28 4e  first.)^.<li>^(N
bbc0: 75 6d 65 72 69 63 20 76 61 6c 75 65 73 20 28 73  umeric values (s
bbd0: 65 72 69 61 6c 20 74 79 70 65 73 20 31 20 74 68  erial types 1 th
bbe0: 72 6f 75 67 68 20 39 29 20 73 6f 72 74 20 61 66  rough 9) sort af
bbf0: 74 65 72 20 4e 55 4c 4c 73 0a 20 20 20 20 20 20  ter NULLs.      
bc00: 61 6e 64 20 69 6e 20 6e 75 6d 65 72 69 63 20 6f  and in numeric o
bc10: 72 64 65 72 2e 29 5e 0a 3c 6c 69 3e 5e 28 54 65  rder.)^.<li>^(Te
bc20: 78 74 20 76 61 6c 75 65 73 20 28 6f 64 64 20 73  xt values (odd s
bc30: 65 72 69 61 6c 20 74 79 70 65 73 20 31 33 20 61  erial types 13 a
bc40: 6e 64 20 6c 61 72 67 65 72 29 20 73 6f 72 74 20  nd larger) sort 
bc50: 61 66 74 65 72 20 6e 75 6d 65 72 69 63 0a 20 20  after numeric.  
bc60: 20 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20    values in the 
bc70: 6f 72 64 65 72 20 64 65 74 65 72 6d 69 6e 65 64  order determined
bc80: 20 62 79 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20   by the columns 
bc90: 5b 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74  [collating funct
bca0: 69 6f 6e 5d 2e 29 5e 0a 3c 6c 69 3e 5e 28 42 4c  ion].)^.<li>^(BL
bcb0: 4f 42 20 76 61 6c 75 65 73 20 28 65 76 65 6e 20  OB values (even 
bcc0: 73 65 72 69 61 6c 20 74 79 70 65 73 20 31 32 20  serial types 12 
bcd0: 61 6e 64 20 6c 61 72 67 65 72 29 20 73 6f 72 74  and larger) sort
bce0: 20 6c 61 73 74 20 61 6e 64 20 69 6e 20 74 68 65   last and in the
bcf0: 20 6f 72 64 65 72 20 0a 20 20 20 20 64 65 74 65   order .    dete
bd00: 72 6d 69 6e 65 64 20 62 79 20 6d 65 6d 63 6d 70  rmined by memcmp
bd10: 28 29 2e 29 5e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e  ().)^.</ol>..<p>
bd20: 41 20 5b 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e  A [collating fun
bd30: 63 74 69 6f 6e 5d 20 66 6f 72 20 65 61 63 68 20  ction] for each 
bd40: 63 6f 6c 75 6d 6e 20 69 73 20 6e 65 63 65 73 73  column is necess
bd50: 61 72 79 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  ary in order to 
bd60: 63 6f 6d 70 75 74 65 0a 74 68 65 20 6f 72 64 65  compute.the orde
bd70: 72 20 6f 66 20 74 65 78 74 20 66 69 65 6c 64 73  r of text fields
bd80: 2e 0a 5e 28 53 51 4c 69 74 65 20 64 65 66 69 6e  ..^(SQLite defin
bd90: 65 73 20 74 68 72 65 65 20 62 75 69 6c 74 2d 69  es three built-i
bda0: 6e 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63  n collating func
bdb0: 74 69 6f 6e 73 3a 29 5e 0a 3c 2f 70 3e 0a 0a 3c  tions:)^.</p>..<
bdc0: 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 74 61 62 6c  blockquote><tabl
bdd0: 65 20 62 6f 72 64 65 72 3d 30 20 63 65 6c 6c 73  e border=0 cells
bde0: 70 61 63 69 6e 67 3d 31 30 3e 0a 3c 74 72 3e 3c  pacing=10>.<tr><
bdf0: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 42 49  td valign=top>BI
be00: 4e 41 52 59 0a 20 20 20 20 3c 74 64 3e 20 5e 28  NARY.    <td> ^(
be10: 54 68 65 20 62 75 69 6c 74 2d 69 6e 20 42 49 4e  The built-in BIN
be20: 41 52 59 20 63 6f 6c 6c 61 74 69 6f 6e 20 63 6f  ARY collation co
be30: 6d 70 61 72 65 73 20 73 74 72 69 6e 67 73 20 62  mpares strings b
be40: 79 74 65 20 62 79 20 62 79 74 65 0a 20 20 20 20  yte by byte.    
be50: 20 20 20 20 75 73 69 6e 67 20 74 68 65 20 6d 65      using the me
be60: 6d 63 6d 70 28 29 20 66 75 6e 63 74 69 6f 6e 0a  mcmp() function.
be70: 20 20 20 20 20 20 20 20 66 72 6f 6d 20 74 68 65          from the
be80: 20 73 74 61 6e 64 61 72 64 20 43 20 6c 69 62 72   standard C libr
be90: 61 72 79 2e 29 5e 0a 3c 74 72 3e 3c 74 64 20 76  ary.)^.<tr><td v
bea0: 61 6c 69 67 6e 3d 74 6f 70 3e 4e 4f 43 41 53 45  align=top>NOCASE
beb0: 0a 20 20 20 20 3c 74 64 3e 20 5e 28 54 68 65 20  .    <td> ^(The 
bec0: 4e 4f 43 41 53 45 20 63 6f 6c 6c 61 74 69 6f 6e  NOCASE collation
bed0: 20 69 73 20 6c 69 6b 65 20 42 49 4e 41 52 59 20   is like BINARY 
bee0: 65 78 63 65 70 74 20 74 68 61 74 20 75 70 70 65  except that uppe
bef0: 72 63 61 73 65 0a 20 20 20 20 20 20 20 20 41 53  rcase.        AS
bf00: 43 49 49 20 63 68 61 72 61 63 74 65 72 73 20 28  CII characters (
bf10: 27 41 27 20 74 68 72 6f 75 67 68 20 27 5a 27 29  'A' through 'Z')
bf20: 0a 20 20 20 20 20 20 20 20 61 72 65 20 66 6f 6c  .        are fol
bf30: 64 65 64 20 69 6e 74 6f 20 74 68 65 69 72 20 6c  ded into their l
bf40: 6f 77 65 72 63 61 73 65 20 65 71 75 69 76 61 6c  owercase equival
bf50: 65 6e 74 73 20 70 72 69 6f 72 20 74 6f 20 72 75  ents prior to ru
bf60: 6e 6e 69 6e 67 20 74 68 65 0a 20 20 20 20 20 20  nning the.      
bf70: 20 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 4f    comparison.  O
bf80: 6e 6c 79 20 41 53 43 49 49 20 63 68 61 72 61 63  nly ASCII charac
bf90: 74 65 72 73 20 61 72 65 20 63 61 73 65 2d 66 6f  ters are case-fo
bfa0: 6c 64 65 64 2e 29 5e 0a 20 20 20 20 20 20 20 20  lded.)^.        
bfb0: 5e 28 4e 4f 43 41 53 45 0a 20 20 20 20 20 20 20  ^(NOCASE.       
bfc0: 20 64 6f 65 73 20 6e 6f 74 20 69 6d 70 6c 65 6d   does not implem
bfd0: 65 6e 74 20 61 20 67 65 6e 65 72 61 6c 20 70 75  ent a general pu
bfe0: 72 70 6f 73 65 20 75 6e 69 63 6f 64 65 20 63 61  rpose unicode ca
bff0: 73 65 6c 65 73 73 20 63 6f 6d 70 61 72 69 73 6f  seless compariso
c000: 6e 2e 29 5e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c  n.)^.<tr><td val
c010: 69 67 6e 3d 74 6f 70 3e 52 54 52 49 4d 0a 20 20  ign=top>RTRIM.  
c020: 20 20 3c 74 64 3e 20 5e 28 52 54 52 49 4d 20 69    <td> ^(RTRIM i
c030: 73 20 6c 69 6b 65 20 42 49 4e 41 52 59 20 65 78  s like BINARY ex
c040: 63 65 70 74 20 74 68 61 74 20 65 78 74 72 61 20  cept that extra 
c050: 73 70 61 63 65 73 20 61 74 20 74 68 65 20 65 6e  spaces at the en
c060: 64 20 6f 66 20 65 69 74 68 65 72 0a 20 20 20 20  d of either.    
c070: 20 20 20 20 20 73 74 72 69 6e 67 20 64 6f 20 6e       string do n
c080: 6f 74 20 63 68 61 6e 67 65 20 74 68 65 20 72 65  ot change the re
c090: 73 75 6c 74 2e 20 20 49 6e 20 6f 74 68 65 72 20  sult.  In other 
c0a0: 77 6f 72 64 73 2c 20 73 74 72 69 6e 67 73 20 77  words, strings w
c0b0: 69 6c 6c 0a 20 20 20 20 20 20 20 20 20 63 6f 6d  ill.         com
c0c0: 70 61 72 65 20 65 71 75 61 6c 20 74 6f 20 6f 6e  pare equal to on
c0d0: 65 20 61 6e 6f 74 68 65 72 20 61 73 20 6c 6f 6e  e another as lon
c0e0: 67 20 61 73 20 74 68 65 79 0a 20 20 20 20 20 20  g as they.      
c0f0: 20 20 20 64 69 66 66 65 72 20 6f 6e 6c 79 20 69     differ only i
c100: 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  n the number of 
c110: 73 70 61 63 65 73 20 61 74 20 74 68 65 20 65 6e  spaces at the en
c120: 64 2e 29 5e 0a 3c 2f 74 61 62 6c 65 3e 3c 2f 62  d.)^.</table></b
c130: 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 5e  lockquote>..<p>^
c140: 41 64 64 69 74 69 6f 6e 61 6c 20 61 70 70 6c 69  Additional appli
c150: 63 61 74 69 6f 6e 2d 73 70 65 63 69 66 69 63 20  cation-specific 
c160: 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69  collating functi
c170: 6f 6e 73 20 63 61 6e 20 62 65 20 61 64 64 65 64  ons can be added
c180: 20 74 6f 0a 53 51 4c 69 74 65 20 75 73 69 6e 67   to.SQLite using
c190: 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 63 72   the [sqlite3_cr
c1a0: 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 29  eate_collation()
c1b0: 5d 20 69 6e 74 65 72 66 61 63 65 2e 3c 2f 70 3e  ] interface.</p>
c1c0: 0a 0a 3c 70 3e 5e 54 68 65 20 64 65 66 61 75 6c  ..<p>^The defaul
c1d0: 74 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63  t collating func
c1e0: 74 69 6f 6e 20 66 6f 72 20 61 6c 6c 20 73 74 72  tion for all str
c1f0: 69 6e 67 73 20 69 73 20 42 49 4e 41 52 59 2e 0a  ings is BINARY..
c200: 5e 41 6c 74 65 72 6e 61 74 69 76 65 20 63 6f 6c  ^Alternative col
c210: 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 73  lating functions
c220: 20 66 6f 72 20 74 61 62 6c 65 20 63 6f 6c 75 6d   for table colum
c230: 6e 73 20 63 61 6e 20 62 65 20 73 70 65 63 69 66  ns can be specif
c240: 69 65 64 20 69 6e 20 74 68 65 0a 5b 43 52 45 41  ied in the.[CREA
c250: 54 45 20 54 41 42 4c 45 5d 20 73 74 61 74 65 6d  TE TABLE] statem
c260: 65 6e 74 20 75 73 69 6e 67 20 74 68 65 20 43 4f  ent using the CO
c270: 4c 4c 41 54 45 20 63 6c 61 75 73 65 20 6f 6e 20  LLATE clause on 
c280: 74 68 65 20 5b 63 6f 6c 75 6d 6e 20 64 65 66 69  the [column defi
c290: 6e 69 74 69 6f 6e 5d 2e 0a 5e 57 68 65 6e 20 61  nition]..^When a
c2a0: 20 63 6f 6c 75 6d 6e 20 69 73 20 69 6e 64 65 78   column is index
c2b0: 65 64 2c 20 74 68 65 20 73 61 6d 65 20 63 6f 6c  ed, the same col
c2c0: 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20  lating function 
c2d0: 73 70 65 63 69 66 69 65 64 20 69 6e 20 74 68 65  specified in the
c2e0: 0a 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d 20  .[CREATE TABLE] 
c2f0: 73 74 61 74 65 6d 65 6e 74 20 69 73 20 75 73 65  statement is use
c300: 64 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e  d for the column
c310: 20 69 6e 20 74 68 65 20 69 6e 64 65 78 2c 20 62   in the index, b
c320: 79 20 64 65 66 61 75 6c 74 2c 0a 74 68 6f 75 67  y default,.thoug
c330: 68 20 74 68 69 73 20 63 61 6e 20 62 65 20 6f 76  h this can be ov
c340: 65 72 72 69 64 64 65 6e 20 75 73 69 6e 67 20 61  erridden using a
c350: 20 43 4f 4c 4c 41 54 45 20 63 6c 61 75 73 65 20   COLLATE clause 
c360: 69 6e 20 74 68 65 20 0a 5b 43 52 45 41 54 45 20  in the .[CREATE 
c370: 49 4e 44 45 58 5d 20 73 74 61 74 65 6d 65 6e 74  INDEX] statement
c380: 2e 0a 0a 3c 68 32 3e 52 65 70 72 65 73 65 6e 74  ...<h2>Represent
c390: 61 74 69 6f 6e 20 4f 66 20 53 51 4c 20 54 61 62  ation Of SQL Tab
c3a0: 6c 65 73 3c 2f 68 32 3e 0a 0a 3c 70 3e 20 5e 45  les</h2>..<p> ^E
c3b0: 61 63 68 20 6f 72 64 69 6e 61 72 79 20 53 51 4c  ach ordinary SQL
c3c0: 20 74 61 62 6c 65 20 69 6e 20 74 68 65 20 64 61   table in the da
c3d0: 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 69 73  tabase schema is
c3e0: 20 72 65 70 72 65 73 65 6e 74 65 64 20 6f 6e 2d   represented on-
c3f0: 64 69 73 6b 0a 62 79 20 61 20 74 61 62 6c 65 20  disk.by a table 
c400: 62 2d 74 72 65 65 2e 20 20 5e 45 61 63 68 20 65  b-tree.  ^Each e
c410: 6e 74 72 79 20 69 6e 20 74 68 65 20 74 61 62 6c  ntry in the tabl
c420: 65 20 62 2d 74 72 65 65 20 63 6f 72 72 65 73 70  e b-tree corresp
c430: 6f 6e 64 73 20 74 6f 20 61 20 72 6f 77 0a 6f 66  onds to a row.of
c440: 20 74 68 65 20 53 51 4c 20 74 61 62 6c 65 2e 20   the SQL table. 
c450: 20 5e 54 68 65 20 5b 72 6f 77 69 64 5d 20 6f 66   ^The [rowid] of
c460: 20 74 68 65 20 53 51 4c 20 74 61 62 6c 65 20 69   the SQL table i
c470: 73 20 74 68 65 20 36 34 2d 62 69 74 20 73 69 67  s the 64-bit sig
c480: 6e 65 64 0a 69 6e 74 65 67 65 72 20 6b 65 79 20  ned.integer key 
c490: 66 6f 72 20 65 61 63 68 20 65 6e 74 72 79 20 69  for each entry i
c4a0: 6e 20 74 68 65 20 74 61 62 6c 65 20 62 2d 74 72  n the table b-tr
c4b0: 65 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 54 68  ee.</p>..<p> ^Th
c4c0: 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 65 61 63  e content of eac
c4d0: 68 20 53 51 4c 20 74 61 62 6c 65 20 72 6f 77 20  h SQL table row 
c4e0: 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  is stored in the
c4f0: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 62   database file b
c500: 79 0a 66 69 72 73 74 20 63 6f 6d 62 69 6e 69 6e  y.first combinin
c510: 67 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20  g the values in 
c520: 74 68 65 20 76 61 72 69 6f 75 73 20 63 6f 6c 75  the various colu
c530: 6d 6e 73 20 69 6e 74 6f 20 61 20 62 79 74 65 20  mns into a byte 
c540: 61 72 72 61 79 0a 69 6e 20 74 68 65 20 72 65 63  array.in the rec
c550: 6f 72 64 20 66 6f 72 6d 61 74 2c 20 74 68 65 6e  ord format, then
c560: 20 73 74 6f 72 69 6e 67 20 74 68 61 74 20 62 79   storing that by
c570: 74 65 20 61 72 72 61 79 20 61 73 20 74 68 65 20  te array as the 
c580: 70 61 79 6c 6f 61 64 20 69 6e 0a 61 6e 20 65 6e  payload in.an en
c590: 74 72 79 20 69 6e 20 74 68 65 20 74 61 62 6c 65  try in the table
c5a0: 20 62 2d 74 72 65 65 2e 20 20 5e 54 68 65 20 6f   b-tree.  ^The o
c5b0: 72 64 65 72 20 6f 66 20 76 61 6c 75 65 73 20 69  rder of values i
c5c0: 6e 20 74 68 65 20 72 65 63 6f 72 64 20 69 73 0a  n the record is.
c5d0: 74 68 65 20 73 61 6d 65 20 61 73 20 74 68 65 20  the same as the 
c5e0: 6f 72 64 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  order of columns
c5f0: 20 69 6e 20 74 68 65 20 53 51 4c 20 74 61 62 6c   in the SQL tabl
c600: 65 20 64 65 66 69 6e 69 74 69 6f 6e 2e 0a 5e 57  e definition..^W
c610: 68 65 6e 20 61 6e 20 53 51 4c 20 74 61 62 6c 65  hen an SQL table
c620: 20 69 6e 63 6c 75 64 65 73 20 61 6e 0a 5b 49 4e   includes an.[IN
c630: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
c640: 59 5d 20 63 6f 6c 75 6d 6e 20 28 77 68 69 63 68  Y] column (which
c650: 20 61 6c 69 61 73 65 73 20 74 68 65 20 5b 72 6f   aliases the [ro
c660: 77 69 64 5d 29 20 74 68 65 6e 20 74 68 61 74 0a  wid]) then that.
c670: 63 6f 6c 75 6d 6e 20 61 70 70 65 61 72 73 20 69  column appears i
c680: 6e 20 74 68 65 20 72 65 63 6f 72 64 20 61 73 20  n the record as 
c690: 61 20 4e 55 4c 4c 20 76 61 6c 75 65 2e 20 20 5e  a NULL value.  ^
c6a0: 53 51 4c 69 74 65 20 77 69 6c 6c 20 61 6c 77 61  SQLite will alwa
c6b0: 79 73 20 75 73 65 0a 74 68 65 20 74 61 62 6c 65  ys use.the table
c6c0: 20 62 2d 74 72 65 65 20 6b 65 79 20 72 61 74 68   b-tree key rath
c6d0: 65 72 20 74 68 61 6e 20 74 68 65 20 4e 55 4c 4c  er than the NULL
c6e0: 20 76 61 6c 75 65 20 77 68 65 6e 20 72 65 66 65   value when refe
c6f0: 72 65 6e 63 69 6e 67 20 74 68 65 0a 5b 49 4e 54  rencing the.[INT
c700: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
c710: 5d 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 3e 0a 0a 3c  ] column.</p>..<
c720: 70 3e 20 5e 49 66 20 74 68 65 20 5b 61 66 66 69  p> ^If the [affi
c730: 6e 69 74 79 5d 20 6f 66 20 61 20 63 6f 6c 75 6d  nity] of a colum
c740: 6e 20 69 73 20 52 45 41 4c 20 61 6e 64 20 74 68  n is REAL and th
c750: 61 74 20 63 6f 6c 75 6d 6e 20 63 6f 6e 74 61 69  at column contai
c760: 6e 73 20 61 0a 76 61 6c 75 65 20 74 68 61 74 20  ns a.value that 
c770: 63 61 6e 20 62 65 20 63 6f 6e 76 65 72 74 65 64  can be converted
c780: 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 77   to an integer w
c790: 69 74 68 6f 75 74 20 6c 6f 73 73 20 6f 66 20 69  ithout loss of i
c7a0: 6e 66 6f 72 6d 61 74 69 6f 6e 0a 28 69 66 20 74  nformation.(if t
c7b0: 68 65 20 76 61 6c 75 65 20 63 6f 6e 74 61 69 6e  he value contain
c7c0: 73 20 6e 6f 20 66 72 61 63 74 69 6f 6e 61 6c 20  s no fractional 
c7d0: 70 61 72 74 20 61 6e 64 20 69 73 20 6e 6f 74 20  part and is not 
c7e0: 74 6f 6f 20 6c 61 72 67 65 20 74 6f 20 62 65 0a  too large to be.
c7f0: 72 65 70 72 65 73 65 6e 74 65 64 20 61 73 20 61  represented as a
c800: 6e 20 69 6e 74 65 67 65 72 29 20 74 68 65 6e 20  n integer) then 
c810: 74 68 65 20 63 6f 6c 75 6d 6e 20 6d 61 79 20 62  the column may b
c820: 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  e stored in the 
c830: 72 65 63 6f 72 64 0a 61 73 20 61 6e 20 69 6e 74  record.as an int
c840: 65 67 65 72 2e 20 20 5e 53 51 4c 69 74 65 20 77  eger.  ^SQLite w
c850: 69 6c 6c 20 63 6f 6e 76 65 72 74 20 74 68 65 20  ill convert the 
c860: 76 61 6c 75 65 20 62 61 63 6b 20 74 6f 20 66 6c  value back to fl
c870: 6f 61 74 69 6e 67 0a 70 6f 69 6e 74 20 77 68 65  oating.point whe
c880: 6e 20 65 78 74 72 61 63 74 69 6e 67 20 69 74 20  n extracting it 
c890: 66 72 6f 6d 20 74 68 65 20 72 65 63 6f 72 64 2e  from the record.
c8a0: 3c 2f 70 3e 0a 0a 3c 68 32 3e 52 65 70 72 65 73  </p>..<h2>Repres
c8b0: 65 6e 74 61 74 69 6f 6e 20 6f 66 20 57 49 54 48  entation of WITH
c8c0: 4f 55 54 20 52 4f 57 49 44 20 54 61 62 6c 65 73  OUT ROWID Tables
c8d0: 3c 2f 68 32 3e 0a 0a 3c 70 3e 5e 49 66 20 61 6e  </h2>..<p>^If an
c8e0: 20 53 51 4c 20 74 61 62 6c 65 20 69 73 20 63 72   SQL table is cr
c8f0: 65 61 74 65 64 20 75 73 69 6e 67 20 74 68 65 20  eated using the 
c900: 22 57 49 54 48 4f 55 54 20 52 4f 57 49 44 22 20  "WITHOUT ROWID" 
c910: 63 6c 61 75 73 65 20 61 74 20 74 68 65 0a 65 6e  clause at the.en
c920: 64 20 6f 66 20 69 74 73 20 43 52 45 41 54 45 20  d of its CREATE 
c930: 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 2c  TABLE statement,
c940: 20 74 68 65 6e 20 74 68 61 74 20 74 61 62 6c 65   then that table
c950: 20 69 73 20 61 20 5b 57 49 54 48 4f 55 54 20 52   is a [WITHOUT R
c960: 4f 57 49 44 5d 0a 74 61 62 6c 65 20 61 6e 64 20  OWID].table and 
c970: 75 73 65 73 20 61 20 64 69 66 66 65 72 65 6e 74  uses a different
c980: 20 6f 6e 2d 64 69 73 6b 20 72 65 70 72 65 73 65   on-disk represe
c990: 6e 74 61 74 69 6f 6e 2e 20 20 5e 41 20 57 49 54  ntation.  ^A WIT
c9a0: 48 4f 55 54 20 52 4f 57 49 44 0a 74 61 62 6c 65  HOUT ROWID.table
c9b0: 20 75 73 65 73 20 61 6e 20 69 6e 64 65 78 20 62   uses an index b
c9c0: 2d 74 72 65 65 20 72 61 74 68 65 72 20 74 68 61  -tree rather tha
c9d0: 6e 20 61 20 74 61 62 6c 65 20 62 2d 74 72 65 65  n a table b-tree
c9e0: 20 66 6f 72 20 73 74 6f 72 61 67 65 2e 0a 5e 54   for storage..^T
c9f0: 68 65 20 6b 65 79 20 66 6f 72 20 65 61 63 68 20  he key for each 
ca00: 65 6e 74 72 79 20 69 6e 20 74 68 65 20 57 49 54  entry in the WIT
ca10: 48 4f 55 54 20 52 4f 57 49 44 20 62 2d 74 72 65  HOUT ROWID b-tre
ca20: 65 20 69 73 20 61 20 72 65 63 6f 72 64 20 63 6f  e is a record co
ca30: 6d 70 6f 73 65 64 0a 6f 66 20 74 68 65 20 63 6f  mposed.of the co
ca40: 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 50 52 49  lumns of the PRI
ca50: 4d 41 52 59 20 4b 45 59 20 66 6f 6c 6c 6f 77 65  MARY KEY followe
ca60: 64 20 62 79 20 61 6c 6c 20 72 65 6d 61 69 6e 69  d by all remaini
ca70: 6e 67 20 63 6f 6c 75 6d 6e 73 20 6f 66 0a 74 68  ng columns of.th
ca80: 65 20 74 61 62 6c 65 2e 20 20 5e 54 68 65 20 70  e table.  ^The p
ca90: 72 69 6d 61 72 79 20 6b 65 79 20 63 6f 6c 75 6d  rimary key colum
caa0: 6e 73 20 61 70 70 65 61 72 20 69 6e 20 74 68 65  ns appear in the
cab0: 20 6f 72 64 65 72 20 74 68 65 79 20 74 68 65 79   order they they
cac0: 20 77 65 72 65 0a 64 65 63 6c 61 72 65 64 20 69   were.declared i
cad0: 6e 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  n the PRIMARY KE
cae0: 59 20 63 6c 61 75 73 65 20 61 6e 64 20 74 68 65  Y clause and the
caf0: 20 72 65 6d 61 69 6e 69 6e 67 20 63 6f 6c 75 6d   remaining colum
cb00: 6e 73 20 61 70 70 65 61 72 20 69 6e 0a 74 68 65  ns appear in.the
cb10: 20 6f 72 64 65 72 20 74 68 65 79 20 6f 63 63 75   order they occu
cb20: 72 20 69 6e 20 74 68 65 20 43 52 45 41 54 45 20  r in the CREATE 
cb30: 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 2e  TABLE statement.
cb40: 0a 0a 3c 70 3e 5e 48 65 6e 63 65 2c 20 74 68 65  ..<p>^Hence, the
cb50: 20 63 6f 6e 74 65 6e 74 20 65 6e 63 6f 64 69 6e   content encodin
cb60: 67 20 66 6f 72 20 61 20 57 49 54 48 4f 55 54 20  g for a WITHOUT 
cb70: 52 4f 57 49 44 20 74 61 62 6c 65 20 69 73 20 74  ROWID table is t
cb80: 68 65 20 73 61 6d 65 0a 61 73 20 74 68 65 20 63  he same.as the c
cb90: 6f 6e 74 65 6e 74 20 65 6e 63 6f 64 69 6e 67 20  ontent encoding 
cba0: 66 6f 72 20 61 6e 20 6f 72 64 69 6e 61 72 79 20  for an ordinary 
cbb0: 72 6f 77 69 64 20 74 61 62 6c 65 2c 20 65 78 63  rowid table, exc
cbc0: 65 70 74 20 74 68 61 74 20 74 68 65 0a 6f 72 64  ept that the.ord
cbd0: 65 72 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  er of the column
cbe0: 73 20 69 73 20 72 65 61 72 72 61 6e 67 65 64 20  s is rearranged 
cbf0: 73 6f 20 74 68 61 74 20 50 52 49 4d 41 52 59 20  so that PRIMARY 
cc00: 4b 45 59 20 63 6f 6c 75 6d 6e 73 20 63 6f 6d 65  KEY columns come
cc10: 0a 66 69 72 73 74 2c 20 61 6e 64 20 74 68 65 20  .first, and the 
cc20: 63 6f 6e 74 65 6e 74 20 69 73 20 75 73 65 64 20  content is used 
cc30: 61 73 20 74 68 65 20 6b 65 79 20 69 6e 20 61 6e  as the key in an
cc40: 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20 72 61   index b-tree ra
cc50: 74 68 65 72 0a 74 68 61 6e 20 61 73 20 74 68 65  ther.than as the
cc60: 20 64 61 74 61 20 69 6e 20 61 20 74 61 62 6c 65   data in a table
cc70: 20 62 2d 74 72 65 65 2e 0a 5e 54 68 65 20 73 70   b-tree..^The sp
cc80: 65 63 69 61 6c 20 65 6e 63 6f 64 69 6e 67 20 72  ecial encoding r
cc90: 75 6c 65 73 20 66 6f 72 20 63 6f 6c 75 6d 6e 73  ules for columns
cca0: 20 77 69 74 68 20 52 45 41 4c 20 61 66 66 69 6e   with REAL affin
ccb0: 69 74 79 0a 61 70 70 6c 79 20 74 6f 20 57 49 54  ity.apply to WIT
ccc0: 48 4f 55 54 20 52 4f 57 49 44 20 74 61 62 6c 65  HOUT ROWID table
ccd0: 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 74 68  s the same as th
cce0: 65 79 20 64 6f 20 77 69 74 68 20 72 6f 77 69 64  ey do with rowid
ccf0: 20 74 61 62 6c 65 73 2e 0a 0a 3c 68 32 3e 52 65   tables...<h2>Re
cd00: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 4f 66 20  presentation Of 
cd10: 53 51 4c 20 49 6e 64 69 63 65 73 3c 2f 68 32 3e  SQL Indices</h2>
cd20: 0a 0a 3c 70 3e 5e 45 61 63 68 20 53 51 4c 20 69  ..<p>^Each SQL i
cd30: 6e 64 65 78 2c 20 77 68 65 74 68 65 72 20 65 78  ndex, whether ex
cd40: 70 6c 69 63 69 74 6c 79 20 64 65 63 6c 61 72 65  plicitly declare
cd50: 64 20 76 69 61 20 61 20 5b 43 52 45 41 54 45 20  d via a [CREATE 
cd60: 49 4e 44 45 58 5d 20 73 74 61 74 65 6d 65 6e 74  INDEX] statement
cd70: 0a 6f 72 20 69 6d 70 6c 69 65 64 20 62 79 20 61  .or implied by a
cd80: 20 55 4e 49 51 55 45 20 6f 72 20 50 52 49 4d 41   UNIQUE or PRIMA
cd90: 52 59 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e  RY KEY constrain
cda0: 74 2c 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74  t, corresponds t
cdb0: 6f 20 61 6e 20 0a 69 6e 64 65 78 20 62 2d 74 72  o an .index b-tr
cdc0: 65 65 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ee in the databa
cdd0: 73 65 20 66 69 6c 65 2e 0a 5e 45 61 63 68 20 65  se file..^Each e
cde0: 6e 74 72 79 20 69 6e 20 74 68 65 20 69 6e 64 65  ntry in the inde
cdf0: 78 20 62 2d 74 72 65 65 20 63 6f 72 72 65 73 70  x b-tree corresp
ce00: 6f 6e 64 73 20 74 6f 20 61 20 73 69 6e 67 6c 65  onds to a single
ce10: 20 72 6f 77 20 69 6e 20 74 68 65 20 0a 61 73 73   row in the .ass
ce20: 6f 63 69 61 74 65 64 20 53 51 4c 20 74 61 62 6c  ociated SQL tabl
ce30: 65 2e 0a 5e 54 68 65 20 6b 65 79 20 74 6f 20 61  e..^The key to a
ce40: 6e 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20 69  n index b-tree i
ce50: 73 0a 61 20 72 65 63 6f 72 64 20 63 6f 6d 70 6f  s.a record compo
ce60: 73 65 64 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  sed of the colum
ce70: 6e 73 20 74 68 61 74 20 61 72 65 20 62 65 69 6e  ns that are bein
ce80: 67 20 69 6e 64 65 78 65 64 20 66 6f 6c 6c 6f 77  g indexed follow
ce90: 65 64 20 62 79 20 74 68 65 0a 6b 65 79 20 6f 66  ed by the.key of
cea0: 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
ceb0: 6e 67 20 74 61 62 6c 65 20 72 6f 77 2e 20 20 46  ng table row.  F
cec0: 6f 72 20 6f 72 64 69 6e 61 72 79 20 74 61 62 6c  or ordinary tabl
ced0: 65 73 2c 20 74 68 65 20 72 6f 77 20 6b 65 79 20  es, the row key 
cee0: 69 73 0a 74 68 65 20 5b 72 6f 77 69 64 5d 2c 20  is.the [rowid], 
cef0: 61 6e 64 20 66 6f 72 20 5b 57 49 54 48 4f 55 54  and for [WITHOUT
cf00: 20 52 4f 57 49 44 5d 20 74 61 62 6c 65 73 20 74   ROWID] tables t
cf10: 68 65 20 72 6f 77 20 6b 65 79 20 69 73 20 74 68  he row key is th
cf20: 65 20 50 52 49 4d 41 52 59 20 4b 45 59 2e 0a 42  e PRIMARY KEY..B
cf30: 65 63 61 75 73 65 20 65 76 65 72 79 20 72 6f 77  ecause every row
cf40: 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 68 61   in the table ha
cf50: 73 20 61 20 75 6e 69 71 75 65 20 72 6f 77 20 6b  s a unique row k
cf60: 65 79 2c 0a 61 6c 6c 20 6b 65 79 73 20 69 6e 20  ey,.all keys in 
cf70: 61 6e 20 69 6e 64 65 78 20 61 72 65 20 75 6e 69  an index are uni
cf80: 71 75 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 6e  que.</p>..<p>^In
cf90: 20 61 20 6e 6f 72 6d 61 6c 20 69 6e 64 65 78 2c   a normal index,
cfa0: 20 74 68 65 72 65 20 69 73 20 61 20 6f 6e 65 2d   there is a one-
cfb0: 74 6f 2d 6f 6e 65 20 6d 61 70 70 69 6e 67 20 62  to-one mapping b
cfc0: 65 74 77 65 65 6e 20 72 6f 77 73 20 69 6e 20 61  etween rows in a
cfd0: 20 0a 74 61 62 6c 65 20 61 6e 64 20 65 6e 74 72   .table and entr
cfe0: 69 65 73 20 69 6e 20 65 61 63 68 20 69 6e 64 65  ies in each inde
cff0: 78 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  x associated wit
d000: 68 20 74 68 61 74 20 74 61 62 6c 65 2e 0a 5e 48  h that table..^H
d010: 6f 77 65 76 65 72 2c 20 69 6e 20 61 20 5b 70 61  owever, in a [pa
d020: 72 74 69 61 6c 20 69 6e 64 65 78 5d 2c 20 74 68  rtial index], th
d030: 65 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20 6f  e index b-tree o
d040: 6e 6c 79 20 63 6f 6e 74 61 69 6e 73 20 65 6e 74  nly contains ent
d050: 72 69 65 73 0a 63 6f 72 72 65 73 70 6f 6e 64 69  ries.correspondi
d060: 6e 67 20 74 6f 20 74 61 62 6c 65 20 72 6f 77 73  ng to table rows
d070: 20 66 6f 72 20 77 68 69 63 68 20 74 68 65 20 57   for which the W
d080: 48 45 52 45 20 63 6c 61 75 73 65 20 65 78 70 72  HERE clause expr
d090: 65 73 73 69 6f 6e 20 6f 6e 20 74 68 65 0a 43 52  ession on the.CR
d0a0: 45 41 54 45 20 49 4e 44 45 58 20 73 74 61 74 65  EATE INDEX state
d0b0: 6d 65 6e 74 20 69 73 20 74 72 75 65 2e 0a 5e 43  ment is true..^C
d0c0: 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 72 6f 77  orresponding row
d0d0: 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20 61  s in the index a
d0e0: 6e 64 20 74 61 62 6c 65 20 62 2d 74 72 65 65 73  nd table b-trees
d0f0: 20 73 68 61 72 65 20 74 68 65 20 73 61 6d 65 20   share the same 
d100: 72 6f 77 69 64 0a 6f 72 20 70 72 69 6d 61 72 79  rowid.or primary
d110: 20 6b 65 79 20 76 61 6c 75 65 73 20 61 6e 64 20   key values and 
d120: 63 6f 6e 74 61 69 6e 20 74 68 65 20 73 61 6d 65  contain the same
d130: 20 76 61 6c 75 65 20 66 6f 72 20 61 6c 6c 20 69   value for all i
d140: 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 73 2e 3c  ndexed columns.<
d150: 2f 70 3e 0a 0a 3c 68 33 3e 53 75 70 70 72 65 73  /p>..<h3>Suppres
d160: 73 69 6f 6e 20 6f 66 20 72 65 64 75 6e 64 61 6e  sion of redundan
d170: 74 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 57 49 54  t columns in WIT
d180: 48 4f 55 54 20 52 4f 57 49 44 20 73 65 63 6f 6e  HOUT ROWID secon
d190: 64 61 72 79 20 69 6e 64 65 78 65 64 0a 3c 2f 68  dary indexed.</h
d1a0: 33 3e 0a 0a 3c 70 3e 20 5e 49 6e 20 61 6e 20 69  3>..<p> ^In an i
d1b0: 6e 64 65 78 20 6f 6e 20 61 20 57 49 54 48 4f 55  ndex on a WITHOU
d1c0: 54 20 52 4f 57 49 44 20 74 61 62 6c 65 2c 20 69  T ROWID table, i
d1d0: 66 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 6f 66  f one or more of
d1e0: 20 74 68 65 20 63 6f 6c 75 6d 6e 73 0a 6f 66 20   the columns.of 
d1f0: 74 68 65 20 74 61 62 6c 65 20 50 52 49 4d 41 52  the table PRIMAR
d200: 59 20 4b 45 59 20 61 72 65 20 61 6c 73 6f 20 63  Y KEY are also c
d210: 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 69 6e  olumns of the in
d220: 64 65 78 2c 20 74 68 65 6e 20 74 68 65 0a 69 6e  dex, then the.in
d230: 64 65 78 65 64 20 63 6f 6c 75 6d 6e 20 69 73 20  dexed column is 
d240: 6e 6f 74 20 72 65 70 65 61 74 65 64 20 69 6e 20  not repeated in 
d250: 74 68 65 20 74 61 62 6c 65 2d 6b 65 79 20 73 75  the table-key su
d260: 66 66 69 78 20 6f 6e 20 74 68 65 20 65 6e 64 20  ffix on the end 
d270: 6f 66 0a 74 68 65 20 69 6e 64 65 78 20 72 65 63  of.the index rec
d280: 6f 72 64 2e 20 20 5e 28 41 73 20 61 6e 20 65 78  ord.  ^(As an ex
d290: 61 6d 70 6c 65 2c 20 63 6f 6e 73 69 64 65 72 20  ample, consider 
d2a0: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 53 51  the following SQ
d2b0: 4c 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  L:..<blockquote>
d2c0: 3c 70 72 65 3e 0a 43 52 45 41 54 45 20 54 41 42  <pre>.CREATE TAB
d2d0: 4c 45 20 65 78 32 35 28 61 2c 62 2c 63 2c 64 2c  LE ex25(a,b,c,d,
d2e0: 65 2c 50 52 49 4d 41 52 59 20 4b 45 59 28 64 2c  e,PRIMARY KEY(d,
d2f0: 63 2c 61 29 29 20 57 49 54 48 4f 55 54 20 72 6f  c,a)) WITHOUT ro
d300: 77 69 64 3b 0a 43 52 45 41 54 45 20 49 4e 44 45  wid;.CREATE INDE
d310: 58 20 65 78 32 35 63 65 20 4f 4e 20 65 78 32 35  X ex25ce ON ex25
d320: 28 63 2c 65 29 3b 0a 43 52 45 41 54 45 20 49 4e  (c,e);.CREATE IN
d330: 44 45 58 20 65 78 32 35 61 63 64 65 20 4f 4e 20  DEX ex25acde ON 
d340: 65 78 32 35 28 61 2c 63 2c 64 2c 65 29 3b 0a 3c  ex25(a,c,d,e);.<
d350: 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74  /pre></blockquot
d360: 65 3e 0a 0a 3c 70 3e 45 61 63 68 20 72 6f 77 20  e>..<p>Each row 
d370: 69 6e 20 74 68 65 20 65 78 32 35 63 65 20 69 6e  in the ex25ce in
d380: 64 65 78 20 69 73 20 61 20 72 65 63 6f 72 64 0a  dex is a record.
d390: 77 69 74 68 20 74 68 65 73 65 20 63 6f 6c 75 6d  with these colum
d3a0: 6e 73 3a 20 63 2c 20 65 2c 20 64 2c 20 61 2e 20  ns: c, e, d, a. 
d3b0: 20 54 68 65 20 66 69 72 73 74 20 74 77 6f 20 63   The first two c
d3c0: 6f 6c 75 6d 6e 73 20 61 72 65 0a 74 68 65 20 63  olumns are.the c
d3d0: 6f 6c 75 6d 6e 73 20 62 65 69 6e 67 20 69 6e 64  olumns being ind
d3e0: 65 78 65 64 2c 20 63 20 61 6e 64 20 65 2e 20 20  exed, c and e.  
d3f0: 54 68 65 20 72 65 6d 61 69 6e 69 6e 67 20 63 6f  The remaining co
d400: 6c 75 6d 6e 73 20 61 72 65 20 74 68 65 20 70 72  lumns are the pr
d410: 69 6d 61 72 79 0a 6b 65 79 20 6f 66 20 74 68 65  imary.key of the
d420: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74   corresponding t
d430: 61 62 6c 65 20 72 6f 77 2e 20 20 4e 6f 72 6d 61  able row.  Norma
d440: 6c 6c 79 2c 20 74 68 65 20 70 72 69 6d 61 72 79  lly, the primary
d450: 20 6b 65 79 20 77 6f 75 6c 64 20 62 65 0a 63 6f   key would be.co
d460: 6c 75 6d 6e 73 20 64 2c 20 63 2c 20 61 6e 64 20  lumns d, c, and 
d470: 61 2c 20 62 75 74 20 62 65 63 61 75 73 65 20 63  a, but because c
d480: 6f 6c 75 6d 6e 20 63 20 61 6c 72 65 61 64 79 20  olumn c already 
d490: 61 70 70 65 61 72 73 20 65 61 72 6c 69 65 72 20  appears earlier 
d4a0: 69 6e 20 74 68 65 0a 69 6e 64 65 78 2c 20 69 74  in the.index, it
d4b0: 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d   is omitted from
d4c0: 20 74 68 65 20 6b 65 79 20 73 75 66 66 69 78 2e   the key suffix.
d4d0: 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28 49 6e 20  )^</p>..<p>^(In 
d4e0: 74 68 65 20 65 78 74 72 65 6d 65 20 63 61 73 65  the extreme case
d4f0: 20 77 68 65 72 65 20 74 68 65 20 63 6f 6c 75 6d   where the colum
d500: 6e 73 20 62 65 69 6e 67 20 69 6e 64 65 78 65 64  ns being indexed
d510: 20 63 6f 76 65 72 20 61 6c 6c 20 63 6f 6c 75 6d   cover all colum
d520: 6e 73 0a 6f 66 20 74 68 65 20 50 52 49 4d 41 52  ns.of the PRIMAR
d530: 59 20 4b 45 59 2c 20 74 68 65 20 69 6e 64 65 78  Y KEY, the index
d540: 20 77 69 6c 6c 20 63 6f 6e 73 69 73 74 20 6f 66   will consist of
d550: 20 6f 6e 6c 79 20 74 68 65 20 63 6f 6c 75 6d 6e   only the column
d560: 73 20 62 65 69 6e 67 0a 69 6e 64 65 78 65 64 2e  s being.indexed.
d570: 20 20 54 68 65 20 65 78 32 35 61 63 64 65 20 65    The ex25acde e
d580: 78 61 6d 70 6c 65 20 61 62 6f 76 65 20 64 65 6d  xample above dem
d590: 6f 6e 73 74 72 61 74 65 73 20 74 68 69 73 2e 29  onstrates this.)
d5a0: 5e 20 20 5e 45 61 63 68 20 65 6e 74 72 79 20 69  ^  ^Each entry i
d5b0: 6e 0a 74 68 65 20 65 78 32 35 61 63 64 65 20 69  n.the ex25acde i
d5c0: 6e 64 65 78 20 63 6f 6e 73 69 73 74 73 20 6f 66  ndex consists of
d5d0: 20 6f 6e 6c 79 20 74 68 65 20 63 6f 6c 75 6d 6e   only the column
d5e0: 73 20 61 2c 20 63 2c 20 64 2c 20 61 6e 64 20 65  s a, c, d, and e
d5f0: 2c 20 69 6e 20 74 68 61 74 0a 6f 72 64 65 72 2e  , in that.order.
d600: 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20 73  </p>..<p> ^The s
d610: 75 70 70 72 65 73 73 69 6f 6e 20 6f 66 20 72 65  uppression of re
d620: 64 75 6e 64 61 6e 74 20 63 6f 6c 75 6d 6e 73 20  dundant columns 
d630: 69 6e 20 74 68 65 20 6b 65 79 20 73 75 66 66 69  in the key suffi
d640: 78 20 6f 66 20 61 6e 20 69 6e 64 65 78 0a 65 6e  x of an index.en
d650: 74 72 79 20 6f 6e 6c 79 20 6f 63 63 75 72 73 20  try only occurs 
d660: 69 6e 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44  in WITHOUT ROWID
d670: 20 74 61 62 6c 65 73 2e 20 20 5e 49 6e 20 61 6e   tables.  ^In an
d680: 20 6f 72 64 69 6e 61 72 79 20 72 6f 77 69 64 20   ordinary rowid 
d690: 74 61 62 6c 65 2c 0a 74 68 65 20 69 6e 64 65 78  table,.the index
d6a0: 20 65 6e 74 72 79 20 61 6c 77 61 79 73 20 65 6e   entry always en
d6b0: 64 73 20 77 69 74 68 20 74 68 65 20 72 6f 77 69  ds with the rowi
d6c0: 64 20 65 76 65 6e 20 69 66 20 74 68 65 20 5b 49  d even if the [I
d6d0: 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
d6e0: 45 59 5d 0a 63 6f 6c 75 6d 6e 20 69 73 20 6f 6e  EY].column is on
d6f0: 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73  e of the columns
d700: 20 62 65 69 6e 67 20 69 6e 64 65 78 65 64 2e 3c   being indexed.<
d710: 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  /p>..<tcl>hd_fra
d720: 67 6d 65 6e 74 20 73 71 6c 69 74 65 5f 6d 61 73  gment sqlite_mas
d730: 74 65 72 20 7b 73 71 6c 69 74 65 5f 6d 61 73 74  ter {sqlite_mast
d740: 65 72 7d 20 7b 73 71 6c 69 74 65 5f 6d 61 73 74  er} {sqlite_mast
d750: 65 72 20 74 61 62 6c 65 7d 3c 2f 74 63 6c 3e 0a  er table}</tcl>.
d760: 3c 68 32 3e 53 74 6f 72 61 67 65 20 4f 66 20 54  <h2>Storage Of T
d770: 68 65 20 53 51 4c 20 44 61 74 61 62 61 73 65 20  he SQL Database 
d780: 53 63 68 65 6d 61 3c 2f 68 32 3e 0a 0a 3c 70 3e  Schema</h2>..<p>
d790: 5e 50 61 67 65 20 31 20 6f 66 20 61 20 64 61 74  ^Page 1 of a dat
d7a0: 61 62 61 73 65 20 66 69 6c 65 20 69 73 20 74 68  abase file is th
d7b0: 65 20 72 6f 6f 74 20 70 61 67 65 20 6f 66 20 61  e root page of a
d7c0: 20 74 61 62 6c 65 20 62 2d 74 72 65 65 20 74 68   table b-tree th
d7d0: 61 74 0a 68 6f 6c 64 73 20 61 20 73 70 65 63 69  at.holds a speci
d7e0: 61 6c 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 22  al table named "
d7f0: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 20 28  sqlite_master" (
d800: 6f 72 20 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f  or "sqlite_temp_
d810: 6d 61 73 74 65 72 22 20 69 6e 0a 74 68 65 20 63  master" in.the c
d820: 61 73 65 20 6f 66 20 61 20 54 45 4d 50 20 64 61  ase of a TEMP da
d830: 74 61 62 61 73 65 29 20 77 68 69 63 68 20 73 74  tabase) which st
d840: 6f 72 65 73 20 74 68 65 20 63 6f 6d 70 6c 65 74  ores the complet
d850: 65 0a 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e.database schem
d860: 61 2e 20 20 5e 28 54 68 65 20 73 74 72 75 63 74  a.  ^(The struct
d870: 75 72 65 20 6f 66 20 74 68 65 20 73 71 6c 69 74  ure of the sqlit
d880: 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 20 69  e_master table i
d890: 73 20 61 73 0a 69 66 20 69 74 20 68 61 64 20 62  s as.if it had b
d8a0: 65 65 6e 20 63 72 65 61 74 65 64 20 75 73 69 6e  een created usin
d8b0: 67 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  g the following 
d8c0: 53 51 4c 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b  SQL:</p>..<block
d8d0: 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 43 52 45 41  quote><pre>.CREA
d8e0: 54 45 20 54 41 42 4c 45 20 73 71 6c 69 74 65 5f  TE TABLE sqlite_
d8f0: 6d 61 73 74 65 72 28 0a 20 20 74 79 70 65 20 74  master(.  type t
d900: 65 78 74 2c 0a 20 20 6e 61 6d 65 20 74 65 78 74  ext,.  name text
d910: 2c 0a 20 20 74 62 6c 5f 6e 61 6d 65 20 74 65 78  ,.  tbl_name tex
d920: 74 2c 0a 20 20 72 6f 6f 74 70 61 67 65 20 69 6e  t,.  rootpage in
d930: 74 65 67 65 72 2c 0a 20 20 73 71 6c 20 74 65 78  teger,.  sql tex
d940: 74 0a 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f  t.);.</pre></blo
d950: 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 5e  ckquote>)^..<p>^
d960: 54 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  The sqlite_maste
d970: 72 20 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e 73  r table contains
d980: 20 6f 6e 65 20 72 6f 77 20 66 6f 72 20 65 61 63   one row for eac
d990: 68 20 74 61 62 6c 65 2c 20 69 6e 64 65 78 2c 20  h table, index, 
d9a0: 76 69 65 77 2c 0a 61 6e 64 20 74 72 69 67 67 65  view,.and trigge
d9b0: 72 20 28 63 6f 6c 6c 65 63 74 69 76 65 6c 79 20  r (collectively 
d9c0: 22 6f 62 6a 65 63 74 73 22 29 20 69 6e 20 74 68  "objects") in th
d9d0: 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
d9e0: 61 2c 20 65 78 63 65 70 74 20 74 68 65 72 65 0a  a, except there.
d9f0: 69 73 20 6e 6f 20 65 6e 74 72 79 20 66 6f 72 20  is no entry for 
da00: 74 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  the sqlite_maste
da10: 72 20 74 61 62 6c 65 20 69 74 73 65 6c 66 2e 20  r table itself. 
da20: 20 5e 54 68 65 20 73 71 6c 69 74 65 5f 6d 61 73   ^The sqlite_mas
da30: 74 65 72 20 74 61 62 6c 65 0a 63 6f 6e 74 61 69  ter table.contai
da40: 6e 73 20 65 6e 74 72 69 65 73 20 66 6f 72 20 5b  ns entries for [
da50: 69 6e 74 65 72 6e 61 6c 20 73 63 68 65 6d 61 20  internal schema 
da60: 6f 62 6a 65 63 74 73 5d 20 69 6e 20 61 64 64 69  objects] in addi
da70: 74 69 6f 6e 20 74 6f 20 61 70 70 6c 69 63 61 74  tion to applicat
da80: 69 6f 6e 2d 0a 61 6e 64 20 70 72 6f 67 72 61 6d  ion-.and program
da90: 6d 65 72 2d 64 65 66 69 6e 65 64 20 6f 62 6a 65  mer-defined obje
daa0: 63 74 73 2e 0a 0a 0a 3c 70 3e 5e 28 54 68 65 20  cts....<p>^(The 
dab0: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 2e 74 79  sqlite_master.ty
dac0: 70 65 20 63 6f 6c 75 6d 6e 20 77 69 6c 6c 20 62  pe column will b
dad0: 65 20 6f 6e 65 0a 6f 66 20 74 68 65 20 66 6f 6c  e one.of the fol
dae0: 6c 6f 77 69 6e 67 20 74 65 78 74 20 73 74 72 69  lowing text stri
daf0: 6e 67 73 3a 20 20 27 74 61 62 6c 65 27 2c 20 27  ngs:  'table', '
db00: 69 6e 64 65 78 27 2c 20 27 76 69 65 77 27 2c 20  index', 'view', 
db10: 6f 72 20 27 74 72 69 67 67 65 72 27 0a 61 63 63  or 'trigger'.acc
db20: 6f 72 64 69 6e 67 20 74 6f 20 74 68 65 20 74 79  ording to the ty
db30: 70 65 20 6f 66 20 6f 62 6a 65 63 74 20 64 65 66  pe of object def
db40: 69 6e 65 64 2e 20 20 54 68 65 20 27 74 61 62 6c  ined.  The 'tabl
db50: 65 27 20 73 74 72 69 6e 67 20 69 73 20 75 73 65  e' string is use
db60: 64 0a 66 6f 72 20 62 6f 74 68 20 6f 72 64 69 6e  d.for both ordin
db70: 61 72 79 20 61 6e 64 20 5b 76 69 72 74 75 61 6c  ary and [virtual
db80: 20 74 61 62 6c 65 73 5d 2e 29 5e 3c 2f 70 3e 0a   tables].)^</p>.
db90: 0a 3c 70 3e 5e 28 54 68 65 20 73 71 6c 69 74 65  .<p>^(The sqlite
dba0: 5f 6d 61 73 74 65 72 2e 6e 61 6d 65 20 63 6f 6c  _master.name col
dbb0: 75 6d 6e 20 77 69 6c 6c 20 68 6f 6c 64 20 74 68  umn will hold th
dbc0: 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 6f 62  e name of the ob
dbd0: 6a 65 63 74 2e 29 5e 0a 5e 28 5b 55 4e 49 51 55  ject.)^.^([UNIQU
dbe0: 45 5d 20 61 6e 64 20 5b 50 52 49 4d 41 52 59 20  E] and [PRIMARY 
dbf0: 4b 45 59 5d 20 63 6f 6e 73 74 72 61 69 6e 74 73  KEY] constraints
dc00: 20 6f 6e 20 74 61 62 6c 65 73 20 63 61 75 73 65   on tables cause
dc10: 20 53 51 4c 69 74 65 20 74 6f 20 63 72 65 61 74   SQLite to creat
dc20: 65 0a 5b 69 6e 74 65 72 6e 61 6c 20 69 6e 64 65  e.[internal inde
dc30: 78 65 73 5d 20 77 69 74 68 20 6e 61 6d 65 73 20  xes] with names 
dc40: 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 73 71 6c  of the form "sql
dc50: 69 74 65 5f 61 75 74 6f 69 6e 64 65 78 5f 54 41  ite_autoindex_TA
dc60: 42 4c 45 5f 4e 22 0a 77 68 65 72 65 20 54 41 42  BLE_N".where TAB
dc70: 4c 45 20 69 73 20 72 65 70 6c 61 63 65 64 20 62  LE is replaced b
dc80: 79 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  y the name of th
dc90: 65 20 74 61 62 6c 65 20 74 68 61 74 20 63 6f 6e  e table that con
dca0: 74 61 69 6e 73 20 74 68 65 0a 63 6f 6e 73 74 72  tains the.constr
dcb0: 61 69 6e 74 20 61 6e 64 20 4e 20 69 73 20 61 6e  aint and N is an
dcc0: 20 69 6e 74 65 67 65 72 20 62 65 67 69 6e 6e 69   integer beginni
dcd0: 6e 67 20 77 69 74 68 20 31 20 61 6e 64 20 69 6e  ng with 1 and in
dce0: 63 72 65 61 73 69 6e 67 20 62 79 20 6f 6e 65 0a  creasing by one.
dcf0: 77 69 74 68 20 65 61 63 68 20 63 6f 6e 73 74 72  with each constr
dd00: 61 69 6e 74 20 73 65 65 6e 20 69 6e 20 74 68 65  aint seen in the
dd10: 20 74 61 62 6c 65 20 64 65 66 69 6e 69 74 69 6f   table definitio
dd20: 6e 2e 29 5e 0a 5e 28 49 6e 20 61 20 5b 57 49 54  n.)^.^(In a [WIT
dd30: 48 4f 55 54 20 52 4f 57 49 44 5d 20 74 61 62 6c  HOUT ROWID] tabl
dd40: 65 2c 20 74 68 65 72 65 20 69 73 20 6e 6f 20 73  e, there is no s
dd50: 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 65 6e 74  qlite_master ent
dd60: 72 79 20 66 6f 72 20 74 68 65 0a 50 52 49 4d 41  ry for the.PRIMA
dd70: 52 59 20 4b 45 59 2c 20 62 75 74 20 74 68 65 20  RY KEY, but the 
dd80: 22 73 71 6c 69 74 65 5f 61 75 74 6f 69 6e 64 65  "sqlite_autoinde
dd90: 78 5f 54 41 42 4c 45 5f 4e 22 20 6e 61 6d 65 20  x_TABLE_N" name 
dda0: 69 73 20 73 65 74 20 61 73 69 64 65 0a 66 6f 72  is set aside.for
ddb0: 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59   the PRIMARY KEY
ddc0: 20 61 73 20 69 66 20 74 68 65 20 73 71 6c 69 74   as if the sqlit
ddd0: 65 5f 6d 61 73 74 65 72 20 65 6e 74 72 79 20 64  e_master entry d
dde0: 69 64 20 65 78 69 73 74 2e 20 20 54 68 69 73 0a  id exist.  This.
ddf0: 77 69 6c 6c 20 61 66 66 65 63 74 20 74 68 65 20  will affect the 
de00: 6e 75 6d 62 65 72 69 6e 67 20 6f 66 20 73 75 62  numbering of sub
de10: 73 65 71 75 65 6e 74 20 55 4e 49 51 55 45 20 63  sequent UNIQUE c
de20: 6f 6e 73 74 72 61 69 6e 74 73 2e 29 5e 0a 5e 54  onstraints.)^.^T
de30: 68 65 20 22 73 71 6c 69 74 65 5f 61 75 74 6f 69  he "sqlite_autoi
de40: 6e 64 65 78 5f 54 41 42 4c 45 5f 4e 22 20 6e 61  ndex_TABLE_N" na
de50: 6d 65 20 69 73 20 6e 65 76 65 72 20 61 6c 6c 6f  me is never allo
de60: 63 61 74 65 64 20 66 6f 72 20 61 6e 0a 5b 49 4e  cated for an.[IN
de70: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
de80: 59 5d 2c 20 65 69 74 68 65 72 20 69 6e 20 72 6f  Y], either in ro
de90: 77 69 64 20 74 61 62 6c 65 73 20 6f 72 20 57 49  wid tables or WI
dea0: 54 48 4f 55 54 20 52 4f 57 49 44 20 74 61 62 6c  THOUT ROWID tabl
deb0: 65 73 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  es..</p>..<p>The
dec0: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 2e 74   sqlite_master.t
ded0: 62 6c 5f 6e 61 6d 65 20 63 6f 6c 75 6d 6e 20 68  bl_name column h
dee0: 6f 6c 64 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  olds the name of
def0: 20 61 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77   a table or view
df00: 0a 74 68 61 74 20 74 68 65 20 6f 62 6a 65 63 74  .that the object
df10: 20 69 73 20 61 73 73 6f 63 69 61 74 65 64 20 77   is associated w
df20: 69 74 68 2e 20 20 5e 46 6f 72 20 61 20 74 61 62  ith.  ^For a tab
df30: 6c 65 20 6f 72 20 76 69 65 77 2c 20 74 68 65 0a  le or view, the.
df40: 74 62 6c 5f 6e 61 6d 65 20 63 6f 6c 75 6d 6e 20  tbl_name column 
df50: 69 73 20 61 20 63 6f 70 79 20 6f 66 20 74 68 65  is a copy of the
df60: 20 6e 61 6d 65 20 63 6f 6c 75 6d 6e 2e 20 20 5e   name column.  ^
df70: 46 6f 72 20 61 6e 20 69 6e 64 65 78 2c 20 74 68  For an index, th
df80: 65 20 74 62 6c 5f 6e 61 6d 65 0a 69 73 20 74 68  e tbl_name.is th
df90: 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  e name of the ta
dfa0: 62 6c 65 20 74 68 61 74 20 69 73 20 69 6e 64 65  ble that is inde
dfb0: 78 65 64 2e 20 20 5e 46 6f 72 20 61 20 74 72 69  xed.  ^For a tri
dfc0: 67 67 65 72 2c 20 74 68 65 20 74 62 6c 5f 6e 61  gger, the tbl_na
dfd0: 6d 65 0a 63 6f 6c 75 6d 6e 20 73 74 6f 72 65 73  me.column stores
dfe0: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
dff0: 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77 20 74   table or view t
e000: 68 61 74 20 63 61 75 73 65 73 20 74 68 65 20 74  hat causes the t
e010: 72 69 67 67 65 72 20 0a 74 6f 20 66 69 72 65 2e  rigger .to fire.
e020: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28 54 68 65 20 73  </p>..<p>^(The s
e030: 71 6c 69 74 65 5f 6d 61 73 74 65 72 2e 72 6f 6f  qlite_master.roo
e040: 74 70 61 67 65 20 63 6f 6c 75 6d 6e 20 73 74 6f  tpage column sto
e050: 72 65 73 20 74 68 65 20 70 61 67 65 20 6e 75 6d  res the page num
e060: 62 65 72 20 6f 66 20 74 68 65 20 72 6f 6f 74 0a  ber of the root.
e070: 62 2d 74 72 65 65 20 70 61 67 65 20 66 6f 72 20  b-tree page for 
e080: 74 61 62 6c 65 73 20 61 6e 64 20 69 6e 64 65 78  tables and index
e090: 65 73 2e 29 5e 20 20 5e 46 6f 72 20 72 6f 77 73  es.)^  ^For rows
e0a0: 20 74 68 61 74 20 64 65 66 69 6e 65 20 76 69 65   that define vie
e0b0: 77 73 2c 20 74 72 69 67 67 65 72 73 2c 0a 61 6e  ws, triggers,.an
e0c0: 64 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73  d virtual tables
e0d0: 2c 20 74 68 65 20 72 6f 6f 74 70 61 67 65 20 63  , the rootpage c
e0e0: 6f 6c 75 6d 6e 20 69 73 20 30 20 6f 72 20 4e 55  olumn is 0 or NU
e0f0: 4c 4c 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28 54 68  LL.</p>..<p>^(Th
e100: 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 2e  e sqlite_master.
e110: 73 71 6c 20 63 6f 6c 75 6d 6e 20 73 74 6f 72 65  sql column store
e120: 73 20 53 51 4c 20 74 65 78 74 20 74 68 61 74 20  s SQL text that 
e130: 64 65 73 63 72 69 62 65 73 20 74 68 65 0a 6f 62  describes the.ob
e140: 6a 65 63 74 2e 20 20 54 68 69 73 20 53 51 4c 20  ject.  This SQL 
e150: 74 65 78 74 20 69 73 20 61 20 5b 43 52 45 41 54  text is a [CREAT
e160: 45 20 54 41 42 4c 45 5d 2c 20 5b 43 52 45 41 54  E TABLE], [CREAT
e170: 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 5d  E VIRTUAL TABLE]
e180: 2c 0a 5b 43 52 45 41 54 45 20 49 4e 44 45 58 5d  ,.[CREATE INDEX]
e190: 2c 0a 5b 43 52 45 41 54 45 20 56 49 45 57 5d 2c  ,.[CREATE VIEW],
e1a0: 20 6f 72 20 5b 43 52 45 41 54 45 20 54 52 49 47   or [CREATE TRIG
e1b0: 47 45 52 5d 20 73 74 61 74 65 6d 65 6e 74 20 74  GER] statement t
e1c0: 68 61 74 20 69 66 20 65 76 61 6c 75 61 74 65 64  hat if evaluated
e1d0: 20 61 67 61 69 6e 73 74 0a 74 68 65 20 64 61 74   against.the dat
e1e0: 61 62 61 73 65 20 66 69 6c 65 20 77 68 65 6e 20  abase file when 
e1f0: 69 74 20 69 73 20 74 68 65 20 6d 61 69 6e 20 64  it is the main d
e200: 61 74 61 62 61 73 65 20 6f 66 20 61 20 5b 64 61  atabase of a [da
e210: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
e220: 6e 5d 0a 77 6f 75 6c 64 20 72 65 63 72 65 61 74  n].would recreat
e230: 65 20 74 68 65 20 6f 62 6a 65 63 74 2e 29 5e 20  e the object.)^ 
e240: 20 54 68 65 20 74 65 78 74 20 69 73 20 75 73 75   The text is usu
e250: 61 6c 6c 79 20 61 20 63 6f 70 79 20 6f 66 20 74  ally a copy of t
e260: 68 65 20 6f 72 69 67 69 6e 61 6c 0a 73 74 61 74  he original.stat
e270: 65 6d 65 6e 74 20 75 73 65 64 20 74 6f 20 63 72  ement used to cr
e280: 65 61 74 65 20 74 68 65 20 6f 62 6a 65 63 74 20  eate the object 
e290: 62 75 74 20 77 69 74 68 20 6e 6f 72 6d 61 6c 69  but with normali
e2a0: 7a 61 74 69 6f 6e 73 20 61 70 70 6c 69 65 64 20  zations applied 
e2b0: 73 6f 0a 74 68 61 74 20 74 68 65 20 74 65 78 74  so.that the text
e2c0: 20 63 6f 6e 66 6f 72 6d 73 20 74 6f 20 74 68 65   conforms to the
e2d0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 72 75 6c 65 73   following rules
e2e0: 3a 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 5e 54 68 65  :..<ul>.<li>^The
e2f0: 20 43 52 45 41 54 45 2c 20 54 41 42 4c 45 2c 20   CREATE, TABLE, 
e300: 56 49 45 57 2c 20 54 52 49 47 47 45 52 2c 20 61  VIEW, TRIGGER, a
e310: 6e 64 20 49 4e 44 45 58 20 6b 65 79 77 6f 72 64  nd INDEX keyword
e320: 73 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69  s at the beginni
e330: 6e 67 0a 6f 66 20 74 68 65 20 73 74 61 74 65 6d  ng.of the statem
e340: 65 6e 74 20 61 72 65 20 63 6f 6e 76 65 72 74 65  ent are converte
e350: 64 20 74 6f 20 61 6c 6c 20 75 70 70 65 72 20 63  d to all upper c
e360: 61 73 65 20 6c 65 74 74 65 72 73 2e 0a 3c 6c 69  ase letters..<li
e370: 3e 5e 54 68 65 20 54 45 4d 50 20 6f 72 20 54 45  >^The TEMP or TE
e380: 4d 50 4f 52 41 52 59 20 6b 65 79 77 6f 72 64 20  MPORARY keyword 
e390: 69 73 20 72 65 6d 6f 76 65 64 20 69 66 20 69 74  is removed if it
e3a0: 20 6f 63 63 75 72 73 20 61 66 74 65 72 20 74 68   occurs after th
e3b0: 65 20 0a 69 6e 69 74 69 61 6c 20 43 52 45 41 54  e .initial CREAT
e3c0: 45 20 6b 65 79 77 6f 72 64 2e 0a 3c 6c 69 3e 5e  E keyword..<li>^
e3d0: 41 6e 79 20 64 61 74 61 62 61 73 65 20 6e 61 6d  Any database nam
e3e0: 65 20 71 75 61 6c 69 66 69 65 72 20 74 68 61 74  e qualifier that
e3f0: 20 6f 63 63 75 72 73 20 70 72 69 6f 72 20 74 6f   occurs prior to
e400: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
e410: 0a 6f 62 6a 65 63 74 20 62 65 69 6e 67 20 63 72  .object being cr
e420: 65 61 74 65 64 20 69 73 20 72 65 6d 6f 76 65 64  eated is removed
e430: 2e 0a 3c 6c 69 3e 5e 4c 65 61 64 69 6e 67 20 73  ..<li>^Leading s
e440: 70 61 63 65 73 20 61 72 65 20 72 65 6d 6f 76 65  paces are remove
e450: 64 2e 0a 3c 6c 69 3e 5e 41 6c 6c 20 73 70 61 63  d..<li>^All spac
e460: 65 73 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65  es following the
e470: 20 66 69 72 73 74 20 74 77 6f 20 6b 65 79 77 6f   first two keywo
e480: 72 64 73 20 61 72 65 20 63 6f 6e 76 65 72 74 65  rds are converte
e490: 64 20 69 6e 74 6f 20 61 20 73 69 6e 67 6c 65 0a  d into a single.
e4a0: 73 70 61 63 65 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70  space..</ul>..<p
e4b0: 3e 5e 28 54 68 65 20 74 65 78 74 20 69 6e 20 74  >^(The text in t
e4c0: 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  he sqlite_master
e4d0: 2e 73 71 6c 20 63 6f 6c 75 6d 6e 20 69 73 20 61  .sql column is a
e4e0: 20 63 6f 70 79 20 6f 66 20 74 68 65 20 6f 72 69   copy of the ori
e4f0: 67 69 6e 61 6c 0a 43 52 45 41 54 45 20 73 74 61  ginal.CREATE sta
e500: 74 65 6d 65 6e 74 20 74 65 78 74 20 74 68 61 74  tement text that
e510: 20 63 72 65 61 74 65 64 20 74 68 65 20 6f 62 6a   created the obj
e520: 65 63 74 2c 20 65 78 63 65 70 74 20 6e 6f 72 6d  ect, except norm
e530: 61 6c 69 7a 65 64 20 61 73 0a 64 65 73 63 72 69  alized as.descri
e540: 62 65 64 20 61 62 6f 76 65 20 61 6e 64 20 61 73  bed above and as
e550: 20 6d 6f 64 69 66 69 65 64 20 62 79 20 73 75 62   modified by sub
e560: 73 65 71 75 65 6e 74 20 5b 41 4c 54 45 52 20 54  sequent [ALTER T
e570: 41 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74 73  ABLE] statements
e580: 2e 29 5e 0a 5e 28 54 68 65 20 73 71 6c 69 74 65  .)^.^(The sqlite
e590: 5f 6d 61 73 74 65 72 2e 73 71 6c 20 69 73 20 4e  _master.sql is N
e5a0: 55 4c 4c 20 66 6f 72 20 74 68 65 20 5b 69 6e 74  ULL for the [int
e5b0: 65 72 6e 61 6c 20 69 6e 64 65 78 65 73 5d 20 74  ernal indexes] t
e5c0: 68 61 74 20 61 72 65 0a 61 75 74 6f 6d 61 74 69  hat are.automati
e5d0: 63 61 6c 6c 79 20 63 72 65 61 74 65 64 20 62 79  cally created by
e5e0: 20 5b 55 4e 49 51 55 45 5d 20 6f 72 20 5b 50 52   [UNIQUE] or [PR
e5f0: 49 4d 41 52 59 20 4b 45 59 5d 20 63 6f 6e 73 74  IMARY KEY] const
e600: 72 61 69 6e 74 73 2e 29 5e 3c 2f 70 3e 0a 0a 0a  raints.)^</p>...
e610: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
e620: 20 69 6e 74 73 63 68 65 6d 61 20 7b 69 6e 74 65   intschema {inte
e630: 72 6e 61 6c 20 73 63 68 65 6d 61 20 6f 62 6a 65  rnal schema obje
e640: 63 74 73 7d 20 5c 0a 7b 69 6e 74 65 72 6e 61 6c  cts} \.{internal
e650: 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 7d 20   schema object} 
e660: 7b 69 6e 74 65 72 6e 61 6c 20 69 6e 64 65 78 7d  {internal index}
e670: 20 7b 69 6e 74 65 72 6e 61 6c 20 69 6e 64 65 78   {internal index
e680: 65 73 7d 20 5c 0a 7b 69 6e 74 65 72 6e 61 6c 20  es} \.{internal 
e690: 74 61 62 6c 65 7d 20 7b 69 6e 74 65 72 6e 61 6c  table} {internal
e6a0: 20 74 61 62 6c 65 73 7d 3c 2f 74 63 6c 3e 0a 3c   tables}</tcl>.<
e6b0: 68 33 3e 49 6e 74 65 72 6e 61 6c 20 53 63 68 65  h3>Internal Sche
e6c0: 6d 61 20 4f 62 6a 65 63 74 73 3c 2f 68 33 3e 0a  ma Objects</h3>.
e6d0: 0a 3c 70 3e 5e 49 6e 20 61 64 64 69 74 69 6f 6e  .<p>^In addition
e6e0: 20 74 6f 20 74 68 65 20 74 61 62 6c 65 73 2c 20   to the tables, 
e6f0: 69 6e 64 65 78 65 73 2c 20 76 69 65 77 73 2c 20  indexes, views, 
e700: 61 6e 64 20 74 72 69 67 67 65 72 73 20 63 72 65  and triggers cre
e710: 61 74 65 64 20 62 79 0a 74 68 65 20 61 70 70 6c  ated by.the appl
e720: 69 63 61 74 69 6f 6e 20 61 6e 64 2f 6f 72 20 74  ication and/or t
e730: 68 65 20 64 65 76 65 6c 6f 70 65 72 20 75 73 69  he developer usi
e740: 6e 67 20 43 52 45 41 54 45 20 73 74 61 74 65 6d  ng CREATE statem
e750: 65 6e 74 73 20 53 51 4c 2c 20 74 68 65 0a 73 71  ents SQL, the.sq
e760: 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c  lite_master tabl
e770: 65 20 6d 61 79 20 63 6f 6e 74 61 69 6e 20 7a 65  e may contain ze
e780: 72 6f 20 6f 72 20 6d 6f 72 65 20 65 6e 74 72 69  ro or more entri
e790: 65 73 20 66 6f 72 20 0a 3c 69 3e 69 6e 74 65 72  es for .<i>inter
e7a0: 6e 61 6c 20 73 63 68 65 6d 61 20 6f 62 6a 65 63  nal schema objec
e7b0: 74 73 3c 2f 69 3e 20 74 68 61 74 20 61 72 65 20  ts</i> that are 
e7c0: 63 72 65 61 74 65 64 20 62 79 20 53 51 4c 69 74  created by SQLit
e7d0: 65 20 66 6f 72 20 69 74 73 20 0a 6f 77 6e 20 69  e for its .own i
e7e0: 6e 74 65 72 6e 61 6c 20 75 73 65 2e 20 20 5e 54  nternal use.  ^T
e7f0: 68 65 20 6e 61 6d 65 73 20 6f 66 20 69 6e 74 65  he names of inte
e800: 72 6e 61 6c 20 73 63 68 65 6d 61 20 6f 62 6a 65  rnal schema obje
e810: 63 74 73 0a 61 6c 77 61 79 73 20 62 65 67 69 6e  cts.always begin
e820: 20 77 69 74 68 20 22 73 71 6c 69 74 65 5f 22 20   with "sqlite_" 
e830: 61 6e 64 20 61 6e 79 20 74 61 62 6c 65 2c 20 69  and any table, i
e840: 6e 64 65 78 2c 20 76 69 65 77 2c 20 6f 72 20 74  ndex, view, or t
e850: 72 69 67 67 65 72 0a 77 68 6f 73 65 20 6e 61 6d  rigger.whose nam
e860: 65 20 62 65 67 69 6e 73 20 77 69 74 68 20 22 73  e begins with "s
e870: 71 6c 69 74 65 5f 22 20 69 73 20 61 6e 20 69 6e  qlite_" is an in
e880: 74 65 72 6e 61 6c 20 73 63 68 65 6d 61 20 6f 62  ternal schema ob
e890: 6a 65 63 74 2e 0a 5e 53 51 4c 69 74 65 20 70 72  ject..^SQLite pr
e8a0: 6f 68 69 62 69 74 73 20 61 70 70 6c 69 63 61 74  ohibits applicat
e8b0: 69 6f 6e 73 20 66 72 6f 6d 20 63 72 65 61 74 69  ions from creati
e8c0: 6e 67 20 6f 62 6a 65 63 74 73 20 77 68 6f 73 65  ng objects whose
e8d0: 20 6e 61 6d 65 73 20 62 65 67 69 6e 0a 77 69 74   names begin.wit
e8e0: 68 20 22 73 71 6c 69 74 65 5f 22 2e 20 20 0a 0a  h "sqlite_".  ..
e8f0: 3c 70 3e 49 6e 74 65 72 6e 61 6c 20 73 63 68 65  <p>Internal sche
e900: 6d 61 20 6f 62 6a 65 63 74 73 20 75 73 65 64 20  ma objects used 
e910: 62 79 20 53 51 4c 69 74 65 20 6d 61 79 20 69 6e  by SQLite may in
e920: 63 6c 75 64 65 20 74 68 65 20 66 6f 6c 6c 6f 77  clude the follow
e930: 69 6e 67 3a 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c  ing:..<ul>.<li><
e940: 70 3e 49 6e 64 69 63 65 73 20 77 69 74 68 20 6e  p>Indices with n
e950: 61 6d 65 73 20 6f 66 20 74 68 65 20 66 6f 72 6d  ames of the form
e960: 20 22 73 71 6c 69 74 65 5f 61 75 74 6f 69 6e 64   "sqlite_autoind
e970: 65 78 5f 54 41 42 4c 45 5f 4e 22 20 74 68 61 74  ex_TABLE_N" that
e980: 0a 20 20 20 20 20 20 20 61 72 65 20 75 73 65 64  .       are used
e990: 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 5b 55   to implement [U
e9a0: 4e 49 51 55 45 5d 20 61 6e 64 20 5b 50 52 49 4d  NIQUE] and [PRIM
e9b0: 41 52 59 20 4b 45 59 5d 20 63 6f 6e 73 74 72 61  ARY KEY] constra
e9c0: 69 6e 74 73 20 6f 6e 0a 20 20 20 20 20 20 20 6f  ints on.       o
e9d0: 72 64 69 6e 61 72 79 20 74 61 62 6c 65 73 2e 0a  rdinary tables..
e9e0: 0a 3c 6c 69 3e 3c 70 3e 41 20 74 61 62 6c 65 20  .<li><p>A table 
e9f0: 77 69 74 68 20 74 68 65 20 6e 61 6d 65 20 22 73  with the name "s
ea00: 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 22 20  qlite_sequence" 
ea10: 74 68 61 74 20 69 73 20 75 73 65 64 20 74 6f 20  that is used to 
ea20: 6b 65 65 70 20 74 72 61 63 6b 0a 20 20 20 20 20  keep track.     
ea30: 20 20 6f 66 20 74 68 65 20 6d 61 78 69 6d 75 6d    of the maximum
ea40: 20 68 69 73 74 6f 72 69 63 61 6c 20 5b 49 4e 54   historical [INT
ea50: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
ea60: 5d 20 66 6f 72 20 61 20 74 61 62 6c 65 0a 20 20  ] for a table.  
ea70: 20 20 20 20 20 75 73 69 6e 67 20 5b 41 55 54 4f       using [AUTO
ea80: 49 4e 43 52 45 4d 45 4e 54 5d 2e 0a 0a 3c 6c 69  INCREMENT]...<li
ea90: 3e 3c 70 3e 54 61 62 6c 65 73 20 77 69 74 68 20  ><p>Tables with 
eaa0: 6e 61 6d 65 73 20 6f 66 20 74 68 65 20 66 6f 72  names of the for
eab0: 6d 20 22 73 71 6c 69 74 65 5f 73 74 61 74 4e 22  m "sqlite_statN"
eac0: 20 77 68 65 72 65 20 4e 20 69 73 20 61 6e 20 69   where N is an i
ead0: 6e 74 65 67 65 72 2e 0a 20 20 20 20 20 20 20 53  nteger..       S
eae0: 75 63 68 20 74 61 62 6c 65 73 20 73 74 6f 72 65  uch tables store
eaf0: 20 64 61 74 61 62 61 73 65 20 73 74 61 74 69 73   database statis
eb00: 74 69 63 73 20 67 61 74 68 65 72 65 64 20 62 79  tics gathered by
eb10: 20 74 68 65 20 5b 41 4e 41 4c 59 5a 45 5d 0a 20   the [ANALYZE]. 
eb20: 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 20 61 6e        command an
eb30: 64 20 75 73 65 64 20 62 79 20 74 68 65 20 71 75  d used by the qu
eb40: 65 72 79 20 70 6c 61 6e 6e 65 72 20 74 6f 20 68  ery planner to h
eb50: 65 6c 70 20 64 65 74 65 72 6d 69 6e 65 20 74 68  elp determine th
eb60: 65 20 62 65 73 74 0a 20 20 20 20 20 20 20 61 6c  e best.       al
eb70: 67 6f 72 69 74 68 6d 20 74 6f 20 75 73 65 20 66  gorithm to use f
eb80: 6f 72 20 65 61 63 68 20 71 75 65 72 79 2e 0a 3c  or each query..<
eb90: 2f 75 6c 3e 0a 0a 3c 70 3e 4e 65 77 20 69 6e 74  /ul>..<p>New int
eba0: 65 72 6e 61 6c 20 73 63 68 65 6d 61 20 6f 62 6a  ernal schema obj
ebb0: 65 63 74 73 20 6e 61 6d 65 73 2c 20 61 6c 77 61  ects names, alwa
ebc0: 79 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74  ys beginning wit
ebd0: 68 20 22 73 71 6c 69 74 65 5f 22 2c 0a 6d 61 79  h "sqlite_",.may
ebe0: 20 62 65 20 61 64 64 65 64 20 74 6f 20 74 68 65   be added to the
ebf0: 20 53 51 4c 69 74 65 20 66 69 6c 65 20 66 6f 72   SQLite file for
ec00: 6d 61 74 20 69 6e 20 66 75 74 75 72 65 20 72 65  mat in future re
ec10: 6c 65 61 73 65 73 2e 0a 0a 3c 74 63 6c 3e 68 64  leases...<tcl>hd
ec20: 5f 66 72 61 67 6d 65 6e 74 20 73 65 71 74 61 62  _fragment seqtab
ec30: 20 7b 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63   {sqlite_sequenc
ec40: 65 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65  e}</tcl>.<h3>The
ec50: 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65   sqlite_sequence
ec60: 20 74 61 62 6c 65 3c 2f 68 33 3e 0a 0a 3c 70 3e   table</h3>..<p>
ec70: 5e 54 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75  ^The sqlite_sequ
ec80: 65 6e 63 65 20 74 61 62 6c 65 20 69 73 20 61 6e  ence table is an
ec90: 20 69 6e 74 65 72 6e 61 6c 20 74 61 62 6c 65 20   internal table 
eca0: 75 73 65 64 20 74 6f 20 68 65 6c 70 20 69 6d 70  used to help imp
ecb0: 6c 65 6d 65 6e 74 0a 5b 41 55 54 4f 49 4e 43 52  lement.[AUTOINCR
ecc0: 45 4d 45 4e 54 5d 2e 20 20 5e 54 68 65 20 73 71  EMENT].  ^The sq
ecd0: 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 20 74 61  lite_sequence ta
ece0: 62 6c 65 20 69 73 20 63 72 65 61 74 65 64 20 61  ble is created a
ecf0: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 0a 77 68 65  utomatically.whe
ed00: 6e 65 76 65 72 20 61 6e 79 20 6f 72 64 69 6e 61  never any ordina
ed10: 72 79 20 74 61 62 6c 65 20 77 69 74 68 20 61 6e  ry table with an
ed20: 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 69   AUTOINCREMENT i
ed30: 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 0a 6b  nteger primary.k
ed40: 65 79 20 69 73 20 63 72 65 61 74 65 64 2e 20 20  ey is created.  
ed50: 5e 4f 6e 63 65 20 63 72 65 61 74 65 64 2c 20 74  ^Once created, t
ed60: 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e  he sqlite_sequen
ed70: 63 65 20 74 61 62 6c 65 20 65 78 69 73 74 73 20  ce table exists 
ed80: 69 6e 20 74 68 65 0a 73 71 6c 69 74 65 5f 6d 61  in the.sqlite_ma
ed90: 73 74 65 72 20 74 61 62 6c 65 20 66 6f 72 65 76  ster table forev
eda0: 65 72 3b 20 69 74 20 63 61 6e 6e 6f 74 20 62 65  er; it cannot be
edb0: 20 64 72 6f 70 70 65 64 2e 0a 5e 28 54 68 65 20   dropped..^(The 
edc0: 73 63 68 65 6d 61 20 66 6f 72 20 74 68 65 20 73  schema for the s
edd0: 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 20 74  qlite_sequence t
ede0: 61 62 6c 65 20 69 73 3a 0a 0a 3c 62 6c 6f 63 6b  able is:..<block
edf0: 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 43 52 45 41  quote><pre>.CREA
ee00: 54 45 20 54 41 42 4c 45 20 73 71 6c 69 74 65 5f  TE TABLE sqlite_
ee10: 73 65 71 75 65 6e 63 65 28 6e 61 6d 65 2c 73 65  sequence(name,se
ee20: 71 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63  q);.</pre></bloc
ee30: 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 5e 54  kquote>)^..<p>^T
ee40: 68 65 72 65 20 69 73 20 61 20 73 69 6e 67 6c 65  here is a single
ee50: 20 72 6f 77 20 69 6e 20 74 68 65 20 73 71 6c 69   row in the sqli
ee60: 74 65 5f 73 65 71 75 65 6e 63 65 20 74 61 62 6c  te_sequence tabl
ee70: 65 20 66 6f 72 20 65 61 63 68 20 6f 72 64 69 6e  e for each ordin
ee80: 61 72 79 0a 74 61 62 6c 65 20 74 68 61 74 20 75  ary.table that u
ee90: 73 65 73 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e  ses AUTOINCREMEN
eea0: 54 2e 20 20 5e 28 54 68 65 20 6e 61 6d 65 20 6f  T.  ^(The name o
eeb0: 66 20 74 68 65 20 74 61 62 6c 65 20 28 61 73 20  f the table (as 
eec0: 69 74 20 61 70 70 65 61 72 73 20 69 6e 0a 73 71  it appears in.sq
eed0: 6c 69 74 65 5f 6d 61 73 74 65 72 2e 6e 61 6d 65  lite_master.name
eee0: 29 20 69 73 20 69 6e 20 74 68 65 20 73 71 6c 69  ) is in the sqli
eef0: 74 65 5f 73 65 71 75 65 6e 63 65 2e 6d 61 69 6e  te_sequence.main
ef00: 20 66 69 65 6c 64 20 61 6e 64 20 74 68 65 20 6c   field and the l
ef10: 61 72 67 65 73 74 0a 5b 49 4e 54 45 47 45 52 20  argest.[INTEGER 
ef20: 50 52 49 4d 41 52 59 20 4b 45 59 5d 20 65 76 65  PRIMARY KEY] eve
ef30: 72 20 75 73 65 64 20 62 79 20 74 68 61 74 20 74  r used by that t
ef40: 61 62 6c 65 20 69 73 20 69 6e 20 74 68 65 20 73  able is in the s
ef50: 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 2e 73  qlite_sequence.s
ef60: 65 71 0a 66 69 65 6c 64 2e 29 5e 20 20 5e 4e 65  eq.field.)^  ^Ne
ef70: 77 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  w automatically 
ef80: 67 65 6e 65 72 61 74 65 64 20 69 6e 74 65 67 65  generated intege
ef90: 72 20 70 72 69 6d 61 72 79 20 6b 65 79 73 20 66  r primary keys f
efa0: 6f 72 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  or AUTOINCREMENT
efb0: 0a 74 61 62 6c 65 73 20 61 72 65 20 67 75 61 72  .tables are guar
efc0: 61 6e 74 65 65 64 20 74 6f 20 62 65 20 6c 61 72  anteed to be lar
efd0: 67 65 72 20 74 68 61 6e 20 74 68 65 20 73 71 6c  ger than the sql
efe0: 69 74 65 5f 73 65 71 75 65 6e 63 65 2e 73 65 71  ite_sequence.seq
eff0: 20 66 69 65 6c 64 20 66 6f 72 0a 74 68 61 74 20   field for.that 
f000: 74 61 62 6c 65 2e 0a 5e 28 49 66 20 74 68 65 20  table..^(If the 
f010: 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 2e  sqlite_sequence.
f020: 73 65 71 20 66 69 65 6c 64 20 6f 66 20 61 6e 20  seq field of an 
f030: 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 74 61  AUTOINCREMENT ta
f040: 62 6c 65 20 69 73 20 61 6c 72 65 61 64 79 20 61  ble is already a
f050: 74 0a 74 68 65 20 6c 61 72 67 65 73 74 20 69 6e  t.the largest in
f060: 74 65 67 65 72 20 76 61 6c 75 65 20 28 39 32 32  teger value (922
f070: 33 33 37 32 30 33 36 38 35 34 37 37 35 38 30 37  3372036854775807
f080: 29 20 74 68 65 6e 20 61 74 74 65 6d 70 74 73 20  ) then attempts 
f090: 74 6f 20 61 64 64 20 6e 65 77 0a 72 6f 77 73 20  to add new.rows 
f0a0: 74 6f 20 74 68 61 74 20 74 61 62 6c 65 20 77 69  to that table wi
f0b0: 74 68 20 61 6e 20 61 75 74 6f 6d 61 74 69 63 61  th an automatica
f0c0: 6c 6c 79 20 67 65 6e 65 72 61 74 65 64 20 69 6e  lly generated in
f0d0: 74 65 67 65 72 20 70 72 69 6d 61 72 79 20 77 69  teger primary wi
f0e0: 6c 6c 20 66 61 69 6c 0a 77 69 74 68 20 61 6e 20  ll fail.with an 
f0f0: 5b 53 51 4c 49 54 45 5f 46 55 4c 4c 5d 20 65 72  [SQLITE_FULL] er
f100: 72 6f 72 2e 29 5e 0a 5e 54 68 65 20 73 71 6c 69  ror.)^.^The sqli
f110: 74 65 5f 73 65 71 75 65 6e 63 65 2e 73 65 71 20  te_sequence.seq 
f120: 66 69 65 6c 64 20 69 73 20 61 75 74 6f 6d 61 74  field is automat
f130: 69 63 61 6c 6c 79 20 75 70 64 61 74 65 64 20 69  ically updated i
f140: 66 20 72 65 71 75 69 72 65 64 20 77 68 65 6e 0a  f required when.
f150: 6e 65 77 20 65 6e 74 72 69 65 73 20 61 72 65 20  new entries are 
f160: 61 64 64 65 64 20 74 6f 20 61 6e 20 41 55 54 4f  added to an AUTO
f170: 49 4e 43 52 45 4d 45 4e 54 20 74 61 62 6c 65 2e  INCREMENT table.
f180: 20 20 0a 5e 54 68 65 20 73 71 6c 69 74 65 5f 73    .^The sqlite_s
f190: 65 71 75 65 6e 63 65 20 72 6f 77 20 66 6f 72 20  equence row for 
f1a0: 61 6e 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  an AUTOINCREMENT
f1b0: 20 74 61 62 6c 65 20 69 73 20 61 75 74 6f 6d 61   table is automa
f1c0: 74 69 63 61 6c 6c 79 20 64 65 6c 65 74 65 64 0a  tically deleted.
f1d0: 77 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 69  when the table i
f1e0: 73 20 64 72 6f 70 70 65 64 2e 0a 5e 49 66 20 74  s dropped..^If t
f1f0: 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e  he sqlite_sequen
f200: 63 65 20 72 6f 77 20 66 6f 72 20 61 6e 20 41 55  ce row for an AU
f210: 54 4f 49 4e 43 52 45 4d 45 4e 54 20 74 61 62 6c  TOINCREMENT tabl
f220: 65 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74  e does not exist
f230: 20 77 68 65 6e 0a 74 68 65 20 41 55 54 4f 49 4e   when.the AUTOIN
f240: 43 52 45 4d 45 4e 54 20 74 61 62 6c 65 20 69 73  CREMENT table is
f250: 20 75 70 64 61 74 65 64 2c 20 74 68 65 6e 20 61   updated, then a
f260: 20 6e 65 77 20 73 71 6c 69 74 65 5f 73 65 71 75   new sqlite_sequ
f270: 65 6e 63 65 20 72 6f 77 20 69 73 20 63 72 65 61  ence row is crea
f280: 74 65 64 2e 0a 5e 28 49 66 20 74 68 65 20 73 71  ted..^(If the sq
f290: 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 2e 73 65  lite_sequence.se
f2a0: 71 20 76 61 6c 75 65 20 66 6f 72 20 61 6e 20 41  q value for an A
f2b0: 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 74 61 62  UTOINCREMENT tab
f2c0: 6c 65 20 69 73 20 6d 61 6e 75 61 6c 6c 79 20 0a  le is manually .
f2d0: 73 65 74 20 74 6f 20 73 6f 6d 65 74 68 69 6e 67  set to something
f2e0: 20 6f 74 68 65 72 20 74 68 61 6e 20 61 6e 20 69   other than an i
f2f0: 6e 74 65 67 65 72 20 61 6e 64 20 74 68 65 72 65  nteger and there
f300: 20 69 73 20 61 20 73 75 62 73 65 71 75 65 6e 74   is a subsequent
f310: 20 61 74 74 65 6d 70 74 20 74 6f 0a 69 6e 73 65   attempt to.inse
f320: 72 74 20 74 68 65 20 6f 72 20 75 70 64 61 74 65  rt the or update
f330: 20 74 68 65 20 41 55 54 4f 49 4e 43 52 45 4d 45   the AUTOINCREME
f340: 4e 54 20 74 61 62 6c 65 2c 20 74 68 65 6e 20 74  NT table, then t
f350: 68 65 20 62 65 68 61 76 69 6f 72 20 69 73 20 75  he behavior is u
f360: 6e 64 65 66 69 6e 65 64 2e 29 5e 0a 0a 3c 70 3e  ndefined.)^..<p>
f370: 5e 41 70 70 6c 69 63 61 74 69 6f 6e 20 63 6f 64  ^Application cod
f380: 65 20 69 73 20 61 6c 6c 6f 77 65 64 20 74 6f 20  e is allowed to 
f390: 6d 6f 64 69 66 79 20 74 68 65 20 73 71 6c 69 74  modify the sqlit
f3a0: 65 5f 73 65 71 75 65 6e 63 65 20 74 61 62 6c 65  e_sequence table
f3b0: 2c 20 74 6f 20 61 64 64 0a 6e 65 77 20 72 6f 77  , to add.new row
f3c0: 73 2c 20 74 6f 20 64 65 6c 65 74 65 20 72 6f 77  s, to delete row
f3d0: 73 2c 20 6f 72 20 74 6f 20 6d 6f 64 69 66 79 20  s, or to modify 
f3e0: 65 78 69 73 74 69 6e 67 20 72 6f 77 73 2e 20 20  existing rows.  
f3f0: 5e 48 6f 77 65 76 65 72 2c 20 61 70 70 6c 69 63  ^However, applic
f400: 61 74 69 6f 6e 0a 63 6f 64 65 20 63 61 6e 6e 6f  ation.code canno
f410: 74 20 63 72 65 61 74 65 20 74 68 65 20 73 71 6c  t create the sql
f420: 69 74 65 5f 73 65 71 75 65 6e 63 65 20 74 61 62  ite_sequence tab
f430: 6c 65 20 69 66 20 69 74 20 64 6f 65 73 20 6e 6f  le if it does no
f440: 74 20 61 6c 72 65 61 64 79 20 65 78 69 73 74 2e  t already exist.
f450: 0a 5e 41 70 70 6c 69 63 61 74 69 6f 6e 20 63 6f  .^Application co
f460: 64 65 20 63 61 6e 20 64 65 6c 65 74 65 20 61 6c  de can delete al
f470: 6c 20 65 6e 74 72 69 65 73 20 66 72 6f 6d 20 74  l entries from t
f480: 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e  he sqlite_sequen
f490: 63 65 20 74 61 62 6c 65 2c 0a 62 75 74 20 61 70  ce table,.but ap
f4a0: 70 6c 69 63 61 74 69 6f 6e 20 63 6f 64 65 20 63  plication code c
f4b0: 61 6e 6e 6f 74 20 64 72 6f 70 20 74 68 65 20 73  annot drop the s
f4c0: 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 20 74  qlite_sequence t
f4d0: 61 62 6c 65 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  able...<tcl>hd_f
f4e0: 72 61 67 6d 65 6e 74 20 73 74 61 74 31 74 61 62  ragment stat1tab
f4f0: 20 7b 73 71 6c 69 74 65 5f 73 74 61 74 31 7d 20   {sqlite_stat1} 
f500: 53 51 4c 49 54 45 5f 53 54 41 54 31 20 3c 2f 74  SQLITE_STAT1 </t
f510: 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 73 71 6c 69  cl>.<h3>The sqli
f520: 74 65 5f 73 74 61 74 31 20 74 61 62 6c 65 3c 2f  te_stat1 table</
f530: 68 33 3e 0a 0a 3c 70 3e 5e 54 68 65 20 73 71 6c  h3>..<p>^The sql
f540: 69 74 65 5f 73 74 61 74 31 20 69 73 20 61 6e 20  ite_stat1 is an 
f550: 69 6e 74 65 72 6e 61 6c 20 74 61 62 6c 65 20 63  internal table c
f560: 72 65 61 74 65 64 20 62 79 20 74 68 65 20 5b 41  reated by the [A
f570: 4e 41 4c 59 5a 45 5d 20 63 6f 6d 6d 61 6e 64 0a  NALYZE] command.
f580: 61 6e 64 20 75 73 65 64 20 74 6f 20 68 6f 6c 64  and used to hold
f590: 20 73 75 70 70 6c 65 6d 65 6e 74 61 6c 20 69 6e   supplemental in
f5a0: 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
f5b0: 74 61 62 6c 65 73 20 61 6e 64 20 69 6e 64 65 78  tables and index
f5c0: 65 73 20 74 68 61 74 20 74 68 65 0a 71 75 65 72  es that the.quer
f5d0: 79 20 70 6c 61 6e 6e 65 72 20 63 61 6e 20 75 73  y planner can us
f5e0: 65 20 74 6f 20 68 65 6c 70 20 69 74 20 66 69 6e  e to help it fin
f5f0: 64 20 62 65 74 74 65 72 20 77 61 79 73 20 6f 66  d better ways of
f600: 20 70 65 72 66 6f 72 6d 69 6e 67 20 71 75 65 72   performing quer
f610: 69 65 73 2e 0a 5e 41 70 70 6c 69 63 61 74 69 6f  ies..^Applicatio
f620: 6e 73 20 63 61 6e 20 75 70 64 61 74 65 2c 20 64  ns can update, d
f630: 65 6c 65 74 65 20 66 72 6f 6d 2c 20 69 6e 73 65  elete from, inse
f640: 72 74 20 69 6e 74 6f 20 6f 72 20 64 72 6f 70 20  rt into or drop 
f650: 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 31  the sqlite_stat1
f660: 0a 74 61 62 6c 65 2c 20 62 75 74 20 6d 61 79 20  .table, but may 
f670: 6e 6f 74 20 63 72 65 61 74 65 20 6f 72 20 61 6c  not create or al
f680: 74 65 72 20 74 68 65 20 73 71 6c 69 74 65 5f 73  ter the sqlite_s
f690: 74 61 74 31 20 74 61 62 6c 65 2e 0a 5e 28 54 68  tat1 table..^(Th
f6a0: 65 20 73 63 68 65 6d 61 20 6f 66 20 74 68 65 20  e schema of the 
f6b0: 73 71 6c 69 74 65 5f 73 74 61 74 31 20 74 61 62  sqlite_stat1 tab
f6c0: 6c 65 20 69 73 20 61 73 20 66 6f 6c 6c 6f 77 73  le is as follows
f6d0: 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c  :..<blockquote><
f6e0: 70 72 65 3e 0a 43 52 45 41 54 45 20 54 41 42 4c  pre>.CREATE TABL
f6f0: 45 20 73 71 6c 69 74 65 5f 73 74 61 74 31 28 74  E sqlite_stat1(t
f700: 62 6c 2c 69 64 78 2c 73 74 61 74 29 3b 0a 3c 2f  bl,idx,stat);.</
f710: 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  pre></blockquote
f720: 3e 29 5e 0a 0a 3c 70 3e 20 5e 28 54 68 65 72 65  >)^..<p> ^(There
f730: 20 69 73 20 6e 6f 72 6d 61 6c 6c 79 20 6f 6e 65   is normally one
f740: 20 72 6f 77 20 70 65 72 20 69 6e 64 65 78 2c 20   row per index, 
f750: 77 69 74 68 20 74 68 65 20 69 6e 64 65 78 20 69  with the index i
f760: 64 65 6e 74 69 66 69 65 64 20 62 79 20 74 68 65  dentified by the
f770: 0a 6e 61 6d 65 20 69 6e 20 74 68 65 20 73 71 6c  .name in the sql
f780: 69 74 65 5f 73 74 61 74 31 2e 69 64 78 20 63 6f  ite_stat1.idx co
f790: 6c 75 6d 6e 2e 29 5e 20 20 5e 28 54 68 65 20 73  lumn.)^  ^(The s
f7a0: 71 6c 69 74 65 5f 73 74 61 74 31 2e 74 62 6c 20  qlite_stat1.tbl 
f7b0: 63 6f 6c 75 6d 6e 20 69 73 0a 74 68 65 20 6e 61  column is.the na
f7c0: 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
f7d0: 74 6f 20 77 68 69 63 68 20 74 68 65 20 69 6e 64  to which the ind
f7e0: 65 78 20 62 65 6c 6f 6e 67 73 2e 29 5e 20 20 5e  ex belongs.)^  ^
f7f0: 28 49 6e 20 65 61 63 68 20 73 75 63 68 20 72 6f  (In each such ro
f800: 77 2c 20 0a 74 68 65 20 73 71 6c 69 74 65 5f 73  w, .the sqlite_s
f810: 74 61 74 2e 73 74 61 74 20 63 6f 6c 75 6d 6e 20  tat.stat column 
f820: 77 69 6c 6c 20 62 65 0a 61 20 73 74 72 69 6e 67  will be.a string
f830: 20 63 6f 6e 73 69 73 74 69 6e 67 20 6f 66 20 61   consisting of a
f840: 20 6c 69 73 74 20 6f 66 20 69 6e 74 65 67 65 72   list of integer
f850: 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 7a 65  s followed by ze
f860: 72 6f 20 6f 72 20 6d 6f 72 65 20 0a 61 72 67 75  ro or more .argu
f870: 6d 65 6e 74 73 2e 29 5e 20 20 5e 54 68 65 20 66  ments.)^  ^The f
f880: 69 72 73 74 20 69 6e 74 65 67 65 72 20 69 6e 20  irst integer in 
f890: 74 68 69 73 0a 6c 69 73 74 20 69 73 20 74 68 65  this.list is the
f8a0: 20 61 70 70 72 6f 78 69 6d 61 74 65 20 6e 75 6d   approximate num
f8b0: 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74  ber of rows in t
f8c0: 68 65 20 69 6e 64 65 78 2e 20 20 28 54 68 65 20  he index.  (The 
f8d0: 6e 75 6d 62 65 72 20 6f 66 0a 72 6f 77 73 20 69  number of.rows i
f8e0: 6e 20 74 68 65 20 69 6e 64 65 78 20 69 73 20 74  n the index is t
f8f0: 68 65 20 73 61 6d 65 20 61 73 20 74 68 65 20 6e  he same as the n
f900: 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e  umber of rows in
f910: 20 74 68 65 20 74 61 62 6c 65 2c 0a 65 78 63 65   the table,.exce
f920: 70 74 20 66 6f 72 20 5b 70 61 72 74 69 61 6c 20  pt for [partial 
f930: 69 6e 64 65 78 65 73 5d 2e 29 0a 5e 54 68 65 20  indexes].).^The 
f940: 73 65 63 6f 6e 64 20 69 6e 74 65 67 65 72 20 69  second integer i
f950: 73 20 74 68 65 20 61 70 70 72 6f 78 69 6d 61 74  s the approximat
f960: 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  e number of rows
f970: 20 69 6e 20 74 68 65 20 69 6e 64 65 78 0a 74 68   in the index.th
f980: 61 74 20 68 61 76 65 20 74 68 65 20 73 61 6d 65  at have the same
f990: 20 76 61 6c 75 65 20 69 6e 20 74 68 65 20 66 69   value in the fi
f9a0: 72 73 74 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68  rst column of th
f9b0: 65 20 69 6e 64 65 78 2e 20 20 5e 54 68 65 20 74  e index.  ^The t
f9c0: 68 69 72 64 20 0a 69 6e 74 65 67 65 72 20 69 73  hird .integer is
f9d0: 20 74 68 65 20 6e 75 6d 62 65 72 20 6e 75 6d 62   the number numb
f9e0: 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68  er of rows in th
f9f0: 65 20 69 6e 64 65 78 20 74 68 61 74 20 68 61 76  e index that hav
fa00: 65 20 0a 74 68 65 20 73 61 6d 65 20 76 61 6c 75  e .the same valu
fa10: 65 20 66 6f 72 20 74 68 65 20 66 69 72 73 74 20  e for the first 
fa20: 74 77 6f 20 63 6f 6c 75 6d 6e 73 2e 20 20 5e 54  two columns.  ^T
fa30: 68 65 20 4e 2d 74 68 20 69 6e 74 65 67 65 72 20  he N-th integer 
fa40: 28 66 6f 72 20 4e 3e 31 29 20 0a 69 73 20 74 68  (for N>1) .is th
fa50: 65 20 65 73 74 69 6d 61 74 65 64 20 61 76 65 72  e estimated aver
fa60: 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  age number of ro
fa70: 77 73 20 69 6e 20 0a 74 68 65 20 69 6e 64 65 78  ws in .the index
fa80: 20 77 68 69 63 68 20 68 61 76 65 20 74 68 65 20   which have the 
fa90: 73 61 6d 65 20 76 61 6c 75 65 20 66 6f 72 20 74  same value for t
faa0: 68 65 20 66 69 72 73 74 20 4e 2d 31 20 63 6f 6c  he first N-1 col
fab0: 75 6d 6e 73 2e 20 20 5e 46 6f 72 0a 61 20 4b 2d  umns.  ^For.a K-
fac0: 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 2c 20 74 68  column index, th
fad0: 65 72 65 20 77 69 6c 6c 20 62 65 20 4b 2b 31 20  ere will be K+1 
fae0: 69 6e 74 65 67 65 72 73 20 69 6e 20 74 68 65 20  integers in the 
faf0: 73 74 61 74 20 63 6f 6c 75 6d 6e 2e 20 20 5e 49  stat column.  ^I
fb00: 66 0a 74 68 65 20 69 6e 64 65 78 20 69 73 20 75  f.the index is u
fb10: 6e 69 71 75 65 2c 20 74 68 65 6e 20 74 68 65 20  nique, then the 
fb20: 6c 61 73 74 20 69 6e 74 65 67 65 72 20 77 69 6c  last integer wil
fb30: 6c 20 62 65 20 31 2e 0a 0a 3c 70 3e 5e 54 68 65  l be 1...<p>^The
fb40: 20 6c 69 73 74 20 6f 66 20 69 6e 74 65 67 65 72   list of integer
fb50: 73 20 69 6e 20 74 68 65 20 73 74 61 74 20 63 6f  s in the stat co
fb60: 6c 75 6d 6e 20 63 61 6e 20 6f 70 74 69 6f 6e 61  lumn can optiona
fb70: 6c 6c 79 20 62 65 20 66 6f 6c 6c 6f 77 65 64 0a  lly be followed.
fb80: 62 79 20 61 72 67 75 6d 65 6e 74 73 2c 20 65 61  by arguments, ea
fb90: 63 68 20 6f 66 20 77 68 69 63 68 20 69 73 20 61  ch of which is a
fba0: 20 73 65 71 75 65 6e 63 65 20 6f 66 20 6e 6f 6e   sequence of non
fbb0: 2d 73 70 61 63 65 20 63 68 61 72 61 63 74 65 72  -space character
fbc0: 73 2e 0a 5e 41 6c 6c 20 61 72 67 75 6d 65 6e 74  s..^All argument
fbd0: 73 20 61 72 65 20 70 72 65 63 65 64 65 64 20 62  s are preceded b
fbe0: 79 20 61 20 73 69 6e 67 6c 65 20 73 70 61 63 65  y a single space
fbf0: 2e 0a 5e 55 6e 72 65 63 6f 67 6e 69 7a 65 64 20  ..^Unrecognized 
fc00: 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 73 69  arguments are si
fc10: 6c 65 6e 74 6c 79 20 69 67 6e 6f 72 65 64 2e 0a  lently ignored..
fc20: 0a 3c 70 3e 5e 49 66 20 74 68 65 20 22 75 6e 6f  .<p>^If the "uno
fc30: 72 64 65 72 65 64 22 20 61 72 67 75 6d 65 6e 74  rdered" argument
fc40: 20 69 73 20 70 72 65 73 65 6e 74 2c 20 74 68 65   is present, the
fc50: 6e 20 74 68 65 20 71 75 65 72 79 20 70 6c 61 6e  n the query plan
fc60: 6e 65 72 20 61 73 73 75 6d 65 73 0a 74 68 61 74  ner assumes.that
fc70: 20 74 68 65 20 69 6e 64 65 78 20 69 73 20 75 6e   the index is un
fc80: 6f 72 64 65 72 65 64 20 61 6e 64 20 77 69 6c 6c  ordered and will
fc90: 20 6e 6f 74 20 75 73 65 20 74 68 65 20 69 6e 64   not use the ind
fca0: 65 78 20 66 6f 72 20 61 20 72 61 6e 67 65 20 71  ex for a range q
fcb0: 75 65 72 79 0a 6f 72 20 66 6f 72 20 73 6f 72 74  uery.or for sort
fcc0: 69 6e 67 2e 0a 0a 3c 70 3e 5e 54 68 65 20 22 73  ing...<p>^The "s
fcd0: 7a 3d 4e 4e 4e 22 20 61 72 67 75 6d 65 6e 74 20  z=NNN" argument 
fce0: 28 77 68 65 72 65 20 4e 4e 4e 20 72 65 70 72 65  (where NNN repre
fcf0: 73 65 6e 74 73 20 61 20 73 65 71 75 65 6e 63 65  sents a sequence
fd00: 20 6f 66 20 31 20 6f 72 20 6d 6f 72 65 20 64 69   of 1 or more di
fd10: 67 69 74 73 29 0a 6d 65 61 6e 73 20 74 68 61 74  gits).means that
fd20: 20 74 68 65 20 61 76 65 72 61 67 65 20 72 6f 77   the average row
fd30: 20 73 69 7a 65 20 6f 76 65 72 20 61 6c 6c 20 72   size over all r
fd40: 65 63 6f 72 64 73 20 6f 66 20 74 68 65 20 74 61  ecords of the ta
fd50: 62 6c 65 20 6f 72 0a 69 6e 64 65 78 20 69 73 20  ble or.index is 
fd60: 4e 4e 4e 20 62 79 74 65 73 20 70 65 72 20 72 6f  NNN bytes per ro
fd70: 77 2e 20 20 5e 54 68 65 20 53 51 4c 69 74 65 20  w.  ^The SQLite 
fd80: 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 6d 69  query planner mi
fd90: 67 68 74 20 75 73 65 20 74 68 65 0a 65 73 74 69  ght use the.esti
fda0: 6d 61 74 65 64 20 72 6f 77 20 73 69 7a 65 20 69  mated row size i
fdb0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 70 72 6f 76 69  nformation provi
fdc0: 64 65 64 20 62 79 20 74 68 65 20 22 73 7a 3d 4e  ded by the "sz=N
fdd0: 4e 4e 22 20 74 6f 6b 65 6e 0a 74 6f 20 68 65 6c  NN" token.to hel
fde0: 70 20 69 74 20 63 68 6f 6f 73 65 20 73 6d 61 6c  p it choose smal
fdf0: 6c 65 72 20 74 61 62 6c 65 73 20 61 6e 64 20 69  ler tables and i
fe00: 6e 64 65 78 65 73 20 74 68 61 74 20 72 65 71 75  ndexes that requ
fe10: 69 72 65 20 6c 65 73 73 20 64 69 73 6b 20 49 2f  ire less disk I/
fe20: 4f 2e 0a 0a 3c 70 3e 5e 28 54 68 65 20 70 72 65  O...<p>^(The pre
fe30: 73 65 6e 63 65 20 6f 66 20 74 68 65 20 22 6e 6f  sence of the "no
fe40: 73 6b 69 70 73 63 61 6e 22 20 74 6f 6b 65 6e 20  skipscan" token 
fe50: 6f 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74  on the sqlite_st
fe60: 61 74 31 2e 73 74 61 74 20 66 69 65 6c 64 0a 6f  at1.stat field.o
fe70: 66 20 61 6e 20 69 6e 64 65 78 20 70 72 65 76 65  f an index preve
fe80: 6e 74 73 20 74 68 61 74 20 69 6e 64 65 78 20 66  nts that index f
fe90: 72 6f 6d 20 62 65 69 6e 67 20 75 73 65 64 20 77  rom being used w
fea0: 69 74 68 20 74 68 65 0a 5b 73 6b 69 70 2d 73 63  ith the.[skip-sc
feb0: 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 5d  an optimization]
fec0: 2e 29 5e 0a 0a 3c 70 3e 4e 65 77 20 74 65 78 74  .)^..<p>New text
fed0: 20 74 6f 6b 65 6e 73 20 6d 61 79 20 62 65 20 61   tokens may be a
fee0: 64 64 65 64 20 74 6f 20 74 68 65 20 65 6e 64 20  dded to the end 
fef0: 6f 66 20 74 68 65 20 73 74 61 74 20 63 6f 6c 75  of the stat colu
ff00: 6d 6e 20 69 6e 20 66 75 74 75 72 65 0a 65 6e 68  mn in future.enh
ff10: 61 6e 63 65 6d 65 6e 74 73 20 74 6f 20 53 51 4c  ancements to SQL
ff20: 69 74 65 2e 20 20 46 6f 72 20 63 6f 6d 70 61 74  ite.  For compat
ff30: 69 62 69 6c 69 74 79 2c 20 75 6e 72 65 63 6f 67  ibility, unrecog
ff40: 6e 69 7a 65 64 20 74 6f 6b 65 6e 73 20 61 74 20  nized tokens at 
ff50: 74 68 65 20 65 6e 64 0a 6f 66 20 74 68 65 20 73  the end.of the s
ff60: 74 61 74 20 63 6f 6c 75 6d 6e 20 61 72 65 20 73  tat column are s
ff70: 69 6c 65 6e 74 6c 79 20 69 67 6e 6f 72 65 64 2e  ilently ignored.
ff80: 0a 0a 3c 70 3e 5e 28 49 66 20 74 68 65 20 73 71  ..<p>^(If the sq
ff90: 6c 69 74 65 5f 73 74 61 74 31 2e 69 64 78 20 63  lite_stat1.idx c
ffa0: 6f 6c 75 6d 6e 20 69 73 20 4e 55 4c 4c 2c 20 74  olumn is NULL, t
ffb0: 68 65 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73  hen the sqlite_s
ffc0: 74 61 74 31 2e 73 74 61 74 0a 63 6f 6c 75 6d 6e  tat1.stat.column
ffd0: 20 63 6f 6e 74 61 69 6e 73 20 61 20 73 69 6e 67   contains a sing
ffe0: 6c 65 20 69 6e 74 65 67 65 72 20 77 68 69 63 68  le integer which
fff0: 20 69 73 20 74 68 65 20 61 70 70 72 6f 78 69 6d   is the approxim
10000 61 74 65 20 6e 75 6d 62 65 72 20 6f 66 0a 72 6f  ate number of.ro
10010 77 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20  ws in the table 
10020 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 73 71  identified by sq
10030 6c 69 74 65 5f 73 74 61 74 31 2e 74 62 6c 2e 29  lite_stat1.tbl.)
10040 5e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  ^..<tcl>hd_fragm
10050 65 6e 74 20 73 74 61 74 32 74 61 62 20 7b 73 71  ent stat2tab {sq
10060 6c 69 74 65 5f 73 74 61 74 32 7d 3c 2f 74 63 6c  lite_stat2}</tcl
10070 3e 0a 3c 68 33 3e 54 68 65 20 73 71 6c 69 74 65  >.<h3>The sqlite
10080 5f 73 74 61 74 32 20 74 61 62 6c 65 3c 2f 68 33  _stat2 table</h3
10090 3e 0a 0a 3c 70 3e 54 68 65 20 73 71 6c 69 74 65  >..<p>The sqlite
100a0 5f 73 74 61 74 32 20 69 73 20 6f 6e 6c 79 20 63  _stat2 is only c
100b0 72 65 61 74 65 64 20 61 6e 64 20 69 73 20 6f 6e  reated and is on
100c0 6c 79 20 75 73 65 64 20 69 66 20 53 51 4c 69 74  ly used if SQLit
100d0 65 20 69 73 20 63 6f 6d 70 69 6c 65 64 0a 77 69  e is compiled.wi
100e0 74 68 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  th SQLITE_ENABLE
100f0 5f 53 54 41 54 32 20 61 6e 64 20 69 66 20 74 68  _STAT2 and if th
10100 65 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e  e SQLite version
10110 20 6e 75 6d 62 65 72 20 69 73 20 62 65 74 77 65   number is betwe
10120 65 6e 0a 33 2e 36 2e 31 38 20 61 6e 64 20 33 2e  en.3.6.18 and 3.
10130 37 2e 38 2e 20 20 54 68 65 20 73 71 6c 69 74 65  7.8.  The sqlite
10140 5f 73 74 61 74 32 20 74 61 62 6c 65 20 69 73 20  _stat2 table is 
10150 6e 65 69 74 68 65 72 20 72 65 61 64 20 6e 6f 72  neither read nor
10160 20 77 72 69 74 74 65 6e 20 62 79 20 61 6e 79 0a   written by any.
10170 76 65 72 73 69 6f 6e 20 6f 66 20 53 51 4c 69 74  version of SQLit
10180 65 20 62 65 66 6f 72 65 20 33 2e 36 2e 31 38 20  e before 3.6.18 
10190 6e 6f 72 20 61 66 74 65 72 20 33 2e 37 2e 38 2e  nor after 3.7.8.
101a0 0a 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74  .The sqlite_stat
101b0 32 20 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e 73  2 table contains
101c0 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
101d0 72 6d 61 74 69 6f 6e 0a 61 62 6f 75 74 20 74 68  rmation.about th
101e0 65 20 64 69 73 74 72 69 62 75 74 69 6f 6e 20 6f  e distribution o
101f0 66 20 6b 65 79 73 20 77 69 74 68 69 6e 20 61 6e  f keys within an
10200 20 69 6e 64 65 78 2e 0a 54 68 65 20 73 63 68 65   index..The sche
10210 6d 61 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65  ma of the sqlite
10220 5f 73 74 61 74 32 20 74 61 62 6c 65 20 69 73 20  _stat2 table is 
10230 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 62 6c  as follows:..<bl
10240 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 43  ockquote><pre>.C
10250 52 45 41 54 45 20 54 41 42 4c 45 20 73 71 6c 69  REATE TABLE sqli
10260 74 65 5f 73 74 61 74 32 28 74 62 6c 2c 69 64 78  te_stat2(tbl,idx
10270 2c 73 61 6d 70 6c 65 6e 6f 2c 73 61 6d 70 6c 65  ,sampleno,sample
10280 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b  );.</pre></block
10290 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 73  quote>..<p>The s
102a0 71 6c 69 74 65 5f 73 74 61 74 32 2e 69 64 78 20  qlite_stat2.idx 
102b0 63 6f 6c 75 6d 6e 20 61 6e 64 20 74 68 65 20 73  column and the s
102c0 71 6c 69 74 65 5f 73 74 61 74 32 2e 74 62 6c 20  qlite_stat2.tbl 
102d0 63 6f 6c 75 6d 6e 20 69 6e 20 65 61 63 68 20 0a  column in each .
102e0 72 6f 77 20 6f 66 20 74 68 65 20 73 71 6c 69 74  row of the sqlit
102f0 65 5f 73 74 61 74 32 20 74 61 62 6c 65 20 69 64  e_stat2 table id
10300 65 6e 74 69 66 79 20 61 6e 20 69 6e 64 65 78 20  entify an index 
10310 64 65 73 63 72 69 62 65 64 20 62 79 20 74 68 61  described by tha
10320 74 20 72 6f 77 2e 0a 54 68 65 72 65 20 61 72 65  t row..There are
10330 20 75 73 75 61 6c 6c 79 20 31 30 20 72 6f 77 73   usually 10 rows
10340 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73   in the sqlite_s
10350 74 61 74 32 0a 74 61 62 6c 65 20 66 6f 72 20 65  tat2.table for e
10360 61 63 68 20 69 6e 64 65 78 2e 0a 0a 3c 70 3e 54  ach index...<p>T
10370 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 32 20  he sqlite_stat2 
10380 65 6e 74 72 69 65 73 20 66 6f 72 20 61 6e 20 69  entries for an i
10390 6e 64 65 78 20 74 68 61 74 20 68 61 76 65 20 73  ndex that have s
103a0 71 6c 69 74 65 5f 73 74 61 74 32 2e 73 61 6d 70  qlite_stat2.samp
103b0 6c 65 6e 6f 0a 62 65 74 77 65 65 6e 20 30 20 61  leno.between 0 a
103c0 6e 64 20 39 20 69 6e 63 6c 75 73 69 76 65 20 61  nd 9 inclusive a
103d0 72 65 20 73 61 6d 70 6c 65 73 20 6f 66 20 74 68  re samples of th
103e0 65 20 6c 65 66 74 2d 6d 6f 73 74 20 6b 65 79 20  e left-most key 
103f0 76 61 6c 75 65 20 69 6e 20 74 68 65 0a 69 6e 64  value in the.ind
10400 65 78 20 74 61 6b 65 6e 20 61 74 20 65 76 65 6e  ex taken at even
10410 6c 79 20 73 70 61 63 65 64 20 70 6f 69 6e 74 73  ly spaced points
10420 20 61 6c 6f 6e 67 20 74 68 65 20 69 6e 64 65 78   along the index
10430 2e 0a 4c 65 74 20 43 20 62 65 20 74 68 65 20 6e  ..Let C be the n
10440 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e  umber of rows in
10450 20 74 68 65 20 69 6e 64 65 78 2e 0a 54 68 65 6e   the index..Then
10460 20 74 68 65 20 73 61 6d 70 6c 65 64 20 72 6f 77   the sampled row
10470 73 20 61 72 65 20 67 69 76 65 6e 20 62 79 0a 0a  s are given by..
10480 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 20  <blockquote>.   
10490 20 20 72 6f 77 6e 75 6d 62 65 72 20 3d 20 28 69    rownumber = (i
104a0 2a 43 2a 32 20 2b 20 43 29 2f 32 30 0a 3c 2f 62  *C*2 + C)/20.</b
104b0 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54  lockquote>..<p>T
104c0 68 65 20 76 61 72 69 61 62 6c 65 20 69 20 69 6e  he variable i in
104d0 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 65 78   the previous ex
104e0 70 72 65 73 73 69 6f 6e 20 76 61 72 69 65 73 20  pression varies 
104f0 62 65 74 77 65 65 6e 20 30 20 61 6e 64 20 39 2e  between 0 and 9.
10500 0a 43 6f 6e 63 65 70 74 75 61 6c 6c 79 2c 20 74  .Conceptually, t
10510 68 65 20 69 6e 64 65 78 20 73 70 61 63 65 20 69  he index space i
10520 73 20 64 69 76 69 64 65 64 20 69 6e 74 6f 0a 31  s divided into.1
10530 30 20 75 6e 69 66 6f 72 6d 20 62 75 63 6b 65 74  0 uniform bucket
10540 73 20 61 6e 64 20 74 68 65 20 73 61 6d 70 6c 65  s and the sample
10550 73 20 61 72 65 20 74 68 65 20 6d 69 64 64 6c 65  s are the middle
10560 20 72 6f 77 20 66 72 6f 6d 20 65 61 63 68 20 62   row from each b
10570 75 63 6b 65 74 2e 0a 0a 3c 70 3e 54 68 65 20 66  ucket...<p>The f
10580 6f 72 6d 61 74 20 66 6f 72 20 73 71 6c 69 74 65  ormat for sqlite
10590 5f 73 74 61 74 32 20 69 73 20 72 65 63 6f 72 64  _stat2 is record
105a0 65 64 20 68 65 72 65 20 66 6f 72 20 6c 65 67 61  ed here for lega
105b0 63 79 20 72 65 66 65 72 65 6e 63 65 2e 20 20 0a  cy reference.  .
105c0 52 65 63 65 6e 74 20 76 65 72 73 69 6f 6e 73 20  Recent versions 
105d0 6f 66 20 53 51 4c 69 74 65 20 6e 6f 20 6c 6f 6e  of SQLite no lon
105e0 67 65 72 20 73 75 70 70 6f 72 74 20 73 71 6c 69  ger support sqli
105f0 74 65 5f 73 74 61 74 32 20 61 6e 64 20 74 68 65  te_stat2 and the
10600 0a 73 71 6c 69 74 65 5f 73 74 61 74 32 20 74 61  .sqlite_stat2 ta
10610 62 6c 65 2c 20 69 74 20 69 73 20 65 78 69 73 74  ble, it is exist
10620 73 2c 20 69 73 20 73 69 6d 70 6c 79 20 69 67 6e  s, is simply ign
10630 6f 72 65 64 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  ored...<tcl>hd_f
10640 72 61 67 6d 65 6e 74 20 73 74 61 74 33 74 61 62  ragment stat3tab
10650 20 7b 73 71 6c 69 74 65 5f 73 74 61 74 33 7d 20   {sqlite_stat3} 
10660 53 51 4c 49 54 45 5f 53 54 41 54 33 3c 2f 74 63  SQLITE_STAT3</tc
10670 6c 3e 0a 3c 68 33 3e 54 68 65 20 73 71 6c 69 74  l>.<h3>The sqlit
10680 65 5f 73 74 61 74 33 20 74 61 62 6c 65 3c 2f 68  e_stat3 table</h
10690 33 3e 0a 0a 3c 70 3e 54 68 65 20 73 71 6c 69 74  3>..<p>The sqlit
106a0 65 5f 73 74 61 74 33 20 69 73 20 6f 6e 6c 79 20  e_stat3 is only 
106b0 75 73 65 64 20 69 66 20 53 51 4c 69 74 65 20 69  used if SQLite i
106c0 73 20 63 6f 6d 70 69 6c 65 64 0a 77 69 74 68 20  s compiled.with 
106d0 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53  [SQLITE_ENABLE_S
106e0 54 41 54 33 5d 20 6f 72 20 5b 53 51 4c 49 54 45  TAT3] or [SQLITE
106f0 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 5d 0a 61  _ENABLE_STAT4].a
10700 6e 64 20 69 66 20 74 68 65 20 53 51 4c 69 74 65  nd if the SQLite
10710 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20   version number 
10720 69 73 20 33 2e 37 2e 39 20 6f 72 20 67 72 65 61  is 3.7.9 or grea
10730 74 65 72 2e 0a 54 68 65 20 73 71 6c 69 74 65 5f  ter..The sqlite_
10740 73 74 61 74 33 20 74 61 62 6c 65 20 69 73 20 6e  stat3 table is n
10750 65 69 74 68 65 72 20 72 65 61 64 20 6e 6f 72 20  either read nor 
10760 77 72 69 74 74 65 6e 20 62 79 20 61 6e 79 0a 76  written by any.v
10770 65 72 73 69 6f 6e 20 6f 66 20 53 51 4c 69 74 65  ersion of SQLite
10780 20 62 65 66 6f 72 65 20 33 2e 37 2e 39 2e 0a 49   before 3.7.9..I
10790 66 20 74 68 65 20 5b 53 51 4c 49 54 45 5f 45 4e  f the [SQLITE_EN
107a0 41 42 4c 45 5f 53 54 41 54 34 5d 20 63 6f 6d 70  ABLE_STAT4] comp
107b0 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20  ile-time option 
107c0 69 73 20 75 73 65 64 20 61 6e 64 20 74 68 65 0a  is used and the.
107d0 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20 6e  SQLite version n
107e0 75 6d 62 65 72 20 69 73 20 33 2e 38 2e 31 20 6f  umber is 3.8.1 o
107f0 72 20 67 72 65 61 74 65 72 2c 20 74 68 65 6e 20  r greater, then 
10800 73 71 6c 69 74 65 5f 73 74 61 74 33 20 6d 69 67  sqlite_stat3 mig
10810 68 74 0a 62 65 20 72 65 61 64 20 62 75 74 20 6e  ht.be read but n
10820 6f 74 20 77 72 69 74 74 65 6e 2e 0a 54 68 65 20  ot written..The 
10830 73 71 6c 69 74 65 5f 73 74 61 74 33 20 74 61 62  sqlite_stat3 tab
10840 6c 65 20 63 6f 6e 74 61 69 6e 73 20 61 64 64 69  le contains addi
10850 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
10860 6f 6e 0a 61 62 6f 75 74 20 74 68 65 20 64 69 73  on.about the dis
10870 74 72 69 62 75 74 69 6f 6e 20 6f 66 20 6b 65 79  tribution of key
10880 73 20 77 69 74 68 69 6e 20 61 6e 20 69 6e 64 65  s within an inde
10890 78 2c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74  x, information t
108a0 68 61 74 20 74 68 65 0a 71 75 65 72 79 20 70 6c  hat the.query pl
108b0 61 6e 6e 65 72 20 63 61 6e 20 75 73 65 20 74 6f  anner can use to
108c0 20 64 65 76 69 73 65 20 62 65 74 74 65 72 20 61   devise better a
108d0 6e 64 20 66 61 73 74 65 72 20 71 75 65 72 79 20  nd faster query 
108e0 61 6c 67 6f 72 69 74 68 6d 73 2e 0a 5e 28 54 68  algorithms..^(Th
108f0 65 20 73 63 68 65 6d 61 20 6f 66 20 74 68 65 20  e schema of the 
10900 73 71 6c 69 74 65 5f 73 74 61 74 33 20 74 61 62  sqlite_stat3 tab
10910 6c 65 20 69 73 20 61 73 20 66 6f 6c 6c 6f 77 73  le is as follows
10920 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c  :..<blockquote><
10930 70 72 65 3e 0a 43 52 45 41 54 45 20 54 41 42 4c  pre>.CREATE TABL
10940 45 20 73 71 6c 69 74 65 5f 73 74 61 74 33 28 74  E sqlite_stat3(t
10950 62 6c 2c 69 64 78 2c 6e 45 71 2c 6e 4c 74 2c 6e  bl,idx,nEq,nLt,n
10960 44 4c 74 2c 73 61 6d 70 6c 65 29 3b 0a 3c 2f 70  DLt,sample);.</p
10970 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  re></blockquote>
10980 29 5e 0a 0a 3c 70 3e 54 68 65 72 65 20 61 72 65  )^..<p>There are
10990 20 75 73 75 61 6c 6c 79 20 6d 75 6c 74 69 70 6c   usually multipl
109a0 65 20 65 6e 74 72 69 65 73 20 69 6e 20 74 68 65  e entries in the
109b0 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20 74 61   sqlite_stat3 ta
109c0 62 6c 65 20 66 6f 72 20 65 61 63 68 20 69 6e 64  ble for each ind
109d0 65 78 2e 0a 5e 28 54 68 65 20 73 71 6c 69 74 65  ex..^(The sqlite
109e0 5f 73 74 61 74 33 2e 73 61 6d 70 6c 65 20 63 6f  _stat3.sample co
109f0 6c 75 6d 6e 20 68 6f 6c 64 73 20 74 68 65 20 76  lumn holds the v
10a00 61 6c 75 65 20 6f 66 20 74 68 65 20 6c 65 66 74  alue of the left
10a10 2d 6d 6f 73 74 20 66 69 65 6c 64 20 6f 66 20 61  -most field of a
10a20 6e 0a 69 6e 64 65 78 20 69 64 65 6e 74 69 66 69  n.index identifi
10a30 65 64 20 62 79 20 73 71 6c 69 74 65 5f 73 74 61  ed by sqlite_sta
10a40 74 33 2e 69 64 78 20 61 6e 64 20 73 71 6c 69 74  t3.idx and sqlit
10a50 65 5f 73 74 61 74 33 2e 74 62 6c 2e 29 5e 0a 5e  e_stat3.tbl.)^.^
10a60 28 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74  (The sqlite_stat
10a70 33 2e 6e 45 71 20 63 6f 6c 75 6d 6e 20 68 6f 6c  3.nEq column hol
10a80 64 73 20 74 68 65 20 61 70 70 72 6f 78 69 6d 61  ds the approxima
10a90 74 65 0a 6e 75 6d 62 65 72 20 6f 66 20 65 6e 74  te.number of ent
10aa0 72 69 65 73 20 69 6e 20 74 68 65 20 69 6e 64 65  ries in the inde
10ab0 78 20 77 68 6f 73 65 20 6c 65 66 74 2d 6d 6f 73  x whose left-mos
10ac0 74 20 63 6f 6c 75 6d 6e 20 65 78 61 63 74 6c 79  t column exactly
10ad0 20 6d 61 74 63 68 65 73 0a 74 68 65 20 73 61 6d   matches.the sam
10ae0 70 6c 65 2e 29 5e 0a 5e 28 54 68 65 20 73 71 6c  ple.)^.^(The sql
10af0 69 74 65 5f 73 74 61 74 33 2e 6e 4c 74 20 68 6f  ite_stat3.nLt ho
10b00 6c 64 73 20 74 68 65 20 61 70 70 72 6f 78 69 6d  lds the approxim
10b10 61 74 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 6e  ate number of en
10b20 74 72 69 65 73 20 69 6e 20 74 68 65 0a 69 6e 64  tries in the.ind
10b30 65 78 20 77 68 6f 73 65 20 6c 65 66 74 2d 6d 6f  ex whose left-mo
10b40 73 74 20 63 6f 6c 75 6d 6e 20 69 73 20 6c 65 73  st column is les
10b50 73 20 74 68 61 6e 20 74 68 65 20 73 61 6d 70 6c  s than the sampl
10b60 65 2e 29 5e 0a 5e 28 54 68 65 20 73 71 6c 69 74  e.)^.^(The sqlit
10b70 65 5f 73 74 61 74 33 2e 6e 44 4c 74 20 63 6f 6c  e_stat3.nDLt col
10b80 75 6d 6e 20 68 6f 6c 64 73 20 74 68 65 20 61 70  umn holds the ap
10b90 70 72 6f 78 69 6d 61 74 65 0a 6e 75 6d 62 65 72  proximate.number
10ba0 20 6f 66 20 64 69 73 74 69 6e 63 74 20 6c 65 66   of distinct lef
10bb0 74 2d 6d 6f 73 74 20 65 6e 74 72 69 65 73 20 69  t-most entries i
10bc0 6e 20 74 68 65 20 69 6e 64 65 78 20 74 68 61 74  n the index that
10bd0 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e 0a 74   are less than.t
10be0 68 65 20 73 61 6d 70 6c 65 2e 29 5e 0a 0a 3c 70  he sample.)^..<p
10bf0 3e 5e 54 68 65 72 65 20 63 61 6e 20 62 65 20 61  >^There can be a
10c00 6e 20 61 72 62 69 74 72 61 72 79 20 6e 75 6d 62  n arbitrary numb
10c10 65 72 20 6f 66 20 73 71 6c 69 74 65 5f 73 74 61  er of sqlite_sta
10c20 74 33 20 65 6e 74 72 69 65 73 20 70 65 72 20 69  t3 entries per i
10c30 6e 64 65 78 2e 0a 54 68 65 20 5b 41 4e 41 4c 59  ndex..The [ANALY
10c40 5a 45 5d 20 63 6f 6d 6d 61 6e 64 20 77 69 6c 6c  ZE] command will
10c50 20 74 79 70 69 63 61 6c 6c 79 20 67 65 6e 65 72   typically gener
10c60 61 74 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33  ate sqlite_stat3
10c70 20 74 61 62 6c 65 73 0a 74 68 61 74 20 63 6f 6e   tables.that con
10c80 74 61 69 6e 20 62 65 74 77 65 65 6e 20 31 30 20  tain between 10 
10c90 61 6e 64 20 34 30 20 73 61 6d 70 6c 65 73 20 74  and 40 samples t
10ca0 68 61 74 20 61 72 65 20 64 69 73 74 72 69 62 75  hat are distribu
10cb0 74 65 64 20 61 63 72 6f 73 73 0a 74 68 65 20 6b  ted across.the k
10cc0 65 79 20 73 70 61 63 65 20 61 6e 64 20 77 69 74  ey space and wit
10cd0 68 20 6c 61 72 67 65 20 6e 45 71 20 76 61 6c 75  h large nEq valu
10ce0 65 73 2e 0a 0a 3c 70 3e 5e 28 49 6e 20 61 20 77  es...<p>^(In a w
10cf0 65 6c 6c 2d 66 6f 72 6d 65 64 20 73 71 6c 69 74  ell-formed sqlit
10d00 65 5f 73 74 61 74 33 20 74 61 62 6c 65 2c 20 74  e_stat3 table, t
10d10 68 65 20 73 61 6d 70 6c 65 73 20 66 6f 72 20 61  he samples for a
10d20 6e 79 20 73 69 6e 67 6c 65 0a 69 6e 64 65 78 20  ny single.index 
10d30 6d 75 73 74 20 61 70 70 65 61 72 20 69 6e 20 74  must appear in t
10d40 68 65 20 73 61 6d 65 20 6f 72 64 65 72 20 74 68  he same order th
10d50 61 74 20 74 68 65 79 20 6f 63 63 75 72 20 69 6e  at they occur in
10d60 20 74 68 65 20 69 6e 64 65 78 2e 20 20 0a 49 6e   the index.  .In
10d70 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69 66   other words, if
10d80 20 74 68 65 20 65 6e 74 72 79 20 77 69 74 68 20   the entry with 
10d90 6c 65 66 74 2d 6d 6f 73 74 20 63 6f 6c 75 6d 6e  left-most column
10da0 20 53 31 20 69 73 20 65 61 72 6c 69 65 72 20 69   S1 is earlier i
10db0 6e 0a 74 68 65 20 69 6e 64 65 78 20 62 2d 74 72  n.the index b-tr
10dc0 65 65 20 74 68 61 6e 20 74 68 65 0a 65 6e 74 72  ee than the.entr
10dd0 79 20 77 69 74 68 20 6c 65 66 74 2d 6d 6f 73 74  y with left-most
10de0 20 63 6f 6c 75 6d 6e 20 53 32 2c 20 74 68 65 6e   column S2, then
10df0 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73   in the sqlite_s
10e00 74 61 74 33 20 74 61 62 6c 65 2c 20 0a 73 61 6d  tat3 table, .sam
10e10 70 6c 65 20 53 31 20 6d 75 73 74 20 68 61 76 65  ple S1 must have
10e20 20 61 20 73 6d 61 6c 6c 65 72 20 72 6f 77 69 64   a smaller rowid
10e30 20 74 68 61 6e 20 73 61 6d 70 6c 65 20 53 32 2e   than sample S2.
10e40 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  )^..<tcl>hd_frag
10e50 6d 65 6e 74 20 73 74 61 74 34 74 61 62 20 7b 73  ment stat4tab {s
10e60 71 6c 69 74 65 5f 73 74 61 74 34 7d 20 53 51 4c  qlite_stat4} SQL
10e70 49 54 45 5f 53 54 41 54 34 3c 2f 74 63 6c 3e 0a  ITE_STAT4</tcl>.
10e80 3c 68 33 3e 54 68 65 20 73 71 6c 69 74 65 5f 73  <h3>The sqlite_s
10e90 74 61 74 34 20 74 61 62 6c 65 3c 2f 68 33 3e 0a  tat4 table</h3>.
10ea0 0a 3c 70 3e 54 68 65 20 73 71 6c 69 74 65 5f 73  .<p>The sqlite_s
10eb0 74 61 74 34 20 69 73 20 6f 6e 6c 79 20 63 72 65  tat4 is only cre
10ec0 61 74 65 64 20 61 6e 64 20 69 73 20 6f 6e 6c 79  ated and is only
10ed0 20 75 73 65 64 20 69 66 20 53 51 4c 69 74 65 20   used if SQLite 
10ee0 69 73 20 63 6f 6d 70 69 6c 65 64 0a 77 69 74 68  is compiled.with
10ef0 20 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f   [SQLITE_ENABLE_
10f00 53 54 41 54 34 5d 20 61 6e 64 20 69 66 20 74 68  STAT4] and if th
10f10 65 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e  e SQLite version
10f20 20 6e 75 6d 62 65 72 20 69 73 0a 33 2e 38 2e 31   number is.3.8.1
10f30 20 6f 72 20 67 72 65 61 74 65 72 2e 20 20 54 68   or greater.  Th
10f40 65 20 73 71 6c 69 74 65 5f 73 74 61 74 34 20 74  e sqlite_stat4 t
10f50 61 62 6c 65 20 69 73 20 6e 65 69 74 68 65 72 20  able is neither 
10f60 72 65 61 64 20 6e 6f 72 20 77 72 69 74 74 65 6e  read nor written
10f70 20 62 79 20 61 6e 79 0a 76 65 72 73 69 6f 6e 20   by any.version 
10f80 6f 66 20 53 51 4c 69 74 65 20 62 65 66 6f 72 65  of SQLite before
10f90 20 33 2e 38 2e 31 2e 0a 54 68 65 20 73 71 6c 69   3.8.1..The sqli
10fa0 74 65 5f 73 74 61 74 34 20 74 61 62 6c 65 20 63  te_stat4 table c
10fb0 6f 6e 74 61 69 6e 73 20 61 64 64 69 74 69 6f 6e  ontains addition
10fc0 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 61  al information.a
10fd0 62 6f 75 74 20 74 68 65 20 64 69 73 74 72 69 62  bout the distrib
10fe0 75 74 69 6f 6e 20 6f 66 20 6b 65 79 73 20 77 69  ution of keys wi
10ff0 74 68 69 6e 20 61 6e 20 69 6e 64 65 78 20 6f 72  thin an index or
11000 20 74 68 65 20 64 69 73 74 72 69 62 75 74 69 6f   the distributio
11010 6e 20 6f 66 0a 6b 65 79 73 20 69 6e 20 74 68 65  n of.keys in the
11020 20 70 72 69 6d 61 72 79 20 6b 65 79 20 6f 66 20   primary key of 
11030 61 20 5b 57 49 54 48 4f 55 54 20 52 4f 57 49 44  a [WITHOUT ROWID
11040 5d 20 74 61 62 6c 65 2e 0a 54 68 65 20 71 75 65  ] table..The que
11050 72 79 20 70 6c 61 6e 6e 65 72 20 63 61 6e 20 73  ry planner can s
11060 6f 6d 65 74 69 6d 65 73 20 75 73 65 20 74 68 65  ometimes use the
11070 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
11080 72 6d 61 74 69 6f 6e 20 69 6e 0a 74 68 65 20 73  rmation in.the s
11090 71 6c 69 74 65 5f 73 74 61 74 34 20 74 61 62 6c  qlite_stat4 tabl
110a0 65 20 74 6f 20 64 65 76 69 73 65 20 62 65 74 74  e to devise bett
110b0 65 72 20 61 6e 64 20 66 61 73 74 65 72 20 71 75  er and faster qu
110c0 65 72 79 20 61 6c 67 6f 72 69 74 68 6d 73 2e 0a  ery algorithms..
110d0 5e 28 54 68 65 20 73 63 68 65 6d 61 20 6f 66 20  ^(The schema of 
110e0 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 34  the sqlite_stat4
110f0 20 74 61 62 6c 65 20 69 73 20 61 73 20 66 6f 6c   table is as fol
11100 6c 6f 77 73 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  lows:..<blockquo
11110 74 65 3e 3c 70 72 65 3e 0a 43 52 45 41 54 45 20  te><pre>.CREATE 
11120 54 41 42 4c 45 20 73 71 6c 69 74 65 5f 73 74 61  TABLE sqlite_sta
11130 74 34 28 74 62 6c 2c 69 64 78 2c 6e 45 71 2c 6e  t4(tbl,idx,nEq,n
11140 4c 74 2c 6e 44 4c 74 2c 73 61 6d 70 6c 65 29 3b  Lt,nDLt,sample);
11150 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75  .</pre></blockqu
11160 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 54 68 65 72 65  ote>)^..<p>There
11170 20 61 72 65 20 74 79 70 69 63 61 6c 6c 79 20 62   are typically b
11180 65 74 77 65 65 6e 20 31 30 20 74 6f 20 34 30 20  etween 10 to 40 
11190 65 6e 74 72 69 65 73 20 69 6e 20 74 68 65 20 73  entries in the s
111a0 71 6c 69 74 65 5f 73 74 61 74 34 20 74 61 62 6c  qlite_stat4 tabl
111b0 65 20 66 6f 72 0a 65 61 63 68 20 69 6e 64 65 78  e for.each index
111c0 20 66 6f 72 20 77 68 69 63 68 20 73 74 61 74 69   for which stati
111d0 73 74 69 63 73 20 61 72 65 20 61 76 61 69 6c 61  stics are availa
111e0 62 6c 65 2c 20 68 6f 77 65 76 65 72 20 74 68 65  ble, however the
111f0 73 65 20 6c 69 6d 69 74 73 20 61 72 65 0a 6e 6f  se limits are.no
11200 74 20 68 61 72 64 20 62 6f 75 6e 64 73 2e 0a 54  t hard bounds..T
11210 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20 74  he meanings of t
11220 68 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  he columns in th
11230 65 20 73 71 6c 69 74 65 5f 73 74 61 74 34 20 74  e sqlite_stat4 t
11240 61 62 6c 65 20 61 72 65 20 61 73 20 66 6f 6c 6c  able are as foll
11250 6f 77 73 3a 0a 0a 3c 63 65 6e 74 65 72 3e 0a 3c  ows:..<center>.<
11260 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 22 30 22  table border="0"
11270 20 77 69 64 74 68 3d 22 31 30 30 25 22 20 63 65   width="100%" ce
11280 6c 6c 70 61 64 64 69 6e 67 3d 22 31 30 22 3e 0a  llpadding="10">.
11290 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 22  <tr><td valign="
112a0 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67 68  top" align="righ
112b0 74 22 3e 74 62 6c 3a 3c 2f 74 64 3e 0a 20 20 20  t">tbl:</td>.   
112c0 20 3c 74 64 3e 5e 28 54 68 65 20 73 71 6c 69 74   <td>^(The sqlit
112d0 65 5f 73 74 61 74 34 2e 74 62 6c 20 63 6f 6c 75  e_stat4.tbl colu
112e0 6d 6e 20 68 6f 6c 64 73 20 6e 61 6d 65 20 6f 66  mn holds name of
112f0 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20   the table that 
11300 6f 77 6e 73 0a 20 20 20 20 74 68 65 20 69 6e 64  owns.    the ind
11310 65 78 20 74 68 61 74 20 74 68 65 20 72 6f 77 20  ex that the row 
11320 64 65 73 63 72 69 62 65 73 29 5e 0a 0a 3c 74 72  describes)^..<tr
11330 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70  ><td valign="top
11340 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e  " align="right">
11350 69 64 78 3a 3c 2f 74 64 3e 0a 20 20 20 20 3c 74  idx:</td>.    <t
11360 64 3e 5e 28 54 68 65 20 73 71 6c 69 74 65 5f 73  d>^(The sqlite_s
11370 74 61 74 34 2e 69 64 78 20 63 6f 6c 75 6d 6e 20  tat4.idx column 
11380 68 6f 6c 64 73 20 6e 61 6d 65 20 6f 66 20 74 68  holds name of th
11390 65 20 69 6e 64 65 78 20 74 68 61 74 20 74 68 65  e index that the
113a0 0a 20 20 20 20 72 6f 77 20 64 65 73 63 72 69 62  .    row describ
113b0 65 73 2c 20 6f 72 20 69 6e 20 74 68 65 20 63 61  es, or in the ca
113c0 73 65 20 6f 66 0a 20 20 20 20 61 6e 20 73 71 6c  se of.    an sql
113d0 69 74 65 5f 73 74 61 74 34 20 65 6e 74 72 79 20  ite_stat4 entry 
113e0 66 6f 72 20 61 20 5b 57 49 54 48 4f 55 54 20 52  for a [WITHOUT R
113f0 4f 57 49 44 5d 20 74 61 62 6c 65 2c 20 74 68 65  OWID] table, the
11400 0a 20 20 20 20 6e 61 6d 65 20 6f 66 20 74 68 65  .    name of the
11410 20 74 61 62 6c 65 20 69 74 73 65 6c 66 2e 29 5e   table itself.)^
11420 0a 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  ..<tr><td valign
11430 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69  ="top" align="ri
11440 67 68 74 22 3e 73 61 6d 70 6c 65 3a 3c 2f 74 64  ght">sample:</td
11450 3e 0a 20 20 20 20 3c 74 64 3e 5e 28 54 68 65 20  >.    <td>^(The 
11460 73 71 6c 69 74 65 5f 73 74 61 74 34 2e 73 61 6d  sqlite_stat4.sam
11470 70 6c 65 20 63 6f 6c 75 6d 6e 20 68 6f 6c 64 73  ple column holds
11480 20 61 20 42 4c 4f 42 0a 20 20 20 20 69 6e 20 74   a BLOB.    in t
11490 68 65 20 5b 72 65 63 6f 72 64 20 66 6f 72 6d 61  he [record forma
114a0 74 5d 20 74 68 61 74 20 65 6e 63 6f 64 65 73 20  t] that encodes 
114b0 74 68 65 20 69 6e 64 65 78 65 64 20 63 6f 6c 75  the indexed colu
114c0 6d 6e 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 0a  mns followed by.
114d0 20 20 20 20 74 68 65 20 72 6f 77 69 64 20 66 6f      the rowid fo
114e0 72 20 61 20 72 6f 77 69 64 20 74 61 62 6c 65 20  r a rowid table 
114f0 6f 72 20 62 79 20 74 68 65 20 63 6f 6c 75 6d 6e  or by the column
11500 73 20 6f 66 20 74 68 65 20 70 72 69 6d 61 72 79  s of the primary
11510 20 6b 65 79 20 0a 20 20 20 20 66 6f 72 20 61 20   key .    for a 
11520 57 49 54 48 4f 55 54 20 52 4f 57 49 44 20 74 61  WITHOUT ROWID ta
11530 62 6c 65 2e 29 5e 0a 20 20 20 20 5e 28 54 68 65  ble.)^.    ^(The
11540 20 73 71 6c 69 74 65 5f 73 74 61 74 34 2e 73 61   sqlite_stat4.sa
11550 6d 70 6c 65 20 42 4c 4f 42 20 66 6f 72 20 74 68  mple BLOB for th
11560 65 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44 20  e WITHOUT ROWID 
11570 74 61 62 6c 65 20 69 74 73 65 6c 66 20 0a 20 20  table itself .  
11580 20 20 63 6f 6e 74 61 69 6e 73 20 6a 75 73 74 20    contains just 
11590 74 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74  the columns of t
115a0 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79 2e 29  he primary key.)
115b0 5e 0a 20 20 20 20 4c 65 74 20 74 68 65 20 6e 75  ^.    Let the nu
115c0 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
115d0 65 6e 63 6f 64 65 64 20 62 79 20 74 68 65 20 73  encoded by the s
115e0 71 6c 69 74 65 5f 73 74 61 74 34 2e 73 61 6d 70  qlite_stat4.samp
115f0 6c 65 20 62 6c 6f 62 20 62 65 20 4e 2e 0a 20 20  le blob be N..  
11600 20 20 5e 46 6f 72 20 69 6e 64 65 78 65 73 20 6f    ^For indexes o
11610 6e 20 61 6e 20 6f 72 64 69 6e 61 72 79 20 72 6f  n an ordinary ro
11620 77 69 64 20 74 61 62 6c 65 2c 20 4e 20 77 69 6c  wid table, N wil
11630 6c 20 62 65 20 6f 6e 65 20 6d 6f 72 65 20 74 68  l be one more th
11640 61 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 0a 20  an the number . 
11650 20 20 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e     of columns in
11660 64 65 78 65 64 2e 0a 20 20 20 20 5e 46 6f 72 20  dexed..    ^For 
11670 69 6e 64 65 78 65 73 20 6f 6e 20 57 49 54 48 4f  indexes on WITHO
11680 55 54 20 52 4f 57 49 44 20 74 61 62 6c 65 73 2c  UT ROWID tables,
11690 20 4e 20 77 69 6c 6c 20 62 65 20 74 68 65 20 6e   N will be the n
116a0 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
116b0 0a 20 20 20 20 69 6e 64 65 78 65 64 20 70 6c 75  .    indexed plu
116c0 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
116d0 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 70  columns in the p
116e0 72 69 6d 61 72 79 20 6b 65 79 2e 0a 20 20 20 20  rimary key..    
116f0 5e 46 6f 72 20 61 20 57 49 54 48 4f 55 54 20 52  ^For a WITHOUT R
11700 4f 57 49 44 20 74 61 62 6c 65 2c 20 4e 20 77 69  OWID table, N wi
11710 6c 6c 20 62 65 20 74 68 65 20 6e 75 6d 62 65 72  ll be the number
11720 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
11730 68 65 0a 20 20 20 20 70 72 69 6d 61 72 79 20 6b  he.    primary k
11740 65 79 2e 0a 0a 3c 74 72 3e 3c 74 64 20 76 61 6c  ey...<tr><td val
11750 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d  ign="top" align=
11760 22 72 69 67 68 74 22 3e 6e 45 71 3a 3c 2f 74 64  "right">nEq:</td
11770 3e 0a 20 20 20 20 3c 74 64 3e 5e 28 54 68 65 20  >.    <td>^(The 
11780 73 71 6c 69 74 65 5f 73 74 61 74 34 2e 6e 45 71  sqlite_stat4.nEq
11790 20 63 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 61 20   column holds a 
117a0 6c 69 73 74 20 6f 66 20 4e 20 69 6e 74 65 67 65  list of N intege
117b0 72 73 20 77 68 65 72 65 20 0a 20 20 20 20 74 68  rs where .    th
117c0 65 20 4b 2d 74 68 20 69 6e 74 65 67 65 72 20 69  e K-th integer i
117d0 73 20 74 68 65 20 61 70 70 72 6f 78 69 6d 61 74  s the approximat
117e0 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72  e number of entr
117f0 69 65 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78  ies in the index
11800 0a 20 20 20 20 77 68 6f 73 65 20 6c 65 66 74 2d  .    whose left-
11810 6d 6f 73 74 20 4b 20 63 6f 6c 75 6d 6e 73 20 65  most K columns e
11820 78 61 63 74 6c 79 20 6d 61 74 63 68 20 74 68 65  xactly match the
11830 20 4b 20 6c 65 66 74 2d 6d 6f 73 74 20 63 6f 6c   K left-most col
11840 75 6d 6e 73 0a 20 20 20 20 6f 66 20 74 68 65 20  umns.    of the 
11850 73 61 6d 70 6c 65 2e 29 5e 0a 0a 3c 74 72 3e 3c  sample.)^..<tr><
11860 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20  td valign="top" 
11870 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e 6e 4c  align="right">nL
11880 74 3a 3c 2f 74 64 3e 0a 20 20 20 20 3c 74 64 3e  t:</td>.    <td>
11890 5e 28 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61  ^(The sqlite_sta
118a0 74 34 2e 6e 4c 74 20 63 6f 6c 75 6d 6e 20 68 6f  t4.nLt column ho
118b0 6c 64 73 20 61 20 6c 69 73 74 20 6f 66 20 4e 20  lds a list of N 
118c0 69 6e 74 65 67 65 72 73 20 77 68 65 72 65 0a 20  integers where. 
118d0 20 20 20 74 68 65 20 4b 2d 74 68 20 69 6e 74 65     the K-th inte
118e0 67 65 72 20 69 73 20 74 68 65 20 61 70 70 72 6f  ger is the appro
118f0 78 69 6d 61 74 65 20 6e 75 6d 62 65 72 20 6f 66  ximate number of
11900 20 65 6e 74 72 69 65 73 20 69 6e 20 74 68 65 0a   entries in the.
11910 20 20 20 20 69 6e 64 65 78 20 77 68 6f 73 65 20      index whose 
11920 4b 20 6c 65 66 74 2d 6d 6f 73 74 20 63 6f 6c 75  K left-most colu
11930 6d 6e 73 20 61 72 65 20 63 6f 6c 6c 65 63 74 69  mns are collecti
11940 76 65 6c 79 20 6c 65 73 73 20 74 68 61 6e 20 74  vely less than t
11950 68 65 20 0a 20 20 20 20 4b 20 6c 65 66 74 2d 6d  he .    K left-m
11960 6f 73 74 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74  ost columns of t
11970 68 65 20 73 61 6d 70 6c 65 2e 29 5e 0a 0a 3c 74  he sample.)^..<t
11980 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f  r><td valign="to
11990 70 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22  p" align="right"
119a0 3e 6e 44 4c 74 3a 3c 2f 74 64 3e 0a 20 20 20 20  >nDLt:</td>.    
119b0 3c 74 64 3e 5e 28 54 68 65 20 73 71 6c 69 74 65  <td>^(The sqlite
119c0 5f 73 74 61 74 34 2e 6e 44 4c 74 20 63 6f 6c 75  _stat4.nDLt colu
119d0 6d 6e 20 68 6f 6c 64 73 20 61 20 6c 69 73 74 20  mn holds a list 
119e0 6f 66 20 4e 20 69 6e 74 65 67 65 72 73 20 77 68  of N integers wh
119f0 65 72 65 0a 20 20 20 20 74 68 65 20 4b 2d 74 68  ere.    the K-th
11a00 20 69 6e 74 65 67 65 72 20 69 73 20 74 68 65 20   integer is the 
11a10 61 70 70 72 6f 78 69 6d 61 74 65 0a 20 20 20 20  approximate.    
11a20 6e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65  number of entrie
11a30 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20 74  s in the index t
11a40 68 61 74 20 61 72 65 20 64 69 73 74 69 6e 63 74  hat are distinct
11a50 20 69 6e 20 74 68 65 20 66 69 72 73 74 20 4b 20   in the first K 
11a60 63 6f 6c 75 6d 6e 73 20 61 6e 64 0a 20 20 20 20  columns and.    
11a70 77 68 65 72 65 20 74 68 65 20 6c 65 66 74 2d 6d  where the left-m
11a80 6f 73 74 20 4b 20 63 6f 6c 75 6d 6e 73 20 61 72  ost K columns ar
11a90 65 20 63 6f 6c 6c 65 63 74 69 76 65 6c 79 20 6c  e collectively l
11aa0 65 73 73 20 74 68 61 6e 20 74 68 65 20 6c 65 66  ess than the lef
11ab0 74 2d 6d 6f 73 74 0a 20 20 20 20 4b 20 63 6f 6c  t-most.    K col
11ac0 75 6d 6e 73 20 6f 66 20 74 68 65 20 73 61 6d 70  umns of the samp
11ad0 6c 65 2e 29 5e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c  le.)^.</table>.<
11ae0 2f 63 65 6e 74 65 72 3e 0a 0a 3c 70 3e 54 68 65  /center>..<p>The
11af0 20 73 71 6c 69 74 65 5f 73 74 61 74 34 20 69 73   sqlite_stat4 is
11b00 20 61 20 67 65 6e 65 72 61 6c 69 7a 61 74 69 6f   a generalizatio
11b10 6e 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 5f  n of the sqlite_
11b20 73 74 61 74 33 20 74 61 62 6c 65 2e 20 20 54 68  stat3 table.  Th
11b30 65 0a 73 71 6c 69 74 65 5f 73 74 61 74 33 20 74  e.sqlite_stat3 t
11b40 61 62 6c 65 20 70 72 6f 76 69 64 65 73 20 69 6e  able provides in
11b50 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
11b60 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 63 6f  the left-most co
11b70 6c 75 6d 6e 20 6f 66 20 61 6e 0a 69 6e 64 65 78  lumn of an.index
11b80 20 77 68 65 72 65 61 73 20 74 68 65 20 73 71 6c   whereas the sql
11b90 69 74 65 5f 73 74 61 74 34 20 74 61 62 6c 65 20  ite_stat4 table 
11ba0 70 72 6f 76 69 64 65 73 20 69 6e 66 6f 72 6d 61  provides informa
11bb0 74 69 6f 6e 20 61 62 6f 75 74 20 61 6c 6c 20 63  tion about all c
11bc0 6f 6c 75 6d 6e 73 0a 6f 66 20 74 68 65 20 69 6e  olumns.of the in
11bd0 64 65 78 2e 0a 0a 3c 70 3e 5e 54 68 65 72 65 20  dex...<p>^There 
11be0 63 61 6e 20 62 65 20 61 6e 20 61 72 62 69 74 72  can be an arbitr
11bf0 61 72 79 20 6e 75 6d 62 65 72 20 6f 66 20 73 71  ary number of sq
11c00 6c 69 74 65 5f 73 74 61 74 34 20 65 6e 74 72 69  lite_stat4 entri
11c10 65 73 20 70 65 72 20 69 6e 64 65 78 2e 0a 54 68  es per index..Th
11c20 65 20 5b 41 4e 41 4c 59 5a 45 5d 20 63 6f 6d 6d  e [ANALYZE] comm
11c30 61 6e 64 20 77 69 6c 6c 20 74 79 70 69 63 61 6c  and will typical
11c40 6c 79 20 67 65 6e 65 72 61 74 65 20 73 71 6c 69  ly generate sqli
11c50 74 65 5f 73 74 61 74 34 20 74 61 62 6c 65 73 0a  te_stat4 tables.
11c60 74 68 61 74 20 63 6f 6e 74 61 69 6e 20 62 65 74  that contain bet
11c70 77 65 65 6e 20 31 30 20 61 6e 64 20 34 30 20 73  ween 10 and 40 s
11c80 61 6d 70 6c 65 73 20 74 68 61 74 20 61 72 65 20  amples that are 
11c90 64 69 73 74 72 69 62 75 74 65 64 20 61 63 72 6f  distributed acro
11ca0 73 73 0a 74 68 65 20 6b 65 79 20 73 70 61 63 65  ss.the key space
11cb0 20 61 6e 64 20 77 69 74 68 20 6c 61 72 67 65 20   and with large 
11cc0 6e 45 71 20 76 61 6c 75 65 73 2e 0a 0a 3c 70 3e  nEq values...<p>
11cd0 5e 28 49 6e 20 61 20 77 65 6c 6c 2d 66 6f 72 6d  ^(In a well-form
11ce0 65 64 20 73 71 6c 69 74 65 5f 73 74 61 74 34 20  ed sqlite_stat4 
11cf0 74 61 62 6c 65 2c 20 74 68 65 20 73 61 6d 70 6c  table, the sampl
11d00 65 73 20 66 6f 72 20 61 6e 79 20 73 69 6e 67 6c  es for any singl
11d10 65 0a 69 6e 64 65 78 20 6d 75 73 74 20 61 70 70  e.index must app
11d20 65 61 72 20 69 6e 20 74 68 65 20 73 61 6d 65 20  ear in the same 
11d30 6f 72 64 65 72 20 74 68 61 74 20 74 68 65 79 20  order that they 
11d40 6f 63 63 75 72 20 69 6e 20 74 68 65 20 69 6e 64  occur in the ind
11d50 65 78 2e 20 20 0a 49 6e 20 6f 74 68 65 72 20 77  ex.  .In other w
11d60 6f 72 64 73 2c 20 69 66 20 65 6e 74 72 79 20 53  ords, if entry S
11d70 31 20 69 73 20 65 61 72 6c 69 65 72 20 69 6e 20  1 is earlier in 
11d80 74 68 65 20 69 6e 64 65 78 20 62 2d 74 72 65 65  the index b-tree
11d90 20 74 68 61 6e 20 0a 65 6e 74 72 79 20 53 32 2c   than .entry S2,
11da0 20 74 68 65 6e 20 69 6e 20 74 68 65 20 73 71 6c   then in the sql
11db0 69 74 65 5f 73 74 61 74 34 20 74 61 62 6c 65 2c  ite_stat4 table,
11dc0 20 73 61 6d 70 6c 65 20 53 31 20 6d 75 73 74 20   sample S1 must 
11dd0 68 61 76 65 20 61 0a 73 6d 61 6c 6c 65 72 20 72  have a.smaller r
11de0 6f 77 69 64 20 74 68 61 6e 20 73 61 6d 70 6c 65  owid than sample
11df0 20 53 32 2e 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f   S2.)^..<tcl>hd_
11e00 66 72 61 67 6d 65 6e 74 20 72 6f 6c 6c 62 61 63  fragment rollbac
11e10 6b 6a 6f 75 72 6e 61 6c 20 7b 72 6f 6c 6c 62 61  kjournal {rollba
11e20 63 6b 20 6a 6f 75 72 6e 61 6c 20 66 6f 72 6d 61  ck journal forma
11e30 74 7d 3c 2f 74 63 6c 3e 0a 3c 68 31 3e 54 68 65  t}</tcl>.<h1>The
11e40 20 52 6f 6c 6c 62 61 63 6b 20 4a 6f 75 72 6e 61   Rollback Journa
11e50 6c 3c 2f 68 31 3e 0a 0a 3c 70 3e 54 68 65 20 72  l</h1>..<p>The r
11e60 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20  ollback journal 
11e70 69 73 20 61 20 66 69 6c 65 20 61 73 73 6f 63 69  is a file associ
11e80 61 74 65 64 20 77 69 74 68 20 65 61 63 68 20 53  ated with each S
11e90 51 4c 69 74 65 20 64 61 74 61 62 61 73 65 0a 66  QLite database.f
11ea0 69 6c 65 20 74 68 61 74 20 68 6f 6c 64 20 69 6e  ile that hold in
11eb0 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 74  formation used t
11ec0 6f 20 72 65 73 74 6f 72 65 20 74 68 65 20 64 61  o restore the da
11ed0 74 61 62 61 73 65 20 66 69 6c 65 20 74 6f 20 69  tabase file to i
11ee0 74 73 20 69 6e 69 74 69 61 6c 0a 73 74 61 74 65  ts initial.state
11ef0 20 64 75 72 69 6e 67 20 74 68 65 20 63 6f 75 72   during the cour
11f00 73 65 20 6f 66 20 61 20 74 72 61 6e 73 61 63 74  se of a transact
11f10 69 6f 6e 2e 0a 5e 54 68 65 20 72 6f 6c 6c 62 61  ion..^The rollba
11f20 63 6b 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 20  ck journal file 
11f30 69 73 20 61 6c 77 61 79 73 20 6c 6f 63 61 74 65  is always locate
11f40 64 20 69 6e 20 74 68 65 20 73 61 6d 65 20 0a 64  d in the same .d
11f50 69 72 65 63 74 6f 72 79 20 61 73 20 74 68 65 20  irectory as the 
11f60 64 61 74 61 62 61 73 65 0a 66 69 6c 65 20 61 6e  database.file an
11f70 64 20 68 61 73 20 74 68 65 20 73 61 6d 65 20 6e  d has the same n
11f80 61 6d 65 20 61 73 20 74 68 65 20 64 61 74 61 62  ame as the datab
11f90 61 73 65 20 66 69 6c 65 20 62 75 74 20 77 69 74  ase file but wit
11fa0 68 20 74 68 65 20 73 74 72 69 6e 67 0a 22 3c 74  h the string."<t
11fb0 74 3e 2d 6a 6f 75 72 6e 61 6c 3c 2f 74 74 3e 22  t>-journal</tt>"
11fc0 20 61 70 70 65 6e 64 65 64 2e 20 20 54 68 65 72   appended.  Ther
11fd0 65 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20 61 20  e can only be a 
11fe0 73 69 6e 67 6c 65 20 72 6f 6c 6c 62 61 63 6b 20  single rollback 
11ff0 6a 6f 75 72 6e 61 6c 0a 61 73 73 6f 63 69 61 74  journal.associat
12000 65 64 20 77 69 74 68 20 61 20 67 69 76 65 20 64  ed with a give d
12010 61 74 61 62 61 73 65 20 61 6e 64 20 68 65 6e 63  atabase and henc
12020 65 20 74 68 65 72 65 20 63 61 6e 20 6f 6e 6c 79  e there can only
12030 20 62 65 20 6f 6e 65 20 77 72 69 74 65 0a 74 72   be one write.tr
12040 61 6e 73 61 63 74 69 6f 6e 20 6f 70 65 6e 20 61  ansaction open a
12050 67 61 69 6e 73 74 20 61 20 73 69 6e 67 6c 65 20  gainst a single 
12060 64 61 74 61 62 61 73 65 20 61 74 20 6f 6e 65 20  database at one 
12070 74 69 6d 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 66  time.</p>..<p>If
12080 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69   a transaction i
12090 73 20 61 62 6f 72 74 65 64 20 64 75 65 20 74 6f  s aborted due to
120a0 20 61 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e 20   an application 
120b0 63 72 61 73 68 2c 20 61 6e 20 6f 70 65 72 61 74  crash, an operat
120c0 69 6e 67 0a 73 79 73 74 65 6d 20 63 72 61 73 68  ing.system crash
120d0 2c 20 6f 72 20 61 20 68 61 72 64 77 61 72 65 20  , or a hardware 
120e0 70 6f 77 65 72 20 66 61 69 6c 75 72 65 20 6f 72  power failure or
120f0 20 63 72 61 73 68 2c 20 74 68 65 6e 20 74 68 65   crash, then the
12100 20 64 61 74 61 62 61 73 65 20 6d 61 79 0a 62 65   database may.be
12110 20 6c 65 66 74 20 69 6e 20 61 6e 20 69 6e 63 6f   left in an inco
12120 6e 73 69 73 74 65 6e 74 20 73 74 61 74 65 2e 20  nsistent state. 
12130 20 5e 54 68 65 20 6e 65 78 74 20 74 69 6d 65 20   ^The next time 
12140 53 51 4c 69 74 65 20 61 74 74 65 6d 70 74 73 20  SQLite attempts 
12150 74 6f 20 6f 70 65 6e 0a 74 68 65 20 64 61 74 61  to open.the data
12160 62 61 73 65 20 66 69 6c 65 2c 20 74 68 65 20 70  base file, the p
12170 72 65 73 65 6e 63 65 20 6f 66 20 74 68 65 20 72  resence of the r
12180 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20  ollback journal 
12190 66 69 6c 65 20 77 69 6c 6c 20 62 65 20 0a 64 65  file will be .de
121a0 74 65 63 74 65 64 20 61 6e 64 20 74 68 65 20 6a  tected and the j
121b0 6f 75 72 6e 61 6c 20 77 69 6c 6c 20 62 65 20 61  ournal will be a
121c0 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 70 6c 61  utomatically pla
121d0 79 65 64 20 62 61 63 6b 20 74 6f 20 72 65 73 74  yed back to rest
121e0 6f 72 65 20 74 68 65 0a 64 61 74 61 62 61 73 65  ore the.database
121f0 20 74 6f 20 69 74 73 20 73 74 61 74 65 20 61 74   to its state at
12200 20 74 68 65 20 73 74 61 72 74 20 6f 66 20 74 68   the start of th
12210 65 20 69 6e 63 6f 6d 70 6c 65 74 65 20 74 72 61  e incomplete tra
12220 6e 73 61 63 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c  nsaction.</p>..<
12230 70 3e 5e 41 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f  p>^A rollback jo
12240 75 72 6e 61 6c 20 69 73 20 6f 6e 6c 79 20 63 6f  urnal is only co
12250 6e 73 69 64 65 72 65 64 20 74 6f 20 62 65 20 76  nsidered to be v
12260 61 6c 69 64 20 69 66 20 69 74 20 65 78 69 73 74  alid if it exist
12270 73 20 61 6e 64 0a 63 6f 6e 74 61 69 6e 73 20 61  s and.contains a
12280 20 76 61 6c 69 64 20 68 65 61 64 65 72 2e 20 20   valid header.  
12290 48 65 6e 63 65 20 61 20 74 72 61 6e 73 61 63 74  Hence a transact
122a0 69 6f 6e 20 63 61 6e 20 62 65 20 63 6f 6d 6d 69  ion can be commi
122b0 74 74 65 64 20 69 6e 20 6f 6e 65 0a 6f 66 20 74  tted in one.of t
122c0 68 72 65 65 20 77 61 79 73 3a 0a 3c 6f 6c 3e 0a  hree ways:.<ol>.
122d0 3c 6c 69 3e 5e 28 54 68 65 20 72 6f 6c 6c 62 61  <li>^(The rollba
122e0 63 6b 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 20  ck journal file 
122f0 63 61 6e 20 62 65 20 64 65 6c 65 74 65 64 29 5e  can be deleted)^
12300 2c 0a 3c 6c 69 3e 5e 28 54 68 65 20 72 6f 6c 6c  ,.<li>^(The roll
12310 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 66 69 6c  back journal fil
12320 65 20 63 61 6e 20 62 65 20 74 72 75 6e 63 61 74  e can be truncat
12330 65 64 20 74 6f 20 7a 65 72 6f 20 6c 65 6e 67 74  ed to zero lengt
12340 68 29 5e 2c 20 6f 72 0a 3c 6c 69 3e 5e 28 54 68  h)^, or.<li>^(Th
12350 65 20 68 65 61 64 65 72 20 6f 66 20 74 68 65 20  e header of the 
12360 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c  rollback journal
12370 20 63 61 6e 20 62 65 20 6f 76 65 72 77 72 69 74   can be overwrit
12380 74 65 6e 20 77 69 74 68 0a 69 6e 76 61 6c 69 64  ten with.invalid
12390 20 68 65 61 64 65 72 20 74 65 78 74 20 28 66 6f   header text (fo
123a0 72 20 65 78 61 6d 70 6c 65 2c 20 61 6c 6c 20 7a  r example, all z
123b0 65 72 6f 73 29 2e 29 5e 0a 3c 2f 6f 6c 3e 0a 3c  eros).)^.</ol>.<
123c0 70 3e 0a 5e 54 68 65 73 65 20 74 68 72 65 65 20  p>.^These three 
123d0 77 61 79 73 20 6f 66 20 63 6f 6d 6d 69 74 74 69  ways of committi
123e0 6e 67 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  ng a transaction
123f0 20 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20 74   correspond to t
12400 68 65 20 44 45 4c 45 54 45 2c 0a 54 52 55 4e 43  he DELETE,.TRUNC
12410 41 54 45 2c 20 61 6e 64 20 50 45 52 53 49 53 54  ATE, and PERSIST
12420 20 73 65 74 74 69 6e 67 73 2c 20 72 65 73 70 65   settings, respe
12430 63 74 69 76 65 6c 79 2c 20 6f 66 20 74 68 65 20  ctively, of the 
12440 5b 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20 70 72  [journal_mode pr
12450 61 67 6d 61 5d 2e 0a 3c 2f 70 3e 0a 0a 0a 3c 70  agma]..</p>...<p
12460 3e 41 20 76 61 6c 69 64 20 72 6f 6c 6c 62 61 63  >A valid rollbac
12470 6b 20 6a 6f 75 72 6e 61 6c 20 62 65 67 69 6e 73  k journal begins
12480 20 77 69 74 68 20 61 20 68 65 61 64 65 72 20 69   with a header i
12490 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  n the following 
124a0 66 6f 72 6d 61 74 3a 3c 2f 70 3e 0a 0a 3c 63 65  format:</p>..<ce
124b0 6e 74 65 72 3e 0a 3c 69 3e 52 6f 6c 6c 62 61 63  nter>.<i>Rollbac
124c0 6b 20 4a 6f 75 72 6e 61 6c 20 48 65 61 64 65 72  k Journal Header
124d0 20 46 6f 72 6d 61 74 3c 2f 69 3e 3c 62 72 3e 0a   Format</i><br>.
124e0 3c 74 61 62 6c 65 20 77 69 64 74 68 3d 22 38 30  <table width="80
124f0 25 22 20 62 6f 72 64 65 72 3d 31 3e 0a 3c 74 72  %" border=1>.<tr
12500 3e 3c 74 68 3e 4f 66 66 73 65 74 3c 74 68 3e 53  ><th>Offset<th>S
12510 69 7a 65 3c 74 68 3e 44 65 73 63 72 69 70 74 69  ize<th>Descripti
12520 6f 6e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  on.<tr><td valig
12530 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
12540 65 72 3e 30 0a 20 20 20 20 3c 74 64 20 76 61 6c  er>0.    <td val
12550 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
12560 6e 74 65 72 3e 38 0a 20 20 20 20 3c 74 64 3e 48  nter>8.    <td>H
12570 65 61 64 65 72 20 73 74 72 69 6e 67 3a 20 20 30  eader string:  0
12580 78 64 39 2c 20 30 78 64 35 2c 20 30 78 30 35 2c  xd9, 0xd5, 0x05,
12590 20 30 78 66 39 2c 20 30 78 32 30 2c 20 30 78 61   0xf9, 0x20, 0xa
125a0 31 2c 20 30 78 36 33 2c 20 30 78 64 37 0a 3c 74  1, 0x63, 0xd7.<t
125b0 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
125c0 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 38 0a   align=center>8.
125d0 20 20 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74      <td valign=t
125e0 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
125f0 34 0a 20 20 20 20 3c 74 64 3e 54 68 65 20 22 50  4.    <td>The "P
12600 61 67 65 20 43 6f 75 6e 74 22 20 2d 20 54 68 65  age Count" - The
12610 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   number of pages
12620 20 69 6e 20 74 68 65 20 6e 65 78 74 20 73 65 67   in the next seg
12630 6d 65 6e 74 20 6f 66 20 74 68 65 20 0a 20 20 20  ment of the .   
12640 20 20 20 20 20 6a 6f 75 72 6e 61 6c 2c 20 6f 72       journal, or
12650 20 2d 31 20 74 6f 0a 20 20 20 20 20 20 20 20 6d   -1 to.        m
12660 65 61 6e 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 20  ean all content 
12670 74 6f 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  to the end of th
12680 65 20 66 69 6c 65 0a 3c 74 72 3e 3c 74 64 20 76  e file.<tr><td v
12690 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
126a0 63 65 6e 74 65 72 3e 31 32 0a 20 20 20 20 3c 74  center>12.    <t
126b0 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
126c0 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20  gn=center>4.    
126d0 3c 74 64 3e 41 20 72 61 6e 64 6f 6d 20 6e 6f 6e  <td>A random non
126e0 63 65 20 66 6f 72 20 74 68 65 20 63 68 65 63 6b  ce for the check
126f0 73 75 6d 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  sum.<tr><td vali
12700 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
12710 74 65 72 3e 31 36 0a 20 20 20 20 3c 74 64 20 76  ter>16.    <td v
12720 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
12730 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64  center>4.    <td
12740 3e 49 6e 69 74 69 61 6c 20 73 69 7a 65 20 6f 66  >Initial size of
12750 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69 6e   the database in
12760 20 70 61 67 65 73 0a 3c 74 72 3e 3c 74 64 20 76   pages.<tr><td v
12770 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
12780 63 65 6e 74 65 72 3e 32 30 0a 20 20 20 20 3c 74  center>20.    <t
12790 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
127a0 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20  gn=center>4.    
127b0 3c 74 64 3e 53 69 7a 65 20 6f 66 20 61 20 64 69  <td>Size of a di
127c0 73 6b 20 73 65 63 74 6f 72 20 61 73 73 75 6d 65  sk sector assume
127d0 64 20 62 79 20 74 68 65 20 70 72 6f 63 65 73 73  d by the process
127e0 20 74 68 61 74 20 77 72 6f 74 65 20 74 68 69 73   that wrote this
127f0 0a 20 20 20 20 20 20 20 20 6a 6f 75 72 6e 61 6c  .        journal
12800 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  ..<tr><td valign
12810 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
12820 72 3e 32 34 0a 20 20 20 20 3c 74 64 20 76 61 6c  r>24.    <td val
12830 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
12840 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 53  nter>4.    <td>S
12850 69 7a 65 20 6f 66 20 70 61 67 65 73 20 69 6e 20  ize of pages in 
12860 74 68 69 73 20 6a 6f 75 72 6e 61 6c 2e 0a 3c 2f  this journal..</
12870 74 61 62 6c 65 3e 0a 3c 2f 63 65 6e 74 65 72 3e  table>.</center>
12880 0a 0a 3c 70 3e 5e 41 20 72 6f 6c 6c 62 61 63 6b  ..<p>^A rollback
12890 20 6a 6f 75 72 6e 61 6c 20 68 65 61 64 65 72 20   journal header 
128a0 69 73 20 70 61 64 64 65 64 20 77 69 74 68 20 7a  is padded with z
128b0 65 72 6f 73 20 6f 75 74 20 74 6f 20 74 68 65 20  eros out to the 
128c0 73 69 7a 65 20 6f 66 20 61 20 0a 73 69 6e 67 6c  size of a .singl
128d0 65 20 73 65 63 74 6f 72 20 28 61 73 20 64 65 66  e sector (as def
128e0 69 6e 65 64 20 62 79 20 74 68 65 20 73 65 63 74  ined by the sect
128f0 6f 72 20 73 69 7a 65 20 69 6e 74 65 67 65 72 20  or size integer 
12900 61 74 20 6f 66 66 73 65 74 20 32 30 29 2e 0a 54  at offset 20)..T
12910 68 65 20 68 65 61 64 65 72 20 69 73 20 69 6e 20  he header is in 
12920 61 20 73 65 63 74 6f 72 20 62 79 20 69 74 73 65  a sector by itse
12930 6c 66 20 73 6f 20 74 68 61 74 20 69 66 20 61 20  lf so that if a 
12940 70 6f 77 65 72 20 6c 6f 73 73 20 6f 63 63 75 72  power loss occur
12950 73 20 77 68 69 6c 65 0a 77 72 69 74 69 6e 67 20  s while.writing 
12960 74 68 65 20 73 65 63 74 6f 72 2c 20 69 6e 66 6f  the sector, info
12970 72 6d 61 74 69 6f 6e 20 74 68 61 74 20 66 6f 6c  rmation that fol
12980 6c 6f 77 73 20 74 68 65 20 68 65 61 64 65 72 20  lows the header 
12990 77 69 6c 6c 20 62 65 0a 28 68 6f 70 65 66 75 6c  will be.(hopeful
129a0 6c 79 29 20 75 6e 64 61 6d 61 67 65 64 2e 3c 2f  ly) undamaged.</
129b0 70 3e 0a 0a 3c 70 3e 5e 41 66 74 65 72 20 74 68  p>..<p>^After th
129c0 65 20 68 65 61 64 65 72 20 61 6e 64 20 7a 65 72  e header and zer
129d0 6f 20 70 61 64 64 69 6e 67 20 61 72 65 20 7a 65  o padding are ze
129e0 72 6f 20 6f 72 20 6d 6f 72 65 20 70 61 67 65 20  ro or more page 
129f0 72 65 63 6f 72 64 73 2e 20 20 5e 45 61 63 68 0a  records.  ^Each.
12a00 70 61 67 65 20 72 65 63 6f 72 64 20 73 74 6f 72  page record stor
12a10 65 73 20 61 20 63 6f 70 79 20 6f 66 20 74 68 65  es a copy of the
12a20 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61 20 70 61   content of a pa
12a30 67 65 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61  ge from the data
12a40 62 61 73 65 20 66 69 6c 65 0a 62 65 66 6f 72 65  base file.before
12a50 20 69 74 20 77 61 73 20 63 68 61 6e 67 65 64 2e   it was changed.
12a60 20 20 5e 54 68 65 20 73 61 6d 65 20 70 61 67 65    ^The same page
12a70 20 6d 61 79 20 6e 6f 74 20 61 70 70 65 61 72 20   may not appear 
12a80 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 63 65 0a 77  more than once.w
12a90 69 74 68 69 6e 20 61 20 73 69 6e 67 6c 65 20 72  ithin a single r
12aa0 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 2e  ollback journal.
12ab0 0a 54 6f 20 72 6f 6c 6c 62 61 63 6b 20 61 6e 20  .To rollback an 
12ac0 69 6e 63 6f 6d 70 6c 65 74 65 20 74 72 61 6e 73  incomplete trans
12ad0 61 63 74 69 6f 6e 2c 20 61 20 70 72 6f 63 65 73  action, a proces
12ae0 73 0a 68 61 73 20 6d 65 72 65 6c 79 20 74 6f 20  s.has merely to 
12af0 72 65 61 64 20 74 68 65 20 72 6f 6c 6c 62 61 63  read the rollbac
12b00 6b 20 6a 6f 75 72 6e 61 6c 20 66 72 6f 6d 20 62  k journal from b
12b10 65 67 69 6e 6e 69 6e 67 20 74 6f 20 65 6e 64 20  eginning to end 
12b20 61 6e 64 0a 77 72 69 74 65 20 70 61 67 65 73 20  and.write pages 
12b30 66 6f 75 6e 64 20 69 6e 20 74 68 65 20 6a 6f 75  found in the jou
12b40 72 6e 61 6c 20 62 61 63 6b 20 69 6e 74 6f 20 74  rnal back into t
12b50 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
12b60 20 61 74 20 74 68 65 0a 61 70 70 72 6f 70 72 69   at the.appropri
12b70 61 74 65 20 6c 6f 63 61 74 69 6f 6e 2e 3c 2f 70  ate location.</p
12b80 3e 0a 0a 3c 70 3e 4c 65 74 20 74 68 65 20 64 61  >..<p>Let the da
12b90 74 61 62 61 73 65 20 70 61 67 65 20 73 69 7a 65  tabase page size
12ba0 20 28 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74   (the value of t
12bb0 68 65 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66  he integer at of
12bc0 66 73 65 74 20 32 34 20 0a 69 6e 20 74 68 65 20  fset 24 .in the 
12bd0 6a 6f 75 72 6e 61 6c 20 68 65 61 64 65 72 29 20  journal header) 
12be0 62 65 20 4e 2e 0a 54 68 65 6e 20 74 68 65 20 66  be N..Then the f
12bf0 6f 72 6d 61 74 20 6f 66 20 61 20 70 61 67 65 20  ormat of a page 
12c00 72 65 63 6f 72 64 20 69 73 20 61 73 20 66 6f 6c  record is as fol
12c10 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 63 65 6e 74  lows:</p>..<cent
12c20 65 72 3e 0a 3c 69 3e 52 6f 6c 6c 62 61 63 6b 20  er>.<i>Rollback 
12c30 4a 6f 75 72 6e 61 6c 20 50 61 67 65 20 52 65 63  Journal Page Rec
12c40 6f 72 64 20 46 6f 72 6d 61 74 3c 2f 69 3e 3c 62  ord Format</i><b
12c50 72 3e 0a 3c 74 61 62 6c 65 20 77 69 64 74 68 3d  r>.<table width=
12c60 22 38 30 25 22 20 62 6f 72 64 65 72 3d 31 3e 0a  "80%" border=1>.
12c70 3c 74 72 3e 3c 74 68 3e 4f 66 66 73 65 74 3c 74  <tr><th>Offset<t
12c80 68 3e 53 69 7a 65 3c 74 68 3e 44 65 73 63 72 69  h>Size<th>Descri
12c90 70 74 69 6f 6e 0a 3c 74 72 3e 3c 74 64 20 76 61  ption.<tr><td va
12ca0 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
12cb0 65 6e 74 65 72 3e 30 0a 20 20 20 20 3c 74 64 20  enter>0.    <td 
12cc0 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
12cd0 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74  =center>4.    <t
12ce0 64 3e 54 68 65 20 70 61 67 65 20 6e 75 6d 62 65  d>The page numbe
12cf0 72 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  r in the databas
12d00 65 20 66 69 6c 65 0a 3c 74 72 3e 3c 74 64 20 76  e file.<tr><td v
12d10 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
12d20 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64  center>4.    <td
12d30 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
12d40 6e 3d 63 65 6e 74 65 72 3e 4e 0a 20 20 20 20 3c  n=center>N.    <
12d50 74 64 3e 4f 72 69 67 69 6e 61 6c 20 63 6f 6e 74  td>Original cont
12d60 65 6e 74 20 6f 66 20 74 68 65 20 70 61 67 65 20  ent of the page 
12d70 70 72 69 6f 72 20 74 6f 20 74 68 65 20 73 74 61  prior to the sta
12d80 72 74 20 6f 66 20 74 68 65 20 74 72 61 6e 73 61  rt of the transa
12d90 63 74 69 6f 6e 0a 3c 74 72 3e 3c 74 64 20 76 61  ction.<tr><td va
12da0 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
12db0 65 6e 74 65 72 3e 4e 2b 34 0a 20 20 20 20 3c 74  enter>N+4.    <t
12dc0 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
12dd0 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20  gn=center>4.    
12de0 3c 74 64 3e 43 68 65 63 6b 73 75 6d 0a 3c 2f 74  <td>Checksum.</t
12df0 61 62 6c 65 3e 0a 3c 2f 63 65 6e 74 65 72 3e 0a  able>.</center>.
12e00 0a 0a 3c 70 3e 5e 28 54 68 65 20 63 68 65 63 6b  ..<p>^(The check
12e10 73 75 6d 20 69 73 20 61 6e 20 75 6e 73 69 67 6e  sum is an unsign
12e20 65 64 20 33 32 2d 62 69 74 20 69 6e 74 65 67 65  ed 32-bit intege
12e30 72 20 63 6f 6d 70 75 74 65 64 20 61 73 20 66 6f  r computed as fo
12e40 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e  llows:</p>..<ol>
12e50 0a 3c 6c 69 3e 49 6e 69 74 69 61 6c 69 7a 65 20  .<li>Initialize 
12e60 74 68 65 20 63 68 65 63 6b 73 75 6d 20 74 6f 20  the checksum to 
12e70 74 68 65 20 63 68 65 63 6b 73 75 6d 20 6e 6f 6e  the checksum non
12e80 63 65 20 76 61 6c 75 65 20 66 6f 75 6e 64 20 69  ce value found i
12e90 6e 20 74 68 65 0a 6a 6f 75 72 6e 61 6c 20 68 65  n the.journal he
12ea0 61 64 65 72 20 61 74 20 6f 66 66 73 65 74 20 31  ader at offset 1
12eb0 32 2e 0a 3c 6c 69 3e 49 6e 69 74 69 61 6c 69 7a  2..<li>Initializ
12ec0 65 20 69 6e 64 65 78 20 58 20 74 6f 20 62 65 20  e index X to be 
12ed0 4e 2d 32 30 30 20 28 77 68 65 72 65 20 4e 20 69  N-200 (where N i
12ee0 73 20 74 68 65 20 73 69 7a 65 20 6f 66 20 61 20  s the size of a 
12ef0 64 61 74 61 62 61 73 65 20 70 61 67 65 0a 69 6e  database page.in
12f00 20 62 79 74 65 73 2e 0a 3c 6c 69 3e 49 6e 74 65   bytes..<li>Inte
12f10 72 70 72 65 74 20 74 68 65 20 66 6f 75 72 20 62  rpret the four b
12f20 79 74 65 73 20 61 74 20 6f 66 66 73 65 74 20 58  ytes at offset X
12f30 20 69 6e 74 6f 20 74 68 65 20 70 61 67 65 20 61   into the page a
12f40 73 20 61 20 34 2d 62 79 74 65 20 62 69 67 2d 65  s a 4-byte big-e
12f50 6e 64 69 61 6e 0a 75 6e 73 69 67 6e 65 64 20 69  ndian.unsigned i
12f60 6e 74 65 67 65 72 2e 20 20 41 64 64 20 74 68 65  nteger.  Add the
12f70 20 76 61 6c 75 65 20 6f 66 20 74 68 61 74 20 69   value of that i
12f80 6e 74 65 67 65 72 20 74 6f 20 74 68 65 20 63 68  nteger to the ch
12f90 65 63 6b 73 75 6d 2e 0a 3c 6c 69 3e 53 75 62 74  ecksum..<li>Subt
12fa0 72 61 63 65 20 32 30 30 20 66 72 6f 6d 20 58 2e  race 200 from X.
12fb0 0a 3c 6c 69 3e 49 66 20 58 20 69 73 20 67 72 65  .<li>If X is gre
12fc0 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75  ater than or equ
12fd0 61 6c 20 74 6f 20 7a 65 72 6f 2c 20 67 6f 20 62  al to zero, go b
12fe0 61 63 6b 20 74 6f 20 73 74 65 70 20 33 2e 0a 3c  ack to step 3..<
12ff0 2f 6f 6c 3e 29 5e 0a 0a 3c 70 3e 54 68 65 20 63  /ol>)^..<p>The c
13000 68 65 63 6b 73 75 6d 20 76 61 6c 75 65 20 69 73  hecksum value is
13010 20 75 73 65 64 20 74 6f 20 67 75 61 72 64 20 61   used to guard a
13020 67 61 69 6e 73 74 20 69 6e 63 6f 6d 70 6c 65 74  gainst incomplet
13030 65 20 77 72 69 74 65 73 20 6f 66 0a 61 20 6a 6f  e writes of.a jo
13040 75 72 6e 61 6c 20 70 61 67 65 20 72 65 63 6f 72  urnal page recor
13050 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 70 6f  d following a po
13060 77 65 72 20 66 61 69 6c 75 72 65 2e 20 20 41 20  wer failure.  A 
13070 64 69 66 66 65 72 65 6e 74 20 72 61 6e 64 6f 6d  different random
13080 20 6e 6f 6e 63 65 0a 69 73 20 75 73 65 64 20 65   nonce.is used e
13090 61 63 68 20 74 69 6d 65 20 61 20 74 72 61 6e 73  ach time a trans
130a0 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65  action is starte
130b0 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6d 69  d in order to mi
130c0 6e 69 6d 69 7a 65 20 74 68 65 20 72 69 73 6b 0a  nimize the risk.
130d0 74 68 61 74 20 75 6e 77 72 69 74 74 65 6e 20 73  that unwritten s
130e0 65 63 74 6f 72 73 20 6d 69 67 68 74 20 62 79 20  ectors might by 
130f0 63 68 61 6e 63 65 20 63 6f 6e 74 61 69 6e 20 64  chance contain d
13100 61 74 61 20 66 72 6f 6d 20 74 68 65 20 73 61 6d  ata from the sam
13110 65 20 70 61 67 65 0a 74 68 61 74 20 77 61 73 20  e page.that was 
13120 61 20 70 61 72 74 20 6f 66 20 70 72 69 6f 72 20  a part of prior 
13130 6a 6f 75 72 6e 61 6c 73 2e 20 20 42 79 20 63 68  journals.  By ch
13140 61 6e 67 69 6e 67 20 74 68 65 20 6e 6f 6e 63 65  anging the nonce
13150 20 66 6f 72 20 65 61 63 68 0a 74 72 61 6e 73 61   for each.transa
13160 63 74 69 6f 6e 2c 20 73 74 61 6c 65 20 64 61 74  ction, stale dat
13170 61 20 6f 6e 20 64 69 73 6b 20 77 69 6c 6c 20 73  a on disk will s
13180 74 69 6c 6c 20 67 65 6e 65 72 61 74 65 20 61 6e  till generate an
13190 20 69 6e 63 6f 72 72 65 63 74 20 63 68 65 63 6b   incorrect check
131a0 73 75 6d 0a 61 6e 64 20 62 65 20 64 65 74 65 63  sum.and be detec
131b0 74 65 64 20 77 69 74 68 20 68 69 67 68 20 70 72  ted with high pr
131c0 6f 62 61 62 69 6c 69 74 79 2e 20 20 54 68 65 20  obability.  The 
131d0 63 68 65 63 6b 73 75 6d 20 6f 6e 6c 79 20 75 73  checksum only us
131e0 65 73 20 61 20 73 70 61 72 73 65 20 73 61 6d 70  es a sparse samp
131f0 6c 65 0a 6f 66 20 33 32 2d 62 69 74 20 77 6f 72  le.of 32-bit wor
13200 64 73 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61  ds from the data
13210 20 72 65 63 6f 72 64 20 66 6f 72 20 70 65 72 66   record for perf
13220 6f 72 6d 61 6e 63 65 20 72 65 61 73 6f 6e 73 20  ormance reasons 
13230 2d 20 64 65 73 69 67 6e 20 73 74 75 64 69 65 73  - design studies
13240 20 0a 64 75 72 69 6e 67 20 74 68 65 20 70 6c 61   .during the pla
13250 6e 6e 69 6e 67 20 70 68 61 73 65 73 20 6f 66 20  nning phases of 
13260 53 51 4c 69 74 65 20 33 2e 30 2e 30 20 73 68 6f  SQLite 3.0.0 sho
13270 77 65 64 0a 61 20 73 69 67 6e 69 66 69 63 61 6e  wed.a significan
13280 74 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 68 69  t performance hi
13290 74 20 69 6e 20 63 68 65 63 6b 73 75 6d 6d 69 6e  t in checksummin
132a0 67 20 74 68 65 20 65 6e 74 69 72 65 20 70 61 67  g the entire pag
132b0 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 4c 65 74 20 74  e.</p>..<p>Let t
132c0 68 65 20 70 61 67 65 20 63 6f 75 6e 74 20 76 61  he page count va
132d0 6c 75 65 20 61 74 20 6f 66 66 73 65 74 20 38 20  lue at offset 8 
132e0 69 6e 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20 68  in the journal h
132f0 65 61 64 65 72 20 62 65 20 4d 2e 0a 5e 49 66 20  eader be M..^If 
13300 4d 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  M is greater tha
13310 6e 20 7a 65 72 6f 20 74 68 65 6e 20 61 66 74 65  n zero then afte
13320 72 20 4d 20 70 61 67 65 20 72 65 63 6f 72 64 73  r M page records
13330 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20 66 69 6c   the journal fil
13340 65 0a 6d 61 79 20 62 65 20 7a 65 72 6f 20 70 61  e.may be zero pa
13350 64 64 65 64 20 6f 75 74 20 74 6f 20 74 68 65 20  dded out to the 
13360 6e 65 78 74 20 6d 75 6c 74 69 70 6c 65 20 6f 66  next multiple of
13370 20 74 68 65 20 73 65 63 74 6f 72 20 73 69 7a 65   the sector size
13380 20 61 6e 64 20 61 6e 6f 74 68 65 72 0a 6a 6f 75   and another.jou
13390 72 6e 61 6c 20 68 65 61 64 65 72 20 6d 61 79 20  rnal header may 
133a0 62 65 20 69 6e 73 65 72 74 65 64 2e 20 20 5e 41  be inserted.  ^A
133b0 6c 6c 20 6a 6f 75 72 6e 61 6c 20 68 65 61 64 65  ll journal heade
133c0 72 73 20 77 69 74 68 69 6e 20 74 68 65 20 73 61  rs within the sa
133d0 6d 65 0a 6a 6f 75 72 6e 61 6c 20 6d 75 73 74 20  me.journal must 
133e0 63 6f 6e 74 61 69 6e 20 74 68 65 20 73 61 6d 65  contain the same
133f0 20 64 61 74 61 62 61 73 65 20 70 61 67 65 20 73   database page s
13400 69 7a 65 20 61 6e 64 20 73 65 63 74 6f 72 20 73  ize and sector s
13410 69 7a 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66  ize.</p>..<p>^If
13420 20 4d 20 69 73 20 2d 31 20 69 6e 20 74 68 65 20   M is -1 in the 
13430 69 6e 69 74 69 61 6c 20 6a 6f 75 72 6e 61 6c 20  initial journal 
13440 68 65 61 64 65 72 2c 20 74 68 65 6e 20 74 68 65  header, then the
13450 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 20   number of page 
13460 72 65 63 6f 72 64 73 0a 74 68 61 74 20 66 6f 6c  records.that fol
13470 6c 6f 77 20 69 73 20 63 6f 6d 70 75 74 65 64 20  low is computed 
13480 62 79 20 63 6f 6d 70 75 74 69 6e 67 20 68 6f 77  by computing how
13490 20 6d 61 6e 79 20 70 61 67 65 20 72 65 63 6f 72   many page recor
134a0 64 73 20 77 69 6c 6c 20 66 69 74 20 69 6e 0a 74  ds will fit in.t
134b0 68 65 20 61 76 61 69 6c 61 62 6c 65 20 73 70 61  he available spa
134c0 63 65 20 6f 66 20 74 68 65 20 72 65 6d 61 69 6e  ce of the remain
134d0 64 65 72 20 6f 66 20 74 68 65 20 6a 6f 75 72 6e  der of the journ
134e0 61 6c 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 74  al file.</p>..<t
134f0 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 77  cl>hd_fragment w
13500 61 6c 66 6f 72 6d 61 74 20 7b 57 41 4c 20 66 6f  alformat {WAL fo
13510 72 6d 61 74 7d 3c 2f 74 63 6c 3e 0a 3c 68 31 3e  rmat}</tcl>.<h1>
13520 54 68 65 20 57 72 69 74 65 2d 41 68 65 61 64 20  The Write-Ahead 
13530 4c 6f 67 3c 2f 68 31 3e 0a 0a 3c 70 3e 42 65 67  Log</h1>..<p>Beg
13540 69 6e 6e 69 6e 67 20 77 69 74 68 20 5b 76 65 72  inning with [ver
13550 73 69 6f 6e 20 33 2e 37 2e 30 5d 20 28 64 61 74  sion 3.7.0] (dat
13560 65 6f 66 3a 33 2e 37 2e 30 29 2c 20 0a 53 51 4c  eof:3.7.0), .SQL
13570 69 74 65 20 73 75 70 70 6f 72 74 73 20 61 20 6e  ite supports a n
13580 65 77 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 63  ew transaction.c
13590 6f 6e 74 72 6f 6c 20 6d 65 63 68 61 6e 69 73 6d  ontrol mechanism
135a0 20 63 61 6c 6c 65 64 20 22 5b 57 41 4c 20 7c 20   called "[WAL | 
135b0 77 72 69 74 65 2d 61 68 65 61 64 20 6c 6f 67 5d  write-ahead log]
135c0 22 20 6f 72 20 22 5b 57 41 4c 5d 22 2e 0a 5e 57  " or "[WAL]"..^W
135d0 68 65 6e 20 61 20 64 61 74 61 62 61 73 65 20 69  hen a database i
135e0 73 20 69 6e 20 57 41 4c 20 6d 6f 64 65 2c 20 61  s in WAL mode, a
135f0 6c 6c 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 74  ll connections t
13600 6f 20 74 68 61 74 20 64 61 74 61 62 61 73 65 20  o that database 
13610 6d 75 73 74 0a 75 73 65 20 74 68 65 20 57 41 4c  must.use the WAL
13620 2e 20 20 5e 41 20 70 61 72 74 69 63 75 6c 61 72  .  ^A particular
13630 20 64 61 74 61 62 61 73 65 20 77 69 6c 6c 20 75   database will u
13640 73 65 20 65 69 74 68 65 72 20 61 20 72 6f 6c 6c  se either a roll
13650 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 0a 6f 72 20  back journal.or 
13660 61 20 57 41 4c 2c 20 62 75 74 20 6e 6f 74 20 62  a WAL, but not b
13670 6f 74 68 20 61 74 20 74 68 65 20 73 61 6d 65 20  oth at the same 
13680 74 69 6d 65 2e 0a 5e 54 68 65 20 57 41 4c 20 69  time..^The WAL i
13690 73 20 61 6c 77 61 79 73 20 6c 6f 63 61 74 65 64  s always located
136a0 20 69 6e 20 74 68 65 20 73 61 6d 65 20 64 69 72   in the same dir
136b0 65 63 74 6f 72 79 20 61 73 20 74 68 65 20 64 61  ectory as the da
136c0 74 61 62 61 73 65 0a 66 69 6c 65 20 61 6e 64 20  tabase.file and 
136d0 68 61 73 20 74 68 65 20 73 61 6d 65 20 6e 61 6d  has the same nam
136e0 65 20 61 73 20 74 68 65 20 64 61 74 61 62 61 73  e as the databas
136f0 65 20 66 69 6c 65 20 62 75 74 20 77 69 74 68 20  e file but with 
13700 74 68 65 20 73 74 72 69 6e 67 0a 22 3c 74 74 3e  the string."<tt>
13710 2d 77 61 6c 3c 2f 74 74 3e 22 20 61 70 70 65 6e  -wal</tt>" appen
13720 64 65 64 2e 3c 2f 70 3e 0a 0a 3c 68 32 3e 57 41  ded.</p>..<h2>WA
13730 4c 20 46 69 6c 65 20 46 6f 72 6d 61 74 3c 2f 68  L File Format</h
13740 32 3e 0a 0a 3c 70 3e 41 20 57 41 4c 20 66 69 6c  2>..<p>A WAL fil
13750 65 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20  e consists of a 
13760 68 65 61 64 65 72 20 66 6f 6c 6c 6f 77 65 64 20  header followed 
13770 62 79 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20  by zero or more 
13780 22 66 72 61 6d 65 73 22 2e 0a 45 61 63 68 20 66  "frames"..Each f
13790 72 61 6d 65 20 72 65 63 6f 72 64 73 20 74 68 65  rame records the
137a0 20 72 65 76 69 73 65 64 20 63 6f 6e 74 65 6e 74   revised content
137b0 20 6f 66 20 61 20 73 69 6e 67 6c 65 20 70 61 67   of a single pag
137c0 65 20 66 72 6f 6d 20 74 68 65 0a 64 61 74 61 62  e from the.datab
137d0 61 73 65 20 66 69 6c 65 2e 20 20 41 6c 6c 20 63  ase file.  All c
137e0 68 61 6e 67 65 73 20 74 6f 20 74 68 65 20 64 61  hanges to the da
137f0 74 61 62 61 73 65 20 61 72 65 20 72 65 63 6f 72  tabase are recor
13800 64 65 64 20 62 79 20 77 72 69 74 69 6e 67 0a 66  ded by writing.f
13810 72 61 6d 65 73 20 69 6e 74 6f 20 74 68 65 20 57  rames into the W
13820 41 4c 2e 20 20 54 72 61 6e 73 61 63 74 69 6f 6e  AL.  Transaction
13830 73 20 63 6f 6d 6d 69 74 20 77 68 65 6e 20 61 20  s commit when a 
13840 66 72 61 6d 65 20 69 73 20 77 72 69 74 74 65 6e  frame is written
13850 20 74 68 61 74 0a 63 6f 6e 74 61 69 6e 73 20 61   that.contains a
13860 20 63 6f 6d 6d 69 74 20 6d 61 72 6b 65 72 2e 20   commit marker. 
13870 20 5e 41 20 73 69 6e 67 6c 65 20 57 41 4c 20 63   ^A single WAL c
13880 61 6e 20 61 6e 64 20 75 73 75 61 6c 6c 79 20 64  an and usually d
13890 6f 65 73 20 72 65 63 6f 72 64 20 0a 6d 75 6c 74  oes record .mult
138a0 69 70 6c 65 20 74 72 61 6e 73 61 63 74 69 6f 6e  iple transaction
138b0 73 2e 20 20 50 65 72 69 6f 64 69 63 61 6c 6c 79  s.  Periodically
138c0 2c 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  , the content of
138d0 20 74 68 65 20 57 41 4c 20 69 73 0a 74 72 61 6e   the WAL is.tran
138e0 73 66 65 72 72 65 64 20 62 61 63 6b 20 69 6e 74  sferred back int
138f0 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  o the database f
13900 69 6c 65 20 69 6e 20 61 6e 20 6f 70 65 72 61 74  ile in an operat
13910 69 6f 6e 20 63 61 6c 6c 65 64 20 61 0a 22 63 68  ion called a."ch
13920 65 63 6b 70 6f 69 6e 74 22 2e 3c 2f 70 3e 0a 0a  eckpoint".</p>..
13930 3c 70 3e 5e 41 20 73 69 6e 67 6c 65 20 57 41 4c  <p>^A single WAL
13940 20 66 69 6c 65 20 63 61 6e 20 62 65 20 72 65 75   file can be reu
13950 73 65 64 20 6d 75 6c 74 69 70 6c 65 20 74 69 6d  sed multiple tim
13960 65 73 2e 20 20 5e 49 6e 20 6f 74 68 65 72 20 77  es.  ^In other w
13970 6f 72 64 73 2c 20 74 68 65 0a 57 41 4c 20 63 61  ords, the.WAL ca
13980 6e 20 66 69 6c 6c 20 75 70 20 77 69 74 68 20 66  n fill up with f
13990 72 61 6d 65 73 20 61 6e 64 20 74 68 65 6e 20 62  rames and then b
139a0 65 20 63 68 65 63 6b 70 6f 69 6e 74 65 64 20 61  e checkpointed a
139b0 6e 64 20 74 68 65 6e 20 6e 65 77 0a 66 72 61 6d  nd then new.fram
139c0 65 73 20 63 61 6e 20 6f 76 65 72 77 72 69 74 65  es can overwrite
139d0 20 74 68 65 20 6f 6c 64 20 6f 6e 65 73 2e 20 20   the old ones.  
139e0 5e 41 20 57 41 4c 20 61 6c 77 61 79 73 20 67 72  ^A WAL always gr
139f0 6f 77 73 20 66 72 6f 6d 20 62 65 67 69 6e 6e 69  ows from beginni
13a00 6e 67 0a 74 6f 77 61 72 64 20 74 68 65 20 65 6e  ng.toward the en
13a10 64 2e 20 20 43 68 65 63 6b 73 75 6d 73 20 61 6e  d.  Checksums an
13a20 64 20 63 6f 75 6e 74 65 72 73 20 61 74 74 61 63  d counters attac
13a30 68 65 64 20 74 6f 20 65 61 63 68 20 66 72 61 6d  hed to each fram
13a40 65 20 61 72 65 0a 75 73 65 64 20 74 6f 20 64 65  e are.used to de
13a50 74 65 72 6d 69 6e 65 20 77 68 69 63 68 20 66 72  termine which fr
13a60 61 6d 65 73 20 77 69 74 68 69 6e 20 74 68 65 20  ames within the 
13a70 57 41 4c 20 61 72 65 20 76 61 6c 69 64 20 61 6e  WAL are valid an
13a80 64 20 77 68 69 63 68 0a 61 72 65 20 6c 65 66 74  d which.are left
13a90 6f 76 65 72 73 20 66 72 6f 6d 20 70 72 69 6f 72  overs from prior
13aa0 20 63 68 65 63 6b 70 6f 69 6e 74 73 2e 3c 2f 70   checkpoints.</p
13ab0 3e 0a 0a 3c 70 3e 5e 28 54 68 65 20 57 41 4c 20  >..<p>^(The WAL 
13ac0 68 65 61 64 65 72 20 69 73 20 33 32 20 62 79 74  header is 32 byt
13ad0 65 73 20 69 6e 20 73 69 7a 65 20 61 6e 64 20 63  es in size and c
13ae0 6f 6e 73 69 73 74 73 20 6f 66 20 74 68 65 20 66  onsists of the f
13af0 6f 6c 6c 6f 77 69 6e 67 20 65 69 67 68 74 0a 62  ollowing eight.b
13b00 69 67 2d 65 6e 64 69 61 6e 20 33 32 2d 62 69 74  ig-endian 32-bit
13b10 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65   unsigned intege
13b20 72 20 76 61 6c 75 65 73 3a 3c 2f 70 3e 0a 0a 3c  r values:</p>..<
13b30 63 65 6e 74 65 72 3e 0a 3c 69 3e 57 41 4c 20 48  center>.<i>WAL H
13b40 65 61 64 65 72 20 46 6f 72 6d 61 74 3c 2f 69 3e  eader Format</i>
13b50 3c 62 72 3e 0a 3c 74 61 62 6c 65 20 77 69 64 74  <br>.<table widt
13b60 68 3d 22 38 30 25 22 20 62 6f 72 64 65 72 3d 31  h="80%" border=1
13b70 3e 0a 3c 74 72 3e 3c 74 68 3e 4f 66 66 73 65 74  >.<tr><th>Offset
13b80 3c 74 68 3e 53 69 7a 65 3c 74 68 3e 44 65 73 63  <th>Size<th>Desc
13b90 72 69 70 74 69 6f 6e 0a 3c 74 72 3e 3c 74 64 20  ription.<tr><td 
13ba0 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
13bb0 3d 63 65 6e 74 65 72 3e 30 3c 74 64 20 76 61 6c  =center>0<td val
13bc0 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
13bd0 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 4d  nter>4.    <td>M
13be0 61 67 69 63 20 6e 75 6d 62 65 72 2e 20 20 30 78  agic number.  0x
13bf0 33 37 37 66 30 36 38 32 20 6f 72 20 30 78 33 37  377f0682 or 0x37
13c00 37 66 30 36 38 33 0a 3c 74 72 3e 3c 74 64 20 76  7f0683.<tr><td v
13c10 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
13c20 63 65 6e 74 65 72 3e 34 3c 74 64 20 76 61 6c 69  center>4<td vali
13c30 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
13c40 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 46 69  ter>4.    <td>Fi
13c50 6c 65 20 66 6f 72 6d 61 74 20 76 65 72 73 69 6f  le format versio
13c60 6e 2e 20 20 43 75 72 72 65 6e 74 6c 79 20 33 30  n.  Currently 30
13c70 30 37 30 30 30 2e 0a 3c 74 72 3e 3c 74 64 20 76  07000..<tr><td v
13c80 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
13c90 63 65 6e 74 65 72 3e 38 3c 74 64 20 76 61 6c 69  center>8<td vali
13ca0 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
13cb0 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 44 61  ter>4.    <td>Da
13cc0 74 61 62 61 73 65 20 70 61 67 65 20 73 69 7a 65  tabase page size
13cd0 2e 20 20 45 78 61 6d 70 6c 65 3a 20 31 30 32 34  .  Example: 1024
13ce0 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d  .<tr><td valign=
13cf0 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
13d00 3e 31 32 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  >12<td valign=to
13d10 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34  p align=center>4
13d20 0a 20 20 20 20 3c 74 64 3e 43 68 65 63 6b 70 6f  .    <td>Checkpo
13d30 69 6e 74 20 73 65 71 75 65 6e 63 65 20 6e 75 6d  int sequence num
13d40 62 65 72 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  ber.<tr><td vali
13d50 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
13d60 74 65 72 3e 31 36 3c 74 64 20 76 61 6c 69 67 6e  ter>16<td valign
13d70 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
13d80 72 3e 34 0a 20 20 20 20 3c 74 64 3e 53 61 6c 74  r>4.    <td>Salt
13d90 2d 31 3a 20 72 61 6e 64 6f 6d 20 69 6e 74 65 67  -1: random integ
13da0 65 72 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 77  er incremented w
13db0 69 74 68 20 65 61 63 68 20 63 68 65 63 6b 70 6f  ith each checkpo
13dc0 69 6e 74 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  int.<tr><td vali
13dd0 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
13de0 74 65 72 3e 32 30 3c 74 64 20 76 61 6c 69 67 6e  ter>20<td valign
13df0 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
13e00 72 3e 34 0a 20 20 20 20 3c 74 64 3e 53 61 6c 74  r>4.    <td>Salt
13e10 2d 32 3a 20 61 20 64 69 66 66 65 72 65 6e 74 20  -2: a different 
13e20 72 61 6e 64 6f 6d 20 6e 75 6d 62 65 72 20 66 6f  random number fo
13e30 72 20 65 61 63 68 20 63 68 65 63 6b 70 6f 69 6e  r each checkpoin
13e40 74 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  t.<tr><td valign
13e50 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
13e60 72 3e 32 34 3c 74 64 20 76 61 6c 69 67 6e 3d 74  r>24<td valign=t
13e70 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
13e80 34 0a 20 20 20 20 3c 74 64 3e 43 68 65 63 6b 73  4.    <td>Checks
13e90 75 6d 2d 31 3a 20 46 69 72 73 74 20 70 61 72 74  um-1: First part
13ea0 20 6f 66 20 61 20 63 68 65 63 6b 73 75 6d 20 6f   of a checksum o
13eb0 6e 20 74 68 65 20 66 69 72 73 74 20 32 34 20 62  n the first 24 b
13ec0 79 74 65 73 20 6f 66 20 68 65 61 64 65 72 0a 3c  ytes of header.<
13ed0 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
13ee0 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32  p align=center>2
13ef0 38 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  8<td valign=top 
13f00 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20  align=center>4. 
13f10 20 20 20 3c 74 64 3e 43 68 65 63 6b 73 75 6d 2d     <td>Checksum-
13f20 32 3a 20 53 65 63 6f 6e 64 20 70 61 72 74 20 6f  2: Second part o
13f30 66 20 74 68 65 20 63 68 65 63 6b 73 75 6d 20 6f  f the checksum o
13f40 6e 20 74 68 65 20 66 69 72 73 74 20 32 34 20 62  n the first 24 b
13f50 79 74 65 73 20 6f 66 20 68 65 61 64 65 72 0a 3c  ytes of header.<
13f60 2f 74 61 62 6c 65 3e 0a 3c 2f 63 65 6e 74 65 72  /table>.</center
13f70 3e 29 5e 0a 0a 3c 70 3e 5e 49 6d 6d 65 64 69 61  >)^..<p>^Immedia
13f80 74 65 6c 79 20 66 6f 6c 6c 6f 77 69 6e 67 20 74  tely following t
13f90 68 65 20 77 61 6c 2d 68 65 61 64 65 72 20 61 72  he wal-header ar
13fa0 65 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 66  e zero or more f
13fb0 72 61 6d 65 73 2e 20 5e 45 61 63 68 0a 66 72 61  rames. ^Each.fra
13fc0 6d 65 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61  me consists of a
13fd0 20 32 34 2d 62 79 74 65 20 66 72 61 6d 65 2d 68   24-byte frame-h
13fe0 65 61 64 65 72 20 66 6f 6c 6c 6f 77 65 64 20 62  eader followed b
13ff0 79 20 61 20 3c 69 3e 70 61 67 65 2d 73 69 7a 65  y a <i>page-size
14000 3c 2f 69 3e 20 62 79 74 65 73 0a 6f 66 20 70 61  </i> bytes.of pa
14010 67 65 20 64 61 74 61 2e 20 5e 28 54 68 65 20 66  ge data. ^(The f
14020 72 61 6d 65 2d 68 65 61 64 65 72 20 69 73 20 73  rame-header is s
14030 69 78 20 62 69 67 2d 65 6e 64 69 61 6e 20 33 32  ix big-endian 32
14040 2d 62 69 74 20 75 6e 73 69 67 6e 65 64 20 0a 69  -bit unsigned .i
14050 6e 74 65 67 65 72 20 76 61 6c 75 65 73 2c 20 61  nteger values, a
14060 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 63 65 6e  s follows:..<cen
14070 74 65 72 3e 0a 3c 69 3e 57 41 4c 20 46 72 61 6d  ter>.<i>WAL Fram
14080 65 20 48 65 61 64 65 72 20 46 6f 72 6d 61 74 3c  e Header Format<
14090 2f 69 3e 3c 62 72 3e 0a 3c 74 61 62 6c 65 20 77  /i><br>.<table w
140a0 69 64 74 68 3d 22 38 30 25 22 20 62 6f 72 64 65  idth="80%" borde
140b0 72 3d 31 3e 0a 3c 74 72 3e 3c 74 68 3e 4f 66 66  r=1>.<tr><th>Off
140c0 73 65 74 3c 74 68 3e 53 69 7a 65 3c 74 68 3e 44  set<th>Size<th>D
140d0 65 73 63 72 69 70 74 69 6f 6e 0a 3c 74 72 3e 3c  escription.<tr><
140e0 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
140f0 69 67 6e 3d 63 65 6e 74 65 72 3e 30 3c 74 64 20  ign=center>0<td 
14100 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
14110 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74  =center>4.    <t
14120 64 3e 50 61 67 65 20 6e 75 6d 62 65 72 0a 3c 74  d>Page number.<t
14130 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
14140 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 3c   align=center>4<
14150 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
14160 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20  ign=center>4.   
14170 20 3c 74 64 3e 46 6f 72 20 63 6f 6d 6d 69 74 20   <td>For commit 
14180 72 65 63 6f 72 64 73 2c 20 74 68 65 20 73 69 7a  records, the siz
14190 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  e of the databas
141a0 65 20 66 69 6c 65 20 69 6e 20 70 61 67 65 73 0a  e file in pages.
141b0 20 20 20 20 20 20 20 20 61 66 74 65 72 20 74 68          after th
141c0 65 20 63 6f 6d 6d 69 74 2e 20 20 46 6f 72 20 61  e commit.  For a
141d0 6c 6c 20 6f 74 68 65 72 20 72 65 63 6f 72 64 73  ll other records
141e0 2c 20 7a 65 72 6f 2e 0a 3c 74 72 3e 3c 74 64 20  , zero..<tr><td 
141f0 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
14200 3d 63 65 6e 74 65 72 3e 38 3c 74 64 20 76 61 6c  =center>8<td val
14210 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
14220 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 53  nter>4.    <td>S
14230 61 6c 74 2d 31 20 63 6f 70 69 65 64 20 66 72 6f  alt-1 copied fro
14240 6d 20 74 68 65 20 57 41 4c 20 68 65 61 64 65 72  m the WAL header
14250 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d  .<tr><td valign=
14260 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
14270 3e 31 32 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  >12<td valign=to
14280 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34  p align=center>4
14290 0a 20 20 20 20 3c 74 64 3e 53 61 6c 74 2d 32 20  .    <td>Salt-2 
142a0 63 6f 70 69 65 64 20 66 72 6f 6d 20 74 68 65 20  copied from the 
142b0 57 41 4c 20 68 65 61 64 65 72 0a 3c 74 72 3e 3c  WAL header.<tr><
142c0 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
142d0 69 67 6e 3d 63 65 6e 74 65 72 3e 31 36 3c 74 64  ign=center>16<td
142e0 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
142f0 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c  n=center>4.    <
14300 74 64 3e 43 68 65 63 6b 73 75 6d 2d 31 3a 20 20  td>Checksum-1:  
14310 43 75 6d 75 6c 61 74 69 76 65 20 63 68 65 63 6b  Cumulative check
14320 73 75 6d 20 75 70 20 74 68 72 6f 75 67 68 20 61  sum up through a
14330 6e 64 20 69 6e 63 6c 75 64 69 6e 67 20 74 68 69  nd including thi
14340 73 20 70 61 67 65 0a 3c 74 72 3e 3c 74 64 20 76  s page.<tr><td v
14350 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
14360 63 65 6e 74 65 72 3e 32 30 3c 74 64 20 76 61 6c  center>20<td val
14370 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
14380 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 43  nter>4.    <td>C
14390 68 65 63 6b 73 75 6d 2d 32 3a 20 20 53 65 63 6f  hecksum-2:  Seco
143a0 6e 64 20 68 61 6c 66 20 6f 66 20 74 68 65 20 63  nd half of the c
143b0 75 6d 75 6c 61 74 69 76 65 20 63 68 65 63 6b 73  umulative checks
143c0 75 6d 2e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 63  um..</table>.</c
143d0 65 6e 74 65 72 3e 29 5e 0a 0a 5e 28 3c 70 3e 41  enter>)^..^(<p>A
143e0 20 66 72 61 6d 65 20 69 73 20 63 6f 6e 73 69 64   frame is consid
143f0 65 72 65 64 20 76 61 6c 69 64 20 69 66 20 61 6e  ered valid if an
14400 64 20 6f 6e 6c 79 20 69 66 20 74 68 65 20 66 6f  d only if the fo
14410 6c 6c 6f 77 69 6e 67 20 63 6f 6e 64 69 74 69 6f  llowing conditio
14420 6e 73 20 61 72 65 0a 74 72 75 65 3a 3c 2f 70 3e  ns are.true:</p>
14430 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 3c 70 3e 54 68  ..<ol>.<li><p>Th
14440 65 20 73 61 6c 74 2d 31 20 61 6e 64 20 73 61 6c  e salt-1 and sal
14450 74 2d 32 20 76 61 6c 75 65 73 20 69 6e 20 74 68  t-2 values in th
14460 65 20 66 72 61 6d 65 2d 68 65 61 64 65 72 20 6d  e frame-header m
14470 61 74 63 68 0a 20 20 20 20 20 20 20 73 61 6c 74  atch.       salt
14480 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 77   values in the w
14490 61 6c 2d 68 65 61 64 65 72 3c 2f 70 3e 3c 2f 6c  al-header</p></l
144a0 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 54 68 65 20 63  i>..<li><p>The c
144b0 68 65 63 6b 73 75 6d 20 76 61 6c 75 65 73 20 69  hecksum values i
144c0 6e 20 74 68 65 20 66 69 6e 61 6c 20 38 20 62 79  n the final 8 by
144d0 74 65 73 20 6f 66 20 74 68 65 20 66 72 61 6d 65  tes of the frame
144e0 2d 68 65 61 64 65 72 0a 20 20 20 20 20 20 20 65  -header.       e
144f0 78 61 63 74 6c 79 20 6d 61 74 63 68 20 74 68 65  xactly match the
14500 20 63 68 65 63 6b 73 75 6d 20 63 6f 6d 70 75 74   checksum comput
14510 65 64 20 63 6f 6e 73 65 63 75 74 69 76 65 6c 79  ed consecutively
14520 20 6f 6e 20 74 68 65 0a 20 20 20 20 20 20 20 66   on the.       f
14530 69 72 73 74 20 32 34 20 62 79 74 65 73 20 6f 66  irst 24 bytes of
14540 20 74 68 65 20 57 41 4c 20 68 65 61 64 65 72 20   the WAL header 
14550 61 6e 64 20 74 68 65 20 66 69 72 73 74 20 38 20  and the first 8 
14560 62 79 74 65 73 20 61 6e 64 0a 20 20 20 20 20 20  bytes and.      
14570 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
14580 61 6c 6c 20 66 72 61 6d 65 73 0a 20 20 20 20 20  all frames.     
14590 20 20 75 70 20 74 6f 20 61 6e 64 20 69 6e 63 6c    up to and incl
145a0 75 64 69 6e 67 20 74 68 65 20 63 75 72 72 65 6e  uding the curren
145b0 74 20 66 72 61 6d 65 2e 3c 2f 70 3e 3c 2f 6c 69  t frame.</p></li
145c0 3e 3c 2f 6c 69 3e 0a 3c 2f 6f 6c 3e 29 5e 0a 0a  ></li>.</ol>)^..
145d0 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
145e0 20 77 61 6c 63 6b 73 6d 20 7b 57 41 4c 20 63 68   walcksm {WAL ch
145f0 65 63 6b 73 75 6d 20 61 6c 67 6f 72 69 74 68 6d  ecksum algorithm
14600 7d 3c 2f 74 63 6c 3e 0a 3c 68 32 3e 43 68 65 63  }</tcl>.<h2>Chec
14610 6b 73 75 6d 20 41 6c 67 6f 72 69 74 68 6d 3c 2f  ksum Algorithm</
14620 68 32 3e 0a 0a 3c 70 3e 54 68 65 20 63 68 65 63  h2>..<p>The chec
14630 6b 73 75 6d 20 69 73 20 63 6f 6d 70 75 74 65 64  ksum is computed
14640 20 62 79 20 69 6e 74 65 72 70 72 65 74 69 6e 67   by interpreting
14650 20 74 68 65 20 69 6e 70 75 74 20 61 73 0a 61 6e   the input as.an
14660 20 65 76 65 6e 20 6e 75 6d 62 65 72 20 6f 66 20   even number of 
14670 75 6e 73 69 67 6e 65 64 20 33 32 2d 62 69 74 20  unsigned 32-bit 
14680 69 6e 74 65 67 65 72 73 3a 20 78 28 30 29 20 74  integers: x(0) t
14690 68 72 6f 75 67 68 20 78 28 4e 29 2e 0a 5e 54 68  hrough x(N)..^Th
146a0 65 20 33 32 2d 62 69 74 20 69 6e 74 65 67 65 72  e 32-bit integer
146b0 73 20 61 72 65 20 62 69 67 2d 65 6e 64 69 61 6e  s are big-endian
146c0 20 69 66 20 74 68 65 0a 6d 61 67 69 63 20 6e 75   if the.magic nu
146d0 6d 62 65 72 20 69 6e 20 74 68 65 20 66 69 72 73  mber in the firs
146e0 74 20 34 20 62 79 74 65 73 20 6f 66 20 74 68 65  t 4 bytes of the
146f0 20 57 41 4c 20 68 65 61 64 65 72 20 69 73 20 30   WAL header is 0
14700 78 33 37 37 66 30 36 38 33 20 61 6e 64 0a 74 68  x377f0683 and.th
14710 65 20 69 6e 74 65 67 65 72 73 20 61 72 65 20 6c  e integers are l
14720 69 74 74 6c 65 2d 65 6e 64 69 61 6e 20 69 66 20  ittle-endian if 
14730 74 68 65 20 6d 61 67 69 63 20 6e 75 6d 62 65 72  the magic number
14740 20 69 73 20 30 78 33 37 37 66 30 36 38 32 2e 0a   is 0x377f0682..
14750 5e 54 68 65 20 63 68 65 63 6b 73 75 6d 20 76 61  ^The checksum va
14760 6c 75 65 73 20 61 72 65 20 61 6c 77 61 79 73 20  lues are always 
14770 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 66 72  stored in the fr
14780 61 6d 65 20 68 65 61 64 65 72 20 69 6e 20 61 0a  ame header in a.
14790 62 69 67 2d 65 6e 64 69 61 6e 20 66 6f 72 6d 61  big-endian forma
147a0 74 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20  t regardless of 
147b0 77 68 69 63 68 20 62 79 74 65 20 6f 72 64 65 72  which byte order
147c0 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6d 70   is used to comp
147d0 75 74 65 0a 74 68 65 20 63 68 65 63 6b 73 75 6d  ute.the checksum
147e0 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 63 68  .</p>..<p>The ch
147f0 65 63 6b 73 75 6d 20 61 6c 67 6f 72 69 74 68 6d  ecksum algorithm
14800 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20   only works for 
14810 63 6f 6e 74 65 6e 74 20 77 68 69 63 68 20 69 73  content which is
14820 20 61 20 6d 75 6c 74 69 70 6c 65 20 6f 66 0a 38   a multiple of.8
14830 20 62 79 74 65 73 20 69 6e 20 6c 65 6e 67 74 68   bytes in length
14840 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .  In other word
14850 73 2c 20 69 66 20 74 68 65 20 69 6e 70 75 74 73  s, if the inputs
14860 20 61 72 65 20 78 28 30 29 20 74 68 72 6f 75 67   are x(0) throug
14870 68 20 78 28 4e 29 0a 74 68 65 6e 20 4e 20 6d 75  h x(N).then N mu
14880 73 74 20 62 65 20 6f 64 64 2e 0a 5e 28 54 68 65  st be odd..^(The
14890 20 63 68 65 63 6b 73 75 6d 20 61 6c 67 6f 72 69   checksum algori
148a0 74 68 6d 20 69 73 20 61 73 20 66 6f 6c 6c 6f 77  thm is as follow
148b0 73 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  s:..<blockquote>
148c0 3c 70 72 65 3e 20 0a 73 30 20 3d 20 73 31 20 3d  <pre> .s0 = s1 =
148d0 20 30 0a 66 6f 72 20 69 20 66 72 6f 6d 20 30 20   0.for i from 0 
148e0 74 6f 20 6e 2d 31 20 73 74 65 70 20 32 3a 0a 20  to n-1 step 2:. 
148f0 20 20 73 30 20 2b 3d 20 78 28 69 29 20 2b 20 73    s0 += x(i) + s
14900 31 3b 0a 20 20 20 73 31 20 2b 3d 20 78 28 69 2b  1;.   s1 += x(i+
14910 31 29 20 2b 20 73 30 3b 0a 65 6e 64 66 6f 72 0a  1) + s0;.endfor.
14920 23 20 72 65 73 75 6c 74 20 69 6e 20 73 30 20 61  # result in s0 a
14930 6e 64 20 73 31 0a 3c 2f 70 72 65 3e 3c 2f 62 6c  nd s1.</pre></bl
14940 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e  ockquote>)^..<p>
14950 5e 54 68 65 20 6f 75 74 70 75 74 73 20 73 30 20  ^The outputs s0 
14960 61 6e 64 20 73 31 20 61 72 65 20 62 6f 74 68 20  and s1 are both 
14970 77 65 69 67 68 74 65 64 20 63 68 65 63 6b 73 75  weighted checksu
14980 6d 73 20 75 73 69 6e 67 20 46 69 62 6f 6e 61 63  ms using Fibonac
14990 63 69 20 77 65 69 67 68 74 73 0a 69 6e 20 72 65  ci weights.in re
149a0 76 65 72 73 65 20 6f 72 64 65 72 2e 20 20 28 5e  verse order.  (^
149b0 54 68 65 20 6c 61 72 67 65 73 74 20 46 69 62 6f  The largest Fibo
149c0 6e 61 63 63 69 20 77 65 69 67 68 74 20 6f 63 63  nacci weight occ
149d0 75 72 73 20 6f 6e 20 74 68 65 20 66 69 72 73 74  urs on the first
149e0 20 65 6c 65 6d 65 6e 74 0a 6f 66 20 74 68 65 20   element.of the 
149f0 73 65 71 75 65 6e 63 65 20 62 65 69 6e 67 20 73  sequence being s
14a00 75 6d 6d 65 64 2e 29 20 20 5e 54 68 65 20 73 31  ummed.)  ^The s1
14a10 20 76 61 6c 75 65 20 73 70 61 6e 73 20 61 6c 6c   value spans all
14a20 20 33 32 2d 62 69 74 20 69 6e 74 65 67 65 72 0a   32-bit integer.
14a30 74 65 72 6d 73 20 6f 66 20 74 68 65 20 73 65 71  terms of the seq
14a40 75 65 6e 63 65 20 77 68 65 72 65 61 73 20 73 30  uence whereas s0
14a50 20 6f 6d 69 74 73 20 74 68 65 20 66 69 6e 61 6c   omits the final
14a60 20 74 65 72 6d 2e 3c 2f 70 3e 0a 0a 3c 68 32 3e   term.</p>..<h2>
14a70 43 68 65 63 6b 70 6f 69 6e 74 20 41 6c 67 6f 72  Checkpoint Algor
14a80 69 74 68 6d 3c 2f 68 32 3e 0a 0a 3c 70 3e 5e 4f  ithm</h2>..<p>^O
14a90 6e 20 61 20 5b 63 68 65 63 6b 70 6f 69 6e 74 5d  n a [checkpoint]
14aa0 2c 20 74 68 65 20 57 41 4c 20 69 73 20 66 69 72  , the WAL is fir
14ab0 73 74 20 66 6c 75 73 68 65 64 20 74 6f 20 70 65  st flushed to pe
14ac0 72 73 69 73 74 65 6e 74 20 73 74 6f 72 61 67 65  rsistent storage
14ad0 20 75 73 69 6e 67 0a 74 68 65 20 78 53 79 6e 63   using.the xSync
14ae0 20 6d 65 74 68 6f 64 20 6f 66 20 74 68 65 20 5b   method of the [
14af0 73 71 6c 69 74 65 33 5f 69 6f 5f 6d 65 74 68 6f  sqlite3_io_metho
14b00 64 73 20 7c 20 56 46 53 5d 2e 20 0a 5e 54 68 65  ds | VFS]. .^The
14b10 6e 20 76 61 6c 69 64 20 63 6f 6e 74 65 6e 74 20  n valid content 
14b20 6f 66 20 74 68 65 20 57 41 4c 20 69 73 20 74 72  of the WAL is tr
14b30 61 6e 73 66 65 72 72 65 64 20 69 6e 74 6f 20 74  ansferred into t
14b40 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
14b50 2e 0a 5e 46 69 6e 61 6c 6c 79 2c 20 74 68 65 20  ..^Finally, the 
14b60 64 61 74 61 62 61 73 65 20 69 73 20 66 6c 75 73  database is flus
14b70 68 65 64 20 74 6f 20 70 65 72 73 69 73 74 65 6e  hed to persisten
14b80 74 20 73 74 6f 72 61 67 65 20 75 73 69 6e 67 20  t storage using 
14b90 61 6e 6f 74 68 65 72 0a 78 53 79 6e 63 20 6d 65  another.xSync me
14ba0 74 68 6f 64 20 63 61 6c 6c 2e 0a 54 68 65 20 78  thod call..The x
14bb0 53 79 6e 63 20 6f 70 65 72 61 74 69 6f 6e 73 20  Sync operations 
14bc0 73 65 72 76 65 20 61 73 20 77 72 69 74 65 20 62  serve as write b
14bd0 61 72 72 69 65 72 73 20 2d 20 61 6c 6c 20 77 72  arriers - all wr
14be0 69 74 65 73 20 6c 61 75 6e 63 68 65 64 0a 62 65  ites launched.be
14bf0 66 6f 72 65 20 74 68 65 20 78 53 79 6e 63 20 6d  fore the xSync m
14c00 75 73 74 20 63 6f 6d 70 6c 65 74 65 20 62 65 66  ust complete bef
14c10 6f 72 65 20 61 6e 79 20 77 72 69 74 65 20 74 68  ore any write th
14c20 61 74 20 6c 61 75 6e 63 68 65 73 20 61 66 74 65  at launches afte
14c30 72 20 74 68 65 0a 78 53 79 6e 63 20 62 65 67 69  r the.xSync begi
14c40 6e 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 66 74  ns.</p>..<p>^Aft
14c50 65 72 20 61 20 63 68 65 63 6b 70 6f 69 6e 74 2c  er a checkpoint,
14c60 20 6e 65 77 20 77 72 69 74 65 20 74 72 61 6e 73   new write trans
14c70 61 63 74 69 6f 6e 73 20 6f 76 65 72 77 72 69 74  actions overwrit
14c80 65 0a 74 68 65 20 57 41 4c 20 66 69 6c 65 20 66  e.the WAL file f
14c90 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e  rom the beginnin
14ca0 67 2e 20 20 5e 41 74 20 74 68 65 20 73 74 61 72  g.  ^At the star
14cb0 74 20 6f 66 20 74 68 65 20 66 69 72 73 74 20 6e  t of the first n
14cc0 65 77 0a 77 72 69 74 65 20 74 72 61 6e 73 61 63  ew.write transac
14cd0 74 69 6f 6e 2c 20 74 68 65 20 57 41 4c 20 68 65  tion, the WAL he
14ce0 61 64 65 72 20 73 61 6c 74 2d 31 20 76 61 6c 75  ader salt-1 valu
14cf0 65 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  e is incremented
14d00 0a 61 6e 64 20 74 68 65 20 73 61 6c 74 2d 32 20  .and the salt-2 
14d10 76 61 6c 75 65 20 69 73 20 72 61 6e 64 6f 6d 69  value is randomi
14d20 7a 65 64 2e 20 20 54 68 65 73 65 20 63 68 61 6e  zed.  These chan
14d30 67 65 73 20 74 6f 20 74 68 65 20 73 61 6c 74 73  ges to the salts
14d40 20 69 6e 76 61 6c 69 64 61 74 65 0a 6f 6c 64 20   invalidate.old 
14d50 66 72 61 6d 65 73 20 69 6e 20 74 68 65 20 57 41  frames in the WA
14d60 4c 20 74 68 61 74 20 68 61 76 65 20 61 6c 72 65  L that have alre
14d70 61 64 79 20 62 65 65 6e 20 63 68 65 63 6b 70 6f  ady been checkpo
14d80 69 6e 74 65 64 20 62 75 74 20 6e 6f 74 20 79 65  inted but not ye
14d90 74 0a 6f 76 65 72 77 72 69 74 74 65 6e 2c 20 61  t.overwritten, a
14da0 6e 64 20 70 72 65 76 65 6e 74 20 74 68 65 6d 20  nd prevent them 
14db0 66 72 6f 6d 20 62 65 69 6e 67 20 63 68 65 63 6b  from being check
14dc0 70 6f 69 6e 74 65 64 20 61 67 61 69 6e 2e 3c 2f  pointed again.</
14dd0 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
14de0 6d 65 6e 74 20 77 61 6c 72 65 61 64 20 7b 57 41  ment walread {WA
14df0 4c 20 72 65 61 64 20 61 6c 67 6f 72 69 74 68 6d  L read algorithm
14e00 7d 3c 2f 74 63 6c 3e 0a 3c 68 32 3e 52 65 61 64  }</tcl>.<h2>Read
14e10 65 72 20 41 6c 67 6f 72 69 74 68 6d 3c 2f 68 32  er Algorithm</h2
14e20 3e 0a 0a 3c 70 3e 5e 28 54 6f 20 72 65 61 64 20  >..<p>^(To read 
14e30 61 20 70 61 67 65 20 66 72 6f 6d 20 74 68 65 20  a page from the 
14e40 64 61 74 61 62 61 73 65 20 28 63 61 6c 6c 20 69  database (call i
14e50 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20 50 29  t page number P)
14e60 2c 20 61 20 72 65 61 64 65 72 0a 66 69 72 73 74  , a reader.first
14e70 20 63 68 65 63 6b 73 20 74 68 65 20 57 41 4c 20   checks the WAL 
14e80 74 6f 20 73 65 65 20 69 66 20 69 74 20 63 6f 6e  to see if it con
14e90 74 61 69 6e 73 20 70 61 67 65 20 50 2e 20 20 49  tains page P.  I
14ea0 66 20 73 6f 2c 20 74 68 65 6e 20 74 68 65 0a 6c  f so, then the.l
14eb0 61 73 74 20 76 61 6c 69 64 20 69 6e 73 74 61 6e  ast valid instan
14ec0 63 65 20 6f 66 20 70 61 67 65 20 50 20 74 68 61  ce of page P tha
14ed0 74 20 69 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79  t is followed by
14ee0 20 61 20 63 6f 6d 6d 69 74 20 66 72 61 6d 65 0a   a commit frame.
14ef0 6f 72 20 69 73 20 61 20 63 6f 6d 6d 69 74 20 66  or is a commit f
14f00 72 61 6d 65 20 69 74 73 65 6c 66 20 62 65 63 6f  rame itself beco
14f10 6d 65 73 20 74 68 65 20 76 61 6c 75 65 20 72 65  mes the value re
14f20 61 64 2e 29 5e 20 20 5e 49 66 20 74 68 65 20 57  ad.)^  ^If the W
14f30 41 4c 0a 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 63  AL.contains no c
14f40 6f 70 69 65 73 20 6f 66 20 70 61 67 65 20 50 20  opies of page P 
14f50 74 68 61 74 20 61 72 65 20 76 61 6c 69 64 20 61  that are valid a
14f60 6e 64 20 77 68 69 63 68 20 61 72 65 20 61 20 63  nd which are a c
14f70 6f 6d 6d 69 74 0a 66 72 61 6d 65 20 6f 72 20 61  ommit.frame or a
14f80 72 65 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61  re followed by a
14f90 20 63 6f 6d 6d 69 74 20 66 72 61 6d 65 2c 20 74   commit frame, t
14fa0 68 65 6e 20 70 61 67 65 20 50 20 69 73 20 72 65  hen page P is re
14fb0 61 64 20 66 72 6f 6d 0a 74 68 65 20 64 61 74 61  ad from.the data
14fc0 62 61 73 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a  base file.</p>..
14fd0 3c 70 3e 54 6f 20 73 74 61 72 74 20 61 20 72 65  <p>To start a re
14fe0 61 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20  ad transaction, 
14ff0 74 68 65 20 72 65 61 64 65 72 20 72 65 63 6f 72  the reader recor
15000 64 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20  ds the index of 
15010 74 68 65 20 6c 61 73 74 0a 76 61 6c 69 64 20 66  the last.valid f
15020 72 61 6d 65 20 69 6e 20 74 68 65 20 57 41 4c 2e  rame in the WAL.
15030 20 20 54 68 65 20 72 65 61 64 65 72 20 75 73 65    The reader use
15040 73 20 74 68 69 73 20 72 65 63 6f 72 64 65 64 20  s this recorded 
15050 22 6d 78 46 72 61 6d 65 22 20 76 61 6c 75 65 0a  "mxFrame" value.
15060 66 6f 72 20 61 6c 6c 20 73 75 62 73 65 71 75 65  for all subseque
15070 6e 74 20 72 65 61 64 20 6f 70 65 72 61 74 69 6f  nt read operatio
15080 6e 73 2e 20 20 4e 65 77 20 74 72 61 6e 73 61 63  ns.  New transac
15090 74 69 6f 6e 73 20 63 61 6e 20 62 65 20 61 70 70  tions can be app
150a0 65 6e 64 65 64 0a 74 6f 20 74 68 65 20 57 41 4c  ended.to the WAL
150b0 2c 20 62 75 74 20 61 73 20 6c 6f 6e 67 20 61 73  , but as long as
150c0 20 74 68 65 20 72 65 61 64 65 72 20 75 73 65 73   the reader uses
150d0 20 69 74 73 20 6f 72 69 67 69 6e 61 6c 20 6d 78   its original mx
150e0 46 72 61 6d 65 20 76 61 6c 75 65 0a 61 6e 64 20  Frame value.and 
150f0 69 67 6e 6f 72 65 73 20 73 75 62 73 65 71 75 65  ignores subseque
15100 6e 74 6c 79 20 61 70 70 65 6e 64 65 64 20 63 6f  ntly appended co
15110 6e 74 65 6e 74 2c 20 74 68 65 20 72 65 61 64 65  ntent, the reade
15120 72 20 77 69 6c 6c 20 73 65 65 20 61 20 0a 63 6f  r will see a .co
15130 6e 73 69 73 74 65 6e 74 20 73 6e 61 70 73 68 6f  nsistent snapsho
15140 74 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  t of the databas
15150 65 20 66 72 6f 6d 20 61 20 73 69 6e 67 6c 65 20  e from a single 
15160 70 6f 69 6e 74 20 69 6e 20 74 69 6d 65 2e 20 20  point in time.  
15170 0a 5e 54 68 69 73 20 74 65 63 68 6e 69 71 75 65  .^This technique
15180 20 61 6c 6c 6f 77 73 20 6d 75 6c 74 69 70 6c 65   allows multiple
15190 20 63 6f 6e 63 75 72 72 65 6e 74 20 72 65 61 64   concurrent read
151a0 65 72 73 20 74 6f 20 76 69 65 77 20 64 69 66 66  ers to view diff
151b0 65 72 65 6e 74 20 0a 76 65 72 73 69 6f 6e 73 20  erent .versions 
151c0 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
151d0 63 6f 6e 74 65 6e 74 20 73 69 6d 75 6c 74 61 6e  content simultan
151e0 65 6f 75 73 6c 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e  eously.</p>..<p>
151f0 54 68 65 20 72 65 61 64 65 72 20 61 6c 67 6f 72  The reader algor
15200 69 74 68 6d 20 69 6e 20 74 68 65 20 70 72 65 76  ithm in the prev
15210 69 6f 75 73 20 70 61 72 61 67 72 61 70 68 73 20  ious paragraphs 
15220 77 6f 72 6b 73 20 63 6f 72 72 65 63 74 6c 79 2c  works correctly,
15230 20 62 75 74 20 0a 62 65 63 61 75 73 65 20 66 72   but .because fr
15240 61 6d 65 73 20 66 6f 72 20 70 61 67 65 20 50 20  ames for page P 
15250 63 61 6e 20 61 70 70 65 61 72 20 61 6e 79 77 68  can appear anywh
15260 65 72 65 20 77 69 74 68 69 6e 20 74 68 65 20 57  ere within the W
15270 41 4c 2c 20 74 68 65 0a 72 65 61 64 65 72 20 68  AL, the.reader h
15280 61 73 20 74 6f 20 73 63 61 6e 20 74 68 65 20 65  as to scan the e
15290 6e 74 69 72 65 20 57 41 4c 20 6c 6f 6f 6b 69 6e  ntire WAL lookin
152a0 67 20 66 6f 72 20 70 61 67 65 20 50 20 66 72 61  g for page P fra
152b0 6d 65 73 2e 20 20 49 66 20 74 68 65 0a 57 41 4c  mes.  If the.WAL
152c0 20 69 73 20 6c 61 72 67 65 20 28 6d 75 6c 74 69   is large (multi
152d0 70 6c 65 20 6d 65 67 61 62 79 74 65 73 20 69 73  ple megabytes is
152e0 20 74 79 70 69 63 61 6c 29 20 74 68 61 74 20 73   typical) that s
152f0 63 61 6e 20 63 61 6e 20 62 65 20 73 6c 6f 77 2c  can can be slow,
15300 0a 61 6e 64 20 72 65 61 64 20 70 65 72 66 6f 72  .and read perfor
15310 6d 61 6e 63 65 20 73 75 66 66 65 72 73 2e 20 20  mance suffers.  
15320 5e 54 6f 20 6f 76 65 72 63 6f 6d 65 20 74 68 69  ^To overcome thi
15330 73 20 70 72 6f 62 6c 65 6d 2c 20 61 20 73 65 70  s problem, a sep
15340 61 72 61 74 65 0a 64 61 74 61 20 73 74 72 75 63  arate.data struc
15350 74 75 72 65 20 63 61 6c 6c 65 64 20 74 68 65 20  ture called the 
15360 77 61 6c 2d 69 6e 64 65 78 20 69 73 20 6d 61 69  wal-index is mai
15370 6e 74 61 69 6e 65 64 20 74 6f 20 65 78 70 65 64  ntained to exped
15380 69 74 65 20 74 68 65 0a 73 65 61 72 63 68 20 66  ite the.search f
15390 6f 72 20 66 72 61 6d 65 73 20 6f 66 20 61 20 70  or frames of a p
153a0 61 72 74 69 63 75 6c 61 72 20 70 61 67 65 2e 3c  articular page.<
153b0 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  /p>..<tcl>hd_fra
153c0 67 6d 65 6e 74 20 77 61 6c 69 6e 64 65 78 66 6f  gment walindexfo
153d0 72 6d 61 74 20 7b 77 61 6c 2d 69 6e 64 65 78 7d  rmat {wal-index}
153e0 20 7b 57 41 4c 2d 69 6e 64 65 78 20 66 6f 72 6d   {WAL-index form
153f0 61 74 7d 3c 2f 74 63 6c 3e 0a 3c 68 32 3e 57 41  at}</tcl>.<h2>WA
15400 4c 2d 49 6e 64 65 78 20 46 6f 72 6d 61 74 3c 2f  L-Index Format</
15410 68 32 3e 0a 0a 3c 70 3e 43 6f 6e 63 65 70 74 75  h2>..<p>Conceptu
15420 61 6c 6c 79 2c 20 74 68 65 20 77 61 6c 2d 69 6e  ally, the wal-in
15430 64 65 78 20 69 73 20 73 68 61 72 65 64 20 6d 65  dex is shared me
15440 6d 6f 72 79 2c 20 74 68 6f 75 67 68 20 74 68 65  mory, though the
15450 20 63 75 72 72 65 6e 74 0a 56 46 53 20 69 6d 70   current.VFS imp
15460 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20 75 73 65  lementations use
15470 20 61 20 6d 6d 61 70 70 65 64 20 66 69 6c 65 20   a mmapped file 
15480 66 6f 72 20 74 68 65 20 77 61 6c 2d 69 6e 64 65  for the wal-inde
15490 78 2e 20 20 5e 54 68 65 20 6d 6d 61 70 70 65 64  x.  ^The mmapped
154a0 0a 66 69 6c 65 20 69 73 20 69 6e 20 74 68 65 20  .file is in the 
154b0 73 61 6d 65 20 64 69 72 65 63 74 6f 72 79 20 61  same directory a
154c0 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61  s the database a
154d0 6e 64 20 68 61 73 20 74 68 65 20 73 61 6d 65 20  nd has the same 
154e0 6e 61 6d 65 0a 61 73 20 74 68 65 20 64 61 74 61  name.as the data
154f0 62 61 73 65 20 77 69 74 68 20 61 20 22 3c 74 74  base with a "<tt
15500 3e 2d 73 68 6d 3c 2f 74 74 3e 22 20 73 75 66 66  >-shm</tt>" suff
15510 69 78 20 61 70 70 65 6e 64 65 64 2e 20 20 42 65  ix appended.  Be
15520 63 61 75 73 65 0a 74 68 65 20 77 61 6c 2d 69 6e  cause.the wal-in
15530 64 65 78 20 69 73 20 73 68 61 72 65 64 20 6d 65  dex is shared me
15540 6d 6f 72 79 2c 20 53 51 4c 69 74 65 20 64 6f 65  mory, SQLite doe
15550 73 20 6e 6f 74 20 73 75 70 70 6f 72 74 20 0a 5b  s not support .[
15560 50 52 41 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d  PRAGMA journal_m
15570 6f 64 65 20 7c 20 6a 6f 75 72 6e 61 6c 5f 6d 6f  ode | journal_mo
15580 64 65 3d 57 41 4c 5d 20 0a 6f 6e 20 61 20 6e 65  de=WAL] .on a ne
15590 74 77 6f 72 6b 20 66 69 6c 65 73 79 73 74 65 6d  twork filesystem
155a0 20 77 68 65 6e 20 63 6c 69 65 6e 74 73 20 61 72   when clients ar
155b0 65 20 6f 6e 20 64 69 66 66 65 72 65 6e 74 20 6d  e on different m
155c0 61 63 68 69 6e 65 73 2e 0a 41 6c 6c 20 75 73 65  achines..All use
155d0 72 73 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  rs of the databa
155e0 73 65 20 6d 75 73 74 20 62 65 20 61 62 6c 65 20  se must be able 
155f0 74 6f 20 73 68 61 72 65 20 74 68 65 20 73 61 6d  to share the sam
15600 65 20 6d 65 6d 6f 72 79 2e 3c 2f 70 3e 0a 0a 3c  e memory.</p>..<
15610 70 3e 54 68 65 20 70 75 72 70 6f 73 65 20 6f 66  p>The purpose of
15620 20 74 68 65 20 77 61 6c 2d 69 6e 64 65 78 20 69   the wal-index i
15630 73 20 74 6f 20 61 6e 73 77 65 72 20 74 68 69 73  s to answer this
15640 20 71 75 65 73 74 69 6f 6e 20 71 75 69 63 6b 6c   question quickl
15650 79 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75  y:</p>..<blockqu
15660 6f 74 65 3e 3c 69 3e 0a 47 69 76 65 6e 20 61 20  ote><i>.Given a 
15670 70 61 67 65 20 6e 75 6d 62 65 72 20 50 20 61 6e  page number P an
15680 64 20 61 20 6d 61 78 69 6d 75 6d 20 57 41 4c 20  d a maximum WAL 
15690 66 72 61 6d 65 20 69 6e 64 65 78 20 4d 2c 0a 72  frame index M,.r
156a0 65 74 75 72 6e 20 74 68 65 20 6c 61 72 67 65 73  eturn the larges
156b0 74 20 57 41 4c 20 66 72 61 6d 65 20 69 6e 64 65  t WAL frame inde
156c0 78 20 66 6f 72 20 70 61 67 65 20 50 20 74 68 61  x for page P tha
156d0 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 63 65 65  t does not excee
156e0 64 20 4d 2c 20 0a 6f 72 20 72 65 74 75 72 6e 20  d M, .or return 
156f0 4e 55 4c 4c 20 69 66 20 74 68 65 72 65 20 61 72  NULL if there ar
15700 65 20 6e 6f 20 66 72 61 6d 65 73 20 66 6f 72 20  e no frames for 
15710 70 61 67 65 20 50 20 74 68 61 74 20 64 6f 20 6e  page P that do n
15720 6f 74 20 65 78 63 65 65 64 20 4d 2e 0a 3c 2f 69  ot exceed M..</i
15730 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a  ></blockquote>..
15740 3c 70 3e 54 68 65 20 3c 69 3e 4d 3c 2f 69 3e 20  <p>The <i>M</i> 
15750 76 61 6c 75 65 20 69 6e 20 74 68 65 20 70 72 65  value in the pre
15760 76 69 6f 75 73 20 70 61 72 61 67 72 61 70 68 20  vious paragraph 
15770 69 73 20 74 68 65 20 22 6d 78 46 72 61 6d 65 22  is the "mxFrame"
15780 20 76 61 6c 75 65 0a 64 65 66 69 6e 65 64 20 69   value.defined i
15790 6e 20 5b 57 41 4c 20 72 65 61 64 20 61 6c 67 6f  n [WAL read algo
157a0 72 69 74 68 6d 20 7c 20 73 65 63 74 69 6f 6e 20  rithm | section 
157b0 34 2e 34 5d 20 74 68 61 74 20 69 73 20 72 65 61  4.4] that is rea
157c0 64 20 61 74 20 74 68 65 20 73 74 61 72 74 20 0a  d at the start .
157d0 6f 66 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  of a transaction
157e0 20 61 6e 64 20 77 68 69 63 68 20 64 65 66 69 6e   and which defin
157f0 65 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 66  es the maximum f
15800 72 61 6d 65 20 66 72 6f 6d 20 74 68 65 20 57 41  rame from the WA
15810 4c 20 74 68 61 74 20 0a 74 68 65 20 72 65 61 64  L that .the read
15820 65 72 20 77 69 6c 6c 20 75 73 65 2e 3c 2f 70 3e  er will use.</p>
15830 0a 0a 3c 70 3e 54 68 65 20 77 61 6c 2d 69 6e 64  ..<p>The wal-ind
15840 65 78 20 69 73 20 74 72 61 6e 73 69 65 6e 74 2e  ex is transient.
15850 20 20 41 66 74 65 72 20 61 20 63 72 61 73 68 2c    After a crash,
15860 20 74 68 65 20 77 61 6c 2d 69 6e 64 65 78 20 69   the wal-index i
15870 73 0a 72 65 63 6f 6e 73 74 72 75 63 74 65 64 20  s.reconstructed 
15880 66 72 6f 6d 20 74 68 65 20 6f 72 69 67 69 6e 61  from the origina
15890 6c 20 57 41 4c 20 66 69 6c 65 2e 20 20 5e 54 68  l WAL file.  ^Th
158a0 65 20 56 46 53 20 69 73 20 72 65 71 75 69 72 65  e VFS is require
158b0 64 0a 74 6f 20 65 69 74 68 65 72 20 74 72 75 6e  d.to either trun
158c0 63 61 74 65 20 6f 72 20 7a 65 72 6f 20 74 68 65  cate or zero the
158d0 20 68 65 61 64 65 72 20 6f 66 20 74 68 65 20 77   header of the w
158e0 61 6c 2d 69 6e 64 65 78 20 77 68 65 6e 20 74 68  al-index when th
158f0 65 20 6c 61 73 74 0a 63 6f 6e 6e 65 63 74 69 6f  e last.connectio
15900 6e 20 74 6f 20 69 74 20 63 6c 6f 73 65 73 2e 20  n to it closes. 
15910 20 42 65 63 61 75 73 65 20 74 68 65 20 77 61 6c   Because the wal
15920 2d 69 6e 64 65 78 20 69 73 20 74 72 61 6e 73 69  -index is transi
15930 65 6e 74 2c 20 69 74 20 63 61 6e 0a 75 73 65 20  ent, it can.use 
15940 61 6e 20 61 72 63 68 69 74 65 63 74 75 72 65 2d  an architecture-
15950 73 70 65 63 69 66 69 63 20 66 6f 72 6d 61 74 3b  specific format;
15960 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 68 61 76   it does not hav
15970 65 20 74 6f 20 62 65 20 63 72 6f 73 73 2d 70 6c  e to be cross-pl
15980 61 74 66 6f 72 6d 2e 0a 48 65 6e 63 65 2c 20 75  atform..Hence, u
15990 6e 6c 69 6b 65 20 74 68 65 20 64 61 74 61 62 61  nlike the databa
159a0 73 65 20 61 6e 64 20 57 41 4c 20 66 69 6c 65 20  se and WAL file 
159b0 66 6f 72 6d 61 74 73 20 77 68 69 63 68 20 73 74  formats which st
159c0 6f 72 65 20 61 6c 6c 20 76 61 6c 75 65 73 0a 61  ore all values.a
159d0 73 20 62 69 67 20 65 6e 64 69 61 6e 2c 20 74 68  s big endian, th
159e0 65 20 77 61 6c 2d 69 6e 64 65 78 20 73 74 6f 72  e wal-index stor
159f0 65 73 20 6d 75 6c 74 69 2d 62 79 74 65 20 76 61  es multi-byte va
15a00 6c 75 65 73 20 69 6e 20 74 68 65 20 6e 61 74 69  lues in the nati
15a10 76 65 0a 62 79 74 65 20 6f 72 64 65 72 20 6f 66  ve.byte order of
15a20 20 74 68 65 20 68 6f 73 74 20 63 6f 6d 70 75 74   the host comput
15a30 65 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 69 73  er.</p>..<p>This
15a40 20 64 6f 63 75 6d 65 6e 74 20 69 73 20 63 6f 6e   document is con
15a50 63 65 72 6e 65 64 20 77 69 74 68 20 74 68 65 20  cerned with the 
15a60 70 65 72 73 69 73 74 65 6e 74 20 73 74 61 74 65  persistent state
15a70 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
15a80 0a 66 69 6c 65 2c 20 61 6e 64 20 73 69 6e 63 65  .file, and since
15a90 20 74 68 65 20 77 61 6c 2d 69 6e 64 65 78 20 69   the wal-index i
15aa0 73 20 61 20 74 72 61 6e 73 69 65 6e 74 20 73 74  s a transient st
15ab0 72 75 63 74 75 72 65 2c 20 6e 6f 20 66 75 72 74  ructure, no furt
15ac0 68 65 72 20 0a 69 6e 66 6f 72 6d 61 74 69 6f 6e  her .information
15ad0 20 61 62 6f 75 74 20 74 68 65 20 66 6f 72 6d 61   about the forma
15ae0 74 20 6f 66 20 74 68 65 20 77 61 6c 2d 69 6e 64  t of the wal-ind
15af0 65 78 20 77 69 6c 6c 20 62 65 20 70 72 6f 76 69  ex will be provi
15b00 64 65 64 20 68 65 72 65 2e 0a 43 6f 6d 70 6c 65  ded here..Comple
15b10 74 65 20 64 65 74 61 69 6c 73 20 6f 6e 20 74 68  te details on th
15b20 65 20 66 6f 72 6d 61 74 20 6f 66 20 74 68 65 20  e format of the 
15b30 77 61 6c 2d 69 6e 64 65 78 20 61 72 65 20 63 6f  wal-index are co
15b40 6e 74 61 69 6e 65 64 20 77 69 74 68 69 6e 0a 63  ntained within.c
15b50 6f 6d 6d 65 6e 74 73 20 69 6e 20 53 51 4c 69 74  omments in SQLit
15b60 65 20 73 6f 75 72 63 65 20 63 6f 64 65 2e 3c 2f  e source code.</
15b70 70 3e 0a                                         p>.